"All assertions pass" can mean anything from "proven for all time, with every trigger reachable" to "checked for three cycles under an assumption that blocks every input". A formal report is only useful if each result carries its real status and the evidence that the check meant something. This article defines the statuses, explains formal coverage, and shows a report for a FIFO that a reviewer can trust.

8 min read | Intermediate

What You'll Learn

  • Report each property with an exact status: proven, bounded, failed, vacuous or unknown
  • Explain formal coverage and why passing assertions need it
  • Write a status report that a reviewer can check
  • Recognize the common ways formal results are oversold

The Statuses

  • Proven: holds in every cycle from reset, by induction, PDR or complete BMC. The strongest result.
  • Bounded (depth k): no failure within k cycles. Report k, and the reason it is meaningful.
  • Failed: a real counterexample from reset. Each failure is either fixed, or waived with a reason.
  • Vacuous: passes because a trigger never happens. Treat it as a finding.
  • Unknown: the induction step failed and no bounded result was required. Usually reported as bounded instead.

Formal Coverage

A pass says nothing about whether the check exercised anything. Formal coverage answers that, in several layers:

  • Cover properties: each intended behavior is reached, at which step. This is the minimum.
  • Trigger coverage: the trigger of every implication is reachable, so no assertion is vacuous.
  • Cone-of-influence coverage: which lines and registers of the RTL lie in the cone of at least one assertion. Logic in no cone is not checked by formal at all.
  • Proof-core or mutation coverage: which parts of the design the proof actually depended on. Commercial tools compute this by checking whether a property still passes when a piece of logic is changed or removed. Logic that can be broken without any property failing is not really verified.

Cover properties and trigger coverage can be done with any tool, as this tutorial has shown. The last two layers are features of commercial tools.

Quick Check

Q: All assertions of a block are proven, but mutation coverage shows that the error flag logic can be changed without any property failing. What does that tell you?

Show Answer

No property checks the error flag. The proofs are real but incomplete: a property for the error behavior is missing from the plan.

A Status Report

For a 4-entry FIFO with the pointer flags of the synchronous FIFOs article and a tracked-value data check, results from the lab engine:

IDPropertyStatusEvidence
F1Reference count never above 4Proven (k-induction, k = 1)helper: count = wptr - rptr
F2full exactly at 4, empty exactly at 0Proven (k = 1)same helper
F3Data order (tracked value)Bounded, depth 10covers: magic leaves by step 2, full by step 5
C1FIFO becomes fullReached, step 5trace attached
C2Push and pop in the same cycle while fullReached, step 5trace attached
A1Assumption: none on push/popn/ainputs fully free

The report states what was proven, what was only bounded, and why the bounded result is still meaningful. It lists the assumptions, here none, and the helper invariants. A reviewer can check each line.

Quick Check

Q: What should a reviewer ask about the row for F3?

Show Answer

Whether depth 10 covers every way the tracked word can travel through a 4-entry FIFO, including a full FIFO and simultaneous push and pop. The covers suggest yes, but a proof would remove the question.

How Results Get Oversold

  • Bounded results reported as "pass" without the depth.
  • No covers, so vacuous passes go unnoticed.
  • Assumptions not listed, or not proven on the neighbor.
  • Scaled-down parameters not mentioned: a proof for a 4-entry FIFO is not automatically a proof for 64 entries, unless the design is written so that the size is only a parameter.
  • Waived failures without a reason.

Running It in ChipVerify Lab

The lab reports each run as PASS or FAIL within a depth, which is a bounded status. Keep a note of the depth with every result you record, and use meant-to-fail checks for the cover evidence, as the cover properties article showed.

Common Mistakes

Mistake #1: Reporting PASS without a status qualifier

Every pass is either proven or bounded at a depth. Say which.

Mistake #2: Counting assertions instead of coverage

A large number of passing assertions says nothing about how much of the design is checked. Report covers and cone or mutation coverage.

Mistake #3: Hiding the reductions

Cut points, black boxes and scaled parameters change what a result means. List them in the report.

Practice Exercise

Challenge: Review a Report

This is a pencil and paper exercise. A colleague reports for an arbiter: "Mutual exclusion: pass. Fairness: pass. All 12 assertions pass at depth 8. No issues." Write the questions you would ask before accepting it.

Hint

Think about status, depth, assumptions, covers and reductions.

Solution

Are the passes proven or bounded? Why is depth 8 enough: what is the worst-case wait, and is it inside the depth? Which assumptions were used, in particular for fairness, and are they proven on the requesters? Which covers were reached: a grant to every requester, a tie between all of them? Were any parameters reduced, such as the number of requesters? Without these answers, "pass" is not a sign-off result.

Summary

  • Report each property as proven, bounded with its depth, failed, vacuous or unknown.
  • Formal coverage shows that the checks exercised the design: covers, triggers, cone of influence, and proof-core or mutation coverage.
  • A good report lists assumptions, helpers, reductions and the evidence for every bounded result.
  • Results are oversold through missing depths, missing covers, hidden assumptions and unmentioned reductions.
Did you find what you were looking for?

Quiz

No quiz questions available for this article.