赞
踩
sequence name_sequence
......
endsequence
property name_property
......
endproperty
assertion_name:assert property(property_name);
$rose(expression or signal) //当信号/表达式由0变成1时返回真
$fell(expression or signal) //当信号/表达式由1变成0时返回真
$stable(expression or signal) //当信号/表达式不发生变化时返回真
property p8;
@(posedge clk) a|->b;
endproperty
a8:assert property(p8); //p8检查a在给定时钟上升沿是否给高电平,如果为高,信号b在相同的时钟边沿也必须为高
property p9;
@(posedge clk) a|=>b;
endproperty
a9:assert property(p9); //p9检查a在给定时钟上升沿是否给高电平,如果为高,信号b在下一个时钟沿也必须为高
property p12; //p12检查a&&b在任何给定时钟的上升沿为真
@(posedge clk) (a&&b)|-> ##[1:3] c; 若表达式为真,则在接下来1-3个时钟周期内,信号c应该至少在一个时钟周期为高
endproperty
a12:assert property(p12);
property p14;
@(posedge clk) a|-> ##[1:$] b ##[0:$] c; //无限
endproperty
a14:assert property(p14);
sequence s15a;
@(posedge clk) a ##1 b;
endsequence
sequence s15b;
@(posedge clk) c ##1 d;
endsequence
property p15b;
s15a.ended|->##2 s15b.ended; //使用序列的结束点作为同步点的连接机制
endproperty
a15b:assert property (p15b);
$past(signal_name, number of clock cycles)
property p19;
@(posedge clk) (c&&d)|->($past((a&&b),2)==1'b1);
endproperty
a19:assert property(p19);
signal or sequence [*n]
property p25;
@(posedge clk) $rose(start) |->##2 (a[->3]) ##1 stop; //如果start信号在任何时钟上升沿拉高,那么两个时钟信号周期后,信号a连续或者间断出现3次为高,接着信号stop在下一个时钟周期为高
endproperty
property p26;
@(posedge clk) $rose(start) |->##2 (a[=3]) ##1 stop ##1 !stop; //a为高可以是连续的3个周期也可以是非连续3个,stop为高也可以与最后一个a为高间隔不止一个周期
endproperty
(expression) throughout (sequence)
seq1 within seq2 //表示seq1在seq2的开始到结束范围内发生,且seq2的开始点必须在seq1的开始点之前发生,seq2的结束点必须在seq1的结束点之后结束
$onehot(expr) //检验表达式满足“one-hot”,即表达式是否只有一位为1
$onthot0(expr) //检验表达式是否只有一位或者没有任何位为1
$isunknown(expr) //检验表达式任何位是否有X或Z
$countones(expr) //计算向量中为1的位数
disable iff (expr) <property>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。