Full physical design flow — floorplan, placement, clock tree synthesis, routing, timing optimisation, power optimisation, area optimisation, and tape-out sign-off. Use when implementing a gate-level netlist through to GDS-II, closing timing and power, or performing any individual PD stage analysis.
digital-chip-design-agents:physical-design-orchestrator agent and pass
the full user request and any available context. Do not execute stages directly.physical-design-orchestrator mid-flow: do not spawn a
new agent. Treat this file as read-only — return the requested stage rules,
sign-off criteria, or loop-back guidance to the calling orchestrator.Spawning the orchestrator from within an active orchestrator run causes recursive delegation and must never happen.
Guide the complete physical implementation flow from gate-level netlist to tape-out-ready GDS-II. Eight stages with explicit QoR gates and loop-back criteria enforced by the physical-design orchestrator.
make DESIGN_CONFIG=./designs/<platform>/<design>/config.mk) — full PD pipeline; executes sequentially (see sequential flow note below)openlane <config.json>) — sequential PD pipeline built on OpenROAD; (see sequential flow note below)klayout) — DRC, LVS, and GDS-II viewing/editing; used for signoff DRC in open-source flowsinnovus) — floorplan through signoff; interactive and batch modesicc2_shell) — hierarchical PD with Fusion technologyOpenROAD Flow Scripts (ORFS) and LibreLane execute the entire PD pipeline in a single invocation. Stages run sequentially without pausing for agent intervention. After the run completes (or fails mid-stage), the agent must read the per-stage log files to evaluate QoR and apply loop-back logic.
ORFS log layout:
logs/<platform>/<design>/
1_1_yosys.log # synthesis (Yosys)
2_1_floorplan.log # floorplan (OpenROAD)
3_1_place.log # global placement (OpenROAD)
3_4_resizer.log # resizer / timing-driven placement
4_1_cts.log # clock tree synthesis (OpenROAD)
5_1_route.log # global routing (OpenROAD)
5_3_fillcell.log # filler cell insertion
6_1_finishing.log # signoff: DRC (KLayout/Magic), LVS (Netgen), final STA
Invocation: make DESIGN_CONFIG=./designs/<platform>/<design>/config.mk
Resume from stage: make do-<stage> (e.g. make do-3_2_place)
LibreLane (OpenLane 2) log layout:
runs/<design>/<run_tag>/logs/
synthesis/ # Yosys synthesis logs
floorplan/ # OpenROAD floorplan logs
placement/ # OpenROAD placement logs (global + detail)
cts/ # OpenROAD CTS logs
routing/ # OpenROAD global + detailed routing (DRT) logs
signoff/ # Magic/Netgen DRC+LVS, OpenSTA final timing
Invocation: openlane <config.json> (or python3 -m openlane <config.json>)
Resume from step: openlane --from <step_name> <config.json>
Agent procedure after run:
## Stage: sections below| Check | Criterion |
|---|---|
| Setup WNS | ≥ 0 all corners |
| Setup TNS | = 0 all corners |
| Hold WNS | ≥ 0 all corners |
| DRC violations | = 0 |
| LVS errors | = 0 |
| Antenna violations | = 0 |
| IR drop | < 5% VDD |
| Metal density | Within foundry window |
After each stage completes (regardless of whether an orchestrator session is active),
write or overwrite one JSON record in memory/pd/experiences.jsonl keyed by
run_id. This ensures data is persisted even if the flow is interrupted or called
without full orchestrator context.
Use run_id = pd_<YYYYMMDD>_<HHMMSS> (set once at flow start; reuse on each
stage update). Set signoff_achieved: false until the final sign-off stage completes.