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