Hey All,
I have been trying to exclude the auto generated cross bins using select_expression inside with condition.
c_size_cross: coverpoint csd_size {
// c_sz_x_64[0] = [1:64], c_sz_x_64[1] = [65:128] ....... c_sz_x_64[63] = [4033:4096]
bins c_sz_x_64[64] = { [1:4096] }; // Idea is to have numbers in multiple of 64
}
skipped_txn: coverpoint ((b0_sz_i - csd_size)/64)
iff (z_fill == 0 && b0_sz_i != 0 && b1_sz_i == 0) {
// Idea is to have skipped_txns[0] = 0, skipped_txns[1] = 1 ...... skipped_txns[63] = 63
bins skipped[] = { [0:63] };
}
b0_sz: coverpoint b0_sz_i {
bins sz[] = { 0, 64, 128, 256, 512, 1024, 2048, 4096 };
}
Requirements of exclusion:
- c_size_cross > 3072 (should contain bins having lesser value than 3072)
- b0_sz = 0 and b0_sz < c_size_cross (If b0_sz = 128 then c_size_cross bins having more than 128 should be ignored.)
- If b0_sz is 128 then skipped_txns bins having [2:63] should be ignored. Likewise, if b0_sz is 256 then skipped_txns bins having [4:63] should be ignored. Likewise, if b0_sz is 512 then skipped_txns bins having [8:63] should be ignored.
This is what I have tried, but couldn’t get the expected results.
skipped_txn_x_b0_sz: cross skipped_txn, b0_sz, c_size_cross
iff (z_fill == 0 && b1_sz_i == 0) {
// Point 1: Got the expected results using this
ignore_bins unreachable_b_sz_bins = binsof(b0_sz) intersect {0};
// Point 2: Got the expected results using this
ignore_bins unreachable_c_sz_bins =
binsof(c_size_cross.c_sz_x_64) with ((b0_sz < c_size_cross) || (c_size_cross > 3072));
// **Point 3: Not getting expected results. Don't see any effect of this condition in coverage reports**
ignore_bins unreachable_skipped_txns_bins =
binsof(skipped_txn.skipped) with (((int'(skipped_txn)<<6) >= b0_sz) != 0) ;
}
Let me know if I am missing anything here or have done anything wrong in implementation.
TIA