VDMOS: apply m scaling fix for acld as well

This commit is contained in:
dwarning 2025-11-15 09:50:51 +01:00 committed by Holger Vogt
parent 2bc63e71ae
commit 6bd5c2d03b
2 changed files with 21 additions and 18 deletions

View File

@ -133,19 +133,22 @@ VDMOSacLoad(GENmodel *inModel, CKTcircuit *ckt)
*(here->VDIORPdPtr +1) -= xceq;
if (selfheat)
{
*(here->VDMOSDPtempPtr) += GmT;
// Everything is computed for m parallel instances... so scale gthjc and gthja accordingly
double gthjc = here->VDMOSm / model->VDMOSrthjc;
double gthca = here->VDMOSm / model->VDMOSrthca;
*(here->VDMOSDPtempPtr) += GmT;
*(here->VDMOSSPtempPtr) += -GmT;
*(here->VDMOSTemptempPtr) += gTtt + 1/model->VDMOSrthjc;
*(here->VDMOSTempgpPtr) += gTtg;
*(here->VDMOSTempdpPtr) += gTtdp;
*(here->VDMOSTempspPtr) += gTtsp;
*(here->VDMOSTemptcasePtr) += -1/model->VDMOSrthjc;
*(here->VDMOSTcasetempPtr) += -1/model->VDMOSrthjc;
*(here->VDMOSTcasetcasePtr) += 1/model->VDMOSrthjc + 1/model->VDMOSrthca;
*(here->VDMOSTptpPtr) += 1/model->VDMOSrthca;
*(here->VDMOSTptcasePtr) += -1/model->VDMOSrthca;
*(here->VDMOSTcasetpPtr) += -1/model->VDMOSrthca;
*(here->VDMOSTemptempPtr) += gTtt + gthjc;
*(here->VDMOSTempgpPtr) += gTtg;
*(here->VDMOSTempdpPtr) += gTtdp;
*(here->VDMOSTempspPtr) += gTtsp;
*(here->VDMOSTemptcasePtr) += -gthjc;
*(here->VDMOSTcasetempPtr) += -gthjc;
*(here->VDMOSTcasetcasePtr) += gthjc + gthca;
*(here->VDMOSTptpPtr) += gthca;
*(here->VDMOSTptcasePtr) += -gthca;
*(here->VDMOSTcasetpPtr) += -gthca;
*(here->VDMOSCktTtpPtr) += 1.0;
*(here->VDMOSTpcktTPtr) += 1.0;

View File

@ -67,16 +67,17 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
/* loop through all the VDMOS device models */
for (; model != NULL; model = VDMOSnextModel(model)) {
/* VDMOS capacitance parameters */
const double cgdmin = model->VDMOScgdmin;
const double cgdmax = model->VDMOScgdmax;
const double a = model->VDMOSa;
const double cgs = model->VDMOScgs;
/* loop through all the instances of the model */
for (here = VDMOSinstances(model); here != NULL;
here = VDMOSnextInstance(here)) {
/* VDMOS capacitance parameters */
const double cgdmin = here->VDMOSm * model->VDMOScgdmin;
const double cgdmax = here->VDMOSm * model->VDMOScgdmax;
const double a = model->VDMOSa;
const double cgs = here->VDMOSm * model->VDMOScgs;
Temp = here->VDMOStemp;
selfheat = (here->VDMOSthermal) && (model->VDMOSrthjcGiven);
if (selfheat)
@ -462,8 +463,7 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
* you must add in the other half from previous time
* and the constant part
*/
// Everything is computed for m parallel instances... scale ggdmin, cgdmax, and cgs accordingly
DevCapVDMOS(vgd, here->VDMOSm*cgdmin, here->VDMOSm*cgdmax, a, here->VDMOSm*cgs,
DevCapVDMOS(vgd, cgdmin, cgdmax, a, cgs,
(ckt->CKTstate0 + here->VDMOScapgs),
(ckt->CKTstate0 + here->VDMOScapgd));
// Everything is computed for m parallel instances... so scale cthj accordingly