agstod
November 13, 2017, 4:54pm
1
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?
dave_59
November 14, 2017, 4:49am
2
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?
dave_59
November 14, 2017, 3:40pm
4
In reply to Tudor Timi :
Yes, I missed that. I guess it depends on how they want it reported.
agstod
November 14, 2017, 5:15pm
5
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.