1. covergroup
覆盖组(covergroup)与类相似,一次定义后可多次实例化。covergroup可以包含一个或者多个coverpoint,且全都在同一时间采集。
covergroup可以定义在类中,也可以定义在interface或者module中;covergroup可以采样任何可见的变量,例如程序变量、接口信号或者设计端口。
一个类里可以包含多个covergroup,当拥有多个独立的covergroup时,每个covergroup可以根据需要自行使能或者禁止,每个covergroup可以定义单独的触发采样事件,允许从多个源头收集数据,covergroup必须被例化才可以用来收集数据。
2. 采样方法
2.1 sample()函数
在program中采样:
class Transaction;//创建事务
rand bit[31:0] data;
rand bit[2:0] port;
endclass
program automatic test(busifc.TB ifc);
coverage CovPort;//①创建覆盖组
coverpoint ifc.port;//采样接口port信号
endgroup
initial begin
Transactiob tr;
CovPort ck;//②为覆盖组声明句柄
ck=new;//并实例化
tr=new;
repeat(32) begin
assert(tr.randomize);
ifc.port<=tr.port;