先写一个简单的例子:
covergroup cov_0_cg(ref int a,ref int b);
option_per_instance = 1 ;
a_cg : coverpoint a{
bins zeros = {0};
}
b_cg : coverpoint b{
bins zeros = {0};
bins other = {[1:100]};
}
cross a_cg,b_cg;
endgroup
上面这种covergroup,在new的时候需要传入要采样的变量,而sample的时候不需要传入采样的变量;
covergroup cov_1_cg with function sample(int a,int b);
option.per_instance = 1;
a_cg : coverpoint a{
bins ones = {1};
}
b_cg : coverpoint b{
bins zeros = {0};
bins other = {[1:100]};
}
cross a_cg,b_cg;
endgroup
上面这种covergroup在new的时候不需要传入变量,但是在调用sample的时候需要传入采样的变量;
class cov;
int a,b;
cov_0_cg cov_0_cg;
cov_1_cg cov_1_cg;
function new();
cov_0_cg = new(a,b);
cov_1_cg = new();
endfunction
function void sample(int a_in,int b_in);
a = a_in;
b = b_in;
cov_0_cg.sample();
cov_1_cg.sample(a,b);
endfunction
endclass
上面展示在类里面调用上面的两种covergroup;
program cov_test;
int a,b;
cov cov_0;
cov cov_1;
initial begin
cov_0 = new();
cov_0.cov_0_cg.option.name = "cov_0.cov_0_cg";
cov_0.cov_1_cg.option.name = "cov_0.cov_1_cg";
cov_1 = new();
cov_1.cov_0_cg.option.name = "cov_1.cov_0_cg";
cov_1.cov_1_cg.option.name = "cov_1.cov_1_cg";
a = 0 ;
b = 1 ;
cov.sample(a,b);
#10;
a = 1 ;
b = 0 ;
cov.sample(a,b);
end
endprogram
用上面的program对例子进行测试,测试结果如下:
coverage的options
Option可以控制covergroup、coverpoint和cross的行为;
存在两种option:1.控制covergroup instance的行为;2.控制covergroup type的行为;
控制covergroup instance行为的options:
Option选项 | 默认值 | 描述 |
name | 自动分配名 | 指定covergroup instance名 |
weight | 1 | 权重;可以在covergroup、coverpoint和cross层次设置 |
goal | 100 | 目标得分;可以在covergroup、coverpoint和cross层次设置 |
comment | “” | 注释;可以显示在报告里面;可以在covergroup、coverpoint和cross层次设置 |
at_least | 1 | 最小击中次数,小于该次数被认为没有击中;可以在covergroup、coverpoint和cross层次设置 |
auto_bin_max | 64 | 没有指定bins的coverpoint的最大bins数;可以在covergroup、coverpoint层次设置 |
cross_num_print_missing | 0 | 没有覆盖到的cross结果需要打印到报告;可以在covergroup和cross层次设置 |
detect_overlap | 0 | 如果一个coverpoint里面两个bins有重叠,会报warning;可以在covergroup、coverpoint层次设置 |
per_instance | 0 | 如果为1,则没有instance独立统计数据;可以在covergroup层次设置 |
get_inst_coverage | 0 | 当为1时,可以获取每个inst的coverage; 否则结果和get_coverage一样。可以在covergroup层次设置 |