add instance parameter mulu0 for mobility reduction bsim4.5 and 4.6

This commit is contained in:
dwarning 2022-12-22 14:19:50 +01:00 committed by Holger Vogt
parent 3e27e640b5
commit 26e73c09b3
12 changed files with 36 additions and 4 deletions

View File

@ -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"),

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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

View File

@ -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"),

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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