From ca391753b0af9b3b59b31967a12fb86e684fafc9 Mon Sep 17 00:00:00 2001 From: rlar Date: Sun, 18 Mar 2018 14:44:33 +0100 Subject: [PATCH] remove bsimcmg completely --- configure.ac | 3 - examples/adms/bsimcmg/ac.sp | 44 - examples/adms/bsimcmg/cfrgeo.sp | 65 - examples/adms/bsimcmg/gummel_n.sp | 48 - examples/adms/bsimcmg/gummel_p.sp | 45 - examples/adms/bsimcmg/idvdnmos.sp | 55 - examples/adms/bsimcmg/idvdpmos.sp | 55 - examples/adms/bsimcmg/idvgnmos.sp | 43 - examples/adms/bsimcmg/idvgpmos.sp | 55 - examples/adms/bsimcmg/invdc.sp | 37 - examples/adms/bsimcmg/inverter_transient.sp | 41 - examples/adms/bsimcmg/modelcard.nmos | 137 - examples/adms/bsimcmg/modelcard.nmos.1 | 110 - examples/adms/bsimcmg/modelcard.pmos | 137 - examples/adms/bsimcmg/modelcard.pmos.1 | 110 - examples/adms/bsimcmg/noise.sp | 46 - examples/adms/bsimcmg/rdsgeo.sp | 77 - examples/adms/bsimcmg/ringosc_17stg.sp | 60 - .../devices/adms/admst/ngspiceVersion.xml | 47 - .../devices/adms/bsimcmg/admsva/bsimcmg.va | 117 - .../admsva/bsimcmg_binning_parameters.include | 756 --- .../adms/bsimcmg/admsva/bsimcmg_body.include | 4145 ----------------- .../bsimcmg/admsva/bsimcmg_cfringe.include | 117 - .../admsva/bsimcmg_quasi_static_cv.include | 89 - .../bsimcmg/admsva/bsimcmg_rdsmod.include | 84 - .../adms/bsimcmg/admsva/common_defs.include | 185 - src/spicelib/devices/dev.c | 4 +- src/spicelib/parser/inp2m.c | 4 +- src/spicelib/parser/inpdomod.c | 8 - 29 files changed, 2 insertions(+), 6722 deletions(-) delete mode 100644 examples/adms/bsimcmg/ac.sp delete mode 100644 examples/adms/bsimcmg/cfrgeo.sp delete mode 100644 examples/adms/bsimcmg/gummel_n.sp delete mode 100644 examples/adms/bsimcmg/gummel_p.sp delete mode 100644 examples/adms/bsimcmg/idvdnmos.sp delete mode 100644 examples/adms/bsimcmg/idvdpmos.sp delete mode 100644 examples/adms/bsimcmg/idvgnmos.sp delete mode 100644 examples/adms/bsimcmg/idvgpmos.sp delete mode 100644 examples/adms/bsimcmg/invdc.sp delete mode 100644 examples/adms/bsimcmg/inverter_transient.sp delete mode 100644 examples/adms/bsimcmg/modelcard.nmos delete mode 100644 examples/adms/bsimcmg/modelcard.nmos.1 delete mode 100644 examples/adms/bsimcmg/modelcard.pmos delete mode 100644 examples/adms/bsimcmg/modelcard.pmos.1 delete mode 100644 examples/adms/bsimcmg/noise.sp delete mode 100644 examples/adms/bsimcmg/rdsgeo.sp delete mode 100644 examples/adms/bsimcmg/ringosc_17stg.sp delete mode 100644 src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg.va delete mode 100644 src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_binning_parameters.include delete mode 100644 src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include delete mode 100644 src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_cfringe.include delete mode 100644 src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_quasi_static_cv.include delete mode 100644 src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_rdsmod.include delete mode 100644 src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include diff --git a/configure.ac b/configure.ac index 9936d5c5d..265a92aef 100644 --- a/configure.ac +++ b/configure.ac @@ -956,7 +956,6 @@ if test "x$enable_adms" = xyes ; then AC_DEFINE([ADMS], [1], [Support for Verilog-A models]) VLADEVDIR=" adms/bsimbulk \ - adms/bsimcmg \ adms/ekv \ adms/hicum0 \ adms/hicum2 \ @@ -965,7 +964,6 @@ if test "x$enable_adms" = xyes ; then # The makefiles for adms (to be added to AC_CONFIG_FILES by ./autogen.sh --adms) #VLAMKF src/spicelib/devices/adms/bsimbulk/Makefile -#VLAMKF src/spicelib/devices/adms/bsimcmg/Makefile #VLAMKF src/spicelib/devices/adms/ekv/Makefile #VLAMKF src/spicelib/devices/adms/hicum0/Makefile #VLAMKF src/spicelib/devices/adms/hicum2/Makefile @@ -975,7 +973,6 @@ if test "x$enable_adms" = xyes ; then NOTVLADEVDIR="" VLADEV=" spicelib/devices/adms/bsimbulk/libbsimbulk.la \ - spicelib/devices/adms/bsimcmg/libbsimcmg.la \ spicelib/devices/adms/ekv/libekv.la \ spicelib/devices/adms/hicum0/libhicum0.la \ spicelib/devices/adms/hicum2/libhicum2.la \ diff --git a/examples/adms/bsimcmg/ac.sp b/examples/adms/bsimcmg/ac.sp deleted file mode 100644 index 775d3b290..000000000 --- a/examples/adms/bsimcmg/ac.sp +++ /dev/null @@ -1,44 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*AC Response - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.nmos" - -.param myvdd=1.0 - -* --- Voltage Sources --- -vdd supply 0 dc=myvdd -vsig gate 0 dc=0.5 ac=1 -vbs bulk 0 dc=0 - -* --- Transistor --- -m1 vout gate 0 bulk 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - -* --- Load --- -rl supply vout r=2k -cl supply vout c=10f - -* --- AC Analysis --- -.ac dec 10 1k 1T - -* For Bias Point Testing -* .dc vsig -1 1.5 0.01 - -.print ac vm(vout) vp(vout) - -*.alter -*.param myvdd=2.0 - -.control -run -plot vdb(vout) -plot cph(vout) -.endc - - -.end - diff --git a/examples/adms/bsimcmg/cfrgeo.sp b/examples/adms/bsimcmg/cfrgeo.sp deleted file mode 100644 index af1c61140..000000000 --- a/examples/adms/bsimcmg/cfrgeo.sp +++ /dev/null @@ -1,65 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -* Geometry-dependent Cfr -* -.option abstol=1e-6 reltol=1e-6 post ingold -.temp 27 - -*.hdl "bsimcmg.va" - -.param hfin=30n - -.model nmos2 NMOS level=17 -+ DEVTYPE=1 -+ CGEOMOD=2 -+ HEPI=10n -+ LSP=5n -+ EPSRSP=7.5 -+ TGATE=40n -+ TMASK=10n -+ TSILI=0n -+ CRATIO=1.0 -+ EOT=1.0n -+ TOXP=1.2n -+ HFIN=hfin - -* --- Voltage Sources --- -vds supply 0 dc=0 -vgs gate 0 dc=0 -vbs bulk 0 dc=0 - -* --- Transistor --- -M1 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=20n LRSD=40n -M2 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=40n LRSD=40n -M3 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=60n LRSD=40n -M4 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=80n LRSD=40n - -* --- DC Analysis --- -.dc vgs 0.0 1.0 0.1 -*.print dc par'hfin' M1:CFGEO M2:CFGEO M3:CFGEO M4:CFGEO - -.control -save @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] - -showmod #nmos2 : HFIN -run -plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] - -altermod nmos2 hfin = 40n -showmod #nmos2 : HFIN -run -plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] - -altermod nmos2 hfin = 50n -showmod #nmos2 : HFIN -run -plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] - -altermod nmos2 hfin = 60n -showmod #nmos2 : HFIN -run -plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] - -.endc - -.end diff --git a/examples/adms/bsimcmg/gummel_n.sp b/examples/adms/bsimcmg/gummel_n.sp deleted file mode 100644 index 239294e5d..000000000 --- a/examples/adms/bsimcmg/gummel_n.sp +++ /dev/null @@ -1,48 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Drain current symmetry for nmos - -.option abstol=1e-6 reltol=1e-6 post ingold - -.include "modelcard.nmos" - -* --- Voltage Sources --- -vdrain drain 0 dc=0 -esource source 0 drain 0 -1 -vgate gate 0 dc=1.0 -vbulk bulk 0 dc=0.0 - - -* --- Transistor --- -m1 drain gate source bulk 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - -* --- DC Analysis --- -.dc vdrain -0.1 0.1 0.001 vgate 0.0 1.0 0.2 -.probe dc ids=par'-i(vdrain)' -.probe dc gx=deriv(ids) -.probe dc gx2=deriv(gx) -.probe dc gx3=deriv(gx2) -.probe dc gx4=deriv(gx3) -.print dc par'ids' par'gx' par'gx2' par'gx3' par 'gx4' - -.control -save @m1[VDSSAT] -save @m1[GDS] -run -show all -let ids = -i(vdrain) -let gx = deriv(ids) -let gx2 = deriv(gx) -let gx3 = deriv(gx2) -let gx4 = deriv(gx3) -plot ids -plot @m1[VDSSAT] -plot @m1[GDS] -plot gx -plot gx2 -plot gx3 -plot gx4 -.endc - -.end diff --git a/examples/adms/bsimcmg/gummel_p.sp b/examples/adms/bsimcmg/gummel_p.sp deleted file mode 100644 index 262d5b6f4..000000000 --- a/examples/adms/bsimcmg/gummel_p.sp +++ /dev/null @@ -1,45 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Drain current symmetry - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.pmos" - -* --- Voltage Sources --- -vdrain drain 0 dc=0 -esource source 0 drain 0 -1 -vgate gate 0 dc=-1.0 -vbulk bulk 0 dc=0 - - -* --- Transistor --- -m1 drain gate source bulk 0 pmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - -* --- DC Analysis --- -.dc vdrain -0.1 0.1 0.001 vgate 0.0 -1.0 -0.2 -.probe dc ids=par'-i(vdrain)' -.probe dc gx=deriv(ids) -.probe dc gx2=deriv(gx) -.probe dc gx3=deriv(gx2) -.probe dc gx4=deriv(gx3) -.print dc par'ids' par'gx' par'gx2' par'gx3' par 'gx4' - -.control -run -let ids = -i(vdrain) -let gx = deriv(ids) -let gx2 = deriv(gx) -let gx3 = deriv(gx2) -let gx4 = deriv(gx3) -plot ids -plot gx -plot gx2 -plot gx3 -plot gx4 - -.endc - -.end diff --git a/examples/adms/bsimcmg/idvdnmos.sp b/examples/adms/bsimcmg/idvdnmos.sp deleted file mode 100644 index 2f9227c23..000000000 --- a/examples/adms/bsimcmg/idvdnmos.sp +++ /dev/null @@ -1,55 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Id-Vd Characteristics for NMOS (T = 27 C) - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.nmos.1" - -* --- Voltage Sources --- -vds drain 0 dc=0 -vgs gate 0 dc=1.0 -vbs bulk 0 dc=0.2 - -* --- Transistor --- -m1 drain gate 0 bulk 0 nmos1 TFIN=15n L=40n NFIN=10 NRS=1 NRD=1 D=40n - -* --- DC Analysis --- -.dc vds 0 1 0.01 vgs 0 1.0 0.1 -.probe dc ids=par`-i(vds)` -.probe dc gds=deriv(ids) -.print dc par'ids' par'gds' - -.control -save @m1[gds] -set temp = -55 -run -let ids = -i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gds] - -save @m1[gds] -set temp = 27 -run -let ids = -i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gds] - -set temp = 100 -run -let ids = -i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gds] - -*show all - -.endc - -.end diff --git a/examples/adms/bsimcmg/idvdpmos.sp b/examples/adms/bsimcmg/idvdpmos.sp deleted file mode 100644 index d7370020b..000000000 --- a/examples/adms/bsimcmg/idvdpmos.sp +++ /dev/null @@ -1,55 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Id-Vd Characteristics for PMOS (T = 27 C) - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.pmos.1" - -* --- Voltage Sources --- -vds drain 0 dc=0 -vgs gate 0 dc=-1 -vbs bulk 0 dc=0 - -* --- Transistor --- -m1 drain gate 0 bulk 0 pmos1 TFIN=15n L=40n NFIN=10 NRS=1 NRD=1 -+ D = 40n - -* --- DC Analysis --- -.dc vds 0 -1 -0.01 vgs 0 -1.0 -0.1 -.probe dc ids=par`i(vds)` -.probe dc gds=deriv(ids) -.print dc par'ids' par'-gds' - -.control - -save @m1[gds] - -set temp = 27 -run -let ids = i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gds] - -set temp = -55 -run -let ids = i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gds] - -set temp = 100 -run -let ids = i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gds] - -.endc - -.end diff --git a/examples/adms/bsimcmg/idvgnmos.sp b/examples/adms/bsimcmg/idvgnmos.sp deleted file mode 100644 index 60a53bacf..000000000 --- a/examples/adms/bsimcmg/idvgnmos.sp +++ /dev/null @@ -1,43 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Id-Vg Characteristics for NMOS (T = 27 C) - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.nmos.1" - -* --- Voltage Sources --- -vds supply 0 dc=0.05 -vgs gate 0 dc=1 -vbs bulk 0 dc=0 -vt t 0 dc= 0 - -* --- Transistor --- -m1 supply gate 0 bulk t nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 D=40n - -* --- DC Analysis --- -.dc vgs -0.5 1.0 0.01 vds 0.05 1 0.95 -.probe dc par'-i(vds)' -.probe dc par'-i(vbs)' -.print dc i(X1.d) - -.control -set temp = 27 -run -plot -i(vds) -plot -i(vbs) - -set temp = -55 -run -plot -i(vds) -plot -i(vbs) - -set temp = 100 -run -plot -i(vds) -plot -i(vbs) - -.endc - -.end diff --git a/examples/adms/bsimcmg/idvgpmos.sp b/examples/adms/bsimcmg/idvgpmos.sp deleted file mode 100644 index 72c180c47..000000000 --- a/examples/adms/bsimcmg/idvgpmos.sp +++ /dev/null @@ -1,55 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Id-Vg Characteristics for PMOS (T = 27 C) - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.pmos.1" - -* --- Voltage Sources --- -vds supply 0 dc=-1 -vgs gate 0 dc=-1 -vbs bulk 0 dc=0 - -* --- Transistor --- -m1 supply gate 0 bulk 0 pmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 -+ D = 40n - -* --- DC Analysis --- -.dc vgs 0.5 -1.0 -0.01 -.probe dc ids=par`i(vds)` -.probe dc gds=deriv(ids) -.print dc par'ids' par'-gds' - -.control - -save @m1[gm] - -set temp = 27 -run -let ids = i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gm] - -set temp = -55 -run -let ids = i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gm] - -set temp = 100 -run -let ids = i(vds) -let xgds = deriv(ids) -plot ids -plot xgds -plot @m1[gm] - -.endc - -.end diff --git a/examples/adms/bsimcmg/invdc.sp b/examples/adms/bsimcmg/invdc.sp deleted file mode 100644 index 083809c5e..000000000 --- a/examples/adms/bsimcmg/invdc.sp +++ /dev/null @@ -1,37 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Inverter Transient - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.nmos" -.include "modelcard.pmos" - -* --- Voltage Sources --- -vdd supply 0 dc=1.0 -vin vi 0 dc=0.5 - -* --- Inverter Subcircuit --- -.subckt mg_inv vin vout vdd gnd - mp1 vout vin vdd gnd 0 pmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - mn1 vout vin gnd gnd 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - -.ends - -* --- Inverter --- -Xinv1 vi vo supply 0 mg_inv - -* --- Transient Analysis --- -.dc vin 0 1 0.01 - -.print dc v(vi) v(vo) - -.control -run -plot v(vi) v(vo) -.endc - -.end diff --git a/examples/adms/bsimcmg/inverter_transient.sp b/examples/adms/bsimcmg/inverter_transient.sp deleted file mode 100644 index 76d61c134..000000000 --- a/examples/adms/bsimcmg/inverter_transient.sp +++ /dev/null @@ -1,41 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*Inverter Transient - -.option abstol=1e-6 reltol=1e-6 post ingold - -*.hdl "bsimcmg.va" -.include "modelcard.nmos" -.include "modelcard.pmos" - -* --- Voltage Sources --- -vdd supply 0 dc=1.0 -vsig vi 0 dc=0.5 sin (0.5 0.5 1MEG) - -* --- Inverter Subcircuit --- -.subckt mg_inv vin vout vdd gnd - mp1 vout vin vdd gnd 0 pmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - mn1 vout vin gnd gnd 0 nmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - -.ends - -* --- Inverter --- -Xinv1 vi 1 supply 0 mg_inv -Xinv2 1 2 supply 0 mg_inv -Xinv3 2 3 supply 0 mg_inv -Xinv4 3 4 supply 0 mg_inv -Xinv5 4 vo supply 0 mg_inv - -* --- Transient Analysis --- -.tran 20n 5u - -.print tran v(vi) v(vo) - -.control -run -plot v(vi) v(vo) -.endc - -.end diff --git a/examples/adms/bsimcmg/modelcard.nmos b/examples/adms/bsimcmg/modelcard.nmos deleted file mode 100644 index de345b383..000000000 --- a/examples/adms/bsimcmg/modelcard.nmos +++ /dev/null @@ -1,137 +0,0 @@ -******** BSIM-MG 105 Sample Modelcard for NMOS ******** - -** The BSIM-MG sample modelcard below was not extracted/obtained -** from/based on any real technologies. It should not be used for any -** other purposes except for benchmarking the implementation of BSIM-MG -** against BSIM Team's standard results - -.model nmos1 NMOS level=17 -+ BULKMOD = 1 -+ CGEOMOD = 0 -+ TYPE = 1 -+ GEOMOD = 0 -+ GIDLMOD = 1 -+ IGBMOD = 0 -+ IGCMOD = 1 -+ IIMOD = 0 -+ NGATE = 0 -+ NQSMOD = 0 -+ RDSMOD = 0 -+ RGATEMOD = 0 -+ RGEOMOD = 0 -+ NSEG = 5 -+ SDTERM = 0 -+ SHMOD = 0 -+ AGIDL = 1.00E-12 -+ AGISL = 1.00E-12 -+ AIGC = 0.014 -+ AIGD = 0.0115 -+ AIGS = 0.0115 -+ AT = 0.001 -+ BG0SUB = 1.17 -+ BGIDL = 1.00E+07 -+ BGISL = 1.00E+07 -+ BIGC = 0.005 -+ BIGD = 0.00332 -+ BIGS = 0.00332 -+ CDSC = 0.01 -+ CDSCD = 0.01 -+ CFD = 0.20E-10 -+ CFS = 0.20E-10 -+ CGBL = 0 -+ CGBO = 0 -+ CGDL = 0 -+ CGDO = 1e-10 -+ CGSL = 0 -+ CGSO = 1e-10 -+ CIGC = 0.25 -+ CIGD = 0.35 -+ CIGS = 0.35 -+ CIT = 0 -+ CKAPPAD = 0.6 -+ CKAPPAS = 0.6 -+ CTH0 = 0.000001243 -+ DELTAVSAT = 0.5 -+ DELTAW = 0 -+ DELTAWCV = 0 -+ DLBIN = 0 -+ DLC = 0 -+ DLCIGD = 1.00E-09 -+ DLCIGS = 1.00E-09 -+ DROUT = 1 -+ DSUB = 0.5 -+ DVT0 = 0.05 -+ DVT1 = 0.5 -+ DVTSHIFT = 0 -+ EASUB = 4.05 -+ EGIDL = 0.35 -+ EGISL = 0.35 -+ EOT = 1.50E-09 -+ EOTACC = 1.00E-10 -+ EOTBOX = 1.40E-07 -+ EPSROX = 3.9 -+ EPSRSP = 3.9 -+ EPSRSUB = 11.9 -+ ETA0 = 0.05 -+ ETAMOB = 2 -+ ETAQM = 0.54 -+ EU = 1.2 -+ HFIN = 3.00E-08 -+ IGT = 2.5 -+ K1RSCE = 0 -+ KSATIV = 2 -+ KT1 = 0 -+ KT1L = 0 -+ LINT = -2.00E-09 -+ LPE0 = 0 -+ LCDSCD = 5.00E-05 -+ LCDSCDR = 5.00E-05 -+ LRDSW = 0.2 -+ LVSAT = 0 -+ MEXP = 4 -+ NBODY = 1.00E+22 -+ NC0SUB = 2.86E+25 -+ NI0SUB = 1.10E+16 -+ NSD = 2.00E+26 -+ PCLM = 0.05 -+ PCLMCV = 0.013 -+ PCLMG = 0 -+ PDIBL1 = 0 -+ PDIBL2 = 0.002 -+ PHIG = 4.39 -+ PHIN = 0.05 -+ POXEDGE = 1.1 -+ PQM = 0.66 -+ PRT = 0 -+ PTWG = 0 -+ PTWGT = 0.004 -+ PVAG = 0 -+ QM0 = 0.001 -+ QMFACTOR = 2.5 -+ RDSW = 200 -+ RDSWMIN = 0 -+ RDWMIN = 0 -+ RSHD = 0 -+ RSHS = 0 -+ RSWMIN = 0 -+ RTH0 = 0.225 -+ TBGASUB = 0.000473 -+ TBGBSUB = 636 -+ TGIDL = -0.007 -+ TMEXP = 0 -+ TNOM = 25 -+ TOXP = 2.10E-09 -+ U0 = 0.025 -+ UA = 0.55 -+ UA1 = 0.001032 -+ UCS = 1 -+ UCSTE = -0.004775 -+ UD = 0 -+ UD1 = 0 -+ UP = 0 -+ UTE = -0.7 -+ UTL = 0 -+ VSAT = 80000 -+ WR = 1 -+ WTH0 = 2.60E-07 -+ XL = 0 diff --git a/examples/adms/bsimcmg/modelcard.nmos.1 b/examples/adms/bsimcmg/modelcard.nmos.1 deleted file mode 100644 index 6baf0c025..000000000 --- a/examples/adms/bsimcmg/modelcard.nmos.1 +++ /dev/null @@ -1,110 +0,0 @@ -******** BSIM-MG 105 Sample Modelcard for NMOS ******** - -** The BSIM-MG sample modelcard below was not extracted/obtained -** from/based on any real technologies. It should not be used for any -** other purposes except for benchmarking the implementation of BSIM-MG -** against BSIM Team's standard results - -.model nmos1 NMOS level=17 -+ AGIDL = 50.00f -+ AGISL = 50.00f -+ AIGBINV = 11.10m -+ AIGC = 13.60m -+ AT = 0.007 -+ BG0SUB = 1.120 -+ BGIDL = 400.0E6 -+ BGISL = 400.0E6 -+ BIGBINV =-1.000m -+ BIGC = 1.710m -+ BULKMOD = 1 -+ CDSC = 5.000m -+ CDSCD = 5.000m -+ CFS = 1.0e-10 -+ CFD = 1.0e-10 -+ CGEOMOD = 0 -+ CGSL = 1.0e-10 -+ CGDL = 1.0e-10 -+ CIGBINV = 6.000m -+ CIGC = 75.00m -+ CIT = 0.000 -+ CTH0 = 2.0e-5 -+ DELTAW = 0.000 -+ DELTAWCV = 0.000 -+ TYPE = 1.000 -+ DLC = 0.000 -+ DROUT = 0.530 -+ DSUB = 0.530 -+ DVT0 = 0.000 -+ DVT1 = 300.0m -+ EASUB = 4.050 -+ EGIDL = 0.000 -+ EGISL = 0.000 -+ EIGBINV = 1.100 -+ EOT = 1.0n -+ EPSROX = 3.900 -+ EPSRSUB = 11.90 -+ ETA0 = 70.0m -+ ETAMOB = 2.500 -+ EU = 0.9 -+ FECH = 2.000 -+ FECHCV = 1.000 -+ GEOMOD = 1.000 -+ GIDLMOD = 1.000 -+ HFIN = 30n -+ IGCMOD = 1.000 -+ IGBMOD = 1.000 -+ K1RSCE = 0.000 -+ KSATIV = 1.000 -+ KT1 = 0.0 -+ LINT = 0.000 -+ LL = 0.000 -+ LLC = 0.000 -+ LLN = 1.000 -+ LPA = 0.000 -+ LPE0 = 5.000n -+ MEXP = 3 -+ NBODY = 1E+24 -+ NC0SUB = 2.86000E+25 -+ NGATE = 0.0 -+ NI0SUB = 1.10000E+16 -+ NIGBINV = 3.000 -+ NSD = 2.00000E+26 -+ PCLM = 0.000 -+ PDIBL1 = 0.300 -+ PDIBL2 = 0.000 -+ PHIG = 4.610 -+ PHIN = 50.00m -+ PRWGS = 0.000 -+ PVAG = 0.000 -+ QMFACTOR = 0.000 -+ RDSW = 100.0 -+ RDSWMIN = 0.000 -+ RSHS = 2.0 -+ RTH0 = 0.05 -+ U0 = 40m -+ UA = 0.100 -+ UA1 = 1.032m -+ UCS = 1.0 -+ UD = 1.0 -+ UP = 0.000 -+ UTE = 0.000 -+ UTL =-1.497m -+ VSAT = 150K -+ WR = 1.000 -+ XL = -5.00n -+ IIMOD =0.0 -+ BETAII0 = 0 -+ BETAII1 = .028 -+ BETAII2 = .067 -+ TII = -0.7 -+ SII0 = 3.4 -+ SII1 = .8 -+ SII2 = .08 -+ SIID = 0.08 -+ ESATII = 1.7e6 -+ LII = 3e-9 -+ RGATEMOD = 0 -+ RGFIN = 100 -+ NQSMOD = 0 -+ RDSMOD = 0 -+ SHMOD = 0 diff --git a/examples/adms/bsimcmg/modelcard.pmos b/examples/adms/bsimcmg/modelcard.pmos deleted file mode 100644 index 2e4f9e34b..000000000 --- a/examples/adms/bsimcmg/modelcard.pmos +++ /dev/null @@ -1,137 +0,0 @@ -******** BSIM-MG 105 Sample Modelcard for PMOS ******** - -** The BSIM-MG sample modelcard below was not extracted/obtained -** from/based on any real technologies. It should not be used for any -** other purposes except for benchmarking the implementation of BSIM-MG -** against BSIM Team's standard results - -.model pmos1 PMOS level=17 -+ BULKMOD = 1 -+ CGEOMOD = 0 -+ TYPE = 0 -+ GEOMOD = 0 -+ GIDLMOD = 1 -+ IGBMOD = 0 -+ IGCMOD = 1 -+ IIMOD = 0 -+ NGATE = 0 -+ NQSMOD = 0 -+ RDSMOD = 0 -+ RGATEMOD = 0 -+ RGEOMOD = 0 -+ NSEG = 5 -+ SDTERM = 0 -+ SHMOD = 0 -+ AGIDL = 2E-12 -+ AGISL = 2E-12 -+ AIGC = 0.007 -+ AIGD = 0.006 -+ AIGS = 0.006 -+ AT = 0.0008234 -+ BG0SUB = 1.17 -+ BGIDL = 1.50E+08 -+ BGISL = 1.50E+08 -+ BIGC = 0.0015 -+ BIGD = 0.001944 -+ BIGS = 0.001944 -+ CDSC = 0.003469 -+ CDSCD = 0.001486 -+ CFD = 0.2e-10 -+ CFS = 0.2e-10 -+ CGBL = 0 -+ CGBO = 0 -+ CGDL = 0 -+ CGDO = 1E-10 -+ CGSL = 0 -+ CGSO = 1E-10 -+ CIGC = 1 -+ CIGD = 1 -+ CIGS = 1 -+ CIT = 0 -+ CKAPPAD = 0.6 -+ CKAPPAS = 0.6 -+ CTH0 = 1.243E-06 -+ DELTAVSAT = 11.56 -+ DELTAW = 0 -+ DELTAWCV = -1.00E-08 -+ DLBIN = 0 -+ DLC = -9.2E-09 -+ DLCIGD = 5.00E-09 -+ DLCIGS = 5.00E-09 -+ DROUT = 4.97 -+ DSUB = 0.5 -+ DVT0 = 0.05006 -+ DVT1 = 0.4 -+ DVTSHIFT = 0 -+ EASUB = 4.05 -+ EGIDL = 1.142 -+ EGISL = 1.142 -+ EOT = 2.10E-09 -+ EOTACC = 3.00E-10 -+ EOTBOX = 1.40E-07 -+ EPSROX = 3.9 -+ EPSRSP = 3.9 -+ EPSRSUB = 11.9 -+ ETA0 = 0.03952 -+ ETAMOB = 4 -+ ETAQM = 0.54 -+ EU = 0.05 -+ HFIN = 3.00E-08 -+ IGT = 3.5 -+ K1RSCE = 0 -+ KSATIV = 1.592 -+ KT1 = 0.08387 -+ KT1L = 0 -+ LINT = -2.5E-09 -+ LPE0 = 0 -+ LCDSCD = 0 -+ LCDSCDR = 0 -+ LRDSW = 1.3 -+ LVSAT = 1441 -+ MEXP = 2.491 -+ NBODY = 1E+22 -+ NC0SUB = 2.86E+25 -+ NI0SUB = 1.1E+16 -+ NSD = 2E+26 -+ PCLM = 0.01 -+ PCLMCV = 0.013 -+ PCLMG = 1 -+ PDIBL1 = 800 -+ PDIBL2 = 0.005704 -+ PHIG = 4.678 -+ PHIN = 0.05 -+ POXEDGE = 1.152 -+ PQM = 0.66 -+ PRT = 0.002477 -+ PTWG = 6.322 -+ PTWGT = 0.0015 -+ PVAG = 200 -+ QM0 = 2.183E-12 -+ QMFACTOR = 0 -+ RDSW = 190.6 -+ RDSWMIN = 0 -+ RDWMIN = 0 -+ RSHD = 0 -+ RSHS = 0 -+ RSWMIN = 0 -+ RTH0 = 0.15 -+ TBGASUB = 0.000473 -+ TBGBSUB = 636 -+ TGIDL = -0.01 -+ TMEXP = 0 -+ TNOM = 25 -+ TOXP = 2.1E-09 -+ U0 = 0.02935 -+ UA = 1.133 -+ UA1 = 0.00134 -+ UCS = 0.2672 -+ UCSTE = 0 -+ UD = 0.0105 -+ UD1 = 0 -+ UP = 0 -+ UTE = 0 -+ UTL = 0.001 -+ VSAT = 48390 -+ WR = 1 -+ WTH0 = 2.60E-07 -+ XL = 0 diff --git a/examples/adms/bsimcmg/modelcard.pmos.1 b/examples/adms/bsimcmg/modelcard.pmos.1 deleted file mode 100644 index 77be8de45..000000000 --- a/examples/adms/bsimcmg/modelcard.pmos.1 +++ /dev/null @@ -1,110 +0,0 @@ -******** BSIM-MG 105 Sample Modelcard for PMOS ******** - -** The BSIM-MG sample modelcard below was not extracted/obtained -** from/based on any real technologies. It should not be used for any -** other purposes except for benchmarking the implementation of BSIM-MG -** against BSIM Team's standard results - -.model pmos1 PMOS level=17 -+ AGIDL =3.000p -+ AGISL =3.000p -+ AIGBINV =11.10m -+ AIGC =13.60m -+ AT = 0.007 -+ BG0SUB =1.120 -+ BGIDL =350.0E6 -+ BGISL =350.0E6 -+ BIGBINV =-1.000m -+ BIGC =1.710m -+ BULKMOD = 1 -+ CDSC =13.00m -+ CDSCD =10.00m -+ CFS = 1.0e-10 -+ CFD = 1.0e-10 -+ CGEOMOD = 0 -+ CGSL = 1.0e-10 -+ CGDL = 1.0e-10 -+ CIGBINV =6.000m -+ CIGC =75.00m -+ CIT =0.000 -+ CTH0 = 2.0e-5 -+ DELTAW =0.000 -+ DELTAWCV =0.000 -+ TYPE = 0.000 -+ DLC =0.000 -+ DROUT =0.530 -+ DSUB =0.530 -+ DVT0 =0.000 -+ DVT1 =600.0m -+ EASUB =4.050 -+ EGIDL =0.000 -+ EGISL =0.000 -+ EIGBINV =1.100 -+ EOT = 1.0n -+ EPSROX =3.900 -+ EPSRSUB =11.90 -+ ETA0 =50.0m -+ ETAMOB =2.000 -+ EU = 0.5 -+ FECH =0.500 -+ FECHCV =1.000 -+ GEOMOD =1.000 -+ GIDLMOD =1.000 -+ HFIN = 30n -+ IGBMOD =1.000 -+ IGCMOD =1.000 -+ K1RSCE =0.000 -+ KSATIV =1.000 -+ KT1 = 0.0 -+ LINT =0.000 -+ LL =0.000 -+ LLC =0.000 -+ LLN =1.000 -+ LPA =0.000 -+ LPE0 =5.000n -+ MEXP = 3 -+ NBODY = 1E+24 -+ NC0SUB =2.86000E+25 -+ NGATE = 0.0 -+ NI0SUB =1.10000E+16 -+ NIGBINV =3.000 -+ NSD =2.00000E+26 -+ PCLM =5.000m -+ PDIBL1 = 0.300 -+ PDIBL2 = 0.000 -+ PHIN =50.00m -+ PHIG = 4.610 -+ PRWGS = 0.000 -+ PVAG = 0.000 -+ QMFACTOR = 0.000 -+ RDSW = 100.0 -+ RDSWMIN = 0.0 -+ RSHS = 2.0 -+ RTH0 = 0.05 -+ U0 =20.00m -+ UA = 1.000 -+ UA1 = 1.032m -+ UCS = 1.0 -+ UD = 1.0 -+ UP =0.000 -+ UTE = 0.000 -+ UTL =-1.497m -+ VSAT =150.0K -+ WR =1.000 -+ XL =-5n -+ IIMOD =0.0 -+ BETAII0 = 0 -+ BETAII1 = .028 -+ BETAII2 = .067 -+ TII = -0.7 -+ SII0 = 3.4 -+ SII1 = .8 -+ SII2 = .08 -+ SIID = 0.08 -+ ESATII = 1.7e6 -+ LII = 3e-9 -+ RGATEMOD = 0 -+ RGFIN = 100 -+ NQSMOD = 0 -+ RDSMOD = 0 -+ SHMOD = 0 diff --git a/examples/adms/bsimcmg/noise.sp b/examples/adms/bsimcmg/noise.sp deleted file mode 100644 index 10d12322c..000000000 --- a/examples/adms/bsimcmg/noise.sp +++ /dev/null @@ -1,46 +0,0 @@ -*Samle netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -* Drain Noise Simulation - -.option abstol=1e-6 reltol=1e-6 post ingold -.temp 27 - -*.hdl "bsimcmg.va" -.include "modelcard.nmos" - -* --- Voltage Sources --- -vds 1 0 dc=1v -vgs gate 0 dc=0.5v ac=1 -vbs bulk 0 dc=0v - -* --- Circuit --- -lbias 1 drain 1m -cload drain 2 1m -rload 2 0 R=1 noise=0 -M1 drain gate 0 bulk 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - -* --- Analysis --- -*.op -**.dc vgs -0.5 1.5 0.01 -**.print dc i(lbias) -*.ac dec 11 1k 100g -*.noise v(drain) vgs 1 -**.print ac i(cload) -*.print ac v(drain) -*.print noise inoise onoise - -.control -op - -ac dec 11 1k 100g -plot vdb(drain) - -noise v(drain) vgs dec 11 1k 100g -print all -echo "silence in the studio, no noise today" - -.endc - -.end - diff --git a/examples/adms/bsimcmg/rdsgeo.sp b/examples/adms/bsimcmg/rdsgeo.sp deleted file mode 100644 index e650a5d99..000000000 --- a/examples/adms/bsimcmg/rdsgeo.sp +++ /dev/null @@ -1,77 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -* Geometry-dependent Rds - -.option abstol=1e-6 reltol=1e-6 post ingold -.temp 27 - -*.hdl "bsimcmg.va" - -.model nmos2 NMOS level=17 -+ DEVTYPE=1 -+ RGEOMOD=1 -+ HEPI=15n -+ CRATIO=0.5 -+ DELTAPRSD=12.42n -+ RHOC=1.0p -+ LSP=15n -+ HFIN=30n -+ NSD=2.0e+26 -+ LINT = 0 - -.model pmos2 PMOS level=17 -+ DEVTYPE=0 -+ RGEOMOD=1 -+ HEPI=15n -+ CRATIO=0.5 -+ DELTAPRSD=12.42n -+ RHOC=1.0p -+ LSP=15n -+ HFIN=30n -+ NSD=2.0e+26 -+ LINT = 0 - -.param fp = 45n - -* --- Voltage Sources --- -vds supply 0 dc=0 -vgs gate 0 dc=0 -vbs bulk 0 dc=0 - -* --- Transistor --- -Mn1 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=20n -Mn2 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=40n -Mn3 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=60n -Mn4 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=80n -Mp1 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=20n -Mp2 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=40n -Mp3 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=60n -Mp4 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=80n - -* --- DC Analysis --- -.dc vgs 0.0 1.0 0.1 -.print dc Xn1:RSGEO Xn2:RSGEO Xn3:RSGEO Xn4:RSGEO -.print dc Xp1:RSGEO Xp2:RSGEO Xp3:RSGEO Xp4:RSGEO - -.control -save @Mn1[RSGEO] @Mn2[RSGEO] @Mn3[RSGEO] @Mn4[RSGEO] -save @Mp1[RSGEO] @Mp2[RSGEO] @Mp3[RSGEO] @Mp4[RSGEO] -run -plot @Mn1[RSGEO] @Mn2[RSGEO] @Mn3[RSGEO] @Mn4[RSGEO] -plot @Mp1[RSGEO] @Mp2[RSGEO] @Mp3[RSGEO] @Mp4[RSGEO] - -alter @mn1[FPITCH] = 90n -alter @mn2[FPITCH] = 90n -alter @mn3[FPITCH] = 90n -alter @mn4[FPITCH] = 90n -alter @mp1[FPITCH] = 90n -alter @mp2[FPITCH] = 90n -alter @mp3[FPITCH] = 90n -alter @mp4[FPITCH] = 90n -run -plot @Mn1[RSGEO] @Mn2[RSGEO] @Mn3[RSGEO] @Mn4[RSGEO] -plot @Mp1[RSGEO] @Mp2[RSGEO] @Mp3[RSGEO] @Mp4[RSGEO] - -.endc - -.end diff --git a/examples/adms/bsimcmg/ringosc_17stg.sp b/examples/adms/bsimcmg/ringosc_17stg.sp deleted file mode 100644 index f7204e9e0..000000000 --- a/examples/adms/bsimcmg/ringosc_17stg.sp +++ /dev/null @@ -1,60 +0,0 @@ -*Sample netlist for BSIM-MG -* (exec-spice "ngspice %s" t) -*17-stage ring oscillator - -*.options abstol=1e-6 reltol=1e-6 post ingold -.options abstol=1e-6 reltol=1e-6 post ingold dcon=1 - -*.hdl "bsimcmg.va" -.include "modelcard.nmos" -.include "modelcard.pmos" - -* --- Voltage Sources --- -vdd supply 0 dc=1.0 - -* --- Inverter Subcircuit --- -.subckt mg_inv vin vout vdd gnd - mp1 vout vin vdd gnd 0 pmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - mn1 vout vin gnd gnd 0 nmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 -+ FPITCH = 4.00E-08 - -.ends - -* --- 17 Stage Ring oscillator --- -Xinv1 1 2 supply 0 mg_inv -Xinv2 2 3 supply 0 mg_inv -Xinv3 3 4 supply 0 mg_inv -Xinv4 4 5 supply 0 mg_inv -Xinv5 5 6 supply 0 mg_inv -Xinv6 6 7 supply 0 mg_inv -Xinv7 7 8 supply 0 mg_inv -Xinv8 8 9 supply 0 mg_inv -Xinv9 9 10 supply 0 mg_inv -Xinv10 10 11 supply 0 mg_inv -Xinv11 11 12 supply 0 mg_inv -Xinv12 12 13 supply 0 mg_inv -Xinv13 13 14 supply 0 mg_inv -Xinv14 14 15 supply 0 mg_inv -Xinv15 15 16 supply 0 mg_inv -Xinv16 16 17 supply 0 mg_inv -Xinv17 17 1 supply 0 mg_inv - -* --- Initial Condition --- -.ic v(1)=1 - -.tran 1p 1n - -.print tran v(1) - -.measure tran t1 when v(1)=0.5 cross=1 -.measure tran t2 when v(1)=0.5 cross=7 -.measure tran period param'(t2-t1)/3' -.measure tran delay_per_stage param'period/34' - -.control -run -plot v(1) -.endc - -.end diff --git a/src/spicelib/devices/adms/admst/ngspiceVersion.xml b/src/spicelib/devices/adms/admst/ngspiceVersion.xml index 26001c2b2..640be851f 100644 --- a/src/spicelib/devices/adms/admst/ngspiceVersion.xml +++ b/src/spicelib/devices/adms/admst/ngspiceVersion.xml @@ -2187,53 +2187,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg.va b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg.va deleted file mode 100644 index 5f15f3875..000000000 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg.va +++ /dev/null @@ -1,117 +0,0 @@ -// ******************************************************** -// **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 *****/ -// * BSIM Common Multi-Gate Model Equations (Verilog-A) -// ******************************************************** -// -// ******************************************************** -// * Copyright 2016 Regents of the University of California. -// * All rights reserved. -// * -// * Project Director: Prof. Chenming Hu. -// * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal -// * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, -// * Ali Niknejad, Chenming Hu -// ******************************************************** -// ******************************************************** -// * NONDISCLOSURE STATEMENT -// Software is distributed as is, completely without warranty or service -// support. The University of California and its employees are not liable -// for the condition or performance of the software. -// The University of California owns the copyright and grants users a perpetual, -// irrevocable, worldwide, non-exclusive, royalty-free license with -// respect to the software as set forth below. -// The University of California hereby disclaims all implied warranties. -// The University of California grants the users the right to modify, copy, -// and redistribute the software and documentation, both within the user's -// organization and externally, subject to the following restrictions -// 1. The users agree not to charge for the University of California code -// itself but may charge for additions, extensions, or support. -// 2. In any product based on the software, the users agree to acknowledge -// the University of California that developed the software. This -// acknowledgment shall appear in the product documentation. -// 3. The users agree to obey all U.S. Government restrictions governing -// redistribution or export of the software. -// 4. The users agree to reproduce any copyright notice which appears on -// the software on any copy or modification of such made available -// to others -// Agreed to on __Jan 01, 2016__________________ -// By: ___University of California, Berkeley____ -// ___Chenming Hu_____________________ -// ___Professor in Graduate School _______ -// ******************************************************** - - -`include "constants.vams" -`include "disciplines.vams" - -/**************************************************************/ -/* SHMOD is a model parameter */ -/* SHMOD = 1 : Self-heating turned on */ -/* SHMOD = 0 : Self-heating turned off */ -/* */ -/* RDSMOD is a model parameter */ -/* RDSMOD = 1 : External source/drain resistance model */ -/* RDSMOD = 0 : Internal source/drain resistance model */ -/* RDSMOD = 2 : Internal Bias Dependent and Bias Independent part of source/drain resistance */ -/* */ -/* NQSMOD is a model parameter */ -/* NQSMOD = 1 : NQS Resistance / gi node turned on */ -/* NQSMOD = 0 : NQS Resistance / gi node turned off */ -/* */ -/* RGATEMOD is a model parameter */ -/* RGATEMOD = 1 : Gate Resistance / ge node turned on */ -/* RGATEMOD = 0 : Gate Resistance / ge node turned off */ -/**************************************************************/ -// -// In Verilog-A the number of internal nodes cannot be controlled by -// a model parameter. Therefore we use `define statements -// to control it. Comment the following lines whenever -// possible for best computational efficiency. -`define __OPINFO__ -`define __DEBUG__ -`define __SHMOD__ -`define __RDSMOD__ -//`define __NQSMOD1__ -//`define __NQSMOD2__ -`define __RGATEMOD__ -`define __TNOIMOD1__ //Correlated Thermal Noise Switch - -`include "common_defs.include" -`include "bsimcmg_cfringe.include" - - -module bsimcmg(d, g, s, e, t); - inout g, d, s, e, t; - electrical g, d, s, e; - electrical si, di; - -`ifdef __NQSMOD1__ - electrical gi; -`endif - -`ifdef __NQSMOD2__ - electrical q; -`endif - -`ifdef __RGATEMOD__ - electrical ge; -`endif - -`ifdef __SHMOD__ - thermal t; - branch (t) rth_branch; - branch (t) ith_branch; -`else - thermal t; -`endif - -// Internal node controlled by Correlated Thermal Noise Switch -`ifdef __TNOIMOD1__ - electrical N; -`endif - -`include "bsimcmg_body.include" - - -endmodule - diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_binning_parameters.include b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_binning_parameters.include deleted file mode 100644 index f55c5d9ed..000000000 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_binning_parameters.include +++ /dev/null @@ -1,756 +0,0 @@ -// ******************************************************** -// **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ -// * BSIM Common Multi-Gate Model Equations (Verilog-A) -// ******************************************************** -// -// ******************************************************** -// * Copyright 2016 Regents of the University of California. -// * All rights reserved. -// * -// * Project Director: Prof. Chenming Hu. -// * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal -// * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, -// * Ali Niknejad, Chenming Hu -// ******************************************************** -// ******************************************************** -// * NONDISCLOSURE STATEMENT -// Software is distributed as is, completely without warranty or service -// support. The University of California and its employees are not liable -// for the condition or performance of the software. -// The University of California owns the copyright and grants users a perpetual, -// irrevocable, worldwide, non-exclusive, royalty-free license with -// respect to the software as set forth below. -// The University of California hereby disclaims all implied warranties. -// The University of California grants the users the right to modify, copy, -// and redistribute the software and documentation, both within the user's -// organization and externally, subject to the following restrictions -// 1. The users agree not to charge for the University of California code -// itself but may charge for additions, extensions, or support. -// 2. In any product based on the software, the users agree to acknowledge -// the University of California that developed the software. This -// acknowledgment shall appear in the product documentation. -// 3. The users agree to obey all U.S. Government restrictions governing -// redistribution or export of the software. -// 4. The users agree to reproduce any copyright notice which appears on -// the software on any copy or modification of such made available -// to others -// Agreed to on __Jan 01, 2016_________________ -// By: ___University of California, Berkeley____ -// ___Chenming Hu_____________________ -// ___Professor in Graduate School _______ -// ******************************************************** -`MPRnb( LNBODY ,0.0 ,"m^-2" ,"" ) -`MPRnb( NNBODY ,0.0 ,"m^-2" ,"" ) -`MPRnb( PNBODY ,0.0 ,"m^-1" ,"" ) - -`MPRnb( LPHIG ,0.0 ,"m*eV" ,"" ) -`MPRnb( NPHIG ,0.0 ,"m*eV" ,"" ) -`MPRnb( PPHIG ,0.0 ,"(m^2)*eV" ,"" ) - -`MPRnb( LNGATE ,0.0 ,"m^-2" ,"" ) -`MPRnb( NNGATE ,0.0 ,"m^-2" ,"" ) -`MPRnb( PNGATE ,0.0 ,"m^-1" ,"" ) - -`MPRnb( LCIT ,0.0 ,"F/m" ,"" ) -`MPRnb( NCIT ,0.0 ,"F/m" ,"" ) -`MPRnb( PCIT ,0.0 ,"F" ,"" ) - -`MPRnb( LCITR ,LCIT ,"" ,"" ) -`MPRnb( NCITR ,NCIT ,"" ,"" ) -`MPRnb( PCITR ,PCIT ,"" ,"" ) - -`MPRnb( LCDSC ,0.0 ,"F/m" ,"" ) -`MPRnb( NCDSC ,0.0 ,"F/m" ,"" ) -`MPRnb( PCDSC ,0.0 ,"F" ,"" ) - -`MPRnb( LCDSCD ,0.0 ,"F/m" ,"" ) -`MPRnb( NCDSCD ,0.0 ,"F/m" ,"" ) -`MPRnb( PCDSCD ,0.0 ,"F" ,"" ) - -`MPRnb( LCDSCDR ,LCDSCD ,"F/m" ,"" ) -`MPRnb( NCDSCDR ,NCDSCD ,"F/m" ,"" ) -`MPRnb( PCDSCDR ,PCDSCD ,"F" ,"" ) - -`MPRnb( LDVT0 ,0.0 ,"" ,"" ) -`MPRnb( NDVT0 ,0.0 ,"" ,"" ) -`MPRnb( PDVT0 ,0.0 ,"" ,"" ) - -`MPRnb( LDVT1 ,0.0 ,"" ,"" ) -`MPRnb( NDVT1 ,0.0 ,"" ,"" ) -`MPRnb( PDVT1 ,0.0 ,"" ,"" ) - -`MPRnb( LDVT1SS ,LDVT1 ,"" ,"" ) -`MPRnb( NDVT1SS ,NDVT1 ,"" ,"" ) -`MPRnb( PDVT1SS ,PDVT1 ,"" ,"" ) - -`MPRnb( LPHIN ,0.0 ,"m*V" ,"" ) -`MPRnb( NPHIN ,0.0 ,"m*V" ,"" ) -`MPRnb( PPHIN ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LETA0 ,0.0 ,"" ,"" ) -`MPRnb( NETA0 ,0.0 ,"" ,"" ) -`MPRnb( PETA0 ,0.0 ,"" ,"" ) - -`MPRnb( LETA0R ,LETA0 ,"" ,"" ) -`MPRnb( NETA0R ,NETA0 ,"" ,"" ) -`MPRnb( PETA0R ,PETA0 ,"" ,"" ) - -`MPRnb( LDSUB ,0.0 ,"" ,"" ) -`MPRnb( NDSUB ,0.0 ,"" ,"" ) -`MPRnb( PDSUB ,0.0 ,"" ,"" ) - -`MPRnb( LK1RSCE ,0.0 ,"m*V^(1/2)" ,"" ) -`MPRnb( NK1RSCE ,0.0 ,"m*V^(1/2)" ,"" ) -`MPRnb( PK1RSCE ,0.0 ,"(m^2)*V^(1/2)" ,"" ) - -`MPRnb( LLPE0 ,0.0 ,"m^2" ,"" ) -`MPRnb( NLPE0 ,0.0 ,"m^2" ,"" ) -`MPRnb( PLPE0 ,0.0 ,"m^3" ,"" ) - -`MPRnb( LDVTSHIFT ,0.0 ,"m*V" ,"" ) -`MPRnb( NDVTSHIFT ,0.0 ,"m*V" ,"" ) -`MPRnb( PDVTSHIFT ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LDVTSHIFTR ,LDVTSHIFT ,"" ,"" ) -`MPRnb( NDVTSHIFTR ,NDVTSHIFT ,"" ,"" ) -`MPRnb( PDVTSHIFTR ,PDVTSHIFT ,"" ,"" ) - -`MPRnb( LPHIBE ,0.0 ,"m*V" ,"" ) -`MPRnb( NPHIBE ,0.0 ,"m*V" ,"" ) -`MPRnb( PPHIBE ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LK0 ,0.0 ,"m*V" ,"" ) -`MPRnb( NK0 ,0.0 ,"m*V" ,"" ) -`MPRnb( PK0 ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LK01 ,0.0 ,"(m*V)/K" ,"" ) -`MPRnb( NK01 ,0.0 ,"(m*V)/K" ,"" ) -`MPRnb( PK01 ,0.0 ,"(m^2*V)/K" ,"" ) - -`MPRnb( LK0SI ,0.0 ,"" ,"" ) -`MPRnb( NK0SI ,0.0 ,"" ,"" ) -`MPRnb( PK0SI ,0.0 ,"" ,"" ) - -`MPRnb( LK0SI1 ,0.0 ,"m/K" ,"" ) -`MPRnb( NK0SI1 ,0.0 ,"m/K" ,"" ) -`MPRnb( PK0SI1 ,0.0 ,"(m^2)/K" ,"" ) - -`MPRnb( LK1 ,0.0 ,"m*V^(1/2)" ,"" ) -`MPRnb( NK1 ,0.0 ,"m*V^(1/2)" ,"" ) -`MPRnb( PK1 ,0.0 ,"(m^2)*V^(1/2)" ,"" ) - -`MPRnb( LK11 ,0.0 ,"(m*V^(-1/2))/K" ,"" ) -`MPRnb( NK11 ,0.0 ,"(m*V^(-1/2))/K" ,"" ) -`MPRnb( PK11 ,0.0 ,"(m^2*V^(-1/2))/K" ,"" ) - -`MPRnb( LK2SI ,LK0SI ,"" ,"" ) -`MPRnb( NK2SI ,NK0SI ,"" ,"" ) -`MPRnb( PK2SI ,PK0SI ,"" ,"" ) - -`MPRnb( LK2SI1 ,LK0SI1 ,"" ,"" ) -`MPRnb( NK2SI1 ,NK0SI1 ,"" ,"" ) -`MPRnb( PK2SI1 ,PK0SI1 ,"" ,"" ) - -`MPRnb( LK0SISAT ,0.0 ,"" ,"" ) -`MPRnb( NK0SISAT ,0.0 ,"" ,"" ) -`MPRnb( PK0SISAT ,0.0 ,"" ,"" ) - -`MPRnb( LK0SISAT1 ,0.0 ,"" ,"" ) -`MPRnb( NK0SISAT1 ,0.0 ,"" ,"" ) -`MPRnb( PK0SISAT1 ,0.0 ,"" ,"" ) - -`MPRnb( LK2SISAT ,LK0SISAT ,"" ,"" ) -`MPRnb( NK2SISAT ,NK0SISAT ,"" ,"" ) -`MPRnb( PK2SISAT ,PK0SISAT ,"" ,"" ) - -`MPRnb( LK2SISAT1 ,LK0SISAT1 ,"" ,"" ) -`MPRnb( NK2SISAT1 ,NK0SISAT1 ,"" ,"" ) -`MPRnb( PK2SISAT1 ,PK0SISAT1 ,"" ,"" ) - -`MPRnb( LK2SAT ,0.0 ,"" ,"" ) -`MPRnb( NK2SAT ,0.0 ,"" ,"" ) -`MPRnb( PK2SAT ,0.0 ,"" ,"" ) - -`MPRnb( LK2SAT1 ,0.0 ,"" ,"" ) -`MPRnb( NK2SAT1 ,0.0 ,"" ,"" ) -`MPRnb( PK2SAT1 ,0.0 ,"" ,"" ) - -`MPRnb( LK2 ,0.0 ,"" ,"" ) -`MPRnb( NK2 ,0.0 ,"" ,"" ) -`MPRnb( PK2 ,0.0 ,"" ,"" ) - -`MPRnb( LK21 ,0.0 ,"" ,"" ) -`MPRnb( NK21 ,0.0 ,"" ,"" ) -`MPRnb( PK21 ,0.0 ,"" ,"" ) - -`MPRnb( LDVTB ,0.0 ,"" ,"" ) -`MPRnb( NDVTB ,0.0 ,"" ,"" ) -`MPRnb( PDVTB ,0.0 ,"" ,"" ) - -`MPRnb( LLPEB ,0.0 ,"" ,"" ) -`MPRnb( NLPEB ,0.0 ,"" ,"" ) -`MPRnb( PLPEB ,0.0 ,"" ,"" ) - -`MPRnb( LQMFACTOR ,0.0 ,"" ,"" ) -`MPRnb( NQMFACTOR ,0.0 ,"" ,"" ) -`MPRnb( PQMFACTOR ,0.0 ,"" ,"" ) - -`MPRnb( LQMTCENCV ,0.0 ,"" ,"" ) -`MPRnb( NQMTCENCV ,0.0 ,"" ,"" ) -`MPRnb( PQMTCENCV ,0.0 ,"" ,"" ) - -`MPRnb( LQMTCENCVA ,0.0 ,"" ,"" ) -`MPRnb( NQMTCENCVA ,0.0 ,"" ,"" ) -`MPRnb( PQMTCENCVA ,0.0 ,"" ,"" ) - -`MPRnb( LVSAT ,0.0 ,"(m^2)/s" ,"" ) -`MPRnb( NVSAT ,0.0 ,"(m^2)/s" ,"" ) -`MPRnb( PVSAT ,0.0 ,"(m^3)/s" ,"" ) - -`MPRnb( LVSATR ,LVSAT ,"" ,"" ) -`MPRnb( NVSATR ,NVSAT ,"" ,"" ) -`MPRnb( PVSATR ,PVSAT ,"" ,"" ) - -`MPRnb( LVSAT1 ,LVSAT ,"" ,"" ) -`MPRnb( NVSAT1 ,NVSAT ,"" ,"" ) -`MPRnb( PVSAT1 ,PVSAT ,"" ,"" ) - -`MPRnb( LVSAT1R ,LVSAT1 ,"(m^2)/s" ,"" ) -`MPRnb( NVSAT1R ,NVSAT1 ,"(m^2)/s" ,"" ) -`MPRnb( PVSAT1R ,PVSAT1 ,"(m^3)/s" ,"" ) - -`MPRnb( LPSAT ,0.0 ,"" ,"" ) -`MPRnb( NPSAT ,0.0 ,"" ,"" ) -`MPRnb( PPSAT ,0.0 ,"" ,"" ) - -`MPRnb( LDELTAVSAT ,0.0 ,"" ,"" ) -`MPRnb( NDELTAVSAT ,0.0 ,"" ,"" ) -`MPRnb( PDELTAVSAT ,0.0 ,"" ,"" ) - -`MPRnb( LKSATIV ,0.0 ,"" ,"" ) -`MPRnb( NKSATIV ,0.0 ,"" ,"" ) -`MPRnb( PKSATIV ,0.0 ,"" ,"" ) - -`MPRnb( LKSATIVR ,LKSATIV ,"" ,"" ) -`MPRnb( NKSATIVR ,NKSATIV ,"" ,"" ) -`MPRnb( PKSATIVR ,PKSATIV ,"" ,"" ) - -`MPRnb( LVSATCV ,0.0 ,"(m^2)/s" ,"" ) -`MPRnb( NVSATCV ,0.0 ,"(m^2)/s" ,"" ) -`MPRnb( PVSATCV ,0.0 ,"(m^3)/s" ,"" ) - -`MPRnb( LPSATCV ,0.0 ,"" ,"" ) -`MPRnb( NPSATCV ,0.0 ,"" ,"" ) -`MPRnb( PPSATCV ,0.0 ,"" ,"" ) - -`MPRnb( LDELTAVSATCV ,0.0 ,"" ,"" ) -`MPRnb( NDELTAVSATCV ,0.0 ,"" ,"" ) -`MPRnb( PDELTAVSATCV ,0.0 ,"" ,"" ) - -`MPRnb( LMEXP ,0.0 ,"" ,"" ) -`MPRnb( NMEXP ,0.0 ,"" ,"" ) -`MPRnb( PMEXP ,0.0 ,"" ,"" ) - -`MPRnb( LMEXPR ,LMEXP ,"" ,"" ) -`MPRnb( NMEXPR ,NMEXP ,"" ,"" ) -`MPRnb( PMEXPR ,PMEXP ,"" ,"" ) - -`MPRnb( LPTWG ,0.0 ,"m*(V^-2)" ,"" ) -`MPRnb( NPTWG ,0.0 ,"m*(V^-2)" ,"" ) -`MPRnb( PPTWG ,0.0 ,"m^2*(V^-2)" ,"" ) - -`MPRnb( LPTWGR ,LPTWG ,"m*(V^-2)" ,"" ) -`MPRnb( NPTWGR ,NPTWG ,"m*(V^-2)" ,"" ) -`MPRnb( PPTWGR ,PPTWG ,"m^2*(V^-2)" ,"" ) - -`MPRnb( LU0 ,0.0 ,"(m^3)/V*s" ,"" ) -`MPRnb( NU0 ,0.0 ,"(m^3)/V*s" ,"" ) -`MPRnb( PU0 ,0.0 ,"(m^4)/V*s" ,"" ) - -`MPRnb( LU0R ,LU0 ,"" ,"" ) -`MPRnb( NU0R ,NU0 ,"" ,"" ) -`MPRnb( PU0R ,PU0 ,"" ,"" ) - -`MPRnb( LETAMOB ,0.0 ,"" ,"" ) -`MPRnb( NETAMOB ,0.0 ,"" ,"" ) -`MPRnb( PETAMOB ,0.0 ,"" ,"" ) - -`MPRnb( LUP ,0.0 ,"m*(um^LPA)" ,"" ) -`MPRnb( NUP ,0.0 ,"m*(um^LPA)" ,"" ) -`MPRnb( PUP ,0.0 ,"m^2*(um^LPA)" ,"" ) - -`MPRnb( LUPR ,LUP ,"" ,"" ) -`MPRnb( NUPR ,NUP ,"" ,"" ) -`MPRnb( PUPR ,PUP ,"" ,"" ) - -`MPRnb( LUA ,0.0 ,"m*((cm/MV)^EU)" ,"" ) -`MPRnb( NUA ,0.0 ,"m*((cm/MV)^EU)" ,"" ) -`MPRnb( PUA ,0.0 ,"m^2*((cm/MV)^EU)" ,"" ) - -`MPRnb( LUAR ,LUA ,"" ,"" ) -`MPRnb( NUAR ,NUA ,"" ,"" ) -`MPRnb( PUAR ,PUA ,"" ,"" ) - -`MPRnb( LUC ,0.0 ,"" ,"" ) -`MPRnb( NUC ,0.0 ,"" ,"" ) -`MPRnb( PUC ,0.0 ,"" ,"" ) - -`MPRnb( LUCR ,LUC ,"" ,"" ) -`MPRnb( NUCR ,NUC ,"" ,"" ) -`MPRnb( PUCR ,PUC ,"" ,"" ) - -`MPRnb( LEU ,0.0 ,"m*(cm/MV)" ,"" ) -`MPRnb( NEU ,0.0 ,"m*(cm/MV)" ,"" ) -`MPRnb( PEU ,0.0 ,"m^2*(cm/MV)" ,"" ) - -`MPRnb( LEUR ,LEU ,"" ,"" ) -`MPRnb( NEUR ,NEU ,"" ,"" ) -`MPRnb( PEUR ,PEU ,"" ,"" ) - -`MPRnb( LUD ,0.0 ,"m*(cm/MV)" ,"" ) -`MPRnb( NUD ,0.0 ,"m*(cm/MV)" ,"" ) -`MPRnb( PUD ,0.0 ,"m^2*(cm/MV)" ,"" ) - -`MPRnb( LUDR ,LUD ,"" ,"" ) -`MPRnb( NUDR ,NUD ,"" ,"" ) -`MPRnb( PUDR ,PUD ,"" ,"" ) - -`MPRnb( LUCS ,0.0 ,"" ,"" ) -`MPRnb( NUCS ,0.0 ,"" ,"" ) -`MPRnb( PUCS ,0.0 ,"" ,"" ) - -`MPRnb( LPCLM ,0.0 ,"" ,"" ) -`MPRnb( NPCLM ,0.0 ,"" ,"" ) -`MPRnb( PPCLM ,0.0 ,"" ,"" ) - -`MPRnb( LPCLMR ,LPCLM ,"" ,"" ) -`MPRnb( NPCLMR ,NPCLM ,"" ,"" ) -`MPRnb( PPCLMR ,PPCLM ,"" ,"" ) - -`MPRnb( LPCLMG ,0.0 ,"" ,"" ) -`MPRnb( NPCLMG ,0.0 ,"" ,"" ) -`MPRnb( PPCLMG ,0.0 ,"" ,"" ) - -`MPRnb( LPCLMCV ,LPCLM ,"" ,"" ) -`MPRnb( NPCLMCV ,NPCLM ,"" ,"" ) -`MPRnb( PPCLMCV ,PPCLM ,"" ,"" ) - -`MPRnb( LA1 ,0.0 ,"m*(V^-2)" ,"" ) -`MPRnb( NA1 ,0.0 ,"m*(V^-2)" ,"" ) -`MPRnb( PA1 ,0.0 ,"m^2*(V^-2)" ,"" ) - -`MPRnb( LA11 ,0.0 ,"m*(V^-2/K)" ,"" ) -`MPRnb( NA11 ,0.0 ,"m*(V^-2/K)" ,"" ) -`MPRnb( PA11 ,0.0 ,"m^2*(V^-2/K)" ,"" ) - -`MPRnb( LA2 ,0.0 ,"m*(V^-1)" ,"" ) -`MPRnb( NA2 ,0.0 ,"m*(V^-1)" ,"" ) -`MPRnb( PA2 ,0.0 ,"m^2*(V^-1)" ,"" ) - -`MPRnb( LA21 ,0.0 ,"m*(V^-1/K)" ,"" ) -`MPRnb( NA21 ,0.0 ,"m*(V^-1/K)" ,"" ) -`MPRnb( PA21 ,0.0 ,"m^2*(V^-1/K)" ,"" ) - -`MPRnb( LRDSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) -`MPRnb( NRDSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) -`MPRnb( PRDSW ,0.0 ,"(m^2)*(ohm-um^WR)" ,"" ) - -`MPRnb( LRSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) -`MPRnb( NRSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) -`MPRnb( PRSW ,0.0 ,"(m^2)*(ohm-um^WR)" ,"" ) - -`MPRnb( LRDW ,0.0 ,"m*(ohm-um^WR)" ,"" ) -`MPRnb( NRDW ,0.0 ,"m*(ohm-um^WR)" ,"" ) -`MPRnb( PRDW ,0.0 ,"(m^2)*(ohm-um^WR)" ,"" ) - -`MPRnb( LPRWGS ,0.0 ,"m/V" ,"" ) -`MPRnb( NPRWGS ,0.0 ,"m/V" ,"" ) -`MPRnb( PPRWGS ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LPRWGD ,0.0 ,"m/V" ,"" ) -`MPRnb( NPRWGD ,0.0 ,"m/V" ,"" ) -`MPRnb( PPRWGD ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LWR ,0.0 ,"" ,"" ) -`MPRnb( NWR ,0.0 ,"" ,"" ) -`MPRnb( PWR ,0.0 ,"" ,"" ) - -`MPRnb( LPDIBL1 ,0.0 ,"" ,"" ) -`MPRnb( NPDIBL1 ,0.0 ,"" ,"" ) -`MPRnb( PPDIBL1 ,0.0 ,"" ,"" ) - -`MPRnb( LPDIBL1R ,LPDIBL1 ,"" ,"" ) -`MPRnb( NPDIBL1R ,NPDIBL1 ,"" ,"" ) -`MPRnb( PPDIBL1R ,PPDIBL1 ,"" ,"" ) - -`MPRnb( LPDIBL2 ,0.0 ,"" ,"" ) -`MPRnb( NPDIBL2 ,0.0 ,"" ,"" ) -`MPRnb( PPDIBL2 ,0.0 ,"" ,"" ) - -`MPRnb( LPDIBL2R ,LPDIBL2 ,"" ,"" ) -`MPRnb( NPDIBL2R ,NPDIBL2 ,"" ,"" ) -`MPRnb( PPDIBL2R ,PPDIBL2 ,"" ,"" ) - -`MPRnb( LDROUT ,0.0 ,"" ,"" ) -`MPRnb( NDROUT ,0.0 ,"" ,"" ) -`MPRnb( PDROUT ,0.0 ,"" ,"" ) - -`MPRnb( LPVAG ,0.0 ,"" ,"" ) -`MPRnb( NPVAG ,0.0 ,"" ,"" ) -`MPRnb( PPVAG ,0.0 ,"" ,"" ) - -`MPRnb( LAIGBINV ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( NAIGBINV ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( PAIGBINV ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) - -`MPRnb( LAIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( NAIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( PAIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) - -`MPRnb( LBIGBINV ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( NBIGBINV ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( PBIGBINV ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) - -`MPRnb( LCIGBINV ,0.0 ,"m/V" ,"" ) -`MPRnb( NCIGBINV ,0.0 ,"m/V" ,"" ) -`MPRnb( PCIGBINV ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LEIGBINV ,0.0 ,"m*V" ,"" ) -`MPRnb( NEIGBINV ,0.0 ,"m*V" ,"" ) -`MPRnb( PEIGBINV ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LNIGBINV ,0.0 ,"" ,"" ) -`MPRnb( NNIGBINV ,0.0 ,"" ,"" ) -`MPRnb( PNIGBINV ,0.0 ,"" ,"" ) - -`MPRnb( LAIGBACC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( NAIGBACC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( PAIGBACC ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) - -`MPRnb( LAIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( NAIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( PAIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) - -`MPRnb( LBIGBACC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( NBIGBACC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( PBIGBACC ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) - -`MPRnb( LCIGBACC ,0.0 ,"m/V" ,"" ) -`MPRnb( NCIGBACC ,0.0 ,"m/V" ,"" ) -`MPRnb( PCIGBACC ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LNIGBACC ,0.0 ,"" ,"" ) -`MPRnb( NNIGBACC ,0.0 ,"" ,"" ) -`MPRnb( PNIGBACC ,0.0 ,"" ,"" ) - -`MPRnb( LAIGC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( NAIGC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( PAIGC ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) - -`MPRnb( LAIGC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( NAIGC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( PAIGC1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) - -`MPRnb( LBIGC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( NBIGC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( PBIGC ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) - -`MPRnb( LCIGC ,0.0 ,"m/V" ,"" ) -`MPRnb( NCIGC ,0.0 ,"m/V" ,"" ) -`MPRnb( PCIGC ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LPIGCD ,0.0 ,"" ,"" ) -`MPRnb( NPIGCD ,0.0 ,"" ,"" ) -`MPRnb( PPIGCD ,0.0 ,"" ,"" ) - -`MPRnb( LAIGS ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( NAIGS ,0.0 ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( PAIGS ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) - -`MPRnb( LAIGS1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( NAIGS1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( PAIGS1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) - -`MPRnb( LBIGS ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( NBIGS ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( PBIGS ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) - -`MPRnb( LCIGS ,0.0 ,"m/V" ,"" ) -`MPRnb( NCIGS ,0.0 ,"m/V" ,"" ) -`MPRnb( PCIGS ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LAIGD ,LAIGS ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( NAIGD ,NAIGS ,"(F*s^2/g)^0.5" ,"" ) -`MPRnb( PAIGD ,PAIGS ,"((F*s^2/g)^0.5)*m" ,"" ) - -`MPRnb( LAIGD1 ,LAIGS1 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( NAIGD1 ,NAIGS1 ,"((F*s^2/g)^0.5)/K" ,"" ) -`MPRnb( PAIGD1 ,PAIGS1 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) - -`MPRnb( LBIGD ,LBIGS ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( NBIGD ,NBIGS ,"((F*s^2/g)^0.5)/V" ,"" ) -`MPRnb( PBIGD ,PBIGS ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) - -`MPRnb( LCIGD ,LCIGS ,"m/V" ,"" ) -`MPRnb( NCIGD ,NCIGS ,"m/V" ,"" ) -`MPRnb( PCIGD ,PCIGS ,"(m^2)/V" ,"" ) - -`MPRnb( LNTOX ,0.0 ,"" ,"" ) -`MPRnb( NNTOX ,0.0 ,"" ,"" ) -`MPRnb( PNTOX ,0.0 ,"" ,"" ) - -`MPRnb( LPOXEDGE ,0.0 ,"" ,"" ) -`MPRnb( NPOXEDGE ,0.0 ,"" ,"" ) -`MPRnb( PPOXEDGE ,0.0 ,"" ,"" ) - -`MPRnb( LAGISL ,0.0 ,"m/ohm" ,"" ) -`MPRnb( NAGISL ,0.0 ,"m/ohm" ,"" ) -`MPRnb( PAGISL ,0.0 ,"(m^2)/ohm" ,"" ) - -`MPRnb( LBGISL ,0.0 ,"V" ,"" ) -`MPRnb( NBGISL ,0.0 ,"V" ,"" ) -`MPRnb( PBGISL ,0.0 ,"m*V" ,"" ) - -`MPRnb( LCGISL ,0.0 ,"m*(V^3)" ,"" ) -`MPRnb( NCGISL ,0.0 ,"m*(V^3)" ,"" ) -`MPRnb( PCGISL ,0.0 ,"(m^2)*(V^3)" ,"" ) - -`MPRnb( LEGISL ,0.0 ,"m*V" ,"" ) -`MPRnb( NEGISL ,0.0 ,"m*V" ,"" ) -`MPRnb( PEGISL ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LPGISL ,0.0 ,"" ,"" ) -`MPRnb( NPGISL ,0.0 ,"" ,"" ) -`MPRnb( PPGISL ,0.0 ,"" ,"" ) - -`MPRnb( LAGIDL ,LAGISL ,"m/ohm" ,"" ) -`MPRnb( NAGIDL ,NAGISL ,"m/ohm" ,"" ) -`MPRnb( PAGIDL ,PAGISL ,"(m^2)/ohm" ,"" ) - -`MPRnb( LBGIDL ,LBGISL ,"V" ,"" ) -`MPRnb( NBGIDL ,NBGISL ,"V" ,"" ) -`MPRnb( PBGIDL ,PBGISL ,"m*V" ,"" ) - -`MPRnb( LCGIDL ,LCGISL ,"m*(V^3)" ,"" ) -`MPRnb( NCGIDL ,NCGISL ,"m*(V^3)" ,"" ) -`MPRnb( PCGIDL ,PCGISL ,"(m^2)*(V^3)" ,"" ) - -`MPRnb( LEGIDL ,LEGISL ,"m*V" ,"" ) -`MPRnb( NEGIDL ,NEGISL ,"m*V" ,"" ) -`MPRnb( PEGIDL ,PEGISL ,"(m^2)*V" ,"" ) - -`MPRnb( LPGIDL ,LPGISL ,"" ,"" ) -`MPRnb( NPGIDL ,NPGISL ,"" ,"" ) -`MPRnb( PPGIDL ,PPGISL ,"" ,"" ) - -`MPRnb( LALPHA0 ,0.0 ,"(m^2)/V" ,"" ) -`MPRnb( NALPHA0 ,0.0 ,"(m^2)/V" ,"" ) -`MPRnb( PALPHA0 ,0.0 ,"(m^3)/V" ,"" ) - -`MPRnb( LALPHA1 ,0.0 ,"m/V" ,"" ) -`MPRnb( NALPHA1 ,0.0 ,"m/V" ,"" ) -`MPRnb( PALPHA1 ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LALPHAII0 ,0.0 ,"(m^2)/V" ,"" ) -`MPRnb( NALPHAII0 ,0.0 ,"(m^2)/V" ,"" ) -`MPRnb( PALPHAII0 ,0.0 ,"(m^3)/V" ,"" ) - -`MPRnb( LALPHAII1 ,0.0 ,"m/V" ,"" ) -`MPRnb( NALPHAII1 ,0.0 ,"m/V" ,"" ) -`MPRnb( PALPHAII1 ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LBETA0 ,0.0 ,"m/V" ,"" ) -`MPRnb( NBETA0 ,0.0 ,"m/V" ,"" ) -`MPRnb( PBETA0 ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LBETAII0 ,0.0 ,"m/V" ,"" ) -`MPRnb( NBETAII0 ,0.0 ,"m/V" ,"" ) -`MPRnb( PBETAII0 ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LBETAII1 ,0.0 ,"" ,"" ) -`MPRnb( NBETAII1 ,0.0 ,"" ,"" ) -`MPRnb( PBETAII1 ,0.0 ,"" ,"" ) - -`MPRnb( LBETAII2 ,0.0 ,"m*V" ,"" ) -`MPRnb( NBETAII2 ,0.0 ,"m*V" ,"" ) -`MPRnb( PBETAII2 ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LESATII ,0.0 ,"V" ,"" ) -`MPRnb( NESATII ,0.0 ,"V" ,"" ) -`MPRnb( PESATII ,0.0 ,"m*V" ,"" ) - -`MPRnb( LLII ,0.0 ,"(m^2)*V" ,"" ) -`MPRnb( NLII ,0.0 ,"(m^2)*V" ,"" ) -`MPRnb( PLII ,0.0 ,"(m^3)*V" ,"" ) - -`MPRnb( LSII0 ,0.0 ,"m/V" ,"" ) -`MPRnb( NSII0 ,0.0 ,"m/V" ,"" ) -`MPRnb( PSII0 ,0.0 ,"(m^2)/V" ,"" ) - -`MPRnb( LSII1 ,0.0 ,"" ,"" ) -`MPRnb( NSII1 ,0.0 ,"" ,"" ) -`MPRnb( PSII1 ,0.0 ,"" ,"" ) - -`MPRnb( LSII2 ,0.0 ,"m*V" ,"" ) -`MPRnb( NSII2 ,0.0 ,"m*V" ,"" ) -`MPRnb( PSII2 ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LSIID ,0.0 ,"m*V" ,"" ) -`MPRnb( NSIID ,0.0 ,"m*V" ,"" ) -`MPRnb( PSIID ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LCFS ,0.0 ,"F" ,"" ) -`MPRnb( NCFS ,0.0 ,"F" ,"" ) -`MPRnb( PCFS ,0.0 ,"F*m" ,"" ) - -`MPRnb( LCFD ,LCFS ,"F" ,"" ) -`MPRnb( NCFD ,NCFS ,"F" ,"" ) -`MPRnb( PCFD ,PCFS ,"F*m" ,"" ) - -`MPRnb( LCOVS ,0.0 ,"F" ,"" ) -`MPRnb( NCOVS ,0.0 ,"F" ,"" ) -`MPRnb( PCOVS ,0.0 ,"F*m" ,"" ) - -`MPRnb( LCOVD ,LCOVS ,"F" ,"" ) -`MPRnb( NCOVD ,NCOVS ,"F" ,"" ) -`MPRnb( PCOVD ,PCOVS ,"F*m" ,"" ) - -`MPRnb( LCGSL ,0.0 ,"F" ,"" ) -`MPRnb( NCGSL ,0.0 ,"F" ,"" ) -`MPRnb( PCGSL ,0.0 ,"F*m" ,"" ) - -`MPRnb( LCGDL ,LCGSL ,"F" ,"" ) -`MPRnb( NCGDL ,NCGSL ,"F" ,"" ) -`MPRnb( PCGDL ,PCGSL ,"F*m" ,"" ) - -`MPRnb( LCKAPPAS ,0.0 ,"m*V" ,"" ) -`MPRnb( NCKAPPAS ,0.0 ,"m*V" ,"" ) -`MPRnb( PCKAPPAS ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LCKAPPAD ,LCKAPPAS ,"m*V" ,"" ) -`MPRnb( NCKAPPAD ,NCKAPPAS ,"m*V" ,"" ) -`MPRnb( PCKAPPAD ,PCKAPPAS ,"(m^2)*V" ,"" ) - -`MPRnb( LCGBL ,0.0 ,"F" ,"" ) -`MPRnb( NCGBL ,0.0 ,"F" ,"" ) -`MPRnb( PCGBL ,0.0 ,"F*m" ,"" ) - -`MPRnb( LCKAPPAB ,0.0 ,"m*V" ,"" ) -`MPRnb( NCKAPPAB ,0.0 ,"m*V" ,"" ) -`MPRnb( PCKAPPAB ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LNTGEN ,0.0 ,"" ,"" ) -`MPRnb( NNTGEN ,0.0 ,"" ,"" ) -`MPRnb( PNTGEN ,0.0 ,"" ,"" ) - -`MPRnb( LAIGEN ,0.0 ,"(m^-2)*(V^-1)" ,"" ) -`MPRnb( NAIGEN ,0.0 ,"(m^-2)*(V^-1)" ,"" ) -`MPRnb( PAIGEN ,0.0 ,"(m^-1)*(V^-1)" ,"" ) - -`MPRnb( LBIGEN ,0.0 ,"(m^-2)*(V^-3)" ,"" ) -`MPRnb( NBIGEN ,0.0 ,"(m^-2)*(V^-3)" ,"" ) -`MPRnb( PBIGEN ,0.0 ,"(m^-1)*(V^-3)" ,"" ) - -`MPRnb( LXRCRG1 ,0.0 ,"" ,"" ) -`MPRnb( NXRCRG1 ,0.0 ,"" ,"" ) -`MPRnb( PXRCRG1 ,0.0 ,"" ,"" ) - -`MPRnb( LXRCRG2 ,0.0 ,"" ,"" ) -`MPRnb( NXRCRG2 ,0.0 ,"" ,"" ) -`MPRnb( PXRCRG2 ,0.0 ,"" ,"" ) - -`MPRnb( LUTE ,0.0 ,"" ,"" ) -`MPRnb( NUTE ,0.0 ,"" ,"" ) -`MPRnb( PUTE ,0.0 ,"" ,"" ) - -`MPRnb( LUTER ,LUTE ,"" ,"" ) -`MPRnb( NUTER ,NUTE ,"" ,"" ) -`MPRnb( PUTER ,PUTE ,"" ,"" ) - -`MPRnb( LUTL ,0.0 ,"" ,"" ) -`MPRnb( NUTL ,0.0 ,"" ,"" ) -`MPRnb( PUTL ,0.0 ,"" ,"" ) - -`MPRnb( LUTLR ,LUTL ,"" ,"" ) -`MPRnb( NUTLR ,NUTL ,"" ,"" ) -`MPRnb( PUTLR ,PUTL ,"" ,"" ) - -`MPRnb( LEMOBT ,0.0 ,"" ,"" ) -`MPRnb( NEMOBT ,0.0 ,"" ,"" ) -`MPRnb( PEMOBT ,0.0 ,"" ,"" ) - -`MPRnb( LUA1 ,0.0 ,"" ,"" ) -`MPRnb( NUA1 ,0.0 ,"" ,"" ) -`MPRnb( PUA1 ,0.0 ,"" ,"" ) - -`MPRnb( LUA1R ,LUA1 ,"" ,"" ) -`MPRnb( NUA1R ,NUA1 ,"" ,"" ) -`MPRnb( PUA1R ,PUA1 ,"" ,"" ) - -`MPRnb( LUC1 ,0.0 ,"" ,"" ) -`MPRnb( NUC1 ,0.0 ,"" ,"" ) -`MPRnb( PUC1 ,0.0 ,"" ,"" ) - -`MPRnb( LUC1R ,LUC1 ,"" ,"" ) -`MPRnb( NUC1R ,NUC1 ,"" ,"" ) -`MPRnb( PUC1R ,PUC1 ,"" ,"" ) - -`MPRnb( LUD1 ,0.0 ,"" ,"" ) -`MPRnb( NUD1 ,0.0 ,"" ,"" ) -`MPRnb( PUD1 ,0.0 ,"" ,"" ) - -`MPRnb( LUD1R ,LUD1 ,"" ,"" ) -`MPRnb( NUD1R ,NUD1 ,"" ,"" ) -`MPRnb( PUD1R ,PUD1 ,"" ,"" ) - -`MPRnb( LUCSTE ,0.0 ,"" ,"" ) -`MPRnb( NUCSTE ,0.0 ,"" ,"" ) -`MPRnb( PUCSTE ,0.0 ,"" ,"" ) - -`MPRnb( LPTWGT ,0.0 ,"m/K" ,"" ) -`MPRnb( NPTWGT ,0.0 ,"m/K" ,"" ) -`MPRnb( PPTWGT ,0.0 ,"(m^2)/K" ,"" ) - -`MPRnb( LAT ,0.0 ,"m/K" ,"" ) -`MPRnb( NAT ,0.0 ,"m/K" ,"" ) -`MPRnb( PAT ,0.0 ,"(m^2)/K" ,"" ) - -`MPRnb( LATR ,LAT ,"" ,"" ) -`MPRnb( NATR ,NAT ,"" ,"" ) -`MPRnb( PATR ,PAT ,"" ,"" ) - -`MPRnb( LATCV ,0.0 ,"m/K" ,"" ) -`MPRnb( NATCV ,0.0 ,"m/K" ,"" ) -`MPRnb( PATCV ,0.0 ,"(m^2)/K" ,"" ) - -`MPRnb( LSTTHETASAT ,0.0 ,"" ,"" ) -`MPRnb( NSTTHETASAT ,0.0 ,"" ,"" ) -`MPRnb( PSTTHETASAT ,0.0 ,"" ,"" ) - -`MPRnb( LPRT ,0.0 ,"m/K" ,"" ) -`MPRnb( NPRT ,0.0 ,"m/K" ,"" ) -`MPRnb( PPRT ,0.0 ,"(m^2)/K" ,"" ) - -`MPRnb( LKT1 ,0.0 ,"m*V" ,"" ) -`MPRnb( NKT1 ,0.0 ,"m*V" ,"" ) -`MPRnb( PKT1 ,0.0 ,"(m^2)*V" ,"" ) - -`MPRnb( LTSS ,0.0 ,"" ,"" ) -`MPRnb( NTSS ,0.0 ,"" ,"" ) -`MPRnb( PTSS ,0.0 ,"" ,"" ) - -`MPRnb( LIIT ,0.0 ,"" ,"" ) -`MPRnb( NIIT ,0.0 ,"" ,"" ) -`MPRnb( PIIT ,0.0 ,"" ,"" ) - -`MPRnb( LTII ,0.0 ,"" ,"" ) -`MPRnb( NTII ,0.0 ,"" ,"" ) -`MPRnb( PTII ,0.0 ,"" ,"" ) - -`MPRnb( LTGIDL ,0.0 ,"m/K" ,"" ) -`MPRnb( NTGIDL ,0.0 ,"m/K" ,"" ) -`MPRnb( PTGIDL ,0.0 ,"(m^2)/K" ,"" ) - -`MPRnb( LIGT ,0.0 ,"" ,"" ) -`MPRnb( NIGT ,0.0 ,"" ,"" ) -`MPRnb( PIGT ,0.0 ,"" ,"" ) diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include deleted file mode 100644 index 6d47e3a5a..000000000 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include +++ /dev/null @@ -1,4145 +0,0 @@ -// ******************************************************** -// ******************************************************** -// *** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ -// * BSIM Common Multi-Gate Model Equations (Verilog-A) -// ******************************************************** -// -// ******************************************************** -// * Copyright 2016 Regents of the University of California. -// * All rights reserved. -// * -// * Project Director: Prof. Chenming Hu. -// * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Sourabh Khandelwal, Darsen Lu, -// * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, -// * Ali Niknejad, Chenming Hu -// ******************************************************** -// ******************************************************** -// * NONDISCLOSURE STATEMENT -// Software is distributed as is, completely without warranty or service -// support. The University of California and its employees are not liable -// for the condition or performance of the software. -// The University of California owns the copyright and grants users a perpetual, -// irrevocable, worldwide, non-exclusive, royalty-free license with -// respect to the software as set forth below. -// The University of California hereby disclaims all implied warranties. -// The University of California grants the users the right to modify, copy, -// and redistribute the software and documentation, both within the user's -// organization and externally, subject to the following restrictions -// 1. The users agree not to charge for the University of California code -// itself but may charge for additions, extensions, or support. -// 2. In any product based on the software, the users agree to acknowledge -// the University of California that developed the software. This -// acknowledgment shall appear in the product documentation. -// 3. The users agree to obey all U.S. Government restrictions governing -// redistribution or export of the software. -// 4. The users agree to reproduce any copyright notice which appears on -// the software on any copy or modification of such made available -// to others -// Agreed to on __Jan 01, 2016__________________ -// By: ___University of California, Berkeley____ -// ___Chenming Hu_____________________ -// ___Professor in Graduate School _______ -// ******************************************************** - -// Clamped Exponential Function -analog function real lexp; - input x; - real x; - - begin - if (x > `EXPL_THRESHOLD) begin - lexp = `MAX_EXPL * (1.0 + x - `EXPL_THRESHOLD); - end else if (x < -`EXPL_THRESHOLD) begin - lexp = `MIN_EXPL; - end else begin - lexp = exp(x); - end - end -endfunction - -// Clamped log Function -analog function real lln; - input x; - real x; - - begin - lln = ln(max(x, `N_MINLOG)); - end -endfunction - -// Hyperbolic Smoothing Function -analog function real hypsmooth; - input x, c; - real x, c; - - begin - hypsmooth = 0.5 * (x + sqrt(x * x + 4.0 * c * c)); - end -endfunction - -// Hyperbolic Smoothing max Function -analog function real hypmax; - input x, xmin, c; - real x, xmin, c; - - begin - hypmax = xmin + 0.5 * (x - xmin - c + sqrt((x - xmin - c) * (x - xmin - c) - 4.0 * xmin * c)); - end -endfunction - -// Temperature Dependence Type -analog function real Tempdep; - input PARAML, PARAMT, DELTEMP, TEMPMOD; - real PARAML, PARAMT, DELTEMP, TEMPMOD; - - begin - if (TEMPMOD != 0) begin - Tempdep = PARAML + hypmax(PARAMT * DELTEMP, -PARAML, 1.0e-6); - end else begin - Tempdep = PARAML * hypsmooth(1.0 + PARAMT * DELTEMP - 1.0e-6, 1.0e-3); - end - end -endfunction - -// Node Definitions -`ifdef __RGATEMOD__ - `define GateEdgeNode ge -`else - `define GateEdgeNode g -`endif -`ifdef __NQSMOD1__ - `define IntrinsicGate gi -`else - `define IntrinsicGate `GateEdgeNode -`endif - -// *************************** -// * Instance Parameters * -// *************************** - -// Note: Some instance parameters are also model parameters. Please refer to the technical note for details. -`IPRco( L ,3.0e-8 ,"m" ,1.0e-9 ,inf ,"Designed gate length" ) -`IPRco( D ,4.0e-8 ,"m" ,1.0e-9 ,inf ,"Diameter of the cylinder (GEOMOD=3)" ) -`IPRco( TFIN ,1.5e-8 ,"m" ,1.0e-9 ,inf ,"Body (fin) thickness" ) -`IPRco( FPITCH ,8.0e-8 ,"m" ,TFIN ,inf ,"Fin pitch" ) -`IPIco( NF ,1 ,"" ,1 ,inf ,"Number of fingers" ) -`IPRoz( NFIN ,1.0 ,"" ,"Number of fins per finger (real number enables optimization)" ) -`IPIcc( NGCON ,1 ,"" ,1 ,2 ,"Number of gate contact (1 or 2 sided)" ) -`IPRcz( ASEO ,0.0 ,"m^2" ,"Source-to-substrate overlap area through oxide" ) -`IPRcz( ADEO ,0.0 ,"m^2" ,"Drain-to-substrate overlap area through oxide" ) -`IPRcz( PSEO ,0.0 ,"m" ,"Perimeter of source-to-substrate overlap region through oxide" ) -`IPRcz( PDEO ,0.0 ,"m" ,"Perimeter of drain-to-substrate overlap region through oxide" ) -`IPRcz( ASEJ ,0.0 ,"m^2" ,"Source junction area (BULKMOD=1 or 2)" ) -`IPRcz( ADEJ ,0.0 ,"m^2" ,"Drain junction area (BULKMOD=1 or 2)" ) -`IPRcz( PSEJ ,0.0 ,"m" ,"Source-to-substrate PN junction perimeter (BULKMOD=1 or 2)" ) -`IPRcz( PDEJ ,0.0 ,"m" ,"Drain-to-substrate PN junction perimeter (BULKMOD=1 or 2)" ) -`IPRcz( COVS ,0.0 ,"F/m" ,"Constant gate-to-source overlap capacitance (CGEOMOD=1)" ) -`IPRcz( COVD ,COVS ,"F/m" ,"Constant gate-to-drain overlap capacitance (CGEOMOD=1)" ) -`IPRcz( CGSP ,0.0 ,"F/m" ,"Constant gate-to-source fringe capacitance (CGEOMOD=1)" ) -`IPRcz( CGDP ,0.0 ,"F/m" ,"Constant gate-to-drain fringe capacitance (CGEOMOD=1)" ) -`IPRcz( CDSP ,0.0 ,"F" ,"Constant drain-to-source fringe capacitance (all CGEOMOD)" ) -`IPRcz( NRS ,0.0 ,"" ,"Number of source diffusion squares" ) -`IPRcz( NRD ,0.0 ,"" ,"Number of source diffusion squares" ) -`IPRoz( LRSD ,L ,"m" ,"Length of the source/drain" ) -`IPRoz( NFINNOM ,1.0 ,"" ,"Nominal number of fins per finger" ) - -// Variability Handles -`MPRnb( XL ,0.0 ,"m" ,"L offset for channel length due to mask/etch effect" ) -`MPRnb( DTEMP ,0.0 ,"Celsius" ,"Variability in device temperature" ) -`MPRnb( DELVTRAND ,0.0 ,"V" ,"Variability in Vth" ) -`MPRcz( U0MULT ,1.0 ,"" ,"Variability in carrier mobility" ) -`MPRcz( IDS0MULT ,1.0 ,"" ,"Variability in drain current for miscellaneous reasons" ) - -// ************************ -// * Model Parameters * -// ************************ -`MPIcc( DEVTYPE ,`ntype ,"" ,`ptype ,`ntype ,"0: PMOS; 1: NMOS" ) -`MPIcc( TYPE ,DEVTYPE ,"" ,`ptype ,`ntype ,"0: PMOS; 1: NMOS" ) -`MPIcc( BULKMOD ,0 ,"" ,0 ,2 ,"0: SOI multi-gate; 1: Bulk multi-gate; 2: for decoupled bulk multi-gate" ) -`MPIcc( GEOMOD ,0 ,"" ,0 ,4 ,"0: Double gate; 1: Triple gate; 2: Quadruple gate; 3: Cylindrical gate; 4: Unified fin Shape" ) -`MPIcc( CGEO1SW ,0 ,"" ,0 ,1 ,"For CGEOMOD=1 only, this switch enables the parameters COVS, COVD, CGSP, and CGDP to be in F per fin, per gate-finger, per unit channel width" ) -`MPIcc( RDSMOD ,0 ,"" ,0 ,2 ,"0: Internal S/D resistance model; 1: External S/D resistance model; 2: Both bias dependent and independent part of S/D resistance internal" ) -`MPIcc( ASYMMOD ,0 ,"" ,0 ,1 ,"0: Turn off asymmetry model - forward mode parameters used; 1: Turn on asymmetry model" ) -`MPIcc( IGCMOD ,0 ,"" ,0 ,1 ,"0: Turn off Igc, Igs and Igd; 1: Turn on Igc, Igs and Igd" ) -`MPIcc( IGBMOD ,0 ,"" ,0 ,1 ,"0: Turn off Igb; 1: Turn on Igb" ) -`MPIcc( GIDLMOD ,0 ,"" ,0 ,1 ,"0: Turn off GIDL/GISL current; 1: Turn on GIDL/GISL current" ) -`MPIcc( IIMOD ,0 ,"" ,0 ,2 ,"0: Turn off impact ionization current; 1: BSIM4-based model; 2: BSIMSOI-based model" ) -`MPIcc( TNOIMOD ,0 ,"" ,0 ,1 ,"0: Charge-based, 1: Correlated thermal noise model" ) -`MPIcc( NQSMOD ,0 ,"" ,0 ,2 ,"0: Turn off NQS model; 1: NQS gate resistance (with gi node); 2: NQS charge deficit model from BSIM4 (with q node)" ) -`MPIcc( SHMOD ,0 ,"" ,0 ,1 ,"0: Turn off self-heating; 1: Turn on self-heating" ) -`MPIcc( TEMPMOD ,0 ,"" ,0 ,1 ,"1: Change temperature dependence of specific parameters" ) -`MPIcc( RGATEMOD ,0 ,"" ,0 ,1 ,"0: Turn off gate electrode resistance (without ge node); 1: Turn on gate electrode resistance (with ge node)" ) -`MPIcc( RGEOMOD ,0 ,"" ,0 ,1 ,"Geometry-dependent source/drain resistance; 0: RSH-based; 1: Holistic" ) -`MPIcc( CGEOMOD ,0 ,"" ,0 ,2 ,"Geometry-dependent parasitic capacitance model selector" ) -`MPIcc( SH_WARN ,0 ,"" ,0 ,1 ,"0: Disable self-heating warnings; 1: Enable self-heating warnings" ) -`MPIcc( IGCLAMP ,1 ,"" ,0 ,1 ,"0: Disable gate current clamps; 1: Enable gate current clamps" ) -`MPRnb( LINT ,0.0 ,"m" ,"Length reduction parameter (dopant diffusion effect)" ) -`MPRnb( LL ,0.0 ,"m^(LLN+1)" ,"Length reduction parameter (dopant diffusion effect)" ) -`MPRnb( LLN ,1.0 ,"" ,"Length reduction parameter (dopant diffusion effect)" ) -`MPRnb( DLC ,0.0 ,"m" ,"Delta L for C-V model" ) -`MPRnb( DLCACC ,0.0 ,"m" ,"Delta L for C-V model in accumulation region (BULKMOD=1 or 2)" ) -`MPRnb( DLBIN ,0.0 ,"m" ,"Delta L for binning" ) -`MPRnb( LLC ,0.0 ,"m^(LLN+1)" ,"Length reduction parameter (dopant diffusion effect)" ) -`MPRco( EOT ,1.0e-9 ,"m" ,1.0e-10 ,inf ,"Equivalent oxide thickness" ) -`MPRco( TOXP ,1.2e-9 ,"m" ,1.0e-10 ,inf ,"Physical oxide thickness" ) -`MPRco( EOTBOX ,1.4e-7 ,"m" ,1.0e-9 ,inf ,"Equivalent oxide thickness of the buried oxide (SOI FinFET)" ) -`MPRco( HFIN ,3.0e-8 ,"m" ,1.0e-9 ,inf ,"Fin height" ) -`MPRcz( FECH ,1.0 ,"" ,"End-channel factor for different orientation/shape" ) -`MPRnb( DELTAW ,0.0 ,"m" ,"Change of effective width due to shape of fin/cylinder" ) -`MPRcz( FECHCV ,1.0 ,"" ,"CV end-channel factor for different orientation/shape" ) -`MPRnb( DELTAWCV ,0.0 ,"m" ,"CV change of effective width due to shape of fin/cylinder" ) -`MPRnb( NBODY ,1.0e22 ,"/m^3" ,"Channel (body) doping" ) -`MPRnb( NBODYN1 ,0.0 ,"" ,"NFIN dependence of channel (body) doping" ) -`MPRex( NBODYN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of channel (body) doping" ) -`MPRcc( NSD ,2.0e26 ,"/m^3" ,2.0e25 ,1.0e27 ,"Source/drain active doping concentration" ) -`MPRcz( PHIG ,4.61 ,"eV" ,"Gate workfunction" ) -`MPRnb( PHIGL ,0.0 ,"eV/m" ,"Length dependence of gate workfunction" ) -`MPRnb( PHIGLT ,0.0 ,"/m" ,"Coupled NFIN and length dependence of gate workfunction" ) -`MPRnb( PHIGN1 ,0.0 ,"" ,"NFIN dependence of gate workfunction" ) -`MPRex( PHIGN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of gate workfunction" ) -`MPRco( EPSROX ,3.9 ,"" ,1.0 ,inf ,"Relative dielectric constant of the gate dielectric" ) -`MPRco( EPSRSUB ,11.9 ,"" ,1.0 ,inf ,"Relative dielectric constant of the channel material" ) -`MPRcz( EASUB ,4.05 ,"eV" ,"Electron affinity of substrate" ) -`MPRnb( NI0SUB ,1.1e16 ,"/m^3" ,"Intrinsic carrier constant at 300.15K" ) -`MPRnb( BG0SUB ,1.12 ,"eV" ,"Bandgap of substrate at 300.15K" ) -`MPRnb( NC0SUB ,2.86e25 ,"/m^3" ,"Conduction band density of states" ) -`MPRnb( NGATE ,0.0 ,"/m^3" ,"Parameter for poly gate doping. For metal gate please set NGATE = 0" ) -`MPRnb( Imin ,1.0e-15 ,"A/m^2" ,"Parameter for Vgs clamping for inversion region calculation in accumulation" ) - -// Short Channel Effects -`MPRnb( CIT ,0.0 ,"F/m^2" ,"Parameter for interface trap" ) -`MPRnb( CITR ,CIT ,"" ,"Parameter for interface trap in reverse mode for asymmetric model" ) -`MPRnb( CDSC ,7.0e-3 ,"F/m^2" ,"Coupling capacitance between S/D and channel" ) -`MPRnb( CDSCN1 ,0.0 ,"" ,"NFIN dependence of CDSC" ) -`MPRnb( CDSCN2 ,1.0e5 ,"" ,"NFIN dependence of CDSC" ) -`MPRnb( CDSCD ,7.0e-3 ,"F/m^2" ,"Drain-bias sensitivity of CDSC" ) -`MPRnb( CDSCDN1 ,0.0 ,"" ,"NFIN dependence of CDSCD" ) -`MPRex( CDSCDN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of CDSCD" ) -`MPRnb( CDSCDR ,CDSCD ,"F/m^2" ,"Reverse-mode drain-bias sensitivity of CDSC" ) -`MPRnb( CDSCDRN1 ,CDSCDN1 ,"" ,"NFIN dependence of CDSCD" ) -`MPRex( CDSCDRN2 ,CDSCDN2 ,"" ,0.0 ,"NFIN dependence of CDSCD" ) -`MPRnb( DVT0 ,0.0 ,"" ,"SCE coefficient" ) -`MPRnb( DVT1 ,0.6 ,"" ,"SCE exponent coefficient. After binning it should be within (0:inf)" ) -`MPRnb( DVT1SS ,DVT1 ,"" ,"Subthreshold swing exponent coefficient. After binning it should be within (0:inf)" ) -`MPRnb( PHIN ,0.05 ,"V" ,"Nonuniform vertical doping effect on surface potential" ) -`MPRnb( ETA0 ,0.6 ,"" ,"DIBL coefficient" ) -`MPRnb( ETA0N1 ,0.0 ,"" ,"NFIN dependence of ETA0" ) -`MPRco( ETA0N2 ,1.0e5 ,"" ,1.0e-5 ,inf ,"NFIN dependence of ETA0" ) -`MPRnb( ETA0LT ,0.0 ,"/m" ,"Coupled NFIN and length dependence of ETA0" ) -`MPRnb( TETA0 ,0.0 ,"/K" ,"Temperature dependence of DIBL coefficient" ) -`MPRnb( ETA0R ,ETA0 ,"" ,"Reverse-mode DIBL coefficient" ) -`MPRnb( TETA0R ,TETA0 ,"/K" ,"Temperature dependence of reverse-mode DIBL coefficient" ) -`MPRnb( DSUB ,1.06 ,"" ,"DIBL exponent coefficient" ) -`MPRnb( DVTP0 ,0.0 ,"" ,"Coefficient for drain-induced Vth shift (DITS)" ) -`MPRnb( DVTP1 ,0.0 ,"" ,"DITS exponent coefficient" ) -`MPRnb( ADVTP0 ,0.0 ,"" ,"Pre-exponential coefficient for DITS" ) -`MPRex( BDVTP0 ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for DITS" ) -`MPRnb( ADVTP1 ,0.0 ,"" ,"Pre-exponential coefficient for DVTP1" ) -`MPRex( BDVTP1 ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for DVTP1" ) -`MPRnb( DVTP2 ,0.0 ,"" ,"DITS model parameter" ) -`MPRnb( K1RSCE ,0.0 ,"/V^(0.5)" ,"K1 for reverse short channel effect calculation" ) -`MPRnb( LPE0 ,5.0e-9 ,"m" ,"Equivalent length of pocket region at zero bias" ) -`MPRnb( DVTSHIFT ,0.0 ,"V" ,"Vth shift handle" ) -`MPRnb( DVTSHIFTR ,DVTSHIFT ,"" ,"Vth shift handle for asymmetric mode" ) -`MPRnb( THETASCE ,0.0 ,"" ,"Vth roll-off length dependence. If defined by user, it will overwrite Theta_SCE in the code") -`MPRnb( THETADIBL ,0.0 ,"" ,"DIBL length dependence. If defined by user, will overwrite Theta_DIBL in the code" ) -`MPRnb( THETASW ,0.0 ,"" ,"Subthreshold swing length dependence. If defined by user, it will overwrite Theta_SW in the code" ) -`MPRnb( NVTM ,0.0 ,"V" ,"Subthreshold swing factor multiplied by Vtm. If defined by user, it will overwrite nVtm in the code" ) - -// Lateral non-uniform doping effect (IV-CV Vth shift) -`MPRnb( K0 ,0.0 ,"V" ,"Lateral NUD voltage parameter" ) -`MPRnb( K01 ,0.0 ,"V/K" ,"Temperature dependence of lateral NUD voltage parameter" ) -`MPRnb( K0SI ,1.0 ,"" ,"Correction factor for strong inversion used in Mnud. After binning it should be within (0:inf)" ) -`MPRnb( K0SI1 ,0.0 ,"/K" ,"Temperature dependence of K0SI" ) -`MPRnb( K2SI ,K0SI ,"" ,"Correction factor for strong inversion used in Mob" ) -`MPRnb( K2SI1 ,K0SI1 ,"" ,"Temperature dependence of K2SI" ) -`MPRnb( K0SISAT ,0.0 ,"" ,"Correction factor for strong inversion used in Mnud" ) -`MPRnb( K0SISAT1 ,0.0 ,"" ,"Temperature dependence of K0SISAT" ) -`MPRnb( K2SISAT ,K0SISAT ,"" ,"Correction factor for strong inversion used in Mob" ) -`MPRnb( K2SISAT1 ,K0SISAT1 ,"" ,"Temperature dependence of K2SISAT" ) - -// Body Effect for MG Devices on Bulk Substrate (ex: FinFETs on BULK) -`MPRnb( PHIBE ,0.7 ,"V" ,"Body effect voltage parameter. After binning it should be within [0.2:1.2]" ) -`MPRco( K1 ,1.0e-6 ,"V^(0.5)" ,1.0e-6 ,inf ,"Body effect coefficient for subthreshold region" ) -`MPRnb( K11 ,0.0 ,"V^(0.5)/K" ,"Temperature dependence of K1" ) -`MPRnb( K2SAT ,0.0 ,"" ,"Correction factor for K2 in saturation (high Vds)" ) -`MPRnb( K2SAT1 ,0.0 ,"" ,"Temperature dependence of K2SAT" ) -`MPRnb( K2 ,0.0 ,"" ,"Body effect coefficient for BULKMOD==2" ) -`MPRnb( K21 ,0.0 ,"" ,"Temperature dependence of K2" ) - -// Quantum Mechanical Effect -`MPRnb( QMFACTOR ,0.0 ,"" ,"Prefactor + switch for QM Vth correction" ) -`MPRnb( QMTCENCV ,0.0 ,"" ,"Prefactor + switch for QM Width and Toxeff correction for CV" ) -`MPRnb( QMTCENCVA ,0.0 ,"" ,"Prefactor + switch for QM Width and Toxeff correction for CV (accumulation region)" ) -`MPRnb( AQMTCEN ,0.0 ,"" ,"Parameter for geometric dependence of Tcen on R/TFIN/HFIN" ) -`MPRex( BQMTCEN ,1.2e-8 ,"" ,0.0 ,"Parameter for geometric dependence of Tcen on R/TFIN/HFIN" ) -`MPRnb( ETAQM ,0.54 ,"" ,"Bulk charge coefficient for Tcen" ) -`MPRnb( QM0 ,1.0e-3 ,"V" ,"Knee-point for Tcen in inversion (Charge normalized to Cox)" ) -`MPRnb( PQM ,0.66 ,"" ,"Slope of normalized Tcen in inversion" ) -`MPRnb( QM0ACC ,1.0e-3 ,"V" ,"Knee-point for Tcen in accumulation (Charge normalized to Cox)" ) -`MPRnb( PQMACC ,0.66 ,"" ,"Slope of normalized Tcen in accumulation" ) - -// Velocity Saturation Model -`MPRnb( VSAT ,8.5e4 ,"m/s" ,"Saturation velocity for the saturation region" ) -`MPRnb( VSATR ,VSAT ,"m/s" ,"Saturation velocity for the saturation region in the reverse mode" ) -`MPRnb( VSATN1 ,0.0 ,"" ,"NFIN dependence of VSAT" ) -`MPRex( VSATN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of VSAT" ) -`MPRnb( VSATRN1 ,VSATN1 ,"" ,"NFIN dependence of VSATR" ) -`MPRex( VSATRN2 ,VSATN2 ,"" ,0.0 ,"NFIN dependence of VSATR" ) -`MPRnb( AVSAT ,0.0 ,"" ,"Pre-exponential coefficient for VSAT" ) -`MPRex( BVSAT ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for VSAT" ) -`MPRnb( VSAT1 ,VSAT ,"m/s" ,"Velocity saturation parameter for Ion degradation - forward mode" ) -`MPRnb( VSAT1N1 ,VSATN1 ,"" ,"NFIN dependence of VSAT1" ) -`MPRex( VSAT1N2 ,VSATN2 ,"" ,0.0 ,"NFIN dependence of VSAT1" ) -`MPRnb( VSAT1R ,VSAT1 ,"m/s" ,"Velocity saturation parameter for Ion degradation - reverse mode" ) -`MPRnb( VSAT1RN1 ,VSAT1N1 ,"" ,"NFIN dependence of VSAT1R" ) -`MPRex( VSAT1RN2 ,VSAT1N2 ,"" ,0.0 ,"NFIN dependence of VSAT1R" ) -`MPRnb( AVSAT1 ,AVSAT ,"" ,"Pre-exponential coefficient for VSAT1" ) -`MPRex( BVSAT1 ,BVSAT ,"" ,0.0 ,"Exponential coefficient for VSAT1" ) -`MPRnb( DELTAVSAT ,1.0 ,"" ,"velocity saturation parameter in the linear region" ) -`MPRnb( PSAT ,2.0 ,"" ,"Velocity saturation exponent, after binnig should be from [2.0:inf)" ) -`MPRnb( APSAT ,0.0 ,"" ,"Pre-exponential coefficient for PSAT" ) -`MPRex( BPSAT ,1.0 ,"" ,0.0 ,"Exponential coefficient for PSAT" ) -`MPRnb( KSATIV ,1.0 ,"" ,"Parameter for long channel Vdsat" ) -`MPRnb( KSATIVR ,KSATIV ,"" ,"KSATIV in asymmetric mode" ) -`MPRnb( VSATCV ,VSAT ,"m/s" ,"Velocity saturation parameter for CV" ) -`MPRnb( AVSATCV ,AVSAT ,"" ,"Pre-exponential coefficient for VSATCV" ) -`MPRex( BVSATCV ,BVSAT ,"" ,0.0 ,"Exponential coefficient for VSATCV" ) -`MPRnb( DELTAVSATCV ,DELTAVSAT ,"" ,"Velocity saturation parameter in the linear region for the capacitance model" ) -`MPRnb( PSATCV ,PSAT ,"" ,"Velocity saturation exponent for C-V" ) -`MPRnb( APSATCV ,APSAT ,"" ,"Pre-exponential coefficient for PSATCV" ) -`MPRex( BPSATCV ,BPSAT ,"" ,0.0 ,"Exponential coefficient for PSATCV" ) -`MPRnb( MEXP ,4.0 ,"" ,"Smoothing function factor for Vdsat" ) -`MPRnb( AMEXP ,0.0 ,"" ,"Pre-exponential coefficient for MEXP" ) -`MPRnb( BMEXP ,1.0 ,"" ,"Exponential coefficient for MEXP" ) -`MPRnb( MEXPR ,MEXP ,"" ,"Reverse-mode smoothing function factor for Vdsat" ) -`MPRnb( AMEXPR ,AMEXP ,"" ,"Pre-exponential coefficient for MEXPR" ) -`MPRnb( BMEXPR ,BMEXP ,"" ,"Exponential coefficient for MEXPR" ) -`MPRnb( PTWG ,0.0 ,"/V^2" ,"Gmsat degradation parameter - forward mode" ) -`MPRnb( PTWGR ,PTWG ,"/V^2" ,"Gmsat degradation parameter - reverse mode" ) -`MPRnb( APTWG ,0.0 ,"" ,"Pre-exponential coefficient for PTWG" ) -`MPRex( BPTWG ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for PTWG" ) -`MPRnb( AT ,-1.56e-3 ,"/K" ,"Saturation velocity temperature coefficient" ) -`MPRnb( ATR ,AT ,"" ,"Reverse-mode saturation velocity temperature coefficient" ) -`MPRnb( ATCV ,AT ,"/K" ,"Saturation velocity temperature coefficient for CV" ) -`MPRnb( TMEXP ,0.0 ,"/K" ,"Temperature coefficient for Vdseff smoothing" ) -`MPRnb( TMEXPR ,TMEXP ,"/K" ,"Reverse-mode temperature coefficient for Vdseff smoothing" ) -`MPRnb( PTWGT ,4.0e-3 ,"/K" ,"PTWG temperature coefficient" ) - -// Mobility Model -`MPRnb( U0 ,3.0e-2 ,"m^2/(V*s)" ,"Low-field mobility" ) -`MPRnb( U0R ,U0 ,"m^2/(V*s)" ,"Reverse-mode low-field mobility" ) -`MPRnb( U0N1 ,0.0 ,"" ,"NFIN dependence of U0" ) -`MPRnb( U0N1R ,U0N1 ,"" ,"Reverse-mode NFIN dependence of U0" ) -`MPRex( U0N2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of U0" ) -`MPRex( U0N2R ,U0N2 ,"" ,0.0 ,"Reverse-mode NFIN dependence of U0" ) -`MPRnb( U0LT ,0.0 ,"/m" ,"Coupled NFIN and length dependence of U0" ) -`MPRnb( ETAMOB ,2.0 ,"" ,"Effective field parameter" ) -`MPRnb( UP ,0.0 ,"um^LPA" ,"Mobility L coefficient" ) -`MPRnb( LPA ,1.0 ,"" ,"Mobility L power coefficient" ) -`MPRnb( UPR ,UP ,"um^LPA" ,"Reverse-mode mobility L coefficient" ) -`MPRnb( LPAR ,LPA ,"" ,"Reverse-mode mobility L power coefficient" ) -`MPRnb( UA ,0.3 ,"(cm/MV)^EU" ,"Phonon/surface roughness scattering parameter" ) -`MPRnb( UAR ,UA ,"(cm/MV)^EU" ,"Reverse-mode phonon/surface roughness scattering parameter" ) -`MPRnb( AUA ,0.0 ,"" ,"Pre-exponential coefficient for UA" ) -`MPRnb( AUAR ,AUA ,"" ,"Reverse-mode pre-exponential coefficient for UA" ) -`MPRex( BUA ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for UA" ) -`MPRex( BUAR ,BUA ,"" ,0.0 ,"Reverse-mode exponential coefficient for UAR" ) -`MPRnb( UC ,0.0 ,"(1e-6*cm/MV^2)^EU" ,"Body effect for mobility degradation parameter - BULKMOD=1 or 2" ) -`MPRnb( UCR ,UC ,"" ,"Reverse-mode body effect for mobility degradation parameter - BULKMOD=1 or 2" ) -`MPRnb( EU ,2.5 ,"cm/MV" ,"Phonon/surface roughness scattering parameter" ) -`MPRnb( EUR ,EU ,"cm/MV" ,"Reverse-mode phonon/surface roughness scattering parameter" ) -`MPRnb( AEU ,0.0 ,"" ,"Pre-exponential coefficient for EU" ) -`MPRnb( AEUR ,AEU ,"" ,"Reverse-mode pre-exponential coefficient for EU" ) -`MPRex( BEU ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for EU" ) -`MPRex( BEUR ,BEU ,"" ,0.0 ,"Reverse-mode exponential coefficient for EU" ) -`MPRnb( UD ,0.0 ,"cm/MV" ,"Columbic scattering parameter" ) -`MPRnb( UDR ,UD ,"cm/MV" ,"Reverse-mode columbic scattering parameter" ) -`MPRnb( AUD ,0.0 ,"" ,"Pre-exponential coefficient for UD" ) -`MPRnb( AUDR ,AUD ,"" ,"Reverse-mode pre-exponential coefficient for UD" ) -`MPRex( BUD ,5.0e-8 ,"" ,0.0 ,"Exponential coefficient for UD" ) -`MPRex( BUDR ,BUD ,"" ,0.0 ,"Reverse-mode exponential coefficient for UD" ) -`MPRnb( UCS ,1.0 ,"" ,"Columbic scattering parameter" ) -`MPRnb( UTE ,0.0 ,"" ,"Mobility temperature coefficient" ) -`MPRnb( UTER ,UTE ,"" ,"Reverse-mode for mobility temperature coefficient" ) -`MPRnb( UTL ,-1.5e-3 ,"" ,"Mobility temperature coefficient" ) -`MPRnb( UTLR ,UTL ,"" ,"Reverse-mode for mobility temperature coefficient" ) -`MPRnb( EMOBT ,0.0 ,"" ,"Temperature coefficient of ETAMOB" ) -`MPRnb( UA1 ,1.032e-3 ,"" ,"Mobility temperature coefficient for UA" ) -`MPRnb( UA1R ,UA1 ,"" ,"Reverse-mode mobility temperature coefficient for UA" ) -`MPRnb( UC1 ,5.6e-11 ,"" ,"Mobility temperature coefficient for UC" ) -`MPRnb( UC1R ,UC1 ,"" ,"Reverse-mode mobility temperature coefficient for UC" ) -`MPRnb( UD1 ,0.0 ,"" ,"Mobility temperature coefficient for UC" ) -`MPRnb( UD1R ,UD1 ,"" ,"Reverse-mode mobility temperature coefficient for UD" ) -`MPRnb( UCSTE ,-4.775e-3 ,"" ,"Mobility temperature coefficient" ) -`MPRcc( CHARGEWF ,0.0 ,"" ,-1.0 ,1.0 ,"Average channel charge weighting factor, +1: source-side, 0: middle, -1: drain-side" ) - -// Access Resistance Model -`MPRnb( RDSWMIN ,0.0 ,"ohm*(um^(WR))" ,"RDSMOD = 0 S/D extension resistance per unit width at high Vgs" ) -`MPRnb( RDSW ,1.0e2 ,"ohm*(um^(WR))" ,"RDSMOD = 0 zero bias S/D extension resistance per unit width" ) -`MPRnb( ARDSW ,0.0 ,"" ,"Pre-exponential coefficient for RDSW" ) -`MPRex( BRDSW ,1.0e-7 ,"" ,0.0 ,"exponential coefficient for RDSW" ) -`MPRnb( RSWMIN ,0.0 ,"ohm*(um^(WR))" ,"RDSMOD = 1 source extension resistance per unit width at high Vgs" ) -`MPRnb( RSW ,5.0e1 ,"ohm*(um^(WR))" ,"RDSMOD = 1 zero bias source extension resistance per unit width" ) -`MPRnb( ARSW ,0.0 ,"" ,"Pre-exponential coefficient for RSW" ) -`MPRex( BRSW ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for RSW" ) -`MPRnb( RDWMIN ,0.0 ,"ohm*(um^(WR))" ,"RDSMOD = 1 drain extension resistance per unit width at high Vgs" ) -`MPRnb( RDW ,5.0e1 ,"" ,"RDSMOD = 1 zero bias drain extension resistance per unit width" ) -`MPRnb( ARDW ,0.0 ,"" ,"Pre-exponential coefficient for RDW" ) -`MPRex( BRDW ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for RDW" ) -`MPRcz( RSDR ,0.0 ,"V^(-PRSDR)" ,"Source-side drift resistance parameter - forward mode" ) -`MPRcz( RSDRR ,RSDR ,"V^(-PRSDR)" ,"Source-side drift resistance parameter - reverse mode" ) -`MPRcz( RDDR ,RSDR ,"V^(-PRDDR)" ,"Drain-side drift resistance parameter - forward mode" ) -`MPRcz( RDDRR ,RDDR ,"V^(-PRDDR)" ,"Drain-side drift resistance parameter - reverse mode" ) -`MPRnb( PRSDR ,1.0 ,"" ,"Source-side quasi-saturation parameter" ) -`MPRnb( PRDDR ,PRSDR ,"" ,"Drain-side quasi-saturation parameter" ) -`MPRnb( PRWGS ,0.0 ,"/V" ,"Gate bias dependence of source extension resistance" ) -`MPRnb( PRWGD ,PRWGS ,"/V" ,"Gate bias dependence of drain extension resistance" ) -`MPRnb( WR ,1.0 ,"" ,"W dependence parameter of S/D extension resistance" ) -`MPRnb( PRT ,1.0e-3 ,"/K" ,"Series resistance temperature coefficient" ) -`MPRnb( TRSDR ,0.0 ,"/K" ,"Source-side drift resistance temperature coefficient" ) -`MPRnb( TRDDR ,TRSDR ,"/K" ,"Drain-side drift resistance temperature coefficient" ) - -// DIBL Model -`MPRnb( PDIBL1 ,1.3 ,"" ,"DIBL output conductance parameter - forward mode" ) -`MPRnb( PDIBL1R ,PDIBL1 ,"" ,"DIBL output conductance parameter - reverse mode" ) -`MPRnb( PDIBL2 ,2.0e-4 ,"" ,"DIBL output conductance parameter" ) -`MPRnb( PDIBL2R ,PDIBL2 ,"" ,"DIBL output conductance parameter - reverse mode" ) -`MPRnb( DROUT ,1.06 ,"" ,"L dependence of DIBL effect on Rout" ) -`MPRnb( PVAG ,1.0 ,"" ,"Vgs dependence on early voltage" ) - -// Channel Length Modulation Effect -`MPRnb( PCLM ,1.3e-2 ,"" ,"Channel length modulation (CLM) parameter" ) -`MPRnb( PCLMR ,PCLM ,"" ,"Reverse model PCLM parameter" ) -`MPRnb( APCLM ,0.0 ,"" ,"Pre-exponential coefficient for PCLM" ) -`MPRnb( APCLMR ,APCLM ,"" ,"Reverse-mode pre-exponential coefficient for PCLM" ) -`MPRex( BPCLM ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for PCLM" ) -`MPRex( BPCLMR ,BPCLM ,"" ,0.0 ,"Reverse-mode exponential coefficient for PCLM" ) -`MPRnb( PCLMG ,0.0 ,"" ,"Gate bias dependence parameter for CLM" ) -`MPRnb( PCLMCV ,PCLM ,"" ,"CLM parameter for short-channel CV" ) - -// Non-Saturation Effect -`MPRnb( A1 ,0.0 ,"" ,"Non-saturation effect parameter for strong inversion Region" ) -`MPRnb( A11 ,0.0 ,"(V^-2)/K" ,"Temperature dependence of A1" ) -`MPRnb( A2 ,0.0 ,"" ,"Non-saturation effect parameter for moderate Inversion Region" ) -`MPRnb( A21 ,0.0 ,"(V^-1)/K" ,"Temperature dependence of A2" ) - -// Gate Electrode Resistance -`MPRcz( RGEXT ,0.0 ,"ohm" ,"Effective gate electrode external resistance" ) -`MPRco( RGFIN ,1.0e-3 ,"ohm" ,1.0e-3 ,inf ,"Effective gate electrode per finger per fin resistance" ) - -// Geometry Dependent Source/Drain Resistance of RGEOMOD = 0 -`MPRnb( RSHS ,0.0 ,"ohm" ,"Source-side sheet resistance" ) -`MPRnb( RSHD ,RSHS ,"ohm" ,"Drain-side sheet resistance" ) - -// Geometry Dependent Source/Drain Resistance of RGEOMOD = 1 for variability modeling -// These parameters are shared with CGEOMOD = 2 -`MPRnb( HEPI ,1.0e-8 ,"m" ,"Height of the raised source/drain on top of the fin" ) -`MPRnb( TSILI ,1.0e-8 ,"m" ,"Thickness of the silicide on top of the raised source/drain" ) -`MPRcc( RHOC ,1.0e-12 ,"ohm*(m^2)" ,1.0e-18 ,1.0e-9 ,"Contact resistivity at the silicon/silicide interface" ) -`MPRoz( RHORSD ,1.0 ,"ohm*(m)" ,"Average resistivity of silicon in the raised source/drain region" ) -`MPRcc( CRATIO ,0.5 ,"" ,0.0 ,1.0 ,"Ratio of the corner area filled with silicon to the total corner area" ) -`MPRoo( DELTAPRSD ,0.0 ,"m" ,-FPITCH ,inf ,"Change in silicon/silicide interface length due to non-rectangular epi" ) -`MPIcc( SDTERM ,0 ,"" ,0 ,1 ,"Indicator of whether the source/drain are terminated with silicide" ) -`MPRnb( LSP ,-1 ,"m" ,"Thickness of the gate sidewall spacer" ) -`MPRco( EPSRSP ,3.9 ,"" ,1.0 ,inf ,"Relative dielectric constant of the spacer" ) -`MPRoz( TGATE ,3.0e-8 ,"m" ,"Gate height on top of the hard mask" ) -`MPRcz( TMASK ,3.0e-8 ,"m" ,"Height of hard mask on top of the fin" ) -`MPRcz( ASILIEND ,0.0 ,"m^2" ,"Extra silicide cross sectional area at the two ends of the FinFET" ) -`MPRcz( ARSDEND ,0.0 ,"m^2" ,"Extra raised source/drain cross sectional areaat the two ends of the FinFET" ) -`MPRcz( PRSDEND ,0.0 ,"m" ,"Extra silicon/silicide interface perimeter at the two ends of the FinFET" ) -`MPRcc( NSDE ,2.0e25 ,"/(m^3)" ,1.0e25 ,1.0e26 ,"Source/drain active doping concentration at Leff edge" ) -`MPRnb( RGEOA ,1.0 ,"" ,"Fitting parameter for RGEOMOD=1" ) -`MPRnb( RGEOB ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) -`MPRnb( RGEOC ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) -`MPRnb( RGEOD ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) -`MPRnb( RGEOE ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) -`MPRnb( CGEOA ,1.0 ,"" ,"Fitting parameter for CGEOMOD=2" ) -`MPRnb( CGEOB ,0.0 ,"/m" ,"Fitting parameter for CGEOMOD=2" ) -`MPRnb( CGEOC ,0.0 ,"/m" ,"Fitting parameter for CGEOMOD=2" ) -`MPRnb( CGEOD ,0.0 ,"/m" ,"Fitting parameter for CGEOMOD=2" ) -`MPRcz( CGEOE ,1.0 ,"" ,"Fitting parameter for CGEOMOD=2" ) - -// Gate Current -`MPRnb( AIGBINV ,1.11e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igb in inversion" ) -`MPRnb( AIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igb in inversion" ) -`MPRnb( BIGBINV ,9.49e-4 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igb in inversion" ) -`MPRnb( CIGBINV ,6.0e-3 ,"/V" ,"Parameter for Igb in inversion" ) -`MPRnb( EIGBINV ,1.1 ,"V" ,"Parameter for Igb in inversion" ) -`MPRnb( NIGBINV ,3.0 ,"" ,"Parameter for Igb in inversion" ) -`MPRnb( AIGBACC ,1.36e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igb in accumulation" ) -`MPRnb( AIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igb in accumulation" ) -`MPRnb( BIGBACC ,1.71e-3 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igb in accumulation" ) -`MPRnb( CIGBACC ,7.5e-2 ,"/V" ,"Parameter for Igb in accumulation" ) -`MPRnb( NIGBACC ,1.0 ,"" ,"Parameter for Igb in accumulation" ) -`MPRnb( AIGC ,1.36e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igc in inversion" ) -`MPRnb( AIGC1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igc in inversion" ) -`MPRnb( BIGC ,1.71e-3 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igc in inversion" ) -`MPRnb( CIGC ,7.5e-2 ,"/V" ,"Parameter for Igc in inversion" ) -`MPRnb( PIGCD ,1.0 ,"" ,"Parameter for Igc partition" ) -`MPRnb( DLCIGS ,0.0 ,"m" ,"Delta L for Igs model" ) -`MPRnb( AIGS ,1.36e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igs in inversion" ) -`MPRnb( AIGS1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igs in inversion" ) -`MPRnb( BIGS ,1.71e-3 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igs in inversion" ) -`MPRnb( CIGS ,7.5e-2 ,"/V" ,"Parameter for Igs in inversion" ) -`MPRnb( DLCIGD ,DLCIGS ,"m" ,"Delta L for Igd model" ) -`MPRnb( AIGD ,AIGS ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igd in inversion" ) -`MPRnb( AIGD1 ,AIGS1 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igd in inversion" ) -`MPRnb( BIGD ,BIGS ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igd in inversion" ) -`MPRnb( CIGD ,CIGS ,"/V" ,"Parameter for Igd in inversion" ) -`MPRnb( VFBSD ,0.0 ,"V" ,"Flatband voltage for S/D region" ) -`MPRnb( VFBSDCV ,VFBSD ,"V" ,"Flatband voltage for S/D region for C-V calculations" ) -`MPRoz( TOXREF ,1.2e-9 ,"m" ,"Target tox value" ) -`MPRnb( TOXG ,TOXP ,"m" ,"Oxide thickness for gate current model" ) -`MPRnb( NTOX ,1.0 ,"" ,"Exponent for Tox ratio" ) -`MPRnb( POXEDGE ,1.0 ,"" ,"Factor for the gate edge Tox" ) - -// GIDL/GISL Current -`MPRnb( AGISL ,6.055e-12 ,"mho" ,"Pre-exponential coefficient for GISL" ) -`MPRnb( BGISL ,3.0e8 ,"V/m" ,"Exponential coefficient for GISL" ) -`MPRnb( CGISL ,0.5 ,"V^3" ,"Parameter for body-effect of GISL" ) -`MPRnb( EGISL ,0.2 ,"V" ,"Band bending parameter for GISL" ) -`MPRnb( PGISL ,1.0 ,"" ,"Parameter for body-bias effect on GISL" ) -`MPRnb( AGIDL ,AGISL ,"mho" ,"Pre-exponential coefficient for GIDL" ) -`MPRnb( BGIDL ,BGISL ,"V/m" ,"Exponential coefficient for GIDL" ) -`MPRnb( CGIDL ,CGISL ,"V^3" ,"Parameter for body-effect of GIDL" ) -`MPRnb( EGIDL ,EGISL ,"V" ,"Band bending parameter for GIDL" ) -`MPRnb( PGIDL ,PGISL ,"" ,"Parameter for body-bias effect on GIDL" ) - -// Impact Ionization Current -// IIMOD = 1 -`MPRnb( ALPHA0 ,0.0 ,"m/V" ,"First parameter of Iii" ) -`MPRnb( ALPHA01 ,0.0 ,"m/V/K" ,"Temperature dependence of ALPHA0" ) -`MPRnb( ALPHA1 ,0.0 ,"/V" ,"L scaling parameter of Iii" ) -`MPRnb( ALPHA11 ,0.0 ,"/V/K" ,"Temperature dependence ALPHA1" ) -`MPRnb( BETA0 ,0.0 ,"/V" ,"Vds dependence parameter of Iii" ) - -// IIMOD = 2 -`MPRnb( ALPHAII0 ,0.0 ,"m/V" ,"First parameter of Iii for IIMOD=2" ) -`MPRnb( ALPHAII01 ,0.0 ,"m/V/K" ,"Temperature dependence of ALPHAII0" ) -`MPRnb( ALPHAII1 ,0.0 ,"/V" ,"L scaling parameter of Iii for IIMOD=2" ) -`MPRnb( ALPHAII11 ,0.0 ,"m/V/K" ,"Temperature dependence of ALPHAII1" ) -`MPRnb( BETAII0 ,0.0 ,"/V" ,"Vds dependence parameter of Iii" ) -`MPRnb( BETAII1 ,0.0 ,"" ,"Vds dependence parameter of Iii" ) -`MPRnb( BETAII2 ,0.1 ,"V" ,"Vds dependence parameter of Iii" ) -`MPRnb( ESATII ,1.0e7 ,"V/m" ,"Saturation channel E-field for Iii" ) -`MPRnb( LII ,0.5e-9 ,"V*m" ,"Channel length dependence parameter of Iii" ) -`MPRnb( SII0 ,0.5 ,"/V" ,"Vgs dependence parameter of Iii" ) -`MPRnb( SII1 ,0.1 ,"" ,"1st Vgs dependence parameter of Iii" ) -`MPRnb( SII2 ,0.0 ,"V" ,"2nd Vgs dependence parameter of Iii" ) -`MPRnb( SIID ,0.0 ,"V" ,"3rd Vds dependence parameter of Iii" ) -`MPRoo( IIMOD2CLAMP1 ,0.1 ,"V" ,0.0 ,inf ,"Clamp1 of SII1*Vg term in IIMOD=2 model" ) -`MPRoo( IIMOD2CLAMP2 ,0.1 ,"V" ,0.0 ,inf ,"Clamp2 of SII0*Vg term in IIMOD=2 model" ) -`MPRoo( IIMOD2CLAMP3 ,0.1 ,"V" ,0.0 ,inf ,"Clamp3 of Ratio term in IIMOD=2 model" ) - -// Accumulation Capacitance -`MPRco( EOTACC ,EOT ,"m" ,1.0e-10 ,inf ,"Equivalent oxide thickness for accumulation region" ) -`MPRnb( DELVFBACC ,0.0 ,"V" ,"Change in flatband voltage: Vfb_accumulation - Vfb_inversion" ) - -// Fringe Capacitance -// CGEOMOD=0 -`MPRcz( CFS ,2.5e-11 ,"F/m" ,"Outer fringe capacitance at source side" ) -`MPRcz( CFD ,CFS ,"F/m" ,"Outer fringe capacitance at drain side" ) - -// Overlap Capacitance for CGEOMOD = 0 and 2 -`MPRcz( CGSO ,0.0 ,"F/m" ,"Non LDD region source-gate overlap capacitance per unit channel width" ) -`MPRcz( CGDO ,CGSO ,"F/m" ,"Non LDD region drain-gate overlap capacitance per unit channel width" ) -`MPRcz( CGSL ,0.0 ,"F/m" ,"Overlap capacitance between gate and lightly-doped source region (for CGEOMOD = 0, 2)" ) -`MPRcz( CGDL ,CGSL ,"F/m" ,"Overlap capacitance between gate and lightly-doped drain region (for CGEOMOD = 0, 2)" ) -`MPRco( CKAPPAS ,0.6 ,"V" ,2.0e-2 ,inf ,"Coefficient of bias-dependent overlap capacitance for the source side (for CGEOMOD = 0, 2)" ) -`MPRco( CKAPPAD ,CKAPPAS ,"V" ,2.0e-2 ,inf ,"Coefficient of bias-dependent overlap capacitance for the drain side (for CGEOMOD = 0, 2)" ) -`MPRcz( CGBO ,0.0 ,"F/m" ,"Gate-to-substrate overlap capacitance per unit channel length per finger per NGCON" ) -`MPRcz( CGBN ,0.0 ,"F/m" ,"Gate-to-substrate overlap capacitance per unit channel length per fin per finger" ) -`MPRcz( CGBL ,0.0 ,"F/m" ,"Bias dependent component of gate-to-substrate overlap capacitance per unit channel length per fin per finger" ) -`MPRco( CKAPPAB ,0.6 ,"" ,2.0e-2 ,inf ,"Bias dependent gate-to-substrate parasitic capacitance" ) - -// Source/Drain-to-Substrate Sidewall Capacitance -`MPRcz( CSDESW ,0.0 ,"F/m" ,"Coefficient for source/drain-to-substrate sidewall capacitance" ) - -// Junction Current and Capacitance -// Junction Capacitance -`MPRnb( CJS ,5.0e-4 ,"F/m^2" ,"Unit area source-side junction capacitance at zero bias" ) -`MPRnb( CJD ,CJS ,"F/m^2" ,"Unit area drain-side junction capacitance at zero bias" ) -`MPRnb( CJSWS ,5.0e-10 ,"F/m" ,"Unit length source-side sidewall junction capacitance at zero bias" ) -`MPRnb( CJSWD ,CJSWS ,"F/m" ,"Unit length drain-side sidewall junction capacitance at zero bias" ) -`MPRnb( CJSWGS ,0.0 ,"F/m" ,"Unit length source-side gate sidewall junction capacitance at zero bias" ) -`MPRnb( CJSWGD ,CJSWGS ,"F/m" ,"Unit length drain-side gate sidewall junction capacitance at zero bias" ) -`MPRnb( PBS ,1.0 ,"V" ,"Source-side bulk junction built-in potential" ) -`MPRnb( PBD ,PBS ,"V" ,"Drain-side bulk junction built-in potential" ) -`MPRnb( PBSWS ,1.0 ,"V" ,"Built-in potential for Source-side sidewall junction capacitance" ) -`MPRnb( PBSWD ,PBSWS ,"V" ,"Built-in potential for Drain-side sidewall junction capacitance" ) -`MPRnb( PBSWGS ,PBSWS ,"V" ,"Built-in potential for Source-side gate sidewall junction capacitance" ) -`MPRnb( PBSWGD ,PBSWGS ,"V" ,"Built-in potential for Drain-side gate sidewall junction capacitance" ) -`MPRnb( MJS ,0.5 ,"" ,"Source bottom junction capacitance grading coefficient" ) -`MPRnb( MJD ,MJS ,"" ,"Drain bottom junction capacitance grading coefficient" ) -`MPRnb( MJSWS ,0.33 ,"" ,"Source sidewall junction capacitance grading coefficient" ) -`MPRnb( MJSWD ,MJSWS ,"" ,"Drain sidewall junction capacitance grading coefficient" ) -`MPRnb( MJSWGS ,MJSWS ,"" ,"Source-side gate sidewall junction capacitance grading coefficient" ) -`MPRnb( MJSWGD ,MJSWGS ,"" ,"Drain-side gate sidewall junction capacitance grading coefficient" ) - -// Second Junction for Two-Step Junction Capacitance -`MPRcz( SJS ,0.0 ,"" ,"Constant for source-side two-step second junction" ) -`MPRcz( SJD ,SJS ,"" ,"Constant for drain-side two-step second junction" ) -`MPRcz( SJSWS ,0.0 ,"" ,"Constant for source-side sidewall two-step second junction" ) -`MPRcz( SJSWD ,SJSWS ,"" ,"Constant for drain-side sidewall two-step second junction" ) -`MPRcz( SJSWGS ,0.0 ,"" ,"Constant for source-side gate sidewall two-step second junction" ) -`MPRcz( SJSWGD ,SJSWGS ,"" ,"Constant for source-side gate sidewall two-step second junction" ) -`MPRnb( MJS2 ,1.25e-1 ,"" ,"Source bottom two-step second junction capacitance grading coefficient" ) -`MPRnb( MJD2 ,MJS2 ,"" ,"Drain bottom two-step second junction capacitance grading coefficient" ) -`MPRnb( MJSWS2 ,8.3e-2 ,"" ,"Source sidewall two-step second junction capacitance grading coefficient" ) -`MPRnb( MJSWD2 ,MJSWS2 ,"" ,"Drain sidewall two-step second junction capacitance grading coefficient" ) -`MPRnb( MJSWGS2 ,MJSWS2 ,"" ,"Source-side gate sidewall two-step second junction capacitance grading coefficient" ) -`MPRnb( MJSWGD2 ,MJSWGS2 ,"" ,"Drain-side gate sidewall two-step second junction capacitance grading coefficient" ) - -// Junction Current -`MPRnb( JSS ,1.0e-4 ,"A/m^2" ,"Bottom source junction reverse saturation current density" ) -`MPRnb( JSD ,JSS ,"A/m^2" ,"Bottom drain junction reverse saturation current density" ) -`MPRnb( JSWS ,0.0 ,"A/m" ,"Unit length reverse saturation current for sidewall source junction" ) -`MPRnb( JSWD ,JSWS ,"A/m" ,"Unit length reverse saturation current for sidewall drain junction" ) -`MPRnb( JSWGS ,0.0 ,"A/m" ,"Unit length reverse saturation current for gate-edge sidewall source junction" ) -`MPRnb( JSWGD ,JSWGS ,"A/m" ,"Unit length reverse saturation current for gate-edge sidewall drain junction" ) -`MPRex( NJS ,1.0 ,"" ,0.0 ,"Source junction emission coefficient" ) -`MPRex( NJD ,NJS ,"" ,0.0 ,"Drain junction emission coefficient" ) -`MPRnb( IJTHSFWD ,0.1 ,"A" ,"Forward source diode breakdown limiting current" ) -`MPRnb( IJTHDFWD ,IJTHSFWD ,"A" ,"Forward drain diode breakdown limiting current" ) -`MPRnb( IJTHSREV ,0.1 ,"A" ,"Reverse source diode breakdown limiting current" ) -`MPRnb( IJTHDREV ,IJTHSREV ,"A" ,"Reverse drain diode breakdown limiting current" ) -`MPRnb( BVS ,1.0e1 ,"V" ,"Source diode breakdown voltage" ) -`MPRnb( BVD ,BVS ,"V" ,"Drain diode breakdown voltage" ) -`MPRnb( XJBVS ,1.0 ,"" ,"Fitting parameter for source diode breakdown current" ) -`MPRnb( XJBVD ,XJBVS ,"" ,"Fitting parameter for drain diode breakdown current" ) - -// Tunneling Component of Junction Current -`MPRnb( JTSS ,0.0 ,"A/m^2" ,"Bottom source junction trap-assisted saturation current density" ) -`MPRnb( JTSD ,JTSS ,"A/m^2" ,"Bottom drain junction trap-assisted saturation current density" ) -`MPRnb( JTSSWS ,0.0 ,"A/m" ,"Unit length trap-assisted saturation current for sidewall source junction" ) -`MPRnb( JTSSWD ,JTSSWS ,"A/m" ,"Unit length trap-assisted saturation current for sidewall drain junction" ) -`MPRnb( JTSSWGS ,0.0 ,"A/m" ,"Unit length trap-assisted saturation current for gate-edge sidewall source junction" ) -`MPRnb( JTSSWGD ,JTSSWGS ,"A/m" ,"Unit length trap-assisted saturation current for gate-edge sidewall drain junction" ) -`MPRnb( JTWEFF ,0.0 ,"m" ,"Trap-assisted tunneling current width dependence" ) -`MPRnb( NJTS ,2.0e1 ,"" ,"Non-ideality factor for JTSS" ) -`MPRnb( NJTSD ,NJTS ,"" ,"Non-ideality factor for JTSD" ) -`MPRnb( NJTSSW ,2.0e1 ,"" ,"Non-ideality factor for JTSSWS" ) -`MPRnb( NJTSSWD ,NJTSSW ,"" ,"Non-ideality factor for JTSSWD" ) -`MPRnb( NJTSSWG ,2.0e1 ,"" ,"Non-ideality factor for JTSSWGS" ) -`MPRnb( NJTSSWGD ,NJTSSWG ,"" ,"Non-ideality factor for JTSSWGD" ) -`MPRnb( VTSS ,1.0e1 ,"V" ,"Bottom source junction trap-assisted current voltage dependent parameter" ) -`MPRnb( VTSD ,VTSS ,"V" ,"Bottom drain junction trap-assisted current voltage dependent parameter" ) -`MPRnb( VTSSWS ,1.0e1 ,"V" ,"Unit length trap-assisted current voltage dependent parameter for sidewall source junction" ) -`MPRnb( VTSSWD ,VTSSWS ,"V" ,"Unit length trap-assisted current voltage dependent parameter for sidewall drain junction" ) -`MPRnb( VTSSWGS ,1.0e1 ,"V" ,"Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall source junction" ) -`MPRnb( VTSSWGD ,VTSSWGS ,"V" ,"Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall drain junction" ) - -// Recombination-Generation Current -`MPRnb( LINTIGEN ,0.0 ,"m" ,"Lint for thermal generation current" ) -`MPRnb( NTGEN ,1.0 ,"" ,"Thermal generation current parameter" ) -`MPRnb( AIGEN ,0.0 ,"(m^-3)*(V^-1)" ,"Thermal generation current parameter" ) -`MPRnb( BIGEN ,0.0 ,"(m^-3)*(V^-3)" ,"Thermal generation current parameter" ) - -// NQS Gate Resistance Model & NQS Charge Deficit Model -// For NQSMOD=1, Set XRCRG1=0 to turn off NQS gate resistance -`MPRnb( XRCRG1 ,1.2e1 ,"" ,"Parameter for non-quasistatic gate resistance (NQSMOD = 1) and NQSMOD = 2" ) -`MPRnb( XRCRG2 ,1.0 ,"" ,"Parameter for non-quasistatic gate resistance (NQSMOD = 1) and NQSMOD = 2" ) - -// NQS Charge Segmentation Model -`MPIcc( NSEG ,4 ,"" ,4 ,10 ,"Number of segments for NQSMOD=3 (3, 5 & 10 supported)" ) - -// Flicker Noise -`MPRnb( EF ,1.0 ,"" ,"Flicker noise frequency exponent" ) -`MPRnb( EM ,4.1e7 ,"V/m" ,"Flicker noise parameter" ) -`MPRnb( NOIA ,6.25e39 ,"(eV^-1)*(s^(1-EF))*(m^-3)" ,"Flicker noise parameter" ) -`MPRnb( NOIB ,3.125e24 ,"(eV^-1)*(s^(1-EF))*(m^-1)" ,"Flicker noise parameter" ) -`MPRnb( NOIC ,8.75e7 ,"(eV^-1)*(s^(1-EF))*(m)" ,"Flicker noise parameter" ) -`MPRnb( LINTNOI ,0.0 ,"m^2" ,"L offset for flicker noise calculation" ) - -// Thermal Noise -`MPRcz( NTNOI ,1.0 ,"" ,"Thermal noise parameter" ) -`MPRnb( TNOIA ,1.5 ,"/m" ,"Thermal noise parameter" ) -`MPRnb( TNOIB ,3.5 ,"/m" ,"Thermal noise parameter" ) -`MPRnb( RNOIA ,5.77e-1 ,"" ,"Thermal noise coefficient" ) -`MPRnb( RNOIB ,3.7e-1 ,"" ,"Thermal noise coefficient" ) - -// Parameters Controlled by Correlated Thermal Noise Switch -`ifdef __TNOIMOD1__ -`MPRnb( TNOIC ,3.5 ,"" ,"Thermal noise parameter for TNOIMOD=1" ) -`MPRnb( RNOIC ,3.95e-1 ,"" ,"Thermal noise coefficient for TNOIMOD=1" ) -`MPRex( SCALEN ,1.0e5 ,"" ,0.0 ,"Noise scaling parameter for TNOIMOD=1" ) -`endif - -// Temperature Effects -`MPRco( TNOM ,27.0 ,"Celsius" ,-`P_CELSIUS0,inf ,"Temperature at which the model is extracted" ) -`MPRnb( TBGASUB ,7.02e-4 ,"eV/K" ,"Bandgap temperature coefficient" ) -`MPRnb( TBGBSUB ,1.108e3 ,"K" ,"Bandgap temperature coefficient" ) -`MPRnb( KT1 ,0.0 ,"V" ,"Vth temperature coefficient" ) -`MPRnb( KT1L ,0.0 ,"V*m" ,"Vth temperature L coefficient" ) -`MPRnb( TSS ,0.0 ,"/K" ,"Swing temperature coefficient" ) -`MPRnb( IIT ,-0.5 ,"" ,"Impact ionization temperature dependence for IIMOD = 1" ) -`MPRnb( TII ,0.0 ,"" ,"Impact ionization temperature dependence for IIMOD = 2" ) -`MPRnb( TGIDL ,-3.0e-3 ,"/K" ,"GIDL/GISL temperature dependence" ) -`MPRnb( IGT ,2.5 ,"" ,"Gate current temperature dependence" ) -`MPRnb( TCJ ,0.0 ,"/K" ,"Temperature coefficient for CJS/CJD" ) -`MPRnb( TCJSW ,0.0 ,"/K" ,"Temperature coefficient for CJSWS/CJSWD" ) -`MPRnb( TCJSWG ,0.0 ,"/K" ,"Temperature coefficient for CJSWGS/CJSWGD" ) -`MPRnb( TPB ,0.0 ,"/K" ,"Temperature coefficient for PBS/PBD" ) -`MPRnb( TPBSW ,0.0 ,"/K" ,"Temperature coefficient for PBSWS/PBSWD" ) -`MPRnb( TPBSWG ,0.0 ,"/K" ,"Temperature coefficient for PBSWGS/PBSWGD" ) -`MPRnb( XTIS ,3.0 ,"" ,"Source junction current temperature exponent" ) -`MPRnb( XTID ,XTIS ,"" ,"Drain junction current temperature exponent" ) -`MPRnb( XTSS ,2.0e-2 ,"" ,"Power dependence of JTSS on temperature" ) -`MPRnb( XTSD ,XTSS ,"" ,"Power dependence of JTSD on temperature" ) -`MPRnb( XTSSWS ,2.0e-2 ,"" ,"Power dependence of JTSSWS on temperature" ) -`MPRnb( XTSSWD ,XTSSWS ,"" ,"Power dependence of JTSSWD on temperature" ) -`MPRnb( XTSSWGS ,2.0e-2 ,"" ,"Power dependence of JTSSWGS on temperature" ) -`MPRnb( XTSSWGD ,XTSSWGS ,"" ,"Power dependence of JTSSWGD on temperature" ) -`MPRnb( TNJTS ,0.0 ,"" ,"Temperature coefficient for NJTS" ) -`MPRnb( TNJTSD ,TNJTS ,"" ,"Temperature coefficient for NJTSD" ) -`MPRnb( TNJTSSW ,0.0 ,"" ,"Temperature coefficient for NJTSSW" ) -`MPRnb( TNJTSSWD ,TNJTSSW ,"" ,"Temperature coefficient for NJTSSWD" ) -`MPRnb( TNJTSSWG ,0.0 ,"" ,"Temperature coefficient for NJTSSWG" ) -`MPRnb( TNJTSSWGD ,TNJTSSWG ,"" ,"Temperature coefficient for NJTSSWGD" ) - -// Self Heating -`MPRcz( RTH0 ,1.0e-2 ,"ohm*m*K/W" ,"Thermal resistance" ) -`MPRcz( CTH0 ,1.0e-5 ,"W*s/m/K" ,"Thermal capacitance" ) -`MPRcz( WTH0 ,0.0 ,"m" ,"Width dependence coefficient for Rth and Cth" ) -`MPRcz( ASHEXP ,1.0 ,"" ,"Exponent to tune RTH dependence of NFINTOTAL" ) -`MPRcz( BSHEXP ,1.0 ,"" ,"Exponent to tune RTH dependence of NF" ) - -// Unified Model -`MPRoz( ACH_UFCM ,1.0 ,"m^2" ,"Area of the channel for the unified Model" ) -`MPRoz( CINS_UFCM ,1.0 ,"F/m" ,"Insulator capacitance for the unified Model" ) -`MPRoz( W_UFCM ,1.0 ,"m" ,"Effective channel width for the unified Model" ) -`MPRcz( TFIN_TOP ,1.5e-8 ,"m" ,"Top body (fin) thickness for trapezoidal triple gate" ) -`MPRco( TFIN_BASE ,1.5e-8 ,"m" ,1.0e-9 ,inf ,"Base body (fin) thickness for trapezoidal triple gate" ) -`MPRcz( QMFACTORCV ,0.0 ,"" ,"Charge dependence taking QM effects into account" ) -`MPRcz( ALPHA_UFCM ,0.5556 ,"" ,"Mobile charge scaling term taking QM effects into account" ) - -// Binning Parameters -`include "bsimcmg_binning_parameters.include" - -// Output Variables -`ifdef __OPINFO__ - (* desc= "WEFF" *) real WEFF; - (* desc= "LEFF" *) real LEFF; - (* desc= "WEFFCV" *) real WEFFCV; - (* desc= "LEFFCV" *) real LEFFCV; - (* desc= "IDS" *) real IDS; - (* desc= "IDEFF" *) real IDEFF; - (* desc= "ISEFF" *) real ISEFF; - (* desc= "IGTOT" *) real IGTOT; - (* desc= "IDSGEN" *) real IDSGEN; - (* desc= "III" *) real III; - (* desc= "IGS" *) real IGS; - (* desc= "IGD" *) real IGD; - (* desc= "IGCS" *) real IGCS; - (* desc= "IGCD" *) real IGCD; - (* desc= "IGBS" *) real IGBS; - (* desc= "IGBD" *) real IGBD; - (* desc= "IGIDL" *) real IGIDL; - (* desc= "IGISL" *) real IGISL; - (* desc= "IJSB" *) real IJSB; - (* desc= "IJDB" *) real IJDB; - (* desc= "ISUB" *) real ISUB; - (* desc= "BETA" *) real BETA; - (* desc= "VTH" *) real VTH; - (* desc= "VDSSAT" *) real VDSSAT; - (* desc= "VFB" *) real VFB; - (* desc= "GM" *) real GM; - (* desc= "GDS" *) real GDS; - (* desc= "GMBS" *) real GMBS; - (* desc= "QGI" *) real QGI; - (* desc= "QDI" *) real QDI; - (* desc= "QSI" *) real QSI; - (* desc= "QBI" *) real QBI; - (* desc= "QG" *) real QG; - (* desc= "QD" *) real QD; - (* desc= "QS" *) real QS; - (* desc= "QB" *) real QB; - (* desc= "CGGI" *) real CGGI; - (* desc= "CGSI" *) real CGSI; - (* desc= "CGDI" *) real CGDI; - (* desc= "CGEI" *) real CGEI; - (* desc= "CDGI" *) real CDGI; - (* desc= "CDDI" *) real CDDI; - (* desc= "CDSI" *) real CDSI; - (* desc= "CDEI" *) real CDEI; - (* desc= "CSGI" *) real CSGI; - (* desc= "CSDI" *) real CSDI; - (* desc= "CSSI" *) real CSSI; - (* desc= "CSEI" *) real CSEI; - (* desc= "CEGI" *) real CEGI; - (* desc= "CEDI" *) real CEDI; - (* desc= "CESI" *) real CESI; - (* desc= "CEEI" *) real CEEI; - (* desc= "CGG" *) real CGG; - (* desc= "CGS" *) real CGS; - (* desc= "CGD" *) real CGD; - (* desc= "CGE" *) real CGE; - (* desc= "CDG" *) real CDG; - (* desc= "CDD" *) real CDD; - (* desc= "CDS" *) real CDS; - (* desc= "CDE" *) real CDE; - (* desc= "CSG" *) real CSG; - (* desc= "CSD" *) real CSD; - (* desc= "CSS" *) real CSS; - (* desc= "CSE" *) real CSE; - (* desc= "CEG" *) real CEG; - (* desc= "CED" *) real CED; - (* desc= "CES" *) real CES; - (* desc= "CEE" *) real CEE; - (* desc= "CGSEXT" *) real CGSEXT; - (* desc= "CGDEXT" *) real CGDEXT; - (* desc= "CGBOV" *) real CGBOV; - (* desc= "CJST" *) real CJST; - (* desc= "CJDT" *) real CJDT; - (* desc= "RSGEO" *) real RSGEO; - (* desc= "RDGEO" *) real RDGEO; - (* desc= "CFGEO" *) real CFGEO; - (* desc= "T_TOTAL_K" *) real T_TOTAL_K; - (* desc= "T_TOTAL_C" *) real T_TOTAL_C; - (* desc= "T_DELTA_SH" *) real T_DELTA_SH; - - `ifdef __DEBUG__ - (* desc= "IGBACC" *) real IGBACC; - (* desc= "IGBINV" *) real IGBINV; - (* desc= "DIDSDVG" *) real DIDSDVG; - (* desc= "DIDSDVS" *) real DIDSDVS; - (* desc= "DIDSDVD" *) real DIDSDVD; - (* desc= "DIGSDVG" *) real DIGSDVG; - (* desc= "DIGSDVS" *) real DIGSDVS; - (* desc= "DIGSDVD" *) real DIGSDVD; - (* desc= "DIGDDVG" *) real DIGDDVG; - (* desc= "DIGDDVS" *) real DIGDDVS; - (* desc= "DIGDDVD" *) real DIGDDVD; - (* desc= "DIIIDVG" *) real DIIIDVG; - (* desc= "DIIIDVS" *) real DIIIDVS; - (* desc= "DIIIDVD" *) real DIIIDVD; - (* desc= "DIGIDLDVG" *) real DIGIDLDVG; - (* desc= "DIGIDLDVS" *) real DIGIDLDVS; - (* desc= "DIGIDLDVD" *) real DIGIDLDVD; - (* desc= "DIGISLDVG" *) real DIGISLDVG; - (* desc= "DIGISLDVS" *) real DIGISLDVS; - (* desc= "DIGISLDVD" *) real DIGISLDVD; - - `ifdef __SHMOD__ - (* desc= "CGT" *) real CGT; - (* desc= "CST" *) real CST; - (* desc= "CDT" *) real CDT; - (* desc= "DIDSDVTH" *) real DIDSDVTH; - (* desc= "DIGSDVTH" *) real DIGSDVTH; - (* desc= "DIGDDVTH" *) real DIGDDVTH; - (* desc= "DIIIDVTH" *) real DIIIDVTH; - (* desc= "DIGIDLDVTH" *) real DIGIDLDVTH; - (* desc= "DIGISLDVTH" *) real DIGISLDVTH; - (* desc= "DITHDVTH" *) real DITHDVTH; - `endif - - (* desc= "ITH" *) real ITH; - (* desc= "DITHDVG" *) real DITHDVG; - (* desc= "DITHDVS" *) real DITHDVS; - (* desc= "DITHDVD" *) real DITHDVD; - `endif -`endif - -// Variables Inside the Model -integer devsign; - -real NFINtotal; -real DevTemp; -real ids0, ids0_ov_dqi, ids, vgs, vds, vdsx, sigvds, vch, etaiv; -real vgs_noswap, vds_noswap, vgd_noswap; -real qd, qg, qs, qb; -real ni, epssub, epssp, epsratio, Eg, Eg0, Nc; -real Lg, deltaL, deltaL1, deltaLCV, Leff, Leff1, LeffCV, LeffCV_acc, Weff0, WeffCV0; -real cox, cdsc, cbox; -real nbody, phib, deltaPhi; -real T0, T0y, T1, T1y, T2, T2y, T3, T3y, T4, T4a, T5, T6, T7, T8, T9; -real Vtm, Vtm0, nVtm; -real beta, beta0 ; -real wf, wr; - -// Temperature Effects -real Tnom, TRatio, dvth_temp, delTemp, ThetaSS; -real K0_t, K0SI_t, K2SI_t, K1_t, K2SAT_t, A1_t, A2_t; -real AIGBINV_t, AIGBACC_t, AIGC_t, AIGS_t, AIGD_t; -real BETA0_t, SII0_t, BGISL_t, BGIDL_t, igtemp, PTWG_t, PTWGR_t; -real ALPHA0_t, ALPHA1_t, ALPHAII0_t, ALPHAII1_t; -real CJS_t, CJSWS_t, CJSWGD_t, CJD_t, CJSWD_t, CJSWGS_t; -real PBS_t, PBSWS_t, PBSWGS_t, PBD_t, PBSWD_t, PBSWGD_t; -real JSS_t, JSWS_t, JSWGS_t, JSD_t, JSWD_t, JSWGD_t; -real JTSS_t, JTSD_t, JTSSWS_t, JTSSWD_t, JTSSWGS_t, JTSSWGD_t; -real NJTS_t, NJTSD_t, NJTSSW_t, NJTSSWD_t, NJTSSWG_t, NJTSSWGD_t; -real K2_t; -real K0SISAT_t, K2SISAT_t; - -// Variables for analytical surface potential -real q0; -real T10, T11, T12; -real e0, e1, e2; - -// Accumulation Model -real vgsfb, vgsfbeff; - -// Short Channel Effect -real ETA0_t, ETA0R_t; -real scl, vbi, phist, dvth_vtroll, dvth_dibl, dvth_rsce, dvth_all; -real tmp, Theta_SCE, Theta_SW, Theta_DIBL, Theta_RSCE, Theta_DITS; - -// Lateral Non-uniform Doping Effect -real Mnud; - -// Body Effect for BULKMOD=1 -real ves, vesx, vesmax, veseff; -real Mob; - -// Quantum mechanical correction [units are MKS] -real coxeff, Tcen0, Tcen, dvch_qm, MTcen; -real E0, E0prime, E1, E1prime, mx, mxprime, md, mdprime; -real gprime, gfactor, gam0, gam1, kT; - -// Drain Saturation Voltage -real Vdseff, qis, qid, qbs, Dmobs; - -// Midpoint Potential and Charge -real qia, qia2, qba, dqi; -real qb0; -real eta_mu, eta_mu_cv, Eeffm, Eeffm_cv, Dmob, Dmob_cv, u0, ueff, u0_a, u0r; -real UA_t, UAR_t, UC_t, UCR_t, UCS_t, UD_t, UDR_t, U0_t, U0R_t, ETAMOB_t, Eeffs, EeffFactor; - -real Dr, WeffWRFactor; -real RSourceGeo, RDrainGeo; -real RDSWMIN_i, RDWMIN_i, RSWMIN_i; -real Rdrain, Rsource; - -real rdstemp, Rdsi, Rdss; -real RSDR_t, RSDRR_t, RDDR_t, RDDRR_t; - -real DIBLfactor, PVAGfactor, diffVds, VaDIBL, Vgst2Vtm, Moc, Mclm; -real MclmCV, inv_MclmCV; - -real Dvsat, Vdsat, inv_MEXP, DvsatCV, Nsat; -real VSAT_t, VSAT1_t, VSAT1R_t, VSATCV_t, MEXP_t, MEXPR_t, Esat, EsatL, Esat1, Esat1L, EsatCV, EsatCVL; -real WVCox, Ta, Tb, Tc; - -// Asymmetry Model -real VSAT1_a, MEXP_a, PTWG_a, RSDR_a, RDDR_a, PDIBL1_a, VSAT_a; - -// Geometry dependent Source/Drain Resistance -real mu_max, mu_rsd, rhorsd, afin, thetarsp; -real Rsp, lt, arsd_total, prsd_total, alpha; -real eta, RrsdTML, Rrsdside, Rrsd; -real Rdsgeo, Arsd, Prsd; - -// Geometry dependent fringing capacitance -real Hg, Wg, Trsd, Hrsd, Cgg_top, Cgg_side, Cfr_geo, Acorner, Ccorner; - -// Gate Electrode Resistance -`ifdef __RGATEMOD__ - real ggeltd, Rgeltd; -`endif - -// Gate Current -real Vaux_Igbinv, igbinv, igsd_mult, igsd_mult0, igbs, igbd; -real Voxacc, Vaux_Igbacc, vfbzb, igbacc; -real igcs, igcd, igc0, Vdseffx, T1_exp; -real igisl, igidl, vfbsd, igs, igd, vgs_eff, vgd_eff; -real Aechvb, Bechvb, Toxratio, Toxratioedge; - -// Impact Ionization current -real Iii, Vdiff, Vdsatii, VgsStep, Ratio, ALPHAII; - -// Accumulation Capacitance -real cox_acc; -real qg_acc, qb_acc; -real vge; - -// Parasitic Capacitance -real qgs_ov, qgd_ov, qgs_fr, qgd_fr, qds_fr; -real qgs_parasitic, qgd_parasitic, Qes, Qed, Qeg; -real vgs_overlap, vgd_overlap, vge_overlap; -real cgsp, cgdp, csbox, cdbox, cgbox, vfbsdcv; - -// Junction Current and Capacitance -real Ies, Ied, ves_jct, ved_jct, vec; -real Czbs, Czbssw, Czbsswg, Czbd, Czbdsw, Czbdswg; -real pb2, arg, sarg, Qec; -real Qesj, Qesj1, Qesj2, Qesj3, Qedj, Qedj1, Qedj2, Qedj3; -real Isbs, Isbd, Nvtms, Nvtmd; -real SslpRev, IVjsmRev, VjsmRev, SslpFwd, IVjsmFwd, VjsmFwd, XExpBVS; -real DslpRev, IVjdmRev, VjdmRev, DslpFwd, IVjdmFwd, VjdmFwd, XExpBVD; -real igentemp, idsgen, LINTIGEN_i; - -// NQS Gate Resistance -`ifdef __NQSMOD1__ - real gcrg, XRCRG1_i, XRCRG2_i; - real IdovVds; -`endif - -// NQS Charge Deficit Model -`ifdef __NQSMOD2__ - real xdpart, gtau, gcrg, XRCRG1_i, XRCRG2_i; - real IdovVds; -`endif - -// Flicker Noise -real LINTNOI_i; -real litl, Esatnoi, Leffnoi, Leffnoisq, DelClm; -real N0, Nl, Nstar, Ssi, Swi, FNPowerAt1Hz; - -// Thermal Noise -real NTNOI_i, qinv; -real Gtnoi, sid; -real gspr, gdpr; - -// Variables Controlled by Correlated Thermal Noise Switch -`ifdef __TNOIMOD1__ - real Abulk, etaa, gamma, delta, epsilon, gche; - real npart_beta, npart_theta, ctnoi, npart_c; - real noiGd0, GammaGd0, C0, sf; -`endif - -// Self Heating -`ifdef __SHMOD__ - real gth, cth; -`endif - -// Binning -real Inv_L, Inv_NFIN, Inv_LNFIN; -real NBODY_i, PHIG_i, CFD_i, CFS_i, COVS_i, COVD_i, CGSO_i, CGDO_i; -real CGSL_i, CGDL_i, CGBL_i, CKAPPAS_i, CKAPPAD_i, CKAPPAB_i; -real QMFACTOR_i, QMTCENCV_i, QMTCENCVA_i, KSATIV_i, KSATIVR_i, KSATIV_a; -real CDSC_i, CDSCD_i, CDSCD_a, CDSCDR_i, CIT_i, DVT0_i, CITR_i, CIT_a; -real DVT1_i, DVT1SS_i, PHIN_i, ETA0_i, ETA0_a, ETA0R_i, DSUB_i, VSAT_i, VSATR_i, VSATR_t; -real DVTP0_i, DVTP1_i ; -real K0_i, K01_i, K0SI_i, K0SI1_i, K2SI_i, K2SI1_i, PHIBE_i, K1_i, K11_i, K2SAT_i, K2SAT1_i; -real DELTAVSAT_i, PSAT_i, DELTAVSATCV_i, PSATCV_i, VSAT1_i, VSAT1R_i, PTWG_i, PTWGR_i, VSATCV_i; -real UP_i, U0_i, U0R_i, ETAMOB_i, NGATE_i, RDSW_i, UPR_i; -real PRWGS_i, PRWGD_i, WR_i, PDIBL1_i, PDIBL1R_i, PDIBL2_i,PDIBL2R_i, PDIBL2_a ; -real DROUT_i, PVAG_i; -real AIGBINV_i, AIGBINV1_i, BIGBINV_i, CIGBINV_i, EIGBINV_i, NIGBINV_i; -real AIGBACC_i, AIGBACC1_i, BIGBACC_i, CIGBACC_i, NIGBACC_i; -real AIGC_i, AIGC1_i, BIGC_i, CIGC_i, PIGCD_i; -real AIGS_i, AIGS1_i, BIGS_i, CIGS_i, NTOX_i, POXEDGE_i; -real AIGD_i, AIGD1_i, BIGD_i, CIGD_i; -real AGIDL_i, BGIDL_i, CGIDL_i, EGIDL_i, PGIDL_i; -real AGISL_i, BGISL_i, CGISL_i, EGISL_i, PGISL_i; -real ALPHA0_i, ALPHA1_i, ALPHAII0_i, ALPHAII1_i, BETA0_i; -real BETAII0_i, BETAII1_i, BETAII2_i, ESATII_i; -real LII_i, SII0_i, SII1_i, SII2_i, SIID_i, TII_i; -real MEXP_i, MEXPR_i; -real PCLM_i, PCLMG_i, PCLMCV_i, PCLM_a, PCLMR_i; -real A1_i, A2_i, A11_i, A21_i; -real K1RSCE_i, LPE0_i, DVTSHIFT_i, DVTSHIFT_a, DVTSHIFTR_i ; -real UA_i, UC_i, EU_i, UD_i, UCS_i, UAR_i, EUR_i, UCR_i, UDR_i, UA_a, UD_a, UC_a, EU_a; -real UA1_i, UA1R_i, UC1_i, UD1_i, UCSTE_i, UTE_i, UTL_i, EMOBT_i, UC1R_i, UD1R_i, UTER_i, UTLR_i; -real PTWGT_i; -real AT_i, ATCV_i, ATR_i; -real RDW_i, RSW_i; -real PRT_i, KT1_i, TSS_i, IIT_i, IGT_i, TGIDL_i; -real NTGEN_i, AIGEN_i, BIGEN_i; -real K0SISAT_i, K0SISAT1_i; -real K2SISAT_i, K2SISAT1_i; -real K2_i, K21_i; - -// Variables of Unified Finfet Compact Model -real Cins, Ach, Weff_UFCM, qdep,rc, vth_fixed_factor_Sub, vth_fixed_factor_SI, qm, Qdep_ov_Cins, qi_acc_for_QM; -real fieldnormalizationfactor, auxQMfact, QMFACTORCVfinal; -real psipclamp, sqrtpsip, nq, F0; - -real LSP_i; - -`Cfringe_2d_vars(); - -//=================================================== -// analog block begins -//=================================================== -analog begin - - // ************************************************ - // * Geometry dependent calculations * - // ************************************************ - begin : CMGBiasIndepCalc - - // Variable Initialization to Prevent Hidden States - qid = 0.0; - qis = 0.0; - qba = 0.0; - T11 = 0.0; - T12 = 0.0; - ids = 0.0; - sigvds = 0.0; - Iii = 0.0; - qd = 0.0; - qg = 0.0; - qs = 0.0; - qb = 0.0; - Weff0 = 0.0; - WeffCV0 = 0.0; - CJS_t = 0.0; - CJSWS_t = 0.0; - CJSWGS_t = 0.0; - CJD_t = 0.0; - CJSWD_t = 0.0; - CJSWGD_t = 0.0; - PBS_t = 0.0; - PBSWS_t = 0.0; - PBSWGS_t = 0.0; - PBD_t = 0.0; - PBSWD_t = 0.0; - PBSWGD_t = 0.0; - JSS_t = 0.0; - JSWS_t = 0.0; - JSWGS_t = 0.0; - JSD_t = 0.0; - JSWD_t = 0.0; - JSWGD_t = 0.0; - JTSS_t = 0.0; - JTSSWS_t = 0.0; - JTSSWGS_t = 0.0; - JTSD_t = 0.0; - JTSSWD_t = 0.0; - JTSSWGD_t = 0.0; - NJTS_t = 0.0; - NJTSSW_t = 0.0; - NJTSSWG_t = 0.0; - NJTSD_t = 0.0; - NJTSSWD_t = 0.0; - NJTSSWGD_t = 0.0; - Ies = 0.0; - Ied = 0.0; - Czbs = 0.0; - Czbssw = 0.0; - Czbsswg = 0.0; - Czbd = 0.0; - Czbdsw = 0.0; - Czbdswg = 0.0; - Qes = 0.0; - Qed = 0.0; - Qeg = 0.0; - Isbs = 0.0; - Isbd = 0.0; - Nvtms = 0.0; - Nvtmd = 0.0; - SslpRev = 0.0; - IVjsmRev = 0.0; - VjsmRev = 0.0; - SslpFwd = 0.0; - IVjsmFwd = 0.0; - VjsmFwd = 0.0; - DslpRev = 0.0; - IVjdmRev = 0.0; - VjdmRev = 0.0; - DslpFwd = 0.0; - IVjdmFwd = 0.0; - VjdmFwd = 0.0; - XExpBVS = 0.0; - XExpBVD = 0.0; - idsgen = 0.0; - q0 = 0.0; - Tcen = 0.0; - MTcen = 0.0; - Rdrain = 0.0; - Rsource = 0.0; - Cfr_geo = 0.0; - igbinv = 0.0; - igbs = 0.0; - igbd = 0.0; - igbacc = 0.0; - igcs = 0.0; - igcd = 0.0; - igidl = 0.0; - igisl = 0.0; - igs = 0.0; - igd = 0.0; - cox_acc = 0.0; - CGSO_i = 0.0; - CGDO_i = 0.0; - qb_acc = 0.0; - qg_acc = 0.0; - qgs_fr = 0.0; - qgd_fr = 0.0; - qds_fr = 0.0; - qgs_parasitic = 0.0; - qgd_parasitic = 0.0; - FNPowerAt1Hz = 0.0; - Gtnoi = 0.0; - gspr = 0.0; - gdpr = 0.0; - Dr = 1.0; - CDSCDR_i = 0.0; - ETA0R_i = 0.0; - VSAT1R_i = 0.0; - VSAT1R_t = 0.0; - MEXPR_i = 0.0; - MEXPR_t = 0.0; - PTWGR_i = 0.0; - PTWGR_t = 0.0; - PDIBL1R_i = 0.0; - PDIBL2R_i = 0.0; - PHIBE_i = 0.0; - K1_i = 0.0; - K11_i = 0.0; - K2SAT_i = 0.0; - K2SAT1_i = 0.0; - KSATIVR_i = 0.0; - K2_i = 0.0; - K21_i = 0.0; - UC_i = 0.0; - UC1_i = 0.0; - UC_t = 0.0; - U0R_i = 0.0; - UPR_i = 0.0; - EUR_i = 0.0; - ATR_i = 0.0; - CITR_i = 0.0; - ETA0R_i = 0.0; - DVTP0_i = 0.0; - DVTP1_i = 0.0; - PDIBL2R_i = 0.0; - PCLMR_i = 0.0; - LeffCV_acc = 0.0; - RDDRR_t = 0.0; - RSDRR_t = 0.0; - Rdsi = 0.0; - T3y = 0.0; - Tcen0 = 0.0; - veseff = 0.0; - U0R_t = 0.0; - UAR_t = 0.0; - UCR_t = 0.0; - UDR_t = 0.0; - VSAT_a = 0.0; - DVTSHIFTR_i = 0.0; - UA1R_i = 0.0; - UAR_i = 0.0; - UC1R_i = 0.0; - UCR_i = 0.0; - UD1R_i = 0.0; - UDR_i = 0.0; - UTER_i = 0.0; - UTLR_i = 0.0; - VSATR_i = 0.0; - VSATR_t = 0.0; - u0r = 0.0; - - // Thermal Noise - sid = 0.0; - - `ifdef __TNOIMOD1__ - ctnoi = 0.0; - sf = 0.0; - C0 = 0.0; - gamma = 0.0; - delta = 0.0; - `endif - - `ifdef __RGATEMOD__ - ggeltd = 0.0; - `endif - - // Unified FinFET Model - qm = 1.0; - Cins = 1.0; - Ach = 1.0; - Weff_UFCM = 1.0; - qdep = -1.0; - rc = 1.0; - vth_fixed_factor_Sub = 1.0; - vth_fixed_factor_SI = 1.0; - qi_acc_for_QM = 0.0; - fieldnormalizationfactor = 0.0; - auxQMfact = 0.0; - QMFACTORCVfinal = 0.0; - psipclamp = 1.0; - sqrtpsip = 1.0; - nq = 1.0; - F0 = 0.0; - e0 = 0.0; - e1 = 0.0; - e2 = 0.0; - Qdep_ov_Cins = 0.0; - - // Constants - if ( TYPE == `ntype ) begin - devsign = 1; - end else begin - devsign = -1; - end - - epssub = EPSRSUB * `EPS0; - epssp = EPSRSP * `EPS0; - cbox = EPSROX * `EPS0 / EOTBOX; - epsratio = EPSRSUB / EPSROX; - - if ($port_connected(t) == 1) begin - `ifdef __SHMOD__ - if (SHMOD == 0) begin - if (SH_WARN == 1) begin - $strobe("The optional 5th terminal is present but not active because SHMOD=0."); - end - end - `else - Temp(t) <+ 0.0; - if (SH_WARN == 1) begin - $strobe("The optional 5th terminal is present but not active because the model was not compiled with self-heating enabled (__SHMOD__ was not activated)."); - end - `endif - end - - // Constants for Quantum Mechanical Effects - mx = 0.916 * `MEL; - mxprime = 0.190 * `MEL; - md = 0.190 * `MEL; - mdprime = 0.417 * `MEL; - gprime = 4.0; - gfactor = 2.0; - - // Effective Channel Length for I-V / C-V - Lg = L + XL; - deltaL = LINT + LL * pow(Lg, -LLN); - deltaL1 = LINT + LL * pow(Lg+DLBIN, -LLN); - deltaLCV = DLC + LLC * pow(Lg, -LLN); - Leff = Lg - 2.0 * deltaL; - Leff1 = Lg + DLBIN - 2.0 * deltaL1; //Used in the binning equations only - LeffCV = Lg - 2.0 * deltaLCV; - if (BULKMOD != 0) LeffCV_acc = LeffCV - DLCACC; - - // Total Fins - NFINtotal = NFIN * NF; - - // Range Checking on Leff and Leff1 - if (Leff <= 0.0) begin - $strobe("Fatal: Leff = %e is not positive.", Leff); - $finish(0); - end else if (Leff <= 1.0e-9) begin - $strobe("Warning: Leff = %e <= 1.0e-9.", Leff); - end - - if (Leff1 <= 0.0) begin - $strobe("Fatal: Leff1 = %e is not positive.", Leff1); - $finish(0); - end else if (Leff1 <= 1.0e-9) begin - $strobe("Warning: Leff1 = %e <= 1.0e-9.", Leff1); - end - - // Binning - Inv_L = 1.0e-6 / (Leff1); - Inv_NFIN = 1.0 / NFIN; - Inv_LNFIN = 1.0e-6 / (Leff1 * NFIN); - - // Nbody Binning Equation for UFCM Parameters - NBODY_i = NBODY + Inv_L * LNBODY + Inv_NFIN * NNBODY + Inv_LNFIN * PNBODY; - - if (NBODYN1 != 0.0) begin - NBODY_i = NBODY_i * (1.0 + NBODYN1/NFIN * lln(1.0 + NFIN/NBODYN2)); - end - - // Model Parameters for Unified FinFET Compact Model by Juan Duarte 10/2013 - case (GEOMOD) - 0: begin // Double Gate - if (!$param_given(TFIN_TOP) || !$param_given(TFIN_BASE)) begin - Weff_UFCM = 2.0 * HFIN; - Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; - Ach = HFIN * TFIN; - rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end else begin - Weff_UFCM = 2.0 * sqrt( HFIN * HFIN + (TFIN_TOP - TFIN_BASE) * (TFIN_TOP - TFIN_BASE) / 4.0); - Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; - Ach = HFIN * (TFIN_TOP + TFIN_BASE) / 2.0; - rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end - end - 1: begin // Triple Gate - if (!$param_given(TFIN_TOP) || !$param_given(TFIN_BASE)) begin - Weff_UFCM = 2.0 * HFIN + TFIN; - Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; - Ach = HFIN * TFIN; - rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end else begin - Weff_UFCM = 2.0 * sqrt(HFIN * HFIN + (TFIN_TOP - TFIN_BASE) * (TFIN_TOP - TFIN_BASE) / 4.0) + TFIN_TOP; - Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; - Ach = HFIN * (TFIN_TOP + TFIN_BASE) / 2.0; - rc = (2.0 * Cins /(Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end - end - 2: begin // Quadruple Gate - if (!$param_given(TFIN_TOP) || !$param_given(TFIN_BASE)) begin - Weff_UFCM = 2.0 * HFIN + 2.0 * TFIN; - Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; - Ach = HFIN * TFIN; - rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end else begin - Weff_UFCM = 2.0 * sqrt(HFIN * HFIN + (TFIN_TOP - TFIN_BASE) * (TFIN_TOP - TFIN_BASE) / 4.0) + TFIN_TOP + TFIN_BASE; - Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; - Ach = HFIN * (TFIN_TOP + TFIN_BASE) / 2.0; - rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end - end - 3: begin // Cylindrical Gate - Weff_UFCM = `M_PI * D; - Cins = 2.0 * `M_PI * EPSROX * `EPS0 / ln(1.0 + 2.0 * EOT / D); - Ach = `M_PI * D * D / 4.0; - rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end - 4: begin // Unified Model - Weff_UFCM = W_UFCM; - Cins = CINS_UFCM; - Ach = ACH_UFCM; - rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); - Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; - end - endcase - - // Cox Definition - cox = Cins / Weff_UFCM; - if (BULKMOD != 0) begin - cox_acc = cox * EOT / EOTACC; - end - - // Effective Width Calculation - Weff0 = Weff_UFCM - DELTAW; - WeffCV0 = Weff_UFCM - DELTAWCV; - - // SCE Scaling Length - scl = sqrt((epssub * Ach / Cins) * (1.0 + Ach * Cins / (2.0 * epssub * Weff_UFCM * Weff_UFCM))); - - // Binning Equations (Process Parameters) - PHIG_i = PHIG + Inv_L * LPHIG + Inv_NFIN * NPHIG + Inv_LNFIN * PPHIG; - NGATE_i = NGATE + Inv_L * LNGATE + Inv_NFIN * NNGATE + Inv_LNFIN * PNGATE; - - // Binning Equations (Model Parameters) - CIT_i = CIT + Inv_L * LCIT + Inv_NFIN * NCIT + Inv_LNFIN * PCIT; - CDSC_i = CDSC + Inv_L * LCDSC + Inv_NFIN * NCDSC + Inv_LNFIN * PCDSC; - CDSCD_i = CDSCD + Inv_L * LCDSCD + Inv_NFIN * NCDSCD + Inv_LNFIN * PCDSCD; - DVT0_i = DVT0 + Inv_L * LDVT0 + Inv_NFIN * NDVT0 + Inv_LNFIN * PDVT0; - DVT1_i = DVT1 + Inv_L * LDVT1 + Inv_NFIN * NDVT1 + Inv_LNFIN * PDVT1; - DVT1SS_i = DVT1SS + Inv_L * LDVT1SS + Inv_NFIN * NDVT1SS + Inv_LNFIN * PDVT1SS; - PHIN_i = PHIN + Inv_L * LPHIN + Inv_NFIN * NPHIN + Inv_LNFIN * PPHIN; - ETA0_i = ETA0 + Inv_L * LETA0 + Inv_NFIN * NETA0 + Inv_LNFIN * PETA0; - DSUB_i = DSUB + Inv_L * LDSUB + Inv_NFIN * NDSUB + Inv_LNFIN * PDSUB; - K1RSCE_i = K1RSCE + Inv_L * LK1RSCE + Inv_NFIN * NK1RSCE + Inv_LNFIN * PK1RSCE; - LPE0_i = LPE0 + Inv_L * LLPE0 + Inv_NFIN * NLPE0 + Inv_LNFIN * PLPE0; - DVTSHIFT_i = DVTSHIFT + Inv_L * LDVTSHIFT + Inv_NFIN * NDVTSHIFT + Inv_LNFIN * PDVTSHIFT; - K0_i = K0 + Inv_L * LK0 + Inv_NFIN * NK0 + Inv_LNFIN * PK0; - K01_i = K01 + Inv_L * LK01 + Inv_NFIN * NK01 + Inv_LNFIN * PK01; - K0SI_i = K0SI + Inv_L * LK0SI + Inv_NFIN * NK0SI + Inv_LNFIN * PK0SI; - K0SI1_i = K0SI1 + Inv_L * LK0SI1 + Inv_NFIN * NK0SI1 + Inv_LNFIN * PK0SI1; - K2SI_i = K2SI + Inv_L * LK2SI + Inv_NFIN * NK2SI + Inv_LNFIN * PK2SI; - K2SI1_i = K2SI1 + Inv_L * LK2SI1 + Inv_NFIN * NK2SI1 + Inv_LNFIN * PK2SI1; - K0SISAT_i = K0SISAT + Inv_L * LK0SISAT + Inv_NFIN * NK0SISAT + Inv_LNFIN * PK0SISAT; - K0SISAT1_i = K0SISAT1 + Inv_L * LK0SISAT1 + Inv_NFIN * NK0SISAT1 + Inv_LNFIN * PK0SISAT1; - K2SISAT_i = K2SISAT + Inv_L * LK2SISAT + Inv_NFIN * NK2SISAT + Inv_LNFIN * PK2SISAT; - K2SISAT1_i = K2SISAT1 + Inv_L * LK2SISAT1 + Inv_NFIN * NK2SISAT1 + Inv_LNFIN * PK2SISAT1; - - if (BULKMOD != 0) begin - if (BULKMOD == 2) begin - K2_i = K2 + Inv_L * LK2 + Inv_NFIN * NK2 + Inv_LNFIN * PK2; - K21_i = K21 + Inv_L * LK21 + Inv_NFIN * NK21 + Inv_LNFIN * PK21; - K2SAT_i = K2SAT + Inv_L * LK2SAT + Inv_NFIN * NK2SAT + Inv_LNFIN * PK2SAT; - K2SAT1_i = K2SAT1 + Inv_L * LK2SAT1 + Inv_NFIN * NK2SAT1 + Inv_LNFIN * PK2SAT1; - end - PHIBE_i = PHIBE + Inv_L * LPHIBE + Inv_NFIN * NPHIBE + Inv_LNFIN * PPHIBE; - K1_i = K1 + Inv_L * LK1 + Inv_NFIN * NK1 + Inv_LNFIN * PK1; - K11_i = K11 + Inv_L * LK11 + Inv_NFIN * NK11 + Inv_LNFIN * PK11; - end - QMFACTOR_i = QMFACTOR + Inv_L * LQMFACTOR + Inv_NFIN * NQMFACTOR + Inv_LNFIN * PQMFACTOR; - QMTCENCV_i = QMTCENCV + Inv_L * LQMTCENCV + Inv_NFIN * NQMTCENCV + Inv_LNFIN * PQMTCENCV; - QMTCENCVA_i = QMTCENCVA + Inv_L * LQMTCENCVA + Inv_NFIN * NQMTCENCVA + Inv_LNFIN * PQMTCENCVA; - VSAT_i = VSAT + Inv_L * LVSAT + Inv_NFIN * NVSAT + Inv_LNFIN * PVSAT; - VSAT1_i = VSAT1 + Inv_L * LVSAT1 + Inv_NFIN * NVSAT1 + Inv_LNFIN * PVSAT1; - VSATCV_i = VSATCV + Inv_L * LVSATCV + Inv_NFIN * NVSATCV + Inv_LNFIN * PVSATCV; - DELTAVSAT_i = DELTAVSAT + Inv_L * LDELTAVSAT + Inv_NFIN * NDELTAVSAT + Inv_LNFIN * PDELTAVSAT; - PSAT_i = PSAT + Inv_L * LPSAT + Inv_NFIN * NPSAT + Inv_LNFIN * PPSAT; - DELTAVSATCV_i = DELTAVSATCV + Inv_L * LDELTAVSATCV + Inv_NFIN * NDELTAVSATCV + Inv_LNFIN * PDELTAVSATCV; - PSATCV_i = PSATCV + Inv_L * LPSATCV + Inv_NFIN * NPSATCV + Inv_LNFIN * PPSATCV; - KSATIV_i = KSATIV + Inv_L * LKSATIV + Inv_NFIN * NKSATIV + Inv_LNFIN * PKSATIV; - MEXP_i = MEXP + Inv_L * LMEXP + Inv_NFIN * NMEXP + Inv_LNFIN * PMEXP; - PTWG_i = PTWG + Inv_L * LPTWG + Inv_NFIN * NPTWG + Inv_LNFIN * PPTWG; - U0_i = U0 + Inv_L * LU0 + Inv_NFIN * NU0 + Inv_LNFIN * PU0; - ETAMOB_i = ETAMOB + Inv_L * LETAMOB + Inv_NFIN * NETAMOB + Inv_LNFIN * PETAMOB; - UP_i = UP + Inv_L * LUP + Inv_NFIN * NUP + Inv_LNFIN * PUP; - UA_i = UA + Inv_L * LUA + Inv_NFIN * NUA + Inv_LNFIN * PUA; - if (BULKMOD != 0) begin - UC_i = UC + Inv_L * LUC + Inv_NFIN * NUC + Inv_LNFIN * PUC; - end - EU_i = EU + Inv_L * LEU + Inv_NFIN * NEU + Inv_LNFIN * PEU; - UD_i = UD + Inv_L * LUD + Inv_NFIN * NUD + Inv_LNFIN * PUD; - UCS_i = UCS + Inv_L * LUCS + Inv_NFIN * NUCS + Inv_LNFIN * PUCS; - PCLM_i = PCLM + Inv_L * LPCLM + Inv_NFIN * NPCLM + Inv_LNFIN * PPCLM; - PCLMG_i = PCLMG + Inv_L * LPCLMG + Inv_NFIN * NPCLMG + Inv_LNFIN * PPCLMG; - PCLMCV_i = PCLMCV + Inv_L * LPCLMCV + Inv_NFIN * NPCLMCV + Inv_LNFIN * PPCLMCV; - A1_i = A1 + Inv_L * LA1 + Inv_NFIN * NA1 + Inv_LNFIN * PA1; - A11_i = A11 + Inv_L * LA11 + Inv_NFIN * NA11 + Inv_LNFIN * PA11; - A2_i = A2 + Inv_L * LA2 + Inv_NFIN * NA2 + Inv_LNFIN * PA2; - A21_i = A21 + Inv_L * LA21 + Inv_NFIN * NA21 + Inv_LNFIN * PA21; - RDSW_i = RDSW + Inv_L * LRDSW + Inv_NFIN * NRDSW + Inv_LNFIN * PRDSW; - RSW_i = RSW + Inv_L * LRSW + Inv_NFIN * NRSW + Inv_LNFIN * PRSW; - RDW_i = RDW + Inv_L * LRDW + Inv_NFIN * NRDW + Inv_LNFIN * PRDW; - PRWGD_i = PRWGD + Inv_L * LPRWGD + Inv_NFIN * NPRWGD + Inv_LNFIN * PPRWGD; - PRWGS_i = PRWGS + Inv_L * LPRWGS + Inv_NFIN * NPRWGS + Inv_LNFIN * PPRWGS; - WR_i = WR + Inv_L * LWR + Inv_NFIN * NWR + Inv_LNFIN * PWR; - PDIBL1_i = PDIBL1 + Inv_L * LPDIBL1 + Inv_NFIN * NPDIBL1 + Inv_LNFIN * PPDIBL1; - PDIBL2_i = PDIBL2 + Inv_L * LPDIBL2 + Inv_NFIN * NPDIBL2 + Inv_LNFIN * PPDIBL2; - DROUT_i = DROUT + Inv_L * LDROUT + Inv_NFIN * NDROUT + Inv_LNFIN * PDROUT; - PVAG_i = PVAG + Inv_L * LPVAG + Inv_NFIN * NPVAG + Inv_LNFIN * PPVAG; - AIGBINV_i = AIGBINV + Inv_L * LAIGBINV + Inv_NFIN * NAIGBINV + Inv_LNFIN * PAIGBINV; - AIGBINV1_i = AIGBINV1 + Inv_L * LAIGBINV1 + Inv_NFIN * NAIGBINV1 + Inv_LNFIN * PAIGBINV1; - BIGBINV_i = BIGBINV + Inv_L * LBIGBINV + Inv_NFIN * NBIGBINV + Inv_LNFIN * PBIGBINV; - CIGBINV_i = CIGBINV + Inv_L * LCIGBINV + Inv_NFIN * NCIGBINV + Inv_LNFIN * PCIGBINV; - EIGBINV_i = EIGBINV + Inv_L * LEIGBINV + Inv_NFIN * NEIGBINV + Inv_LNFIN * PEIGBINV; - NIGBINV_i = NIGBINV + Inv_L * LNIGBINV + Inv_NFIN * NNIGBINV + Inv_LNFIN * PNIGBINV; - AIGBACC_i = AIGBACC + Inv_L * LAIGBACC + Inv_NFIN * NAIGBACC + Inv_LNFIN * PAIGBACC; - AIGBACC1_i = AIGBACC1 + Inv_L * LAIGBACC1 + Inv_NFIN * NAIGBACC1 + Inv_LNFIN * PAIGBACC1; - BIGBACC_i = BIGBACC + Inv_L * LBIGBACC + Inv_NFIN * NBIGBACC + Inv_LNFIN * PBIGBACC; - CIGBACC_i = CIGBACC + Inv_L * LCIGBACC + Inv_NFIN * NCIGBACC + Inv_LNFIN * PCIGBACC; - NIGBACC_i = NIGBACC + Inv_L * LNIGBACC + Inv_NFIN * NNIGBACC + Inv_LNFIN * PNIGBACC; - AIGC_i = AIGC + Inv_L * LAIGC + Inv_NFIN * NAIGC + Inv_LNFIN * PAIGC; - AIGC1_i = AIGC1 + Inv_L * LAIGC1 + Inv_NFIN * NAIGC1 + Inv_LNFIN * PAIGC1; - BIGC_i = BIGC + Inv_L * LBIGC + Inv_NFIN * NBIGC + Inv_LNFIN * PBIGC; - CIGC_i = CIGC + Inv_L * LCIGC + Inv_NFIN * NCIGC + Inv_LNFIN * PCIGC; - PIGCD_i = PIGCD + Inv_L * LPIGCD + Inv_NFIN * NPIGCD + Inv_LNFIN * PPIGCD; - AIGS_i = AIGS + Inv_L * LAIGS + Inv_NFIN * NAIGS + Inv_LNFIN * PAIGS; - AIGS1_i = AIGS1 + Inv_L * LAIGS1 + Inv_NFIN * NAIGS1 + Inv_LNFIN * PAIGS1; - BIGS_i = BIGS + Inv_L * LBIGS + Inv_NFIN * NBIGS + Inv_LNFIN * PBIGS; - CIGS_i = CIGS + Inv_L * LCIGS + Inv_NFIN * NCIGS + Inv_LNFIN * PCIGS; - AIGD_i = AIGD + Inv_L * LAIGD + Inv_NFIN * NAIGD + Inv_LNFIN * PAIGD; - AIGD1_i = AIGD1 + Inv_L * LAIGD1 + Inv_NFIN * NAIGD1 + Inv_LNFIN * PAIGD1; - BIGD_i = BIGD + Inv_L * LBIGD + Inv_NFIN * NBIGD + Inv_LNFIN * PBIGD; - CIGD_i = CIGD + Inv_L * LCIGD + Inv_NFIN * NCIGD + Inv_LNFIN * PCIGD; - NTOX_i = NTOX + Inv_L * LNTOX + Inv_NFIN * NNTOX + Inv_LNFIN * PNTOX; - POXEDGE_i = POXEDGE + Inv_L * LPOXEDGE + Inv_NFIN * NPOXEDGE + Inv_LNFIN * PPOXEDGE; - AGIDL_i = AGIDL + Inv_L * LAGIDL + Inv_NFIN * NAGIDL + Inv_LNFIN * PAGIDL; - BGIDL_i = BGIDL + Inv_L * LBGIDL + Inv_NFIN * NBGIDL + Inv_LNFIN * PBGIDL; - CGIDL_i = CGIDL + Inv_L * LCGIDL + Inv_NFIN * NCGIDL + Inv_LNFIN * PCGIDL; - EGIDL_i = EGIDL + Inv_L * LEGIDL + Inv_NFIN * NEGIDL + Inv_LNFIN * PEGIDL; - PGIDL_i = PGIDL + Inv_L * LPGIDL + Inv_NFIN * NPGIDL + Inv_LNFIN * PPGIDL; - AGISL_i = AGISL + Inv_L * LAGISL + Inv_NFIN * NAGISL + Inv_LNFIN * PAGISL; - BGISL_i = BGISL + Inv_L * LBGISL + Inv_NFIN * NBGISL + Inv_LNFIN * PBGISL; - CGISL_i = CGISL + Inv_L * LCGISL + Inv_NFIN * NCGISL + Inv_LNFIN * PCGISL; - EGISL_i = EGISL + Inv_L * LEGISL + Inv_NFIN * NEGISL + Inv_LNFIN * PEGISL; - PGISL_i = PGISL + Inv_L * LPGISL + Inv_NFIN * NPGISL + Inv_LNFIN * PPGISL; - ALPHA0_i = ALPHA0 + Inv_L * LALPHA0 + Inv_NFIN * NALPHA0 + Inv_LNFIN * PALPHA0; - ALPHA1_i = ALPHA1 + Inv_L * LALPHA1 + Inv_NFIN * NALPHA1 + Inv_LNFIN * PALPHA1; - ALPHAII0_i = ALPHAII0 + Inv_L * LALPHAII0 + Inv_NFIN * NALPHAII0 + Inv_LNFIN * PALPHAII0; - ALPHAII1_i = ALPHAII1 + Inv_L * LALPHAII1 + Inv_NFIN * NALPHAII1 + Inv_LNFIN * PALPHAII1; - BETA0_i = BETA0 + Inv_L * LBETA0 + Inv_NFIN * NBETA0 + Inv_LNFIN * PBETA0; - BETAII0_i = BETAII0 + Inv_L * LBETAII0 + Inv_NFIN * NBETAII0 + Inv_LNFIN * PBETAII0; - BETAII1_i = BETAII1 + Inv_L * LBETAII1 + Inv_NFIN * NBETAII1 + Inv_LNFIN * PBETAII1; - BETAII2_i = BETAII2 + Inv_L * LBETAII2 + Inv_NFIN * NBETAII2 + Inv_LNFIN * PBETAII2; - ESATII_i = ESATII + Inv_L * LESATII + Inv_NFIN * NESATII + Inv_LNFIN * PESATII; - LII_i = LII + Inv_L * LLII + Inv_NFIN * NLII + Inv_LNFIN * PLII; - SII0_i = SII0 + Inv_L * LSII0 + Inv_NFIN * NSII0 + Inv_LNFIN * PSII0; - SII1_i = SII1 + Inv_L * LSII1 + Inv_NFIN * NSII1 + Inv_LNFIN * PSII1; - SII2_i = SII2 + Inv_L * LSII2 + Inv_NFIN * NSII2 + Inv_LNFIN * PSII2; - SIID_i = SIID + Inv_L * LSIID + Inv_NFIN * NSIID + Inv_LNFIN * PSIID; - TII_i = TII + Inv_L * LTII + Inv_NFIN * NTII + Inv_LNFIN * PTII; - CFS_i = CFS + Inv_L * LCFS + Inv_NFIN * NCFS + Inv_LNFIN * PCFS; - CFD_i = CFD + Inv_L * LCFD + Inv_NFIN * NCFD + Inv_LNFIN * PCFD; - COVS_i = COVS + Inv_L * LCOVS + Inv_NFIN * NCOVS + Inv_LNFIN * PCOVS; - COVD_i = COVD + Inv_L * LCOVD + Inv_NFIN * NCOVD + Inv_LNFIN * PCOVD; - CGSL_i = CGSL + Inv_L * LCGSL + Inv_NFIN * NCGSL + Inv_LNFIN * PCGSL; - CGDL_i = CGDL + Inv_L * LCGDL + Inv_NFIN * NCGDL + Inv_LNFIN * PCGDL; - CGBL_i = CGBL + Inv_L * LCGBL + Inv_NFIN * NCGBL + Inv_LNFIN * PCGBL; - CKAPPAS_i = CKAPPAS + Inv_L * LCKAPPAS + Inv_NFIN * NCKAPPAS + Inv_LNFIN * PCKAPPAS; - CKAPPAD_i = CKAPPAD + Inv_L * LCKAPPAD + Inv_NFIN * NCKAPPAD + Inv_LNFIN * PCKAPPAD; - CKAPPAB_i = CKAPPAB + Inv_L * LCKAPPAB + Inv_NFIN * NCKAPPAB + Inv_LNFIN * PCKAPPAB; - NTGEN_i = NTGEN + Inv_L * LNTGEN + Inv_NFIN * NNTGEN + Inv_LNFIN * PNTGEN; - AIGEN_i = AIGEN + Inv_L * LAIGEN + Inv_NFIN * NAIGEN + Inv_LNFIN * PAIGEN; - BIGEN_i = BIGEN + Inv_L * LBIGEN + Inv_NFIN * NBIGEN + Inv_LNFIN * PBIGEN; - - if (ASYMMOD != 0) begin - CDSCDR_i = CDSCDR + Inv_L * LCDSCDR + Inv_NFIN * NCDSCDR + Inv_LNFIN * PCDSCDR; - CITR_i = CITR + Inv_L * LCITR + Inv_NFIN * NCITR + Inv_LNFIN * PCITR; - ETA0R_i = ETA0R + Inv_L * LETA0R + Inv_NFIN * NETA0R + Inv_LNFIN * PETA0R; - VSAT1R_i = VSAT1R + Inv_L * LVSAT1R + Inv_NFIN * NVSAT1R + Inv_LNFIN * PVSAT1R; - MEXPR_i = MEXPR + Inv_L * LMEXPR + Inv_NFIN * NMEXPR + Inv_LNFIN * PMEXPR; - PTWGR_i = PTWGR + Inv_L * LPTWGR + Inv_NFIN * NPTWGR + Inv_LNFIN * PPTWGR; - PDIBL1R_i = PDIBL1R + Inv_L * LPDIBL1R + Inv_NFIN * NPDIBL1R + Inv_LNFIN * PPDIBL1R; - PDIBL2R_i = PDIBL2R + Inv_L * LPDIBL2R + Inv_NFIN * NPDIBL2R + Inv_LNFIN * PPDIBL2R; - PCLMR_i = PCLMR + Inv_L * LPCLMR + Inv_NFIN * NPCLMR + Inv_LNFIN * PPCLMR; - DVTSHIFTR_i = DVTSHIFTR + Inv_L * LDVTSHIFTR + Inv_NFIN * NDVTSHIFTR + Inv_LNFIN * PDVTSHIFTR; - VSATR_i = VSATR + Inv_L * LVSATR + Inv_NFIN * NVSATR + Inv_LNFIN * PVSATR; - KSATIVR_i = KSATIVR + Inv_L * LKSATIVR + Inv_NFIN * NKSATIVR + Inv_LNFIN * PKSATIVR; - U0R_i = U0R + Inv_L * LU0R + Inv_NFIN * NU0R + Inv_LNFIN * PU0R; - UAR_i = UAR + Inv_L * LUAR + Inv_NFIN * NUAR + Inv_LNFIN * PUAR; - UPR_i = UPR + Inv_L * LUPR + Inv_NFIN * NUPR + Inv_LNFIN * PUPR; - if (BULKMOD != 0) begin - UCR_i = UCR + Inv_L * LUCR + Inv_NFIN * NUCR + Inv_LNFIN * PUCR; - end - EUR_i = EUR + Inv_L * LEUR + Inv_NFIN * NEUR + Inv_LNFIN * PEUR; - UDR_i = UDR + Inv_L * LUDR + Inv_NFIN * NUDR + Inv_LNFIN * PUDR; - end - - `ifdef __NQSMOD1__ - if (NQSMOD == 1 && XRCRG1 != 0.0) begin - XRCRG1_i = XRCRG1 + Inv_L * LXRCRG1 + Inv_NFIN * NXRCRG1 + Inv_LNFIN * PXRCRG1; - XRCRG2_i = XRCRG2 + Inv_L * LXRCRG2 + Inv_NFIN * NXRCRG2 + Inv_LNFIN * PXRCRG2; - end else begin - XRCRG1_i = 0.0; - XRCRG2_i = 0.0; - end - `else - if (NQSMOD == 1) begin - $strobe(" Although the model selector NQSMOD is set to 1, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment \"`define __NQSMOD1__\" in bsimcmg.va to activate it."); - end - `endif - - `ifdef __NQSMOD2__ - if (NQSMOD == 2 && XRCRG1 != 0.0) begin - XRCRG1_i = XRCRG1 + Inv_L * LXRCRG1 + Inv_NFIN * NXRCRG1 + Inv_LNFIN * PXRCRG1; - XRCRG2_i = XRCRG2 + Inv_L * LXRCRG2 + Inv_NFIN * NXRCRG2 + Inv_LNFIN * PXRCRG2; - end else begin - XRCRG1_i = 0.0; - XRCRG2_i = 0.0; - end - `else - if (NQSMOD == 2) begin - $strobe(" Although the model selector NQSMOD is set to 2, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment \"`define __NQSMOD2__\" in bsimcmg.va to activate it."); - end - `endif - - UTE_i = UTE + Inv_L * LUTE + Inv_NFIN * NUTE + Inv_LNFIN * PUTE; - UTL_i = UTL + Inv_L * LUTL + Inv_NFIN * NUTL + Inv_LNFIN * PUTL; - EMOBT_i = EMOBT + Inv_L * LEMOBT + Inv_NFIN * NEMOBT + Inv_LNFIN * PEMOBT; - UA1_i = UA1 + Inv_L * LUA1 + Inv_NFIN * NUA1 + Inv_LNFIN * PUA1; - - if (BULKMOD != 0) begin - UC1_i = UC1 + Inv_L * LUC1 + Inv_NFIN * NUC1 + Inv_LNFIN * PUC1; - end - UD1_i = UD1 + Inv_L * LUD1 + Inv_NFIN * NUD1 + Inv_LNFIN * PUD1; - UCSTE_i = UCSTE + Inv_L * LUCSTE + Inv_NFIN * NUCSTE + Inv_LNFIN * PUCSTE; - PTWGT_i = PTWGT + Inv_L * LPTWGT + Inv_NFIN * NPTWGT + Inv_LNFIN * PPTWGT; - AT_i = AT + Inv_L * LAT + Inv_NFIN * NAT + Inv_LNFIN * PAT; - ATCV_i = ATCV + Inv_L * LATCV + Inv_NFIN * NATCV + Inv_LNFIN * PATCV; - PRT_i = PRT + Inv_L * LPRT + Inv_NFIN * NPRT + Inv_LNFIN * PPRT; - KT1_i = KT1 + Inv_L * LKT1 + Inv_NFIN * NKT1 + Inv_LNFIN * PKT1; - TSS_i = TSS + Inv_L * LTSS + Inv_NFIN * NTSS + Inv_LNFIN * PTSS; - IIT_i = IIT + Inv_L * LIIT + Inv_NFIN * NIIT + Inv_LNFIN * PIIT; - TGIDL_i = TGIDL + Inv_L * LTGIDL + Inv_NFIN * NTGIDL + Inv_LNFIN * PTGIDL; - IGT_i = IGT + Inv_L * LIGT + Inv_NFIN * NIGT + Inv_LNFIN * PIGT; - - if (ASYMMOD != 0) begin - UTER_i = UTER + Inv_L * LUTER + Inv_NFIN * NUTER + Inv_LNFIN * PUTER; - UTLR_i = UTLR + Inv_L * LUTLR + Inv_NFIN * NUTLR + Inv_LNFIN * PUTLR; - UA1R_i = UA1R + Inv_L * LUA1R + Inv_NFIN * NUA1R + Inv_LNFIN * PUA1R; - UD1R_i = UD1R + Inv_L * LUD1R + Inv_NFIN * NUD1R + Inv_LNFIN * PUD1R; - ATR_i = ATR + Inv_L * LATR + Inv_NFIN * NATR + Inv_LNFIN * PATR; - if (BULKMOD != 0) begin - UC1R_i = UC1R + Inv_L * LUC1R + Inv_NFIN * NUC1R + Inv_LNFIN * PUC1R; - end - end - - // Geometrical Scaling - // NFIN Scaling - if (PHIGN1 != 0.0) begin - PHIG_i = PHIG_i * (1.0 + PHIGN1 / NFIN * lln(1.0 + NFIN / PHIGN2)); - end - - if (ETA0N1 != 0.0) begin - ETA0_i = ETA0_i * (1.0 + ETA0N1 / NFIN * lln(1.0 + NFIN / ETA0N2)); - end - - if (CDSCN1 != 0.0) begin - CDSC_i = CDSC_i * (1.0 + CDSCN1 / NFIN * lln(1.0 + NFIN / CDSCN2)); - end - - if (CDSCDN1 != 0.0) begin - CDSCD_i = CDSCD_i * (1.0 + CDSCDN1 / NFIN * lln(1.0 + NFIN / CDSCDN2)); - end - - if (CDSCDRN1 != 0.0) begin - CDSCDR_i = CDSCDR_i * (1.0 + CDSCDRN1 / NFIN * lln(1.0 + NFIN / CDSCDRN2)); - end - - if (VSATN1 != 0.0) begin - VSAT_i = VSAT_i * (1.0 + VSATN1 / NFIN * lln(1.0 + NFIN / VSATN2)); - end - - if (VSAT1N1 != 0.0) begin - VSAT1_i = VSAT1_i * (1.0 + VSAT1N1 / NFIN * lln(1.0 + NFIN / VSAT1N2)); - end - - if (VSAT1RN1 != 0.0) begin - VSAT1R_i = VSAT1R_i * (1.0 + VSAT1RN1 / NFIN * lln(1.0 + NFIN / VSAT1RN2)); - end - - if (U0N1 != 0.0) begin - U0_i = U0_i * (1.0 + U0N1 / NFIN * lln(1.0 + NFIN / U0N2)); - end - - if ($param_given(NFINNOM)) begin - PHIG_i = PHIG_i * (1.0 + (NFIN - NFINNOM) * PHIGLT * Leff) ; - ETA0_i = ETA0_i * (1.0 + (NFIN - NFINNOM) * ETA0LT * Leff); - U0_i = U0_i * (1.0 + (NFIN - NFINNOM) * U0LT * Leff); - end - - if (U0N1R != 0.0) begin - U0R_i = U0R_i * (1.0 + U0N1R / NFIN * lln(1.0 + NFIN / U0N2R)); - end - - // Length Scaling - PHIG_i = PHIG_i + PHIGL * Leff; - if (LPA > 0.0) begin - U0_i = U0_i * (1.0 - UP_i * pow(Leff, -LPA)); - end else begin - U0_i = U0_i * (1.0 - UP_i); - end - UA_i = UA_i + AUA * lexp(-Leff / BUA); - UD_i = UD_i + AUD * lexp(-Leff / BUD); - EU_i = EU_i + AEU * lexp(-Leff / BEU); - - if (ASYMMOD != 0) begin - if (LPAR > 0.0) begin - U0R_i = U0R_i * (1.0 - UPR_i * pow(Leff, -LPAR)); - end else begin - U0R_i = U0R_i * (1.0 - UPR_i); - end - UAR_i = UAR_i + AUAR * lexp(-Leff / BUAR); - UDR_i = UDR_i + AUDR * lexp(-Leff / BUDR); - EUR_i = EUR_i + AEUR * lexp(-Leff / BEUR); - end - - if (RDSMOD == 1) begin - RSW_i = RSW_i + ARSW * lexp(-Leff / BRSW); - RDW_i = RDW_i + ARDW * lexp(-Leff / BRDW); - end else begin - RDSW_i = RDSW_i + ARDSW * lexp(-Leff / BRDSW); - end - - PCLM_i = PCLM_i + APCLM * lexp(-Leff / BPCLM); - if (ASYMMOD != 0) begin - PCLMR_i = PCLMR_i + APCLMR * pow(Leff, -BPCLMR); - end - - MEXP_i = MEXP_i + AMEXP * pow(Leff, -BMEXP); - if (ASYMMOD != 0) begin - MEXPR_i = MEXPR_i + AMEXPR * pow(Leff, -BMEXPR); - end - - PTWG_i = PTWG_i + APTWG * lexp(-Leff / BPTWG); - if (ASYMMOD != 0) begin - PTWGR_i = PTWGR_i + APTWG * lexp(-Leff / BPTWG); - end - - VSAT_i = VSAT_i + AVSAT * lexp(-Leff / BVSAT); - VSAT1_i = VSAT1_i + AVSAT1 * lexp(-Leff / BVSAT1); - if (ASYMMOD != 0) begin - VSAT1R_i = VSAT1R_i + AVSAT1 * lexp(-Leff / BVSAT1); - end - - PSAT_i = PSAT_i + APSAT * lexp(-Leff / BPSAT); - PSATCV_i = PSATCV_i + APSATCV * lexp(-Leff / BPSATCV); - VSATCV_i = VSATCV_i + AVSATCV * lexp(-LeffCV / BVSATCV); - - // Scaling for DITS Parameters - DVTP0_i = DVTP0 + ADVTP0 * lexp(-Leff / BDVTP0); - DVTP1_i = DVTP1 + ADVTP1 * lexp(-Leff / BDVTP1); - - // Geometrical Scaling for Toxeff / Charge Centroid Tcen - if (QMTCENCV_i > 0.0 || QMTCENCVA_i > 0.0) begin - MTcen = 1.0 + AQMTCEN * lexp(- (2.0 * Ach / Weff_UFCM) / BQMTCEN); - Tcen0 = (2.0 * Ach / Weff_UFCM ) * MTcen; - end - - // ************************************** - // * Parameter Checking * - // ************************************** - - if (LeffCV <= 1.0e-9) begin - $strobe("Warning: LeffCV = %e <= 1.0e-9.", LeffCV); - end - - if (BULKMOD != 0) begin - if (LeffCV_acc <= 1.0e-9) begin - $strobe("Warning: LeffCV_acc = %e <= 1.0e-9.", LeffCV_acc); - end - end - - if (Weff0 <= 1.0e-9) begin - $strobe("Warning: Weff0 = %e <= 1.0e-9.", Weff0); - end - - if (WeffCV0 <= 1.0e-9) begin - $strobe("Warning: WeffCV0 = %e <= 1.0e-9.", WeffCV0); - end - - if (NBODY_i <= 0.0) begin - $strobe("Fatal: NBODY_i = %e is not positive.", NBODY_i); - $finish(0); - end else if (NBODY_i <= 1.0e18) begin - $strobe("Warning: NBODY_i = %e m^-3 may be too small.", NBODY_i); - end - - if (NGATE_i < 0.0) begin - $strobe("Fatal: NGATE_i = %e is negative.", NGATE_i); - $finish(0); - end else if (NGATE_i != 0.0 && NGATE_i <= 1.0e24) begin - $strobe("Warning: NGATE_i = %e may be too small.", NGATE_i); - end else if (NGATE_i > 1.0e31) begin - $strobe("Fatal: NGATE_i = %e is too high.", NGATE_i); - $finish(0); - end - - if (DVT0_i < 0.0) begin - $strobe("Warning: DVT0_i = %e is negative.", DVT0_i); - end - - if (PHIG_i <= 0.0) begin - $strobe("Fatal: PHIG_i = %e is not positive.", PHIG_i); - $finish(0); - end - - if (VSAT_i <= 0.0) begin - $strobe("Fatal: VSAT_i = %e is not positive.", VSAT_i); - $finish(0); - end - - if (VSAT1_i <= 0.0) begin - $strobe("Fatal: VSAT1_i = %e is not positive.", VSAT1_i); - $finish(0); - end - - if (ASYMMOD != 0 && VSAT1R_i <= 0.0) begin - $strobe("Fatal: VSAT1R_i = %e is not positive.", VSAT1R_i); - $finish(0); - end - - if (DVT1_i <= 0.0) begin - $strobe("Fatal: DVT1_i = %e is not positive.", DVT1_i); - $finish(0); - end - - if (DVT1SS_i <= 0.0) begin - $strobe("Fatal: DVT1SS_i = %e is not positive.", DVT1SS_i); - $finish(0); - end - - if (CDSC_i < 0.0) begin - $strobe("Warning: CDSC_i = %e is negative.", CDSC_i); - end - - if (CDSCD_i < 0.0) begin - $strobe("Warning: CDSCD_i = %e is negative.", CDSCD_i); - end - - if (ASYMMOD != 0 && CDSCDR_i < 0.0) begin - $strobe("Warning: CDSCDR_i = %e is negative.", CDSCDR_i); - end - - if (DSUB_i <= 0.0) begin - $strobe("Fatal: DSUB_i = %e is not positive.", DSUB_i); - $finish(0); - end - - if (ETA0_i < 0.0) begin - $strobe("Warning: ETA0_i = %e is negative, setting it to 0", ETA0_i); - ETA0_i = 0.0; - end - - if (ETA0R_i < 0.0) begin - $strobe("Warning: ETA0R_i = %e is negative, setting it to 0", ETA0R_i); - ETA0R_i = 0.0; - end - - if (LPE0_i < -Leff) begin - $strobe("Warning: LPE0_i = %e is less than -Leff. Clipping LPE0_i to 0", LPE0_i); - LPE0_i = 0.0; - end - - if (K0SI_i <= 0.0) begin - $strobe("Warning: K0SI_i = %e is not positive, setting it to 0.", K0SI_i); - K0SI_i = 0.0; - end - - if (K2SI_i <= 0.0) begin - $strobe("Warning: K2SI_i = %e is not positive, setting it to 0.", K2SI_i); - K2SI_i = 0.0; - end - - if (PHIBE_i < 0.2 && BULKMOD != 0) begin - $strobe("Warning: PHIBE_i = %e is less than 0.2, setting it to 0.2.", PHIBE_i); - PHIBE_i = 0.2; - end - - if (PHIBE_i > 1.2 && BULKMOD != 0) begin - $strobe("Warning: PHIBE_i = %e is larger than 1.2, setting it to 1.2.", PHIBE_i); - PHIBE_i = 1.2; - end - - if (PSAT_i < 2.0) begin - $strobe("Warning: PSAT_i = %e is less than 2.0, setting it to 2.0.", PSAT_i); - PSAT_i = 2.0; - end - - if (PSATCV_i < 2.0) begin - $strobe("Warning: PSATCV_i = %e is less than 2.0, setting it to 2.0.", PSATCV_i); - PSATCV_i = 2.0; - end - - if (U0_i < 0.0) begin - $strobe("Warning: U0_i = %e is negative, setting it to the default value.", U0_i); - U0_i = 0.03; - end - - if (UA_i < 0.0) begin - $strobe("Warning: UA_i = %e is negative, setting it to 0.", UA_i); - UA_i = 0.0; - end - - if (EU_i < 0.0) begin - $strobe("Warning: EU_i = %e is negative, setting it to 0.", EU_i); - EU_i = 0.0; - end - - if (UD_i < 0.0) begin - $strobe("Warning: UD_i = %e is negative, setting it to 0.", UD_i); - UD_i = 0.0; - end - - if (UCS_i < 0.0) begin - $strobe("Warning: UCS_i = %e is negative, setting it to 0.", UCS_i); - UCS_i = 0.0; - end - - if (ETAMOB_i < 0.0) begin - $strobe("Warning: ETAMOB_i = %e is negative, setting it to 0", ETAMOB_i); - ETAMOB_i = 0.0; - end - - RDSWMIN_i = RDSWMIN; - if (RDSWMIN_i < 0.0) begin - $strobe("Warning: RDSWMIN = %e is negative. Set to zero", RDSWMIN_i); - RDSWMIN_i = 0.0; - end - - if (RDSW_i < 0.0) begin - $strobe("Warning: RDSW_i = %e is negative. Set to zero", RDSW_i); - RDSW_i = 0.0; - end - - RSWMIN_i = RSWMIN; - if (RSWMIN_i < 0.0) begin - $strobe("Warning: RSWMIN = %e is negative. Set to zero", RSWMIN_i); - RSWMIN_i = 0.0; - end - - if (RSW_i < 0.0) begin - $strobe("Warning: RSW_i = %e is negative. Set to zero", RSW_i); - RSW_i = 0.0; - end - - RDWMIN_i = RDWMIN; - if (RDWMIN_i < 0.0) begin - $strobe("Warning: RDWMIN = %e is negative. Set to zero", RDWMIN_i); - RDWMIN_i = 0.0; - end - - if (RDW_i < 0) begin - $strobe("Warning: RDW_i = %e is negative. Set to zero", RDW_i); - RDW_i = 0.0; - end - - if (PRWGD_i < 0.0) begin - $strobe("Warning: PRWGD_i = %e is negative. Set to zero", PRWGD_i); - PRWGD_i = 0.0; - end - - if (PRWGS_i < 0.0) begin - $strobe("Warning: PRWGS_i = %e is negative. Set to zero", PRWGS_i); - PRWGS_i = 0.0; - end - - if (PCLM_i < 0) begin - $strobe("Warning: PCLM_i = %e is negative.", PCLM_i); - end - - if (PDIBL1_i < 0.0) begin - $strobe("Warning: PDIBL1_i = %e is negative.", PDIBL1_i); - end - - if (ASYMMOD != 0) begin - if (PDIBL1R_i < 0.0) begin - $strobe("Warning: PDIBL1R_i = %e is negative.", PDIBL1R_i); - end - if (PDIBL2R_i < 0.0) begin - $strobe("Warning: PDIBL2R_i = %e is negative.", PDIBL2R_i); - end - if (U0R_i < 0) begin - $strobe("Warning: U0R_i = %e is negative, setting it to 0.", U0R_i); - U0R_i = 0.0; - end - if (UAR_i < 0.0) begin - $strobe("Warning: UAR_i = %e is negative, setting it to 0.", UAR_i); - UAR_i = 0.0; - end - if (EUR_i < 0.0) begin - $strobe("Warning: EUR_i = %e is negative, setting it to 0.", EUR_i); - EUR_i = 0.0; - end - if (UDR_i < 0.0) begin - $strobe("Warning: UDR_i = %e is negative, setting it to 0.", UDR_i); - UDR_i = 0.0; - end - end - - if (PDIBL2_i < 0.0) begin - $strobe("Warning: PDIBL2_i = %e is negative.", PDIBL2_i); - end - - if (DROUT_i <= 0.0) begin - $strobe("Fatal: DROUT_i = %e is non-positive.", DROUT_i); - $finish(0); - end - - if (MEXP_i < 2.0) begin - $strobe("Warning: MEXP_i = %e < 2. Setting MEXP_i = 2.", MEXP_i); - MEXP_i = 2.0; - end - - if (ASYMMOD != 0) begin - if (MEXPR_i < 2.0) begin - $strobe("Warning: MEXPR_i = %e < 2. Setting MEXPR_i = 2.", MEXPR_i); - MEXPR_i = 2.0; - end - end - - if (PTWG_i < 0) begin - $strobe("Warning: PTWG_i = %e is negative, setting it to 0.", PTWG_i ); - PTWG_i = 0.0; - end - - if (QMTCENCV_i > 0.0) begin - if (QM0 <= 0.0) begin - $strobe("Fatal: QM0 = %e is non-positive.", QM0); - $finish(0); - end - end - - if (BULKMOD != 0 && QMTCENCVA_i > 0.0) begin - if (QM0ACC <= 0.0) begin - $strobe("Fatal: QM0ACC = %e is non-positive.", QM0ACC); - $finish(0); - end - end - - if (CGIDL_i < 0.0) begin - $strobe("Warning: CGIDL_i = %e < 0. Setting CGIDL_i = 0.", CGIDL_i); - CGIDL_i = 0.0; - end - - if (CGISL_i < 0.0) begin - $strobe("Warning: CGISL_i = %e < 0. Setting CGISL_i = 0.", CGISL_i); - CGISL_i = 0.0; - end - - if (IGBMOD != 0) begin - if (NIGBINV_i <= 0.0) begin - $strobe("Fatal: NIGBINV_i = %e is non-positive.", NIGBINV_i); - $finish(0); - end - if (NIGBACC_i <= 0.0) begin - $strobe("Fatal: NIGBACC_i = %e is non-positive.", NIGBACC_i); - $finish(0); - end - end - - if (IGCMOD != 0) begin - if (POXEDGE_i <= 0.0) begin - $strobe("Fatal: POXEDGE_i = %e is non-positive.", POXEDGE_i); - $finish(0); - end - if (PIGCD_i <= 0.0) begin - $strobe("Fatal: PIGCD_i = %e is non-positive.", PIGCD_i); - $finish(0); - end - end - - if (IGCMOD != 0 || IGBMOD != 0) begin - if (TOXREF <= 0) begin - $strobe("Fatal: TOXREF = %e is non-positive.", TOXREF); - $finish(0); - end - end - - if (LINTIGEN >= (Leff / 2.0)) begin - $strobe("Warning: LINTIGEN = %e is too large - Leff for r/g current is negative. Re-setting LINTIGEN = 0.", LINTIGEN); - LINTIGEN_i = 0.0; - end else begin - LINTIGEN_i = LINTIGEN; - end - - if (NTGEN_i <= 0.0) begin - $strobe("Fatal: NTGEN_i = %e is non-positive.", NTGEN_i); - $finish(0); - end - - `ifdef __NQSMOD1__ - if (NQSMOD == 1 && XRCRG1_i != 0.0 && XRCRG1_i < 1.0e-3) begin - $strobe("Warning: XRCRG1_i = %e. Gate resistance may be too large. Disabling NQS Gate Resistance.", XRCRG1_i); - XRCRG1_i = 0.0; - end - `endif - - if (IIMOD == 2) begin - if (BETAII0_i < 0.0) begin - $strobe("Warning: BETAII0_i = %e is negative.",BETAII0_i); - end - if (BETAII1_i < 0.0) begin - $strobe("Warning: BETAII1_i = %e is negative.", BETAII1_i); - end - if (BETAII2_i < 0.0) begin - $strobe("Warning: BETAII2_i = %e is negative.", BETAII2_i); - end - if (ESATII_i < 0.0) begin - $strobe("Warning: ESATII_i = %e is negative.", ESATII_i); - end - if (LII_i < 0.0) begin - $strobe("Warning: LII_i = %e is negative.", LII_i); - end - if (SII1_i < 0.0) begin - $strobe("Warning: SII1_i = %e is negative.", SII1); - end - if (SII2_i < 0.0) begin - $strobe("Warning: SII2_i = %e is negative.", SII2_i); - end - if (SIID_i < 0.0) begin - $strobe("Warning: SIID_i = %e is negative.", SIID_i); - end - end - - if (EF <= 0.0) begin - $strobe("Fatal: EF = %e is non-positive.", EF); - $finish(0); - end else if (EF > 2.0) begin - $strobe("Fatal: EF = %e > 2.0.", EF); - $finish(0); - end - - if (LINTNOI >= (Leff / 2.0)) begin - $strobe("Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0.", LINTNOI); - LINTNOI_i = 0.0; - end else begin - LINTNOI_i = LINTNOI; - end - - if (NTNOI < 0) begin - $strobe("Warning: NTNOI = %e is negative. Set to zero.", NTNOI); - NTNOI_i = 0.0; - end else begin - NTNOI_i = NTNOI; - end - - // Self-Heating - `ifdef __SHMOD__ - if (SHMOD != 0 && RTH0 > 0.0) begin - T1y = WTH0; - if (BSHEXP != 0.0) begin - T1y = WTH0 * pow(NF, BSHEXP); - end - T2y = FPITCH; - if (ASHEXP != 0.0) begin - T2y = FPITCH * pow(NFINtotal, ASHEXP); - end - gth = (T1y + T2y)/ RTH0; - cth = CTH0 * (T1y + T2y); - end else begin - gth = 1.0; - cth = 0.0; - end - `else - if (SHMOD != 0) begin - $strobe("Although the model selector SHMOD is set to 1, the self heating model is not activated in the Verilog-A code. Please uncomment \"`define __SHMOD__\" in bsimcmg.va to activate it."); - end - `endif - - // Gate Electrode Resistance - `ifdef __RGATEMOD__ - if (RGATEMOD != 0) begin - Rgeltd = (RGEXT / NGCON + (RGFIN * NFIN) / (NGCON == 2 ? 12.0 : 3.0)) / NF; - ggeltd = 1.0 / max(1.0e-3, Rgeltd); - end - `else - if (RGATEMOD != 0) - $strobe("Although the model selector RGATEMOD is set to 1, the gate electrode resistance model is not activated in the Verilog-A code. Please uncomment \"`define __RGATEMOD__\" in bsimcmg.va to activate it."); - `endif - - // Geometry-Dependent Source/Drain Resistance - if (RGEOMOD == 0) begin - RSourceGeo = RSHS * NRS; - RDrainGeo = RSHD * NRD; - end else begin - // Area and perimeter calculation - if (HEPI > 0.0) begin - Arsd = FPITCH * HFIN + (TFIN + (FPITCH - TFIN) * CRATIO) * HEPI; - end else begin - Arsd = FPITCH * max(1.0e-9, HFIN + HEPI); - end - Prsd = FPITCH + DELTAPRSD; - - // Resistivity Calculation - if ($param_given(RHORSD)) begin - rhorsd = RHORSD; - end else begin - mu_max = (TYPE == `ntype) ? 1417.0 : 470.5; - if (TYPE == `ntype) begin - mu_rsd = (52.2 + (mu_max - 52.2) / (1.0 + pow(NSD / 9.68e22, 0.680)) - 43.4 / (1.0 + pow(3.43e26 / NSD, 2.0))) * 1.0e-4; - end else begin - mu_rsd = (44.9 + (mu_max - 44.9) / (1.0 + pow(NSD / 2.23e22, 0.719)) - 29.0 / (1.0 + pow(6.10e26 / NSD, 2.0))) * 1.0e-4; - end - rhorsd = 1.0 / (`q * NSD * mu_rsd); - end - - // Component: Spreading Resistance (extension -> hdd) - thetarsp = 55.0 * `M_PI / 180.0; - afin = min(Arsd, max(1.0e-18, TFIN * (HFIN + min(0.0, HEPI)))); - T1y = `COT(thetarsp); - Rsp = rhorsd * T1y / (sqrt(`M_PI) * NFIN) * (1.0 / sqrt(afin) - 2.0 / sqrt(Arsd) + sqrt(afin / (Arsd*Arsd))); - - // Component: Contact Resistance - arsd_total = Arsd * NFIN + ARSDEND; - prsd_total = Prsd * NFIN + PRSDEND; - lt = sqrt(RHOC * arsd_total / (rhorsd * prsd_total)); - alpha = LRSD / lt; - T0y = lexp(alpha + alpha); - - if (SDTERM == 1.0) begin - eta = rhorsd * lt / RHOC; - T1y = T0y * (1.0 + eta); - T2y = T1y + 1.0 - eta; - T3y = T1y - 1.0 + eta; - end else begin - T2y = T0y + 1.0; - T3y = T0y - 1.0; - end - RrsdTML = rhorsd * lt * T2y / (arsd_total * T3y); - - if (HEPI < -1.0e-10) begin - Rrsdside = RHOC / (-HEPI * TFIN * NFIN); - Rrsd = (RrsdTML + Rsp) * Rrsdside / ((RrsdTML + Rsp) + Rrsdside); - end else begin - Rrsd = RrsdTML + Rsp; - end - - Rdsgeo = Rrsd / NF * max(0.0, RGEOA + RGEOB * TFIN + RGEOC * FPITCH + RGEOD * LRSD + RGEOE * HEPI); - RSourceGeo = Rdsgeo; - RDrainGeo = Rdsgeo; - end - - // Clamping of Source/Drain Resistances - if (RSourceGeo <= 1.0e-3) begin - RSourceGeo = 1.0e-3; - end - - if (RDrainGeo <= 1.0e-3) begin - RDrainGeo = 1.0e-3; - end - - if (RDSMOD == 1) begin - if (RSWMIN_i <= 0.0) begin - RSWMIN_i = 0.0; - end - if (RDWMIN_i <= 0.0) begin - RDWMIN_i = 0.0; - end - if (RSW_i <= 0.0) begin - RSW_i = 0.0; - end - if (RDW_i <= 0.0) begin - RDW_i = 0.0; - end - end else begin - if (RDSWMIN_i <= 0.0) begin - RDSWMIN_i = 0.0; - end - if (RDSW_i <= 0.0) begin - RDSW_i = 0.0; - end - end // End of Clamping of Source/Drain Resistances - - if (CGEOMOD != 1) begin - if ($param_given(CGSO)) begin - CGSO_i = CGSO; - end else begin - if ($param_given(DLC) && DLC > 0.0) begin - CGSO_i = max(0.0, DLC * cox - CGSL_i); - end else begin - CGSO_i = 0.3 * TFIN * cox; - end - end - if ($param_given(CGDO)) begin - CGDO_i = CGDO; - end else begin - if ($param_given(DLC) && DLC > 0.0) begin - CGDO_i = max(0.0, DLC * cox - CGDL_i); - end else begin - CGDO_i = 0.3 * TFIN * cox; - end - end - end - - // Parasitic Source/Drain to Gate Fringe Capacitance Model - if (CGEOMOD == 2) begin - if ($param_given(LSP)) - LSP_i = LSP; - else - LSP_i = 0.2*(L + XL); - Hg = TGATE + TMASK; - Trsd = 0.5 * (FPITCH - TFIN); - Wg = max(0.0, Trsd - TOXP); - Hrsd = max(0.0, HEPI + TSILI); - - // Top Component - if (TMASK > 0.0) begin - // Capacitance Model by Chung-Hsun Lin (IBM) - T0y = 3.467e-11 * lln(1.0e-7 * EPSRSP / (3.9 * LSP_i)); - T1y = 0.942 * Hrsd * epssp / LSP_i; - Cgg_top = (T0y + T1y) * (TFIN + (FPITCH - TFIN) * CRATIO); - end else begin - `Cfringe_2d(cfr_top_trigate, Hg, Hrsd, LSP_i, TFIN, LRSD, Lg, TOXP, 0.85, Cgg_top) - end - - // Side Component - if (TMASK > 0) begin - `Cfringe_2d(cfr_side_dblgate, Wg, Trsd, LSP_i, HFIN, LRSD, Lg, TOXP, 0.70, Cgg_side) - end else begin - `Cfringe_2d(cfr_side_trigate, Wg, Trsd, LSP_i, HFIN, LRSD, Lg, TOXP, 0.85, Cgg_side) - end - - // Corner Component - if (TMASK > 0.0) begin - Acorner = 0.0; - end else begin - if (HEPI > 0.0) begin - Acorner = (FPITCH - TFIN) * (HEPI * CRATIO + TSILI); - end else begin - Acorner = (FPITCH - TFIN) * Hrsd; - end - end - Ccorner = (NFIN * Acorner + ARSDEND + ASILIEND) * epssp / LSP_i; - Cfr_geo = (Ccorner + Cgg_top * NFIN + CGEOE * Cgg_side * NFIN * 2.0) * NF; - Cfr_geo = Cfr_geo * max(0.0, CGEOA + CGEOB * TFIN + CGEOC * FPITCH + CGEOD * LRSD); - end - - // Source/Gate/Drain-to-Substrate Parasitic Capacitances - T0y = CSDESW * lln(1.0 + HFIN / EOTBOX); - csbox = cbox * ASEO + T0y * max(0.0, PSEO - FPITCH * NFINtotal); - cdbox = cbox * ADEO + T0y * max(0.0, PDEO - FPITCH * NFINtotal); - cgbox = (CGBO * NF * NGCON + CGBN * NFINtotal) * Lg; - - // Mobility Degradation - EeffFactor = 1.0e-8 / (epsratio * (EOT)); - WeffWRFactor = 1.0 / (pow((Weff0) * 1.0e6, WR_i) * NFINtotal); - litl = sqrt(epsratio * EOT * 0.5 * TFIN); - - if (!$param_given(THETASCE)) begin - tmp = DVT1_i * Leff / scl + 1.0e-6; - if (tmp < 40.0) begin - Theta_SCE = 0.5 / (cosh(tmp) - 1.0); - end else begin - Theta_SCE = exp(-tmp); - end - end else begin - Theta_SCE = THETASCE; - end - - if (!$param_given(THETASW)) begin - tmp = DVT1SS_i * Leff / scl + 1.0e-6; - if (tmp < 40.0) begin - Theta_SW = 0.5 / (cosh(tmp) - 1.0); - end else begin - Theta_SW = exp(-tmp); - end - end else begin - Theta_SW = THETASW; - end - - if (!$param_given(THETADIBL)) begin - tmp = DSUB_i * Leff / scl + 1.0e-6; - if (tmp < 40.0) begin - Theta_DIBL = 0.5 / (cosh(tmp) - 1.0); - end else begin - Theta_DIBL = exp(-tmp); - end - end else begin - Theta_DIBL = THETADIBL; - end - - Theta_RSCE = sqrt(1.0 + LPE0_i / Leff) - 1.0; - - tmp = DSUB_i * Leff / scl + 1.0e-6; - if (tmp < 40.0) begin - T0y = 1.0 / max((1.0 + DVTP2 * (cosh(tmp) - 2.0)), 1.0e-6); - end else begin - T0y = exp(-tmp) / max((exp(-tmp) + DVTP2), 1.0e-6); - end - - Theta_DITS = T0y; - nbody = NBODY_i; - qbs = `q * nbody * Ach / Cins; - - // Gate Current - if (TYPE == `ntype) begin - Aechvb = 4.97232e-7; // NMOS - Bechvb = 7.45669e11; // NMOS - end else begin - Aechvb = 3.42537e-7; // PMOS - Bechvb = 1.16645e12; // PMOS - end - - T0y = TOXG * TOXG; - T1y = TOXG * POXEDGE_i; - T2y = T1y * T1y; - Toxratio = lexp(NTOX_i * lln(TOXREF / TOXG)) / T0y; - Toxratioedge = lexp(NTOX_i * lln(TOXREF / T1y)) / T2y; - igsd_mult0 = Weff0 * Aechvb * Toxratioedge; - - if (TNOM < -`P_CELSIUS0) begin - $strobe("Warning: (TNOM=%e) < -`P_CELSIUS0. Set to 27 C.", TNOM); - Tnom = `REFTEMP; - end else begin - Tnom = TNOM + `CONSTCtoK; - end - end // initial_step - - // ************************************************ - // * Temperature Dependence Calculations * - // ************************************************ - `ifdef __SHMOD__ - if (SHMOD != 0 && RTH0 > 0.0) begin - DevTemp = $temperature + Temp(rth_branch) + DTEMP; - end else begin - `endif - DevTemp = $temperature + DTEMP; - `ifdef __SHMOD__ - end - `endif - - begin : CMGTempDepCalc - TRatio = DevTemp / Tnom; - delTemp = DevTemp - Tnom; - Vtm = `KboQ * DevTemp; - Vtm0 = `KboQ * Tnom; - Eg = BG0SUB - TBGASUB * DevTemp * DevTemp / (DevTemp + TBGBSUB); - Eg0 = BG0SUB - TBGASUB * Tnom * Tnom / (Tnom + TBGBSUB); - T1 = (DevTemp / 300.15) * sqrt(DevTemp / 300.15); - ni = NI0SUB * T1 * lexp(BG0SUB / (2.0 * `KboQ * 300.15) - Eg / (2.0 * Vtm)); - Nc = NC0SUB * T1; - ThetaSS = hypsmooth(1.0 + TSS_i * delTemp - 1.0e-6, 1.0e-3); - - // Quantum Mechanical Vth Correction (Ref: Trivedi et al., EDL 2005) - kT = Vtm * `q; - T0y = `HBAR * `M_PI / (2*Ach/Weff_UFCM ); - E0 = T0y * T0y / (2.0 * mx); - E0prime = T0y * T0y / (2.0 * mxprime); - E1 = 4.0 * E0; - E1prime = 4.0 * E0prime; - T1 = gprime * mdprime / (gfactor * md); - gam0 = 1.0 + T1 * lexp((E0 - E0prime) / kT); - gam1 = gam0 + lexp((E0 - E1) / kT) + T1 * lexp((E0 - E1prime) / kT); - T2 = -Vtm * lln(gfactor * md / (`M_PI * `HBAR * `HBAR * Nc) * kT / (2.0 * Ach / Weff_UFCM) * gam1); - dvch_qm = QMFACTOR_i * (E0 / `q + T2); - - // Temperature Dependence - ETA0_t = Tempdep(ETA0_i, TETA0, delTemp, TEMPMOD); - ETA0R_t = Tempdep(ETA0R_i, TETA0R, delTemp, TEMPMOD); - T1 = U0_i * pow(TRatio, UTE_i); - U0_t = T1 + hypmax(UTL_i * delTemp, -0.9 * T1, 1.0e-4); - u0 = U0_t; - if (ASYMMOD == 1) begin - T1 = U0R_i * pow(TRatio, UTER_i); - U0R_t = T1 + hypmax(UTLR_i * delTemp, -0.9 * T1, 1.0e-4); - u0r = U0R_t; - end - - ETAMOB_t = Tempdep(ETAMOB_i, EMOBT_i, delTemp, TEMPMOD); - UA_t = UA_i + hypmax(UA1_i*delTemp, -UA_i, 1.0e-6); - if (ASYMMOD != 0) begin - UAR_t = UAR_i + hypmax(UA1R_i * delTemp, -UAR_i, 1.0e-6); - end - - if (BULKMOD != 0) begin - if (TEMPMOD == 0) begin - UC_t = Tempdep(UC_i, UC1_i, delTemp, 0); - if (ASYMMOD != 0) begin - UCR_t = Tempdep(UCR_i, UC1R_i, delTemp, 0); - end - end else begin - UC_t = UC_i + UC1_i * delTemp; - if (ASYMMOD != 0) begin - UCR_t = UCR_i + UC1R_i * delTemp; - end - end - end - - UD_t = UD_i * pow(TRatio, UD1_i); - if (ASYMMOD != 0) begin - UDR_t = UDR_i * pow(TRatio, UD1R_i); - end - - UCS_t = UCS_i * pow(TRatio, UCSTE_i); - - rdstemp = hypsmooth(1.0 + PRT_i * delTemp - 1.0e-6, 1.0e-3); - RSDR_t = Tempdep(RSDR, TRSDR, delTemp, TEMPMOD); - if (ASYMMOD != 0) begin - RSDRR_t = Tempdep(RSDRR, TRSDR, delTemp, TEMPMOD); - end - - RDDR_t = Tempdep(RDDR, TRDDR, delTemp, TEMPMOD); - if (ASYMMOD != 0) begin - RDDRR_t = Tempdep(RDDRR, TRDDR, delTemp, TEMPMOD); - end - - VSAT_t = Tempdep(VSAT_i, -AT_i, delTemp, TEMPMOD); - if (VSAT_t < 1000) begin - $strobe("Warning: VSAT(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSAT_t); - VSAT_t = 1000; - end - - if (ASYMMOD != 0) begin - VSATR_t = Tempdep(VSATR_i, -ATR_i, delTemp, TEMPMOD); - if (VSATR_t < 1000) begin - $strobe("Warning: VSATR(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSATR_t); - VSATR_t = 1000; - end - end - - VSAT1_t = Tempdep(VSAT1_i, -AT_i, delTemp, TEMPMOD); - if (VSAT1_t < 1000) begin - $strobe("Warning: VSAT1(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSAT1_t); - VSAT1_t = 1000; - end - - if (ASYMMOD != 0) begin - VSAT1R_t = Tempdep(VSAT1R_i, -AT_i, delTemp, TEMPMOD); - if (VSAT1R_t < 1000) begin - $strobe("Warning: VSAT1R(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSAT1R_t); - VSAT1R_t = 1000; - end - end - - VSATCV_t = Tempdep(VSATCV_i, -ATCV_i, delTemp, TEMPMOD); - if (VSATCV_t < 1000) begin - $strobe("Warning: VSATCV(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSATCV_t); - VSATCV_t = 1000; - end - - MEXP_t = hypsmooth(MEXP_i * (1.0 + TMEXP * delTemp) - 2.0, 1.0e-3) + 2.0; - if (ASYMMOD != 0) begin - MEXPR_t = hypsmooth(MEXPR_i * (1.0 + TMEXPR * delTemp) - 2.0, 1.0e-3) + 2.0; - end - - PTWG_t = Tempdep(PTWG_i, -PTWGT_i, delTemp, TEMPMOD); - if (ASYMMOD != 0) begin - PTWGR_t = Tempdep(PTWGR_i, -PTWGT_i, delTemp, TEMPMOD); - end - - dvth_temp = (KT1_i + KT1L / Leff) * (TRatio - 1.0); - BETA0_t = BETA0_i * pow(TRatio, IIT_i); - SII0_t = SII0_i * (hypsmooth(1.0 + TII_i * (TRatio - 1.0) - 0.01, 1.0e-3) + 0.01); - - K0_t = K0_i + K01_i * delTemp; - K0SI_t = K0SI_i + hypmax(K0SI1_i * delTemp, -K0SI_i, 1.0e-6); - K2SI_t = K2SI_i + hypmax(K2SI1_i * delTemp, -K2SI_i, 1.0e-6); - K1_t = K1_i + hypmax(K11_i * delTemp, -K1_i, 1.0e-6); - K2SAT_t = K2SAT_i + K2SAT1_i * delTemp; - A1_t = A1_i + A11_i * delTemp; - A2_t = A2_i + A21_i * delTemp; - K2_t = K2_i + hypmax(K21_i * delTemp, -K2_i, 1.0e-6); - K0SISAT_t = K0SISAT_i + K0SISAT1_i * delTemp; - K2SISAT_t = K2SISAT_i + K2SISAT1_i * delTemp; - AIGBINV_t = AIGBINV_i + hypmax(AIGBINV1_i * delTemp, -AIGBINV_i, 1.0e-6); - AIGBACC_t = AIGBACC_i + hypmax(AIGBACC1_i * delTemp, -AIGBACC_i, 1.0e-6); - AIGC_t = AIGC_i + hypmax(AIGC1_i * delTemp, -AIGC_i, 1.0e-6); - AIGS_t = AIGS_i + hypmax(AIGS1_i * delTemp, -AIGS_i, 1.0e-6); - AIGD_t = AIGD_i + hypmax(AIGD1_i * delTemp, -AIGD_i, 1.0e-6); - BGIDL_t = BGIDL_i * hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); - BGISL_t = BGISL_i * hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); - ALPHA0_t = ALPHA0_i + hypmax(ALPHA01 * delTemp, -ALPHA0_i, 1.0e-6); - ALPHA1_t = ALPHA1_i + hypmax(ALPHA11 * delTemp, -ALPHA1_i, 1.0e-6); - ALPHAII0_t = ALPHAII0_i + hypmax(ALPHAII01 * delTemp, -ALPHAII0_i, 1.0e-25); - ALPHAII1_t = ALPHAII1_i + hypmax(ALPHAII11 * delTemp, -ALPHAII1_i, 1.0e-20); - igtemp = lexp(IGT_i * lln(TRatio)); - igsd_mult = igsd_mult0 * igtemp; - - if (BULKMOD != 0) begin - CJS_t = Tempdep(CJS, TCJ, delTemp, TEMPMOD); - CJD_t = Tempdep(CJD, TCJ, delTemp, TEMPMOD); - CJSWS_t = Tempdep(CJSWS, TCJSW, delTemp, TEMPMOD); - CJSWD_t = Tempdep(CJSWD, TCJSW, delTemp, TEMPMOD); - CJSWGS_t = Tempdep(CJSWGS, TCJSWG, delTemp, TEMPMOD); - CJSWGD_t = Tempdep(CJSWGD, TCJSWG, delTemp, TEMPMOD); - - PBS_t = hypsmooth(PBS - TPB * delTemp - 0.01, 1.0e-3) + 0.01; - PBD_t = hypsmooth(PBD - TPB * delTemp - 0.01, 1.0e-3) + 0.01; - PBSWS_t = hypsmooth(PBSWS - TPBSW * delTemp - 0.01, 1.0e-3) + 0.01; - PBSWD_t = hypsmooth(PBSWD - TPBSW * delTemp - 0.01, 1.0e-3) + 0.01; - PBSWGS_t = hypsmooth(PBSWGS - TPBSWG * delTemp - 0.01, 1.0e-3) + 0.01; - PBSWGD_t = hypsmooth(PBSWGD - TPBSWG * delTemp - 0.01, 1.0e-3) + 0.01; - - T0 = Eg0 / Vtm0 - Eg / Vtm; - T1 = lln(TRatio); - T3 = lexp((T0 + XTIS * T1) / NJS); - JSS_t = JSS * T3; - JSWS_t = JSWS * T3; - JSWGS_t = JSWGS * T3; - - T3 = lexp((T0 + XTID * T1) / NJD); - JSD_t = JSD * T3; - JSWD_t = JSWD * T3; - JSWGD_t = JSWGD * T3; - - JTSS_t = JTSS * lexp(Eg0 * XTSS * (TRatio - 1.0) / Vtm); - JTSD_t = JTSD * lexp(Eg0 * XTSD * (TRatio - 1.0) / Vtm); - JTSSWS_t = JTSSWS * lexp(Eg0 * XTSSWS * (TRatio - 1.0) / Vtm); - JTSSWD_t = JTSSWD * lexp(Eg0 * XTSSWD * (TRatio - 1.0) / Vtm); - JTSSWGS_t = JTSSWGS * (sqrt(JTWEFF / Weff0) + 1.0) * lexp(Eg0 * XTSSWGS * (TRatio - 1.0) / Vtm); - JTSSWGD_t = JTSSWGD * (sqrt(JTWEFF / Weff0) + 1.0) * lexp(Eg0 * XTSSWGD * (TRatio - 1.0) / Vtm); - - // All NJT's Smoothed to 0.01 to Prevent Divide-by-zero / Negative Values - NJTS_t = hypsmooth(NJTS * (1.0 + TNJTS * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; - NJTSD_t = hypsmooth(NJTSD * (1.0 + TNJTSD * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; - NJTSSW_t = hypsmooth(NJTSSW * (1.0 + TNJTSSW * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; - NJTSSWD_t = hypsmooth(NJTSSWD * (1.0 + TNJTSSWD * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; - NJTSSWG_t = hypsmooth(NJTSSWG * (1.0 + TNJTSSWG * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; - NJTSSWGD_t = hypsmooth(NJTSSWGD * (1.0 + TNJTSSWGD * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; - end - - if (!$param_given(VFBSD)) begin - if (NGATE > 0.0) begin - vfbsd = devsign * (hypsmooth(0.5 * Eg - Vtm * lln(NGATE / ni), 1.0e-4) - (0.5 * Eg - devsign * (0.5 * Eg - hypsmooth(0.5 * Eg - Vtm * lln(NSD / ni), 1.0e-4)))); - end else begin - vfbsd = devsign * (PHIG_i - (EASUB + 0.5 * Eg - devsign * (0.5 * Eg - hypsmooth(0.5 * Eg - Vtm * lln(NSD / ni), 1.0e-4)))); - end - end else begin - vfbsd = VFBSD; - end - - if (!$param_given(VFBSDCV)) begin - vfbsdcv = vfbsd; - end else begin - vfbsdcv = VFBSDCV; - end - - `ifdef __SHMOD__ - if (SHMOD != 0 && RTH0 > 0.0) begin - T0 = Vtm * lln(nbody / ni); - phib = sqrt(T0 * T0 + 1.0e-6); - end else begin - phib = Vtm * lln(nbody / ni); - end - `else - phib = Vtm * lln(nbody/ni); - `endif - - `ifdef __SHMOD__ - if (SHMOD != 0 && RTH0 > 0.0) begin - T0 = Vtm * lln(nbody * NSD / (ni * ni)); - vbi = sqrt(T0 * T0 + 1.0e-6); - end else begin - vbi = Vtm * lln(nbody * NSD / (ni * ni)); - end - `else - vbi = Vtm * lln(nbody * NSD / (ni * ni)); - `endif - - // deltaPhi definition and Polysilicon Depletion - // deltaPhi: workfunction difference between the gate and the n+ source. - deltaPhi = devsign*(PHIG_i - (EASUB + (TYPE == `ntype ? 0 : Eg))); - - // Mobility Degradation - eta_mu = 0.5 * ETAMOB_t; - eta_mu_cv = 0.5; - if ( TYPE != `ntype ) begin - eta_mu = 1.0 / 3.0 * ETAMOB_t; - eta_mu_cv = 1.0 / 3.0; - end - - // Junction Current and Capacitance - if (BULKMOD != 0) begin - // Source-Side Junction Current - Isbs = ASEJ * JSS_t + PSEJ * JSWS_t + TFIN * NFINtotal * JSWGS_t; - if (Isbs > 0.0) begin - Nvtms = Vtm * NJS; - XExpBVS = lexp(-BVS / Nvtms) * XJBVS; - T2 = max(IJTHSFWD / Isbs, 10.0); - Tb = 1.0 + T2 - XExpBVS; - VjsmFwd = Nvtms * lln(0.5 * (Tb + sqrt(Tb * Tb + 4.0 * XExpBVS))); - T0 = lexp(VjsmFwd / Nvtms); - IVjsmFwd = Isbs * (T0 - XExpBVS / T0 + XExpBVS - 1.0); - SslpFwd = Isbs * (T0 + XExpBVS / T0) / Nvtms; - T2 = hypsmooth(IJTHSREV / Isbs - 10.0, 1.0e-3) + 10.0; - VjsmRev = -BVS - Nvtms * lln((T2 - 1.0) / XJBVS); - T1 = XJBVS * lexp(-(BVS + VjsmRev) / Nvtms); - IVjsmRev = Isbs * (1.0 + T1); - SslpRev = -Isbs * T1 / Nvtms; - end - - // Drain-Side Junction Current - Isbd = ADEJ * JSD_t + PDEJ * JSWD_t + TFIN * NFINtotal * JSWGD_t; - if (Isbd > 0.0) begin - Nvtmd = Vtm * NJD; - XExpBVD = lexp(-BVD / Nvtmd) * XJBVD; - T2 = max(IJTHDFWD / Isbd, 10.0); - Tb = 1.0 + T2 - XExpBVD; - VjdmFwd = Nvtmd * lln(0.5 * (Tb + sqrt(Tb * Tb + 4.0 * XExpBVD))); - T0 = lexp(VjdmFwd / Nvtmd); - IVjdmFwd = Isbd * (T0 - XExpBVD / T0 + XExpBVD - 1.0); - DslpFwd = Isbd * (T0 + XExpBVD / T0) / Nvtmd; - T2 = hypsmooth(IJTHDREV / Isbd - 10.0, 1.0e-3) + 10.0; - VjdmRev = -BVD - Nvtmd * lln((T2 - 1.0) / XJBVD); - T1 = XJBVD * lexp(-(BVD + VjdmRev) / Nvtmd); - IVjdmRev = Isbd * (1.0 + T1); - DslpRev = -Isbd * T1 / Nvtmd; - end - - // Junction Capacitance - Czbs = CJS_t * ASEJ; - Czbssw = CJSWS_t * PSEJ; - Czbsswg = CJSWGS_t * Weff0 * NFINtotal; - Czbd = CJD_t * ADEJ; - Czbdsw = CJSWD_t * PDEJ; - Czbdswg = CJSWGD_t * Weff0 * NFINtotal; - end - - // Generation-Recombination Current - T0 = Eg / Vtm * (TRatio - 1.0); - T1 = T0 / NTGEN_i; - igentemp = lexp(T1); - - end // End of temperature dependent calculations - - // ************************************************ - // * Bias dependent calculations follow * - // ************************************************ - - // Load Terminal Voltages - vgs_noswap = devsign * V(`IntrinsicGate, si); - vds_noswap = devsign * V(di, si); - vgd_noswap = devsign * V(`IntrinsicGate, di); - ves_jct = devsign * V(e, si); - ved_jct = devsign * V(e, di); - vge = devsign * V(`IntrinsicGate, e); - - // Source-Drain Interchange - sigvds = 1.0; - if (vds_noswap < 0.0) begin - sigvds = -1.0; - vgs = vgs_noswap - vds_noswap; - vds = -1.0 * vds_noswap; - ves = ved_jct; - end else begin - vgs = vgs_noswap; - vds = vds_noswap; - ves = ves_jct; - end - vgsfb = vgs - deltaPhi; - - // Initialize Certain Variables to Zero to Prevent Unnecessary Update - etaiv = 0.0; - Qes = 0.0; - Qesj = 0.0; - Qeg = 0.0; - Qed = 0.0; - Qedj = 0.0; - - // Vds Smoothing - vdsx = sqrt (vds * vds + 0.01) - 0.1; - - // Ves Smoothing - if (BULKMOD != 0) begin - vesx = ves - 0.5 * (vds - vdsx); - vesmax = 0.95 * PHIBE_i; - T2 = vesmax - vesx - 1.0e-3; - veseff = vesmax - 0.5 * (T2 + sqrt(T2 * T2 + 0.004 * vesmax)); - end - - // Asymmetry Model - T0 = tanh(0.6 * vds_noswap / Vtm); - wf = 0.5 + 0.5 * T0; - wr = 1.0 - wf; - if (ASYMMOD != 0) begin - CDSCD_a = CDSCDR_i * wr + CDSCD_i * wf; - ETA0_a = ETA0R_t * wr + ETA0_t * wf; - PDIBL1_a = PDIBL1R_i * wr + PDIBL1_i * wf; - PDIBL2_a = PDIBL2R_i * wr + PDIBL2_i * wf; - MEXP_a = MEXPR_t * wr + MEXP_t * wf; - PTWG_a = PTWGR_t * wr + PTWG_t * wf; - VSAT1_a = VSAT1R_t * wr + VSAT1_t * wf; - RSDR_a = RSDRR_t * wr + RSDR_t * wf; - RDDR_a = RDDRR_t * wr + RDDR_t * wf; - PCLM_a = PCLMR_i * wr + PCLM_i * wf; - VSAT_a = VSATR_t * wr + VSAT_t * wf; - KSATIV_a = KSATIVR_i * wr + KSATIV_i * wf; - DVTSHIFT_a = DVTSHIFTR_i * wr + DVTSHIFT_i * wf; - CIT_a = CITR_i * wr + CIT_i * wf; - u0_a = u0r * wr + u0 * wf; - UA_a = UAR_t*wr + UA_t * wf; - UD_a = UDR_t * wr + UD_t * wf; - UC_a = UCR_t * wr + UC_t * wf; - EU_a = EUR_i * wr + EU_i * wf; - end else begin - CDSCD_a = CDSCD_i; - ETA0_a = ETA0_t; - PDIBL1_a = PDIBL1_i; - PDIBL2_a = PDIBL2_i; - MEXP_a = MEXP_t; - PTWG_a = PTWG_t; - VSAT1_a = VSAT1_t; - RSDR_a = RSDR_t; - RDDR_a = RDDR_t; - PCLM_a = PCLM_i; - VSAT_a = VSAT_t; - KSATIV_a = KSATIV_i; - DVTSHIFT_a = DVTSHIFT_i; - CIT_a = CIT_i; - u0_a = u0; - UA_a = UA_t; - UD_a = UD_t; - UC_a = UC_t; - EU_a = EU_i; - end - - // Drain Saturation Voltage - inv_MEXP = 1.0 / MEXP_a; - - // SCE, DIBL, SS Degradation Effects (Ref: BSIM4 Model) - phist = 0.4 + phib + PHIN_i; - T1 = 2.0 * (Cins / Weff_UFCM) / (rc + 2.0); - cdsc = Theta_SW * (CDSC_i + CDSCD_a * vdsx); - - if (!$param_given(NVTM)) - nVtm = Vtm * ThetaSS * (1.0 + (CIT_a + cdsc) / T1); - else nVtm = NVTM; - - // temp deped UFCM - qdep = Qdep_ov_Cins / nVtm; - vth_fixed_factor_SI = ln(Cins * nVtm/(`q * Nc * 2.0 * Ach)); - vth_fixed_factor_Sub = ln((qdep * rc) * (qdep * rc) / ((exp(qdep * rc) - qdep * rc - 1.0))) + vth_fixed_factor_SI; - q0 = 10.0 * nVtm / rc + 2.0 * qbs; - - // New QM parameter calculation: fieldnormalizationfactor, auxQMfact, QMFACTORCVfinal - fieldnormalizationfactor = Vtm * Cins / (Weff_UFCM * epssub); - auxQMfact = pow(((3.0 / 4.0) * 3.0 * `HBAR * 2.0 * `M_PI * `q / (4.0 * sqrt(2.0 * mx))), 2.0 / 3.0); - QMFACTORCVfinal = QMFACTORCV * auxQMfact * pow(fieldnormalizationfactor, 2.0 / 3.0) * (1/(`q * Vtm)); - - dvth_vtroll = -DVT0_i * Theta_SCE * (vbi - phist); - dvth_dibl = -ETA0_a * Theta_DIBL * vdsx + (DVTP0_i * Theta_DITS * pow(vdsx, DVTP1_i)); - dvth_rsce = K1RSCE_i * Theta_RSCE * sqrt(phist); - dvth_all = dvth_vtroll + dvth_dibl + dvth_rsce + dvth_temp + DVTSHIFT_a; - vgsfb = vgsfb - dvth_all; - - // Vgs Clamping for Inversion Region Calculation in Accumulation - beta0 = u0_a * cox * Weff0 / Leff; - T0 = -(dvch_qm + nVtm * lln(2.0 * cox * Imin / (beta0 * nVtm * `q * Nc * TFIN))); - T1 = vgsfb + T0 + DELVTRAND; - vgsfbeff = hypsmooth(T1 , 1.0e-4) - T0; - - // Core Model Calculation at Source Side - vch = 0.0 + dvch_qm; - - if (BULKMOD != 0) begin - T1 = hypsmooth(2.0 * phib + vch - ves, 0.1); - T3 = (-K1_t / (2.0 * nVtm)) * (sqrt(T1) - sqrt(2.0 * phib)); - T0 = -qdep - T3 + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0/3.0); - T1 = -qdep - T3 + vth_fixed_factor_SI; - end else begin - T0 = -qdep + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0/3.0); - T1 = -qdep + vth_fixed_factor_SI; - end - T2 = (vgsfbeff - vch) / nVtm; - F0 = -T2 + T1; - T3 = 0.5 * (T2 - T0); - qm = exp(T3); - if (qm > 1.0e-7) begin - T7 = ln(1.0 + qm); - qm = 2.0 * (1.0 - sqrt(1.0 + T7 * T7)); - T8 = (qm * ALPHA_UFCM + qdep) * rc; - T4 = T8 / (exp(T8) - T8 - 1.0); - T5 = T8 * T4; - e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0 / 3.0); - e1 = -1.0 + 1.0 / qm + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0 / 3.0); - e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0/3.0); - qm = qm - (e0 / e1) * (1.0 + (e0 * e2) / (2.0 * e1 * e1)); - T8 = (qm * ALPHA_UFCM + qdep) * rc; - T4 = T8 / (exp(T8) - T8 - 1.0); - T5 = T8 * T4; - e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0 / 3.0); - e1 = -1.0 + 1.0 / qm + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0/3.0); - e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0/3.0); - qm = qm - (e0 / e1) * (1.0 + (e0 * e2) / (2.0 * e1 * e1)); - end else begin - qm = -qm * qm; - end - qis = -qm * nVtm; - - // Drain Saturation Voltage - Eeffs = EeffFactor * (qbs + eta_mu * qis); - qb0 = 1.0e-2 / cox; - T2 = pow(0.5 * (1.0 + abs((qis) / qb0)), UCS_t); - if (BULKMOD != 0) begin - T3 = (UA_a + UC_a * veseff) * pow(abs(Eeffs), EU_a) + UD_a / T2; - end else begin - T3 = UA_a * pow(abs(Eeffs), EU_a) + UD_a / T2; - end - Dmobs = 1.0 + T3; - Dmobs = Dmobs / U0MULT; - - if (RDSMOD == 1) begin - Rdss = 0.0; - end else if (RDSMOD == 0) begin - T4 = 1.0 + PRWGS_i * qis; - T1 = 1.0 / T4; - T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); - Rdss = (RDSWMIN_i + RDSW_i * T0) * WeffWRFactor * NFINtotal * rdstemp; - end else begin - T4 = 1.0 + PRWGS_i * qis; - T1 = 1.0 / T4; - T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); - Rdss = (RSourceGeo + RDrainGeo + RDSWMIN_i + RDSW_i * T0) * WeffWRFactor * NFINtotal * rdstemp; - end - - Esat = 2.0 * VSAT_a / u0_a * Dmobs; - EsatL = Esat * Leff; - T6 = KSATIV_a * (qis + 2 * Vtm); - - if (Rdss == 0.0) begin - Vdsat = EsatL * T6 / (EsatL + T6); - end else begin - WVCox = Weff0 * VSAT_a * cox; - T0 = WVCox * Rdss; - Ta = 2.0 * T0; - Tb = T6 + EsatL + 3.0 * T6 * T0; - Tc = T6 * (EsatL + 2.0 * T6 * T0); - Vdsat = (Tb - sqrt(Tb * Tb - 2.0 * Ta * Tc)) / Ta; - end - Vdsat = hypsmooth(Vdsat - 1.0e-3, 1.0e-5) + 1.0e-3; - T7 = pow(vds / Vdsat , MEXP_a); - T8 = pow(1.0 + T7, inv_MEXP); - Vdseff = vds / T8; - - if (Vdseff > vds) begin - Vdseff = vds; - end - - // Core Model Calculation at Drain Side - vch = Vdseff + dvch_qm; - - if (BULKMOD != 0) begin - T1 = hypsmooth(2.0 * phib + vch - ves, 0.1); - T3 = (-K1_t / (2.0 * nVtm)) * (sqrt(T1) - sqrt(2.0 * phib)); - T0 = -qdep - T3 + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0 / 3.0); - T1 = -qdep - T3 + vth_fixed_factor_SI; - end else begin - T0 = -qdep + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0 / 3.0); - T1 = -qdep + vth_fixed_factor_SI; - end - T2 = (vgsfbeff - vch) / nVtm; - F0 = -T2 + T1; - T3 = (T2 - T0) * 0.5; - qm = exp(T3); - if (qm > 1.0e-7) begin - T7 = ln(1.0 + qm); - qm = 2.0 * (1.0 - sqrt(1.0 + T7 * T7)); - T8 = (qm * ALPHA_UFCM + qdep) * rc; - T4 = T8 / (exp(T8) - T8 - 1.0); - T5 = T8 * T4; - e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0 / 3.0); - e1 = -1.0 + (1.0 / qm) + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0 / 3.0); - e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0 / 3.0); - qm = qm - (e0 / e1)*(1.0 + (e0 * e2) / (2.0 * e1 * e1)); - T8 = (qm * ALPHA_UFCM + qdep) * rc; - T4 = T8 / (exp(T8) - T8 - 1.0); - T5 = T8 * T4; - e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0/3.0); - e1 = -1.0 + (1.0 / qm) + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0 / 3.0); - e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0 / 3.0); - qm = qm - (e0 / e1) * (1.0 + (e0 * e2) / (2.0 * e1 * e1)); - end else begin - qm = -qm * qm; - end - qid = -qm * nVtm; - - if (BULKMOD != 0) begin - T9 = (K1_t / (2.0 * nVtm)) * sqrt(Vtm); - T0 = T9 / 2.0; - T2 = (vge - (deltaPhi - Eg - Vtm * ln(NBODY / Nc) + DELVFBACC)) / Vtm; - if ((T2 * Vtm) > phib + T9 * sqrt(phib * Vtm)) begin - T1 = sqrt(T2 - 1.0 + T0 * T0) - T0; - T10 = 1.0 + T1 * T1; - end else begin - T3 = T2 * 0.5 - 3.0 * (1.0 + T9 / sqrt(2.0)); - T10 = T3 + sqrt(T3 * T3 + 6.0 * T2); - if (T2 < 0.0) begin - T4 = (T2 - T10) / T9; - T10 = -ln(1.0 - T10 + T4 * T4 ); - end else begin - T11 = exp(-T10); - T4 = sqrt(T2 - 1.0 + T11 + T0 * T0) - T0; - T10 = 1.0 - T11 + T4 * T4; - end - end - T6 = exp(-T10) - 1.0; - T7 = sqrt(T6 + T10); - if (T10 > 1.0e-15) begin - e0 = -(T2 - T10) + T9 * T7; - e1 = 1.0 - T9 * 0.5 * T6 / T7; - T8 = T10 - (e0 / e1); - T11 = exp(-T8) - 1.0; - T12 = sqrt(T11 + T8); - qba = -T9 * T12 * Vtm; - end else begin - if (T10 < -1.0e-15) begin - e0 = -(T2 - T10) - T9 * T7; - e1 = 1.0 + T9 * 0.5 * T6 / T7; - T8 = T10 - e0 / e1; - T12 = T9 * sqrt(exp(-T8) + T8 - 1.0); - end else begin - T12 = 0.0; - T8 = 0.0; - end - qba = T12 * Vtm; - end - qi_acc_for_QM = T9 * exp(-T8 / 2.0) * Vtm; - - psipclamp = 0.5 * (T8 + 1.0 + sqrt((T8 - 1.0) * (T8 - 1.0) + 0.25 * 2.0 * 2.0)); - sqrtpsip = sqrt(psipclamp); - nq = 1.0 + T9 / sqrtpsip; - end - - // Drain Side and Average Potential / Charge - qia = 0.5 * (qis + qid); - dqi = qis - qid; - - T0 = pow(Vdseff, 2.0) / 6.25e-4; // pow(Vdseff,2.0) / pow(25e-3, 2.0) - if (CHARGEWF != 0.0) - qia2 = 0.5 * (qis + qid) + CHARGEWF * (1.0 - lexp(-T0)) * 0.5 * dqi; - else - qia2 = 0.5 * (qis + qid); - - `ifdef __DEBUG__ - if (qis < 0.0) $strobe("Warning: negative source-side inversion carrier density. Vgs=%f Vds=%f Vbs=%f qis=%e", V(g, s), V(d, s), V(e, s), qis); - if (qid < 0.0) $strobe("Warning: negative drain-side inversion carrier density. Vgs=%f Vds=%f Vbs=%f qid=%e", V(g, s), V(d, s), V(e, s), qid); - `endif - - // Toxeff model for quantum mechanical effects - // Normal operation (Vgs > Vfb) - if (QMTCENCV_i > 0.0) begin - T4 = qia / QM0; - T5 = 1.0 + pow(T4, PQM); - Tcen = Tcen0 / T5; - coxeff = 1.0 / (1.0 / (cox * EOT / TOXP) + Tcen * QMTCENCV_i / epssub); - end else begin - coxeff = cox; - end - - // Quantum Mechanical Effect Correction for Accumulation Side Cap (Vgs < Vfb) - if (BULKMOD != 0 && QMTCENCVA_i != 0.0) begin - T6 = 1.0 + pow(qi_acc_for_QM / QM0ACC, PQMACC); - Tcen = Tcen0 / T6; - cox_acc = 1.0 / (1.0 / cox_acc + Tcen * QMTCENCVA_i / epssub); - end - - // Multiplication Factor for I-V - beta = u0_a * cox * Weff0 / Leff; - - // Mobility Degradation - Eeffm = EeffFactor * (qba + eta_mu * qia2); - T2 = pow(0.5 * (1.0 + abs((qia2) / qb0)), UCS_t); - if (BULKMOD != 0) begin - T3 = (UA_a + UC_a * veseff) * pow(abs(Eeffm), EU_a) + UD_a / T2; - end else begin - T3 = UA_a * pow(abs(Eeffm), EU_a) + UD_a / T2; - end - Dmob = 1.0 + T3; - Dmob = Dmob / U0MULT; - ueff = u0_a / Dmob; - - // Mobility Degradation for C-V - Eeffm_cv = EeffFactor * (qba + eta_mu_cv * qia2); - T3 = UA_a * pow(abs(Eeffm_cv), EU_a) + UD_a / T2; - Dmob_cv = 1.0 + T3; - Dmob_cv = Dmob_cv / U0MULT; - - // Calculate current and capacitance enhancement factors due to CLM and DIBL - tmp = DROUT_i * Leff / scl + 1.0e-6; - - if (tmp < 40.0) begin - DIBLfactor = 0.5 * PDIBL1_a / (cosh(tmp) - 1.0) + PDIBL2_a; - end else begin - DIBLfactor = PDIBL1_a * exp(-tmp) + PDIBL2_a; - end - - if (PVAG_i > 0.0) begin - PVAGfactor = 1.0 + PVAG_i * qia / EsatL; - end else begin - PVAGfactor = 1.0 / (1.0 - PVAG_i * qia / EsatL); - end - - if (Vdseff > vds) begin - Vdseff = vds; - end - diffVds = vds - Vdseff; - Vgst2Vtm = qia + 2.0 * Vtm; - if (DIBLfactor > 0) begin - T1 = Vgst2Vtm; - T3 = T1 / (Vdsat + T1); - VaDIBL = T1 / DIBLfactor * T3 * PVAGfactor; - Moc = 1.0 + diffVds / VaDIBL; - end else begin - Moc = 1.0; - end - - if (PCLM_a > 0.0) begin - if (PCLMG_i < 0.0) begin - T1 = 1.0 / (1.0 / PCLM_a - PCLMG_i * qia); - end else begin - T1 = PCLM_a + PCLMG_i * qia; - end - Mclm = 1.0 + T1 * lln(1.0 + (vds - Vdseff) / T1 / (Vdsat + EsatL)); - end else begin - Mclm = 1.0; - end - - Moc = Moc * Mclm; - - // Current Degradation Factor Due to Velocity Saturation - Esat1 = 2.0 * VSAT1_a / ueff; - Esat1L = Esat1 * Leff; - T0 = lexp(PSAT_i * lln(dqi / Esat1L)); - Ta = (1.0 + lexp(1.0 / PSAT_i * lln(DELTAVSAT_i))); - Dvsat = (1.0 + lexp(1.0 / PSAT_i * lln(DELTAVSAT_i + T0))) / Ta; - Dvsat = Dvsat + 0.5 * PTWG_a * qia * dqi * dqi; - - // Non-Saturation Effect - T0 = A1_t + A2_t / (qia + 2.0 * nVtm); - T1 = T0 * dqi * dqi; - T2 = T1 + 1.0 - 0.001; - T3 = -1.0 + 0.5 * (T2 + sqrt(T2 * T2 + 0.004)); // max(T1, -1.0) - Nsat = 0.5 * (1.0 + sqrt(1.0 + T3)); - Dvsat = Dvsat * Nsat; - - // Lateral Non-uniform doping effect (IV-CV Vth shift) factor - if (K0_t != 0) begin - T1 = K0_t / (max(0, K0SI_t + K0SISAT_t * dqi * dqi) * qia + 2.0 * nVtm); - Mnud = lexp(-T1); - end else begin - Mnud = 1.0; - end - - // Body-Effect Factor for BULKMOD = 2 - if (BULKMOD == 2) begin - T0 = hypsmooth((K2_t + K2SAT_t * vdsx), 1.0e-6); - T1 = T0 / (max(0, K2SI_t + K2SISAT_t * dqi * dqi) * qia + 2.0 * nVtm); - T3 = sqrt(PHIBE_i - veseff) - sqrt(PHIBE_i); - Mob = lexp(- T1 * T3); - end else - Mob = 1.0; - - // Velocity Saturation Factor for C-V - EsatCV = 2.0 * VSATCV_t * Dmob_cv / u0_a; - EsatCVL = EsatCV * LeffCV; - T0 = lexp(PSATCV_i * lln(dqi / EsatCVL)); - Ta = (1.0 + lexp(1.0 / PSATCV_i * lln(DELTAVSATCV_i))); - DvsatCV = (1.0 + lexp(1.0 / PSATCV_i * lln(DELTAVSATCV_i + T0))) / Ta; - - // Channel Length Modulation factor for C-V - if (PCLMCV_i != 0) begin - MclmCV = 1.0 + PCLMCV_i * lln(1.0 + (vds - Vdseff) / PCLMCV_i / (Vdsat + EsatCVL)); - end else begin - MclmCV = 1.0; - end - - // Calculating fixed body charge qb with sign (Here to avoid multiple calculation in NQSMOD=3 case) - qb = -`q * nbody * Ach * LeffCV; - - // ************************************************ - // * Current and Charges Calculations * - // ************************************************ - // Quasi Static I-V Model - T1 = qia; - etaiv = q0 / (q0 + qia); - T2 = (2.0 - etaiv) * nVtm; - ids0_ov_dqi = T1 + T2; - ids0 = ids0_ov_dqi * dqi; - - // S/D Series Resistance - `include "bsimcmg_rdsmod.include" - - ids = NFINtotal * beta * ids0 * Moc * Mnud * Mob / (Dmob * Dvsat * Dr); - ids = ids * IDS0MULT; - - // Quasi Static C-V Model - `include "bsimcmg_quasi_static_cv.include" - - // Parasitic Capacitances - // Bias-dependent overlap capacitances (CGEOMOD = 0 and 2) - qgs_ov = 0.0; - qgd_ov = 0.0; - if (CGEOMOD != 1) begin - T1 = NFINtotal * WeffCV0 * devsign; - T2 = devsign * V(`GateEdgeNode, si); - T0 = T2 - vfbsdcv + `DELTA_1; - vgs_overlap = 0.5 * (T0 - sqrt(T0 * T0 + 4.0 * `DELTA_1)); - qgs_ov = T1 * (CGSL_i * (T2 - vfbsdcv - vgs_overlap - 0.5 * CKAPPAS_i * (sqrt(1.0 - 4.0 * vgs_overlap / CKAPPAS_i) - 1.0)) + CGSO_i * T2); - T2 = devsign * V(`GateEdgeNode, di); - T0 = T2 - vfbsdcv + `DELTA_1; - vgd_overlap = 0.5 * (T0 - sqrt(T0 * T0 + 4.0 * `DELTA_1)); - qgd_ov = T1 * (CGDL_i * (T2 - vfbsdcv - vgd_overlap - 0.5 * CKAPPAD_i * (sqrt(1.0 - 4.0 * vgd_overlap / CKAPPAD_i) - 1.0)) + CGDO_i * T2); - end - - if (CGEOMOD == 0) begin - T1 = NFINtotal * WeffCV0; // Fringe caps dont see QM effects - qgs_fr = T1 * CFS_i * V(`GateEdgeNode, si); - qgd_fr = T1 * CFD_i * V(`GateEdgeNode, di); - qgs_parasitic = qgs_ov + qgs_fr; - qgd_parasitic = qgd_ov + qgd_fr; - end else if (CGEOMOD == 1) begin // CGEO1SW=1 enables parameters to be in F per fin, per gate-finger, per unit channel width - if (CGEO1SW == 1) begin - T0 = NFINtotal * WeffCV0; - COVS_i = T0 * COVS_i; - COVD_i = T0 * COVD_i; - cgsp = T0 * CGSP; - cgdp = T0 * CGDP; - end else begin - cgsp = CGSP; - cgdp = CGDP; - end - qgs_ov = COVS_i * V(`GateEdgeNode, si); - qgd_ov = COVD_i * V(`GateEdgeNode, di); - qgs_parasitic = qgs_ov; - qgd_parasitic = qgd_ov; - qgs_fr = cgsp * V(`GateEdgeNode, s); - qgd_fr = cgdp * V(`GateEdgeNode, d); - end else begin - qgs_fr = Cfr_geo * V(`GateEdgeNode, si); - qgd_fr = Cfr_geo * V(`GateEdgeNode, di); - qgs_parasitic = qgs_ov + qgs_fr; - qgd_parasitic = qgd_ov + qgd_fr; - end - - // Drain-to-Source Fringe Capacitance Available for all CGEOMOD - qds_fr = CDSP * V(d, s); - - // Impact Ionization Current (Ref: IIMOD = 1 from BSIM4 Model, IIMOD = 2 from BSIMSOI Model) - Iii = 0.0; - if (IIMOD == 1) begin - T0 = (ALPHA0_t + ALPHA1_t * Leff) / Leff; - if ((T0 <= 0.0) || (BETA0_t <= 0.0)) - Iii = 0.0; - else begin - T1 = -BETA0_t / (diffVds + 1.0e-30); - Iii = T0 * diffVds * ids * lexp(T1); - end - end else if (IIMOD == 2) begin //End of IIMOD=1 - ALPHAII = (ALPHAII0_t + ALPHAII1_t * Leff) / Leff; - if (ALPHAII <= 0.0) begin - Iii = 0.0; - end else begin - T0 = ESATII_i * Leff; - T1 = SII0_t * T0 / (1.0 + T0); - T0 = 1.0 / (1.0 + hypsmooth(SII1_i * vgsfbeff, IIMOD2CLAMP1)); // T0 = 1 / (1 + SII1_i * vgsfbeff) - T3 = T0 + SII2_i; - T2 = hypsmooth(vgsfbeff * T3, IIMOD2CLAMP2); // T2 = vgsfbeff * T3 - T3 = 1.0 / (1.0 + SIID_i * vds); - VgsStep = T1 * T2 * T3; - Vdsatii = VgsStep * (1.0 - LII_i / Leff); - Vdiff = vds - Vdsatii; - T0 = BETAII2_i + BETAII1_i * Vdiff + BETAII0_i * Vdiff * Vdiff; - T1 = sqrt(T0 * T0 + 1.0e-10); - Ratio = -hypmax( -ALPHAII * lexp(Vdiff / T1), -10.0, IIMOD2CLAMP3); - Iii = Ratio * ids; - end - end // End of IIMOD=2 - - // Gate Current (Ref: BSIM4 Model) - igbinv = 0.0; - igbacc = 0.0; - igcs = 0.0; - igcd = 0.0; - igs = 0.0; - igd = 0.0; - - // Igb - if (IGBMOD != 0) begin - // Igbinv - T1 = (qia - EIGBINV_i) / NIGBINV_i / Vtm; - Vaux_Igbinv = NIGBINV_i * Vtm * lln(1.0 + lexp(T1)); - T2 = AIGBINV_t - BIGBINV_i * qia; - T3 = 1.0 + CIGBINV_i * qia; - T4 = -9.82222e11 * TOXG * T2 * T3; - T5 = lexp(T4); - T6 = 3.75956e-7; - igbinv = Weff0 * Leff * T6 * Toxratio * vge * Vaux_Igbinv * T5; - igbinv = igbinv * igtemp; - - // Igbacc - vfbzb = deltaPhi - (Eg / 2.0) - phib; - T0 = vfbzb - vge; - T1 = T0 / NIGBACC_i / Vtm; - Vaux_Igbacc = NIGBACC_i * Vtm * lln(1.0 + lexp(T1)); - if (BULKMOD != 0) begin - Voxacc = qi_acc_for_QM; - end else begin - if (vfbzb <= 0) - Voxacc = 0.5 * (T0 - 0.02 + sqrt((T0 - 0.02) * (T0 - 0.02) - 0.08 * vfbzb)); - else - Voxacc = 0.5 * (T0 - 0.02 + sqrt((T0 - 0.02) * (T0 - 0.02) + 0.08 * vfbzb)); - end - T2 = AIGBACC_t - BIGBACC_i * Voxacc; - T3 = 1.0 + CIGBACC_i * Voxacc; - T4 = -7.45669e11 * TOXG * T2 * T3; - T5 = lexp(T4); - T6 = 4.97232e-7; - igbacc = Weff0 * Leff * T6 * Toxratio * vge * Vaux_Igbacc * T5; - igbacc = igbacc * igtemp; - - end - - if (IGCMOD != 0) begin - // Igcinv - T1 = AIGC_t - BIGC_i * qia; - T2 = 1.0 + CIGC_i * qia; - T3 = -Bechvb * TOXG * T1 * T2; - T4 = qia * lexp(T3); - T5 = (vge + 0.5 * vdsx + 0.5 * (ves_jct + ved_jct)); - igc0 = Weff0 * Leff * Aechvb * Toxratio * T4 * T5 * igtemp; - - // Gate-Current Partitioning - Vdseffx = sqrt(Vdseff * Vdseff + 0.01) - 0.1; - T1 = PIGCD_i * Vdseffx; - T1_exp = lexp(-T1); - T3 = T1 + T1_exp - 1.0 + 1.0e-4; - T4 = 1.0 - (T1 + 1.0) * T1_exp + 1.0e-4; - T5 = T1 * T1 + 2.0e-4; - igcd = igc0 * T4 / T5; - igcs = igc0 * T3 / T5; - - // Igs - T0 = vgs_noswap - vfbsd; - vgs_eff = sqrt(T0 * T0 + 1.0e-4); - if (IGCLAMP == 1) begin - T1 = hypsmooth((AIGS_t - BIGS_i * vgs_eff), 1.0e-6); - if (CIGS_i < 0.01) begin - CIGS_i = 0.01; - end - end else begin - T1 = AIGS_t - BIGS_i * vgs_eff; - end - T2 = 1.0 + CIGS_i * vgs_eff; - T3 = -Bechvb * TOXG * POXEDGE_i * T1 * T2; - T4 = lexp(T3); - if (sigvds > 0.0) begin - igs = igsd_mult * DLCIGS * vgs_noswap * vgs_eff * T4; - end else begin - igd = igsd_mult * DLCIGS * vgs_noswap * vgs_eff * T4; - end - - // Igd - T0 = vgd_noswap - vfbsd; - vgd_eff = sqrt(T0 * T0 + 1.0e-4); - if (IGCLAMP == 1) begin - T1 = hypsmooth((AIGD_t - BIGD_i * vgd_eff), 1.0e-6); - if (CIGD_i < 0.01) begin - CIGD_i = 0.01; - end - end else begin - T1 = AIGD_t - BIGD_i * vgd_eff; - end - T2 = 1.0 + CIGD_i * vgd_eff; - T3 = -Bechvb * TOXG * POXEDGE_i * T1 * T2; - T4 = lexp(T3); - - if (sigvds > 0.0) begin - igd = igsd_mult * DLCIGD * vgd_noswap * vgd_eff * T4; - end else begin - igs = igsd_mult * DLCIGD * vgd_noswap * vgd_eff * T4; - end - end - - // GIDL/GISL Current (Ref: BSIM4 Model) - igisl = 0.0; - igidl = 0.0; - - if (GIDLMOD != 0) begin - T0 = epsratio * EOT; - // GIDL - if ((AGIDL_i <= 0.0) || (BGIDL_t <= 0.0)) begin - T6 = 0.0; - end else begin - T1 = (-vgd_noswap - EGIDL_i + vfbsd) / T0; - T1 = hypsmooth(T1, 1.0e-2); - T2 = BGIDL_t / (T1 + 1.0e-3); - T3 = lexp(PGIDL_i * lln(T1)); - if (BULKMOD != 0) begin - T4 = -ved_jct*ved_jct*ved_jct; - T4a = CGIDL_i + abs(T4) + 1.0e-5; - T5 = hypsmooth(T4/T4a, 1.0e-6) - 1.0e-6; - T6 = AGIDL_i * Weff0 * T3 * lexp(-T2) * T5; - end else begin - T6 = AGIDL_i * Weff0 * T3 * lexp(-T2) * vds_noswap; - end - end - - if (sigvds > 0.0) begin - igidl = T6; - end else begin - igisl = T6; - end - - // GISL - if ((AGISL_i <= 0.0) || (BGISL_t <= 0.0)) begin - T6 = 0.0; - end else begin - T1 = (-vgs_noswap - EGISL_i + vfbsd) / T0; - T1 = hypsmooth(T1, 1.0e-2); - T2 = BGISL_t / (T1 + 1.0e-3); - T3 = lexp(PGISL_i * lln(T1)); - if (BULKMOD != 0) begin - T4 = -ves_jct * ves_jct * ves_jct; - T4a = CGISL_i + abs(T4) + 1.0e-5; - T5 = hypsmooth(T4/T4a, 1.0e-6) - 1.0e-6; - T6 = AGISL_i * Weff0 * T3 * lexp(-T2) * T5; - end else - T6 = AGISL_i * Weff0 * T3 * lexp(-T2) * (-vds_noswap); - end - - if (sigvds > 0.0) begin - igisl = T6; - end else begin - igidl = T6; - end - - end // End of GIDLMOD - - // Junction Current - if (BULKMOD != 0) begin - // Source-Side Junction Current - if (Isbs > 0.0) begin - if (ves_jct < VjsmRev) begin - T0 = ves_jct / Nvtms; - T1 = lexp(T0) - 1.0; - T2 = IVjsmRev + SslpRev * (ves_jct - VjsmRev); - Ies = T1 * T2; - end else if (ves_jct <= VjsmFwd) begin - T0 = ves_jct / Nvtms; - T1 = (BVS + ves_jct) / Nvtms; - T2 = lexp(-T1); - Ies = Isbs * (lexp(T0) + XExpBVS - 1.0 - XJBVS * T2); - end else begin - Ies = IVjsmFwd + SslpFwd * (ves_jct - VjsmFwd); - end - end else begin - Ies = 0.0; - end - - // Source-Side Junction Tunneling Current - if (JTSS_t > 0.0) begin - if ((VTSS - ves_jct) < (VTSS * 1.0e-3)) begin - T0 = -ves_jct / Vtm0 / NJTS_t; - T1 = lexp(T0 * 1.0e3) - 1.0; - Ies = Ies - ASEJ * JTSS_t * T1; - end else begin - T0 = -ves_jct / Vtm0 / NJTS_t; - T1 = lexp(T0 * VTSS / (VTSS - ves_jct)) - 1.0; - Ies = Ies - ASEJ * JTSS_t * T1; - end - end - - if (JTSSWS_t > 0.0) begin - if ((VTSSWS - ves_jct) < (VTSSWS * 1.0e-3)) begin - T0 = -ves_jct / Vtm0 / NJTSSW_t; - T1 = lexp(T0 * 1.0e3) - 1.0; - Ies = Ies - PSEJ * JTSSWS_t * T1; - end else begin - T0 = -ves_jct / Vtm0 / NJTSSW_t; - T1 = lexp(T0 * VTSSWS / (VTSSWS - ves_jct)) - 1.0; - Ies = Ies - PSEJ * JTSSWS_t * T1; - end - end - - if (JTSSWGS_t > 0.0) begin - if ((VTSSWGS - ves_jct) < (VTSSWGS * 1.0e-3)) begin - T0 = -ves_jct / Vtm0 / NJTSSWG_t; - T1 = lexp(T0 * 1.0e3) - 1.0; - Ies = Ies - Weff0 * NFINtotal * JTSSWGS_t * T1; - end else begin - T0 = -ves_jct / Vtm0 / NJTSSWG_t; - T1 = lexp(T0 * VTSSWGS / (VTSSWGS - ves_jct)) - 1.0; - Ies = Ies - Weff0 * NFINtotal * JTSSWGS_t * T1; - end - end - - // Drain-Side Junction Current - if (Isbd > 0.0) begin - if (ved_jct < VjdmRev) begin - T0 = ved_jct / Nvtmd; - T1 = lexp(T0) - 1.0; - T2 = IVjdmRev + DslpRev * (ved_jct - VjdmRev); - Ied = T1 * T2; - end else if (ved_jct <= VjdmFwd) begin - T0 = ved_jct / Nvtmd; - T1 = (BVD + ved_jct) / Nvtmd; - T2 = lexp(-T1); - Ied = Isbd * (lexp(T0) + XExpBVD - 1.0 - XJBVD * T2); - end else - Ied = IVjdmFwd + DslpFwd * (ved_jct - VjdmFwd); - end else - Ied = 0.0; - - // Drain-Side Junction Tunneling Current - if (JTSD_t > 0.0) begin - if ((VTSD - ved_jct) < (VTSD * 1.0e-3)) begin - T0 = -ved_jct / Vtm0 / NJTSD_t; - T1 = lexp(T0 * 1.0e3) - 1.0; - Ied = Ied - ADEJ * JTSD_t * T1; - end else begin - T0 = -ved_jct / Vtm0 / NJTSD_t; - T1 = lexp(T0 * VTSD/ (VTSD - ved_jct)) - 1.0; - Ied = Ied - ADEJ * JTSD_t * T1; - end - end - if (JTSSWD_t > 0.0) begin - if ((VTSSWD - ved_jct) < (VTSSWD * 1.0e-3)) begin - T0 = -ved_jct / Vtm0 / NJTSSWD_t; - T1 = lexp(T0 * 1.0e3) - 1.0; - Ied = Ied - PDEJ * JTSSWD_t * T1; - end else begin - T0 = -ved_jct / Vtm0 / NJTSSWD_t; - T1 = lexp(T0 * VTSSWD / (VTSSWD - ved_jct)) - 1.0; - Ied = Ied - PDEJ * JTSSWD_t * T1; - end - end - if (JTSSWGD_t > 0.0) begin - if ((VTSSWGD - ved_jct) < (VTSSWGD * 1.0e-3)) begin - T0 = -ved_jct / Vtm0 / NJTSSWGD_t; - T1 = lexp(T0 * 1.0e3) - 1.0; - Ied = Ied - Weff0 * NFINtotal * JTSSWGD_t * T1; - end else begin - T0 = -ved_jct / Vtm0 / NJTSSWGD_t; - T1 = lexp(T0 * VTSSWGD / (VTSSWGD - ved_jct)) - 1.0; - Ied = Ied - Weff0 * NFINtotal * JTSSWGD_t * T1; - end - end - - // Junction Capacitance (No Swapping) - // Source-Substrate Junction - `BSIM6JunctnCap(ves_jct, Czbs, PBS_t, SJS, MJS, MJS2, Qesj1) - `BSIM6JunctnCap(ves_jct, Czbssw, PBSWS_t, SJSWS, MJSWS, MJSWS2, Qesj2) - `BSIM6JunctnCap(ves_jct, Czbsswg, PBSWGS_t, SJSWGS, MJSWGS, MJSWGS2, Qesj3) - Qesj = Qesj1 + Qesj2 + Qesj3; - - // Drain-Substrate Junction - `BSIM6JunctnCap(ved_jct, Czbd, PBD_t, SJD, MJD, MJD2, Qedj1) - `BSIM6JunctnCap(ved_jct, Czbdsw, PBSWD_t, SJSWD, MJSWD, MJSWD2, Qedj2) - `BSIM6JunctnCap(ved_jct, Czbdswg, PBSWGD_t, SJSWGD, MJSWGD, MJSWGD2, Qedj3) - Qedj = Qedj1 + Qedj2 + Qedj3; - - end // BULKMOD=0 - - Qes = Qesj + csbox * ves_jct; - Qed = Qedj + cdbox * ved_jct; - - // Gate-to-Substrate Parasitic Capacitance - // Bias Independent Component - Qeg = cgbox * devsign * V(e, `GateEdgeNode); - if (BULKMOD != 0) begin - // Bias Dependent Component - T2 = devsign * V(`GateEdgeNode, e); - T3 = T2 - deltaPhi + Eg / 2.0 + phib - DELVFBACC; - T0 = T3 + `DELTA_1; - vge_overlap = 0.5 * (T0 + sqrt(T0 * T0 + 4.0 * `DELTA_1)); - Qeg = Qeg - NFINtotal * LeffCV * (CGBL_i * (T3 - vge_overlap + 0.5 * CKAPPAB_i * ( sqrt(1.0 + 4.0 * vge_overlap / CKAPPAB_i) - 1.0 ))); - end - - // Generation-Recombination Component - T0 = vds; - T1 = T0 * (AIGEN_i + BIGEN_i * T0 * T0); - idsgen = HFIN * TFIN * (Leff - 2.0 * LINTIGEN_i) * igentemp * T1; - - // NQS Gate Resistance (Ref: BSIM4 Model) - T0 = ueff * coxeff * Weff0 / Leff; - - `ifdef __NQSMOD1__ - if (NQSMOD == 1 && XRCRG1_i != 0) begin - IdovVds = beta * ids0_ov_dqi * Moc / (Dmob * Dvsat * Dr); - gcrg = NFINtotal * XRCRG1_i * (IdovVds + XRCRG2_i * Vtm * T0); - end - `endif - - `ifdef __NQSMOD2__ - if (NQSMOD == 2) begin - IdovVds = beta * ids0_ov_dqi * Moc / (Dmob * Dvsat * Dr); - gcrg = NFINtotal * XRCRG1_i * (IdovVds + XRCRG2_i * Vtm * T0); - gtau = gcrg / (cox * Weff0 * Leff); - end - `endif - - // *** Multiply all current and charge components by NFINtotal *** - // Note: Do not multiply ids, qg, qs, qd, qb, Ies, Ied, Qbs, Qbd with NFINtotal - // since it is already considered. - - igidl = NFINtotal * igidl; - igisl = NFINtotal * igisl; - igcd = NFINtotal * igcd; - igcs = NFINtotal * igcs; - igs = NFINtotal * igs; - igd = NFINtotal * igd; - igbinv = NFINtotal * igbinv; - igbacc = NFINtotal * igbacc; - idsgen = NFINtotal * idsgen; - - // Gate to Body Tunneling Current Empirical Partition for BULKMOD = 0 - igbs = 0.0; - igbd = 0.0; - if (BULKMOD == 0) begin - igbs = (igbinv + igbacc) * wf; - igbd = (igbinv + igbacc) * wr; - end - - // Noise Models - Esatnoi = 2.0 * VSAT_a / ueff; // Thermal noise and flicker noise - - // Flicker Noise (Ref: BSIM4 Model from K. K. Hung et al. TED 1990) - if (NOIA > 0.0 || NOIB > 0.0 || NOIC > 0.0) begin - Leffnoi = Leff - 2.0 * LINTNOI_i; - Leffnoisq = Leffnoi * Leffnoi; - if (EM <= 0.0) begin - DelClm = 0.0; - end else begin - T0 = (diffVds / litl + EM) / Esatnoi; - DelClm = litl * lln(T0); - if (DelClm < 0.0) begin - DelClm = 0.0; - end - end - T1 = `q * `q * `q * Vtm * abs(ids) * ueff; - T2 = 1.0e10 * coxeff * Leffnoisq; - N0 = coxeff * qis / `q; - Nl = coxeff * qid / `q; - Nstar = Vtm / `q * (coxeff + CIT_a); - T3 = NOIA * lln((N0 + Nstar) / (Nl + Nstar)); - T4 = NOIB * (N0 - Nl); - T5 = 0.5 * NOIC * (N0 * N0 - Nl * Nl); - T6 = `q * Vtm * ids * ids; - T7 = 1.0e10 * Leffnoisq * Weff0 * NFINtotal; - T8 = NOIA + NOIB * Nl + NOIC * Nl * Nl; - T9 = (Nl + Nstar) * (Nl + Nstar); - Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; - T10 = NOIA * `q * Vtm; - T11 = Weff0 * NFINtotal * Leffnoi * 1.0e10 * Nstar * Nstar; - Swi = T10 / T11 * ids * ids; - T1 = Swi + Ssi; - if (T1 > 0.0) begin - FNPowerAt1Hz = (Ssi * Swi) / T1; - end else begin - FNPowerAt1Hz = 0.0; - end - end else begin - FNPowerAt1Hz = 0.0; - end - - // Thermal Noise - case (TNOIMOD) - 0 : begin // Charge-based model (BSIM4 - TNOIMOD=0) - T0 = ueff * qinv; - T1 = T0 * Rdsi + Leff * Leff; - Gtnoi = (T0 / T1) * NTNOI_i; - sid = 4.0 * Vtm * `q * Gtnoi; - end - 1: begin // Correlated Thermal Noise by Navid, November 2013, Reference BSIMSOI4.5.0 - `ifdef __TNOIMOD1__ - Abulk = 1.0; - Vgst2Vtm = KSATIV_a * (qis + 2.0 * Vtm); - etaa = 1.0 - Vdseff * Abulk / Vgst2Vtm ; - T0 = 1.0 - etaa; - T1 = 1.0 + etaa; - T2 = T1 + 2.0 * Abulk * Vtm / (qia + 1.0e-10); - T3 = T2 * T2; - T4 = T0 * T0; - T5 = T3 * T3; - T6 = 1.0 / (1.0 + Vdseff / EsatL) ; - gamma = T6 * (0.5 * T1 + T0 * T0 / (6.0 * T2)); - delta = ((T1 / T3) - (5.0 * T1 + T2) * T4 / (15.0 * T5) + T4 * T4 / (9.0 * T5 * T2)) / (6.0 * T6 * T6 * T6); - T7 = T0 / T2; - epsilon = (T7 + T7 * T7 * T7 / 3.0) / (6.0 * T6); - T8 = qia / EsatL; - T8 = T8 * T8; - npart_c = RNOIC * (1.0 + T8 * TNOIC * Leff); - T9 = gamma * delta ; - if (T9 > 0.0) begin - ctnoi = epsilon / sqrt( gamma * delta) * (2.5316 * npart_c); - end else begin - ctnoi = 1.0; - end - if (ctnoi > 1) begin - ctnoi = 1.0; - end - if (ctnoi < 0) begin - ctnoi = 0.0; - end - npart_beta = RNOIA * (1.0 + T8 * TNOIA * Leff); - npart_theta = RNOIB * (1.0 + T8 * TNOIB * Leff); - gamma = gamma * (3.0 * npart_beta * npart_beta); - delta = delta * (3.75 * npart_theta * npart_theta); - T9 = qia * 0.5 * T1; - gche = beta * T9 * T6; - noiGd0 = NFINtotal * beta * qia / (1.0 + gche * Rdsi); - GammaGd0 = gamma * noiGd0; - sid = 4.0 * Vtm * `q * GammaGd0; - C0 = NFINtotal * coxeff * WeffCV0 * LeffCV; - if (gamma > 0.0 && delta > 0.0) begin - sf = (noiGd0 + 1.0e-15) / sqrt(delta / gamma); - end else begin - sf = 0.0; - end - `else - $strobe("[Warning!] Although the model selector TNOIMOD is set to 1, the new correlated thermal noise model is not activated. Please uncomment \"`define __TNOIMOD1__\" in the bsimcmg.va."); - `endif - end - endcase - - // Source and Drain Conductance for Thermal Noise Contribution - if (RDSMOD != 2) begin - gspr = 1.0 / Rsource; // Note: gspr considers all fins - gdpr = 1.0 / Rdrain; // Note: gdpr considers all fins - end - - // Loading Ids, Gate and Drain charges - `ifdef __NQSMOD2__ - if (sigvds > 0.0) begin - I(di, si) <+ devsign * ids; - end else begin - I(si, di) <+ devsign * ids; - end - - if (NQSMOD == 2) begin - I(`IntrinsicGate, si) <+ devsign * gtau * -V(q); - I(di, si) <+ devsign * xdpart * gtau * V(q); - end else begin // Quasi-static Stamping (Normal case) - I(di, si) <+ devsign * ddt(qd); - I(`IntrinsicGate, si) <+ devsign * ddt(qg); - end - `else - if (sigvds > 0.0) begin - I(di, si) <+ devsign * ids; - end else begin - I(si, di) <+ devsign * ids; - end - I(di, si) <+ devsign * ddt(qd); - I(`IntrinsicGate, si) <+ devsign * ddt(qg); - `endif - - // Loading Other Currents - if (sigvds > 0.0) begin - I(di, si) <+ devsign * idsgen; - I(`IntrinsicGate, si) <+ devsign * (igcs + igs); - I(`IntrinsicGate, di) <+ devsign * (igcd + igd); - if (BULKMOD != 0) begin - I(di, e) <+ devsign * (igidl + Iii); - I(si, e) <+ devsign * igisl; - I(`IntrinsicGate, e) <+ devsign * (igbinv + igbacc); - end else begin - I(di, si) <+ devsign * (igidl + Iii); - I(si, di) <+ devsign * igisl; - end - end else begin - I(si, di) <+ devsign * idsgen; - I(`IntrinsicGate, di) <+ devsign * (igcs + igs); - I(`IntrinsicGate, si) <+ devsign * (igcd + igd); - if (BULKMOD != 0) begin - I(si, e) <+ devsign * (igidl + Iii); - I(di, e) <+ devsign * igisl; - I(`IntrinsicGate, e) <+ devsign * (igbinv + igbacc); - end else begin - I(si, di) <+ devsign * (igidl + Iii); - I(di, si) <+ devsign * igisl; - end - end - if (BULKMOD == 0) begin - I(`IntrinsicGate, si) <+ devsign * igbs; - I(`IntrinsicGate, di) <+ devsign * igbd; - end - - if (BULKMOD != 0) begin - I(e, si) <+ devsign * Ies; - I(e, di) <+ devsign * Ied; - end - I(e, si) <+ devsign * ddt(Qes); - I(e, di) <+ devsign * ddt(Qed); - I(e, `GateEdgeNode) <+ devsign * ddt(Qeg); - - // Loading other charges - I(`GateEdgeNode, si) <+ ddt(qgs_parasitic); - I(`GateEdgeNode, di) <+ ddt(qgd_parasitic); - I(d, s) <+ ddt(qds_fr); - if (CGEOMOD == 1) begin - I(`GateEdgeNode, s) <+ ddt(qgs_fr); - I(`GateEdgeNode, d) <+ ddt(qgd_fr); - end - - // Accumulation Charge for Bulk FET - if (BULKMOD != 0) begin - I(`IntrinsicGate, si) <+ devsign * ddt(qg_acc); - I(e, si) <+ devsign * ddt(qb_acc); - end - - // External S/D Resistance - if (RDSMOD == 2) begin - V(d, di) <+ 0.0; - V(s, si) <+ 0.0; - end else begin - I(d, di) <+ V(d, di) / Rdrain; - I(s, si) <+ V(s, si) / Rsource; - end - - // NQSMOD1 Gate Resistance Model - `ifdef __NQSMOD1__ - if (NQSMOD == 1 && XRCRG1_i != 0) - I(`GateEdgeNode, gi) <+ V(`GateEdgeNode, gi) * gcrg; - else - V(`GateEdgeNode, gi) <+ 0.0; - `endif - - // NQSMOD2 BSIM4 Charge Deficit Model - `ifdef __NQSMOD2__ - if (NQSMOD ==2) begin - I(q) <+ ddt(qg - qb); - I(q) <+ V(q) * gtau; - I(q) <+ ddt(V(q)); - end else - V(q) <+ 0.0; - `endif - - // Gate Electrode Resistance - `ifdef __RGATEMOD__ - if (RGATEMOD != 0) - I(g, ge) <+ V(g, ge) * ggeltd; - else - V(g, ge) <+ 0.0; - `endif - - // Flicker Noise - I(di,si) <+ flicker_noise(FNPowerAt1Hz, EF, "flicker"); - - // Thermal noise for parasitics - if (RDSMOD != 2) begin - I(d, di) <+ white_noise(4.0 * Vtm * `q * gdpr, "thermal"); - I(s, si) <+ white_noise(4.0 * Vtm * `q * gspr, "thermal"); - end - - `ifdef __RGATEMOD__ - if (RGATEMOD != 0) - I(g, ge) <+ white_noise(4.0 * Vtm * `q * ggeltd, "thermal"); - `endif - - // Channel thermal noise and induced gate noise stamping - // Implementation of correlated noise follows C. C. McAndrew, WCM 2005 - if (TNOIMOD == 0) begin - I(di, si) <+ white_noise(sid, "thermal"); - `ifdef __TNOIMOD1__ - V(N) <+ 0.0; - `endif - end else begin - `ifdef __TNOIMOD1__ - I(di,si) <+ white_noise(sid * abs(1.0 - ctnoi * ctnoi), "thermal"); - I(di,si) <+ ctnoi * V(N) * sf * SCALEN ; - if (gamma > 0 && delta > 0) begin - I(N) <+ V(N) * sf * SCALEN; - I(N) <+ white_noise(sid/(sf*sf*SCALEN*SCALEN)); - end else begin - I(N) <+ V(N) ; - end - I(`IntrinsicGate,si) <+ ddt(0.5 * C0 * SCALEN * V(N)); - I(`IntrinsicGate,di) <+ ddt(0.5 * C0 * SCALEN * V(N)); - `else - $strobe("[Warning!] Although the model selector TNOIMOD is set to 1, the new correlated thermal noise model is not activated. Please uncomment \"`define __TNOIMOD1__\" in the bsimcmg.va."); - `endif - end - - // Gate Current Shot Noise - if (IGCMOD != 0) begin - if (sigvds > 0) begin - I(`IntrinsicGate, si) <+ white_noise(2.0 * `q * abs(igcs + igs), "shot"); - I(`IntrinsicGate, di) <+ white_noise(2.0 * `q * abs(igcd + igd), "shot"); - end else begin - I(`IntrinsicGate, di) <+ white_noise(2.0 * `q * abs(igcs + igs), "shot"); - I(`IntrinsicGate, si) <+ white_noise(2.0 * `q * abs(igcd + igd), "shot"); - end - end - - if (IGBMOD != 0) begin - if (BULKMOD != 0) begin - I(`IntrinsicGate, e) <+ white_noise(2.0 * `q * abs(igbinv + igbacc), "shot"); - end else begin - I(`IntrinsicGate, si) <+ white_noise(2.0 * `q * abs(igbs), "shot"); - I(`IntrinsicGate, di) <+ white_noise(2.0 * `q * abs(igbd), "shot"); - end - end - - // Self Heating - `ifdef __SHMOD__ - if (SHMOD != 0 && RTH0 > 0) begin - if (RDSMOD != 2) begin - Pwr(ith_branch) <+ -(devsign * sigvds * V(di,si) * ids + V(d,di) * V(d,di) / Rdrain + V(s,si) * V(s,si) / Rsource); - end else begin - Pwr(ith_branch) <+ -(devsign * sigvds * V(di,si) * ids ); - end - end - Pwr(rth_branch) <+ Temp(rth_branch) * gth; - Pwr(rth_branch) <+ ddt(Temp(rth_branch) * cth); - `endif - - // Operating-Point information - `ifdef __OPINFO__ - // W & L - WEFF = Weff0; // Effective width for IV - LEFF = Leff; // Effective length for IV - WEFFCV = WeffCV0; // Effective width for CV - LEFFCV = LeffCV; // Effective length for CV - - // Currents - IDS = devsign * ids; // Intrinsic Drain Current (Electrical) - if (sigvds > 0) begin // Total Source/Drain Currents (Physical) - if (BULKMOD != 0) begin - IDEFF = IDS + devsign * idsgen - devsign * (igd + igcd) + devsign * (Iii + igidl) - devsign * Ied; - ISEFF = -IDS - devsign * idsgen - devsign * (igs + igcs) + devsign * (igisl) - devsign * Ies; - end else begin - IDEFF = IDS + devsign * idsgen - devsign * (igd + igcd + igbd) + devsign * (Iii + igidl - igisl); - ISEFF = -IDS - devsign * idsgen - devsign * (igs + igcs + igbs) + devsign* (igisl - igidl); - end - end else begin - if (BULKMOD != 0) begin - IDEFF = -IDS - devsign * idsgen - devsign * (igs + igcs) + devsign * (igisl) - devsign * Ied; - ISEFF = IDS + devsign * idsgen - devsign * (igd + igcd) + devsign * (Iii + igidl) - devsign * Ies; - end else begin - IDEFF = -IDS - devsign * idsgen - devsign * (igs + igcs + igbd) + devsign * (igisl - igidl); - ISEFF = IDS + devsign * idsgen - devsign * (igd + igcd + igbs) + devsign * (Iii + igidl - igisl); - end - end - - if (BULKMOD == 0) begin // Total Gate Current - IGTOT = devsign * (igs + igd + igcs + igcd + igbs + igbd); - end else begin - IGTOT = devsign * (igs + igd + igcs + igcd + igbacc + igbinv); - end - - IDSGEN = sigvds * devsign * idsgen; // Generation-Recombination Current (Physical) - III = devsign * Iii; // Impact Ionization Current - if (sigvds > 0) begin - IGIDL = devsign * igidl; // GIDL Current (Physical) - IGISL = devsign * igisl; // GISL Current (Physical) - end else begin - IGIDL = devsign * igisl; // GIDL Current (Physical) - IGISL = devsign * igidl; // GISL Current (Physical) - end - - if (BULKMOD != 0) begin - IJSB = -devsign * Ies; // Source-Body Junction Current (Physical) - IJDB = -devsign * Ied; // Drain-Body Junction Current (Physical) - end else begin - IJSB = 0.0; - IJDB = 0.0; - end - - if (BULKMOD != 0) begin - ISUB = -III - IGIDL - IGISL - IJSB - IJDB - devsign * (igbinv + igbacc); // Substrate Current - end else begin - ISUB = 0.0; - end - - // Misc Variables - BETA = beta; // Drain Current prefactor per fin per finger - VDSSAT = Vdsat; // Drain-Source saturation Voltage - if (NGATE_i > 0) // Flatband Voltage - VFB = -devsign * (phib + Vtm * lln(NGATE_i / ni)); - else - VFB = PHIG_i - (EASUB + 0.5 * Eg + devsign * phib); - - // Threshold Voltage Calculation - q0 = 10.0 * Vtm / rc + 2.0 * qbs; - T1 = Vtm * (Vtm + q0); - T2 = cox * cox * T1; - T3 = 2.0 * `q * ni * epssub * Vtm; - VTH = VFB + devsign * (Vtm * lln(T2 / T3) + dvch_qm + phib + qbs + Vtm + dvth_all - DELVTRAND); - - // Conductances - GM = ddx(devsign * ids,V(`IntrinsicGate)); // Transconductance - GDS = ddx(devsign * ids,V(di)); // Output Conductance - if (BULKMOD != 0) - GMBS = ddx(devsign * ids,V(e)); // Body Transconductance - else - GMBS = 0.0; - - // Intrinsic Charges (Physical) (Sriram: Not accurate for NQSMOD= 2 and 3) - QGI = devsign * qg + devsign * qg_acc; - QDI = devsign * qd; - QSI = devsign * qs; - QBI = devsign * (qb + qb_acc); - - // Total Charges (Sriram: Not accurate for NQSMOD= 2 and 3) - QG = devsign * qg + qgs_parasitic + qgd_parasitic + (CGEOMOD == 1 ? qgs_fr + qgd_fr : 0) + devsign * qg_acc - devsign * Qeg; - QD = devsign * qd - qgd_parasitic - (CGEOMOD == 1 ? qgd_fr : 0) - devsign * Qed; - QS = devsign * qs - qgs_parasitic - (CGEOMOD == 1 ? qgs_fr : 0) - devsign * Qes; - QB = devsign * (qb + qb_acc) + devsign * (Qeg + Qes + Qed); - - // Intrinsic Capacitances (Physical) - CGGI = ddx(QGI, V(`IntrinsicGate)); - CGSI = ddx(-QGI, V(si)); - CGDI = ddx(-QGI, V(di)); - CGEI = ddx(-QGI, V(e)); - - CSGI = ddx(-QSI, V(`IntrinsicGate)); - CSDI = ddx(-QSI, V(di)); - CSSI = ddx(QSI, V(si)); - CSEI = ddx(-QSI, V(e)); // Should be zero everywhere - - CDGI = ddx(-QDI, V(`IntrinsicGate)); - CDDI = ddx(QDI, V(di)); - CDSI = ddx(-QDI, V(si)); - CDEI = ddx(-QDI, V(e)); - - CEGI = ddx(-QBI, V(`IntrinsicGate)); - CEDI = ddx(-QBI, V(di)); // Should be zero everywhere - CESI = ddx(-QBI, V(si)); // Should be zero everywhere - CEEI = ddx(QBI, V(e)); - - // Total Capacitances - CGG = ddx(QG, V(`IntrinsicGate)); - CGS = ddx(-QG, V(si)); - CGD = ddx(-QG, V(di)); - CGE = ddx(-QG, V(e)); - - CSG = ddx(-QS, V(`IntrinsicGate)); - CSD = ddx(-QS, V(di)); - CSS = ddx(QS, V(si)); - CSE = ddx(-QS, V(e)); - - CDG = ddx(-QD, V(`IntrinsicGate)); - CDD = ddx(QD, V(di)); - CDS = ddx(-QD, V(si)); - CDE = ddx(-QD, V(e)); - - CEG = ddx(-QB, V(`IntrinsicGate)); - CED = ddx(-QB, V(di)); - CES = ddx(-QB, V(si)); - CEE = ddx(QB, V(e)); - - // Total extrinsic capacitance - CGSEXT = ddx(-(qgs_parasitic + (CGEOMOD == 1 ? qgs_fr : 0)),V(si)); // Gate-Source Overlap + outer fringing - CGDEXT = ddx(-(qgd_parasitic + (CGEOMOD == 1 ? qgd_fr : 0)),V(di)); // Gate-Drain Overlap + outer fringing - CGBOV = ddx(Qeg,V(e)); // Gate-Body Overlap - CGBOV = -devsign * CGBOV; - - // Total of Junction Capacitance and Source/Drain-Body Overlap Capacitance - CJST = ddx(Qes, V(si)); - CJST = -devsign * CJST; - CJDT = ddx(Qed, V(di)); - CJDT = -devsign * CJDT; - - RSGEO = RSourceGeo; // External bias independent Source Resistance - RDGEO = RDrainGeo; // External bias independent Drain Resistance - CFGEO = Cfr_geo; // Geometric Parasitic Cap for CGEOMOD=1 - - // Output for Self-Heating Temperature - T_TOTAL_K = DevTemp; - T_TOTAL_C = DevTemp - `P_CELSIUS0; - T_DELTA_SH = Temp(t); - - `ifdef __DEBUG__ - // Individual Gate Current Components - IGS = devsign * igs; - IGD = devsign * igd; - IGCS = devsign * igcs; - IGCD = devsign * igcd; - if (BULKMOD == 0) begin - IGBS = devsign * igbs; - IGBD = devsign * igbd; - end else begin - IGBINV = devsign * igbinv; - IGBACC = devsign * igbacc; - end - - DIDSDVG = ddx(ids, V(`IntrinsicGate)); - DIDSDVG = devsign * sigvds * DIDSDVG; - DIDSDVS = ddx(ids, V(si)); - DIDSDVS = devsign * sigvds * DIDSDVS; - DIDSDVD = ddx(ids, V(di)); - DIDSDVD = devsign * sigvds * DIDSDVD; - `ifdef __SHMOD__ - DIDSDVTH = ddx(ids, Temp(t)); - DIDSDVTH = devsign * sigvds * DIDSDVTH; - `endif - DIGSDVG = ddx(igs + igcs, V(`IntrinsicGate)); - DIGSDVG = devsign * DIGSDVG; - DIGSDVS = ddx(igs + igcs, V(si)); - DIGSDVS = devsign * DIGSDVS; - DIGSDVD = ddx(igs + igcs, V(di)); - DIGSDVD = devsign * DIGSDVD; - `ifdef __SHMOD__ - DIGSDVTH = ddx(igs + igcs, Temp(t)); - DIGSDVTH = devsign * DIGSDVTH; - `endif - DIGDDVG = ddx(igd + igcd, V(`IntrinsicGate)); - DIGDDVG = devsign * DIGDDVG; - DIGDDVS = ddx(igd + igcd, V(si)); - DIGDDVS = devsign * DIGDDVS; - DIGDDVD = ddx(igd + igcd, V(di)); - DIGDDVD = devsign * DIGDDVD; - `ifdef __SHMOD__ - DIGDDVTH = ddx(igd + igcd, Temp(t)); - DIGDDVTH = devsign * DIGDDVTH; - `endif - DIIIDVG = ddx(Iii, V(`IntrinsicGate)); - DIIIDVG = devsign * DIIIDVG; - DIIIDVS = ddx(Iii, V(si)); - DIIIDVS = devsign * DIIIDVS; - DIIIDVD = ddx(Iii, V(di)); - DIIIDVD = devsign * DIIIDVD; - `ifdef __SHMOD__ - DIIIDVTH = ddx(Iii, Temp(t)); - DIIIDVTH = devsign * DIIIDVTH; - `endif - DIGIDLDVG = ddx(igidl, V(`IntrinsicGate)); - DIGIDLDVG = devsign * DIGIDLDVG; - DIGIDLDVS = ddx(igidl, V(si)); - DIGIDLDVS = devsign * DIGIDLDVS; - DIGIDLDVD = ddx(igidl, V(di)); - DIGIDLDVD = devsign * DIGIDLDVD; - `ifdef __SHMOD__ - DIGIDLDVTH = ddx(igidl, Temp(t)); - DIGIDLDVTH = devsign * DIGIDLDVTH; - `endif - DIGISLDVG = ddx(igisl, V(`IntrinsicGate)); - DIGISLDVG = devsign * DIGISLDVG; - DIGISLDVS = ddx(igisl, V(si)); - DIGISLDVS = devsign * DIGISLDVS; - DIGISLDVD = ddx(igisl, V(di)); - DIGISLDVD = devsign * DIGISLDVD; - `ifdef __SHMOD__ - DIGISLDVTH = ddx(igisl, Temp(t)); - DIGISLDVTH = devsign * DIGISLDVTH; - `endif - - `ifdef __SHMOD__ - CGT = ddx(QG, Temp(t)); - CST = ddx(QS, Temp(t)); - CDT = ddx(QD, Temp(t)); - `endif - ITH = ids * vds; - `ifdef __SHMOD__ - DITHDVTH = ddx(ITH, Temp(t)); - `endif - DITHDVG = ddx(ITH, V(`IntrinsicGate)); - DITHDVS = ddx(ITH, V(si)); - DITHDVD = ddx(ITH, V(di)); - `endif // __DEBUG__ - `endif // __OPINFO__ -end // analog block ends -//================================================ diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_cfringe.include b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_cfringe.include deleted file mode 100644 index f4e211f77..000000000 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_cfringe.include +++ /dev/null @@ -1,117 +0,0 @@ -// ******************************************************** -// **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016****/ -// * BSIM Common Multi-Gate Model Equations (Verilog-A) -// ******************************************************** -// -// ******************************************************** -// * Copyright 2016 Regents of the University of California. -// * All rights reserved. -// * -// * Project Director: Prof. Chenming Hu. -// * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal, -// * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, -// * Ali Niknejad, Chenming Hu -// ******************************************************** -// ******************************************************** -// * NONDISCLOSURE STATEMENT -// Software is distributed as is, completely without warranty or service -// support. The University of California and its employees are not liable -// for the condition or performance of the software. -// The University of California owns the copyright and grants users a perpetual, -// irrevocable, worldwide, non-exclusive, royalty-free license with -// respect to the software as set forth below. -// The University of California hereby disclaims all implied warranties. -// The University of California grants the users the right to modify, copy, -// and redistribute the software and documentation, both within the user's -// organization and externally, subject to the following restrictions -// 1. The users agree not to charge for the University of California code -// itself but may charge for additions, extensions, or support. -// 2. In any product based on the software, the users agree to acknowledge -// the University of California that developed the software. This -// acknowledgment shall appear in the product documentation. -// 3. The users agree to obey all U.S. Government restrictions governing -// redistribution or export of the software. -// 4. The users agree to reproduce any copyright notice which appears on -// the software on any copy or modification of such made available -// to others -// Agreed to on __Jan 01, 2016__________________ -// By: ___University of California, Berkeley____ -// ___Chenming Hu_____________________ -// ___Professor in Graduate School _______ -// ******************************************************** - -// ******************************************************** -// Macro for the geometry-dependent fringing capacitance -// model -// ******************************************************** - -/* - (while (re-search-forward - (rx bow - (or "Hr" "Lr" "Hgdelta" "Lmax" "y" "x" - "CcgSat" "Cnon" "TT1" "Ccg1" "r1cf" "Rcf" "Ccg2" - "Ccg" "C1" "C2" "C3" "Cfglog" "dcf" "TT0" - "TT2" "Cfgsat" "delta" "xCfg") - eow) - nil t) - (replace-match "x42_\\&" t)) -*/ - -`define Cfringe_2d_vars() \ - real x42_Hr, x42_Lr, x42_Hgdelta, x42_Lmax, x42_y, x42_x; \ - real x42_CcgSat, x42_Cnon, x42_TT1, x42_Ccg1, x42_r1cf, x42_Rcf, x42_Ccg2; \ - real x42_Ccg, x42_C1, x42_C2, x42_C3, x42_Cfglog, x42_dcf, x42_TT0; \ - real x42_TT2, x42_Cfgsat, x42_delta, Cfg; - -`define Cfringe_2d(block_name, Hg, Hc, Lext, Wfin, Lc, Lg, Tox, Cf1, Cgg) \ -begin : block_name \ - x42_Hr = 2.3 + 0.2 * ((Hg) + (Tox)) / (Hc); \ - x42_Lr = 1.05; \ - x42_Hgdelta = abs((Hg) + (Tox) - (Hc)); \ - x42_Lmax = (Lext) * x42_Lr; \ - \ - x42_y = min((Hc), (Hg) + (Tox)); \ - x42_x = (Lext) / (x42_Hr + 1.0); \ - x42_Cnon = 1.7e12; \ - x42_CcgSat = epssp * (x42_y - x42_x) / (Lext); \ - x42_TT1 = x42_Cnon * x42_CcgSat; \ - if(x42_TT1 > `EXPL_THRESHOLD) \ - x42_Ccg1 = x42_CcgSat; \ - else \ - x42_Ccg1 = 1.0 / x42_Cnon * ln(1.0 + lexp(x42_TT1)); \ - \ - x42_r1cf = 0.5 * \ - min((Hc) / ((Hg) + (Tox)), ((Hg) + (Tox)) / (Hc)); \ - x42_Rcf = x42_Hgdelta * x42_r1cf; \ - x42_Ccg2 = epssp * 2 / `M_PI * \ - ln(((Lext) + 0.5 * `M_PI * x42_Rcf) / (Lext)); \ - \ - x42_Ccg = (Wfin) * (x42_Ccg1 + x42_Ccg2); \ - \ - x42_x = x42_Lmax / (Hg); \ - x42_C1 = 4.0 / (sqrt(2.0 * (x42_x + 1)) * `M_PI); \ - x42_C2 = sqrt((Tox) * (Tox) + 2.0 * (Hg) * (Tox) + \ - (Hg) * (Hg) * (x42_x + 1)) * sqrt(x42_x + 1) + (Tox) + \ - (Hg) * x42_x + (Hg); \ - x42_C3 = (Tox) * sqrt((x42_x + 1) * (x42_x + 4)) + Tox * (x42_x + 2); \ - x42_Cfglog = epssp * (x42_C1 * ln(x42_C2 / x42_C3) + 12.27); \ - \ - x42_dcf = x42_Hr * x42_Lr; \ - x42_TT0 = sqrt(x42_dcf * x42_dcf + 1.0); \ - x42_TT1 = sqrt((x42_dcf * x42_dcf + 1) * ((x42_dcf * (Tox)) * (x42_dcf * (Tox)) + \ - 2 * x42_dcf * x42_Lmax * (Tox) + (x42_dcf * x42_dcf + 1) * x42_Lmax * x42_Lmax)) \ - + x42_dcf * (Tox) + x42_dcf * x42_dcf * x42_Lmax + x42_Lmax; \ - x42_TT2 = (x42_TT0 + 1.0) * (x42_dcf * (Tox)); \ - x42_Cfgsat = 2.0 * epssp * sqrt(2) / `M_PI * (Cf1) * x42_dcf \ - / x42_TT0 * ln(x42_TT1 / x42_TT2); \ - \ - x42_delta = 1.2e-12; \ - x42_TT1 = x42_Cfgsat - x42_Cfglog - x42_delta; \ - Cfg = (Wfin) * (x42_Cfgsat - 0.5 * (x42_TT1 + \ - sqrt(x42_TT1 * x42_TT1 + 4 * x42_delta * x42_Cfgsat))); \ - Cgg = x42_Ccg + Cfg; \ -end - - - - diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_quasi_static_cv.include b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_quasi_static_cv.include deleted file mode 100644 index a0210a4f9..000000000 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_quasi_static_cv.include +++ /dev/null @@ -1,89 +0,0 @@ -// ******************************************************** -// **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ -// * BSIM Common Multi-Gate Model Equations (Verilog-A) -// ******************************************************** -// -// ******************************************************** -// * Copyright 2016 Regents of the University of California. -// * All rights reserved. -// * -// * Project Director: Prof. Chenming Hu. -// * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, -// * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, -// * Ali Niknejad, Chenming Hu -// ******************************************************** -// ******************************************************** -// * NONDISCLOSURE STATEMENT -// Software is distributed as is, completely without warranty or service -// support. The University of California and its employees are not liable -// for the condition or performance of the software. -// The University of California owns the copyright and grants users a perpetual, -// irrevocable, worldwide, non-exclusive, royalty-free license with -// respect to the software as set forth below. -// The University of California hereby disclaims all implied warranties. -// The University of California grants the users the right to modify, copy, -// and redistribute the software and documentation, both within the user's -// organization and externally, subject to the following restrictions -// 1. The users agree not to charge for the University of California code -// itself but may charge for additions, extensions, or support. -// 2. In any product based on the software, the users agree to acknowledge -// the University of California that developed the software. This -// acknowledgment shall appear in the product documentation. -// 3. The users agree to obey all U.S. Government restrictions governing -// redistribution or export of the software. -// 4. The users agree to reproduce any copyright notice which appears on -// the software on any copy or modification of such made available -// to others -// Agreed to on __Jan 01, 2016_________________ -// By: ___University of California, Berkeley____ -// ___Chenming Hu_____________________ -// ___Professor in Graduate School _______ -// ******************************************************** -// *** Quasi Static CV Model *** - - T11 = (2.0*qia+nVtm)/DvsatCV;//G - qg = qia+dqi*dqi/(6.0*T11);//qc - qd = -0.5*(qia-(dqi/(6.0))*(1.0-(dqi/T11)*(1+dqi/(5.0*T11))));//qd - // Including CLM in qg and qd - inv_MclmCV = 1.0 / MclmCV; - qg = inv_MclmCV * qg + (MclmCV - 1.0) * qid; - qd = inv_MclmCV * inv_MclmCV * qd + 0.5 * (MclmCV - inv_MclmCV) * qid; - -//Calculating partition for NQSMOD2 -`ifdef __NQSMOD2__ - if(NQSMOD == 2) xdpart = qd / qg; - else xdpart = 0; -`endif - - qs = -qg-qd; //from charge conservation qs = -qg-qd; - T6 = NFINtotal*WeffCV0 * LeffCV * coxeff; - - qg = T6*qg; - qd = T6*qd; - qs = T6*qs; - qinv = qg ; - if(BULKMOD != 0) begin - T1 = NFINtotal * WeffCV0 * LeffCV_acc * cox_acc; - T7 = qi_acc_for_QM;//qbulk - T10 = T7 * T1; - qg_acc = - T10; - qb_acc = T10; - T1 = NFINtotal * WeffCV0 * LeffCV * cox; - T2 = qba - qi_acc_for_QM; - T10 = T1*T2; - qg_acc = qg_acc - T10; - qb_acc = qb_acc + T10; - T1 = NFINtotal * WeffCV0 * LeffCV * cox; - T2 = (nq-1.0)*0.5*(qia+(dqi*dqi/(6.0*T11))); - T10 = T1*T2; - qg_acc = qg_acc - T10; - qb_acc = qb_acc + T10; - end - -// if vds is negative, physical charge on qd is qs - if (sigvds < 0) begin - T1 = qd; - qd = qs; - qs = T1; - end - diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_rdsmod.include b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_rdsmod.include deleted file mode 100644 index 892a126cc..000000000 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_rdsmod.include +++ /dev/null @@ -1,84 +0,0 @@ -// ******************************************************* -// **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ -// * BSIM Common Multi-Gate Model Equations (Verilog-A) -// ******************************************************** -// -// ******************************************************** -// * Copyright 2016 Regents of the University of California. -// * All rights reserved. -// * -// * Project Director: Prof. Chenming Hu. -// * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal -// * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, -// * Ali Niknejad, Chenming Hu -// ******************************************************** -// ******************************************************** -// * NONDISCLOSURE STATEMENT -// Software is distributed as is, completely without warranty or service -// support. The University of California and its employees are not liable -// for the condition or performance of the software. -// The University of California owns the copyright and grants users a perpetual, -// irrevocable, worldwide, non-exclusive, royalty-free license with -// respect to the software as set forth below. -// The University of California hereby disclaims all implied warranties. -// The University of California grants the users the right to modify, copy, -// and redistribute the software and documentation, both within the user's -// organization and externally, subject to the following restrictions -// 1. The users agree not to charge for the University of California code -// itself but may charge for additions, extensions, or support. -// 2. In any product based on the software, the users agree to acknowledge -// the University of California that developed the software. This -// acknowledgment shall appear in the product documentation. -// 3. The users agree to obey all U.S. Government restrictions governing -// redistribution or export of the software. -// 4. The users agree to reproduce any copyright notice which appears on -// the software on any copy or modification of such made available -// to others -// Agreed to on __Jan 01, 2016_________________ -// By: ___University of California, Berkeley____ -// ___Chenming Hu_____________________ -// ___Professor in Graduate School _______ -// ******************************************************** -// Source-Drain Resistance Model -case(RDSMOD) - 1: begin - Rdsi = 0.0; - Dr = 1.0; - - T2 = vgs_noswap - vfbsd; - T3 = sqrt(T2 * T2 + 1.0e-1); - vgs_eff = 0.5 * (T2 + T3); - T4 = 1.0 + PRWGS_i * vgs_eff; - T1 = 1.0 / T4; - T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); - T5 = RSW_i * (1.0 + RSDR_a * lexp(0.5 * PRSDR * lln(V(si,s) * V(si,s) + 1.0E-6))); - Rsource = rdstemp * (RSourceGeo + (RSWMIN_i + T5 * T0) * WeffWRFactor); - - T2 = vgd_noswap - vfbsd; - T3 = sqrt(T2 * T2 + 1.0e-1); - vgd_eff = 0.5 * (T2 + T3); - T4 = 1.0 + PRWGD_i * vgd_eff; - T1 = 1.0 / T4; - T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); - T5 = RDW_i * (1.0 + RDDR_a * lexp(0.5 * PRDDR * lln(V(di,d) * V(di,d) + 1.0E-6))); - Rdrain = rdstemp * (RDrainGeo + (RDWMIN_i + T5 * T0) * WeffWRFactor); - end - 0: begin - Rsource = RSourceGeo; - Rdrain = RDrainGeo; - T4 = 1.0 + PRWGS_i * qia; - T1 = 1.0 / T4; - T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); - Rdsi = rdstemp * (RDSWMIN_i + RDSW_i * T0) * WeffWRFactor; - Dr = 1.0 + (NFINtotal) * beta * ids0_ov_dqi / (Dmob * Dvsat) * Rdsi; - end - 2: begin - T4 = 1.0 + PRWGS_i * qia; - T1 = 1.0 / T4; - T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); - Rdsi = rdstemp * (RSourceGeo + RDrainGeo + RDSWMIN_i + RDSW_i * T0) * WeffWRFactor; - Dr = 1.0 + (NFINtotal) * beta * ids0_ov_dqi / (Dmob * Dvsat) * Rdsi; - Rsource = 0.0; - Rdrain = 0.0; - end -endcase diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include b/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include deleted file mode 100644 index 0d1ec67e5..000000000 --- a/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include +++ /dev/null @@ -1,185 +0,0 @@ -// ******************************************************** -// **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ -// * BSIM Common Multi-Gate Model Equations (Verilog-A) -// ******************************************************** -// -// ******************************************************** -// * Copyright 2016 Regents of the University of California. -// * All rights reserved. -// * -// * Project Director: Prof. Chenming Hu. -// * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal -// * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, -// * Ali Niknejad, Chenming Hu -// ******************************************************** -// ******************************************************** -// * NONDISCLOSURE STATEMENT -// Software is distributed as is, completely without warranty or service -// support. The University of California and its employees are not liable -// for the condition or performance of the software. -// The University of California owns the copyright and grants users a perpetual, -// irrevocable, worldwide, non-exclusive, royalty-free license with -// respect to the software as set forth below. -// The University of California hereby disclaims all implied warranties. -// The University of California grants the users the right to modify, copy, -// and redistribute the software and documentation, both within the user's -// organization and externally, subject to the following restrictions -// 1. The users agree not to charge for the University of California code -// itself but may charge for additions, extensions, or support. -// 2. In any product based on the software, the users agree to acknowledge -// the University of California that developed the software. This -// acknowledgment shall appear in the product documentation. -// 3. The users agree to obey all U.S. Government restrictions governing -// redistribution or export of the software. -// 4. The users agree to reproduce any copyright notice which appears on -// the software on any copy or modification of such made available -// to others -// Agreed to on __Jan 01, 2016__________________ -// By: ___University of California, Berkeley____ -// ___Chenming Hu_____________________ -// ___Professor in Graduate School _______ -// ******************************************************** - -// Numerical Constants -`define EXPL_THRESHOLD 80.0 -`define MAX_EXPL 5.540622384e34 -`define MIN_EXPL 1.804851387e-35 -`define N_MINLOG 1.0e-38 -`define MEXPQM 4 -`define DELTA_1 0.02 -`define DELTA_ASYMM 0.04 -`define CONSTCtoK (273.15) -`define REFTEMP (300.15) /* 27 degrees C */ - - -// Model type definitions -`define ntype 1 -`define ptype 0 - -// Physical Constants -`define q 1.60219e-19 // Coul -`define EPS0 8.8542e-12 // F/m -`define HBAR 1.05457e-34 // Joule-sec -`define MEL 9.11e-31 // kg -`define KboQ 8.617087e-5 // Joule / degree - -// Mathematical functions -//`define SINH(x) (0.5 * (lexp(x) - lexp(-(x)))) -`define COSH(x) (0.5 * (lexp(x) + lexp(-(x)))) -//`define TANH(x) ((lexp(x) - lexp(-(x))) / (lexp(x) + lexp(-(x)))) -`define COT(x) ((x)>=`M_PI/2 ? 0 : ((x)<=-`M_PI/2 ? 0 : 1.0/tan(x))) - -// Junction capacitance -//ex:(ves_jct, Czbs, PBS_t, SBS, MJS, MJS2, Qes1) -`define BSIM6JunctnCap(vex, Cz, PB, SJ, MJ, MJ2, Qej) \ - begin \ - if (Cz > 0.0) begin \ - T1 = vex / PB; \ - if (T1 < 0.9) begin \ - if (SJ > 0.0) begin /*second-step junction*/ \ - vec = PB * (1.0 - lexp((1.0 / MJ) * lln(1.0/SJ))); /*Switch over voltage*/\ - pb2 = PB * SJ * MJ2 / MJ / lexp(- (1.0 + MJ) * lln(1.0 - vec / PB)); /*PB for second doping region*/\ - if (vex > vec) begin \ - arg = 1.0 - T1; \ - if (MJ == 0.5) sarg = 1.0 / sqrt(arg); \ - else sarg = lexp(-MJ * lln(arg)); \ - Qej = PB * Cz * (1.0 - arg * sarg) / (1.0 - MJ); \ - end else begin /*vex < vec*/ \ - arg = 1.0 - vec / PB; \ - if (MJ == 0.5) sarg = 1.0 / sqrt(arg); \ - else sarg = lexp(-MJ * lln(arg)); \ - Qec = PB * Cz * (1.0 - arg * sarg) / (1.0 - MJ); \ - arg = 1.0 - (vex - vec) / pb2; \ - if (MJ2 == 0.5) sarg = 1.0 / sqrt(arg); \ - else sarg = lexp(-MJ2 * lln(arg)); \ - Qej = Qec + SJ * pb2 * Cz * (1.0 - arg * sarg) / (1.0 - MJ2); \ - end \ - end else begin /*single junction*/ \ - arg = 1.0 - T1; \ - if (MJ == 0.5) sarg = 1.0 / sqrt(arg); \ - else sarg = lexp(-MJ * lln(arg)); \ - Qej = PB * Cz * (1.0 - arg * sarg) / (1.0 - MJ); \ - end \ - end else begin /*vex/PB>=0.9*/ \ - T2 = lexp(-MJ * lln(0.1)); \ - T3 = 1.0 / (1.0-MJ); \ - T4 = T2 * (T1 - 1.0) * (5.0 * MJ * (T1-1.0) + (1.0 + MJ) ); \ - T5 = T3 * (1.0 - 0.05 * MJ * (1.0 + MJ) * T2 ); \ - Qej = PB * Cz * (T4 + T5); /*Quadratic equation for Qej when vex/PB>=0.9*/\ - end \ - end else begin \ - Qej = 0.0; \ - end \ - end - -// -// Macros for the model/instance parameters -// -// MPRxx model parameter real -// MPIxx model parameter integer -// IPRxx instance parameter real -// IPIxx instance parameter integer -// || -// cc closed lower bound, closed upper bound -// oo open lower bound, open upper bound -// co closed lower bound, open upper bound -// oc open lower bound, closed upper bound -// cz closed lower bound=0, open upper bound=inf -// oz open lower bound=0, open upper bound=inf -// nb no bounds -// ex no bounds with exclude -// sw switch(integer only, values 0=false and 1=true) -// ty switch(integer only, values -1=p-type and +1=n-type) -// -// IPM instance parameter mFactor(multiplicity, implicit for LRM2.2) -// OPP operating point parameter, includes units and description for printing -// -`define ALIAS(alias,paramName) aliasparam alias = paramName ; -`define OPP(nam,uni,des) (*units=uni, desc=des*) real nam ; - -`define MPRnb(nam,def,uni, des) (*units=uni, desc=des*) parameter real nam=def ; -`define MPRex(nam,def,uni,exc, des) (*units=uni, desc=des*) parameter real nam=def exclude exc ; -`define MPRcc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from[lwr:upr] ; -`define MPRoo(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from(lwr:upr) ; -`define MPRco(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from[lwr:upr) ; -`define MPRoc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from(lwr:upr] ; -`define MPRcz(nam,def,uni, des) (*units=uni, desc=des*) parameter real nam=def from[ 0:inf); -`define MPRoz(nam,def,uni, des) (*units=uni, desc=des*) parameter real nam=def from( 0:inf); - -`define MPInb(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def ; -`define MPIex(nam,def,uni,exc, des) (*units=uni, desc=des*) parameter integer nam=def exclude exc ; -`define MPIcc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from[lwr:upr] ; -`define MPIoo(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from(lwr:upr) ; -`define MPIco(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from[lwr:upr) ; -`define MPIoc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from(lwr:upr] ; -`define MPIcz(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from[ 0:inf); -`define MPIoz(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from( 0:inf); - -`define MPIsw(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from[ 0: 1] ; -`define MPIty(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from[ -1: 1] exclude 0 ; - -`define IPRnb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def ; -`define IPRex(nam,def,uni,exc, des) (*units=uni, type="instance", desc=des*) parameter real nam=def exclude exc ; -`define IPRcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr] ; -`define IPRoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr) ; -`define IPRco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr) ; -`define IPRoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr] ; -`define IPRcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[ 0:inf); -`define IPRoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from( 0:inf); - -`define IPInb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def ; -`define IPIex(nam,def,uni,exc, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def exclude exc ; -`define IPIcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr] ; -`define IPIoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr) ; -`define IPIco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr) ; -`define IPIoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr] ; -`define IPIcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[ 0:inf); -`define IPIoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from( 0:inf); - -`ifdef EXPLICIT_MFACTOR - `define IPM (*units="" , type="instance", desc="multiplicity factor"*) parameter real m=1.0 from(0.0:inf) ; - `define MFACTOR_USE m -`else // - `define IPM - `define MFACTOR_USE 1.0 -`endif diff --git a/src/spicelib/devices/dev.c b/src/spicelib/devices/dev.c index 168268c2a..c17aec6c3 100644 --- a/src/spicelib/devices/dev.c +++ b/src/spicelib/devices/dev.c @@ -126,7 +126,6 @@ int add_udn(int,Evt_Udn_Info_t **); #include "adms/ekv/ekvitf.h" #include "adms/psp102/psp102itf.h" #include "adms/bsimbulk/bsimbulkitf.h" -#include "adms/bsimcmg/bsimcmgitf.h" #endif #ifdef CIDER /* Numerical devices (Cider integration) */ @@ -208,7 +207,6 @@ static SPICEdev *(*static_devices[])(void) = { (SPICEdev *(*)(void)) get_ekv_info, (SPICEdev *(*)(void)) get_psp102_info, (SPICEdev *(*)(void)) get_bsimbulk_info, - (SPICEdev *(*)(void)) get_bsimcmg_info, #endif #ifdef NDEV @@ -293,7 +291,7 @@ SPICEdev ** devices(void) #define DEVICES_USED {"asrc", "bjt", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v5", "bsim4v6", "bsim4v7", \ "bsim4soi", "bsim3soipd", "bsim3soifd", "bsim3soidd", "hisim2", "hisimhv1", "hisimhv2", \ "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", "bjt504t", "ekv", "psp102", "bsimbulk", "bsimcmg"} + "mos6", "mos9", "res", "soi3", "sw", "tra", "urc", "vccs", "vcvs", "vsrc", "hicum0", "hicum2", "bjt504t", "ekv", "psp102", "bsimbulk"} #else #define DEVICES_USED {"asrc", "bjt", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v5", "bsim4v6", "bsim4v7", \ "bsim4soi", "bsim3soipd", "bsim3soifd", "bsim3soidd", "hisim2", "hisimhv1", "hisimhv2", \ diff --git a/src/spicelib/parser/inp2m.c b/src/spicelib/parser/inp2m.c index a89d2652d..e902237d3 100644 --- a/src/spicelib/parser/inp2m.c +++ b/src/spicelib/parser/inp2m.c @@ -32,8 +32,7 @@ model_numnodes(int type) } #ifdef ADMS - if (type == INPtypelook("BSIMBULK") || /* bsimbulk.va */ - type == INPtypelook("BSIMCMG")) /* bsimcmg.va */ + if (type == INPtypelook("BSIMBULK")) /* bsimbulk.va */ { return 5; } @@ -134,7 +133,6 @@ INP2M(CKTcircuit *ckt, INPtables *tab, card *current) thismodel->INPmodType != INPtypelook("ekv") && thismodel->INPmodType != INPtypelook("psp102") && thismodel->INPmodType != INPtypelook("bsimbulk") && - thismodel->INPmodType != INPtypelook("bsimcmg") && #endif thismodel->INPmodType != INPtypelook("HiSIM2") && thismodel->INPmodType != INPtypelook("HiSIMHV1") && diff --git a/src/spicelib/parser/inpdomod.c b/src/spicelib/parser/inpdomod.c index cdfd9bf78..41e94f124 100644 --- a/src/spicelib/parser/inpdomod.c +++ b/src/spicelib/parser/inpdomod.c @@ -337,14 +337,6 @@ char *INPdomodel(CKTcircuit *ckt, card * image, INPtables * tab) INPmkTemp ("Device type BSIMBULK not available in this binary\n");} break; - case 17: - case 72: - type = INPtypelook("BSIMCMG"); - if (type < 0) { - err = - INPmkTemp - ("Device type BSIMCMG not available in this binary\n");} - break; case 44: type = INPtypelook("ekv"); if (type < 0) {