Verilog仿真遇到的问题

1、Vivado 15.4仿真时编译没有报错,但是仿真不成功,逻辑很简单,full为高电平时,rd_en要拉高,但全程没有拉高!

 

 

 

 

 

 

检查语法发现语句" else if( empty == 'b1); "多了一个分号“ ‘,愚蠢了。

 

 

 

 2、前辈指点reg变量不要跨always块赋值,确实,这样容易“打架”(也就是时序矛盾),以及时序逻辑电路的if-else语句块可以不写全,但是组合逻辑电路的if-else语句块要写全

 

 

3、不要这样写!在一个clk里面完成了二进制乘法,可能时序上有风险

 

 4、if-else掉了else后,仿真会通过,但是综合会报时序冲突

 

  编译报错:模棱两可的时钟

 5、仿真编译遇到:Illegal digit for specified base in numeric constant(数值常量中指定基数的非法数字)

 

 

 

 排查发现是幅值时基数选错了,10‘d6,写成了10’b6

 

 6、遇到一个仿真的问题:

在testbench初始化中赋值rden=1,会立即给address加1;但在我理解看来,address应该是等待下一个周期以后才会address加1;

 

 

 解决办法有两个:

一种是:rden <= 1'b1;

 另一种:延时给rden赋值为1

 7、代码仿真编译时y语法报错,不可打印的字符:Syntax error, unexpected non-printable character

排查后发现:Modelsim支持ANSI编码,编辑时使用中文打的空格使用UTF-8编码,该空白字符在ANSI编码看来非打印字符,如下:

     需要在notepad++等编辑器的编辑里面选择ANSI编码,找到UTF-8编码格式下的中文空白字符删除掉即可。

 

8、编码报错expecting "end",最后发现if(rst_n == 1'b0)后多了冒号

 

 

posted on 2022-12-10 22:43  小黄豆先生  阅读(837)  评论(0编辑  收藏  举报