VDMOS separate dc and thermal parts

This commit is contained in:
dwarning 2020-03-13 19:13:01 +01:00 committed by Holger Vogt
parent 659ade6cf2
commit 034f415621
1 changed files with 8 additions and 9 deletions

View File

@ -110,8 +110,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
else
Check_th = 0;
vt = CONSTKoverQ * here->VDMOStemp;
/* first, we compute a few useful values - these could be
* pre-computed, but for historical reasons are still done
* here. They may be moved at the expense of instance size
@ -142,7 +140,7 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
vds = 0.0;
}
} else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->VDMOSoff)) {
delTemp = vgs = vds = 0.0;
vgs = vds = delTemp = 0.0;
/*
* ok - now to do the start-up operations
@ -307,7 +305,7 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
}
Temp = delTemp + here->VDMOStemp;
Temp = here->VDMOStemp + delTemp;
here->VDMOSTempSH = Temp; /* added for portability of SH Temp for noise analysis */
/* Calculate temperature dependent values for self-heating effect */
@ -594,21 +592,21 @@ bypass:
xnrm = 1;
xrev = 0;
cdreq = model->VDMOStype*(cdrain - here->VDMOSgds*vds
- here->VDMOSgm*vgs)
- GmT * delTemp;
- here->VDMOSgm*vgs);
} else {
xnrm = 0;
xrev = 1;
cdreq = -(model->VDMOStype)*(cdrain - here->VDMOSgds*(-vds)
- here->VDMOSgm*vgd)
- GmT * delTemp;
- here->VDMOSgm*vgd);
}
*(ckt->CKTrhs + here->VDMOSgNodePrime) -= (model->VDMOStype * (ceqgs + ceqgd));
*(ckt->CKTrhs + here->VDMOSdNodePrime) += (-cdreq + model->VDMOStype * ceqgd);
*(ckt->CKTrhs + here->VDMOSsNodePrime) += cdreq + model->VDMOStype * ceqgs;
if (selfheat) {
*(ckt->CKTrhs + here->VDMOStempNode) -= here->VDMOScth + ceqqth; /* dissipated power + Cthj current */
*(ckt->CKTrhs + here->VDMOSdNodePrime) += GmT * delTemp;
*(ckt->CKTrhs + here->VDMOSsNodePrime) += -GmT * delTemp;
*(ckt->CKTrhs + here->VDMOStempNode) -= here->VDMOScth + ceqqth; /* MOS dissipated power + Cthj current */
*(ckt->CKTrhs + here->VDMOSvcktTbranch) = ckt->CKTtemp-CONSTCtoK; /* ckt temperature */
}
@ -686,6 +684,7 @@ bypass:
gdb = 0.0;
csat = here->VDIOtSatCur;
gspr = here->VDIOtConductance;
vt = CONSTKoverQ * Temp;
vte = model->VDMOSn * vt;
vtebrk = model->VDIObrkdEmissionCoeff * vt;
vbrknp = here->VDIOtBrkdwnV;