You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog中是否可以按引用传递信号给property实现复用?

问题原因
  • SystemVerilog LRM 明确规定 property、sequence 类型的形式参数不支持ref修饰符,这是编译报错的直接原因。
  • 断言类结构的参数默认采用按名绑定的传递规则,和普通task/function的传值逻辑不同:调用时不会做静态值拷贝,每次属性求值时都会实时读取绑定信号的当前值,完全不需要ref就能感知信号的实时变化,此前对参数传递方式的认知存在偏差。
复用实现方案

直接移除ref修饰符即可正常使用,示例代码如下:

property reg_change(int num_cycles, 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));
// 其余寄存器直接调用该property即可,无需重复编写逻辑
兼容性优化

如果需要适配不同位宽的寄存器/信号,可以使用无类型参数声明,不需要指定参数类型,适配性更强:

// 无类型参数支持任意位宽的信号传入
property reg_change(int num_cycles, some_reg);
    @(posedge CLK)
    $changed(some_reg) |-> ##num_cycles $changed(some_reg);
endproperty

内容的提问来源于stack exchange,提问作者Melandru's Square

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:54:03