add `rgeomod' as model parameter for bsim4

This commit is contained in:
dwarning 2013-06-03 22:47:06 +02:00 committed by rlar
parent 2dcea6d7c1
commit e0a4373553
15 changed files with 125 additions and 54 deletions

View File

@ -124,6 +124,7 @@ IOP( "rbodymod", BSIM4_MOD_RBODYMOD, IF_INTEGER, "Distributed body R model selec
IOP( "rgatemod", BSIM4_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"),
IOP( "permod", BSIM4_MOD_PERMOD, IF_INTEGER, "Pd and Ps model selector"),
IOP( "geomod", BSIM4_MOD_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"),
IOP( "rgeomod", BSIM4_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"),
IOP( "fnoimod", BSIM4_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"),
IOP( "tnoimod", BSIM4_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"),
IOP( "mtrlmod", BSIM4_MOD_MTRLMOD, IF_INTEGER, "parameter for non-silicon substrate or metal gate selector"),

View File

@ -84,6 +84,9 @@ IFvalue *value)
case BSIM4_MOD_GEOMOD :
value->iValue = model->BSIM4geoMod;
return(OK);
case BSIM4_MOD_RGEOMOD :
value->iValue = model->BSIM4rgeoMod;
return(OK);
case BSIM4_MOD_MTRLMOD :
value->iValue = model->BSIM4mtrlMod;
return(OK);

View File

@ -88,6 +88,10 @@ GENmodel *inMod)
mod->BSIM4geoMod = value->iValue;
mod->BSIM4geoModGiven = TRUE;
break;
case BSIM4_MOD_RGEOMOD :
mod->BSIM4rgeoMod = value->iValue;
mod->BSIM4rgeoModGiven = TRUE;
break;
case BSIM4_MOD_FNOIMOD :
mod->BSIM4fnoiMod = value->iValue;
mod->BSIM4fnoiModGiven = TRUE;

View File

@ -139,6 +139,12 @@ BSIM4instance **InstArray;
if (!model->BSIM4geoModGiven)
model->BSIM4geoMod = 0;
if (!model->BSIM4rgeoModGiven)
model->BSIM4rgeoMod = 0;
else if ((model->BSIM4rgeoMod != 0) && (model->BSIM4rgeoMod != 1))
{ model->BSIM4rgeoMod = 1;
printf("Warning: rgeoMod has been set to its default value: 1.\n");
}
if (!model->BSIM4fnoiModGiven)
model->BSIM4fnoiMod = 1;
else if ((model->BSIM4fnoiMod != 0) && (model->BSIM4fnoiMod != 1))
@ -2250,8 +2256,15 @@ BSIM4instance **InstArray;
if (!here->BSIM4geoModGiven)
here->BSIM4geoMod = model->BSIM4geoMod;
if (!here->BSIM4rgeoModGiven)
here->BSIM4rgeoMod = 0;
here->BSIM4rgeoMod = model->BSIM4rgeoMod;
else if ((here->BSIM4rgeoMod != 0) && (here->BSIM4rgeoMod != 1))
{ here->BSIM4rgeoMod = model->BSIM4rgeoMod;
printf("Warning: rgeoMod has been set to its global value %d.\n",
model->BSIM4rgeoMod);
}
if (!here->BSIM4trnqsModGiven)
here->BSIM4trnqsMod = model->BSIM4trnqsMod;
else if ((here->BSIM4trnqsMod != 0) && (here->BSIM4trnqsMod != 1))

View File

@ -830,6 +830,7 @@ typedef struct sBSIM4model
int BSIM4rgateMod;
int BSIM4perMod;
int BSIM4geoMod;
int BSIM4rgeoMod;
int BSIM4mtrlMod;
int BSIM4mtrlCompatMod; /* v4.7 */
int BSIM4gidlMod; /* v4.7 New GIDL/GISL */
@ -1781,6 +1782,7 @@ typedef struct sBSIM4model
unsigned BSIM4rgateModGiven :1;
unsigned BSIM4perModGiven :1;
unsigned BSIM4geoModGiven :1;
unsigned BSIM4rgeoModGiven :1;
unsigned BSIM4paramChkGiven :1;
unsigned BSIM4trnqsModGiven :1;
unsigned BSIM4acnqsModGiven :1;
@ -2732,30 +2734,31 @@ typedef struct sBSIM4model
#define BSIM4_M 38
/* Global parameters */
#define BSIM4_MOD_TEMPEOT 66
#define BSIM4_MOD_LEFFEOT 67
#define BSIM4_MOD_WEFFEOT 68
#define BSIM4_MOD_UCSTE 69
#define BSIM4_MOD_LUCSTE 70
#define BSIM4_MOD_WUCSTE 71
#define BSIM4_MOD_PUCSTE 72
#define BSIM4_MOD_UCS 73
#define BSIM4_MOD_LUCS 74
#define BSIM4_MOD_WUCS 75
#define BSIM4_MOD_PUCS 76
#define BSIM4_MOD_CVCHARGEMOD 77
#define BSIM4_MOD_ADOS 78
#define BSIM4_MOD_BDOS 79
#define BSIM4_MOD_TEMPMOD 80
#define BSIM4_MOD_MTRLMOD 81
#define BSIM4_MOD_IGCMOD 82
#define BSIM4_MOD_IGBMOD 83
#define BSIM4_MOD_ACNQSMOD 84
#define BSIM4_MOD_FNOIMOD 85
#define BSIM4_MOD_RDSMOD 86
#define BSIM4_MOD_DIOMOD 87
#define BSIM4_MOD_PERMOD 88
#define BSIM4_MOD_GEOMOD 89
#define BSIM4_MOD_TEMPEOT 65
#define BSIM4_MOD_LEFFEOT 66
#define BSIM4_MOD_WEFFEOT 67
#define BSIM4_MOD_UCSTE 68
#define BSIM4_MOD_LUCSTE 69
#define BSIM4_MOD_WUCSTE 70
#define BSIM4_MOD_PUCSTE 71
#define BSIM4_MOD_UCS 72
#define BSIM4_MOD_LUCS 73
#define BSIM4_MOD_WUCS 74
#define BSIM4_MOD_PUCS 75
#define BSIM4_MOD_CVCHARGEMOD 76
#define BSIM4_MOD_ADOS 77
#define BSIM4_MOD_BDOS 78
#define BSIM4_MOD_TEMPMOD 79
#define BSIM4_MOD_MTRLMOD 80
#define BSIM4_MOD_IGCMOD 81
#define BSIM4_MOD_IGBMOD 82
#define BSIM4_MOD_ACNQSMOD 83
#define BSIM4_MOD_FNOIMOD 84
#define BSIM4_MOD_RDSMOD 85
#define BSIM4_MOD_DIOMOD 86
#define BSIM4_MOD_PERMOD 87
#define BSIM4_MOD_GEOMOD 88
#define BSIM4_MOD_RGEOMOD 89
#define BSIM4_MOD_RGATEMOD 90
#define BSIM4_MOD_RBODYMOD 91
#define BSIM4_MOD_CAPMOD 92

View File

@ -116,6 +116,7 @@ IOP( "rbodymod", BSIM4v5_MOD_RBODYMOD, IF_INTEGER, "Distributed body R model sel
IOP( "rgatemod", BSIM4v5_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"),
IOP( "permod", BSIM4v5_MOD_PERMOD, IF_INTEGER, "Pd and Ps model selector"),
IOP( "geomod", BSIM4v5_MOD_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"),
IOP( "rgeomod", BSIM4v5_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"),
IOP( "fnoimod", BSIM4v5_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"),
IOP( "tnoimod", BSIM4v5_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"),
IOP( "igcmod", BSIM4v5_MOD_IGCMOD, IF_INTEGER, "Gate-to-channel Ig model selector"),

View File

@ -76,6 +76,9 @@ IFvalue *value)
case BSIM4v5_MOD_GEOMOD :
value->iValue = model->BSIM4v5geoMod;
return(OK);
case BSIM4v5_MOD_RGEOMOD :
value->iValue = model->BSIM4v5rgeoMod;
return(OK);
case BSIM4v5_MOD_IGCMOD :
value->iValue = model->BSIM4v5igcMod;
return(OK);

View File

@ -77,6 +77,10 @@ GENmodel *inMod)
mod->BSIM4v5geoMod = value->iValue;
mod->BSIM4v5geoModGiven = TRUE;
break;
case BSIM4v5_MOD_RGEOMOD :
mod->BSIM4v5rgeoMod = value->iValue;
mod->BSIM4v5rgeoModGiven = TRUE;
break;
case BSIM4v5_MOD_FNOIMOD :
mod->BSIM4v5fnoiMod = value->iValue;
mod->BSIM4v5fnoiModGiven = TRUE;

View File

@ -122,6 +122,13 @@ JOB *job;
if (!model->BSIM4v5geoModGiven)
model->BSIM4v5geoMod = 0;
if (!model->BSIM4v5rgeoModGiven)
model->BSIM4v5rgeoMod = 0;
else if ((model->BSIM4v5rgeoMod != 0) && (model->BSIM4v5rgeoMod != 1))
{ model->BSIM4v5rgeoMod = 1;
printf("Warning: rgeoMod has been set to its default value: 1.\n");
}
if (!model->BSIM4v5fnoiModGiven)
model->BSIM4v5fnoiMod = 1;
else if ((model->BSIM4v5fnoiMod != 0) && (model->BSIM4v5fnoiMod != 1))
@ -1735,8 +1742,14 @@ JOB *job;
if (!here->BSIM4v5geoModGiven)
here->BSIM4v5geoMod = model->BSIM4v5geoMod;
if (!here->BSIM4v5rgeoModGiven)
here->BSIM4v5rgeoMod = 0;
here->BSIM4v5rgeoMod = model->BSIM4v5rgeoMod;
else if ((here->BSIM4v5rgeoMod != 0) && (here->BSIM4v5rgeoMod != 1))
{ here->BSIM4v5rgeoMod = model->BSIM4v5rgeoMod;
printf("Warning: rgeoMod has been set to its global value %d.\n",
model->BSIM4v5rgeoMod);
}
if (!here->BSIM4v5trnqsModGiven)
here->BSIM4v5trnqsMod = model->BSIM4v5trnqsMod;
else if ((here->BSIM4v5trnqsMod != 0) && (here->BSIM4v5trnqsMod != 1))

View File

@ -673,6 +673,7 @@ typedef struct sBSIM4v5model
int BSIM4v5rgateMod;
int BSIM4v5perMod;
int BSIM4v5geoMod;
int BSIM4v5rgeoMod;
int BSIM4v5igcMod;
int BSIM4v5igbMod;
int BSIM4v5tempMod;
@ -1486,6 +1487,7 @@ typedef struct sBSIM4v5model
unsigned BSIM4v5rgateModGiven :1;
unsigned BSIM4v5perModGiven :1;
unsigned BSIM4v5geoModGiven :1;
unsigned BSIM4v5rgeoModGiven :1;
unsigned BSIM4v5paramChkGiven :1;
unsigned BSIM4v5trnqsModGiven :1;
unsigned BSIM4v5acnqsModGiven :1;
@ -2310,9 +2312,10 @@ typedef struct sBSIM4v5model
#define BSIM4v5_MOD_ACNQSMOD 92
#define BSIM4v5_MOD_FNOIMOD 93
#define BSIM4v5_MOD_RDSMOD 94
#define BSIM4v5_MOD_DIOMOD 96
#define BSIM4v5_MOD_PERMOD 97
#define BSIM4v5_MOD_GEOMOD 98
#define BSIM4v5_MOD_DIOMOD 95
#define BSIM4v5_MOD_PERMOD 96
#define BSIM4v5_MOD_GEOMOD 97
#define BSIM4v5_MOD_RGEOMOD 98
#define BSIM4v5_MOD_RGATEMOD 99
#define BSIM4v5_MOD_RBODYMOD 100
#define BSIM4v5_MOD_CAPMOD 101

View File

@ -123,6 +123,7 @@ IOP( "rbodymod", BSIM4v6_MOD_RBODYMOD, IF_INTEGER, "Distributed body R model sel
IOP( "rgatemod", BSIM4v6_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"),
IOP( "permod", BSIM4v6_MOD_PERMOD, IF_INTEGER, "Pd and Ps model selector"),
IOP( "geomod", BSIM4v6_MOD_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"),
IOP( "rgeomod", BSIM4v6_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"),
IOP( "fnoimod", BSIM4v6_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"),
IOP( "tnoimod", BSIM4v6_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"),
IOP( "mtrlmod", BSIM4v6_MOD_MTRLMOD, IF_INTEGER, "parameter for non-silicon substrate or metal gate selector"),

View File

@ -83,6 +83,9 @@ IFvalue *value)
case BSIM4v6_MOD_GEOMOD :
value->iValue = model->BSIM4v6geoMod;
return(OK);
case BSIM4v6_MOD_RGEOMOD :
value->iValue = model->BSIM4v6rgeoMod;
return(OK);
case BSIM4v6_MOD_MTRLMOD :
value->iValue = model->BSIM4v6mtrlMod;
return(OK);

View File

@ -87,6 +87,10 @@ GENmodel *inMod)
mod->BSIM4v6geoMod = value->iValue;
mod->BSIM4v6geoModGiven = TRUE;
break;
case BSIM4v6_MOD_RGEOMOD :
mod->BSIM4v6rgeoMod = value->iValue;
mod->BSIM4v6rgeoModGiven = TRUE;
break;
case BSIM4v6_MOD_FNOIMOD :
mod->BSIM4v6fnoiMod = value->iValue;
mod->BSIM4v6fnoiModGiven = TRUE;

View File

@ -140,6 +140,12 @@ BSIM4v6instance **InstArray;
if (!model->BSIM4v6geoModGiven)
model->BSIM4v6geoMod = 0;
if (!model->BSIM4v6rgeoModGiven)
model->BSIM4v6rgeoMod = 0;
else if ((model->BSIM4v6rgeoMod != 0) && (model->BSIM4v6rgeoMod != 1))
{ model->BSIM4v6rgeoMod = 1;
printf("Warning: rgeoMod has been set to its default value: 1.\n");
}
if (!model->BSIM4v6fnoiModGiven)
model->BSIM4v6fnoiMod = 1;
else if ((model->BSIM4v6fnoiMod != 0) && (model->BSIM4v6fnoiMod != 1))
@ -2099,8 +2105,14 @@ BSIM4v6instance **InstArray;
if (!here->BSIM4v6geoModGiven)
here->BSIM4v6geoMod = model->BSIM4v6geoMod;
if (!here->BSIM4v6rgeoModGiven)
here->BSIM4v6rgeoMod = 0;
here->BSIM4v6rgeoMod = model->BSIM4v6rgeoMod;
else if ((here->BSIM4v6rgeoMod != 0) && (here->BSIM4v6rgeoMod != 1))
{ here->BSIM4v6rgeoMod = model->BSIM4v6rgeoMod;
printf("Warning: rgeoMod has been set to its global value %d.\n",
model->BSIM4v6rgeoMod);
}
if (!here->BSIM4v6trnqsModGiven)
here->BSIM4v6trnqsMod = model->BSIM4v6trnqsMod;
else if ((here->BSIM4v6trnqsMod != 0) && (here->BSIM4v6trnqsMod != 1))

View File

@ -814,6 +814,7 @@ typedef struct sBSIM4v6model
int BSIM4v6rgateMod;
int BSIM4v6perMod;
int BSIM4v6geoMod;
int BSIM4v6rgeoMod;
int BSIM4v6mtrlMod;
int BSIM4v6igcMod;
int BSIM4v6igbMod;
@ -1710,6 +1711,7 @@ typedef struct sBSIM4v6model
unsigned BSIM4v6rgateModGiven :1;
unsigned BSIM4v6perModGiven :1;
unsigned BSIM4v6geoModGiven :1;
unsigned BSIM4v6rgeoModGiven :1;
unsigned BSIM4v6paramChkGiven :1;
unsigned BSIM4v6trnqsModGiven :1;
unsigned BSIM4v6acnqsModGiven :1;
@ -2605,30 +2607,31 @@ typedef struct sBSIM4v6model
#define BSIM4v6_M 38
/* Global parameters */
#define BSIM4v6_MOD_TEMPEOT 66
#define BSIM4v6_MOD_LEFFEOT 67
#define BSIM4v6_MOD_WEFFEOT 68
#define BSIM4v6_MOD_UCSTE 69
#define BSIM4v6_MOD_LUCSTE 70
#define BSIM4v6_MOD_WUCSTE 71
#define BSIM4v6_MOD_PUCSTE 72
#define BSIM4v6_MOD_UCS 73
#define BSIM4v6_MOD_LUCS 74
#define BSIM4v6_MOD_WUCS 75
#define BSIM4v6_MOD_PUCS 76
#define BSIM4v6_MOD_CVCHARGEMOD 77
#define BSIM4v6_MOD_ADOS 78
#define BSIM4v6_MOD_BDOS 79
#define BSIM4v6_MOD_TEMPMOD 80
#define BSIM4v6_MOD_MTRLMOD 81
#define BSIM4v6_MOD_IGCMOD 82
#define BSIM4v6_MOD_IGBMOD 83
#define BSIM4v6_MOD_ACNQSMOD 84
#define BSIM4v6_MOD_FNOIMOD 85
#define BSIM4v6_MOD_RDSMOD 86
#define BSIM4v6_MOD_DIOMOD 87
#define BSIM4v6_MOD_PERMOD 88
#define BSIM4v6_MOD_GEOMOD 89
#define BSIM4v6_MOD_TEMPEOT 65
#define BSIM4v6_MOD_LEFFEOT 66
#define BSIM4v6_MOD_WEFFEOT 67
#define BSIM4v6_MOD_UCSTE 68
#define BSIM4v6_MOD_LUCSTE 69
#define BSIM4v6_MOD_WUCSTE 70
#define BSIM4v6_MOD_PUCSTE 71
#define BSIM4v6_MOD_UCS 72
#define BSIM4v6_MOD_LUCS 73
#define BSIM4v6_MOD_WUCS 74
#define BSIM4v6_MOD_PUCS 75
#define BSIM4v6_MOD_CVCHARGEMOD 76
#define BSIM4v6_MOD_ADOS 77
#define BSIM4v6_MOD_BDOS 78
#define BSIM4v6_MOD_TEMPMOD 79
#define BSIM4v6_MOD_MTRLMOD 80
#define BSIM4v6_MOD_IGCMOD 81
#define BSIM4v6_MOD_IGBMOD 82
#define BSIM4v6_MOD_ACNQSMOD 83
#define BSIM4v6_MOD_FNOIMOD 84
#define BSIM4v6_MOD_RDSMOD 85
#define BSIM4v6_MOD_DIOMOD 86
#define BSIM4v6_MOD_PERMOD 87
#define BSIM4v6_MOD_GEOMOD 88
#define BSIM4v6_MOD_RGEOMOD 89
#define BSIM4v6_MOD_RGATEMOD 90
#define BSIM4v6_MOD_RBODYMOD 91
#define BSIM4v6_MOD_CAPMOD 92