Policy rules, SVA coding conventions, SymbiYosys engine guide, 3-round iterative refinement protocol, and formal verification checklists. Pure reference — no orchestration.
SVA property files MUST follow the project coding conventions (CLAUDE.md):
i_ prefix for inputs, o_ prefix for outputs (e.g., i_valid, o_ready)clk (single domain) or {domain}_clk (multiple domains, e.g., sys_clk) — NOT clk_irst_n (single domain) or {domain}_rst_n (multiple domains, e.g., sys_rst_n) — NOT rst_nilogic in helper code (NOT reg/wire)no_fifo_overflow, valid_handshake)SVA property extraction must iterate at least 3 times to strengthen assertion quality. Each round builds upon the previous:
cover properties to verify reachability. Check for vacuous assertions.##[1:N] bounded eventually). Verify assume/assert balance (not over-constrained). Add cross-module interface properties if applicable.Each round produces a review note at .rat/scratch/phase-5/sva-iteration-r{N}.md.
pip install sbyosys or from source)i_/o_ prefix, {domain}_clk/{domain}_rst_n)Use assume statements to constrain inputs to legal protocol ranges before proving.
Principle: assume inputs, assert outputs. Inputs are constrained with assume; outputs are verified with assert.
Target properties: no deadlock, no overflow, interface protocol compliance, data integrity.
Assertion clock: @(posedge sys_clk) disable iff (!sys_rst_n) for synchronous properties.
See examples/handshake-assertions.sv for valid/ready handshake SVA patterns.
See examples/fifo-assertions.sv for FIFO overflow/underflow assertion patterns.
SymbiYosys engine guide:
| Engine | Mode | Best For |
|---|---|---|
smtbmc boolector | BMC, prove | General purpose (default) |
smtbmc yices | BMC, prove | Bitvector-heavy, often fastest |
smtbmc z3 | BMC, prove | Arithmetic-heavy designs |
abc pdr | prove only | Unbounded proof via PDR |
See references/sva-patterns.md for complete temporal operator reference and pattern library.
sv2v conversion note:
SymbiYosys relies on Yosys for reading design files. Yosys has limited SystemVerilog support,
so RTL .sv files need Verilog conversion before sby. This is a Layer 2 concern —
formal verification scripts handle sv2v conversion internally. Do NOT run sv2v manually.
SVA property files (formal/*_props.sv) are read with -formal -sv and do NOT need conversion.
# Scripts handle sv2v internally:
sby -f formal/{module}.sby # .sby task script runs sv2v as a pre-step