是否可以为交叉覆盖箱中的每个交叉产品创建单独的箱

Is it possible to create separate bin for each cross product in a cross coverage bin

我有两个要跨越的覆盖点,如下面的代码所示。在交叉覆盖中,我想根据其中一个覆盖点的值将交叉值组织到不同的容器中,在本例中为 cp_a。例如 cr.a1 是当 a 为 1 时 b 的所有值的叉积。下面的示例为满足此条件的所有交叉创建一个统一的 bin。是否可以为 a 为 1 的每个叉积 axb 创建一个单独的 bin?在这种情况下,它将有 10 个不同的分箱,每个分箱对应 b 的每个值,而 a 为 1。

对于 coverpoint bin,您可以使用 bins b [] = {[0:10]},但它看起来不适用于 cross。

module top {
  int a;
  int b;
  covergroup CG;
    cp_a : coverpoint a {
      bins a1 = {1};
      bins a2 = {2};
      bins a3 = {3};
    }
    cp_b : coverpoint b {
      bins b [] = {[0:10]};
    }
 
    cr : cross cp_a, cp_b {
      bins a1 = binsof(cp_a.a1);
      bins a2 = binsof(cp_a.a2);
      bins a3 = binsof(cp_a.a3);
    }
  endgroup
endmodule

组织 cross 的 bin 与 coverpoint 有很大不同。您通常希望忽略不需要的垃圾箱或更改收集封面点的方式。在这种情况下,我认为您想将 cp_a 分成三个覆盖点并创建三个十字。

module top {
  int a;
  int b;
  covergroup CG;
    cp_a1 : coverpoint a { bins a1 = {1}; }
    cp_a2 : coverpoint a { bins a1 = {2}; }
    cp_a3 : coverpoint a { bins a1 = {3}; }
    cp_b : coverpoint b {
      bins b [] = {[0:10]};
    }
 
    cr_a1 : cross cp_a1, cp_b;
    cr_a2 : cross cp_a2, cp_b;
    cr_a3 : cross cp_a3, cp_b;
  endgroup
endmodule