在时钟门中使用System Verilog $past

问题描述 投票:0回答:2

p1: assert property (@(posedge clk) ($past(b, 2, c)) === 0);

当我在 VCS 中运行断言时,它在 13 秒、15 秒、17 秒时失败......

我不知道为什么13秒就失败了。

11秒内,

$past(b, 2, c)
为0(7秒采样)

但是13秒后,

c
= 0,为什么
$past(b, 2, c)
在9秒内得到采样值?

verilog system-verilog assertion system-verilog-assertions
2个回答
1
投票

$past
与启用一起使用很复杂,因为它将采样和历史记录一起门控。它的操作如下:

  always @(posedge clk) begin
    if(c) begin
      past1 <=b;
      past2 <= past1;
    end
    $display ("%t b:%0d b1:%0d b2:%0d", $time,b,past1,past2);
  end

顺便说一句,在示例代码中提供确切的刺激确实很有帮助。图片很好,但尝试重新创建它需要很多人的时间。


0
投票

失败不是因为 13 之前的 2 个时钟周期,即 11,c 为高电平使检查有效,b 为 1 而不是 0(根据检查器)

© www.soinside.com 2019 - 2024. All rights reserved.