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