covergroup是对coverage model的一种包装,每个covergroup可以包含:
1) sync event来触发采样,
2) 很多coverpoint,
3) cross coverpoint,
4) 可选的formal arguments,
5) 很多options。
covergroup与class类似,也是需要new出来对象,本身定义的只是一个原型,covergroup可以被定义在
package,module,program,interface,checker或者class中。
sync event是可选的,省略的情况下,显示调用内部的sample() function来进行采样,build-in的sample是不支持参数传递的。
formal arguments,不可以定义为inout和output,只能定义为ref和input,这时的ref等同于const ref。这时在new的时候,需要传递进去参数。
这样的参数是不能被hier引用到的。
一个covergroup特有的option,strobe,表明只在当前time slot的最后,进行sample,避免有时可能在同一slot采样多次。
coverpoint的定义,一般需要加一个label,方便分析coverage report。
$可以在数组中,表示上限和下限;
iff可以表示条件;
default,可以表示default的数值bin;
default sequence,可以表示default的 transition bin;
wildcard bins,主要可以使用?、x、z等匹配符;需要匹配x、z的时候,使用===
with语句,表示附件条件,类似于&&;但是coverpoint中并不能使用&&;
定义全集合bins,ignore_bins,illegal_bins,否则coverage计算不能收集全。
transition的bins:[*n]表示连续的n次迭代;
[->n]表示不连续的n次迭代,但是紧跟着的是连续的跳变;
[=n]表示不连续的n次迭代,下一次的跳变不需要连续;
cross bins,可以使用逻辑运算符,!,&&,||,关键字,with,matches,binsof,intersect等。
也可以直接对cross bin进行赋值,与coverpoint相同;
covergroup中内建的几个function,
void sample();real get_coverage();real get_inst_coverage();
void set_inst_name();void start(); void stop();
用户也可以重载sample的方法,使用with function的语法:(加入参数的传递)
covergroup,coverpoint,cross point定义的option,type_option没见过用处。
auto_bin_max只对用户不定义bins的情况,auto的大小的限制;
weight,在不同的层次,表示对上一级贡献的百分比。cross中的weight,表示该cross对整个group的coverage report的影响。