cicsim.yaml

cicsim/cicsim.yaml

The shared cicsim configuration: simulator, one variable, and 41 corners. An IP symlinks it into sim/:

cd sim && ln -s ../tech/cicsim/cicsim.yaml

simulator

ngspice.

variable

CPDK_NGPICE: ../../../.

Note that cicsim 0.2.7 does not read this key. The only top-level keys it looks at are ngspice, spectre, cadence, corner and options, so whatever consumes variable is either older, newer, or somewhere else entirely. Do not assume changing it does anything.

corner

Each key is a corner name, each value is the spice text cicsim writes into the netlist when that corner is selected. Pick one from each group.

Group Names Defined in
General Gt nothing, it is a placeholder
Temperature Tt Tl Tm Th ngspice/temperature.spi
Supply Vt Vl Vh ngspice/supply.spi
Process Ktt Kss Kff Ksf Kfs Khh Khl Klh Kll the PDK model files, spelled out
Process, Monte Carlo the same with an mm suffix, plus Kmc the PDK, with the mc switches on
Process, short form Att Ass Aff Asf Afs Ahh Ahl Alh All and Amc... one .lib into the PDK’s sky130.lib.spice

What the two letters mean

They are one sky130 corner name, not a device choice and an RC choice picked independently. Two families:

Corner FET models Resistance Capacitance
Ktt tt typical typical
Kss ss high high
Kff ff low low
Ksf sf typical typical
Kfs fs typical typical
Khh tt high high
Khl tt high low
Klh tt low high
Kll tt low low

In the first family the letters are the device corner, nfet then pfet, and the r+c set follows it: Kss pulls in res_high__cap_high, Kff pulls in res_low__cap_low, and the skewed corners stay on typical RC. In the second family the devices are typical and the letters are the parasitic corner instead, resistance then capacitance. Khh is Kss’s parasitics without Kss’s devices.

The mm variants set mc_mm_switch=1 on the same includes, for mismatch. Kmc is not a corner in that sense at all: it includes only parameters/critical.spice and parameters/montecarlo.spice with mc_pr_switch=1.

The A... names are the identical corners as a single .lib "$PDK_ROOT/.../sky130.lib.spice" <xy> line, and Amc... maps to the PDK’s <xy>_mm sections. K... exists because py/genyaml expanded those sections into explicit includes, which is what makes each corner’s real content visible here.

The temperature and supply corners are one-line .lib references, so the actual values live in one place and are edited there.

Keeping it in sync

The process corners are generated, not written: py/genyaml walks the PDK’s sky130.lib.spice and prints these blocks, and ngspice/corners.py expands this file into ngspice/corners.spi for the case where a netlist is run without cicsim. Regenerate both after a PDK update.