阻塞赋值和非阻塞赋值

1 阻塞和非阻塞的区别

1.1 阻塞赋值“=”

必须是阻塞赋值完成后,才进行下一条语句的执行;赋值一旦完成,等号左边的变量值立即变化。在同一个块中,阻塞赋值表达式的书写顺序会影响赋值的结果。硬件没有对应的电路。

即串行赋值,语句从上到下顺序执行,立即生效

1.2 非阻塞赋值“<=”

在赋值开始时计算表达式右边的值,在本次仿真周期时钟的下降沿时才更新被赋值变量,即赋值不是立即生效的;非阻塞赋值允许块中其他语句同时执行。在同一个块中,非阻塞赋值表达式的书写顺序不影响赋值的结果。硬件有对应的电路。

并行执行,不是立即生效,语句同时执行

2 总结

阻塞赋值对应的硬件电路与时钟触发沿没有关系,只和输入的电平变化有关;阻塞赋值对应触发器,只有触发沿才会发生赋值。

  1. 时序电路建模时,用非阻塞赋值
  2. 锁存器建模时,用非阻塞赋值
  3. 在 always 块中建立组合逻辑时,用阻塞赋值
  4. 在同一个 always 块中建立时序和组合逻辑时,用非阻塞
  5. 在同一个 always 块中不能既用阻塞又用非阻塞
  6. 不要在一个以上的always块中为同一个变量赋值
  7. 赋值时不能延时

阻塞赋值和非阻塞赋值
https://www.moerjielovecookie.icu/2024/11/06/阻塞赋值和非阻塞赋值/
作者
Sawen Moerjie
发布于
2024年11月6日
许可协议