gm/Id LUT

gm/Id lookup table for the procedural PTM sizer.

Loads a committed *_gmid.npz (produced by tools/extract_tech.py --gm-id) and provides bilinear interpolation of the canonical gm/Id quantities over a (gm/Id, L) grid, plus the inverse used at metric-evaluation time.

The table is the source of truth for device physics in the gm/Id path: it replaces the square-law gm/gds/vds_sat and the 25·Id weak-inversion ceiling heuristic with measured BSIM4 behaviour.

Axes (both per polarity, fields shaped (n_L, n_gmid)):

gm_id_axis uniform gm/Id grid in 1/V (weak → strong inversion) l_axis channel lengths in µm

Fields: id_w (A/µm), gm_gds (V/V), ft (Hz), vdsat (V), vgs (V, magnitude).

class circuitgenome.sizer.shared.gmid_lut.GmIdLut(path)[source]

Bases: object

Interpolating gm/Id table for both NMOS and PMOS.

Parameters:

path (Path | str)

id_per_w(dtype, gm_id, l_um)[source]

Drain current per µm of width (A/µm) at the operating point.

Parameters:
Return type:

float

gm_gds(dtype, gm_id, l_um)[source]

Intrinsic-gain ratio gm/gds (V/V).

Parameters:
Return type:

float

ft(dtype, gm_id, l_um)[source]

Transition frequency gm/(2π·Cgg) in Hz.

Parameters:
Return type:

float

vdsat(dtype, gm_id, l_um)[source]

Saturation overdrive VDS,sat in V.

Parameters:
Return type:

float

vgs(dtype, gm_id, l_um)[source]

Gate-source voltage magnitude in V.

Parameters:
Return type:

float

max_gm_id(dtype, l_um)[source]

Largest gm/Id the table represents (weak-inversion ceiling), 1/V.

Parameters:
Return type:

float

gm_id_from_idw(dtype, id_w, l_um)[source]

Recover gm/Id from a current density id_w (A/µm) at length l.

Inverse of id_per_w(): id_w decreases monotonically with gm/Id, so we invert the per-length curve. Used to read back the operating point from a solved (W, L, Id) for accurate metric evaluation.

Parameters:
Return type:

float