算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
physical-design【设计与创意】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.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
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.
Before executing or advising on any stage, read the following files if they exist:
memory/pd/knowledge.md — known failure patterns, successful tool flags, PDK quirks.
Incorporate its guidance into every stage decision. If absent, proceed without it.memory/pd/run_state.md — current run identity (run_id, design_name, pdk,
last_stage). Use this to resume correctly after interruption. If absent, a new run
is starting; the orchestrator will create this file before the first stage.This pre-run read applies whether this skill is loaded by a user or called by the orchestrator mid-flow. It ensures the fix database is consulted before any diagnosis step.
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, dialect cadence) — floorplan through signoff; interactive and batch modesicc2_shell, dialect synopsys) — hierarchical PD with Fusion technologysiemens) — physical implementation for advanced nodesOpenROAD 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 belowdesign_state.constraints.area.utilization_pct_target% (default: 75%) — leave margin for routing congestiondesign_state.constraints.power.ir_drop_pct_max% of VDD (default threshold: 10%)constraints.timing.wns_ns_target, default: 0)design_state.constraints.area.utilization_pct_max% (default: 85%); flag if exceededdesign_state.constraints.timing.skew_ps_max ps (default: 100 ps, or per SDC set_clock_uncertainty)design_state.constraints.timing.transition_ps_max ps, default: 200 ps)design_state.constraints.timing.fanout_max, default: 16–32)design_state.constraints.timing.skew_ps_max ps (default threshold: 150 ps)design_state.constraints.timing.insertion_delay_ps_max ps (default: 500 ps)design_state.constraints.timing.wns_ns_target (default: 0) all cornersdesign_state.constraints.timing.tns_ns_target (default: 0) all cornersdesign_state.constraints.power.power_mw budgetdesign_state.constraints.power.leakage_pct_max% of total at TT corner (default: 15%)design_state.constraints.power.ir_drop_pct_max% VDD across all domains (default: 5%)design_state.constraints.timing.wns_ns_target (default: 0)design_state.constraints.area.utilization_pct_target% (default: 75%); hard limit design_state.constraints.area.utilization_pct_max% (default: 85%)design_state.constraints.timing.wns_ns_target (default: 0)| Check | Criterion |
|---|---|
| Setup WNS | ≥ design_state.constraints.timing.wns_ns_target (default: 0) all corners |
| Setup TNS | = design_state.constraints.timing.tns_ns_target (default: 0) all corners |
| Hold WNS | ≥ design_state.constraints.timing.wns_ns_target (default: 0) all corners |
| DRC violations | = 0 |
| LVS errors | = 0 |
| Antenna violations | = 0 |
| IR drop | < design_state.constraints.power.ir_drop_pct_max% VDD (default: 5%) |
| Metal density | Within foundry window |
See plugins/meta/skills/pipeline-orchestration/SKILL.md §Constraints Schema for the authoritative schema and stage-entry validation rule.
Required at entry (floorplan) — hard-fail if missing:
constraints.clock.clk_mhz — target clock frequencyconstraints.area.area_um2 — die area budgetconstraints.power.power_mw — total power budgetconstraints.pvt_corners — at least one entry with non-null voltage_v and temp_cOptional (schema defaults apply when absent):
constraints.timing.wns_ns_target (default: 0) — WNS sign-off thresholdconstraints.timing.tns_ns_target (default: 0) — TNS sign-off thresholdconstraints.timing.skew_ps_max (default: 100) — CTS skew targetconstraints.timing.transition_ps_max (default: 200) — clock transition limitconstraints.timing.insertion_delay_ps_max (default: 500) — max clock insertion delayconstraints.timing.fanout_max (default: 32) — max clock buffer fanoutconstraints.area.utilization_pct_target (default: 75) — target core utilisation %constraints.area.utilization_pct_max (default: 85) — hard utilisation ceiling %constraints.power.leakage_pct_max (default: 15) — leakage as % of total powerconstraints.power.ir_drop_pct_max (default: 5) — IR drop limit as % of VDDWrite memory/pd/run_state.md as the first action before launching any tool:
run_id: pd_<YYYYMMDD>_<HHMMSS>
design_name: <design>
pdk: <pdk or unknown>
tool: <primary tool>
start_time: <ISO-8601>
last_stage: null
Update last_stage to the completed stage name only after each stage finishes successfully. This file allows wakeup-loop prompts
and resumed sessions to identify the correct run directory without relying on in-memory state.
After each stage completes (regardless of whether an orchestrator session is active),
upsert one JSON record in memory/pd/experiences.jsonl keyed by run_id — do not
append a second line for the same run. Write with the stages completed so far and
signoff_achieved: false; overwrite to true only when signoff passes.
Use run_id = pd_<YYYYMMDD>_<HHMMSS> (set once at flow start; reuse on each
stage update). Every JSON record written to experiences.jsonl must include a top-level
"run_id" field (string) inside the record itself — upsert behavior is keyed by this field.
Do not rely on external metadata; the "run_id" property must be present in the JSON object.
Records should be written with stages completed and signoff_achieved: false, and only
overwritten to true when signoff passes. Create the file and parent directories if they
do not exist.
If mcp__plugin_ecc_memory__add_observations is available in this session, also emit
each new fix as an observation to entity chip-design-pd-fixes after writing to
experiences.jsonl. Skip this step silently if the tool is absent — the JSONL file
is the canonical record.