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



我正在尝试使用系统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)

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

任何时间戳的预置区域中的并发断言示例值。从本质上讲,这意味着断言看到的是任何信号的先前值,而不是在该时间戳中更新的值。

这是关键的事情,您需要牢记。

所以现在根据您的要求,这就是你需要的 -"将信号视为断言时钟滴答声,如果采样信号值有效(不未知(并且下一个采样值未知,则时差不应高于您的标准">

这是相应的断言。

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)

最新更新