【问题标题】:SystemVerilog disable cover property after hitSystemVerilog 在命中后禁用覆盖属性
【发布时间】:2021-05-14 20:12:29
【问题描述】:

我有一些封面属性,我希望它们会非常频繁地触发,并且我看到它们开始影响我的模拟性能,因为它们触发如此频繁。我不想删除它们,因为我想确保我仍然在打这些属性,但我不在乎我打了多少次。有没有办法在它被击中一次后禁用封面属性,这样它就不会影响模拟性能?

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
);

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

【问题讨论】:

    标签: system-verilog system-verilog-assertions


    【解决方案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);
    );
    

    【讨论】:

    • 当我尝试从封面属性“只能在匹配项列表中分配局部变量”中分配全局变量时,出现编译错误。是否可以从封面属性中设置一些像这样的全局标志?
    • 你怎么知道这是你的性能问题的原因?你尝试我的第一个建议了吗?
    • 我正在使用 Questa 覆盖查看器查看覆盖指令的“峰值内存时间”,它位于列表顶部。我尝试了您建议的更改,但没有发现峰值内存时间有任何差异。
    • 我认为这是我的问题。 “峰值内存时间”只是达到峰值内存的模拟时间,而不是为此封面分配/取消分配内存所花费的时间。
    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2012-12-02
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多