|
|
|
@ -32,32 +32,21 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
double DrainSatCur; |
|
|
|
double SourceSatCur; |
|
|
|
double arg; |
|
|
|
double cbhat; |
|
|
|
double cdhat; |
|
|
|
double cdrain; |
|
|
|
double cdreq; |
|
|
|
double ceq; |
|
|
|
double ceqbd; |
|
|
|
double ceqbs; |
|
|
|
double ceqgb; |
|
|
|
double ceqgd; |
|
|
|
double ceqgs; |
|
|
|
double delvbd; |
|
|
|
double delvbs; |
|
|
|
double delvds; |
|
|
|
double delvgd; |
|
|
|
double delvgs; |
|
|
|
double gcgb; |
|
|
|
double gcgd; |
|
|
|
double gcgs; |
|
|
|
double geq; |
|
|
|
double sarg; |
|
|
|
double vbd; |
|
|
|
double vbs; |
|
|
|
double vds; |
|
|
|
double vdsat; |
|
|
|
double vgb1; |
|
|
|
double vgb; |
|
|
|
double vgd1; |
|
|
|
double vgd; |
|
|
|
double vgdo; |
|
|
|
@ -72,13 +61,11 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
int xrev; |
|
|
|
double capgs = 0.0; /* total gate-source capacitance */ |
|
|
|
double capgd = 0.0; /* total gate-drain capacitance */ |
|
|
|
double capgb = 0.0; /* total gate-bulk capacitance */ |
|
|
|
int Check; |
|
|
|
#ifndef NOBYPASS |
|
|
|
double tempv; |
|
|
|
#endif /*NOBYPASS*/ |
|
|
|
int error; |
|
|
|
|
|
|
|
double CGBdummy; |
|
|
|
|
|
|
|
/* loop through all the VDMOS device models */ |
|
|
|
for (; model != NULL; model = VDMOSnextModel(model)) { |
|
|
|
/* VDMOS capacitance parameters */ |
|
|
|
@ -123,10 +110,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
/* predictor step */ |
|
|
|
|
|
|
|
xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvbs) = |
|
|
|
*(ckt->CKTstate1 + here->VDMOSvbs); |
|
|
|
vbs = (1 + xfact)* (*(ckt->CKTstate1 + here->VDMOSvbs)) |
|
|
|
- (xfact * (*(ckt->CKTstate2 + here->VDMOSvbs))); |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvgs) = |
|
|
|
*(ckt->CKTstate1 + here->VDMOSvgs); |
|
|
|
vgs = (1 + xfact)* (*(ckt->CKTstate1 + here->VDMOSvgs)) |
|
|
|
@ -135,17 +118,11 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
*(ckt->CKTstate1 + here->VDMOSvds); |
|
|
|
vds = (1 + xfact)* (*(ckt->CKTstate1 + here->VDMOSvds)) |
|
|
|
- (xfact * (*(ckt->CKTstate2 + here->VDMOSvds))); |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvbd) = |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvbs) - |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvds); |
|
|
|
} else { |
|
|
|
#endif /* PREDICTOR */ |
|
|
|
|
|
|
|
/* general iteration */ |
|
|
|
|
|
|
|
vbs = model->VDMOStype * ( |
|
|
|
*(ckt->CKTrhsOld + here->VDMOSbNode) - |
|
|
|
*(ckt->CKTrhsOld + here->VDMOSsNodePrime)); |
|
|
|
vgs = model->VDMOStype * ( |
|
|
|
*(ckt->CKTrhsOld + here->VDMOSgNodePrime) - |
|
|
|
*(ckt->CKTrhsOld + here->VDMOSsNodePrime)); |
|
|
|
@ -158,13 +135,9 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
|
|
|
|
/* now some common crunching for some more useful quantities */ |
|
|
|
|
|
|
|
vbs = 0; |
|
|
|
vbd = vbs - vds; |
|
|
|
vgd = vgs - vds; |
|
|
|
vgdo = *(ckt->CKTstate0 + here->VDMOSvgs) - |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvds); |
|
|
|
delvbs = vbs - *(ckt->CKTstate0 + here->VDMOSvbs); |
|
|
|
delvbd = vbd - *(ckt->CKTstate0 + here->VDMOSvbd); |
|
|
|
delvgs = vgs - *(ckt->CKTstate0 + here->VDMOSvgs); |
|
|
|
delvds = vds - *(ckt->CKTstate0 + here->VDMOSvds); |
|
|
|
delvgd = vgd - vgdo; |
|
|
|
@ -174,45 +147,20 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
if (here->VDMOSmode >= 0) { |
|
|
|
cdhat = |
|
|
|
here->VDMOScd - |
|
|
|
here->VDMOSgbd * delvbd + |
|
|
|
here->VDMOSgmbs * delvbs + |
|
|
|
here->VDMOSgm * delvgs + |
|
|
|
here->VDMOSgds * delvds; |
|
|
|
} else { |
|
|
|
cdhat = |
|
|
|
here->VDMOScd - |
|
|
|
(here->VDMOSgbd - |
|
|
|
here->VDMOSgmbs) * delvbd - |
|
|
|
here->VDMOSgm * delvgd + |
|
|
|
here->VDMOSgds * delvds; |
|
|
|
} |
|
|
|
cbhat = |
|
|
|
here->VDMOScbs + |
|
|
|
here->VDMOScbd + |
|
|
|
here->VDMOSgbd * delvbd + |
|
|
|
here->VDMOSgbs * delvbs; |
|
|
|
|
|
|
|
|
|
|
|
#ifndef NOBYPASS |
|
|
|
/* now lets see if we can bypass (ugh) */ |
|
|
|
tempv = (MAX(fabs(cbhat), |
|
|
|
fabs(here->VDMOScbs + here->VDMOScbd)) + |
|
|
|
ckt->CKTabstol); |
|
|
|
if ((!(ckt->CKTmode & |
|
|
|
(MODEINITPRED | MODEINITTRAN | MODEINITSMSIG))) && |
|
|
|
(ckt->CKTbypass) && |
|
|
|
(fabs(cbhat - (here->VDMOScbs + |
|
|
|
here->VDMOScbd)) < ckt->CKTreltol * tempv) && |
|
|
|
(fabs(delvbs) < (ckt->CKTreltol * |
|
|
|
MAX(fabs(vbs), |
|
|
|
fabs(*(ckt->CKTstate0 + |
|
|
|
here->VDMOSvbs))) + |
|
|
|
ckt->CKTvoltTol)) && |
|
|
|
(fabs(delvbd) < (ckt->CKTreltol * |
|
|
|
MAX(fabs(vbd), |
|
|
|
fabs(*(ckt->CKTstate0 + |
|
|
|
here->VDMOSvbd))) + |
|
|
|
ckt->CKTvoltTol)) && |
|
|
|
(fabs(delvgs) < (ckt->CKTreltol * |
|
|
|
MAX(fabs(vgs), |
|
|
|
fabs(*(ckt->CKTstate0 + |
|
|
|
@ -233,20 +181,15 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
* copy all the values computed last iteration out |
|
|
|
* and keep going |
|
|
|
*/ |
|
|
|
vbs = *(ckt->CKTstate0 + here->VDMOSvbs); |
|
|
|
vbd = *(ckt->CKTstate0 + here->VDMOSvbd); |
|
|
|
vgs = *(ckt->CKTstate0 + here->VDMOSvgs); |
|
|
|
vds = *(ckt->CKTstate0 + here->VDMOSvds); |
|
|
|
vgd = vgs - vds; |
|
|
|
vgb = vgs - vbs; |
|
|
|
cdrain = here->VDMOSmode * (here->VDMOScd + here->VDMOScbd); |
|
|
|
cdrain = here->VDMOSmode * (here->VDMOScd); |
|
|
|
if (ckt->CKTmode & (MODETRAN | MODETRANOP)) { |
|
|
|
capgs = (*(ckt->CKTstate0 + here->VDMOScapgs) + |
|
|
|
*(ckt->CKTstate1 + here->VDMOScapgs)); |
|
|
|
capgd = (*(ckt->CKTstate0 + here->VDMOScapgd) + |
|
|
|
*(ckt->CKTstate1 + here->VDMOScapgd)); |
|
|
|
capgb = (*(ckt->CKTstate0 + here->VDMOScapgb) + |
|
|
|
*(ckt->CKTstate1 + here->VDMOScapgb)); |
|
|
|
|
|
|
|
} |
|
|
|
goto bypass; |
|
|
|
@ -281,15 +224,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
} |
|
|
|
vgs = vgd + vds; |
|
|
|
} |
|
|
|
if (vds >= 0) { |
|
|
|
vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->VDMOSvbs), |
|
|
|
vt, here->VDMOSsourceVcrit, &Check); |
|
|
|
vbd = vbs - vds; |
|
|
|
} else { |
|
|
|
vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->VDMOSvbd), |
|
|
|
vt, here->VDMOSdrainVcrit, &Check); |
|
|
|
vbs = vbd + vds; |
|
|
|
} |
|
|
|
#endif /*NODELIMITING*/ |
|
|
|
|
|
|
|
|
|
|
|
@ -303,17 +237,15 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
if ((ckt->CKTmode & MODEINITJCT) && !here->VDMOSoff) { |
|
|
|
vds = model->VDMOStype * here->VDMOSicVDS; |
|
|
|
vgs = model->VDMOStype * here->VDMOSicVGS; |
|
|
|
vbs = model->VDMOStype * here->VDMOSicVBS; |
|
|
|
if ((vds == 0) && (vgs == 0) && (vbs == 0) && |
|
|
|
if ((vds == 0) && (vgs == 0) && |
|
|
|
((ckt->CKTmode & |
|
|
|
(MODETRAN | MODEDCOP | MODEDCTRANCURVE)) || |
|
|
|
(!(ckt->CKTmode & MODEUIC)))) { |
|
|
|
vbs = 0; |
|
|
|
vgs = model->VDMOStype * here->VDMOStVto; |
|
|
|
vds = 0; |
|
|
|
} |
|
|
|
} else { |
|
|
|
vbs = vgs = vds = 0; |
|
|
|
vgs = vds = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -322,20 +254,9 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
* now all the preliminaries are over - we can start doing the |
|
|
|
* real work |
|
|
|
*/ |
|
|
|
vbd = vbs - vds; |
|
|
|
vgd = vgs - vds; |
|
|
|
vgb = vgs - vbs; |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
* bulk-source and bulk-drain diodes are not available in vdmos |
|
|
|
*/ |
|
|
|
|
|
|
|
here->VDMOSgbs = 0; |
|
|
|
here->VDMOScbs = 0; |
|
|
|
here->VDMOSgbd = 0; |
|
|
|
here->VDMOScbd = 0; |
|
|
|
|
|
|
|
/* now to determine whether the user was able to correctly |
|
|
|
* identify the source and drain of his device |
|
|
|
*/ |
|
|
|
@ -387,7 +308,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
cdrm = cweakinv(model->VDMOSksubthres, model->VDMOSsubshift, vgst1, vds, model->VDMOSlambda, |
|
|
|
Beta, vt, model->VDMOSmtr); |
|
|
|
here->VDMOSgm = (cdrp - cdrm) / (2. * delta); |
|
|
|
here->VDMOSgmbs = 0.; |
|
|
|
} |
|
|
|
else if (model->VDMOSsubslGiven && (here->VDMOSmode == 1)) { |
|
|
|
double delta = 0.001; |
|
|
|
@ -409,7 +329,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
cdrm = cweakinv2(model->VDMOSsubsl, model->VDMOSsubshift, vgst1, vds, model->VDMOSlambda, |
|
|
|
Beta, vt, model->VDMOSmtr); |
|
|
|
here->VDMOSgm = (cdrp - cdrm) / (2. * delta); |
|
|
|
here->VDMOSgmbs = 0.; |
|
|
|
} else { |
|
|
|
if (vgst <= 0) { |
|
|
|
/* |
|
|
|
@ -418,7 +337,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
cdrain = 0; |
|
|
|
here->VDMOSgm = 0; |
|
|
|
here->VDMOSgds = 0; |
|
|
|
here->VDMOSgmbs = 0; |
|
|
|
} else { |
|
|
|
/* |
|
|
|
* saturation region |
|
|
|
@ -430,7 +348,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
cdrain = betap*vgst*vgst*.5; |
|
|
|
here->VDMOSgm = betap*vgst; |
|
|
|
here->VDMOSgds = model->VDMOSlambda*Beta*vgst*vgst*.5; |
|
|
|
here->VDMOSgmbs = 0.; |
|
|
|
} else { |
|
|
|
/* |
|
|
|
* linear region |
|
|
|
@ -442,7 +359,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
model->VDMOSlambda * Beta * |
|
|
|
(vds * here->VDMOSmode) * mtr * |
|
|
|
(vgst - .5 * (vds * here->VDMOSmode) * mtr); |
|
|
|
here->VDMOSgmbs = 0.; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -457,24 +373,10 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
/* |
|
|
|
* COMPUTE EQUIVALENT DRAIN CURRENT SOURCE |
|
|
|
*/ |
|
|
|
here->VDMOScd = here->VDMOSmode * cdrain - here->VDMOScbd; |
|
|
|
|
|
|
|
if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { |
|
|
|
/* |
|
|
|
* capacitance evaluation for drain-source is done with the bulk diode |
|
|
|
*/ |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqbs) = 0; |
|
|
|
here->VDMOScapbs = 0; |
|
|
|
|
|
|
|
*(ckt->CKTstate0 + here->VDMOSqbd) = 0; |
|
|
|
here->VDMOScapbd = 0; |
|
|
|
} |
|
|
|
|
|
|
|
here->VDMOScd = here->VDMOSmode * cdrain; |
|
|
|
|
|
|
|
/* save things away for next time */ |
|
|
|
|
|
|
|
*(ckt->CKTstate0 + here->VDMOSvbs) = vbs; |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvbd) = vbd; |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvgs) = vgs; |
|
|
|
*(ckt->CKTstate0 + here->VDMOSvds) = vds; |
|
|
|
|
|
|
|
@ -497,22 +399,18 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
DevCapVDMOS(vgd, cgdmin, cgdmax, a, cgs, |
|
|
|
(ckt->CKTstate0 + here->VDMOScapgs), |
|
|
|
(ckt->CKTstate0 + here->VDMOScapgd), |
|
|
|
(ckt->CKTstate0 + here->VDMOScapgb)); |
|
|
|
&CGBdummy); |
|
|
|
|
|
|
|
vgs1 = *(ckt->CKTstate1 + here->VDMOSvgs); |
|
|
|
vgd1 = vgs1 - *(ckt->CKTstate1 + here->VDMOSvds); |
|
|
|
vgb1 = vgs1 - *(ckt->CKTstate1 + here->VDMOSvbs); |
|
|
|
if (ckt->CKTmode & (MODETRANOP | MODEINITSMSIG)) { |
|
|
|
capgs = 2 * *(ckt->CKTstate0 + here->VDMOScapgs); |
|
|
|
capgd = 2 * *(ckt->CKTstate0 + here->VDMOScapgd); |
|
|
|
capgb = 2 * *(ckt->CKTstate0 + here->VDMOScapgb); |
|
|
|
} else { |
|
|
|
capgs = (*(ckt->CKTstate0 + here->VDMOScapgs) + |
|
|
|
*(ckt->CKTstate1 + here->VDMOScapgs)); |
|
|
|
capgd = (*(ckt->CKTstate0 + here->VDMOScapgd) + |
|
|
|
*(ckt->CKTstate1 + here->VDMOScapgd)); |
|
|
|
capgb = (*(ckt->CKTstate0 + here->VDMOScapgb) + |
|
|
|
*(ckt->CKTstate1 + here->VDMOScapgb)); |
|
|
|
} |
|
|
|
/* |
|
|
|
|
|
|
|
@ -526,9 +424,6 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgd) = |
|
|
|
(1 + xfact) * *(ckt->CKTstate1 + here->VDMOSqgd) |
|
|
|
- xfact * *(ckt->CKTstate2 + here->VDMOSqgd); |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgb) = |
|
|
|
(1 + xfact) * *(ckt->CKTstate1 + here->VDMOSqgb) |
|
|
|
- xfact * *(ckt->CKTstate2 + here->VDMOSqgb); |
|
|
|
} else { |
|
|
|
#endif /*PREDICTOR*/ |
|
|
|
if (ckt->CKTmode & MODETRAN) { |
|
|
|
@ -536,13 +431,10 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) |
|
|
|
*(ckt->CKTstate1 + here->VDMOSqgs); |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgd) = (vgd - vgd1)*capgd + |
|
|
|
*(ckt->CKTstate1 + here->VDMOSqgd); |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgb) = (vgb - vgb1)*capgb + |
|
|
|
*(ckt->CKTstate1 + here->VDMOSqgb); |
|
|
|
} else { |
|
|
|
/* TRANOP only */ |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgs) = vgs*capgs; |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgd) = vgd*capgd; |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgb) = vgb*capgb; |
|
|
|
} |
|
|
|
#ifndef PREDICTOR |
|
|
|
} |
|
|
|
@ -562,12 +454,9 @@ bypass : |
|
|
|
ceqgs = 0; |
|
|
|
gcgd = 0; |
|
|
|
ceqgd = 0; |
|
|
|
gcgb = 0; |
|
|
|
ceqgb = 0; |
|
|
|
} else { |
|
|
|
if (capgs == 0) *(ckt->CKTstate0 + here->VDMOScqgs) = 0; |
|
|
|
if (capgd == 0) *(ckt->CKTstate0 + here->VDMOScqgd) = 0; |
|
|
|
if (capgb == 0) *(ckt->CKTstate0 + here->VDMOScqgb) = 0; |
|
|
|
/* |
|
|
|
* calculate equivalent conductances and currents for |
|
|
|
* meyer"s capacitors |
|
|
|
@ -576,42 +465,32 @@ bypass : |
|
|
|
if (error) return(error); |
|
|
|
error = NIintegrate(ckt, &gcgd, &ceqgd, capgd, here->VDMOSqgd); |
|
|
|
if (error) return(error); |
|
|
|
error = NIintegrate(ckt, &gcgb, &ceqgb, capgb, here->VDMOSqgb); |
|
|
|
if (error) return(error); |
|
|
|
ceqgs = ceqgs - gcgs*vgs + ckt->CKTag[0] * |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgs); |
|
|
|
ceqgd = ceqgd - gcgd*vgd + ckt->CKTag[0] * |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgd); |
|
|
|
ceqgb = ceqgb - gcgb*vgb + ckt->CKTag[0] * |
|
|
|
*(ckt->CKTstate0 + here->VDMOSqgb); |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* load current vector |
|
|
|
*/ |
|
|
|
ceqbs = model->VDMOStype * |
|
|
|
(here->VDMOScbs - (here->VDMOSgbs)*vbs); |
|
|
|
ceqbd = model->VDMOStype * |
|
|
|
(here->VDMOScbd - (here->VDMOSgbd)*vbd); |
|
|
|
if (here->VDMOSmode >= 0) { |
|
|
|
xnrm = 1; |
|
|
|
xrev = 0; |
|
|
|
cdreq = model->VDMOStype*(cdrain - here->VDMOSgds*vds - |
|
|
|
here->VDMOSgm*vgs - here->VDMOSgmbs*vbs); |
|
|
|
here->VDMOSgm*vgs); |
|
|
|
} else { |
|
|
|
xnrm = 0; |
|
|
|
xrev = 1; |
|
|
|
cdreq = -(model->VDMOStype)*(cdrain - here->VDMOSgds*(-vds) - |
|
|
|
here->VDMOSgm*vgd - here->VDMOSgmbs*vbd); |
|
|
|
here->VDMOSgm*vgd); |
|
|
|
} |
|
|
|
*(ckt->CKTrhs + here->VDMOSgNodePrime) -= |
|
|
|
(model->VDMOStype * (ceqgs + ceqgb + ceqgd)); |
|
|
|
*(ckt->CKTrhs + here->VDMOSbNode) -= |
|
|
|
(ceqbs + ceqbd - model->VDMOStype * ceqgb); |
|
|
|
(model->VDMOStype * (ceqgs + ceqgd)); |
|
|
|
*(ckt->CKTrhs + here->VDMOSdNodePrime) += |
|
|
|
(ceqbd - cdreq + model->VDMOStype * ceqgd); |
|
|
|
(- cdreq + model->VDMOStype * ceqgd); |
|
|
|
*(ckt->CKTrhs + here->VDMOSsNodePrime) += |
|
|
|
cdreq + ceqbs + model->VDMOStype * ceqgs; |
|
|
|
cdreq + model->VDMOStype * ceqgs; |
|
|
|
|
|
|
|
|
|
|
|
/* quasi saturation |
|
|
|
@ -636,35 +515,28 @@ bypass : |
|
|
|
*(here->VDMOSDdPtr) += (here->VDMOSdrainConductance + here->VDMOSdsConductance); |
|
|
|
*(here->VDMOSGgPtr) += (here->VDMOSgateConductance); //((gcgd + gcgs + gcgb)); |
|
|
|
*(here->VDMOSSsPtr) += (here->VDMOSsourceConductance + here->VDMOSdsConductance); |
|
|
|
*(here->VDMOSBbPtr) += (here->VDMOSgbd + here->VDMOSgbs + gcgb); |
|
|
|
*(here->VDMOSDPdpPtr) += |
|
|
|
(here->VDMOSdrainConductance + here->VDMOSgds + |
|
|
|
here->VDMOSgbd + xrev*(here->VDMOSgm + here->VDMOSgmbs) + gcgd); |
|
|
|
xrev*(here->VDMOSgm) + gcgd); |
|
|
|
*(here->VDMOSSPspPtr) += |
|
|
|
(here->VDMOSsourceConductance + here->VDMOSgds + |
|
|
|
here->VDMOSgbs + xnrm*(here->VDMOSgm + here->VDMOSgmbs) + gcgs); |
|
|
|
xnrm*(here->VDMOSgm) + gcgs); |
|
|
|
*(here->VDMOSGPgpPtr) += |
|
|
|
(here->VDMOSgateConductance) + (gcgd + gcgs + gcgb); |
|
|
|
(here->VDMOSgateConductance) + (gcgd + gcgs); |
|
|
|
*(here->VDMOSGgpPtr) += (-here->VDMOSgateConductance); |
|
|
|
*(here->VDMOSDdpPtr) += (-here->VDMOSdrainConductance); |
|
|
|
*(here->VDMOSGPgPtr) += (-here->VDMOSgateConductance); |
|
|
|
*(here->VDMOSGPbPtr) -= gcgb; |
|
|
|
*(here->VDMOSGPdpPtr) -= gcgd; |
|
|
|
*(here->VDMOSGPspPtr) -= gcgs; |
|
|
|
*(here->VDMOSSspPtr) += (-here->VDMOSsourceConductance); |
|
|
|
*(here->VDMOSBgpPtr) -= gcgb; |
|
|
|
*(here->VDMOSBdpPtr) -= here->VDMOSgbd; |
|
|
|
*(here->VDMOSBspPtr) -= here->VDMOSgbs; |
|
|
|
*(here->VDMOSDPdPtr) += (-here->VDMOSdrainConductance); |
|
|
|
*(here->VDMOSDPgpPtr) += ((xnrm - xrev)*here->VDMOSgm - gcgd); |
|
|
|
*(here->VDMOSDPbPtr) += (-here->VDMOSgbd + (xnrm - xrev)*here->VDMOSgmbs); |
|
|
|
*(here->VDMOSDPspPtr) += (-here->VDMOSgds - xnrm* |
|
|
|
(here->VDMOSgm + here->VDMOSgmbs)); |
|
|
|
(here->VDMOSgm)); |
|
|
|
*(here->VDMOSSPgpPtr) += (-(xnrm - xrev)*here->VDMOSgm - gcgs); |
|
|
|
*(here->VDMOSSPsPtr) += (-here->VDMOSsourceConductance); |
|
|
|
*(here->VDMOSSPbPtr) += (-here->VDMOSgbs - (xnrm - xrev)*here->VDMOSgmbs); |
|
|
|
*(here->VDMOSSPdpPtr) += (-here->VDMOSgds - xrev* |
|
|
|
(here->VDMOSgm + here->VDMOSgmbs)); |
|
|
|
(here->VDMOSgm)); |
|
|
|
|
|
|
|
*(here->VDMOSDsPtr) += (-here->VDMOSdsConductance); |
|
|
|
*(here->VDMOSSdPtr) += (-here->VDMOSdsConductance); |
|
|
|
|