From vibe-ic
Extracts parasitic RC from Magic layout and re-simulates analog blocks across PVT corners, comparing pre-layout vs post-layout specs to flag regressions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/vibe-ic:analog-extraction-resimThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
After analog layout in Magic, extracts parasitic RC and re-simulates across PVT corners to check for layout-induced performance degradation. Compares pre-layout vs post-layout results and flags regressions.
After analog layout in Magic, extracts parasitic RC and re-simulates across PVT corners to check for layout-induced performance degradation. Compares pre-layout vs post-layout results and flags regressions.
analog-layout has produced a Magic .mag fileanalog/<block>/layout.mag — Magic layout fileanalog/<block>/corner_results.json — pre-layout SPICE results (baseline)analog/<block>/spec.json — specs for pass/fail comparisonExtract parasitics — emit/validate the Magic parasitic-RC TCL with
programs/magic_extract_spice_emit.py (do not hand-write the recipe):
# emit the deterministic .mag -> RC-annotated .subckt extraction TCL
python3 programs/magic_extract_spice_emit.py --block <block> \
--out-spice analog/<block>/<block>_extracted.spice --out extract.tcl
# or validate an existing extraction TCL (FAILs if it omits `extract all`
# or `ext2spice lvs` — the two silent causes of a vacuous 0% degradation)
python3 programs/magic_extract_spice_emit.py --validate extract.tcl
Then run it via eda_extraction (or magic). Output:
analog/<block>/<block>_extracted.spice.
The fixed
load / extract all / ext2spice lvs / ext2spicerecipe is enforced byprograms/magic_extract_spice_emit.py(distinct from the GDS-read + port-promote LVS recipe inmagic_port_extract_emit.py).
Re-simulate with extracted netlist:
eda_spice_corner with same corners as pre-layoutanalog/<block>/post_layout_corner_results.jsonCompare pre vs post — run the deterministic checker; do not re-grade by hand:
python3 programs/analog_pre_vs_post_layout_check.py <project> --json
It computes per-metric per-corner degradation (post - pre) / pre × 100% and
classifies it against the canonical degradation bands, which the program owns
(single source of truth — see "Degradation thresholds" below). Do NOT hardcode a
different ERROR/WARNING cutoff in your report; quote the program's verdict.
analog/<block>/pre_vs_post.json{
"block_name": "ldo_1v8",
"pre_layout_file": "corner_results.json",
"post_layout_file": "post_layout_corner_results.json",
"comparison": {
"gain_db": {"pre": 62.3, "post": 58.1, "degradation_pct": -6.7, "status": "OK"},
"ugb_mhz": {"pre": 11.2, "post": 7.5, "degradation_pct": -33.0, "status": "ERROR"},
"vout_dc": {"pre": 1.8002, "post": 1.7998, "degradation_pct": -0.02, "status": "OK"}
},
"worst_degradation": {"metric": "ugb_mhz", "pct": -33.0},
"overall_status": "NEEDS_RELAYOUT"
}
Enforced by programs/analog_pre_vs_post_layout_check.py (single source of
truth — ≤20% OK / >20% WARNING / >30% ERROR→NEEDS_RELAYOUT). Quote the
program's verdict; do not restate a conflicting cutoff. If the policy must
change, change it in the program (one place) so SKILL.md and runtime never drift.
Branch on the overall_status field emitted by
programs/analog_pre_vs_post_layout_check.py (deterministic, not a judgment call):
OK / WARNING → analog-hardmacro-gen (Step A8)NEEDS_RELAYOUT → back to analog-layout (Step A5)post_layout_corner_results.json → analog_pre_vs_post_layout_check gateAfter producing your output, save it to a file and run:
python3 plugins/vibe-ic/_shared/skill_compliance_check.py \
--requirements plugins/vibe-ic/skills/analog-extraction-resim/compliance.yaml \
<your_output_file>
Exit 0 = PASS, exit 1 = FAIL with specific missing elements listed.
Your task is not complete until the audit returns PASS.
npx claudepluginhub vibeic/vibe-ic --plugin vibe-icGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.