bjt, dio, jfet, res: use device temperature for noise analysis too
This commit is contained in:
parent
20c82a5b1b
commit
a1dbd3f3c8
|
|
@ -82,17 +82,23 @@ BJTnoise(int mode, int operation, GENmodel*genmodel, CKTcircuit *ckt,
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
|
||||||
case N_DENS:
|
case N_DENS:
|
||||||
NevalSrc(&noizDens[BJTRCNOIZ],&lnNdens[BJTRCNOIZ],
|
double dtemp;
|
||||||
|
if (inst->BJTtempGiven)
|
||||||
|
dtemp = inst->BJTtemp - ckt->CKTtemp + (model->BJTtnom-CONSTCtoK);
|
||||||
|
else
|
||||||
|
dtemp = inst->BJTdtemp;
|
||||||
|
|
||||||
|
NevalSrcInstanceTemp(&noizDens[BJTRCNOIZ],&lnNdens[BJTRCNOIZ],
|
||||||
ckt, THERMNOISE, inst->BJTcollCXNode, inst->BJTcolNode,
|
ckt, THERMNOISE, inst->BJTcollCXNode, inst->BJTcolNode,
|
||||||
inst->BJTtcollectorConduct * inst->BJTm);
|
inst->BJTtcollectorConduct * inst->BJTm, dtemp);
|
||||||
|
|
||||||
NevalSrc(&noizDens[BJTRBNOIZ],&lnNdens[BJTRBNOIZ],
|
NevalSrcInstanceTemp(&noizDens[BJTRBNOIZ],&lnNdens[BJTRBNOIZ],
|
||||||
ckt, THERMNOISE, inst->BJTbasePrimeNode, inst->BJTbaseNode,
|
ckt, THERMNOISE, inst->BJTbasePrimeNode, inst->BJTbaseNode,
|
||||||
*(ckt->CKTstate0 + inst->BJTgx) * inst->BJTm);
|
*(ckt->CKTstate0 + inst->BJTgx) * inst->BJTm, dtemp);
|
||||||
|
|
||||||
NevalSrc(&noizDens[BJT_RE_NOISE],&lnNdens[BJT_RE_NOISE],
|
NevalSrcInstanceTemp(&noizDens[BJT_RE_NOISE],&lnNdens[BJT_RE_NOISE],
|
||||||
ckt, THERMNOISE, inst->BJTemitPrimeNode, inst->BJTemitNode,
|
ckt, THERMNOISE, inst->BJTemitPrimeNode, inst->BJTemitNode,
|
||||||
inst->BJTtemitterConduct * inst->BJTm);
|
inst->BJTtemitterConduct * inst->BJTm, dtemp);
|
||||||
|
|
||||||
NevalSrc(&noizDens[BJTICNOIZ],&lnNdens[BJTICNOIZ],
|
NevalSrc(&noizDens[BJTICNOIZ],&lnNdens[BJTICNOIZ],
|
||||||
ckt, SHOTNOISE, inst->BJTcolPrimeNode, inst->BJTemitPrimeNode,
|
ckt, SHOTNOISE, inst->BJTcolPrimeNode, inst->BJTemitPrimeNode,
|
||||||
|
|
|
||||||
|
|
@ -80,9 +80,17 @@ DIOnoise(int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
|
||||||
case N_DENS:
|
case N_DENS:
|
||||||
NevalSrc(&noizDens[DIORSNOIZ],&lnNdens[DIORSNOIZ],
|
|
||||||
|
double dtemp;
|
||||||
|
if (inst->DIOtempGiven)
|
||||||
|
dtemp = inst->DIOtemp - ckt->CKTtemp + (model->DIOnomTemp-CONSTCtoK);
|
||||||
|
else
|
||||||
|
dtemp = inst->DIOdtemp;
|
||||||
|
|
||||||
|
NevalSrcInstanceTemp(&noizDens[DIORSNOIZ],&lnNdens[DIORSNOIZ],
|
||||||
ckt, THERMNOISE, inst->DIOposPrimeNode, inst->DIOposNode,
|
ckt, THERMNOISE, inst->DIOposPrimeNode, inst->DIOposNode,
|
||||||
inst->DIOtConductance * inst->DIOarea * inst->DIOm);
|
inst->DIOtConductance * inst->DIOarea * inst->DIOm, dtemp);
|
||||||
|
|
||||||
NevalSrc(&noizDens[DIOIDNOIZ],&lnNdens[DIOIDNOIZ],
|
NevalSrc(&noizDens[DIOIDNOIZ],&lnNdens[DIOIDNOIZ],
|
||||||
ckt, SHOTNOISE, inst->DIOposPrimeNode, inst->DIOnegNode,
|
ckt, SHOTNOISE, inst->DIOposPrimeNode, inst->DIOnegNode,
|
||||||
*(ckt->CKTstate0 + inst->DIOcurrent));
|
*(ckt->CKTstate0 + inst->DIOcurrent));
|
||||||
|
|
|
||||||
|
|
@ -80,20 +80,27 @@ JFETnoise(int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *d
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
|
||||||
case N_DENS:
|
case N_DENS:
|
||||||
NevalSrc(&noizDens[JFETRDNOIZ],&lnNdens[JFETRDNOIZ],
|
|
||||||
ckt, THERMNOISE, inst->JFETdrainPrimeNode, inst->JFETdrainNode,
|
|
||||||
model->JFETdrainConduct * inst->JFETarea * inst->JFETm);
|
|
||||||
|
|
||||||
NevalSrc(&noizDens[JFETRSNOIZ],&lnNdens[JFETRSNOIZ],
|
double dtemp;
|
||||||
|
if (inst->JFETtempGiven)
|
||||||
|
dtemp = inst->JFETtemp - ckt->CKTtemp + (model->JFETtnom-CONSTCtoK);
|
||||||
|
else
|
||||||
|
dtemp = inst->JFETdtemp;
|
||||||
|
|
||||||
|
NevalSrcInstanceTemp(&noizDens[JFETRDNOIZ],&lnNdens[JFETRDNOIZ],
|
||||||
|
ckt, THERMNOISE, inst->JFETdrainPrimeNode, inst->JFETdrainNode,
|
||||||
|
model->JFETdrainConduct * inst->JFETarea * inst->JFETm, dtemp);
|
||||||
|
|
||||||
|
NevalSrcInstanceTemp(&noizDens[JFETRSNOIZ],&lnNdens[JFETRSNOIZ],
|
||||||
ckt, THERMNOISE, inst->JFETsourcePrimeNode,
|
ckt, THERMNOISE, inst->JFETsourcePrimeNode,
|
||||||
inst->JFETsourceNode, model->JFETsourceConduct *
|
inst->JFETsourceNode, model->JFETsourceConduct *
|
||||||
inst->JFETarea * inst->JFETm);
|
inst->JFETarea * inst->JFETm, inst->JFETdtemp);
|
||||||
|
|
||||||
if (model->JFETnlev < 3) {
|
if (model->JFETnlev < 3) {
|
||||||
NevalSrc(&noizDens[JFETIDNOIZ],&lnNdens[JFETIDNOIZ],
|
NevalSrcInstanceTemp(&noizDens[JFETIDNOIZ],&lnNdens[JFETIDNOIZ],
|
||||||
ckt, THERMNOISE, inst->JFETdrainPrimeNode,
|
ckt, THERMNOISE, inst->JFETdrainPrimeNode,
|
||||||
inst->JFETsourcePrimeNode,
|
inst->JFETsourcePrimeNode,
|
||||||
(2.0 / 3.0 * inst->JFETm * fabs(*(ckt->CKTstate0 + inst->JFETgm))));
|
(2.0 / 3.0 * inst->JFETm * fabs(*(ckt->CKTstate0 + inst->JFETgm))), inst->JFETdtemp);
|
||||||
} else {
|
} else {
|
||||||
vgs = *(ckt->CKTstate0 + inst->JFETvgs);
|
vgs = *(ckt->CKTstate0 + inst->JFETvgs);
|
||||||
vds = vgs - *(ckt->CKTstate0 + inst->JFETvgd);
|
vds = vgs - *(ckt->CKTstate0 + inst->JFETvgd);
|
||||||
|
|
@ -104,10 +111,10 @@ JFETnoise(int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *d
|
||||||
alpha = 0; /* saturation region */
|
alpha = 0; /* saturation region */
|
||||||
beta = inst->JFETtBeta * inst->JFETarea * inst->JFETm;
|
beta = inst->JFETtBeta * inst->JFETarea * inst->JFETm;
|
||||||
|
|
||||||
NevalSrc(&noizDens[JFETIDNOIZ],&lnNdens[JFETIDNOIZ],
|
NevalSrcInstanceTemp(&noizDens[JFETIDNOIZ],&lnNdens[JFETIDNOIZ],
|
||||||
ckt, THERMNOISE, inst->JFETdrainPrimeNode,
|
ckt, THERMNOISE, inst->JFETdrainPrimeNode,
|
||||||
inst->JFETsourcePrimeNode,
|
inst->JFETsourcePrimeNode,
|
||||||
(2.0 / 3.0*beta*vgst*(1 + alpha + alpha*alpha) / (1 + alpha) * model->JFETgdsnoi));
|
(2.0 / 3.0*beta*vgst*(1 + alpha + alpha*alpha) / (1 + alpha) * model->JFETgdsnoi), inst->JFETdtemp);
|
||||||
}
|
}
|
||||||
|
|
||||||
NevalSrc(&noizDens[JFETFLNOIZ], NULL, ckt,
|
NevalSrc(&noizDens[JFETFLNOIZ], NULL, ckt,
|
||||||
|
|
|
||||||
|
|
@ -88,13 +88,19 @@ RESnoise(int mode, int operation, GENmodel*genmodel, CKTcircuit *ckt,
|
||||||
|
|
||||||
case N_DENS:
|
case N_DENS:
|
||||||
|
|
||||||
|
double dtemp;
|
||||||
|
if (inst->REStempGiven)
|
||||||
|
dtemp = inst->REStemp - ckt->CKTtemp + (model->REStnom-CONSTCtoK);
|
||||||
|
else
|
||||||
|
dtemp = inst->RESdtemp;
|
||||||
|
|
||||||
NevalSrcInstanceTemp(&noizDens[RESTHNOIZ],&lnNdens[RESTHNOIZ],
|
NevalSrcInstanceTemp(&noizDens[RESTHNOIZ],&lnNdens[RESTHNOIZ],
|
||||||
ckt, THERMNOISE, inst->RESposNode, inst->RESnegNode,
|
ckt, THERMNOISE, inst->RESposNode, inst->RESnegNode,
|
||||||
inst->RESconduct, inst->RESdtemp);
|
inst->RESconduct, dtemp);
|
||||||
|
|
||||||
NevalSrcInstanceTemp(&noizDens[RESFLNOIZ], NULL, ckt,
|
NevalSrc(&noizDens[RESFLNOIZ], NULL, ckt,
|
||||||
N_GAIN, inst->RESposNode, inst->RESnegNode,
|
N_GAIN, inst->RESposNode, inst->RESnegNode,
|
||||||
(double) 0.0, (double) 0.0);
|
(double) 0.0);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
printf("DC current in resistor %s: %e\n", inst->RESname, inst->REScurrent);
|
printf("DC current in resistor %s: %e\n", inst->RESname, inst->REScurrent);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue