The assertion is unbounded. It will never fail in any simulation. If the req is asserted, then it will wait for infinite time for gnt to get asserted. When req is asserted, it will wait for even 1000 clocks (till end of simulation) for gnt to get HIGH. So, the sequence is true by it’s logic/virtue itself.
You may want to add a bounding condition to your assertion like following sample:
From my SVA book: Guideline: Qualify as strong properties that are sequences and have range delays or consecutive repetition operators (e.g., [*, [->, [= ) and are consequents in an assertion. This is important when it is necessary to qualify an assertion as a failure if the consequent never terminates at the end of simulation (e.g., with a $finish). Example:
I have one query here. If a req doesn’t get grant at end of simulation, it will be flagged as failure.
But how will a formal tool treat this case ? Can it fail this property and provide a trace because it can still be said that grant may occur in future.
I think it formal tool will also fail since it mostly follows pessimistic approach. But I am not sure about it since I am not much familiar with formal tool approaches.
Also, when you say gnt comes at positive duty cycle, you mean in the middle of a cycle. But will it miss the clk sampling @(posedge clk)? If so, you’ll need to latch the gnt so that it can be sampled.
Note that the following solution could work.
I see gnt getting asserted on the 4th clock(after req occurs) in the positive duty cycle. I don’t understand why I see Under Evaluation in my waveform.