【问题标题】:SystemVerilog property pass by referenceSystemVerilog 属性通过引用传递
【发布时间】:2021-10-18 15:23:31
【问题描述】:

是否可以通过引用将信号传递给属性?例如,我想创建一个覆盖属性来捕获寄存器更改,并将此属性重新用于数十个不同的寄存器。我想做这样的事情:

property reg_change(int num_cycles, ref bit some_reg);
    @(posedge CLK)
    $changed(some_reg) |-> ##num_cycles $changed(some_reg);
endproperty

Reg1Change10Cycles_cp : cover property (reg_change(10, reg1);
Reg2Change10Cycles_cp : cover property (reg_change(10, reg2);
//...

但尝试在属性中使用“ref”时出现编译错误。我认为我不能只使用bit some_reg,因为那将是按值传递,并且永远不会看到 some_reg 更改。无论如何我可以在不定义每个封面属性中的整个属性的情况下实现这种行为吗?

【问题讨论】:

    标签: system-verilog system-verilog-assertions


    【解决方案1】:

    没有办法也不需要通过引用属性和序列来传递形式参数。断言构造的形式参数被实际参数替换为内联。所以从某种意义上说,它们总是被引用。请参阅第 16.8 节在IEEE 1800-2017 SystemVerilog LRM 中声明序列。相同的参数行为适用于属性。

    顺便说一句,你应该让断言参数保持无类型,除非你需要强类型规则来保持你的断言表达式正确计算。

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 2018-07-09
      • 1970-01-01
      • 2010-11-27
      • 2012-01-31
      • 2013-04-21
      • 2010-12-24
      相关资源
      最近更新 更多