Formal Verification · All levels
Writing Good Properties: Decomposing Intent into Checkable Guarantees: Mechanism
Mechanism for Writing Good Properties: Decomposing Intent into Checkable Guarantees.
Mechanism to understand
Mechanism for Writing Good Properties: Decomposing Intent into Checkable Guarantees is anchored on non-vacuous closure rate, counterexample turnaround, and residual-risk trend by requirement class. Convert outcomes into assumption-aware, evidence-backed actions.
Strong property authoring starts from requirement decomposition: split a broad requirement into trigger, preconditions, transition rule, and completion rule.
Name the first boundary where requirement intent diverges.
Prove mechanism with one high-confidence evidence packet.
Assign owner for smallest reversible mitigation.
Execution flow
FORMAL EXECUTION FLOW - Writing Good Properties: Decomposing Intent into Checkable Guarantees
requirement intent and risk class
|
v
property and assumption modeling
|
v
proof engine exploration and trace extraction
|
v
counterexample classification and fix hypothesis
|
v
re-proof, coverage audit, and signoff decisionFormal deep dive
Property and constraint engineering is successful when decomposition, reuse, and abstraction preserve legal behavior.
Concept diagram
PROPERTY DEVELOPMENT PIPELINE
spec clause -> decomposed properties -> constraints -> covers -> closure packetMetric graph
CONSTRAINT HYGIENE TREND
over-constraint risk ████
cover reachability ███████
library consistency █████Metrics and artifacts to collect
assume/assert separation coverage
critical cover reachability score
checker library adoption and drift
over-constraint warning trend
Mini case study
A reusable checker library reduced regression noise after assumptions were explicitly documented and reviewed per IP.
Debug branches
Review every assumption against a spec citation.
Use covers to confirm legal corner scenarios remain reachable.
Track abstraction choices in a rollback-ready ledger.
Senior review question
Ask: which requirement intent is proven, under which assumptions, and what residual risk remains?
Key takeaways
Tie each proof claim to assumption boundaries and reachability evidence.
Prefer minimal reversible fixes and preserve legal behavior visibility.
Common pitfalls
Treating runtime reduction as proof-quality improvement without audits.
Declaring closure while critical covers remain unreachable.
Using broad waivers instead of first-divergence root-cause ownership.
Mechanism deep dive
Mechanism detail: Strong property authoring starts from requirement decomposition: split a broad requirement into trigger, preconditions, transition rule, and completion rule. Instead of one monolithic assertion, write layered properties that separately capture request legality, response latency bounds, and protocol ordering. This decomposition improves debug because each failing assertion points to one intent slice rather than a mixed symptom. Use helper sequences for repeated temporal fragments, include reset/disable conditions explicitly, and prefer local signal intent over implementation-specific deep state when architectural behavior is the signoff target. Properties should be precise enough to reject illegal traces but general enough to survive microarchitectural refactoring. ```systemverilog // Requirement: once req is accepted, rsp must arrive within 8 cycles sequence req_accepted; req && gnt; endsequence property p_rsp_within_8; @(posedge clk) disable iff (!rst_n) req_accepted |-> ##[1:8] rsp; endproperty assert property (p_rsp_within_8); // Separate safety slice: no response without an earlier accepted request property p_rsp_has_cause; @(posedge clk) disable iff (!rst_n) rsp |-> $past(req_accepted, 1, 8); endproperty assert property (p_rsp_has_cause); ```
Prefer requirement decomposition over monolithic assertions for debug clarity.