微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

System Verilog:时钟块效应传播

如何解决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 以避免任何与模拟器分辨率相关的问题。

解决方法

第二个模拟器(具有意外的否定行为)是 VCS。我在 Solvnet 上找到了以下信息:

当偏斜被否定/提出时增强的时钟模块行为 默认情况下,当偏斜时,VCS 会使用偏斜覆盖时钟事件 被指定为posedge/negedge。但是,您可以使用 -ntb_opts no_cb_edge_override 选项以避免覆盖输入、输出和输入输出的时钟事件。以下是行为 不同时钟方向的此选项: • 输入:值为 在时钟事件之前以指定的时钟偏移延迟采样 更新发生在计时事件中。 • 输出:输出为 时钟后在指定的时钟偏移延迟时更新 事件。1

不知道为什么 VCS 有这样的行为,但使用标志“-ntb_opts no_cb_edge_override”模拟在 Questa 中运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。