always(*)是什么意思?

在最开始学习verilog时,发现别人写的代码中出现了always@(*)的代码,当时也是一脸懵,不知道啥意思,也找不到人询问,网上也很少解答这种简单问题的,所以写下这样一个解答,希望刚学习的小白可以很快的理解它的含义。

1.always @(posedge clk or negedge rst_n)

这个语句是我们学习verilog最常用到的语句,@后面的括号内是敏感事件列表,也就是执行always后面内容的触发条件。
敏感事件列表可以包含多个敏感事件,但不可以同时包括电平敏感事件和边沿敏感事件,也不可以同时包括同一个信号的上升沿和下降沿。

2.always @(*)

那么按照上面的理解always @(*)中的敏感事件为✳,事实上这里的✳代表的是这个alway块的内容中出现的所有的变量,只要这些变量发生变化这个always块儿就会被触发。这种立即触发的逻辑电路实事上也就是组合逻辑电路。

3.assign 与 always @(*)有啥区别

既然always @(✳)也是组合逻辑电路的表示方法,那么它和assign有啥区别了?
1.assign只能处理wire型变量,always@(✳)处理的是reg型号的变量。
2.assign可以直接赋值一个定值,而always@(✳)不能只赋一个定值,还需要这个值能够发生变化,以触发always块。
always @(*) begin temp <= 1'b1 end
如上面一段代码,由于1’b1永远不会发生改变,always语句块也永远不会被执行,那么temp的值一直处于一个不定态。

以上就是我对always@(✳)的理解,如果你看到了这里觉得对你有帮助,请帮忙点赞收藏加关注,如果有啥不妥的地方,也请评论指正。

你可能感兴趣的:(fpga开发)