In reply to ben@SystemVerilog.us:
Hi Ben,
In the solution you provided, it takes the assumption that if a==d1 then eventually a==d2.
But what if a was never equal to d1, then the assertion will never be checked.
I feel like it can be solved by introducing a bit valid in the testbench and then set it to 1 whenever a==d1.
property p1;
@(posedge clk) (a==d2) |-> valid;
endproperty
Let me know if I am wrong somewhere.
Thanks,