1、静态的延时
property dout_stable_fell_property;
@(posedge clk) a ##1 b0;
endproperty
## 1:a延时一个时钟周期,b0使能。
2、静态范围延时
property dout_stable_fell_property;
@(posedge clk) a ##[1:100] b0;
endproperty
在a使能后的1到100个周期内,b0一定会使能。
3、带delay的延时
在断言的时候,直接使用##v_delay会导致编译错误,应为在断言中使用变量是非法的。比如下面的例子
module asertion_variable_delay;
bit clk,a,b;
int cfg_delay;
always #5 clk = ~clk; //clock generation
//generating 'a'
initial begin
cfg_delay = 4;
a=1; b = 0;
#15 a=0; b = 1;
#10 a=1;
#10 a=0; b = 1;
#10 a=1; b = 0;
#10;
$finish;
end
//calling assert property
a_1: assert property(@(posedge clk) a ##cfg_delay b);
endmodule
所以在使用时,必须的(1,delay=v_delay),有这样一个流程。
所以修改代码如下即可。
sequence delay_property(v_delay);
int delay;
(1,delay=v_delay) ##0 ((1,delay=delay-1) [*0:$] ##1 delay <0);
endsequence
4、(1,cnt=signal_value)的解释
当 valid_in为false(假),断言直接执行为真。
5、带delay的可变范围延时(#[1:v_delay])
sequence delay_property(v_delay);
int delay;
(1,delay=v_delay) ##0 (delay >= 0,delay=delay-1) [*0:$] ##1 b0;
endsequence
首先判断delay的值,是否大于等于0,判断为真后,执行后者,等到b0满足,不满足继续自减delay,当减到0,delay也会自动结束。
reference:
https://www.cnblogs.com/lyc-seu/p/12718412.html
[SV]在SVA中使用可变的延时(Variable delay in SVA)_sva实列 一定时间内保持不变_元直数字电路验证的博客-CSDN博客