diff --git a/src/spicelib/devices/bsim4/b4ask.c b/src/spicelib/devices/bsim4/b4ask.c index 61682c748..91245e8a4 100644 --- a/src/spicelib/devices/bsim4/b4ask.c +++ b/src/spicelib/devices/bsim4/b4ask.c @@ -213,6 +213,10 @@ BSIM4instance *here = (BSIM4instance*)inst; value->rValue = here->BSIM4csub; value->rValue *= here->BSIM4m; return(OK); + case BSIM4_QINV: + value->rValue = here-> BSIM4qinv; + value->rValue *= here->BSIM4m; + return(OK); case BSIM4_IGIDL: value->rValue = here->BSIM4Igidl; value->rValue *= here->BSIM4m; diff --git a/src/spicelib/devices/bsim4/b4mask.c b/src/spicelib/devices/bsim4/b4mask.c index bf9d77e4f..7dad8c364 100644 --- a/src/spicelib/devices/bsim4/b4mask.c +++ b/src/spicelib/devices/bsim4/b4mask.c @@ -944,6 +944,9 @@ IFvalue *value) case BSIM4_MOD_RSHG: value->rValue = model->BSIM4rshg; return(OK); + case BSIM4_MOD_NGCON: + value->rValue = model->BSIM4ngcon; + return(OK); case BSIM4_MOD_TCJ: value->rValue = model->BSIM4tcj; return(OK); @@ -1425,6 +1428,16 @@ IFvalue *value) value->rValue = model->BSIM4ltvfbsdoff; return(OK); + case BSIM4_MOD_LLAMBDA: + value->rValue = model->BSIM4llambda; + return(OK); + case BSIM4_MOD_LVTL: + value->rValue = model->BSIM4lvtl; + return(OK); + case BSIM4_MOD_LXN: + value->rValue = model->BSIM4lxn; + return(OK); + /* Width dependence */ case BSIM4_MOD_WCDSC : value->rValue = model->BSIM4wcdsc; @@ -1525,7 +1538,7 @@ IFvalue *value) case BSIM4_MOD_WDVTP1: value->rValue = model->BSIM4wdvtp1; return(OK); - case BSIM4_MOD_WDVTP2: + case BSIM4_MOD_WDVTP2: value->rValue = model->BSIM4wdvtp2; /* New DIBL/Rout */ return(OK); case BSIM4_MOD_WDVTP3: @@ -1603,7 +1616,7 @@ IFvalue *value) case BSIM4_MOD_WUTE: value->rValue = model->BSIM4wute; return(OK); - case BSIM4_MOD_WUCSTE: + case BSIM4_MOD_WUCSTE: value->rValue = model->BSIM4wucste; return(OK); case BSIM4_MOD_WVOFF: @@ -1723,10 +1736,10 @@ IFvalue *value) case BSIM4_MOD_WFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wfgidl; return(OK); - case BSIM4_MOD_WKGIDL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_WKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wkgidl; return(OK); - case BSIM4_MOD_WRGIDL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_WRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wrgidl; return(OK); case BSIM4_MOD_WAGISL: @@ -1744,10 +1757,10 @@ IFvalue *value) case BSIM4_MOD_WFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wfgisl; return(OK); - case BSIM4_MOD_WKGISL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_WKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wkgisl; return(OK); - case BSIM4_MOD_WRGISL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_WRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wrgisl; return(OK); case BSIM4_MOD_WAIGC: @@ -1837,7 +1850,7 @@ IFvalue *value) case BSIM4_MOD_WEU: value->rValue = model->BSIM4weu; return(OK); - case BSIM4_MOD_WUCS: + case BSIM4_MOD_WUCS: value->rValue = model->BSIM4wucs; return(OK); case BSIM4_MOD_WVFB: @@ -1887,6 +1900,16 @@ IFvalue *value) value->rValue = model->BSIM4wtvfbsdoff; return(OK); + case BSIM4_MOD_WLAMBDA: + value->rValue = model->BSIM4wlambda; + return(OK); + case BSIM4_MOD_WVTL: + value->rValue = model->BSIM4wvtl; + return(OK); + case BSIM4_MOD_WXN: + value->rValue = model->BSIM4wxn; + return(OK); + /* Cross-term dependence */ case BSIM4_MOD_PCDSC : value->rValue = model->BSIM4pcdsc; @@ -1990,7 +2013,7 @@ IFvalue *value) case BSIM4_MOD_PDVTP1: value->rValue = model->BSIM4pdvtp1; return(OK); - case BSIM4_MOD_PDVTP2: + case BSIM4_MOD_PDVTP2: value->rValue = model->BSIM4pdvtp2; /* New DIBL/Rout */ return(OK); case BSIM4_MOD_PDVTP3: @@ -2065,7 +2088,7 @@ IFvalue *value) case BSIM4_MOD_PUTE: value->rValue = model->BSIM4pute; return(OK); - case BSIM4_MOD_PUCSTE: + case BSIM4_MOD_PUCSTE: value->rValue = model->BSIM4pucste; return(OK); case BSIM4_MOD_PVOFF: @@ -2185,10 +2208,10 @@ IFvalue *value) case BSIM4_MOD_PFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pfgidl; return(OK); - case BSIM4_MOD_PKGIDL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_PKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pkgidl; return(OK); - case BSIM4_MOD_PRGIDL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_PRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4prgidl; return(OK); case BSIM4_MOD_PAGISL: @@ -2206,10 +2229,10 @@ IFvalue *value) case BSIM4_MOD_PFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pfgisl; return(OK); - case BSIM4_MOD_PKGISL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_PKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pkgisl; return(OK); - case BSIM4_MOD_PRGISL: /* v4.7 New GIDL/GISL*/ + case BSIM4_MOD_PRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4prgisl; return(OK); case BSIM4_MOD_PAIGC: @@ -2299,7 +2322,7 @@ IFvalue *value) case BSIM4_MOD_PEU: value->rValue = model->BSIM4peu; return(OK); - case BSIM4_MOD_PUCS: + case BSIM4_MOD_PUCS: value->rValue = model->BSIM4pucs; return(OK); case BSIM4_MOD_PVFB: @@ -2349,6 +2372,16 @@ IFvalue *value) value->rValue = model->BSIM4ptvfbsdoff; return(OK); + case BSIM4_MOD_PLAMBDA: + value->rValue = model->BSIM4plambda; + return(OK); + case BSIM4_MOD_PVTL: + value->rValue = model->BSIM4pvtl; + return(OK); + case BSIM4_MOD_PXN: + value->rValue = model->BSIM4pxn; + return(OK); + case BSIM4_MOD_TNOM : value->rValue = model->BSIM4tnom; return(OK); @@ -2451,6 +2484,9 @@ IFvalue *value) case BSIM4_MOD_XTID: value->rValue = model->BSIM4DjctTempExponent; return(OK); + case BSIM4_MOD_LINTNOI: + value->rValue = model->BSIM4lintnoi; + return(OK); case BSIM4_MOD_LINT: value->rValue = model->BSIM4Lint; return(OK); @@ -2525,7 +2561,7 @@ IFvalue *value) case BSIM4_MOD_SBREF: value->rValue = model->BSIM4sbref; return(OK); - case BSIM4_MOD_WLOD: + case BSIM4_MOD_WLOD: value->rValue = model->BSIM4wlod; return(OK); case BSIM4_MOD_KU0: diff --git a/src/spicelib/devices/bsim4/b4noi.c b/src/spicelib/devices/bsim4/b4noi.c index 27b49b9e6..982d13311 100644 --- a/src/spicelib/devices/bsim4/b4noi.c +++ b/src/spicelib/devices/bsim4/b4noi.c @@ -427,17 +427,17 @@ double m; } switch(model->BSIM4tnoiMod) { case 0: - T0 = m * here->BSIM4ueff * fabs(here->BSIM4qinv); + T0 = here->BSIM4ueff * fabs(here->BSIM4qinv); T1 = T0 * tmp + pParam->BSIM4leff * pParam->BSIM4leff; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4sNodePrime, - (T0 / T1) * model->BSIM4ntnoi); + (T0 / T1) * model->BSIM4ntnoi * m); break; case 1: - T0 = m * (here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds); + T0 = here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds; T0 *= T0; igsquare = npart_theta * npart_theta * T0 / here->BSIM4IdovVds; T1 = npart_beta * (here->BSIM4gm @@ -446,7 +446,7 @@ double m; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, - here->BSIM4sNodePrime, (T2 - igsquare)); + here->BSIM4sNodePrime, (T2 - igsquare) * m); break; case 2: T2 = GammaGd0; @@ -455,7 +455,7 @@ double m; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, - here->BSIM4sNodePrime, T2 * T4); + here->BSIM4sNodePrime, T2 * T4 * m); /* Evaluate output noise due to two correlated noise sources */ omega = 2.0 * M_PI * data->freq; @@ -467,20 +467,20 @@ double m; NevalSrc2(&noizDens[BSIM4CORLNOIZ], &lnNdens[BSIM4CORLNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, - here->BSIM4sNodePrime, T2 * T3, + here->BSIM4sNodePrime, T2 * T3 * m, here->BSIM4gNodePrime, here->BSIM4sNodePrime, - T2 * T7, 0.5 * M_PI); + T2 * T7 * m, 0.5 * M_PI); } else { NevalSrc2(&noizDens[BSIM4CORLNOIZ], &lnNdens[BSIM4CORLNOIZ], ckt, THERMNOISE, here->BSIM4sNodePrime, - here->BSIM4dNodePrime, T2 * T3, + here->BSIM4dNodePrime, T2 * T3 * m, here->BSIM4gNodePrime, here->BSIM4dNodePrime, - T2 * T7, 0.5 * M_PI); + T2 * T7 * m, 0.5 * M_PI); } break; }