| |
bind用法
bind module_name1 module_name2 inst_name();
module_name1:被bind的module
module_name2:发起bind的module
应用场景:module_name2中做assertion,去bind rtl内部module;module_name2是interface
关键词property用来区分立即断言和并行断言
交叠交错 |->
非交叠蕴含 |=>
$ rose:判断上升沿。如果表达式的值跳变为1,$rose函数返回真,否则返回假
$ fell:判断下降沿。如果表达式的值跳变为0,$fell函数返回真,否则返回假
$ past:返回当前时钟周期之前的一个时钟周期的表达式的采样值
$ stable:判断信号的稳定不变,如果表达式的值保持稳定不变,$ stable函数返回真,否则返回假
$ sampled:在时钟事件的最后时刻采样表达式的值
sequence:表示一个或多个时钟周期内的时序描述,是property基本构建模块,可组合来描述复杂的功能属性。
expect:
assert、assume和cover都是非阻塞的方式,即它们本身并不会阻塞后续的语句,然而expect是一种阻塞的property使用方式。
可以使用wait语句的地方,即可以使用expect语句。
task automatic wait_for(integer value, output bit success);
expect(@(posedge clk) ##[1:10] data == value) success =1;
else success = 0;
endtask
first_match操作符:如果有多个匹配序列时,first_match操作符只返回第一个操作序列
or操作符:两个序列至少需要有一个满足。
throughout:检查一个信号或者一个表达式在贯穿( throughout)一个序列时是否满足要求
within:
SEQ1 within SEQ2
seq1满足在seq2的一部分连续时钟周期内成立
[*n]:重复n次,n为非负数,不能为$
a ## 1 b[*2:5] is equivalent to
a ##1 b ##1 b
a ##1 b ##1 b ##1 b
a ##1 b ##1 b ##1 b ##1 b
a ##1 b ##1 b ##1 b ##1 b ##1 b
[=m]:重复发生m次,但不需要在连续周期内发生
[->m]:与[=m]不同的是表达式的最后一个匹配项应该在整个序列匹配结束之前的周期内发生
property goto_repetition_p;
@(posedge clk) $rose(a) |-> b[->3] ##1 c;
endproperty
pass:
!a a !b !b b !b !b b !b b c
fail:
!a a !b !b b !b !b b !b b !b c