verilog学习之语句易错点

1.问题

问题描述:代码综合后电路产生锁存器。

2.解决方法

为避免编辑代码的时候生成锁存器,应该在选择语句或者条件语句的时候,尽可能地罗列出所有的可能;

比如:

always @(sel[1:0]or a or b)case(sel[1:0])  2'b00:q<=a;  2'b11:q<=b;endcase

上述代码:只考虑了sel等于00和11的情况,那么当sel为其他的情况的时候,sel将会保持原值,这样上述代码就形成了锁存器

那么如何改正为不含锁存器的代码呢?

解决方法:需要考虑到所有的可能,并给出相应的赋值;

always @(sel[1:0]or a or b)case(sel[1:0])  2'b00:q<=a;  2'b11:q<=b;  default:q<='b0;//这个语句:是当sel不等于00或者11的时候,将q非阻塞赋值为0;endcase

3.总结:以上介绍的方法可以避免verilog代码在综合后的电路中生成锁存器。当用到if语句,最好写上else语句来避免出现锁存器的错误。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章