阻塞赋值/非阻塞赋值再次理解:
在Verilog中,非阻塞赋值(<=
)的特点是:
✅ 并行执行:
无论有多少条非阻塞赋值语句,在同一个时钟周期内,它们的赋值结果都会在下一个时钟沿同时更新。因此,所有非阻塞赋值语句在当前时钟周期采样变量值,在下一个时钟周期才把结果更新。
📝 关键点:
a <= b
和b <= a
在同一个时钟周期内采样旧值,在下一个时钟周期同时更新。- 非阻塞赋值非常适合建模时序逻辑(sequential logic),如寄存器或触发器。
⚡️ 注意:
如果使用阻塞赋值(=
),赋值是立即进行的,可能导致顺序变化,从而产生不同的结果。
📚 解释:
- 非阻塞赋值 (
<=
) 不会立即更新变量值,而是将新值推迟到下一个时钟周期。 a <= b
采样b
的旧值0010
,而b <= a
采样a
的旧值0001
。- 在下一个时钟周期,
a
和b
同时更新,结果a = 0010
,b = 0001
。
⚡️ 总结:
=
(阻塞赋值):按顺序立即更新,前一条语句影响后续赋值。<=
(非阻塞赋值):所有赋值语句在下一拍一起更新,适用于时序逻辑建模。
⚠️ 最佳实践:
- 组合逻辑使用
=
。 - 时序逻辑使用
<=
。