sycan.components.active.bjt

SPICE Gummel-Poon BJT — DC and hybrid-pi AC model (SPICE Q).

The DC equations follow Gray & Meyer §1.4 and the SPICE G-P manual. All standard DC effects are included:

  • ideal forward/reverse transport currents (IS, NF, NR),

  • ideal forward/reverse current gains (BF, BR),

  • non-ideal base-emitter / base-collector leakage diodes (ISE, NE and ISC, NC),

  • base-width modulation via forward/reverse Early voltages (VAF, VAR),

  • high-level-injection roll-off via forward/reverse knee currents (IKF, IKR) through the base-charge factor.

The AC model is a simplified hybrid-pi with:

  • g_m  = I_C_op / (NF·V_T) — transconductance,

  • r_pi = BF / g_m — base-emitter resistance,

  • r_o  = VAF / I_C_op — output resistance (omitted if VAF = oo),

  • C_pi, C_mu — junction/diffusion capacitances.

Default parameters model an ideal Ebers-Moll transistor: VAF = VAR = IKF = IKR = oo (no Early, no knee), ISE = ISC = 0 (no leakage), NF = NR = 1, NE = 1.5, NC = 2, V_T = 25.85 mV. Only IS, BF, BR must be supplied.

Classes

BJT(name, collector, base, emitter, ...[, ...])

Gummel-Poon BJT with hybrid-pi AC model.

class sycan.components.active.bjt.BJT(name, collector, base, emitter, polarity, IS, BF, BR, NF=<factory>, NR=<factory>, VAF=<factory>, VAR=<factory>, IKF=<factory>, IKR=<factory>, ISE=<factory>, NE=<factory>, ISC=<factory>, NC=<factory>, V_T=<factory>, I_C_op=None, I_B_op=None, C_pi=<factory>, C_mu=<factory>, KF=<factory>, AF=<factory>, *, include_noise=None)[source]

Bases: Component

Gummel-Poon BJT with hybrid-pi AC model.

With include_noise="shot" (or "all") two shot-noise current sources are attached: one between collector and emitter with PSD 2·q·I_C_op (collector current shot), one between base and emitter with PSD 2·q·I_B_op (base current shot). Operating-point currents default to per-instance symbols I_C_op_<name> and I_B_op_<name>; pass values to override.

C_pi (base-emitter) and C_mu (base-collector) capacitances default to 0; set them for frequency-dependent AC behaviour.

Parameters:
  • name (str)

  • collector (str)

  • base (str)

  • emitter (str)

  • polarity (str)

  • IS (Expr)

  • BF (Expr)

  • BR (Expr)

  • NF (Expr)

  • NR (Expr)

  • VAF (Expr)

  • VAR (Expr)

  • IKF (Expr)

  • IKR (Expr)

  • ISE (Expr)

  • NE (Expr)

  • ISC (Expr)

  • NC (Expr)

  • V_T (Expr)

  • I_C_op (Expr | None)

  • I_B_op (Expr | None)

  • C_pi (Expr)

  • C_mu (Expr)

  • KF (Expr)

  • AF (Expr)

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

name: str
collector: str
base: str
emitter: str
polarity: str
IS: Expr
BF: Expr
BR: Expr
NF: Expr
NR: Expr
VAF: Expr
VAR: Expr
IKF: Expr
IKR: Expr
ISE: Expr
NE: Expr
ISC: Expr
NC: Expr
V_T: Expr
I_C_op: Expr | None = None
I_B_op: Expr | None = None
C_pi: Expr
C_mu: Expr
KF: Expr
AF: Expr
include_noise: None | str | list[str] | tuple[str, ...] | frozenset[str] = None
ports: ClassVar[tuple[str, ...]] = ('collector', 'base', 'emitter')
has_nonlinear: ClassVar[bool] = True
SUPPORTED_NOISE: ClassVar[frozenset[str]] = frozenset({'flicker', 'shot'})
noise_sources()[source]

Return the small-signal noise sources this component emits.

Default is no-op; concrete components override to emit thermal / shot / flicker contributions weighted by the include_noise selection.

Return type:

list[NoiseSource]

stamp(ctx)[source]
Parameters:

ctx (StampContext)

Return type:

None

stamp_nonlinear(ctx)[source]

Add transcendental terms to ctx.residuals at solve time.

Only invoked for DC analysis when the circuit contains at least one component with has_nonlinear = True. Default is no-op.

Parameters:

ctx (StampContext)

Return type:

None