SystemVerilog 在命中后禁用覆盖 属性

SystemVerilog disable cover property after hit

我有几个掩体 属性 预计会经常发射,我看到它们开始影响我的模拟性能,因为它们发射得太频繁了。我不想删除它们,因为我想确保我仍然在点击这些属性,但我不在乎我点击了多少次。有没有办法在它被击中后禁用属性,这样它就不会影响模拟性能?

B2BReq : cover property ( 
  @(posedge CLK iff !RESET)
  Intf.ReqValid ##1 Intf.ReqValid
);

我在想这样的事情:

bit cov_disable;
B2BReq : cover property ( 
  @(posedge CLK iff !RESET) disable iff(cov_disable)
  Intf.ReqValid ##1 Intf.ReqValid |=> cov_disable = 1
);

但这是不正确的语法。有没有办法实现这样的目标?

有些工具会在达到特定限制时自动禁用覆盖指令。我知道在 Questa 中,默认设置是在点击 1 次后禁用。

此外,您可以通过简单的暗示获得更好的性能建模您想要的东西

B2BReq : cover property ( 
  @(posedge CLK iff !RESET)
  Intf.ReqValid |-> ##1 Intf.ReqValid;
);

顺便说一句,您正在寻找的语法是

bit cov_disable;
B2BReq : cover property ( 
  @(posedge CLK iff !RESET) disable iff(cov_disable)
  Intf.ReqValid ##1 Intf.ReqValid |=> (1,cov_disable = 1);
);