From 9e24a8ac83edada2f41f97d1374db4f7ba573fa7 Mon Sep 17 00:00:00 2001 From: dwarning Date: Wed, 26 Nov 2008 21:12:34 +0000 Subject: [PATCH] no stimod switch as model parameter --- ChangeLog | 8 ++++- src/spicelib/devices/bsim4v4/b4v4.c | 5 --- src/spicelib/devices/bsim4v4/b4v4check.c | 6 ++-- src/spicelib/devices/bsim4v4/b4v4mask.c | 12 ------- src/spicelib/devices/bsim4v4/b4v4mpar.c | 16 ---------- src/spicelib/devices/bsim4v4/b4v4set.c | 16 +++------- src/spicelib/devices/bsim4v4/bsim4v4def.h | 18 ----------- src/spicelib/devices/bsim4v5/b4v5.c | 5 --- src/spicelib/devices/bsim4v5/b4v5check.c | 10 +++--- src/spicelib/devices/bsim4v5/b4v5mask.c | 12 ------- src/spicelib/devices/bsim4v5/b4v5mpar.c | 16 ---------- src/spicelib/devices/bsim4v5/b4v5set.c | 14 ++------- src/spicelib/devices/bsim4v5/b4v5temp.c | 38 +++++++++++------------ src/spicelib/devices/bsim4v5/bsim4v5def.h | 13 -------- 14 files changed, 40 insertions(+), 149 deletions(-) diff --git a/ChangeLog b/ChangeLog index f98aa7e3b..0981916bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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) * b3soi*ld.c: _isnan defined for _MSC_VER * main.c, cmath2.c, xpressn.c: random, srandom defined extern for _MSC_VER diff --git a/src/spicelib/devices/bsim4v4/b4v4.c b/src/spicelib/devices/bsim4v4/b4v4.c index fd0f5b316..09b4a100a 100644 --- a/src/spicelib/devices/bsim4v4/b4v4.c +++ b/src/spicelib/devices/bsim4v4/b4v4.c @@ -93,7 +93,6 @@ OP( "qinv", BSIM4v4_QINV, IF_REAL, "Qinversion"), }; 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( "diomod", BSIM4v4_MOD_DIOMOD, IF_INTEGER, "Diode IV 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( "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( "pmos", BSIM4v4_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; diff --git a/src/spicelib/devices/bsim4v4/b4v4check.c b/src/spicelib/devices/bsim4v4/b4v4check.c index 1298601b1..50c8b692d 100644 --- a/src/spicelib/devices/bsim4v4/b4v4check.c +++ b/src/spicelib/devices/bsim4v4/b4v4check.c @@ -444,12 +444,11 @@ FILE *fplog; printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v4cdscd); } /* Check DIBL parameters */ -/* if (here->BSIM4v4eta0 < 0.0) + if (here->BSIM4v4eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", here->BSIM4v4eta0); printf("Warning: Eta0 = %g is negative.\n", here->BSIM4v4eta0); } -*/ /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4v4b1 + pParam->BSIM4v4weff)) > 10.0) @@ -551,12 +550,11 @@ FILE *fplog; 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", pParam->BSIM4v4pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v4pdibl2); } -*/ /* Check stress effect parameters */ if((here->BSIM4v4sa > 0.0) && (here->BSIM4v4sb > 0.0) && diff --git a/src/spicelib/devices/bsim4v4/b4v4mask.c b/src/spicelib/devices/bsim4v4/b4v4mask.c index 137c0925b..9cf936eb2 100644 --- a/src/spicelib/devices/bsim4v4/b4v4mask.c +++ b/src/spicelib/devices/bsim4v4/b4v4mask.c @@ -1957,18 +1957,6 @@ IFvalue *value; case BSIM4v4_MOD_KF: value->rValue = model->BSIM4v4kf; 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: return(E_BADPARM); } diff --git a/src/spicelib/devices/bsim4v4/b4v4mpar.c b/src/spicelib/devices/bsim4v4/b4v4mpar.c index 656e7ded1..8ee3895aa 100644 --- a/src/spicelib/devices/bsim4v4/b4v4mpar.c +++ b/src/spicelib/devices/bsim4v4/b4v4mpar.c @@ -2780,22 +2780,6 @@ GENmodel *inMod; mod->BSIM4v4kf = value->rValue; mod->BSIM4v4kfGiven = TRUE; 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 : if(value->iValue) { mod->BSIM4v4type = 1; diff --git a/src/spicelib/devices/bsim4v4/b4v4set.c b/src/spicelib/devices/bsim4v4/b4v4set.c index 74f5ece5b..0a7eb2e76 100644 --- a/src/spicelib/devices/bsim4v4/b4v4set.c +++ b/src/spicelib/devices/bsim4v4/b4v4set.c @@ -1452,14 +1452,6 @@ JOB *job; model->BSIM4v4af = 1.0; if (!model->BSIM4v4kfGiven) 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 */ if (!model->BSIM4v4sarefGiven) @@ -1516,9 +1508,9 @@ JOB *job; for (here = model->BSIM4v4instances; here != NULL ; here=here->BSIM4v4nextInstance) - { - if (here->BSIM4v4owner == ARCHme) { - /* allocate a chunk of the state vector */ + { + if (here->BSIM4v4owner == ARCHme) { + /* allocate a chunk of the state vector */ here->BSIM4v4states = *states; *states += BSIM4v4numStates; } @@ -1594,7 +1586,7 @@ JOB *job; if (!here->BSIM4v4geoModGiven) here->BSIM4v4geoMod = model->BSIM4v4geoMod; if (!here->BSIM4v4rgeoModGiven) - here->BSIM4v4rgeoMod = model->BSIM4v4rgeomod; + here->BSIM4v4rgeoMod = 0.0; if (!here->BSIM4v4trnqsModGiven) here->BSIM4v4trnqsMod = model->BSIM4v4trnqsMod; else if ((here->BSIM4v4trnqsMod != 0) && (here->BSIM4v4trnqsMod != 1)) diff --git a/src/spicelib/devices/bsim4v4/bsim4v4def.h b/src/spicelib/devices/bsim4v4/bsim4v4def.h index 7829005a6..22428a099 100644 --- a/src/spicelib/devices/bsim4v4/bsim4v4def.h +++ b/src/spicelib/devices/bsim4v4/bsim4v4def.h @@ -1373,21 +1373,9 @@ typedef struct sBSIM4v4model double BSIM4v4af; double BSIM4v4kf; - int BSIM4v4rgeomod; - - /* strain parameters */ - double BSIM4v4stimod; - double BSIM4v4sa0; - double BSIM4v4sb0; - struct bsim4SizeDependParam *pSizeDependParamKnot; /* Flags */ - unsigned BSIM4v4rgeomodGiven :1; - unsigned BSIM4v4stimodGiven :1; - unsigned BSIM4v4sa0Given :1; - unsigned BSIM4v4sb0Given :1; - unsigned BSIM4v4mobModGiven :1; unsigned BSIM4v4binUnitGiven :1; unsigned BSIM4v4capModGiven :1; @@ -2847,12 +2835,6 @@ typedef struct sBSIM4v4model #define BSIM4v4_MOD_VTSSWGS 922 #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 */ #define BSIM4v4_DNODE 945 #define BSIM4v4_GNODEEXT 946 diff --git a/src/spicelib/devices/bsim4v5/b4v5.c b/src/spicelib/devices/bsim4v5/b4v5.c index aca131e46..3c57c8d12 100644 --- a/src/spicelib/devices/bsim4v5/b4v5.c +++ b/src/spicelib/devices/bsim4v5/b4v5.c @@ -106,7 +106,6 @@ OP( "gtau", BSIM4v5_GTAU, IF_REAL, "Gtau"), }; 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( "diomod", BSIM4v5_MOD_DIOMOD, IF_INTEGER, "Diode IV 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( "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( "pmos", BSIM4v5_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; diff --git a/src/spicelib/devices/bsim4v5/b4v5check.c b/src/spicelib/devices/bsim4v5/b4v5check.c index 46554d656..2bf9e4130 100644 --- a/src/spicelib/devices/bsim4v5/b4v5check.c +++ b/src/spicelib/devices/bsim4v5/b4v5check.c @@ -780,27 +780,27 @@ FILE *fplog; { if (model->BSIM4v5scref <= 0.0) { 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; } if (here->BSIM4v5sca < 0.0) { 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; } if (here->BSIM4v5scb < 0.0) { 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; } if (here->BSIM4v5scc < 0.0) { 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; } if (here->BSIM4v5sc < 0.0) { 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; } } diff --git a/src/spicelib/devices/bsim4v5/b4v5mask.c b/src/spicelib/devices/bsim4v5/b4v5mask.c index d99d6d3e3..9676a67f2 100644 --- a/src/spicelib/devices/bsim4v5/b4v5mask.c +++ b/src/spicelib/devices/bsim4v5/b4v5mask.c @@ -2247,18 +2247,6 @@ IFvalue *value; case BSIM4v5_MOD_KF: value->rValue = model->BSIM4v5kf; 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: return(E_BADPARM); } diff --git a/src/spicelib/devices/bsim4v5/b4v5mpar.c b/src/spicelib/devices/bsim4v5/b4v5mpar.c index 1c9ece777..e98992dc3 100644 --- a/src/spicelib/devices/bsim4v5/b4v5mpar.c +++ b/src/spicelib/devices/bsim4v5/b4v5mpar.c @@ -3056,22 +3056,6 @@ GENmodel *inMod; mod->BSIM4v5kf = value->rValue; mod->BSIM4v5kfGiven = TRUE; 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 : if(value->iValue) { mod->BSIM4v5type = 1; diff --git a/src/spicelib/devices/bsim4v5/b4v5set.c b/src/spicelib/devices/bsim4v5/b4v5set.c index 41b48284f..f8e48fb29 100644 --- a/src/spicelib/devices/bsim4v5/b4v5set.c +++ b/src/spicelib/devices/bsim4v5/b4v5set.c @@ -1561,14 +1561,6 @@ JOB *job; model->BSIM4v5af = 1.0; if (!model->BSIM4v5kfGiven) 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 */ if (!model->BSIM4v5sarefGiven) @@ -1663,9 +1655,9 @@ JOB *job; for (here = model->BSIM4v5instances; here != NULL ; here=here->BSIM4v5nextInstance) - { - if (here->BSIM4v5owner == ARCHme) { - /* allocate a chunk of the state vector */ + { + if (here->BSIM4v5owner == ARCHme) { + /* allocate a chunk of the state vector */ here->BSIM4v5states = *states; *states += BSIM4v5numStates; } diff --git a/src/spicelib/devices/bsim4v5/b4v5temp.c b/src/spicelib/devices/bsim4v5/b4v5temp.c index 55e99c9e9..4123a3106 100644 --- a/src/spicelib/devices/bsim4v5/b4v5temp.c +++ b/src/spicelib/devices/bsim4v5/b4v5temp.c @@ -343,29 +343,29 @@ int Size_Not_Found, i; /* loop through all the instances of the model */ for (here = model->BSIM4v5instances; here != NULL; here = here->BSIM4v5nextInstance) - { if (here->BSIM4v5owner != ARCHme) continue; - pSizeDependParamKnot = model->pSizeDependParamKnot; - Size_Not_Found = 1; - while ((pSizeDependParamKnot != NULL) && Size_Not_Found) - { if ((here->BSIM4v5l == pSizeDependParamKnot->Length) - && (here->BSIM4v5w == pSizeDependParamKnot->Width) - && (here->BSIM4v5nf == pSizeDependParamKnot->NFinger)) + { if (here->BSIM4v5owner != ARCHme) continue; + pSizeDependParamKnot = model->pSizeDependParamKnot; + Size_Not_Found = 1; + while ((pSizeDependParamKnot != NULL) && Size_Not_Found) + { if ((here->BSIM4v5l == pSizeDependParamKnot->Length) + && (here->BSIM4v5w == pSizeDependParamKnot->Width) + && (here->BSIM4v5nf == pSizeDependParamKnot->NFinger)) { Size_Not_Found = 0; - here->pParam = pSizeDependParamKnot; - pParam = here->pParam; /*bug-fix */ - } - else - { pLastKnot = pSizeDependParamKnot; - pSizeDependParamKnot = pSizeDependParamKnot->pNext; - } + here->pParam = pSizeDependParamKnot; + pParam = here->pParam; /*bug-fix */ + } + else + { pLastKnot = pSizeDependParamKnot; + pSizeDependParamKnot = pSizeDependParamKnot->pNext; + } } - /* stress effect */ - Ldrn = here->BSIM4v5l; - Wdrn = here->BSIM4v5w / here->BSIM4v5nf; + /* stress effect */ + Ldrn = here->BSIM4v5l; + Wdrn = here->BSIM4v5w / here->BSIM4v5nf; - if (Size_Not_Found) - { pParam = (struct bsim4v5SizeDependParam *)tmalloc( + if (Size_Not_Found) + { pParam = (struct bsim4v5SizeDependParam *)tmalloc( sizeof(struct bsim4v5SizeDependParam)); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; diff --git a/src/spicelib/devices/bsim4v5/bsim4v5def.h b/src/spicelib/devices/bsim4v5/bsim4v5def.h index 87705012f..46fe77421 100644 --- a/src/spicelib/devices/bsim4v5/bsim4v5def.h +++ b/src/spicelib/devices/bsim4v5/bsim4v5def.h @@ -1470,13 +1470,6 @@ typedef struct sBSIM4v5model double BSIM4v5af; double BSIM4v5kf; - int BSIM4v5rgeomod; - - /* strain parameters */ - double BSIM4v5stimod; - double BSIM4v5sa0; - double BSIM4v5sb0; - struct bsim4v5SizeDependParam *pSizeDependParamKnot; /* Flags */ @@ -3050,12 +3043,6 @@ typedef struct sBSIM4v5model #define BSIM4v5_MOD_PUP 926 #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 */ #define BSIM4v5_DNODE 945 #define BSIM4v5_GNODEEXT 946