|
|
|
@ -33,12 +33,8 @@ void DIOtempUpdate(DIOmodel *inModel, DIOinstance *here, double Temp, CKTcircuit |
|
|
|
double egfet1,arg1,fact1,pbfact1,pbo,gmaold,pboSW,gmaSWold; |
|
|
|
double fact2,pbfact,arg,egfet,gmanew,gmaSWnew; |
|
|
|
double arg1_dT, arg2, arg2_dT; |
|
|
|
double gclimit; |
|
|
|
double lnTRatio, egfet_dT, arg0, vte_dT, vts_dT, vtt_dT, vtr_dT; |
|
|
|
|
|
|
|
if (!cp_getvar("DIOgradingCoeffMax", CP_REAL, &gclimit, 0)) |
|
|
|
gclimit = 0.9; |
|
|
|
|
|
|
|
vt = CONSTKoverQ * Temp; |
|
|
|
vte = model->DIOemissionCoeff * vt; |
|
|
|
vte_dT = CONSTKoverQ * model->DIOemissionCoeff; |
|
|
|
@ -57,16 +53,6 @@ void DIOtempUpdate(DIOmodel *inModel, DIOinstance *here, double Temp, CKTcircuit |
|
|
|
+ (model->DIOgradCoeffTemp2 * dt * dt); |
|
|
|
here->DIOtGradingCoeff = model->DIOgradingCoeff * factor; |
|
|
|
|
|
|
|
/* limit temperature adjusted grading coeff |
|
|
|
* to max of .9, or set new limit with variable DIOgradingCoeffMax |
|
|
|
*/ |
|
|
|
if(here->DIOtGradingCoeff>gclimit) { |
|
|
|
SPfrontEnd->IFerrorf (ERR_WARNING, |
|
|
|
"%s: temperature adjusted grading coefficient too large, limited to %g", |
|
|
|
here->DIOname, gclimit); |
|
|
|
here->DIOtGradingCoeff=gclimit; |
|
|
|
} |
|
|
|
|
|
|
|
/* this part gets really ugly - I won't even try to |
|
|
|
* explain these equations */ |
|
|
|
if ((model->DIOtlev == 0) || (model->DIOtlev == 1)) { |
|
|
|
@ -212,23 +198,6 @@ void DIOtempUpdate(DIOmodel *inModel, DIOinstance *here, double Temp, CKTcircuit |
|
|
|
/* and Vcrit */ |
|
|
|
here->DIOtVcrit = vte * log(vte/(CONSTroot2*here->DIOtSatCur)); |
|
|
|
|
|
|
|
/* limit junction potential to max of 1/FC */ |
|
|
|
if(here->DIOtDepCap > 1.0) { |
|
|
|
here->DIOtJctPot=1.0/model->DIOdepletionCapCoeff; |
|
|
|
here->DIOtDepCap=model->DIOdepletionCapCoeff*here->DIOtJctPot; |
|
|
|
SPfrontEnd->IFerrorf (ERR_WARNING, |
|
|
|
"%s: junction potential VJ too large, limited to %f", |
|
|
|
model->DIOmodName, here->DIOtJctPot); |
|
|
|
} |
|
|
|
/* limit sidewall junction potential to max of 1/FCS */ |
|
|
|
if(here->DIOtDepSWCap > 1.0) { |
|
|
|
here->DIOtJctSWPot=1.0/model->DIOdepletionSWcapCoeff; |
|
|
|
here->DIOtDepSWCap=model->DIOdepletionSWcapCoeff*here->DIOtJctSWPot; |
|
|
|
SPfrontEnd->IFerrorf (ERR_WARNING, |
|
|
|
"%s: junction potential VJS too large, limited to %f", |
|
|
|
model->DIOmodName, here->DIOtJctSWPot); |
|
|
|
} |
|
|
|
|
|
|
|
/* and now to compute the breakdown voltage, again, using |
|
|
|
* temperature adjusted basic parameters */ |
|
|
|
if (model->DIObreakdownVoltageGiven){ |
|
|
|
|