extend bsim4 instance parameter with mulu0 for local mobility multiplier

This commit is contained in:
dwarning 2015-03-16 16:08:59 +01:00
parent 4402897a07
commit c44f101c49
12 changed files with 32 additions and 0 deletions

View File

@ -55,6 +55,7 @@ IOP( "rbps", BSIM4_RBPS, IF_REAL , "Body resistance"),
IOP( "rbpd", BSIM4_RBPD, IF_REAL , "Body resistance"),
IOP( "delvto", BSIM4_DELVTO, IF_REAL , "Zero bias threshold voltage variation"),
IOPR( "delvt0", BSIM4_DELVTO, IF_REAL , "Zero bias threshold voltage variation"),
IOP( "mulu0", BSIM4_MULU0, IF_REAL, "Low field mobility multiplier"),
IOP( "xgw", BSIM4_XGW, IF_REAL, "Distance from gate contact center to device edge"),
IOP( "ngcon", BSIM4_NGCON, IF_REAL, "Number of gate contacts"),

View File

@ -111,6 +111,9 @@ BSIM4instance *here = (BSIM4instance*)inst;
case BSIM4_DELVTO:
value->rValue = here->BSIM4delvto;
return(OK);
case BSIM4_MULU0:
value->rValue = here->BSIM4mulu0;
return(OK);
case BSIM4_XGW:
value->rValue = here->BSIM4xgw;
return(OK);

View File

@ -137,6 +137,10 @@ IFvalue *select)
here->BSIM4delvto = value->rValue;
here->BSIM4delvtoGiven = TRUE;
break;
case BSIM4_MULU0:
here->BSIM4mulu0 = value->rValue;
here->BSIM4mulu0Given = TRUE;
break;
case BSIM4_XGW:
here->BSIM4xgw = value->rValue;
here->BSIM4xgwGiven = TRUE;

View File

@ -2326,6 +2326,8 @@ BSIM4instance **InstArray;
here->BSIM4rbpd = model->BSIM4rbpd;
if (!here->BSIM4delvtoGiven)
here->BSIM4delvto = 0.0;
if (!here->BSIM4mulu0Given)
here->BSIM4mulu0 = 1.0;
if (!here->BSIM4xgwGiven)
here->BSIM4xgw = model->BSIM4xgw;
if (!here->BSIM4ngconGiven)

View File

@ -1718,6 +1718,9 @@ int Size_Not_Found, i;
here->BSIM4vth0 += here->BSIM4delvto;
here->BSIM4vfb = pParam->BSIM4vfb + model->BSIM4type * here->BSIM4delvto;
/* low field mobility multiplier */
here->BSIM4u0temp = pParam->BSIM4u0temp * here->BSIM4mulu0;
/* Instance variables calculation */
T3 = model->BSIM4type * here->BSIM4vth0
- here->BSIM4vfb - pParam->BSIM4phi;

View File

@ -109,6 +109,7 @@ typedef struct sBSIM4instance
double BSIM4rbpd;
double BSIM4delvto;
double BSIM4mulu0;
double BSIM4xgw;
double BSIM4ngcon;
@ -295,6 +296,7 @@ typedef struct sBSIM4instance
unsigned BSIM4rbpdGiven :1;
unsigned BSIM4rbpsGiven :1;
unsigned BSIM4delvtoGiven :1;
unsigned BSIM4mulu0Given :1;
unsigned BSIM4xgwGiven :1;
unsigned BSIM4ngconGiven :1;
unsigned BSIM4icVDSGiven :1;
@ -2755,6 +2757,7 @@ typedef struct sBSIM4model
#define BSIM4_SCC 36
#define BSIM4_SC 37
#define BSIM4_M 38
#define BSIM4_MULU0 39
/* Global parameters */
#define BSIM4_MOD_TEMPEOT 65

View File

@ -53,6 +53,7 @@ IOP( "rbps", BSIM4v7_RBPS, IF_REAL , "Body resistance"),
IOP( "rbpd", BSIM4v7_RBPD, IF_REAL , "Body resistance"),
IOP( "delvto", BSIM4v7_DELVTO, IF_REAL , "Zero bias threshold voltage variation"),
IOPR( "delvt0", BSIM4v7_DELVTO, IF_REAL , "Zero bias threshold voltage variation"),
IOP( "mulu0", BSIM4v7_MULU0, IF_REAL, "Low field mobility multiplier"),
IOP( "xgw", BSIM4v7_XGW, IF_REAL, "Distance from gate contact center to device edge"),
IOP( "ngcon", BSIM4v7_NGCON, IF_REAL, "Number of gate contacts"),

View File

@ -111,6 +111,9 @@ BSIM4v7instance *here = (BSIM4v7instance*)inst;
case BSIM4v7_DELVTO:
value->rValue = here->BSIM4v7delvto;
return(OK);
case BSIM4v7_MULU0:
value->rValue = here->BSIM4v7mulu0;
return(OK);
case BSIM4v7_XGW:
value->rValue = here->BSIM4v7xgw;
return(OK);

View File

@ -137,6 +137,10 @@ IFvalue *select)
here->BSIM4v7delvto = value->rValue;
here->BSIM4v7delvtoGiven = TRUE;
break;
case BSIM4v7_MULU0:
here->BSIM4v7mulu0 = value->rValue;
here->BSIM4v7mulu0Given = TRUE;
break;
case BSIM4v7_XGW:
here->BSIM4v7xgw = value->rValue;
here->BSIM4v7xgwGiven = TRUE;

View File

@ -2241,6 +2241,8 @@ BSIM4v7instance **InstArray;
here->BSIM4v7rbpd = model->BSIM4v7rbpd;
if (!here->BSIM4v7delvtoGiven)
here->BSIM4v7delvto = 0.0;
if (!here->BSIM4v7mulu0Given)
here->BSIM4v7mulu0 = 1.0;
if (!here->BSIM4v7xgwGiven)
here->BSIM4v7xgw = model->BSIM4v7xgw;
if (!here->BSIM4v7ngconGiven)

View File

@ -1650,6 +1650,9 @@ int Size_Not_Found, i;
here->BSIM4v7vth0 += here->BSIM4v7delvto;
here->BSIM4v7vfb = pParam->BSIM4v7vfb + model->BSIM4v7type * here->BSIM4v7delvto;
/* low field mobility multiplier */
here->BSIM4v7u0temp = pParam->BSIM4v7u0temp * here->BSIM4v7mulu0;
/* Instance variables calculation */
T3 = model->BSIM4v7type * here->BSIM4v7vth0
- here->BSIM4v7vfb - pParam->BSIM4v7phi;

View File

@ -108,6 +108,7 @@ typedef struct sBSIM4v7instance
double BSIM4v7rbpd;
double BSIM4v7delvto;
double BSIM4v7mulu0;
double BSIM4v7xgw;
double BSIM4v7ngcon;
@ -292,6 +293,7 @@ typedef struct sBSIM4v7instance
unsigned BSIM4v7rbpdGiven :1;
unsigned BSIM4v7rbpsGiven :1;
unsigned BSIM4v7delvtoGiven :1;
unsigned BSIM4v7mulu0Given :1;
unsigned BSIM4v7xgwGiven :1;
unsigned BSIM4v7ngconGiven :1;
unsigned BSIM4v7icVDSGiven :1;
@ -2749,6 +2751,7 @@ typedef struct sBSIM4v7model
#define BSIM4v7_SCC 36
#define BSIM4v7_SC 37
#define BSIM4v7_M 38
#define BSIM4v7_MULU0 39
/* Global parameters */
#define BSIM4v7_MOD_TEMPEOT 65