Verilog中initial与always块的执行起始时间及顺序问询
Verilog中initial与always块的执行时机
所有initial块和always块都是从时间t=0时刻开始启动执行的,不存在initial块执行完毕后才启动always块的情况。
Verilog的仿真模型基于并发执行逻辑,同一层级的initial和always块属于并行执行单元,仿真器会在t=0时刻将这些块同时加入事件队列,同步启动执行。
补充两个核心特性:
initial块是一次性执行块,从t=0开始按顺序执行内部语句,执行完成后就不再运行;always块是循环执行块,启动于t=0时刻,之后会根据敏感列表(如时钟边沿)或无敏感列表的持续循环逻辑反复触发执行。
可以通过一段简单代码直观验证执行时机:
initial begin $display("Initial block runs at time %0t", $time); #10 $display("Initial block after 10 time units at time %0t", $time); end always begin $display("Always block starts at time %0t", $time); #20 $display("Always block loops at time %0t", $time); #20; // 等待20个时间单位后再次进入循环 end
仿真输出结果如下:
Initial block runs at time 0
Always block starts at time 0
Initial block after 10 time units at time 10
Always block loops at time 20
Always block starts at time 40
...
内容的提问来源于stack exchange,提问作者user5193259
相关产品推荐
相关产品推荐

