很多人最开始学习FPGA使用Modelsim进行仿真时候都会遇到Quartus软件编译没有错误的工程,Modelsim编译提示语法错误的情况。
典型现象:
# ** Error: C:/Users/Administrator/Desktop/class12_FSM_hello/rtl/Hello.v(37): (vlog-2730) Undefined variable: 'state'. # # ** Error: C:/Users/Administrator/Desktop/class12_FSM_hello/rtl/Hello.v(74): 'state' already declared in this scope (Hello). # ** Error: D:/altera/13.0/modelsim_ae/win32aloem/vlog failed.
[图片]
问题解析Modelsim和Quartus对语法的分析严谨程度不一样,Modelsim更严谨,或者更像C语言。所有信号必须先定义后使用。所以很多随心所欲写的代码,在Quartus中编译没问题,但是在modelsim中编译可能通不过。举个例子:
reg [24:0]cnt; //定义计数器 //计数器计数进程 always@(posedge Clk50M or negedge Rst_n) if(Rst_n == 1'b0) cnt <= 25'd0; else if(cnt ==25'd24_999_999) cnt <= 25'd0; else cnt <= cnt + 1'b1;
//计数器计数进程 always@(posedge Clk50M or negedge Rst_n) if(Rst_n == 1'b0) cnt <= 25'd0; else if(cnt ==25'd24_999_999) cnt <= 25'd0; else cnt <= cnt + 1'b1; reg [24:0]cnt; //定义计数器
两者的区别仅仅在于,上面的代码是先定义cnt,然后对其进行赋值操作用到了该信号(除赋值操作外,其他任何操作也都算使用该信号),这样写在Quartus软件和Modelsim软件中都是没有问题的,但是下面,先使用了cnt这个信号,后面才来定义,这样的写法,在Quartus软件中没问题,但是Modelsim软件中编译就会报错,提示找不到cnt这个信号。
解决方法大家在写代码时候一定要规范,先定义信号再使用。参考举例代码的上面代码。
是的,我也觉得他和LP电平设置是错误 的。
么么哒,不废话,文档是最好的老师!
这两年Microsemi(ACTEL)势头挺猛吃掉LATTICE一些份额,虽然赶超XILINX断无可能,当然他们专注的领域名有不同,至于ALTERA早就玩云去了。
看了一下I2S的协议,自己实现应该不难,别的帮不了你,送你一个I2S的协议下载吧,
https://www.sparkfun.com/datasheets/BreakoutBoards/I2SBUS.pdf
ChipDebug入站需知
如发现帐号发垃圾帖或垃圾评论的一律封号!
ChipDebug是一个芯片开发调试分享网站 欢迎您的到来!如果您没有帐户请先点击下方按钮进行注册
【Modelsim常见问题】Modelsim报语法错误
很多人最开始学习FPGA使用Modelsim进行仿真时候都会遇到Quartus软件编译没有错误的工程,Modelsim编译提示语法错误的情况。
典型现象:
[图片]
问题解析
Modelsim和Quartus对语法的分析严谨程度不一样,Modelsim更严谨,或者更像C语言。所有信号必须先定义后使用。所以很多随心所欲写的代码,在Quartus中编译没问题,但是在modelsim中编译可能通不过。举个例子:
两者的区别仅仅在于,上面的代码是先定义cnt,然后对其进行赋值操作用到了该信号(除赋值操作外,其他任何操作也都算使用该信号),这样写在Quartus软件和Modelsim软件中都是没有问题的,但是下面,先使用了cnt这个信号,后面才来定义,这样的写法,在Quartus软件中没问题,但是Modelsim软件中编译就会报错,提示找不到cnt这个信号。
解决方法
大家在写代码时候一定要规范,先定义信号再使用。参考举例代码的上面代码。