I have impelmented a cross between a cross and a regular coverage item:
mst_id_cov: coverpoint mst_id_c {
bins mst0 = {0};
bins mst1 = {1};
bins mst2 = {2};
}
slv_id_cov: coverpoint slv_id_c {
bins slv0 = {0};
bins slv1 = {1};
bins slv2 = {2};
}
data_word0_cov: coverpoint data_word0_c {
wildcard bins bit_0_as_0 = {31'b???????????????????????????????0};
wildcard bins bit_0_as_1 = {31'b???????????????????????????????1};
...
wildcard bins bit_31_as_0 = {31'b0???????????????????????????????};
wildcard bins bit_32_as_1 = {31'b1???????????????????????????????};
}
//First cross
mst_id_slv_id_crs: cross mst_id_cov, slv_id_cov {
ignore_bins ignore_target0 = mst_id_slv_id_crs with ( slv_id_cov == 3 && mst_id_cov inside {0,2} );
ignore_bins ignore_target1 = mst_id_slv_id_crs with ( slv_id_cov == 2 && mst_id_cov inside {0,1} );
}
//Second cross
mst_id_slv_id_data_word0_crs: cross mst_id_slv_id_crs, data_word0_cov {
}
This works. But now I want to ignore some things from this second cross, but based on the mst_id value. I do not want to ignore it in the first cross, because I have other double crosses using this first cross as well. I only want to ignore them when crossed with data_word0.
Does anyone know if that is possible at all, and if yes, how?
I tried something like this but it does not work:
mst_id_slv_id_data_word0_crs: cross mst_id_slv_id_crs, data_word1_cov {
ignore_bins word0_ignore = binsof(mst_id_slv_id_crs) {
ignore_bins word0_mst_ignore = binsof(mst_id_cov.mst0);
}
}
I also tried something like this:
mst_id_slv_id_data_word0_crs: cross mst_id_slv_id_crs, data_word1_cov {
ignore_bins word0_ignore = binsof(mst_id_slv_id_crs.mst_id_cov.mst0);
}
Is it possible to access mst_id when doing ignore in this final cross at all?
I simplified the code, the full coverage implementation is longer.
Thanks.