我知道,如果要计算的表达式的值与上一个时钟周期的值相同,则$ 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时数据不应该更改??
谢谢。
答案 0 :(得分:0)
也许您正在考虑
assert property(@(posedge clk) (enable == 0)[*2] |-> $stable(data));
这意味着当enable == 0时,连续两个周期内数据不应更改。
我认为原始断言的“期望行为”不是很清楚。 enable
的状态是一个时钟周期,$stable
的状态是经过2个时钟周期评估的条件。如果使用了重叠含义|->
,则存在类似的论点。因此,问题变成了(enable==0)
仅在一个时钟周期内为真会发生什么?您如何定义data
的稳定性?