Verilog学习第三章——阻塞赋值和非阻塞赋值详解

Verilog中阻塞赋值及非阻塞赋值

一.阻塞赋值

  1. 阻塞赋值是指当一个变量被赋值时,该变量的值取决于另一个变量的值而不是现有的值。
  2. 在阻塞赋值中,变量的值不是立即设置的,而是等待另一个变量的值设置后再进行设置。

二.非阻塞赋值

  1. 非阻塞赋值对应的电路往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值。
  2. 可以看做两个步骤:赋值开始时刻,计算赋值号右边的语句。在赋值时刻结束,更新赋值号左边的语句。
  3. 在计算非阻塞赋值语句右边的语句和更新左边的语句器件,允许其他的Verilog语句进行操作。
非阻塞赋值只能用于对寄存器变量类型进行赋值只能用于initial语句和always语句
不允许用于连续赋值语句assign

三.阻塞赋值和非阻塞赋值的区别

1.阻塞赋值示例

阻塞赋值是指在执行完当前语句之前,该语句后面的语句无法被执行,即阻塞后面的语句。

always@(posedge clk)
    begin
        a = b;
        c = a;
    end
在这个例子中,a被赋值为b后,才能继续执行c = a这个语句。
因此,在执行完a = b后,c = a这个语句才能被执行。

2.非阻塞赋值示例

非阻塞赋值是指当前语句执行时,后面的语句仍然可以被执行,即不阻塞后面的语句。

always@(posedge clk)
   begin
       a <= b;
       c <= a;
   end
在这个例子中,a被赋值为b后,执行c <= a这个语句的时候,a的值并没有立即改变,
而是等到下一次时钟上升沿时才会改变。
因此,在执行完a <= b后,c <= a这句语句仍然能够被执行。

3.阻塞赋值和非阻塞赋值的区别

阻塞赋值和非阻塞赋值的主要区别在于是否阻塞后面的语句执行。阻塞赋值会等待当前语句执行完毕后,才能执行后面的语句;而非阻塞赋值则不会等待,后面的语句能够立即得到执行。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值