verlog中阻塞赋值和非阻塞赋值

初始值:

a=1 b=6 c=9

复制代码
always @(posedge clk) begin
  a = b+1;      // 阻塞赋值
  b <= a;       // 非阻塞赋值
  c = a;        
end  

得到的结果是:

a=7 b=1 c=7


核心逻辑:阻塞赋值(=)立即更新左值,非阻塞赋值(<=)仅记录意图、过程块结束后统一更新,且非阻塞赋值的右值采样于「过程块起始时刻的旧值」。

  1. 初始状态 :时钟沿触发前,a=1、b=6、c=9(均为 reg 类型);
  2. 执行 a = b+1;(阻塞赋值) :立即用 b 的当前值(初始值 6)计算,6+1=7a 实时更新为 7 → 此时状态:a=7、b=6、c=9
  3. 执行 b <= a;(非阻塞赋值) :采样「过程块起始时 a 的旧值(1)」,记录赋值意图「b=1」,不立即更新 b → 此时状态不变:a=7、b=6、c=9
  4. 执行 c = a;(阻塞赋值) :立即用 a 的实时值(7)更新 cc=7,此时状态:a=7、b=6、c=7
  5. 过程块结束,非阻塞赋值生效 :记录的「b=1」生效,b 最终更新为 1。

非阻塞赋值的右值,永远采样于「整个 always 块刚开始执行时的变量旧值」,与该语句在块中的位置、块内其他语句是否修改了右值变量,都没有关系。

FR:徐海涛(hunkxu)

相关推荐
tiantianuser4 小时前
RDMA设计29:RoCE v2 发送及接收模块设计2
服务器·fpga开发·rdma·fpga设计·高速传输
9527华安6 小时前
FPGA实现GTP光口视频转USB3.0 UVC,基于Aurora8B10B+FT602芯片架构,提供4套工程源码和技术支持
fpga开发·gtp·usb3.0·uvc·aurora8b10b·ft602
zy135380675736 小时前
12V输入5V/2A输出升降压芯片AH4002
科技·单片机·物联网·fpga开发·硬件工程·智能电视
dadaobusi7 小时前
verilog的generate
fpga开发
从此不归路8 小时前
FPGA 结构与 CAD 设计(第2章)
ide·fpga开发
FPGA_小田老师8 小时前
FPGA例程(5):时钟(clock)分频倍频(PLL/MMCM)实验--vivado行为级仿真、综合后仿真和实现后仿真说明
fpga开发·pll·mmcm·run simulation·前仿真·后仿真
3有青年8 小时前
HPS cold reset pin和AVST configuration的功能和作用
fpga开发
3有青年1 天前
Altera FPGA操作系统支持的情况分析
fpga开发
国科安芯1 天前
卫星通讯导航FPGA供电单元DCDC芯片ASP4644S2B可靠性分析
单片机·嵌入式硬件·fpga开发·架构·安全性测试