diff --git a/configure.in b/configure.in index fda683a19..ab43fa39c 100644 --- a/configure.in +++ b/configure.in @@ -787,11 +787,12 @@ src/spicelib/devices/bjt/Makefile \ src/spicelib/devices/bjt2/Makefile \ src/spicelib/devices/bsim1/Makefile \ src/spicelib/devices/bsim2/Makefile \ +src/spicelib/devices/bsim3/Makefile \ src/spicelib/devices/bsim3v0/Makefile \ src/spicelib/devices/bsim3v1/Makefile \ src/spicelib/devices/bsim3v1a/Makefile \ src/spicelib/devices/bsim3v1s/Makefile \ -src/spicelib/devices/bsim3/Makefile \ +src/spicelib/devices/bsim3v32/Makefile \ src/spicelib/devices/bsim4/Makefile \ src/spicelib/devices/bsim4v2/Makefile \ src/spicelib/devices/bsim4v3/Makefile \ diff --git a/src/Makefile.am b/src/Makefile.am index 95db9b098..c0e8cb519 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -33,6 +33,7 @@ DYNAMIC_DEVICELIBS = \ spicelib/devices/bsim3v1/libbsim3v1.a \ spicelib/devices/bsim3v1s/libbsim3v1s.a \ spicelib/devices/bsim3v1a/libbsim3v1a.a \ + spicelib/devices/bsim3v32/libbsim3v32.a \ spicelib/devices/bsim4/libbsim4.a \ spicelib/devices/bsim4v2/libbsim4v2.a \ spicelib/devices/bsim4v3/libbsim4v3.a \ diff --git a/src/spicelib/devices/Makefile.am b/src/spicelib/devices/Makefile.am index 6632a8dcf..ef76d2adf 100644 --- a/src/spicelib/devices/Makefile.am +++ b/src/spicelib/devices/Makefile.am @@ -15,8 +15,9 @@ SUBDIRS = \ bsim4v5 \ bsim3v0 \ bsim3v1 \ - bsim3v1s \ bsim3v1a \ + bsim3v1s \ + bsim3v32 \ bsim3soi_pd \ bsim3soi_fd \ bsim3soi_dd \ @@ -71,8 +72,9 @@ DIST_SUBDIRS = \ bsim4v5 \ bsim3v0 \ bsim3v1 \ - bsim3v1s \ bsim3v1a \ + bsim3v1s \ + bsim3v32 \ bsim3soi_pd \ bsim3soi_fd \ bsim3soi_dd \ diff --git a/src/spicelib/devices/dev.c b/src/spicelib/devices/dev.c index 71b3c4be3..ea4005695 100644 --- a/src/spicelib/devices/dev.c +++ b/src/spicelib/devices/dev.c @@ -80,6 +80,7 @@ int add_udn(int,Evt_Udn_Info_t **); #include "bsim3v1/bsim3v1itf.h" #include "bsim3v1a/bsim3v1aitf.h" #include "bsim3v1s/bsim3v1sitf.h" +#include "bsim3v32/bsim3v32itf.h" #include "bsim4/bsim4itf.h" #include "bsim4v2/bsim4v2itf.h" #include "bsim4v3/bsim4v3itf.h" @@ -141,9 +142,9 @@ int add_udn(int,Evt_Udn_Info_t **); /*saj in xspice the DEVices size can be varied so DEVNUM is an int*/ #ifdef XSPICE - static int DEVNUM = 64; + static int DEVNUM = 65; #else - #define DEVNUM 64 + #define DEVNUM 65 #endif /*Make this dynamic for later attempt to make all devices dynamic*/ @@ -190,81 +191,82 @@ spice_init_devices(void) DEVices[ 8] = get_bsim3v1_info(); DEVices[ 9] = get_bsim3v1a_info(); DEVices[10] = get_bsim3v1s_info(); - DEVices[11] = get_b3soi_info(); - DEVices[12] = get_bsim4_info(); - DEVices[13] = get_bsim4v2_info(); - DEVices[14] = get_bsim4v3_info(); - DEVices[15] = get_bsim4v4_info(); - DEVices[16] = get_bsim4v5_info(); - DEVices[17] = get_b3soipd_info(); - DEVices[18] = get_b3soifd_info(); - DEVices[19] = get_b3soidd_info(); - DEVices[20] = get_cap_info(); - DEVices[21] = get_cccs_info(); - DEVices[22] = get_ccvs_info(); - DEVices[23] = get_cpl_info(); - DEVices[24] = get_csw_info(); - DEVices[25] = get_dio_info(); - DEVices[26] = get_hfeta_info(); - DEVices[27] = get_hfet2_info(); - DEVices[28] = get_hsm1_info(); - DEVices[29] = get_ind_info(); - DEVices[30] = get_mut_info(); - DEVices[31] = get_isrc_info(); - DEVices[32] = get_jfet_info(); - DEVices[33] = get_jfet2_info(); - DEVices[34] = get_ltra_info(); - DEVices[35] = get_mes_info(); - DEVices[36] = get_mesa_info(); - DEVices[37] = get_mos1_info(); - DEVices[38] = get_mos2_info(); - DEVices[39] = get_mos3_info(); - DEVices[40] = get_mos6_info(); - DEVices[41] = get_mos9_info(); - DEVices[42] = get_res_info(); - DEVices[43] = get_soi3_info(); - DEVices[44] = get_sw_info(); - DEVices[45] = get_tra_info(); - DEVices[46] = get_txl_info(); - DEVices[47] = get_vbic_info(); - DEVices[48] = get_vccs_info(); - DEVices[49] = get_vcvs_info(); - DEVices[50] = get_vsrc_info(); + DEVices[11] = get_bsim3v32_info(); + DEVices[12] = get_b3soi_info(); + DEVices[13] = get_bsim4_info(); + DEVices[14] = get_bsim4v2_info(); + DEVices[15] = get_bsim4v3_info(); + DEVices[16] = get_bsim4v4_info(); + DEVices[17] = get_bsim4v5_info(); + DEVices[18] = get_b3soipd_info(); + DEVices[19] = get_b3soifd_info(); + DEVices[20] = get_b3soidd_info(); + DEVices[21] = get_cap_info(); + DEVices[22] = get_cccs_info(); + DEVices[23] = get_ccvs_info(); + DEVices[24] = get_cpl_info(); + DEVices[25] = get_csw_info(); + DEVices[26] = get_dio_info(); + DEVices[27] = get_hfeta_info(); + DEVices[28] = get_hfet2_info(); + DEVices[29] = get_hsm1_info(); + DEVices[30] = get_ind_info(); + DEVices[31] = get_mut_info(); + DEVices[32] = get_isrc_info(); + DEVices[33] = get_jfet_info(); + DEVices[34] = get_jfet2_info(); + DEVices[35] = get_ltra_info(); + DEVices[36] = get_mes_info(); + DEVices[37] = get_mesa_info(); + DEVices[38] = get_mos1_info(); + DEVices[39] = get_mos2_info(); + DEVices[40] = get_mos3_info(); + DEVices[41] = get_mos6_info(); + DEVices[42] = get_mos9_info(); + DEVices[43] = get_res_info(); + DEVices[44] = get_soi3_info(); + DEVices[45] = get_sw_info(); + DEVices[46] = get_tra_info(); + DEVices[47] = get_txl_info(); + DEVices[48] = get_vbic_info(); + DEVices[49] = get_vccs_info(); + DEVices[50] = get_vcvs_info(); + DEVices[51] = get_vsrc_info(); #ifdef CIDER - DEVices[51] = get_nbjt_info(); - DEVices[52] = get_nbjt2_info(); - DEVices[53] = get_numd_info(); - DEVices[54] = get_numd2_info(); - DEVices[55] = get_numos_info(); + DEVices[52] = get_nbjt_info(); + DEVices[53] = get_nbjt2_info(); + DEVices[54] = get_numd_info(); + DEVices[55] = get_numd2_info(); + DEVices[56] = get_numos_info(); #else - DEVices[51] = NULL; DEVices[52] = NULL; DEVices[53] = NULL; DEVices[54] = NULL; - DEVices[55] = NULL; + DEVices[55] = NULL; + DEVices[56] = NULL; #endif #ifdef ADMS - DEVices[56] = get_hicum0_info(); - DEVices[57] = get_hicum2_info(); - DEVices[58] = get_mextram_info(); - DEVices[59] = get_ekv_info(); - DEVices[60] = get_psp102_info(); + DEVices[57] = get_hicum0_info(); + DEVices[58] = get_hicum2_info(); + DEVices[59] = get_mextram_info(); + DEVices[60] = get_ekv_info(); + DEVices[61] = get_psp102_info(); #else - DEVices[56] = NULL; DEVices[57] = NULL; DEVices[58] = NULL; DEVices[59] = NULL; DEVices[60] = NULL; + DEVices[61] = NULL; #endif #ifdef NDEV /* NDEV */ - DEVices[61] = get_ndev_info(); + DEVices[62] = get_ndev_info(); #else - DEVices[61] = NULL; -#endif DEVices[62] = NULL; +#endif DEVices[63] = NULL; + DEVices[64] = NULL; return; } @@ -288,12 +290,12 @@ SPICEdev ** devices(void) /*not yet usable*/ #ifdef ADMS -#define DEVICES_USED {"asrc", "bjt", "bjt2", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v2", "bsim3v1", "bsim4", "bsim4v2", "bsim4v3", "bsim4v4", "bsim4v5", \ +#define DEVICES_USED {"asrc", "bjt", "bjt2", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v2", "bsim4v3", "bsim4v4", "bsim4v5", \ "bsim3soipd", "bsim3soifd", "bsim3soidd", \ "cap", "cccs", "ccvs", "csw", "dio", "hfet", "hfet2", "ind", "isrc", "jfet", "ltra", "mes", "mesa" ,"mos1", "mos2", "mos3", \ "mos6", "mos9", "res", "soi3", "sw", "tra", "urc", "vccs", "vcvs", "vsrc", "hicum0", "hicum2", "mextram", "ekv", "psp102"} #else -#define DEVICES_USED {"asrc", "bjt", "bjt2", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v2", "bsim3v1", "bsim4", "bsim4v4", "bsim4v2", "bsim4v3", "bsim4v4", "bsim4v5", \ +#define DEVICES_USED {"asrc", "bjt", "bjt2", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v4", "bsim4v2", "bsim4v3", "bsim4v4", "bsim4v5", \ "bsim3soipd", "bsim3soifd", "bsim3soidd", \ "cap", "cccs", "ccvs", "csw", "dio", "hfet", "hfet2", "ind", "isrc", "jfet", "ltra", "mes", "mesa" ,"mos1", "mos2", "mos3", \ "mos6", "mos9", "res", "soi3", "sw", "tra", "urc", "vccs", "vcvs", "vsrc"} diff --git a/src/spicelib/parser/inp2m.c b/src/spicelib/parser/inp2m.c index 9bf8900b1..dfcfecc86 100644 --- a/src/spicelib/parser/inp2m.c +++ b/src/spicelib/parser/inp2m.c @@ -210,6 +210,7 @@ INP2M (void *ckt, INPtables * tab, card * current) && thismodel->INPmodType != INPtypelook ("BSIM1") && thismodel->INPmodType != INPtypelook ("BSIM2") && thismodel->INPmodType != INPtypelook ("BSIM3") + && thismodel->INPmodType != INPtypelook ("BSIM3v32") && thismodel->INPmodType != INPtypelook ("B3SOI") && thismodel->INPmodType != INPtypelook ("B3SOIPD") && thismodel->INPmodType != INPtypelook ("B3SOIFD") diff --git a/src/spicelib/parser/inpdomod.c b/src/spicelib/parser/inpdomod.c index e2290fea6..a30683595 100644 --- a/src/spicelib/parser/inpdomod.c +++ b/src/spicelib/parser/inpdomod.c @@ -273,8 +273,15 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab) } break; case 8: - type = INPtypelook("BSIM3"); err = INPfindVer(line, ver); + if ( (strstr(ver, "3.2.2")) || (strstr(ver, "3.22")) || + (strstr(ver, "3.2.3")) || (strstr(ver, "3.23")) || + (strstr(ver, "3.2.4")) || (strstr(ver, "3.24")) ) { + type = INPtypelook("BSIM3v32"); + } + if ( (strstr(ver, "3.3")) || (strstr(ver, "3.3.0")) || (strstr(ver, "3.30")) ) { + type = INPtypelook("BSIM3"); + } if (type < 0) { err = INPmkTemp diff --git a/src/spicelib/parser/inpgmod.c b/src/spicelib/parser/inpgmod.c index c78f21942..58cd980a4 100644 --- a/src/spicelib/parser/inpgmod.c +++ b/src/spicelib/parser/inpgmod.c @@ -207,9 +207,10 @@ INPgetModBin( void* ckt, char* name, INPmodel** model, INPtables* tab, char* lin w = parse_values[1]*scale; for ( modtmp = modtab; modtmp != (INPmodel*)NULL; modtmp = modtmp->INPnextModel ) { - if ( modtmp->INPmodType != INPtypelook( "BSIM3" ) && modtmp->INPmodType != INPtypelook( "BSIM4" ) && - modtmp->INPmodType != INPtypelook( "BSIM4v2" ) && modtmp->INPmodType != INPtypelook( "BSIM4v3" ) && - modtmp->INPmodType != INPtypelook( "BSIM4v4" ) && modtmp->INPmodType != INPtypelook( "BSIM4v5" ) ) + if ( modtmp->INPmodType != INPtypelook( "BSIM3" ) && modtmp->INPmodType != INPtypelook( "BSIM3v32" ) && + modtmp->INPmodType != INPtypelook( "BSIM4" ) && modtmp->INPmodType != INPtypelook( "BSIM4v2" ) && + modtmp->INPmodType != INPtypelook( "BSIM4v3" ) && modtmp->INPmodType != INPtypelook( "BSIM4v4" ) && + modtmp->INPmodType != INPtypelook( "BSIM4v5" ) ) continue; if ( parse_line( modtmp->INPmodLine->line, model_tokens, 4, parse_values, parse_found ) != TRUE )