18 #define EPSSIL (11.7 * 8.854214871e-12) 21 #define P66 .66666666666667 22 #define P33 .33333333333333 23 #define P1X3 1.3333333333333 67 sarg = sqrt(here->
MOStPhi - vbx);
71 sarg = sarg - vbx/(sarg+sarg);
74 if (model->MOStype > 0)
98 arg = model->MOSgamma/(sarg+sarg);
99 betap = here->
MOSbeta * (1 + model->MOSlambda*vds);
104 here->
MOSgm = betap*vgst;
113 here->
MOSgm = betap*vds;
114 cdrain = here->
MOSgm*(vgst - .5*vds);
115 here->
MOSgds = betap*(vgst - vds) +
116 model->MOSlambda*here->
MOSbeta*vds*(vgst - .5*vds);
220 xlamda = model->MOSlambda;
221 phiMinVbs = here->
MOStPhi - lvbs;
229 sarg = sqrt(phiMinVbs);
231 d2sdb2 = 0.5*dsrgdb/phiMinVbs;
236 sarg = sphi/(1.0 + 0.5*lvbs/here->
MOStPhi);
238 dsrgdb = -0.5*sarg*tmp;
239 d2sdb2 = -dsrgdb*tmp;
241 if ((lvds - lvbs) >= 0) {
242 barg = sqrt(phiMinVbs + lvds);
244 d2bdb2 = 0.5*dbrgdb/(phiMinVbs + lvds);
247 barg = sphi/(1.0 + 0.5*(lvbs - lvds)/here->
MOStPhi);
249 dbrgdb = -0.5*barg*tmp;
250 d2bdb2 = -dbrgdb*tmp;
257 factor = 0.125*model->MOSnarrowFactor*2.0*
M_PI*
EPSSIL/
261 vbin = here->
MOStVbi*model->MOStype + factor*phiMinVbs;
263 gamasd = model->MOSgamma;
264 gammad = model->MOSgamma;
269 if ((model->MOSgamma > 0.0) ||
270 (model->MOSsubstrateDoping > 0.0)) {
275 dgddvb = -model->MOSgamma;
277 if (model->MOSjunctionDepth > 0) {
278 double tbxwd, tbxws, targxs, targxd, targs, targd;
280 tbxwd = model->MOSxd*dbrgdb;
281 tbxws = model->MOSxd*dsrgdb;
283 tmp = 2.0/model->MOSjunctionDepth;
284 targxs = 1.0 + tmp*model->MOSxd*sarg;
285 targxd = 1.0 + tmp*model->MOSxd*barg;
286 targs = sqrt(targxs);
287 targd = sqrt(targxd);
288 tmp = .5*model->MOSjunctionDepth*oneoverl;
289 gamasd *= (1.0 - tmp*(targs + targd - 2.0));
291 targs = oneoverl/targs;
292 targd = oneoverl/targd;
293 dgddvb *= .5*(tbxws*targs + tbxwd*targd);
294 dgdvds = model->MOSgamma*0.5*tbxwd*targd;
296 tmp = -model->MOSxd*(d2sdb2 + dsrgdb*dsrgdb*
297 model->MOSxd/(model->MOSjunctionDepth*targxs))*targs;
298 tmp1 = -model->MOSxd*(d2bdb2 + dbrgdb*dbrgdb*
299 model->MOSxd/(model->MOSjunctionDepth*targxd))*targd;
300 dgddb2 = -0.5*model->MOSgamma*(tmp + tmp1);
304 ms->
ms_von = vbin + gamasd*sarg;
308 if (model->MOSfastSurfaceStateDensity != 0.0 &&
311 tmp1 = -(gamasd*dsrgdb + dgddvb*sarg) + factor;
333 sarg3 = sarg*sarg*sarg;
337 body = barg*barg*barg - sarg3;
338 gdbdv = 2.0*gammad*(barg*barg*dbrgdb - sarg*sarg*dsrgdb);
339 dodvbs = -factor + dgdvbs*sarg + gammad*dsrgdb;
341 if (model->MOSfastSurfaceStateDensity != 0.0 &&
344 dxndvb = 2.0*dgdvbs*dsrgdb + gammad*d2sdb2 + dgddb2*sarg;
345 dodvbs = dodvbs + ms->
ms_vt*dxndvb;
346 dxndvd = dgdvds*dsrgdb;
347 dodvds = dgdvds*sarg + ms->
ms_vt*dxndvd;
355 ueff = model->MOSsurfaceMobility *
M2PCM2;
361 tmp = model->MOScritField * 100 *
EPSSIL/
362 model->MOSoxideCapFactor;
365 ueff = model->MOSsurfaceMobility *
M2PCM2;
371 ufact = exp(model->MOScritFieldExp*log(tmp/vgst));
372 ueff = model->MOSsurfaceMobility *
M2PCM2 *ufact;
373 dudvgs = -ufact*model->MOScritFieldExp/vgst;
375 dudvbs = model->MOScritFieldExp*ufact*dodvbs/vgst;
384 gammad = gamasd*oneovere;
386 if (model->MOSfastSurfaceStateDensity != 0 && here->
MOSoxideCap != 0) {
391 tmp1 = (vgsx - vbin)*oneovere + phiMinVbs;
398 arg = sqrt(1.0 + 4.0*tmp1/tmp);
399 ms->
ms_vdsat = (vgsx - vbin)*oneovere + .5*tmp*(1.0 - arg);
401 dsdvgs = (1.0 - 1.0/arg)*oneovere;
402 dsdvbs = (gammad*(1.0 - arg) + 2.0*tmp1/(gammad*arg))*oneovere
403 * dgdvbs + 1.0/arg + factor*dsdvgs;
407 ms->
ms_vdsat = (vgsx - vbin)*oneovere;
412 if (model->MOSmaxDriftVel > 0) {
416 tmp1 = (vgsx - vbin)*oneovere + phiMinVbs;
417 param[0] =
P1X3*gammad;
418 param[1] = -2.0*(tmp1 + tmp);
419 param[2] = -2.0*gammad*tmp;
420 param[3] = 2.0*tmp1*(phiMinVbs + tmp) - phiMinVbs*phiMinVbs -
422 param[4] = phiMinVbs;
438 bsarg = sqrt(ms->
ms_vdsat + phiMinVbs);
443 dbsrdb = -0.5*bsarg*bsarg/sphi3;
445 bodys = bsarg*bsarg*bsarg - sarg3;
446 gdbdvs = 2.0*gammad*(bsarg*bsarg*dbsrdb - sarg*sarg*dsrgdb);
448 if (model->MOSmaxDriftVel <= 0) {
449 if (model->MOSsubstrateDoping != 0.0 && xlamda <= 0.0) {
451 tmp1 = sqrt(1.0 + tmp*tmp);
452 tmp = sqrt(tmp + tmp1);
453 xlamda = model->MOSxd*tmp*oneoverl/lvds;
454 tmp = lvds*xlamda/(8.0*tmp1);
456 dldvds = -xlamda + tmp;
461 double txdv, txlv, tqdsat;
463 txdv = model->MOSxd/sqrt(model->MOSchannelCharge);
464 txlv = model->MOSmaxDriftVel*txdv/(2.0*ueff);
465 tqdsat = -1.0 + gammad*dbsrdb;
467 tmp1 = (vgsx - vbin)*oneovere - ms->
ms_vdsat - gammad*bsarg;
468 tmp1 = 1.0/(tmp*tqdsat - ueff*tmp1);
469 dsdvgs = -(tmp - ueff*ms->
ms_vdsat)*oneovere*tmp1;
470 dsdvbs = -(-tmp*(1.0 + tqdsat - factor*oneovere) +
471 ueff*(gdbdvs -
P66*dgdvbs*bodys)*oneovere)*tmp1;
473 if (model->MOSsubstrateDoping != 0.0 && xlamda <= 0.0) {
476 tmp1 = sqrt(txlv*txlv + tmp);
477 tmp = txdv*oneoverl/(2.0*tmp1);
478 xlamda = txdv*(tmp1 - txlv)*oneoverl/lvds;
480 dldvds = -xlamda + tmp;
489 xwb = model->MOSxd*sbiarg;
490 clfact = 1.0 - xlamda*lvds;
491 dldvds = -xlamda - dldvds;
494 if (model->MOSsubstrateDoping == 0.0) xwb = 0.25e-6;
497 clfact = tmp1*oneoverl;
510 beta1 = here->
MOSbeta*ufact*clfact;
518 if (lvds <= 1.0
e-10) {
520 if ((model->MOSfastSurfaceStateDensity == 0.0) ||
526 here->
MOSgds = beta1*(ms->
ms_von - vbin - gammad*sarg)*exp(argg*
531 here->
MOSgds = beta1*(lvgs-vbin-gammad*sarg);
542 cdrain = beta1*((lvgs - vbin - .5*eta*lvds)*lvds -
545 tmp = cdrain*(dudvgs*ufact - dldvgs*clfact);
546 here->
MOSgm = tmp + beta1*lvds;
548 tmp = cdrain*(dudvds*ufact - dldvds*clfact);
549 here->
MOSgds = tmp + beta1*(lvgs - vbin - eta*lvds -
550 gammad*barg -
P66*dgdvds*body);
552 tmp = cdrain*(dudvbs*ufact - dldvbs*clfact);
553 here->
MOSgmbs = tmp - beta1*(gdbdv +
P66*dgdvbs*body -
560 cdrain = beta1*((lvgs - vbin - eta*
563 tmp = cdrain*(dudvgs*ufact - dldvgs*clfact);
565 vbin - eta*ms->
ms_vdsat - gammad*bsarg)*dsdvgs;
566 here->
MOSgds = -cdrain*dldvds*clfact -
P66*beta1*dgdvds*bodys;
567 tmp = cdrain*(dudvbs*ufact - dldvbs*clfact);
568 here->
MOSgmbs = tmp - beta1*(gdbdvs +
P66*dgdvbs*bodys -
570 (lvgs - vbin - eta*ms->
ms_vdsat - gammad*bsarg)*dsdvbs;
580 if (lvgs > vth)
return (cdrain);
590 cdson = beta1*((ms->
ms_von - vbin - .5*eta*vdson)*vdson -
592 didvds = beta1*(ms->
ms_von - vbin - eta*vdson - gammad*barg);
593 gdson = -cdson*dldvds*clfact -
P66*beta1*dgdvds*body;
596 gbson = -cdson*dldvbs*clfact + beta1*
597 (dodvbs*vdson + factor*vdson -
P66*dgdvbs*body - gdbdv);
599 gbson += didvds*dsdvbs;
600 tmp = exp(argg*(lvgs - ms->
ms_von));
604 if (lvds > ms->
ms_vdsat) here->
MOSgm = gmw + didvds*dsdvgs*tmp;
605 tmp1 = gmw*(lvgs - ms->
ms_von)/xn;
606 here->
MOSgds = gdson*tmp - here->
MOSgm*dodvds - tmp1*dxndvd;
607 here->
MOSgmbs = gbson*tmp - here->
MOSgm*dodvbs - tmp1*dxndvb;
626 double a00, a01, a02, a03, a04, a05, b00, b01;
627 double poly4, az[4], bz[4];
628 double a1, a3, b1, b3, c1, d1, p0, p2,
p, s2,
s, y3;
629 double tmp, tmp1, ptmp;
642 tmp = a1*c1 - 4.0*d1;
643 tmp1 = -
P33*b1*b1 + tmp;
644 s = -2.0*b1*b1*b1/27.0 +
P33*b1*tmp;
645 tmp = -d1*(a1*a1 - 4.0*b1) - c1*c1;
656 tmp = sqrt(.25*s2 + p0);
657 tmp = exp(
P33*log(tmp));
658 y3 = 2.0*tmp*
cos(
P33*atan(-2.0*p2/s)) +
P33*b1;
664 tmp1 = exp(
P33*log(
FABS(tmp1)));
665 y3 += tmp + tmp1 +
P33*b1;
669 a3 = sqrt(.25*a1*a1 - b1 + y3);
670 b3 = sqrt(.25*y3*y3 - d1);
688 for (i = 0; i < 4; i++) {
694 poly4 = d1 + ptmp*(c1 + ptmp*(b1 + ptmp*(a1 + ptmp)));
695 if (
FABS(poly4) <= 1.0e-6) {
696 if (!jknt || ptmp <= tmp1)
703 poly4 = d1 + ptmp*(c1 + ptmp*(b1 + ptmp*(a1 + ptmp)));
704 if (
FABS(poly4) <= 1.0e-6) {
705 if (!jknt || ptmp <= tmp1)
713 *vsat = tmp1*tmp1 - baum[4];
733 double coeff0 = 0.0631353e0;
734 double coeff1 = 0.8013292e0;
735 double coeff2 = -0.01110777e0;
853 eta = model->MOSeta * 8.15e-22/(model->MOSoxideCapFactor*
861 sqphbs = sqrt(phibs);
862 dsqdvb = -0.5/sqphbs;
868 phibs = sqphbs*sqphbs;
869 dsqdvb = -phibs/(sqphs3+sqphs3);
874 if ( (model->MOSjunctionDepth != 0.0) &&
875 (model->MOSxd != 0.0) ) {
876 wps = model->MOSxd*sqphbs;
877 oneoverxj = 1.0/model->MOSjunctionDepth;
878 xjonxl = model->MOSjunctionDepth*oneoverxl;
879 djonxj = model->MOSlatDiff*oneoverxj;
880 wponxj = wps*oneoverxj;
881 wconxj = coeff0 + coeff1*wponxj + coeff2*wponxj*wponxj;
882 arga = wconxj + djonxj;
883 argc = wponxj/(1.0 + wponxj);
884 argb = sqrt(1.0 - argc*argc);
885 fshort = 1.0 - xjonxl*(arga*argb - djonxj);
886 dwpdvb = model->MOSxd*dsqdvb;
887 dadvb = (coeff1 + coeff2*(wponxj+wponxj))*dwpdvb*oneoverxj;
888 dbdvb = -argc*argc*(1.0 - argc)*dwpdvb/(argb*wps);
889 dfsdvb = -xjonxl*(dadvb*argb + arga*dbdvb);
898 gammas = model->MOSgamma*fshort;
899 fbodys = 0.5*gammas/(sqphbs+sqphbs);
900 fbody = fbodys+model->MOSnarrowFactor/here->
MOSw;
901 onfbdy = 1.0/(1.0 + fbody);
902 dfbdvb = -fbodys*dsqdvb/sqphbs + fbodys*dfsdvb/fshort;
903 qbonco = gammas*sqphbs + model->MOSnarrowFactor*phibs/here->
MOSw;
904 dqbdvb = gammas*dsqdvb + model->MOSgamma*dfsdvb*sqphbs -
905 model->MOSnarrowFactor/here->
MOSw;
909 vth = qbonco + here->
MOStVbi*model->MOStype - eta*lvds;
916 if (model->MOSfastSurfaceStateDensity != 0.0) {
917 csonco =
CHARGE*model->MOSfastSurfaceStateDensity *
CM2PM2 *
919 cdonco = qbonco/(phibs + phibs);
920 xn = 1.0 + csonco + cdonco;
922 dxndvb = dqbdvb/(phibs + phibs) - qbonco*dsqdvb/(phibs*sqphbs);
924 dvodvb = dvtdvb + ms->
ms_vt*dxndvb;
930 if (lvgs <= ms->
ms_von ) {
945 onfg = 1.0 + model->MOStheta*(vgsx - vth);
948 dfgdvg = -model->MOStheta*fgate*fgate;
949 dfgdvd = -dfgdvg*dvtdvd;
950 dfgdvb = -dfgdvg*dvtdvb;
955 if ( model->MOSmaxDriftVel <= 0.0 ) {
957 dvsdvd = -dvsdvg*dvtdvd;
958 dvsdvb = -dvsdvg*dvtdvb-ms->
ms_vdsat*dfbdvb*onfbdy;
963 arga = (vgsx - vth)*onfbdy;
964 argb = sqrt(arga*arga + vdsc*vdsc);
966 dvsdga = (1.0 - arga/argb)*onfbdy;
967 dvsdvg = dvsdga - (1.0 - vdsc/argb)*vdsc*dfgdvg*onfg;
968 dvsdvd = -dvsdvg*dvtdvd;
969 dvsdvb = -dvsdvg*dvtdvb - arga*dvsdga*dfbdvb;
979 here->
MOSgds = beta*(vgsx-vth);
981 if ( (model->MOSfastSurfaceStateDensity != 0.0) &&
988 cdo = vgsx - vth - 0.5*(1.0 + fbody)*vdsx;
989 dcodvb = -dvtdvb - 0.5*dfbdvb*vdsx;
995 here->
MOSgds = vgsx - vth - (1.0 + fbody + dvtdvd)*vdsx;
1002 cdrain = beta*cdnorm;
1009 if ( model->MOSmaxDriftVel != 0.0 ) {
1010 fdrain = 1.0/(1.0+vdsx*onvdsc);
1011 fd2 = fdrain*fdrain;
1012 arga = fd2*vdsx*onvdsc*onfg;
1013 dfddvg = -dfgdvg*arga;
1014 dfddvd = -dfgdvd*arga - fd2*onvdsc;
1015 dfddvb = -dfgdvb*arga;
1019 here->
MOSgm = fdrain*here->
MOSgm + dfddvg*cdrain;
1022 cdrain = fdrain*cdrain;
1028 if (lvds <= ms->
ms_vdsat)
goto invers;
1030 if (model->MOSmaxDriftVel == 0.0) {
1032 sqrt(model->MOSkappa*(lvds - ms->
ms_vdsat)*model->MOSalpha);
1033 dldvd = 0.5*delxl/(lvds - ms->
ms_vdsat);
1040 if (model->MOSalpha == 0.0)
goto invers;
1043 gdsat = cdsat*(1.0 - fdrain)*onvdsc;
1044 gdsat =
MAX(1.0
e-12,gdsat);
1045 gdoncd = gdsat/cdsat;
1046 gdonfd = gdsat/(1.0 - fdrain);
1047 gdonfg = gdsat*onfg;
1048 dgdvg = gdoncd*here->
MOSgm - gdonfd*dfddvg+gdonfg*dfgdvg;
1049 dgdvd = gdoncd*here->
MOSgds - gdonfd*dfddvd+gdonfg*dfgdvd;
1050 dgdvb = gdoncd*here->
MOSgmbs - gdonfd*dfddvb+gdonfg*dfgdvb;
1052 emax = model->MOSkappa * cdsat*oneoverxl/gdsat;
1054 emoncd = emax/cdsat;
1055 emongd = emax/gdsat;
1056 demdvg = emoncd*here->
MOSgm - emongd*dgdvg;
1057 demdvd = emoncd*here->
MOSgds - emongd*dgdvd;
1058 demdvb = emoncd*here->
MOSgmbs - emongd*dgdvb;
1060 arga = 0.5*emax*model->MOSalpha;
1061 argc = model->MOSkappa*model->MOSalpha;
1062 argb = sqrt(arga*arga + argc*(lvds - ms->
ms_vdsat));
1063 delxl = argb - arga;
1064 dldvd = argc/(argb+argb);
1065 dldem = 0.5*(arga/argb - 1.0)*model->MOSalpha;
1066 ddldvg = dldem*demdvg;
1067 ddldvd = dldem*demdvd-dldvd;
1068 ddldvb = dldem*demdvb;
1080 ddldvg = ddldvg*arga;
1081 ddldvd = ddldvd*arga;
1082 ddldvb = ddldvb*arga;
1088 dlonxl = delxl*oneoverxl;
1089 xlfact = 1.0/(1.0 - dlonxl);
1090 cdrain = cdrain*xlfact;
1092 here->
MOSgm= here->
MOSgm*xlfact + diddl*ddldvg;
1093 gds0 = here->
MOSgds*xlfact + diddl*ddldvd;
1097 here->
MOSgds = gds0*dvsdvd + diddl*dldvd;
1108 ondvt = onxn/ms->
ms_vt;
1109 wfact = exp((lvgs - ms->
ms_von)*ondvt);
1110 cdrain = cdrain*wfact;
1111 gms = here->
MOSgm*wfact;
1119 (lvgs - ms->
ms_von)*onxn*dxndvb;
1145 double lvds, lvbs, lvgs;
1146 double idsat, lambda, vonbm;
1147 double vdst, vdst1, vdst2, ivdst1, vdstg;
1154 sarg = sqrt(here->
MOStPhi - lvbs);
1158 sarg = sarg - lvbs/(sarg+sarg);
1161 ms->
ms_von = (here->
MOStVbi*model->MOStype)+model->MOSgamma*sarg
1162 - model->MOSgamma1 * lvbs;
1163 - model->MOSsigma * lvds;
1164 vgon = lvgs - ms->
ms_von;
1183 vonbm = model->MOSgamma1
1184 + model->MOSgamma/(sarg + sarg);
1187 vonbm = model->MOSgamma1
1188 + .5*model->MOSgamma/sqrt(here->
MOStPhi);
1192 ms->
ms_vdsat = model->MOSkv * exp(sarg * model->MOSnv);
1193 idsat = here->
MOSbeta * exp(sarg * model->MOSnc);
1194 lambda = model->MOSlamda0 - model->MOSlamda1*lvbs;
1198 cdrain = idsat*(1 + lambda*lvds);
1199 here->
MOSgm = cdrain*model->MOSnc/vgon;
1200 here->
MOSgds = here->
MOSgm*model->MOSsigma + idsat*lambda;
1201 here->
MOSgmbs = here->
MOSgm*vonbm - idsat*model->MOSlamda1*lvds;
1208 vdst2 = (2 - vdst)*vdst;
1209 vdstg = -vdst*model->MOSnv/vgon;
1210 ivdst1 = cdrain*(2 - vdst - vdst);
1211 cdrain = cdrain*vdst2;
1212 here->
MOSgm = here->
MOSgm*vdst2 + ivdst1*vdstg;
1214 ivdst1*(1/ms->
ms_vdsat + vdstg*model->MOSsigma);
1251 double t1,t2,t3,t4,t5;
1259 double dueffdvdsatdvgst;
1263 double didsatdvdsat;
1273 factor = here->
MOSw/L*model->MOSoxideCapFactor;
1274 litl = sqrt(11.7/3.9*model->MOSoxideThickness*model->MOSjunctionDepth);
1280 sarg = sqrt(model->MOSphi-vbx)-sqrt(model->MOSphi);
1281 delta = model->MOSgamma/(2.0*sqrt(model->MOSphi-vbx));
1282 }
else if (vbx < model->MOSphi) {
1283 sarg = -vbx/(2.0*sqrt(model->MOSphi));
1284 delta = model->MOSgamma/(2.0*sqrt(model->MOSphi));
1286 sarg = -sqrt(model->MOSphi)/2.0;
1290 if (model->MOStype > 0)
1291 ms->
ms_von = model->MOSvt0 + model->MOSgamma*sarg;
1293 ms->
ms_von = -model->MOSvt0 + model->MOSgamma*sarg;
1297 u0 = 1.0/(model->MOSk1/vgst + model->MOSk2
1298 + model->MOSk3*vgst2 + model->MOSk4*vgst);
1299 d1u0dvgst = -model->MOSk1/vgst2 + 2.0*model->MOSk3*vgst + model->MOSk4;
1300 eta = u0/model->MOSmaxDriftVel/
L;
1302 t1 = u0*model->MOSa1/vgst/(L+model->MOSa2/(1+delta));
1303 t2 = u0*model->MOSa1*L/vgst/(L+model->MOSa2*0.5/(1+delta))
1304 /(L+model->MOSa2*0.5/(1+delta));
1305 t3 = vgst/(1+delta);
1306 t4 = sqrt((1.0+(-t1+t2)*t3)*(1.0+(-t1+t2)*t3)+2.0*(eta+eta+t1+t1-t2)*t3);
1307 ms->
ms_vdsat = vdsat = (-(1.0+(-t1+t2)*t3)+t4)/(eta+eta+t1+t1-t2);
1308 t5 = (eta+eta)/u0/(1+delta);
1309 dvdsatdvgst = (-d1u0dvgst*u0+((1.0+(-t1+t2)*t3)*d1u0dvgst+t5
1310 + (eta+eta+t1+t1-t2)*t3*d1u0dvgst)/t4)/(eta+eta+t1+t1-t2)
1311 - vdsat*(-(t1+t1-t2)/vgst)/(eta+eta+t1+t1-t2);
1327 t2 = 1.0/(vgst*L+model->MOSa2*vdsat);
1328 ueff = u0/(1+eta*vdsat+u0*model->MOSa1*vdsat*t2);
1329 dueffdvdsat = -ueff*ueff*(eta/u0+model->MOSa1*vgst*L*t2*t2);
1330 dueffdvgst = -ueff*ueff*(d1u0dvgst+eta/u0*dvdsatdvgst+
1331 model->MOSa1*L*(vgst*dvdsatdvgst-vdsat)*t2*t2);
1332 dueffdvdsatdvgst = -2.0*ueff*dueffdvgst*(eta/u0+
1333 model->MOSa1*vgst*L*t2*t2)-ueff*ueff*(model->MOSa1*L*t2*t2-
1334 model->MOSa1*vgst*L*2.0*t2*t2*t2*
1335 (L+model->MOSa2*dvdsatdvgst));
1336 idsat = factor*ueff*(vgst-0.5*(1.0+delta)*vdsat)*vdsat;
1337 didsatdvdsat = idsat*dueffdvdsat/ueff+
1338 factor*ueff*(vgst-(1.0+delta)*vdsat);
1339 didsatdvgst = idsat*(dueffdvgst/ueff+dvdsatdvgst/vdsat)+
1340 factor*ueff*(1.0-0.5*(1.0+delta)*dvdsatdvgst)*vdsat;
1341 vasat = idsat/didsatdvdsat;
1342 dvasatdvgst = didsatdvgst/didsatdvdsat-
1343 idsat/didsatdvdsat/didsatdvdsat*(factor*dueffdvdsat*
1344 (vdsat+vgst*dvdsatdvgst-(1.0+delta)*vdsat*dvdsatdvgst)+
1345 idsat/ueff*dueffdvdsatdvgst +
1346 factor*ueff*(1.0-(1.0+delta)*dvdsatdvgst));
1348 t1 = 1/(1.0-ueff*vdsat/L/model->MOSmaxDriftVel);
1349 lambda = 0.5*L/model->MOSem/litl*t1;
1350 va = vasat + (L*t1-lambda*(vds - vdsat))*
1351 (vds - vdsat)/model->MOSpclm/litl;
1352 dvadvds = (L*t1-2.0*lambda*(vds-vdsat))/model->MOSpclm/litl;
1353 dvadvgst = dvasatdvgst+L*t1*t1*(-(dueffdvgst*vdsat+
1354 ueff*dvdsatdvgst)/L/model->MOSmaxDriftVel)*
1355 (1.0-0.5*(vds-vdsat)/model->MOSem/litl)*
1356 (vds-vdsat)/model->MOSpclm/litl-dvadvds*dvdsatdvgst;
1358 here->
MOSgm = didsatdvgst*(1.0+(vds-vdsat)/va)+
1359 idsat*(-dvdsatdvgst/va-(vds-vdsat)/va/va*dvadvgst);
1360 here->
MOSgds = idsat*(1.0/va-(vds-vdsat)/va/va*dvadvds);
1362 cdrain = idsat*(1.0+(vds-vdsat)/va);
1367 ueff = u0/(1+eta*vds+
1368 u0*model->MOSa1*vds/(vgst*L+model->MOSa2*vds));
1369 cdrain = factor*ueff*(vgst-0.5*(1+delta)*vds)*vds;
1370 dueffdvgst = -ueff*ueff*(d1u0dvgst-model->MOSa1*L*vds/
1371 (vgst*L+model->MOSa2*vds)/(vgst*L+model->MOSa2*vds));
1372 dueffdvds = -ueff*ueff*(eta/u0+model->MOSa1*vgst/L/(vgst+
1373 model->MOSa2*vds/
L)/(vgst+model->MOSa2*vds/L));
1374 here->
MOSgm = factor*vds*(ueff+
1375 (vgst-0.5*(1+delta)*vds)*dueffdvgst);
1376 here->
MOSgds = factor*ueff*(vgst-
1377 (1.0+delta)*vds)+cdrain*dueffdvds/ueff;
double MOSeq3(MOSmodel *model, MOSinstance *here, struct mosstuff *ms)
double cryoMOSeq(MOSmodel *model, MOSinstance *here, struct mosstuff *ms)
double MOSeq2(MOSmodel *model, MOSinstance *here, struct mosstuff *ms)
double MOSeq6(MOSmodel *model, MOSinstance *here, struct mosstuff *ms)
double MOSeffectiveLength
double MOSeq1(MOSmodel *model, MOSinstance *here, struct mosstuff *ms)