📄 b4temp.c
字号:
+ model->BSIM4pbigbinv * Inv_LW; pParam->BSIM4cigbinv = model->BSIM4cigbinv + model->BSIM4lcigbinv * Inv_L + model->BSIM4wcigbinv * Inv_W + model->BSIM4pcigbinv * Inv_LW; pParam->BSIM4nigc = model->BSIM4nigc + model->BSIM4lnigc * Inv_L + model->BSIM4wnigc * Inv_W + model->BSIM4pnigc * Inv_LW; pParam->BSIM4nigbacc = model->BSIM4nigbacc + model->BSIM4lnigbacc * Inv_L + model->BSIM4wnigbacc * Inv_W + model->BSIM4pnigbacc * Inv_LW; pParam->BSIM4nigbinv = model->BSIM4nigbinv + model->BSIM4lnigbinv * Inv_L + model->BSIM4wnigbinv * Inv_W + model->BSIM4pnigbinv * Inv_LW; pParam->BSIM4ntox = model->BSIM4ntox + model->BSIM4lntox * Inv_L + model->BSIM4wntox * Inv_W + model->BSIM4pntox * Inv_LW; pParam->BSIM4eigbinv = model->BSIM4eigbinv + model->BSIM4leigbinv * Inv_L + model->BSIM4weigbinv * Inv_W + model->BSIM4peigbinv * Inv_LW; pParam->BSIM4pigcd = model->BSIM4pigcd + model->BSIM4lpigcd * Inv_L + model->BSIM4wpigcd * Inv_W + model->BSIM4ppigcd * Inv_LW; pParam->BSIM4poxedge = model->BSIM4poxedge + model->BSIM4lpoxedge * Inv_L + model->BSIM4wpoxedge * Inv_W + model->BSIM4ppoxedge * Inv_LW; pParam->BSIM4xrcrg1 = model->BSIM4xrcrg1 + model->BSIM4lxrcrg1 * Inv_L + model->BSIM4wxrcrg1 * Inv_W + model->BSIM4pxrcrg1 * Inv_LW; pParam->BSIM4xrcrg2 = model->BSIM4xrcrg2 + model->BSIM4lxrcrg2 * Inv_L + model->BSIM4wxrcrg2 * Inv_W + model->BSIM4pxrcrg2 * Inv_LW; pParam->BSIM4lambda = model->BSIM4lambda + model->BSIM4llambda * Inv_L + model->BSIM4wlambda * Inv_W + model->BSIM4plambda * Inv_LW; pParam->BSIM4vtl = model->BSIM4vtl + model->BSIM4lvtl * Inv_L + model->BSIM4wvtl * Inv_W + model->BSIM4pvtl * Inv_LW; pParam->BSIM4xn = model->BSIM4xn + model->BSIM4lxn * Inv_L + model->BSIM4wxn * Inv_W + model->BSIM4pxn * Inv_LW; pParam->BSIM4vfbsdoff = model->BSIM4vfbsdoff + model->BSIM4lvfbsdoff * Inv_L + model->BSIM4wvfbsdoff * Inv_W + model->BSIM4pvfbsdoff * Inv_LW; pParam->BSIM4cgsl = model->BSIM4cgsl + model->BSIM4lcgsl * Inv_L + model->BSIM4wcgsl * Inv_W + model->BSIM4pcgsl * Inv_LW; pParam->BSIM4cgdl = model->BSIM4cgdl + model->BSIM4lcgdl * Inv_L + model->BSIM4wcgdl * Inv_W + model->BSIM4pcgdl * Inv_LW; pParam->BSIM4ckappas = model->BSIM4ckappas + model->BSIM4lckappas * Inv_L + model->BSIM4wckappas * Inv_W + model->BSIM4pckappas * Inv_LW; pParam->BSIM4ckappad = model->BSIM4ckappad + model->BSIM4lckappad * Inv_L + model->BSIM4wckappad * Inv_W + model->BSIM4pckappad * Inv_LW; pParam->BSIM4cf = model->BSIM4cf + model->BSIM4lcf * Inv_L + model->BSIM4wcf * Inv_W + model->BSIM4pcf * Inv_LW; pParam->BSIM4clc = model->BSIM4clc + model->BSIM4lclc * Inv_L + model->BSIM4wclc * Inv_W + model->BSIM4pclc * Inv_LW; pParam->BSIM4cle = model->BSIM4cle + model->BSIM4lcle * Inv_L + model->BSIM4wcle * Inv_W + model->BSIM4pcle * Inv_LW; pParam->BSIM4vfbcv = model->BSIM4vfbcv + model->BSIM4lvfbcv * Inv_L + model->BSIM4wvfbcv * Inv_W + model->BSIM4pvfbcv * Inv_LW; pParam->BSIM4acde = model->BSIM4acde + model->BSIM4lacde * Inv_L + model->BSIM4wacde * Inv_W + model->BSIM4pacde * Inv_LW; pParam->BSIM4moin = model->BSIM4moin + model->BSIM4lmoin * Inv_L + model->BSIM4wmoin * Inv_W + model->BSIM4pmoin * Inv_LW; pParam->BSIM4noff = model->BSIM4noff + model->BSIM4lnoff * Inv_L + model->BSIM4wnoff * Inv_W + model->BSIM4pnoff * Inv_LW; pParam->BSIM4voffcv = model->BSIM4voffcv + model->BSIM4lvoffcv * Inv_L + model->BSIM4wvoffcv * Inv_W + model->BSIM4pvoffcv * Inv_LW; pParam->BSIM4abulkCVfactor = 1.0 + pow((pParam->BSIM4clc / pParam->BSIM4leffCV), pParam->BSIM4cle); T0 = (TRatio - 1.0); PowWeffWr = pow(pParam->BSIM4weffCJ * 1.0e6, pParam->BSIM4wr) * here->BSIM4nf; T1 = T2 = T3 = T4 = 0.0; if(model->BSIM4tempMod == 0) { pParam->BSIM4ua = pParam->BSIM4ua + pParam->BSIM4ua1 * T0; pParam->BSIM4ub = pParam->BSIM4ub + pParam->BSIM4ub1 * T0; pParam->BSIM4uc = pParam->BSIM4uc + pParam->BSIM4uc1 * T0; pParam->BSIM4vsattemp = pParam->BSIM4vsat - pParam->BSIM4at * T0; T10 = pParam->BSIM4prt * T0; if(model->BSIM4rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4rdw + T10; T2 = model->BSIM4rdwmin + T10; /* External Rs(V) */ T3 = pParam->BSIM4rsw + T10; T4 = model->BSIM4rswmin + T10; } /* Internal Rds(V) in IV */ pParam->BSIM4rds0 = (pParam->BSIM4rdsw + T10) * here->BSIM4nf / PowWeffWr; pParam->BSIM4rdswmin = (model->BSIM4rdswmin + T10) * here->BSIM4nf / PowWeffWr; } else { /* tempMod = 1 */ pParam->BSIM4ua = pParam->BSIM4ua * (1.0 + pParam->BSIM4ua1 * delTemp) ; pParam->BSIM4ub = pParam->BSIM4ub * (1.0 + pParam->BSIM4ub1 * delTemp); pParam->BSIM4uc = pParam->BSIM4uc * (1.0 + pParam->BSIM4uc1 * delTemp); pParam->BSIM4vsattemp = pParam->BSIM4vsat * (1.0 - pParam->BSIM4at * delTemp); T10 = 1.0 + pParam->BSIM4prt * delTemp; if(model->BSIM4rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4rdw * T10; T2 = model->BSIM4rdwmin * T10; /* External Rs(V) */ T3 = pParam->BSIM4rsw * T10; T4 = model->BSIM4rswmin * T10; } /* Internal Rds(V) in IV */ pParam->BSIM4rds0 = pParam->BSIM4rdsw * T10 * here->BSIM4nf / PowWeffWr; pParam->BSIM4rdswmin = model->BSIM4rdswmin * T10 * here->BSIM4nf / PowWeffWr; } if (T1 < 0.0) { T1 = 0.0; printf("Warning: Rdw at current temperature is negative; set to 0.\n"); } if (T2 < 0.0) { T2 = 0.0; printf("Warning: Rdwmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4rd0 = T1 / PowWeffWr; pParam->BSIM4rdwmin = T2 / PowWeffWr; if (T3 < 0.0) { T3 = 0.0; printf("Warning: Rsw at current temperature is negative; set to 0.\n"); } if (T4 < 0.0) { T4 = 0.0; printf("Warning: Rswmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4rs0 = T3 / PowWeffWr; pParam->BSIM4rswmin = T4 / PowWeffWr; if (pParam->BSIM4u0 > 1.0) pParam->BSIM4u0 = pParam->BSIM4u0 / 1.0e4; pParam->BSIM4u0temp = pParam->BSIM4u0 * pow(TRatio, pParam->BSIM4ute); if (pParam->BSIM4eu < 0.0) { pParam->BSIM4eu = 0.0; printf("Warning: eu has been negative; reset to 0.0.\n"); } /* Source End Velocity Limit */ if((model->BSIM4vtlGiven) && (model->BSIM4vtl > 0.0) ) { if(model->BSIM4lc < 0.0) pParam->BSIM4lc = 0.0; else pParam->BSIM4lc = model->BSIM4lc ; T0 = pParam->BSIM4leff / (pParam->BSIM4xn * pParam->BSIM4leff + pParam->BSIM4lc); pParam->BSIM4tfactor = (1.0 - T0) / (1.0 + T0 ); } pParam->BSIM4cgdo = (model->BSIM4cgdo + pParam->BSIM4cf) * pParam->BSIM4weffCV; pParam->BSIM4cgso = (model->BSIM4cgso + pParam->BSIM4cf) * pParam->BSIM4weffCV; pParam->BSIM4cgbo = model->BSIM4cgbo * pParam->BSIM4leffCV * here->BSIM4nf; if (!model->BSIM4ndepGiven && model->BSIM4gamma1Given) { T0 = pParam->BSIM4gamma1 * model->BSIM4coxe; pParam->BSIM4ndep = 3.01248e22 * T0 * T0; } pParam->BSIM4phi = Vtm0 * log(pParam->BSIM4ndep / ni) + pParam->BSIM4phin + 0.4; pParam->BSIM4sqrtPhi = sqrt(pParam->BSIM4phi); pParam->BSIM4phis3 = pParam->BSIM4sqrtPhi * pParam->BSIM4phi; pParam->BSIM4Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->BSIM4ndep * 1.0e6)) * pParam->BSIM4sqrtPhi; pParam->BSIM4sqrtXdep0 = sqrt(pParam->BSIM4Xdep0); pParam->BSIM4litl = sqrt(3.0 * pParam->BSIM4xj * model->BSIM4toxe); pParam->BSIM4vbi = Vtm0 * log(pParam->BSIM4nsd * pParam->BSIM4ndep / (ni * ni)); if (pParam->BSIM4ngate > 0.0) { pParam->BSIM4vfbsd = Vtm0 * log(pParam->BSIM4ngate / pParam->BSIM4nsd); } else pParam->BSIM4vfbsd = 0.0; pParam->BSIM4cdep0 = sqrt(Charge_q * EPSSI * pParam->BSIM4ndep * 1.0e6 / 2.0 / pParam->BSIM4phi); pParam->BSIM4ToxRatio = exp(pParam->BSIM4ntox * log(model->BSIM4toxref / model->BSIM4toxe)) / model->BSIM4toxe / model->BSIM4toxe; pParam->BSIM4ToxRatioEdge = exp(pParam->BSIM4ntox * log(model->BSIM4toxref / (model->BSIM4toxe * pParam->BSIM4poxedge))) / model->BSIM4toxe / model->BSIM4toxe / pParam->BSIM4poxedge / pParam->BSIM4poxedge; pParam->BSIM4Aechvb = (model->BSIM4type == NMOS) ? 4.97232e-7 : 3.42537e-7; pParam->BSIM4Bechvb = (model->BSIM4type == NMOS) ? 7.45669e11 : 1.16645e12; pParam->BSIM4AechvbEdge = pParam->BSIM4Aechvb * pParam->BSIM4weff * pParam->BSIM4dlcig * pParam->BSIM4ToxRatioEdge; pParam->BSIM4BechvbEdge = -pParam->BSIM4Bechvb * model->BSIM4toxe * pParam->BSIM4poxedge; pParam->BSIM4Aechvb *= pParam->BSIM4weff * pParam->BSIM4leff * pParam->BSIM4ToxRatio; pParam->BSIM4Bechvb *= -model->BSIM4toxe; pParam->BSIM4mstar = 0.5 + atan(pParam->BSIM4minv) / PI; pParam->BSIM4voffcbn = pParam->BSIM4voff + model->BSIM4voffl / pParam->BSIM4leff; pParam->BSIM4ldeb = sqrt(EPSSI * Vtm0 / (Charge_q * pParam->BSIM4ndep * 1.0e6)) / 3.0; pParam->BSIM4acde *= pow((pParam->BSIM4ndep / 2.0e16), -0.25); if (model->BSIM4k1Given || model->BSIM4k2Given) { if (!model->BSIM4k1Given) { fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM4k1 = 0.53; } if (!model->BSIM4k2Given) { fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM4k2 = -0.0186; } if (model->BSIM4nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM4xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM4vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM4gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM4gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } else { if (!model->BSIM4vbxGiven) pParam->BSIM4vbx = pParam->BSIM4phi - 7.7348e-4 * pParam->BSIM4ndep * pParam->BSIM4xt * pParam->BSIM4xt; if (pParam->BSIM4vbx > 0.0) pParam->BSIM4vbx = -pParam->BSIM4vbx; if (pParam->BSIM4vbm > 0.0) pParam->BSIM4vbm = -pParam->BSIM4vbm;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -