一、 覆盖组
覆盖组(covergroup)与类相似,一次定义后便可以多次实例化。
covergroup可以包含一个或者多个coverpoint,却全都在同一时间采集。
coverpoint常用来衡量某些变量,这些变量有可能是硬件的信号变量,也有可能是软件的变量,衡量这些变量在某些时间采样的值。coverpoint要去监测某些变量在某些特定采样时间采样了以后,在那些时刻所采样的值。
covergroup可以被定义在类中,也可以被定义在interface或module里面
covergroup可以采样任何可见的变量,例如程序变量,接口信号或者设计端口。
covergroup要被告诉采样那些变量,要在什么时刻采样或者声明你的采样事件是什么
一个类里可以包含多个covergroup。当你拥有多个独立的covergroup时,每个covergroup可以根据需要自行使能或者禁止。
(constraint和rand_mode也可以做使能)
每个covergroup可以被定义为单独的采样事件,允许从多个源头收集数据。covergroup必须被例化才可以用来收集数据。
class Transactor;
Transactor tr;
mailbox mbx_in;
covergroup Covport;
coverpoint tr.port;
endgroup
function new(mailbox mbx_In);
Covport = new();
this.mbx_in=mbx_in();
endfunction
task main;
forever begin
tr=mbx_in.get;
ifc.cb.port<=pr.port;
ifc.cb.data<=tr.data;