竞争问题
为了避免在RTL仿真行为中发生信号竞争问题,建议通过非阻塞赋值或者延迟来解决同步问题
- 同样地在仿真行为中,为了尽量避免时序电路中时钟和驱动信号的时序竞争问题,我们需要给出尽量明确的驱动时序和采样时序。
- 默认情况下,时钟对于组合电路的驱动会添加一个无限最小时间(delta-cycle)的延迟,而该延迟无法用绝对时间单位衡量,它要比最小时间单位精度还小。(该延迟仅在仿真上有意义)
- 在一个时间片(time-slot)中可以发生很多事情,例如在仿真器中敲入命令"run o",即是让仿真器运行一个delta-cycle的时间。
forever #5 clk1<=!clk;
...
always @(clk1) clk2<=clk1;
...
always@(posedge clk1 or negedge rstn)begin
if(!rstn) d1<=0;
else d1<=d1+1;
end
...
波形和打印的不一致,打印的更准确
- clk2和clk1尽管在波形上看起来是在相同时间起落的,但是clk2相比于clk1要晚于一个delta-cycle,这是由于always中的驱动所添加的,同时d1又晚于clk1—个delta-cycle,所以d2与clk2并没有相差delta-cycle,即它们之间是同时发生变化的。(如clk1采样45ns处,clk2采样45ns处其实表示45ns+delta-cycle)因此在45ns处,clk1要领先d1一个delta-cycle,采样出d1=1,而clk2