Measure Simulation Results
SkillMonitoring & opsExtract waveform measurements from Virtuoso simulation results. Use when measuring voltage, current, gm, gm/Id, bandwidth, settling time, or any simulation metric.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Measure Simulation Results skill
What this skill tells your AI
The instructions your AI receives, as published by deanyou/virtuoso-cli in .agents/skills/sim-measure/SKILL.md and read by ahel’s review.
Extract metrics from completed simulations via virtuoso sim measure.
Usage
virtuoso sim measure --analysis <TYPE> --expr '<EXPRESSION>' [--expr '<EXPR2>'] --format json
DC operating point measurements
# Voltage at a node
virtuoso sim measure --analysis dcOp --expr 'value(VDC("/net1"))' --format json
# Drain current
virtuoso sim measure --analysis dcOp --expr 'value(IDC("/NM0/D"))' --format json
# Operating point parameter (gm, gds, vth, etc.)
virtuoso sim measure --analysis dcOp --expr 'value(getData("/NM0:gm" ?result "dcOpInfo"))' --format json
virtuoso sim measure --analysis dcOp --expr 'value(getData("/NM0:ids" ?result "dcOpInfo"))' --format json
virtuoso sim measure --analysis dcOp --expr 'value(getData("/NM0:vth" ?result "dcOpInfo"))' --format json
# Multiple measurements at once
virtuoso sim measure --analysis dcOp \
--expr 'value(VDC("/net1"))' \
--expr 'value(IDC("/NM0/D"))' \
--expr 'value(getData("/NM0:gm" ?result "dcOpInfo"))' \
--format json
Transient measurements
# Peak voltage
virtuoso sim measure --analysis tran --expr 'ymax(VT("/OUT"))' --format json
# Minimum voltage
virtuoso sim measure --analysis tran --expr 'ymin(VT("/OUT"))' --format json
# Crossing time (settling)
virtuoso sim measure --analysis tran --expr 'cross(VT("/OUT") 0.6 1 "rising")' --format json
# Value at specific time
virtuoso sim measure --analysis tran --expr 'value(VT("/OUT") 10e-6)' --format json
AC measurements
# Gain at DC
virtuoso sim measure --analysis ac --expr 'value(dB20(VF("/OUT")) 1)' --format json
# Unity-gain bandwidth
virtuoso sim measure --analysis ac --expr 'cross(dB20(VF("/OUT")) 0 1 "falling")' --format json
# Phase margin
virtuoso sim measure --analysis ac --expr 'value(phase(VF("/OUT")) cross(dB20(VF("/OUT")) 0 1 "falling"))' --format json
Available signal accessors
| Function | Domain | Description |
|---|---|---|
VDC("/node") | dc | DC voltage |
IDC("/inst/term") | dc | DC current |
VT("/node") | tran | Transient voltage |
IT("/inst/term") | tran | Transient current |
VF("/node") | ac | AC voltage (complex) |
IF("/inst/term") | ac | AC current (complex) |
getData("/inst:param" ?result "dcOpInfo") | dcOp | Operating point param |
Waveform math functions
| Function | Description |
|---|---|
ymax(wave) | Maximum value |
ymin(wave) | Minimum value |
value(wave time) | Value at time/freq |
cross(wave val n dir) | Time when wave crosses val |
dB20(wave) | 20*log10(magnitude) |
phase(wave) | Phase in degrees |
bandwidth(wave level) | -3dB bandwidth |
integ(wave) | Integral over sweep range |
rms(wave) | RMS value |
average(wave) | Average value |
delay(wave1 val1 edge1 wave2 val2 edge2 n) | Propagation delay |
slewRate(wave pct1 pct2 dir) | Slew rate |
settlingTime(wave final tol) | Settling time |
Noise measurements
# Run noise analysis first
virtuoso sim run --analysis noise --start 10 --stop 100e3 --dec 20 --timeout 120
# Spot noise at 1kHz
virtuoso sim measure --analysis noise \
--expr 'value(getData("/OUT" ?result "noise") 1e3)'
# Integrated noise (10Hz-100kHz)
virtuoso sim measure --analysis noise \
--expr 'integ(getData("/OUT" ?result "noise") 10 100e3)'
Common amplifier measurements (complete recipe)
# === DC operating point ===
virtuoso sim run --analysis dc --param saveOppoint=t
virtuoso sim measure --analysis dcOp \
--expr 'value(VDC("/OUT"))' \
--expr 'value(IDC("/M1/D"))'
# === AC: gain, GBW, phase margin ===
virtuoso sim run --analysis ac --start 1 --stop 10e9 --dec 20
DC_GAIN=$(virtuoso sim measure --analysis ac --expr 'dB20(value(VF("/OUT") 1))' --format json | jq -r '.measures[0].value')
UGB=$(virtuoso sim measure --analysis ac --expr 'cross(dB20(VF("/OUT")) 0 1 "falling")' --format json | jq -r '.measures[0].value')
PM=$(virtuoso sim measure --analysis ac --expr 'value(phase(VF("/OUT")) cross(dB20(VF("/OUT")) 0 1 "falling")) + 180' --format json | jq -r '.measures[0].value')
echo "Gain=${DC_GAIN}dB GBW=${UGB}Hz PM=${PM}°"
# === Transient: slew rate, settling ===
virtuoso sim run --analysis tran --stop 20u
virtuoso sim measure --analysis tran \
--expr 'slewRate(VT("/OUT") 10 90 "rising")' \
--expr 'slewRate(VT("/OUT") 90 10 "falling")'
Signals
- GitHub stars
- 32
- Forks
- 10
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
sim-measure- Source
- github.com/deanyou/virtuoso-cli