Browse Source

c2 and c4 are now aliases for B-E and B-C leakage saturation currents

pre-master-46
dwarning 5 years ago
committed by Holger Vogt
parent
commit
5ff04ee85b
  1. 14
      src/spicelib/devices/bjt/bjt.c
  2. 6
      src/spicelib/devices/bjt/bjtdefs.h
  3. 6
      src/spicelib/devices/bjt/bjtmask.c
  4. 8
      src/spicelib/devices/bjt/bjtmpar.c
  5. 14
      src/spicelib/devices/bjt/bjtsetup.c
  6. 14
      src/spicelib/devices/bjt/bjttemp.c

14
src/spicelib/devices/bjt/bjt.c

@ -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"),

6
src/spicelib/devices/bjt/bjtdefs.h

@ -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,

6
src/spicelib/devices/bjt/bjtmask.c

@ -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);

8
src/spicelib/devices/bjt/bjtmpar.c

@ -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;

14
src/spicelib/devices/bjt/bjtsetup.c

@ -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;
}

14
src/spicelib/devices/bjt/bjttemp.c

@ -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…
Cancel
Save