verilog 阻塞赋值和非阻塞赋值电路结构
时间: 2025-01-09 16:42:34 浏览: 23
Verilog 阻塞赋值与非阻塞赋值的电路结构差异
1. 阻塞赋值 (Blocking Assignment)
对于阻塞赋值,在同一 always
块内,后续语句需等待当前语句执行完毕后才可继续。这意味着所有操作按顺序依次发生,类似于软件编程中的串行处理机制。
当应用于组合逻辑设计时,这种特性使得信号传递路径清晰明了。例如:
always @(*) begin
q = a ^ b;
end
上述代码片段展示了如何利用阻塞赋值实现简单的异或门功能[^2]。由于不存在显式的时钟边沿触发条件,因此整个过程完全依赖输入变化即时响应输出改变。
2. 非阻塞赋值 (Non-blocking Assignment)
相比之下,非阻塞赋值允许多条赋值指令几乎同时启动计算,并最终在同一时间点完成更新动作。这特别适用于描述同步时序元件的行为模式,比如寄存器文件或是状态机等场景下的数据存储单元。
考虑下面的例子:
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
reg_q <= 0;
else
reg_q <= d;
end
此段程序定义了一个D型触发器模型,每当检测到上升沿到来时便依据最新输入d刷新内部保存的状态reg_q。值得注意的是,即使存在多级管道延迟链路,各阶段间依然保持良好的独立性和并发性[^4]。
通过对比可以看出,采用不同类型的赋值方法能够显著影响所构建硬件模块的工作原理及时序属性。具体而言,
- 组合逻辑倾向于使用阻塞赋值来简化控制流管理;
- 而针对时序逻辑则更推荐选用非阻塞形式以便更好地模拟实际物理器件的操作流程[^3]。
相关推荐


















