Browse Source

ACM_SourceDrainResistances(), fix misleading signature

This function does return resistance, not conductance.
pre-master-46
Holger Vogt 9 years ago
committed by rlar
parent
commit
f868418d13
  1. 22
      src/spicelib/devices/bsim3/b3temp.c
  2. 21
      src/spicelib/devices/bsim3v32/b3v32temp.c
  3. 16
      src/spicelib/devices/devsup.c

22
src/spicelib/devices/bsim3/b3temp.c

@ -798,11 +798,14 @@ int Size_Not_Found, error;
/* process source/drain series resistance */ /* process source/drain series resistance */
/* ACM model */ /* ACM model */
double drainResistance, sourceResistance;
if (model->BSIM3acmMod == 0) if (model->BSIM3acmMod == 0)
{ {
here->BSIM3drainConductance = model->BSIM3sheetResistance
drainResistance = model->BSIM3sheetResistance
* here->BSIM3drainSquares; * here->BSIM3drainSquares;
here->BSIM3sourceConductance = model->BSIM3sheetResistance
sourceResistance = model->BSIM3sheetResistance
* here->BSIM3sourceSquares; * here->BSIM3sourceSquares;
} }
else /* ACM > 0 */ else /* ACM > 0 */
@ -824,23 +827,22 @@ int Size_Not_Found, error;
model->BSIM3rs, model->BSIM3rs,
model->BSIM3rsc, model->BSIM3rsc,
here->BSIM3sourceSquares, here->BSIM3sourceSquares,
&(here->BSIM3drainConductance),
&(here->BSIM3sourceConductance)
&drainResistance,
&sourceResistance
); );
if (error) if (error)
return(error); return(error);
} }
if (here->BSIM3drainConductance > 0.0)
here->BSIM3drainConductance = 1.0
/ here->BSIM3drainConductance;
if (drainResistance > 0.0)
here->BSIM3drainConductance = 1.0 / drainResistance;
else else
here->BSIM3drainConductance = 0.0; here->BSIM3drainConductance = 0.0;
if (here->BSIM3sourceConductance > 0.0)
here->BSIM3sourceConductance = 1.0
/ here->BSIM3sourceConductance;
if (sourceResistance > 0.0)
here->BSIM3sourceConductance = 1.0 / sourceResistance;
else else
here->BSIM3sourceConductance = 0.0; here->BSIM3sourceConductance = 0.0;
here->BSIM3cgso = pParam->BSIM3cgso; here->BSIM3cgso = pParam->BSIM3cgso;
here->BSIM3cgdo = pParam->BSIM3cgdo; here->BSIM3cgdo = pParam->BSIM3cgdo;

21
src/spicelib/devices/bsim3v32/b3v32temp.c

@ -868,11 +868,14 @@ int Size_Not_Found, error;
/* process source/drain series resistance */ /* process source/drain series resistance */
/* ACM model */ /* ACM model */
double DrainResistance, SourceResistance;
if (model->BSIM3v32acmMod == 0) if (model->BSIM3v32acmMod == 0)
{ {
here->BSIM3v32drainConductance = model->BSIM3v32sheetResistance
DrainResistance = model->BSIM3v32sheetResistance
* here->BSIM3v32drainSquares; * here->BSIM3v32drainSquares;
here->BSIM3v32sourceConductance = model->BSIM3v32sheetResistance
SourceResistance = model->BSIM3v32sheetResistance
* here->BSIM3v32sourceSquares; * here->BSIM3v32sourceSquares;
} }
else /* ACM > 0 */ else /* ACM > 0 */
@ -894,21 +897,19 @@ int Size_Not_Found, error;
model->BSIM3v32rs, model->BSIM3v32rs,
model->BSIM3v32rsc, model->BSIM3v32rsc,
here->BSIM3v32sourceSquares, here->BSIM3v32sourceSquares,
&(here->BSIM3v32drainConductance),
&(here->BSIM3v32sourceConductance)
&DrainResistance,
&SourceResistance
); );
if (error) if (error)
return(error); return(error);
} }
if (here->BSIM3v32drainConductance > 0.0)
here->BSIM3v32drainConductance = 1.0
/ here->BSIM3v32drainConductance;
if (DrainResistance > 0.0)
here->BSIM3v32drainConductance = 1.0 / DrainResistance;
else else
here->BSIM3v32drainConductance = 0.0; here->BSIM3v32drainConductance = 0.0;
if (here->BSIM3v32sourceConductance > 0.0)
here->BSIM3v32sourceConductance = 1.0
/ here->BSIM3v32sourceConductance;
if (SourceResistance > 0.0)
here->BSIM3v32sourceConductance = 1.0 / SourceResistance;
else else
here->BSIM3v32sourceConductance = 0.0; here->BSIM3v32sourceConductance = 0.0;

16
src/spicelib/devices/devsup.c

@ -168,16 +168,16 @@ int sourceSquaresGiven,
double RS, double RS,
double RSC, double RSC,
double sourceSquares, double sourceSquares,
double *drainConductance,
double *sourceConductance
double *drainResistance,
double *sourceResistance
) )
{ {
switch (ACM) switch (ACM)
{ {
case 1: case 1:
case 11: case 11:
*drainConductance = (LD + LDIF)/(w * WMLT + XW)*RD + RSH*drainSquares + RDC;
*sourceConductance = (LD + LDIF)/(w * WMLT + XW)*RS + RSH*sourceSquares + RSC;
*drainResistance = (LD + LDIF)/(w * WMLT + XW)*RD + RSH*drainSquares + RDC;
*sourceResistance = (LD + LDIF)/(w * WMLT + XW)*RS + RSH*sourceSquares + RSC;
break; break;
@ -186,13 +186,13 @@ double *sourceConductance
case 3: case 3:
case 13: case 13:
if (drainSquaresGiven) if (drainSquaresGiven)
*drainConductance = (LD + LDIF)/(w * WMLT + XW)*RD + RSH*drainSquares + RDC;
*drainResistance = (LD + LDIF)/(w * WMLT + XW)*RD + RSH*drainSquares + RDC;
else else
*drainConductance = ((LD + LDIF)*RD + (HDIF * WMLT)*RSH)/(w * WMLT + XW) + RDC;
*drainResistance = ((LD + LDIF)*RD + (HDIF * WMLT)*RSH)/(w * WMLT + XW) + RDC;
if (sourceSquaresGiven) if (sourceSquaresGiven)
*sourceConductance = (LD + LDIF)/(w * WMLT + XW)*RS + RSH*sourceSquares + RSC;
*sourceResistance = (LD + LDIF)/(w * WMLT + XW)*RS + RSH*sourceSquares + RSC;
else else
*sourceConductance = ((LD + LDIF)*RS + (HDIF * WMLT)*RSH)/(w * WMLT + XW) + RSC;
*sourceResistance = ((LD + LDIF)*RS + (HDIF * WMLT)*RSH)/(w * WMLT + XW) + RSC;
break; break;

Loading…
Cancel
Save