After first "pass" assertion does not fire unless a failure occurs

In reply to silverace99:

Hi all, interesting problem here maybe you can help me figure it out.
I’ve got a simple connectivity check assertion:
(I’m running simulations with this on Cadence Incisive, not sure that it matters)


property connectivity_check(dsbl, clk, src, dest);
@ (posedge clk) disable iff(dsbl)
!$stable(src) |-> (src == dest);
endproperty

The assertion does pass when there are no failures found. The assertion itself according to the simulator seems to always be in one of two states:
“$finished”
“$inactive”
At the start of the simulation, the assertion begins in the “$inactive” state. The first time the assertion check passes, it enters the “$finished” state. In other assertion checks that I have seen, it is then supposed to return to “$inactive” shortly thereafter.
That’s not the case here. When my assertion above passes, it gets stuck in the “$finished” state. As a result, during every other part in the test that wiggles the assertion, it is still “$finished” and doesn’t increment the # of times the assertion fires. Thus in the end of test assertion reports, the simulator claims the assertion fired only once even if it was checking 1000 times.
I know the assertion isn’t simply dead because if I inject an error on the src, I can get the assertion to fail. This causes the assertion to return to the “$inactive” state. The next time the assertion hits a check and passes, it goes back to the “$finished” state and gets stuck again.
I’m honestly not sure if this is an error on my part or a simulator error. Hopefully somebody can give me a clue, thanks!

Hi Silverace99,

Have you got the solution to your problem as I am also facing the same problem?

Regards
Neeraj