是否允许使用#1步骤作为程序延迟



我不确定LRM是否清楚#1步骤的使用,但我有一个创建模拟器可以检测到的最小延迟的例子。所以,我写了以下代码:

virtual task drive_signal();
// Initialise mysignal to a value of '1'.
m_vif.mysignal= 1;
#1step; // Advance with 1 time step
m_vif.mysignal= 0;
#m_cfg.configured_delay; //Delay by configured value
m_vif.mysignal= 1;
endtask

这样做有效吗?然而,我确实使用了#0而不是#1step,但它没有造成任何运行时延迟。

这目前是IEEE 1800-2017 SystemVerilog LRM中的一个悬而未决的问题,但其目的是不允许这样做。

使用像#0或#1这样的简单延迟是一种糟糕的做法,因为它们增加了比赛条件的可能性。由于您将此问题标记为UVM,因此强烈建议在驱动程序中使用任何延迟,而应在接口或顶级测试台中使用同步时钟边缘。

最新更新