devices/bsim3: complete the ACM parameter set with xl and xw

This commit is contained in:
dwarning 2013-05-21 22:02:08 +02:00 committed by rlar
parent 708fcbaed1
commit b51f84e0ff
5 changed files with 31 additions and 4 deletions

View File

@ -185,6 +185,10 @@ IOP( "lwl", BSIM3_MOD_LWL, IF_REAL, "Length reduction parameter"),
IOP( "lwlc", BSIM3_MOD_LWLC, IF_REAL, "Length reduction parameter for CV"),
IOP( "lmin", BSIM3_MOD_LMIN, IF_REAL, "Minimum length for the model"),
IOP( "lmax", BSIM3_MOD_LMAX, IF_REAL, "Maximum length for the model"),
IOP( "xl", BSIM3_MOD_XL, IF_REAL, "Length correction parameter"),
IOP( "xw", BSIM3_MOD_XW, IF_REAL, "Width correction parameter"),
IOP( "wr", BSIM3_MOD_WR, IF_REAL, "Width dependence of rds"),
IOP( "wint", BSIM3_MOD_WINT, IF_REAL, "Width reduction parameter"),
IOP( "dwg", BSIM3_MOD_DWG, IF_REAL, "Width reduction parameter"),

View File

@ -1251,6 +1251,14 @@ IFvalue *value)
case BSIM3_MOD_WMAX:
value->rValue = model->BSIM3Wmax;
return(OK);
case BSIM3_MOD_XL:
value->rValue = model->BSIM3xl;
return(OK);
case BSIM3_MOD_XW:
value->rValue = model->BSIM3xw;
return(OK);
case BSIM3_MOD_NOIA:
value->rValue = model->BSIM3oxideTrapDensityA;
return(OK);

View File

@ -1678,6 +1678,15 @@ GENmodel *inMod)
mod->BSIM3WmaxGiven = TRUE;
break;
case BSIM3_MOD_XL:
mod->BSIM3xl = value->rValue;
mod->BSIM3xlGiven = TRUE;
break;
case BSIM3_MOD_XW:
mod->BSIM3xw = value->rValue;
mod->BSIM3xwGiven = TRUE;
break;
case BSIM3_MOD_NOIA :
mod->BSIM3oxideTrapDensityA = value->rValue;
mod->BSIM3oxideTrapDensityAGiven = TRUE;

View File

@ -802,6 +802,12 @@ BSIM3instance **InstArray;
model->BSIM3dwc = model->BSIM3Wint;
if (!model->BSIM3dlcGiven)
model->BSIM3dlc = model->BSIM3Lint;
if (!model->BSIM3xlGiven)
model->BSIM3xl = 0.0;
if (!model->BSIM3xwGiven)
model->BSIM3xw = 0.0;
if (!model->BSIM3cfGiven)
model->BSIM3cf = 2.0 * EPSOX / PI
* log(1.0 + 0.4e-6 / model->BSIM3tox);

View File

@ -193,7 +193,7 @@ int Size_Not_Found, error;
+ model->BSIM3Wwlc / (T2 * T3);
pParam->BSIM3dwc = model->BSIM3dwc + tmp2;
pParam->BSIM3leff = here->BSIM3l - 2.0 * pParam->BSIM3dl;
pParam->BSIM3leff = here->BSIM3l + model->BSIM3xl - 2.0 * pParam->BSIM3dl;
if (pParam->BSIM3leff <= 0.0)
{ IFuid namarray[2];
namarray[0] = model->BSIM3modName;
@ -204,7 +204,7 @@ int Size_Not_Found, error;
return(E_BADPARM);
}
pParam->BSIM3weff = here->BSIM3w - 2.0 * pParam->BSIM3dw;
pParam->BSIM3weff = here->BSIM3w + model->BSIM3xw - 2.0 * pParam->BSIM3dw;
if (pParam->BSIM3weff <= 0.0)
{ IFuid namarray[2];
namarray[0] = model->BSIM3modName;
@ -215,7 +215,7 @@ int Size_Not_Found, error;
return(E_BADPARM);
}
pParam->BSIM3leffCV = here->BSIM3l - 2.0 * pParam->BSIM3dlc;
pParam->BSIM3leffCV = here->BSIM3l + model->BSIM3xl - 2.0 * pParam->BSIM3dlc;
if (pParam->BSIM3leffCV <= 0.0)
{ IFuid namarray[2];
namarray[0] = model->BSIM3modName;
@ -226,7 +226,7 @@ int Size_Not_Found, error;
return(E_BADPARM);
}
pParam->BSIM3weffCV = here->BSIM3w - 2.0 * pParam->BSIM3dwc;
pParam->BSIM3weffCV = here->BSIM3w + model->BSIM3xw - 2.0 * pParam->BSIM3dwc;
if (pParam->BSIM3weffCV <= 0.0)
{ IFuid namarray[2];
namarray[0] = model->BSIM3modName;