I have this example for 6 coverpoints that can take same 6 values, but never the same value between them at a certain point (mutually exclusive). These values are not necessarily consecutive.
For example (where the bins specifically does not have value 3):
bit [3:0] a0,a1,a2,a3,a4,a5;
covergroup cg;
p0: coverpoint a0{
bins v[] = {0,1,2,4,5,6};
}
p1: coverpoint a1
{
bins v[] = {0,1,2,4,5,6};
}
p2: coverpoint a2{
bins v[] = {0,1,2,4,5,6};
}
p3: coverpoint a3{
bins v[] = {0,1,2,4,5,6};
}
p4: coverpoint a4{
bins v[] = {0,1,2,4,5,6};
}
p5: coverpoint a5{
bins v[] = {0,1,2,4,5,6};
}
CRS: cross p0,p1,p2,p3,p4,p5;
endgroup
With 2 values its simple but for more than 2 values it seems trickier. I suppose also there is a big penalty of performance of coverage between so many coverpoints.
What is the best way to make the cross coverage exclude the bins that are not mutual exclusive / or make only the valid bins that contain the mutual exclusive values ( for example valid crosses are {0,1,2,4,5,6},{6,1,5,4,2,0}…etc, where any value is not repeated 2 or more times.