always(*)是什么意思?

本文主要为Verilog初学者解答always @(*)语句的含义。介绍了always @(posedge clk or negedge rst_n)语句的敏感事件列表规则,解释了always @(*)中*代表块内所有变量,其对应组合逻辑电路。还对比了assign与always @(*)的区别,如处理变量类型和赋值方式不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在最开始学习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@(✳)的理解,如果你看到了这里觉得对你有帮助,请帮忙点赞收藏加关注,如果有啥不妥的地方,也请评论指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文华也曾献与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值