|
|
|
@ -92,7 +92,7 @@ register B4SOIinstance *here; |
|
|
|
register int selfheat; |
|
|
|
|
|
|
|
double Gmin; |
|
|
|
double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst; |
|
|
|
double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst=0.0; |
|
|
|
double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; |
|
|
|
double arg; |
|
|
|
double delvbd, delvbs, delvds, delvgd, delvgs; |
|
|
|
@ -110,7 +110,7 @@ double gcTt, gTtg, gTtb, gTtdp, gTtt, gTtsp; |
|
|
|
double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact; |
|
|
|
double vg, vd, vs, vp, ve, vb; |
|
|
|
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; |
|
|
|
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT; |
|
|
|
double Vgs_eff, Vfb=0.0, dVfb_dVb, dVfb_dVd, dVfb_dT; |
|
|
|
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd, dVth_dT; |
|
|
|
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg; |
|
|
|
double n, dn_dVb, Vtm; |
|
|
|
@ -121,15 +121,15 @@ double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT; |
|
|
|
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat; |
|
|
|
double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT; |
|
|
|
double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT; |
|
|
|
double Vbseff, dVbseff_dVb; |
|
|
|
double Vbseff=0.0, dVbseff_dVb; |
|
|
|
double CoxWL; |
|
|
|
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dT; |
|
|
|
double T0=0.0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dT; |
|
|
|
double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dT; |
|
|
|
double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dT; |
|
|
|
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT; |
|
|
|
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT=0.0; |
|
|
|
double T4, dT4_dVd, dT4_dVb, dT4_dT; |
|
|
|
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT; |
|
|
|
double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dT; |
|
|
|
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT=0.0; |
|
|
|
double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dT=0.0; |
|
|
|
double T7; |
|
|
|
double T8, dT8_dVd; |
|
|
|
double T9, dT9_dVd; |
|
|
|
@ -166,36 +166,36 @@ double qgdo, qgso, cgdo, cgso; |
|
|
|
double dxpart, sxpart; |
|
|
|
|
|
|
|
struct b4soiSizeDependParam *pParam; |
|
|
|
int ByPass, Check, ChargeComputationNeeded, error; |
|
|
|
int ByPass, Check, ChargeComputationNeeded=0, error; |
|
|
|
|
|
|
|
double gbbsp, gbbdp, gbbg, gbbb, gbbp, gbbT; |
|
|
|
double gddpsp, gddpdp, gddpg, gddpb, gddpT; |
|
|
|
double gsspsp, gsspdp, gsspg, gsspb, gsspT; |
|
|
|
double Gbpbs, Gbpps; |
|
|
|
double ves, ved, veb, vge, delves, vedo, delved; |
|
|
|
double Gbpbs=0.0, Gbpps; |
|
|
|
double ves, ved, veb, vge=0.0, delves, vedo, delved; |
|
|
|
double vps, vpd, Vps, delvps; |
|
|
|
double Vbd, Ves, Vesfb, DeltVthtemp, dDeltVthtemp_dT; |
|
|
|
double Vbp, dVbp_dVb; |
|
|
|
double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT; |
|
|
|
double Gm0, Gds0, Gmb0, GmT0, Gmc, GmT; |
|
|
|
double dDIBL_Sft_dVb; |
|
|
|
double Igidl, Ggidld, Ggidlg, Ggidlb; |
|
|
|
double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT; |
|
|
|
double Ibp, Iii, Giid, Giig, Giib, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon; |
|
|
|
double Igidl, Ggidld=0.0, Ggidlg, Ggidlb=0.0; |
|
|
|
double Gjsd, Gjsb=0.0, GjsT, Gjdd, Gjdb=0.0, GjdT; |
|
|
|
double Ibp, Iii, Giid=0.0, Giig, Giib=0.0, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon; |
|
|
|
double gppb, gppp; |
|
|
|
double delTemp, deldelTemp, Temp; |
|
|
|
double ceqth, ceqqth; |
|
|
|
double K1; |
|
|
|
double qjs, gcjsbs, gcjsT; |
|
|
|
double qjd, gcjdbs, gcjdds, gcjdT; |
|
|
|
double qjs=0.0, gcjsbs=0.0, gcjsT; |
|
|
|
double qjd=0.0, gcjdbs=0.0, gcjdds=0.0, gcjdT; |
|
|
|
double qge; |
|
|
|
double ceqqe; |
|
|
|
double ni, Eg, Cbox, CboxWL; |
|
|
|
double cjsbs; |
|
|
|
double dVfbeff_dVrg; |
|
|
|
double qinv, qgate, qbody, qdrn, qsrc, qsub, cqgate, cqbody, cqdrn, cqsub, cqtemp; |
|
|
|
double qinv, qgate=0.0, qbody=0.0, qdrn=0.0, qsrc, qsub=0.0, cqgate, cqbody, cqdrn, cqsub, cqtemp; |
|
|
|
double Cgg, Cgd, Cgb; |
|
|
|
double Csg, Csd, Csb, Cbg, Cbd, Cbb; |
|
|
|
double Csg, Csd, Csb, Cbg=0.0, Cbd=0.0, Cbb=0.0; |
|
|
|
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1; |
|
|
|
double Vdsatii; |
|
|
|
double Ibs1 ,dIbs1_dVb ,dIbs1_dT; |
|
|
|
@ -211,8 +211,8 @@ double Ic ,dIc_dVb ,dIc_dVd; |
|
|
|
double Ibs; |
|
|
|
double Ibd; |
|
|
|
double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dT; |
|
|
|
double Qsub0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ; |
|
|
|
double Qac0 ,dQac0_dVb ,dQac0_dVd; |
|
|
|
double Qsub0=0.0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ; |
|
|
|
double Qac0=0.0, dQac0_dVb, dQac0_dVd; |
|
|
|
double Qe1 , dQe1_dVb, dQe1_dVe, dQe1_dT; |
|
|
|
double Ce1b ,Ce1e, Ce1T; |
|
|
|
double dQac0_dVrg, dQsub0_dVrg; |
|
|
|
@ -223,9 +223,9 @@ double jdifs, jdifd, djdifs_dT, djdifd_dT; |
|
|
|
double jbjts, jbjtd, djbjts_dT, djbjtd_dT; |
|
|
|
double jrecs, jrecd, djrecs_dT, djrecd_dT; |
|
|
|
double jtuns, jtund, djtuns_dT, djtund_dT; |
|
|
|
double rds0, ua, ub, uc; |
|
|
|
double rds0=0.0, ua, ub, uc; |
|
|
|
double dvbi_dT, dvfbb_dT, du0temp_dT; |
|
|
|
double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT; |
|
|
|
double dvsattemp_dT, drds0_dT=0.0, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT; |
|
|
|
double dVfbeff_dT, dQac0_dT, dQsub0_dT; |
|
|
|
double CbT, CsT, CgT; |
|
|
|
double rho, rho_ref, ku0temp; /* v4.0 */ |
|
|
|
@ -245,14 +245,14 @@ double NVtmf, NVtmr, dNVtmf_dT, dNVtmr_dT; |
|
|
|
double TempRatioMinus1; |
|
|
|
double Ahlis, dAhlis_dT, Ahlid, dAhlid_dT ; |
|
|
|
double WsTsi, WdTsi; |
|
|
|
double dPhiBSWG_dT, dcjsbs_dT, darg_dT, ddT3_dVb_dT; |
|
|
|
double dPhiBSWG_dT, dcjsbs_dT, darg_dT=0.0, ddT3_dVb_dT=0.0; |
|
|
|
double dT7_dT, dT0_dT7, dT1_dT7, dT2_dT7; |
|
|
|
double CoxWLb, CoxWLcenb; |
|
|
|
double ExpVbsNVtm, dExpVbsNVtm_dVb, dExpVbsNVtm_dT; |
|
|
|
double ExpVbdNVtm, dExpVbdNVtm_dVb, dExpVbdNVtm_dVd, dExpVbdNVtm_dT; |
|
|
|
double Ien, dIen_dT, Iendif, dIendif_dT; |
|
|
|
double Ibsdif, dIbsdif_dVb, dIbsdif_dT; |
|
|
|
double Ibddif, dIbddif_dVb, dIbddif_dVd, dIbddif_dT; |
|
|
|
double Ibsdif=0.0, dIbsdif_dVb=0.0, dIbsdif_dT=0.0; |
|
|
|
double Ibddif=0.0, dIbddif_dVb=0.0, dIbddif_dVd=0.0, dIbddif_dT=0.0; |
|
|
|
double Ehlis, dEhlis_dVb, dEhlis_dT; |
|
|
|
double EhlisFactor, dEhlisFactor_dVb, dEhlisFactor_dT; |
|
|
|
double Ehlid, dEhlid_dVb, dEhlid_dVd, dEhlid_dT; |
|
|
|
@ -270,7 +270,7 @@ double T3zb, lt1zb, ltwzb, Theta0zb; |
|
|
|
double Delt_vthzb, dDelt_vthzb_dT; |
|
|
|
double DeltVthwzb, dDeltVthwzb_dT; |
|
|
|
double DeltVthtempzb, dDeltVthtempzb_dT; |
|
|
|
double Vthzb, dVthzb_dT, Vfbzb, dVfbzb_dT; |
|
|
|
double Vthzb=0.0, dVthzb_dT=0.0, Vfbzb=0.0, dVfbzb_dT; |
|
|
|
|
|
|
|
/* v3.2 */ |
|
|
|
double noff, dnoff_dVd, dnoff_dVb; |
|
|
|
@ -280,11 +280,11 @@ double vgmb; |
|
|
|
double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; |
|
|
|
double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; |
|
|
|
double delvges, delvgms, vgme; |
|
|
|
double gcgmgmb, gcgmdb, gcgmsb, gcdgmb, gcsgmb; |
|
|
|
double gcgmeb, gcegmb, qgme, qgmid, ceqqgmid; |
|
|
|
double gcgmgmb=0.0, gcgmdb, gcgmsb, gcdgmb, gcsgmb; |
|
|
|
double gcgmeb, gcegmb, qgme, qgmid=0.0, ceqqgmid; |
|
|
|
double gcgbb; |
|
|
|
double vgge, vggm; |
|
|
|
double wdiosCV_NoSwap, wdiodCV_NoSwap; |
|
|
|
double wdiosCV_NoSwap=0.0, wdiodCV_NoSwap=0.0; |
|
|
|
|
|
|
|
/* v3.0 */ |
|
|
|
double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb, Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd; |
|
|
|
@ -298,7 +298,7 @@ double gIgtotg, gIgtotd, gIgtotb, gIgtots, Igtoteq; |
|
|
|
/* v3.0 */ |
|
|
|
double Vbsitf, dVbsitf_dVg, dVbsitf_dVd, dVbsitf_dVb, dVbsitf_dVe, dVbsitf_dT; |
|
|
|
double dIgb1_dVe, gige, Giie, dT0_dVe, dRatio_dVe, dVdiff_dVe; |
|
|
|
double dT1_dVe, dT5_dVe, dIgb_dVe, dVox_dVe, dVoxdepinv_dVe, dVaux_dVe; |
|
|
|
double dT1_dVe, dT5_dVe, dIgb_dVe, dVox_dVe, dVoxdepinv_dVe=0.0, dVaux_dVe; |
|
|
|
double Gme, gTte, gbbe, gddpe, gsspe; |
|
|
|
double Vbs0, dVbs0_dVg, dVbs0_dVd, dVbs0_dVe, dVbs0_dT; |
|
|
|
double Vbs0mos, dVbs0mos_dVe, dVbs0mos_dT; |
|
|
|
@ -314,14 +314,14 @@ double dT2_dVe, dVbsh_dVg, dVbsh_dVd, dVbsh_dVe, dVbsh_dT; |
|
|
|
double dVgsteff_dVe, dVbseff_dVg, dVbseff_dVd, dVbseff_dVe, dVbseff_dT; |
|
|
|
|
|
|
|
/* v2.2 release */ |
|
|
|
double Vgb, dVgb_dVg, dVgb_dVb, Vox, dVox_dVg, dVox_dVd, dVox_dVb; |
|
|
|
double Vgb=0.0, dVgb_dVg=0.0, dVgb_dVb=0.0, Vox, dVox_dVg, dVox_dVd, dVox_dVb; |
|
|
|
double OxideRatio, Vaux, dVaux_dVg, dVaux_dVd, dVaux_dVb; |
|
|
|
double Igb, dIgb_dVg, dIgb_dVd, dIgb_dVb; |
|
|
|
double ceqgate; |
|
|
|
double dT0_dVox, Voxeff, dVoxeff_dVox; |
|
|
|
double dVox_dT, dVaux_dT, dIgb_dT; |
|
|
|
double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVb; |
|
|
|
double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd, dVoxdepinv_dT; |
|
|
|
double dVox_dT, dVaux_dT=0.0, dIgb_dT; |
|
|
|
double Voxacc=0.0, dVoxacc_dVg=0.0, dVoxacc_dVd=0.0, dVoxacc_dVb=0.0; |
|
|
|
double Voxdepinv=0.0, dVoxdepinv_dVg=0.0, dVoxdepinv_dVb=0.0, dVoxdepinv_dVd=0.0, dVoxdepinv_dT=0.0; |
|
|
|
double Igb1, dIgb1_dVg, dIgb1_dVd, dIgb1_dVb, dIgb1_dT; |
|
|
|
double Igb2, dIgb2_dVg, dIgb2_dVd, dIgb2_dVb, dIgb2_dT; |
|
|
|
double gigs, gigd, gigb, gigg; |
|
|
|
@ -330,20 +330,20 @@ double gigT; |
|
|
|
/* v4.0 */ |
|
|
|
double IdlovVdseff, dIdlovVdseff_dVg, dIdlovVdseff_dVd, dIdlovVdseff_dVb; |
|
|
|
double IdovVds; |
|
|
|
double vdbs, vsbs, vdbd, vsbd, vsbdo, vbs_jct, vbd_jct; |
|
|
|
double vdbs, vsbs, vdbd=0.0, vsbd, vsbdo, vbs_jct, vbd_jct; |
|
|
|
double Vsbs, Vdbd, Vdbs; |
|
|
|
double delvdbd, delvsbs, delvdbs, delvbd_jct, delvbs_jct; |
|
|
|
double gcdbdb, gcsbsb, gcsbb, gcdbb; |
|
|
|
double ceqqjd, ceqqjs; |
|
|
|
double gcdbdb, gcsbsb, gcsbb=0.0, gcdbb=0.0; |
|
|
|
double ceqqjd=0.0, ceqqjs=0.0; |
|
|
|
double Lpe_Vb; /* v4.0 for Vth */ |
|
|
|
double DITS_Sft, dDITS_Sft_dVb, dDITS_Sft_dVd, dDITS_Sft_dT; |
|
|
|
double FP, dFP_dT, dFP_dVg; |
|
|
|
double VADITS, dVADITS_dVg, dVADITS_dVd, dVADITS_dT; /* for DITS */ |
|
|
|
double Iii_Igidl, Giigidl_b, Giigidl_d, Giigidl_g, Giigidl_e, Giigidl_T; |
|
|
|
double gjsdb; |
|
|
|
double Idbdp, Isbsp, cdbdp, csbsp, gcjdbdp, gcjsbsp, GGjdb, GGjsb; |
|
|
|
double Idbdp=0.0, Isbsp=0.0, cdbdp, csbsp, gcjdbdp, gcjsbsp, GGjdb, GGjsb; |
|
|
|
double vdes, vses, vdedo, delvdes, delvses, delvded, Isestot, cseshat, Idedtot, cdedhat; |
|
|
|
double PowWeffWr, rd0, rs0, rdwmin, rswmin, drs0_dT, drd0_dT, drswmin_dT, |
|
|
|
double PowWeffWr, rd0, rs0=0.0, rdwmin, rswmin=0.0, drs0_dT, drd0_dT, drswmin_dT, |
|
|
|
drdwmin_dT, Rd, dRd_dVg, dRd_dVb, dRd_dT, Rs, dRs_dVg, dRs_dVb, dRs_dT; |
|
|
|
double dgstot_dvd, dgstot_dvg, dgstot_dvs, dgstot_dvb, dgstot_dve, dgstot_dT; |
|
|
|
double dgdtot_dvd, dgdtot_dvg, dgdtot_dvs, dgdtot_dvb, dgdtot_dve, dgdtot_dT; |
|
|
|
|