In reply to sj1992:
Quote:
Hi,
For the transition cover bin below if the var_1 changes from 0 to 128, will it satisfy the cover bin or should var_1 transition between all the cross combinations between the 2 ranges for it to get covered?
bit [9:0] var_1;
bins var_1 = ([0:127]=>[128:255]);
I'm not sure if I understand you question correctly but a simple example can show how bin arrays and scalar bins work
module test();
bit [9:0] var_1;
logic [9:0] prev_var_1;
covergroup transition_cg_1;
coverpoint var_1 {
bins bin_scalar = ([0:127]=>[128:255]);
}
endgroup
covergroup transition_cg_2;
coverpoint var_1 {
bins bin_array[] = ([0:127]=>[128:255]);
}
endgroup
transition_cg_1 cg1 = new();
transition_cg_2 cg2 = new();
initial begin
repeat(10) begin
if(!std::randomize(var_1) with {var_1 <= 255;}) $fatal(1, "Randomize Failed");
cg1.sample();
cg2.sample();
$display("prev_var_1 = %0d => var_1 = %0d", prev_var_1, var_1);
prev_var_1 = var_1;
$display("cg1 coverage = %0f", cg1.get_coverage());
$display("cg2 coverage = %0f", cg2.get_coverage());
end
end
endmodule
Which outputs
# KERNEL: prev_var_1 = x => var_1 = 197
# KERNEL: cg1 coverage = 0.000000
# KERNEL: cg2 coverage = 0.000000
# KERNEL: prev_var_1 = 197 => var_1 = 185
# KERNEL: cg1 coverage = 0.000000
# KERNEL: cg2 coverage = 0.000000
# KERNEL: prev_var_1 = 185 => var_1 = 178
# KERNEL: cg1 coverage = 0.000000
# KERNEL: cg2 coverage = 0.000000
# KERNEL: prev_var_1 = 178 => var_1 = 67
# KERNEL: cg1 coverage = 0.000000
# KERNEL: cg2 coverage = 0.000000
# KERNEL: prev_var_1 = 67 => var_1 = 92
# KERNEL: cg1 coverage = 0.000000
# KERNEL: cg2 coverage = 0.000000
# KERNEL: prev_var_1 = 92 => var_1 = 63
# KERNEL: cg1 coverage = 0.000000
# KERNEL: cg2 coverage = 0.000000
# KERNEL: prev_var_1 = 63 => var_1 = 235
# KERNEL: cg1 coverage = 100.000000
# KERNEL: cg2 coverage = 0.006104
# KERNEL: prev_var_1 = 235 => var_1 = 244
# KERNEL: cg1 coverage = 100.000000
# KERNEL: cg2 coverage = 0.006104
# KERNEL: prev_var_1 = 244 => var_1 = 35
# KERNEL: cg1 coverage = 100.000000
# KERNEL: cg2 coverage = 0.006104
# KERNEL: prev_var_1 = 35 => var_1 = 21
# KERNEL: cg1 coverage = 100.000000
# KERNEL: cg2 coverage = 0.006104
So as you can see if you use bins x = ([0:127]=>[128:255]) any transition in this range will mark the bin as hit 100% coverage, but using bins x[] = ([0:127]=>[128:255]) this will create an array with all the transitions for 0=>128,...,0=>255,... 127=>128,...,127=>255 thus the value shown for cg2 coverage.
You can refer to the IEEE SV LRM section 19.5.2 Specifying bins for transitions
for more details.
HTH,
-R