如何使用系统Verilog断言检查信号未知脉冲宽度大于特定值的信号

时间:2019-07-18 10:47:08

标签: system system-verilog duration assertion

我正在尝试使用系统Verilog断言检查信号是否具有大于特定值的未知脉冲。

下面是我的代码。但是我被困住了。 我不知道如何检查信号未知的脉冲宽度。 请告诉我。

试验#1->如果未知信号脉冲小于SPEC_UNKNOWN,它将捕获有效脉冲。所以我失败了

property unknown_detect;
    realtime start_time;
    realtime end_time;
    @(sig iff ($root.TB.vpwrup && US && ~cnt_x))
        ($isunknown(sig), start_time = $time) |=> (~$isunknown(sig)&&(($time-start_time) <= SPEC_UNKNOWN));
endproperty : unknown_detect

unknown_assert : assert property(unknown_detect)

试验#2->我不能在属性外使用局部变量(diff_x)。所以我失败了。

property unknown_detect;
    realtime start_time;
    realtime end_time;
    realtime diff_x;
    @(sig iff ($root.TB.vpwrup && US && ~cnt_x))
        ($isunknown(sig), start_time = $time) |=> (~$isunknown(sig), end_time = $time, diff_x = end_time - start_time);
  end

endproperty : unknown_detect
unknown_assert : assert property(unknown_detect)

我想知道信号在特定时间内何时变为未知状态。

1 个答案:

答案 0 :(得分:0)

在任何时间戳记中,优先区域中的并发声明采样值。从本质上讲,这意味着断言可以看到任何信号的先前值,而不是在该时间戳记中更新的值。

这是关键,您需要牢记。

因此,现在您的需求就是您需要的- “将信号视为断言时钟滴答,如果采样的信号值有效(未知)而下一个采样的值未知,则时间差不应高于您的标准”

这是与此相对应的断言。

property unknown_detect;
    realtime start_time;
    @(sig iff ($root.TB.vpwrup && US && ~cnt_x))
        (~$isunknown(sig), start_time = $time) ##1 $isunknown(sig) |-> ($time - start_time) <= SPEC_UNKNOWN;
endproperty : unknown_detect

unknown_assert : assert property(unknown_detect)