You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog中不同begin-end语句是否并发执行?仿真时长如何判定?

Verilog中begin-end语句的并发执行逻辑

先直接给你明确答案:Verilog里的initial(以及always)块是并发执行的,而begin-end只是用来包裹顺序执行语句的块——单个begin-end内部的代码是顺序运行的,但不同initial/always里的begin-end是同时启动的。

结合你给出的测试代码来分析:

//Sample test values to run simulation (module jkflop_top continues)
initial begin
 j=0; k=0; rst=1; #4 j=1; k=1; rst=0; #50 j=0; k=1; rst=0; #20 j=1; k=1; rst=0;
end
//Carry out simulation for 100 units of time
initial begin #100 $finish; end
endmodule

这两个initial块会在仿真启动的瞬间同时开始运行:

  • 第一个initial里的begin-end是顺序执行:先给j、k、rst赋初始值,等待4个时间单位后更新信号,再等50单位,再等20单位——算下来最后一次信号更新是在4+50+20=74时间点,之后这个块就执行完毕,进入 idle 状态。
  • 第二个initial块会卡在100时间单位时执行$finish,直接终止整个仿真。

所以你的判断完全正确:整个程序只会运行100个时间单位。哪怕第一个块提前执行完了,第二个块的$finish到点就会触发,结束仿真。

额外提一句:如果是always块里的begin-end,逻辑也是一样的——内部顺序执行,不同always块之间并发运行。Verilog的并发特性是基于initial/always这些顶级块的,begin-end只是用来把需要顺序执行的语句打包,不改变并发的本质。

内容的提问来源于stack exchange,提问作者BEWARB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:16:31