add nqsmod as model parameter for bsim3

This commit is contained in:
dwarning 2013-05-23 23:13:10 +02:00
parent 9636d53ec4
commit 27ae680b99
10 changed files with 63 additions and 19 deletions

View File

@ -66,6 +66,7 @@ IFparm BSIM3mPTable[] = { /* model parameters */
IOP( "capmod", BSIM3_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"),
IOP( "mobmod", BSIM3_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"),
IOP( "noimod", BSIM3_MOD_NOIMOD, IF_INTEGER, "Noise model selector"),
IOP( "nqsmod", BSIM3_MOD_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"),
IOP( "acnqsmod", BSIM3_MOD_ACNQSMOD, IF_INTEGER, "AC NQS model selector"),
IOP( "acm", BSIM3_MOD_ACMMOD, IF_INTEGER, "Area calculation method selector"),
IOP( "calcacm", BSIM3_MOD_CALCACM, IF_INTEGER, "Area calculation method ACM=12"),

View File

@ -43,6 +43,9 @@ IFvalue *value)
case BSIM3_MOD_NOIMOD:
value->iValue = model->BSIM3noiMod;
return(OK);
case BSIM3_MOD_NQSMOD:
value->iValue = model->BSIM3nqsMod;
return(OK);
case BSIM3_MOD_ACNQSMOD:
value->iValue = model->BSIM3acnqsMod;
return(OK);

View File

@ -51,11 +51,15 @@ GENmodel *inMod)
mod->BSIM3noiMod = value->iValue;
mod->BSIM3noiModGiven = TRUE;
break;
case BSIM3_MOD_NQSMOD :
mod->BSIM3nqsMod = value->iValue;
mod->BSIM3nqsModGiven = TRUE;
break;
case BSIM3_MOD_ACNQSMOD :
mod->BSIM3acnqsMod = value->iValue;
mod->BSIM3acnqsModGiven = TRUE;
break;
case BSIM3_MOD_VERSION :
case BSIM3_MOD_VERSION :
mod->BSIM3version = value->sValue;
mod->BSIM3versionGiven = TRUE;
break;

View File

@ -67,6 +67,12 @@ BSIM3instance **InstArray;
model->BSIM3calcacm = 0;
if (!model->BSIM3noiModGiven)
model->BSIM3noiMod = 1;
if (!model->BSIM3nqsModGiven)
model->BSIM3nqsMod = 0;
else if ((model->BSIM3nqsMod != 0) && (model->BSIM3nqsMod != 1))
{ model->BSIM3nqsMod = 0;
printf("Warning: nqsMod has been set to its default value: 0.\n");
}
if (!model->BSIM3acnqsModGiven)
model->BSIM3acnqsMod = 0;
else if ((model->BSIM3acnqsMod != 0) && (model->BSIM3acnqsMod != 1))
@ -934,7 +940,12 @@ BSIM3instance **InstArray;
if (!here->BSIM3wGiven)
here->BSIM3w = 5.0e-6;
if (!here->BSIM3nqsModGiven)
here->BSIM3nqsMod = 0;
here->BSIM3nqsMod = model->BSIM3nqsMod;
else if ((here->BSIM3nqsMod != 0) && (here->BSIM3nqsMod != 1))
{ here->BSIM3nqsMod = model->BSIM3nqsMod;
printf("Warning: nqsMod has been set to its global value %d.\n",
model->BSIM3nqsMod);
}
if (!here->BSIM3acnqsModGiven)
here->BSIM3acnqsMod = model->BSIM3acnqsMod;
else if ((here->BSIM3acnqsMod != 0) && (here->BSIM3acnqsMod != 1))

View File

@ -410,6 +410,7 @@ typedef struct sBSIM3model
int BSIM3acmMod;
int BSIM3calcacm;
int BSIM3noiMod;
int BSIM3nqsMod;
int BSIM3acnqsMod;
int BSIM3binUnit;
int BSIM3paramChk;
@ -876,6 +877,7 @@ typedef struct sBSIM3model
unsigned BSIM3calcacmGiven :1;
unsigned BSIM3paramChkGiven :1;
unsigned BSIM3noiModGiven :1;
unsigned BSIM3nqsModGiven :1;
unsigned BSIM3acnqsModGiven :1;
unsigned BSIM3typeGiven :1;
unsigned BSIM3toxGiven :1;
@ -1449,7 +1451,8 @@ typedef struct sBSIM3model
#define BSIM3_MOD_TPBSWG 207
#define BSIM3_MOD_VOFFCV 208
#define BSIM3_MOD_LINTNOI 209
#define BSIM3_MOD_ACNQSMOD 210
#define BSIM3_MOD_NQSMOD 210
#define BSIM3_MOD_ACNQSMOD 211
/* Length dependence */
#define BSIM3_MOD_LCDSC 251

View File

@ -66,6 +66,7 @@ IFparm BSIM3v32mPTable[] = { /* model parameters */
IOP( "capmod", BSIM3v32_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"),
IOP( "mobmod", BSIM3v32_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"),
IOP( "noimod", BSIM3v32_MOD_NOIMOD, IF_INTEGER, "Noise model selector"),
IOP( "nqsmod", BSIM3v32_MOD_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"),
IOP( "acm", BSIM3v32_MOD_ACMMOD, IF_INTEGER, "Area calculation method selector"),
IOP( "calcacm", BSIM3v32_MOD_CALCACM, IF_INTEGER, "Area calculation method ACM=12"),
IOP( "paramchk", BSIM3v32_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"),

View File

@ -40,6 +40,9 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case BSIM3v32_MOD_NOIMOD:
value->iValue = model->BSIM3v32noiMod;
return(OK);
case BSIM3v32_MOD_NQSMOD:
value->iValue = model->BSIM3v32nqsMod;
return(OK);
case BSIM3v32_MOD_ACMMOD:
value->iValue = model->BSIM3v32acmMod;
return(OK);

View File

@ -49,6 +49,10 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32noiMod = value->iValue;
mod->BSIM3v32noiModGiven = TRUE;
break;
case BSIM3v32_MOD_NQSMOD :
mod->BSIM3v32nqsMod = value->iValue;
mod->BSIM3v32nqsModGiven = TRUE;
break;
case BSIM3v32_MOD_VERSION :
mod->BSIM3v32version = value->sValue;
mod->BSIM3v32versionGiven = TRUE;

View File

@ -58,6 +58,12 @@ IFuid tmpName;
model->BSIM3v32calcacm = 0;
if (!model->BSIM3v32noiModGiven)
model->BSIM3v32noiMod = 1;
if (!model->BSIM3v32nqsModGiven)
model->BSIM3v32nqsMod = 0;
else if ((model->BSIM3v32nqsMod != 0) && (model->BSIM3v32nqsMod != 1))
{ model->BSIM3v32nqsMod = 0;
printf("Warning: nqsMod has been set to its default value: 0.\n");
}
/* If the user does not provide the model revision,
* we always choose the most recent.
@ -942,7 +948,12 @@ IFuid tmpName;
if (!here->BSIM3v32wGiven)
here->BSIM3v32w = 5.0e-6;
if (!here->BSIM3v32nqsModGiven)
here->BSIM3v32nqsMod = 0;
here->BSIM3v32nqsMod = model->BSIM3v32nqsMod;
else if ((here->BSIM3v32nqsMod != 0) && (here->BSIM3v32nqsMod != 1))
{ here->BSIM3v32nqsMod = model->BSIM3v32nqsMod;
printf("Warning: nqsMod has been set to its global value %d.\n",
model->BSIM3v32nqsMod);
}
if (!here->BSIM3v32geoGiven)
here->BSIM3v32geo = 0;

View File

@ -365,6 +365,7 @@ typedef struct sBSIM3v32model
int BSIM3v32acmMod;
int BSIM3v32calcacm;
int BSIM3v32noiMod;
int BSIM3v32nqsMod;
int BSIM3v32binUnit;
int BSIM3v32paramChk;
char *BSIM3v32version;
@ -831,6 +832,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32calcacmGiven :1;
unsigned BSIM3v32paramChkGiven :1;
unsigned BSIM3v32noiModGiven :1;
unsigned BSIM3v32nqsModGiven :1;
unsigned BSIM3v32typeGiven :1;
unsigned BSIM3v32toxGiven :1;
unsigned BSIM3v32versionGiven :1;
@ -1292,22 +1294,23 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_CALCACM 102
#define BSIM3v32_MOD_MOBMOD 103
#define BSIM3v32_MOD_NOIMOD 104
#define BSIM3v32_MOD_NQSMOD 105
#define BSIM3v32_MOD_TOX 105
#define BSIM3v32_MOD_TOX 106
#define BSIM3v32_MOD_CDSC 106
#define BSIM3v32_MOD_CDSCB 107
#define BSIM3v32_MOD_CIT 108
#define BSIM3v32_MOD_NFACTOR 109
#define BSIM3v32_MOD_XJ 110
#define BSIM3v32_MOD_VSAT 111
#define BSIM3v32_MOD_AT 112
#define BSIM3v32_MOD_A0 113
#define BSIM3v32_MOD_A1 114
#define BSIM3v32_MOD_A2 115
#define BSIM3v32_MOD_KETA 116
#define BSIM3v32_MOD_NSUB 117
#define BSIM3v32_MOD_NPEAK 118
#define BSIM3v32_MOD_CDSC 107
#define BSIM3v32_MOD_CDSCB 108
#define BSIM3v32_MOD_CIT 109
#define BSIM3v32_MOD_NFACTOR 110
#define BSIM3v32_MOD_XJ 111
#define BSIM3v32_MOD_VSAT 112
#define BSIM3v32_MOD_AT 113
#define BSIM3v32_MOD_A0 114
#define BSIM3v32_MOD_A1 115
#define BSIM3v32_MOD_A2 116
#define BSIM3v32_MOD_KETA 117
#define BSIM3v32_MOD_NSUB 118
#define BSIM3v32_MOD_NPEAK 119
#define BSIM3v32_MOD_NGATE 120
#define BSIM3v32_MOD_GAMMA1 121
#define BSIM3v32_MOD_GAMMA2 122
@ -1316,7 +1319,7 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_VBM 125
#define BSIM3v32_MOD_XT 126
#define BSIM3v32_MOD_XT 128
#define BSIM3v32_MOD_K1 129
#define BSIM3v32_MOD_KT1 130
#define BSIM3v32_MOD_KT1L 131