Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog $past在系统Verilog断言中的使用_System Verilog_System Verilog Assertions - Fatal编程技术网

System verilog $past在系统Verilog断言中的使用

System verilog $past在系统Verilog断言中的使用,system-verilog,system-verilog-assertions,System Verilog,System Verilog Assertions,我想检查变量的当前值是否为“1”,然后变量的上一个值应为“0”。我在系统Verilog断言中使用$pass。在这里,我检查如果cal_frame_mode=1,那么它是cal_frame_mode的上一个值=0。我的代码如下。然而,我看到断言失败了。当我检查波形时,它的行为是正确的。断言标记第一次检查后的2个时钟。如何在只检查一个时钟周期后停止此断言 property p_NOP_2_RX_CAL; @(posedge clk) (cal_frame_mode==3'b001) |-&g

我想检查变量的当前值是否为“1”,然后变量的上一个值应为“0”。我在系统Verilog断言中使用$pass。在这里,我检查如果cal_frame_mode=1,那么它是cal_frame_mode的上一个值=0。我的代码如下。然而,我看到断言失败了。当我检查波形时,它的行为是正确的。断言标记第一次检查后的2个时钟。如何在只检查一个时钟周期后停止此断言

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);
##2
表示等待两个时钟。默认值
$pass
查看表达式的值,该表达式从当前时钟返回一个时钟(默认情况下,这是属性中定义的时钟)。因此:

(cal_frame_mode==3'b001) |-> ##2 $past(cal_frame_mode)==3'b000;
相当于:

(cal_frame_mode==3'b001) |-> ##1 cal_frame_mode==3'b000;
您需要的是:
(校准帧模式==3'b001)|->$pass(校准帧模式)==3'b000
但是我猜你之所以有
##2
是为了过滤掉
校准帧模式
等于两个时钟的1。如果是这样,那么更好的解决方案是添加
$change
$稳定
到先行项,这是仅当
校准帧模式
更改且当前值为1时才执行的检查

$changed(cal_frame_mode) && (cal_frame_mode==3'b001) |-> $past(cal_frame_mode)==3'b000;
断言记录在§16断言中
§16.9.3采样值函数详细描述了
$sample
$rose
$fall
$stable
$changed
$pass
§16.12.6含义描述了
|->
|=>
#2
表示等待两个时钟。默认值
$pass
查看表达式的值,该表达式从当前时钟返回一个时钟(默认情况下,这是属性中定义的时钟)。因此:

(cal_frame_mode==3'b001) |-> ##2 $past(cal_frame_mode)==3'b000;
相当于:

(cal_frame_mode==3'b001) |-> ##1 cal_frame_mode==3'b000;
您需要的是:
(校准帧模式==3'b001)|->$pass(校准帧模式)==3'b000
但是我猜你之所以有
##2
是为了过滤掉
校准帧模式
等于两个时钟的1。如果是这样,那么更好的解决方案是添加
$change
$稳定
到先行项,这是仅当
校准帧模式
更改且当前值为1时才执行的检查

$changed(cal_frame_mode) && (cal_frame_mode==3'b001) |-> $past(cal_frame_mode)==3'b000;
断言记录在§16断言中
§16.9.3采样值函数详细描述了
$sample
$rose
$fall
$stable
$changed
$pass

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

谢谢你,格雷格,这很有帮助。@Samss77,谢谢你最好放弃投票和/或接受答案。这样做还可以帮助其他回答相同问题的人找到最佳答案,而无需阅读和尝试所有提交的答案(假设有人添加答案)。谢谢你,格雷格,这很有帮助。@Samss77,最好放弃投票和/或接受答案。这样做还可以帮助其他有相同问题的人找到最佳答案,而无需阅读并尝试所有提交的答案(假设有人添加了答案)。