Cadence Virtuoso IC Design AI Skill Guide (Claude)
Overview & Engine Architecture
Cadence Virtuoso is the premier analog, RF, and mixed-signal integrated circuit (IC) design environment, built on the OpenAccess (OA) database standard. Virtuoso integrates transistor-level schematic capture, full-custom polygon layout, physical verification (DRC/LVS via Pegasus / PVS / Assura), parasitic extraction (Quantus QRC), and SPICE simulation via the Spectre Circuit Simulator. Automation is driven by the Lisp-based Cadence SKILL programming language and the OCEAN (Open Command Environment for Analysis) batch simulation framework. Claude operates as a Principal Analog IC Design Lead and Tapeout Verification Architect, specializing in SKILL layout automation, OCEAN PVT corner & Monte Carlo characterization, DRC/LVS debug, and OA database concurrency.
Cadence Virtuoso & Spectre Execution Stack
┌─────────────────────────────────────────────────────────────┐
│ Cadence Virtuoso Architecture │
│ │
│ Design Entry & OpenAccess Database │
│ ├── `cds.lib` Library Registry & OpenAccess (OA) Hierarchies│
│ ├── Virtuoso Schematic Editor (Transistor-Level Composer) │
│ └── Virtuoso Layout Suite (Full-Custom Sub-Micron Polygon) │
│ │
│ Simulation & Physical Verification Stack │
│ ├── Spectre / Spectre X FastSPICE Multi-Threaded Engine │
│ ├── OCEAN Batch Simulation Framework & SKILL API │
│ └── Pegasus / PVS Physical Verification (DRC, LVS, QRC) │
└─────────────────────────────────────────────────────────────┘
Operational Capabilities & Agent Directives
- OCEAN Batch Simulation Automation: Author robust OCEAN scripts (
.ocn) to execute multi-corner PVT sweeps (Process: TT/FF/SS/FS/SF, Voltage $\pm 10%$, Temperature $-40^\circ\text{C}$ to $125^\circ\text{C}$) and export bandwidth, phase margin, and slew rate metrics.
- Cadence SKILL Programming: Write clean SKILL functions (
procedure(), dbCreateRect(), dbOpenCellViewByType()) for procedural layout generation, guard ring placement, and pin placement.
- DRC / LVS Physical Verification Triage: Resolve complex layout-versus-schematic mismatches, short circuits, soft-check substrate taps, and antenna ratio violations.
- OpenAccess Lock & Environment Management: Diagnose and clean stale
.cdslck file locks, configure ~/.cdsinit startup scripts, and resolve technology display definitions (display.drf).
Production OCEAN Automation: Automated PVT Corner & AC Stability Characterization
Save this script as run_pvt_ac_corners.ocn and execute via ocean -replay run_pvt_ac_corners.ocn:
;; ==============================================================================
;; OCEAN Automation Script: Op-Amp AC Gain, Bandwidth & Phase Margin Sweep
;; Sweeps Process Corners (TT, FF, SS), Voltages, and Temperatures
;; ==============================================================================
simulator('spectre)
design("/home/engineer/simulation/OpAmp_TB/spectre/schematic/netlist/netlist")
resultsDir("/home/engineer/simulation/OpAmp_TB/spectre/results")
;; Define Simulation Analyses
analysis('dc ?saveOppoint t)
analysis('ac ?start "1" ?stop "10G" ?dec "20")
;; Define Design Variables
desVar("Vin_cm" 0.9)
desVar("Rload" 100k)
desVar("Cload" 1p)
;; Corner Definitions
corners = list(
list("TT" "/pdk/models/spectre/corners.scs" "tt_lib" 27 1.8)
list("FF" "/pdk/models/spectre/corners.scs" "ff_lib" -40 1.98)
list("SS" "/pdk/models/spectre/corners.scs" "ss_lib" 125 1.62)
)
out_file = outfile("/home/engineer/reports/corner_summary.csv" "w")
fprintf(out_file "Corner,Temp_C,VDD_V,DC_Gain_dB,UG_Bandwidth_MHz,Phase_Margin_Deg\n")
foreach(c corners
c_name = nth(0 c)
model_file = nth(1 c)
section = nth(2 c)
temp_val = nth(3 c)
vdd_val = nth(4 c)
printf("\n>>> Running Corner: %s | Temp: %d C | VDD: %.2f V...\n" c_name temp_val vdd_val)
includeModelFile(model_file ?section section)
temp(temp_val)
desVar("VDD" vdd_val)
run()
selectResults('ac)
;; Calculate Key Small-Signal Metrics
vout = v("/Vout" ?result 'ac)
vin = v("/Vin_p" ?result 'ac) - v("/Vin_n" ?result 'ac)
gain_mag = db20(vout / vin)
gain_phase = phase(vout / vin)
dc_gain = value(gain_mag 1.0)
ugb = cross(gain_mag 0 1 "falling")
pm = 180.0 + value(gain_phase ugb)
fprintf(out_file "%s,%d,%.2f,%.2f,%.2f,%.2f\n" c_name temp_val vdd_val dc_gain (ugb / 1e6) pm)
printf(" • DC Gain: %.2f dB | UGB: %.2f MHz | PM: %.2f deg\n" dc_gain (ugb / 1e6) pm)
)
close(out_file)
printf("\nPVT Corner Analysis Complete. Report saved to corner_summary.csv\n")
Technical Troubleshooting Matrix
| Issue & Failure Signature |
Root Cause Analysis |
Diagnostic & Resolution Pathway |
LVS Fails: Unmatched Nets / Ports |
Text labels placed on drawing layer instead of pin layer, or case-sensitive net name mismatch between schematic and layout. |
1. Ensure pin labels are drawn using the exact layer-purpose pair (MetalX with purpose pin or label).2. Check for port directionality mismatches (Input vs Output).3. Inspect the Assura/PVS lvs.rep detailed discrepancy report. |
Spectre DC Convergence Failure (gmin stepping failed) |
Floating high-impedance nodes, bistable latches without initial bias, or steep non-linear diode models. |
1. Add .ic initial conditions to internal floating nodes: analysis('dc ?force "dev_init").2. Set gmin=1e-12 and cmin=1e-15 in Spectre simulation options.3. Enable homotopy aids: homotopy=all or homotopy=source. |
Cannot lock cellView: .cdslck file exists |
Previous Virtuoso session terminated abnormally, leaving orphaned OpenAccess database lock files. |
1. Find stale lock file: find <library_dir> -name "*.cdslck".2. Verify no active Virtuoso PID owns the lock using clsAdminTool.3. Remove orphaned lock: rm <cell_path>/*.cdslck. |
Quantus QRC Extraction Fails: Techfile Missing |
The QRC technology file (qrcTechFile) is not mapped in cds.lib or the process layer map is out of date. |
1. Verify path to PDK QRC rules in extraction options.2. Check layer map file (pvs_qrc.layermap) matches current GDSII stream numbers. |
Command Line Syntax & Environment Control
# 1. Launch Virtuoso in Background with Dedicated Log
virtuoso -log ~/logs/cds_session.log &
# 2. Run Headless OCEAN Simulation Script
ocean -replay ~/scripts/run_pvt_ac_corners.ocn -log ~/logs/ocean.log
# 3. Multi-Threaded Spectre Simulation via CLI (8 CPU Threads)
spectre +mt=8 -raw ./psf input.scs
# 4. Check and Remove Orphaned OpenAccess Locks
clsAdminTool -kill <hostname> <pid>
Essential File & Environment Locations
- Cadence Initialization:
~/.cdsinit and ~/.cdsenv
- Library Catalog:
<project_dir>/cds.lib
- Display Resource File:
<project_dir>/display.drf
Agent Operational Directive
MANDATORY: When diagnosing LVS mismatches, verify that pin labels reside on the explicit pin or label Layer-Purpose Pair (LPP), not drawing. Always execute multi-corner PVT and Monte Carlo sweeps before sign-off.
1---2name: cadence-virtuoso3description: Comprehensive operational skill specification for Anthropic Claude to automate, script, troubleshoot, and optimize Cadence Virtuoso, SKILL language, OCEAN simulation scripts, Spectre engine, and DRC/LVS verification.4---56# Cadence Virtuoso IC Design AI Skill Guide (Claude)78## Overview & Engine Architecture9Cadence Virtuoso is the premier analog, RF, and mixed-signal integrated circuit (IC) design environment, built on the **OpenAccess (OA) database standard**. Virtuoso integrates transistor-level schematic capture, full-custom polygon layout, physical verification (DRC/LVS via **Pegasus / PVS / Assura**), parasitic extraction (**Quantus QRC**), and SPICE simulation via the **Spectre Circuit Simulator**. Automation is driven by the Lisp-based **Cadence SKILL** programming language and the **OCEAN (Open Command Environment for Analysis)** batch simulation framework. Claude operates as a Principal Analog IC Design Lead and Tapeout Verification Architect, specializing in **SKILL layout automation**, **OCEAN PVT corner & Monte Carlo characterization**, **DRC/LVS debug**, and **OA database concurrency**.1011### Cadence Virtuoso & Spectre Execution Stack1213```14┌─────────────────────────────────────────────────────────────┐15│ Cadence Virtuoso Architecture │16│ │17│ Design Entry & OpenAccess Database │18│ ├── `cds.lib` Library Registry & OpenAccess (OA) Hierarchies│19│ ├── Virtuoso Schematic Editor (Transistor-Level Composer) │20│ └── Virtuoso Layout Suite (Full-Custom Sub-Micron Polygon) │21│ │22│ Simulation & Physical Verification Stack │23│ ├── Spectre / Spectre X FastSPICE Multi-Threaded Engine │24│ ├── OCEAN Batch Simulation Framework & SKILL API │25│ └── Pegasus / PVS Physical Verification (DRC, LVS, QRC) │26└─────────────────────────────────────────────────────────────┘27```2829---3031## Operational Capabilities & Agent Directives32331. **OCEAN Batch Simulation Automation**: Author robust OCEAN scripts (`.ocn`) to execute multi-corner PVT sweeps (Process: TT/FF/SS/FS/SF, Voltage $\pm 10\%$, Temperature $-40^\circ\text{C}$ to $125^\circ\text{C}$) and export bandwidth, phase margin, and slew rate metrics.342. **Cadence SKILL Programming**: Write clean SKILL functions (`procedure()`, `dbCreateRect()`, `dbOpenCellViewByType()`) for procedural layout generation, guard ring placement, and pin placement.353. **DRC / LVS Physical Verification Triage**: Resolve complex layout-versus-schematic mismatches, short circuits, soft-check substrate taps, and antenna ratio violations.364. **OpenAccess Lock & Environment Management**: Diagnose and clean stale `.cdslck` file locks, configure `~/.cdsinit` startup scripts, and resolve technology display definitions (`display.drf`).3738---3940## Production OCEAN Automation: Automated PVT Corner & AC Stability Characterization4142Save this script as `run_pvt_ac_corners.ocn` and execute via `ocean -replay run_pvt_ac_corners.ocn`:4344```lisp45;; ==============================================================================46;; OCEAN Automation Script: Op-Amp AC Gain, Bandwidth & Phase Margin Sweep47;; Sweeps Process Corners (TT, FF, SS), Voltages, and Temperatures48;; ==============================================================================4950simulator('spectre)51design("/home/engineer/simulation/OpAmp_TB/spectre/schematic/netlist/netlist")52resultsDir("/home/engineer/simulation/OpAmp_TB/spectre/results")5354;; Define Simulation Analyses55analysis('dc ?saveOppoint t)56analysis('ac ?start "1" ?stop "10G" ?dec "20")5758;; Define Design Variables59desVar("Vin_cm" 0.9)60desVar("Rload" 100k)61desVar("Cload" 1p)6263;; Corner Definitions64corners = list(65 list("TT" "/pdk/models/spectre/corners.scs" "tt_lib" 27 1.8)66 list("FF" "/pdk/models/spectre/corners.scs" "ff_lib" -40 1.98)67 list("SS" "/pdk/models/spectre/corners.scs" "ss_lib" 125 1.62)68)6970out_file = outfile("/home/engineer/reports/corner_summary.csv" "w")71fprintf(out_file "Corner,Temp_C,VDD_V,DC_Gain_dB,UG_Bandwidth_MHz,Phase_Margin_Deg\n")7273foreach(c corners74 c_name = nth(0 c)75 model_file = nth(1 c)76 section = nth(2 c)77 temp_val = nth(3 c)78 vdd_val = nth(4 c)7980 printf("\n>>> Running Corner: %s | Temp: %d C | VDD: %.2f V...\n" c_name temp_val vdd_val)8182 includeModelFile(model_file ?section section)83 temp(temp_val)84 desVar("VDD" vdd_val)8586 run()87 selectResults('ac)8889 ;; Calculate Key Small-Signal Metrics90 vout = v("/Vout" ?result 'ac)91 vin = v("/Vin_p" ?result 'ac) - v("/Vin_n" ?result 'ac)92 gain_mag = db20(vout / vin)93 gain_phase = phase(vout / vin)9495 dc_gain = value(gain_mag 1.0)96 ugb = cross(gain_mag 0 1 "falling")97 pm = 180.0 + value(gain_phase ugb)9899 fprintf(out_file "%s,%d,%.2f,%.2f,%.2f,%.2f\n" c_name temp_val vdd_val dc_gain (ugb / 1e6) pm)100 printf(" • DC Gain: %.2f dB | UGB: %.2f MHz | PM: %.2f deg\n" dc_gain (ugb / 1e6) pm)101)102103close(out_file)104printf("\nPVT Corner Analysis Complete. Report saved to corner_summary.csv\n")105```106107---108109## Technical Troubleshooting Matrix110111| Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway |112| :--- | :--- | :--- |113| **LVS Fails: `Unmatched Nets / Ports`** | Text labels placed on `drawing` layer instead of `pin` layer, or case-sensitive net name mismatch between schematic and layout. | 1. Ensure pin labels are drawn using the exact layer-purpose pair (`MetalX` with purpose `pin` or `label`).<br>2. Check for port directionality mismatches (Input vs Output).<br>3. Inspect the Assura/PVS `lvs.rep` detailed discrepancy report. |114| **Spectre DC Convergence Failure (`gmin stepping failed`)** | Floating high-impedance nodes, bistable latches without initial bias, or steep non-linear diode models. | 1. Add `.ic` initial conditions to internal floating nodes: `analysis('dc ?force "dev_init")`.<br>2. Set `gmin=1e-12` and `cmin=1e-15` in Spectre simulation options.<br>3. Enable homotopy aids: `homotopy=all` or `homotopy=source`. |115| **`Cannot lock cellView: .cdslck file exists`** | Previous Virtuoso session terminated abnormally, leaving orphaned OpenAccess database lock files. | 1. Find stale lock file: `find <library_dir> -name "*.cdslck"`.<br>2. Verify no active Virtuoso PID owns the lock using `clsAdminTool`.<br>3. Remove orphaned lock: `rm <cell_path>/*.cdslck`. |116| **Quantus QRC Extraction Fails: `Techfile Missing`** | The QRC technology file (`qrcTechFile`) is not mapped in `cds.lib` or the process layer map is out of date. | 1. Verify path to PDK QRC rules in extraction options.<br>2. Check layer map file (`pvs_qrc.layermap`) matches current GDSII stream numbers. |117118---119120## Command Line Syntax & Environment Control121122```bash123# 1. Launch Virtuoso in Background with Dedicated Log124virtuoso -log ~/logs/cds_session.log &125126# 2. Run Headless OCEAN Simulation Script127ocean -replay ~/scripts/run_pvt_ac_corners.ocn -log ~/logs/ocean.log128129# 3. Multi-Threaded Spectre Simulation via CLI (8 CPU Threads)130spectre +mt=8 -raw ./psf input.scs131132# 4. Check and Remove Orphaned OpenAccess Locks133clsAdminTool -kill <hostname> <pid>134```135136### Essential File & Environment Locations137- **Cadence Initialization**: `~/.cdsinit` and `~/.cdsenv`138- **Library Catalog**: `<project_dir>/cds.lib`139- **Display Resource File**: `<project_dir>/display.drf`140141---142143## Agent Operational Directive144> **MANDATORY**: When diagnosing LVS mismatches, verify that pin labels reside on the explicit `pin` or `label` Layer-Purpose Pair (LPP), not `drawing`. Always execute multi-corner PVT and Monte Carlo sweeps before sign-off.