是否允许使用#1step 作为程序延迟?
Is it allowed to use #1step as a procedural delay?
我不确定 LRM 是否清楚 #1step 的用法,但我有一个案例可以创建模拟器可以检测到的最小延迟。所以,我写了下面的代码:
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
但它没有造成任何运行时延迟。
目前这是 open issue in the IEEE 1800-2017 SystemVerilog LRM,但本意是不允许这样做。
使用像 #0 或 #1 这样的简单延迟是一种不好的做法,因为它们增加了竞争条件的可能性。由于您使用 UVM 标记了这个问题,因此非常不鼓励在驱动程序中使用 any 延迟,而应该在接口或 top-level 测试台中使用同步时钟边沿。
我不确定 LRM 是否清楚 #1step 的用法,但我有一个案例可以创建模拟器可以检测到的最小延迟。所以,我写了下面的代码:
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
但它没有造成任何运行时延迟。
目前这是 open issue in the IEEE 1800-2017 SystemVerilog LRM,但本意是不允许这样做。
使用像 #0 或 #1 这样的简单延迟是一种不好的做法,因为它们增加了竞争条件的可能性。由于您使用 UVM 标记了这个问题,因此非常不鼓励在驱动程序中使用 any 延迟,而应该在接口或 top-level 测试台中使用同步时钟边沿。