VDMOS scaling fixed.
This commit is contained in:
parent
807ff2b90c
commit
8d26e8b2cb
|
|
@ -48,7 +48,8 @@ VDMOSacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
GmT = model->VDMOStype * here->VDMOSgmT;
|
GmT = model->VDMOStype * here->VDMOSgmT;
|
||||||
cgT = model->VDMOStype * here->VDMOScgT;
|
cgT = model->VDMOStype * here->VDMOScgT;
|
||||||
cdT = model->VDMOStype * here->VDMOScdT;
|
cdT = model->VDMOStype * here->VDMOScdT;
|
||||||
cTt = model->VDMOScthj;
|
// Everything is computed for m parallel instances... so scale cthj accordingly
|
||||||
|
cTt = here->VDMOSm * model->VDMOScthj;
|
||||||
gTtg = here->VDMOSgtempg;
|
gTtg = here->VDMOSgtempg;
|
||||||
gTtdp = here->VDMOSgtempd;
|
gTtdp = here->VDMOSgtempd;
|
||||||
gTtt = here->VDMOSgtempT;
|
gTtt = here->VDMOSgtempT;
|
||||||
|
|
@ -57,7 +58,8 @@ VDMOSacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
GmT = -model->VDMOStype * here->VDMOSgmT;
|
GmT = -model->VDMOStype * here->VDMOSgmT;
|
||||||
cgT = -model->VDMOStype * here->VDMOScgT;
|
cgT = -model->VDMOStype * here->VDMOScgT;
|
||||||
cdT = -model->VDMOStype * here->VDMOScdT;
|
cdT = -model->VDMOStype * here->VDMOScdT;
|
||||||
cTt = -model->VDMOScthj;
|
// Everything is computed for m parallel instances... so scale cthj accordingly
|
||||||
|
cTt = - here->VDMOSm * model->VDMOScthj;
|
||||||
gTtg = -here->VDMOSgtempg;
|
gTtg = -here->VDMOSgtempg;
|
||||||
gTtdp = -here->VDMOSgtempd;
|
gTtdp = -here->VDMOSgtempd;
|
||||||
gTtt = -here->VDMOSgtempT;
|
gTtt = -here->VDMOSgtempT;
|
||||||
|
|
|
||||||
|
|
@ -462,10 +462,12 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
* you must add in the other half from previous time
|
* you must add in the other half from previous time
|
||||||
* and the constant part
|
* and the constant part
|
||||||
*/
|
*/
|
||||||
DevCapVDMOS(vgd, cgdmin, cgdmax, a, cgs,
|
// 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,
|
||||||
(ckt->CKTstate0 + here->VDMOScapgs),
|
(ckt->CKTstate0 + here->VDMOScapgs),
|
||||||
(ckt->CKTstate0 + here->VDMOScapgd));
|
(ckt->CKTstate0 + here->VDMOScapgd));
|
||||||
*(ckt->CKTstate0 + here->VDMOScapth) = model->VDMOScthj; /* always constant */
|
// Everything is computed for m parallel instances... so scale cthj accordingly
|
||||||
|
*(ckt->CKTstate0 + here->VDMOScapth) = here->VDMOSm * model->VDMOScthj; /* always constant */
|
||||||
|
|
||||||
vgs1 = *(ckt->CKTstate1 + here->VDMOSvgs);
|
vgs1 = *(ckt->CKTstate1 + here->VDMOSvgs);
|
||||||
vgd1 = vgs1 - *(ckt->CKTstate1 + here->VDMOSvds);
|
vgd1 = vgs1 - *(ckt->CKTstate1 + here->VDMOSvds);
|
||||||
|
|
@ -639,8 +641,9 @@ bypass:
|
||||||
|
|
||||||
if (selfheat)
|
if (selfheat)
|
||||||
{
|
{
|
||||||
double gthjc = 1/model->VDMOSrthjc;
|
// Everything is computed for m parallel instances... so scale gthjc and gthja accordingly
|
||||||
double gthca = 1/model->VDMOSrthca;
|
double gthjc = here->VDMOSm / model->VDMOSrthjc;
|
||||||
|
double gthca = here->VDMOSm / model->VDMOSrthca;
|
||||||
(*(here->VDMOSDtempPtr) += dIrd_dT);
|
(*(here->VDMOSDtempPtr) += dIrd_dT);
|
||||||
(*(here->VDMOSDPtempPtr) += GmT - dIrd_dT);
|
(*(here->VDMOSDPtempPtr) += GmT - dIrd_dT);
|
||||||
(*(here->VDMOSSPtempPtr) += -GmT);
|
(*(here->VDMOSSPtempPtr) += -GmT);
|
||||||
|
|
|
||||||
|
|
@ -110,11 +110,12 @@ VDMOSnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
|
||||||
NevalSrc(&noizDens[VDMOSFLNOIZ], NULL, ckt,
|
NevalSrc(&noizDens[VDMOSFLNOIZ], NULL, ckt,
|
||||||
N_GAIN,inst->VDMOSdNodePrime, inst->VDMOSsNodePrime,
|
N_GAIN,inst->VDMOSdNodePrime, inst->VDMOSsNodePrime,
|
||||||
(double)0.0);
|
(double)0.0);
|
||||||
|
// VDMOScd is scaled with m, no need to scale coxSquared (which is a constant)
|
||||||
|
// Should be proportional to m
|
||||||
noizDens[VDMOSFLNOIZ] *= model->VDMOSfNcoef *
|
noizDens[VDMOSFLNOIZ] *= model->VDMOSfNcoef *
|
||||||
exp(model->VDMOSfNexp *
|
exp(model->VDMOSfNexp *
|
||||||
log(MAX(fabs(inst->VDMOScd),N_MINLOG))) /
|
log(MAX(fabs(inst->VDMOScd),N_MINLOG))) /
|
||||||
(data->freq *
|
(data->freq * coxSquared);
|
||||||
inst->VDMOSm * coxSquared);
|
|
||||||
lnNdens[VDMOSFLNOIZ] =
|
lnNdens[VDMOSFLNOIZ] =
|
||||||
log(MAX(noizDens[VDMOSFLNOIZ],N_MINLOG));
|
log(MAX(noizDens[VDMOSFLNOIZ],N_MINLOG));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue