我可以访问 SystemVerilog 断言中的延迟值吗

Can I access delayed value in SystemVerilog assertion

我想在 SystemVerilog 断言中使用信号的旧值。

这就是我目前正在做的事情

logic [ADDRESS_WIDTH-1:0] old_address [1:0];

always_ff@(posedge rdclock) begin
   old_address[0] <= rdaddress;
   old_address[1] <= old_address[0];
end

property FooBar;
   @(posedge rdclock) rden |-> ##2 q == mem[old_address[1]];
endproperty

Baz: assert property (FooBar);

这是应该怎么做,还是我可以直接在断言中使用旧版本的 rdaddress

您可以使用$past(...)系统任务。使用 $past(rdaddress) 将 return 上一个循环中采样的 rdaddress 的值。您可以指定过去有多少个周期与第二个参数一起使用。在您的情况下,调用 $past(rdaddress, 2) 将 return 2 个周期之前 rdaddress 的值。