sycan.components.active.mosfet_subthreshold

Sub-threshold MOSFET, polarity-aware (NMOS / PMOS).

Drain current in the weak-inversion regime, with pol = +1 (NMOS) or -1 (PMOS):

V_GS_eff = pol * (V(gate)  - V(source))
V_DS_eff = pol * (V(drain) - V(source))
I_D_mag  = mu_n * Cox * (W/L) * V_T**2
           * exp((V_GS_eff - m * V_TH) / (m * V_T))
           * (1 - exp(-V_DS_eff / V_T))
I_D_SPICE = pol * I_D_mag     # current INTO drain (SPICE convention)

m = 1 + C_d/C_ox is the sub-threshold slope factor and V_T is the thermal voltage; V_TH is stored as a positive magnitude for both polarities. Only DC analysis is modelled.

Concrete classes NMOS_subthreshold and PMOS_subthreshold fix polarity via a class variable.

Classes

NMOS_subthreshold(name, drain, gate, source, ...)

Weak-inversion NMOS.

PMOS_subthreshold(name, drain, gate, source, ...)

Weak-inversion PMOS.

class sycan.components.active.mosfet_subthreshold.NMOS_subthreshold(name, drain, gate, source, mu_n, Cox, W, L, V_TH, m=<factory>, V_T=<factory>, I_op=None, KF=<factory>, AF=<factory>, EF=<factory>, *, include_noise=None)[source]

Bases: _MOSFET_subthreshold

Weak-inversion NMOS.

Parameters:
  • name (str)

  • drain (str)

  • gate (str)

  • source (str)

  • mu_n (Expr)

  • Cox (Expr)

  • W (Expr)

  • L (Expr)

  • V_TH (Expr)

  • m (Expr)

  • V_T (Expr)

  • I_op (Expr | None)

  • KF (Expr)

  • AF (Expr)

  • EF (Expr)

  • include_noise (None | str | list[str] | tuple[str, ...] | frozenset[str])

polarity: ClassVar[str] = 'N'
class sycan.components.active.mosfet_subthreshold.PMOS_subthreshold(name, drain, gate, source, mu_n, Cox, W, L, V_TH, m=<factory>, V_T=<factory>, I_op=None, KF=<factory>, AF=<factory>, EF=<factory>, *, include_noise=None)[source]

Bases: _MOSFET_subthreshold

Weak-inversion PMOS.

Parameters:
  • name (str)

  • drain (str)

  • gate (str)

  • source (str)

  • mu_n (Expr)

  • Cox (Expr)

  • W (Expr)

  • L (Expr)

  • V_TH (Expr)

  • m (Expr)

  • V_T (Expr)

  • I_op (Expr | None)

  • KF (Expr)

  • AF (Expr)

  • EF (Expr)

  • include_noise (None | str | list[str] | tuple[str, ...] | frozenset[str])

polarity: ClassVar[str] = 'P'