PDK Support Matrix¶
CircuitOpt uses per-device model bindings. A circuit may bind different devices to different registered model types, although most practical circuits use one process consistently.
Capability Matrix¶
| Process | Model keys | Device backend | DC / AC / Noise | Transient | PSS / PAC / PNoise | External prerequisites |
|---|---|---|---|---|---|---|
| AT4000TG | at4000tg.pmos |
Built-in calibrated PMOS model | Yes | Native | Yes | None |
| SKY130 | sky130.nmos, sky130.pmos |
Bundled resolved cards + native Berkeley BSIM4.5 | Yes | Compiled Rust core + native C BSIM4 BE/Gear2 | Native terminal backend; validate each periodic topology | None for a released wheel; external tools only for new-card extraction |
| FreePDK45 | freepdk45.nmos, freepdk45.pmos |
Flat-card loader + native Berkeley BSIM4.5 | Yes | Compiled Rust core + native C BSIM4 BE/Gear2 | Native terminal backend; validate each periodic topology | FreePDK45 cards; none else for a released wheel |
| FreePDK45 oracle | freepdk45_ngspice.nmos, freepdk45_ngspice.pmos |
Cached ngspice-C grid / complete-deck oracle | Oracle only | Oracle only | Not the default periodic backend | FreePDK45 cards and ngspice |
| TSMC28HPC+ core | tsmc28hpcp.nmos, tsmc28hpcp.pmos |
Internal HSPICE frontend + native Berkeley BSIM4.5 | Yes | Compiled Rust core + native C BSIM4 BE/Gear2 | Yes | Licensed supported model file; none else for a released wheel |
| TSMC28HPC+ oracle | tsmc28hpcp_ngspice.nmos, tsmc28hpcp_ngspice.pmos |
Explicit ngspice comparison path | Oracle only | Oracle only | Not the default periodic backend | Licensed model file and ngspice |
Building circuitopt_core from a source checkout (instead of installing a
released wheel) additionally needs a Rust toolchain (rustup) and a C compiler
for the vendored BSIM4.5 sources (maturin develop --release -m
rust/crates/co-py/Cargo.toml); see Getting Started.
Prebuilt circuitopt_core wheels are published on the GitHub Release for Linux,
macOS, and — starting with this release, CI-built as the first Windows build —
Windows (win_amd64, abi3-py310); installing one needs neither a Rust toolchain
nor a C compiler.
“Supported” means the backend is connected to the analysis path. It does not mean foundry sign-off equivalence. Each topology still needs regression against an appropriate reference.
Process Details¶
AT4000TG¶
- Default process when a transistor is not listed in the JSON
modelsblock. - PMOS-only.
- Calibrated against archived Cadence Spectre references for the included AFE and chopper cases.
- Corners:
typical,slow,fast. - The generic
mccommand currently targets this continuous mismatch model.
SKY130¶
- Loads bundled, geometry-resolved BSIM4.5 cards and evaluates them directly with the same in-process native C backend used by FreePDK45 and TSMC28HPC+.
- Normal DC, AC, noise, transient, PSS, PAC, and PNoise runs do not launch an external simulator.
- This is a useful local optimization model, not a bit-exact replacement for the official SKY130 simulator model.
- Corners accepted by the circuit flow:
tt,ss,ff,sf,fs. - The repository includes the resolved cards used by its examples. For a new
geometry/corner that has no card, explicitly run
circuitopt.sky130_model.extract_sky130_card()with a local SKY130/ngspice installation and pointSKY130_CARD_DIRat the generated card directory.
FreePDK45¶
- Parses the flat level-54 VTG cards directly and evaluates them with the in-process Berkeley BSIM4.5 kernel.
- The cards declare BSIM4
version=4.0. In the bundled Berkeley source the version field is metadata rather than an equation switch; single-deviceId/gm/gds, noise, and 5T OTA AC are regression-checked against ngspice. - The native backend exposes full four-terminal current, conductance, charge, capacitance, and correlated noise for DC, AC, noise, transient, and periodic analyses.
- The fixed-grid transient hot path runs Newton iteration and matrix stamping
inside the compiled Rust core (
co-corecallingco-bsim4in-process); the Python-facingcompact_models/bsim4/native.pymodule binds the same compiled ABI throughctypes(avoid *function-pointer interface) for single-device op-point/AC/noise calls outside the transient loop. As of v2.0.0rustis the sole engine; there is no runtime compiler step and no Python numeric fallback. freepdk45_ngspice.*and the full-circuit ngspice helpers remain available as independent regression oracles. Importcircuitopt.freepdk45_modelto register the oracle-only model keys. They are optional for normal simulation.- Corners:
nom,tt,ss,ff,sf,fs. ttaliasesnom;sfselects NMOS slow plus PMOS fast, andfsthe reverse.- Generic silicon mismatch semantics are not yet implemented through
circuit-opt mc.
TSMC28HPC+¶
- Supports the 0.9 V
nch_macandpch_maccore wrappers from the documented 1d8 HSPICE model file. - The internal parser resolves
.libsections, parameters, subcircuits, macros, and geometry bins in memory. - The native backend exposes four-terminal current, conductance, charge, capacitance, and correlated noise.
- Transient uses the same compiled Rust-to-C BSIM4 bridge as FreePDK45.
- Corners:
tt,ss,ff,sf,fs;nomaliasestt. - Temperature is passed in kelvin at the device binding API.
- The current adapter does not claim support for IO devices, RF devices, SRAM, eFuse, reliability models, statistical sections, layout extraction, or sign-off checks from the full iPDK.
- Import
circuitopt.tsmc28_modelonly when thetsmc28hpcp_ngspice.*oracle model keys are required. - See the TSMC28HPC+ Native Adapter.
JSON Binding¶
{
"devices": [
{
"name": "MN",
"drain": "OUT",
"gate": "IN",
"source": "GND",
"W": 1.0,
"L": 0.03
},
{
"name": "MP",
"drain": "OUT",
"gate": "IN",
"source": "VDD",
"W": 2.0,
"L": 0.03
}
],
"models": {
"MN": {"pdk": "tsmc28hpcp", "model": "nmos",
"section": "inherit", "bin": "auto"},
"MP": {"pdk": "tsmc28hpcp", "model": "pmos",
"section": "inherit", "bin": "auto", "vb": 0.9}
}
}
Geometry is expressed in micrometres. Model-specific constructor options are
documented under models in the Circuit JSON Format.
Path Resolution¶
| Input | Resolution |
|---|---|
| General PDK root | PDK_ROOT, then active/project virtual-environment pdk/ |
| Additional SKY130 resolved cards | SKY130_CARD_DIR, then bundled package cards |
| TSMC model directory | TSMC28_MODEL_DIR, TSMC28_PDK_ROOT, project-local ignored entry, then PDK_ROOT/tsmc28hpcp |
| ngspice | NGSPICE_BIN, virtual-environment locations, then PATH |
What CircuitOpt Does Not Replace¶
CircuitOpt is a local simulation and optimization framework. It does not replace official PDK installation, schematic/layout libraries, DRC, LVS, parasitic extraction, EM/IR, aging, reliability, statistical sign-off, or foundry-approved tapeout flows.