whitespaces

This commit is contained in:
dwarning 2013-05-15 21:04:12 +02:00
parent 2ba6af1320
commit cc5cdc1293
20 changed files with 4180 additions and 4181 deletions

View File

@ -73,15 +73,15 @@ IOP( "tox", BSIM3v32_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"),
IOP( "toxm", BSIM3v32_MOD_TOXM, IF_REAL, "Gate oxide thickness used in extraction"),
IOP( "cdsc", BSIM3v32_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"),
IOP( "cdscb", BSIM3v32_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"),
IOP( "cdscd", BSIM3v32_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"),
IOP( "cdscb", BSIM3v32_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"),
IOP( "cdscd", BSIM3v32_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"),
IOP( "cit", BSIM3v32_MOD_CIT, IF_REAL, "Interface state capacitance"),
IOP( "nfactor", BSIM3v32_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"),
IOP( "xj", BSIM3v32_MOD_XJ, IF_REAL, "Junction depth in meters"),
IOP( "vsat", BSIM3v32_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"),
IOP( "at", BSIM3v32_MOD_AT, IF_REAL, "Temperature coefficient of vsat"),
IOP( "a0", BSIM3v32_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."),
IOP( "ags", BSIM3v32_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."),
IOP( "a0", BSIM3v32_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."),
IOP( "ags", BSIM3v32_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."),
IOP( "a1", BSIM3v32_MOD_A1, IF_REAL, "Non-saturation effect coefficient"),
IOP( "a2", BSIM3v32_MOD_A2, IF_REAL, "Non-saturation effect coefficient"),
IOP( "keta", BSIM3v32_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."),
@ -130,21 +130,21 @@ IOP( "xpart", BSIM3v32_MOD_XPART, IF_REAL, "Channel charge partitioning"),
IOP( "elm", BSIM3v32_MOD_ELM, IF_REAL, "Non-quasi-static Elmore Constant Parameter"),
IOP( "delta", BSIM3v32_MOD_DELTA, IF_REAL, "Effective Vds parameter"),
IOP( "rsh", BSIM3v32_MOD_RSH, IF_REAL, "Source-drain sheet resistance"),
IOP( "rdsw", BSIM3v32_MOD_RDSW, IF_REAL, "Source-drain resistance per width"),
IOP( "rdsw", BSIM3v32_MOD_RDSW, IF_REAL, "Source-drain resistance per width"),
IOP( "prwg", BSIM3v32_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "),
IOP( "prwb", BSIM3v32_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "),
IOP( "prwg", BSIM3v32_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "),
IOP( "prwb", BSIM3v32_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "),
IOP( "prt", BSIM3v32_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "),
IOP( "prt", BSIM3v32_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "),
IOP( "eta0", BSIM3v32_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"),
IOP( "etab", BSIM3v32_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"),
IOP( "pclm", BSIM3v32_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"),
IOP( "pdiblc1", BSIM3v32_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"),
IOP( "pdiblc2", BSIM3v32_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"),
IOP( "pdiblcb", BSIM3v32_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"),
IOP( "pscbe1", BSIM3v32_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"),
IOP( "pscbe2", BSIM3v32_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"),
IOP( "pvag", BSIM3v32_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"),
IOP( "pdiblc1", BSIM3v32_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"),
IOP( "pdiblc2", BSIM3v32_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"),
IOP( "pdiblcb", BSIM3v32_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"),
IOP( "pscbe1", BSIM3v32_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"),
IOP( "pscbe2", BSIM3v32_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"),
IOP( "pvag", BSIM3v32_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"),
IOP( "js", BSIM3v32_MOD_JS, IF_REAL, "Source/drain junction reverse saturation current density"),
IOP( "jsw", BSIM3v32_MOD_JSW, IF_REAL, "Sidewall junction reverse saturation current density"),
IOP( "pb", BSIM3v32_MOD_PB, IF_REAL, "Source/drain junction built-in potential"),
@ -234,8 +234,8 @@ IOP( "lnfactor", BSIM3v32_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor")
IOP( "lxj", BSIM3v32_MOD_LXJ, IF_REAL, "Length dependence of xj"),
IOP( "lvsat", BSIM3v32_MOD_LVSAT, IF_REAL, "Length dependence of vsat"),
IOP( "lat", BSIM3v32_MOD_LAT, IF_REAL, "Length dependence of at"),
IOP( "la0", BSIM3v32_MOD_LA0, IF_REAL, "Length dependence of a0"),
IOP( "lags", BSIM3v32_MOD_LAGS, IF_REAL, "Length dependence of ags"),
IOP( "la0", BSIM3v32_MOD_LA0, IF_REAL, "Length dependence of a0"),
IOP( "lags", BSIM3v32_MOD_LAGS, IF_REAL, "Length dependence of ags"),
IOP( "la1", BSIM3v32_MOD_LA1, IF_REAL, "Length dependence of a1"),
IOP( "la2", BSIM3v32_MOD_LA2, IF_REAL, "Length dependence of a2"),
IOP( "lketa", BSIM3v32_MOD_LKETA, IF_REAL, "Length dependence of keta"),
@ -277,21 +277,21 @@ IOP( "lute", BSIM3v32_MOD_LUTE, IF_REAL, "Length dependence of ute"),
IOP( "lvoff", BSIM3v32_MOD_LVOFF, IF_REAL, "Length dependence of voff"),
IOP( "lelm", BSIM3v32_MOD_LELM, IF_REAL, "Length dependence of elm"),
IOP( "ldelta", BSIM3v32_MOD_LDELTA, IF_REAL, "Length dependence of delta"),
IOP( "lrdsw", BSIM3v32_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "),
IOP( "lrdsw", BSIM3v32_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "),
IOP( "lprwg", BSIM3v32_MOD_LPRWG, IF_REAL, "Length dependence of prwg "),
IOP( "lprwb", BSIM3v32_MOD_LPRWB, IF_REAL, "Length dependence of prwb "),
IOP( "lprwg", BSIM3v32_MOD_LPRWG, IF_REAL, "Length dependence of prwg "),
IOP( "lprwb", BSIM3v32_MOD_LPRWB, IF_REAL, "Length dependence of prwb "),
IOP( "lprt", BSIM3v32_MOD_LPRT, IF_REAL, "Length dependence of prt "),
IOP( "leta0", BSIM3v32_MOD_LETA0, IF_REAL, "Length dependence of eta0"),
IOP( "letab", BSIM3v32_MOD_LETAB, IF_REAL, "Length dependence of etab"),
IOP( "lpclm", BSIM3v32_MOD_LPCLM, IF_REAL, "Length dependence of pclm"),
IOP( "lpdiblc1", BSIM3v32_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"),
IOP( "lpdiblc2", BSIM3v32_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"),
IOP( "lpdiblcb", BSIM3v32_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"),
IOP( "lpscbe1", BSIM3v32_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"),
IOP( "lpscbe2", BSIM3v32_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"),
IOP( "lpvag", BSIM3v32_MOD_LPVAG, IF_REAL, "Length dependence of pvag"),
IOP( "lprt", BSIM3v32_MOD_LPRT, IF_REAL, "Length dependence of prt "),
IOP( "leta0", BSIM3v32_MOD_LETA0, IF_REAL, "Length dependence of eta0"),
IOP( "letab", BSIM3v32_MOD_LETAB, IF_REAL, "Length dependence of etab"),
IOP( "lpclm", BSIM3v32_MOD_LPCLM, IF_REAL, "Length dependence of pclm"),
IOP( "lpdiblc1", BSIM3v32_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"),
IOP( "lpdiblc2", BSIM3v32_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"),
IOP( "lpdiblcb", BSIM3v32_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"),
IOP( "lpscbe1", BSIM3v32_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"),
IOP( "lpscbe2", BSIM3v32_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"),
IOP( "lpvag", BSIM3v32_MOD_LPVAG, IF_REAL, "Length dependence of pvag"),
IOP( "lwr", BSIM3v32_MOD_LWR, IF_REAL, "Length dependence of wr"),
IOP( "ldwg", BSIM3v32_MOD_LDWG, IF_REAL, "Length dependence of dwg"),
IOP( "ldwb", BSIM3v32_MOD_LDWB, IF_REAL, "Length dependence of dwb"),
@ -313,15 +313,15 @@ IOP( "lmoin", BSIM3v32_MOD_LMOIN, IF_REAL, "Length dependence of moin"),
IOP( "lnoff", BSIM3v32_MOD_LNOFF, IF_REAL, "Length dependence of noff"),
IOP( "lvoffcv", BSIM3v32_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"),
IOP( "wcdsc", BSIM3v32_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"),
IOP( "wcdscb", BSIM3v32_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"),
IOP( "wcdscd", BSIM3v32_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"),
IOP( "wcdscb", BSIM3v32_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"),
IOP( "wcdscd", BSIM3v32_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"),
IOP( "wcit", BSIM3v32_MOD_WCIT, IF_REAL, "Width dependence of cit"),
IOP( "wnfactor", BSIM3v32_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"),
IOP( "wxj", BSIM3v32_MOD_WXJ, IF_REAL, "Width dependence of xj"),
IOP( "wvsat", BSIM3v32_MOD_WVSAT, IF_REAL, "Width dependence of vsat"),
IOP( "wat", BSIM3v32_MOD_WAT, IF_REAL, "Width dependence of at"),
IOP( "wa0", BSIM3v32_MOD_WA0, IF_REAL, "Width dependence of a0"),
IOP( "wags", BSIM3v32_MOD_WAGS, IF_REAL, "Width dependence of ags"),
IOP( "wa0", BSIM3v32_MOD_WA0, IF_REAL, "Width dependence of a0"),
IOP( "wags", BSIM3v32_MOD_WAGS, IF_REAL, "Width dependence of ags"),
IOP( "wa1", BSIM3v32_MOD_WA1, IF_REAL, "Width dependence of a1"),
IOP( "wa2", BSIM3v32_MOD_WA2, IF_REAL, "Width dependence of a2"),
IOP( "wketa", BSIM3v32_MOD_WKETA, IF_REAL, "Width dependence of keta"),
@ -369,15 +369,15 @@ IOP( "wprwg", BSIM3v32_MOD_WPRWG, IF_REAL, "Width dependence of prwg "),
IOP( "wprwb", BSIM3v32_MOD_WPRWB, IF_REAL, "Width dependence of prwb "),
IOP( "wprt", BSIM3v32_MOD_WPRT, IF_REAL, "Width dependence of prt"),
IOP( "weta0", BSIM3v32_MOD_WETA0, IF_REAL, "Width dependence of eta0"),
IOP( "wetab", BSIM3v32_MOD_WETAB, IF_REAL, "Width dependence of etab"),
IOP( "wpclm", BSIM3v32_MOD_WPCLM, IF_REAL, "Width dependence of pclm"),
IOP( "wpdiblc1", BSIM3v32_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"),
IOP( "wpdiblc2", BSIM3v32_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"),
IOP( "wpdiblcb", BSIM3v32_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"),
IOP( "wpscbe1", BSIM3v32_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"),
IOP( "wpscbe2", BSIM3v32_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"),
IOP( "wpvag", BSIM3v32_MOD_WPVAG, IF_REAL, "Width dependence of pvag"),
IOP( "weta0", BSIM3v32_MOD_WETA0, IF_REAL, "Width dependence of eta0"),
IOP( "wetab", BSIM3v32_MOD_WETAB, IF_REAL, "Width dependence of etab"),
IOP( "wpclm", BSIM3v32_MOD_WPCLM, IF_REAL, "Width dependence of pclm"),
IOP( "wpdiblc1", BSIM3v32_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"),
IOP( "wpdiblc2", BSIM3v32_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"),
IOP( "wpdiblcb", BSIM3v32_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"),
IOP( "wpscbe1", BSIM3v32_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"),
IOP( "wpscbe2", BSIM3v32_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"),
IOP( "wpvag", BSIM3v32_MOD_WPVAG, IF_REAL, "Width dependence of pvag"),
IOP( "wwr", BSIM3v32_MOD_WWR, IF_REAL, "Width dependence of wr"),
IOP( "wdwg", BSIM3v32_MOD_WDWG, IF_REAL, "Width dependence of dwg"),
IOP( "wdwb", BSIM3v32_MOD_WDWB, IF_REAL, "Width dependence of dwb"),
@ -400,14 +400,14 @@ IOP( "wnoff", BSIM3v32_MOD_WNOFF, IF_REAL, "Width dependence of noff"),
IOP( "wvoffcv", BSIM3v32_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"),
IOP( "pcdsc", BSIM3v32_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"),
IOP( "pcdscb", BSIM3v32_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"),
IOP( "pcdscb", BSIM3v32_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"),
IOP( "pcdscd", BSIM3v32_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"),
IOP( "pcit", BSIM3v32_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"),
IOP( "pnfactor", BSIM3v32_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"),
IOP( "pxj", BSIM3v32_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"),
IOP( "pvsat", BSIM3v32_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"),
IOP( "pat", BSIM3v32_MOD_PAT, IF_REAL, "Cross-term dependence of at"),
IOP( "pa0", BSIM3v32_MOD_PA0, IF_REAL, "Cross-term dependence of a0"),
IOP( "pa0", BSIM3v32_MOD_PA0, IF_REAL, "Cross-term dependence of a0"),
IOP( "pags", BSIM3v32_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"),
IOP( "pa1", BSIM3v32_MOD_PA1, IF_REAL, "Cross-term dependence of a1"),
IOP( "pa2", BSIM3v32_MOD_PA2, IF_REAL, "Cross-term dependence of a2"),
@ -450,10 +450,10 @@ IOP( "pute", BSIM3v32_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"),
IOP( "pvoff", BSIM3v32_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"),
IOP( "pelm", BSIM3v32_MOD_PELM, IF_REAL, "Cross-term dependence of elm"),
IOP( "pdelta", BSIM3v32_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"),
IOP( "prdsw", BSIM3v32_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "),
IOP( "prdsw", BSIM3v32_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "),
IOP( "pprwg", BSIM3v32_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "),
IOP( "pprwb", BSIM3v32_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "),
IOP( "pprwg", BSIM3v32_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "),
IOP( "pprwb", BSIM3v32_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "),
IOP( "pprt", BSIM3v32_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "),
IOP( "peta0", BSIM3v32_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"),
@ -464,7 +464,7 @@ IOP( "ppdiblc2", BSIM3v32_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc
IOP( "ppdiblcb", BSIM3v32_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"),
IOP( "ppscbe1", BSIM3v32_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"),
IOP( "ppscbe2", BSIM3v32_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"),
IOP( "ppvag", BSIM3v32_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"),
IOP( "ppvag", BSIM3v32_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"),
IOP( "pwr", BSIM3v32_MOD_PWR, IF_REAL, "Cross-term dependence of wr"),
IOP( "pdwg", BSIM3v32_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"),
IOP( "pdwb", BSIM3v32_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"),
@ -506,11 +506,11 @@ char *BSIM3v32names[] = {
"Charge"
};
int BSIM3v32nSize = NUMELEMS(BSIM3v32names);
int BSIM3v32pTSize = NUMELEMS(BSIM3v32pTable);
int BSIM3v32mPTSize = NUMELEMS(BSIM3v32mPTable);
int BSIM3v32iSize = sizeof(BSIM3v32instance);
int BSIM3v32mSize = sizeof(BSIM3v32model);
int BSIM3v32nSize = NUMELEMS(BSIM3v32names);
int BSIM3v32pTSize = NUMELEMS(BSIM3v32pTable);
int BSIM3v32mPTSize = NUMELEMS(BSIM3v32mPTable);
int BSIM3v32iSize = sizeof(BSIM3v32instance);
int BSIM3v32mSize = sizeof(BSIM3v32model);

View File

@ -36,12 +36,12 @@ double ScalingFactor = 1.0e-9;
double m;
omega = ckt->CKTomega;
for (; model != NULL; model = model->BSIM3v32nextModel)
for (; model != NULL; model = model->BSIM3v32nextModel)
{ for (here = model->BSIM3v32instances; here!= NULL;
here = here->BSIM3v32nextInstance)
{
if (here->BSIM3v32mode >= 0)
{ Gm = here->BSIM3v32gm;
here = here->BSIM3v32nextInstance)
{
if (here->BSIM3v32mode >= 0)
{ Gm = here->BSIM3v32gm;
Gmbs = here->BSIM3v32gmbs;
FwdSum = Gm + Gmbs;
RevSum = 0.0;
@ -59,7 +59,7 @@ double m;
gbspb = 0.0;
gbspsp = 0.0;
if (here->BSIM3v32nqsMod == 0)
if (here->BSIM3v32nqsMod == 0)
{ cggb = here->BSIM3v32cggb;
cgsb = here->BSIM3v32cgsb;
cgdb = here->BSIM3v32cgdb;
@ -73,70 +73,70 @@ double m;
cddb = here->BSIM3v32cddb;
xgtg = xgtd = xgts = xgtb = 0.0;
sxpart = 0.6;
sxpart = 0.6;
dxpart = 0.4;
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ cggb = cgdb = cgsb = 0.0;
cbgb = cbdb = cbsb = 0.0;
cdgb = cddb = cdsb = 0.0;
xgtg = here->BSIM3v32gtg;
xgtg = here->BSIM3v32gtg;
xgtd = here->BSIM3v32gtd;
xgts = here->BSIM3v32gts;
xgtb = here->BSIM3v32gtb;
xgtb = here->BSIM3v32gtb;
xcqgb = here->BSIM3v32cqgb * omega;
xcqdb = here->BSIM3v32cqdb * omega;
xcqsb = here->BSIM3v32cqsb * omega;
xcqbb = here->BSIM3v32cqbb * omega;
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
* here->pParam->BSIM3v32leffCV;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ dxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ dxpart = 0.0;
}
else
{ dxpart = 0.5;
}
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
}
else
{ dxpart = here->BSIM3v32qdrn / qcheq;
Cdd = here->BSIM3v32cddb;
Csd = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq;
Cdg = here->BSIM3v32cdgb;
Csg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ dxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ dxpart = 0.0;
}
else
{ dxpart = 0.5;
}
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
}
else
{ dxpart = here->BSIM3v32qdrn / qcheq;
Cdd = here->BSIM3v32cddb;
Csd = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq;
Cdg = here->BSIM3v32cdgb;
Csg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq;
Cds = here->BSIM3v32cdsb;
Css = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq;
Cds = here->BSIM3v32cdsb;
Css = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq;
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg
+ ddxpart_dVs);
}
sxpart = 1.0 - dxpart;
dsxpart_dVd = -ddxpart_dVd;
dsxpart_dVg = -ddxpart_dVg;
dsxpart_dVs = -ddxpart_dVs;
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs);
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg
+ ddxpart_dVs);
}
sxpart = 1.0 - dxpart;
dsxpart_dVd = -ddxpart_dVd;
dsxpart_dVg = -ddxpart_dVg;
dsxpart_dVs = -ddxpart_dVs;
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs);
}
}
}
else
{ Gm = -here->BSIM3v32gm;
Gmbs = -here->BSIM3v32gmbs;
@ -156,7 +156,7 @@ double m;
gbspb = here->BSIM3v32gbbs;
gbspdp = -(gbspg + gbspsp + gbspb);
if (here->BSIM3v32nqsMod == 0)
if (here->BSIM3v32nqsMod == 0)
{ cggb = here->BSIM3v32cggb;
cgsb = here->BSIM3v32cgdb;
cgdb = here->BSIM3v32cgsb;
@ -170,19 +170,19 @@ double m;
cddb = -(here->BSIM3v32cdsb + cgdb + cbdb);
xgtg = xgtd = xgts = xgtb = 0.0;
sxpart = 0.4;
sxpart = 0.4;
dxpart = 0.6;
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ cggb = cgdb = cgsb = 0.0;
cbgb = cbdb = cbsb = 0.0;
cdgb = cddb = cdsb = 0.0;
xgtg = here->BSIM3v32gtg;
xgtg = here->BSIM3v32gtg;
xgtd = here->BSIM3v32gts;
xgts = here->BSIM3v32gtd;
xgtb = here->BSIM3v32gtb;
@ -192,50 +192,50 @@ double m;
xcqsb = here->BSIM3v32cqdb * omega;
xcqbb = here->BSIM3v32cqbb * omega;
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
* here->pParam->BSIM3v32leffCV;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ sxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ sxpart = 0.0;
}
else
{ sxpart = 0.5;
}
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ sxpart = here->BSIM3v32qdrn / qcheq;
Css = here->BSIM3v32cddb;
Cds = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq;
Csg = here->BSIM3v32cdgb;
Cdg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ sxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ sxpart = 0.0;
}
else
{ sxpart = 0.5;
}
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ sxpart = here->BSIM3v32qdrn / qcheq;
Css = here->BSIM3v32cddb;
Cds = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq;
Csg = here->BSIM3v32cdgb;
Cdg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq;
Csd = here->BSIM3v32cdsb;
Cdd = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq;
Csd = here->BSIM3v32cdsb;
Cdd = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq;
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg
+ dsxpart_dVs);
}
dxpart = 1.0 - sxpart;
ddxpart_dVd = -dsxpart_dVd;
ddxpart_dVg = -dsxpart_dVg;
ddxpart_dVs = -dsxpart_dVs;
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs);
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg
+ dsxpart_dVs);
}
dxpart = 1.0 - sxpart;
ddxpart_dVd = -dsxpart_dVd;
ddxpart_dVg = -dsxpart_dVg;
ddxpart_dVs = -dsxpart_dVs;
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs);
}
}
T1 = *(ckt->CKTstate0 + here->BSIM3v32qdef) * here->BSIM3v32gtau;
T1 = *(ckt->CKTstate0 + here->BSIM3v32qdef) * here->BSIM3v32gtau;
gdpr = here->BSIM3v32drainConductance;
gspr = here->BSIM3v32sourceConductance;
gds = here->BSIM3v32gds;
@ -244,9 +244,9 @@ double m;
capbd = here->BSIM3v32capbd;
capbs = here->BSIM3v32capbs;
GSoverlapCap = here->BSIM3v32cgso;
GDoverlapCap = here->BSIM3v32cgdo;
GBoverlapCap = here->pParam->BSIM3v32cgbo;
GSoverlapCap = here->BSIM3v32cgso;
GDoverlapCap = here->BSIM3v32cgdo;
GBoverlapCap = here->pParam->BSIM3v32cgbo;
xcdgb = (cdgb - GDoverlapCap) * omega;
xcddb = (cddb + capbd + GDoverlapCap) * omega;
@ -255,106 +255,106 @@ double m;
xcsdb = -(cgdb + cbdb + cddb) * omega;
xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)) * omega;
xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap)
* omega;
* omega;
xcgdb = (cgdb - GDoverlapCap ) * omega;
xcgsb = (cgsb - GSoverlapCap) * omega;
xcbgb = (cbgb - GBoverlapCap) * omega;
xcbdb = (cbdb - capbd ) * omega;
xcbsb = (cbsb - capbs ) * omega;
m = here->BSIM3v32m;
m = here->BSIM3v32m;
*(here->BSIM3v32GgPtr + 1) += m * xcggb;
*(here->BSIM3v32BbPtr + 1) -=
m * (xcbgb + xcbdb + xcbsb);
*(here->BSIM3v32DPdpPtr + 1) += m * xcddb;
*(here->BSIM3v32SPspPtr + 1) += m * xcssb;
*(here->BSIM3v32GbPtr + 1) -=
m * (xcggb + xcgdb + xcgsb);
*(here->BSIM3v32GdpPtr + 1) += m * xcgdb;
*(here->BSIM3v32GspPtr + 1) += m * xcgsb;
*(here->BSIM3v32BgPtr + 1) += m * xcbgb;
*(here->BSIM3v32BdpPtr + 1) += m * xcbdb;
*(here->BSIM3v32BspPtr + 1) += m * xcbsb;
*(here->BSIM3v32DPgPtr + 1) += m * xcdgb;
*(here->BSIM3v32DPbPtr + 1) -=
m * (xcdgb + xcddb + xcdsb);
*(here->BSIM3v32DPspPtr + 1) += m * xcdsb;
*(here->BSIM3v32SPgPtr + 1) += m * xcsgb;
*(here->BSIM3v32SPbPtr + 1) -=
m * (xcsgb + xcsdb + xcssb);
*(here->BSIM3v32SPdpPtr + 1) += m * xcsdb;
*(here->BSIM3v32DdPtr) += m * gdpr;
*(here->BSIM3v32SsPtr) += m * gspr;
*(here->BSIM3v32BbPtr) +=
m * (gbd + gbs - here->BSIM3v32gbbs);
*(here->BSIM3v32DPdpPtr) +=
m * (gdpr + gds + gbd + RevSum +
dxpart * xgtd + T1 * ddxpart_dVd +
gbdpdp);
*(here->BSIM3v32SPspPtr) +=
m * (gspr + gds + gbs + FwdSum +
sxpart * xgts + T1 * dsxpart_dVs +
gbspsp);
*(here->BSIM3v32DdpPtr) -= m * gdpr;
*(here->BSIM3v32SspPtr) -= m * gspr;
*(here->BSIM3v32BgPtr) -= m * here->BSIM3v32gbgs;
*(here->BSIM3v32BdpPtr) -= m * (gbd - gbbdp);
*(here->BSIM3v32BspPtr) -= m * (gbs - gbbsp);
*(here->BSIM3v32DPdPtr) -= m * gdpr;
*(here->BSIM3v32DPgPtr) +=
m * (Gm + dxpart * xgtg + T1 * ddxpart_dVg +
gbdpg);
*(here->BSIM3v32DPbPtr) -=
m * (gbd - Gmbs - dxpart * xgtb -
T1 * ddxpart_dVb - gbdpb);
*(here->BSIM3v32DPspPtr) -=
m * (gds + FwdSum - dxpart * xgts -
T1 * ddxpart_dVs - gbdpsp);
*(here->BSIM3v32SPgPtr) -=
m * (Gm - sxpart * xgtg - T1 * dsxpart_dVg -
gbspg);
*(here->BSIM3v32SPsPtr) -= m * gspr;
*(here->BSIM3v32SPbPtr) -=
m * (gbs + Gmbs - sxpart * xgtb -
T1 * dsxpart_dVb - gbspb);
*(here->BSIM3v32SPdpPtr) -=
m * (gds + RevSum - sxpart * xgtd -
T1 * dsxpart_dVd - gbspdp);
*(here->BSIM3v32GgPtr) -= m * xgtg;
*(here->BSIM3v32GbPtr) -= m * xgtb;
*(here->BSIM3v32GdpPtr) -= m * xgtd;
*(here->BSIM3v32GspPtr) -= m * xgts;
if (here->BSIM3v32nqsMod)
{
*(here->BSIM3v32QqPtr + 1) +=
m * omega * ScalingFactor;
*(here->BSIM3v32QgPtr + 1) -= m * xcqgb;
*(here->BSIM3v32QdpPtr + 1) -= m * xcqdb;
*(here->BSIM3v32QspPtr + 1) -= m * xcqsb;
*(here->BSIM3v32QbPtr + 1) -= m * xcqbb;
*(here->BSIM3v32QqPtr) += m * here->BSIM3v32gtau;
*(here->BSIM3v32DPqPtr) +=
m * (dxpart * here->BSIM3v32gtau);
*(here->BSIM3v32SPqPtr) +=
m * (sxpart * here->BSIM3v32gtau);
*(here->BSIM3v32GqPtr) -= m * here->BSIM3v32gtau;
*(here->BSIM3v32QgPtr) += m * xgtg;
*(here->BSIM3v32QdpPtr) += m * xgtd;
*(here->BSIM3v32QspPtr) += m * xgts;
*(here->BSIM3v32QbPtr) += m * xgtb;
}
}
*(here->BSIM3v32GgPtr + 1) += m * xcggb;
*(here->BSIM3v32BbPtr + 1) -=
m * (xcbgb + xcbdb + xcbsb);
*(here->BSIM3v32DPdpPtr + 1) += m * xcddb;
*(here->BSIM3v32SPspPtr + 1) += m * xcssb;
*(here->BSIM3v32GbPtr + 1) -=
m * (xcggb + xcgdb + xcgsb);
*(here->BSIM3v32GdpPtr + 1) += m * xcgdb;
*(here->BSIM3v32GspPtr + 1) += m * xcgsb;
*(here->BSIM3v32BgPtr + 1) += m * xcbgb;
*(here->BSIM3v32BdpPtr + 1) += m * xcbdb;
*(here->BSIM3v32BspPtr + 1) += m * xcbsb;
*(here->BSIM3v32DPgPtr + 1) += m * xcdgb;
*(here->BSIM3v32DPbPtr + 1) -=
m * (xcdgb + xcddb + xcdsb);
*(here->BSIM3v32DPspPtr + 1) += m * xcdsb;
*(here->BSIM3v32SPgPtr + 1) += m * xcsgb;
*(here->BSIM3v32SPbPtr + 1) -=
m * (xcsgb + xcsdb + xcssb);
*(here->BSIM3v32SPdpPtr + 1) += m * xcsdb;
*(here->BSIM3v32DdPtr) += m * gdpr;
*(here->BSIM3v32SsPtr) += m * gspr;
*(here->BSIM3v32BbPtr) +=
m * (gbd + gbs - here->BSIM3v32gbbs);
*(here->BSIM3v32DPdpPtr) +=
m * (gdpr + gds + gbd + RevSum +
dxpart * xgtd + T1 * ddxpart_dVd +
gbdpdp);
*(here->BSIM3v32SPspPtr) +=
m * (gspr + gds + gbs + FwdSum +
sxpart * xgts + T1 * dsxpart_dVs +
gbspsp);
*(here->BSIM3v32DdpPtr) -= m * gdpr;
*(here->BSIM3v32SspPtr) -= m * gspr;
*(here->BSIM3v32BgPtr) -= m * here->BSIM3v32gbgs;
*(here->BSIM3v32BdpPtr) -= m * (gbd - gbbdp);
*(here->BSIM3v32BspPtr) -= m * (gbs - gbbsp);
*(here->BSIM3v32DPdPtr) -= m * gdpr;
*(here->BSIM3v32DPgPtr) +=
m * (Gm + dxpart * xgtg + T1 * ddxpart_dVg +
gbdpg);
*(here->BSIM3v32DPbPtr) -=
m * (gbd - Gmbs - dxpart * xgtb -
T1 * ddxpart_dVb - gbdpb);
*(here->BSIM3v32DPspPtr) -=
m * (gds + FwdSum - dxpart * xgts -
T1 * ddxpart_dVs - gbdpsp);
*(here->BSIM3v32SPgPtr) -=
m * (Gm - sxpart * xgtg - T1 * dsxpart_dVg -
gbspg);
*(here->BSIM3v32SPsPtr) -= m * gspr;
*(here->BSIM3v32SPbPtr) -=
m * (gbs + Gmbs - sxpart * xgtb -
T1 * dsxpart_dVb - gbspb);
*(here->BSIM3v32SPdpPtr) -=
m * (gds + RevSum - sxpart * xgtd -
T1 * dsxpart_dVd - gbspdp);
*(here->BSIM3v32GgPtr) -= m * xgtg;
*(here->BSIM3v32GbPtr) -= m * xgtb;
*(here->BSIM3v32GdpPtr) -= m * xgtd;
*(here->BSIM3v32GspPtr) -= m * xgts;
if (here->BSIM3v32nqsMod)
{
*(here->BSIM3v32QqPtr + 1) +=
m * omega * ScalingFactor;
*(here->BSIM3v32QgPtr + 1) -= m * xcqgb;
*(here->BSIM3v32QdpPtr + 1) -= m * xcqdb;
*(here->BSIM3v32QspPtr + 1) -= m * xcqsb;
*(here->BSIM3v32QbPtr + 1) -= m * xcqbb;
*(here->BSIM3v32QqPtr) += m * here->BSIM3v32gtau;
*(here->BSIM3v32DPqPtr) +=
m * (dxpart * here->BSIM3v32gtau);
*(here->BSIM3v32SPqPtr) +=
m * (sxpart * here->BSIM3v32gtau);
*(here->BSIM3v32GqPtr) -= m * here->BSIM3v32gtau;
*(here->BSIM3v32QgPtr) += m * xgtg;
*(here->BSIM3v32QdpPtr) += m * xgtd;
*(here->BSIM3v32QspPtr) += m * xgts;
*(here->BSIM3v32QbPtr) += m * xgtb;
}
}
}
return(OK);
}

View File

@ -19,22 +19,22 @@
int
BSIM3v32ask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
IFvalue *select)
IFvalue *select)
{
BSIM3v32instance *here = (BSIM3v32instance*)inst;
NG_IGNORE(select);
switch(which)
switch(which)
{ case BSIM3v32_L:
value->rValue = here->BSIM3v32l;
return(OK);
case BSIM3v32_W:
value->rValue = here->BSIM3v32w;
return(OK);
case BSIM3v32_M:
value->rValue = here->BSIM3v32m;
return (OK);
case BSIM3v32_M:
value->rValue = here->BSIM3v32m;
return (OK);
case BSIM3v32_AS:
value->rValue = here->BSIM3v32sourceArea;
return(OK);
@ -94,11 +94,11 @@ BSIM3v32instance *here = (BSIM3v32instance*)inst;
return(OK);
case BSIM3v32_SOURCECONDUCT:
value->rValue = here->BSIM3v32sourceConductance;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_DRAINCONDUCT:
value->rValue = here->BSIM3v32drainConductance;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_VBD:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32vbd);
@ -113,118 +113,118 @@ BSIM3v32instance *here = (BSIM3v32instance*)inst;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32vds);
return(OK);
case BSIM3v32_CD:
value->rValue = here->BSIM3v32cd;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32cd;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CBS:
value->rValue = here->BSIM3v32cbs;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32cbs;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CBD:
value->rValue = here->BSIM3v32cbd;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32cbd;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_GM:
value->rValue = here->BSIM3v32gm;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32gm;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_GDS:
value->rValue = here->BSIM3v32gds;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32gds;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_GMBS:
value->rValue = here->BSIM3v32gmbs;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32gmbs;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_GBD:
value->rValue = here->BSIM3v32gbd;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32gbd;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_GBS:
value->rValue = here->BSIM3v32gbs;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32gbs;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_QB:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qb);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qb);
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CQB:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqb);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqb);
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_QG:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qg);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qg);
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CQG:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqg);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqg);
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_QD:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qd);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qd);
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CQD:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqd);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqd);
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CGG:
value->rValue = here->BSIM3v32cggb;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32cggb;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CGD:
value->rValue = here->BSIM3v32cgdb;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CGS:
value->rValue = here->BSIM3v32cgsb;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CDG:
value->rValue = here->BSIM3v32cdgb;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32cdgb;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CDD:
value->rValue = here->BSIM3v32cddb;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32cddb;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CDS:
value->rValue = here->BSIM3v32cdsb;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32cdsb;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CBG:
value->rValue = here->BSIM3v32cbgb;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CBDB:
value->rValue = here->BSIM3v32cbdb;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CBSB:
value->rValue = here->BSIM3v32cbsb;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CAPBD:
value->rValue = here->BSIM3v32capbd;
value->rValue *= here->BSIM3v32m;
value->rValue = here->BSIM3v32capbd;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_CAPBS:
value->rValue = here->BSIM3v32capbs;
value->rValue *= here->BSIM3v32m;
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_VON:
value->rValue = here->BSIM3v32von;
value->rValue = here->BSIM3v32von;
return(OK);
case BSIM3v32_VDSAT:
value->rValue = here->BSIM3v32vdsat;
value->rValue = here->BSIM3v32vdsat;
return(OK);
case BSIM3v32_QBS:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qbs);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qbs);
value->rValue *= here->BSIM3v32m;
return(OK);
case BSIM3v32_QBD:
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qbd);
value->rValue *= here->BSIM3v32m;
value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qbd);
value->rValue *= here->BSIM3v32m;
return(OK);
default:
return(E_BADPARM);

View File

@ -31,416 +31,416 @@ FILE *fplog;
if ((fplog = fopen("b3v32check.log", "w")) != NULL)
{ pParam = here->pParam;
fprintf (fplog,
"BSIM3 Model (Supports: v3.2, v3.2.2, v3.2.3, v3.2.4)\n");
fprintf (fplog, "Parameter Checking.\n");
fprintf (fplog, "Model = %s\n", model->BSIM3v32modName);
fprintf (fplog, "W = %g, L = %g, M = %g\n", here->BSIM3v32w,
here->BSIM3v32l, here->BSIM3v32m);
fprintf (fplog,
"BSIM3 Model (Supports: v3.2, v3.2.2, v3.2.3, v3.2.4)\n");
fprintf (fplog, "Parameter Checking.\n");
fprintf (fplog, "Model = %s\n", model->BSIM3v32modName);
fprintf (fplog, "W = %g, L = %g, M = %g\n", here->BSIM3v32w,
here->BSIM3v32l, here->BSIM3v32m);
if ((strcmp(model->BSIM3v32version, "3.2.4")) && (strcmp(model->BSIM3v32version, "3.24"))
&& (strcmp(model->BSIM3v32version, "3.2.3")) && (strcmp(model->BSIM3v32version, "3.23"))
&& (strcmp(model->BSIM3v32version, "3.2.2")) && (strcmp(model->BSIM3v32version, "3.22"))
&& (strcmp(model->BSIM3v32version, "3.2")) && (strcmp(model->BSIM3v32version, "3.20")))
{
fprintf (fplog,
"Warning: This model supports BSIM3v3.2, BSIM3v3.2.2, BSIM3v3.2.3, BSIM3v3.2.4\n");
fprintf (fplog,
"You specified a wrong version number. Working now with BSIM3v3.2.4.\n");
printf ("Warning: This model supports BSIM3v3.2, BSIM3v3.2.2, BSIM3v3.2.3, BSIM3v3.2.4\n");
printf ("You specified a wrong version number. Working now with BSIM3v3.2.4.\n");
}
if ((strcmp(model->BSIM3v32version, "3.2.4")) && (strcmp(model->BSIM3v32version, "3.24"))
&& (strcmp(model->BSIM3v32version, "3.2.3")) && (strcmp(model->BSIM3v32version, "3.23"))
&& (strcmp(model->BSIM3v32version, "3.2.2")) && (strcmp(model->BSIM3v32version, "3.22"))
&& (strcmp(model->BSIM3v32version, "3.2")) && (strcmp(model->BSIM3v32version, "3.20")))
{
fprintf (fplog,
"Warning: This model supports BSIM3v3.2, BSIM3v3.2.2, BSIM3v3.2.3, BSIM3v3.2.4\n");
fprintf (fplog,
"You specified a wrong version number. Working now with BSIM3v3.2.4.\n");
printf ("Warning: This model supports BSIM3v3.2, BSIM3v3.2.2, BSIM3v3.2.3, BSIM3v3.2.4\n");
printf ("You specified a wrong version number. Working now with BSIM3v3.2.4.\n");
}
if (pParam->BSIM3v32nlx < -pParam->BSIM3v32leff)
{ fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n",
pParam->BSIM3v32nlx);
printf("Fatal: Nlx = %g is less than -Leff.\n",
pParam->BSIM3v32nlx);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32nlx < -pParam->BSIM3v32leff)
{ fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n",
pParam->BSIM3v32nlx);
printf("Fatal: Nlx = %g is less than -Leff.\n",
pParam->BSIM3v32nlx);
Fatal_Flag = 1;
}
if (model->BSIM3v32tox <= 0.0)
{ fprintf(fplog, "Fatal: Tox = %g is not positive.\n",
model->BSIM3v32tox);
printf("Fatal: Tox = %g is not positive.\n", model->BSIM3v32tox);
Fatal_Flag = 1;
}
if (model->BSIM3v32tox <= 0.0)
{ fprintf(fplog, "Fatal: Tox = %g is not positive.\n",
model->BSIM3v32tox);
printf("Fatal: Tox = %g is not positive.\n", model->BSIM3v32tox);
Fatal_Flag = 1;
}
if (model->BSIM3v32toxm <= 0.0)
{ fprintf(fplog, "Fatal: Toxm = %g is not positive.\n",
model->BSIM3v32toxm);
printf("Fatal: Toxm = %g is not positive.\n", model->BSIM3v32toxm);
Fatal_Flag = 1;
}
if (model->BSIM3v32toxm <= 0.0)
{ fprintf(fplog, "Fatal: Toxm = %g is not positive.\n",
model->BSIM3v32toxm);
printf("Fatal: Toxm = %g is not positive.\n", model->BSIM3v32toxm);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32npeak <= 0.0)
{ fprintf(fplog, "Fatal: Nch = %g is not positive.\n",
pParam->BSIM3v32npeak);
printf("Fatal: Nch = %g is not positive.\n",
pParam->BSIM3v32npeak);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32nsub <= 0.0)
{ fprintf(fplog, "Fatal: Nsub = %g is not positive.\n",
pParam->BSIM3v32nsub);
printf("Fatal: Nsub = %g is not positive.\n",
pParam->BSIM3v32nsub);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32ngate < 0.0)
{ fprintf(fplog, "Fatal: Ngate = %g is not positive.\n",
pParam->BSIM3v32ngate);
printf("Fatal: Ngate = %g Ngate is not positive.\n",
pParam->BSIM3v32ngate);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32ngate > 1.e25)
{ fprintf(fplog, "Fatal: Ngate = %g is too high.\n",
pParam->BSIM3v32ngate);
printf("Fatal: Ngate = %g Ngate is too high\n",
pParam->BSIM3v32ngate);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32xj <= 0.0)
{ fprintf(fplog, "Fatal: Xj = %g is not positive.\n",
pParam->BSIM3v32xj);
printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM3v32xj);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32npeak <= 0.0)
{ fprintf(fplog, "Fatal: Nch = %g is not positive.\n",
pParam->BSIM3v32npeak);
printf("Fatal: Nch = %g is not positive.\n",
pParam->BSIM3v32npeak);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32nsub <= 0.0)
{ fprintf(fplog, "Fatal: Nsub = %g is not positive.\n",
pParam->BSIM3v32nsub);
printf("Fatal: Nsub = %g is not positive.\n",
pParam->BSIM3v32nsub);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32ngate < 0.0)
{ fprintf(fplog, "Fatal: Ngate = %g is not positive.\n",
pParam->BSIM3v32ngate);
printf("Fatal: Ngate = %g Ngate is not positive.\n",
pParam->BSIM3v32ngate);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32ngate > 1.e25)
{ fprintf(fplog, "Fatal: Ngate = %g is too high.\n",
pParam->BSIM3v32ngate);
printf("Fatal: Ngate = %g Ngate is too high\n",
pParam->BSIM3v32ngate);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32xj <= 0.0)
{ fprintf(fplog, "Fatal: Xj = %g is not positive.\n",
pParam->BSIM3v32xj);
printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM3v32xj);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32dvt1 < 0.0)
{ fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n",
pParam->BSIM3v32dvt1);
printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3v32dvt1);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32dvt1 < 0.0)
{ fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n",
pParam->BSIM3v32dvt1);
printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3v32dvt1);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32dvt1w < 0.0)
{ fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n",
pParam->BSIM3v32dvt1w);
printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3v32dvt1w);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32dvt1w < 0.0)
{ fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n",
pParam->BSIM3v32dvt1w);
printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3v32dvt1w);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32w0 == -pParam->BSIM3v32weff)
{ fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n");
printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n");
Fatal_Flag = 1;
}
if (pParam->BSIM3v32w0 == -pParam->BSIM3v32weff)
{ fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n");
printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n");
Fatal_Flag = 1;
}
if (pParam->BSIM3v32dsub < 0.0)
{ fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM3v32dsub);
printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM3v32dsub);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32b1 == -pParam->BSIM3v32weff)
{ fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n");
printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n");
Fatal_Flag = 1;
}
if (pParam->BSIM3v32u0temp <= 0.0)
{ fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3v32u0temp);
printf("Fatal: u0 at current temperature = %g is not positive.\n",
pParam->BSIM3v32u0temp);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32dsub < 0.0)
{ fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM3v32dsub);
printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM3v32dsub);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32b1 == -pParam->BSIM3v32weff)
{ fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n");
printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n");
Fatal_Flag = 1;
}
if (pParam->BSIM3v32u0temp <= 0.0)
{ fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3v32u0temp);
printf("Fatal: u0 at current temperature = %g is not positive.\n",
pParam->BSIM3v32u0temp);
Fatal_Flag = 1;
}
/* Check delta parameter */
if (pParam->BSIM3v32delta < 0.0)
{ fprintf(fplog, "Fatal: Delta = %g is less than zero.\n",
pParam->BSIM3v32delta);
printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM3v32delta);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32delta < 0.0)
{ fprintf(fplog, "Fatal: Delta = %g is less than zero.\n",
pParam->BSIM3v32delta);
printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM3v32delta);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32vsattemp <= 0.0)
{ fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3v32vsattemp);
printf("Fatal: Vsat at current temperature = %g is not positive.\n",
pParam->BSIM3v32vsattemp);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32vsattemp <= 0.0)
{ fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3v32vsattemp);
printf("Fatal: Vsat at current temperature = %g is not positive.\n",
pParam->BSIM3v32vsattemp);
Fatal_Flag = 1;
}
/* Check Rout parameters */
if (pParam->BSIM3v32pclm <= 0.0)
{ fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v32pclm);
printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v32pclm);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32pclm <= 0.0)
{ fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v32pclm);
printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v32pclm);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32drout < 0.0)
{ fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM3v32drout);
printf("Fatal: Drout = %g is negative.\n", pParam->BSIM3v32drout);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32drout < 0.0)
{ fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM3v32drout);
printf("Fatal: Drout = %g is negative.\n", pParam->BSIM3v32drout);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32pscbe2 <= 0.0)
{ fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n",
pParam->BSIM3v32pscbe2);
printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM3v32pscbe2);
}
if (pParam->BSIM3v32pscbe2 <= 0.0)
{ fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n",
pParam->BSIM3v32pscbe2);
printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM3v32pscbe2);
}
/* acm model */
if (model->BSIM3v32acmMod == 0) {
if (model->BSIM3v32unitLengthSidewallJctCap > 0.0 ||
model->BSIM3v32unitLengthGateSidewallJctCap > 0.0)
{
if (here->BSIM3v32drainPerimeter < pParam->BSIM3v32weff)
{ fprintf(fplog, "Warning: Pd = %g is less than W.\n",
here->BSIM3v32drainPerimeter);
printf("Warning: Pd = %g is less than W.\n",
here->BSIM3v32drainPerimeter);
}
if (here->BSIM3v32sourcePerimeter < pParam->BSIM3v32weff)
{ fprintf(fplog, "Warning: Ps = %g is less than W.\n",
here->BSIM3v32sourcePerimeter);
printf("Warning: Ps = %g is less than W.\n",
here->BSIM3v32sourcePerimeter);
}
}
}
/* acm model */
if (model->BSIM3v32acmMod == 0) {
if (model->BSIM3v32unitLengthSidewallJctCap > 0.0 ||
model->BSIM3v32unitLengthGateSidewallJctCap > 0.0)
{
if (here->BSIM3v32drainPerimeter < pParam->BSIM3v32weff)
{ fprintf(fplog, "Warning: Pd = %g is less than W.\n",
here->BSIM3v32drainPerimeter);
printf("Warning: Pd = %g is less than W.\n",
here->BSIM3v32drainPerimeter);
}
if (here->BSIM3v32sourcePerimeter < pParam->BSIM3v32weff)
{ fprintf(fplog, "Warning: Ps = %g is less than W.\n",
here->BSIM3v32sourcePerimeter);
printf("Warning: Ps = %g is less than W.\n",
here->BSIM3v32sourcePerimeter);
}
}
}
if (pParam->BSIM3v32noff < 0.1)
{ fprintf(fplog, "Warning: Noff = %g is too small.\n",
pParam->BSIM3v32noff);
printf("Warning: Noff = %g is too small.\n", pParam->BSIM3v32noff);
}
if (pParam->BSIM3v32noff > 4.0)
{ fprintf(fplog, "Warning: Noff = %g is too large.\n",
pParam->BSIM3v32noff);
printf("Warning: Noff = %g is too large.\n", pParam->BSIM3v32noff);
}
if (pParam->BSIM3v32noff < 0.1)
{ fprintf(fplog, "Warning: Noff = %g is too small.\n",
pParam->BSIM3v32noff);
printf("Warning: Noff = %g is too small.\n", pParam->BSIM3v32noff);
}
if (pParam->BSIM3v32noff > 4.0)
{ fprintf(fplog, "Warning: Noff = %g is too large.\n",
pParam->BSIM3v32noff);
printf("Warning: Noff = %g is too large.\n", pParam->BSIM3v32noff);
}
if (pParam->BSIM3v32voffcv < -0.5)
{ fprintf(fplog, "Warning: Voffcv = %g is too small.\n",
pParam->BSIM3v32voffcv);
printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM3v32voffcv);
}
if (pParam->BSIM3v32voffcv > 0.5)
{ fprintf(fplog, "Warning: Voffcv = %g is too large.\n",
pParam->BSIM3v32voffcv);
printf("Warning: Voffcv = %g is too large.\n", pParam->BSIM3v32voffcv);
}
if (pParam->BSIM3v32voffcv < -0.5)
{ fprintf(fplog, "Warning: Voffcv = %g is too small.\n",
pParam->BSIM3v32voffcv);
printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM3v32voffcv);
}
if (pParam->BSIM3v32voffcv > 0.5)
{ fprintf(fplog, "Warning: Voffcv = %g is too large.\n",
pParam->BSIM3v32voffcv);
printf("Warning: Voffcv = %g is too large.\n", pParam->BSIM3v32voffcv);
}
if (model->BSIM3v32ijth < 0.0)
{ fprintf(fplog, "Fatal: Ijth = %g cannot be negative.\n",
model->BSIM3v32ijth);
printf("Fatal: Ijth = %g cannot be negative.\n", model->BSIM3v32ijth);
Fatal_Flag = 1;
}
if (model->BSIM3v32ijth < 0.0)
{ fprintf(fplog, "Fatal: Ijth = %g cannot be negative.\n",
model->BSIM3v32ijth);
printf("Fatal: Ijth = %g cannot be negative.\n", model->BSIM3v32ijth);
Fatal_Flag = 1;
}
/* Check capacitance parameters */
if (pParam->BSIM3v32clc < 0.0)
{ fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM3v32clc);
printf("Fatal: Clc = %g is negative.\n", pParam->BSIM3v32clc);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32clc < 0.0)
{ fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM3v32clc);
printf("Fatal: Clc = %g is negative.\n", pParam->BSIM3v32clc);
Fatal_Flag = 1;
}
if (pParam->BSIM3v32moin < 5.0)
{ fprintf(fplog, "Warning: Moin = %g is too small.\n",
pParam->BSIM3v32moin);
printf("Warning: Moin = %g is too small.\n", pParam->BSIM3v32moin);
}
if (pParam->BSIM3v32moin > 25.0)
{ fprintf(fplog, "Warning: Moin = %g is too large.\n",
pParam->BSIM3v32moin);
printf("Warning: Moin = %g is too large.\n", pParam->BSIM3v32moin);
}
if (pParam->BSIM3v32moin < 5.0)
{ fprintf(fplog, "Warning: Moin = %g is too small.\n",
pParam->BSIM3v32moin);
printf("Warning: Moin = %g is too small.\n", pParam->BSIM3v32moin);
}
if (pParam->BSIM3v32moin > 25.0)
{ fprintf(fplog, "Warning: Moin = %g is too large.\n",
pParam->BSIM3v32moin);
printf("Warning: Moin = %g is too large.\n", pParam->BSIM3v32moin);
}
if(model->BSIM3v32capMod ==3) {
if (pParam->BSIM3v32acde < 0.4)
{ fprintf(fplog, "Warning: Acde = %g is too small.\n",
pParam->BSIM3v32acde);
printf("Warning: Acde = %g is too small.\n", pParam->BSIM3v32acde);
}
if (pParam->BSIM3v32acde > 1.6)
{ fprintf(fplog, "Warning: Acde = %g is too large.\n",
pParam->BSIM3v32acde);
printf("Warning: Acde = %g is too large.\n", pParam->BSIM3v32acde);
}
}
if(model->BSIM3v32capMod ==3) {
if (pParam->BSIM3v32acde < 0.4)
{ fprintf(fplog, "Warning: Acde = %g is too small.\n",
pParam->BSIM3v32acde);
printf("Warning: Acde = %g is too small.\n", pParam->BSIM3v32acde);
}
if (pParam->BSIM3v32acde > 1.6)
{ fprintf(fplog, "Warning: Acde = %g is too large.\n",
pParam->BSIM3v32acde);
printf("Warning: Acde = %g is too large.\n", pParam->BSIM3v32acde);
}
}
if (model->BSIM3v32paramChk ==1)
{
/* Check L and W parameters */
if (pParam->BSIM3v32leff <= 5.0e-8)
{ fprintf(fplog, "Warning: Leff = %g may be too small.\n",
pParam->BSIM3v32leff);
printf("Warning: Leff = %g may be too small.\n",
pParam->BSIM3v32leff);
}
if (model->BSIM3v32paramChk ==1)
{
/* Check L and W parameters */
if (pParam->BSIM3v32leff <= 5.0e-8)
{ fprintf(fplog, "Warning: Leff = %g may be too small.\n",
pParam->BSIM3v32leff);
printf("Warning: Leff = %g may be too small.\n",
pParam->BSIM3v32leff);
}
if (pParam->BSIM3v32leffCV <= 5.0e-8)
{ fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n",
pParam->BSIM3v32leffCV);
printf("Warning: Leff for CV = %g may be too small.\n",
pParam->BSIM3v32leffCV);
}
if (pParam->BSIM3v32leffCV <= 5.0e-8)
{ fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n",
pParam->BSIM3v32leffCV);
printf("Warning: Leff for CV = %g may be too small.\n",
pParam->BSIM3v32leffCV);
}
if (pParam->BSIM3v32weff <= 1.0e-7)
{ fprintf(fplog, "Warning: Weff = %g may be too small.\n",
pParam->BSIM3v32weff);
printf("Warning: Weff = %g may be too small.\n",
pParam->BSIM3v32weff);
}
if (pParam->BSIM3v32weff <= 1.0e-7)
{ fprintf(fplog, "Warning: Weff = %g may be too small.\n",
pParam->BSIM3v32weff);
printf("Warning: Weff = %g may be too small.\n",
pParam->BSIM3v32weff);
}
if (pParam->BSIM3v32weffCV <= 1.0e-7)
{ fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n",
pParam->BSIM3v32weffCV);
printf("Warning: Weff for CV = %g may be too small.\n",
pParam->BSIM3v32weffCV);
}
if (pParam->BSIM3v32weffCV <= 1.0e-7)
{ fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n",
pParam->BSIM3v32weffCV);
printf("Warning: Weff for CV = %g may be too small.\n",
pParam->BSIM3v32weffCV);
}
/* Check threshold voltage parameters */
if (pParam->BSIM3v32nlx < 0.0)
{ fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->BSIM3v32nlx);
printf("Warning: Nlx = %g is negative.\n", pParam->BSIM3v32nlx);
}
if (model->BSIM3v32tox < 1.0e-9)
{ fprintf(fplog, "Warning: Tox = %g is less than 10A.\n",
model->BSIM3v32tox);
printf("Warning: Tox = %g is less than 10A.\n", model->BSIM3v32tox);
}
/* Check threshold voltage parameters */
if (pParam->BSIM3v32nlx < 0.0)
{ fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->BSIM3v32nlx);
printf("Warning: Nlx = %g is negative.\n", pParam->BSIM3v32nlx);
}
if (model->BSIM3v32tox < 1.0e-9)
{ fprintf(fplog, "Warning: Tox = %g is less than 10A.\n",
model->BSIM3v32tox);
printf("Warning: Tox = %g is less than 10A.\n", model->BSIM3v32tox);
}
if (pParam->BSIM3v32npeak <= 1.0e15)
{ fprintf(fplog, "Warning: Nch = %g may be too small.\n",
pParam->BSIM3v32npeak);
printf("Warning: Nch = %g may be too small.\n",
pParam->BSIM3v32npeak);
}
else if (pParam->BSIM3v32npeak >= 1.0e21)
{ fprintf(fplog, "Warning: Nch = %g may be too large.\n",
pParam->BSIM3v32npeak);
printf("Warning: Nch = %g may be too large.\n",
pParam->BSIM3v32npeak);
}
if (pParam->BSIM3v32npeak <= 1.0e15)
{ fprintf(fplog, "Warning: Nch = %g may be too small.\n",
pParam->BSIM3v32npeak);
printf("Warning: Nch = %g may be too small.\n",
pParam->BSIM3v32npeak);
}
else if (pParam->BSIM3v32npeak >= 1.0e21)
{ fprintf(fplog, "Warning: Nch = %g may be too large.\n",
pParam->BSIM3v32npeak);
printf("Warning: Nch = %g may be too large.\n",
pParam->BSIM3v32npeak);
}
if (pParam->BSIM3v32nsub <= 1.0e14)
{ fprintf(fplog, "Warning: Nsub = %g may be too small.\n",
pParam->BSIM3v32nsub);
printf("Warning: Nsub = %g may be too small.\n",
pParam->BSIM3v32nsub);
}
else if (pParam->BSIM3v32nsub >= 1.0e21)
{ fprintf(fplog, "Warning: Nsub = %g may be too large.\n",
pParam->BSIM3v32nsub);
printf("Warning: Nsub = %g may be too large.\n",
pParam->BSIM3v32nsub);
}
if (pParam->BSIM3v32nsub <= 1.0e14)
{ fprintf(fplog, "Warning: Nsub = %g may be too small.\n",
pParam->BSIM3v32nsub);
printf("Warning: Nsub = %g may be too small.\n",
pParam->BSIM3v32nsub);
}
else if (pParam->BSIM3v32nsub >= 1.0e21)
{ fprintf(fplog, "Warning: Nsub = %g may be too large.\n",
pParam->BSIM3v32nsub);
printf("Warning: Nsub = %g may be too large.\n",
pParam->BSIM3v32nsub);
}
if ((pParam->BSIM3v32ngate > 0.0) &&
(pParam->BSIM3v32ngate <= 1.e18))
{ fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n",
pParam->BSIM3v32ngate);
printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n",
pParam->BSIM3v32ngate);
}
if ((pParam->BSIM3v32ngate > 0.0) &&
(pParam->BSIM3v32ngate <= 1.e18))
{ fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n",
pParam->BSIM3v32ngate);
printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n",
pParam->BSIM3v32ngate);
}
if (pParam->BSIM3v32dvt0 < 0.0)
{ fprintf(fplog, "Warning: Dvt0 = %g is negative.\n",
pParam->BSIM3v32dvt0);
printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM3v32dvt0);
}
if (pParam->BSIM3v32dvt0 < 0.0)
{ fprintf(fplog, "Warning: Dvt0 = %g is negative.\n",
pParam->BSIM3v32dvt0);
printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM3v32dvt0);
}
if (fabs(1.0e-6 / (pParam->BSIM3v32w0 + pParam->BSIM3v32weff)) > 10.0)
{ fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n");
printf("Warning: (W0 + Weff) may be too small.\n");
}
if (fabs(1.0e-6 / (pParam->BSIM3v32w0 + pParam->BSIM3v32weff)) > 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->BSIM3v32nfactor < 0.0)
{ fprintf(fplog, "Warning: Nfactor = %g is negative.\n",
pParam->BSIM3v32nfactor);
printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM3v32nfactor);
}
if (pParam->BSIM3v32cdsc < 0.0)
{ fprintf(fplog, "Warning: Cdsc = %g is negative.\n",
pParam->BSIM3v32cdsc);
printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM3v32cdsc);
}
if (pParam->BSIM3v32cdscd < 0.0)
{ fprintf(fplog, "Warning: Cdscd = %g is negative.\n",
pParam->BSIM3v32cdscd);
printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM3v32cdscd);
}
/* Check DIBL parameters */
if (pParam->BSIM3v32eta0 < 0.0)
{ fprintf(fplog, "Warning: Eta0 = %g is negative.\n",
pParam->BSIM3v32eta0);
printf("Warning: Eta0 = %g is negative.\n", pParam->BSIM3v32eta0);
}
/* Check subthreshold parameters */
if (pParam->BSIM3v32nfactor < 0.0)
{ fprintf(fplog, "Warning: Nfactor = %g is negative.\n",
pParam->BSIM3v32nfactor);
printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM3v32nfactor);
}
if (pParam->BSIM3v32cdsc < 0.0)
{ fprintf(fplog, "Warning: Cdsc = %g is negative.\n",
pParam->BSIM3v32cdsc);
printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM3v32cdsc);
}
if (pParam->BSIM3v32cdscd < 0.0)
{ fprintf(fplog, "Warning: Cdscd = %g is negative.\n",
pParam->BSIM3v32cdscd);
printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM3v32cdscd);
}
/* Check DIBL parameters */
if (pParam->BSIM3v32eta0 < 0.0)
{ fprintf(fplog, "Warning: Eta0 = %g is negative.\n",
pParam->BSIM3v32eta0);
printf("Warning: Eta0 = %g is negative.\n", pParam->BSIM3v32eta0);
}
/* Check Abulk parameters */
if (fabs(1.0e-6 / (pParam->BSIM3v32b1 + pParam->BSIM3v32weff)) > 10.0)
{ fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n");
printf("Warning: (B1 + Weff) may be too small.\n");
}
/* Check Abulk parameters */
if (fabs(1.0e-6 / (pParam->BSIM3v32b1 + pParam->BSIM3v32weff)) > 10.0)
{ fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n");
printf("Warning: (B1 + Weff) may be too small.\n");
}
/* Check Saturation parameters */
if (pParam->BSIM3v32a2 < 0.01)
{ fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3v32a2);
printf("Warning: A2 = %g is too small. Set to 0.01.\n",
pParam->BSIM3v32a2);
pParam->BSIM3v32a2 = 0.01;
}
else if (pParam->BSIM3v32a2 > 1.0)
{ fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n",
pParam->BSIM3v32a2);
printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n",
pParam->BSIM3v32a2);
pParam->BSIM3v32a2 = 1.0;
pParam->BSIM3v32a1 = 0.0;
/* Check Saturation parameters */
if (pParam->BSIM3v32a2 < 0.01)
{ fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3v32a2);
printf("Warning: A2 = %g is too small. Set to 0.01.\n",
pParam->BSIM3v32a2);
pParam->BSIM3v32a2 = 0.01;
}
else if (pParam->BSIM3v32a2 > 1.0)
{ fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n",
pParam->BSIM3v32a2);
printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n",
pParam->BSIM3v32a2);
pParam->BSIM3v32a2 = 1.0;
pParam->BSIM3v32a1 = 0.0;
}
}
if (pParam->BSIM3v32rdsw < 0.0)
{ fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n",
pParam->BSIM3v32rdsw);
printf("Warning: Rdsw = %g is negative. Set to zero.\n",
pParam->BSIM3v32rdsw);
pParam->BSIM3v32rdsw = 0.0;
pParam->BSIM3v32rds0 = 0.0;
}
else if ((pParam->BSIM3v32rds0 > 0.0) && (pParam->BSIM3v32rds0 < 0.001))
{ fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n",
pParam->BSIM3v32rds0);
printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n",
pParam->BSIM3v32rds0);
pParam->BSIM3v32rds0 = 0.0;
}
if (pParam->BSIM3v32vsattemp < 1.0e3)
{ fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v32vsattemp);
printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v32vsattemp);
}
if (pParam->BSIM3v32rdsw < 0.0)
{ fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n",
pParam->BSIM3v32rdsw);
printf("Warning: Rdsw = %g is negative. Set to zero.\n",
pParam->BSIM3v32rdsw);
pParam->BSIM3v32rdsw = 0.0;
pParam->BSIM3v32rds0 = 0.0;
}
else if ((pParam->BSIM3v32rds0 > 0.0) && (pParam->BSIM3v32rds0 < 0.001))
{ fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n",
pParam->BSIM3v32rds0);
printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n",
pParam->BSIM3v32rds0);
pParam->BSIM3v32rds0 = 0.0;
}
if (pParam->BSIM3v32vsattemp < 1.0e3)
{ fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v32vsattemp);
printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v32vsattemp);
}
if (pParam->BSIM3v32pdibl1 < 0.0)
{ fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n",
pParam->BSIM3v32pdibl1);
printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3v32pdibl1);
}
if (pParam->BSIM3v32pdibl2 < 0.0)
{ fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n",
pParam->BSIM3v32pdibl2);
printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3v32pdibl2);
}
/* Check overlap capacitance parameters */
if (model->BSIM3v32cgdo < 0.0)
{ fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v32cgdo);
printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v32cgdo);
model->BSIM3v32cgdo = 0.0;
}
if (model->BSIM3v32cgso < 0.0)
{ fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v32cgso);
printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v32cgso);
model->BSIM3v32cgso = 0.0;
}
if (model->BSIM3v32cgbo < 0.0)
{ fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v32cgbo);
printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v32cgbo);
model->BSIM3v32cgbo = 0.0;
}
if (pParam->BSIM3v32pdibl1 < 0.0)
{ fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n",
pParam->BSIM3v32pdibl1);
printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3v32pdibl1);
}
if (pParam->BSIM3v32pdibl2 < 0.0)
{ fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n",
pParam->BSIM3v32pdibl2);
printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3v32pdibl2);
}
/* Check overlap capacitance parameters */
if (model->BSIM3v32cgdo < 0.0)
{ fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v32cgdo);
printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v32cgdo);
model->BSIM3v32cgdo = 0.0;
}
if (model->BSIM3v32cgso < 0.0)
{ fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v32cgso);
printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v32cgso);
model->BSIM3v32cgso = 0.0;
}
if (model->BSIM3v32cgbo < 0.0)
{ fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v32cgbo);
printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v32cgbo);
model->BSIM3v32cgbo = 0.0;
}
}/* loop for the parameter check for warning messages */
fclose(fplog);
}/* loop for the parameter check for warning messages */
fclose(fplog);
}
else
{ fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n");

View File

@ -31,21 +31,21 @@ double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs;
for (; model != NULL; model = model->BSIM3v32nextModel)
{ /* loop through all the instances of the model */
for (here = model->BSIM3v32instances; here != NULL ;
here=here->BSIM3v32nextInstance)
{
vbs = model->BSIM3v32type
* (*(ckt->CKTrhsOld+here->BSIM3v32bNode)
- *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime));
here=here->BSIM3v32nextInstance)
{
vbs = model->BSIM3v32type
* (*(ckt->CKTrhsOld+here->BSIM3v32bNode)
- *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime));
vgs = model->BSIM3v32type
* (*(ckt->CKTrhsOld+here->BSIM3v32gNode)
- *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime));
* (*(ckt->CKTrhsOld+here->BSIM3v32gNode)
- *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime));
vds = model->BSIM3v32type
* (*(ckt->CKTrhsOld+here->BSIM3v32dNodePrime)
- *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime));
* (*(ckt->CKTrhsOld+here->BSIM3v32dNodePrime)
- *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime));
vbd = vbs - vds;
vgd = vgs - vds;
vgdo = *(ckt->CKTstate0 + here->BSIM3v32vgs)
- *(ckt->CKTstate0 + here->BSIM3v32vds);
vgdo = *(ckt->CKTstate0 + here->BSIM3v32vgs)
- *(ckt->CKTstate0 + here->BSIM3v32vds);
delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3v32vbs);
delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3v32vbd);
delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3v32vgs);
@ -54,47 +54,47 @@ double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs;
cd = here->BSIM3v32cd - here->BSIM3v32cbd;
if (here->BSIM3v32mode >= 0)
{ cd += here->BSIM3v32csub;
cdhat = cd - here->BSIM3v32gbd * delvbd
+ (here->BSIM3v32gmbs + here->BSIM3v32gbbs) * delvbs
+ (here->BSIM3v32gm + here->BSIM3v32gbgs) * delvgs
+ (here->BSIM3v32gds + here->BSIM3v32gbds) * delvds;
{ cd += here->BSIM3v32csub;
cdhat = cd - here->BSIM3v32gbd * delvbd
+ (here->BSIM3v32gmbs + here->BSIM3v32gbbs) * delvbs
+ (here->BSIM3v32gm + here->BSIM3v32gbgs) * delvgs
+ (here->BSIM3v32gds + here->BSIM3v32gbds) * delvds;
}
else
{ cdhat = cd + (here->BSIM3v32gmbs - here->BSIM3v32gbd) * delvbd
+ here->BSIM3v32gm * delvgd - here->BSIM3v32gds * delvds;
else
{ cdhat = cd + (here->BSIM3v32gmbs - here->BSIM3v32gbd) * delvbd
+ here->BSIM3v32gm * delvgd - here->BSIM3v32gds * delvds;
}
/*
* check convergence
*/
if ((here->BSIM3v32off == 0) || (!(ckt->CKTmode & MODEINITFIX)))
{ tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd))
+ ckt->CKTabstol;
{ tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd))
+ ckt->CKTabstol;
if (fabs(cdhat - cd) >= tol)
{ ckt->CKTnoncon++;
{ ckt->CKTnoncon++;
return(OK);
}
}
cbs = here->BSIM3v32cbs;
cbd = here->BSIM3v32cbd;
if (here->BSIM3v32mode >= 0)
{ cbhat = cbs + cbd - here->BSIM3v32csub
+ here->BSIM3v32gbd * delvbd
+ (here->BSIM3v32gbs - here->BSIM3v32gbbs) * delvbs
- here->BSIM3v32gbgs * delvgs
- here->BSIM3v32gbds * delvds;
}
else
{ cbhat = cbs + cbd - here->BSIM3v32csub
+ here->BSIM3v32gbs * delvbs
+ (here->BSIM3v32gbd - here->BSIM3v32gbbs) * delvbd
- here->BSIM3v32gbgs * delvgd
+ here->BSIM3v32gbds * delvds;
}
tol = ckt->CKTreltol * MAX(fabs(cbhat),
fabs(cbs + cbd - here->BSIM3v32csub)) + ckt->CKTabstol;
if (fabs(cbhat - (cbs + cbd - here->BSIM3v32csub)) > tol)
{ ckt->CKTnoncon++;
{ cbhat = cbs + cbd - here->BSIM3v32csub
+ here->BSIM3v32gbd * delvbd
+ (here->BSIM3v32gbs - here->BSIM3v32gbbs) * delvbs
- here->BSIM3v32gbgs * delvgs
- here->BSIM3v32gbds * delvds;
}
else
{ cbhat = cbs + cbd - here->BSIM3v32csub
+ here->BSIM3v32gbs * delvbs
+ (here->BSIM3v32gbd - here->BSIM3v32gbbs) * delvbd
- here->BSIM3v32gbgs * delvgd
+ here->BSIM3v32gbds * delvds;
}
tol = ckt->CKTreltol * MAX(fabs(cbhat),
fabs(cbs + cbd - here->BSIM3v32csub)) + ckt->CKTabstol;
if (fabs(cbhat - (cbs + cbd - here->BSIM3v32csub)) > tol)
{ ckt->CKTnoncon++;
return(OK);
}
}

