executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
-prefixed cell names in the output netlist)\n2. Verify that the output netlist (`synth_netlist.v`) exists and is non-empty\n3. Parse `report_area` / `report_timing` output if ABC timing mode (`abc -constr`) was used\n\nWhen used inside OpenROAD Flow Scripts (ORFS) or LibreLane, the Yosys log appears at:\n`logs/\u003cplatform>/\u003cdesign>/1_1_yosys.log`\n\n---\n\n## Stage: constraint_setup\n\n### Domain Rules\n1. `create_clock`: all primary clocks with period, waveform, source pin, name\n2. `create_generated_clock`: all derived/divided clocks with correct source\n3. `set_clock_uncertainty`: setup = skew + jitter — use `design_state.constraints.timing.clk_uncertainty_ps` if set; otherwise 200–500 ps pre-CTS (default: see `constraints.timing.clk_uncertainty_ps`, schema default null → use 200–500 ps rule-of-thumb)\n4. `set_input_delay` / `set_output_delay`: all primary IOs constrained\n5. `set_false_path`: multi-clock crossings, test modes, async resets\n6. `set_multicycle_path`: both setup (-setup N) and hold (-hold 1) must be set\n7. `set_dont_touch`: IPs, memory macros, hand-crafted cells\n8. `set_max_fanout`: from `design_state.constraints.timing.fanout_max` (default: 32)\n9. `set_max_transition`: per technology DRC rule\n10. Operating conditions: explicitly set (never rely on tool defaults)\n\n### Common SDC Mistakes\n| Mistake | Consequence |\n|---------|------------|\n| Missing generated clock | Path unconstrained — may miss timing |\n| MCP without hold correction | Hold violations introduced |\n| False path too broad | Real timing issues masked |\n| No operating conditions set | Wrong library corner used |\n\n### QoR Metrics to Evaluate\n- All clocks defined (verify with `report_clocks`)\n- All IOs constrained (verify with `report_port -verbose`)\n- No unconstrained paths (`report_timing -unconstrained`)\n\n### Output Required\n- Validated SDC file\n- Clock summary\n- Constraint QA report\n\n---\n\n## Stage: compile_explore\n\n### Domain Rules\n1. Run at worst-case timing corner (SS, low voltage, high temperature)\n2. Compile explore: faster run to find best logic structure\n3. Try multiple architectures: retiming on/off, datapath options\n4. Identify critical paths for human review before final compile\n5. Check area estimate vs microarch estimate\n\n### Optimisation Strategy by Priority\n| Priority | Approach |\n|----------|---------|\n| Timing | compile_ultra, path_group weighting, retiming |\n| Area | High area_effort, resource sharing |\n| Power | Clock gating insertion, power-aware compile |\n| Balanced | compile_ultra -no_autoungroup + incremental |\n\n### Output Required\n- Exploration report (timing, area, power summary)\n- Critical path list for architect review\n- Recommended compile strategy for final compile\n\n---\n\n## Stage: compile_final\n\n### Domain Rules\n1. Run multi-scenario if available (setup + hold simultaneously)\n2. Enable clock gating synthesis for sequential power reduction\n3. Preserve hierarchy for blocks with existing placement intent\n4. Ungroup small modules for better cross-boundary optimisation\n5. Review critical paths manually — restructure RTL if path cannot close\n6. Run incremental compile after initial compile to address remaining violations\n\n### QoR Metrics to Evaluate\n- WNS: ≥ `design_state.constraints.timing.wns_ns_target` at worst-case corner for sign-off (default: 0)\n- TNS: = `design_state.constraints.timing.tns_ns_target` for clean sign-off (default: 0)\n- Area: within `design_state.constraints.area.area_um2` budget\n- Power: within `design_state.constraints.power.power_mw` budget\n- No unmapped cells\n\n### Output Required\n- Gate-level netlist (.v)\n- Timing report (setup and hold, all path groups)\n- Area report\n- Power report\n- Synthesis run log\n\n---\n\n## Stage: netlist_qc\n\n### Checks Required\n1. No black boxes (undefined modules) in netlist. A black box is an input-set defect, not a\n compile result: if it resolves to first-party RTL, that file is missing from the synthesis\n source list (sv2v and yosys black-box it without an error); otherwise a library, macro or\n IP view is missing. Either way re-running the compile cannot fix it — name the module, the\n file or view, and the list, and escalate as `input_setup`\n2. No combinational loops (`report_loop`)\n3. Scan chains intact (if DFT-enabled compile)\n4. Power/ground connections correct (tie cells, well ties)\n5. Formal equivalence check (RTL vs netlist): PASS required\n\n### LEC Requirements\n- Golden: RTL (post-lint, post-CDC-clean)\n- Revised: gate-level netlist\n- Result: all points EQUIVALENT\n- Any UNMATCHED point: must be resolved before PD\n\n### QoR Metrics to Evaluate\n- LEC: 100% EQUIVALENT\n- No black boxes\n- No combinational loops\n- Scan chain integrity: verified\n\n### Output Required\n- LEC report (pass/fail)\n- Netlist QC checklist\n- Final gate netlist (ready for PD)\n- Back-annotated SDC for PD\n\n---\n\n## Stage: synthesis_signoff\n\n### Sign-off Checklist\n- [ ] WNS ≥ `design_state.constraints.timing.wns_ns_target` at all required corners (default: 0)\n- [ ] TNS = `design_state.constraints.timing.tns_ns_target` (default: 0)\n- [ ] Area within `design_state.constraints.area.area_um2` budget\n- [ ] Power within `design_state.constraints.power.power_mw` budget\n- [ ] LEC: EQUIVALENT\n- [ ] No black boxes\n- [ ] No combinational loops\n- [ ] Scan chains verified (if DFT)\n\n### Output Required\n- PD handoff package: netlist, SDC, timing reports, area/power reports\n\n---\n\n## Constraint Validation\n\nSee `plugins/meta/skills/pipeline-orchestration/SKILL.md` §Constraints Schema for the authoritative schema and stage-entry validation rule.\n\n**Required at entry (`constraint_setup`) — hard-fail if missing:**\n- `constraints.clock.clk_mhz` — target clock frequency (drives SDC `create_clock`)\n- `constraints.area.area_um2` — area budget\n- `constraints.power.power_mw` — power budget\n\n**Optional (schema defaults apply when absent):**\n- `constraints.timing.wns_ns_target` (default: 0) — WNS sign-off threshold\n- `constraints.timing.tns_ns_target` (default: 0) — TNS sign-off threshold\n- `constraints.timing.fanout_max` (default: 32) — `set_max_fanout` value\n- `constraints.timing.clk_uncertainty_ps` (default: null → use 200–500 ps rule-of-thumb)\n\n---\n\n## Memory\n\n### Write on stage completion\nAfter each stage completes (regardless of whether an orchestrator session is active),\nupsert one JSON record in `memory/synthesis/experiences.jsonl` keyed by `run_id`.\nImplement the upsert by rewriting the file: read all existing lines, filter out any\nrecord(s) with the same `run_id`, append the updated record, write the full content\nback atomically (replace the file). Every record must include a top-level `\"run_id\"`\nfield with format `synthesis_\u003cYYYYMMDD>_\u003cHHMMSS>` (set once at flow start; reuse on\neach stage update). Set `signoff_achieved: false` until the final sign-off stage\ncompletes.\n### Run state (write before first stage, update after each stage)\nWrite `memory/synthesis/run_state.md` as the **first action** before launching any tool:\n```markdown\nrun_id: synthesis_\u003cYYYYMMDD>_\u003cHHMMSS>\ndesign_name: \u003cdesign>\ntool: \u003cprimary tool>\nstart_time: \u003cISO-8601>\nlast_stage: \u003cfirst stage name>\n```\nUpdate `last_stage` after each stage completes. This file lets wakeup-loop prompts\nand resumed sessions identify the correct run without relying on in-memory state.\nCreate the file and parent directories if they do not exist.\n\n### Optional: claude-mem index\nIf `mcp__plugin_ecc_memory__add_observations` is available in this session, emit each\napplied fix as an observation to entity `chip-design-synthesis-fixes` after writing to\n`experiences.jsonl`. Skip silently if the tool is absent — JSONL is the canonical record.\n","licenseDocuments":[]}}
logic-synthesisLogic synthesis from RTL to gate-level netlist — SDC constraint validation, compile and optimisation strategy, netlist quality check, and LEC equivalence verification. Use when synthesising RTL for ASIC, setting up timing constraints, optimising for timing/area/power, or verifying a post-synthesis netlist.
Independent GitHub snapshot · Automated classification · Original documentation governs
digital-chip-design-agents:synthesis-orchestrator agent and pass the full
user request and any available context. Do not execute stages directly.synthesis-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/synthesis/knowledge.md — known failure patterns, successful tool flags, PDK/tool quirks.
Incorporate its guidance into every stage decision. If absent, proceed without it.memory/synthesis/run_state.md — current run identity (run_id, design_name, tool,
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.
Produce a timing-clean, area-efficient, LEC-verified gate-level netlist from RTL. Covers constraint setup, synthesis compilation strategy, and quality checks before PD handoff.
yosys) — open-source synthesis suite; runs as a sequential pass pipeline (see sequential flow note below)surelog) — SystemVerilog front-end for Yosysdc_shell, dialect synopsys) — industry-standard logic synthesisgenus, dialect cadence) — RTL-to-netlist with concurrent optimisationfc_shell, dialect synopsys) — combined synthesis and physical guidanceYosys runs its synthesis script (yosys -c synth.ys or yosys -p "synth_*") as a
sequential pass pipeline. Each pass (read_verilog → synth → opt → techmap → abc →
write_verilog) executes in order; errors or warnings in early passes propagate forward.
After a Yosys run the agent must:
yosys.log) for:
Warning: / Error: lines per pass$-prefixed cell names in the output netlist)synth_netlist.v) exists and is non-emptyreport_area / report_timing output if ABC timing mode (abc -constr) was usedWhen used inside OpenROAD Flow Scripts (ORFS) or LibreLane, the Yosys log appears at:
logs/<platform>/<design>/1_1_yosys.log
create_clock: all primary clocks with period, waveform, source pin, namecreate_generated_clock: all derived/divided clocks with correct sourceset_clock_uncertainty: setup = skew + jitter — use design_state.constraints.timing.clk_uncertainty_ps if set; otherwise 200–500 ps pre-CTS (default: see constraints.timing.clk_uncertainty_ps, schema default null → use 200–500 ps rule-of-thumb)set_input_delay / set_output_delay: all primary IOs constrainedset_false_path: multi-clock crossings, test modes, async resetsset_multicycle_path: both setup (-setup N) and hold (-hold 1) must be setset_dont_touch: IPs, memory macros, hand-crafted cellsset_max_fanout: from design_state.constraints.timing.fanout_max (default: 32)set_max_transition: per technology DRC rule| Mistake | Consequence |
|---|---|
| Missing generated clock | Path unconstrained — may miss timing |
| MCP without hold correction | Hold violations introduced |
| False path too broad | Real timing issues masked |
| No operating conditions set | Wrong library corner used |
report_clocks)report_port -verbose)report_timing -unconstrained)| Priority | Approach |
|---|---|
| Timing | compile_ultra, path_group weighting, retiming |
| Area | High area_effort, resource sharing |
| Power | Clock gating insertion, power-aware compile |
| Balanced | compile_ultra -no_autoungroup + incremental |
design_state.constraints.timing.wns_ns_target at worst-case corner for sign-off (default: 0)design_state.constraints.timing.tns_ns_target for clean sign-off (default: 0)design_state.constraints.area.area_um2 budgetdesign_state.constraints.power.power_mw budgetinput_setupreport_loop)design_state.constraints.timing.wns_ns_target at all required corners (default: 0)design_state.constraints.timing.tns_ns_target (default: 0)design_state.constraints.area.area_um2 budgetdesign_state.constraints.power.power_mw budgetSee plugins/meta/skills/pipeline-orchestration/SKILL.md §Constraints Schema for the authoritative schema and stage-entry validation rule.
Required at entry (constraint_setup) — hard-fail if missing:
constraints.clock.clk_mhz — target clock frequency (drives SDC create_clock)constraints.area.area_um2 — area budgetconstraints.power.power_mw — power budgetOptional (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.fanout_max (default: 32) — set_max_fanout valueconstraints.timing.clk_uncertainty_ps (default: null → use 200–500 ps rule-of-thumb)After each stage completes (regardless of whether an orchestrator session is active),
upsert one JSON record in memory/synthesis/experiences.jsonl keyed by run_id.
Implement the upsert by rewriting the file: read all existing lines, filter out any
record(s) with the same run_id, append the updated record, write the full content
back atomically (replace the file). Every record must include a top-level "run_id"
field with format synthesis_<YYYYMMDD>_<HHMMSS> (set once at flow start; reuse on
each stage update). Set signoff_achieved: false until the final sign-off stage
completes.
Write memory/synthesis/run_state.md as the first action before launching any tool:
run_id: synthesis_<YYYYMMDD>_<HHMMSS>
design_name: <design>
tool: <primary tool>
start_time: <ISO-8601>
last_stage: <first stage name>
Update last_stage after each stage completes. This file lets wakeup-loop prompts
and resumed sessions identify the correct run without relying on in-memory state.
Create the file and parent directories if they do not exist.
If mcp__plugin_ecc_memory__add_observations is available in this session, emit each
applied fix as an observation to entity chip-design-synthesis-fixes after writing to
experiences.jsonl. Skip silently if the tool is absent — JSONL is the canonical record.