详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致”


前言

我们把说明拆成几部分:语义(仿真规则)→ 例子与时序步骤 → 硬件映射 → 实战建议。过程尽量一步步推导,带具体数值与“波形”表格,便于理解。


一、非阻塞赋值的仿真语义(关键点)

在 always @(posedge clk) 中使用非阻塞赋值 <= 时,Verilog 的仿真采用两阶段行为:

计算阶段(sample): 在时钟沿到达时,所有非阻塞赋值的右侧表达式(RHS)都用当前的旧值求值并暂存(即“读取旧值”)。

更新阶段(update): 随后(在相同的仿真时间点的稍后delta cycle),把这些预先计算好的右侧结果写回到左侧信号(寄存器)。

关键: RHS 的读取发生在“同时”的瞬间,写回发生在“统一的后时刻”。因此多个寄存器之间不会互相看到已更新的新值 —— 它们都看到时钟到来前的旧值。

二、通过具体例子演示(最直观)

示例 1 — 非阻塞赋值(期望的“并行”更新)

reg a, b;
initial begin
  a = 0;
  b = 1;
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Francis7777777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值