Hello Forum,
I have the following code ::
class tc_atc_req extends uvm_sequence_item;
bit [15:0] nsid;
bit [11:0] hfid;
....
endclass
// Within coverage component class 'nvmetc_cov'
covergroup axis_tc_atc_rsrv_if with function sample(tc_atc_req tr);
axis_tc_atc_rsrv_if_hfid: coverpoint tr.hfid[10:0]{
bins hfid0[] = { 0 , [32:1055] } iff( tr.hfid[11] == 1'h0 );
ignore_bins hfid0_ill = {[1:31],[1056:$]} iff( tr.hfid[11] == 1'h0 );
// Dual Host Mode
bins hfid1[] = { 0 , [32:543] } iff( tr.hfid[11] == 1'h1 ) ;
ignore_bins hfid1_ill = {[1:31],[544:$]} iff( tr.hfid[11] == 1'h1 );
}
axis_tc_atc_rsrv_if_nsid: coverpoint tr.nsid[14:0]{ bins nsid[] = {[0:1023]};
ignore_bins nsid_ill = {[1024:$]}; }
endgroup
// Within constructor
axis_tc_atc_rsrv_if = new();
Note that there is a single instance of the covergroup 'axis_tc_atc_rsrv_if ’
However, in the html coverage report I observe ::
CG nvmetc_env_pkg::nvmetc_cov::axis_tc_atc_rsrv_if
Cg VLOG.LIB.nvmetc_env_pkg::nvmetc_cov::axis_tc_atc_rsrv_if::SHAPE{Guard_ON(axis_tc_atc_rsrv_if_hfid.hfid1_ill),Guard_OFF(axis_tc_atc_rsrv_if_hfid.hfid0_ill)}
Cp axis_tc_atc_rsrv_if_nsid
Cp axis_tc_atc_rsrv_if_hfid
Cg VLOG.LIB.nvmetc_env_pkg::nvmetc_cov::axis_tc_atc_rsrv_if::SHAPE{Guard_ON(axis_tc_atc_rsrv_if_hfid.hfid0_ill),Guard_OFF(axis_tc_atc_rsrv_if_hfid.hfid1_ill)}
Cp axis_tc_atc_rsrv_if_nsid
Cp axis_tc_atc_rsrv_if_hfid
The coverpoints ‘axis_tc_atc_rsrv_if_hfid’ & ‘axis_tc_atc_rsrv_if_nsid’ appear twice in the coverage report with a different coverage report of covered & uncovered bins
(1) Why is that I observe the same coverpoint label twice ?
(2) What is the meaning of Guard_ON and Guard_OFF ? The iff clause applies to a coverpoint and not a covergroup
Thanks in Advance