I'm a newbie in SVA. I have a question about the SVA implication.
1: sequence s1;
2: start ##[1:$] !start;
3: endsequence: s1
4:
5: sequence s2;
6: ready && (!start);
7: endsequence: s2;
8:
9: assert_ready: assert property (@(posedge clk) s1 |-> ##5 s2);
The purpose of this assertion is to check the timing property:
I tried to verify this property by using the formal verification tool, Synopsys' VC formal. What it shows that this assertion fails because s2 sequence is zero when preemtive 'start' happens.
I think I have a wrong description at line 6, which is a real newbie code. Would you please let me know how to describe the assertion for the preemtive start correctly?
I think you want
sequence s1;
start ##1 !start [*5]
endsequence: s1
sequence s2;
ready;
endsequence: s2;
assert_ready: assert property (@(posedge clk) s1 |-> s2);
Although you might have to adjust this depending on your requirement on what happens when start
coincides with ready
on the 5th cycle.