Transition coverage between 2 ranges

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]);

In reply to sj1992:

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