我想在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
?
答案 0 :(得分:1)
您可以使用$past(...)
系统任务。使用$past(rdaddress)
将返回在上一个周期中采样的rdaddress
的值。您可以使用第二个参数指定过去的循环次数。在您的情况下,调用$past(rdaddress, 2)
将返回rdaddress
之前2个循环的值。