journal 2026-05-01

P35 makes fanout clean, not slew clean

p35riscvrv32mlibrelanetiming

P35 started as the obvious next question after P34: can we make the remaining DRV tail actually clean?

P34 had already turned the problem from thousands of violations into a short list: 12 max-slew, 3 max-cap, and 9 max-fanout violations. Inspecting the final reports pointed at slow-corner control/datapath cones rather than a broad reset-tree problem.

The first P35 experiment was too aggressive. It produced final GDS and passed DRC/LVS/antenna/setup/hold, but the DRV result got much worse: 436 slew, 17 cap, and 8 fanout violations. That was useful only as a warning that more backend pressure is not automatically better.

The RTL cleanup was more useful:

An even stronger 80% repair-margin attempt was abandoned after spending too long in OpenROAD repair without practical progress. The final run went back to the cheaper repair settings, kept the 1.5 ns transition target, and used fanout 13 to match the remaining routed control tree.

Commands:

make -C projects/35_rv32im_signoff_clean/test clean all
make -C projects/35_rv32im_signoff_clean/test act4_m
make -C projects/35_rv32im_signoff_clean/test act4
make harden PROJECT=35_rv32im_signoff_clean

Result:

checkresult
Directed RV32IM runtimePASS
ACT4/Sail rv32i/IPASS=39 FAIL=0 NOT RUN=0
ACT4/Sail rv32i/MPASS=8 FAIL=0 NOT RUN=0
Full RISC-V complianceNOT RUN
LibreLane flowPASS
Run directoryprojects/35_rv32im_signoff_clean/librelane/runs/RUN_2026-05-01_19-57-20
Final GDSprojects/35_rv32im_signoff_clean/librelane/runs/RUN_2026-05-01_19-57-20/final/gds/top.gds
Metricsprojects/35_rv32im_signoff_clean/librelane/runs/RUN_2026-05-01_19-57-20/final/metrics.json
Magic DRCPASS (0 errors)
KLayout DRCPASS (0 errors)
LVSPASS (0 errors)
AntennaPASS (0 net violations, 0 pin violations)
Routing DRCPASS (0 errors)
Setup timingPASS (0 violations, worst setup slack 8.048 ns)
Hold timingPASS (0 violations, worst hold slack 0.100 ns)
Max slewFAIL (13 violations)
Max capFAIL (1 violation)
Max fanoutPASS (0 violations)

P35 is not the clean ending the name wanted. It is still useful: fanout is now clean, cap is down to one violation, the RTL is lint-clean, and the ACT4 I/M coverage stayed green. The remaining work is a specific slow-corner datapath shape, not a mystery spread across the whole chip.