阻塞赋值与非阻塞赋值 与硬件对应
时间: 2025-03-09 09:06:04 浏览: 14
阻塞赋值与非阻塞赋值的区别
在Verilog中,存在两种类型的赋值语句:阻塞赋值(=
)和非阻塞赋值(<=
),这两种赋值方式对于仿真时间和最终合成后的硬件有着不同的影响。
阻塞赋值
阻塞赋值会在当前执行过程中立即生效,在同一进程中后续的语句会看到这个变化的结果。这意味着在同一进程内的下一条语句将会等待直到这条赋值完成后才会继续执行。这种特性使得它非常适合用来模拟组合逻辑电路的行为[^4]。
例如:
always @(*) begin
c = a + b;
end
在这个例子中,一旦计算完成,变量c就会立刻更新它的值,并且任何紧跟在这条命令后面的其他指令都会使用新的c值进行处理。
非阻塞赋值
相比之下,非阻塞赋值不会中断程序流去改变目标寄存器的内容;相反,它只是安排了一个未来的更改——即在一个完整的时钟周期结束之后再做变更。因此,在同一个过程里所有非阻塞赋值的操作都是并行发生的,这更贴近于真实世界里的并发操作模式,特别适用于描述时序逻辑电路的设计[^5]。
示例代码如下所示:
always @(posedge clk) begin
q <= d;
end
这里q将在下一个上升沿到来之前保持不变,即使d已经发生了多次变动也是如此。只有当正边沿触发条件满足后,才会有一次性的数据传输发生。
对应的实际硬件行为
组合逻辑通常由一系列门级组件构成,这些组件之间通过导线连接起来形成路径。由于不存在存储单元,所以信号传播几乎是瞬时完成的,对应着Verilog中的阻塞赋值。
时序逻辑则涉及到诸如触发器之类的记忆装置,它们能够在特定时刻保存状态并在另一些条件下释放该状态给下游节点。这类机制正好可以用非阻塞赋值来表达,因为它反映了异步事件驱动下的动作序列。
综上所述,选择合适的赋值形式不仅有助于提高仿真的准确性,而且也能够更好地反映所期望构建的真实物理系统的运作原理。
相关推荐


















