Im running assertions on IFV with witness check defined as trace. The trace fails and the assertion passes. What does this mean?
There are a couple of ways this can happen. They are based on the principle that an assertion "passes" if IFV cannot find a sequence in which the assertion reaches an error state.
So, if you have an assertion that looks like "trigger_sequence |-> suffix_sequence", then the assertion will "pass" if the trigger_sequence can never occur. Since the trigger can't occur, the suffix doesn't need to be checked. This is by far the most common way to get the results you have described.
You can check to see if the trigger is possible, given your constraints, by issuing the TCL command "define witness_check trigger".
In reply to TAM1:
Thanks for the reply.
When I enabled changed witness to trigger, it failed too.
This essentially means I needn't bother about this assertion right?
In reply to Buvna:
Well, I would worry about it. :-)
When you wrote the assertion you obviously thought that the trigger was possible and that you needed to check for certain behavior when it occurred. If IFV reports that the trigger is impossible you need to figure out what that means. Why can't the trigger occur? Did you write it correctly? Is there a bug in the DUT that makes behavior you expected to be legal impossible? Why did someone give you a specification describing behavior for conditions that can never be seen?