算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
sta【设计与创意】Static timing analysis — multi-corner constraint validation, setup and hold analysis, timing exception review, and ECO guidance for closure. Use when running timing analysis on a design, reviewing timing violations, guiding ECO fixes, or performing timing sign-off for tape-out.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
When this skill is loaded and a user presents a timing analysis task, do not
execute stages directly. Immediately spawn the
digital-chip-design-agents:sta-orchestrator agent and pass the full user
request and any available context to it. The orchestrator enforces the stage
sequence, loop-back rules, and sign-off criteria defined below.
Use the domain rules in this file only when the orchestrator reads this skill mid-flow for stage-specific guidance, or when the user asks a targeted reference question rather than requesting a full flow execution.
Before executing or advising on any stage, read the following files if they exist:
memory/sta/knowledge.md — known failure patterns, successful tool flags, PDK/tool quirks.
Incorporate its guidance into every stage decision. If absent, proceed without it.memory/sta/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.
Multi-corner, multi-mode timing analysis, exception review, ECO-guided closure, and timing sign-off. WNS ≥ 0 and TNS = 0 at all corners required for tape-out.
sta) — standalone open-source STA; runs tcl scripts in batch mode (see sequential flow note below)openroad -no_init) — STA within the OpenROAD PD flow; runs sequentially via tcl scriptpt_shell, dialect synopsys) — gold-standard multi-corner STA and power analysistempus, dialect cadence) — concurrent multi-mode multi-corner STA with ECO guidanceOpenSTA (sta) and the OpenROAD STA subsystem (openroad -no_init) execute tcl script
commands sequentially. When run in batch mode the agent must parse the output log to
extract timing results — there is no interactive prompt to query mid-run.
Key log patterns to parse after run completion:
report_timing output → extract WNS (worst negative slack) and critical pathreport_tns output → extract TNS (total negative slack) per cornerreport_clock_skew output → global skew and insertion delay per clock groupcheck_timing → missing constraints, unconstrained endpoints, loopsBatch invocation:
opensta -no_splash -exit timing_check.tcl > sta.log 2>&1
# or via OpenROAD:
openroad -no_init -exit sta.tcl > sta.log 2>&1
Parse sta.log after completion. Apply loop-back rules (ECO guidance stage) if
setup/hold violations are found.
report_timing -unconstrained–setup N and –hold 1 specified| Error | Consequence |
|---|---|
| MCP without hold correction | Hold violations introduced |
| False path too broad | Real timing issues masked |
| Generated clock missing | Path unconstrained |
| Wrong clock period | Over/under-constraining |
Corners are driven by design_state.constraints.pvt_corners[]. The table below shows the
default corners used when pvt_corners is absent or contains no entries with non-null V/T:
| Mode | Setup Corner | Hold Corner |
|---|---|---|
| Functional | SS/0.9V/125°C (default) | FF/1.1V/−40°C (default) |
| Test (at-speed) | SS/0.9V/125°C (default) | FF/1.1V/25°C (default) |
| Low Power | SS/0.9V/125°C (default) | FF/1.1V/25°C (default) |
When pvt_corners is populated, use every entry with "checks": ["setup"] for setup and
every entry with "checks": ["hold"] for hold; the defaults above are the fallback.
| Metric | Target |
|---|---|
| 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 |
| Hold TNS | = design_state.constraints.timing.tns_ns_target (default: 0) all corners |
set_false_path: verify the path is truly non-functional (not just inconvenient)set_multicycle_path: verify both -setup N and -hold 1 are set correctlyset_max_delay: verify value matches system-level timing budget| Error | Consequence |
|---|---|
set_false_path on functional CDC | Real metastability risk hidden |
| MCP without hold correction | Hold violations introduced silently |
| Exception too broad (glob match) | Unintended paths unconstrained |
| Expired exception (removed logic) | Stale SDC — may mask other issues |
Setup violation:
Logic depth > target? → Retime / add pipeline stage
Long wire (> 500μm)? → Buffer insertion / reroute on upper metal
Weak driver? → Upsize driver cell
High-Vt on critical path? → Swap to SVT or LVT
Reconvergent fanout? → Clone cell / split net
Hold violation:
Skew-induced (post-CTS)? → Useful skew / targeted delay buffer
Short path (< 1 cycle)? → Insert HVT delay buffer
New path from ECO? → Targeted hold buffer at sink register
design_state.constraints.timing.wns_ns_target (default: 0) at all cornersdesign_state.constraints.timing.tns_ns_target (default: 0) at all cornersdesign_state.constraints.timing.wns_ns_target (default: 0) at all cornersdesign_state.constraints.timing.tns_ns_target (default: 0) at all cornersSee plugins/meta/skills/pipeline-orchestration/SKILL.md §Constraints Schema for the authoritative schema and stage-entry validation rule.
Required at entry (constraint_validation) — hard-fail if missing:
constraints.clock.clk_mhz — clock frequency used to interpret timing resultsconstraints.pvt_corners — at least one entry with non-null voltage_v and temp_c; missing or invalid entries should hard-fail during constraint_validationOptional (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 limitconstraints.timing.transition_ps_max (default: 200) — max clock transitionconstraints.timing.insertion_delay_ps_max (default: 500) — max insertion delayAfter each stage completes (regardless of whether an orchestrator session is active),
write or overwrite one JSON record in memory/sta/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 = sta_<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/sta/run_state.md as the first action before launching any tool:
run_id: sta_<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-sta-fixes after writing to
experiences.jsonl. Skip silently if the tool is absent — JSONL is the canonical record.