在FPGA或数字IC初面中,Verilog阻塞与非阻塞赋值属于高频题。答题不要停留在“等于号几个”的口诀,要能描述同一个时钟沿内多个寄存器怎样更新。
01 / 最重要的行为区别
阻塞赋值“=”在当前过程语句顺序执行,后面的语句立即使用当前过程里刚更新的值。
非阻塞赋值“<=”在仿真时间步的非阻塞赋值更新区域统一提交结果;同一时钟沿内,右侧通常基于更新前的寄存器值计算。
因此描述触发器链时,常用always @(posedge clk)中非阻塞赋值,直观表达多个寄存器同时采样。

02 / 用两级寄存器解释
例如时钟上升沿执行a <= din; b <= a;。该沿后a更新为din原值,b更新为a的上一拍值,符合两级流水线。
若把相同过程机械改成阻塞赋值a = din; b = a;,仿真中b可能在该过程立即拿到新a,产生与预期流水级不一致的行为。
组合逻辑常用阻塞赋值并对输出完整赋值,避免意外推断Latch;跨多个always块的竞争不能只靠“=”/“<=”选择来解决。
03 / 面试现场可这样答
“我会在时序always块里用非阻塞赋值描述寄存器并行更新,在组合逻辑过程里用阻塞赋值明确中间变量的计算顺序,同时避免同一个寄存器被多个过程驱动,最后用仿真与综合结果核对。”
04 / 面试追问
非阻塞赋值不意味着硬件传输时没有延迟。真正的建立/保持时间、时钟偏斜和组合路径延时,仍要由静态时序分析确认。
知识点:FPGA面试题、Verilog阻塞非阻塞赋值

扫码关注






























