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 */
/* ACM model */
double drainResistance, sourceResistance;
if (model->BSIM3acmMod == 0)
{
here->BSIM3drainConductance = model->BSIM3sheetResistance
drainResistance = model->BSIM3sheetResistance
* here->BSIM3drainSquares;
here->BSIM3sourceConductance = model->BSIM3sheetResistance
sourceResistance = model->BSIM3sheetResistance
* here->BSIM3sourceSquares;
}
else /* ACM > 0 */
@ -824,23 +827,22 @@ int Size_Not_Found, error;
model->BSIM3rs,
model->BSIM3rsc,
here->BSIM3sourceSquares,
&(here->BSIM3drainConductance),
&(here->BSIM3sourceConductance)
&drainResistance,
&sourceResistance
);
if (error)
return(error);
}
if (here->BSIM3drainConductance > 0.0)
here->BSIM3drainConductance = 1.0
/ here->BSIM3drainConductance;
if (drainResistance > 0.0)
here->BSIM3drainConductance = 1.0 / drainResistance;
else
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
here->BSIM3sourceConductance = 0.0;
here->BSIM3cgso = pParam->BSIM3cgso;
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 */
/* ACM model */
double DrainResistance, SourceResistance;
if (model->BSIM3v32acmMod == 0)
{
here->BSIM3v32drainConductance = model->BSIM3v32sheetResistance
DrainResistance = model->BSIM3v32sheetResistance
* here->BSIM3v32drainSquares;
here->BSIM3v32sourceConductance = model->BSIM3v32sheetResistance
SourceResistance = model->BSIM3v32sheetResistance
* here->BSIM3v32sourceSquares;
}
else /* ACM > 0 */
@ -894,21 +897,19 @@ int Size_Not_Found, error;
model->BSIM3v32rs,
model->BSIM3v32rsc,
here->BSIM3v32sourceSquares,
&(here->BSIM3v32drainConductance),
&(here->BSIM3v32sourceConductance)
&DrainResistance,
&SourceResistance
);
if (error)
return(error);
}
if (here->BSIM3v32drainConductance > 0.0)
here->BSIM3v32drainConductance = 1.0
/ here->BSIM3v32drainConductance;
if (DrainResistance > 0.0)
here->BSIM3v32drainConductance = 1.0 / DrainResistance;
else
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
here->BSIM3v32sourceConductance = 0.0;

16
src/spicelib/devices/devsup.c

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

Loading…
Cancel
Save