Cross Coverage using Coverpoints with fixed bins

Is it possible to use the fixed bins created with a coverpoint for cross coverage bins?

Here is my code:



covergroup cvgrp;
   logic [31:0] Address_pt : coverpoint tr.addr
   {
      bins ram_div [32] = {[`RAM_AddrFirst:`RAM_AddrLast]};  
   }
   
   direction_t Direction_pt : coverpoint tr.Direction 
   {
      ignore_bins undef = {UNDEFINED};
      bins READS  = {READ};
      bins WRITES = {WRITE};
   }
   
   transactions : cross Address_pt, Direction_pt
   {
      bins ram_read  = binsof(Address_pt.ram_div) && binsof(Direction_pt.READS);
      bins ram_write = binsof(Address_pt.ram_div) && binsof(Direction_pt.WRITES);   
   }
endgroup : cvgrp


What I want is for the cross to show a read/write for each of the 32 fixed bins created in coverpoint Address_pt.ram_div. But instead, the cross only shows read/write for the entire ram_div as though it were one single bin…

Is what I want to do possible?

In reply to ce_2015:

The bins directive of a cross can only merge or ignore automatically generated cross-bins.

What you need to do is define two coverpoints with one bin instead of one coverpoint with two bins. Then define two crosses.

covergroup cvgrp;
   Address_pt : coverpoint tr.addr
   {
      bins ram_div [32] = {[`RAM_AddrFirst:`RAM_AddrLast]};  
   }
 
   Read_pt : coverpoint tr.Direction 
   {
      bins READS  = {READ};
   }
   Write_pt : coverpoint tr.Direction 
   {
      bins READS  = {Write};
   }
   ram_read : cross Address_pt, Read_pt;
   ram_write : cross Address_pt, Write_pt;

endgroup : cvgrp

In reply to ce_2015:

Doesn’t declaring the cross without specifying any bins do exactly what you want?

In reply to Tudor Timi:

Yes, I missed that. I guess it depends on how they want it reported.

Thank you both.

Yes, Tudor Timi, declaring the cross without any bins does yield 64 bins (32 x READ, 32 x WRITE). Both Dave’s answer and your answer contained that fact that the cross cannot specify any bins in the cross if you want this to happen.