Browse Source

devices/mos*: prevent NaN in sqrt for negative value of model parameter `PHI'

pre-master-46
dwarning 13 years ago
committed by rlar
parent
commit
ae78dd06ef
  1. 6
      src/spicelib/devices/mos1/mos1temp.c
  2. 5
      src/spicelib/devices/mos2/mos2temp.c
  3. 6
      src/spicelib/devices/mos3/mos3temp.c
  4. 6
      src/spicelib/devices/mos6/mos6temp.c
  5. 5
      src/spicelib/devices/mos9/mos9temp.c

6
src/spicelib/devices/mos1/mos1temp.c

@ -52,6 +52,12 @@ MOS1temp(GENmodel *inModel, CKTcircuit *ckt)
/* now model parameter preprocessing */ /* now model parameter preprocessing */
if (model->MOS1phi <= 0.0) {
SPfrontEnd->IFerror (ERR_FATAL,
"%s: Phi is not positive.", &model->MOS1modName);
return(E_BADPARM);
}
if(!model->MOS1oxideThicknessGiven || model->MOS1oxideThickness == 0) { if(!model->MOS1oxideThicknessGiven || model->MOS1oxideThickness == 0) {
model->MOS1oxideCapFactor = 0; model->MOS1oxideCapFactor = 0;
} else { } else {

5
src/spicelib/devices/mos2/mos2temp.c

@ -53,6 +53,11 @@ MOS2temp(GENmodel *inModel, CKTcircuit *ckt)
arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP));
pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1);
if (model->MOS2phi <= 0.0) {
SPfrontEnd->IFerror (ERR_FATAL,
"%s: Phi is not positive.", &model->MOS2modName);
return(E_BADPARM);
}
if(!model->MOS2oxideThicknessGiven) { if(!model->MOS2oxideThicknessGiven) {
model->MOS2oxideThickness = 1e-7; model->MOS2oxideThickness = 1e-7;

6
src/spicelib/devices/mos3/mos3temp.c

@ -53,6 +53,12 @@ MOS3temp(GENmodel *inModel, CKTcircuit *ckt)
CONSTKoverQ); CONSTKoverQ);
ni_temp=1.45e16*nifact; ni_temp=1.45e16*nifact;
if (model->MOS3phi <= 0.0) {
SPfrontEnd->IFerror (ERR_FATAL,
"%s: Phi is not positive.", &model->MOS3modName);
return(E_BADPARM);
}
model->MOS3oxideCapFactor = 3.9 * 8.854214871e-12/ model->MOS3oxideCapFactor = 3.9 * 8.854214871e-12/
model->MOS3oxideThickness; model->MOS3oxideThickness;
if(!model->MOS3surfaceMobilityGiven) model->MOS3surfaceMobility=600; if(!model->MOS3surfaceMobilityGiven) model->MOS3surfaceMobility=600;

6
src/spicelib/devices/mos6/mos6temp.c

@ -51,6 +51,12 @@ MOS6temp(GENmodel *inModel, CKTcircuit *ckt)
/* now model parameter preprocessing */ /* now model parameter preprocessing */
if (model->MOS6phi <= 0.0) {
SPfrontEnd->IFerror (ERR_FATAL,
"%s: Phi is not positive.", &model->MOS6modName);
return(E_BADPARM);
}
if(!model->MOS6oxideThicknessGiven || model->MOS6oxideThickness == 0) { if(!model->MOS6oxideThicknessGiven || model->MOS6oxideThickness == 0) {
model->MOS6oxideCapFactor = 0; model->MOS6oxideCapFactor = 0;
} else { } else {

5
src/spicelib/devices/mos9/mos9temp.c

@ -54,6 +54,11 @@ MOS9temp(GENmodel *inModel, CKTcircuit *ckt)
CONSTKoverQ); CONSTKoverQ);
ni_temp=1.45e16*nifact; ni_temp=1.45e16*nifact;
if (model->MOS9phi <= 0.0) {
SPfrontEnd->IFerror (ERR_FATAL,
"%s: Phi is not positive.", &model->MOS9modName);
return(E_BADPARM);
}
model->MOS9oxideCapFactor = 3.9 * 8.854214871e-12/ model->MOS9oxideCapFactor = 3.9 * 8.854214871e-12/
model->MOS9oxideThickness; model->MOS9oxideThickness;

Loading…
Cancel
Save