diff --git a/src/spicelib/devices/bsim3/b3.c b/src/spicelib/devices/bsim3/b3.c index 85bcb15c6..78cc31e02 100644 --- a/src/spicelib/devices/bsim3/b3.c +++ b/src/spicelib/devices/bsim3/b3.c @@ -512,6 +512,43 @@ IOP("vgbr_max", BSIM3_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", BSIM3_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", BSIM3_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), +/* trap-assisted tunneling current enhancement */ +IOP("bsim4diode", BSIM3_MOD_BSIM4DIODE, IF_INTEGER, "flag invoking trap-assisted diode model"), +IOP("jtss", BSIM3_MOD_JTSS, IF_REAL, "Bottom trap-assisted saturation current density"), +IOP("jtsd", BSIM3_MOD_JTSD, IF_REAL, "Bottom trap-assisted saturation current density"), +IOP("jtssws", BSIM3_MOD_JTSSWS, IF_REAL, "STI sidewall trap-assisted saturation current density"), +IOP("jtsswd", BSIM3_MOD_JTSSWD, IF_REAL, "STI sidewall trap-assisted saturation current density"), +IOP("jtsswgs", BSIM3_MOD_JTSSWGS, IF_REAL, "Gate-edge sidewall trap-assisted saturation current density"), +IOP("jtsswgd", BSIM3_MOD_JTSSWGD, IF_REAL, "Gate-edge sidewall trap-assisted saturation current density"), + +IOP("njts", BSIM3_MOD_NJTS, IF_REAL, "Non-ideality factor for JTSS and JTSD"), +IOP("njtsd", BSIM3_MOD_NJTSD, IF_REAL, "Non-ideality factor for JTSD"), +IOP("njtssw", BSIM3_MOD_NJTSSW, IF_REAL, "Non-ideality factor for JTSSWS and JTSSWD"), +IOP("njtsswd", BSIM3_MOD_NJTSSWD, IF_REAL, "Non-ideality factor for JTSSWS"), +IOP("njtsswg", BSIM3_MOD_NJTSSWG, IF_REAL, "Non-ideality factor for JTSSWGS"), +IOP("njtsswgd", BSIM3_MOD_NJTSSWGD, IF_REAL, "Non-ideality factor for JTSSWGD"), + +IOP("vtss", BSIM3_MOD_VTSS, IF_REAL, "Bottom source junction trap-assisted current voltage dependent parameter"), +IOP("vtsd", BSIM3_MOD_VTSD, IF_REAL, "Bottom drain junction trap-assisted current voltage dependent parameter"), +IOP("vtssws", BSIM3_MOD_VTSSWS, IF_REAL, "Unit length trap-assisted current voltage dependent parameter for sidewall source junctio"), +IOP("vtsswd", BSIM3_MOD_VTSSWD, IF_REAL, "Unit length trap-assisted current voltage dependent parameter for sidewall drain junction"), +IOP("vtsswgs", BSIM3_MOD_VTSSWGS, IF_REAL, "Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall source junction"), +IOP("vtsswgd", BSIM3_MOD_VTSSWGD, IF_REAL, "Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall drain junction"), + +IOP("xtss", BSIM3_MOD_XTSS, IF_REAL, "Power dependence of JTSS, JTSD on temperature"), +IOP("xtsd", BSIM3_MOD_XTSD, IF_REAL, "Power dependence of JTSS, JTSD on temperature"), +IOP("xtssws", BSIM3_MOD_XTSSWS, IF_REAL, "Power dependence of JTSSWS, JTSSWD on temperature"), +IOP("xtsswd", BSIM3_MOD_XTSSWD, IF_REAL, "Power dependence of JTSSWS, JTSSWD on temperature"), +IOP("xtsswgs", BSIM3_MOD_XTSSWGS, IF_REAL, "Power dependence of JTSSWGS, JTSSWGD on temperature"), +IOP("xtsswgd", BSIM3_MOD_XTSSWGD, IF_REAL, "Power dependence of JTSSWGS, JTSSWGD on temperature"), + +IOP("tnjts", BSIM3_MOD_TNJTS, IF_REAL, "Temperature coefficient for NJTS"), +IOP("tnjtssw", BSIM3_MOD_TNJTSSW, IF_REAL, "Temperature coefficient for NJTSD"), +IOP("tnjtsswg", BSIM3_MOD_TNJTSSWG, IF_REAL, "Temperature coefficient for NJTSSW"), +IOP("tnjtsd", BSIM3_MOD_TNJTSD, IF_REAL, "Temperature coefficient for NJTSSWD"), +IOP("tnjtsswd", BSIM3_MOD_TNJTSSWD, IF_REAL, "Temperature coefficient for NJTSSWG"), +IOP("tnjtsswgd", BSIM3_MOD_TNJTSSWGD, IF_REAL, "Temperature coefficient for NJTSSWGD"), + IP( "nmos", BSIM3_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM3_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; diff --git a/src/spicelib/devices/bsim3/b3ld.c b/src/spicelib/devices/bsim3/b3ld.c index 6ed5f6ee4..90351301b 100644 --- a/src/spicelib/devices/bsim3/b3ld.c +++ b/src/spicelib/devices/bsim3/b3ld.c @@ -479,6 +479,44 @@ for (; model != NULL; model = BSIM3nextModel(model)) } } } + + /* trap-assisted tunneling current enhancement */ + if ((model->BSIM3acmMod == 12) && (model->BSIM3bsim4diodeGiven)) + { + double t1 = 0.0; + if (model->BSIM3jtss > 0.0) + { + t1 = exp(-vbs/(model->BSIM3tNjts*model->BSIM3vtm)*(model->BSIM3vtss/(model->BSIM3vtss-vbs)))-1; + here->BSIM3cbs -= here->BSIM3sourceArea * model->BSIM3tJtss * t1; + } + if (model->BSIM3jtssws > 0.0) + { + t1 = exp(-vbs/(model->BSIM3tNjtssw*model->BSIM3vtm)*(model->BSIM3vtssws/(model->BSIM3vtssws-vbs)))-1; + here->BSIM3cbs -= here->BSIM3sourcePerimeter * model->BSIM3tJtssws * t1; + } + if (model->BSIM3jtsswgs > 0.0) + { + t1 = exp(-vbs/(model->BSIM3tNjtsswg*model->BSIM3vtm)*(model->BSIM3vtsswgs/(model->BSIM3vtsswgs-vbs)))-1; + here->BSIM3cbs -= pParam->BSIM3weff * model->BSIM3tJtsswgs * t1; + } + + if (model->BSIM3jtsd > 0.0) + { + t1 = exp(-vbd/(model->BSIM3tNjtsd*model->BSIM3vtm)*(model->BSIM3vtsd/(model->BSIM3vtsd-vbd)))-1; + here->BSIM3cbd -= here->BSIM3drainArea * model->BSIM3tJtsd * t1; + } + if (model->BSIM3jtsswd > 0.0) + { + t1 = exp(-vbd/(model->BSIM3tNjtsswd*model->BSIM3vtm)*(model->BSIM3vtsswd/(model->BSIM3vtsswd-vbd)))-1; + here->BSIM3cbd -= here->BSIM3drainPerimeter * model->BSIM3tJtsswd * t1; + } + if (model->BSIM3jtsswgd > 0.0) + { + t1 = exp(-vbd/(model->BSIM3tNjtsswgd*model->BSIM3vtm)*(model->BSIM3vtsswgd/(model->BSIM3vtsswgd-vbd)))-1; + here->BSIM3cbd -= pParam->BSIM3weff * model->BSIM3tJtsswgd * t1; + } + } + /* End of diode DC model */ if (vds >= 0.0) diff --git a/src/spicelib/devices/bsim3/b3mask.c b/src/spicelib/devices/bsim3/b3mask.c index 1c53839cd..5f289d9f6 100644 --- a/src/spicelib/devices/bsim3/b3mask.c +++ b/src/spicelib/devices/bsim3/b3mask.c @@ -1318,6 +1318,102 @@ IFvalue *value) value->rValue = model->BSIM3vbdrMax; return(OK); + +/* trap-assisted tunneling current enhancement */ + case BSIM3_MOD_BSIM4DIODE: + value->iValue = model->BSIM3bsim4diode; + return(OK); + case BSIM3_MOD_JTSS: + value->rValue = model->BSIM3jtss; + return(OK); + case BSIM3_MOD_JTSD: + value->rValue = model->BSIM3jtsd; + return(OK); + case BSIM3_MOD_JTSSWS: + value->rValue = model->BSIM3jtssws; + return(OK); + case BSIM3_MOD_JTSSWD: + value->rValue = model->BSIM3jtsswd; + return(OK); + case BSIM3_MOD_JTSSWGS: + value->rValue = model->BSIM3jtsswgs; + return(OK); + case BSIM3_MOD_JTSSWGD: + value->rValue = model->BSIM3jtsswgd; + return(OK); + + case BSIM3_MOD_NJTS: + value->rValue = model->BSIM3njts; + return(OK); + case BSIM3_MOD_NJTSSW: + value->rValue = model->BSIM3njtssw; + return(OK); + case BSIM3_MOD_NJTSSWG: + value->rValue = model->BSIM3njtsswg; + return(OK); + case BSIM3_MOD_NJTSD: + value->rValue = model->BSIM3njtsd; + return(OK); + case BSIM3_MOD_NJTSSWD: + value->rValue = model->BSIM3njtsswd; + return(OK); + case BSIM3_MOD_NJTSSWGD: + value->rValue = model->BSIM3njtsswgd; + return(OK); + + case BSIM3_MOD_VTSS: + value->rValue = model->BSIM3vtss; + return(OK); + case BSIM3_MOD_VTSD: + value->rValue = model->BSIM3vtsd; + return(OK); + case BSIM3_MOD_VTSSWS: + value->rValue = model->BSIM3vtssws; + return(OK); + case BSIM3_MOD_VTSSWD: + value->rValue = model->BSIM3vtsswd; + return(OK); + case BSIM3_MOD_VTSSWGS: + value->rValue = model->BSIM3vtsswgs; + return(OK); + case BSIM3_MOD_VTSSWGD: + value->rValue = model->BSIM3vtsswgd; + return(OK); + + case BSIM3_MOD_XTSS: + value->rValue = model->BSIM3xtss; + return(OK); + case BSIM3_MOD_XTSD: + value->rValue = model->BSIM3xtsd; + return(OK); + case BSIM3_MOD_XTSSWS: + value->rValue = model->BSIM3xtssws; + return(OK); + case BSIM3_MOD_XTSSWD: + value->rValue = model->BSIM3xtsswd; + return(OK); + + case BSIM3_MOD_TNJTS: + value->rValue = model->BSIM3tnjts; + return(OK); + case BSIM3_MOD_TNJTSSW: + value->rValue = model->BSIM3tnjtssw; + return(OK); + case BSIM3_MOD_TNJTSSWG: + value->rValue = model->BSIM3tnjtsswg; + return(OK); + case BSIM3_MOD_TNJTSD: + value->rValue = model->BSIM3tnjtsd; + return(OK); + case BSIM3_MOD_TNJTSSWD: + value->rValue = model->BSIM3tnjtsswd; + return(OK); + case BSIM3_MOD_TNJTSSWGD: + value->rValue = model->BSIM3tnjtsswgd; + return(OK); + + + default: return(E_BADPARM); } diff --git a/src/spicelib/devices/bsim3/b3mpar.c b/src/spicelib/devices/bsim3/b3mpar.c index 9965c07be..55acf896a 100644 --- a/src/spicelib/devices/bsim3/b3mpar.c +++ b/src/spicelib/devices/bsim3/b3mpar.c @@ -1765,6 +1765,127 @@ GENmodel *inMod) mod->BSIM3vbdrMaxGiven = TRUE; break; +/* trap-assisted tunneling current enhancement */ + case BSIM3_MOD_BSIM4DIODE: + mod->BSIM3bsim4diode = value->iValue; + mod->BSIM3bsim4diodeGiven = TRUE; + break; + case BSIM3_MOD_JTSS: + mod->BSIM3jtss = value->rValue; + mod->BSIM3jtssGiven = TRUE; + break; + case BSIM3_MOD_JTSD: + mod->BSIM3jtsd = value->rValue; + mod->BSIM3jtsdGiven = TRUE; + break; + case BSIM3_MOD_JTSSWS: + mod->BSIM3jtssws = value->rValue; + mod->BSIM3jtsswsGiven = TRUE; + break; + case BSIM3_MOD_JTSSWD: + mod->BSIM3jtsswd = value->rValue; + mod->BSIM3jtsswdGiven = TRUE; + break; + case BSIM3_MOD_JTSSWGS: + mod->BSIM3jtsswgs = value->rValue; + mod->BSIM3jtsswgsGiven = TRUE; + break; + case BSIM3_MOD_JTSSWGD: + mod->BSIM3jtsswgd = value->rValue; + mod->BSIM3jtsswgdGiven = TRUE; + break; + + case BSIM3_MOD_NJTS: + mod->BSIM3njts = value->rValue; + mod->BSIM3njtsGiven = TRUE; + break; + case BSIM3_MOD_NJTSSW: + mod->BSIM3njtssw = value->rValue; + mod->BSIM3njtsswGiven = TRUE; + break; + case BSIM3_MOD_NJTSSWG: + mod->BSIM3njtsswg = value->rValue; + mod->BSIM3njtsswgGiven = TRUE; + break; + case BSIM3_MOD_NJTSD: + mod->BSIM3njtsd = value->rValue; + mod->BSIM3njtsdGiven = TRUE; + break; + case BSIM3_MOD_NJTSSWD: + mod->BSIM3njtsswd = value->rValue; + mod->BSIM3njtsswdGiven = TRUE; + break; + case BSIM3_MOD_NJTSSWGD: + mod->BSIM3njtsswgd = value->rValue; + mod->BSIM3njtsswgdGiven = TRUE; + break; + + case BSIM3_MOD_VTSS: + mod->BSIM3vtss = value->rValue; + mod->BSIM3vtssGiven = TRUE; + break; + case BSIM3_MOD_VTSD: + mod->BSIM3vtsd = value->rValue; + mod->BSIM3vtsdGiven = TRUE; + break; + case BSIM3_MOD_VTSSWS: + mod->BSIM3vtssws = value->rValue; + mod->BSIM3vtsswsGiven = TRUE; + break; + case BSIM3_MOD_VTSSWD: + mod->BSIM3vtsswd = value->rValue; + mod->BSIM3vtsswdGiven = TRUE; + break; + case BSIM3_MOD_VTSSWGS: + mod->BSIM3vtsswgs = value->rValue; + mod->BSIM3vtsswgsGiven = TRUE; + break; + case BSIM3_MOD_VTSSWGD: + mod->BSIM3vtsswgd = value->rValue; + mod->BSIM3vtsswgdGiven = TRUE; + break; + + case BSIM3_MOD_XTSS: + mod->BSIM3xtss = value->rValue; + mod->BSIM3xtssGiven = TRUE; + break; + case BSIM3_MOD_XTSD: + mod->BSIM3xtsd = value->rValue; + mod->BSIM3xtsdGiven = TRUE; + break; + case BSIM3_MOD_XTSSWS: + mod->BSIM3xtssws = value->rValue; + mod->BSIM3xtsswsGiven = TRUE; + break; + case BSIM3_MOD_XTSSWD: + mod->BSIM3xtsswd = value->rValue; + mod->BSIM3xtsswdGiven = TRUE; + break; + case BSIM3_MOD_TNJTS: + mod->BSIM3tnjts = value->rValue; + mod->BSIM3tnjtsGiven = TRUE; + break; + case BSIM3_MOD_TNJTSSW: + mod->BSIM3tnjtssw = value->rValue; + mod->BSIM3tnjtsswGiven = TRUE; + break; + case BSIM3_MOD_TNJTSSWG: + mod->BSIM3tnjtsswg = value->rValue; + mod->BSIM3tnjtsswgGiven = TRUE; + break; + case BSIM3_MOD_TNJTSD: + mod->BSIM3tnjtsd = value->rValue; + mod->BSIM3tnjtsdGiven = TRUE; + break; + case BSIM3_MOD_TNJTSSWD: + mod->BSIM3tnjtsswd = value->rValue; + mod->BSIM3tnjtsswdGiven = TRUE; + break; + case BSIM3_MOD_TNJTSSWGD: + mod->BSIM3tnjtsswgd = value->rValue; + mod->BSIM3tnjtsswgdGiven = TRUE; + break; + case BSIM3_MOD_NMOS : if(value->iValue) { mod->BSIM3type = 1; diff --git a/src/spicelib/devices/bsim3/b3set.c b/src/spicelib/devices/bsim3/b3set.c index 5c2220f4d..8b902bc97 100644 --- a/src/spicelib/devices/bsim3/b3set.c +++ b/src/spicelib/devices/bsim3/b3set.c @@ -919,6 +919,74 @@ BSIM3instance **InstArray; if (!model->BSIM3vbdrMaxGiven) model->BSIM3vbdrMax = 1e99; +/* trap-assisted tunneling current enhancement */ + if (!model->BSIM3bsim4diodeGiven) + model->BSIM3bsim4diode = 0; + if (!model->BSIM3jtssGiven) + model->BSIM3jtss = 0.0; + if (!model->BSIM3jtsdGiven) + model->BSIM3jtsd = model->BSIM3jtss; + if (!model->BSIM3jtsswsGiven) + model->BSIM3jtssws = 0.0; + if (!model->BSIM3jtsswdGiven) + model->BSIM3jtsswd = model->BSIM3jtssws; + if (!model->BSIM3jtsswgsGiven) + model->BSIM3jtsswgs = 0.0; + if (!model->BSIM3jtsswgdGiven) + model->BSIM3jtsswgd = model->BSIM3jtsswgs; + + if (!model->BSIM3njtsGiven) + model->BSIM3njts = 20.0; + if (!model->BSIM3njtsswGiven) + model->BSIM3njtssw = 20.0; + if (!model->BSIM3njtsswgGiven) + model->BSIM3njtsswg = 20.0; + if (!model->BSIM3njtsdGiven) + model->BSIM3njtsd = model->BSIM3njts; + if (!model->BSIM3njtsswdGiven) + model->BSIM3njtsswd = model->BSIM3njtssw; + if (!model->BSIM3njtsswgdGiven) + model->BSIM3njtsswgd = model->BSIM3njtsswg; + + if (!model->BSIM3vtssGiven) + model->BSIM3vtss = 10.0; + if (!model->BSIM3vtsdGiven) + model->BSIM3vtsd = model->BSIM3vtss; + if (!model->BSIM3vtsswsGiven) + model->BSIM3vtssws = 10.0; + if (!model->BSIM3vtsswdGiven) + model->BSIM3vtsswd = model->BSIM3vtssws; + if (!model->BSIM3vtsswgsGiven) + model->BSIM3vtsswgs = 10.0; + if (!model->BSIM3vtsswgdGiven) + model->BSIM3vtsswgd = model->BSIM3vtsswgs; + + if (!model->BSIM3xtssGiven) + model->BSIM3xtss = 0.02; + if (!model->BSIM3xtsdGiven) + model->BSIM3xtsd = 0.02; + if (!model->BSIM3xtsswsGiven) + model->BSIM3xtssws = 0.02; + if (!model->BSIM3xtsswdGiven) + model->BSIM3xtsswd = 0.02; + if (!model->BSIM3xtsswgsGiven) + model->BSIM3xtsswgs = 0.02; + if (!model->BSIM3xtsswgdGiven) + model->BSIM3xtsswgd = 0.02; + + if (!model->BSIM3tnjtsGiven) + model->BSIM3tnjts = 0.0; + if (!model->BSIM3tnjtsswGiven) + model->BSIM3tnjtssw = 0.0; + if (!model->BSIM3tnjtsswgGiven) + model->BSIM3tnjtsswg = 0.0; + if (!model->BSIM3tnjtsdGiven) + model->BSIM3tnjtsd = 0.0; + if (!model->BSIM3tnjtsswdGiven) + model->BSIM3tnjtsswd = 0.0; + if (!model->BSIM3tnjtsswgdGiven) + model->BSIM3tnjtsswgd = 0.0; + /* loop through all the instances of the model */ for (here = BSIM3instances(model); here != NULL ; here=BSIM3nextInstance(here)) diff --git a/src/spicelib/devices/bsim3/b3temp.c b/src/spicelib/devices/bsim3/b3temp.c index d8166e0eb..8a93839e1 100644 --- a/src/spicelib/devices/bsim3/b3temp.c +++ b/src/spicelib/devices/bsim3/b3temp.c @@ -148,6 +148,40 @@ int Size_Not_Found, error; } /* End of junction capacitance */ + /* trap-assisted tunneling current enhancement */ + if ((model->BSIM3acmMod == 12) && (model->BSIM3bsim4diodeGiven)) + { + model->BSIM3tJtss = model->BSIM3jtss + * exp(model->BSIM3xtss * Eg0 / ((model->BSIM3vtm * TRatio) - 1)); + + model->BSIM3tJtssws = model->BSIM3jtssws + * exp(model->BSIM3xtssws * Eg0 / ((model->BSIM3vtm * TRatio) - 1)); + + model->BSIM3tJtsswgs = model->BSIM3jtsswgs + * exp(model->BSIM3xtsswgs * Eg0 / ((model->BSIM3vtm * TRatio) - 1)); + + model->BSIM3tJtsd = model->BSIM3jtsd + * exp(model->BSIM3xtsd * Eg0 / ((model->BSIM3vtm * TRatio) - 1)); + + model->BSIM3tJtsswd = model->BSIM3jtsswd + * exp(model->BSIM3xtsswd * Eg0 / ((model->BSIM3vtm * TRatio) - 1)); + + model->BSIM3tJtsswgd = model->BSIM3jtsswgd + * exp(model->BSIM3xtsswgd * Eg0 / ((model->BSIM3vtm * TRatio) - 1)); + + model->BSIM3tNjts = model->BSIM3njts * (1 + model->BSIM3tnjts * (TRatio - 1)); + + model->BSIM3tNjtsd = model->BSIM3njtsd * (1 + model->BSIM3tnjtsd * (TRatio - 1)); + + model->BSIM3tNjtssw = model->BSIM3njtssw * (1 + model->BSIM3tnjtssw * (TRatio - 1)); + + model->BSIM3tNjtsswd = model->BSIM3njtsswd * (1 + model->BSIM3tnjtsswd * (TRatio - 1)); + + model->BSIM3tNjtsswg = model->BSIM3njtsswg * (1 + model->BSIM3tnjtsswg * (TRatio - 1)); + + model->BSIM3tNjtsswgd = model->BSIM3njtsswgd * (1 + model->BSIM3tnjtsswgd * (TRatio - 1)); + } + /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = BSIM3instances(model); here != NULL; diff --git a/src/spicelib/devices/bsim3/bsim3def.h b/src/spicelib/devices/bsim3/bsim3def.h index 13c5afc26..61030f76d 100644 --- a/src/spicelib/devices/bsim3/bsim3def.h +++ b/src/spicelib/devices/bsim3/bsim3def.h @@ -881,6 +881,56 @@ typedef struct sBSIM3model double BSIM3vbsrMax; double BSIM3vbdrMax; +/* trap-assisted tunneling current enhancement */ + int BSIM3bsim4diode; + double BSIM3jtss; + double BSIM3jtsd; + double BSIM3jtssws; + double BSIM3jtsswd; + double BSIM3jtsswgs; + double BSIM3jtsswgd; + + double BSIM3njts; + double BSIM3njtssw; + double BSIM3njtsswg; + double BSIM3njtsd; + double BSIM3njtsswd; + double BSIM3njtsswgd; + + double BSIM3vtss; + double BSIM3vtsd; + double BSIM3vtssws; + double BSIM3vtsswd; + double BSIM3vtsswgs; + double BSIM3vtsswgd; + + double BSIM3xtss; + double BSIM3xtsd; + double BSIM3xtssws; + double BSIM3xtsswd; + double BSIM3xtsswgs; + double BSIM3xtsswgd; + + double BSIM3tnjts; + double BSIM3tnjtssw; + double BSIM3tnjtsswg; + double BSIM3tnjtsd; + double BSIM3tnjtsswd; + double BSIM3tnjtsswgd; + + double BSIM3tJtss; + double BSIM3tJtsd; + double BSIM3tJtssws; + double BSIM3tJtsswd; + double BSIM3tJtsswgs; + double BSIM3tJtsswgd; + double BSIM3tNjts; + double BSIM3tNjtssw; + double BSIM3tNjtsswg; + double BSIM3tNjtsd; + double BSIM3tNjtsswd; + double BSIM3tNjtsswgd; + struct bsim3SizeDependParam *pSizeDependParamKnot; @@ -1338,6 +1388,43 @@ typedef struct sBSIM3model unsigned BSIM3WminGiven :1; unsigned BSIM3WmaxGiven :1; +/* trap-assisted tunneling current enhancement */ + unsigned BSIM3bsim4diodeGiven :1; + unsigned BSIM3jtssGiven :1; + unsigned BSIM3jtsdGiven :1; + unsigned BSIM3jtsswsGiven :1; + unsigned BSIM3jtsswdGiven :1; + unsigned BSIM3jtsswgsGiven :1; + unsigned BSIM3jtsswgdGiven :1; + + unsigned BSIM3njtsGiven :1; + unsigned BSIM3njtsswGiven :1; + unsigned BSIM3njtsswgGiven :1; + unsigned BSIM3njtsdGiven :1; + unsigned BSIM3njtsswdGiven :1; + unsigned BSIM3njtsswgdGiven :1; + + unsigned BSIM3vtssGiven :1; + unsigned BSIM3vtsdGiven :1; + unsigned BSIM3vtsswsGiven :1; + unsigned BSIM3vtsswdGiven :1; + unsigned BSIM3vtsswgsGiven :1; + unsigned BSIM3vtsswgdGiven :1; + + unsigned BSIM3xtssGiven :1; + unsigned BSIM3xtsdGiven :1; + unsigned BSIM3xtsswsGiven :1; + unsigned BSIM3xtsswdGiven :1; + unsigned BSIM3xtsswgsGiven :1; + unsigned BSIM3xtsswgdGiven :1; + + unsigned BSIM3tnjtsGiven :1; + unsigned BSIM3tnjtsswGiven :1; + unsigned BSIM3tnjtsswgGiven :1; + unsigned BSIM3tnjtsdGiven :1; + unsigned BSIM3tnjtsswdGiven :1; + unsigned BSIM3tnjtsswgdGiven :1; + } BSIM3model; @@ -1908,6 +1995,43 @@ typedef struct sBSIM3model #define BSIM3_MOD_VBSR_MAX 810 #define BSIM3_MOD_VBDR_MAX 811 +/* trap-assisted tunneling current enhancement */ +#define BSIM3_MOD_BSIM4DIODE 820 +#define BSIM3_MOD_JTSS 821 +#define BSIM3_MOD_JTSD 822 +#define BSIM3_MOD_JTSSWS 823 +#define BSIM3_MOD_JTSSWD 824 +#define BSIM3_MOD_JTSSWGS 825 +#define BSIM3_MOD_JTSSWGD 826 + +#define BSIM3_MOD_NJTS 827 +#define BSIM3_MOD_NJTSSW 828 +#define BSIM3_MOD_NJTSSWG 829 +#define BSIM3_MOD_NJTSD 830 +#define BSIM3_MOD_NJTSSWD 831 +#define BSIM3_MOD_NJTSSWGD 832 + +#define BSIM3_MOD_VTSS 833 +#define BSIM3_MOD_VTSD 834 +#define BSIM3_MOD_VTSSWS 835 +#define BSIM3_MOD_VTSSWD 836 +#define BSIM3_MOD_VTSSWGS 837 +#define BSIM3_MOD_VTSSWGD 838 + +#define BSIM3_MOD_XTSS 839 +#define BSIM3_MOD_XTSD 840 +#define BSIM3_MOD_XTSSWS 841 +#define BSIM3_MOD_XTSSWD 842 +#define BSIM3_MOD_XTSSWGS 843 +#define BSIM3_MOD_XTSSWGD 844 + +#define BSIM3_MOD_TNJTS 845 +#define BSIM3_MOD_TNJTSSW 846 +#define BSIM3_MOD_TNJTSSWG 847 +#define BSIM3_MOD_TNJTSD 848 +#define BSIM3_MOD_TNJTSSWD 849 +#define BSIM3_MOD_TNJTSSWGD 850 + #include "bsim3ext.h" extern void BSIM3evaluate(double,double,double,BSIM3instance*,BSIM3model*,