Для этого кода я вижу, что оба утверждения терпят неудачу. Кажется, что отключить iff (значение) вычисляется позже, чем само выражение. Может кто-нибудь объяснить это.
module tb();
reg clk = 1;
always #5 clk = !clk;
reg rst = 1;
always @ (posedge clk)
rst <= 0;
initial #11ns $finish();
assert property (@ (posedge clk) disable iff (rst) 1 |-> 0);
assert property (@ (posedge clk) rst |-> 0);
endmodule
Продолжение, как бы это проверить:
always_ff @ (posedge clk or posedge rst) begin
if (rst) q <= 0;
else q <= d;
end
где rst сбрасывается из-за задержки:
always_ff @ (posedge clk)
rst <= rst_a;
Похоже, что отключить iff больше не получится. как он оценивает сначала поздно.