VDMOS separate dc and thermal parts
This commit is contained in:
parent
659ade6cf2
commit
034f415621
|
|
@ -110,8 +110,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
else
|
else
|
||||||
Check_th = 0;
|
Check_th = 0;
|
||||||
|
|
||||||
vt = CONSTKoverQ * here->VDMOStemp;
|
|
||||||
|
|
||||||
/* first, we compute a few useful values - these could be
|
/* first, we compute a few useful values - these could be
|
||||||
* pre-computed, but for historical reasons are still done
|
* pre-computed, but for historical reasons are still done
|
||||||
* here. They may be moved at the expense of instance size
|
* here. They may be moved at the expense of instance size
|
||||||
|
|
@ -142,7 +140,7 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
vds = 0.0;
|
vds = 0.0;
|
||||||
}
|
}
|
||||||
} else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->VDMOSoff)) {
|
} 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
|
* 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 */
|
here->VDMOSTempSH = Temp; /* added for portability of SH Temp for noise analysis */
|
||||||
|
|
||||||
/* Calculate temperature dependent values for self-heating effect */
|
/* Calculate temperature dependent values for self-heating effect */
|
||||||
|
|
@ -594,21 +592,21 @@ bypass:
|
||||||
xnrm = 1;
|
xnrm = 1;
|
||||||
xrev = 0;
|
xrev = 0;
|
||||||
cdreq = model->VDMOStype*(cdrain - here->VDMOSgds*vds
|
cdreq = model->VDMOStype*(cdrain - here->VDMOSgds*vds
|
||||||
- here->VDMOSgm*vgs)
|
- here->VDMOSgm*vgs);
|
||||||
- GmT * delTemp;
|
|
||||||
} else {
|
} else {
|
||||||
xnrm = 0;
|
xnrm = 0;
|
||||||
xrev = 1;
|
xrev = 1;
|
||||||
cdreq = -(model->VDMOStype)*(cdrain - here->VDMOSgds*(-vds)
|
cdreq = -(model->VDMOStype)*(cdrain - here->VDMOSgds*(-vds)
|
||||||
- here->VDMOSgm*vgd)
|
- here->VDMOSgm*vgd);
|
||||||
- GmT * delTemp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*(ckt->CKTrhs + here->VDMOSgNodePrime) -= (model->VDMOStype * (ceqgs + ceqgd));
|
*(ckt->CKTrhs + here->VDMOSgNodePrime) -= (model->VDMOStype * (ceqgs + ceqgd));
|
||||||
*(ckt->CKTrhs + here->VDMOSdNodePrime) += (-cdreq + model->VDMOStype * ceqgd);
|
*(ckt->CKTrhs + here->VDMOSdNodePrime) += (-cdreq + model->VDMOStype * ceqgd);
|
||||||
*(ckt->CKTrhs + here->VDMOSsNodePrime) += cdreq + model->VDMOStype * ceqgs;
|
*(ckt->CKTrhs + here->VDMOSsNodePrime) += cdreq + model->VDMOStype * ceqgs;
|
||||||
if (selfheat) {
|
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 */
|
*(ckt->CKTrhs + here->VDMOSvcktTbranch) = ckt->CKTtemp-CONSTCtoK; /* ckt temperature */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -686,6 +684,7 @@ bypass:
|
||||||
gdb = 0.0;
|
gdb = 0.0;
|
||||||
csat = here->VDIOtSatCur;
|
csat = here->VDIOtSatCur;
|
||||||
gspr = here->VDIOtConductance;
|
gspr = here->VDIOtConductance;
|
||||||
|
vt = CONSTKoverQ * Temp;
|
||||||
vte = model->VDMOSn * vt;
|
vte = model->VDMOSn * vt;
|
||||||
vtebrk = model->VDIObrkdEmissionCoeff * vt;
|
vtebrk = model->VDIObrkdEmissionCoeff * vt;
|
||||||
vbrknp = here->VDIOtBrkdwnV;
|
vbrknp = here->VDIOtBrkdwnV;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue