diff --git a/src/spicelib/devices/bsim4/b4.c b/src/spicelib/devices/bsim4/b4.c index 438c1498b..83f3115e5 100644 --- a/src/spicelib/devices/bsim4/b4.c +++ b/src/spicelib/devices/bsim4/b4.c @@ -59,6 +59,7 @@ IOP( "mulu0", BSIM4_MULU0, IF_REAL, "Low field mobility multiplier"), IOP( "xgw", BSIM4_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4_NGCON, IF_REAL, "Number of gate contacts"), IOP( "wnflag", BSIM4_WNFLAG, IF_INTEGER, "W/NF device flag for bin selection"), +IOPU("dtemp", BSIM4_DTEMP, IF_REAL, "Instance temperature difference"), IOP( "trnqsmod", BSIM4_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), diff --git a/src/spicelib/devices/bsim4/b4ask.c b/src/spicelib/devices/bsim4/b4ask.c index d43e1a708..abced660c 100644 --- a/src/spicelib/devices/bsim4/b4ask.c +++ b/src/spicelib/devices/bsim4/b4ask.c @@ -135,6 +135,9 @@ BSIM4instance *here = (BSIM4instance*)inst; case BSIM4_WNFLAG: value->iValue = here->BSIM4wnflag; return(OK); + case BSIM4_DTEMP: + value->rValue = here->BSIM4dtemp; + return(OK); case BSIM4_XGW: value->rValue = here->BSIM4xgw; return(OK); diff --git a/src/spicelib/devices/bsim4/b4par.c b/src/spicelib/devices/bsim4/b4par.c index ac4a274c5..44373bfd6 100644 --- a/src/spicelib/devices/bsim4/b4par.c +++ b/src/spicelib/devices/bsim4/b4par.c @@ -165,6 +165,10 @@ IFvalue *select) here->BSIM4wnflag = value->iValue; here->BSIM4wnflagGiven = TRUE; break; + case BSIM4_DTEMP: + here->BSIM4dtemp = value->rValue; + here->BSIM4dtempGiven = TRUE; + return(OK); case BSIM4_XGW: here->BSIM4xgw = value->rValue; here->BSIM4xgwGiven = TRUE; diff --git a/src/spicelib/devices/bsim4/b4set.c b/src/spicelib/devices/bsim4/b4set.c index 71bc75a81..0e91f37d3 100644 --- a/src/spicelib/devices/bsim4/b4set.c +++ b/src/spicelib/devices/bsim4/b4set.c @@ -2371,6 +2371,8 @@ BSIM4instance **InstArray; here->BSIM4xgw = model->BSIM4xgw; if (!here->BSIM4ngconGiven) here->BSIM4ngcon = model->BSIM4ngcon; + if (!here->BSIM4dtempGiven) + here->BSIM4dtemp = 0; /* Process instance model selectors, some * may override their global counterparts diff --git a/src/spicelib/devices/bsim4/bsim4def.h b/src/spicelib/devices/bsim4/bsim4def.h index 6d7d652e8..17f810a19 100644 --- a/src/spicelib/devices/bsim4/bsim4def.h +++ b/src/spicelib/devices/bsim4/bsim4def.h @@ -121,6 +121,7 @@ typedef struct sBSIM4instance int BSIM4wnflag; double BSIM4xgw; double BSIM4ngcon; + double BSIM4dtemp; /* added here to account stress effect instance dependence */ @@ -316,6 +317,7 @@ typedef struct sBSIM4instance unsigned BSIM4wnflagGiven :1; unsigned BSIM4xgwGiven :1; unsigned BSIM4ngconGiven :1; + unsigned BSIM4dtempGiven : 1; unsigned BSIM4icVDSGiven :1; unsigned BSIM4icVGSGiven :1; unsigned BSIM4icVBSGiven :1; @@ -2884,6 +2886,8 @@ typedef struct sBSIM4model #define BSIM4_WEFF 46 #define BSIM4_LEFF 47 +#define BSIM4_DTEMP 48 + /* Global parameters */ #define BSIM4_MOD_TEMPEOT 66 #define BSIM4_MOD_LEFFEOT 67