Formal & assertion-based verification

Formal property verification

Formal property verification asks a question that simulation can never fully answer: 'Is there ANY sequence of inputs, however bizarre, that could make this design break its rules?' Instead of trying a million random test cases and hoping you got the bad one, a formal tool reasons mathematically over *all possible* inputs at once. It either returns a proof — 'no such input exists, the property holds forever' — or a counterexample — a precise, shortest input sequence that triggers the failure, handed to you as a waveform.

Under the hood the tool turns the design and the property into a giant Boolean satisfiability or model-checking problem and searches the entire reachable state space. Because the state space of a real chip is astronomically large, formal tools rely on clever abstraction, induction, and SAT/SMT solvers; they shine on control-heavy blocks (arbiters, protocol state machines, cache coherence) where deep corner-case bugs hide. The catch is the *state-space explosion*: some properties are too big to prove outright and return an inconclusive 'bounded' result instead of a full proof.

Formal's superpower is exhaustiveness — a passing proof means the bug literally cannot exist, a guarantee no amount of simulation can give. Its kryptonite is scale, which is why engineers pick small, well-bounded blocks and use abstraction to keep the state space tractable.

Also called
FPVproperty checkingmodel checking性質檢查模型檢查