Browse Source

few corrections regarding noise w/ multiplier

dwarning 15 years ago
parent
commit
5e2b381639
  1. 4
      src/spicelib/devices/bsim4/b4ask.c
  2. 66
      src/spicelib/devices/bsim4/b4mask.c
  3. 18
      src/spicelib/devices/bsim4/b4noi.c

4
src/spicelib/devices/bsim4/b4ask.c

@ -213,6 +213,10 @@ BSIM4instance *here = (BSIM4instance*)inst;
value->rValue = here->BSIM4csub; value->rValue = here->BSIM4csub;
value->rValue *= here->BSIM4m; value->rValue *= here->BSIM4m;
return(OK); return(OK);
case BSIM4_QINV:
value->rValue = here-> BSIM4qinv;
value->rValue *= here->BSIM4m;
return(OK);
case BSIM4_IGIDL: case BSIM4_IGIDL:
value->rValue = here->BSIM4Igidl; value->rValue = here->BSIM4Igidl;
value->rValue *= here->BSIM4m; value->rValue *= here->BSIM4m;

66
src/spicelib/devices/bsim4/b4mask.c

@ -944,6 +944,9 @@ IFvalue *value)
case BSIM4_MOD_RSHG: case BSIM4_MOD_RSHG:
value->rValue = model->BSIM4rshg; value->rValue = model->BSIM4rshg;
return(OK); return(OK);
case BSIM4_MOD_NGCON:
value->rValue = model->BSIM4ngcon;
return(OK);
case BSIM4_MOD_TCJ: case BSIM4_MOD_TCJ:
value->rValue = model->BSIM4tcj; value->rValue = model->BSIM4tcj;
return(OK); return(OK);
@ -1425,6 +1428,16 @@ IFvalue *value)
value->rValue = model->BSIM4ltvfbsdoff; value->rValue = model->BSIM4ltvfbsdoff;
return(OK); 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 */ /* Width dependence */
case BSIM4_MOD_WCDSC : case BSIM4_MOD_WCDSC :
value->rValue = model->BSIM4wcdsc; value->rValue = model->BSIM4wcdsc;
@ -1525,7 +1538,7 @@ IFvalue *value)
case BSIM4_MOD_WDVTP1: case BSIM4_MOD_WDVTP1:
value->rValue = model->BSIM4wdvtp1; value->rValue = model->BSIM4wdvtp1;
return(OK); return(OK);
case BSIM4_MOD_WDVTP2:
case BSIM4_MOD_WDVTP2:
value->rValue = model->BSIM4wdvtp2; /* New DIBL/Rout */ value->rValue = model->BSIM4wdvtp2; /* New DIBL/Rout */
return(OK); return(OK);
case BSIM4_MOD_WDVTP3: case BSIM4_MOD_WDVTP3:
@ -1603,7 +1616,7 @@ IFvalue *value)
case BSIM4_MOD_WUTE: case BSIM4_MOD_WUTE:
value->rValue = model->BSIM4wute; value->rValue = model->BSIM4wute;
return(OK); return(OK);
case BSIM4_MOD_WUCSTE:
case BSIM4_MOD_WUCSTE:
value->rValue = model->BSIM4wucste; value->rValue = model->BSIM4wucste;
return(OK); return(OK);
case BSIM4_MOD_WVOFF: case BSIM4_MOD_WVOFF:
@ -1723,10 +1736,10 @@ IFvalue *value)
case BSIM4_MOD_WFGIDL: /* v4.7 New GIDL/GISL*/ case BSIM4_MOD_WFGIDL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4wfgidl; value->rValue = model->BSIM4wfgidl;
return(OK); return(OK);
case BSIM4_MOD_WKGIDL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_WKGIDL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4wkgidl; value->rValue = model->BSIM4wkgidl;
return(OK); return(OK);
case BSIM4_MOD_WRGIDL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_WRGIDL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4wrgidl; value->rValue = model->BSIM4wrgidl;
return(OK); return(OK);
case BSIM4_MOD_WAGISL: case BSIM4_MOD_WAGISL:
@ -1744,10 +1757,10 @@ IFvalue *value)
case BSIM4_MOD_WFGISL: /* v4.7 New GIDL/GISL*/ case BSIM4_MOD_WFGISL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4wfgisl; value->rValue = model->BSIM4wfgisl;
return(OK); return(OK);
case BSIM4_MOD_WKGISL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_WKGISL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4wkgisl; value->rValue = model->BSIM4wkgisl;
return(OK); return(OK);
case BSIM4_MOD_WRGISL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_WRGISL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4wrgisl; value->rValue = model->BSIM4wrgisl;
return(OK); return(OK);
case BSIM4_MOD_WAIGC: case BSIM4_MOD_WAIGC:
@ -1837,7 +1850,7 @@ IFvalue *value)
case BSIM4_MOD_WEU: case BSIM4_MOD_WEU:
value->rValue = model->BSIM4weu; value->rValue = model->BSIM4weu;
return(OK); return(OK);
case BSIM4_MOD_WUCS:
case BSIM4_MOD_WUCS:
value->rValue = model->BSIM4wucs; value->rValue = model->BSIM4wucs;
return(OK); return(OK);
case BSIM4_MOD_WVFB: case BSIM4_MOD_WVFB:
@ -1887,6 +1900,16 @@ IFvalue *value)
value->rValue = model->BSIM4wtvfbsdoff; value->rValue = model->BSIM4wtvfbsdoff;
return(OK); 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 */ /* Cross-term dependence */
case BSIM4_MOD_PCDSC : case BSIM4_MOD_PCDSC :
value->rValue = model->BSIM4pcdsc; value->rValue = model->BSIM4pcdsc;
@ -1990,7 +2013,7 @@ IFvalue *value)
case BSIM4_MOD_PDVTP1: case BSIM4_MOD_PDVTP1:
value->rValue = model->BSIM4pdvtp1; value->rValue = model->BSIM4pdvtp1;
return(OK); return(OK);
case BSIM4_MOD_PDVTP2:
case BSIM4_MOD_PDVTP2:
value->rValue = model->BSIM4pdvtp2; /* New DIBL/Rout */ value->rValue = model->BSIM4pdvtp2; /* New DIBL/Rout */
return(OK); return(OK);
case BSIM4_MOD_PDVTP3: case BSIM4_MOD_PDVTP3:
@ -2065,7 +2088,7 @@ IFvalue *value)
case BSIM4_MOD_PUTE: case BSIM4_MOD_PUTE:
value->rValue = model->BSIM4pute; value->rValue = model->BSIM4pute;
return(OK); return(OK);
case BSIM4_MOD_PUCSTE:
case BSIM4_MOD_PUCSTE:
value->rValue = model->BSIM4pucste; value->rValue = model->BSIM4pucste;
return(OK); return(OK);
case BSIM4_MOD_PVOFF: case BSIM4_MOD_PVOFF:
@ -2185,10 +2208,10 @@ IFvalue *value)
case BSIM4_MOD_PFGIDL: /* v4.7 New GIDL/GISL*/ case BSIM4_MOD_PFGIDL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4pfgidl; value->rValue = model->BSIM4pfgidl;
return(OK); return(OK);
case BSIM4_MOD_PKGIDL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_PKGIDL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4pkgidl; value->rValue = model->BSIM4pkgidl;
return(OK); return(OK);
case BSIM4_MOD_PRGIDL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_PRGIDL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4prgidl; value->rValue = model->BSIM4prgidl;
return(OK); return(OK);
case BSIM4_MOD_PAGISL: case BSIM4_MOD_PAGISL:
@ -2206,10 +2229,10 @@ IFvalue *value)
case BSIM4_MOD_PFGISL: /* v4.7 New GIDL/GISL*/ case BSIM4_MOD_PFGISL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4pfgisl; value->rValue = model->BSIM4pfgisl;
return(OK); return(OK);
case BSIM4_MOD_PKGISL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_PKGISL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4pkgisl; value->rValue = model->BSIM4pkgisl;
return(OK); return(OK);
case BSIM4_MOD_PRGISL: /* v4.7 New GIDL/GISL*/
case BSIM4_MOD_PRGISL: /* v4.7 New GIDL/GISL*/
value->rValue = model->BSIM4prgisl; value->rValue = model->BSIM4prgisl;
return(OK); return(OK);
case BSIM4_MOD_PAIGC: case BSIM4_MOD_PAIGC:
@ -2299,7 +2322,7 @@ IFvalue *value)
case BSIM4_MOD_PEU: case BSIM4_MOD_PEU:
value->rValue = model->BSIM4peu; value->rValue = model->BSIM4peu;
return(OK); return(OK);
case BSIM4_MOD_PUCS:
case BSIM4_MOD_PUCS:
value->rValue = model->BSIM4pucs; value->rValue = model->BSIM4pucs;
return(OK); return(OK);
case BSIM4_MOD_PVFB: case BSIM4_MOD_PVFB:
@ -2349,6 +2372,16 @@ IFvalue *value)
value->rValue = model->BSIM4ptvfbsdoff; value->rValue = model->BSIM4ptvfbsdoff;
return(OK); 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 : case BSIM4_MOD_TNOM :
value->rValue = model->BSIM4tnom; value->rValue = model->BSIM4tnom;
return(OK); return(OK);
@ -2451,6 +2484,9 @@ IFvalue *value)
case BSIM4_MOD_XTID: case BSIM4_MOD_XTID:
value->rValue = model->BSIM4DjctTempExponent; value->rValue = model->BSIM4DjctTempExponent;
return(OK); return(OK);
case BSIM4_MOD_LINTNOI:
value->rValue = model->BSIM4lintnoi;
return(OK);
case BSIM4_MOD_LINT: case BSIM4_MOD_LINT:
value->rValue = model->BSIM4Lint; value->rValue = model->BSIM4Lint;
return(OK); return(OK);
@ -2525,7 +2561,7 @@ IFvalue *value)
case BSIM4_MOD_SBREF: case BSIM4_MOD_SBREF:
value->rValue = model->BSIM4sbref; value->rValue = model->BSIM4sbref;
return(OK); return(OK);
case BSIM4_MOD_WLOD:
case BSIM4_MOD_WLOD:
value->rValue = model->BSIM4wlod; value->rValue = model->BSIM4wlod;
return(OK); return(OK);
case BSIM4_MOD_KU0: case BSIM4_MOD_KU0:

