c2 and c4 are now aliases for B-E and B-C leakage saturation currents
This commit is contained in:
parent
fb98f7873b
commit
5ff04ee85b
|
|
@ -8,12 +8,6 @@ Author: 1985 Thomas L. Quarles
|
|||
* available to the next level(s) up the calling hierarchy
|
||||
*/
|
||||
|
||||
/*
|
||||
* You may define the preprocessor symbolo
|
||||
* BJT_COMPAT to enable compatibility with
|
||||
* archaic spice2 bjt model
|
||||
*/
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
#include "ngspice/devdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -95,9 +89,7 @@ IFparm BJTmPTable[] = { /* model parameters */
|
|||
IOP("ikf", BJT_MOD_IKF, IF_REAL, "Forward beta roll-off corner current"),
|
||||
IOPR("ik", BJT_MOD_IKF, IF_REAL, "Forward beta roll-off corner current"),
|
||||
IOP("ise", BJT_MOD_ISE, IF_REAL, "B-E leakage saturation current"),
|
||||
#ifdef BJT_COMPAT
|
||||
IOP("c2", BJT_MOD_C2, IF_REAL, "Obsolete parameter name"),
|
||||
#endif
|
||||
IOPR("c2", BJT_MOD_ISE, IF_REAL, "B-E leakage saturation current alias"),
|
||||
IOP("ne", BJT_MOD_NE, IF_REAL, "B-E leakage emission coefficient"),
|
||||
IOP("br", BJT_MOD_BR, IF_REAL, "Ideal reverse beta"),
|
||||
IOP("nr", BJT_MOD_NR, IF_REAL, "Reverse emission coefficient"),
|
||||
|
|
@ -105,9 +97,7 @@ IFparm BJTmPTable[] = { /* model parameters */
|
|||
IOPR("vb", BJT_MOD_VAR, IF_REAL, "Reverse Early voltage"),
|
||||
IOP("ikr", BJT_MOD_IKR, IF_REAL, "reverse beta roll-off corner current"),
|
||||
IOP("isc", BJT_MOD_ISC, IF_REAL, "B-C leakage saturation current"),
|
||||
#ifdef BJT_COMPAT
|
||||
IOP("c4", BJT_MOD_C4, IF_REAL, "Obsolete parameter name"),
|
||||
#endif
|
||||
IOPR("c4", BJT_MOD_ISC, IF_REAL, "B-C leakage saturation current alias"),
|
||||
IOP("nc", BJT_MOD_NC, IF_REAL, "B-C leakage emission coefficient"),
|
||||
IOP("rb", BJT_MOD_RB, IF_REAL, "Zero bias base resistance"),
|
||||
IOP("irb", BJT_MOD_IRB, IF_REAL, "Current for base resistance=(rb+rbm)/2"),
|
||||
|
|
|
|||
|
|
@ -376,14 +376,12 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
double BJTearlyVoltF;
|
||||
double BJTrollOffF;
|
||||
double BJTleakBEcurrent; /* input - don't use */
|
||||
double BJTc2;
|
||||
double BJTleakBEemissionCoeff;
|
||||
double BJTbetaR; /* input - don't use */
|
||||
double BJTemissionCoeffR;
|
||||
double BJTearlyVoltR;
|
||||
double BJTrollOffR;
|
||||
double BJTleakBCcurrent; /* input - don't use */
|
||||
double BJTc4;
|
||||
double BJTleakBCemissionCoeff;
|
||||
double BJTbaseResist;
|
||||
double BJTbaseCurrentHalfResist;
|
||||
|
|
@ -512,14 +510,12 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
unsigned BJTearlyVoltFGiven : 1;
|
||||
unsigned BJTrollOffFGiven : 1;
|
||||
unsigned BJTleakBEcurrentGiven : 1;
|
||||
unsigned BJTc2Given : 1;
|
||||
unsigned BJTleakBEemissionCoeffGiven : 1;
|
||||
unsigned BJTbetaRGiven : 1;
|
||||
unsigned BJTemissionCoeffRGiven : 1;
|
||||
unsigned BJTearlyVoltRGiven : 1;
|
||||
unsigned BJTrollOffRGiven : 1;
|
||||
unsigned BJTleakBCcurrentGiven : 1;
|
||||
unsigned BJTc4Given : 1;
|
||||
unsigned BJTleakBCemissionCoeffGiven : 1;
|
||||
unsigned BJTbaseResistGiven : 1;
|
||||
unsigned BJTbaseCurrentHalfResistGiven : 1;
|
||||
|
|
@ -668,14 +664,12 @@ enum {
|
|||
BJT_MOD_VAF,
|
||||
BJT_MOD_IKF,
|
||||
BJT_MOD_ISE,
|
||||
BJT_MOD_C2,
|
||||
BJT_MOD_NE,
|
||||
BJT_MOD_BR,
|
||||
BJT_MOD_NR,
|
||||
BJT_MOD_VAR,
|
||||
BJT_MOD_IKR,
|
||||
BJT_MOD_ISC,
|
||||
BJT_MOD_C4,
|
||||
BJT_MOD_NC,
|
||||
BJT_MOD_RB,
|
||||
BJT_MOD_IRB,
|
||||
|
|
|
|||
|
|
@ -57,9 +57,6 @@ BJTmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
|
|||
case BJT_MOD_ISE:
|
||||
value->rValue = here->BJTleakBEcurrent;
|
||||
return(OK);
|
||||
case BJT_MOD_C2:
|
||||
value->rValue = here->BJTc2;
|
||||
return(OK);
|
||||
case BJT_MOD_NE:
|
||||
value->rValue = here->BJTleakBEemissionCoeff;
|
||||
return(OK);
|
||||
|
|
@ -78,9 +75,6 @@ BJTmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
|
|||
case BJT_MOD_ISC:
|
||||
value->rValue = here->BJTleakBCcurrent;
|
||||
return(OK);
|
||||
case BJT_MOD_C4:
|
||||
value->rValue = here->BJTc4;
|
||||
return(OK);
|
||||
case BJT_MOD_NC:
|
||||
value->rValue = here->BJTleakBCemissionCoeff;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -66,10 +66,6 @@ BJTmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
mods->BJTleakBEcurrent = value->rValue;
|
||||
mods->BJTleakBEcurrentGiven = TRUE;
|
||||
break;
|
||||
case BJT_MOD_C2:
|
||||
mods->BJTc2 = value->rValue;
|
||||
mods->BJTc2Given=TRUE;
|
||||
break;
|
||||
case BJT_MOD_NE:
|
||||
mods->BJTleakBEemissionCoeff = value->rValue;
|
||||
mods->BJTleakBEemissionCoeffGiven = TRUE;
|
||||
|
|
@ -94,10 +90,6 @@ BJTmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
mods->BJTleakBCcurrent = value->rValue;
|
||||
mods->BJTleakBCcurrentGiven = TRUE;
|
||||
break;
|
||||
case BJT_MOD_C4:
|
||||
mods->BJTc4 = value->rValue;
|
||||
mods->BJTc4Given=TRUE;
|
||||
break;
|
||||
case BJT_MOD_NC:
|
||||
mods->BJTleakBCemissionCoeff = value->rValue;
|
||||
mods->BJTleakBCemissionCoeffGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,20 @@ BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
if(!model->BJTemissionCoeffFGiven) {
|
||||
model->BJTemissionCoeffF = 1;
|
||||
}
|
||||
if(!model->BJTleakBEcurrentGiven) {
|
||||
model->BJTleakBEcurrent = 0;
|
||||
} else {
|
||||
if(model->BJTleakBEcurrent > 1e-04) {
|
||||
model->BJTleakBEcurrent = model->BJTsatCur * model->BJTleakBEcurrent;
|
||||
}
|
||||
}
|
||||
if(!model->BJTleakBCcurrentGiven) {
|
||||
model->BJTleakBCcurrent = 0;
|
||||
} else {
|
||||
if(model->BJTleakBCcurrent > 1e-04) {
|
||||
model->BJTleakBCcurrent = model->BJTsatCur * model->BJTleakBCcurrent;
|
||||
}
|
||||
}
|
||||
if(!model->BJTleakBEemissionCoeffGiven) {
|
||||
model->BJTleakBEemissionCoeff = 1.5;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,20 +44,6 @@ BJTtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
vtnom = CONSTKoverQ * model->BJTtnom;
|
||||
fact1 = model->BJTtnom/REFTEMP;
|
||||
|
||||
if(!model->BJTleakBEcurrentGiven) {
|
||||
if(model->BJTc2Given) {
|
||||
model->BJTleakBEcurrent = model->BJTc2 * model->BJTsatCur;
|
||||
} else {
|
||||
model->BJTleakBEcurrent = 0;
|
||||
}
|
||||
}
|
||||
if(!model->BJTleakBCcurrentGiven) {
|
||||
if(model->BJTc4Given) {
|
||||
model->BJTleakBCcurrent = model->BJTc4 * model->BJTsatCur;
|
||||
} else {
|
||||
model->BJTleakBCcurrent = 0;
|
||||
}
|
||||
}
|
||||
if(!model->BJTminBaseResistGiven) {
|
||||
model->BJTminBaseResist = model->BJTbaseResist;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue