Lessons learned while formally verifying the ZipCPU
summary
ZipCPU gets fully proven with SymbiYosys using induction and bounded checks, finding bugs tests never caught: bus reads that don’t halt, compressed-instruction edge cases, debug-port write ordering, and a multiply/divide race. Verification uses an abstract multiply to model behavior, aggregation forces a swap assumptions and assertions step across submodules, and many proofs finish from tiny counterexamples — one full-CPU proof needs only 18 clock cycles. End result still requires simulation; overall setup takes weeks, per-run proofs minutes.
AI-written summary · about
chapters (22)
- 0:00Intro
- 1:59Formal verification properties
- 4:51Prior formal verification
- 5:48Pipeline stages
- 6:18Execution units
- 6:48Conditional execution
- 8:00instruction cache
- 9:08valid trace
- 9:52data cache
- 10:28formal methods
- 11:20first lesson learned
- 12:16debug port
- 13:06pipeline
- 13:33abstraction
- 15:06aggregation
- 15:39assumptions and assertions
- 16:30multipass verification
- 16:54assumptions
- 17:08what happened
- 17:49what I found
- 19:33formal
- 19:58Questions
related talks
16mIntroduction to RISC-V Processor Verification
13mEarly RISC-V Software Verification with SIM-V
13mOpen Source Formal Verification in VHDL
13mIntroduction to RISC-V Processor Verification
21mThe New Verification Ecosystem that Supports RISC-V Verification fo...
01h 12mPoster / Demo Previews
17mPoster/Demo Previews
21mA Comparative Analysis of RISC-V Architecture Based on the RISC-V SoC DV Experience