18
src/spicelib/devices/bsim4/b4noi.c

@ -427,17 +427,17 @@ double m;
} }
switch(model->BSIM4tnoiMod) switch(model->BSIM4tnoiMod)
{ case 0: { case 0:
T0 = m * here->BSIM4ueff * fabs(here->BSIM4qinv);
T0 = here->BSIM4ueff * fabs(here->BSIM4qinv);
T1 = T0 * tmp + pParam->BSIM4leff T1 = T0 * tmp + pParam->BSIM4leff
* pParam->BSIM4leff; * pParam->BSIM4leff;
NevalSrc(&noizDens[BSIM4IDNOIZ], NevalSrc(&noizDens[BSIM4IDNOIZ],
&lnNdens[BSIM4IDNOIZ], ckt, &lnNdens[BSIM4IDNOIZ], ckt,
THERMNOISE, here->BSIM4dNodePrime, THERMNOISE, here->BSIM4dNodePrime,
here->BSIM4sNodePrime, here->BSIM4sNodePrime,
(T0 / T1) * model->BSIM4ntnoi);
(T0 / T1) * model->BSIM4ntnoi * m);
break; break;
case 1: case 1:
T0 = m * (here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds);
T0 = here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds;
T0 *= T0; T0 *= T0;
igsquare = npart_theta * npart_theta * T0 / here->BSIM4IdovVds; igsquare = npart_theta * npart_theta * T0 / here->BSIM4IdovVds;
T1 = npart_beta * (here->BSIM4gm T1 = npart_beta * (here->BSIM4gm
@ -446,7 +446,7 @@ double m;
NevalSrc(&noizDens[BSIM4IDNOIZ], NevalSrc(&noizDens[BSIM4IDNOIZ],
&lnNdens[BSIM4IDNOIZ], ckt, &lnNdens[BSIM4IDNOIZ], ckt,
THERMNOISE, here->BSIM4dNodePrime, THERMNOISE, here->BSIM4dNodePrime,
here->BSIM4sNodePrime, (T2 - igsquare));
here->BSIM4sNodePrime, (T2 - igsquare) * m);
break; break;
case 2: case 2:
T2 = GammaGd0; T2 = GammaGd0;
@ -455,7 +455,7 @@ double m;
NevalSrc(&noizDens[BSIM4IDNOIZ], NevalSrc(&noizDens[BSIM4IDNOIZ],
&lnNdens[BSIM4IDNOIZ], ckt, &lnNdens[BSIM4IDNOIZ], ckt,
THERMNOISE, here->BSIM4dNodePrime, THERMNOISE, here->BSIM4dNodePrime,
here->BSIM4sNodePrime, T2 * T4);
here->BSIM4sNodePrime, T2 * T4 * m);
/* Evaluate output noise due to two correlated noise sources */ /* Evaluate output noise due to two correlated noise sources */
omega = 2.0 * M_PI * data->freq; omega = 2.0 * M_PI * data->freq;
@ -467,20 +467,20 @@ double m;
NevalSrc2(&noizDens[BSIM4CORLNOIZ], NevalSrc2(&noizDens[BSIM4CORLNOIZ],
&lnNdens[BSIM4CORLNOIZ], ckt, &lnNdens[BSIM4CORLNOIZ], ckt,
THERMNOISE, here->BSIM4dNodePrime, THERMNOISE, here->BSIM4dNodePrime,
here->BSIM4sNodePrime, T2 * T3,
here->BSIM4sNodePrime, T2 * T3 * m,
here->BSIM4gNodePrime, here->BSIM4gNodePrime,
here->BSIM4sNodePrime, here->BSIM4sNodePrime,
T2 * T7, 0.5 * M_PI);
T2 * T7 * m, 0.5 * M_PI);
} }
else else
{ {
NevalSrc2(&noizDens[BSIM4CORLNOIZ], NevalSrc2(&noizDens[BSIM4CORLNOIZ],
&lnNdens[BSIM4CORLNOIZ], ckt, &lnNdens[BSIM4CORLNOIZ], ckt,
THERMNOISE, here->BSIM4sNodePrime, THERMNOISE, here->BSIM4sNodePrime,
here->BSIM4dNodePrime, T2 * T3,
here->BSIM4dNodePrime, T2 * T3 * m,
here->BSIM4gNodePrime, here->BSIM4gNodePrime,
here->BSIM4dNodePrime, here->BSIM4dNodePrime,
T2 * T7, 0.5 * M_PI);
T2 * T7 * m, 0.5 * M_PI);
} }
break; break;
} }

Loading…
Cancel
Save