一. 功能覆盖组的定义
- 用法一:
功能覆盖组可以定义在class(实例化名为aa)内部,在class new函数中实例化,然后在该class的shutdown phase中用sample()进行采样,也可在别的组件类中通过aa.func_cg.sample()进行采样
2. 用法二:
功能覆盖组可以定义在interface中,收集此interface上信号的变化,例如:
covergroup aa_inf_cg @(posedge clk);
ADDR:coverpoint addr[1:0] iff(wen == 1){
bins min_addr[] = {[0:3]};
}
endgroup
上述写法表示在每个时钟上升沿进行采样,也可以@一些别的信号,在此信号变化时进行采样
二. 常见仓的建立
建立一个仓:
bins bin_name = bin_value;
建立多个仓:
bins bin_name[] = {value1,value2,[value4:valuen]};
建立多个仓,并把value均分:
bins bin_name[10] = {[0:99]};//建立10个仓,将0~99均分到10个仓
建立非法仓:
illegal_bins illegal_name = illegal_value;
建立cross:
cross_name:cross CFG1,CFG2,CFG3;
建立非法cross的仓:
CROSS_CFG: cross CFG1,CFG2,CFG3{
illegal_bins illegal_name1 = CROSS_CFG with (CFG1*CFG2<CFG3);
illegal_bins illegal_name2 = CROSS_CFG with (CFG1*CFG2>10);
illegal_bins illegal_name3 = binsof(CFG1) intersect{1} && binsof(CFG2) intersect{2};
}
建立变量跳变的仓(一般用于接口信号的跳变):
ADDR: coverpoint address[1:0] iff(wen==1){
bins bins_name = (0 => 1);
bins bins_name = (0 => 2);
bins bins_name = (0 => 3);
}