diff --git a/src/spicelib/devices/bsim4v5/b4v5.c b/src/spicelib/devices/bsim4v5/b4v5.c index 686b0f1e8..1cb05d6a5 100644 --- a/src/spicelib/devices/bsim4v5/b4v5.c +++ b/src/spicelib/devices/bsim4v5/b4v5.c @@ -46,6 +46,7 @@ IOP( "rbps", BSIM4v5_RBPS, IF_REAL , "Body resistance"), IOP( "rbpd", BSIM4v5_RBPD, IF_REAL , "Body resistance"), IOP( "delvto", BSIM4v5_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOPR( "delvt0", BSIM4v5_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), +IOP( "mulu0", BSIM4v5_MULU0, IF_REAL, "Low field mobility multiplier"), IOP( "xgw", BSIM4v5_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4v5_NGCON, IF_REAL, "Number of gate contacts"), diff --git a/src/spicelib/devices/bsim4v5/b4v5ask.c b/src/spicelib/devices/bsim4v5/b4v5ask.c index 79db3e3c6..8a395bdf0 100644 --- a/src/spicelib/devices/bsim4v5/b4v5ask.c +++ b/src/spicelib/devices/bsim4v5/b4v5ask.c @@ -109,6 +109,9 @@ BSIM4v5instance *here = (BSIM4v5instance*)inst; case BSIM4v5_DELVTO: value->rValue = here->BSIM4v5delvto; return(OK); + case BSIM4v5_MULU0: + value->rValue = here->BSIM4v5mulu0; + return(OK); case BSIM4v5_XGW: value->rValue = here->BSIM4v5xgw; return(OK); diff --git a/src/spicelib/devices/bsim4v5/b4v5par.c b/src/spicelib/devices/bsim4v5/b4v5par.c index e62b7f660..1013ce700 100644 --- a/src/spicelib/devices/bsim4v5/b4v5par.c +++ b/src/spicelib/devices/bsim4v5/b4v5par.c @@ -135,6 +135,10 @@ IFvalue *select) here->BSIM4v5delvto = value->rValue; here->BSIM4v5delvtoGiven = TRUE; break; + case BSIM4v5_MULU0: + here->BSIM4v5mulu0 = value->rValue; + here->BSIM4v5mulu0Given = TRUE; + break; case BSIM4v5_XGW: here->BSIM4v5xgw = value->rValue; here->BSIM4v5xgwGiven = TRUE; diff --git a/src/spicelib/devices/bsim4v5/b4v5set.c b/src/spicelib/devices/bsim4v5/b4v5set.c index 36bfbf553..d16f3747b 100644 --- a/src/spicelib/devices/bsim4v5/b4v5set.c +++ b/src/spicelib/devices/bsim4v5/b4v5set.c @@ -1745,6 +1745,8 @@ BSIM4v5instance **InstArray; here->BSIM4v5rbpd = model->BSIM4v5rbpd; if (!here->BSIM4v5delvtoGiven) here->BSIM4v5delvto = 0.0; + if (!here->BSIM4v5mulu0Given) + here->BSIM4v5mulu0 = 1.0; if (!here->BSIM4v5xgwGiven) here->BSIM4v5xgw = model->BSIM4v5xgw; if (!here->BSIM4v5ngconGiven) diff --git a/src/spicelib/devices/bsim4v5/b4v5temp.c b/src/spicelib/devices/bsim4v5/b4v5temp.c index 5b9b6bbde..6513fb997 100644 --- a/src/spicelib/devices/bsim4v5/b4v5temp.c +++ b/src/spicelib/devices/bsim4v5/b4v5temp.c @@ -1416,6 +1416,9 @@ int Size_Not_Found, i; here->BSIM4v5vth0 += here->BSIM4v5delvto; here->BSIM4v5vfb = pParam->BSIM4v5vfb + model->BSIM4v5type * here->BSIM4v5delvto; + /* low field mobility multiplier */ + here->BSIM4v5u0temp = pParam->BSIM4v5u0temp * here->BSIM4v5mulu0; + /* Instance variables calculation */ T3 = model->BSIM4v5type * here->BSIM4v5vth0 - here->BSIM4v5vfb - pParam->BSIM4v5phi; diff --git a/src/spicelib/devices/bsim4v5/bsim4v5def.h b/src/spicelib/devices/bsim4v5/bsim4v5def.h index 443be7b02..c2cbad1d6 100644 --- a/src/spicelib/devices/bsim4v5/bsim4v5def.h +++ b/src/spicelib/devices/bsim4v5/bsim4v5def.h @@ -102,6 +102,7 @@ typedef struct sBSIM4v5instance double BSIM4v5rbpd; double BSIM4v5delvto; + double BSIM4v5mulu0; double BSIM4v5xgw; double BSIM4v5ngcon; @@ -284,6 +285,7 @@ typedef struct sBSIM4v5instance unsigned BSIM4v5rbpdGiven :1; unsigned BSIM4v5rbpsGiven :1; unsigned BSIM4v5delvtoGiven :1; + unsigned BSIM4v5mulu0Given :1; unsigned BSIM4v5xgwGiven :1; unsigned BSIM4v5ngconGiven :1; unsigned BSIM4v5icVDSGiven :1; @@ -2460,6 +2462,7 @@ typedef struct sBSIM4v5model #define BSIM4v5_SCC 36 #define BSIM4v5_SC 37 #define BSIM4v5_M 38 +#define BSIM4v5_MULU0 39 /* Global parameters */ #define BSIM4v5_MOD_TEMPMOD 89 diff --git a/src/spicelib/devices/bsim4v6/b4v6.c b/src/spicelib/devices/bsim4v6/b4v6.c index 9853707c9..145171ae4 100644 --- a/src/spicelib/devices/bsim4v6/b4v6.c +++ b/src/spicelib/devices/bsim4v6/b4v6.c @@ -52,6 +52,7 @@ IOP( "rbps", BSIM4v6_RBPS, IF_REAL , "Body resistance"), IOP( "rbpd", BSIM4v6_RBPD, IF_REAL , "Body resistance"), IOP( "delvto", BSIM4v6_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOPR( "delvt0", BSIM4v6_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), +IOP( "mulu0", BSIM4v6_MULU0, IF_REAL, "Low field mobility multiplier"), IOP( "xgw", BSIM4v6_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4v6_NGCON, IF_REAL, "Number of gate contacts"), diff --git a/src/spicelib/devices/bsim4v6/b4v6ask.c b/src/spicelib/devices/bsim4v6/b4v6ask.c index 54a99278a..500f853b7 100644 --- a/src/spicelib/devices/bsim4v6/b4v6ask.c +++ b/src/spicelib/devices/bsim4v6/b4v6ask.c @@ -80,16 +80,16 @@ BSIM4v6instance *here = (BSIM4v6instance*)inst; case BSIM4v6_SD: value->rValue = here->BSIM4v6sd ; return(OK); - case BSIM4v6_SCA: + case BSIM4v6_SCA: value->rValue = here->BSIM4v6sca ; return(OK); - case BSIM4v6_SCB: + case BSIM4v6_SCB: value->rValue = here->BSIM4v6scb ; return(OK); - case BSIM4v6_SCC: + case BSIM4v6_SCC: value->rValue = here->BSIM4v6scc ; return(OK); - case BSIM4v6_SC: + case BSIM4v6_SC: value->rValue = here->BSIM4v6sc ; return(OK); @@ -111,6 +111,9 @@ BSIM4v6instance *here = (BSIM4v6instance*)inst; case BSIM4v6_DELVTO: value->rValue = here->BSIM4v6delvto; return(OK); + case BSIM4v6_MULU0: + value->rValue = here->BSIM4v6mulu0; + return(OK); case BSIM4v6_XGW: value->rValue = here->BSIM4v6xgw; return(OK); diff --git a/src/spicelib/devices/bsim4v6/b4v6par.c b/src/spicelib/devices/bsim4v6/b4v6par.c index 87e0bc09e..795fdc77c 100644 --- a/src/spicelib/devices/bsim4v6/b4v6par.c +++ b/src/spicelib/devices/bsim4v6/b4v6par.c @@ -137,6 +137,10 @@ IFvalue *select) here->BSIM4v6delvto = value->rValue; here->BSIM4v6delvtoGiven = TRUE; break; + case BSIM4v6_MULU0: + here->BSIM4v6mulu0 = value->rValue; + here->BSIM4v6mulu0Given = TRUE; + break; case BSIM4v6_XGW: here->BSIM4v6xgw = value->rValue; here->BSIM4v6xgwGiven = TRUE; diff --git a/src/spicelib/devices/bsim4v6/b4v6set.c b/src/spicelib/devices/bsim4v6/b4v6set.c index 6040ac0b4..4ad739c34 100644 --- a/src/spicelib/devices/bsim4v6/b4v6set.c +++ b/src/spicelib/devices/bsim4v6/b4v6set.c @@ -2099,6 +2099,8 @@ BSIM4v6instance **InstArray; here->BSIM4v6rbpd = model->BSIM4v6rbpd; if (!here->BSIM4v6delvtoGiven) here->BSIM4v6delvto = 0.0; + if (!here->BSIM4v6mulu0Given) + here->BSIM4v6mulu0 = 1.0; if (!here->BSIM4v6xgwGiven) here->BSIM4v6xgw = model->BSIM4v6xgw; if (!here->BSIM4v6ngconGiven) diff --git a/src/spicelib/devices/bsim4v6/b4v6temp.c b/src/spicelib/devices/bsim4v6/b4v6temp.c index 44e2914b7..e7f9ab1e3 100644 --- a/src/spicelib/devices/bsim4v6/b4v6temp.c +++ b/src/spicelib/devices/bsim4v6/b4v6temp.c @@ -1574,6 +1574,9 @@ int Size_Not_Found, i; here->BSIM4v6vth0 += here->BSIM4v6delvto; here->BSIM4v6vfb = pParam->BSIM4v6vfb + model->BSIM4v6type * here->BSIM4v6delvto; + /* low field mobility multiplier */ + here->BSIM4v6u0temp = pParam->BSIM4v6u0temp * here->BSIM4v6mulu0; + /* Instance variables calculation */ T3 = model->BSIM4v6type * here->BSIM4v6vth0 - here->BSIM4v6vfb - pParam->BSIM4v6phi; diff --git a/src/spicelib/devices/bsim4v6/bsim4v6def.h b/src/spicelib/devices/bsim4v6/bsim4v6def.h index 62de645f5..9595a984c 100644 --- a/src/spicelib/devices/bsim4v6/bsim4v6def.h +++ b/src/spicelib/devices/bsim4v6/bsim4v6def.h @@ -111,6 +111,7 @@ typedef struct sBSIM4v6instance double BSIM4v6rbpd; double BSIM4v6delvto; + double BSIM4v6mulu0; double BSIM4v6xgw; double BSIM4v6ngcon; @@ -293,6 +294,7 @@ typedef struct sBSIM4v6instance unsigned BSIM4v6rbpdGiven :1; unsigned BSIM4v6rbpsGiven :1; unsigned BSIM4v6delvtoGiven :1; + unsigned BSIM4v6mulu0Given :1; unsigned BSIM4v6xgwGiven :1; unsigned BSIM4v6ngconGiven :1; unsigned BSIM4v6icVDSGiven :1; @@ -2637,6 +2639,7 @@ typedef struct sBSIM4v6model #define BSIM4v6_SCC 36 #define BSIM4v6_SC 37 #define BSIM4v6_M 38 +#define BSIM4v6_MULU0 39 /* Global parameters */ #define BSIM4v6_MOD_TEMPEOT 65