How to generate a coverpoint of a register, which has 12 instances

Hi,

I’m writing a covergroup which has all the coverpoints of all the registers. But for 1 register, it has 12 instances. where I want to write a coverpoint for the register which covers for all the 12 instances of it.
Here I’m writing a example code to explain my requirement.

covergroup check (string name) with function sample(input register_block reg_block);
option.name = name;
option.per_instance = 1;
for(int i=0; i<12; i++)
begin
    ABC_[i] : coverpoint {reg_block.abc[i].abc.value}
                     {
                           bins low_range[] = {[0:15]};              
                           bins mid_low_range[] = {[16:255]};  
                           bins mid_high_range[] = {[256:65535]};   
                           bins high_range[] = {[65536:131071]};    
                 }

Here the coverpoint should cover for all the instances (0-12), and how to print the coverpoint name for all 12 instances.

Thanks

You cannot have procedural code inside a covergroup like a for loop. Nor can you have an array of coverpoints. But you can construct an array of covergroup instances.

event sample_reg;
covergroup check (string name, uvm_reg rg) @(sample_reg);
  option.name = name;
  option.per_instance = 1;
  coverpoint : rg.value
                     {
                           bins low_range[] = {[0:15]};              
                           bins mid_low_range[] = {[16:255]};  
                           bins mid_high_range[] = {[256:65535]};   
                           bins high_range[] = {[65536:131071]};    
                 }
endgroup
check check_reg[12];
iniital begin
   foreach(check_reg[i]) check_reg[i] = new($sformatf("somename_%0d",i),regmodel.abc[i].abc);
  ...
end