其他分享
首页 > 其他分享> > initial 和 always什么时间开始执行?

initial 和 always什么时间开始执行?

作者:互联网

“initial”程序块在时间 0 开始执行,并在其所有可执行语句完成时结束。它只执行一次。而“always”块在模拟过程中不断执行,并且仅在仿真完成时结束。initial块没有触发点。它们只是在时间 0 开始执行。“always”块有一个触发点触发块的执行,它一直在等待触发点触发并执行。请注意,可以有一个没有触发点的“always”块。但这只会导致块的零时间执行,并且最终会陷入零延迟死循环,并且仿真会卡住。例如:

always clk = !clk; //infinite zero delay loop. Simulation will get stuck at time 0
always #10 clk = !clk; //correct time control

SystemVerilog 是一种并发型语言。从这个角度来看,所有“initial”和“always”块在时间 0 并行触发。它们的执行没有先后顺序。

请注意,可以拥有任意数量的“initial”块,也可以拥有任意数量的“always”块。但是,当在这些块中分配各种变量时,需要小心。如果从不同的块中给相同的变量赋值(并且没有使用使用阻塞分配),最终可能会创建竞争条件,因为这些块都并行执行,并且一个块可能会破坏对另一个块中相同变量的赋值。

标签:触发,clk,always,initial,并且,执行
来源: https://www.cnblogs.com/fuqiangblog/p/16622920.html