首页 > 解决方案 > System Verilog:我对 $stable 语句感到困惑

问题描述

我知道 $stable(expression) 语句返回“True”,如果正在评估的表达式具有与前一个时钟周期相同的值。但是,我不明白为什么在大多数学习材料中都会说以下内容:

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

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

正如我已经证明的那样,因为|=>正在使用,这不适用于以下示例:

enable 1110000111

data__ ABCAAAABB

assert ______X___ 

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

如您所见,数据的值为Awhile enable = 0,因此它保持稳定。但是断言不会按预期工作,因为数据从 A 更改为 B 同时启用更改from 0 to 1

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

提前致谢。

标签: system-verilog

解决方案


也许你在想

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

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

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


推荐阅读