Device Characterization: I–V, C–V & Parameter Extraction

Measuring devices and turning data into models. Learn instruments (SMUs, parameter analysers, probe stations, LCR meters, curve tracers, oscilloscopes, thermal chambers), I–V (forward, reverse, breakdown, pulsed I–V to avoid self-heating), C–V (MOS and junction), Kelvin connections and guarding, temperature sweeps, and extraction of diode I_S/n/R_s, BJT β and V_A, MOSFET V_T (max-g_m extrapolation, constant current), mobility, R_DS(on), subthreshold swing, doping from 1/C², oxide thickness, contact resistance (TLM) — with Python extracting parameters from synthetic noisy diode data, a MOSFET transfer curve and C–V data, and comparing with the true values.

Datasheets summarise measurements; models need parameters extracted from measurements; process engineers monitor fabs by measuring test structures. Device characterization links physics, manufacturing and circuit design.

Good characterization means accurate instruments, correct connections (Kelvin sensing, guarding), controlled temperature, and extraction methods whose assumptions are understood.

An analogy

Parameter extraction is like reverse-engineering a recipe from tasting the dish: you measure (taste) under controlled conditions and adjust the recipe's ingredients (model parameters) until the model tastes the same.

Instruments

Choosing equipment:

Measurement pitfalls

Self-heating during DC sweeps (use pulsed I–V), cable/probe resistance (Kelvin), leakage through fixtures and insulators (guarding), oscillation of high-gain devices on probe needles (ferrite beads, short leads), compliance settings that destroy devices at breakdown, light sensitivity (dark boxes), and settling time for pA currents. Always measure a reference device and repeat measurements for repeatability.

Threshold-voltage definitions

Linear extrapolation at max-g_m, constant-current (I_D = 100 nA × W/L), second-derivative, and saturation-region √I_D extrapolation all give different V_T values for the same device. Industry uses constant-current for speed; model extraction uses methods consistent with the model's equations. Report the method and conditions (V_DS, temperature).

From data to model

Extraction proceeds from simple, decoupled regions to complex ones: DC diode parameters at low current, then series resistance; MOSFET long-channel V_T and mobility, then short-channel effects; capacitances from C–V and S-parameters; temperature coefficients from sweeps. Global optimisation refines the full parameter set, followed by validation on data not used in fitting. Temperature, statistical corners and ageing extend the model.

Formulas

Worked example: Ideality from two points

Given: 1 µA at 0.50 V, 10 µA at 0.563 V

Find: n.

Answer: 1.06

Worked example: Mobility

Given: g_m 0.2 mS, L/W 1/10, C_ox 1.7 µF/cm², V_DS 50 mV

Find: µ.

Answer: ≈ 235 cm²/V·s

Worked example: TLM

Given: R(L=0) intercept 10 Ω

Find: R_c.

Answer: 5 Ω per contact

SMU measurement setup

  SMU1 Force ──────┬── Gate            SMU2 Force ─────┬── Drain
  SMU1 Sense ──────┘ (Kelvin at probe)  SMU2 Sense ─────┘
                       MOSFET on probe station (chuck = body, temperature-controlled)
  Source ─── GND (Kelvin)      Guarded triax cables for pA leakage; pulsed mode for power devices
  Sweeps: ID–VGS (VDS 50 mV & 1 V), ID–VDS family, IG leakage, C–V via LCR meter

Four-wire (Kelvin) connections remove cable and probe resistance at high current; guarding and triaxial cables suppress leakage for pA measurements; pulsed measurements prevent self-heating from distorting high-power I–V curves.

Extracting parameters from (synthetic) measurement data

import math, random
# Parameter extraction from (synthetic, noise-added) measurement data: diode Is/n/Rs, MOSFET Vt, C-V doping
random.seed(7)
VT = 0.02585
Is_true, n_true, Rs_true = 2e-14, 1.08, 0.5
data = []
for i in range(1, 30):
    I = 10 ** (-9 + i * 0.25)                       # 1 nA .. ~30 mA
    V = n_true * VT * math.log(I / Is_true + 1) + I * Rs_true
    data.append((V * (1 + random.gauss(0, 0.0005)), I))
low = [(v, math.log(i)) for v, i in data if i < 1e-4]          # low-current region: Rs negligible
mx = sum(v for v, _ in low) / len(low); my = sum(y for _, y in low) / len(low)
slope = sum((v - mx) * (y - my) for v, y in low) / sum((v - mx) ** 2 for v, _ in low)
n_fit = 1 / (slope * VT); Is_fit = math.exp(my - slope * mx)
v_hi, i_hi = data[-1]
Rs_fit = (v_hi - n_fit * VT * math.log(i_hi / Is_fit)) / i_hi
print(f"diode fit: n = {n_fit:.3f} (true {n_true}), Is = {Is_fit:.2e} (true {Is_true:.0e}), Rs = {Rs_fit:.2f} ohm (true {Rs_true})")
# MOSFET linear-region Vt by maximum-gm extrapolation (VDS = 50 mV)
k, Vt_true, theta, VDS = 2e-3, 0.45, 0.2, 0.05
pts = [(vg / 100, k * max(vg / 100 - Vt_true, 0) * VDS / (1 + theta * max(vg / 100 - Vt_true, 0))) for vg in range(0, 151)]
gms = [((pts[i + 1][1] - pts[i - 1][1]) / 0.02, i) for i in range(1, len(pts) - 1)]
gm_max, i_m = max(gms)
Vg_m, Id_m = pts[i_m]
Vt_ext = Vg_m - Id_m / gm_max - VDS / 2
print(f"MOSFET max-gm extrapolation: Vt = {Vt_ext:.3f} V (true {Vt_true})")
# C-V doping from the slope of 1/C^2 (one-sided junction, area 1e-3 cm^2)
q, eps, A, Nd = 1.602e-19, 1.036e-12, 1e-3, 5e15
C = lambda V: A * math.sqrt(q * eps * Nd / (2 * (0.75 + V)))
slope_c = (1 / C(5) ** 2 - 1 / C(1) ** 2) / 4
print(f"C-V: d(1/C^2)/dV = {slope_c:.3e} -> N = 2/(q*eps*A^2*slope) = {2/(q*eps*A**2*slope_c):.2e} cm^-3 (true {Nd:.0e})")
# diode fit: n = 1.079 (true 1.08), Is = 1.97e-14 (true 2e-14), Rs = 0.53 ohm (true 0.5)
# MOSFET max-gm extrapolation: Vt = 0.425 V (true 0.45)
# C-V: d(1/C^2)/dV = 2.410e+21 -> N = 2/(q*eps*A^2*slope) = 5.00e+15 cm^-3 (true 5e+15)

A least-squares fit of ln I vs V in the low-current region recovers n = 1.079 and I_S = 1.97 × 10⁻¹⁴ A from noisy synthetic data; the high-current deviation gives R_s ≈ 0.53 Ω. Max-g_m extrapolation gives V_T = 0.425 V against a true 0.45 V — mobility degradation biases linear-extrapolation methods, so always state the method used. The 1/C² slope recovers the 5 × 10¹⁵ cm⁻³ doping exactly for an ideal one-sided junction.

Common mistakes

Applications

Key takeaways

Going further