首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$past在系统Verilog断言中的应用

$past在系统Verilog断言中的应用
EN

Stack Overflow用户
提问于 2016-07-01 18:27:35
回答 1查看 15.6K关注 0票数 0

我想检查变量的当前值是否为'1‘,那么变量的前一个值应该是'0’。我在System断言中使用$past。这里我检查的是cal_frame_mode=1,那么它是cal_frame_mode=0的前一个值。我的密码在下面。然而,我看到断言失败了。当我检查波形时,它的行为是正确的。断言标志2时钟后,第一次检查。如何在只检查一个时钟周期后停止此断言?

代码语言:javascript
复制
property p_NOP_2_RX_CAL;
  @(posedge clk)
  (cal_frame_mode==3'b001) |-> ##2 $past(cal_frame_mode)==3'b000;  
endproperty

assert_nop2cal : assert property(p_NOP_2_RX_CAL);
EN

回答 1

Stack Overflow用户

发布于 2016-07-01 19:01:30

##2的意思是等两个钟。$past的默认值是从当前时钟返回的表达式一个时钟的值(默认情况下,这是在属性中定义的时钟)。因此:

代码语言:javascript
复制
(cal_frame_mode==3'b001) |-> ##2 $past(cal_frame_mode)==3'b000;

相当于:

代码语言:javascript
复制
(cal_frame_mode==3'b001) |-> ##1 cal_frame_mode==3'b000;

您想要的是:(cal_frame_mode==3'b001) |-> $past(cal_frame_mode)==3'b000;,但是我猜您使用##2的原因是为了过滤掉cal_frame_mode,等于两个时钟的一个。如果是这样,那么更好的解决方案是将$change!$stable添加到前面,这是只在cal_frame_mode更改且当前值为1时才执行的检查。

代码语言:javascript
复制
$changed(cal_frame_mode) && (cal_frame_mode==3'b001) |-> $past(cal_frame_mode)==3'b000;

断言记录在IEEE Std 1800-2012第16节断言中。

§16.9.3采样值函数详细描述了$sample$rose$fell$stable$changed$past

§16.12.6含义描述|->|=>

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38151865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档