sv-covergroup-instance

介绍一种covergroup的写法,可以例化多份covergroup,简化代码,也可以传递参数给covergroup,从而使这多分covergroup具有一点不同属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class fun_cov_class;
class port_cov;
covergroup cg_addr(bit[63:0] region_base, bit[63:0] region_end) with function(bit[63:0] addr);
cp_addr: coverpoint (addr){
bins bins_addr = {[region_base: region_end]};
}
option.per_instance = 1; // 指定单个实例覆盖率
endgroup
function new(bit[63:0] region_base, bit[63:0] region_end);
cg_addr = new(region_base, region_end);
endfunction
endclass
port_cov cov_a[];
function new();
cov_a = new[2];
cov_a[0] = new(0, 1);
cov_a[1] = new(2, 3);
endfunction
endclass

module fun_cov_module(input clock, input reset);
fun_cov_class cov;
initial begin
cov = new();
forever begin
if(!reset)begin
cov.cg.sample(xxxx);
end
@(negedge clock);
end
end
endmodule

bind top fun_cov_module fun_cov_module(clock, reset);