I’m trying to write coverpoints for specific sequences of instructions in a pipeline:
pipe_stage_0: coverpoint({stage_0_is_inst_A, stage_0_is_inst_B})
{
bins IS_A = {2'b10};
bins IS_B = {2'b01};
bins IS_NEITHER = {2'b00};
}
pipe_stage_1: coverpoint({stage_1_is_inst_A, stage_1_is_inst_B})
{
bins IS_A = {2'b10};
bins IS_B = {2'b01};
bins IS_NEITHER = {2'b00};
}
pipe_stage_2: coverpoint({stage_2_is_inst_A, stage_2_is_inst_B})
{
bins IS_A = {2'b10};
bins IS_B = {2'b01};
bins IS_NEITHER = {2'b00};
}
pipe_inst_cross: cross pipe_stage_0, pipe_stage_1, pipe_stage_2
{
bins A_B_NEITHER = binsof(pipe_stage_0.IS_A) && binsof(pipe_stage_1.IS_B) && binsof(pipe_stage_2.IS_NEITHER);
bins A_A_NEITHER = binsof(pipe_stage_0.IS_A) && binsof(pipe_stage_1.IS_A) && binsof(pipe_stage_2.IS_NEITHER);
bins NEITHER_A_B = binsof(pipe_stage_0.IS_NEITHER) && binsof(pipe_stage_1.IS_A) && binsof(pipe_stage_2.IS_B);
... // a few other explicit sequences I want to include
// somehow ignore remainder bins?
}
The coverage report certainly shows these explicit bins, but unfortunately it also autogenerates every other combination of the cross. (The latter greatly outnumbers the former.)
How can I ignore those remainder bins? I have tried
ignore_bins ignore_invalid = default;
but it seems this is not allowed in a cross statement.