From f868418d1318213abede74497307d06f14e192ba Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Fri, 13 Oct 2017 22:30:03 +0200 Subject: [PATCH] ACM_SourceDrainResistances(), fix misleading signature This function does return resistance, not conductance. --- src/spicelib/devices/bsim3/b3temp.c | 22 ++++++++++++---------- src/spicelib/devices/bsim3v32/b3v32temp.c | 21 +++++++++++---------- src/spicelib/devices/devsup.c | 16 ++++++++-------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/spicelib/devices/bsim3/b3temp.c b/src/spicelib/devices/bsim3/b3temp.c index 48e30572a..af20b4e3d 100644 --- a/src/spicelib/devices/bsim3/b3temp.c +++ b/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; diff --git a/src/spicelib/devices/bsim3v32/b3v32temp.c b/src/spicelib/devices/bsim3v32/b3v32temp.c index 61699687f..7725f69b3 100644 --- a/src/spicelib/devices/bsim3v32/b3v32temp.c +++ b/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; diff --git a/src/spicelib/devices/devsup.c b/src/spicelib/devices/devsup.c index dbc6c21cc..eb57ca868 100644 --- a/src/spicelib/devices/devsup.c +++ b/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;