system verilog assertions:在重复运算符中使用reg值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了system verilog assertions:在重复运算符中使用reg值相关的知识,希望对你有一定的参考价值。
我想做这样的事情:
assert property (@(posedge clk) disable iff (!rst) a[*c] -> $rose(b))
这里c
不是'常数',而是来自寄存器的某些位的值。例如:reg[4:0]
,只写一次。检查是否仅在a为“c”个循环次数时才确定b
是否有效。
但是,SVA不接受这样的变量:[*reg[4:0]]
。有任何想法吗??
引入局部变量ctr
。在每个posedge将创建一个新的断言与ctr
的新实例。设置ctr
等于reg1
中的值。检查a
在整个向下计数中是否为真。只要计数器大于零,就减少计数器。 (ctr>0, ctr--)[*0:$]
声明将倒计时直到ctr == 0
为真。
您可能想要将(ctr>0, ctr--)[*0:$]
更改为(ctr>0, ctr--)[*1:$]
,具体取决于reg == 0
的结果。
property pr_aRegTimes;
integer ctr;
disable iff (!rst)
@(posedge clk)
(1, ctr = reg1) ##0 a throughout ((ctr>0, ctr--)[*0:$] ##1 (ctr == 0)) |-> $rose(b);
endproperty
as_aRegTimes: assert property (pr_aRegTimes)
else $error("aRegTimes failed");
工作示例:http://www.edaplayground.com/x/Xh9
资料来源:
https://www.doulos.com/knowhow/sysverilog/tutorial/assertions/ http://www.win.tue.nl/~jschmalt/teaching/2IMF20/SvaFvTutorialHVC2013.pdf
property pr_aRegTimes;
integer ctr;
disable iff (!rst)
@(posedge clk)
($rose(a), ctr = reg1) ##0 (a&&ctr>0,ctr--)[*] |-> $rose(b);
endproperty
以上是关于system verilog assertions:在重复运算符中使用reg值的主要内容,如果未能解决你的问题,请参考以下文章
system verilog assertions:在重复运算符中使用reg值
如何定义 coverpoint system verilog
systemverilog 断言中assume 和assert的区别