Fast version checks in BSIM4.
This commit is contained in:
parent
57dd3342ef
commit
5900f70438
|
|
@ -366,9 +366,10 @@ double mult_i, mult_fn;
|
|||
epsilon = (T7 - T7 * T7 * T7 / 3.0) / (6.0 * T6);
|
||||
T8 = here->BSIM4Vgsteff / here->BSIM4EsatL;
|
||||
T8 *= T8;
|
||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
// if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||
{
|
||||
npart_c = model->BSIM4rnoic * (1.0 + T8
|
||||
* model->BSIM4tnoic * Leff);
|
||||
|
|
@ -420,9 +421,10 @@ double mult_i, mult_fn;
|
|||
}
|
||||
switch(model->BSIM4tnoiMod)
|
||||
{ case 0:
|
||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
// if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||
{
|
||||
T0 = here->BSIM4ueff * fabs(here->BSIM4qinv);
|
||||
T1 = T0 * tmp + pParam->BSIM4leff
|
||||
|
|
@ -449,9 +451,10 @@ double mult_i, mult_fn;
|
|||
}
|
||||
break;
|
||||
case 1:
|
||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
// if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||
{
|
||||
T0 = here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds;
|
||||
T0 *= T0;
|
||||
|
|
|
|||
|
|
@ -203,6 +203,19 @@ BSIM4instance **InstArray;
|
|||
}
|
||||
if (!model->BSIM4versionGiven)
|
||||
model->BSIM4version = copy("4.8.3");
|
||||
/* Speed up version checking via integer version number */
|
||||
if ((!strcmp(model->BSIM4version, "4.8.3"))||(!strncmp(model->BSIM4version, "4.83", 4))) {
|
||||
model->BSIM4v48intVersion = BSIM4v48V483;
|
||||
} else if ((!strcmp(model->BSIM4version, "4.8.2"))||(!strncmp(model->BSIM4version, "4.82", 4))) {
|
||||
model->BSIM4v48intVersion = BSIM4v48V482;
|
||||
} else if ((!strcmp(model->BSIM4version, "4.8.1"))||(!strncmp(model->BSIM4version, "4.81", 4))) {
|
||||
model->BSIM4v48intVersion = BSIM4v48V481;
|
||||
} else if ((!strcmp(model->BSIM4version, "4.8.0"))||(!strncmp(model->BSIM4version, "4.80", 4))||(!strncmp(model->BSIM4version, "4.8", 3))) {
|
||||
model->BSIM4v48intVersion = BSIM4v48V480;
|
||||
} else {
|
||||
printf("Warning: unknown BSIM4 version. Working now with BSIM4.8.3.\n");
|
||||
model->BSIM4v48intVersion = BSIM4v48V483;
|
||||
}
|
||||
if (!model->BSIM4toxrefGiven)
|
||||
model->BSIM4toxref = 30.0e-10;
|
||||
if (!model->BSIM4eotGiven)
|
||||
|
|
@ -342,9 +355,10 @@ BSIM4instance **InstArray;
|
|||
if (!model->BSIM4ucsGiven)
|
||||
model->BSIM4ucs = (model->BSIM4type == NMOS) ? 1.67 : 1.0;
|
||||
|
||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
// if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||
{
|
||||
if (!model->BSIM4uaGiven)
|
||||
model->BSIM4ua = ((model->BSIM4mobMod == 2)) ? 1.0e-15 : 1.0e-9; /* unit m/V */
|
||||
|
|
|
|||
|
|
@ -1368,10 +1368,11 @@ int Fatal_Flag = 0;
|
|||
pParam->BSIM4Aechvb = (model->BSIM4type == NMOS) ? 4.97232e-7 : 3.42537e-7;
|
||||
pParam->BSIM4Bechvb = (model->BSIM4type == NMOS) ? 7.45669e11 : 1.16645e12;
|
||||
|
||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
{
|
||||
// if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
||||
// (strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
||||
// {
|
||||
if (model->BSIM4v48intVersion<=BSIM4v48V480) {
|
||||
pParam->BSIM4AechvbEdgeS = pParam->BSIM4Aechvb * pParam->BSIM4weff
|
||||
* model->BSIM4dlcig * pParam->BSIM4ToxRatioEdge;
|
||||
pParam->BSIM4AechvbEdgeD = pParam->BSIM4Aechvb * pParam->BSIM4weff
|
||||
|
|
|
|||
|
|
@ -941,7 +941,12 @@ typedef struct sBSIM4model
|
|||
int BSIM4tempMod;
|
||||
int BSIM4binUnit;
|
||||
int BSIM4paramChk;
|
||||
char *BSIM4version;
|
||||
char *BSIM4version;
|
||||
int BSIM4v48intVersion;
|
||||
#define BSIM4v48V483 483 /* BSIM4v48 V4.8.3 */
|
||||
#define BSIM4v48V482 482 /* BSIM4v48 V4.8.2 */
|
||||
#define BSIM4v48V481 481 /* BSIM4v48 V4.8.1 */
|
||||
#define BSIM4v48V480 480 /* BSIM4v48 V4.8.0 */
|
||||
double BSIM4eot;
|
||||
double BSIM4vddeot;
|
||||
double BSIM4tempeot;
|
||||
|
|
|
|||
Loading…
Reference in New Issue