SV断言入门二
背景
这里介绍SV断言的一些常用方法
核心内容
我的理解
内嵌函数
SV中有很多函数适合用于断言检查
$rose(expr):等待信号从0->1
$fell(expr):等待信号从1->0
$stable(expr):检测信号和上一个时钟周期相比保持稳定不变
$changed(expr):检测信号和上一个时钟周期相比发生变化
$past(expr, n):返回第n个周期前的值
$countones(expr):统计1的个数
$onehot(expr):检测信号中仅1位为1
$onehot0(expr):检测信号中仅1位为1或全0
$isunknown(expr):检测信号是否包含X/Z
操作符
##m:延时m个时钟周期
##[m:n]:延时m-n个时钟周期,剩余的操作符也有类似的操作
[*m]:重复m个周期
[=m]:重复寻找重复m个次的情况
[->m]:检查是否有重复m次的情况
sig1 throughout seq1:sig1在seq1执行完成前保持为1
seq1 within seq2:seq1在seq2执行后开始,在seq2执行PASS前PASS
seq1 and seq2:seq1和seq2同时开始,并均PASS
seq1 or seq2:seq1和seq2同时开始,并有至少一个PASS
seq1 intersect seq2:seq1和seq2同时开始,并同时PASS
first_match(seq):检查到第一个符合条件的情况就检查PASS,常在delay范围中使用
not<property_expr>:套在property外的操作符,给断言结果取反
一句话总结
使用各种操作符和内嵌函数可以让断言变得高效且精准