View File

@ -25,11 +25,11 @@ BSIM3v32model *model = (BSIM3v32model*)inModel;
BSIM3v32instance **prev = NULL;
BSIM3v32instance *here;
for (; model ; model = model->BSIM3v32nextModel)
for (; model ; model = model->BSIM3v32nextModel)
{ prev = &(model->BSIM3v32instances);
for (here = *prev; here ; here = *prev)
{ if (here->BSIM3v32name == name || (fast && here==*fast))
{ *prev= here->BSIM3v32nextInstance;
for (here = *prev; here ; here = *prev)
{ if (here->BSIM3v32name == name || (fast && here==*fast))
{ *prev= here->BSIM3v32nextInstance;
FREE(here);
return(OK);
}

View File

@ -23,7 +23,7 @@ BSIM3v32destroy (GENmodel **inModel)
BSIM3v32model *oldmod = NULL;
for (; mod ; mod = mod->BSIM3v32nextModel) {
/** added to get rid of link list pSizeDependParamKnot **/
/** added to get rid of link list pSizeDependParamKnot **/
struct bsim3v32SizeDependParam *pParam, *pParamOld=NULL;
pParam = mod->pSizeDependParamKnot;

View File

@ -21,20 +21,20 @@ BSIM3v32getic (GENmodel *inModel, CKTcircuit *ckt)
BSIM3v32model *model = (BSIM3v32model*)inModel;
BSIM3v32instance *here;
for (; model ; model = model->BSIM3v32nextModel)
for (; model ; model = model->BSIM3v32nextModel)
{ for (here = model->BSIM3v32instances; here; here = here->BSIM3v32nextInstance)
{
if (!here->BSIM3v32icVBSGiven)
{ here->BSIM3v32icVBS = *(ckt->CKTrhs + here->BSIM3v32bNode)
- *(ckt->CKTrhs + here->BSIM3v32sNode);
{
if (!here->BSIM3v32icVBSGiven)
{ here->BSIM3v32icVBS = *(ckt->CKTrhs + here->BSIM3v32bNode)
- *(ckt->CKTrhs + here->BSIM3v32sNode);
}
if (!here->BSIM3v32icVDSGiven)
{ here->BSIM3v32icVDS = *(ckt->CKTrhs + here->BSIM3v32dNode)
- *(ckt->CKTrhs + here->BSIM3v32sNode);
if (!here->BSIM3v32icVDSGiven)
{ here->BSIM3v32icVDS = *(ckt->CKTrhs + here->BSIM3v32dNode)
- *(ckt->CKTrhs + here->BSIM3v32sNode);
}
if (!here->BSIM3v32icVGSGiven)
{ here->BSIM3v32icVGS = *(ckt->CKTrhs + here->BSIM3v32gNode)
- *(ckt->CKTrhs + here->BSIM3v32sNode);
if (!here->BSIM3v32icVGSGiven)
{ here->BSIM3v32icVGS = *(ckt->CKTrhs + here->BSIM3v32gNode)
- *(ckt->CKTrhs + here->BSIM3v32sNode);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -24,24 +24,24 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
NG_IGNORE(ckt);
switch(which)
switch(which)
{ case BSIM3v32_MOD_MOBMOD:
value->iValue = model->BSIM3v32mobMod;
value->iValue = model->BSIM3v32mobMod;
return(OK);
case BSIM3v32_MOD_PARAMCHK:
value->iValue = model->BSIM3v32paramChk;
value->iValue = model->BSIM3v32paramChk;
return(OK);
case BSIM3v32_MOD_BINUNIT:
value->iValue = model->BSIM3v32binUnit;
value->iValue = model->BSIM3v32binUnit;
return(OK);
case BSIM3v32_MOD_CAPMOD:
value->iValue = model->BSIM3v32capMod;
value->iValue = model->BSIM3v32capMod;
return(OK);
case BSIM3v32_MOD_NOIMOD:
value->iValue = model->BSIM3v32noiMod;
value->iValue = model->BSIM3v32noiMod;
return(OK);
case BSIM3v32_MOD_ACMMOD:
value->iValue = model->BSIM3v32acmMod;
value->iValue = model->BSIM3v32acmMod;
return(OK);
case BSIM3v32_MOD_VERSION :
value->sValue = model->BSIM3v32version;
@ -94,7 +94,7 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
return(OK);
case BSIM3v32_MOD_KETA:
value->rValue = model->BSIM3v32keta;
return(OK);
return(OK);
case BSIM3v32_MOD_NSUB:
value->rValue = model->BSIM3v32nsub;
return(OK);
@ -146,50 +146,50 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case BSIM3v32_MOD_NLX:
value->rValue = model->BSIM3v32nlx;
return(OK);
case BSIM3v32_MOD_DVT0 :
case BSIM3v32_MOD_DVT0 :
value->rValue = model->BSIM3v32dvt0;
return(OK);
case BSIM3v32_MOD_DVT1 :
case BSIM3v32_MOD_DVT1 :
value->rValue = model->BSIM3v32dvt1;
return(OK);
case BSIM3v32_MOD_DVT2 :
case BSIM3v32_MOD_DVT2 :
value->rValue = model->BSIM3v32dvt2;
return(OK);
case BSIM3v32_MOD_DVT0W :
case BSIM3v32_MOD_DVT0W :
value->rValue = model->BSIM3v32dvt0w;
return(OK);
case BSIM3v32_MOD_DVT1W :
case BSIM3v32_MOD_DVT1W :
value->rValue = model->BSIM3v32dvt1w;
return(OK);
case BSIM3v32_MOD_DVT2W :
case BSIM3v32_MOD_DVT2W :
value->rValue = model->BSIM3v32dvt2w;
return(OK);
case BSIM3v32_MOD_DROUT :
case BSIM3v32_MOD_DROUT :
value->rValue = model->BSIM3v32drout;
return(OK);
case BSIM3v32_MOD_DSUB :
case BSIM3v32_MOD_DSUB :
value->rValue = model->BSIM3v32dsub;
return(OK);
case BSIM3v32_MOD_VTH0:
value->rValue = model->BSIM3v32vth0;
value->rValue = model->BSIM3v32vth0;
return(OK);
case BSIM3v32_MOD_UA:
value->rValue = model->BSIM3v32ua;
value->rValue = model->BSIM3v32ua;
return(OK);
case BSIM3v32_MOD_UA1:
value->rValue = model->BSIM3v32ua1;
value->rValue = model->BSIM3v32ua1;
return(OK);
case BSIM3v32_MOD_UB:
value->rValue = model->BSIM3v32ub;
value->rValue = model->BSIM3v32ub;
return(OK);
case BSIM3v32_MOD_UB1:
value->rValue = model->BSIM3v32ub1;
value->rValue = model->BSIM3v32ub1;
return(OK);
case BSIM3v32_MOD_UC:
value->rValue = model->BSIM3v32uc;
value->rValue = model->BSIM3v32uc;
return(OK);
case BSIM3v32_MOD_UC1:
value->rValue = model->BSIM3v32uc1;
value->rValue = model->BSIM3v32uc1;
return(OK);
case BSIM3v32_MOD_U0:
value->rValue = model->BSIM3v32u0;
@ -204,44 +204,44 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32delta;
return(OK);
case BSIM3v32_MOD_RDSW:
value->rValue = model->BSIM3v32rdsw;
return(OK);
value->rValue = model->BSIM3v32rdsw;
return(OK);
case BSIM3v32_MOD_PRWG:
value->rValue = model->BSIM3v32prwg;
return(OK);
value->rValue = model->BSIM3v32prwg;
return(OK);
case BSIM3v32_MOD_PRWB:
value->rValue = model->BSIM3v32prwb;
return(OK);
value->rValue = model->BSIM3v32prwb;
return(OK);
case BSIM3v32_MOD_PRT:
value->rValue = model->BSIM3v32prt;
return(OK);
value->rValue = model->BSIM3v32prt;
return(OK);
case BSIM3v32_MOD_ETA0:
value->rValue = model->BSIM3v32eta0;
return(OK);
value->rValue = model->BSIM3v32eta0;
return(OK);
case BSIM3v32_MOD_ETAB:
value->rValue = model->BSIM3v32etab;
return(OK);
value->rValue = model->BSIM3v32etab;
return(OK);
case BSIM3v32_MOD_PCLM:
value->rValue = model->BSIM3v32pclm;
return(OK);
value->rValue = model->BSIM3v32pclm;
return(OK);
case BSIM3v32_MOD_PDIBL1:
value->rValue = model->BSIM3v32pdibl1;
return(OK);
value->rValue = model->BSIM3v32pdibl1;
return(OK);
case BSIM3v32_MOD_PDIBL2:
value->rValue = model->BSIM3v32pdibl2;
return(OK);
value->rValue = model->BSIM3v32pdibl2;
return(OK);
case BSIM3v32_MOD_PDIBLB:
value->rValue = model->BSIM3v32pdiblb;
return(OK);
value->rValue = model->BSIM3v32pdiblb;
return(OK);
case BSIM3v32_MOD_PSCBE1:
value->rValue = model->BSIM3v32pscbe1;
return(OK);
value->rValue = model->BSIM3v32pscbe1;
return(OK);
case BSIM3v32_MOD_PSCBE2:
value->rValue = model->BSIM3v32pscbe2;
return(OK);
value->rValue = model->BSIM3v32pscbe2;
return(OK);
case BSIM3v32_MOD_PVAG:
value->rValue = model->BSIM3v32pvag;
return(OK);
value->rValue = model->BSIM3v32pvag;
return(OK);
case BSIM3v32_MOD_WR:
value->rValue = model->BSIM3v32wr;
return(OK);
@ -301,7 +301,7 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32dlc;
return(OK);
case BSIM3v32_MOD_VFBCV:
value->rValue = model->BSIM3v32vfbcv;
value->rValue = model->BSIM3v32vfbcv;
return(OK);
case BSIM3v32_MOD_ACDE:
value->rValue = model->BSIM3v32acde;
@ -334,30 +334,30 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32tpbswg;
return(OK);
/* acm model */
case BSIM3v32_MOD_HDIF:
value->rValue = model->BSIM3v32hdif;
return(OK);
case BSIM3v32_MOD_LDIF:
value->rValue = model->BSIM3v32ldif;
return(OK);
case BSIM3v32_MOD_LD:
value->rValue = model->BSIM3v32ld;
return(OK);
case BSIM3v32_MOD_RD:
value->rValue = model->BSIM3v32rd;
return(OK);
case BSIM3v32_MOD_RS:
value->rValue = model->BSIM3v32rs;
return(OK);
case BSIM3v32_MOD_RDC:
value->rValue = model->BSIM3v32rdc;
return(OK);
case BSIM3v32_MOD_RSC:
value->rValue = model->BSIM3v32rsc;
return(OK);
/* acm model */
case BSIM3v32_MOD_HDIF:
value->rValue = model->BSIM3v32hdif;
return(OK);
case BSIM3v32_MOD_LDIF:
value->rValue = model->BSIM3v32ldif;
return(OK);
case BSIM3v32_MOD_LD:
value->rValue = model->BSIM3v32ld;
return(OK);
case BSIM3v32_MOD_RD:
value->rValue = model->BSIM3v32rd;
return(OK);
case BSIM3v32_MOD_RS:
value->rValue = model->BSIM3v32rs;
return(OK);
case BSIM3v32_MOD_RDC:
value->rValue = model->BSIM3v32rdc;
return(OK);
case BSIM3v32_MOD_RSC:
value->rValue = model->BSIM3v32rsc;
return(OK);
/* Length dependence */
/* Length dependence */
case BSIM3v32_MOD_LCDSC :
value->rValue = model->BSIM3v32lcdsc;
return(OK);
@ -396,7 +396,7 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
return(OK);
case BSIM3v32_MOD_LKETA:
value->rValue = model->BSIM3v32lketa;
return(OK);
return(OK);
case BSIM3v32_MOD_LNSUB:
value->rValue = model->BSIM3v32lnsub;
return(OK);
@ -448,50 +448,50 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case BSIM3v32_MOD_LNLX:
value->rValue = model->BSIM3v32lnlx;
return(OK);
case BSIM3v32_MOD_LDVT0:
case BSIM3v32_MOD_LDVT0:
value->rValue = model->BSIM3v32ldvt0;
return(OK);
case BSIM3v32_MOD_LDVT1 :
case BSIM3v32_MOD_LDVT1 :
value->rValue = model->BSIM3v32ldvt1;
return(OK);
case BSIM3v32_MOD_LDVT2 :
case BSIM3v32_MOD_LDVT2 :
value->rValue = model->BSIM3v32ldvt2;
return(OK);
case BSIM3v32_MOD_LDVT0W :
case BSIM3v32_MOD_LDVT0W :
value->rValue = model->BSIM3v32ldvt0w;
return(OK);
case BSIM3v32_MOD_LDVT1W :
case BSIM3v32_MOD_LDVT1W :
value->rValue = model->BSIM3v32ldvt1w;
return(OK);
case BSIM3v32_MOD_LDVT2W :
case BSIM3v32_MOD_LDVT2W :
value->rValue = model->BSIM3v32ldvt2w;
return(OK);
case BSIM3v32_MOD_LDROUT :
case BSIM3v32_MOD_LDROUT :
value->rValue = model->BSIM3v32ldrout;
return(OK);
case BSIM3v32_MOD_LDSUB :
case BSIM3v32_MOD_LDSUB :
value->rValue = model->BSIM3v32ldsub;
return(OK);
case BSIM3v32_MOD_LVTH0:
value->rValue = model->BSIM3v32lvth0;
value->rValue = model->BSIM3v32lvth0;
return(OK);
case BSIM3v32_MOD_LUA:
value->rValue = model->BSIM3v32lua;
value->rValue = model->BSIM3v32lua;
return(OK);
case BSIM3v32_MOD_LUA1:
value->rValue = model->BSIM3v32lua1;
value->rValue = model->BSIM3v32lua1;
return(OK);
case BSIM3v32_MOD_LUB:
value->rValue = model->BSIM3v32lub;
value->rValue = model->BSIM3v32lub;
return(OK);
case BSIM3v32_MOD_LUB1:
value->rValue = model->BSIM3v32lub1;
value->rValue = model->BSIM3v32lub1;
return(OK);
case BSIM3v32_MOD_LUC:
value->rValue = model->BSIM3v32luc;
value->rValue = model->BSIM3v32luc;
return(OK);
case BSIM3v32_MOD_LUC1:
value->rValue = model->BSIM3v32luc1;
value->rValue = model->BSIM3v32luc1;
return(OK);
case BSIM3v32_MOD_LU0:
value->rValue = model->BSIM3v32lu0;
@ -506,44 +506,44 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32ldelta;
return(OK);
case BSIM3v32_MOD_LRDSW:
value->rValue = model->BSIM3v32lrdsw;
return(OK);
value->rValue = model->BSIM3v32lrdsw;
return(OK);
case BSIM3v32_MOD_LPRWB:
value->rValue = model->BSIM3v32lprwb;
return(OK);
value->rValue = model->BSIM3v32lprwb;
return(OK);
case BSIM3v32_MOD_LPRWG:
value->rValue = model->BSIM3v32lprwg;
return(OK);
value->rValue = model->BSIM3v32lprwg;
return(OK);
case BSIM3v32_MOD_LPRT:
value->rValue = model->BSIM3v32lprt;
return(OK);
value->rValue = model->BSIM3v32lprt;
return(OK);
case BSIM3v32_MOD_LETA0:
value->rValue = model->BSIM3v32leta0;
return(OK);
value->rValue = model->BSIM3v32leta0;
return(OK);
case BSIM3v32_MOD_LETAB:
value->rValue = model->BSIM3v32letab;
return(OK);
value->rValue = model->BSIM3v32letab;
return(OK);
case BSIM3v32_MOD_LPCLM:
value->rValue = model->BSIM3v32lpclm;
return(OK);
value->rValue = model->BSIM3v32lpclm;
return(OK);
case BSIM3v32_MOD_LPDIBL1:
value->rValue = model->BSIM3v32lpdibl1;
return(OK);
value->rValue = model->BSIM3v32lpdibl1;
return(OK);
case BSIM3v32_MOD_LPDIBL2:
value->rValue = model->BSIM3v32lpdibl2;
return(OK);
value->rValue = model->BSIM3v32lpdibl2;
return(OK);
case BSIM3v32_MOD_LPDIBLB:
value->rValue = model->BSIM3v32lpdiblb;
return(OK);
value->rValue = model->BSIM3v32lpdiblb;
return(OK);
case BSIM3v32_MOD_LPSCBE1:
value->rValue = model->BSIM3v32lpscbe1;
return(OK);
value->rValue = model->BSIM3v32lpscbe1;
return(OK);
case BSIM3v32_MOD_LPSCBE2:
value->rValue = model->BSIM3v32lpscbe2;
return(OK);
value->rValue = model->BSIM3v32lpscbe2;
return(OK);
case BSIM3v32_MOD_LPVAG:
value->rValue = model->BSIM3v32lpvag;
return(OK);
value->rValue = model->BSIM3v32lpvag;
return(OK);
case BSIM3v32_MOD_LWR:
value->rValue = model->BSIM3v32lwr;
return(OK);
@ -609,7 +609,7 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32lvoffcv;
return(OK);
/* Width dependence */
/* Width dependence */
case BSIM3v32_MOD_WCDSC :
value->rValue = model->BSIM3v32wcdsc;
return(OK);
@ -648,7 +648,7 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
return(OK);
case BSIM3v32_MOD_WKETA:
value->rValue = model->BSIM3v32wketa;
return(OK);
return(OK);
case BSIM3v32_MOD_WNSUB:
value->rValue = model->BSIM3v32wnsub;
return(OK);
@ -700,50 +700,50 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case BSIM3v32_MOD_WNLX:
value->rValue = model->BSIM3v32wnlx;
return(OK);
case BSIM3v32_MOD_WDVT0:
case BSIM3v32_MOD_WDVT0:
value->rValue = model->BSIM3v32wdvt0;
return(OK);
case BSIM3v32_MOD_WDVT1 :
case BSIM3v32_MOD_WDVT1 :
value->rValue = model->BSIM3v32wdvt1;
return(OK);
case BSIM3v32_MOD_WDVT2 :
case BSIM3v32_MOD_WDVT2 :
value->rValue = model->BSIM3v32wdvt2;
return(OK);
case BSIM3v32_MOD_WDVT0W :
case BSIM3v32_MOD_WDVT0W :
value->rValue = model->BSIM3v32wdvt0w;
return(OK);
case BSIM3v32_MOD_WDVT1W :
case BSIM3v32_MOD_WDVT1W :
value->rValue = model->BSIM3v32wdvt1w;
return(OK);
case BSIM3v32_MOD_WDVT2W :
case BSIM3v32_MOD_WDVT2W :
value->rValue = model->BSIM3v32wdvt2w;
return(OK);
case BSIM3v32_MOD_WDROUT :
case BSIM3v32_MOD_WDROUT :
value->rValue = model->BSIM3v32wdrout;
return(OK);
case BSIM3v32_MOD_WDSUB :
case BSIM3v32_MOD_WDSUB :
value->rValue = model->BSIM3v32wdsub;
return(OK);
case BSIM3v32_MOD_WVTH0:
value->rValue = model->BSIM3v32wvth0;
value->rValue = model->BSIM3v32wvth0;
return(OK);
case BSIM3v32_MOD_WUA:
value->rValue = model->BSIM3v32wua;
value->rValue = model->BSIM3v32wua;
return(OK);
case BSIM3v32_MOD_WUA1:
value->rValue = model->BSIM3v32wua1;
value->rValue = model->BSIM3v32wua1;
return(OK);
case BSIM3v32_MOD_WUB:
value->rValue = model->BSIM3v32wub;
value->rValue = model->BSIM3v32wub;
return(OK);
case BSIM3v32_MOD_WUB1:
value->rValue = model->BSIM3v32wub1;
value->rValue = model->BSIM3v32wub1;
return(OK);
case BSIM3v32_MOD_WUC:
value->rValue = model->BSIM3v32wuc;
value->rValue = model->BSIM3v32wuc;
return(OK);
case BSIM3v32_MOD_WUC1:
value->rValue = model->BSIM3v32wuc1;
value->rValue = model->BSIM3v32wuc1;
return(OK);
case BSIM3v32_MOD_WU0:
value->rValue = model->BSIM3v32wu0;
@ -758,44 +758,44 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32wdelta;
return(OK);
case BSIM3v32_MOD_WRDSW:
value->rValue = model->BSIM3v32wrdsw;
return(OK);
value->rValue = model->BSIM3v32wrdsw;
return(OK);
case BSIM3v32_MOD_WPRWB:
value->rValue = model->BSIM3v32wprwb;
return(OK);
value->rValue = model->BSIM3v32wprwb;
return(OK);
case BSIM3v32_MOD_WPRWG:
value->rValue = model->BSIM3v32wprwg;
return(OK);
value->rValue = model->BSIM3v32wprwg;
return(OK);
case BSIM3v32_MOD_WPRT:
value->rValue = model->BSIM3v32wprt;
return(OK);
value->rValue = model->BSIM3v32wprt;
return(OK);
case BSIM3v32_MOD_WETA0:
value->rValue = model->BSIM3v32weta0;
return(OK);
value->rValue = model->BSIM3v32weta0;
return(OK);
case BSIM3v32_MOD_WETAB:
value->rValue = model->BSIM3v32wetab;
return(OK);
value->rValue = model->BSIM3v32wetab;
return(OK);
case BSIM3v32_MOD_WPCLM:
value->rValue = model->BSIM3v32wpclm;
return(OK);
value->rValue = model->BSIM3v32wpclm;
return(OK);
case BSIM3v32_MOD_WPDIBL1:
value->rValue = model->BSIM3v32wpdibl1;
return(OK);
value->rValue = model->BSIM3v32wpdibl1;
return(OK);
case BSIM3v32_MOD_WPDIBL2:
value->rValue = model->BSIM3v32wpdibl2;
return(OK);
value->rValue = model->BSIM3v32wpdibl2;
return(OK);
case BSIM3v32_MOD_WPDIBLB:
value->rValue = model->BSIM3v32wpdiblb;
return(OK);
value->rValue = model->BSIM3v32wpdiblb;
return(OK);
case BSIM3v32_MOD_WPSCBE1:
value->rValue = model->BSIM3v32wpscbe1;
return(OK);
value->rValue = model->BSIM3v32wpscbe1;
return(OK);
case BSIM3v32_MOD_WPSCBE2:
value->rValue = model->BSIM3v32wpscbe2;
return(OK);
value->rValue = model->BSIM3v32wpscbe2;
return(OK);
case BSIM3v32_MOD_WPVAG:
value->rValue = model->BSIM3v32wpvag;
return(OK);
value->rValue = model->BSIM3v32wpvag;
return(OK);
case BSIM3v32_MOD_WWR:
value->rValue = model->BSIM3v32wwr;
return(OK);
@ -861,7 +861,7 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32wvoffcv;
return(OK);
/* Cross-term dependence */
/* Cross-term dependence */
case BSIM3v32_MOD_PCDSC :
value->rValue = model->BSIM3v32pcdsc;
return(OK);
@ -900,7 +900,7 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
return(OK);
case BSIM3v32_MOD_PKETA:
value->rValue = model->BSIM3v32pketa;
return(OK);
return(OK);
case BSIM3v32_MOD_PNSUB:
value->rValue = model->BSIM3v32pnsub;
return(OK);
@ -952,50 +952,50 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case BSIM3v32_MOD_PNLX:
value->rValue = model->BSIM3v32pnlx;
return(OK);
case BSIM3v32_MOD_PDVT0 :
case BSIM3v32_MOD_PDVT0 :
value->rValue = model->BSIM3v32pdvt0;
return(OK);
case BSIM3v32_MOD_PDVT1 :
case BSIM3v32_MOD_PDVT1 :
value->rValue = model->BSIM3v32pdvt1;
return(OK);
case BSIM3v32_MOD_PDVT2 :
case BSIM3v32_MOD_PDVT2 :
value->rValue = model->BSIM3v32pdvt2;
return(OK);
case BSIM3v32_MOD_PDVT0W :
case BSIM3v32_MOD_PDVT0W :
value->rValue = model->BSIM3v32pdvt0w;
return(OK);
case BSIM3v32_MOD_PDVT1W :
case BSIM3v32_MOD_PDVT1W :
value->rValue = model->BSIM3v32pdvt1w;
return(OK);
case BSIM3v32_MOD_PDVT2W :
value->rValue = model->BSIM3v32pdvt2w;
case BSIM3v32_MOD_PDVT2W :
value->rValue = model->BSIM3v32pdvt2w;
return(OK);
case BSIM3v32_MOD_PDROUT :
value->rValue = model->BSIM3v32pdrout;
case BSIM3v32_MOD_PDROUT :
value->rValue = model->BSIM3v32pdrout;
return(OK);
case BSIM3v32_MOD_PDSUB :
value->rValue = model->BSIM3v32pdsub;
case BSIM3v32_MOD_PDSUB :
value->rValue = model->BSIM3v32pdsub;
return(OK);
case BSIM3v32_MOD_PVTH0:
value->rValue = model->BSIM3v32pvth0;
value->rValue = model->BSIM3v32pvth0;
return(OK);
case BSIM3v32_MOD_PUA:
value->rValue = model->BSIM3v32pua;
value->rValue = model->BSIM3v32pua;
return(OK);
case BSIM3v32_MOD_PUA1:
value->rValue = model->BSIM3v32pua1;
value->rValue = model->BSIM3v32pua1;
return(OK);
case BSIM3v32_MOD_PUB:
value->rValue = model->BSIM3v32pub;
value->rValue = model->BSIM3v32pub;
return(OK);
case BSIM3v32_MOD_PUB1:
value->rValue = model->BSIM3v32pub1;
value->rValue = model->BSIM3v32pub1;
return(OK);
case BSIM3v32_MOD_PUC:
value->rValue = model->BSIM3v32puc;
value->rValue = model->BSIM3v32puc;
return(OK);
case BSIM3v32_MOD_PUC1:
value->rValue = model->BSIM3v32puc1;
value->rValue = model->BSIM3v32puc1;
return(OK);
case BSIM3v32_MOD_PU0:
value->rValue = model->BSIM3v32pu0;
@ -1010,44 +1010,44 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
value->rValue = model->BSIM3v32pdelta;
return(OK);
case BSIM3v32_MOD_PRDSW:
value->rValue = model->BSIM3v32prdsw;
return(OK);
value->rValue = model->BSIM3v32prdsw;
return(OK);
case BSIM3v32_MOD_PPRWB:
value->rValue = model->BSIM3v32pprwb;
return(OK);
value->rValue = model->BSIM3v32pprwb;
return(OK);
case BSIM3v32_MOD_PPRWG:
value->rValue = model->BSIM3v32pprwg;
return(OK);
value->rValue = model->BSIM3v32pprwg;
return(OK);
case BSIM3v32_MOD_PPRT:
value->rValue = model->BSIM3v32pprt;
return(OK);
value->rValue = model->BSIM3v32pprt;
return(OK);
case BSIM3v32_MOD_PETA0:
value->rValue = model->BSIM3v32peta0;
return(OK);
value->rValue = model->BSIM3v32peta0;
return(OK);
case BSIM3v32_MOD_PETAB:
value->rValue = model->BSIM3v32petab;
return(OK);
value->rValue = model->BSIM3v32petab;
return(OK);
case BSIM3v32_MOD_PPCLM:
value->rValue = model->BSIM3v32ppclm;
return(OK);
value->rValue = model->BSIM3v32ppclm;
return(OK);
case BSIM3v32_MOD_PPDIBL1:
value->rValue = model->BSIM3v32ppdibl1;
return(OK);
value->rValue = model->BSIM3v32ppdibl1;
return(OK);
case BSIM3v32_MOD_PPDIBL2:
value->rValue = model->BSIM3v32ppdibl2;
return(OK);
value->rValue = model->BSIM3v32ppdibl2;
return(OK);
case BSIM3v32_MOD_PPDIBLB:
value->rValue = model->BSIM3v32ppdiblb;
return(OK);
value->rValue = model->BSIM3v32ppdiblb;
return(OK);
case BSIM3v32_MOD_PPSCBE1:
value->rValue = model->BSIM3v32ppscbe1;
return(OK);
value->rValue = model->BSIM3v32ppscbe1;
return(OK);
case BSIM3v32_MOD_PPSCBE2:
value->rValue = model->BSIM3v32ppscbe2;
return(OK);
value->rValue = model->BSIM3v32ppscbe2;
return(OK);
case BSIM3v32_MOD_PPVAG:
value->rValue = model->BSIM3v32ppvag;
return(OK);
value->rValue = model->BSIM3v32ppvag;
return(OK);
case BSIM3v32_MOD_PWR:
value->rValue = model->BSIM3v32pwr;
return(OK);
@ -1114,64 +1114,64 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
return(OK);
case BSIM3v32_MOD_TNOM :
value->rValue = model->BSIM3v32tnom;
value->rValue = model->BSIM3v32tnom;
return(OK);
case BSIM3v32_MOD_CGSO:
value->rValue = model->BSIM3v32cgso;
value->rValue = model->BSIM3v32cgso;
return(OK);
case BSIM3v32_MOD_CGDO:
value->rValue = model->BSIM3v32cgdo;
value->rValue = model->BSIM3v32cgdo;
return(OK);
case BSIM3v32_MOD_CGBO:
value->rValue = model->BSIM3v32cgbo;
value->rValue = model->BSIM3v32cgbo;
return(OK);
case BSIM3v32_MOD_XPART:
value->rValue = model->BSIM3v32xpart;
value->rValue = model->BSIM3v32xpart;
return(OK);
case BSIM3v32_MOD_RSH:
value->rValue = model->BSIM3v32sheetResistance;
value->rValue = model->BSIM3v32sheetResistance;
return(OK);
case BSIM3v32_MOD_JS:
value->rValue = model->BSIM3v32jctSatCurDensity;
value->rValue = model->BSIM3v32jctSatCurDensity;
return(OK);
case BSIM3v32_MOD_JSW:
value->rValue = model->BSIM3v32jctSidewallSatCurDensity;
value->rValue = model->BSIM3v32jctSidewallSatCurDensity;
return(OK);
case BSIM3v32_MOD_PB:
value->rValue = model->BSIM3v32bulkJctPotential;
value->rValue = model->BSIM3v32bulkJctPotential;
return(OK);
case BSIM3v32_MOD_MJ:
value->rValue = model->BSIM3v32bulkJctBotGradingCoeff;
value->rValue = model->BSIM3v32bulkJctBotGradingCoeff;
return(OK);
case BSIM3v32_MOD_PBSW:
value->rValue = model->BSIM3v32sidewallJctPotential;
value->rValue = model->BSIM3v32sidewallJctPotential;
return(OK);
case BSIM3v32_MOD_MJSW:
value->rValue = model->BSIM3v32bulkJctSideGradingCoeff;
value->rValue = model->BSIM3v32bulkJctSideGradingCoeff;
return(OK);
case BSIM3v32_MOD_CJ:
value->rValue = model->BSIM3v32unitAreaJctCap;
value->rValue = model->BSIM3v32unitAreaJctCap;
return(OK);
case BSIM3v32_MOD_CJSW:
value->rValue = model->BSIM3v32unitLengthSidewallJctCap;
value->rValue = model->BSIM3v32unitLengthSidewallJctCap;
return(OK);
case BSIM3v32_MOD_PBSWG:
value->rValue = model->BSIM3v32GatesidewallJctPotential;
value->rValue = model->BSIM3v32GatesidewallJctPotential;
return(OK);
case BSIM3v32_MOD_MJSWG:
value->rValue = model->BSIM3v32bulkJctGateSideGradingCoeff;
value->rValue = model->BSIM3v32bulkJctGateSideGradingCoeff;
return(OK);
case BSIM3v32_MOD_CJSWG:
value->rValue = model->BSIM3v32unitLengthGateSidewallJctCap;
value->rValue = model->BSIM3v32unitLengthGateSidewallJctCap;
return(OK);
case BSIM3v32_MOD_NJ:
value->rValue = model->BSIM3v32jctEmissionCoeff;
value->rValue = model->BSIM3v32jctEmissionCoeff;
return(OK);
case BSIM3v32_MOD_XTI:
value->rValue = model->BSIM3v32jctTempExponent;
value->rValue = model->BSIM3v32jctTempExponent;
return(OK);
case BSIM3v32_MOD_LINT:
value->rValue = model->BSIM3v32Lint;
value->rValue = model->BSIM3v32Lint;
return(OK);
case BSIM3v32_MOD_LL:
value->rValue = model->BSIM3v32Ll;
@ -1238,11 +1238,11 @@ BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
return(OK);
case BSIM3v32_MOD_XL:
value->rValue = model->BSIM3v32xl;
return(OK);
value->rValue = model->BSIM3v32xl;
return(OK);
case BSIM3v32_MOD_XW:
value->rValue = model->BSIM3v32xw;
return(OK);
value->rValue = model->BSIM3v32xw;
return(OK);
case BSIM3v32_MOD_NOIA:
value->rValue = model->BSIM3v32oxideTrapDensityA;

View File

@ -3,7 +3,7 @@
/**********
* Copyright 2001 Regents of the University of California. All rights reserved.
* File: b3mdel.c of BSIM3v3.2.4
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1997-1999 Weidong Liu.
* Author: 2001 Xuemei Xi
* Modified by Paolo Nenzi 2002
@ -24,10 +24,10 @@ BSIM3v32instance *prev = NULL;
BSIM3v32model **oldmod;
oldmod = model;
for (; *model ; model = &((*model)->BSIM3v32nextModel))
{ if ((*model)->BSIM3v32modName == modname ||
for (; *model ; model = &((*model)->BSIM3v32nextModel))
{ if ((*model)->BSIM3v32modName == modname ||
(modfast && *model == modfast))
goto delgot;
goto delgot;
oldmod = model;
}
return(E_NOMOD);
@ -44,4 +44,3 @@ delgot:
}

View File

@ -3,7 +3,7 @@
/**********
* Copyright 2001 Regents of the University of California. All rights reserved.
* File: b3mpar.c of BSIM3v3.2.4
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1997-1999 Weidong Liu.
* Author: 2001 Xuemei Xi
* Modified by Paolo Nenzi 2002 and Dietmar Warning 2003
@ -92,12 +92,12 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32a0 = value->rValue;
mod->BSIM3v32a0Given = TRUE;
break;
case BSIM3v32_MOD_AGS:
mod->BSIM3v32ags= value->rValue;
mod->BSIM3v32agsGiven = TRUE;
break;
case BSIM3v32_MOD_A1:
mod->BSIM3v32a1 = value->rValue;
mod->BSIM3v32a1Given = TRUE;
@ -113,7 +113,7 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_KETA:
mod->BSIM3v32keta = value->rValue;
mod->BSIM3v32ketaGiven = TRUE;
break;
break;
case BSIM3v32_MOD_NSUB:
mod->BSIM3v32nsub = value->rValue;
mod->BSIM3v32nsubGiven = TRUE;
@ -121,14 +121,14 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_NPEAK:
mod->BSIM3v32npeak = value->rValue;
mod->BSIM3v32npeakGiven = TRUE;
if (mod->BSIM3v32npeak > 1.0e20)
mod->BSIM3v32npeak *= 1.0e-6;
if (mod->BSIM3v32npeak > 1.0e20)
mod->BSIM3v32npeak *= 1.0e-6;
break;
case BSIM3v32_MOD_NGATE:
mod->BSIM3v32ngate = value->rValue;
mod->BSIM3v32ngateGiven = TRUE;
if (mod->BSIM3v32ngate > 1.0e23)
mod->BSIM3v32ngate *= 1.0e-6;
if (mod->BSIM3v32ngate > 1.0e23)
mod->BSIM3v32ngate *= 1.0e-6;
break;
case BSIM3v32_MOD_GAMMA1:
mod->BSIM3v32gamma1 = value->rValue;
@ -186,35 +186,35 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32w0 = value->rValue;
mod->BSIM3v32w0Given = TRUE;
break;
case BSIM3v32_MOD_DVT0:
case BSIM3v32_MOD_DVT0:
mod->BSIM3v32dvt0 = value->rValue;
mod->BSIM3v32dvt0Given = TRUE;
break;
case BSIM3v32_MOD_DVT1:
case BSIM3v32_MOD_DVT1:
mod->BSIM3v32dvt1 = value->rValue;
mod->BSIM3v32dvt1Given = TRUE;
break;
case BSIM3v32_MOD_DVT2:
case BSIM3v32_MOD_DVT2:
mod->BSIM3v32dvt2 = value->rValue;
mod->BSIM3v32dvt2Given = TRUE;
break;
case BSIM3v32_MOD_DVT0W:
case BSIM3v32_MOD_DVT0W:
mod->BSIM3v32dvt0w = value->rValue;
mod->BSIM3v32dvt0wGiven = TRUE;
break;
case BSIM3v32_MOD_DVT1W:
case BSIM3v32_MOD_DVT1W:
mod->BSIM3v32dvt1w = value->rValue;
mod->BSIM3v32dvt1wGiven = TRUE;
break;
case BSIM3v32_MOD_DVT2W:
case BSIM3v32_MOD_DVT2W:
mod->BSIM3v32dvt2w = value->rValue;
mod->BSIM3v32dvt2wGiven = TRUE;
break;
case BSIM3v32_MOD_DROUT:
case BSIM3v32_MOD_DROUT:
mod->BSIM3v32drout = value->rValue;
mod->BSIM3v32droutGiven = TRUE;
break;
case BSIM3v32_MOD_DSUB:
case BSIM3v32_MOD_DSUB:
mod->BSIM3v32dsub = value->rValue;
mod->BSIM3v32dsubGiven = TRUE;
break;
@ -265,55 +265,55 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_RDSW:
mod->BSIM3v32rdsw = value->rValue;
mod->BSIM3v32rdswGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PRWG:
mod->BSIM3v32prwg = value->rValue;
mod->BSIM3v32prwgGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PRWB:
mod->BSIM3v32prwb = value->rValue;
mod->BSIM3v32prwbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PRT:
mod->BSIM3v32prt = value->rValue;
mod->BSIM3v32prtGiven = TRUE;
break;
break;
case BSIM3v32_MOD_ETA0:
mod->BSIM3v32eta0 = value->rValue;
mod->BSIM3v32eta0Given = TRUE;
break;
break;
case BSIM3v32_MOD_ETAB:
mod->BSIM3v32etab = value->rValue;
mod->BSIM3v32etabGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PCLM:
mod->BSIM3v32pclm = value->rValue;
mod->BSIM3v32pclmGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PDIBL1:
mod->BSIM3v32pdibl1 = value->rValue;
mod->BSIM3v32pdibl1Given = TRUE;
break;
break;
case BSIM3v32_MOD_PDIBL2:
mod->BSIM3v32pdibl2 = value->rValue;
mod->BSIM3v32pdibl2Given = TRUE;
break;
break;
case BSIM3v32_MOD_PDIBLB:
mod->BSIM3v32pdiblb = value->rValue;
mod->BSIM3v32pdiblbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PSCBE1:
mod->BSIM3v32pscbe1 = value->rValue;
mod->BSIM3v32pscbe1Given = TRUE;
break;
break;
case BSIM3v32_MOD_PSCBE2:
mod->BSIM3v32pscbe2 = value->rValue;
mod->BSIM3v32pscbe2Given = TRUE;
break;
break;
case BSIM3v32_MOD_PVAG:
mod->BSIM3v32pvag = value->rValue;
mod->BSIM3v32pvagGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WR :
mod->BSIM3v32wr = value->rValue;
mod->BSIM3v32wrGiven = TRUE;
@ -466,7 +466,7 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32rscGiven = TRUE;
break;
/* Length dependence */
/* Length dependence */
case BSIM3v32_MOD_LCDSC :
mod->BSIM3v32lcdsc = value->rValue;
mod->BSIM3v32lcdscGiven = TRUE;
@ -497,8 +497,8 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32lvsat = value->rValue;
mod->BSIM3v32lvsatGiven = TRUE;
break;
case BSIM3v32_MOD_LA0:
mod->BSIM3v32la0 = value->rValue;
mod->BSIM3v32la0Given = TRUE;
@ -522,7 +522,7 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_LKETA:
mod->BSIM3v32lketa = value->rValue;
mod->BSIM3v32lketaGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LNSUB:
mod->BSIM3v32lnsub = value->rValue;
mod->BSIM3v32lnsubGiven = TRUE;
@ -530,14 +530,14 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_LNPEAK:
mod->BSIM3v32lnpeak = value->rValue;
mod->BSIM3v32lnpeakGiven = TRUE;
if (mod->BSIM3v32lnpeak > 1.0e20)
mod->BSIM3v32lnpeak *= 1.0e-6;
if (mod->BSIM3v32lnpeak > 1.0e20)
mod->BSIM3v32lnpeak *= 1.0e-6;
break;
case BSIM3v32_MOD_LNGATE:
mod->BSIM3v32lngate = value->rValue;
mod->BSIM3v32lngateGiven = TRUE;
if (mod->BSIM3v32lngate > 1.0e23)
mod->BSIM3v32lngate *= 1.0e-6;
if (mod->BSIM3v32lngate > 1.0e23)
mod->BSIM3v32lngate *= 1.0e-6;
break;
case BSIM3v32_MOD_LGAMMA1:
mod->BSIM3v32lgamma1 = value->rValue;
@ -595,35 +595,35 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32lw0 = value->rValue;
mod->BSIM3v32lw0Given = TRUE;
break;
case BSIM3v32_MOD_LDVT0:
case BSIM3v32_MOD_LDVT0:
mod->BSIM3v32ldvt0 = value->rValue;
mod->BSIM3v32ldvt0Given = TRUE;
break;
case BSIM3v32_MOD_LDVT1:
case BSIM3v32_MOD_LDVT1:
mod->BSIM3v32ldvt1 = value->rValue;
mod->BSIM3v32ldvt1Given = TRUE;
break;
case BSIM3v32_MOD_LDVT2:
case BSIM3v32_MOD_LDVT2:
mod->BSIM3v32ldvt2 = value->rValue;
mod->BSIM3v32ldvt2Given = TRUE;
break;
case BSIM3v32_MOD_LDVT0W:
case BSIM3v32_MOD_LDVT0W:
mod->BSIM3v32ldvt0w = value->rValue;
mod->BSIM3v32ldvt0wGiven = TRUE;
break;
case BSIM3v32_MOD_LDVT1W:
case BSIM3v32_MOD_LDVT1W:
mod->BSIM3v32ldvt1w = value->rValue;
mod->BSIM3v32ldvt1wGiven = TRUE;
break;
case BSIM3v32_MOD_LDVT2W:
case BSIM3v32_MOD_LDVT2W:
mod->BSIM3v32ldvt2w = value->rValue;
mod->BSIM3v32ldvt2wGiven = TRUE;
break;
case BSIM3v32_MOD_LDROUT:
case BSIM3v32_MOD_LDROUT:
mod->BSIM3v32ldrout = value->rValue;
mod->BSIM3v32ldroutGiven = TRUE;
break;
case BSIM3v32_MOD_LDSUB:
case BSIM3v32_MOD_LDSUB:
mod->BSIM3v32ldsub = value->rValue;
mod->BSIM3v32ldsubGiven = TRUE;
break;
@ -674,55 +674,55 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_LRDSW:
mod->BSIM3v32lrdsw = value->rValue;
mod->BSIM3v32lrdswGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LPRWB:
mod->BSIM3v32lprwb = value->rValue;
mod->BSIM3v32lprwbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LPRWG:
mod->BSIM3v32lprwg = value->rValue;
mod->BSIM3v32lprwgGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LPRT:
mod->BSIM3v32lprt = value->rValue;
mod->BSIM3v32lprtGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LETA0:
mod->BSIM3v32leta0 = value->rValue;
mod->BSIM3v32leta0Given = TRUE;
break;
break;
case BSIM3v32_MOD_LETAB:
mod->BSIM3v32letab = value->rValue;
mod->BSIM3v32letabGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LPCLM:
mod->BSIM3v32lpclm = value->rValue;
mod->BSIM3v32lpclmGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LPDIBL1:
mod->BSIM3v32lpdibl1 = value->rValue;
mod->BSIM3v32lpdibl1Given = TRUE;
break;
break;
case BSIM3v32_MOD_LPDIBL2:
mod->BSIM3v32lpdibl2 = value->rValue;
mod->BSIM3v32lpdibl2Given = TRUE;
break;
break;
case BSIM3v32_MOD_LPDIBLB:
mod->BSIM3v32lpdiblb = value->rValue;
mod->BSIM3v32lpdiblbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LPSCBE1:
mod->BSIM3v32lpscbe1 = value->rValue;
mod->BSIM3v32lpscbe1Given = TRUE;
break;
break;
case BSIM3v32_MOD_LPSCBE2:
mod->BSIM3v32lpscbe2 = value->rValue;
mod->BSIM3v32lpscbe2Given = TRUE;
break;
break;
case BSIM3v32_MOD_LPVAG:
mod->BSIM3v32lpvag = value->rValue;
mod->BSIM3v32lpvagGiven = TRUE;
break;
break;
case BSIM3v32_MOD_LWR :
mod->BSIM3v32lwr = value->rValue;
mod->BSIM3v32lwrGiven = TRUE;
@ -809,13 +809,13 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32lvoffcvGiven = TRUE;
break;
/* Width dependence */
/* Width dependence */
case BSIM3v32_MOD_WCDSC :
mod->BSIM3v32wcdsc = value->rValue;
mod->BSIM3v32wcdscGiven = TRUE;
break;
case BSIM3v32_MOD_WCDSCB :
mod->BSIM3v32wcdscb = value->rValue;
mod->BSIM3v32wcdscbGiven = TRUE;
@ -865,7 +865,7 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_WKETA:
mod->BSIM3v32wketa = value->rValue;
mod->BSIM3v32wketaGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WNSUB:
mod->BSIM3v32wnsub = value->rValue;
mod->BSIM3v32wnsubGiven = TRUE;
@ -873,14 +873,14 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_WNPEAK:
mod->BSIM3v32wnpeak = value->rValue;
mod->BSIM3v32wnpeakGiven = TRUE;
if (mod->BSIM3v32wnpeak > 1.0e20)
mod->BSIM3v32wnpeak *= 1.0e-6;
if (mod->BSIM3v32wnpeak > 1.0e20)
mod->BSIM3v32wnpeak *= 1.0e-6;
break;
case BSIM3v32_MOD_WNGATE:
mod->BSIM3v32wngate = value->rValue;
mod->BSIM3v32wngateGiven = TRUE;
if (mod->BSIM3v32wngate > 1.0e23)
mod->BSIM3v32wngate *= 1.0e-6;
if (mod->BSIM3v32wngate > 1.0e23)
mod->BSIM3v32wngate *= 1.0e-6;
break;
case BSIM3v32_MOD_WGAMMA1:
mod->BSIM3v32wgamma1 = value->rValue;
@ -938,35 +938,35 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32ww0 = value->rValue;
mod->BSIM3v32ww0Given = TRUE;
break;
case BSIM3v32_MOD_WDVT0:
case BSIM3v32_MOD_WDVT0:
mod->BSIM3v32wdvt0 = value->rValue;
mod->BSIM3v32wdvt0Given = TRUE;
break;
case BSIM3v32_MOD_WDVT1:
case BSIM3v32_MOD_WDVT1:
mod->BSIM3v32wdvt1 = value->rValue;
mod->BSIM3v32wdvt1Given = TRUE;
break;
case BSIM3v32_MOD_WDVT2:
case BSIM3v32_MOD_WDVT2:
mod->BSIM3v32wdvt2 = value->rValue;
mod->BSIM3v32wdvt2Given = TRUE;
break;
case BSIM3v32_MOD_WDVT0W:
case BSIM3v32_MOD_WDVT0W:
mod->BSIM3v32wdvt0w = value->rValue;
mod->BSIM3v32wdvt0wGiven = TRUE;
break;
case BSIM3v32_MOD_WDVT1W:
case BSIM3v32_MOD_WDVT1W:
mod->BSIM3v32wdvt1w = value->rValue;
mod->BSIM3v32wdvt1wGiven = TRUE;
break;
case BSIM3v32_MOD_WDVT2W:
case BSIM3v32_MOD_WDVT2W:
mod->BSIM3v32wdvt2w = value->rValue;
mod->BSIM3v32wdvt2wGiven = TRUE;
break;
case BSIM3v32_MOD_WDROUT:
case BSIM3v32_MOD_WDROUT:
mod->BSIM3v32wdrout = value->rValue;
mod->BSIM3v32wdroutGiven = TRUE;
break;
case BSIM3v32_MOD_WDSUB:
case BSIM3v32_MOD_WDSUB:
mod->BSIM3v32wdsub = value->rValue;
mod->BSIM3v32wdsubGiven = TRUE;
break;
@ -1017,55 +1017,55 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_WRDSW:
mod->BSIM3v32wrdsw = value->rValue;
mod->BSIM3v32wrdswGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WPRWB:
mod->BSIM3v32wprwb = value->rValue;
mod->BSIM3v32wprwbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WPRWG:
mod->BSIM3v32wprwg = value->rValue;
mod->BSIM3v32wprwgGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WPRT:
mod->BSIM3v32wprt = value->rValue;
mod->BSIM3v32wprtGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WETA0:
mod->BSIM3v32weta0 = value->rValue;
mod->BSIM3v32weta0Given = TRUE;
break;
break;
case BSIM3v32_MOD_WETAB:
mod->BSIM3v32wetab = value->rValue;
mod->BSIM3v32wetabGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WPCLM:
mod->BSIM3v32wpclm = value->rValue;
mod->BSIM3v32wpclmGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WPDIBL1:
mod->BSIM3v32wpdibl1 = value->rValue;
mod->BSIM3v32wpdibl1Given = TRUE;
break;
break;
case BSIM3v32_MOD_WPDIBL2:
mod->BSIM3v32wpdibl2 = value->rValue;
mod->BSIM3v32wpdibl2Given = TRUE;
break;
break;
case BSIM3v32_MOD_WPDIBLB:
mod->BSIM3v32wpdiblb = value->rValue;
mod->BSIM3v32wpdiblbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WPSCBE1:
mod->BSIM3v32wpscbe1 = value->rValue;
mod->BSIM3v32wpscbe1Given = TRUE;
break;
break;
case BSIM3v32_MOD_WPSCBE2:
mod->BSIM3v32wpscbe2 = value->rValue;
mod->BSIM3v32wpscbe2Given = TRUE;
break;
break;
case BSIM3v32_MOD_WPVAG:
mod->BSIM3v32wpvag = value->rValue;
mod->BSIM3v32wpvagGiven = TRUE;
break;
break;
case BSIM3v32_MOD_WWR :
mod->BSIM3v32wwr = value->rValue;
mod->BSIM3v32wwrGiven = TRUE;
@ -1152,7 +1152,7 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32wvoffcvGiven = TRUE;
break;
/* Cross-term dependence */
/* Cross-term dependence */
case BSIM3v32_MOD_PCDSC :
mod->BSIM3v32pcdsc = value->rValue;
mod->BSIM3v32pcdscGiven = TRUE;
@ -1208,7 +1208,7 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_PKETA:
mod->BSIM3v32pketa = value->rValue;
mod->BSIM3v32pketaGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PNSUB:
mod->BSIM3v32pnsub = value->rValue;
mod->BSIM3v32pnsubGiven = TRUE;
@ -1216,14 +1216,14 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_PNPEAK:
mod->BSIM3v32pnpeak = value->rValue;
mod->BSIM3v32pnpeakGiven = TRUE;
if (mod->BSIM3v32pnpeak > 1.0e20)
mod->BSIM3v32pnpeak *= 1.0e-6;
if (mod->BSIM3v32pnpeak > 1.0e20)
mod->BSIM3v32pnpeak *= 1.0e-6;
break;
case BSIM3v32_MOD_PNGATE:
mod->BSIM3v32pngate = value->rValue;
mod->BSIM3v32pngateGiven = TRUE;
if (mod->BSIM3v32pngate > 1.0e23)
mod->BSIM3v32pngate *= 1.0e-6;
if (mod->BSIM3v32pngate > 1.0e23)
mod->BSIM3v32pngate *= 1.0e-6;
break;
case BSIM3v32_MOD_PGAMMA1:
mod->BSIM3v32pgamma1 = value->rValue;
@ -1281,35 +1281,35 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
mod->BSIM3v32pw0 = value->rValue;
mod->BSIM3v32pw0Given = TRUE;
break;
case BSIM3v32_MOD_PDVT0:
case BSIM3v32_MOD_PDVT0:
mod->BSIM3v32pdvt0 = value->rValue;
mod->BSIM3v32pdvt0Given = TRUE;
break;
case BSIM3v32_MOD_PDVT1:
case BSIM3v32_MOD_PDVT1:
mod->BSIM3v32pdvt1 = value->rValue;
mod->BSIM3v32pdvt1Given = TRUE;
break;
case BSIM3v32_MOD_PDVT2:
case BSIM3v32_MOD_PDVT2:
mod->BSIM3v32pdvt2 = value->rValue;
mod->BSIM3v32pdvt2Given = TRUE;
break;
case BSIM3v32_MOD_PDVT0W:
case BSIM3v32_MOD_PDVT0W:
mod->BSIM3v32pdvt0w = value->rValue;
mod->BSIM3v32pdvt0wGiven = TRUE;
break;
case BSIM3v32_MOD_PDVT1W:
case BSIM3v32_MOD_PDVT1W:
mod->BSIM3v32pdvt1w = value->rValue;
mod->BSIM3v32pdvt1wGiven = TRUE;
break;
case BSIM3v32_MOD_PDVT2W:
case BSIM3v32_MOD_PDVT2W:
mod->BSIM3v32pdvt2w = value->rValue;
mod->BSIM3v32pdvt2wGiven = TRUE;
break;
case BSIM3v32_MOD_PDROUT:
case BSIM3v32_MOD_PDROUT:
mod->BSIM3v32pdrout = value->rValue;
mod->BSIM3v32pdroutGiven = TRUE;
break;
case BSIM3v32_MOD_PDSUB:
case BSIM3v32_MOD_PDSUB:
mod->BSIM3v32pdsub = value->rValue;
mod->BSIM3v32pdsubGiven = TRUE;
break;
@ -1360,55 +1360,55 @@ BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod)
case BSIM3v32_MOD_PRDSW:
mod->BSIM3v32prdsw = value->rValue;
mod->BSIM3v32prdswGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PPRWB:
mod->BSIM3v32pprwb = value->rValue;
mod->BSIM3v32pprwbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PPRWG:
mod->BSIM3v32pprwg = value->rValue;
mod->BSIM3v32pprwgGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PPRT:
mod->BSIM3v32pprt = value->rValue;
mod->BSIM3v32pprtGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PETA0:
mod->BSIM3v32peta0 = value->rValue;
mod->BSIM3v32peta0Given = TRUE;
break;
break;
case BSIM3v32_MOD_PETAB:
mod->BSIM3v32petab = value->rValue;
mod->BSIM3v32petabGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PPCLM:
mod->BSIM3v32ppclm = value->rValue;
mod->BSIM3v32ppclmGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PPDIBL1:
mod->BSIM3v32ppdibl1 = value->rValue;
mod->BSIM3v32ppdibl1Given = TRUE;
break;
break;
case BSIM3v32_MOD_PPDIBL2:
mod->BSIM3v32ppdibl2 = value->rValue;
mod->BSIM3v32ppdibl2Given = TRUE;
break;
break;
case BSIM3v32_MOD_PPDIBLB:
mod->BSIM3v32ppdiblb = value->rValue;
mod->BSIM3v32ppdiblbGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PPSCBE1:
mod->BSIM3v32ppscbe1 = value->rValue;
mod->BSIM3v32ppscbe1Given = TRUE;
break;
break;
case BSIM3v32_MOD_PPSCBE2:
mod->BSIM3v32ppscbe2 = value->rValue;
mod->BSIM3v32ppscbe2Given = TRUE;
break;
break;
case BSIM3v32_MOD_PPVAG:
mod->BSIM3v32ppvag = value->rValue;
mod->BSIM3v32ppvagGiven = TRUE;
break;
break;
case BSIM3v32_MOD_PWR :
mod->BSIM3v32pwr = value->rValue;
mod->BSIM3v32pwrGiven = TRUE;

View File

@ -45,7 +45,7 @@
*/
/*
/*
* The StrongInversionNoiseEval function has been modified in
* the release 3.2.4 of BSIM3v32 model. To accomodate both the old
* and the new code, I have renamed according to the following:
@ -63,7 +63,7 @@
static double
StrongInversionNoiseEvalNew(double Vds, BSIM3v32model *model,
BSIM3v32instance *here, double freq, double temp)
BSIM3v32instance *here, double freq, double temp)
{
struct bsim3v32SizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl;
@ -72,10 +72,10 @@ double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->BSIM3v32cd);
esat = 2.0 * pParam->BSIM3v32vsattemp / here->BSIM3v32ueff;
if(model->BSIM3v32em<=0.0) DelClm = 0.0;
else {
T0 = ((((Vds - here->BSIM3v32Vdseff) / pParam->BSIM3v32litl)
+ model->BSIM3v32em) / esat);
if(model->BSIM3v32em<=0.0) DelClm = 0.0;
else {
T0 = ((((Vds - here->BSIM3v32Vdseff) / pParam->BSIM3v32litl)
+ model->BSIM3v32em) / esat);
DelClm = pParam->BSIM3v32litl * log (MAX(T0, N_MINLOG));
}
EffFreq = pow(freq, model->BSIM3v32ef);
@ -84,7 +84,7 @@ double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
* pParam->BSIM3v32leff * pParam->BSIM3v32leff;
N0 = model->BSIM3v32cox * here->BSIM3v32Vgsteff / CHARGE;
Nl = model->BSIM3v32cox * here->BSIM3v32Vgsteff
* (1.0 - here->BSIM3v32AbovVgst2Vtm * here->BSIM3v32Vdseff) / CHARGE;
* (1.0 - here->BSIM3v32AbovVgst2Vtm * here->BSIM3v32Vdseff) / CHARGE;
T3 = model->BSIM3v32oxideTrapDensityA
* log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG));
@ -109,7 +109,7 @@ double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
static double
StrongInversionNoiseEvalOld(double vgs, double vds, BSIM3v32model *model,
BSIM3v32instance *here, double freq, double temp)
BSIM3v32instance *here, double freq, double temp)
{
struct bsim3v32SizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
@ -124,7 +124,7 @@ StrongInversionNoiseEvalOld(double vgs, double vds, BSIM3v32model *model,
{
esat = 2.0 * pParam->BSIM3v32vsattemp / here->BSIM3v32ueff;
T0 = ((((vds - here->BSIM3v32vdsat) / pParam->BSIM3v32litl) +
model->BSIM3v32em) / esat);
model->BSIM3v32em) / esat);
DelClm = pParam->BSIM3v32litl * log (MAX (T0, N_MINLOG));
}
else
@ -132,13 +132,13 @@ StrongInversionNoiseEvalOld(double vgs, double vds, BSIM3v32model *model,
}
else
{
if (model->BSIM3v32em <= 0.0) /* flicker noise modified -JX */
if (model->BSIM3v32em <= 0.0) /* flicker noise modified -JX */
DelClm = 0.0;
else if (vds > here->BSIM3v32vdsat)
{
esat = 2.0 * pParam->BSIM3v32vsattemp / here->BSIM3v32ueff;
T0 = ((((vds - here->BSIM3v32vdsat) / pParam->BSIM3v32litl) +
model->BSIM3v32em) / esat);
model->BSIM3v32em) / esat);
DelClm = pParam->BSIM3v32litl * log (MAX (T0, N_MINLOG));
}
else
@ -176,7 +176,7 @@ StrongInversionNoiseEvalOld(double vgs, double vds, BSIM3v32model *model,
int
BSIM3v32noise (int mode, int operation, GENmodel *inModel, CKTcircuit *ckt,
Ndata *data, double *OnDens)
Ndata *data, double *OnDens)
{
NOISEAN *job = (NOISEAN *) ckt->CKTcurJob;
@ -200,292 +200,292 @@ int i;
/* define the names of the noise sources */
static char *BSIM3v32nNames[BSIM3v32NSRCS] =
{ /* Note that we have to keep the order */
".rd", /* noise due to rd */
/* consistent with the index definitions */
".rs", /* noise due to rs */
/* in BSIM3v32defs.h */
".id", /* noise due to id */
".1overf", /* flicker (1/f) noise */
"" /* total transistor noise */
".rd", /* noise due to rd */
/* consistent with the index definitions */
".rs", /* noise due to rs */
/* in BSIM3v32defs.h */
".id", /* noise due to id */
".1overf", /* flicker (1/f) noise */
"" /* total transistor noise */
};
for (; model != NULL; model = model->BSIM3v32nextModel)
{ for (here = model->BSIM3v32instances; here != NULL;
here = here->BSIM3v32nextInstance)
{ pParam = here->pParam;
switch (operation)
{ case N_OPEN:
/* see if we have to to produce a summary report */
/* if so, name all the noise generators */
here = here->BSIM3v32nextInstance)
{ pParam = here->pParam;
switch (operation)
{ case N_OPEN:
/* see if we have to to produce a summary report */
/* if so, name all the noise generators */
if (job->NStpsSm != 0)
{ switch (mode)
{ case N_DENS:
for (i = 0; i < BSIM3v32NSRCS; i++)
{ (void) sprintf(name, "onoise.%s%s",
here->BSIM3v32name,
BSIM3v32nNames[i]);
if (job->NStpsSm != 0)
{ switch (mode)
{ case N_DENS:
for (i = 0; i < BSIM3v32NSRCS; i++)
{ (void) sprintf(name, "onoise.%s%s",
here->BSIM3v32name,
BSIM3v32nNames[i]);
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
if (!data->namelist)
return(E_NOMEM);
SPfrontEnd->IFnewUid (ckt,
&(data->namelist[data->numPlots++]),
NULL, name, UID_OTHER,
NULL);
/* we've added one more plot */
}
break;
case INT_NOIZ:
for (i = 0; i < BSIM3v32NSRCS; i++)
{ (void) sprintf(name, "onoise_total.%s%s",
here->BSIM3v32name,
BSIM3v32nNames[i]);
return(E_NOMEM);
SPfrontEnd->IFnewUid (ckt,
&(data->namelist[data->numPlots++]),
NULL, name, UID_OTHER,
NULL);
/* we've added one more plot */
}
break;
case INT_NOIZ:
for (i = 0; i < BSIM3v32NSRCS; i++)
{ (void) sprintf(name, "onoise_total.%s%s",
here->BSIM3v32name,
BSIM3v32nNames[i]);
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
if (!data->namelist)
return(E_NOMEM);
SPfrontEnd->IFnewUid (ckt,
&(data->namelist[data->numPlots++]),
NULL, name, UID_OTHER,
NULL);
/* we've added one more plot */
return(E_NOMEM);
SPfrontEnd->IFnewUid (ckt,
&(data->namelist[data->numPlots++]),
NULL, name, UID_OTHER,
NULL);
/* we've added one more plot */
(void) sprintf(name, "inoise_total.%s%s",
here->BSIM3v32name,
BSIM3v32nNames[i]);
(void) sprintf(name, "inoise_total.%s%s",
here->BSIM3v32name,
BSIM3v32nNames[i]);
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
if (!data->namelist)
return(E_NOMEM);
SPfrontEnd->IFnewUid (ckt,
&(data->namelist[data->numPlots++]),
NULL, name, UID_OTHER,
NULL);
/* we've added one more plot */
}
break;
}
}
break;
case N_CALC:
m = here->BSIM3v32m;
switch (mode)
{ case N_DENS:
NevalSrc(&noizDens[BSIM3v32RDNOIZ],
&lnNdens[BSIM3v32RDNOIZ], ckt, THERMNOISE,
here->BSIM3v32dNodePrime, here->BSIM3v32dNode,
here->BSIM3v32drainConductance * m);
return(E_NOMEM);
SPfrontEnd->IFnewUid (ckt,
&(data->namelist[data->numPlots++]),
NULL, name, UID_OTHER,
NULL);
/* we've added one more plot */
}
break;
}
}
break;
case N_CALC:
m = here->BSIM3v32m;
switch (mode)
{ case N_DENS:
NevalSrc(&noizDens[BSIM3v32RDNOIZ],
&lnNdens[BSIM3v32RDNOIZ], ckt, THERMNOISE,
here->BSIM3v32dNodePrime, here->BSIM3v32dNode,
here->BSIM3v32drainConductance * m);
NevalSrc(&noizDens[BSIM3v32RSNOIZ],
&lnNdens[BSIM3v32RSNOIZ], ckt, THERMNOISE,
here->BSIM3v32sNodePrime, here->BSIM3v32sNode,
here->BSIM3v32sourceConductance * m);
NevalSrc(&noizDens[BSIM3v32RSNOIZ],
&lnNdens[BSIM3v32RSNOIZ], ckt, THERMNOISE,
here->BSIM3v32sNodePrime, here->BSIM3v32sNode,
here->BSIM3v32sourceConductance * m);
switch( model->BSIM3v32noiMod )
{ case 1:
case 3:
NevalSrc(&noizDens[BSIM3v32IDNOIZ],
&lnNdens[BSIM3v32IDNOIZ], ckt,
THERMNOISE, here->BSIM3v32dNodePrime,
here->BSIM3v32sNodePrime,
{ case 1:
case 3:
NevalSrc(&noizDens[BSIM3v32IDNOIZ],
&lnNdens[BSIM3v32IDNOIZ], ckt,
THERMNOISE, here->BSIM3v32dNodePrime,
here->BSIM3v32sNodePrime,
(2.0 / 3.0 * fabs(here->BSIM3v32gm
+ here->BSIM3v32gds
+ here->BSIM3v32gmbs)) * m);
break;
case 2:
case 4:
/* Added revision dependent code */
if (model->BSIM3v32intVersion == BSIM3v32V324)
{
NevalSrc(&noizDens[BSIM3v32IDNOIZ],
&lnNdens[BSIM3v32IDNOIZ], ckt,
THERMNOISE, here->BSIM3v32dNodePrime,
+ here->BSIM3v32gds
+ here->BSIM3v32gmbs)) * m);
break;
case 2:
case 4:
/* Added revision dependent code */
if (model->BSIM3v32intVersion == BSIM3v32V324)
{
NevalSrc(&noizDens[BSIM3v32IDNOIZ],
&lnNdens[BSIM3v32IDNOIZ], ckt,
THERMNOISE, here->BSIM3v32dNodePrime,
here->BSIM3v32sNodePrime,
(m * here->BSIM3v32ueff
* fabs(here->BSIM3v32qinv)
/ (pParam->BSIM3v32leff * pParam->BSIM3v32leff
+ here->BSIM3v32ueff * fabs(here->BSIM3v32qinv)
* here->BSIM3v32rds))); /* bugfix */
}
else
{ /* for all versions lower then 3.2.4 */
NevalSrc(&noizDens[BSIM3v32IDNOIZ],
&lnNdens[BSIM3v32IDNOIZ], ckt,
THERMNOISE, here->BSIM3v32dNodePrime,
(m * here->BSIM3v32ueff
* fabs(here->BSIM3v32qinv)
/ (pParam->BSIM3v32leff * pParam->BSIM3v32leff
+ here->BSIM3v32ueff * fabs(here->BSIM3v32qinv)
* here->BSIM3v32rds))); /* bugfix */
}
else
{ /* for all versions lower then 3.2.4 */
NevalSrc(&noizDens[BSIM3v32IDNOIZ],
&lnNdens[BSIM3v32IDNOIZ], ckt,
THERMNOISE, here->BSIM3v32dNodePrime,
here->BSIM3v32sNodePrime,
(m * here->BSIM3v32ueff
* fabs(here->BSIM3v32qinv
/ (pParam->BSIM3v32leff
* pParam->BSIM3v32leff))));
}
break;
}
NevalSrc(&noizDens[BSIM3v32FLNOIZ], NULL,
ckt, N_GAIN, here->BSIM3v32dNodePrime,
here->BSIM3v32sNodePrime, (double) 0.0);
(m * here->BSIM3v32ueff
* fabs(here->BSIM3v32qinv
/ (pParam->BSIM3v32leff
* pParam->BSIM3v32leff))));
}
break;
}
NevalSrc(&noizDens[BSIM3v32FLNOIZ], NULL,
ckt, N_GAIN, here->BSIM3v32dNodePrime,
here->BSIM3v32sNodePrime, (double) 0.0);
switch( model->BSIM3v32noiMod )
{ case 1:
case 4:
noizDens[BSIM3v32FLNOIZ] *= m * model->BSIM3v32kf
* exp(model->BSIM3v32af
* log(MAX(fabs(here->BSIM3v32cd),
N_MINLOG)))
/ (pow(data->freq, model->BSIM3v32ef)
* pParam->BSIM3v32leff
* pParam->BSIM3v32leff
* model->BSIM3v32cox);
break;
case 2:
case 3:
vgs = *(ckt->CKTstates[0] + here->BSIM3v32vgs);
vds = *(ckt->CKTstates[0] + here->BSIM3v32vds);
if (vds < 0.0)
{ vds = -vds;
vgs = vgs + vds;
}
/* Added revision dependent code */
if (model->BSIM3v32intVersion == BSIM3v32V324)
{
Ssi = StrongInversionNoiseEvalNew(vds, model,
here, data->freq, ckt->CKTtemp);
T10 = model->BSIM3v32oxideTrapDensityA
* 8.62e-5 * ckt->CKTtemp;
T11 = pParam->BSIM3v32weff
* pParam->BSIM3v32leff
* pow(data->freq, model->BSIM3v32ef)
* 4.0e36;
Swi = T10 / T11 * here->BSIM3v32cd
* here->BSIM3v32cd;
T1 = Swi + Ssi;
if (T1 > 0.0)
noizDens[BSIM3v32FLNOIZ] *= m * (Ssi * Swi) / T1;
else
{ case 1:
case 4:
noizDens[BSIM3v32FLNOIZ] *= m * model->BSIM3v32kf
* exp(model->BSIM3v32af
* log(MAX(fabs(here->BSIM3v32cd),
N_MINLOG)))
/ (pow(data->freq, model->BSIM3v32ef)
* pParam->BSIM3v32leff
* pParam->BSIM3v32leff
* model->BSIM3v32cox);
break;
case 2:
case 3:
vgs = *(ckt->CKTstates[0] + here->BSIM3v32vgs);
vds = *(ckt->CKTstates[0] + here->BSIM3v32vds);
if (vds < 0.0)
{ vds = -vds;
vgs = vgs + vds;
}
/* Added revision dependent code */
if (model->BSIM3v32intVersion == BSIM3v32V324)
{
Ssi = StrongInversionNoiseEvalNew(vds, model,
here, data->freq, ckt->CKTtemp);
T10 = model->BSIM3v32oxideTrapDensityA
* 8.62e-5 * ckt->CKTtemp;
T11 = pParam->BSIM3v32weff
* pParam->BSIM3v32leff
* pow(data->freq, model->BSIM3v32ef)
* 4.0e36;
Swi = T10 / T11 * here->BSIM3v32cd
* here->BSIM3v32cd;
T1 = Swi + Ssi;
if (T1 > 0.0)
noizDens[BSIM3v32FLNOIZ] *= m * (Ssi * Swi) / T1;
else
noizDens[BSIM3v32FLNOIZ] *= 0.0;
}
else
{ /* for all versions lower then 3.2.4 */
if (vgs >= here->BSIM3v32von + 0.1)
{
Ssi = StrongInversionNoiseEvalOld(vgs, vds, model,
here, data->freq, ckt->CKTtemp);
noizDens[BSIM3v32FLNOIZ] *= m * Ssi;
}
else
{
pParam = here->pParam;
T10 = model->BSIM3v32oxideTrapDensityA
* 8.62e-5 * ckt->CKTtemp;
T11 = pParam->BSIM3v32weff
* pParam-> BSIM3v32leff
* pow (data->freq, model->BSIM3v32ef)
* 4.0e36;
Swi = T10 / T11 * here->BSIM3v32cd * here->BSIM3v32cd;
}
else
{ /* for all versions lower then 3.2.4 */
if (vgs >= here->BSIM3v32von + 0.1)
{
Ssi = StrongInversionNoiseEvalOld(vgs, vds, model,
here, data->freq, ckt->CKTtemp);
noizDens[BSIM3v32FLNOIZ] *= m * Ssi;
}
else
{
pParam = here->pParam;
T10 = model->BSIM3v32oxideTrapDensityA
* 8.62e-5 * ckt->CKTtemp;
T11 = pParam->BSIM3v32weff
* pParam-> BSIM3v32leff
* pow (data->freq, model->BSIM3v32ef)
* 4.0e36;
Swi = T10 / T11 * here->BSIM3v32cd * here->BSIM3v32cd;
Slimit = StrongInversionNoiseEvalOld(
here->BSIM3v32von + 0.1, vds, model,
here, data->freq, ckt->CKTtemp);
T1 = Swi + Slimit;
if (T1 > 0.0)
noizDens[BSIM3v32FLNOIZ] *= m * (Slimit * Swi) / T1;
else
noizDens[BSIM3v32FLNOIZ] *= 0.0;
}
}
break;
}
lnNdens[BSIM3v32FLNOIZ] =
log(MAX(noizDens[BSIM3v32FLNOIZ], N_MINLOG));
noizDens[BSIM3v32TOTNOIZ] = noizDens[BSIM3v32RDNOIZ]
+ noizDens[BSIM3v32RSNOIZ]
+ noizDens[BSIM3v32IDNOIZ]
+ noizDens[BSIM3v32FLNOIZ];
lnNdens[BSIM3v32TOTNOIZ] =
log(MAX(noizDens[BSIM3v32TOTNOIZ], N_MINLOG));
Slimit = StrongInversionNoiseEvalOld(
here->BSIM3v32von + 0.1, vds, model,
here, data->freq, ckt->CKTtemp);
T1 = Swi + Slimit;
if (T1 > 0.0)
noizDens[BSIM3v32FLNOIZ] *= m * (Slimit * Swi) / T1;
else
noizDens[BSIM3v32FLNOIZ] *= 0.0;
}
}
break;
}
*OnDens += noizDens[BSIM3v32TOTNOIZ];
lnNdens[BSIM3v32FLNOIZ] =
log(MAX(noizDens[BSIM3v32FLNOIZ], N_MINLOG));
if (data->delFreq == 0.0)
{ /* if we haven't done any previous
integration, we need to initialize our
"history" variables.
*/
noizDens[BSIM3v32TOTNOIZ] = noizDens[BSIM3v32RDNOIZ]
+ noizDens[BSIM3v32RSNOIZ]
+ noizDens[BSIM3v32IDNOIZ]
+ noizDens[BSIM3v32FLNOIZ];
lnNdens[BSIM3v32TOTNOIZ] =
log(MAX(noizDens[BSIM3v32TOTNOIZ], N_MINLOG));
for (i = 0; i < BSIM3v32NSRCS; i++)
{ here->BSIM3v32nVar[LNLSTDENS][i] =
lnNdens[i];
}
*OnDens += noizDens[BSIM3v32TOTNOIZ];
/* clear out our integration variables
if it's the first pass
*/
if (data->freq ==
job->NstartFreq)
{ for (i = 0; i < BSIM3v32NSRCS; i++)
{ here->BSIM3v32nVar[OUTNOIZ][i] = 0.0;
here->BSIM3v32nVar[INNOIZ][i] = 0.0;
}
}
}
else
{ /* data->delFreq != 0.0,
we have to integrate.
*/
for (i = 0; i < BSIM3v32NSRCS; i++)
{ if (i != BSIM3v32TOTNOIZ)
{ tempOnoise = Nintegrate(noizDens[i],
lnNdens[i],
here->BSIM3v32nVar[LNLSTDENS][i],
data);
tempInoise = Nintegrate(noizDens[i]
* data->GainSqInv, lnNdens[i]
+ data->lnGainInv,
here->BSIM3v32nVar[LNLSTDENS][i]
+ data->lnGainInv, data);
here->BSIM3v32nVar[LNLSTDENS][i] =
lnNdens[i];
data->outNoiz += tempOnoise;
data->inNoise += tempInoise;
if (job->NStpsSm != 0)
{ here->BSIM3v32nVar[OUTNOIZ][i]
+= tempOnoise;
here->BSIM3v32nVar[OUTNOIZ][BSIM3v32TOTNOIZ]
+= tempOnoise;
here->BSIM3v32nVar[INNOIZ][i]
+= tempInoise;
here->BSIM3v32nVar[INNOIZ][BSIM3v32TOTNOIZ]
+= tempInoise;
if (data->delFreq == 0.0)
{ /* if we haven't done any previous
integration, we need to initialize our
"history" variables.
*/
for (i = 0; i < BSIM3v32NSRCS; i++)
{ here->BSIM3v32nVar[LNLSTDENS][i] =
lnNdens[i];
}
/* clear out our integration variables
if it's the first pass
*/
if (data->freq ==
job->NstartFreq)
{ for (i = 0; i < BSIM3v32NSRCS; i++)
{ here->BSIM3v32nVar[OUTNOIZ][i] = 0.0;
here->BSIM3v32nVar[INNOIZ][i] = 0.0;
}
}
}
else
{ /* data->delFreq != 0.0,
we have to integrate.
*/
for (i = 0; i < BSIM3v32NSRCS; i++)
{ if (i != BSIM3v32TOTNOIZ)
{ tempOnoise = Nintegrate(noizDens[i],
lnNdens[i],
here->BSIM3v32nVar[LNLSTDENS][i],
data);
tempInoise = Nintegrate(noizDens[i]
* data->GainSqInv, lnNdens[i]
+ data->lnGainInv,
here->BSIM3v32nVar[LNLSTDENS][i]
+ data->lnGainInv, data);
here->BSIM3v32nVar[LNLSTDENS][i] =
lnNdens[i];
data->outNoiz += tempOnoise;
data->inNoise += tempInoise;
if (job->NStpsSm != 0)
{ here->BSIM3v32nVar[OUTNOIZ][i]
+= tempOnoise;
here->BSIM3v32nVar[OUTNOIZ][BSIM3v32TOTNOIZ]
+= tempOnoise;
here->BSIM3v32nVar[INNOIZ][i]
+= tempInoise;
here->BSIM3v32nVar[INNOIZ][BSIM3v32TOTNOIZ]
+= tempInoise;
}
}
}
}
if (data->prtSummary)
{ for (i = 0; i < BSIM3v32NSRCS; i++)
{ /* print a summary report */
data->outpVector[data->outNumber++]
= noizDens[i];
}
}
break;
case INT_NOIZ:
/* already calculated, just output */
if (job->NStpsSm != 0)
{ for (i = 0; i < BSIM3v32NSRCS; i++)
{ data->outpVector[data->outNumber++]
= here->BSIM3v32nVar[OUTNOIZ][i];
data->outpVector[data->outNumber++]
= here->BSIM3v32nVar[INNOIZ][i];
}
}
break;
}
break;
case N_CLOSE:
/* do nothing, the main calling routine will close */
return (OK);
break; /* the plots */
} /* switch (operation) */
} /* for here */
}
}
}
if (data->prtSummary)
{ for (i = 0; i < BSIM3v32NSRCS; i++)
{ /* print a summary report */
data->outpVector[data->outNumber++]
= noizDens[i];
}
}
break;
case INT_NOIZ:
/* already calculated, just output */
if (job->NStpsSm != 0)
{ for (i = 0; i < BSIM3v32NSRCS; i++)
{ data->outpVector[data->outNumber++]
= here->BSIM3v32nVar[OUTNOIZ][i];
data->outpVector[data->outNumber++]
= here->BSIM3v32nVar[INNOIZ][i];
}
}
break;
}
break;
case N_CLOSE:
/* do nothing, the main calling routine will close */
return (OK);
break; /* the plots */
} /* switch (operation) */
} /* for here */
} /* for model */
return(OK);

View File

@ -28,7 +28,7 @@ BSIM3v32param (int param, IFvalue *value, GENinstance *inst, IFvalue *select)
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch(param)
switch(param)
{ case BSIM3v32_W:
here->BSIM3v32w = value->rValue*scale;
here->BSIM3v32wGiven = TRUE;

View File

@ -3,7 +3,7 @@
/**********
* Copyright 2001 Regents of the University of California. All rights reserved.
* File: b3pzld.c of BSIM3v3.2.4
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1997-1999 Weidong Liu.
* Author: 2001 Xuemei Xi
* Modified by Paolo Nenzi 2002
@ -36,11 +36,11 @@ double T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css;
double ScalingFactor = 1.0e-9;
double m;
for (; model != NULL; model = model->BSIM3v32nextModel)
for (; model != NULL; model = model->BSIM3v32nextModel)
{ for (here = model->BSIM3v32instances; here!= NULL;
here = here->BSIM3v32nextInstance)
{
if (here->BSIM3v32mode >= 0)
here = here->BSIM3v32nextInstance)
{
if (here->BSIM3v32mode >= 0)
{ Gm = here->BSIM3v32gm;
Gmbs = here->BSIM3v32gmbs;
FwdSum = Gm + Gmbs;
@ -73,19 +73,19 @@ double m;
cddb = here->BSIM3v32cddb;
xgtg = xgtd = xgts = xgtb = 0.0;
sxpart = 0.6;
sxpart = 0.6;
dxpart = 0.4;
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ cggb = cgdb = cgsb = 0.0;
cbgb = cbdb = cbsb = 0.0;
cdgb = cddb = cdsb = 0.0;
xgtg = here->BSIM3v32gtg;
xgtg = here->BSIM3v32gtg;
xgtd = here->BSIM3v32gtd;
xgts = here->BSIM3v32gts;
xgtb = here->BSIM3v32gtb;
@ -95,46 +95,46 @@ double m;
xcqsb = here->BSIM3v32cqsb;
xcqbb = here->BSIM3v32cqbb;
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
* here->pParam->BSIM3v32leffCV;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ dxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ dxpart = 0.0;
}
else
{ dxpart = 0.5;
}
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
}
else
{ dxpart = here->BSIM3v32qdrn / qcheq;
Cdd = here->BSIM3v32cddb;
Csd = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq;
Cdg = here->BSIM3v32cdgb;
Csg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ dxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ dxpart = 0.0;
}
else
{ dxpart = 0.5;
}
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
}
else
{ dxpart = here->BSIM3v32qdrn / qcheq;
Cdd = here->BSIM3v32cddb;
Csd = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq;
Cdg = here->BSIM3v32cdgb;
Csg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq;
Cds = here->BSIM3v32cdsb;
Css = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq;
Cds = here->BSIM3v32cdsb;
Css = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq;
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg
+ ddxpart_dVs);
}
sxpart = 1.0 - dxpart;
dsxpart_dVd = -ddxpart_dVd;
dsxpart_dVg = -ddxpart_dVg;
dsxpart_dVs = -ddxpart_dVs;
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs);
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg
+ ddxpart_dVs);
}
sxpart = 1.0 - dxpart;
dsxpart_dVd = -ddxpart_dVd;
dsxpart_dVg = -ddxpart_dVg;
dsxpart_dVs = -ddxpart_dVs;
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs);
}
}
else
@ -156,7 +156,7 @@ double m;
gbspb = here->BSIM3v32gbbs;
gbspdp = -(gbspg + gbspsp + gbspb);
if (here->BSIM3v32nqsMod == 0)
if (here->BSIM3v32nqsMod == 0)
{ cggb = here->BSIM3v32cggb;
cgsb = here->BSIM3v32cgdb;
cgdb = here->BSIM3v32cgsb;
@ -170,19 +170,19 @@ double m;
cddb = -(here->BSIM3v32cdsb + cgdb + cbdb);
xgtg = xgtd = xgts = xgtb = 0.0;
sxpart = 0.4;
sxpart = 0.4;
dxpart = 0.6;
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
ddxpart_dVd = ddxpart_dVg = ddxpart_dVb
= ddxpart_dVs = 0.0;
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ cggb = cgdb = cgsb = 0.0;
cbgb = cbdb = cbsb = 0.0;
cdgb = cddb = cdsb = 0.0;
xgtg = here->BSIM3v32gtg;
xgtg = here->BSIM3v32gtg;
xgtd = here->BSIM3v32gts;
xgts = here->BSIM3v32gtd;
xgtb = here->BSIM3v32gtb;
@ -192,51 +192,51 @@ double m;
xcqsb = here->BSIM3v32cqdb;
xcqbb = here->BSIM3v32cqbb;
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV
* here->pParam->BSIM3v32leffCV;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ sxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ sxpart = 0.0;
}
else
{ sxpart = 0.5;
}
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ sxpart = here->BSIM3v32qdrn / qcheq;
Css = here->BSIM3v32cddb;
Cds = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq;
Csg = here->BSIM3v32cdgb;
Cdg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq;
qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk);
if (fabs(qcheq) <= 1.0e-5 * CoxWL)
{ if (model->BSIM3v32xpart < 0.5)
{ sxpart = 0.4;
}
else if (model->BSIM3v32xpart > 0.5)
{ sxpart = 0.0;
}
else
{ sxpart = 0.5;
}
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb
= dsxpart_dVs = 0.0;
}
else
{ sxpart = here->BSIM3v32qdrn / qcheq;
Css = here->BSIM3v32cddb;
Cds = -(here->BSIM3v32cgdb + here->BSIM3v32cddb
+ here->BSIM3v32cbdb);
dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq;
Csg = here->BSIM3v32cdgb;
Cdg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb
+ here->BSIM3v32cbgb);
dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq;
Csd = here->BSIM3v32cdsb;
Cdd = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq;
Csd = here->BSIM3v32cdsb;
Cdd = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb
+ here->BSIM3v32cbsb);
dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq;
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg
+ dsxpart_dVs);
}
dxpart = 1.0 - sxpart;
ddxpart_dVd = -dsxpart_dVd;
ddxpart_dVg = -dsxpart_dVg;
ddxpart_dVs = -dsxpart_dVs;
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs);
dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg
+ dsxpart_dVs);
}
dxpart = 1.0 - sxpart;
ddxpart_dVd = -dsxpart_dVd;
ddxpart_dVg = -dsxpart_dVg;
ddxpart_dVs = -dsxpart_dVs;
ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs);
}
}
T1 = *(ckt->CKTstate0 + here->BSIM3v32qdef) * here->BSIM3v32gtau;
T1 = *(ckt->CKTstate0 + here->BSIM3v32qdef) * here->BSIM3v32gtau;
gdpr = here->BSIM3v32drainConductance;
gspr = here->BSIM3v32sourceConductance;
gds = here->BSIM3v32gds;
@ -245,9 +245,9 @@ double m;
capbd = here->BSIM3v32capbd;
capbs = here->BSIM3v32capbs;
GSoverlapCap = here->BSIM3v32cgso;
GDoverlapCap = here->BSIM3v32cgdo;
GBoverlapCap = here->pParam->BSIM3v32cgbo;
GSoverlapCap = here->BSIM3v32cgso;
GDoverlapCap = here->BSIM3v32cgdo;
GBoverlapCap = here->pParam->BSIM3v32cgbo;
xcdgb = (cdgb - GDoverlapCap);
xcddb = (cddb + capbd + GDoverlapCap);
@ -256,7 +256,7 @@ double m;
xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap);
xcsdb = -(cgdb + cbdb + cddb);
xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb));
xcsbb = -(xcsgb + xcsdb + xcssb);
xcsbb = -(xcsgb + xcsdb + xcssb);
xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap);
xcgdb = (cgdb - GDoverlapCap);
xcgsb = (cgsb - GSoverlapCap);
@ -266,7 +266,7 @@ double m;
xcbsb = (cbsb - capbs);
xcbbb = -(xcbgb + xcbdb + xcbsb);
m = here->BSIM3v32m;
m = here->BSIM3v32m;
*(here->BSIM3v32GgPtr ) += m * (xcggb * s->real);
*(here->BSIM3v32GgPtr +1) += m * (xcggb * s->imag);
@ -318,23 +318,23 @@ double m;
*(here->BSIM3v32BdpPtr) -= m * (gbd - gbbdp);
*(here->BSIM3v32BspPtr) -= m * (gbs - gbbsp);
*(here->BSIM3v32DPgPtr) += Gm + dxpart * xgtg
+ T1 * ddxpart_dVg + gbdpg;
*(here->BSIM3v32DPgPtr) += Gm + dxpart * xgtg
+ T1 * ddxpart_dVg + gbdpg;
*(here->BSIM3v32DPdpPtr) += gdpr + gds + gbd + RevSum
+ dxpart * xgtd + T1 * ddxpart_dVd + gbdpdp;
*(here->BSIM3v32DPspPtr) -= gds + FwdSum - dxpart * xgts
- T1 * ddxpart_dVs - gbdpsp;
- T1 * ddxpart_dVs - gbdpsp;
*(here->BSIM3v32DPbPtr) -= gbd - Gmbs - dxpart * xgtb
- T1 * ddxpart_dVb - gbdpb;
- T1 * ddxpart_dVb - gbdpb;
*(here->BSIM3v32SPgPtr) -= Gm - sxpart * xgtg
- T1 * dsxpart_dVg - gbspg;
- T1 * dsxpart_dVg - gbspg;
*(here->BSIM3v32SPspPtr) += gspr + gds + gbs + FwdSum
+ sxpart * xgts + T1 * dsxpart_dVs + gbspsp;
*(here->BSIM3v32SPbPtr) -= gbs + Gmbs - sxpart * xgtb
- T1 * dsxpart_dVb - gbspb;
- T1 * dsxpart_dVb - gbspb;
*(here->BSIM3v32SPdpPtr) -= gds + RevSum - sxpart * xgtd
- T1 * dsxpart_dVd - gbspdp;
- T1 * dsxpart_dVd - gbspdp;
*(here->BSIM3v32GgPtr) -= xgtg;
*(here->BSIM3v32GbPtr) -= xgtb;

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
/**********
* Copyright 2001 Regents of the University of California. All rights reserved.
* File: b3trunc.c of BSIM3v3.2.4
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1995 Min-Chie Jeng and Mansun Chan.
* Author: 1997-1999 Weidong Liu.
* Author: 2001 Xuemei Xi
* Modified by Poalo Nenzi 2002
@ -28,8 +28,8 @@ BSIM3v32instance *here;
for (; model != NULL; model = model->BSIM3v32nextModel)
{ for (here = model->BSIM3v32instances; here != NULL;
here = here->BSIM3v32nextInstance)
{
here = here->BSIM3v32nextInstance)
{
#ifdef STEPDEBUG
debugtemp = *timeStep;
#endif /* STEPDEBUG */
@ -38,7 +38,7 @@ BSIM3v32instance *here;
CKTterr(here->BSIM3v32qd,ckt,timeStep);
#ifdef STEPDEBUG
if(debugtemp != *timeStep)
{ printf("device %s reduces step from %g to %g\n",
{ printf("device %s reduces step from %g to %g\n",
here->BSIM3v32name,debugtemp,*timeStep);
}
#endif /* STEPDEBUG */

View File

@ -14,7 +14,7 @@ File: bsim3v32def.h
#include "ngspice/gendefs.h"
#include "ngspice/cktdefs.h"
#include "ngspice/complex.h"
#include "ngspice/noisedef.h"
#include "ngspice/noisedef.h"
typedef struct sBSIM3v32instance
{
@ -32,7 +32,7 @@ typedef struct sBSIM3v32instance
/* MCJ */
double BSIM3v32ueff;
double BSIM3v32thetavth;
double BSIM3v32thetavth;
double BSIM3v32von;
double BSIM3v32vdsat;
double BSIM3v32cgdo;
@ -44,7 +44,7 @@ typedef struct sBSIM3v32instance
double BSIM3v32l;
double BSIM3v32w;
double BSIM3v32m;
double BSIM3v32m;
double BSIM3v32drainArea;
double BSIM3v32sourceArea;
double BSIM3v32drainSquares;
@ -120,7 +120,7 @@ typedef struct sBSIM3v32instance
unsigned BSIM3v32lGiven :1;
unsigned BSIM3v32wGiven :1;
unsigned BSIM3v32mGiven :1;
unsigned BSIM3v32mGiven :1;
unsigned BSIM3v32drainAreaGiven :1;
unsigned BSIM3v32sourceAreaGiven :1;
unsigned BSIM3v32drainSquaresGiven :1;
@ -217,29 +217,29 @@ struct bsim3v32SizeDependParam
double Width;
double Length;
double BSIM3v32cdsc;
double BSIM3v32cdscb;
double BSIM3v32cdscd;
double BSIM3v32cit;
double BSIM3v32nfactor;
double BSIM3v32cdsc;
double BSIM3v32cdscb;
double BSIM3v32cdscd;
double BSIM3v32cit;
double BSIM3v32nfactor;
double BSIM3v32xj;
double BSIM3v32vsat;
double BSIM3v32at;
double BSIM3v32a0;
double BSIM3v32ags;
double BSIM3v32a1;
double BSIM3v32a2;
double BSIM3v32keta;
double BSIM3v32vsat;
double BSIM3v32at;
double BSIM3v32a0;
double BSIM3v32ags;
double BSIM3v32a1;
double BSIM3v32a2;
double BSIM3v32keta;
double BSIM3v32nsub;
double BSIM3v32npeak;
double BSIM3v32ngate;
double BSIM3v32gamma1;
double BSIM3v32gamma2;
double BSIM3v32vbx;
double BSIM3v32vbi;
double BSIM3v32vbm;
double BSIM3v32vbsc;
double BSIM3v32xt;
double BSIM3v32npeak;
double BSIM3v32ngate;
double BSIM3v32gamma1;
double BSIM3v32gamma2;
double BSIM3v32vbx;
double BSIM3v32vbi;
double BSIM3v32vbm;
double BSIM3v32vbsc;
double BSIM3v32xt;
double BSIM3v32phi;
double BSIM3v32litl;
double BSIM3v32k1;
@ -251,14 +251,14 @@ struct bsim3v32SizeDependParam
double BSIM3v32k3b;
double BSIM3v32w0;
double BSIM3v32nlx;
double BSIM3v32dvt0;
double BSIM3v32dvt1;
double BSIM3v32dvt2;
double BSIM3v32dvt0w;
double BSIM3v32dvt1w;
double BSIM3v32dvt2w;
double BSIM3v32drout;
double BSIM3v32dsub;
double BSIM3v32dvt0;
double BSIM3v32dvt1;
double BSIM3v32dvt2;
double BSIM3v32dvt0w;
double BSIM3v32dvt1w;
double BSIM3v32dvt2w;
double BSIM3v32drout;
double BSIM3v32dsub;
double BSIM3v32vth0;
double BSIM3v32ua;
double BSIM3v32ua1;
@ -271,20 +271,20 @@ struct bsim3v32SizeDependParam
double BSIM3v32voff;
double BSIM3v32vfb;
double BSIM3v32delta;
double BSIM3v32rdsw;
double BSIM3v32rds0;
double BSIM3v32prwg;
double BSIM3v32prwb;
double BSIM3v32prt;
double BSIM3v32eta0;
double BSIM3v32etab;
double BSIM3v32pclm;
double BSIM3v32pdibl1;
double BSIM3v32pdibl2;
double BSIM3v32pdiblb;
double BSIM3v32pscbe1;
double BSIM3v32pscbe2;
double BSIM3v32pvag;
double BSIM3v32rdsw;
double BSIM3v32rds0;
double BSIM3v32prwg;
double BSIM3v32prwb;
double BSIM3v32prt;
double BSIM3v32eta0;
double BSIM3v32etab;
double BSIM3v32pclm;
double BSIM3v32pdibl1;
double BSIM3v32pdibl2;
double BSIM3v32pdiblb;
double BSIM3v32pscbe1;
double BSIM3v32pscbe2;
double BSIM3v32pvag;
double BSIM3v32wr;
double BSIM3v32dwg;
double BSIM3v32dwb;
@ -327,14 +327,14 @@ struct bsim3v32SizeDependParam
double BSIM3v32cgbo;
double BSIM3v32tconst;
double BSIM3v32u0temp;
double BSIM3v32vsattemp;
double BSIM3v32sqrtPhi;
double BSIM3v32phis3;
double BSIM3v32Xdep0;
double BSIM3v32sqrtXdep0;
double BSIM3v32u0temp;
double BSIM3v32vsattemp;
double BSIM3v32sqrtPhi;
double BSIM3v32phis3;
double BSIM3v32Xdep0;
double BSIM3v32sqrtXdep0;
double BSIM3v32theta0vb0;
double BSIM3v32thetaRout;
double BSIM3v32thetaRout;
double BSIM3v32cof1;
double BSIM3v32cof2;
@ -350,12 +350,12 @@ struct bsim3v32SizeDependParam
};
typedef struct sBSIM3v32model
typedef struct sBSIM3v32model
{
int BSIM3v32modType;
struct sBSIM3v32model *BSIM3v32nextModel;
BSIM3v32instance *BSIM3v32instances;
IFuid BSIM3v32modName;
IFuid BSIM3v32modName;
int BSIM3v32type;
int BSIM3v32mobMod;
@ -364,39 +364,39 @@ typedef struct sBSIM3v32model
int BSIM3v32noiMod;
int BSIM3v32binUnit;
int BSIM3v32paramChk;
char *BSIM3v32version;
char *BSIM3v32version;
/* The following field is an integer coding
* of BSIM3v32version.
*/
int BSIM3v32intVersion;
*/
int BSIM3v32intVersion;
#define BSIM3v32V324 324 /* BSIM3v32 V3.2.4 */
#define BSIM3v32V323 323 /* BSIM3v32 V3.2.3 */
#define BSIM3v32V322 322 /* BSIM3v32 V3.2.2 */
#define BSIM3v32V32 32 /* BSIM3v32 V3.2 */
#define BSIM3v32V3OLD 0 /* Old model */
double BSIM3v32tox;
double BSIM3v32tox;
double BSIM3v32toxm;
double BSIM3v32cdsc;
double BSIM3v32cdscb;
double BSIM3v32cdscd;
double BSIM3v32cit;
double BSIM3v32nfactor;
double BSIM3v32cdsc;
double BSIM3v32cdscb;
double BSIM3v32cdscd;
double BSIM3v32cit;
double BSIM3v32nfactor;
double BSIM3v32xj;
double BSIM3v32vsat;
double BSIM3v32at;
double BSIM3v32a0;
double BSIM3v32ags;
double BSIM3v32a1;
double BSIM3v32a2;
double BSIM3v32keta;
double BSIM3v32vsat;
double BSIM3v32at;
double BSIM3v32a0;
double BSIM3v32ags;
double BSIM3v32a1;
double BSIM3v32a2;
double BSIM3v32keta;
double BSIM3v32nsub;
double BSIM3v32npeak;
double BSIM3v32ngate;
double BSIM3v32gamma1;
double BSIM3v32gamma2;
double BSIM3v32vbx;
double BSIM3v32vbm;
double BSIM3v32xt;
double BSIM3v32npeak;
double BSIM3v32ngate;
double BSIM3v32gamma1;
double BSIM3v32gamma2;
double BSIM3v32vbx;
double BSIM3v32vbm;
double BSIM3v32xt;
double BSIM3v32k1;
double BSIM3v32kt1;
double BSIM3v32kt1l;
@ -406,14 +406,14 @@ typedef struct sBSIM3v32model
double BSIM3v32k3b;
double BSIM3v32w0;
double BSIM3v32nlx;
double BSIM3v32dvt0;
double BSIM3v32dvt1;
double BSIM3v32dvt2;
double BSIM3v32dvt0w;
double BSIM3v32dvt1w;
double BSIM3v32dvt2w;
double BSIM3v32drout;
double BSIM3v32dsub;
double BSIM3v32dvt0;
double BSIM3v32dvt1;
double BSIM3v32dvt2;
double BSIM3v32dvt0w;
double BSIM3v32dvt1w;
double BSIM3v32dvt2w;
double BSIM3v32drout;
double BSIM3v32dsub;
double BSIM3v32vth0;
double BSIM3v32ua;
double BSIM3v32ua1;
@ -425,19 +425,19 @@ typedef struct sBSIM3v32model
double BSIM3v32ute;
double BSIM3v32voff;
double BSIM3v32delta;
double BSIM3v32rdsw;
double BSIM3v32rdsw;
double BSIM3v32prwg;
double BSIM3v32prwb;
double BSIM3v32prt;
double BSIM3v32eta0;
double BSIM3v32etab;
double BSIM3v32pclm;
double BSIM3v32pdibl1;
double BSIM3v32pdibl2;
double BSIM3v32prt;
double BSIM3v32eta0;
double BSIM3v32etab;
double BSIM3v32pclm;
double BSIM3v32pdibl1;
double BSIM3v32pdibl2;
double BSIM3v32pdiblb;
double BSIM3v32pscbe1;
double BSIM3v32pscbe2;
double BSIM3v32pvag;
double BSIM3v32pscbe1;
double BSIM3v32pscbe2;
double BSIM3v32pvag;
double BSIM3v32wr;
double BSIM3v32dwg;
double BSIM3v32dwb;
@ -481,27 +481,27 @@ typedef struct sBSIM3v32model
double BSIM3v32rsc;
/* Length Dependence */
double BSIM3v32lcdsc;
double BSIM3v32lcdscb;
double BSIM3v32lcdscd;
double BSIM3v32lcit;
double BSIM3v32lnfactor;
double BSIM3v32lcdsc;
double BSIM3v32lcdscb;
double BSIM3v32lcdscd;
double BSIM3v32lcit;
double BSIM3v32lnfactor;
double BSIM3v32lxj;
double BSIM3v32lvsat;
double BSIM3v32lat;
double BSIM3v32la0;
double BSIM3v32lags;
double BSIM3v32la1;
double BSIM3v32la2;
double BSIM3v32lketa;
double BSIM3v32lvsat;
double BSIM3v32lat;
double BSIM3v32la0;
double BSIM3v32lags;
double BSIM3v32la1;
double BSIM3v32la2;
double BSIM3v32lketa;
double BSIM3v32lnsub;
double BSIM3v32lnpeak;
double BSIM3v32lngate;
double BSIM3v32lgamma1;
double BSIM3v32lgamma2;
double BSIM3v32lvbx;
double BSIM3v32lvbm;
double BSIM3v32lxt;
double BSIM3v32lnpeak;
double BSIM3v32lngate;
double BSIM3v32lgamma1;
double BSIM3v32lgamma2;
double BSIM3v32lvbx;
double BSIM3v32lvbm;
double BSIM3v32lxt;
double BSIM3v32lk1;
double BSIM3v32lkt1;
double BSIM3v32lkt1l;
@ -511,14 +511,14 @@ typedef struct sBSIM3v32model
double BSIM3v32lk3b;
double BSIM3v32lw0;
double BSIM3v32lnlx;
double BSIM3v32ldvt0;
double BSIM3v32ldvt1;
double BSIM3v32ldvt2;
double BSIM3v32ldvt0w;
double BSIM3v32ldvt1w;
double BSIM3v32ldvt2w;
double BSIM3v32ldrout;
double BSIM3v32ldsub;
double BSIM3v32ldvt0;
double BSIM3v32ldvt1;
double BSIM3v32ldvt2;
double BSIM3v32ldvt0w;
double BSIM3v32ldvt1w;
double BSIM3v32ldvt2w;
double BSIM3v32ldrout;
double BSIM3v32ldsub;
double BSIM3v32lvth0;
double BSIM3v32lua;
double BSIM3v32lua1;
@ -530,19 +530,19 @@ typedef struct sBSIM3v32model
double BSIM3v32lute;
double BSIM3v32lvoff;
double BSIM3v32ldelta;
double BSIM3v32lrdsw;
double BSIM3v32lrdsw;
double BSIM3v32lprwg;
double BSIM3v32lprwb;
double BSIM3v32lprt;
double BSIM3v32leta0;
double BSIM3v32letab;
double BSIM3v32lpclm;
double BSIM3v32lpdibl1;
double BSIM3v32lpdibl2;
double BSIM3v32lprt;
double BSIM3v32leta0;
double BSIM3v32letab;
double BSIM3v32lpclm;
double BSIM3v32lpdibl1;
double BSIM3v32lpdibl2;
double BSIM3v32lpdiblb;
double BSIM3v32lpscbe1;
double BSIM3v32lpscbe2;
double BSIM3v32lpvag;
double BSIM3v32lpscbe1;
double BSIM3v32lpscbe2;
double BSIM3v32lpvag;
double BSIM3v32lwr;
double BSIM3v32ldwg;
double BSIM3v32ldwb;
@ -568,27 +568,27 @@ typedef struct sBSIM3v32model
double BSIM3v32lmoin;
/* Width Dependence */
double BSIM3v32wcdsc;
double BSIM3v32wcdscb;
double BSIM3v32wcdscd;
double BSIM3v32wcit;
double BSIM3v32wnfactor;
double BSIM3v32wcdsc;
double BSIM3v32wcdscb;
double BSIM3v32wcdscd;
double BSIM3v32wcit;
double BSIM3v32wnfactor;
double BSIM3v32wxj;
double BSIM3v32wvsat;
double BSIM3v32wat;
double BSIM3v32wa0;
double BSIM3v32wags;
double BSIM3v32wa1;
double BSIM3v32wa2;
double BSIM3v32wketa;
double BSIM3v32wvsat;
double BSIM3v32wat;
double BSIM3v32wa0;
double BSIM3v32wags;
double BSIM3v32wa1;
double BSIM3v32wa2;
double BSIM3v32wketa;
double BSIM3v32wnsub;
double BSIM3v32wnpeak;
double BSIM3v32wngate;
double BSIM3v32wgamma1;
double BSIM3v32wgamma2;
double BSIM3v32wvbx;
double BSIM3v32wvbm;
double BSIM3v32wxt;
double BSIM3v32wnpeak;
double BSIM3v32wngate;
double BSIM3v32wgamma1;
double BSIM3v32wgamma2;
double BSIM3v32wvbx;
double BSIM3v32wvbm;
double BSIM3v32wxt;
double BSIM3v32wk1;
double BSIM3v32wkt1;
double BSIM3v32wkt1l;
@ -598,14 +598,14 @@ typedef struct sBSIM3v32model
double BSIM3v32wk3b;
double BSIM3v32ww0;
double BSIM3v32wnlx;
double BSIM3v32wdvt0;
double BSIM3v32wdvt1;
double BSIM3v32wdvt2;
double BSIM3v32wdvt0w;
double BSIM3v32wdvt1w;
double BSIM3v32wdvt2w;
double BSIM3v32wdrout;
double BSIM3v32wdsub;
double BSIM3v32wdvt0;
double BSIM3v32wdvt1;
double BSIM3v32wdvt2;
double BSIM3v32wdvt0w;
double BSIM3v32wdvt1w;
double BSIM3v32wdvt2w;
double BSIM3v32wdrout;
double BSIM3v32wdsub;
double BSIM3v32wvth0;
double BSIM3v32wua;
double BSIM3v32wua1;
@ -617,19 +617,19 @@ typedef struct sBSIM3v32model
double BSIM3v32wute;
double BSIM3v32wvoff;
double BSIM3v32wdelta;
double BSIM3v32wrdsw;
double BSIM3v32wrdsw;
double BSIM3v32wprwg;
double BSIM3v32wprwb;
double BSIM3v32wprt;
double BSIM3v32weta0;
double BSIM3v32wetab;
double BSIM3v32wpclm;
double BSIM3v32wpdibl1;
double BSIM3v32wpdibl2;
double BSIM3v32wprt;
double BSIM3v32weta0;
double BSIM3v32wetab;
double BSIM3v32wpclm;
double BSIM3v32wpdibl1;
double BSIM3v32wpdibl2;
double BSIM3v32wpdiblb;
double BSIM3v32wpscbe1;
double BSIM3v32wpscbe2;
double BSIM3v32wpvag;
double BSIM3v32wpscbe1;
double BSIM3v32wpscbe2;
double BSIM3v32wpvag;
double BSIM3v32wwr;
double BSIM3v32wdwg;
double BSIM3v32wdwb;
@ -655,27 +655,27 @@ typedef struct sBSIM3v32model
double BSIM3v32wmoin;
/* Cross-term Dependence */
double BSIM3v32pcdsc;
double BSIM3v32pcdscb;
double BSIM3v32pcdscd;
double BSIM3v32pcit;
double BSIM3v32pnfactor;
double BSIM3v32pcdsc;
double BSIM3v32pcdscb;
double BSIM3v32pcdscd;
double BSIM3v32pcit;
double BSIM3v32pnfactor;
double BSIM3v32pxj;
double BSIM3v32pvsat;
double BSIM3v32pat;
double BSIM3v32pa0;
double BSIM3v32pags;
double BSIM3v32pa1;
double BSIM3v32pa2;
double BSIM3v32pketa;
double BSIM3v32pvsat;
double BSIM3v32pat;
double BSIM3v32pa0;
double BSIM3v32pags;
double BSIM3v32pa1;
double BSIM3v32pa2;
double BSIM3v32pketa;
double BSIM3v32pnsub;
double BSIM3v32pnpeak;
double BSIM3v32pngate;
double BSIM3v32pgamma1;
double BSIM3v32pgamma2;
double BSIM3v32pvbx;
double BSIM3v32pvbm;
double BSIM3v32pxt;
double BSIM3v32pnpeak;
double BSIM3v32pngate;
double BSIM3v32pgamma1;
double BSIM3v32pgamma2;
double BSIM3v32pvbx;
double BSIM3v32pvbm;
double BSIM3v32pxt;
double BSIM3v32pk1;
double BSIM3v32pkt1;
double BSIM3v32pkt1l;
@ -685,14 +685,14 @@ typedef struct sBSIM3v32model
double BSIM3v32pk3b;
double BSIM3v32pw0;
double BSIM3v32pnlx;
double BSIM3v32pdvt0;
double BSIM3v32pdvt1;
double BSIM3v32pdvt2;
double BSIM3v32pdvt0w;
double BSIM3v32pdvt1w;
double BSIM3v32pdvt2w;
double BSIM3v32pdrout;
double BSIM3v32pdsub;
double BSIM3v32pdvt0;
double BSIM3v32pdvt1;
double BSIM3v32pdvt2;
double BSIM3v32pdvt0w;
double BSIM3v32pdvt1w;
double BSIM3v32pdvt2w;
double BSIM3v32pdrout;
double BSIM3v32pdsub;
double BSIM3v32pvth0;
double BSIM3v32pua;
double BSIM3v32pua1;
@ -707,16 +707,16 @@ typedef struct sBSIM3v32model
double BSIM3v32prdsw;
double BSIM3v32pprwg;
double BSIM3v32pprwb;
double BSIM3v32pprt;
double BSIM3v32peta0;
double BSIM3v32petab;
double BSIM3v32ppclm;
double BSIM3v32ppdibl1;
double BSIM3v32ppdibl2;
double BSIM3v32pprt;
double BSIM3v32peta0;
double BSIM3v32petab;
double BSIM3v32ppclm;
double BSIM3v32ppdibl1;
double BSIM3v32ppdibl2;
double BSIM3v32ppdiblb;
double BSIM3v32ppscbe1;
double BSIM3v32ppscbe2;
double BSIM3v32ppvag;
double BSIM3v32ppscbe1;
double BSIM3v32ppscbe2;
double BSIM3v32ppvag;
double BSIM3v32pwr;
double BSIM3v32pdwg;
double BSIM3v32pdwb;
@ -794,7 +794,7 @@ typedef struct sBSIM3v32model
/* Pre-calculated constants */
/* MCJ: move to size-dependent param. */
double BSIM3v32vtm;
double BSIM3v32vtm;
double BSIM3v32cox;
double BSIM3v32cof1;
double BSIM3v32cof2;
@ -811,13 +811,13 @@ typedef struct sBSIM3v32model
double BSIM3v32unitLengthSidewallTempJctCap;
double BSIM3v32unitLengthGateSidewallTempJctCap;
double BSIM3v32oxideTrapDensityA;
double BSIM3v32oxideTrapDensityB;
double BSIM3v32oxideTrapDensityC;
double BSIM3v32em;
double BSIM3v32ef;
double BSIM3v32af;
double BSIM3v32kf;
double BSIM3v32oxideTrapDensityA;
double BSIM3v32oxideTrapDensityB;
double BSIM3v32oxideTrapDensityC;
double BSIM3v32em;
double BSIM3v32ef;
double BSIM3v32af;
double BSIM3v32kf;
struct bsim3v32SizeDependParam *pSizeDependParamKnot;
@ -844,7 +844,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32agsGiven :1;
unsigned BSIM3v32a1Given :1;
unsigned BSIM3v32a2Given :1;
unsigned BSIM3v32ketaGiven :1;
unsigned BSIM3v32ketaGiven :1;
unsigned BSIM3v32nsubGiven :1;
unsigned BSIM3v32npeakGiven :1;
unsigned BSIM3v32ngateGiven :1;
@ -862,14 +862,14 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32k3bGiven :1;
unsigned BSIM3v32w0Given :1;
unsigned BSIM3v32nlxGiven :1;
unsigned BSIM3v32dvt0Given :1;
unsigned BSIM3v32dvt1Given :1;
unsigned BSIM3v32dvt2Given :1;
unsigned BSIM3v32dvt0wGiven :1;
unsigned BSIM3v32dvt1wGiven :1;
unsigned BSIM3v32dvt2wGiven :1;
unsigned BSIM3v32droutGiven :1;
unsigned BSIM3v32dsubGiven :1;
unsigned BSIM3v32dvt0Given :1;
unsigned BSIM3v32dvt1Given :1;
unsigned BSIM3v32dvt2Given :1;
unsigned BSIM3v32dvt0wGiven :1;
unsigned BSIM3v32dvt1wGiven :1;
unsigned BSIM3v32dvt2wGiven :1;
unsigned BSIM3v32droutGiven :1;
unsigned BSIM3v32dsubGiven :1;
unsigned BSIM3v32vth0Given :1;
unsigned BSIM3v32uaGiven :1;
unsigned BSIM3v32ua1Given :1;
@ -880,20 +880,20 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32u0Given :1;
unsigned BSIM3v32uteGiven :1;
unsigned BSIM3v32voffGiven :1;
unsigned BSIM3v32rdswGiven :1;
unsigned BSIM3v32prwgGiven :1;
unsigned BSIM3v32prwbGiven :1;
unsigned BSIM3v32prtGiven :1;
unsigned BSIM3v32eta0Given :1;
unsigned BSIM3v32etabGiven :1;
unsigned BSIM3v32pclmGiven :1;
unsigned BSIM3v32pdibl1Given :1;
unsigned BSIM3v32pdibl2Given :1;
unsigned BSIM3v32pdiblbGiven :1;
unsigned BSIM3v32pscbe1Given :1;
unsigned BSIM3v32pscbe2Given :1;
unsigned BSIM3v32pvagGiven :1;
unsigned BSIM3v32deltaGiven :1;
unsigned BSIM3v32rdswGiven :1;
unsigned BSIM3v32prwgGiven :1;
unsigned BSIM3v32prwbGiven :1;
unsigned BSIM3v32prtGiven :1;
unsigned BSIM3v32eta0Given :1;
unsigned BSIM3v32etabGiven :1;
unsigned BSIM3v32pclmGiven :1;
unsigned BSIM3v32pdibl1Given :1;
unsigned BSIM3v32pdibl2Given :1;
unsigned BSIM3v32pdiblbGiven :1;
unsigned BSIM3v32pscbe1Given :1;
unsigned BSIM3v32pscbe2Given :1;
unsigned BSIM3v32pvagGiven :1;
unsigned BSIM3v32deltaGiven :1;
unsigned BSIM3v32wrGiven :1;
unsigned BSIM3v32dwgGiven :1;
unsigned BSIM3v32dwbGiven :1;
@ -906,7 +906,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32vfbGiven :1;
/* CV model */
unsigned BSIM3v32elmGiven :1;
unsigned BSIM3v32elmGiven :1;
unsigned BSIM3v32cgslGiven :1;
unsigned BSIM3v32cgdlGiven :1;
unsigned BSIM3v32ckappaGiven :1;
@ -928,7 +928,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32tpbswgGiven :1;
/* acm model */
unsigned BSIM3v32hdifGiven :1;
unsigned BSIM3v32hdifGiven :1;
unsigned BSIM3v32ldifGiven :1;
unsigned BSIM3v32ldGiven :1;
unsigned BSIM3v32rdGiven :1;
@ -949,7 +949,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32lagsGiven :1;
unsigned BSIM3v32la1Given :1;
unsigned BSIM3v32la2Given :1;
unsigned BSIM3v32lketaGiven :1;
unsigned BSIM3v32lketaGiven :1;
unsigned BSIM3v32lnsubGiven :1;
unsigned BSIM3v32lnpeakGiven :1;
unsigned BSIM3v32lngateGiven :1;
@ -967,14 +967,14 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32lk3bGiven :1;
unsigned BSIM3v32lw0Given :1;
unsigned BSIM3v32lnlxGiven :1;
unsigned BSIM3v32ldvt0Given :1;
unsigned BSIM3v32ldvt1Given :1;
unsigned BSIM3v32ldvt2Given :1;
unsigned BSIM3v32ldvt0wGiven :1;
unsigned BSIM3v32ldvt1wGiven :1;
unsigned BSIM3v32ldvt2wGiven :1;
unsigned BSIM3v32ldroutGiven :1;
unsigned BSIM3v32ldsubGiven :1;
unsigned BSIM3v32ldvt0Given :1;
unsigned BSIM3v32ldvt1Given :1;
unsigned BSIM3v32ldvt2Given :1;
unsigned BSIM3v32ldvt0wGiven :1;
unsigned BSIM3v32ldvt1wGiven :1;
unsigned BSIM3v32ldvt2wGiven :1;
unsigned BSIM3v32ldroutGiven :1;
unsigned BSIM3v32ldsubGiven :1;
unsigned BSIM3v32lvth0Given :1;
unsigned BSIM3v32luaGiven :1;
unsigned BSIM3v32lua1Given :1;
@ -985,20 +985,20 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32lu0Given :1;
unsigned BSIM3v32luteGiven :1;
unsigned BSIM3v32lvoffGiven :1;
unsigned BSIM3v32lrdswGiven :1;
unsigned BSIM3v32lprwgGiven :1;
unsigned BSIM3v32lprwbGiven :1;
unsigned BSIM3v32lprtGiven :1;
unsigned BSIM3v32leta0Given :1;
unsigned BSIM3v32letabGiven :1;
unsigned BSIM3v32lpclmGiven :1;
unsigned BSIM3v32lpdibl1Given :1;
unsigned BSIM3v32lpdibl2Given :1;
unsigned BSIM3v32lpdiblbGiven :1;
unsigned BSIM3v32lpscbe1Given :1;
unsigned BSIM3v32lpscbe2Given :1;
unsigned BSIM3v32lpvagGiven :1;
unsigned BSIM3v32ldeltaGiven :1;
unsigned BSIM3v32lrdswGiven :1;
unsigned BSIM3v32lprwgGiven :1;
unsigned BSIM3v32lprwbGiven :1;
unsigned BSIM3v32lprtGiven :1;
unsigned BSIM3v32leta0Given :1;
unsigned BSIM3v32letabGiven :1;
unsigned BSIM3v32lpclmGiven :1;
unsigned BSIM3v32lpdibl1Given :1;
unsigned BSIM3v32lpdibl2Given :1;
unsigned BSIM3v32lpdiblbGiven :1;
unsigned BSIM3v32lpscbe1Given :1;
unsigned BSIM3v32lpscbe2Given :1;
unsigned BSIM3v32lpvagGiven :1;
unsigned BSIM3v32ldeltaGiven :1;
unsigned BSIM3v32lwrGiven :1;
unsigned BSIM3v32ldwgGiven :1;
unsigned BSIM3v32ldwbGiven :1;
@ -1010,7 +1010,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32lvfbGiven :1;
/* CV model */
unsigned BSIM3v32lelmGiven :1;
unsigned BSIM3v32lelmGiven :1;
unsigned BSIM3v32lcgslGiven :1;
unsigned BSIM3v32lcgdlGiven :1;
unsigned BSIM3v32lckappaGiven :1;
@ -1036,7 +1036,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32wagsGiven :1;
unsigned BSIM3v32wa1Given :1;
unsigned BSIM3v32wa2Given :1;
unsigned BSIM3v32wketaGiven :1;
unsigned BSIM3v32wketaGiven :1;
unsigned BSIM3v32wnsubGiven :1;
unsigned BSIM3v32wnpeakGiven :1;
unsigned BSIM3v32wngateGiven :1;
@ -1054,14 +1054,14 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32wk3bGiven :1;
unsigned BSIM3v32ww0Given :1;
unsigned BSIM3v32wnlxGiven :1;
unsigned BSIM3v32wdvt0Given :1;
unsigned BSIM3v32wdvt1Given :1;
unsigned BSIM3v32wdvt2Given :1;
unsigned BSIM3v32wdvt0wGiven :1;
unsigned BSIM3v32wdvt1wGiven :1;
unsigned BSIM3v32wdvt2wGiven :1;
unsigned BSIM3v32wdroutGiven :1;
unsigned BSIM3v32wdsubGiven :1;
unsigned BSIM3v32wdvt0Given :1;
unsigned BSIM3v32wdvt1Given :1;
unsigned BSIM3v32wdvt2Given :1;
unsigned BSIM3v32wdvt0wGiven :1;
unsigned BSIM3v32wdvt1wGiven :1;
unsigned BSIM3v32wdvt2wGiven :1;
unsigned BSIM3v32wdroutGiven :1;
unsigned BSIM3v32wdsubGiven :1;
unsigned BSIM3v32wvth0Given :1;
unsigned BSIM3v32wuaGiven :1;
unsigned BSIM3v32wua1Given :1;
@ -1072,20 +1072,20 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32wu0Given :1;
unsigned BSIM3v32wuteGiven :1;
unsigned BSIM3v32wvoffGiven :1;
unsigned BSIM3v32wrdswGiven :1;
unsigned BSIM3v32wprwgGiven :1;
unsigned BSIM3v32wprwbGiven :1;
unsigned BSIM3v32wprtGiven :1;
unsigned BSIM3v32weta0Given :1;
unsigned BSIM3v32wetabGiven :1;
unsigned BSIM3v32wpclmGiven :1;
unsigned BSIM3v32wpdibl1Given :1;
unsigned BSIM3v32wpdibl2Given :1;
unsigned BSIM3v32wpdiblbGiven :1;
unsigned BSIM3v32wpscbe1Given :1;
unsigned BSIM3v32wpscbe2Given :1;
unsigned BSIM3v32wpvagGiven :1;
unsigned BSIM3v32wdeltaGiven :1;
unsigned BSIM3v32wrdswGiven :1;
unsigned BSIM3v32wprwgGiven :1;
unsigned BSIM3v32wprwbGiven :1;
unsigned BSIM3v32wprtGiven :1;
unsigned BSIM3v32weta0Given :1;
unsigned BSIM3v32wetabGiven :1;
unsigned BSIM3v32wpclmGiven :1;
unsigned BSIM3v32wpdibl1Given :1;
unsigned BSIM3v32wpdibl2Given :1;
unsigned BSIM3v32wpdiblbGiven :1;
unsigned BSIM3v32wpscbe1Given :1;
unsigned BSIM3v32wpscbe2Given :1;
unsigned BSIM3v32wpvagGiven :1;
unsigned BSIM3v32wdeltaGiven :1;
unsigned BSIM3v32wwrGiven :1;
unsigned BSIM3v32wdwgGiven :1;
unsigned BSIM3v32wdwbGiven :1;
@ -1097,7 +1097,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32wvfbGiven :1;
/* CV model */
unsigned BSIM3v32welmGiven :1;
unsigned BSIM3v32welmGiven :1;
unsigned BSIM3v32wcgslGiven :1;
unsigned BSIM3v32wcgdlGiven :1;
unsigned BSIM3v32wckappaGiven :1;
@ -1123,7 +1123,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32pagsGiven :1;
unsigned BSIM3v32pa1Given :1;
unsigned BSIM3v32pa2Given :1;
unsigned BSIM3v32pketaGiven :1;
unsigned BSIM3v32pketaGiven :1;
unsigned BSIM3v32pnsubGiven :1;
unsigned BSIM3v32pnpeakGiven :1;
unsigned BSIM3v32pngateGiven :1;
@ -1141,14 +1141,14 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32pk3bGiven :1;
unsigned BSIM3v32pw0Given :1;
unsigned BSIM3v32pnlxGiven :1;
unsigned BSIM3v32pdvt0Given :1;
unsigned BSIM3v32pdvt1Given :1;
unsigned BSIM3v32pdvt2Given :1;
unsigned BSIM3v32pdvt0wGiven :1;
unsigned BSIM3v32pdvt1wGiven :1;
unsigned BSIM3v32pdvt2wGiven :1;
unsigned BSIM3v32pdroutGiven :1;
unsigned BSIM3v32pdsubGiven :1;
unsigned BSIM3v32pdvt0Given :1;
unsigned BSIM3v32pdvt1Given :1;
unsigned BSIM3v32pdvt2Given :1;
unsigned BSIM3v32pdvt0wGiven :1;
unsigned BSIM3v32pdvt1wGiven :1;
unsigned BSIM3v32pdvt2wGiven :1;
unsigned BSIM3v32pdroutGiven :1;
unsigned BSIM3v32pdsubGiven :1;
unsigned BSIM3v32pvth0Given :1;
unsigned BSIM3v32puaGiven :1;
unsigned BSIM3v32pua1Given :1;
@ -1159,20 +1159,20 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32pu0Given :1;
unsigned BSIM3v32puteGiven :1;
unsigned BSIM3v32pvoffGiven :1;
unsigned BSIM3v32prdswGiven :1;
unsigned BSIM3v32pprwgGiven :1;
unsigned BSIM3v32pprwbGiven :1;
unsigned BSIM3v32pprtGiven :1;
unsigned BSIM3v32peta0Given :1;
unsigned BSIM3v32petabGiven :1;
unsigned BSIM3v32ppclmGiven :1;
unsigned BSIM3v32ppdibl1Given :1;
unsigned BSIM3v32ppdibl2Given :1;
unsigned BSIM3v32ppdiblbGiven :1;
unsigned BSIM3v32ppscbe1Given :1;
unsigned BSIM3v32ppscbe2Given :1;
unsigned BSIM3v32ppvagGiven :1;
unsigned BSIM3v32pdeltaGiven :1;
unsigned BSIM3v32prdswGiven :1;
unsigned BSIM3v32pprwgGiven :1;
unsigned BSIM3v32pprwbGiven :1;
unsigned BSIM3v32pprtGiven :1;
unsigned BSIM3v32peta0Given :1;
unsigned BSIM3v32petabGiven :1;
unsigned BSIM3v32ppclmGiven :1;
unsigned BSIM3v32ppdibl1Given :1;
unsigned BSIM3v32ppdibl2Given :1;
unsigned BSIM3v32ppdiblbGiven :1;
unsigned BSIM3v32ppscbe1Given :1;
unsigned BSIM3v32ppscbe2Given :1;
unsigned BSIM3v32ppvagGiven :1;
unsigned BSIM3v32pdeltaGiven :1;
unsigned BSIM3v32pwrGiven :1;
unsigned BSIM3v32pdwgGiven :1;
unsigned BSIM3v32pdwbGiven :1;
@ -1184,7 +1184,7 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32pvfbGiven :1;
/* CV model */
unsigned BSIM3v32pelmGiven :1;
unsigned BSIM3v32pelmGiven :1;
unsigned BSIM3v32pcgslGiven :1;
unsigned BSIM3v32pcgdlGiven :1;
unsigned BSIM3v32pckappaGiven :1;
@ -1217,15 +1217,15 @@ typedef struct sBSIM3v32model
unsigned BSIM3v32bulkJctGateSideGradingCoeffGiven :1;
unsigned BSIM3v32unitLengthGateSidewallJctCapGiven :1;
unsigned BSIM3v32jctEmissionCoeffGiven :1;
unsigned BSIM3v32jctTempExponentGiven :1;
unsigned BSIM3v32jctTempExponentGiven :1;
unsigned BSIM3v32oxideTrapDensityAGiven :1;
unsigned BSIM3v32oxideTrapDensityBGiven :1;
unsigned BSIM3v32oxideTrapDensityCGiven :1;
unsigned BSIM3v32emGiven :1;
unsigned BSIM3v32efGiven :1;
unsigned BSIM3v32afGiven :1;
unsigned BSIM3v32kfGiven :1;
unsigned BSIM3v32oxideTrapDensityAGiven :1;
unsigned BSIM3v32oxideTrapDensityBGiven :1;
unsigned BSIM3v32oxideTrapDensityCGiven :1;
unsigned BSIM3v32emGiven :1;
unsigned BSIM3v32efGiven :1;
unsigned BSIM3v32afGiven :1;
unsigned BSIM3v32kfGiven :1;
unsigned BSIM3v32LintGiven :1;
unsigned BSIM3v32LlGiven :1;
@ -1286,8 +1286,8 @@ typedef struct sBSIM3v32model
/* model parameters */
#define BSIM3v32_MOD_CAPMOD 101
#define BSIM3v32_MOD_ACMMOD 102
#define BSIM3v32_MOD_MOBMOD 103
#define BSIM3v32_MOD_NOIMOD 104
#define BSIM3v32_MOD_MOBMOD 103
#define BSIM3v32_MOD_NOIMOD 104
#define BSIM3v32_MOD_TOX 105
@ -1301,14 +1301,14 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_A0 113
#define BSIM3v32_MOD_A1 114
#define BSIM3v32_MOD_A2 115
#define BSIM3v32_MOD_KETA 116
#define BSIM3v32_MOD_KETA 116
#define BSIM3v32_MOD_NSUB 117
#define BSIM3v32_MOD_NPEAK 118
#define BSIM3v32_MOD_NGATE 120
#define BSIM3v32_MOD_GAMMA1 121
#define BSIM3v32_MOD_GAMMA2 122
#define BSIM3v32_MOD_VBX 123
#define BSIM3v32_MOD_BINUNIT 124
#define BSIM3v32_MOD_BINUNIT 124
#define BSIM3v32_MOD_VBM 125
@ -1408,7 +1408,7 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_LA0 258
#define BSIM3v32_MOD_LA1 259
#define BSIM3v32_MOD_LA2 260
#define BSIM3v32_MOD_LKETA 261
#define BSIM3v32_MOD_LKETA 261
#define BSIM3v32_MOD_LNSUB 262
#define BSIM3v32_MOD_LNPEAK 263
#define BSIM3v32_MOD_LNGATE 265
@ -1476,7 +1476,7 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_LCDSCD 327
#define BSIM3v32_MOD_LAGS 328
#define BSIM3v32_MOD_LFRINGE 331
#define BSIM3v32_MOD_LELM 332
@ -1505,7 +1505,7 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_WA0 388
#define BSIM3v32_MOD_WA1 389
#define BSIM3v32_MOD_WA2 390
#define BSIM3v32_MOD_WKETA 391
#define BSIM3v32_MOD_WKETA 391
#define BSIM3v32_MOD_WNSUB 392
#define BSIM3v32_MOD_WNPEAK 393
#define BSIM3v32_MOD_WNGATE 395
@ -1602,7 +1602,7 @@ typedef struct sBSIM3v32model
#define BSIM3v32_MOD_PA0 518
#define BSIM3v32_MOD_PA1 519
#define BSIM3v32_MOD_PA2 520
#define BSIM3v32_MOD_PKETA 521
#define BSIM3v32_MOD_PKETA 521
#define BSIM3v32_MOD_PNSUB 522
#define BSIM3v32_MOD_PNPEAK 523
#define BSIM3v32_MOD_PNGATE 525
@ -1811,8 +1811,8 @@ typedef struct sBSIM3v32model
#include "bsim3v32ext.h"
extern void BSIM3v32evaluate(double,double,double,BSIM3v32instance*,BSIM3v32model*,
double*,double*,double*, double*, double*, double*, double*,
double*, double*, double*, double*, double*, double*, double*,
double*,double*,double*, double*, double*, double*, double*,
double*, double*, double*, double*, double*, double*, double*,
double*, double*, double*, double*, CKTcircuit*);
extern int BSIM3v32debug(BSIM3v32model*, BSIM3v32instance*, CKTcircuit*, int);
extern int BSIM3v32checkModel(BSIM3v32model*, BSIM3v32instance*, CKTcircuit*);

View File

@ -20,7 +20,7 @@ extern void BSIM3v32mosCap(CKTcircuit*, double, double, double, double,
double, double, double, double, double, double, double,
double, double, double, double, double, double, double*,
double*, double*, double*, double*, double*, double*, double*,
double*, double*, double*, double*, double*, double*, double*,
double*, double*, double*, double*, double*, double*, double*,
double*);
extern int BSIM3v32param(int,IFvalue*,GENinstance*,IFvalue*);
extern int BSIM3v32pzLoad(GENmodel*,CKTcircuit*,SPcomplex*);

View File

@ -52,7 +52,7 @@ SPICEdev BSIM3v32info = {
/* DEVaccept */ NULL,
/* DEVdestroy */ BSIM3v32destroy,
/* DEVmodDelete */ BSIM3v32mDelete,
/* DEVdelete */ BSIM3v32delete,
/* DEVdelete */ BSIM3v32delete,
/* DEVsetic */ BSIM3v32getic,
/* DEVask */ BSIM3v32ask,
/* DEVmodAsk */ BSIM3v32mAsk,
@ -69,7 +69,7 @@ SPICEdev BSIM3v32info = {
#ifdef CIDER
/* DEVdump */ NULL,
/* DEVacct */ NULL,
#endif
#endif
/* DEVinstSize */ &BSIM3v32iSize,
/* DEVmodSize */ &BSIM3v32mSize