bsim3v3.24: add model parameter lmlt (Channel length scaling)

This commit is contained in:
h_vogt 2016-07-08 18:15:35 +02:00 committed by rlar
parent af53cbb415
commit 151fed6084
6 changed files with 28 additions and 0 deletions

View File

@ -225,6 +225,8 @@ IOP( "rdc", BSIM3v32_MOD_RDC, IF_REAL, "ACM Parameter: Resistance contact drain
IOP( "rsc", BSIM3v32_MOD_RSC, IF_REAL, "ACM Parameter: Resistance contact source side"),
IOP( "wmlt", BSIM3v32_MOD_WMLT, IF_REAL, "ACM Parameter: Width shrink factor"),
IOP( "lmlt", BSIM3v32_MOD_LMLT, IF_REAL, "Channel length shrink factor"),
IOP( "alpha0", BSIM3v32_MOD_ALPHA0, IF_REAL, "substrate current model parameter"),
IOP( "alpha1", BSIM3v32_MOD_ALPHA1, IF_REAL, "substrate current model parameter"),
IOP( "beta0", BSIM3v32_MOD_BETA0, IF_REAL, "substrate current model parameter"),

View File

@ -22,12 +22,14 @@ BSIM3v32ask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
IFvalue *select)
{
BSIM3v32instance *here = (BSIM3v32instance*)inst;
BSIM3v32model *model = here->BSIM3v32modPtr; /* for lmlt */
NG_IGNORE(select);
switch(which)
{ case BSIM3v32_L:
value->rValue = here->BSIM3v32l;
value->rValue *= model->BSIM3v32lmlt;
return(OK);
case BSIM3v32_W:
value->rValue = here->BSIM3v32w;

View File

@ -366,6 +366,10 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32wmlt;
return(OK);
case BSIM3v32_MOD_LMLT:
value->rValue = model->BSIM3v32lmlt;
return(OK);
/* Length dependence */
case BSIM3v32_MOD_LCDSC :
value->rValue = model->BSIM3v32lcdsc;

View File

@ -478,6 +478,12 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32wmltGiven = TRUE;
break;
/* Length shrink */
case BSIM3v32_MOD_LMLT:
mod->BSIM3v32lmlt = value->rValue;
mod->BSIM3v32lmltGiven = TRUE;
break;
/* Length dependence */
case BSIM3v32_MOD_LCDSC :
mod->BSIM3v32lcdsc = value->rValue;

View File

@ -285,6 +285,9 @@ IFuid tmpName;
if (!model->BSIM3v32wmltGiven)
model->BSIM3v32wmlt = 1.0;
if (!model->BSIM3v32lmltGiven)
model->BSIM3v32lmlt = 1.0;
/* Length dependence */
if (!model->BSIM3v32lcdscGiven)
model->BSIM3v32lcdsc = 0.0;
@ -1039,6 +1042,11 @@ IFuid tmpName;
{ here->BSIM3v32qNode = 0;
}
/* Channel length scaling with lmlt model parameter */
if (model->BSIM3v32lmltGiven)
here->BSIM3v32l *= model->BSIM3v32lmlt;
/* set Sparse Matrix Pointers */
/* macro to make elements with built in test for out of memory */

View File

@ -490,6 +490,8 @@ typedef struct sBSIM3v32model
double BSIM3v32rsc;
double BSIM3v32wmlt;
double BSIM3v32lmlt;
/* Length Dependence */
double BSIM3v32lcdsc;
double BSIM3v32lcdscb;
@ -954,6 +956,8 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32rscGiven :1;
unsigned BSIM3v32wmltGiven :1;
unsigned BSIM3v32lmltGiven :1;
/* Length dependence */
unsigned BSIM3v32lcdscGiven :1;
unsigned BSIM3v32lcdscbGiven :1;
@ -1786,6 +1790,8 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_RSC 717
#define BSIM3v32_MOD_WMLT 718
#define BSIM3v32_MOD_LMLT 719
/* device questions */
#define BSIM3v32_DNODE 751
#define BSIM3v32_GNODE 752