Repository navigation
Release v7.0.0
rtl_buddy v7
v7 makes rb pnr a flow you can close a block with: run it in stages, resume it, judge it per corner and gate it on signoff checks. It also brings synthesis fixes that matter for P&R input. This is a major release. Some P&R results and outputs change, and some configs that v6 accepted are now errors. Read Migrating from v6 to v7 before upgrading.
Highlights
Staged runs and resume
stages: trueruns each P&R stage in its own OpenROAD session from the previous stage's checkpoint. With--dispatch slurm, the stages run as chained Slurm jobs.--stop-after <stage>ends a run early.--resumerestarts from a kept checkpoint, and refuses when the scripts or inputs have changed.- A staged run gives the same routed result as a one-session run.
mode: proberuns a fast estimate that stops after global routing.
Multi-corner signoff
- On a platform with
corners:, each corner is timed in its own SDC mode, with its own SPEF read and its own routed SDC. - Each stage ends with a per-corner setup and hold timing event.
- A
lib-pathsentry can map each corner to its own Liberty file, so SRAM and other macros are timed at each corner's characterisation instead of one corner everywhere. This works inrb pnrandrb power. - A
signoff:block on the platform or run names the corners for setup and for hold, and the gates that fail the run:fail-on: [timing, drc, electrical]. Post-route repair rounds judge timing at those corners. A gate that cannot be measured fails.
Closure controls
- Global-route repair and post-route repair rounds. The rounds keep the best result.
- Electrical violators (max slew, capacitance and fanout) drive the post-route repair rounds.
- Post-route
repair_designruns with wire-RC estimates. - Macro pins over their Liberty limits are buffered.
- Run-level overrides cover routing layers, CTS, repair, global-route options (
global-route:, includinggrid-origin) and the tap-cell script. keep-sizing-vtkeeps the threshold-voltage flavour during sizing.cts-dont-use-cellsgives CTS its own dont-use list.- Run-level Tcl hooks.
placement.timing-driventurns on timing-driven global placement.- Floorplans accept planner files, rotated macros and blockages that apply during global placement only.
Outputs and hardened blocks
<top>.routed.pwr.vis the powered post-route netlist.<top>.routed.vis the logical netlist, with no supply ports.- A hardened block's abstract Liberty is the same whether it was built staged or in one session.
abstract: {gds: false}hardens a block without GDS.- Extra input files listed under
inputs:are fingerprinted, so a change to them refuses resume.
Stricter results
- Unknown keys in
pnr.yaml, P&R platforms, PDKs, and dispatch and reservation blocks are config errors. Each error names the nearest valid key. - A flow that exits 0 before its end marker is a FAIL. So is a routed DEF that moved a located macro or an exact pin.
- Supply pins of cells added after the power grid are connected.
Synthesis
- With
openroad.repair: true, an unplaced netlist getsrepair_design -pre_placement, which buffers high-fanout nets. - Options for an ICG maximum group size, lenient handling of SDC procs, and a macro LEF list.
CLI
- Machine-mode stderr summaries list only the rows that need attention. The full results stay on stdout.
Upgrading
- Breaking changes and what to do about each are in the migration guide. These are the ones most likely to need action:
- unknown-key errors;
- OpenROAD now runs in
artefacts/<run>/, so a relative path in a hook resolves from there; - multi-corner timing changes;
- routed netlists no longer declare supply ports.
- Per-corner SDC modes need OpenROAD 26Q4. OpenROAD 26Q2 keeps one shared mode and warns
pnr.corner_modes_unsupported. - A
--resumeof a multi-corner run started before v7 is refused. Rerun it from the start. - The P&R docs are rewritten. The bundled
rtl-buddy-pnragent skill covers running, reading results and debugging P&R.
The pull requests merged through the v7 branch are listed in #930.
What's Changed
- docs(dev): rb keeps each underlying tool's defaults by @expsg-jiacheng in #897
- feat(pnr): run-level Tcl hooks at fixed flow points (#847) by @expsg-jiacheng in #857
- feat(pnr): macros and pins from planner files, rotated macros, global-placement-only blockages (#850) by @expsg-jiacheng in #859
- fix(pnr): a core cut-out outside the core fails with its own message (#863) by @expsg-jiacheng in #865
- fix(config): unknown keys in pnr.yaml, P&R platforms and PDKs are config errors (#861) by @expsg-jiacheng in #875
- feat(pnr): staged runs, --stop-after and --resume (#848) by @expsg-jiacheng in #876
- feat(pnr): dispatch a staged run's stages as chained Slurm jobs (#848) by @expsg-jiacheng in #881
- feat(pnr): global-route and post-route repair, and mode: probe (#849) by @expsg-jiacheng in #882
- revert: move the unreleased v7 P&R work from main to the v7 branch by @expsg-jiacheng in #913
- v7: P&R and synthesis release by @expsg-jiacheng in #930
Full Changelog: v6.83.0...v7.0.0