System Verilog:时钟块效应传播

问题描述

考虑以下 SV 代码片段:

module clocks();

  logic a ;
  bit  clk =0;

  initial begin
    forever  #1ns clk = ~clk ;
  end



  clocking cb@(posedge clk);
    default input #1step output negedge;
    output a;
  endclocking

  initial begin
    @(cb);
    #100ps;
    cb.a <= 1 ;
    @(cb);
    #100ps;
    cb.a <= 0 ;
    repeat(10) @(cb);
  end

endmodule
通过输出同步驱动器在时钟块事件发生后 100 ps 后,信号发生变化。 在使用两个 EDA 模拟器运行它时,我观察到了不同的行为。 对于第一个模拟器,时钟模块输出 a 作用于第二个波边,信号在第二个下降沿发生变化。你可以看到下面的图片。 First simulator

另一方面,对于第二个模拟器,时钟模块输出作用于第一个时钟,并且可以在第一个时钟下降沿看到效果。你可以看到下面的图片。 Second simulator

另一方面,如果我使用比 100ps 延迟更小的延迟(es 10ps)来更改输出偏斜延迟,则第二个模拟器的行为与第一个相同(a 信号改变在第二个posedge之后,输出偏斜为10ps)。

两个模拟器中哪一个更符合 IEEE 1800-2017 SV 标准?在我看来,按照我对标准的理解,第一个模拟器更符合要求。

时间刻度设置为 1fs 以避免任何与模拟器分辨率相关的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)