There is no way to disable all “automatically-generated cross bins” like default in a coverpoint bin. Generally you are trying to collapse the set of individual automatically generated bins into larger bins.
To get a narrower set of cross bins, you have several options. My first suggestion would be to narrow the coverpoints in the cross. This would show your intent best.
int i,j;
covergroup ct;
i0: coverpoint i { bins i = { 0 }; }
i1: coverpoint i { bins i = { 1 }; }
coverpoint j { bins j[] = { [0:1] }; }
x1: cross i,j;
x2: cross i0,j;
endgroup
The next suggestion would be to use ignore_bins. There are many different types of expressions in a cross bin, but for this simple example, you might use
int i,j;
covergroup ct;
coverpoint i { bins i[] = { [0:1] }; }
coverpoint j { bins j[] = { [0:1] }; }
x1: cross i,j;
x2: cross i,j {
bins i_zero = binsof(i) intersect { 0 };
ignore_bins ignore = ! binsof(i) intersect { 0 };
}
endgroup
But this becomes more difficult to manage as you get more complicated crosses.