原创 case语句容易犯错的写法

2010-12-15 20:36 1462 0 分类: FPGA/CPLD

verilog中写case语句时经常犯错,至少身为菜鸟的我经常这样,写下来,免得下次又忘记了。代码隔段时间不写就容易生疏啊。。。

例子:

  always@(a)
begin
case(a)
1'b1: d = 0;
1'b0: d = d+1;
endcase
end 

 db1f43d5-c8fe-44bf-afa8-d479967fe07e.jpg

1'b0: d = d+1;

这样写是不对的,会产生组合环Combinational Loop)。尤其在写状态机的组合逻辑时,阻塞赋值右边最好不要写成一个计算的等式,而写成一个实际的变量。


网上查找了下关于组合环:通过开发工具综合后RTL视图观察,可以看到有组合电路的输出管脚又反过来驱动某一个输入,这样可能会存在竞争,导致未定义的行为,建议对有反馈的输出进行同步化。另外还有一种可能就是always 语句块没有事件触发。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
0
关闭 站长推荐上一条 /3 下一条