How make Cross Coverage bins with condition?

Hi, I want to create cross coverage bins with condition

for example

int a;
int b;

constraint c1 {
  a inside {[1:3]};
  b inside {[1:3]};
}

covergroup cov1;
  cp1 : coverpoint a {bins b1[] = {[1:3]};}
endgroup

covergroup cov2;
  cp1 : coverpoint b {bins b1[] = {[1:3]};}
endgroup

covergroup cov3;
  cp1 : cross cov1.cp1, cov2.cp2 iff(a<=b);
endgroup

Then, i expected number of bins in cov3 to be 6 but it was made 9 bins
=> expect bins (a,b) : (1,1), (1,2), (1,3), (2,2), (2,3), (3,3)
=> real made bins (a,b) : (1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)

How do i make bins what i expected?

In reply to HanP:

The iff construct only disables sampling of a covergroup/point/bin—it has no effect on bin construction.

You need to use the with construct

covergroup cov1;
  cp1 : coverpoint a {bins b1[] = {[1:3]};}
  cp2 : coverpoint b {bins b1[] = {[1:3]};}
  cp3 : cross cp1, cp2 {
    ignore_bins ib = cp3 with (cp1 > cp2);
  }
endgroup

BTW, you can only cross coverpoints from the same covergroup. That’s the only way that sampling can be synchronized.