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)后多了冒号

9、几次三番搞错小于等于:<=

很方便记:无论大于等于还是小于等于,都是不等号(>/<)在前面念/写的。

10、generate的begin与block之间少了冒号:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值