首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统Verilog:时钟块效应传播

系统Verilog:时钟块效应传播
EN

Stack Overflow用户
提问于 2021-03-24 16:58:57
回答 1查看 210关注 0票数 1

考虑以下SV代码片段:

代码语言:javascript
复制
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 an后发生变化。在使用两个EDA模拟器运行它时,我观察到了不同的行为。对于第一模拟器,时钟块输出在第二后边缘上的动作,信号在第二下降边缘上发生变化。你可以看到下面的图片。第一模拟器

另一方面,对于第二模拟器,时钟块输出作用于第一时钟,其效果可在第一下降时钟边缘上看到。你可以看到下面的图片。第二模拟器

另一方面,如果我使用比100 es延迟更小的延迟(Es10ps)来更改输出偏斜延迟,则第二个模拟器的行为为第一个模拟器(a信号在第二个偏置后发生变化,输出偏差为10 es)。

这两个模拟器中哪一个更符合IEEE1800-2017标准?在我看来,根据我对标准的理解,第一个模拟器更符合标准。

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

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 18:22:53

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

默认情况下,当倾斜是negedge/posedge时,VCS会在将倾斜指定为偏置/偏移时用倾斜覆盖时钟事件。但是,您可以使用-ntb_opts no_cb_edge_override选项来避免在输入、输出和inout中重写时钟事件。以下是此选项在不同时钟方向上的行为:·The : Value在指定的时钟倾斜延迟处采样,然后在时钟事件发生之前进行更新,而更新发生在时钟事件中。输出:在时钟事件之后,在指定的时钟倾斜延迟处更新输出。1

不知道为什么VCS会有这样的行为,但是在标记"-ntb_opts no_cb_edge_override“的情况下,模拟运行在Questa中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66785799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档