ams-sim · diff

git:20260613.86cacb4 to git:20261023.c06af60

11 added, 2 removed. Audit A to A.

---
name: ams-sim
description: Plan and run analog / mixed-signal simulations — DC op, AC, transient, Monte Carlo, corner sweeps, PSRR/CMRR, noise — using ngspice, Xyce, Spectre, or HSPICE, and triage the results. Use when the user says "SPICE", "ngspice", "Monte Carlo", "corner simulation", "analog sim", "AC analysis", "transient", "PSRR", "CMRR", "noise analysis".
---
# AMS Sim
Analog blocks must be verified across process corners, temperature, voltage, and mismatch. This skill plans the testbench matrix, generates the simulator decks, and triages results.
## When to use
- After `/analog-sizing` produces a schematic
- After `/analog-layout` + extraction (post-layout)
- When mismatching is the suspected failure mode (Monte Carlo)
- Mixed-signal co-simulation with a digital controller (ngspice + Verilog-A, or Spectre APS)
## Inputs
1. Schematic / netlist (`.sp`, `.cir`, `.scs`)
2. Device models from PDK (`.lib` / `.scs`)
3. Specs to verify (gain, BW, PSRR, CMRR, noise, slew, settling, offset)
4. Corner definition (FF/SS/TT/FS/SF × temp × supply)
5. Monte Carlo N (typical 500–5000 runs)
## Analysis matrix
| Analysis | Purpose |
|---|---|
| `.op` | DC operating point, bias validation |
| `.dc` | Sweeps (supply, input, parameter) |
| `.ac` | Gain, bandwidth, phase margin |
- | `.tran` | Settling, slew, large-signal |
- | `.noise` | Input-referred noise, SNR |
+ | `.tran` | Settling, slew, large-signal; sampled converter ENOB/SNR/SNDR via spectrum |
+ | `.noise` | Input-referred noise and small-signal analog SNR estimates |
| `.pss` / `.pac` / `.pnoise` | Periodic steady-state (for RF / SC circuits) |
| `.mc` | Monte Carlo mismatch + process |
The spec → required-analysis-subset mapping in this table is a frozen
lookup, **enforced by `programs/ams_analysis_select.py`** — do NOT pick
the analysis set by hand (two agents would otherwise pick different /
incomplete subsets for the same spec list). Run it on the block's
`spec.json` (or the project dir to scan `analog/*/spec.json`) and use
the emitted `analyses` set:
```bash
python3 programs/ams_analysis_select.py <block>/spec.json
# -> {"analyses": [".op", ".ac", ".tran", ".noise"], "mapping": [...]}
```
It always selects `.op` (bias validation) when ≥1 measurable spec is
present, adds `.mc` whenever any spec declares a mismatch / σ / yield
concern, and FAILs honestly (exit 1) when a spec carries no recognizable
measurable metric. Agent judgment is only needed to override an
ambiguous / custom spec key the table does not recognize.
+
+ ENOB and SINAD require a sampled dynamic measurement; declared converter
+ SNR/SNDR use transient capture and spectral processing as well. A small-signal
+ `.noise` result cannot establish these converter metrics. Separate physical
+ noise specifications still select `.noise`. See
+ [Analog Devices MT-003](https://www.analog.com/media/en/training-seminars/tutorials/MT-003.pdf),
+ pages 1 and 5–6. Stimulus, sampling and capture settings must be recorded with
+ the result; choosing an engineering measurement setting does not add a new
+ electrical acceptance requirement to the source specification.
## Workflow
1. Pick the analysis subset — **enforced by `programs/ams_analysis_select.py`** (see Analysis matrix)
2. Build deck with corner + MC sweeps
3. Run (ngspice / Xyce / Spectre / HSPICE)
4. Extract measurements via `.meas` statements — generated by `programs/analog_meas_from_spec_gen.py`
5. Tabulate corners × MC yield vs spec — **enforced by `programs/corner_yield_vs_spec_check.py`** (re-derives per-corner / per-spec PASS/FAIL from `spec.json` min/max limits + reports the worst, smallest-margin corner) and **`programs/analog_corner_sweep_check.py`** (gates ≥9-corner PVT count + all-spec-pass). Do NOT hand-tabulate the yield table — quote these programs' verdicts.
6. Flag failing corners — the worst corner is the `worst_corner` field from `corner_yield_vs_spec_check.py`; PVT-coverage gaps are classified by **`programs/corner_coverage_audit.py`**. Propose sizing or layout changes (agent judgment).
7. Hand off to re-sizing loop
## Output format
- `sim/<block>.sp` (or equivalent) — simulator deck
- `sim/<block>_results.md`:
- Spec table with pass/fail per corner — populated from `corner_yield_vs_spec_check.py` (per-corner / per-spec PASS/FAIL re-derived from `spec.json` limits), not graded by eye
- MC yield percentage per spec — gated by `analog_corner_sweep_check.py`
- Sensitivity list (which device / parameter dominates) — agent judgment
- Suggested fixes — agent judgment
## Tool prerequisites
Open source: ngspice (https://ngspice.sourceforge.io/), Xyce. Commercial: Cadence Spectre, Synopsys HSPICE, Silvaco SmartSpice.
## Technical basis
Pelgrom mismatch model, corner methodology from PDK, Monte Carlo with correlated process parameters. Mixed-signal co-sim per Verilog-AMS / Verilog-A standards.
## Handoff
- Failing corners → `/analog-sizing` (re-size)
- Layout-driven failures → `/analog-layout`
- Model issues → escalate to PDK team
## Compliance gate (mandatory)
After producing your output, save it to a file and run:
```bash
python3 plugins/vibe-ic/_shared/skill_compliance_check.py \
--requirements plugins/vibe-ic/skills/ams-sim/compliance.yaml \
<your_output_file>
```
Exit 0 = PASS, exit 1 = FAIL with specific missing elements listed.
`compliance.yaml` in the corresponding skill directory enumerates
every required element of your output: section headers, metadata fields,
handoff lines, tool invocations.
**Your task is not complete until the audit returns PASS.** Missing
elements are the single largest source of skill-execution non-determinism
across different agents.