是否允许使用#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 测试台中使用同步时钟边沿。