如何解决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
另一方面,对于第二个模拟器,时钟模块输出作用于第一个时钟,并且可以在第一个时钟下降沿看到效果。你可以看到下面的图片。 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 举报,一经查实,本站将立刻删除。