system-verilog - 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 是断言失败的点)
如您所见,数据的值为A
while enable = 0
,因此它保持稳定。但是断言不会按预期工作,因为数据从 A 更改为 B 同时启用更改from 0 to 1
。
所以我的问题是,你将如何真正实现或编码当启用为 0 时数据不应更改的表达式?
提前致谢。
解决方案
也许你在想
assert property(@(posedge clk) (enable == 0)[*2] |-> $stable(data));
这意味着当 enable==0 时连续两个周期,数据不应该改变。
我认为原始断言的“期望行为”不是很清楚。的状态enable
是一个时钟周期并且$stable
是在 2 个时钟周期内评估的条件。如果使用重叠暗示,则有类似的论点|->
。所以问题变成了如果(enable==0)
只在一个时钟周期内为真会发生什么?您希望如何data
定义稳定性?
推荐阅读
- ruby-on-rails - 机架应用程序错误:#
我正在尝试使用 Cmder CLI 在 Windows 10 上运行 Rails 应用程序。我在启动 rails 服务器时遇到错误。
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/activesup
- sql - 使用(可能)IFELSE 扩展/更改我的查询以查找更多条目
- embedded-linux - 为 yocto 构建的 influxdb 编写 systemd 脚本
- android - 如何从 Ionic 在 android 设备中打开 SQLite db
- php - Luracast\Restler:未找到 NGINX 404
- bash - 让 crontab 运行重建
- mysql - 在 MySql 中使用 if 语句打印带有条件约束的新列
- python - 按名称将列组融合为目标列
- powershell - 如何将变量从 PowerShell 传递到批处理变量
- javascript - 仅当每个输入为空时才验证表单