FVO — Formal Verification Online
Lesson 3.8 · SystemVerilog Assertions Essentials

Common SVA mistakes and how to avoid them

MistakeExampleWhy it hurtsBetter
Using |-> where the spec means "next cycle"req |-> gntRequires grant in the same cyclereq |=> gnt
Antecedent can never be truea && !a |-> bVacuous proof, checks nothingCover the antecedent
Forgetting resetNo disable iffSpurious failures during or right after resetDefault disable iff (rst)
Using == on X in simulationdata == 8'hxxNever true; use $isunknown or === in sim-only checks!$isunknown(data)
Unbounded antecedenta ##[1:$] b |-> cMany threads; slow or inconclusiveTrack "a seen" with a flag
Assuming outputs of the DUTassume property (gnt[0])Constrains the design itself — may hide every bugAssume inputs only
One huge propertyFive requirements and-ed togetherHard to debug, slow to proveOne requirement per property
Confusing [->n] and [*n]ack[*2] for "two acks"[*2] means two consecutive cyclesack[->2]
$past right after resetq == $past(d)Compares against pre-reset valuesGuard with reset / antecedent

Chapter takeaways

Was this page helpful?

Tip: select any text on the page before clicking Report and it will be quoted in your report.