📄 b3soiddcheck.c
字号:
} if (fabs(1.0e-6 / (pParam->B3SOIDDw0 + pParam->B3SOIDDweff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); }/* Check subthreshold parameters */ if (pParam->B3SOIDDnfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->B3SOIDDnfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->B3SOIDDnfactor); } if (model->B3SOIDDkb3 < 0.0) { fprintf(fplog, "Warning: Kb3 = %g is negative.\n", model->B3SOIDDkb3); printf("Warning: Kb3 = %g is negative.\n", model->B3SOIDDkb3); } if (pParam->B3SOIDDcdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->B3SOIDDcdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->B3SOIDDcdsc); } if (pParam->B3SOIDDcdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->B3SOIDDcdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->B3SOIDDcdscd); }/* Check DIBL parameters */ if (pParam->B3SOIDDeta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->B3SOIDDeta0); printf("Warning: Eta0 = %g is negative.\n", pParam->B3SOIDDeta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->B3SOIDDb1 + pParam->B3SOIDDweff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } if (model->B3SOIDDadice0 > 1.0) { fprintf(fplog, "Warning: Adice0 = %g should be smaller than 1.\n", model->B3SOIDDadice0); printf("Warning: Adice0 = %g should be smaller than 1.\n", model->B3SOIDDadice0); } if (model->B3SOIDDabp < 0.2) { fprintf(fplog, "Warning: Abp = %g is too small.\n", model->B3SOIDDabp); printf("Warning: Abp = %g is too small.\n", model->B3SOIDDabp); } if ((model->B3SOIDDmxc < -1.0) || (model->B3SOIDDmxc > 1.0)) { fprintf(fplog, "Warning: Mxc = %g should be within (-1, 1).\n", model->B3SOIDDmxc); printf("Warning: Mxc = %g should be within (-1, 1).\n", model->B3SOIDDmxc); }/* Check Saturation parameters */ if (pParam->B3SOIDDa2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIDDa2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIDDa2); pParam->B3SOIDDa2 = 0.01; } else if (pParam->B3SOIDDa2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIDDa2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIDDa2); pParam->B3SOIDDa2 = 1.0; pParam->B3SOIDDa1 = 0.0; } if (pParam->B3SOIDDrdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIDDrdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIDDrdsw); pParam->B3SOIDDrdsw = 0.0; pParam->B3SOIDDrds0 = 0.0; } else if ((pParam->B3SOIDDrds0 > 0.0) && (pParam->B3SOIDDrds0 < 0.001)) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIDDrds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIDDrds0); pParam->B3SOIDDrds0 = 0.0; } if (pParam->B3SOIDDvsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIDDvsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIDDvsattemp); } if (pParam->B3SOIDDpdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIDDpdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIDDpdibl1); } if (pParam->B3SOIDDpdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIDDpdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIDDpdibl2); }/* Check overlap capacitance parameters */ if (model->B3SOIDDcgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIDDcgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIDDcgdo); model->B3SOIDDcgdo = 0.0; } if (model->B3SOIDDcgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIDDcgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIDDcgso); model->B3SOIDDcgso = 0.0; } if (model->B3SOIDDcgeo < 0.0) { fprintf(fplog, "Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIDDcgeo); printf("Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIDDcgeo); model->B3SOIDDcgeo = 0.0; } if (model->B3SOIDDntun < 0.0) { fprintf(fplog, "Warning: Ntun = %g is negative.\n", model->B3SOIDDntun); printf("Warning: Ntun = %g is negative.\n", model->B3SOIDDntun); } if (model->B3SOIDDndiode < 0.0) { fprintf(fplog, "Warning: Ndiode = %g is negative.\n", model->B3SOIDDndiode); printf("Warning: Ndiode = %g is negative.\n", model->B3SOIDDndiode); } if (model->B3SOIDDisbjt < 0.0) { fprintf(fplog, "Warning: Isbjt = %g is negative.\n", model->B3SOIDDisbjt); printf("Warning: Isbjt = %g is negative.\n", model->B3SOIDDisbjt); } if (model->B3SOIDDisdif < 0.0) { fprintf(fplog, "Warning: Isdif = %g is negative.\n", model->B3SOIDDisdif); printf("Warning: Isdif = %g is negative.\n", model->B3SOIDDisdif); } if (model->B3SOIDDisrec < 0.0) { fprintf(fplog, "Warning: Isrec = %g is negative.\n", model->B3SOIDDisrec); printf("Warning: Isrec = %g is negative.\n", model->B3SOIDDisrec); } if (model->B3SOIDDistun < 0.0) { fprintf(fplog, "Warning: Istun = %g is negative.\n", model->B3SOIDDistun); printf("Warning: Istun = %g is negative.\n", model->B3SOIDDistun); } if (model->B3SOIDDedl < 0.0) { fprintf(fplog, "Warning: Edl = %g is negative.\n", model->B3SOIDDedl); printf("Warning: Edl = %g is negative.\n", model->B3SOIDDedl); } if (model->B3SOIDDkbjt1 < 0.0) { fprintf(fplog, "Warning: Kbjt1 = %g is negative.\n", model->B3SOIDDkbjt1); printf("Warning: kbjt1 = %g is negative.\n", model->B3SOIDDkbjt1); } if (model->B3SOIDDtt < 0.0) { fprintf(fplog, "Warning: Tt = %g is negative.\n", model->B3SOIDDtt); printf("Warning: Tt = %g is negative.\n", model->B3SOIDDtt); } if (model->B3SOIDDcsdmin < 0.0) { fprintf(fplog, "Warning: Csdmin = %g is negative.\n", model->B3SOIDDcsdmin); printf("Warning: Csdmin = %g is negative.\n", model->B3SOIDDcsdmin); } if (model->B3SOIDDcsdesw < 0.0) { fprintf(fplog, "Warning: Csdesw = %g is negative.\n", model->B3SOIDDcsdesw); printf("Warning: Csdesw = %g is negative.\n", model->B3SOIDDcsdesw); } if ((model->B3SOIDDasd < 0.0) || (model->B3SOIDDmxc > 1.0)) { fprintf(fplog, "Warning: Asd = %g should be within (0, 1).\n", model->B3SOIDDasd); printf("Warning: Asd = %g should be within (0, 1).\n", model->B3SOIDDasd); } if (model->B3SOIDDrth0 < 0.0) { fprintf(fplog, "Warning: Rth0 = %g is negative.\n", model->B3SOIDDrth0); printf("Warning: Rth0 = %g is negative.\n", model->B3SOIDDrth0); } if (model->B3SOIDDcth0 < 0.0) { fprintf(fplog, "Warning: Cth0 = %g is negative.\n", model->B3SOIDDcth0); printf("Warning: Cth0 = %g is negative.\n", model->B3SOIDDcth0); } if (model->B3SOIDDrbody < 0.0) { fprintf(fplog, "Warning: Rbody = %g is negative.\n", model->B3SOIDDrbody); printf("Warning: Rbody = %g is negative.\n", model->B3SOIDDrbody); } if (model->B3SOIDDrbsh < 0.0) { fprintf(fplog, "Warning: Rbsh = %g is negative.\n", model->B3SOIDDrbsh); printf("Warning: Rbsh = %g is negative.\n", model->B3SOIDDrbsh); } if (model->B3SOIDDxj > model->B3SOIDDtsi) { fprintf(fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIDDxj, model->B3SOIDDtsi); printf("Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIDDxj, model->B3SOIDDtsi); } if (model->B3SOIDDcapMod < 2) { fprintf(fplog, "Warning: capMod < 2 is not supported by BSIM3SOI.\n"); printf("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n"); } if (model->B3SOIDDcii > 2.0) { fprintf(fplog, "Warning: Cii = %g is larger than 2.0.\n", model->B3SOIDDcii); printf("Warning: Cii = %g is larger than 2.0.\n", model->B3SOIDDcii); } if (model->B3SOIDDdii > 1.5) { fprintf(fplog, "Warning: Dii = %g is larger than 1.5.\n", model->B3SOIDDcii); printf("Warning: Dii = %g is too larger than 1.5.\n", model->B3SOIDDcii); } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -