diff --git a/src/spicelib/devices/mos1/mos1noi.c b/src/spicelib/devices/mos1/mos1noi.c index 2c853c9a9..dcdfae69d 100644 --- a/src/spicelib/devices/mos1/mos1noi.c +++ b/src/spicelib/devices/mos1/mos1noi.c @@ -95,13 +95,19 @@ MOS1noise(int mode, int operation, GENmodel * genmodel, CKTcircuit * ckt, switch (mode) { case N_DENS: - NevalSrc( & noizDens[MOS1RDNOIZ], & lnNdens[MOS1RDNOIZ], - ckt, THERMNOISE, inst->MOS1dNodePrime, inst->MOS1dNode, - inst->MOS1drainConductance); + double dtemp; + if (inst->MOS1tempGiven) + dtemp = inst->MOS1temp - ckt->CKTtemp + (model->MOS1tnom-CONSTCtoK); + else + dtemp = inst->MOS1dtemp; - NevalSrc( & noizDens[MOS1RSNOIZ], & lnNdens[MOS1RSNOIZ], + NevalSrcInstanceTemp( & noizDens[MOS1RDNOIZ], & lnNdens[MOS1RDNOIZ], + ckt, THERMNOISE, inst->MOS1dNodePrime, inst->MOS1dNode, + inst->MOS1drainConductance, dtemp); + + NevalSrcInstanceTemp( & noizDens[MOS1RSNOIZ], & lnNdens[MOS1RSNOIZ], ckt, THERMNOISE, inst->MOS1sNodePrime, inst->MOS1sNode, - inst->MOS1sourceConductance); + inst->MOS1sourceConductance, dtemp); if (model->MOS1nlev < 3) { @@ -127,9 +133,9 @@ MOS1noise(int mode, int operation, GENmodel * genmodel, CKTcircuit * ckt, Sid = 2.0 / 3.0 * beta * vgst * (1.0+alpha+alpha*alpha) / (1.0+alpha) * model->MOS1gdsnoi; } - NevalSrc( & noizDens[MOS1IDNOIZ], & lnNdens[MOS1IDNOIZ], + NevalSrcInstanceTemp( & noizDens[MOS1IDNOIZ], & lnNdens[MOS1IDNOIZ], ckt, THERMNOISE, inst->MOS1dNodePrime, inst->MOS1sNodePrime, - Sid); + Sid, dtemp); NevalSrc( & noizDens[MOS1FLNOIZ], NULL, ckt, N_GAIN, inst->MOS1dNodePrime, inst->MOS1sNodePrime, diff --git a/src/spicelib/devices/mos2/mos2noi.c b/src/spicelib/devices/mos2/mos2noi.c index c3e942adf..85e969115 100644 --- a/src/spicelib/devices/mos2/mos2noi.c +++ b/src/spicelib/devices/mos2/mos2noi.c @@ -84,13 +84,19 @@ MOS2noise(int mode, int operation, GENmodel * genmodel, CKTcircuit * ckt, switch (mode) { case N_DENS: - NevalSrc( & noizDens[MOS2RDNOIZ], & lnNdens[MOS2RDNOIZ], - ckt, THERMNOISE, inst->MOS2dNodePrime, inst->MOS2dNode, - inst->MOS2drainConductance); + double dtemp; + if (inst->MOS2tempGiven) + dtemp = inst->MOS2temp - ckt->CKTtemp + (model->MOS2tnom-CONSTCtoK); + else + dtemp = inst->MOS2dtemp; - NevalSrc( & noizDens[MOS2RSNOIZ], & lnNdens[MOS2RSNOIZ], + NevalSrcInstanceTemp( & noizDens[MOS2RDNOIZ], & lnNdens[MOS2RDNOIZ], + ckt, THERMNOISE, inst->MOS2dNodePrime, inst->MOS2dNode, + inst->MOS2drainConductance, dtemp); + + NevalSrcInstanceTemp( & noizDens[MOS2RSNOIZ], & lnNdens[MOS2RSNOIZ], ckt, THERMNOISE, inst->MOS2sNodePrime, inst->MOS2sNode, - inst->MOS2sourceConductance); + inst->MOS2sourceConductance, dtemp); if (model->MOS2nlev < 3) { @@ -116,9 +122,9 @@ MOS2noise(int mode, int operation, GENmodel * genmodel, CKTcircuit * ckt, Sid = 2.0 / 3.0 * beta * vgst * (1.0+alpha+alpha*alpha) / (1.0+alpha) * model->MOS2gdsnoi; } - NevalSrc( & noizDens[MOS2IDNOIZ], & lnNdens[MOS2IDNOIZ], + NevalSrcInstanceTemp( & noizDens[MOS2IDNOIZ], & lnNdens[MOS2IDNOIZ], ckt, THERMNOISE, inst->MOS2dNodePrime, inst->MOS2sNodePrime, - Sid); + Sid, dtemp); NevalSrc( & noizDens[MOS2FLNOIZ], NULL, ckt, N_GAIN, inst->MOS2dNodePrime, inst->MOS2sNodePrime, diff --git a/src/spicelib/devices/mos3/mos3noi.c b/src/spicelib/devices/mos3/mos3noi.c index 3d7551184..ea180a8ee 100644 --- a/src/spicelib/devices/mos3/mos3noi.c +++ b/src/spicelib/devices/mos3/mos3noi.c @@ -84,13 +84,19 @@ MOS3noise(int mode, int operation, GENmodel * genmodel, CKTcircuit * ckt, switch (mode) { case N_DENS: - NevalSrc( & noizDens[MOS3RDNOIZ], & lnNdens[MOS3RDNOIZ], - ckt, THERMNOISE, inst->MOS3dNodePrime, inst->MOS3dNode, - inst->MOS3drainConductance); + double dtemp; + if (inst->MOS3tempGiven) + dtemp = inst->MOS3temp - ckt->CKTtemp + (model->MOS3tnom-CONSTCtoK); + else + dtemp = inst->MOS3dtemp; - NevalSrc( & noizDens[MOS3RSNOIZ], & lnNdens[MOS3RSNOIZ], + NevalSrcInstanceTemp( & noizDens[MOS3RDNOIZ], & lnNdens[MOS3RDNOIZ], + ckt, THERMNOISE, inst->MOS3dNodePrime, inst->MOS3dNode, + inst->MOS3drainConductance, dtemp); + + NevalSrcInstanceTemp( & noizDens[MOS3RSNOIZ], & lnNdens[MOS3RSNOIZ], ckt, THERMNOISE, inst->MOS3sNodePrime, inst->MOS3sNode, - inst->MOS3sourceConductance); + inst->MOS3sourceConductance, dtemp); if (model->MOS3nlev < 3) { @@ -116,9 +122,9 @@ MOS3noise(int mode, int operation, GENmodel * genmodel, CKTcircuit * ckt, Sid = 2.0 / 3.0 * beta * vgst * (1.0+alpha+alpha*alpha) / (1.0+alpha) * model->MOS3gdsnoi; } - NevalSrc( & noizDens[MOS3IDNOIZ], & lnNdens[MOS3IDNOIZ], + NevalSrcInstanceTemp( & noizDens[MOS3IDNOIZ], & lnNdens[MOS3IDNOIZ], ckt, THERMNOISE, inst->MOS3dNodePrime, inst->MOS3sNodePrime, - Sid); + Sid, dtemp); NevalSrc( & noizDens[MOS3FLNOIZ], NULL, ckt, N_GAIN, inst->MOS3dNodePrime, inst->MOS3sNodePrime,