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;
278 double tbxwd, tbxws, targxs, targxd, targs, targd;
280 tbxwd = model->
MOSxd*dbrgdb;
281 tbxws = model->
MOSxd*dsrgdb;
284 targxs = 1.0 + tmp*model->
MOSxd*sarg;
285 targxd = 1.0 + tmp*model->
MOSxd*barg;
286 targs = sqrt(targxs);
287 targd = sqrt(targxd);
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*
298 tmp1 = -model->
MOSxd*(d2bdb2 + dbrgdb*dbrgdb*
300 dgddb2 = -0.5*model->
MOSgamma*(tmp + tmp1);
304 ms->
ms_von = vbin + gamasd*sarg;
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;
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;
384 gammad = gamasd*oneovere;
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;
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);
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;
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;
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;
497 clfact = tmp1*oneoverl;
510 beta1 = here->
MOSbeta*ufact*clfact;
518 if (lvds <= 1.0
e-10) {
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;
double MOSsubstrateDoping
double MOSfastSurfaceStateDensity
double MOSeffectiveLength
double MOSsurfaceMobility