问题描述
我有两个要跨越的掩护点,如下面的代码所示。在交叉覆盖中,我想根据覆盖点之一(在本例中为cp_a)的值将交叉值组织到不同的箱中。例如,cr.a1是a为1时b的所有值的叉积。下面的示例对满足此条件的所有叉进行统一的合并。是否可以为a为1的每个叉积axb制作一个单独的容器?在这种情况下,它将是10个不同的bin,每个b的值对应一个,而a为1。
对于Coverpoint回收站,您可以使用bins b [] = {[0:10]}
,但对于交叉检查似乎无效。
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
的整理箱与掩盖点有很大不同。通常,您想忽略不需要的垃圾箱,或者更改收集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