交叉覆盖继承 coverpoint 的 iff 子句

Cross coverage inheriting iff clause of coverpoint

我发现我的一个十字架继承了其中一个组成封面的“iff”子句。

covergroup cg @(LdReqVld_d1);
    LdReq_cp : coverpoint LdReqVld_d1 iff (!LdReqCancel);
    LdOp_cp  : coverpoint LdReqOp_d1  iff (LdReqVld_d1 && !LdReqCancel);
    LdCancel_cp : coverpoint LdReqCancel;
    CrossCancel : cross LdOp_cp, LdCancel_cp;

我看到 CrossCancel 从未与 LdReqCancel == 1 碰撞任何垃圾箱,即使我期望如此,我怀疑这是因为 LdOp_cp 与包含 iff (LdReqVld_d1 && !LdReqCancel),所以 CrossCancel“秘密地”也有 iff 保护它。这是预期的行为吗?如果是这样,我该如何预防?

A cross 在技术上位于 coverpoint 的 bin 之间,而不是 coverpoint 本身。来自 IEEE 1800-2017 SystemVerilog LRM 部分 19.6 定义交叉覆盖:

Cross coverage of a set of N coverage points is defined as the coverage of all combinations of all bins associated with the N coverage points

因此,如果由于 iff 守卫而未对 coverpoint bin 进行采样,则交叉 bin 也会受到守卫。