diff --git a/src/spicelib/devices/bsim3v32/b3v32temp.c b/src/spicelib/devices/bsim3v32/b3v32temp.c index 6ef572c95..986a16a2f 100644 --- a/src/spicelib/devices/bsim3v32/b3v32temp.c +++ b/src/spicelib/devices/bsim3v32/b3v32temp.c @@ -935,6 +935,7 @@ int Size_Not_Found; + here->BSIM3v32sourcePerimeter * model->BSIM3v32jctSidewallTempSatCurDensity; } +#if 0 if ((SourceSatCurrent > 0.0) && (model->BSIM3v32ijth > 0.0)) { here->BSIM3v32vjsm = Nvtm * log(model->BSIM3v32ijth / SourceSatCurrent + 1.0); @@ -952,6 +953,7 @@ int Size_Not_Found; break; } } +#endif if ((here->BSIM3v32drainArea <= 0.0) && (here->BSIM3v32drainPerimeter <= 0.0)) @@ -978,6 +980,7 @@ int Size_Not_Found; } SourceSatCurrent = SourceSatCurrent + here->BSIM3v32sourcePerimeter * model->BSIM3v32jctSidewallTempSatCurDensity; if (SourceSatCurrent <= 0.0) SourceSatCurrent = 1.0e-14; +#if 0 if ((SourceSatCurrent > 0.0) && (model->BSIM3v32ijth > 0.0)) { here->BSIM3v32vjsm = Nvtm * log(model->BSIM3v32ijth / SourceSatCurrent + 1.0); @@ -995,6 +998,7 @@ int Size_Not_Found; break; } } +#endif DrainSatCurrent = 0.0; if (!here->BSIM3v32drainAreaGiven) @@ -1010,6 +1014,24 @@ int Size_Not_Found; if (DrainSatCurrent <= 0.0) DrainSatCurrent = 1.0e-14; } + if ((SourceSatCurrent > 0.0) && (model->BSIM3v32ijth > 0.0)) + { here->BSIM3v32vjsm = Nvtm * log(model->BSIM3v32ijth + / SourceSatCurrent + 1.0); + /* Added revision dependent code */ + switch (model->BSIM3v32intVersion) { + case BSIM3v32V324: + case BSIM3v32V323: + case BSIM3v32V322: + here->BSIM3v32IsEvjsm = + SourceSatCurrent * exp(here->BSIM3v32vjsm / Nvtm); + break; + case BSIM3v32V32: + default: + /* Do nothing */ + break; + } + } + if ((DrainSatCurrent > 0.0) && (model->BSIM3v32ijth > 0.0)) { here->BSIM3v32vjdm = Nvtm * log(model->BSIM3v32ijth / DrainSatCurrent + 1.0);