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



我有两个覆盖点要交叉,如下代码所示。在交叉覆盖中,我想根据其中一个覆盖点的值将交叉值组织到不同的bin中,在本例中为cp_a。例如,当a为1时,cr.a1是b的所有值的叉积。下面的示例为满足此条件的所有十字架制作一个统一的bin。是否可以为每个交叉产品axb制作一个单独的仓,其中a为1?在这种情况下,它将是10个不同的仓,b的每个值一个,而a是1。

对于覆盖点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的仓的组织与覆盖点非常不同。你通常想忽略你不想要的垃圾箱,或者改变收集覆盖点的方式。在这种情况下,我认为你想把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

最新更新