38 using namespace qucs::device;
40 jfet::jfet () : circuit (3) {
93 nr_double_t
i = 8 *
kelvin (T) /
T0 * gm / 3 +
98 matrix cy = matrix (3);
116 nr_double_t T1, T2, Eg;
147 nr_double_t DT = T2 - T1;
148 Vt0 = Vt0 + Vt0tc * DT;
183 pol = !strcmp (type,
"pfet") ? -1 : 1;
231 nr_double_t Ut, IeqG, IeqD, IeqS, UgsCrit, UgdCrit;
232 nr_double_t Igs, Igd, gtiny;
248 gtiny =
Ugs < - 10 * Ut * n ? (Is + Isr) : 0;
255 gtiny = Ugd < - 10 * Ut * n ? (Is + Isr) : 0;
263 nr_double_t Ugst = Ugs - Vt0;
271 nr_double_t b = beta * (1 + l *
Uds);
274 Ids = b * Ugst * Ugst;
276 gds = l * beta * Ugst * Ugst;
282 gds = b * 2 * (Ugst -
Uds) + l * beta * Uds * (2 * Ugst - Uds);
288 nr_double_t Ugdt = Ugd - Vt0;
296 nr_double_t b = beta * (1 - l *
Uds);
299 Ids = - b * Ugdt * Ugdt;
301 gds = beta * l * Ugdt * Ugdt + b * 2 * Ugdt;
307 gds = 2 * b * Ugdt - beta * l * Uds * (2 * Ugdt +
Uds);
313 IeqG = Igs - ggs *
Ugs;
314 IeqD = Igd - ggd *
Ugd;
339 nr_double_t Vgs, Vgd;
356 nr_double_t Cgs, Cgd;
389 #define qgdState 0 // gate-drain charge state
390 #define cgdState 1 // gate-drain current state
391 #define qgsState 2 // gate-source charge state
392 #define cgsState 3 // gate-source current state
void setProperty(const char *, char *)
std::complex< nr_double_t > nr_complex_t
nr_double_t getOperatingPoint(const char *)
matrix ytos(matrix y, qucs::vector z0)
Admittance matrix to scattering parameters.
matrix real(matrix a)
Real part matrix.
#define T0
standard temperature
nr_double_t pnConductance(nr_double_t Upn, nr_double_t Iss, nr_double_t Ute)
circuit * splitResistor(circuit *base, circuit *res, const char *c, const char *n, int internal)
nr_double_t getPropertyDouble(const char *)
nr_complex_t pow(const nr_complex_t z, const nr_double_t d)
Compute power function with real exponent.
void calcOperatingPoints(void)
qucs::matrix calcMatrixY(nr_double_t)
#define K
Absolute 0 in centigrade.
nr_double_t getScaledProperty(const char *)
static const nr_double_t z0
nr_double_t pnCapacitance(nr_double_t Uj, nr_double_t Cj, nr_double_t Vj, nr_double_t Mj, nr_double_t Fc)
void setScaledProperty(const char *, nr_double_t)
virtual void initDC(void)
qucs::matrix calcMatrixCy(nr_double_t)
void transientCapacitance(int, int, int, nr_double_t, nr_double_t, nr_double_t)
nr_double_t Egap(nr_double_t T, nr_double_t Eg0=Eg0Si)
nr_double_t pnCurrent_T(nr_double_t T1, nr_double_t T2, nr_double_t Is, nr_double_t Eg, nr_double_t N=1, nr_double_t Xti=0)
#define kBoverQ
Boltzmann constant over Elementary charge ( )
#define kB
Boltzmann constant ( )
void disableResistor(circuit *base, circuit *res, int internal)
#define M_PI
Archimedes' constant ( )
nr_double_t pnCapacitance_F(nr_double_t T1, nr_double_t T2, nr_double_t M, nr_double_t VR)
void setI(int, nr_complex_t)
void calcNoiseAC(nr_double_t)
nr_double_t pnPotential_T(nr_double_t T1, nr_double_t T2, nr_double_t Vj, nr_double_t Eg0=Eg0Si)
void loadOperatingPoints(void)
nr_double_t pnCharge(nr_double_t Uj, nr_double_t Cj, nr_double_t Vj, nr_double_t Mj, nr_double_t Fc)
void setY(int, int, nr_complex_t)
matrix cytocs(matrix cy, matrix s)
Admittance noise correlation matrix to S-parameter noise correlation matrix.
void allocMatrixMNA(void)
nr_double_t getV(int, nr_double_t)
nr_complex_t exp(const nr_complex_t z)
Compute complex exponential.
void setOperatingPoint(const char *, nr_double_t)
nr_double_t pnCriticalVoltage(nr_double_t Iss, nr_double_t Ute)
void saveOperatingPoints(void)
char * getPropertyString(const char *)
nr_complex_t log(const nr_complex_t z)
Compute principal value of natural logarithm of z.
void calcNoiseSP(nr_double_t)
nr_double_t pnCurrent(nr_double_t Upn, nr_double_t Iss, nr_double_t Ute)
#define PROP_NO_SUBSTRATE
nr_double_t pnVoltage(nr_double_t Ud, nr_double_t Uold, nr_double_t Ut, nr_double_t Ucrit)