sub-coll junction calculation only if ISS given

This commit is contained in:
dwarning 2021-05-05 22:53:39 +02:00 committed by Holger Vogt
parent 3a908c76ef
commit 6bafdf70d5
2 changed files with 32 additions and 25 deletions

View File

@ -434,8 +434,13 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
vbc = DEVpnjlim(vbc,*(ckt->CKTstate0 + here->BJTvbc),vt, vbc = DEVpnjlim(vbc,*(ckt->CKTstate0 + here->BJTvbc),vt,
here->BJTtVcrit,&ichk1); here->BJTtVcrit,&ichk1);
if (ichk1 == 1) icheck=1; if (ichk1 == 1) icheck=1;
if (model->BJTsubSatCurGiven) {
vsub = DEVpnjlim(vsub,*(ckt->CKTstate0 + here->BJTvsub),vt, vsub = DEVpnjlim(vsub,*(ckt->CKTstate0 + here->BJTvsub),vt,
here->BJTtSubVcrit,&ichk1); here->BJTtSubVcrit,&ichk1);
} else {
vsub = DEVpnjlim(vsub,*(ckt->CKTstate0 + here->BJTvsub),vt,
50,&ichk1);
}
if (ichk1 == 1) icheck=1; if (ichk1 == 1) icheck=1;
vrci = vbc - vbcx; /* in case vbc was limited */ vrci = vbc - vbcx; /* in case vbc was limited */
} }
@ -502,8 +507,8 @@ next1: vtn=vt*here->BJTtemissionCoeffF;
gbcn+=ckt->CKTgmin; gbcn+=ckt->CKTgmin;
cbcn+=ckt->CKTgmin*vbc; cbcn+=ckt->CKTgmin*vbc;
if (model->BJTsubSatCurGiven) {
vts=vt*here->BJTtemissionCoeffS; vts=vt*here->BJTtemissionCoeffS;
if(vsub <= -3*vts) { if(vsub <= -3*vts) {
arg=3*vts/(vsub*CONSTe); arg=3*vts/(vsub*CONSTe);
arg = arg * arg * arg; arg = arg * arg * arg;
@ -514,7 +519,10 @@ next1: vtn=vt*here->BJTtemissionCoeffF;
gdsub = csubsat*evsub/vts + ckt->CKTgmin; gdsub = csubsat*evsub/vts + ckt->CKTgmin;
cdsub = csubsat*(evsub-1) + ckt->CKTgmin*vsub; cdsub = csubsat*(evsub-1) + ckt->CKTgmin*vsub;
} }
} else {
gdsub = ckt->CKTgmin;
cdsub = ckt->CKTgmin*vsub;
}
/* /*
* Kull's Quasi-Saturation model * Kull's Quasi-Saturation model
*/ */

View File

@ -172,9 +172,11 @@ BJTtemp(GENmodel *inModel, CKTcircuit *ckt)
if ((model->BJTtlev == 0) || (model->BJTtlev == 1)) { if ((model->BJTtlev == 0) || (model->BJTtlev == 1)) {
factor = exp(factlog); factor = exp(factlog);
here->BJTtSatCur = model->BJTsatCur * factor; here->BJTtSatCur = model->BJTsatCur * factor;
if (model->BJTsubSatCurGiven)
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));
if (model->BJTsubSatCurGiven)
here->BJTtSubSatCur = pow(model->BJTsubSatCur,(1+model->BJTtiss1*dt+model->BJTtiss2*dt*dt)); here->BJTtSubSatCur = pow(model->BJTsubSatCur,(1+model->BJTtiss1*dt+model->BJTtiss2*dt*dt));
} }
@ -274,12 +276,9 @@ 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));
if(model->BJTsubSatCurGiven) { if (model->BJTsubSatCurGiven)
here->BJTtSubVcrit = vt * here->BJTtSubVcrit = vt *
log(vt / (CONSTroot2*here->BJTtSubSatCur*here->BJTarea)); 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);