System verilog $pass带有输入信号

System verilog $pass带有输入信号,system-verilog,uvm,questasim,system-verilog-assertions,System Verilog,Uvm,Questasim,System Verilog Assertions,我想验证一下,如果一个事件发生了,那么在过去的“num_ticks”中,应该已经断言了一些信号 例如,我写的属性是: property test_past; @(posedge clk) $rose(gnt) |-> $past(req, num_ticks); endproperty 这里的问题在于num_ticks。如果num_ticks是写入属性的模块的输入信号,则断言失败。如果我将num\u ticks声明为int,并将其赋给常数,则它将通过 $pass是否仅适用于常

我想验证一下,如果一个事件发生了,那么在过去的“num_ticks”中,应该已经断言了一些信号

例如,我写的属性是:

property test_past;
  @(posedge clk)
    $rose(gnt) |-> $past(req, num_ticks);
endproperty
这里的问题在于
num_ticks
。如果
num_ticks
是写入属性的模块的输入信号,则断言失败。如果我将
num\u ticks
声明为int,并将其赋给常数,则它将通过

$pass是否仅适用于常量值?LRM中未提及这一点


我正在使用Questasim 10.3

为此,您可以使用多个断言

假设num_ticks是4位宽,那么您可以这样做

genvar x;
generate
  for (x=0; x<16; x++)
  begin
    property test_past;
      @(posedge clk)
      (num_ticks == x) && $rose(gnt) |-> $past(req, x);
    endproperty
  end
endgenerate
genvarx;
生成
对于(x=0;x$过去(需求,x);
端属性
结束
最终生成

为此,您可以使用多个断言

假设num_ticks是4位宽,那么您可以这样做

genvar x;
generate
  for (x=0; x<16; x++)
  begin
    property test_past;
      @(posedge clk)
      (num_ticks == x) && $rose(gnt) |-> $past(req, x);
    endproperty
  end
endgenerate
genvarx;
生成
对于(x=0;x$过去(需求,x);
端属性
结束
最终生成

我刚刚注意到我使用的是一个过时的LRM-2002 Accelera extensions版本。关于如何使用变量num_ticks实现$pass功能,有什么建议吗?我用了一些逻辑来解决这个问题。不太好看,但我刚刚注意到我使用的是一个过时的LRM-2002 Accelera extensions版本.关于如何使用变量num_ticks实现$pass功能,有什么建议吗?我用了一些逻辑来解决这个问题。虽然不漂亮,但确实可以