diff --git a/src/spicelib/devices/bsim4/b4.c b/src/spicelib/devices/bsim4/b4.c index 0666ac73c..3e5cf90b2 100644 --- a/src/spicelib/devices/bsim4/b4.c +++ b/src/spicelib/devices/bsim4/b4.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. @@ -12,6 +13,7 @@ * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006 **********/ #include "ngspice.h" @@ -328,6 +330,7 @@ IOP( "dlc", BSIM4_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "xw", BSIM4_MOD_XW, IF_REAL, "W offset for channel width due to mask/etch effect"), IOP( "xl", BSIM4_MOD_XL, IF_REAL, "L offset for channel length due to mask/etch effect"), IOP( "dlcig", BSIM4_MOD_DLCIG, IF_REAL, "Delta L for Ig model"), +IOP( "dlcigd", BSIM4_MOD_DLCIGD, IF_REAL, "Delta L for Ig model drain side"), IOP( "dwj", BSIM4_MOD_DWJ, IF_REAL, "Delta W for S/D junctions"), IOP( "alpha0", BSIM4_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), @@ -338,12 +341,22 @@ IOP( "agidl", BSIM4_MOD_AGIDL, IF_REAL, "Pre-exponential constant for GIDL"), IOP( "bgidl", BSIM4_MOD_BGIDL, IF_REAL, "Exponential constant for GIDL"), IOP( "cgidl", BSIM4_MOD_CGIDL, IF_REAL, "Parameter for body-bias dependence of GIDL"), IOP( "egidl", BSIM4_MOD_EGIDL, IF_REAL, "Fitting parameter for Bandbending"), +IOP( "agisl", BSIM4_MOD_AGISL, IF_REAL, "Pre-exponential constant for GISL"), +IOP( "bgisl", BSIM4_MOD_BGISL, IF_REAL, "Exponential constant for GISL"), +IOP( "cgisl", BSIM4_MOD_CGISL, IF_REAL, "Parameter for body-bias dependence of GISL"), +IOP( "egisl", BSIM4_MOD_EGISL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "aigc", BSIM4_MOD_AIGC, IF_REAL, "Parameter for Igc"), IOP( "bigc", BSIM4_MOD_BIGC, IF_REAL, "Parameter for Igc"), IOP( "cigc", BSIM4_MOD_CIGC, IF_REAL, "Parameter for Igc"), IOP( "aigsd", BSIM4_MOD_AIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "bigsd", BSIM4_MOD_BIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "cigsd", BSIM4_MOD_CIGSD, IF_REAL, "Parameter for Igs,d"), +IOP( "aigs", BSIM4_MOD_AIGS, IF_REAL, "Parameter for Igs"), +IOP( "bigs", BSIM4_MOD_BIGS, IF_REAL, "Parameter for Igs"), +IOP( "cigs", BSIM4_MOD_CIGS, IF_REAL, "Parameter for Igs"), +IOP( "aigd", BSIM4_MOD_AIGD, IF_REAL, "Parameter for Igd"), +IOP( "bigd", BSIM4_MOD_BIGD, IF_REAL, "Parameter for Igd"), +IOP( "cigd", BSIM4_MOD_CIGD, IF_REAL, "Parameter for Igd"), IOP( "aigbacc", BSIM4_MOD_AIGBACC, IF_REAL, "Parameter for Igb"), IOP( "bigbacc", BSIM4_MOD_BIGBACC, IF_REAL, "Parameter for Igb"), IOP( "cigbacc", BSIM4_MOD_CIGBACC, IF_REAL, "Parameter for Igb"), @@ -376,6 +389,9 @@ IOP( "jtsswgd", BSIM4_MOD_JTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assis IOP( "njts", BSIM4_MOD_NJTS, IF_REAL, "Non-ideality factor for bottom junction"), IOP( "njtssw", BSIM4_MOD_NJTSSW, IF_REAL, "Non-ideality factor for STI sidewall junction"), IOP( "njtsswg", BSIM4_MOD_NJTSSWG, IF_REAL, "Non-ideality factor for gate-edge sidewall junction"), +IOP( "njtsd", BSIM4_MOD_NJTSD, IF_REAL, "Non-ideality factor for bottom junction drain side"), +IOP( "njtsswd", BSIM4_MOD_NJTSSWD, IF_REAL, "Non-ideality factor for STI sidewall junction drain side"), +IOP( "njtsswgd", BSIM4_MOD_NJTSSWGD, IF_REAL, "Non-ideality factor for gate-edge sidewall junction drain side"), IOP( "xtss", BSIM4_MOD_XTSS, IF_REAL, "Power dependence of JTSS on temperature"), IOP( "xtsd", BSIM4_MOD_XTSD, IF_REAL, "Power dependence of JTSD on temperature"), IOP( "xtssws", BSIM4_MOD_XTSSWS, IF_REAL, "Power dependence of JTSSWS on temperature"), @@ -385,6 +401,9 @@ IOP( "xtsswgd", BSIM4_MOD_XTSSWGD, IF_REAL, "Power dependence of JTSSWGD on temp IOP( "tnjts", BSIM4_MOD_TNJTS, IF_REAL, "Temperature coefficient for NJTS"), IOP( "tnjtssw", BSIM4_MOD_TNJTSSW, IF_REAL, "Temperature coefficient for NJTSSW"), IOP( "tnjtsswg", BSIM4_MOD_TNJTSSWG, IF_REAL, "Temperature coefficient for NJTSSWG"), +IOP( "tnjtsd", BSIM4_MOD_TNJTSD, IF_REAL, "Temperature coefficient for NJTSD"), +IOP( "tnjtsswd", BSIM4_MOD_TNJTSSWD, IF_REAL, "Temperature coefficient for NJTSSWD"), +IOP( "tnjtsswgd", BSIM4_MOD_TNJTSSWGD, IF_REAL, "Temperature coefficient for NJTSSWGD"), IOP( "vtss", BSIM4_MOD_VTSS, IF_REAL, "Source bottom trap-assisted voltage dependent parameter"), IOP( "vtsd", BSIM4_MOD_VTSD, IF_REAL, "Drain bottom trap-assisted voltage dependent parameter"), IOP( "vtssws", BSIM4_MOD_VTSSWS, IF_REAL, "Source STI sidewall trap-assisted voltage dependent parameter"), @@ -530,12 +549,22 @@ IOP( "lagidl", BSIM4_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", BSIM4_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lcgidl", BSIM4_MOD_LCGIDL, IF_REAL, "Length dependence of cgidl"), IOP( "legidl", BSIM4_MOD_LEGIDL, IF_REAL, "Length dependence of egidl"), +IOP( "lagisl", BSIM4_MOD_LAGISL, IF_REAL, "Length dependence of agisl"), +IOP( "lbgisl", BSIM4_MOD_LBGISL, IF_REAL, "Length dependence of bgisl"), +IOP( "lcgisl", BSIM4_MOD_LCGISL, IF_REAL, "Length dependence of cgisl"), +IOP( "legisl", BSIM4_MOD_LEGISL, IF_REAL, "Length dependence of egisl"), IOP( "laigc", BSIM4_MOD_LAIGC, IF_REAL, "Length dependence of aigc"), IOP( "lbigc", BSIM4_MOD_LBIGC, IF_REAL, "Length dependence of bigc"), IOP( "lcigc", BSIM4_MOD_LCIGC, IF_REAL, "Length dependence of cigc"), IOP( "laigsd", BSIM4_MOD_LAIGSD, IF_REAL, "Length dependence of aigsd"), IOP( "lbigsd", BSIM4_MOD_LBIGSD, IF_REAL, "Length dependence of bigsd"), IOP( "lcigsd", BSIM4_MOD_LCIGSD, IF_REAL, "Length dependence of cigsd"), +IOP( "laigs", BSIM4_MOD_LAIGS, IF_REAL, "Length dependence of aigs"), +IOP( "lbigs", BSIM4_MOD_LBIGS, IF_REAL, "Length dependence of bigs"), +IOP( "lcigs", BSIM4_MOD_LCIGS, IF_REAL, "Length dependence of cigs"), +IOP( "laigd", BSIM4_MOD_LAIGD, IF_REAL, "Length dependence of aigd"), +IOP( "lbigd", BSIM4_MOD_LBIGD, IF_REAL, "Length dependence of bigd"), +IOP( "lcigd", BSIM4_MOD_LCIGD, IF_REAL, "Length dependence of cigd"), IOP( "laigbacc", BSIM4_MOD_LAIGBACC, IF_REAL, "Length dependence of aigbacc"), IOP( "lbigbacc", BSIM4_MOD_LBIGBACC, IF_REAL, "Length dependence of bigbacc"), IOP( "lcigbacc", BSIM4_MOD_LCIGBACC, IF_REAL, "Length dependence of cigbacc"), @@ -666,12 +695,22 @@ IOP( "wagidl", BSIM4_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", BSIM4_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wcgidl", BSIM4_MOD_WCGIDL, IF_REAL, "Width dependence of cgidl"), IOP( "wegidl", BSIM4_MOD_WEGIDL, IF_REAL, "Width dependence of egidl"), +IOP( "wagisl", BSIM4_MOD_WAGISL, IF_REAL, "Width dependence of agisl"), +IOP( "wbgisl", BSIM4_MOD_WBGISL, IF_REAL, "Width dependence of bgisl"), +IOP( "wcgisl", BSIM4_MOD_WCGISL, IF_REAL, "Width dependence of cgisl"), +IOP( "wegisl", BSIM4_MOD_WEGISL, IF_REAL, "Width dependence of egisl"), IOP( "waigc", BSIM4_MOD_WAIGC, IF_REAL, "Width dependence of aigc"), IOP( "wbigc", BSIM4_MOD_WBIGC, IF_REAL, "Width dependence of bigc"), IOP( "wcigc", BSIM4_MOD_WCIGC, IF_REAL, "Width dependence of cigc"), IOP( "waigsd", BSIM4_MOD_WAIGSD, IF_REAL, "Width dependence of aigsd"), IOP( "wbigsd", BSIM4_MOD_WBIGSD, IF_REAL, "Width dependence of bigsd"), IOP( "wcigsd", BSIM4_MOD_WCIGSD, IF_REAL, "Width dependence of cigsd"), +IOP( "waigs", BSIM4_MOD_WAIGS, IF_REAL, "Width dependence of aigs"), +IOP( "wbigs", BSIM4_MOD_WBIGS, IF_REAL, "Width dependence of bigs"), +IOP( "wcigs", BSIM4_MOD_WCIGS, IF_REAL, "Width dependence of cigs"), +IOP( "waigd", BSIM4_MOD_WAIGD, IF_REAL, "Width dependence of aigd"), +IOP( "wbigd", BSIM4_MOD_WBIGD, IF_REAL, "Width dependence of bigd"), +IOP( "wcigd", BSIM4_MOD_WCIGD, IF_REAL, "Width dependence of cigd"), IOP( "waigbacc", BSIM4_MOD_WAIGBACC, IF_REAL, "Width dependence of aigbacc"), IOP( "wbigbacc", BSIM4_MOD_WBIGBACC, IF_REAL, "Width dependence of bigbacc"), IOP( "wcigbacc", BSIM4_MOD_WCIGBACC, IF_REAL, "Width dependence of cigbacc"), @@ -801,12 +840,22 @@ IOP( "pagidl", BSIM4_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", BSIM4_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pcgidl", BSIM4_MOD_PCGIDL, IF_REAL, "Cross-term dependence of cgidl"), IOP( "pegidl", BSIM4_MOD_PEGIDL, IF_REAL, "Cross-term dependence of egidl"), +IOP( "pagisl", BSIM4_MOD_PAGISL, IF_REAL, "Cross-term dependence of agisl"), +IOP( "pbgisl", BSIM4_MOD_PBGISL, IF_REAL, "Cross-term dependence of bgisl"), +IOP( "pcgisl", BSIM4_MOD_PCGISL, IF_REAL, "Cross-term dependence of cgisl"), +IOP( "pegisl", BSIM4_MOD_PEGISL, IF_REAL, "Cross-term dependence of egisl"), IOP( "paigc", BSIM4_MOD_PAIGC, IF_REAL, "Cross-term dependence of aigc"), IOP( "pbigc", BSIM4_MOD_PBIGC, IF_REAL, "Cross-term dependence of bigc"), IOP( "pcigc", BSIM4_MOD_PCIGC, IF_REAL, "Cross-term dependence of cigc"), IOP( "paigsd", BSIM4_MOD_PAIGSD, IF_REAL, "Cross-term dependence of aigsd"), IOP( "pbigsd", BSIM4_MOD_PBIGSD, IF_REAL, "Cross-term dependence of bigsd"), IOP( "pcigsd", BSIM4_MOD_PCIGSD, IF_REAL, "Cross-term dependence of cigsd"), +IOP( "paigs", BSIM4_MOD_PAIGS, IF_REAL, "Cross-term dependence of aigs"), +IOP( "pbigs", BSIM4_MOD_PBIGS, IF_REAL, "Cross-term dependence of bigs"), +IOP( "pcigs", BSIM4_MOD_PCIGS, IF_REAL, "Cross-term dependence of cigs"), +IOP( "paigd", BSIM4_MOD_PAIGD, IF_REAL, "Cross-term dependence of aigd"), +IOP( "pbigd", BSIM4_MOD_PBIGD, IF_REAL, "Cross-term dependence of bigd"), +IOP( "pcigd", BSIM4_MOD_PCIGD, IF_REAL, "Cross-term dependence of cigd"), IOP( "paigbacc", BSIM4_MOD_PAIGBACC, IF_REAL, "Cross-term dependence of aigbacc"), IOP( "pbigbacc", BSIM4_MOD_PBIGBACC, IF_REAL, "Cross-term dependence of bigbacc"), IOP( "pcigbacc", BSIM4_MOD_PCIGBACC, IF_REAL, "Cross-term dependence of cigbacc"), diff --git a/src/spicelib/devices/bsim4/b4acld.c b/src/spicelib/devices/bsim4/b4acld.c index 7949daf81..7b5354c83 100644 --- a/src/spicelib/devices/bsim4/b4acld.c +++ b/src/spicelib/devices/bsim4/b4acld.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4acld.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4acld.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ diff --git a/src/spicelib/devices/bsim4/b4ask.c b/src/spicelib/devices/bsim4/b4ask.c index 56641b20c..9223f1ade 100644 --- a/src/spicelib/devices/bsim4/b4ask.c +++ b/src/spicelib/devices/bsim4/b4ask.c @@ -1,8 +1,8 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/27/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4ask.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4ask.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. diff --git a/src/spicelib/devices/bsim4/b4check.c b/src/spicelib/devices/bsim4/b4check.c index 6a59e52f4..7e50d75d8 100644 --- a/src/spicelib/devices/bsim4/b4check.c +++ b/src/spicelib/devices/bsim4/b4check.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4check.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4check.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. @@ -12,6 +13,7 @@ * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006 **********/ #include "ngspice.h" @@ -40,9 +42,9 @@ FILE *fplog; fprintf(fplog, "\n"); fprintf(fplog, "++++++++++ BSIM4 PARAMETER CHECKING BELOW ++++++++++\n"); - if (strcmp(model->BSIM4version, "4.5.0") != 0) - { fprintf(fplog, "Warning: This model is BSIM4.5.0; you specified a wrong version number.\n"); - printf("Warning: This model is BSIM4.5.0; you specified a wrong version number.\n"); + if (strcmp(model->BSIM4version, "4.6.0") != 0) + { fprintf(fplog, "Warning: This model is BSIM4.6.0; you specified a wrong version number.\n"); + printf("Warning: This model is BSIM4.6.0; you specified a wrong version number.\n"); } fprintf(fplog, "Model = %s\n", model->BSIM4modName); @@ -721,24 +723,45 @@ FILE *fplog; printf("Warning: Njd = %g is negative.\n", model->BSIM4DjctEmissionCoeff); } - if (model->BSIM4njtstemp < 0.0) + + if (model->BSIM4njtsstemp < 0.0) { fprintf(fplog, "Warning: Njts = %g is negative at temperature = %g.\n", - model->BSIM4njtstemp, ckt->CKTtemp); + model->BSIM4njtsstemp, ckt->CKTtemp); printf("Warning: Njts = %g is negative at temperature = %g.\n", - model->BSIM4njtstemp, ckt->CKTtemp); + model->BSIM4njtsstemp, ckt->CKTtemp); } - if (model->BSIM4njtsswtemp < 0.0) + if (model->BSIM4njtsswstemp < 0.0) { fprintf(fplog, "Warning: Njtssw = %g is negative at temperature = %g.\n", - model->BSIM4njtsswtemp, ckt->CKTtemp); + model->BSIM4njtsswstemp, ckt->CKTtemp); printf("Warning: Njtssw = %g is negative at temperature = %g.\n", - model->BSIM4njtsswtemp, ckt->CKTtemp); + model->BSIM4njtsswstemp, ckt->CKTtemp); } - if (model->BSIM4njtsswgtemp < 0.0) + if (model->BSIM4njtsswgstemp < 0.0) { fprintf(fplog, "Warning: Njtsswg = %g is negative at temperature = %g.\n", - model->BSIM4njtsswgtemp, ckt->CKTtemp); + model->BSIM4njtsswgstemp, ckt->CKTtemp); printf("Warning: Njtsswg = %g is negative at temperature = %g.\n", - model->BSIM4njtsswgtemp, ckt->CKTtemp); + model->BSIM4njtsswgstemp, ckt->CKTtemp); } + + if (model->BSIM4njtsdGiven && model->BSIM4njtsdtemp < 0.0) + { fprintf(fplog, "Warning: Njtsd = %g is negative at temperature = %g.\n", + model->BSIM4njtsdtemp, ckt->CKTtemp); + printf("Warning: Njtsd = %g is negative at temperature = %g.\n", + model->BSIM4njtsdtemp, ckt->CKTtemp); + } + if (model->BSIM4njtsswdGiven && model->BSIM4njtsswdtemp < 0.0) + { fprintf(fplog, "Warning: Njtsswd = %g is negative at temperature = %g.\n", + model->BSIM4njtsswdtemp, ckt->CKTtemp); + printf("Warning: Njtsswd = %g is negative at temperature = %g.\n", + model->BSIM4njtsswdtemp, ckt->CKTtemp); + } + if (model->BSIM4njtsswgdGiven && model->BSIM4njtsswgdtemp < 0.0) + { fprintf(fplog, "Warning: Njtsswgd = %g is negative at temperature = %g.\n", + model->BSIM4njtsswgdtemp, ckt->CKTtemp); + printf("Warning: Njtsswgd = %g is negative at temperature = %g.\n", + model->BSIM4njtsswgdtemp, ckt->CKTtemp); + } + if (model->BSIM4ntnoi < 0.0) { fprintf(fplog, "Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4ntnoi); printf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4ntnoi); diff --git a/src/spicelib/devices/bsim4/b4cvtest.c b/src/spicelib/devices/bsim4/b4cvtest.c index faa18ee48..3f7df34cc 100644 --- a/src/spicelib/devices/bsim4/b4cvtest.c +++ b/src/spicelib/devices/bsim4/b4cvtest.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4cvtest.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4cvtest.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. diff --git a/src/spicelib/devices/bsim4/b4del.c b/src/spicelib/devices/bsim4/b4del.c index d49e2e60f..fb054362d 100644 --- a/src/spicelib/devices/bsim4/b4del.c +++ b/src/spicelib/devices/bsim4/b4del.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4del.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4del.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ diff --git a/src/spicelib/devices/bsim4/b4dest.c b/src/spicelib/devices/bsim4/b4dest.c index eb60d1fe9..545962e3f 100644 --- a/src/spicelib/devices/bsim4/b4dest.c +++ b/src/spicelib/devices/bsim4/b4dest.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4dest.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4dest.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ diff --git a/src/spicelib/devices/bsim4/b4geo.c b/src/spicelib/devices/bsim4/b4geo.c index 408d59199..cc0259d72 100644 --- a/src/spicelib/devices/bsim4/b4geo.c +++ b/src/spicelib/devices/bsim4/b4geo.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 11/17//2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4geo.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4geo.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ diff --git a/src/spicelib/devices/bsim4/b4getic.c b/src/spicelib/devices/bsim4/b4getic.c index 55c609a42..892b66247 100644 --- a/src/spicelib/devices/bsim4/b4getic.c +++ b/src/spicelib/devices/bsim4/b4getic.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4getic.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4getic.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ diff --git a/src/spicelib/devices/bsim4/b4ld.c b/src/spicelib/devices/bsim4/b4ld.c index 519b357af..7b69affb5 100644 --- a/src/spicelib/devices/bsim4/b4ld.c +++ b/src/spicelib/devices/bsim4/b4ld.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4ld.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4ld.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. @@ -12,6 +13,7 @@ * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 02/06/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006. **********/ #include "ngspice.h" @@ -185,7 +187,8 @@ double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double Igisl, Ggislg, Ggislb, Ggisls; -double Nvtmrs, Nvtmrssw, Nvtmrsswg; +double Nvtmrss, Nvtmrssws, Nvtmrsswgs; +double Nvtmrsd, Nvtmrsswd, Nvtmrsswgd; double vs, Fsevl, dvs_dVg, dvs_dVd, dvs_dVb, dFsevl_dVg, dFsevl_dVd, dFsevl_dVb; double vgdx, vgsx; @@ -199,7 +202,7 @@ ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; -ChargeComputationNeeded = 1; +/* ChargeComputationNeeded = 1; Wrong ??PN */ for (; model != NULL; model = model->BSIM4nextModel) { for (here = model->BSIM4instances; here != NULL; @@ -846,84 +849,87 @@ for (; model != NULL; model = model->BSIM4nextModel) } /* trap-assisted tunneling and recombination current for reverse bias */ - Nvtmrssw = model->BSIM4vtm0 * model->BSIM4njtsswtemp; - Nvtmrsswg = model->BSIM4vtm0 * model->BSIM4njtsswgtemp; - Nvtmrs = model->BSIM4vtm0 * model->BSIM4njtstemp; + Nvtmrssws = model->BSIM4vtm0 * model->BSIM4njtsswstemp; + Nvtmrsswgs = model->BSIM4vtm0 * model->BSIM4njtsswgstemp; + Nvtmrss = model->BSIM4vtm0 * model->BSIM4njtsstemp; + Nvtmrsswd = model->BSIM4vtm0 * model->BSIM4njtsswdtemp; + Nvtmrsswgd = model->BSIM4vtm0 * model->BSIM4njtsswgdtemp; + Nvtmrsd = model->BSIM4vtm0 * model->BSIM4njtsdtemp; if ((model->BSIM4vtss - vbs_jct) < (model->BSIM4vtss * 1e-3)) { T9 = 1.0e3; - T0 = - vbs_jct / Nvtmrs * T9; + T0 = - vbs_jct / Nvtmrss * T9; DEXP(T0, T1, T10); - dT1_dVb = T10 / Nvtmrs * T9; + dT1_dVb = T10 / Nvtmrss * T9; } else { T9 = 1.0 / (model->BSIM4vtss - vbs_jct); - T0 = -vbs_jct / Nvtmrs * model->BSIM4vtss * T9; - dT0_dVb = model->BSIM4vtss / Nvtmrs * (T9 + vbs_jct * T9 * T9) ; + T0 = -vbs_jct / Nvtmrss * model->BSIM4vtss * T9; + dT0_dVb = model->BSIM4vtss / Nvtmrss * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T1, T10); dT1_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsd - vbd_jct) < (model->BSIM4vtsd * 1e-3) ) { T9 = 1.0e3; - T0 = -vbd_jct / Nvtmrs * T9; + T0 = -vbd_jct / Nvtmrsd * T9; DEXP(T0, T2, T10); - dT2_dVb = T10 / Nvtmrs * T9; + dT2_dVb = T10 / Nvtmrsd * T9; } else { T9 = 1.0 / (model->BSIM4vtsd - vbd_jct); - T0 = -vbd_jct / Nvtmrs * model->BSIM4vtsd * T9; - dT0_dVb = model->BSIM4vtsd / Nvtmrs * (T9 + vbd_jct * T9 * T9) ; + T0 = -vbd_jct / Nvtmrsd * model->BSIM4vtsd * T9; + dT0_dVb = model->BSIM4vtsd / Nvtmrsd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T2, T10); dT2_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtssws - vbs_jct) < (model->BSIM4vtssws * 1e-3) ) { T9 = 1.0e3; - T0 = -vbs_jct / Nvtmrssw * T9; + T0 = -vbs_jct / Nvtmrssws * T9; DEXP(T0, T3, T10); - dT3_dVb = T10 / Nvtmrssw * T9; + dT3_dVb = T10 / Nvtmrssws * T9; } else { T9 = 1.0 / (model->BSIM4vtssws - vbs_jct); - T0 = -vbs_jct / Nvtmrssw * model->BSIM4vtssws * T9; - dT0_dVb = model->BSIM4vtssws / Nvtmrssw * (T9 + vbs_jct * T9 * T9) ; + T0 = -vbs_jct / Nvtmrssws * model->BSIM4vtssws * T9; + dT0_dVb = model->BSIM4vtssws / Nvtmrssws * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T3, T10); dT3_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsswd - vbd_jct) < (model->BSIM4vtsswd * 1e-3) ) { T9 = 1.0e3; - T0 = -vbd_jct / Nvtmrssw * T9; + T0 = -vbd_jct / Nvtmrsswd * T9; DEXP(T0, T4, T10); - dT4_dVb = T10 / Nvtmrssw * T9; + dT4_dVb = T10 / Nvtmrsswd * T9; } else { T9 = 1.0 / (model->BSIM4vtsswd - vbd_jct); - T0 = -vbd_jct / Nvtmrssw * model->BSIM4vtsswd * T9; - dT0_dVb = model->BSIM4vtsswd / Nvtmrssw * (T9 + vbd_jct * T9 * T9) ; + T0 = -vbd_jct / Nvtmrsswd * model->BSIM4vtsswd * T9; + dT0_dVb = model->BSIM4vtsswd / Nvtmrsswd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T4, T10); dT4_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsswgs - vbs_jct) < (model->BSIM4vtsswgs * 1e-3) ) { T9 = 1.0e3; - T0 = -vbs_jct / Nvtmrsswg * T9; + T0 = -vbs_jct / Nvtmrsswgs * T9; DEXP(T0, T5, T10); - dT5_dVb = T10 / Nvtmrsswg * T9; + dT5_dVb = T10 / Nvtmrsswgs * T9; } else { T9 = 1.0 / (model->BSIM4vtsswgs - vbs_jct); - T0 = -vbs_jct / Nvtmrsswg * model->BSIM4vtsswgs * T9; - dT0_dVb = model->BSIM4vtsswgs / Nvtmrsswg * (T9 + vbs_jct * T9 * T9) ; + T0 = -vbs_jct / Nvtmrsswgs * model->BSIM4vtsswgs * T9; + dT0_dVb = model->BSIM4vtsswgs / Nvtmrsswgs * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T5, T10); dT5_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsswgd - vbd_jct) < (model->BSIM4vtsswgd * 1e-3) ) { T9 = 1.0e3; - T0 = -vbd_jct / Nvtmrsswg * T9; + T0 = -vbd_jct / Nvtmrsswgd * T9; DEXP(T0, T6, T10); - dT6_dVb = T10 / Nvtmrsswg * T9; + dT6_dVb = T10 / Nvtmrsswgd * T9; } else { T9 = 1.0 / (model->BSIM4vtsswgd - vbd_jct); - T0 = -vbd_jct / Nvtmrsswg * model->BSIM4vtsswgd * T9; - dT0_dVb = model->BSIM4vtsswgd / Nvtmrsswg * (T9 + vbd_jct * T9 * T9) ; + T0 = -vbd_jct / Nvtmrsswgd * model->BSIM4vtsswgd * T9; + dT0_dVb = model->BSIM4vtsswgd / Nvtmrsswgd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T6, T10); dT6_dVb = T10 * dT0_dVb; } @@ -1332,25 +1338,39 @@ for (; model != NULL; model = model->BSIM4nextModel) { T0 = Vgsteff + Vth + Vth; T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff; T3 = T0 / model->BSIM4toxe; - T6 = pParam->BSIM4ud / T3 / T3 * Vth * Vth; + T12 = sqrt(Vth * Vth + 0.0001); + T9 = 1.0/(Vgsteff + 2*T12); + T10 = T9*model->BSIM4toxe; + T8 = pParam->BSIM4ud * T10 * T10 * Vth; + T6 = T8 * Vth; T5 = T3 * (T2 + pParam->BSIM4ub * T3) + T6; - T7 = - 2.0 * T6 / T0; - dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4ub * T3) / model->BSIM4toxe + T7; - dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; - dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM4uc * T3; + T7 = - 2.0 * T6 * T9; + T11 = T7 * Vth/T12; + dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4ub * T3) / model->BSIM4toxe; + T13 = 2.0 * (dDenomi_dVg + T11 + T8); + dDenomi_dVd = T13 * dVth_dVd; + dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4uc * T3; + dDenomi_dVg+= T7; } else if (model->BSIM4mobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + pParam->BSIM4uc * Vbseff; T3 = T0 / model->BSIM4toxe; T4 = T3 * (pParam->BSIM4ua + pParam->BSIM4ub * T3); - T6 = pParam->BSIM4ud / T3 / T3 * Vth * Vth; + T12 = sqrt(Vth * Vth + 0.0001); + T9 = 1.0/(Vgsteff + 2*T12); + T10 = T9*model->BSIM4toxe; + T8 = pParam->BSIM4ud * T10 * T10 * Vth; + T6 = T8 * Vth; T5 = T4 * T2 + T6; - T7 = - 2.0 * T6 / T0; + T7 = - 2.0 * T6 * T9; + T11 = T7 * Vth/T12; dDenomi_dVg = (pParam->BSIM4ua + 2.0 * pParam->BSIM4ub * T3) * T2 - / model->BSIM4toxe + T7; - dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; - dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM4uc * T4; + / model->BSIM4toxe; + T13 = 2.0 * (dDenomi_dVg + T11 + T8); + dDenomi_dVd = T13 * dVth_dVd; + dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4uc * T4; + dDenomi_dVg+= T7; } else { T0 = (Vgsteff + here->BSIM4vtfbphi1) / model->BSIM4toxe; @@ -1358,12 +1378,18 @@ for (; model != NULL; model = model->BSIM4nextModel) dT1_dVg = T1 * pParam->BSIM4eu / T0 / model->BSIM4toxe; T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff; T3 = T0 / model->BSIM4toxe; - T6 = pParam->BSIM4ud / T3 / T3 * Vth * Vth; + T12 = sqrt(Vth * Vth + 0.0001); + T9 = 1.0/(Vgsteff + 2*T12); + T10 = T9*model->BSIM4toxe; + T8 = pParam->BSIM4ud * T10 * T10 * Vth; + T6 = T8 * Vth; T5 = T1 * T2 + T6; - T7 = - 2.0 * T6 / T0; + T7 = - 2.0 * T6 * T9; + T11 = T7 * Vth/T12; dDenomi_dVg = T2 * dT1_dVg + T7; - dDenomi_dVd = 0.0; - dDenomi_dVb = T1 * pParam->BSIM4uc; + T13 = 2.0 * (T11 + T8); + dDenomi_dVd = T13 * dVth_dVd; + dDenomi_dVb = T13 * dVth_dVb + T1 * pParam->BSIM4uc; } if (T5 >= -0.8) @@ -2120,23 +2146,23 @@ for (; model != NULL; model = model->BSIM4nextModel) vgd_eff = here->BSIM4vgd_eff; dvgd_eff_dvg = here->BSIM4dvgd_eff_dvg; - T1 = (-vds - vgd_eff - pParam->BSIM4egidl ) / T0; + T1 = (-vds - vgd_eff - pParam->BSIM4egisl ) / T0; - if ((pParam->BSIM4agidl <= 0.0) || (pParam->BSIM4bgidl <= 0.0) - || (T1 <= 0.0) || (pParam->BSIM4cgidl <= 0.0) || (vbs > 0.0)) + if ((pParam->BSIM4agisl <= 0.0) || (pParam->BSIM4bgisl <= 0.0) + || (T1 <= 0.0) || (pParam->BSIM4cgisl <= 0.0) || (vbs > 0.0)) Igisl = Ggisls = Ggislg = Ggislb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgd_eff_dvg * dT1_dVd; - T2 = pParam->BSIM4bgidl / T1; + T2 = pParam->BSIM4bgisl / T1; if (T2 < 100.0) - { Igisl = pParam->BSIM4agidl * pParam->BSIM4weffCJ * T1 * exp(-T2); + { Igisl = pParam->BSIM4agisl * pParam->BSIM4weffCJ * T1 * exp(-T2); T3 = Igisl * (1.0 + T2) / T1; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } else - { Igisl = pParam->BSIM4agidl * pParam->BSIM4weffCJ * 3.720075976e-44; + { Igisl = pParam->BSIM4agisl * pParam->BSIM4weffCJ * 3.720075976e-44; Ggisls = Igisl * dT1_dVd; Ggislg = Igisl * dT1_dVg; Igisl *= T1; @@ -2144,9 +2170,9 @@ for (; model != NULL; model = model->BSIM4nextModel) T4 = vbs * vbs; T5 = -vbs * T4; - T6 = pParam->BSIM4cgidl + T5; + T6 = pParam->BSIM4cgisl + T5; T7 = T5 / T6; - T8 = 3.0 * pParam->BSIM4cgidl * T4 / T6 / T6; + T8 = 3.0 * pParam->BSIM4cgisl * T4 / T6 / T6; Ggisls = Ggisls * T7 + Igisl * T8; Ggislg = Ggislg * T7; Ggislb = -Igisl * T8; @@ -2363,12 +2389,12 @@ for (; model != NULL; model = model->BSIM4nextModel) T2 = vgs * vgs_eff; dT2_dVg = vgs * dvgs_eff_dvg + vgs_eff; - T11 = pParam->BSIM4AechvbEdge; + T11 = pParam->BSIM4AechvbEdgeS; T12 = pParam->BSIM4BechvbEdge; - T3 = pParam->BSIM4aigsd * pParam->BSIM4cigsd - - pParam->BSIM4bigsd; - T4 = pParam->BSIM4bigsd * pParam->BSIM4cigsd; - T5 = T12 * (pParam->BSIM4aigsd + T3 * vgs_eff + T3 = pParam->BSIM4aigs * pParam->BSIM4cigs + - pParam->BSIM4bigs; + T4 = pParam->BSIM4bigs * pParam->BSIM4cigs; + T5 = T12 * (pParam->BSIM4aigs + T3 * vgs_eff - T4 * vgs_eff * vgs_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; @@ -2394,7 +2420,11 @@ for (; model != NULL; model = model->BSIM4nextModel) T2 = vgd * vgd_eff; dT2_dVg = vgd * dvgd_eff_dvg + vgd_eff; - T5 = T12 * (pParam->BSIM4aigsd + T3 * vgd_eff + T11 = pParam->BSIM4AechvbEdgeD; + T3 = pParam->BSIM4aigd * pParam->BSIM4cigd + - pParam->BSIM4bigd; + T4 = pParam->BSIM4bigd * pParam->BSIM4cigd; + T5 = T12 * (pParam->BSIM4aigd + T3 * vgd_eff - T4 * vgd_eff * vgd_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; diff --git a/src/spicelib/devices/bsim4/b4mask.c b/src/spicelib/devices/bsim4/b4mask.c index 49626213d..1f8a2f08e 100644 --- a/src/spicelib/devices/bsim4/b4mask.c +++ b/src/spicelib/devices/bsim4/b4mask.c @@ -1,16 +1,18 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4mask.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4mask.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006 **********/ @@ -411,6 +413,18 @@ IFvalue *value; case BSIM4_MOD_EGIDL: value->rValue = model->BSIM4egidl; return(OK); + case BSIM4_MOD_AGISL: + value->rValue = model->BSIM4agisl; + return(OK); + case BSIM4_MOD_BGISL: + value->rValue = model->BSIM4bgisl; + return(OK); + case BSIM4_MOD_CGISL: + value->rValue = model->BSIM4cgisl; + return(OK); + case BSIM4_MOD_EGISL: + value->rValue = model->BSIM4egisl; + return(OK); case BSIM4_MOD_AIGC: value->rValue = model->BSIM4aigc; return(OK); @@ -429,6 +443,24 @@ IFvalue *value; case BSIM4_MOD_CIGSD: value->rValue = model->BSIM4cigsd; return(OK); + case BSIM4_MOD_AIGS: + value->rValue = model->BSIM4aigs; + return(OK); + case BSIM4_MOD_BIGS: + value->rValue = model->BSIM4bigs; + return(OK); + case BSIM4_MOD_CIGS: + value->rValue = model->BSIM4cigs; + return(OK); + case BSIM4_MOD_AIGD: + value->rValue = model->BSIM4aigd; + return(OK); + case BSIM4_MOD_BIGD: + value->rValue = model->BSIM4bigd; + return(OK); + case BSIM4_MOD_CIGD: + value->rValue = model->BSIM4cigd; + return(OK); case BSIM4_MOD_AIGBACC: value->rValue = model->BSIM4aigbacc; return(OK); @@ -547,6 +579,15 @@ IFvalue *value; case BSIM4_MOD_NJTSSWG: value->rValue = model->BSIM4njtsswg; return(OK); + case BSIM4_MOD_NJTSD: + value->rValue = model->BSIM4njtsd; + return(OK); + case BSIM4_MOD_NJTSSWD: + value->rValue = model->BSIM4njtsswd; + return(OK); + case BSIM4_MOD_NJTSSWGD: + value->rValue = model->BSIM4njtsswgd; + return(OK); case BSIM4_MOD_XTSS: value->rValue = model->BSIM4xtss; return(OK); @@ -574,6 +615,15 @@ IFvalue *value; case BSIM4_MOD_TNJTSSWG: value->rValue = model->BSIM4tnjtsswg; return(OK); + case BSIM4_MOD_TNJTSD: + value->rValue = model->BSIM4tnjtsd; + return(OK); + case BSIM4_MOD_TNJTSSWD: + value->rValue = model->BSIM4tnjtsswd; + return(OK); + case BSIM4_MOD_TNJTSSWGD: + value->rValue = model->BSIM4tnjtsswgd; + return(OK); case BSIM4_MOD_VTSS: value->rValue = model->BSIM4vtss; return(OK); @@ -729,6 +779,9 @@ IFvalue *value; case BSIM4_MOD_DLCIG: value->rValue = model->BSIM4dlcig; return(OK); + case BSIM4_MOD_DLCIGD: + value->rValue = model->BSIM4dlcigd; + return(OK); case BSIM4_MOD_DWJ: value->rValue = model->BSIM4dwj; return(OK); @@ -1055,6 +1108,18 @@ IFvalue *value; case BSIM4_MOD_LEGIDL: value->rValue = model->BSIM4legidl; return(OK); + case BSIM4_MOD_LAGISL: + value->rValue = model->BSIM4lagisl; + return(OK); + case BSIM4_MOD_LBGISL: + value->rValue = model->BSIM4lbgisl; + return(OK); + case BSIM4_MOD_LCGISL: + value->rValue = model->BSIM4lcgisl; + return(OK); + case BSIM4_MOD_LEGISL: + value->rValue = model->BSIM4legisl; + return(OK); case BSIM4_MOD_LAIGC: value->rValue = model->BSIM4laigc; return(OK); @@ -1073,6 +1138,24 @@ IFvalue *value; case BSIM4_MOD_LCIGSD: value->rValue = model->BSIM4lcigsd; return(OK); + case BSIM4_MOD_LAIGS: + value->rValue = model->BSIM4laigs; + return(OK); + case BSIM4_MOD_LBIGS: + value->rValue = model->BSIM4lbigs; + return(OK); + case BSIM4_MOD_LCIGS: + value->rValue = model->BSIM4lcigs; + return(OK); + case BSIM4_MOD_LAIGD: + value->rValue = model->BSIM4laigd; + return(OK); + case BSIM4_MOD_LBIGD: + value->rValue = model->BSIM4lbigd; + return(OK); + case BSIM4_MOD_LCIGD: + value->rValue = model->BSIM4lcigd; + return(OK); case BSIM4_MOD_LAIGBACC: value->rValue = model->BSIM4laigbacc; return(OK); @@ -1439,6 +1522,18 @@ IFvalue *value; case BSIM4_MOD_WEGIDL: value->rValue = model->BSIM4wegidl; return(OK); + case BSIM4_MOD_WAGISL: + value->rValue = model->BSIM4wagisl; + return(OK); + case BSIM4_MOD_WBGISL: + value->rValue = model->BSIM4wbgisl; + return(OK); + case BSIM4_MOD_WCGISL: + value->rValue = model->BSIM4wcgisl; + return(OK); + case BSIM4_MOD_WEGISL: + value->rValue = model->BSIM4wegisl; + return(OK); case BSIM4_MOD_WAIGC: value->rValue = model->BSIM4waigc; return(OK); @@ -1457,6 +1552,24 @@ IFvalue *value; case BSIM4_MOD_WCIGSD: value->rValue = model->BSIM4wcigsd; return(OK); + case BSIM4_MOD_WAIGS: + value->rValue = model->BSIM4waigs; + return(OK); + case BSIM4_MOD_WBIGS: + value->rValue = model->BSIM4wbigs; + return(OK); + case BSIM4_MOD_WCIGS: + value->rValue = model->BSIM4wcigs; + return(OK); + case BSIM4_MOD_WAIGD: + value->rValue = model->BSIM4waigd; + return(OK); + case BSIM4_MOD_WBIGD: + value->rValue = model->BSIM4wbigd; + return(OK); + case BSIM4_MOD_WCIGD: + value->rValue = model->BSIM4wcigd; + return(OK); case BSIM4_MOD_WAIGBACC: value->rValue = model->BSIM4waigbacc; return(OK); @@ -1823,6 +1936,18 @@ IFvalue *value; case BSIM4_MOD_PEGIDL: value->rValue = model->BSIM4pegidl; return(OK); + case BSIM4_MOD_PAGISL: + value->rValue = model->BSIM4pagisl; + return(OK); + case BSIM4_MOD_PBGISL: + value->rValue = model->BSIM4pbgisl; + return(OK); + case BSIM4_MOD_PCGISL: + value->rValue = model->BSIM4pcgisl; + return(OK); + case BSIM4_MOD_PEGISL: + value->rValue = model->BSIM4pegisl; + return(OK); case BSIM4_MOD_PAIGC: value->rValue = model->BSIM4paigc; return(OK); @@ -1841,6 +1966,24 @@ IFvalue *value; case BSIM4_MOD_PCIGSD: value->rValue = model->BSIM4pcigsd; return(OK); + case BSIM4_MOD_PAIGS: + value->rValue = model->BSIM4paigs; + return(OK); + case BSIM4_MOD_PBIGS: + value->rValue = model->BSIM4pbigs; + return(OK); + case BSIM4_MOD_PCIGS: + value->rValue = model->BSIM4pcigs; + return(OK); + case BSIM4_MOD_PAIGD: + value->rValue = model->BSIM4paigd; + return(OK); + case BSIM4_MOD_PBIGD: + value->rValue = model->BSIM4pbigd; + return(OK); + case BSIM4_MOD_PCIGD: + value->rValue = model->BSIM4pcigd; + return(OK); case BSIM4_MOD_PAIGBACC: value->rValue = model->BSIM4paigbacc; return(OK); diff --git a/src/spicelib/devices/bsim4/b4mdel.c b/src/spicelib/devices/bsim4/b4mdel.c index 66f16782e..eb1e9d468 100644 --- a/src/spicelib/devices/bsim4/b4mdel.c +++ b/src/spicelib/devices/bsim4/b4mdel.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4mdel.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4mdel.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ diff --git a/src/spicelib/devices/bsim4/b4mpar.c b/src/spicelib/devices/bsim4/b4mpar.c index 614b3649a..3c9ff24ff 100644 --- a/src/spicelib/devices/bsim4/b4mpar.c +++ b/src/spicelib/devices/bsim4/b4mpar.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4mpar.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4mpar.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. @@ -12,6 +13,7 @@ * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006 **********/ #include "ngspice.h" @@ -547,6 +549,10 @@ GENmodel *inMod; mod->BSIM4alpha1 = value->rValue; mod->BSIM4alpha1Given = TRUE; break; + case BSIM4_MOD_PHIN : + mod->BSIM4phin = value->rValue; + mod->BSIM4phinGiven = TRUE; + break; case BSIM4_MOD_AGIDL : mod->BSIM4agidl = value->rValue; mod->BSIM4agidlGiven = TRUE; @@ -559,14 +565,26 @@ GENmodel *inMod; mod->BSIM4cgidl = value->rValue; mod->BSIM4cgidlGiven = TRUE; break; - case BSIM4_MOD_PHIN : - mod->BSIM4phin = value->rValue; - mod->BSIM4phinGiven = TRUE; - break; case BSIM4_MOD_EGIDL : mod->BSIM4egidl = value->rValue; mod->BSIM4egidlGiven = TRUE; break; + case BSIM4_MOD_AGISL : + mod->BSIM4agisl = value->rValue; + mod->BSIM4agislGiven = TRUE; + break; + case BSIM4_MOD_BGISL : + mod->BSIM4bgisl = value->rValue; + mod->BSIM4bgislGiven = TRUE; + break; + case BSIM4_MOD_CGISL : + mod->BSIM4cgisl = value->rValue; + mod->BSIM4cgislGiven = TRUE; + break; + case BSIM4_MOD_EGISL : + mod->BSIM4egisl = value->rValue; + mod->BSIM4egislGiven = TRUE; + break; case BSIM4_MOD_AIGC : mod->BSIM4aigc = value->rValue; mod->BSIM4aigcGiven = TRUE; @@ -591,6 +609,30 @@ GENmodel *inMod; mod->BSIM4cigsd = value->rValue; mod->BSIM4cigsdGiven = TRUE; break; + case BSIM4_MOD_AIGS : + mod->BSIM4aigs = value->rValue; + mod->BSIM4aigsGiven = TRUE; + break; + case BSIM4_MOD_BIGS : + mod->BSIM4bigs = value->rValue; + mod->BSIM4bigsGiven = TRUE; + break; + case BSIM4_MOD_CIGS : + mod->BSIM4cigs = value->rValue; + mod->BSIM4cigsGiven = TRUE; + break; + case BSIM4_MOD_AIGD : + mod->BSIM4aigd = value->rValue; + mod->BSIM4aigdGiven = TRUE; + break; + case BSIM4_MOD_BIGD : + mod->BSIM4bigd = value->rValue; + mod->BSIM4bigdGiven = TRUE; + break; + case BSIM4_MOD_CIGD : + mod->BSIM4cigd = value->rValue; + mod->BSIM4cigdGiven = TRUE; + break; case BSIM4_MOD_AIGBACC : mod->BSIM4aigbacc = value->rValue; mod->BSIM4aigbaccGiven = TRUE; @@ -925,6 +967,18 @@ GENmodel *inMod; mod->BSIM4njtsswg = value->rValue; mod->BSIM4njtsswgGiven = TRUE; break; + case BSIM4_MOD_NJTSD : + mod->BSIM4njtsd = value->rValue; + mod->BSIM4njtsdGiven = TRUE; + break; + case BSIM4_MOD_NJTSSWD : + mod->BSIM4njtsswd = value->rValue; + mod->BSIM4njtsswdGiven = TRUE; + break; + case BSIM4_MOD_NJTSSWGD : + mod->BSIM4njtsswgd = value->rValue; + mod->BSIM4njtsswgdGiven = TRUE; + break; case BSIM4_MOD_XTSS : mod->BSIM4xtss = value->rValue; mod->BSIM4xtssGiven = TRUE; @@ -961,6 +1015,18 @@ GENmodel *inMod; mod->BSIM4tnjtsswg = value->rValue; mod->BSIM4tnjtsswgGiven = TRUE; break; + case BSIM4_MOD_TNJTSD : + mod->BSIM4tnjtsd = value->rValue; + mod->BSIM4tnjtsdGiven = TRUE; + break; + case BSIM4_MOD_TNJTSSWD : + mod->BSIM4tnjtsswd = value->rValue; + mod->BSIM4tnjtsswdGiven = TRUE; + break; + case BSIM4_MOD_TNJTSSWGD : + mod->BSIM4tnjtsswgd = value->rValue; + mod->BSIM4tnjtsswgdGiven = TRUE; + break; case BSIM4_MOD_VTSS : mod->BSIM4vtss = value->rValue; mod->BSIM4vtssGiven = TRUE; @@ -1173,6 +1239,10 @@ GENmodel *inMod; mod->BSIM4dlcig = value->rValue; mod->BSIM4dlcigGiven = TRUE; break; + case BSIM4_MOD_DLCIGD : + mod->BSIM4dlcigd = value->rValue; + mod->BSIM4dlcigdGiven = TRUE; + break; case BSIM4_MOD_DWJ : mod->BSIM4dwj = value->rValue; mod->BSIM4dwjGiven = TRUE; @@ -1589,6 +1659,10 @@ GENmodel *inMod; mod->BSIM4lbeta0 = value->rValue; mod->BSIM4lbeta0Given = TRUE; break; + case BSIM4_MOD_LPHIN : + mod->BSIM4lphin = value->rValue; + mod->BSIM4lphinGiven = TRUE; + break; case BSIM4_MOD_LAGIDL : mod->BSIM4lagidl = value->rValue; mod->BSIM4lagidlGiven = TRUE; @@ -1601,14 +1675,26 @@ GENmodel *inMod; mod->BSIM4lcgidl = value->rValue; mod->BSIM4lcgidlGiven = TRUE; break; - case BSIM4_MOD_LPHIN : - mod->BSIM4lphin = value->rValue; - mod->BSIM4lphinGiven = TRUE; - break; case BSIM4_MOD_LEGIDL : mod->BSIM4legidl = value->rValue; mod->BSIM4legidlGiven = TRUE; break; + case BSIM4_MOD_LAGISL : + mod->BSIM4lagisl = value->rValue; + mod->BSIM4lagislGiven = TRUE; + break; + case BSIM4_MOD_LBGISL : + mod->BSIM4lbgisl = value->rValue; + mod->BSIM4lbgislGiven = TRUE; + break; + case BSIM4_MOD_LCGISL : + mod->BSIM4lcgisl = value->rValue; + mod->BSIM4lcgislGiven = TRUE; + break; + case BSIM4_MOD_LEGISL : + mod->BSIM4legisl = value->rValue; + mod->BSIM4legislGiven = TRUE; + break; case BSIM4_MOD_LAIGC : mod->BSIM4laigc = value->rValue; mod->BSIM4laigcGiven = TRUE; @@ -1633,6 +1719,30 @@ GENmodel *inMod; mod->BSIM4lcigsd = value->rValue; mod->BSIM4lcigsdGiven = TRUE; break; + case BSIM4_MOD_LAIGS : + mod->BSIM4laigs = value->rValue; + mod->BSIM4laigsGiven = TRUE; + break; + case BSIM4_MOD_LBIGS : + mod->BSIM4lbigs = value->rValue; + mod->BSIM4lbigsGiven = TRUE; + break; + case BSIM4_MOD_LCIGS : + mod->BSIM4lcigs = value->rValue; + mod->BSIM4lcigsGiven = TRUE; + break; + case BSIM4_MOD_LAIGD : + mod->BSIM4laigd = value->rValue; + mod->BSIM4laigdGiven = TRUE; + break; + case BSIM4_MOD_LBIGD : + mod->BSIM4lbigd = value->rValue; + mod->BSIM4lbigdGiven = TRUE; + break; + case BSIM4_MOD_LCIGD : + mod->BSIM4lcigd = value->rValue; + mod->BSIM4lcigdGiven = TRUE; + break; case BSIM4_MOD_LAIGBACC : mod->BSIM4laigbacc = value->rValue; mod->BSIM4laigbaccGiven = TRUE; @@ -2105,6 +2215,10 @@ GENmodel *inMod; mod->BSIM4wbeta0 = value->rValue; mod->BSIM4wbeta0Given = TRUE; break; + case BSIM4_MOD_WPHIN : + mod->BSIM4wphin = value->rValue; + mod->BSIM4wphinGiven = TRUE; + break; case BSIM4_MOD_WAGIDL : mod->BSIM4wagidl = value->rValue; mod->BSIM4wagidlGiven = TRUE; @@ -2117,14 +2231,26 @@ GENmodel *inMod; mod->BSIM4wcgidl = value->rValue; mod->BSIM4wcgidlGiven = TRUE; break; - case BSIM4_MOD_WPHIN : - mod->BSIM4wphin = value->rValue; - mod->BSIM4wphinGiven = TRUE; - break; case BSIM4_MOD_WEGIDL : mod->BSIM4wegidl = value->rValue; mod->BSIM4wegidlGiven = TRUE; break; + case BSIM4_MOD_WAGISL : + mod->BSIM4wagisl = value->rValue; + mod->BSIM4wagislGiven = TRUE; + break; + case BSIM4_MOD_WBGISL : + mod->BSIM4wbgisl = value->rValue; + mod->BSIM4wbgislGiven = TRUE; + break; + case BSIM4_MOD_WCGISL : + mod->BSIM4wcgisl = value->rValue; + mod->BSIM4wcgislGiven = TRUE; + break; + case BSIM4_MOD_WEGISL : + mod->BSIM4wegisl = value->rValue; + mod->BSIM4wegislGiven = TRUE; + break; case BSIM4_MOD_WAIGC : mod->BSIM4waigc = value->rValue; mod->BSIM4waigcGiven = TRUE; @@ -2149,6 +2275,30 @@ GENmodel *inMod; mod->BSIM4wcigsd = value->rValue; mod->BSIM4wcigsdGiven = TRUE; break; + case BSIM4_MOD_WAIGS : + mod->BSIM4waigs = value->rValue; + mod->BSIM4waigsGiven = TRUE; + break; + case BSIM4_MOD_WBIGS : + mod->BSIM4wbigs = value->rValue; + mod->BSIM4wbigsGiven = TRUE; + break; + case BSIM4_MOD_WCIGS : + mod->BSIM4wcigs = value->rValue; + mod->BSIM4wcigsGiven = TRUE; + break; + case BSIM4_MOD_WAIGD : + mod->BSIM4waigd = value->rValue; + mod->BSIM4waigdGiven = TRUE; + break; + case BSIM4_MOD_WBIGD : + mod->BSIM4wbigd = value->rValue; + mod->BSIM4wbigdGiven = TRUE; + break; + case BSIM4_MOD_WCIGD : + mod->BSIM4wcigd = value->rValue; + mod->BSIM4wcigdGiven = TRUE; + break; case BSIM4_MOD_WAIGBACC : mod->BSIM4waigbacc = value->rValue; mod->BSIM4waigbaccGiven = TRUE; @@ -2621,6 +2771,10 @@ GENmodel *inMod; mod->BSIM4pbeta0 = value->rValue; mod->BSIM4pbeta0Given = TRUE; break; + case BSIM4_MOD_PPHIN : + mod->BSIM4pphin = value->rValue; + mod->BSIM4pphinGiven = TRUE; + break; case BSIM4_MOD_PAGIDL : mod->BSIM4pagidl = value->rValue; mod->BSIM4pagidlGiven = TRUE; @@ -2633,14 +2787,26 @@ GENmodel *inMod; mod->BSIM4pcgidl = value->rValue; mod->BSIM4pcgidlGiven = TRUE; break; - case BSIM4_MOD_PPHIN : - mod->BSIM4pphin = value->rValue; - mod->BSIM4pphinGiven = TRUE; - break; case BSIM4_MOD_PEGIDL : mod->BSIM4pegidl = value->rValue; mod->BSIM4pegidlGiven = TRUE; break; + case BSIM4_MOD_PAGISL : + mod->BSIM4pagisl = value->rValue; + mod->BSIM4pagislGiven = TRUE; + break; + case BSIM4_MOD_PBGISL : + mod->BSIM4pbgisl = value->rValue; + mod->BSIM4pbgislGiven = TRUE; + break; + case BSIM4_MOD_PCGISL : + mod->BSIM4pcgisl = value->rValue; + mod->BSIM4pcgislGiven = TRUE; + break; + case BSIM4_MOD_PEGISL : + mod->BSIM4pegisl = value->rValue; + mod->BSIM4pegislGiven = TRUE; + break; case BSIM4_MOD_PAIGC : mod->BSIM4paigc = value->rValue; mod->BSIM4paigcGiven = TRUE; @@ -2665,6 +2831,30 @@ GENmodel *inMod; mod->BSIM4pcigsd = value->rValue; mod->BSIM4pcigsdGiven = TRUE; break; + case BSIM4_MOD_PAIGS : + mod->BSIM4paigs = value->rValue; + mod->BSIM4paigsGiven = TRUE; + break; + case BSIM4_MOD_PBIGS : + mod->BSIM4pbigs = value->rValue; + mod->BSIM4pbigsGiven = TRUE; + break; + case BSIM4_MOD_PCIGS : + mod->BSIM4pcigs = value->rValue; + mod->BSIM4pcigsGiven = TRUE; + break; + case BSIM4_MOD_PAIGD : + mod->BSIM4paigd = value->rValue; + mod->BSIM4paigdGiven = TRUE; + break; + case BSIM4_MOD_PBIGD : + mod->BSIM4pbigd = value->rValue; + mod->BSIM4pbigdGiven = TRUE; + break; + case BSIM4_MOD_PCIGD : + mod->BSIM4pcigd = value->rValue; + mod->BSIM4pcigdGiven = TRUE; + break; case BSIM4_MOD_PAIGBACC : mod->BSIM4paigbacc = value->rValue; mod->BSIM4paigbaccGiven = TRUE; diff --git a/src/spicelib/devices/bsim4/b4noi.c b/src/spicelib/devices/bsim4/b4noi.c index 551867f41..2e1d1e521 100644 --- a/src/spicelib/devices/bsim4/b4noi.c +++ b/src/spicelib/devices/bsim4/b4noi.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4noi.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4noi.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. @@ -12,6 +13,7 @@ * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006 **********/ #include "ngspice.h" @@ -93,7 +95,7 @@ double tempInoise; double noizDens[BSIM4NSRCS]; double lnNdens[BSIM4NSRCS]; -double T0, T1, T2, T5, T10, T11; +double T0, T1, T2, T5, T10, T11; double Vds, Ssi, Swi; double tmp=0.0, gdpr, gspr, npart_theta=0.0, npart_beta=0.0, igsquare, bodymode; @@ -240,12 +242,21 @@ int i; gspr * m); - if ((here->BSIM4rgateMod == 1) || (here->BSIM4rgateMod == 2)) + if (here->BSIM4rgateMod == 1) { NevalSrc(&noizDens[BSIM4RGNOIZ], &lnNdens[BSIM4RGNOIZ], ckt, THERMNOISE, here->BSIM4gNodePrime, here->BSIM4gNodeExt, here->BSIM4grgeltd * m); } + else if (here->BSIM4rgateMod == 2) + { + T0 = 1.0 + here->BSIM4grgeltd/here->BSIM4gcrg; + T1 = T0 * T0; + NevalSrc(&noizDens[BSIM4RGNOIZ], + &lnNdens[BSIM4RGNOIZ], ckt, THERMNOISE, + here->BSIM4gNodePrime, here->BSIM4gNodeExt, + here->BSIM4grgeltd * m / T1); + } else if (here->BSIM4rgateMod == 3) { NevalSrc(&noizDens[BSIM4RGNOIZ], &lnNdens[BSIM4RGNOIZ], ckt, THERMNOISE, diff --git a/src/spicelib/devices/bsim4/b4par.c b/src/spicelib/devices/bsim4/b4par.c index 58abee1dc..c5c1020f4 100644 --- a/src/spicelib/devices/bsim4/b4par.c +++ b/src/spicelib/devices/bsim4/b4par.c @@ -1,8 +1,8 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2004 Regents of the University of California. All rights reserved. - * File: b4par.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4par.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. diff --git a/src/spicelib/devices/bsim4/b4pzld.c b/src/spicelib/devices/bsim4/b4pzld.c index 484ed1452..a53a8811d 100644 --- a/src/spicelib/devices/bsim4/b4pzld.c +++ b/src/spicelib/devices/bsim4/b4pzld.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4pzld.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4pzld.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ diff --git a/src/spicelib/devices/bsim4/b4set.c b/src/spicelib/devices/bsim4/b4set.c index babcd21ad..bb800bfd3 100644 --- a/src/spicelib/devices/bsim4/b4set.c +++ b/src/spicelib/devices/bsim4/b4set.c @@ -1,8 +1,8 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4set.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4set.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. @@ -12,6 +12,7 @@ * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006 **********/ #include "ngspice.h" @@ -174,7 +175,7 @@ JOB *job; } if (!model->BSIM4versionGiven) - model->BSIM4version = "4.5.0"; + model->BSIM4version = "4.6.0"; if (!model->BSIM4toxrefGiven) model->BSIM4toxref = 30.0e-10; if (!model->BSIM4toxeGiven) @@ -268,6 +269,8 @@ JOB *job; model->BSIM4dsub = model->BSIM4drout; if (!model->BSIM4vth0Given) model->BSIM4vth0 = (model->BSIM4type == NMOS) ? 0.7 : -0.7; + if (!model->BSIM4vfbGiven) + model->BSIM4vfb = -1.0; if (!model->BSIM4euGiven) model->BSIM4eu = (model->BSIM4type == NMOS) ? 1.67 : 1.0;; if (!model->BSIM4uaGiven) @@ -283,7 +286,7 @@ JOB *job; if (!model->BSIM4uc1Given) model->BSIM4uc1 = (model->BSIM4mobMod == 1) ? -0.056 : -0.056e-9; if (!model->BSIM4udGiven) - model->BSIM4ud = 1.0e14; /* unit m**(-2) */ + model->BSIM4ud = 0.0; /* unit m**(-2) */ if (!model->BSIM4ud1Given) model->BSIM4ud1 = 0.0; if (!model->BSIM4upGiven) @@ -370,18 +373,76 @@ JOB *job; model->BSIM4cgidl = 0.5; /* V^3 */ if (!model->BSIM4egidlGiven) model->BSIM4egidl = 0.8; /* V */ + if (!model->BSIM4agislGiven) + { + if (model->BSIM4agidlGiven) + model->BSIM4agisl = model->BSIM4agidl; + else + model->BSIM4agisl = 0.0; + } + if (!model->BSIM4bgislGiven) + { + if (model->BSIM4bgidlGiven) + model->BSIM4bgisl = model->BSIM4bgidl; + else + model->BSIM4bgisl = 2.3e9; /* V/m */ + } + if (!model->BSIM4cgislGiven) + { + if (model->BSIM4cgidlGiven) + model->BSIM4cgisl = model->BSIM4cgidl; + else + model->BSIM4cgisl = 0.5; /* V^3 */ + } + if (!model->BSIM4egislGiven) + { + if (model->BSIM4egidlGiven) + model->BSIM4egisl = model->BSIM4egidl; + else + model->BSIM4egisl = 0.8; /* V */ + } if (!model->BSIM4aigcGiven) model->BSIM4aigc = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4bigcGiven) model->BSIM4bigc = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4cigcGiven) model->BSIM4cigc = (model->BSIM4type == NMOS) ? 0.075 : 0.03; - if (!model->BSIM4aigsdGiven) + if (model->BSIM4aigsdGiven) + { + model->BSIM4aigs = model->BSIM4aigd = model->BSIM4aigsd; + } + else + { model->BSIM4aigsd = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; - if (!model->BSIM4bigsdGiven) + if (!model->BSIM4aigsGiven) + model->BSIM4aigs = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; + if (!model->BSIM4aigdGiven) + model->BSIM4aigd = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; + } + if (model->BSIM4bigsdGiven) + { + model->BSIM4bigs = model->BSIM4bigd = model->BSIM4bigsd; + } + else + { model->BSIM4bigsd = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; - if (!model->BSIM4cigsdGiven) - model->BSIM4cigsd = (model->BSIM4type == NMOS) ? 0.075 : 0.03; + if (!model->BSIM4bigsGiven) + model->BSIM4bigs = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; + if (!model->BSIM4bigdGiven) + model->BSIM4bigd = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; + } + if (model->BSIM4cigsdGiven) + { + model->BSIM4cigs = model->BSIM4cigd = model->BSIM4cigsd; + } + else + { + model->BSIM4cigsd = (model->BSIM4type == NMOS) ? 0.075 : 0.03; + if (!model->BSIM4cigsGiven) + model->BSIM4cigs = (model->BSIM4type == NMOS) ? 0.075 : 0.03; + if (!model->BSIM4cigdGiven) + model->BSIM4cigd = (model->BSIM4type == NMOS) ? 0.075 : 0.03; + } if (!model->BSIM4aigbaccGiven) model->BSIM4aigbacc = 1.36e-2; if (!model->BSIM4bigbaccGiven) @@ -749,18 +810,79 @@ JOB *job; model->BSIM4lcgidl = 0.0; if (!model->BSIM4legidlGiven) model->BSIM4legidl = 0.0; + if (!model->BSIM4lagislGiven) + { + if (model->BSIM4lagidlGiven) + model->BSIM4lagisl = model->BSIM4lagidl; + else + model->BSIM4lagisl = 0.0; + } + if (!model->BSIM4lbgislGiven) + { + if (model->BSIM4lbgidlGiven) + model->BSIM4lbgisl = model->BSIM4lbgidl; + else + model->BSIM4lbgisl = 0.0; + } + if (!model->BSIM4lcgislGiven) + { + if (model->BSIM4lcgidlGiven) + model->BSIM4lcgisl = model->BSIM4lcgidl; + else + model->BSIM4lcgisl = 0.0; + } + if (!model->BSIM4legislGiven) + { + if (model->BSIM4legidlGiven) + model->BSIM4legisl = model->BSIM4legidl; + else + model->BSIM4legisl = 0.0; + } if (!model->BSIM4laigcGiven) model->BSIM4laigc = 0.0; if (!model->BSIM4lbigcGiven) model->BSIM4lbigc = 0.0; if (!model->BSIM4lcigcGiven) model->BSIM4lcigc = 0.0; - if (!model->BSIM4laigsdGiven) - model->BSIM4laigsd = 0.0; - if (!model->BSIM4lbigsdGiven) - model->BSIM4lbigsd = 0.0; - if (!model->BSIM4lcigsdGiven) - model->BSIM4lcigsd = 0.0; + if (!model->BSIM4aigsdGiven && (model->BSIM4aigsGiven || model->BSIM4aigdGiven)) + { + if (!model->BSIM4laigsGiven) + model->BSIM4laigs = 0.0; + if (!model->BSIM4laigdGiven) + model->BSIM4laigd = 0.0; + } + else + { + if (!model->BSIM4laigsdGiven) + model->BSIM4laigsd = 0.0; + model->BSIM4laigs = model->BSIM4laigd = model->BSIM4laigsd; + } + if (!model->BSIM4bigsdGiven && (model->BSIM4bigsGiven || model->BSIM4bigdGiven)) + { + if (!model->BSIM4lbigsGiven) + model->BSIM4lbigs = 0.0; + if (!model->BSIM4lbigdGiven) + model->BSIM4lbigd = 0.0; + } + else + { + if (!model->BSIM4lbigsdGiven) + model->BSIM4lbigsd = 0.0; + model->BSIM4lbigs = model->BSIM4lbigd = model->BSIM4lbigsd; + } + if (!model->BSIM4cigsdGiven && (model->BSIM4cigsGiven || model->BSIM4cigdGiven)) + { + if (!model->BSIM4lcigsGiven) + model->BSIM4lcigs = 0.0; + if (!model->BSIM4lcigdGiven) + model->BSIM4lcigd = 0.0; + } + else + { + if (!model->BSIM4lcigsdGiven) + model->BSIM4lcigsd = 0.0; + model->BSIM4lcigs = model->BSIM4lcigd = model->BSIM4lcigsd; + } if (!model->BSIM4laigbaccGiven) model->BSIM4laigbacc = 0.0; if (!model->BSIM4lbigbaccGiven) @@ -1003,18 +1125,79 @@ JOB *job; model->BSIM4wcgidl = 0.0; if (!model->BSIM4wegidlGiven) model->BSIM4wegidl = 0.0; + if (!model->BSIM4wagislGiven) + { + if (model->BSIM4wagidlGiven) + model->BSIM4wagisl = model->BSIM4wagidl; + else + model->BSIM4wagisl = 0.0; + } + if (!model->BSIM4wbgislGiven) + { + if (model->BSIM4wbgidlGiven) + model->BSIM4wbgisl = model->BSIM4wbgidl; + else + model->BSIM4wbgisl = 0.0; + } + if (!model->BSIM4wcgislGiven) + { + if (model->BSIM4wcgidlGiven) + model->BSIM4wcgisl = model->BSIM4wcgidl; + else + model->BSIM4wcgisl = 0.0; + } + if (!model->BSIM4wegislGiven) + { + if (model->BSIM4wegidlGiven) + model->BSIM4wegisl = model->BSIM4wegidl; + else + model->BSIM4wegisl = 0.0; + } if (!model->BSIM4waigcGiven) model->BSIM4waigc = 0.0; if (!model->BSIM4wbigcGiven) model->BSIM4wbigc = 0.0; if (!model->BSIM4wcigcGiven) model->BSIM4wcigc = 0.0; - if (!model->BSIM4waigsdGiven) - model->BSIM4waigsd = 0.0; - if (!model->BSIM4wbigsdGiven) - model->BSIM4wbigsd = 0.0; - if (!model->BSIM4wcigsdGiven) - model->BSIM4wcigsd = 0.0; + if (!model->BSIM4aigsdGiven && (model->BSIM4aigsGiven || model->BSIM4aigdGiven)) + { + if (!model->BSIM4waigsGiven) + model->BSIM4waigs = 0.0; + if (!model->BSIM4waigdGiven) + model->BSIM4waigd = 0.0; + } + else + { + if (!model->BSIM4waigsdGiven) + model->BSIM4waigsd = 0.0; + model->BSIM4waigs = model->BSIM4waigd = model->BSIM4waigsd; + } + if (!model->BSIM4bigsdGiven && (model->BSIM4bigsGiven || model->BSIM4bigdGiven)) + { + if (!model->BSIM4wbigsGiven) + model->BSIM4wbigs = 0.0; + if (!model->BSIM4wbigdGiven) + model->BSIM4wbigd = 0.0; + } + else + { + if (!model->BSIM4wbigsdGiven) + model->BSIM4wbigsd = 0.0; + model->BSIM4wbigs = model->BSIM4wbigd = model->BSIM4wbigsd; + } + if (!model->BSIM4cigsdGiven && (model->BSIM4cigsGiven || model->BSIM4cigdGiven)) + { + if (!model->BSIM4wcigsGiven) + model->BSIM4wcigs = 0.0; + if (!model->BSIM4wcigdGiven) + model->BSIM4wcigd = 0.0; + } + else + { + if (!model->BSIM4wcigsdGiven) + model->BSIM4wcigsd = 0.0; + model->BSIM4wcigs = model->BSIM4wcigd = model->BSIM4wcigsd; + } if (!model->BSIM4waigbaccGiven) model->BSIM4waigbacc = 0.0; if (!model->BSIM4wbigbaccGiven) @@ -1257,18 +1440,79 @@ JOB *job; model->BSIM4pcgidl = 0.0; if (!model->BSIM4pegidlGiven) model->BSIM4pegidl = 0.0; + if (!model->BSIM4pagislGiven) + { + if (model->BSIM4pagidlGiven) + model->BSIM4pagisl = model->BSIM4pagidl; + else + model->BSIM4pagisl = 0.0; + } + if (!model->BSIM4pbgislGiven) + { + if (model->BSIM4pbgidlGiven) + model->BSIM4pbgisl = model->BSIM4pbgidl; + else + model->BSIM4pbgisl = 0.0; + } + if (!model->BSIM4pcgislGiven) + { + if (model->BSIM4pcgidlGiven) + model->BSIM4pcgisl = model->BSIM4pcgidl; + else + model->BSIM4pcgisl = 0.0; + } + if (!model->BSIM4pegislGiven) + { + if (model->BSIM4pegidlGiven) + model->BSIM4pegisl = model->BSIM4pegidl; + else + model->BSIM4pegisl = 0.0; + } if (!model->BSIM4paigcGiven) model->BSIM4paigc = 0.0; if (!model->BSIM4pbigcGiven) model->BSIM4pbigc = 0.0; if (!model->BSIM4pcigcGiven) model->BSIM4pcigc = 0.0; - if (!model->BSIM4paigsdGiven) - model->BSIM4paigsd = 0.0; - if (!model->BSIM4pbigsdGiven) - model->BSIM4pbigsd = 0.0; - if (!model->BSIM4pcigsdGiven) - model->BSIM4pcigsd = 0.0; + if (!model->BSIM4aigsdGiven && (model->BSIM4aigsGiven || model->BSIM4aigdGiven)) + { + if (!model->BSIM4paigsGiven) + model->BSIM4paigs = 0.0; + if (!model->BSIM4paigdGiven) + model->BSIM4paigd = 0.0; + } + else + { + if (!model->BSIM4paigsdGiven) + model->BSIM4paigsd = 0.0; + model->BSIM4paigs = model->BSIM4paigd = model->BSIM4paigsd; + } + if (!model->BSIM4bigsdGiven && (model->BSIM4bigsGiven || model->BSIM4bigdGiven)) + { + if (!model->BSIM4pbigsGiven) + model->BSIM4pbigs = 0.0; + if (!model->BSIM4pbigdGiven) + model->BSIM4pbigd = 0.0; + } + else + { + if (!model->BSIM4pbigsdGiven) + model->BSIM4pbigsd = 0.0; + model->BSIM4pbigs = model->BSIM4pbigd = model->BSIM4pbigsd; + } + if (!model->BSIM4cigsdGiven && (model->BSIM4cigsGiven || model->BSIM4cigdGiven)) + { + if (!model->BSIM4pcigsGiven) + model->BSIM4pcigs = 0.0; + if (!model->BSIM4pcigdGiven) + model->BSIM4pcigd = 0.0; + } + else + { + if (!model->BSIM4pcigsdGiven) + model->BSIM4pcigsd = 0.0; + model->BSIM4pcigs = model->BSIM4pcigd = model->BSIM4pcigsd; + } if (!model->BSIM4paigbaccGiven) model->BSIM4paigbacc = 0.0; if (!model->BSIM4pbigbaccGiven) @@ -1423,6 +1667,13 @@ JOB *job; model->BSIM4xw = 0.0; if (!model->BSIM4dlcigGiven) model->BSIM4dlcig = model->BSIM4Lint; + if (!model->BSIM4dlcigdGiven) + { + if (model->BSIM4dlcigGiven) + model->BSIM4dlcigd = model->BSIM4dlcig; + else + model->BSIM4dlcigd = model->BSIM4Lint; + } if (!model->BSIM4dwjGiven) model->BSIM4dwj = model->BSIM4dwc; if (!model->BSIM4cfGiven) @@ -1509,6 +1760,27 @@ JOB *job; model->BSIM4njtssw = 20.0; if (!model->BSIM4njtsswgGiven) model->BSIM4njtsswg = 20.0; + if (!model->BSIM4njtsdGiven) + { + if (model->BSIM4njtsGiven) + model->BSIM4njtsd = model->BSIM4njts; + else + model->BSIM4njtsd = 20.0; + } + if (!model->BSIM4njtsswdGiven) + { + if (model->BSIM4njtsswGiven) + model->BSIM4njtsswd = model->BSIM4njtssw; + else + model->BSIM4njtsswd = 20.0; + } + if (!model->BSIM4njtsswgdGiven) + { + if (model->BSIM4njtsswgGiven) + model->BSIM4njtsswgd = model->BSIM4njtsswg; + else + model->BSIM4njtsswgd = 20.0; + } if (!model->BSIM4xtssGiven) model->BSIM4xtss = 0.02; if (!model->BSIM4xtsdGiven) @@ -1527,6 +1799,27 @@ JOB *job; model->BSIM4tnjtssw = 0.0; if (!model->BSIM4tnjtsswgGiven) model->BSIM4tnjtsswg = 0.0; + if (!model->BSIM4tnjtsdGiven) + { + if (model->BSIM4tnjtsGiven) + model->BSIM4tnjtsd = model->BSIM4tnjts; + else + model->BSIM4tnjtsd = 0.0; + } + if (!model->BSIM4tnjtsswdGiven) + { + if (model->BSIM4tnjtsswGiven) + model->BSIM4tnjtsswd = model->BSIM4tnjtssw; + else + model->BSIM4tnjtsswd = 0.0; + } + if (!model->BSIM4tnjtsswgdGiven) + { + if (model->BSIM4tnjtsswgGiven) + model->BSIM4tnjtsswgd = model->BSIM4tnjtsswg; + else + model->BSIM4tnjtsswgd = 0.0; + } if (!model->BSIM4vtssGiven) model->BSIM4vtss = 10.0; if (!model->BSIM4vtsdGiven) @@ -1733,7 +2026,7 @@ JOB *job; if (!here->BSIM4geoModGiven) here->BSIM4geoMod = model->BSIM4geoMod; if (!here->BSIM4rgeoModGiven) - here->BSIM4rgeoMod = 0; + here->BSIM4rgeoMod = 0.0; if (!here->BSIM4trnqsModGiven) here->BSIM4trnqsMod = model->BSIM4trnqsMod; else if ((here->BSIM4trnqsMod != 0) && (here->BSIM4trnqsMod != 1)) diff --git a/src/spicelib/devices/bsim4/b4temp.c b/src/spicelib/devices/bsim4/b4temp.c index db8034a03..b050a9de2 100644 --- a/src/spicelib/devices/bsim4/b4temp.c +++ b/src/spicelib/devices/bsim4/b4temp.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2005 Regents of the University of California. All rights reserved. - * File: b4temp.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4temp.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. @@ -12,6 +13,7 @@ * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. + * Modified by Mohan Dunga, 12/13/2006 **********/ #include "ngspice.h" @@ -841,6 +843,22 @@ int Size_Not_Found, i; + model->BSIM4legidl * Inv_L + model->BSIM4wegidl * Inv_W + model->BSIM4pegidl * Inv_LW; + pParam->BSIM4agisl = model->BSIM4agisl + + model->BSIM4lagisl * Inv_L + + model->BSIM4wagisl * Inv_W + + model->BSIM4pagisl * Inv_LW; + pParam->BSIM4bgisl = model->BSIM4bgisl + + model->BSIM4lbgisl * Inv_L + + model->BSIM4wbgisl * Inv_W + + model->BSIM4pbgisl * Inv_LW; + pParam->BSIM4cgisl = model->BSIM4cgisl + + model->BSIM4lcgisl * Inv_L + + model->BSIM4wcgisl * Inv_W + + model->BSIM4pcgisl * Inv_LW; + pParam->BSIM4egisl = model->BSIM4egisl + + model->BSIM4legisl * Inv_L + + model->BSIM4wegisl * Inv_W + + model->BSIM4pegisl * Inv_LW; pParam->BSIM4aigc = model->BSIM4aigc + model->BSIM4laigc * Inv_L + model->BSIM4waigc * Inv_W @@ -853,18 +871,30 @@ int Size_Not_Found, i; + model->BSIM4lcigc * Inv_L + model->BSIM4wcigc * Inv_W + model->BSIM4pcigc * Inv_LW; - pParam->BSIM4aigsd = model->BSIM4aigsd - + model->BSIM4laigsd * Inv_L - + model->BSIM4waigsd * Inv_W - + model->BSIM4paigsd * Inv_LW; - pParam->BSIM4bigsd = model->BSIM4bigsd - + model->BSIM4lbigsd * Inv_L - + model->BSIM4wbigsd * Inv_W - + model->BSIM4pbigsd * Inv_LW; - pParam->BSIM4cigsd = model->BSIM4cigsd - + model->BSIM4lcigsd * Inv_L - + model->BSIM4wcigsd * Inv_W - + model->BSIM4pcigsd * Inv_LW; + pParam->BSIM4aigs = model->BSIM4aigs + + model->BSIM4laigs * Inv_L + + model->BSIM4waigs * Inv_W + + model->BSIM4paigs * Inv_LW; + pParam->BSIM4bigs = model->BSIM4bigs + + model->BSIM4lbigs * Inv_L + + model->BSIM4wbigs * Inv_W + + model->BSIM4pbigs * Inv_LW; + pParam->BSIM4cigs = model->BSIM4cigs + + model->BSIM4lcigs * Inv_L + + model->BSIM4wcigs * Inv_W + + model->BSIM4pcigs * Inv_LW; + pParam->BSIM4aigd = model->BSIM4aigd + + model->BSIM4laigd * Inv_L + + model->BSIM4waigd * Inv_W + + model->BSIM4paigd * Inv_LW; + pParam->BSIM4bigd = model->BSIM4bigd + + model->BSIM4lbigd * Inv_L + + model->BSIM4wbigd * Inv_W + + model->BSIM4pbigd * Inv_LW; + pParam->BSIM4cigd = model->BSIM4cigd + + model->BSIM4lcigd * Inv_L + + model->BSIM4wcigd * Inv_W + + model->BSIM4pcigd * Inv_LW; pParam->BSIM4aigbacc = model->BSIM4aigbacc + model->BSIM4laigbacc * Inv_L + model->BSIM4waigbacc * Inv_W @@ -1147,8 +1177,10 @@ int Size_Not_Found, i; / pParam->BSIM4poxedge / pParam->BSIM4poxedge; pParam->BSIM4Aechvb = (model->BSIM4type == NMOS) ? 4.97232e-7 : 3.42537e-7; pParam->BSIM4Bechvb = (model->BSIM4type == NMOS) ? 7.45669e11 : 1.16645e12; - pParam->BSIM4AechvbEdge = pParam->BSIM4Aechvb * pParam->BSIM4weff + pParam->BSIM4AechvbEdgeS = pParam->BSIM4Aechvb * pParam->BSIM4weff * model->BSIM4dlcig * pParam->BSIM4ToxRatioEdge; + pParam->BSIM4AechvbEdgeD = pParam->BSIM4Aechvb * pParam->BSIM4weff + * model->BSIM4dlcigd * pParam->BSIM4ToxRatioEdge; pParam->BSIM4BechvbEdge = -pParam->BSIM4Bechvb * model->BSIM4toxe * pParam->BSIM4poxedge; pParam->BSIM4Aechvb *= pParam->BSIM4weff * pParam->BSIM4leff @@ -1796,9 +1828,12 @@ int Size_Not_Found, i; /* GEDL current reverse bias */ T0 = (TRatio - 1.0); - model->BSIM4njtstemp = model->BSIM4njts * (1.0 + model->BSIM4tnjts * T0); - model->BSIM4njtsswtemp = model->BSIM4njtssw * (1.0 + model->BSIM4tnjtssw * T0); - model->BSIM4njtsswgtemp = model->BSIM4njtsswg * (1.0 + model->BSIM4tnjtsswg * T0); + model->BSIM4njtsstemp = model->BSIM4njts * (1.0 + model->BSIM4tnjts * T0); + model->BSIM4njtsswstemp = model->BSIM4njtssw * (1.0 + model->BSIM4tnjtssw * T0); + model->BSIM4njtsswgstemp = model->BSIM4njtsswg * (1.0 + model->BSIM4tnjtsswg * T0); + model->BSIM4njtsdtemp = model->BSIM4njtsd * (1.0 + model->BSIM4tnjtsd * T0); + model->BSIM4njtsswdtemp = model->BSIM4njtsswd * (1.0 + model->BSIM4tnjtsswd * T0); + model->BSIM4njtsswgdtemp = model->BSIM4njtsswgd * (1.0 + model->BSIM4tnjtsswgd * T0); T7 = Eg0 / model->BSIM4vtm * T0; T9 = model->BSIM4xtss * T7; DEXP(T9, T1); @@ -1826,7 +1861,7 @@ int Size_Not_Found, i; { IFuid namarray[2]; namarray[0] = model->BSIM4modName; namarray[1] = here->BSIM4name; - (*(SPfrontEnd->IFerror)) (ERR_FATAL, "Fatal error(s) detected during BSIM4.5.0 parameter checking for %s in model %s", namarray); + (*(SPfrontEnd->IFerror)) (ERR_FATAL, "Fatal error(s) detected during BSIM4.6.0 parameter checking for %s in model %s", namarray); return(E_BADPARM); } } /* End instance */ diff --git a/src/spicelib/devices/bsim4/b4trunc.c b/src/spicelib/devices/bsim4/b4trunc.c index 2dfea6ddf..7c84a2398 100644 --- a/src/spicelib/devices/bsim4/b4trunc.c +++ b/src/spicelib/devices/bsim4/b4trunc.c @@ -1,10 +1,11 @@ -/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ /********** - * Copyright 2004 Regents of the University of California. All rights reserved. - * File: b4trunc.c of BSIM4.5.0. + * Copyright 2006 Regents of the University of California. All rights reserved. + * File: b4trunc.c of BSIM4.6.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. + * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ diff --git a/src/spicelib/devices/bsim4/bsim4def.h b/src/spicelib/devices/bsim4/bsim4def.h index 93e9e5119..64a79696a 100644 --- a/src/spicelib/devices/bsim4/bsim4def.h +++ b/src/spicelib/devices/bsim4/bsim4def.h @@ -1,11 +1,16 @@ +/**** BSIM4.6.0 Released by Mohan Dunga 12/13/2006 ****/ + /********** -Copyright 2005 Regents of the University of California. All rights reserved. +Copyright 2006 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu. +Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. +Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu Modified by Xuemei Xi, 11/15/2002. Modified by Xuemei Xi, 05/09/2003. Modified by Xuemei Xi, 03/04/2004. Modified by Xuemei Xi, Mohan Dunga, 09/24/2004. Modified by Xuemei Xi, 07/29/2005. +Modified by Mohan Dunga, 12/13/2006 File: bsim4def.h **********/ @@ -17,7 +22,7 @@ File: bsim4def.h #include "cktdefs.h" #include "complex.h" #include "noisedef.h" - + typedef struct sBSIM4instance { struct sBSIM4model *BSIM4modPtr; @@ -545,12 +550,19 @@ struct bsim4SizeDependParam double BSIM4bgidl; double BSIM4cgidl; double BSIM4egidl; + double BSIM4agisl; + double BSIM4bgisl; + double BSIM4cgisl; + double BSIM4egisl; double BSIM4aigc; double BSIM4bigc; double BSIM4cigc; - double BSIM4aigsd; - double BSIM4bigsd; - double BSIM4cigsd; + double BSIM4aigs; + double BSIM4bigs; + double BSIM4cigs; + double BSIM4aigd; + double BSIM4bigd; + double BSIM4cigd; double BSIM4aigbacc; double BSIM4bigbacc; double BSIM4cigbacc; @@ -608,7 +620,6 @@ struct bsim4SizeDependParam double BSIM4dwc; double BSIM4dlc; - double BSIM4dlcig; double BSIM4dwj; double BSIM4leffCV; double BSIM4weffCV; @@ -642,14 +653,14 @@ struct bsim4SizeDependParam double BSIM4Aechvb; double BSIM4Bechvb; double BSIM4ToxRatioEdge; - double BSIM4AechvbEdge; + double BSIM4AechvbEdgeS; + double BSIM4AechvbEdgeD; double BSIM4BechvbEdge; double BSIM4ldeb; double BSIM4k1ox; double BSIM4k2ox; double BSIM4vfbzbfactor; - struct bsim4SizeDependParam *pNext; }; @@ -781,12 +792,22 @@ typedef struct sBSIM4model double BSIM4bgidl; double BSIM4cgidl; double BSIM4egidl; + double BSIM4agisl; + double BSIM4bgisl; + double BSIM4cgisl; + double BSIM4egisl; double BSIM4aigc; double BSIM4bigc; double BSIM4cigc; double BSIM4aigsd; double BSIM4bigsd; double BSIM4cigsd; + double BSIM4aigs; + double BSIM4bigs; + double BSIM4cigs; + double BSIM4aigd; + double BSIM4bigd; + double BSIM4cigd; double BSIM4aigbacc; double BSIM4bigbacc; double BSIM4cigbacc; @@ -819,6 +840,9 @@ typedef struct sBSIM4model double BSIM4njts; double BSIM4njtssw; double BSIM4njtsswg; + double BSIM4njtsd; + double BSIM4njtsswd; + double BSIM4njtsswgd; double BSIM4xtss; double BSIM4xtsd; double BSIM4xtssws; @@ -828,6 +852,9 @@ typedef struct sBSIM4model double BSIM4tnjts; double BSIM4tnjtssw; double BSIM4tnjtsswg; + double BSIM4tnjtsd; + double BSIM4tnjtsswd; + double BSIM4tnjtsswgd; double BSIM4vtss; double BSIM4vtsd; double BSIM4vtssws; @@ -904,6 +931,7 @@ typedef struct sBSIM4model double BSIM4xw; double BSIM4xl; double BSIM4dlcig; + double BSIM4dlcigd; double BSIM4dwj; double BSIM4noff; double BSIM4voffcv; @@ -1017,12 +1045,22 @@ typedef struct sBSIM4model double BSIM4lbgidl; double BSIM4lcgidl; double BSIM4legidl; + double BSIM4lagisl; + double BSIM4lbgisl; + double BSIM4lcgisl; + double BSIM4legisl; double BSIM4laigc; double BSIM4lbigc; double BSIM4lcigc; double BSIM4laigsd; double BSIM4lbigsd; double BSIM4lcigsd; + double BSIM4laigs; + double BSIM4lbigs; + double BSIM4lcigs; + double BSIM4laigd; + double BSIM4lbigd; + double BSIM4lcigd; double BSIM4laigbacc; double BSIM4lbigbacc; double BSIM4lcigbacc; @@ -1151,12 +1189,22 @@ typedef struct sBSIM4model double BSIM4wbgidl; double BSIM4wcgidl; double BSIM4wegidl; + double BSIM4wagisl; + double BSIM4wbgisl; + double BSIM4wcgisl; + double BSIM4wegisl; double BSIM4waigc; double BSIM4wbigc; double BSIM4wcigc; double BSIM4waigsd; double BSIM4wbigsd; double BSIM4wcigsd; + double BSIM4waigs; + double BSIM4wbigs; + double BSIM4wcigs; + double BSIM4waigd; + double BSIM4wbigd; + double BSIM4wcigd; double BSIM4waigbacc; double BSIM4wbigbacc; double BSIM4wcigbacc; @@ -1285,12 +1333,22 @@ typedef struct sBSIM4model double BSIM4pbgidl; double BSIM4pcgidl; double BSIM4pegidl; + double BSIM4pagisl; + double BSIM4pbgisl; + double BSIM4pcgisl; + double BSIM4pegisl; double BSIM4paigc; double BSIM4pbigc; double BSIM4pcigc; double BSIM4paigsd; double BSIM4pbigsd; double BSIM4pcigsd; + double BSIM4paigs; + double BSIM4pbigs; + double BSIM4pcigs; + double BSIM4paigd; + double BSIM4pbigd; + double BSIM4pcigd; double BSIM4paigbacc; double BSIM4pbigbacc; double BSIM4pcigbacc; @@ -1363,9 +1421,12 @@ typedef struct sBSIM4model double BSIM4DjctEmissionCoeff; double BSIM4SjctTempExponent; double BSIM4DjctTempExponent; - double BSIM4njtstemp; - double BSIM4njtsswtemp; - double BSIM4njtsswgtemp; + double BSIM4njtsstemp; + double BSIM4njtsswstemp; + double BSIM4njtsswgstemp; + double BSIM4njtsdtemp; + double BSIM4njtsswdtemp; + double BSIM4njtsswgdtemp; double BSIM4Lint; double BSIM4Ll; @@ -1594,12 +1655,22 @@ typedef struct sBSIM4model unsigned BSIM4bgidlGiven :1; unsigned BSIM4cgidlGiven :1; unsigned BSIM4egidlGiven :1; + unsigned BSIM4agislGiven :1; + unsigned BSIM4bgislGiven :1; + unsigned BSIM4cgislGiven :1; + unsigned BSIM4egislGiven :1; unsigned BSIM4aigcGiven :1; unsigned BSIM4bigcGiven :1; unsigned BSIM4cigcGiven :1; unsigned BSIM4aigsdGiven :1; unsigned BSIM4bigsdGiven :1; unsigned BSIM4cigsdGiven :1; + unsigned BSIM4aigsGiven :1; + unsigned BSIM4bigsGiven :1; + unsigned BSIM4cigsGiven :1; + unsigned BSIM4aigdGiven :1; + unsigned BSIM4bigdGiven :1; + unsigned BSIM4cigdGiven :1; unsigned BSIM4aigbaccGiven :1; unsigned BSIM4bigbaccGiven :1; unsigned BSIM4cigbaccGiven :1; @@ -1631,6 +1702,9 @@ typedef struct sBSIM4model unsigned BSIM4njtsGiven :1; unsigned BSIM4njtsswGiven :1; unsigned BSIM4njtsswgGiven :1; + unsigned BSIM4njtsdGiven :1; + unsigned BSIM4njtsswdGiven :1; + unsigned BSIM4njtsswgdGiven :1; unsigned BSIM4xtssGiven :1; unsigned BSIM4xtsdGiven :1; unsigned BSIM4xtsswsGiven :1; @@ -1640,6 +1714,9 @@ typedef struct sBSIM4model unsigned BSIM4tnjtsGiven :1; unsigned BSIM4tnjtsswGiven :1; unsigned BSIM4tnjtsswgGiven :1; + unsigned BSIM4tnjtsdGiven :1; + unsigned BSIM4tnjtsswdGiven :1; + unsigned BSIM4tnjtsswgdGiven :1; unsigned BSIM4vtssGiven :1; unsigned BSIM4vtsdGiven :1; unsigned BSIM4vtsswsGiven :1; @@ -1716,6 +1793,7 @@ typedef struct sBSIM4model unsigned BSIM4xwGiven :1; unsigned BSIM4xlGiven :1; unsigned BSIM4dlcigGiven :1; + unsigned BSIM4dlcigdGiven :1; unsigned BSIM4dwjGiven :1; unsigned BSIM4noffGiven :1; unsigned BSIM4voffcvGiven :1; @@ -1830,12 +1908,22 @@ typedef struct sBSIM4model unsigned BSIM4lbgidlGiven :1; unsigned BSIM4lcgidlGiven :1; unsigned BSIM4legidlGiven :1; + unsigned BSIM4lagislGiven :1; + unsigned BSIM4lbgislGiven :1; + unsigned BSIM4lcgislGiven :1; + unsigned BSIM4legislGiven :1; unsigned BSIM4laigcGiven :1; unsigned BSIM4lbigcGiven :1; unsigned BSIM4lcigcGiven :1; unsigned BSIM4laigsdGiven :1; unsigned BSIM4lbigsdGiven :1; unsigned BSIM4lcigsdGiven :1; + unsigned BSIM4laigsGiven :1; + unsigned BSIM4lbigsGiven :1; + unsigned BSIM4lcigsGiven :1; + unsigned BSIM4laigdGiven :1; + unsigned BSIM4lbigdGiven :1; + unsigned BSIM4lcigdGiven :1; unsigned BSIM4laigbaccGiven :1; unsigned BSIM4lbigbaccGiven :1; unsigned BSIM4lcigbaccGiven :1; @@ -1964,12 +2052,22 @@ typedef struct sBSIM4model unsigned BSIM4wbgidlGiven :1; unsigned BSIM4wcgidlGiven :1; unsigned BSIM4wegidlGiven :1; + unsigned BSIM4wagislGiven :1; + unsigned BSIM4wbgislGiven :1; + unsigned BSIM4wcgislGiven :1; + unsigned BSIM4wegislGiven :1; unsigned BSIM4waigcGiven :1; unsigned BSIM4wbigcGiven :1; unsigned BSIM4wcigcGiven :1; unsigned BSIM4waigsdGiven :1; unsigned BSIM4wbigsdGiven :1; unsigned BSIM4wcigsdGiven :1; + unsigned BSIM4waigsGiven :1; + unsigned BSIM4wbigsGiven :1; + unsigned BSIM4wcigsGiven :1; + unsigned BSIM4waigdGiven :1; + unsigned BSIM4wbigdGiven :1; + unsigned BSIM4wcigdGiven :1; unsigned BSIM4waigbaccGiven :1; unsigned BSIM4wbigbaccGiven :1; unsigned BSIM4wcigbaccGiven :1; @@ -2098,12 +2196,22 @@ typedef struct sBSIM4model unsigned BSIM4pbgidlGiven :1; unsigned BSIM4pcgidlGiven :1; unsigned BSIM4pegidlGiven :1; + unsigned BSIM4pagislGiven :1; + unsigned BSIM4pbgislGiven :1; + unsigned BSIM4pcgislGiven :1; + unsigned BSIM4pegislGiven :1; unsigned BSIM4paigcGiven :1; unsigned BSIM4pbigcGiven :1; unsigned BSIM4pcigcGiven :1; unsigned BSIM4paigsdGiven :1; unsigned BSIM4pbigsdGiven :1; unsigned BSIM4pcigsdGiven :1; + unsigned BSIM4paigsGiven :1; + unsigned BSIM4pbigsGiven :1; + unsigned BSIM4pcigsGiven :1; + unsigned BSIM4paigdGiven :1; + unsigned BSIM4pbigdGiven :1; + unsigned BSIM4pcigdGiven :1; unsigned BSIM4paigbaccGiven :1; unsigned BSIM4pbigbaccGiven :1; unsigned BSIM4pcigbaccGiven :1; @@ -3157,6 +3265,56 @@ typedef struct sBSIM4model #define BSIM4_MOD_RBSDBYW 1125 #define BSIM4_MOD_RBSDBYNF 1126 +#define BSIM4_MOD_AGISL 1200 +#define BSIM4_MOD_BGISL 1201 +#define BSIM4_MOD_EGISL 1202 +#define BSIM4_MOD_CGISL 1203 +#define BSIM4_MOD_LAGISL 1204 +#define BSIM4_MOD_LBGISL 1205 +#define BSIM4_MOD_LEGISL 1206 +#define BSIM4_MOD_LCGISL 1207 +#define BSIM4_MOD_WAGISL 1208 +#define BSIM4_MOD_WBGISL 1209 +#define BSIM4_MOD_WEGISL 1210 +#define BSIM4_MOD_WCGISL 1211 +#define BSIM4_MOD_PAGISL 1212 +#define BSIM4_MOD_PBGISL 1213 +#define BSIM4_MOD_PEGISL 1214 +#define BSIM4_MOD_PCGISL 1215 + +#define BSIM4_MOD_AIGS 1220 +#define BSIM4_MOD_BIGS 1221 +#define BSIM4_MOD_CIGS 1222 +#define BSIM4_MOD_LAIGS 1223 +#define BSIM4_MOD_LBIGS 1224 +#define BSIM4_MOD_LCIGS 1225 +#define BSIM4_MOD_WAIGS 1226 +#define BSIM4_MOD_WBIGS 1227 +#define BSIM4_MOD_WCIGS 1228 +#define BSIM4_MOD_PAIGS 1229 +#define BSIM4_MOD_PBIGS 1230 +#define BSIM4_MOD_PCIGS 1231 +#define BSIM4_MOD_AIGD 1232 +#define BSIM4_MOD_BIGD 1233 +#define BSIM4_MOD_CIGD 1234 +#define BSIM4_MOD_LAIGD 1235 +#define BSIM4_MOD_LBIGD 1236 +#define BSIM4_MOD_LCIGD 1237 +#define BSIM4_MOD_WAIGD 1238 +#define BSIM4_MOD_WBIGD 1239 +#define BSIM4_MOD_WCIGD 1240 +#define BSIM4_MOD_PAIGD 1241 +#define BSIM4_MOD_PBIGD 1242 +#define BSIM4_MOD_PCIGD 1243 +#define BSIM4_MOD_DLCIGD 1244 + +#define BSIM4_MOD_NJTSD 1250 +#define BSIM4_MOD_NJTSSWD 1251 +#define BSIM4_MOD_NJTSSWGD 1252 +#define BSIM4_MOD_TNJTSD 1253 +#define BSIM4_MOD_TNJTSSWD 1254 +#define BSIM4_MOD_TNJTSSWGD 1255 + #include "bsim4ext.h" extern void BSIM4evaluate(double,double,double,BSIM4instance*,BSIM4model*,