我正在尝试使用系统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)
我想知道信号在特定时间内何时变为未知状态。
答案 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)