How to ignore bins in double crossed coverage?

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.

In reply to Tatjana T:

The LRM does not define multiple levels of crosses; your tool may have allowed a simple case to slip by. There is no syntax defined for what you want.

You can flatten out your crosses by writing

mst_id_slv_id_data_word0_crs: cross mst_id_cov, slv_id_cov , data_word0_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} );
  ignore_bins word0_ignore = binsof(mst_id_cov.mst0);
}

In reply to dave_59:

In that case this is the best solution. Thank you.