The Formal Verification Plan
Write the nine-field plan before the properties, fill it for a real block from measured results, and read it the way a lead reviews it.
- Lesson
- F7.5
- Time
- 20 min
- Runs on
- SymbiYosys
- Check
- 5 questions
A team proved properties for three months and arrived at review without a plan. Which spec rules were covered, which assumptions held, which proofs were bounded and how deep: every answer was in someone's shell history. The work was good, but nobody could review it.
Nine Fields on One Page
FORMAL VERIFICATION PLAN block: ________ rev: __ date: ________
1 Scope RTL files, interfaces, what is left out and why
2 Goal bug hunting | sign-off (sets the exit criteria)
3 Spec rows one row per rule: kind, source sentence
4 Properties name, kind, spec row, form (SVA / immediate)
5 Assumptions each: reason (spec row), who checks it in the system
6 Covers behaviours that must be reachable, with target depth
7 Abstractions each: what it drops, soundness note, faulty twin replayed
8 Depth budget per property: full proof, or required depth + worksheet
9 Sign-off the four Cs with the numbers they must showThe plan is the sign-off argument written before the work. Goal decides the exit criteria: bug hunting stops when the risky areas stop yielding bugs, sign-off stops when every field is closed. The structure is the same.
Two fields carry most of the judgment. Each assumption names who checks it in the system, because a block proof is only as good as its promises (F7.4). The depth budget says, per property, whether only a full proof will do or which bounded depth would count.
The Plan, Filled for the Spine FIFO
| Field | fifo4sb, the 4 × 8 FIFO of F3.4 |
|---|---|
| Scope | the whole RTL, memory kept at full width; push/pop interface |
| Goal | sign-off |
| Spec rows | bound, bookkeeping, data and order, acceptance; rdata while empty undefined (F7.2) |
| Properties | a_count, a_empty, a_full, a_level, a_e2e, a_accept |
| Assumptions | reset in step 0 only; a push when full is legal and refused, so none on inputs |
| Covers | one entry: step 3; full: step 6; full, push and pop together: step 6; full again after two reads: step 8 |
| Abstractions | none |
| Depth budget | full proof (abc pdr, Prove PASS (abc pdr), 1.7 s). Bounded fallback: required 9 from the deepest cover, bmc 9: BMC PASS to depth 9; twice that, 18: no verdict in 20 s |
| Sign-off | all proofs full; covers reached; cone map covers the whole FIFO state (F7.1); mutation 36 of 36 killed, 40 edits, seed 7 (F7.2) |
Every number is measured: the proof, covers and fallback for this plan, the cone map and mutation score from F7.1 and F7.2.
Read the depth budget: the bounded fallback stops being affordable well before twice the deepest cover. The plan therefore depends on the full proof, and says so before anyone discovers it at review.
Two Plans, One Difference
tmo_blk plan, no depth budget
Depth budget: (blank)
Result: TMO = 12, bmc depth 12: PASS
Not reviewable: PASS against nothing.
Same plan, budget filled
Depth budget: required 17 (worksheet, F7.3)
Result: bounded, depth 12, required 17: open
The reviewer asks for depth 17 or a proof: Prove PASS (abc pdr).
No run changed; one field did. The same bmc result (BMC PASS to depth 12) reads as a sign-off on the left and as an open item on the right, which is what it is.
The Questions a Lead Asks
| Review question | Field that answers it |
|---|---|
| Which spec rows have no property? | Spec rows against Properties |
| Which assumptions has nobody checked in the system? | Assumptions (F7.4) |
| Which covers are unreached? | Covers |
| Which proofs are bounded, and is each above its budget? | Depth budget |
| Which abstractions were never replayed on a faulty twin? | Abstractions (F4.5) |
| What was the mutation sample? | Sign-off |
A plan that answers all six can be signed. A question with no field, such as "which solver is fastest?", is a run-time fact, not a plan entry.
Read the diagram as text
- Plan: scope, goal, spec rows, assumptions, exit criteria
- Run: properties and covers written; first proofs; staging over-constraints listed
- Regress: covers and proofs every night; cone map and mutation runs as milestones
- Close: every field filled; open items named; the lead signs
- Plan → Run
- Run → Regress
- Regress → Close
- Regress → Run: a cover goes unreached
An over-constraint used to stage the work is a plan entry with a date to remove it, never a silent line in the bench.
Staging is normal: early runs often over-constrain on purpose to reach a first proof. The plan lists each such constraint with the milestone that removes it, and a cover shows the behaviour it blocked is reachable again.
Asked in Interviews
| Question | Answer |
|---|---|
| What goes in a formal verification plan? | Scope, goal, spec rows, properties, assumptions with who checks them, covers, abstractions with soundness notes, a depth budget per property, and sign-off criteria. |
| What does a lead review in it? | The four Cs read off its fields: constraints, checkers, complexity, coverage. Every bounded result must sit next to its required depth. |
| Bug hunting or sign-off: what changes in the plan? | The goal field and the exit criteria. The fields stay the same. |
Try It
The lab fills the plan for tmo_blk. The run behind its depth budget is the fixed block with TMO = 12 under abc pdr: Prove PASS (abc pdr) in 0.5 s.
Fill the first five fields
Scope, goal, the spec rows (accept, grant, timeout, error pulse), the no-lost-request property, and the assumptions: reset only.
Fill the rest from F7.3
Two covers (a grant, a timeout), no abstraction, the depth budget from the worksheet (required 17), and the sign-off line.
Review it
Answer the six review questions from your plan alone. Any question you cannot answer is a missing field.
design.sv
props.sv
Use assert property (@(posedge clk) ...);. Leave blank for immediate assertions in the design.
Inputs are free unless constrained. Run to find a counterexample or check a proof.
Model: one positive-edge clock, binary data. Sampled history requires declaration-initialized variables; primary-input history is unsupported.
SBY summary and log
Check Yourself
Remember
- Write the plan first: scope, goal, spec rows, properties, assumptions, covers, abstractions, depth budget, sign-off criteria.
- Every assumption names who checks it in the system; every bounded result sits next to its required depth.
- One empty field can turn an honest open item into a false sign-off.
- Bug hunting and sign-off share the fields and differ in goal and exit criteria.