RV32I CPU Datapath — RTL to GDSII (FreePDK 45 nm)
DRC/LVS clean, 500 MHz timing closureFull RTL → GDSII flow on FreePDK 45 nm — DRC/LVS clean, 500 MHz timing closure.
- Role
- Course project, UIUC VLSI
- Dates
- Feb 2025 – Apr 2025
- RTL
- Physical Design
- STA
- Virtuoso
- RISC-V
Overview
End-to-end RTL → GDSII implementation of an RV32I five-stage pipelined datapath on the FreePDK 45 nm node. Custom-laid the 32 × 32 register file in Cadence Virtuoso, then ran the synthesized core through DC, Innovus, and PrimeTime to a clean DRC/LVS signoff at 500 MHz.
Tech Stack
SystemVerilog · Cadence Virtuoso · Synopsys DC · Cadence Innovus · Synopsys PrimeTime · Mentor Calibre (DRC/LVS) · Tcl · SDC · multi-corner STA
What I Built
- Full-custom 32 × 32 register file in Cadence Virtuoso with TG-based latch storage cells. Hand-routed M1–M3, DRC/LVS clean. Sized for the access patterns of a single-issue 5-stage pipeline (two reads + one write per cycle).
- RV32I 5-stage pipelined datapath in SystemVerilog. Resolved X-propagation issues with VCS
-xpropand SVA assertions. Replaced tri-state read buses with one-hot MUXes — easier STA, no contention, no driver-fight verification headaches. - Synthesis → P&R → STA flow with parameterized Tcl scripts. SDC constraints cover clock, async reset synchronizer, and IO timing. STA runs over a 4-corner matrix (TT / SS / FF / SF) at the signoff stage.
Results
- DRC + LVS clean at the final GDSII milestone.
- 500 MHz timing closure with WNS +5 ps post-route (signoff corner).
- ~8,500 μm² core area (synthesis + placed).
- All hierarchical paths covered in the multi-corner STA report — no negative slack on any path/corner.
Key Decisions
- One-hot MUX instead of tri-state read bus. Tri-state requires enable-disjoint verification and is harder for modern STA tools to reason about. A one-hot MUX has the same fan-in, no contention class, and a clean timing graph.
- Full-custom RegFile in Virtuoso rather than the standard-cell flow. The synthesized variant met timing but used roughly 3× the area on one of the densest blocks in the datapath. Hand-laying yields a denser block and exposes the layout-vs-synthesis tradeoffs directly.
- X-propagation cleanup via VCS
-xprop+ SVA, not just defensive resets.-xpropsurfaces ambiguity at the source, and SVAassert property(!$isunknown(...))lets regression verify the cleanup automatically.
Discussion
Loading comments…
Checking sign-in…