diff --git a/src/spicelib/devices/bsim4v5/b4v5.c b/src/spicelib/devices/bsim4v5/b4v5.c index 2d920af47..30d05ac74 100644 --- a/src/spicelib/devices/bsim4v5/b4v5.c +++ b/src/spicelib/devices/bsim4v5/b4v5.c @@ -49,7 +49,7 @@ IOPR( "delvt0", BSIM4v5_DELVTO, IF_REAL , "Zero bias threshold voltage variat IOP( "mulu0", BSIM4v5_MULU0, IF_REAL, "Low field mobility multiplier"), IOP( "xgw", BSIM4v5_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4v5_NGCON, IF_REAL, "Number of gate contacts"), - +IOPU("dtemp", BSIM4v5_DTEMP, IF_REAL, "Instance temperature difference"), IOP( "trnqsmod", BSIM4v5_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4v5_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), diff --git a/src/spicelib/devices/bsim4v5/b4v5ask.c b/src/spicelib/devices/bsim4v5/b4v5ask.c index 95ae3c800..829bb3e4c 100644 --- a/src/spicelib/devices/bsim4v5/b4v5ask.c +++ b/src/spicelib/devices/bsim4v5/b4v5ask.c @@ -112,6 +112,9 @@ BSIM4v5instance *here = (BSIM4v5instance*)inst; case BSIM4v5_MULU0: value->rValue = here->BSIM4v5mulu0; return(OK); + case BSIM4v5_DTEMP: + value->rValue = here->BSIM4v5dtemp; + return(OK); case BSIM4v5_XGW: value->rValue = here->BSIM4v5xgw; return(OK); diff --git a/src/spicelib/devices/bsim4v5/b4v5par.c b/src/spicelib/devices/bsim4v5/b4v5par.c index 1013ce700..f3c07dee7 100644 --- a/src/spicelib/devices/bsim4v5/b4v5par.c +++ b/src/spicelib/devices/bsim4v5/b4v5par.c @@ -139,6 +139,10 @@ IFvalue *select) here->BSIM4v5mulu0 = value->rValue; here->BSIM4v5mulu0Given = TRUE; break; + case BSIM4v5_DTEMP: + here->BSIM4v5dtemp = value->rValue; + here->BSIM4v5dtempGiven = TRUE; + return(OK); case BSIM4v5_XGW: here->BSIM4v5xgw = value->rValue; here->BSIM4v5xgwGiven = TRUE; diff --git a/src/spicelib/devices/bsim4v5/b4v5set.c b/src/spicelib/devices/bsim4v5/b4v5set.c index d16f3747b..9214bc3ca 100644 --- a/src/spicelib/devices/bsim4v5/b4v5set.c +++ b/src/spicelib/devices/bsim4v5/b4v5set.c @@ -1751,8 +1751,9 @@ BSIM4v5instance **InstArray; here->BSIM4v5xgw = model->BSIM4v5xgw; if (!here->BSIM4v5ngconGiven) here->BSIM4v5ngcon = model->BSIM4v5ngcon; + if (!here->BSIM4v5dtempGiven) + here->BSIM4v5dtemp = 0; - /* Process instance model selectors, some * may override their global counterparts */ diff --git a/src/spicelib/devices/bsim4v5/bsim4v5def.h b/src/spicelib/devices/bsim4v5/bsim4v5def.h index 2120a59d3..f397af3b7 100644 --- a/src/spicelib/devices/bsim4v5/bsim4v5def.h +++ b/src/spicelib/devices/bsim4v5/bsim4v5def.h @@ -105,6 +105,7 @@ typedef struct sBSIM4v5instance double BSIM4v5mulu0; double BSIM4v5xgw; double BSIM4v5ngcon; + double BSIM4v5dtemp; /* added here to account stress effect instance dependence */ double BSIM4v5u0temp; @@ -288,6 +289,7 @@ typedef struct sBSIM4v5instance unsigned BSIM4v5mulu0Given :1; unsigned BSIM4v5xgwGiven :1; unsigned BSIM4v5ngconGiven :1; + unsigned BSIM4v5dtempGiven : 1; unsigned BSIM4v5icVDSGiven :1; unsigned BSIM4v5icVGSGiven :1; unsigned BSIM4v5icVBSGiven :1; @@ -2536,6 +2538,7 @@ typedef struct sBSIM4v5model #define BSIM4v5_SC 37 #define BSIM4v5_M 38 #define BSIM4v5_MULU0 39 +#define BSIM4v5_DTEMP 40 /* Global parameters */ #define BSIM4v5_MOD_TEMPMOD 89