"=" 阻塞过程赋值(Blocking Procedural assignment), "<="非阻塞过程赋值(Non-blocking Procedural assignment)
RHS:right hand side
LHS:left hand side
| "=" 阻塞过程赋值(Blocking Procedural assignment) | "<="非阻塞过程赋值(Non-blocking Procedural assignment) | |
| 执行步骤 |
|
|
|
只能用于对寄存器类型变量进行赋值,因此只能用在“initial”块和“always”块等过程块中。 不允许用于连续赋值。 在同一分支下,对同一变量不能同时使用非阻塞赋值和阻塞赋值,否则编译不通过。 但是,如下代码在coderpad网站上并不会报错,输出值:4 查看代码
|
||
| 顺序块Sequential:The order of evaluation is determinate |
A sequential blocking assignment evaluates and assigns before continuing on in the procedure |
A sequential non-blocking assignment evaluates, then continues on to the next timing control before assigning |
| 并发块Concurrent:The order of evaluation is indeterminate | Concurrent blocking assignments have unpredictable results | Concurrent non-blocking assignments have predictable results |
在介绍《【Verilog】深入理解阻塞和非阻塞赋值的不同》时得到下面几个原则:
- 原则1:时序电路建模时,用非阻塞赋值。
- 原则2:锁存器电路建模时,用非阻塞赋值。
- 原则3:用always块写组合逻辑时,采用阻塞赋值。
- 原则4:在同一个always块中同时建立时序和组合逻辑电路时,用非阻塞赋值。
- 原则5:在同一个always块中不要同时使用非阻塞赋值和阻塞赋值。
- 原则6:不要在多个always块中为同一个变量赋值。
- 原则7:用$strobe系统任务来显示用非阻塞赋值的变量值
- 原则8:在赋值时不要使用 #0 延迟


浙公网安备 33010602011771号