no stimod switch as model parameter
This commit is contained in:
parent
75f68291aa
commit
9e24a8ac83
|
|
@ -1,4 +1,10 @@
|
||||||
2008-11-04 Holger Vogt
|
2008-11-26 Dietmar Warning
|
||||||
|
* src/spicelib/devices/bsim4v4, bsim4v5: this is a backup because the patch of
|
||||||
|
Phil Barker are providing only a placeholder for propriarity sti stress model -
|
||||||
|
not any equation. If the stimod feature is some time published we can implement
|
||||||
|
it again.
|
||||||
|
|
||||||
|
2008-11-26 Holger Vogt
|
||||||
* frontend/numparam/xpressn.c: agauss, sinh, cosh tanh, added (source: S. Thiel)
|
* frontend/numparam/xpressn.c: agauss, sinh, cosh tanh, added (source: S. Thiel)
|
||||||
* b3soi*ld.c: _isnan defined for _MSC_VER
|
* b3soi*ld.c: _isnan defined for _MSC_VER
|
||||||
* main.c, cmath2.c, xpressn.c: random, srandom defined extern for _MSC_VER
|
* main.c, cmath2.c, xpressn.c: random, srandom defined extern for _MSC_VER
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,6 @@ OP( "qinv", BSIM4v4_QINV, IF_REAL, "Qinversion"),
|
||||||
};
|
};
|
||||||
|
|
||||||
IFparm BSIM4v4mPTable[] = { /* model parameters */
|
IFparm BSIM4v4mPTable[] = { /* model parameters */
|
||||||
IOP( "rgeomod", BSIM4v4_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"),
|
|
||||||
IOP( "capmod", BSIM4v4_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"),
|
IOP( "capmod", BSIM4v4_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"),
|
||||||
IOP( "diomod", BSIM4v4_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"),
|
IOP( "diomod", BSIM4v4_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"),
|
||||||
IOP( "rdsmod", BSIM4v4_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"),
|
IOP( "rdsmod", BSIM4v4_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"),
|
||||||
|
|
@ -801,10 +800,6 @@ IOP( "ef", BSIM4v4_MOD_EF, IF_REAL, "Flicker noise frequency exponent"),
|
||||||
IOP( "af", BSIM4v4_MOD_AF, IF_REAL, "Flicker noise exponent"),
|
IOP( "af", BSIM4v4_MOD_AF, IF_REAL, "Flicker noise exponent"),
|
||||||
IOP( "kf", BSIM4v4_MOD_KF, IF_REAL, "Flicker noise coefficient"),
|
IOP( "kf", BSIM4v4_MOD_KF, IF_REAL, "Flicker noise coefficient"),
|
||||||
|
|
||||||
IOP( "stimod", BSIM4v4_MOD_STIMOD, IF_REAL, "Stress effect model selector"),
|
|
||||||
IOP( "sa0", BSIM4v4_MOD_SA0, IF_REAL, "Distance between OD edge to poly of one side"),
|
|
||||||
IOP( "sb0", BSIM4v4_MOD_SB0, IF_REAL, "Distance between OD edge to poly of other side"),
|
|
||||||
|
|
||||||
IP( "nmos", BSIM4v4_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"),
|
IP( "nmos", BSIM4v4_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"),
|
||||||
IP( "pmos", BSIM4v4_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"),
|
IP( "pmos", BSIM4v4_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -444,12 +444,11 @@ FILE *fplog;
|
||||||
printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v4cdscd);
|
printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v4cdscd);
|
||||||
}
|
}
|
||||||
/* Check DIBL parameters */
|
/* Check DIBL parameters */
|
||||||
/* if (here->BSIM4v4eta0 < 0.0)
|
if (here->BSIM4v4eta0 < 0.0)
|
||||||
{ fprintf(fplog, "Warning: Eta0 = %g is negative.\n",
|
{ fprintf(fplog, "Warning: Eta0 = %g is negative.\n",
|
||||||
here->BSIM4v4eta0);
|
here->BSIM4v4eta0);
|
||||||
printf("Warning: Eta0 = %g is negative.\n", here->BSIM4v4eta0);
|
printf("Warning: Eta0 = %g is negative.\n", here->BSIM4v4eta0);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
/* Check Abulk parameters */
|
/* Check Abulk parameters */
|
||||||
if (fabs(1.0e-8 / (pParam->BSIM4v4b1 + pParam->BSIM4v4weff)) > 10.0)
|
if (fabs(1.0e-8 / (pParam->BSIM4v4b1 + pParam->BSIM4v4weff)) > 10.0)
|
||||||
|
|
@ -551,12 +550,11 @@ FILE *fplog;
|
||||||
pParam->BSIM4v4pdibl1);
|
pParam->BSIM4v4pdibl1);
|
||||||
printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v4pdibl1);
|
printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v4pdibl1);
|
||||||
}
|
}
|
||||||
/* if (pParam->BSIM4v4pdibl2 < 0.0)
|
if (pParam->BSIM4v4pdibl2 < 0.0)
|
||||||
{ fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n",
|
{ fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n",
|
||||||
pParam->BSIM4v4pdibl2);
|
pParam->BSIM4v4pdibl2);
|
||||||
printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v4pdibl2);
|
printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v4pdibl2);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
/* Check stress effect parameters */
|
/* Check stress effect parameters */
|
||||||
if((here->BSIM4v4sa > 0.0) && (here->BSIM4v4sb > 0.0) &&
|
if((here->BSIM4v4sa > 0.0) && (here->BSIM4v4sb > 0.0) &&
|
||||||
|
|
|
||||||
|
|
@ -1957,18 +1957,6 @@ IFvalue *value;
|
||||||
case BSIM4v4_MOD_KF:
|
case BSIM4v4_MOD_KF:
|
||||||
value->rValue = model->BSIM4v4kf;
|
value->rValue = model->BSIM4v4kf;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4v4_MOD_STIMOD:
|
|
||||||
value->rValue = model->BSIM4v4stimod;
|
|
||||||
return(OK);
|
|
||||||
case BSIM4v4_MOD_RGEOMOD:
|
|
||||||
value->rValue = model->BSIM4v4rgeomod;
|
|
||||||
return(OK);
|
|
||||||
case BSIM4v4_MOD_SA0:
|
|
||||||
value->rValue = model->BSIM4v4sa0;
|
|
||||||
return(OK);
|
|
||||||
case BSIM4v4_MOD_SB0:
|
|
||||||
value->rValue = model->BSIM4v4sb0;
|
|
||||||
return(OK);
|
|
||||||
default:
|
default:
|
||||||
return(E_BADPARM);
|
return(E_BADPARM);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2780,22 +2780,6 @@ GENmodel *inMod;
|
||||||
mod->BSIM4v4kf = value->rValue;
|
mod->BSIM4v4kf = value->rValue;
|
||||||
mod->BSIM4v4kfGiven = TRUE;
|
mod->BSIM4v4kfGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case BSIM4v4_MOD_STIMOD :
|
|
||||||
mod->BSIM4v4stimod = value->rValue;
|
|
||||||
mod->BSIM4v4stimodGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v4_MOD_RGEOMOD :
|
|
||||||
mod->BSIM4v4rgeomod = value->rValue;
|
|
||||||
mod->BSIM4v4rgeomodGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v4_MOD_SA0 :
|
|
||||||
mod->BSIM4v4sa0 = value->rValue;
|
|
||||||
mod->BSIM4v4sa0Given = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v4_MOD_SB0 :
|
|
||||||
mod->BSIM4v4sb0 = value->rValue;
|
|
||||||
mod->BSIM4v4sb0Given = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v4_MOD_NMOS :
|
case BSIM4v4_MOD_NMOS :
|
||||||
if(value->iValue) {
|
if(value->iValue) {
|
||||||
mod->BSIM4v4type = 1;
|
mod->BSIM4v4type = 1;
|
||||||
|
|
|
||||||
|
|
@ -1452,14 +1452,6 @@ JOB *job;
|
||||||
model->BSIM4v4af = 1.0;
|
model->BSIM4v4af = 1.0;
|
||||||
if (!model->BSIM4v4kfGiven)
|
if (!model->BSIM4v4kfGiven)
|
||||||
model->BSIM4v4kf = 0.0;
|
model->BSIM4v4kf = 0.0;
|
||||||
if (!model->BSIM4v4stimodGiven)
|
|
||||||
model->BSIM4v4stimod = 0.0;
|
|
||||||
if (!model->BSIM4v4rgeomodGiven)
|
|
||||||
model->BSIM4v4rgeomod = 0;
|
|
||||||
if (!model->BSIM4v4sa0Given)
|
|
||||||
model->BSIM4v4sa0 = 0.0;
|
|
||||||
if (!model->BSIM4v4sb0Given)
|
|
||||||
model->BSIM4v4sb0 = 0.0;
|
|
||||||
|
|
||||||
/* stress effect */
|
/* stress effect */
|
||||||
if (!model->BSIM4v4sarefGiven)
|
if (!model->BSIM4v4sarefGiven)
|
||||||
|
|
@ -1516,9 +1508,9 @@ JOB *job;
|
||||||
|
|
||||||
for (here = model->BSIM4v4instances; here != NULL ;
|
for (here = model->BSIM4v4instances; here != NULL ;
|
||||||
here=here->BSIM4v4nextInstance)
|
here=here->BSIM4v4nextInstance)
|
||||||
{
|
{
|
||||||
if (here->BSIM4v4owner == ARCHme) {
|
if (here->BSIM4v4owner == ARCHme) {
|
||||||
/* allocate a chunk of the state vector */
|
/* allocate a chunk of the state vector */
|
||||||
here->BSIM4v4states = *states;
|
here->BSIM4v4states = *states;
|
||||||
*states += BSIM4v4numStates;
|
*states += BSIM4v4numStates;
|
||||||
}
|
}
|
||||||
|
|
@ -1594,7 +1586,7 @@ JOB *job;
|
||||||
if (!here->BSIM4v4geoModGiven)
|
if (!here->BSIM4v4geoModGiven)
|
||||||
here->BSIM4v4geoMod = model->BSIM4v4geoMod;
|
here->BSIM4v4geoMod = model->BSIM4v4geoMod;
|
||||||
if (!here->BSIM4v4rgeoModGiven)
|
if (!here->BSIM4v4rgeoModGiven)
|
||||||
here->BSIM4v4rgeoMod = model->BSIM4v4rgeomod;
|
here->BSIM4v4rgeoMod = 0.0;
|
||||||
if (!here->BSIM4v4trnqsModGiven)
|
if (!here->BSIM4v4trnqsModGiven)
|
||||||
here->BSIM4v4trnqsMod = model->BSIM4v4trnqsMod;
|
here->BSIM4v4trnqsMod = model->BSIM4v4trnqsMod;
|
||||||
else if ((here->BSIM4v4trnqsMod != 0) && (here->BSIM4v4trnqsMod != 1))
|
else if ((here->BSIM4v4trnqsMod != 0) && (here->BSIM4v4trnqsMod != 1))
|
||||||
|
|
|
||||||
|
|
@ -1373,21 +1373,9 @@ typedef struct sBSIM4v4model
|
||||||
double BSIM4v4af;
|
double BSIM4v4af;
|
||||||
double BSIM4v4kf;
|
double BSIM4v4kf;
|
||||||
|
|
||||||
int BSIM4v4rgeomod;
|
|
||||||
|
|
||||||
/* strain parameters */
|
|
||||||
double BSIM4v4stimod;
|
|
||||||
double BSIM4v4sa0;
|
|
||||||
double BSIM4v4sb0;
|
|
||||||
|
|
||||||
struct bsim4SizeDependParam *pSizeDependParamKnot;
|
struct bsim4SizeDependParam *pSizeDependParamKnot;
|
||||||
|
|
||||||
/* Flags */
|
/* Flags */
|
||||||
unsigned BSIM4v4rgeomodGiven :1;
|
|
||||||
unsigned BSIM4v4stimodGiven :1;
|
|
||||||
unsigned BSIM4v4sa0Given :1;
|
|
||||||
unsigned BSIM4v4sb0Given :1;
|
|
||||||
|
|
||||||
unsigned BSIM4v4mobModGiven :1;
|
unsigned BSIM4v4mobModGiven :1;
|
||||||
unsigned BSIM4v4binUnitGiven :1;
|
unsigned BSIM4v4binUnitGiven :1;
|
||||||
unsigned BSIM4v4capModGiven :1;
|
unsigned BSIM4v4capModGiven :1;
|
||||||
|
|
@ -2847,12 +2835,6 @@ typedef struct sBSIM4v4model
|
||||||
#define BSIM4v4_MOD_VTSSWGS 922
|
#define BSIM4v4_MOD_VTSSWGS 922
|
||||||
#define BSIM4v4_MOD_VTSSWGD 923
|
#define BSIM4v4_MOD_VTSSWGD 923
|
||||||
|
|
||||||
#define BSIM4v4_MOD_STIMOD 930
|
|
||||||
#define BSIM4v4_MOD_SA0 931
|
|
||||||
#define BSIM4v4_MOD_SB0 932
|
|
||||||
|
|
||||||
#define BSIM4v4_MOD_RGEOMOD 933
|
|
||||||
|
|
||||||
/* device questions */
|
/* device questions */
|
||||||
#define BSIM4v4_DNODE 945
|
#define BSIM4v4_DNODE 945
|
||||||
#define BSIM4v4_GNODEEXT 946
|
#define BSIM4v4_GNODEEXT 946
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,6 @@ OP( "gtau", BSIM4v5_GTAU, IF_REAL, "Gtau"),
|
||||||
};
|
};
|
||||||
|
|
||||||
IFparm BSIM4v5mPTable[] = { /* model parameters */
|
IFparm BSIM4v5mPTable[] = { /* model parameters */
|
||||||
IOP( "rgeomod", BSIM4v5_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"),
|
|
||||||
IOP( "capmod", BSIM4v5_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"),
|
IOP( "capmod", BSIM4v5_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"),
|
||||||
IOP( "diomod", BSIM4v5_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"),
|
IOP( "diomod", BSIM4v5_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"),
|
||||||
IOP( "rdsmod", BSIM4v5_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"),
|
IOP( "rdsmod", BSIM4v5_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"),
|
||||||
|
|
@ -890,10 +889,6 @@ IOP( "ef", BSIM4v5_MOD_EF, IF_REAL, "Flicker noise frequency exponent"),
|
||||||
IOP( "af", BSIM4v5_MOD_AF, IF_REAL, "Flicker noise exponent"),
|
IOP( "af", BSIM4v5_MOD_AF, IF_REAL, "Flicker noise exponent"),
|
||||||
IOP( "kf", BSIM4v5_MOD_KF, IF_REAL, "Flicker noise coefficient"),
|
IOP( "kf", BSIM4v5_MOD_KF, IF_REAL, "Flicker noise coefficient"),
|
||||||
|
|
||||||
IOP( "stimod", BSIM4v5_MOD_STIMOD, IF_REAL, "Stress effect model selector"),
|
|
||||||
IOP( "sa0", BSIM4v5_MOD_SA0, IF_REAL, "Distance between OD edge to poly of one side"),
|
|
||||||
IOP( "sb0", BSIM4v5_MOD_SB0, IF_REAL, "Distance between OD edge to poly of other side"),
|
|
||||||
|
|
||||||
IP( "nmos", BSIM4v5_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"),
|
IP( "nmos", BSIM4v5_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"),
|
||||||
IP( "pmos", BSIM4v5_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"),
|
IP( "pmos", BSIM4v5_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -780,27 +780,27 @@ FILE *fplog;
|
||||||
{
|
{
|
||||||
if (model->BSIM4v5scref <= 0.0)
|
if (model->BSIM4v5scref <= 0.0)
|
||||||
{ fprintf(fplog, "Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v5scref);
|
{ fprintf(fplog, "Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v5scref);
|
||||||
//printf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v5scref);
|
printf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v5scref);
|
||||||
model->BSIM4v5scref = 1e-6;
|
model->BSIM4v5scref = 1e-6;
|
||||||
}
|
}
|
||||||
if (here->BSIM4v5sca < 0.0)
|
if (here->BSIM4v5sca < 0.0)
|
||||||
{ fprintf(fplog, "Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v5sca);
|
{ fprintf(fplog, "Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v5sca);
|
||||||
//printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v5sca);
|
printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v5sca);
|
||||||
here->BSIM4v5sca = 0.0;
|
here->BSIM4v5sca = 0.0;
|
||||||
}
|
}
|
||||||
if (here->BSIM4v5scb < 0.0)
|
if (here->BSIM4v5scb < 0.0)
|
||||||
{ fprintf(fplog, "Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v5scb);
|
{ fprintf(fplog, "Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v5scb);
|
||||||
//printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v5scb);
|
printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v5scb);
|
||||||
here->BSIM4v5scb = 0.0;
|
here->BSIM4v5scb = 0.0;
|
||||||
}
|
}
|
||||||
if (here->BSIM4v5scc < 0.0)
|
if (here->BSIM4v5scc < 0.0)
|
||||||
{ fprintf(fplog, "Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v5scc);
|
{ fprintf(fplog, "Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v5scc);
|
||||||
//printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v5scc);
|
printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v5scc);
|
||||||
here->BSIM4v5scc = 0.0;
|
here->BSIM4v5scc = 0.0;
|
||||||
}
|
}
|
||||||
if (here->BSIM4v5sc < 0.0)
|
if (here->BSIM4v5sc < 0.0)
|
||||||
{ fprintf(fplog, "Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v5sc);
|
{ fprintf(fplog, "Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v5sc);
|
||||||
//printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v5sc);
|
printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v5sc);
|
||||||
here->BSIM4v5sc = 0.0;
|
here->BSIM4v5sc = 0.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2247,18 +2247,6 @@ IFvalue *value;
|
||||||
case BSIM4v5_MOD_KF:
|
case BSIM4v5_MOD_KF:
|
||||||
value->rValue = model->BSIM4v5kf;
|
value->rValue = model->BSIM4v5kf;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4v5_MOD_STIMOD:
|
|
||||||
value->rValue = model->BSIM4v5stimod;
|
|
||||||
return(OK);
|
|
||||||
case BSIM4v5_MOD_RGEOMOD:
|
|
||||||
value->rValue = model->BSIM4v5rgeomod;
|
|
||||||
return(OK);
|
|
||||||
case BSIM4v5_MOD_SA0:
|
|
||||||
value->rValue = model->BSIM4v5sa0;
|
|
||||||
return(OK);
|
|
||||||
case BSIM4v5_MOD_SB0:
|
|
||||||
value->rValue = model->BSIM4v5sb0;
|
|
||||||
return(OK);
|
|
||||||
default:
|
default:
|
||||||
return(E_BADPARM);
|
return(E_BADPARM);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3056,22 +3056,6 @@ GENmodel *inMod;
|
||||||
mod->BSIM4v5kf = value->rValue;
|
mod->BSIM4v5kf = value->rValue;
|
||||||
mod->BSIM4v5kfGiven = TRUE;
|
mod->BSIM4v5kfGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case BSIM4v5_MOD_STIMOD :
|
|
||||||
mod->BSIM4v5stimod = value->rValue;
|
|
||||||
mod->BSIM4v5stimodGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v5_MOD_RGEOMOD :
|
|
||||||
mod->BSIM4v5rgeomod = value->rValue;
|
|
||||||
mod->BSIM4v5rgeomodGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v5_MOD_SA0 :
|
|
||||||
mod->BSIM4v5sa0 = value->rValue;
|
|
||||||
mod->BSIM4v5sa0Given = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v5_MOD_SB0 :
|
|
||||||
mod->BSIM4v5sb0 = value->rValue;
|
|
||||||
mod->BSIM4v5sb0Given = TRUE;
|
|
||||||
break;
|
|
||||||
case BSIM4v5_MOD_NMOS :
|
case BSIM4v5_MOD_NMOS :
|
||||||
if(value->iValue) {
|
if(value->iValue) {
|
||||||
mod->BSIM4v5type = 1;
|
mod->BSIM4v5type = 1;
|
||||||
|
|
|
||||||
|
|
@ -1561,14 +1561,6 @@ JOB *job;
|
||||||
model->BSIM4v5af = 1.0;
|
model->BSIM4v5af = 1.0;
|
||||||
if (!model->BSIM4v5kfGiven)
|
if (!model->BSIM4v5kfGiven)
|
||||||
model->BSIM4v5kf = 0.0;
|
model->BSIM4v5kf = 0.0;
|
||||||
if (!model->BSIM4v5stimodGiven)
|
|
||||||
model->BSIM4v5stimod = 0.0;
|
|
||||||
if (!model->BSIM4v5rgeomodGiven)
|
|
||||||
model->BSIM4v5rgeomod = 0;
|
|
||||||
if (!model->BSIM4v5sa0Given)
|
|
||||||
model->BSIM4v5sa0 = 0.0;
|
|
||||||
if (!model->BSIM4v5sb0Given)
|
|
||||||
model->BSIM4v5sb0 = 0.0;
|
|
||||||
|
|
||||||
/* stress effect */
|
/* stress effect */
|
||||||
if (!model->BSIM4v5sarefGiven)
|
if (!model->BSIM4v5sarefGiven)
|
||||||
|
|
@ -1663,9 +1655,9 @@ JOB *job;
|
||||||
|
|
||||||
for (here = model->BSIM4v5instances; here != NULL ;
|
for (here = model->BSIM4v5instances; here != NULL ;
|
||||||
here=here->BSIM4v5nextInstance)
|
here=here->BSIM4v5nextInstance)
|
||||||
{
|
{
|
||||||
if (here->BSIM4v5owner == ARCHme) {
|
if (here->BSIM4v5owner == ARCHme) {
|
||||||
/* allocate a chunk of the state vector */
|
/* allocate a chunk of the state vector */
|
||||||
here->BSIM4v5states = *states;
|
here->BSIM4v5states = *states;
|
||||||
*states += BSIM4v5numStates;
|
*states += BSIM4v5numStates;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -343,29 +343,29 @@ int Size_Not_Found, i;
|
||||||
/* loop through all the instances of the model */
|
/* loop through all the instances of the model */
|
||||||
for (here = model->BSIM4v5instances; here != NULL;
|
for (here = model->BSIM4v5instances; here != NULL;
|
||||||
here = here->BSIM4v5nextInstance)
|
here = here->BSIM4v5nextInstance)
|
||||||
{ if (here->BSIM4v5owner != ARCHme) continue;
|
{ if (here->BSIM4v5owner != ARCHme) continue;
|
||||||
pSizeDependParamKnot = model->pSizeDependParamKnot;
|
pSizeDependParamKnot = model->pSizeDependParamKnot;
|
||||||
Size_Not_Found = 1;
|
Size_Not_Found = 1;
|
||||||
while ((pSizeDependParamKnot != NULL) && Size_Not_Found)
|
while ((pSizeDependParamKnot != NULL) && Size_Not_Found)
|
||||||
{ if ((here->BSIM4v5l == pSizeDependParamKnot->Length)
|
{ if ((here->BSIM4v5l == pSizeDependParamKnot->Length)
|
||||||
&& (here->BSIM4v5w == pSizeDependParamKnot->Width)
|
&& (here->BSIM4v5w == pSizeDependParamKnot->Width)
|
||||||
&& (here->BSIM4v5nf == pSizeDependParamKnot->NFinger))
|
&& (here->BSIM4v5nf == pSizeDependParamKnot->NFinger))
|
||||||
{ Size_Not_Found = 0;
|
{ Size_Not_Found = 0;
|
||||||
here->pParam = pSizeDependParamKnot;
|
here->pParam = pSizeDependParamKnot;
|
||||||
pParam = here->pParam; /*bug-fix */
|
pParam = here->pParam; /*bug-fix */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ pLastKnot = pSizeDependParamKnot;
|
{ pLastKnot = pSizeDependParamKnot;
|
||||||
pSizeDependParamKnot = pSizeDependParamKnot->pNext;
|
pSizeDependParamKnot = pSizeDependParamKnot->pNext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* stress effect */
|
/* stress effect */
|
||||||
Ldrn = here->BSIM4v5l;
|
Ldrn = here->BSIM4v5l;
|
||||||
Wdrn = here->BSIM4v5w / here->BSIM4v5nf;
|
Wdrn = here->BSIM4v5w / here->BSIM4v5nf;
|
||||||
|
|
||||||
if (Size_Not_Found)
|
if (Size_Not_Found)
|
||||||
{ pParam = (struct bsim4v5SizeDependParam *)tmalloc(
|
{ pParam = (struct bsim4v5SizeDependParam *)tmalloc(
|
||||||
sizeof(struct bsim4v5SizeDependParam));
|
sizeof(struct bsim4v5SizeDependParam));
|
||||||
if (pLastKnot == NULL)
|
if (pLastKnot == NULL)
|
||||||
model->pSizeDependParamKnot = pParam;
|
model->pSizeDependParamKnot = pParam;
|
||||||
|
|
|
||||||
|
|
@ -1470,13 +1470,6 @@ typedef struct sBSIM4v5model
|
||||||
double BSIM4v5af;
|
double BSIM4v5af;
|
||||||
double BSIM4v5kf;
|
double BSIM4v5kf;
|
||||||
|
|
||||||
int BSIM4v5rgeomod;
|
|
||||||
|
|
||||||
/* strain parameters */
|
|
||||||
double BSIM4v5stimod;
|
|
||||||
double BSIM4v5sa0;
|
|
||||||
double BSIM4v5sb0;
|
|
||||||
|
|
||||||
struct bsim4v5SizeDependParam *pSizeDependParamKnot;
|
struct bsim4v5SizeDependParam *pSizeDependParamKnot;
|
||||||
|
|
||||||
/* Flags */
|
/* Flags */
|
||||||
|
|
@ -3050,12 +3043,6 @@ typedef struct sBSIM4v5model
|
||||||
#define BSIM4v5_MOD_PUP 926
|
#define BSIM4v5_MOD_PUP 926
|
||||||
#define BSIM4v5_MOD_PLP 927
|
#define BSIM4v5_MOD_PLP 927
|
||||||
|
|
||||||
#define BSIM4v5_MOD_STIMOD 930
|
|
||||||
#define BSIM4v5_MOD_SA0 931
|
|
||||||
#define BSIM4v5_MOD_SB0 932
|
|
||||||
|
|
||||||
#define BSIM4v5_MOD_RGEOMOD 933
|
|
||||||
|
|
||||||
/* device questions */
|
/* device questions */
|
||||||
#define BSIM4v5_DNODE 945
|
#define BSIM4v5_DNODE 945
|
||||||
#define BSIM4v5_GNODEEXT 946
|
#define BSIM4v5_GNODEEXT 946
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue