fix Vcrit calculation for coll-subs junction and correct tlev=3 temperature model
This commit is contained in:
parent
b00fa921ac
commit
52f4244345
|
|
@ -221,6 +221,8 @@ IFparm BJTmPTable[] = { /* model parameters */
|
|||
IOP("tise2", BJT_MOD_TISE2, IF_REAL, "ISE 2. temperature coefficient"),
|
||||
IOP("tisc1", BJT_MOD_TISC1, IF_REAL, "ISC 1. temperature coefficient"),
|
||||
IOP("tisc2", BJT_MOD_TISC2, IF_REAL, "ISC 2. temperature coefficient"),
|
||||
IOP("tiss1", BJT_MOD_TISS1, IF_REAL, "ISS 1. temperature coefficient"),
|
||||
IOP("tiss2", BJT_MOD_TISS2, IF_REAL, "ISS 2. temperature coefficient"),
|
||||
IOP("quasimod", BJT_MOD_QUASIMOD, IF_INTEGER, "Temperature equation selector"),
|
||||
IOP("vg", BJT_MOD_EGQS, IF_REAL, "Energy gap for QS temp. dependency"),
|
||||
IOP("cn", BJT_MOD_XRCI, IF_REAL, "Temperature exponent of RCI"),
|
||||
|
|
|
|||
|
|
@ -489,6 +489,8 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
double BJTtise2;
|
||||
double BJTtisc1;
|
||||
double BJTtisc2;
|
||||
double BJTtiss1;
|
||||
double BJTtiss2;
|
||||
int BJTquasimod;
|
||||
double BJTenergyGapQS;
|
||||
double BJTtempExpRCI;
|
||||
|
|
@ -606,6 +608,8 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
unsigned BJTtise2Given : 1;
|
||||
unsigned BJTtisc1Given : 1;
|
||||
unsigned BJTtisc2Given : 1;
|
||||
unsigned BJTtiss1Given : 1;
|
||||
unsigned BJTtiss2Given : 1;
|
||||
unsigned BJTquasimodGiven : 1;
|
||||
unsigned BJTenergyGapQSGiven : 1;
|
||||
unsigned BJTtempExpRCIGiven : 1;
|
||||
|
|
@ -757,6 +761,8 @@ enum {
|
|||
BJT_MOD_TISE2,
|
||||
BJT_MOD_TISC1,
|
||||
BJT_MOD_TISC2,
|
||||
BJT_MOD_TISS1,
|
||||
BJT_MOD_TISS2,
|
||||
BJT_MOD_QUASIMOD,
|
||||
BJT_MOD_EGQS,
|
||||
BJT_MOD_XRCI,
|
||||
|
|
|
|||
|
|
@ -390,6 +390,12 @@ BJTmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
|
|||
case BJT_MOD_TISC2:
|
||||
value->rValue = here->BJTtisc2;
|
||||
return(OK);
|
||||
case BJT_MOD_TISS1:
|
||||
value->rValue = here->BJTtiss1;
|
||||
return(OK);
|
||||
case BJT_MOD_TISS2:
|
||||
value->rValue = here->BJTtiss2;
|
||||
return(OK);
|
||||
case BJT_MOD_QUASIMOD:
|
||||
value->iValue = here->BJTquasimod;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -470,6 +470,14 @@ BJTmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
mods->BJTtisc2 = value->rValue;
|
||||
mods->BJTtisc2Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TISS1:
|
||||
mods->BJTtiss1 = value->rValue;
|
||||
mods->BJTtiss1Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TISS2:
|
||||
mods->BJTtiss2 = value->rValue;
|
||||
mods->BJTtiss2Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_QUASIMOD:
|
||||
mods->BJTquasimod = value->iValue;
|
||||
mods->BJTquasimodGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -335,6 +335,12 @@ BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
if(!model->BJTtisc2Given) {
|
||||
model->BJTtisc2 = 0.0;
|
||||
}
|
||||
if(!model->BJTtiss1Given) {
|
||||
model->BJTtiss1 = 0.0;
|
||||
}
|
||||
if(!model->BJTtiss2Given) {
|
||||
model->BJTtiss2 = 0.0;
|
||||
}
|
||||
if(!model->BJTquasimodGiven) {
|
||||
model->BJTquasimod = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ BJTtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here->BJTtSubSatCur = model->BJTsubSatCur * factor;
|
||||
} else if (model->BJTtlev == 3) {
|
||||
here->BJTtSatCur = pow(model->BJTsatCur,(1+model->BJTtis1*dt+model->BJTtis2*dt*dt));
|
||||
here->BJTtSubSatCur = pow(model->BJTsubSatCur,(1+model->BJTtiss1*dt+model->BJTtiss2*dt*dt));
|
||||
}
|
||||
|
||||
if (model->BJTintCollResistGiven) {
|
||||
|
|
@ -273,8 +274,12 @@ BJTtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
(1 - here->BJTtjunctionExpBC);
|
||||
here->BJTtVcrit = vt *
|
||||
log(vt / (CONSTroot2*here->BJTtSatCur*here->BJTarea));
|
||||
here->BJTtSubVcrit = vt *
|
||||
log(vt / (CONSTroot2*here->BJTtSubSatCur*here->BJTarea));
|
||||
if(model->BJTsubSatCurGiven) {
|
||||
here->BJTtSubVcrit = vt *
|
||||
log(vt / (CONSTroot2*here->BJTtSubSatCur*here->BJTarea));
|
||||
} else {
|
||||
here->BJTtSubVcrit = here->BJTtVcrit;
|
||||
}
|
||||
here->BJTtf2 = exp((1 + here->BJTtjunctionExpBE) * xfc);
|
||||
here->BJTtf3 = 1 - model->BJTdepletionCapCoeff *
|
||||
(1 + here->BJTtjunctionExpBE);
|
||||
|
|
|
|||
Loading…
Reference in New Issue