系统Verilog:我对$ stable语句感到困惑

时间:2018-08-13 03:10:25

标签: system-verilog

我知道,如果要计算的表达式的值与上一个时钟周期的值相同,则$ stable(expression)语句返回“ True”。但是,我不明白为什么在大多数学习资料中都提到以下内容:

assert property(@(posedge clk) enable == 0 |=> $stable(data));

声明当enable为0时数据不应更改。

正如我已经证明的那样,由于正在使用|=>,因此对于以下示例将无效:

enable 1110000111

data__ ABCAAAABB

assert ______X___ 

(其中A,B和C是数据总线的某些值,而X是断言将失败的点)

如您所见,数据在A时具有值enable = 0,因此保持稳定。但是断言将无法按预期工作,因为数据同时从A更改为B,从而启用了更改from 0 to 1

所以我的问题是,您如何真正实现或编码表达式当enable为0时数据不应该更改??

谢谢。

1 个答案:

答案 0 :(得分:0)

也许您正在考虑

assert property(@(posedge clk) (enable == 0)[*2] |-> $stable(data));

这意味着当enable == 0时,连续两个周期内数据不应更改。

我认为原始断言的“期望行为”不是很清楚。 enable的状态是一个时钟周期,$stable的状态是经过2个时钟周期评估的条件。如果使用了重叠含义|->,则存在类似的论点。因此,问题变成了(enable==0)仅在一个时钟周期内为真会发生什么?您如何定义data的稳定性?