集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1829|回复: 1

【Modelsim常见问题】vlog-2730 Undefined variable: . already dec...

[复制链接]
荼蘼 发表于 2021-5-11 21:25:59 | 显示全部楼层 |阅读模式
很多人最开始学习FPGA使用Modelsim进行仿真时候都会遇到Quartus软件编译没有错误的工程,Modelsim编译提示语法错误的情况。
典型现象:
  1. # ** Error:  C:/Users/Administrator/Desktop/class12_FSM_hello/rtl/Hello.v(37): (vlog-2730)  Undefined variable: 'state'.
  2.   
  3. #
  4.   
  5. # ** Error:  C:/Users/Administrator/Desktop/class12_FSM_hello/rtl/Hello.v(74): 'state'  already declared in this scope (Hello).
  6.   
  7. # ** Error:  D:/altera/13.0/modelsim_ae/win32aloem/vlog failed.
复制代码


问题解析
Modelsim和Quartus对语法的分析严谨程度不一样,Modelsim更严谨,或者更像C语言。所有信号必须先定义后使用。所以很多随心所欲写的代码,在Quartus中编译没问题,但是在modelsim中编译可能通不过。举个例子:
  1. reg [24:0]cnt; //定义计数器
  2.   
  3.   
  4.     //计数器计数进程                                       
  5.   
  6.     always@(posedge Clk50M or negedge Rst_n)
  7.   
  8.     if(Rst_n == 1'b0)
  9.   
  10.         cnt <= 25'd0;
  11.   
  12.     else if(cnt ==25'd24_999_999)
  13.   
  14.         cnt <= 25'd0;
  15.   
  16.     else
  17.   
  18.         cnt <= cnt + 1'b1;
复制代码

复制代码

两者的区别仅仅在于,左侧代码是先定义cnt,然后对其进行赋值操作用到了该信号(除赋值操作外,其他任何操作也都算使用该信号),这样写在Quartus软件和Modelsim软件中都是没有问题的,但是右侧,先使用了cnt这个信号,后面才来定义,这样的写法,在Quartus软件中没问题,但是Modelsim软件中编译就会报错,提示找不到cnt这个信号。

解决方法
大家在写代码时候一定要规范,先定义信号再使用。参考举例代码的左侧代码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
lihongkun16 发表于 2021-5-12 08:47:43 | 显示全部楼层
【Modelsim常见问题】vlog-2730 Undefined variable: . already dec...
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-16 02:32 , Processed in 0.064432 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表