I am trying to do functional coverage for an array 32 bit . but every time it is hitting [0] position only.
covergroup gt_en_cg (string name) with function sample(int unsigned gt_en);
option.per_instance = 1;
option.name = name;
gt_en_cp: coverpoint gt_en {
//option.auto_bin_max = NUM_P;
bins gt_en[NUM_P]= {[0:NUM_P-1]};
}
//new()
function void sample();
foreach (gt_en[i])
begin
gt_en_cg.sample(.gt_en(cfg_obj.gt_en[i]));
end
endfunction
at the output i can check i am getting values for gt_en from [0] … [31].
but in cover points every time i am getting hits only for [0] position.
Please suggest me the correct way of doing this.
In reply to yoshiko:
This does not make any sense as all of your bin array elements hit the same value range [0:NUM_P-1].
Can you show us the declaration of cfg_obj.gt_en along with example values you expect to sample?
In reply to dave_59:
I am using following constraints to get the values of gt_en
class data_cfg#(tb_pkg::NUM_P);
rand logic [NUM_P-1:0] gt_en;
constraint c_gt_en_cfg { gt_en inside {[0: 2**NUM_P -1 ]};
end class
class do_cfg;
//created object of config class
data_cfg#(31) cfg_obj;
// created obj of coverage class
data_cov cov_obj;
//new()
task body();
repeat(tc_count)
//randomize gt_en
if ( !cfg_obj.randomize() )
`uvm_fatal(get_name(),"Randommization failed!");
//apply cfg to tb
//called sample function to use same values
cov_obj.gt_en_cg.sample(cfg_obj.gt_en)
end task
Please let me know your valuable suggestions…