diff --git a/ChangeLog b/ChangeLog index cf1f3b573..4d3f0f9e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-12-13 Robert Larice + * src/spicelib/devices/adms/hicum0/admsva/hicum0.va , + * src/spicelib/devices/adms/mextram/admsva/bjt504t.va , + * src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include , + * src/spicelib/devices/adms/psp102/admsva/PSP102_module.include : + undo `2011-12-12 Laurent Lemaitre' which broke --adms in favour of --adms3 + adms3 shall now be worked upon in `adms3va' subdirectories + 2011-12-13 Robert Larice * src/spicelib/devices/adms/*/adms3va/* : copy old amds .va files to a new directory `adms3va' diff --git a/src/spicelib/devices/adms/hicum0/admsva/hicum0.va b/src/spicelib/devices/adms/hicum0/admsva/hicum0.va index 90511a1a8..76dc6de91 100644 --- a/src/spicelib/devices/adms/hicum0/admsva/hicum0.va +++ b/src/spicelib/devices/adms/hicum0/admsva/hicum0.va @@ -1,8 +1,8 @@ // HICUM Level_0 Version_1.12: A Verilog-A description -// (A simplified version of HICUM Level2 model for BJT) +// (A simplified version of HICUM Level2 model for BJT) // ## It is modified after the first version of HICUM/L0 code ## -// 12/08: Modifications for ngspice and adms2.2.7 DW +// 12/08: Modifications for ngspice and adms2.2.7 DW // Changed VT0 in Vt0 to prevent conflict in compiled C version. // Made a temporary variable cjei_i for cjei output purpose only. @@ -25,7 +25,7 @@ // Presently this verilog code permits a minimum of 1 milli-Ohm resistance for any // series resistance as well as for thermal resistance RTH. If any of the resistance // values drops below this minimum value, the corresponding nodes are shorted with -// zero voltage contribution. We want the model compilers/simulators deal this +// zero voltage contribution. We want the model compilers/simulators deal this // situation in such a manner that the corresponding node is COLLAPSED. // We expect that the simulators should permit current contribution statement // for any branch with resistance value more than (or equal to) 1 milli-Ohm without @@ -39,8 +39,12 @@ `ifdef insideADMS `define P(p) (*p*) + `define PGIVEN(p) $given(p) + `define INITIAL_MODEL @(initial_model) `else `define P(p) + `define PGIVEN(p) p + `define INITIAL_MODEL @(initial_step) `endif @@ -142,7 +146,7 @@ end else begin\ `QJMODF(vj,cj0,vd,z,2.4,qjf)\ end - + //Temperature dependence of depletion capacitance parameters `define TMPHICJ(cj0,vd,z,vg,cj0_t,vd_t)\ arg = 0.5*vd/Vt0;\ @@ -162,7 +166,7 @@ end\ le = le*limexp(arg); -// IDEAL DIODE (WITHOUT CAPACITANCE): +// IDEAL DIODE (WITHOUT CAPACITANCE): // conductance not calculated // INPUT: // IS, IST : saturation currents (model parameter related) @@ -189,24 +193,24 @@ end else begin\ Iz = 0.0;\ end - - -module hic0_full (c,b,e,s,tnode); - - -//Node definitions - - inout c,b,e,s,tnode; - (*info="external collector node"*)electrical c; - (*info="external base node"*)electrical b; - (*info="external emitter node"*)electrical e; - (*info="external substrate node"*)electrical s; - (*info="internal collector node"*)electrical ci; - (*info="internal base node"*)electrical bi; - (*info="internal emitter node"*)electrical ei; - (*info="local temperature rise node"*)electrical tnode; - - + + +module hic0_full (c,b,e,s,tnode); + + +//Node definitions + + inout c,b,e,s,tnode; + electrical c `P(info="external collector node"); + electrical b `P(info="external base node"); + electrical e `P(info="external emitter node"); + electrical s `P(info="external substrate node"); + electrical ci `P(info="internal collector node"); + electrical bi `P(info="internal base node"); + electrical ei `P(info="internal emitter node"); + electrical tnode `P(info="local temperature rise node"); + + //Branch definitions branch (ci,c) br_cic_i; branch (ci,c) br_cic_v; @@ -215,143 +219,143 @@ module hic0_full (c,b,e,s,tnode); branch (bi,ei) br_biei; branch (bi,ci) br_bici; branch (ci,ei) br_ciei; - branch (b,bi) br_bbi_i; - branch (b,bi) br_bbi_v; + branch (b,bi) br_bbi_i; + branch (b,bi) br_bbi_v; branch (b,e) br_be; branch (b,ci) br_bci; branch (b,s) br_bs; branch (s,ci) br_sci; - branch (tnode ) br_sht; - -// -// Parameter initialization with default values - -// Collector current - (*spice_name="is", info="(Modified) saturation current", m_factor="yes", unit="A"*) parameter real is = 1.0e-16 from [0:1]; - (*spice_name="mcf", info="Non-ideality coefficient of forward collector current"*) parameter real mcf = 1.00 from (0:10]; - (*spice_name="mcr", info="Non-ideality coefficient of reverse collector current"*) parameter real mcr = 1.00 from (0:10]; - (*spice_name="vef", info="forward Early voltage (normalization volt.)", unit="V", default_value="infinity"*) parameter real vef = `INF from (0:`INF]; - (*spice_name="iqf", info="forward d.c. high-injection toll-off current", unit="A", m_factor="yes", default_value="infinity"*) parameter real iqf = `INF from (0:`INF]; - (*spice_name="iqr", info="inverse d.c. high-injection roll-off current", unit="A", m_factor="yes", default_value="infinity"*) parameter real iqr = `INF from (0:`INF]; - (*spice_name="iqfh", info="high-injection correction current", unit="A", m_factor="yes"*) parameter real iqfh = `INF from (0:`INF]; - (*spice_name="tfh", info="high-injection correction factor", test_value="2e-9", m_factor="yes"*) parameter real tfh = 0.0 from [0:`INF); - -// Base current - (*spice_name="ibes", info="BE saturation current", unit="A", m_factor="yes"*) parameter real ibes = 1e-18 from [0:1]; - (*spice_name="mbe", info="BE non-ideality factor"*) parameter real mbe = 1.0 from (0:10]; - (*spice_name="ires", info="BE recombination saturation current", test_value="1e-16", unit="A", m_factor="yes"*) parameter real ires = 0.0 from [0:1]; - (*spice_name="mre", info="BE recombination non-ideality factor"*) parameter real mre = 2.0 from (0:10]; - (*spice_name="ibcs", info="BC saturation current", test_value="1e-16", unit="A", m_factor="yes"*) parameter real ibcs = 0.0 from [0:1]; - (*spice_name="mbc", info="BC non-ideality factor"*) parameter real mbc = 1.0 from (0:10]; - -// BE depletion cap - (*spice_name="cje0", info="Zero-bias BE depletion capacitance", unit="F", test_value="2e-14", m_factor="yes"*) parameter real cje0 = 1.0e-20 from (0:`INF); - (*spice_name="vde", info="BE built-in voltage", unit="V"*) parameter real vde = 0.9 from (0:10]; - (*spice_name="ze", info="BE exponent factor"*) parameter real ze = 0.5 from (0:1]; - (*spice_name="aje", info="Ratio of maximum to zero-bias value"*) parameter real aje = 2.5 from [1:`INF); - -// Transit time - (*spice_name="t0", info="low current transit time at Vbici=0", test_value="5e-12", unit="s"*) parameter real t0 = 0.0 from [0:`INF); - (*spice_name="dt0h", info="Base width modulation contribution", test_value="2e-12", unit="s"*) parameter real dt0h = 0.0; // from [0:`INF) ; - (*spice_name="tbvl", info="SCR width modulation contribution", test_value="4e-12", unit="s"*) parameter real tbvl = 0.0 from [0:`INF); - (*spice_name="tef0", info="Storage time in neutral emitter", test_value="1e-12", unit="s"*) parameter real tef0 = 0.0 from [0:`INF); - (*spice_name="gte", info="Exponent factor for emmiter transit time"*) parameter real gte = 1.0 from (0:10]; - (*spice_name="thcs", info="Saturation time at high current densities", test_value="3e-11", unit="s"*) parameter real thcs = 0.0 from [0:`INF); - (*spice_name="ahc", info="Smoothing facor for current dependence"*) parameter real ahc = 0.1 from (0:10]; - (*spice_name="tr", info="Storage time at inverse operation", unit="s"*) parameter real tr = 0.0 from [0:`INF); - -// Critical current - (*spice_name="rci0", info="Low-field collector resistance under emitter", test_value="50", unit="Ohm", m_inverse_factor="yes"*) parameter real rci0 = 150 from (0:`INF); - (*spice_name="vlim", info="Voltage dividing ohmic and satur.region", unit="V"*) parameter real vlim = 0.5 from (0:10]; - (*spice_name="vpt", info="Punch-through voltage", test_value="10", unit="V", default="infinity"*) parameter real vpt = 100 from (0:100]; - (*spice_name="vces", info="Saturation voltage", unit="V"*) parameter real vces = 0.1 from [0:1]; - -// BC depletion cap intern - (*spice_name="cjci0", info="Total zero-bias BC depletion capacitance", test_value="1e-15", unit="F", m_factor="yes"*) parameter real cjci0 = 1.0e-20 from (0:`INF); - (*spice_name="vdci", info="BC built-in voltage", test_value="0.7", unit="V"*) parameter real vdci = 0.7 from (0:10]; - (*spice_name="zci", info="BC exponent factor", test_value="0.4"*) parameter real zci = 0.333 from (0:1]; - (*spice_name="vptci", info="Punch-through voltage of BC junction", test_value="50", unit="V"*) parameter real vptci = 100 from (0:100]; - -// BC depletion cap extern - (*spice_name="cjcx0", info="Zero-bias external BC depletion capacitance", unit="F", test_value="1e-15", m_factor="yes"*) parameter real cjcx0 = 1.0e-20 from [0:`INF); - (*spice_name="vdcx", info="External BC built-in voltage", unit="V"*) parameter real vdcx = 0.7 from (0:10]; - (*spice_name="zcx", info="External BC exponent factor"*) parameter real zcx = 0.333 from (0:1]; - (*spice_name="vptcx", info="Punch-through voltage", unit="V", test_value="5.0", default="infinity"*) parameter real vptcx = 100 from (0:100]; - (*spice_name="fbc", info="Split factor = Cjci0/Cjc0", test_value="0.5"*) parameter real fbc = 1.0 from [0:1]; - -// Base resistance - (*spice_name="rbi0", info="Internal base resistance at zero-bias", test_value="100", unit="Ohm", m_inverse_factor="yes"*) parameter real rbi0 = 0.0 from [0:`INF); - (*spice_name="vr0e", info="forward Early voltage (normalization volt.)", unit="V"*) parameter real vr0e = 2.5 from (0:`INF]; - (*spice_name="vr0c", info="forward Early voltage (normalization volt.)", unit="V", default="infinity", test_value="25.0"*) parameter real vr0c = `INF from (0:`INF]; - (*spice_name="fgeo", info="Geometry factor", test_value="0.73"*) parameter real fgeo = 0.656 from [0:`INF]; - -// Series resistances - (*spice_name="rbx", info="External base series resistance", test_value="8.8", unit="Ohm", m_inverse_factor="yes"*) parameter real rbx = 0.0 from [0:`INF); - (*spice_name="rcx", info="Emitter series resistance", test_value="12.5", unit="Ohm", m_inverse_factor="yes"*) parameter real rcx = 0.0 from [0:`INF); - (*spice_name="re", info="External collector series resistance", test_value="9.16", unit="Ohm", m_inverse_factor="yes"*) parameter real re = 0.0 from [0:`INF); - -// Substrate transfer current, diode current and cap - (*spice_name="itss", info="Substrate transistor transfer saturation current", unit="A", test_value="1e-17", m_factor="yes"*) parameter real itss = 0.0 from [0:1.0]; - (*spice_name="msf", info="Substrate transistor transfer current non-ideality factor"*) parameter real msf = 1.0 from (0:10]; - (*spice_name="iscs", info="SC saturation current", unit="A", test_value="1e-17", m_factor="yes"*) parameter real iscs = 0.0 from [0:1.0]; - (*spice_name="msc", info="SC non-ideality factor"*) parameter real msc = 1.0 from (0:10]; - (*spice_name="cjs0", info="Zero-bias SC depletion capacitance", unit="F", test_value="1e-15", m_factor="yes"*) parameter real cjs0 = 1.0e-20 from [0:`INF); - (*spice_name="vds", info="SC built-in voltage", unit="V"*) parameter real vds = 0.3 from (0:10]; - (*spice_name="zs", info="External SC exponent factor"*) parameter real zs = 0.3 from (0:1]; - (*spice_name="vpts", info="SC punch-through voltage", unit="V", test_value="5.0", default="infinity"*) parameter real vpts = 100 from (0:100]; - -// Parasitic caps - (*spice_name="cbcpar", info="Collector-base isolation (overlap) capacitance", unit="F", m_factor="yes", test_value="1e-15"*) parameter real cbcpar = 0.0 from [0:`INF); - (*spice_name="cbepar", info="Emitter-base oxide capacitance", unit="F", m_factor="yes", test_value="2e-15"*) parameter real cbepar = 0.0 from [0:`INF); - -// BC avalanche current - (*spice_name="eavl", info="Exponent factor", test_value="1e-14"*) parameter real eavl = 0.0 from [0:inf); - (*spice_name="kavl", info="Prefactor", test_value="1.19"*) parameter real kavl = 0.0 from [0:`INF); - -// Flicker noise - (*spice_name="kf", info="flicker noise coefficient", unit="M^(1-AF)"*) parameter real kf = 0.0 from [0:`INF); - (*spice_name="af", info="flicker noise exponent factor"*) parameter real af = 2.0 from (0:10]; - -// Temperature dependance - (*spice_name="vgb", info="Bandgap-voltage", unit="V", test_value="1.17"*) parameter real vgb = 1.2 from (0:10]; - (*spice_name="vge", info="Effective emitter bandgap-voltage", unit="V", test_value="1.07"*) parameter real vge = 1.17 from (0:10]; - (*spice_name="vgc", info="Effective collector bandgap-voltage", unit="V", test_value="1.14"*) parameter real vgc = 1.17 from (0:10]; - (*spice_name="vgs", info="Effective substrate bandgap-voltage", unit="V", test_value="1.17"*) parameter real vgs = 1.17 from (0:10]; - (*spice_name="f1vg", info="Coefficient K1 in T-dependent bandgap equation", unit="V/K"*) parameter real f1vg =-1.02377e-4; - (*spice_name="f2vg", info="Coefficient K2 in T-dependent bandgap equation", unit="V/K"*) parameter real f2vg = 4.3215e-4; - (*spice_name="alt0", info="Frist-order TC of tf0", unit="1/K"*) parameter real alt0 = 0.0; - (*spice_name="kt0", info="Second-order TC of tf0", unit="1/K^2"*) parameter real kt0 = 0.0; - (*spice_name="zetact", info="Exponent coefficient in transfer current temperature dependence", test_value="3.5"*) parameter real zetact = 3.0; - (*spice_name="zetabet", info="Exponent coefficient in BE junction current temperature dependence", test_value="4.0"*) parameter real zetabet = 3.5; - (*spice_name="zetaci", info="TC of epi-collector diffusivity", test_value="1.6"*) parameter real zetaci = 0.0; - (*spice_name="alvs", info="Relative TC of satur.drift velocity", unit="1/K", test_value="1e-3"*) parameter real alvs = 0.0; - (*spice_name="alces", info="Relative TC of vces", unit="1/K", test_value="4e-4"*) parameter real alces = 0.0; - (*spice_name="zetarbi", info="TC of internal base resistance", test_value="0.6"*) parameter real zetarbi = 0.0; - (*spice_name="zetarbx", info="TC of external base resistance", test_value="0.2"*) parameter real zetarbx = 0.0; - (*spice_name="zetarcx", info="TC of external collector resistance", test_value="0.2"*) parameter real zetarcx = 0.0; - (*spice_name="zetare", info="TC of emitter resistances"*) parameter real zetare = 0.0; - (*spice_name="alkav", info="TC of avalanche prefactor", unit="1/K"*) parameter real alkav = 0.0; - (*spice_name="aleav", info="TC of avalanche exponential factor", unit="1/K"*) parameter real aleav = 0.0; - -// Self-heating - (*spice_name="flsh", info="Flag for self-heating calculation", test_value="2"*) parameter integer flsh = 0 from [0:2]; - (*spice_name="rth", info="Thermal resistance", test_value="200.0", unit="K/W", m_inverse_factor="yes"*) parameter real rth = 0.0 from [0:`INF); - (*spice_name="cth", info="Thermal capacitance", test_value="0.1", unit="Ws/K", m_factor="yes"*) parameter real cth = 0.0 from [0:`INF); - + branch (tnode ) br_sht; + +// +// Parameter initialization with default values + +// Collector current + parameter real is = 1.0e-16 from [0:1] `P(spice:name="is" info="(Modified) saturation current" m:factor="yes" unit="A"); + parameter real mcf = 1.00 from (0:10] `P(spice:name="mcf" info="Non-ideality coefficient of forward collector current"); + parameter real mcr = 1.00 from (0:10] `P(spice:name="mcr" info="Non-ideality coefficient of reverse collector current"); + parameter real vef = `INF from (0:`INF] `P(spice:name="vef" info="forward Early voltage (normalization volt.)" unit="V" default:value="infinity"); + parameter real iqf = `INF from (0:`INF] `P(spice:name="iqf" info="forward d.c. high-injection toll-off current" unit="A" m:factor="yes" default:value="infinity"); + parameter real iqr = `INF from (0:`INF] `P(spice:name="iqr" info="inverse d.c. high-injection roll-off current" unit="A" m:factor="yes" default:value="infinity"); + parameter real iqfh = `INF from (0:`INF] `P(spice:name="iqfh" info="high-injection correction current" unit="A" m:factor="yes"); + parameter real tfh = 0.0 from [0:`INF) `P(spice:name="tfh" info="high-injection correction factor" test:value="2e-9" m:factor="yes"); + +// Base current + parameter real ibes = 1e-18 from [0:1] `P(spice:name="ibes" info="BE saturation current" unit="A" m:factor="yes"); + parameter real mbe = 1.0 from (0:10] `P(spice:name="mbe" info="BE non-ideality factor"); + parameter real ires = 0.0 from [0:1] `P(spice:name="ires" info="BE recombination saturation current" test:value="1e-16" unit="A" m:factor="yes"); + parameter real mre = 2.0 from (0:10] `P(spice:name="mre" info="BE recombination non-ideality factor"); + parameter real ibcs = 0.0 from [0:1] `P(spice:name="ibcs" info="BC saturation current" test:value="1e-16" unit="A" m:factor="yes"); + parameter real mbc = 1.0 from (0:10] `P(spice:name="mbc" info="BC non-ideality factor"); + +// BE depletion cap + parameter real cje0 = 1.0e-20 from (0:`INF) `P(spice:name="cje0" info="Zero-bias BE depletion capacitance" unit="F" test:value="2e-14" m:factor="yes"); + parameter real vde = 0.9 from (0:10] `P(spice:name="vde" info="BE built-in voltage" unit="V"); + parameter real ze = 0.5 from (0:1] `P(spice:name="ze" info="BE exponent factor"); + parameter real aje = 2.5 from [1:`INF) `P(spice:name="aje" info="Ratio of maximum to zero-bias value"); + +// Transit time + parameter real t0 = 0.0 from [0:`INF) `P(spice:name="t0" info="low current transit time at Vbici=0" test:value="5e-12" unit="s"); + parameter real dt0h = 0.0; // from [0:`INF) `P(spice:name="dt0h" info="Base width modulation contribution" test:value="2e-12" unit="s"); + parameter real tbvl = 0.0 from [0:`INF) `P(spice:name="tbvl" info="SCR width modulation contribution" test:value="4e-12" unit="s"); + parameter real tef0 = 0.0 from [0:`INF) `P(spice:name="tef0" info="Storage time in neutral emitter" test:value="1e-12" unit="s"); + parameter real gte = 1.0 from (0:10] `P(spice:name="gte" info="Exponent factor for emmiter transit time"); + parameter real thcs = 0.0 from [0:`INF) `P(spice:name="thcs" info="Saturation time at high current densities" test:value="3e-11" unit="s"); + parameter real ahc = 0.1 from (0:10] `P(spice:name="ahc" info="Smoothing facor for current dependence"); + parameter real tr = 0.0 from [0:`INF) `P(spice:name="tr" info="Storage time at inverse operation" unit="s"); + +// Critical current + parameter real rci0 = 150 from (0:`INF) `P(spice:name="rci0" info="Low-field collector resistance under emitter" test:value="50" unit="Ohm" m:inverse_factor="yes"); + parameter real vlim = 0.5 from (0:10] `P(spice:name="vlim" info="Voltage dividing ohmic and satur.region" unit="V"); + parameter real vpt = 100 from (0:100] `P(spice:name="vpt" info="Punch-through voltage" test:value="10" unit="V" default="infinity"); + parameter real vces = 0.1 from [0:1] `P(spice:name="vces" info="Saturation voltage" unit="V"); + +// BC depletion cap intern + parameter real cjci0 = 1.0e-20 from (0:`INF) `P(spice:name="cjci0" info="Total zero-bias BC depletion capacitance" test:value="1e-15" unit="F" m:factor="yes"); + parameter real vdci = 0.7 from (0:10] `P(spice:name="vdci" info="BC built-in voltage" test:value="0.7" unit="V"); + parameter real zci = 0.333 from (0:1] `P(spice:name="zci" info="BC exponent factor" test:value="0.4"); + parameter real vptci = 100 from (0:100] `P(spice:name="vptci" info="Punch-through voltage of BC junction" test:value="50" unit="V"); + +// BC depletion cap extern + parameter real cjcx0 = 1.0e-20 from [0:`INF) `P(spice:name="cjcx0" info="Zero-bias external BC depletion capacitance" unit="F" test:value="1e-15" m:factor="yes"); + parameter real vdcx = 0.7 from (0:10] `P(spice:name="vdcx" info="External BC built-in voltage" unit="V"); + parameter real zcx = 0.333 from (0:1] `P(spice:name="zcx" info="External BC exponent factor"); + parameter real vptcx = 100 from (0:100] `P(spice:name="vptcx" info="Punch-through voltage" unit="V" test:value="5.0" default="infinity"); + parameter real fbc = 1.0 from [0:1] `P(spice:name="fbc" info="Split factor = Cjci0/Cjc0" test:value="0.5"); + +// Base resistance + parameter real rbi0 = 0.0 from [0:`INF) `P(spice:name="rbi0" info="Internal base resistance at zero-bias" test:value="100" unit="Ohm" m:inverse_factor="yes"); + parameter real vr0e = 2.5 from (0:`INF] `P(spice:name="vr0e" info="forward Early voltage (normalization volt.)" unit="V"); + parameter real vr0c = `INF from (0:`INF] `P(spice:name="vr0c" info="forward Early voltage (normalization volt.)" unit="V" default="infinity" test:value="25.0"); + parameter real fgeo = 0.656 from [0:`INF] `P(spice:name="fgeo" info="Geometry factor" test:value="0.73"); + +// Series resistances + parameter real rbx = 0.0 from [0:`INF) `P(spice:name="rbx" info="External base series resistance" test:value="8.8" unit="Ohm" m:inverse_factor="yes"); + parameter real rcx = 0.0 from [0:`INF) `P(spice:name="rcx" info="Emitter series resistance" test:value="12.5" unit="Ohm" m:inverse_factor="yes"); + parameter real re = 0.0 from [0:`INF) `P(spice:name="re" info="External collector series resistance" test:value="9.16" unit="Ohm" m:inverse_factor="yes"); + +// Substrate transfer current, diode current and cap + parameter real itss = 0.0 from [0:1.0] `P(spice:name="itss" info="Substrate transistor transfer saturation current" unit="A" test:value="1e-17" m:factor="yes"); + parameter real msf = 1.0 from (0:10] `P(spice:name="msf" info="Substrate transistor transfer current non-ideality factor"); + parameter real iscs = 0.0 from [0:1.0] `P(spice:name="iscs" info="SC saturation current" unit="A" test:value="1e-17" m:factor="yes"); + parameter real msc = 1.0 from (0:10] `P(spice:name="msc" info="SC non-ideality factor"); + parameter real cjs0 = 1.0e-20 from [0:`INF) `P(spice:name="cjs0" info="Zero-bias SC depletion capacitance" unit="F" test:value="1e-15" m:factor="yes"); + parameter real vds = 0.3 from (0:10] `P(spice:name="vds" info="SC built-in voltage" unit="V"); + parameter real zs = 0.3 from (0:1] `P(spice:name="zs" info="External SC exponent factor"); + parameter real vpts = 100 from (0:100] `P(spice:name="vpts" info="SC punch-through voltage" unit="V" test:value="5.0" default="infinity"); + +// Parasitic caps + parameter real cbcpar = 0.0 from [0:`INF) `P(spice:name="cbcpar" info="Collector-base isolation (overlap) capacitance" unit="F" m:factor="yes" test:value="1e-15"); + parameter real cbepar = 0.0 from [0:`INF) `P(spice:name="cbepar" info="Emitter-base oxide capacitance" unit="F" m:factor="yes" test:value="2e-15"); + +// BC avalanche current + parameter real eavl = 0.0 from [0:inf) `P(spice:name="eavl" info="Exponent factor" test:value="1e-14"); + parameter real kavl = 0.0 from [0:`INF) `P(spice:name="kavl" info="Prefactor" test:value="1.19"); + +// Flicker noise + parameter real kf = 0.0 from [0:`INF) `P(spice:name="kf" info="flicker noise coefficient" unit="M^(1-AF)"); + parameter real af = 2.0 from (0:10] `P(spice:name="af" info="flicker noise exponent factor"); + +// Temperature dependance + parameter real vgb = 1.2 from (0:10] `P(spice:name="vgb" info="Bandgap-voltage" unit="V" test:value="1.17"); + parameter real vge = 1.17 from (0:10] `P(spice:name="vge" info="Effective emitter bandgap-voltage" unit="V" test:value="1.07"); + parameter real vgc = 1.17 from (0:10] `P(spice:name="vgc" info="Effective collector bandgap-voltage" unit="V" test:value="1.14"); + parameter real vgs = 1.17 from (0:10] `P(spice:name="vgs" info="Effective substrate bandgap-voltage" unit="V" test:value="1.17"); + parameter real f1vg =-1.02377e-4 `P(spice:name="f1vg" info="Coefficient K1 in T-dependent bandgap equation" unit="V/K"); + parameter real f2vg = 4.3215e-4 `P(spice:name="f2vg" info="Coefficient K2 in T-dependent bandgap equation" unit="V/K"); + parameter real alt0 = 0.0 `P(spice:name="alt0" info="Frist-order TC of tf0" unit="1/K"); + parameter real kt0 = 0.0 `P(spice:name="kt0" info="Second-order TC of tf0" unit="1/K^2"); + parameter real zetact = 3.0 `P(spice:name="zetact" info="Exponent coefficient in transfer current temperature dependence" test:value="3.5"); + parameter real zetabet = 3.5 `P(spice:name="zetabet" info="Exponent coefficient in BE junction current temperature dependence" test:value="4.0"); + parameter real zetaci = 0.0 `P(spice:name="zetaci" info="TC of epi-collector diffusivity" test:value="1.6"); + parameter real alvs = 0.0 `P(spice:name="alvs" info="Relative TC of satur.drift velocity" unit="1/K" test:value="1e-3"); + parameter real alces = 0.0 `P(spice:name="alces" info="Relative TC of vces" unit="1/K" test:value="4e-4"); + parameter real zetarbi = 0.0 `P(spice:name="zetarbi" info="TC of internal base resistance" test:value="0.6"); + parameter real zetarbx = 0.0 `P(spice:name="zetarbx" info="TC of external base resistance" test:value="0.2"); + parameter real zetarcx = 0.0 `P(spice:name="zetarcx" info="TC of external collector resistance" test:value="0.2"); + parameter real zetare = 0.0 `P(spice:name="zetare" info="TC of emitter resistances"); + parameter real alkav = 0.0 `P(spice:name="alkav" info="TC of avalanche prefactor" unit="1/K"); + parameter real aleav = 0.0 `P(spice:name="aleav" info="TC of avalanche exponential factor" unit="1/K"); + +// Self-heating + parameter integer flsh = 0 from [0:2] `P(spice:name="flsh" info="Flag for self-heating calculation" test:value="2"); + parameter real rth = 0.0 from [0:`INF) `P(spice:name="rth" info="Thermal resistance" test:value="200.0" unit="K/W" m:inverse_factor="yes"); + parameter real cth = 0.0 from [0:`INF) `P(spice:name="cth" info="Thermal capacitance" test:value="0.1" unit="Ws/K" m:factor="yes"); + // Transistor type - (*spice_isflag="yes", info="model type flag for npn" *) parameter integer npn = 1 from [0:1]; - (*info="model type flag for pnp" *) parameter integer pnp = 0 from [0:1]; + parameter integer npn = 1 from [0:1] `P(spice:isflag="yes" info="model type flag for npn" ); + parameter integer pnp = 0 from [0:1] `P(info="model type flag for pnp" ); //Circuit simulator specific parameters - (*spice_name="tnom", info="Temperature for which parameters are valid", unit="C"*) parameter real tnom = 27; - (*spice_name="dt", type="instance", info="Temperature change for particular transistor", unit="K"*) parameter real dt = 0.0; + parameter real tnom = 27 `P(spice:name="tnom" info="Temperature for which parameters are valid" unit="C"); + parameter real dt = 0.0 `P(spice:name="dt" type="instance" info="Temperature change for particular transistor" unit="K"); // Declaration of the variables: begin real _circuit_gmin; - real HICUMtype ; + real HICUMtype `P(spice:name="type" info="Device type from npn or pnp flags" unit="no" ask="yes"); // QCJMOD real cj0,vd,z,aj; @@ -359,17 +363,17 @@ module hic0_full (c,b,e,s,tnode); real cmax,cr,ve; real ee1,ez,ezr,vdj1,vdj2,ex1,vr,vj1,vj2,vj4; real qj1,qj2,qj3,qjf; - - + + //Cjfun *** VT, removed: BA real cj1,cj2,cj3,cjf; - - + + //cjtfun *** tnom,VT,mg,Vt0, removed: BA real vg; real vdj0,vdjt,cj0_t,vd_t,aj_t; - - + + // temperature and drift real VT,Tamb,Tdev,Tnom,dT,qtt0,ln_qtt0; real vde_t,vdci_t,vdcx_t,vds_t; @@ -381,23 +385,23 @@ module hic0_full (c,b,e,s,tnode); real aje_t; // bc charge and cap - (*ask="yes", info="B-C internal junction charge", unit="C"*) real qjci ; + real qjci `P(ask="yes" info="B-C internal junction charge" unit="C"); real qjcx,qjcii,cjcii,qjcxi,qjciii; //cjcx real cjci0_t_ii,cjcx0_t_ii,cjcx0_t_i,v_j; // be junction - (*ask="yes", info="B-E internal junction charge", unit="C"*) real qjei ; - (*ask="yes", info="B-E internal junction capacitance", unit="F"*) real cjei_i ; // dw: adms2.2.7 problem - real cjei,vf,vj,x,y,e1,e2; - + real qjei `P(ask="yes" info="B-E internal junction charge" unit="C"); + real cjei_i `P(ask="yes" info="B-E internal junction capacitance" unit="F"); // dw: adms2.2.7 problem + real cjei,vf,vj,x,y,e1,e2; + // transfer and internal base current real cc,qj_2,facl; real tf0,ickf,ickr,itfi,itri,qm; real qpt,itf,itr; - (*ask="yes", info="Transfer Current", unit="A"*) real it ; + real it `P(ask="yes" info="Transfer Current" unit="A"); real ibe,ire,ibi; real itfl,itrl,al,s3l,wl,d_qfh; - + // be diffusion charge real qf,qf0,dqfh,dqef; real dtef,dtfh,tf,ick; @@ -408,59 +412,60 @@ module hic0_full (c,b,e,s,tnode); // avalanche current source real v_bord,a_iavl,lncc; - + // base resistance - real rb,eta,rbi,qje,Qz_nom,fQz; + real rb,eta,rbi,qje,Qz_nom,fQz; // substrate transistor, diode and cap real qjs,HSa,HSb,HSI_Tsu,HSUM; // self heating real pterm; - + // new for temperature dependence real mg,zetabci,zetasct,zetatef,avs; - real k1,k2,vgbe,vgbc,vgsc,dvg; + real k1,k2,vgbe,vgbc,vgsc,dvg; real xvf,xvf2,dvj,uvc,Vt0; // noise real flicker_Pwr,fourkt,twoq; - + // LIN_EXP real le,arg,le1,arg1,le2,arg2; - + //HICDIO real IS,IST,UM1,U,Iz,DIOY; - + // branch voltages real Vbci,Vbici,Vbiei,Vciei,Vsci,Veie,Vbbi,Vcic,Vbe,Vrth; - + //Output to be seen - (*ask="yes", info="Base-collector diode current", unit="A"*) real ijbc ; - (*ask="yes", info="Avalanche current", unit="A"*) real iavl ; - (*ask="yes", info="Substrate-collector diode current", unit="A"*) real ijsc ; - (*ask="yes", info="Current through external to internal emitter node", unit="A"*) real Ieei ; - (*ask="yes", info="Current through external to internal collector node", unit="A"*) real Icci ; - (*ask="yes", info="Current through external to internal base node", unit="A"*) real Ibbi ; - (*ask="yes", info="Base-collector diode current minus the avalanche current", unit="A"*) real Ibici ; - (*ask="yes", info="Base-emitter diode current", unit="A"*) real ijbe ; + real ijbc `P(ask="yes" info="Base-collector diode current" unit="A"); + real iavl `P(ask="yes" info="Avalanche current" unit="A"); + real ijsc `P(ask="yes" info="Substrate-collector diode current" unit="A"); + real Ieei `P(ask="yes" info="Current through external to internal emitter node" unit="A"); + real Icci `P(ask="yes" info="Current through external to internal collector node" unit="A"); + real Ibbi `P(ask="yes" info="Current through external to internal base node" unit="A"); + real Ibici `P(ask="yes" info="Base-collector diode current minus the avalanche current" unit="A"); + real ijbe `P(ask="yes" info="Base-emitter diode current" unit="A"); real Qbci,Qbe,Qbici,Qbiei; //Declaration of the variables: end - + // -//======================== calculation of the transistor =================== +//======================== calculation of the transistor =================== // analog begin // assign voltages with regard to transistor type - begin : initial_model - if ($param_given(npn)) + `INITIAL_MODEL + begin + if (`PGIVEN(npn)) HICUMtype = `NPN; - else if ($param_given(pnp)) + else if (`PGIVEN(pnp)) HICUMtype = `PNP; else HICUMtype = `NPN; @@ -486,7 +491,7 @@ analog begin Tnom = tnom+273.15; Tamb = $temperature; Tdev = Tamb+dt+Vrth; - + // Limit temperature to avoid FPE's in equations if(Tdev < `TMIN + 273.15) begin Tdev = `TMIN + 273.15; @@ -498,15 +503,15 @@ analog begin Vt0 = `P_K*Tnom /`P_Q; VT = `P_K*Tdev /`P_Q; - dT = Tdev-Tnom; + dT = Tdev-Tnom; qtt0 = Tdev/Tnom; ln_qtt0 = ln(qtt0); k1 = f1vg*Tnom; k2 = f2vg*Tnom+k1*ln(Tnom); avs = alvs*Tnom; - vgbe = (vgb+vge)/2; - vgbc = (vgb+vgc)/2; - vgsc = (vgs+vgc)/2; + vgbe = (vgb+vge)/2; + vgbc = (vgb+vgc)/2; + vgsc = (vgs+vgc)/2; mg = 3-`P_Q*f1vg/`P_K; zetabci = mg+1-zetaci; zetasct = mg-1.5; //+1-m_upS with m_upS=2.5 @@ -546,13 +551,13 @@ analog begin // The cjcx0 value is used to switch between one (cjcx0=0) and two bc parameter sets // 1. For one parameter set only the internal bc set is partitioned by fbc // 2. For two independent sets only the external set is partitioned by fbc - - if (cjcx0_t==0) begin + + if (cjcx0_t==0) begin cjci0_t_ii = cjci0_t*fbc; // zero bias internal portion qjcxi = 0; cjcx0_t_i = cjci0_t*(1-fbc); // zero bias external portion `HICJQ(Vbci,cjcx0_t_i,vdci_t,zci,vptci,qjcx) - end else begin + end else begin cjci0_t_ii = cjci0_t; // zero bias internal portion cjcx0_t_ii = cjcx0_t*fbc; `HICJQ(Vbici,cjcx0_t_ii,vdcx_t,zcx,vptcx,qjcxi) @@ -561,9 +566,9 @@ analog begin end `HICJQ(Vbici,cjci0_t_ii,vdci_t,zci,vptci,qjci) qjcii = qjci+qjcxi; - + //Internal bc cap without punch through for cc - + //`HICJQ(Vbici,cjci0_t_ii,vdci_t,zci,100,qjciii) `QCMODF(Vbici,cjci0_t_ii,vdci_t,zci,2.4,cjcii) //cjcii = ddx(qjciii,V(bi)); @@ -577,7 +582,7 @@ analog begin // Critical current: ick vc = Vciei-vces_t; uvc = vc/VT-1; - vceff = VT*(1+0.5*(uvc+sqrt(uvc*uvc+1.921812))); + vceff = VT*(1+0.5*(uvc+sqrt(uvc*uvc+1.921812))); x = (vceff-vlim_t)/vpt; ick = vceff*(1+0.5*(x+sqrt(x*x+1e-3)))/rci0_t/sqrt(1+vceff*vceff/vlim_t/vlim_t); @@ -585,7 +590,7 @@ analog begin // Normalized BC cap and carge cc = cjci0_t_ii/cjcii; - qjci = qjci/cjci0_t_ii; + qjci = qjci/cjci0_t_ii; qj_2 = (1+qjci/vef)/2; // Minority charge transit time @@ -599,7 +604,7 @@ analog begin arg1 = Vbiei/(mcf*VT); `LIN_EXP(le1,arg1) itfi=is_t*le1; - + arg2 = Vbici/(mcr*VT); `LIN_EXP(le2,arg2) itri=is_t*le2; @@ -612,10 +617,10 @@ analog begin qpt = qj_2+sqrt((qj_2)*(qj_2)+qm); if (qpt<=1e-20) begin qpt=1e-20; - end + end // Low transfer current - itfl = itfi/qpt; + itfl = itfi/qpt; itrl = itri/qpt; // Normalized injection width with low transfer current @@ -627,7 +632,7 @@ analog begin s3l = sqrt(al*al+ahc); wl = (al+s3l)/(1+sqrt(1+ahc)); d_qfh = (wl*wl+tfh*itfl/ick)*itfl/iqfh; - + // Transfer current facl = 1/(1+d_qfh/qpt); itf = itfl*facl; @@ -649,15 +654,15 @@ analog begin tww = thcs_t*w*w; dqfh = tww*itf; dtfh = tww*(1+2*ick/itf/s3); - + // Emitter component dtef = tef0_t*exp(gte*ln(itf/ick)); dqef = dtef*itf/(gte+1.0); - -// Total minority charge and transit time + +// Total minority charge and transit time qf = qf0+dqef+dqfh; tf = tf0+dtfh+dtef; - + // BC diffusion charge qr = tr*itr; @@ -674,7 +679,7 @@ analog begin // Total base current ibi = ijbe+ijbc; -// Avalanche current +// Avalanche current if (Vbici < 0) begin : HICAVL v_bord = eavl_t*vdci_t; @@ -682,7 +687,7 @@ analog begin a_iavl = kavl_t/vdci_t*exp(-cc); iavl = itf*a_iavl*(v_bord+(1+cc)*(vdci_t-Vbici-v_bord)); end else begin - lncc = ln(1/cc); + lncc = ln(1/cc); iavl = kavl_t*itf*exp(-1/zci*lncc-eavl_t*exp((1/zci-1)*lncc)); end end else begin @@ -712,7 +717,7 @@ analog begin end else begin rbi = 0.0; end - // Total base resistance + // Total base resistance rb = rbi+rbx_t; // Parasitic substrate transistor transfer current @@ -734,7 +739,7 @@ analog begin // Self heating if (flsh == 1 && rth >= `MIN_R) begin - pterm = it*Vciei+iavl*(vdci_t-Vbici); + pterm = it*Vciei+iavl*(vdci_t-Vbici); end else if (flsh == 2 && rth >= `MIN_R) begin pterm = Vciei*it + (vdci_t-Vbici)*iavl + ijbe*Vbiei + ijbc*Vbici + ijsc*Vsci; if (rb >= `MIN_R) begin @@ -751,7 +756,7 @@ analog begin // // Compute branch sources // - + Ibici = ijbc - iavl; Qbci = cbcpar*Vbci; @@ -761,70 +766,70 @@ analog begin ijsc = HICUMtype*ijsc; qjs = HICUMtype*qjs; - qjcx = HICUMtype*qjcx; + qjcx = HICUMtype*qjcx; Qbci = HICUMtype*Qbci; Qbe = HICUMtype*Qbe; - + Ibici = HICUMtype*Ibici; Qbici = HICUMtype*Qbici; ijbe = HICUMtype*ijbe; - Qbiei = HICUMtype*Qbiei; + Qbiei = HICUMtype*Qbiei; it = HICUMtype*it; - + // // Define branch sources // I(br_biei) <+ _circuit_gmin*V(br_biei); I(br_bici) <+ _circuit_gmin*V(br_bici); - + I(br_bs) <+ HSI_Tsu; - I(br_sci) <+ ijsc + _circuit_gmin*V(br_sci); //`P(spectre_gmin="add", spectre_pwl_passive="1e10"); + I(br_sci) <+ ijsc + _circuit_gmin*V(br_sci); //`P(spectre:gmin="add" spectre:pwl_passive="1e10"); I(br_sci) <+ ddt(qjs); I(br_bci) <+ ddt(qjcx); I(br_bci) <+ ddt(Qbci); I(br_be) <+ ddt(Qbe); if (re >= `MIN_R) begin - I(br_eie_i) <+ Veie/re_t + _circuit_gmin*V(br_eie_i);//`P(spectre_gmin="add"); + I(br_eie_i) <+ Veie/re_t + _circuit_gmin*V(br_eie_i);//`P(spectre:gmin="add"); end else begin V(br_eie_v) <+ 0.0; end if (rcx >= `MIN_R) begin - I(br_cic_i) <+ Vcic/rcx_t + _circuit_gmin*V(br_cic_i);//`P(spectre_gmin="add"); + I(br_cic_i) <+ Vcic/rcx_t + _circuit_gmin*V(br_cic_i);//`P(spectre:gmin="add"); end else begin V(br_cic_v) <+ 0.0; end if (rbi0 >= `MIN_R || rbx >= `MIN_R) begin - I(br_bbi_i) <+ Vbbi/rb + _circuit_gmin*V(br_bbi_i); //`P(spectre_gmin="add"); + I(br_bbi_i) <+ Vbbi/rb + _circuit_gmin*V(br_bbi_i); //`P(spectre:gmin="add"); end else begin V(br_bbi_v) <+ 0.0; end - I(br_bici) <+ Ibici + _circuit_gmin*V(br_bici); //`P(spectre_gmin="add", spectre_pwl_sat_current="IMAX", spectre_pwl_sat_cond="imax/0.025", spectre_pwl_rev_current="imax", spectre_pwl_rev_cond="IMAX/0.025"); + I(br_bici) <+ Ibici + _circuit_gmin*V(br_bici); //`P(spectre:gmin="add" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="imax/0.025" spectre:pwl_rev_current="imax" spectre:pwl_rev_cond="IMAX/0.025"); I(br_bici) <+ ddt(Qbici); - I(br_biei) <+ ijbe + _circuit_gmin*V(br_biei); //`P(spectre_gmin="add", spectre_pwl_fwd_current="IBEIS*exp(25.0)", spectre_pwl_fwd_node="bi", spectre_pwl_fwd_cond="IBEIS*exp(25.0)/0.025", spectre_pwl_sat_current="IMAX", spectre_pwl_sat_cond="IMAX/0.025", spectre_pwl_passive="1e10"); + I(br_biei) <+ ijbe + _circuit_gmin*V(br_biei); //`P(spectre:gmin="add" spectre:pwl_fwd_current="IBEIS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IBEIS*exp(25.0)/0.025" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="IMAX/0.025" spectre:pwl_passive="1e10"); I(br_biei) <+ ddt(Qbiei); - I(br_ciei) <+ it; //`P(spectre_pwl_fwd_current="IS*exp(25.0)", spectre_pwl_fwd_node="bi", spectre_pwl_fwd_cond="IS*exp(25.0)/0.025", spectre_pwl_rev_current="IMAX", spectre_pwl_rev_cond="IMAX/0.025", spectre_pwl_passive="1e10") - + I(br_ciei) <+ it `P(spectre:pwl_fwd_current="IS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IS*exp(25.0)/0.025" spectre:pwl_rev_current="IMAX" spectre:pwl_rev_cond="IMAX/0.025" spectre:pwl_passive="1e10"); + // Following code is an intermediate solution: // ****************************************** if(flsh == 0 || rth < `MIN_R) begin I(br_sht) <+ Vrth/`MIN_R; end else begin - I(br_sht) <+ Vrth/rth-pterm + _circuit_gmin*V(br_sht);//`P(spectre_gmin="add"); + I(br_sht) <+ Vrth/rth-pterm + _circuit_gmin*V(br_sht);//`P(spectre:gmin="add"); I(br_sht) <+ ddt(cth*Vrth); end // ****************************************** - // For simulators having no problem with V(br_sht) <+ 0.0 + // For simulators having no problem with V(br_sht) <+ 0.0 // with external thermal node, follwing code may be used. // This external thermal node should remain accessible. // ******************************************** //if(flsh == 0 || rth < `MIN_R) begin // V(br_sht) <+ 0.0; //end else begin - // I(br_sht) <+ Vrth/rth-pterm `P(spectre_gmin="add"); + // I(br_sht) <+ Vrth/rth-pterm `P(spectre:gmin="add"); // I(br_sht) <+ ddt(cth*Vrth); //end // ******************************************** - + // Noise sources // Thermal noise fourkt = 4.0 * `P_K * Tdev; @@ -842,8 +847,8 @@ analog begin twoq = 2.0 * `P_Q; I(br_biei) <+ white_noise(twoq*ijbe); I(br_ciei) <+ white_noise(twoq*it); - -// Flicker noise + +// Flicker noise flicker_Pwr = kf*pow(ijbe,af); I(br_biei) <+ flicker_noise(flicker_Pwr,1.0); diff --git a/src/spicelib/devices/adms/mextram/admsva/bjt504t.va b/src/spicelib/devices/adms/mextram/admsva/bjt504t.va index 1d2920892..5e5bbea38 100644 --- a/src/spicelib/devices/adms/mextram/admsva/bjt504t.va +++ b/src/spicelib/devices/adms/mextram/admsva/bjt504t.va @@ -4,25 +4,31 @@ module bjt504tva (c, b, e, s, dt); +`ifdef insideADMS + `define P(p) (*p*) +`else + `define P(p) +`endif + // External ports inout c, b, e, s, dt; - (*info="external collector node"*) electrical c; - (*info="external base node"*) electrical b; - (*info="external emitter node"*) electrical e; - (*info="external substrate node"*) electrical s; - (*info="external thermal node"*) electrical dt; + electrical c `P(info="external collector node"); + electrical b `P(info="external base node"); + electrical e `P(info="external emitter node"); + electrical s `P(info="external substrate node"); + electrical dt `P(info="external thermal node"); // Internal nodes - (*info="internal collector node 1"*) electrical c1; - (*info="internal emitter node"*) electrical e1; - (*info="internal base node 1"*) electrical b1; - (*info="internal base node 2"*) electrical b2; - (*info="internal collector node 2"*) electrical c2; - (*info="internal collector node 3"*) electrical c3; - (*info="internal collector node 4"*) electrical c4; + electrical c1 `P(info="internal collector node 1"); + electrical e1 `P(info="internal emitter node"); + electrical b1 `P(info="internal base node 1"); + electrical b2 `P(info="internal base node 2"); + electrical c2 `P(info="internal collector node 2"); + electrical c3 `P(info="internal collector node 3"); + electrical c4 `P(info="internal collector node 4"); // For correlated noise implementation - (*info="internal noise node"*) electrical noi; + electrical noi `P(info="internal noise node"); `include "parameters.inc" `include "variables.inc" diff --git a/src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include b/src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include index 5974b65b4..d0064f197 100644 --- a/src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include +++ b/src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include @@ -21,45 +21,45 @@ // ////////////////////////////////////////// - (*info="Maximum current up to which forward current behaves exponentially", unit="A" *) parameter real IMAX = 1000 `from(`IMAX_cliplow ,inf ); - (*info="Zero-bias capacitance per unit-of-area of bottom component", unit="Fm^-2" *) parameter real CJORBOT = 1E-3 `from(`CJORBOT_cliplow ,inf ); - (*info="Zero-bias capacitance per unit-of-length of STI-edge component", unit="Fm^-1" *) parameter real CJORSTI = 1E-9 `from(`CJORSTI_cliplow ,inf ); - (*info="Zero-bias capacitance per unit-of-length of gate-edge component", unit="Fm^-1" *) parameter real CJORGAT = 1E-9 `from(`CJORGAT_cliplow ,inf ); - (*info="Built-in voltage at the reference temperature of bottom component", unit="V" *) parameter real VBIRBOT = 1 `from(`VBIR_cliplow ,inf ); - (*info="Built-in voltage at the reference temperature of STI-edge component", unit="V" *) parameter real VBIRSTI = 1 `from(`VBIR_cliplow ,inf ); - (*info="Built-in voltage at the reference temperature of gate-edge component", unit="V" *) parameter real VBIRGAT = 1 `from(`VBIR_cliplow ,inf ); - (*info="Grading coefficient of bottom component", unit="" *) parameter real PBOT = 0.5 `from(`P_cliplow ,`P_cliphigh ); - (*info="Grading coefficient of STI-edge component", unit="" *) parameter real PSTI = 0.5 `from(`P_cliplow ,`P_cliphigh ); - (*info="Grading coefficient of gate-edge component", unit="" *) parameter real PGAT = 0.5 `from(`P_cliplow ,`P_cliphigh ); - (*info="Zero-temperature bandgap voltage of bottom component", unit="V" *) parameter real PHIGBOT = 1.16 ; - (*info="Zero-temperature bandgap voltage of STI-edge component", unit="V" *) parameter real PHIGSTI = 1.16 ; - (*info="Zero-temperature bandgap voltage of gate-edge component", unit="V" *) parameter real PHIGGAT = 1.16 ; - (*info="Saturation current density at the reference temperature of bottom component", unit="Am^-2" *) parameter real IDSATRBOT = 1E-12 `from(`IDSATR_cliplow ,inf ); - (*info="Saturation current density at the reference temperature of STI-edge component", unit="Am^-1" *) parameter real IDSATRSTI = 1E-18 `from(`IDSATR_cliplow ,inf ); - (*info="Saturation current density at the reference temperature of gate-edge component", unit="Am^-1" *) parameter real IDSATRGAT = 1E-18 `from(`IDSATR_cliplow ,inf ); - (*info="Shockley-Read-Hall prefactor of bottom component", unit="Am^-3" *) parameter real CSRHBOT = 1E2 `from(`CSRH_cliplow ,inf ); - (*info="Shockley-Read-Hall prefactor of STI-edge component", unit="Am^-2" *) parameter real CSRHSTI = 1E-4 `from(`CSRH_cliplow ,inf ); - (*info="Shockley-Read-Hall prefactor of gate-edge component", unit="Am^-2" *) parameter real CSRHGAT = 1E-4 `from(`CSRH_cliplow ,inf ); - (*info="Junction depth of STI-edge component", unit="m" *) parameter real XJUNSTI = 100E-9 `from(`XJUN_cliplow ,inf ); - (*info="Junction depth of gate-edge component", unit="m" *) parameter real XJUNGAT = 100E-9 `from(`XJUN_cliplow ,inf ); - (*info="Trap-assisted tunneling prefactor of bottom component", unit="Am^-3" *) parameter real CTATBOT = 1E2 `from(`CTAT_cliplow ,inf ); - (*info="Trap-assisted tunneling prefactor of STI-edge component", unit="Am^-2" *) parameter real CTATSTI = 1E-4 `from(`CTAT_cliplow ,inf ); - (*info="Trap-assisted tunneling prefactor of gate-edge component", unit="Am^-2" *) parameter real CTATGAT = 1E-4 `from(`CTAT_cliplow ,inf ); - (*info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component", unit="" *) parameter real MEFFTATBOT = 0.25 `from(`MEFFTAT_cliplow ,inf ); - (*info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component", unit="" *) parameter real MEFFTATSTI = 0.25 `from(`MEFFTAT_cliplow ,inf ); - (*info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component", unit="" *) parameter real MEFFTATGAT = 0.25 `from(`MEFFTAT_cliplow ,inf ); - (*info="Band-to-band tunneling prefactor of bottom component", unit="AV^-3" *) parameter real CBBTBOT = 1E-12 `from(`CBBT_cliplow ,inf ); - (*info="Band-to-band tunneling prefactor of STI-edge component", unit="AV^-3m" *) parameter real CBBTSTI = 1E-18 `from(`CBBT_cliplow ,inf ); - (*info="Band-to-band tunneling prefactor of gate-edge component", unit="AV^-3m" *) parameter real CBBTGAT = 1E-18 `from(`CBBT_cliplow ,inf ); - (*info="Normalization field at the reference temperature for band-to-band tunneling of bottom component", unit="Vm^-1" *) parameter real FBBTRBOT = 1E9 ; - (*info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component", unit="Vm^-1" *) parameter real FBBTRSTI = 1E9 ; - (*info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component", unit="Vm^-1" *) parameter real FBBTRGAT = 1E9 ; - (*info="Temperature scaling parameter for band-to-band tunneling of bottom component", unit="K^-1" *) parameter real STFBBTBOT = -1E-3 ; - (*info="Temperature scaling parameter for band-to-band tunneling of STI-edge component", unit="K^-1" *) parameter real STFBBTSTI = -1E-3 ; - (*info="Temperature scaling parameter for band-to-band tunneling of gate-edge component", unit="K^-1" *) parameter real STFBBTGAT = -1E-3 ; - (*info="Breakdown voltage of bottom component", unit="V" *) parameter real VBRBOT = 10 `from(`VBR_cliplow ,inf ); - (*info="Breakdown voltage of STI-edge component", unit="V" *) parameter real VBRSTI = 10 `from(`VBR_cliplow ,inf ); - (*info="Breakdown voltage of gate-edge component", unit="V" *) parameter real VBRGAT = 10 `from(`VBR_cliplow ,inf ); - (*info="Breakdown onset tuning parameter of bottom component", unit="V" *) parameter real PBRBOT = 4 `from(`PBR_cliplow ,inf ); - (*info="Breakdown onset tuning parameter of STI-edge component", unit="V" *) parameter real PBRSTI = 4 `from(`PBR_cliplow ,inf ); - (*info="Breakdown onset tuning parameter of gate-edge component", unit="V" *) parameter real PBRGAT = 4 `from(`PBR_cliplow ,inf ); + parameter real IMAX = 1000 `from(`IMAX_cliplow ,inf ) `P(info="Maximum current up to which forward current behaves exponentially" unit="A" ); + parameter real CJORBOT = 1E-3 `from(`CJORBOT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-area of bottom component" unit="Fm^-2" ); + parameter real CJORSTI = 1E-9 `from(`CJORSTI_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of STI-edge component" unit="Fm^-1" ); + parameter real CJORGAT = 1E-9 `from(`CJORGAT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of gate-edge component" unit="Fm^-1" ); + parameter real VBIRBOT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of bottom component" unit="V" ); + parameter real VBIRSTI = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of STI-edge component" unit="V" ); + parameter real VBIRGAT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of gate-edge component" unit="V" ); + parameter real PBOT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of bottom component" unit="" ); + parameter real PSTI = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of STI-edge component" unit="" ); + parameter real PGAT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of gate-edge component" unit="" ); + parameter real PHIGBOT = 1.16 `P(info="Zero-temperature bandgap voltage of bottom component" unit="V" ); + parameter real PHIGSTI = 1.16 `P(info="Zero-temperature bandgap voltage of STI-edge component" unit="V" ); + parameter real PHIGGAT = 1.16 `P(info="Zero-temperature bandgap voltage of gate-edge component" unit="V" ); + parameter real IDSATRBOT = 1E-12 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of bottom component" unit="Am^-2" ); + parameter real IDSATRSTI = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of STI-edge component" unit="Am^-1" ); + parameter real IDSATRGAT = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of gate-edge component" unit="Am^-1" ); + parameter real CSRHBOT = 1E2 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of bottom component" unit="Am^-3" ); + parameter real CSRHSTI = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of STI-edge component" unit="Am^-2" ); + parameter real CSRHGAT = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of gate-edge component" unit="Am^-2" ); + parameter real XJUNSTI = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of STI-edge component" unit="m" ); + parameter real XJUNGAT = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of gate-edge component" unit="m" ); + parameter real CTATBOT = 1E2 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of bottom component" unit="Am^-3" ); + parameter real CTATSTI = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of STI-edge component" unit="Am^-2" ); + parameter real CTATGAT = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of gate-edge component" unit="Am^-2" ); + parameter real MEFFTATBOT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component" unit="" ); + parameter real MEFFTATSTI = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component" unit="" ); + parameter real MEFFTATGAT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component" unit="" ); + parameter real CBBTBOT = 1E-12 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of bottom component" unit="AV^-3" ); + parameter real CBBTSTI = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of STI-edge component" unit="AV^-3m" ); + parameter real CBBTGAT = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of gate-edge component" unit="AV^-3m" ); + parameter real FBBTRBOT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of bottom component" unit="Vm^-1" ); + parameter real FBBTRSTI = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component" unit="Vm^-1" ); + parameter real FBBTRGAT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component" unit="Vm^-1" ); + parameter real STFBBTBOT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of bottom component" unit="K^-1" ); + parameter real STFBBTSTI = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of STI-edge component" unit="K^-1" ); + parameter real STFBBTGAT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of gate-edge component" unit="K^-1" ); + parameter real VBRBOT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of bottom component" unit="V" ); + parameter real VBRSTI = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of STI-edge component" unit="V" ); + parameter real VBRGAT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of gate-edge component" unit="V" ); + parameter real PBRBOT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of bottom component" unit="V" ); + parameter real PBRSTI = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of STI-edge component" unit="V" ); + parameter real PBRGAT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of gate-edge component" unit="V" ); diff --git a/src/spicelib/devices/adms/psp102/admsva/PSP102_module.include b/src/spicelib/devices/adms/psp102/admsva/PSP102_module.include index f1756a185..7180ded1e 100644 --- a/src/spicelib/devices/adms/psp102/admsva/PSP102_module.include +++ b/src/spicelib/devices/adms/psp102/admsva/PSP102_module.include @@ -86,134 +86,134 @@ /////////////////////////////////////////////////// // Special model parameters, some are also simulator global variables - (*info="Model level", unit="" *) parameter real LEVEL = 102 ; - (*info="Channel type parameter, +1=NMOS -1=PMOS", unit="" *) parameter real TYPE = 1.0 `from( -1.0,1.0 ); - (*info="nominal (reference) temperature", unit="C" *) parameter real TR = 21.0 `from( -273.0,inf ); + parameter real LEVEL = 102 `P(info="Model level" unit="" ); + parameter real TYPE = 1.0 `from( -1.0,1.0 ) `P(info="Channel type parameter, +1=NMOS -1=PMOS" unit="" ); + parameter real TR = 21.0 `from( -273.0,inf ) `P(info="nominal (reference) temperature" unit="C" ); // Switch parameters that turn models or effects on or off - (*info="Flag for gate current, 0=turn off IG", unit="" *) parameter real SWIGATE = 0.0 `from( 0.0,1.0 ); - (*info="Flag for impact ionization current, 0=turn off II", unit="" *) parameter real SWIMPACT = 0.0 `from( 0.0,1.0 ); - (*info="Flag for GIDL current, 0=turn off IGIDL", unit="" *) parameter real SWGIDL = 0.0 `from( 0.0,1.0 ); - (*info="Flag for juncap, 0=turn off juncap", unit="" *) parameter real SWJUNCAP = 0.0 `from( 0.0,3.0 ); - (*info="Quantum-mechanical correction factor", unit="" *) parameter real QMC = 1.0 `from( 0.0,inf ); + parameter real SWIGATE = 0.0 `from( 0.0,1.0 ) `P(info="Flag for gate current, 0=turn off IG" unit="" ); + parameter real SWIMPACT = 0.0 `from( 0.0,1.0 ) `P(info="Flag for impact ionization current, 0=turn off II" unit="" ); + parameter real SWGIDL = 0.0 `from( 0.0,1.0 ) `P(info="Flag for GIDL current, 0=turn off IGIDL" unit="" ); + parameter real SWJUNCAP = 0.0 `from( 0.0,3.0 ) `P(info="Flag for juncap, 0=turn off juncap" unit="" ); + parameter real QMC = 1.0 `from( 0.0,inf ) `P(info="Quantum-mechanical correction factor" unit="" ); // Process parameters - (*info="Flatband voltage at TR", unit="V" *) parameter real VFB = -1.0 ; - (*info="Temperature dependence of VFB", unit="V/K" *) parameter real STVFB = 5.0e-4 ; - (*info="Gate oxide thickness", unit="m" *) parameter real TOX = 2.0e-09 `from( 1e-10,inf ); - (*info="Effective substrate doping", unit="m^-3" *) parameter real NEFF = 5.0e+23 `from( 1e20,1e26 ); - (*info="Effective doping bias-dependence parameter", unit="V" *) parameter real VNSUB = 0.0 ; - (*info="Effective doping bias-dependence parameter", unit="V" *) parameter real NSLP = 0.05 `from( 1e-3,inf ); - (*info="Effective doping bias-dependence parameter", unit="V^-1" *) parameter real DNSUB = 0.0 `from( 0.0,1.0 ); - (*info="Offset parameter for PHIB", unit="V" *) parameter real DPHIB = 0.0 ; - (*info="Gate poly-silicon doping", unit="m^-3" *) parameter real NP = 1.0e+26 `from( 0.0,inf ); - (*info="Interface states factor", unit="" *) parameter real CT = 0.0 `from( 0.0,inf ); - (*info="Overlap oxide thickness", unit="m" *) parameter real TOXOV = 2.0e-09 `from( 1e-10,inf ); - (*info="Effective doping of overlap region", unit="m^-3" *) parameter real NOV = 5.0e+25 `from( 1e20,1e27 ); + parameter real VFB = -1.0 `P(info="Flatband voltage at TR" unit="V" ); + parameter real STVFB = 5.0e-4 `P(info="Temperature dependence of VFB" unit="V/K" ); + parameter real TOX = 2.0e-09 `from( 1e-10,inf ) `P(info="Gate oxide thickness" unit="m" ); + parameter real NEFF = 5.0e+23 `from( 1e20,1e26 ) `P(info="Effective substrate doping" unit="m^-3" ); + parameter real VNSUB = 0.0 `P(info="Effective doping bias-dependence parameter" unit="V" ); + parameter real NSLP = 0.05 `from( 1e-3,inf ) `P(info="Effective doping bias-dependence parameter" unit="V" ); + parameter real DNSUB = 0.0 `from( 0.0,1.0 ) `P(info="Effective doping bias-dependence parameter" unit="V^-1" ); + parameter real DPHIB = 0.0 `P(info="Offset parameter for PHIB" unit="V" ); + parameter real NP = 1.0e+26 `from( 0.0,inf ) `P(info="Gate poly-silicon doping" unit="m^-3" ); + parameter real CT = 0.0 `from( 0.0,inf ) `P(info="Interface states factor" unit="" ); + parameter real TOXOV = 2.0e-09 `from( 1e-10,inf ) `P(info="Overlap oxide thickness" unit="m" ); + parameter real NOV = 5.0e+25 `from( 1e20,1e27 ) `P(info="Effective doping of overlap region" unit="m^-3" ); // DIBL parameters - (*info="DIBL-parameter", unit="V^-1" *) parameter real CF = 0.0 `from( 0.0,inf ); - (*info="Back bias dependence of CF", unit="V^-1" *) parameter real CFB = 0.0 `from( 0.0,1.0 ); + parameter real CF = 0.0 `from( 0.0,inf ) `P(info="DIBL-parameter" unit="V^-1" ); + parameter real CFB = 0.0 `from( 0.0,1.0 ) `P(info="Back bias dependence of CF" unit="V^-1" ); // Mobility parameters - (*info="Channel aspect ratio times zero-field mobility", unit="m^2/V/s" *) parameter real BETN = 7e-2 `from( 0.0,inf ); - (*info="Temperature dependence of BETN", unit="" *) parameter real STBET = 1.0 ; - (*info="Mobility reduction coefficient at TR", unit="m/V" *) parameter real MUE = 0.5 `from( 0.0,inf ); - (*info="Temperature dependence of MUE", unit="" *) parameter real STMUE = 0.0 ; - (*info="Mobility reduction exponent at TR", unit="" *) parameter real THEMU = 1.5 `from( 0.0,inf ); - (*info="Temperature dependence of THEMU", unit="" *) parameter real STTHEMU = 1.5 ; - (*info="Coulomb scattering parameter at TR", unit="" *) parameter real CS = 0.0 `from( 0.0,inf ); - (*info="Temperature dependence of CS", unit="" *) parameter real STCS = 0.0 ; - (*info="Non-universality factor", unit="V^-1" *) parameter real XCOR = 0.0 `from( 0.0,inf ); - (*info="Temperature dependence of XCOR", unit="" *) parameter real STXCOR = 0.0 ; - (*info="Effective field parameter", unit="" *) parameter real FETA = 1.0 `from( 0.0,inf ); + parameter real BETN = 7e-2 `from( 0.0,inf ) `P(info="Channel aspect ratio times zero-field mobility" unit="m^2/V/s" ); + parameter real STBET = 1.0 `P(info="Temperature dependence of BETN" unit="" ); + parameter real MUE = 0.5 `from( 0.0,inf ) `P(info="Mobility reduction coefficient at TR" unit="m/V" ); + parameter real STMUE = 0.0 `P(info="Temperature dependence of MUE" unit="" ); + parameter real THEMU = 1.5 `from( 0.0,inf ) `P(info="Mobility reduction exponent at TR" unit="" ); + parameter real STTHEMU = 1.5 `P(info="Temperature dependence of THEMU" unit="" ); + parameter real CS = 0.0 `from( 0.0,inf ) `P(info="Coulomb scattering parameter at TR" unit="" ); + parameter real STCS = 0.0 `P(info="Temperature dependence of CS" unit="" ); + parameter real XCOR = 0.0 `from( 0.0,inf ) `P(info="Non-universality factor" unit="V^-1" ); + parameter real STXCOR = 0.0 `P(info="Temperature dependence of XCOR" unit="" ); + parameter real FETA = 1.0 `from( 0.0,inf ) `P(info="Effective field parameter" unit="" ); // Series-resistance parameters (for resistance modeling as part of intrinsic mobility reduction) - (*info="Series resistance at TR", unit="Ohm" *) parameter real RS = 30 `from( 0.0,inf ); - (*info="Temperature dependence of RS", unit="" *) parameter real STRS = 1.0 ; - (*info="Back-bias dependence of series resistance", unit="V^-1" *) parameter real RSB = 0.0 `from( -0.5,1.0 ); - (*info="Gate-bias dependence of series resistance", unit="V^-1" *) parameter real RSG = 0.0 `from( -0.5,inf ); + parameter real RS = 30 `from( 0.0,inf ) `P(info="Series resistance at TR" unit="Ohm" ); + parameter real STRS = 1.0 `P(info="Temperature dependence of RS" unit="" ); + parameter real RSB = 0.0 `from( -0.5,1.0 ) `P(info="Back-bias dependence of series resistance" unit="V^-1" ); + parameter real RSG = 0.0 `from( -0.5,inf ) `P(info="Gate-bias dependence of series resistance" unit="V^-1" ); // Velocity saturation parameters - (*info="Velocity saturation parameter at TR", unit="V^-1" *) parameter real THESAT = 1.0 `from( 0.0,inf ); - (*info="Temperature dependence of THESAT", unit="" *) parameter real STTHESAT = 1.0 ; - (*info="Back-bias dependence of velocity saturation", unit="V^-1" *) parameter real THESATB = 0.0 `from( -0.5,1.0 ); - (*info="Gate-bias dependence of velocity saturation", unit="V^-1" *) parameter real THESATG = 0.0 `from( -0.5,inf ); + parameter real THESAT = 1.0 `from( 0.0,inf ) `P(info="Velocity saturation parameter at TR" unit="V^-1" ); + parameter real STTHESAT = 1.0 `P(info="Temperature dependence of THESAT" unit="" ); + parameter real THESATB = 0.0 `from( -0.5,1.0 ) `P(info="Back-bias dependence of velocity saturation" unit="V^-1" ); + parameter real THESATG = 0.0 `from( -0.5,inf ) `P(info="Gate-bias dependence of velocity saturation" unit="V^-1" ); // Saturation voltage parameters - (*info="Linear/saturation transition factor", unit="" *) parameter real AX = 3.0 `from( 2.0,inf ); + parameter real AX = 3.0 `from( 2.0,inf ) `P(info="Linear/saturation transition factor" unit="" ); // Channel length modulation (CLM) parameters - (*info="CLM pre-factor", unit="" *) parameter real ALP = 0.01 `from( 0.0,inf ); - (*info="CLM enhancement factor above threshold", unit="V" *) parameter real ALP1 = 0.00 `from( 0.0,inf ); - (*info="CLM enhancement factor below threshold", unit="V^-1" *) parameter real ALP2 = 0.00 `from( 0.0,inf ); - (*info="CLM logarithm dependence factor", unit="V" *) parameter real VP = 0.05 `from( 1e-10,inf ); + parameter real ALP = 0.01 `from( 0.0,inf ) `P(info="CLM pre-factor" unit="" ); + parameter real ALP1 = 0.00 `from( 0.0,inf ) `P(info="CLM enhancement factor above threshold" unit="V" ); + parameter real ALP2 = 0.00 `from( 0.0,inf ) `P(info="CLM enhancement factor below threshold" unit="V^-1" ); + parameter real VP = 0.05 `from( 1e-10,inf ) `P(info="CLM logarithm dependence factor" unit="V" ); // Impact ionization (II) parameters - (*info="Impact-ionization pre-factor", unit="" *) parameter real A1 = 1.0 `from( 0.0,inf ); - (*info="Impact-ionization exponent at TR", unit="V" *) parameter real A2 = 10.0 `from( 0.0,inf ); - (*info="Temperature dependence of A2", unit="V" *) parameter real STA2 = 0.0 ; - (*info="Saturation-voltage dependence of impact-ionization", unit="" *) parameter real A3 = 1.0 `from( 0.0,inf ); - (*info="Back-bias dependence of impact-ionization", unit="V^-0.5" *) parameter real A4 = 0.0 `from( 0.0,inf ); + parameter real A1 = 1.0 `from( 0.0,inf ) `P(info="Impact-ionization pre-factor" unit="" ); + parameter real A2 = 10.0 `from( 0.0,inf ) `P(info="Impact-ionization exponent at TR" unit="V" ); + parameter real STA2 = 0.0 `P(info="Temperature dependence of A2" unit="V" ); + parameter real A3 = 1.0 `from( 0.0,inf ) `P(info="Saturation-voltage dependence of impact-ionization" unit="" ); + parameter real A4 = 0.0 `from( 0.0,inf ) `P(info="Back-bias dependence of impact-ionization" unit="V^-0.5" ); // Gate current parameters - (*info="Gate tunnelling energy adjustment", unit="" *) parameter real GCO = 0.0 `from( -10.0,10.0 ); - (*info="Gate channel current pre-factor", unit="A" *) parameter real IGINV = 0.0 `from( 0.0,inf ); - (*info="Gate overlap current pre-factor", unit="A" *) parameter real IGOV = 0.0 `from( 0.0,inf ); - (*info="Temperature dependence of IGINV and IGOV", unit="" *) parameter real STIG = 2.0 ; - (*info="Gate current slope factor", unit="" *) parameter real GC2 = 0.375 `from( 0.0,10.0 ); - (*info="Gate current curvature factor", unit="" *) parameter real GC3 = 0.063 `from( -2.0,2.0 ); - (*info="Tunnelling barrier height", unit="V" *) parameter real CHIB = 3.1 `from( 1.0,inf ); + parameter real GCO = 0.0 `from( -10.0,10.0 ) `P(info="Gate tunnelling energy adjustment" unit="" ); + parameter real IGINV = 0.0 `from( 0.0,inf ) `P(info="Gate channel current pre-factor" unit="A" ); + parameter real IGOV = 0.0 `from( 0.0,inf ) `P(info="Gate overlap current pre-factor" unit="A" ); + parameter real STIG = 2.0 `P(info="Temperature dependence of IGINV and IGOV" unit="" ); + parameter real GC2 = 0.375 `from( 0.0,10.0 ) `P(info="Gate current slope factor" unit="" ); + parameter real GC3 = 0.063 `from( -2.0,2.0 ) `P(info="Gate current curvature factor" unit="" ); + parameter real CHIB = 3.1 `from( 1.0,inf ) `P(info="Tunnelling barrier height" unit="V" ); // Gate Induced Drain/Source Leakage (GIDL) parameters - (*info="GIDL pre-factor", unit="A/V^3" *) parameter real AGIDL = 0.0 `from( 0.0,inf ); - (*info="GIDL probability factor at TR", unit="V" *) parameter real BGIDL = 41.0 `from( 0.0,inf ); - (*info="Temperature dependence of BGIDL", unit="V/K" *) parameter real STBGIDL = 0.0 ; - (*info="Back-bias dependence of GIDL", unit="" *) parameter real CGIDL = 0.0 ; + parameter real AGIDL = 0.0 `from( 0.0,inf ) `P(info="GIDL pre-factor" unit="A/V^3" ); + parameter real BGIDL = 41.0 `from( 0.0,inf ) `P(info="GIDL probability factor at TR" unit="V" ); + parameter real STBGIDL = 0.0 `P(info="Temperature dependence of BGIDL" unit="V/K" ); + parameter real CGIDL = 0.0 `P(info="Back-bias dependence of GIDL" unit="" ); // Charge model parameters - (*info="Oxide capacitance for intrinsic channel", unit="F" *) parameter real COX = 1.0e-14 `from( 0.0,inf ); - (*info="Oxide capacitance for gate-drain/source overlap", unit="F" *) parameter real CGOV = 1.0e-15 `from( 0.0,inf ); - (*info="Oxide capacitance for gate-bulk overlap", unit="F" *) parameter real CGBOV = 0.0 `from( 0.0,inf ); - (*info="Outer fringe capacitance", unit="F" *) parameter real CFR = 0.0 `from( 0.0,inf ); + parameter real COX = 1.0e-14 `from( 0.0,inf ) `P(info="Oxide capacitance for intrinsic channel" unit="F" ); + parameter real CGOV = 1.0e-15 `from( 0.0,inf ) `P(info="Oxide capacitance for gate-drain/source overlap" unit="F" ); + parameter real CGBOV = 0.0 `from( 0.0,inf ) `P(info="Oxide capacitance for gate-bulk overlap" unit="F" ); + parameter real CFR = 0.0 `from( 0.0,inf ) `P(info="Outer fringe capacitance" unit="F" ); // Noise parameters - (*info="Thermal noise coefficient", unit="" *) parameter real FNT = 1.0 `from( 0.0,inf ); - (*info="First coefficient of flicker noise", unit="V^-1/m^4" *) parameter real NFA = 8.0e+22 `from( 0.0,inf ); - (*info="Second coefficient of flicker noise", unit="V^-1/m^2" *) parameter real NFB = 3.0e+07 `from( 0.0,inf ); - (*info="Third coefficient of flicker noise", unit="V^-1" *) parameter real NFC = 0.0 `from( 0.0,inf ); + parameter real FNT = 1.0 `from( 0.0,inf ) `P(info="Thermal noise coefficient" unit="" ); + parameter real NFA = 8.0e+22 `from( 0.0,inf ) `P(info="First coefficient of flicker noise" unit="V^-1/m^4" ); + parameter real NFB = 3.0e+07 `from( 0.0,inf ) `P(info="Second coefficient of flicker noise" unit="V^-1/m^2" ); + parameter real NFC = 0.0 `from( 0.0,inf ) `P(info="Third coefficient of flicker noise" unit="V^-1" ); `ifdef NQSmodel // NQS parameters - (*info="Flag for NQS, 0=off, 1, 2, 3, 5, or 9=number of collocation points", unit="" *) parameter real SWNQS = 0.0 `from( 0.0,9.0 ); - (*info="Relative mobility for NQS modelling" *) parameter real MUNQS = 1.0 `from( 0.0,inf ); - (*info="Gate resistance", unit="Ohm" *) parameter real RG = 1.0e-3 `from( 1.0e-6,inf ); - (*info="Bulk resistance between node BP and BI", unit="Ohm" *) parameter real RBULK = 1.0e-3 `from( 1.0e-6,inf ); - (*info="Well resistance between node BI and B", unit="Ohm" *) parameter real RWELL = 1.0e-3 `from( 1.0e-6,inf ); - (*info="Source-side bulk resistance between node BI and BS", unit="Ohm" *) parameter real RJUNS = 1.0e-3 `from( 1.0e-6,inf ); - (*info="Drain-side bulk resistance between node BI and BD", unit="Ohm" *) parameter real RJUND = 1.0e-3 `from( 1.0e-6,inf ); + parameter real SWNQS = 0.0 `from( 0.0,9.0 ) `P(info="Flag for NQS, 0=off, 1, 2, 3, 5, or 9=number of collocation points" unit="" ); + parameter real MUNQS = 1.0 `from( 0.0,inf ) `P(info="Relative mobility for NQS modelling" ); + parameter real RG = 1.0e-3 `from( 1.0e-6,inf ) `P(info="Gate resistance" unit="Ohm" ); + parameter real RBULK = 1.0e-3 `from( 1.0e-6,inf ) `P(info="Bulk resistance between node BP and BI" unit="Ohm" ); + parameter real RWELL = 1.0e-3 `from( 1.0e-6,inf ) `P(info="Well resistance between node BI and B" unit="Ohm" ); + parameter real RJUNS = 1.0e-3 `from( 1.0e-6,inf ) `P(info="Source-side bulk resistance between node BI and BS" unit="Ohm" ); + parameter real RJUND = 1.0e-3 `from( 1.0e-6,inf ) `P(info="Drain-side bulk resistance between node BI and BD" unit="Ohm" ); `endif // NQSmodel // JUNCAP Parameters - (*info="reference temperature", unit="C" *) parameter real TRJ = 21 `from(`TRJ_cliplow,inf); + parameter real TRJ = 21 `from(`TRJ_cliplow,inf) `P(info="reference temperature" unit="C" ); `include "JUNCAP200_parlist.include" // Other parameters - (*info="Temperature offset w.r.t. ambient temperature", unit="K" *) parameter real DTA = 0.0 ; + parameter real DTA = 0.0 `P(info="Temperature offset w.r.t. ambient temperature" unit="K" ); // Instance parameters - (*type="instance", info="Bottom area of source junction", unit="m^2" *) parameter real ABSOURCE = 1e-12 `from(`AB_cliplow,inf); - (*type="instance", info="STI-edge length of source junction", unit="m" *) parameter real LSSOURCE = 1e-6 `from(`LS_cliplow,inf); - (*type="instance", info="Gate-edge length of source junction", unit="m" *) parameter real LGSOURCE = 1e-6 `from(`LG_cliplow,inf); - (*type="instance", info="Bottom area of drain junction", unit="m^2" *) parameter real ABDRAIN = 1e-12 `from(`AB_cliplow,inf); - (*type="instance", info="STI-edge length of drain junction", unit="m" *) parameter real LSDRAIN = 1e-6 `from(`LS_cliplow,inf); - (*type="instance", info="Gate-edge length of drain junction", unit="m" *) parameter real LGDRAIN = 1e-6 `from(`LG_cliplow,inf); - (*type="instance", info="Bottom area of source junction", unit="m^2" *) parameter real AS = 1E-12 `from(`AB_cliplow,inf); - (*type="instance", info="Perimeter of source junction", unit="m" *) parameter real PS = 1E-6 `from(`LS_cliplow,inf); - (*type="instance", info="Bottom area of drain junction", unit="m^2" *) parameter real AD = 1E-12 `from(`AB_cliplow,inf); - (*type="instance", info="Perimeter of drain junction", unit="m" *) parameter real PD = 1E-6 `from(`LS_cliplow,inf); - (*type="instance", info="Gate-edge length of source/drain junction", unit="m" *) parameter real JW = 1E-6 `from(`LG_cliplow,inf); - (*type="instance", info="Number of devices in parallel", unit="" *) parameter real MULT = 1.0 `from( 0.0,inf ); + parameter real ABSOURCE = 1e-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of source junction" unit="m^2" ); + parameter real LSSOURCE = 1e-6 `from(`LS_cliplow,inf) `P(type="instance" info="STI-edge length of source junction" unit="m" ); + parameter real LGSOURCE = 1e-6 `from(`LG_cliplow,inf) `P(type="instance" info="Gate-edge length of source junction" unit="m" ); + parameter real ABDRAIN = 1e-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of drain junction" unit="m^2" ); + parameter real LSDRAIN = 1e-6 `from(`LS_cliplow,inf) `P(type="instance" info="STI-edge length of drain junction" unit="m" ); + parameter real LGDRAIN = 1e-6 `from(`LG_cliplow,inf) `P(type="instance" info="Gate-edge length of drain junction" unit="m" ); + parameter real AS = 1E-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of source junction" unit="m^2" ); + parameter real PS = 1E-6 `from(`LS_cliplow,inf) `P(type="instance" info="Perimeter of source junction" unit="m" ); + parameter real AD = 1E-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of drain junction" unit="m^2" ); + parameter real PD = 1E-6 `from(`LS_cliplow,inf) `P(type="instance" info="Perimeter of drain junction" unit="m" ); + parameter real JW = 1E-6 `from(`LG_cliplow,inf) `P(type="instance" info="Gate-edge length of source/drain junction" unit="m" ); + parameter real MULT = 1.0 `from( 0.0,inf ) `P(type="instance" info="Number of devices in parallel" unit="" ); `else // LocalModel `ifdef Binning @@ -225,239 +225,239 @@ /////////////////////////////////////////////////// // Special model parameters - (*info="Model level", unit="" *) parameter real LEVEL = 1020 ; - (*info="Channel type parameter, +1=NMOS -1=PMOS", unit="" *) parameter real TYPE = 1.0 `from( -1,1 ); + parameter real LEVEL = 1020 `P(info="Model level" unit="" ); + parameter real TYPE = 1.0 `from( -1,1 ) `P(info="Channel type parameter, +1=NMOS -1=PMOS" unit="" ); // Reference Temperature - (*info="nominal (reference) temperature", unit="C" *) parameter real TR = 21.0 `from( -273.0,inf ); + parameter real TR = 21.0 `from( -273.0,inf ) `P(info="nominal (reference) temperature" unit="C" ); // Switch parameters that turn models or effects on or off - (*info="Flag for gate current, 0=turn off IG", unit="" *) parameter real SWIGATE = 0.0 `from( 0.0,1.0 ); - (*info="Flag for impact ionization current, 0=turn off II", unit="" *) parameter real SWIMPACT = 0.0 `from( 0.0,1.0 ); - (*info="Flag for GIDL current, 0=turn off IGIDL", unit="" *) parameter real SWGIDL = 0.0 `from( 0.0,1.0 ); - (*info="Flag for juncap, 0=turn off juncap", unit="" *) parameter real SWJUNCAP = 0.0 `from( 0.0,3.0 ); - (*info="Quantum-mechanical correction factor", unit="" *) parameter real QMC = 1.0 `from( 0.0,inf ); + parameter real SWIGATE = 0.0 `from( 0.0,1.0 ) `P(info="Flag for gate current, 0=turn off IG" unit="" ); + parameter real SWIMPACT = 0.0 `from( 0.0,1.0 ) `P(info="Flag for impact ionization current, 0=turn off II" unit="" ); + parameter real SWGIDL = 0.0 `from( 0.0,1.0 ) `P(info="Flag for GIDL current, 0=turn off IGIDL" unit="" ); + parameter real SWJUNCAP = 0.0 `from( 0.0,3.0 ) `P(info="Flag for juncap, 0=turn off juncap" unit="" ); + parameter real QMC = 1.0 `from( 0.0,inf ) `P(info="Quantum-mechanical correction factor" unit="" ); // Process Parameters - (*info="Geom. independent difference between actual and programmed gate length", unit="m" *) parameter real LVARO = 0.0 ; - (*info="Length dependence of LVAR", unit="" *) parameter real LVARL = 0.0 ; - (*info="Width dependence of LVAR", unit="" *) parameter real LVARW = 0.0 ; - (*info="Effective channel length reduction per side", unit="m" *) parameter real LAP = 0.0 ; - (*info="Geom. independent difference between actual and programmed field-oxide opening", unit="m" *) parameter real WVARO = 0.0 ; - (*info="Length dependence of WVAR", unit="" *) parameter real WVARL = 0.0 ; - (*info="Width dependence of WVAR", unit="" *) parameter real WVARW = 0.0 ; - (*info="Effective channel width reduction per side", unit="m" *) parameter real WOT = 0.0 ; - (*info="Effective channel length reduction for CV", unit="m" *) parameter real DLQ = 0.0 ; - (*info="Effective channel width reduction for CV", unit="m" *) parameter real DWQ = 0.0 ; - (*info="Geometry-independent flat-band voltage at TR", unit="V" *) parameter real VFBO = -1.0 ; - (*info="Length dependence of flat-band voltage", unit="" *) parameter real VFBL = 0.0 ; - (*info="Width dependence of flat-band voltage", unit="" *) parameter real VFBW = 0.0 ; - (*info="Area dependence of flat-band voltage", unit="" *) parameter real VFBLW = 0.0 ; - (*info="Geometry-independent temperature dependence of VFB", unit="V/K" *) parameter real STVFBO = 5e-4 ; - (*info="Length dependence of temperature dependence of VFB", unit="" *) parameter real STVFBL = 0.0 ; - (*info="Width dependence of temperature dependence of VFB", unit="" *) parameter real STVFBW = 0.0 ; - (*info="Area dependence of temperature dependence of VFB", unit="" *) parameter real STVFBLW = 0.0 ; - (*info="Gate oxide thickness", unit="m" *) parameter real TOXO = 2e-9 `from( 1e-10,inf ); - (*info="Geometry independent substrate doping", unit="m^-3" *) parameter real NSUBO = 3e23 `from( 1e20,inf ); - (*info="Width dependence of background doping NSUBO due to segregation", unit="" *) parameter real NSUBW = 0.0 ; - (*info="Char. length of segregation of background doping NSUBO", unit="m" *) parameter real WSEG = 1e-8 `from( 1e-10,inf ); - (*info="Pocket doping level", unit="m^-3" *) parameter real NPCK = 1e24 `from( 0.0,inf ); - (*info="Width dependence of pocket doping NPCK due to segregation", unit="" *) parameter real NPCKW = 0.0 ; - (*info="Char. length of segregation of pocket doping NPCK", unit="m" *) parameter real WSEGP = 1e-8 `from( 1e-10,inf ); - (*info="Char. length of lateral doping profile", unit="m" *) parameter real LPCK = 1e-8 `from( 1e-10,inf ); - (*info="Width dependence of char. length of lateral doping profile", unit="" *) parameter real LPCKW = 0.0 ; - (*info="First length dependence coefficient for short channel body effect", unit="" *) parameter real FOL1 = 0.0 ; - (*info="Second length dependence coefficient for short channel body effect", unit="" *) parameter real FOL2 = 0.0 ; - (*info="Effective doping bias-dependence parameter", unit="V" *) parameter real VNSUBO = 0.0 ; - (*info="Effective doping bias-dependence parameter", unit="V" *) parameter real NSLPO = 0.05 ; - (*info="Effective doping bias-dependence parameter", unit="V^-1" *) parameter real DNSUBO = 0.0 ; - (*info="Geometry independent offset of PHIB", unit="V" *) parameter real DPHIBO = 0.0 ; - (*info="Length dependence offset of PHIB", unit="V" *) parameter real DPHIBL = 0.0 ; - (*info="Exponent for length dependence of offset of PHIB", unit="" *) parameter real DPHIBLEXP= 1.0 ; - (*info="Width dependence of offset of PHIB", unit="" *) parameter real DPHIBW = 0.0 ; - (*info="Area dependence of offset of PHIB", unit="" *) parameter real DPHIBLW = 0.0 ; - (*info="Geometry-independent gate poly-silicon doping", unit="m^-3" *) parameter real NPO = 1e26 ; - (*info="Length dependence of gate poly-silicon doping", unit="" *) parameter real NPL = 0.0 ; - (*info="Geometry-independent interface states factor", unit="" *) parameter real CTO = 0.0 ; - (*info="Length dependence of interface states factor", unit="" *) parameter real CTL = 0.0 ; - (*info="Exponent for length dependence of interface states factor", unit="" *) parameter real CTLEXP = 1.0 ; - (*info="Width dependence of interface states factor", unit="" *) parameter real CTW = 0.0 ; - (*info="Area dependence of interface states factor", unit="" *) parameter real CTLW = 0.0 ; - (*info="Overlap oxide thickness", unit="m" *) parameter real TOXOVO = 2e-9 `from( 1e-10,inf ); - (*info="Overlap length for gate/drain and gate/source overlap capacitance", unit="m" *) parameter real LOV = 0 `from( 0.0,inf ); - (*info="Effective doping of overlap region", unit="m^-3" *) parameter real NOVO = 5e25 ; + parameter real LVARO = 0.0 `P(info="Geom. independent difference between actual and programmed gate length" unit="m" ); + parameter real LVARL = 0.0 `P(info="Length dependence of LVAR" unit="" ); + parameter real LVARW = 0.0 `P(info="Width dependence of LVAR" unit="" ); + parameter real LAP = 0.0 `P(info="Effective channel length reduction per side" unit="m" ); + parameter real WVARO = 0.0 `P(info="Geom. independent difference between actual and programmed field-oxide opening" unit="m" ); + parameter real WVARL = 0.0 `P(info="Length dependence of WVAR" unit="" ); + parameter real WVARW = 0.0 `P(info="Width dependence of WVAR" unit="" ); + parameter real WOT = 0.0 `P(info="Effective channel width reduction per side" unit="m" ); + parameter real DLQ = 0.0 `P(info="Effective channel length reduction for CV" unit="m" ); + parameter real DWQ = 0.0 `P(info="Effective channel width reduction for CV" unit="m" ); + parameter real VFBO = -1.0 `P(info="Geometry-independent flat-band voltage at TR" unit="V" ); + parameter real VFBL = 0.0 `P(info="Length dependence of flat-band voltage" unit="" ); + parameter real VFBW = 0.0 `P(info="Width dependence of flat-band voltage" unit="" ); + parameter real VFBLW = 0.0 `P(info="Area dependence of flat-band voltage" unit="" ); + parameter real STVFBO = 5e-4 `P(info="Geometry-independent temperature dependence of VFB" unit="V/K" ); + parameter real STVFBL = 0.0 `P(info="Length dependence of temperature dependence of VFB" unit="" ); + parameter real STVFBW = 0.0 `P(info="Width dependence of temperature dependence of VFB" unit="" ); + parameter real STVFBLW = 0.0 `P(info="Area dependence of temperature dependence of VFB" unit="" ); + parameter real TOXO = 2e-9 `from( 1e-10,inf ) `P(info="Gate oxide thickness" unit="m" ); + parameter real NSUBO = 3e23 `from( 1e20,inf ) `P(info="Geometry independent substrate doping" unit="m^-3" ); + parameter real NSUBW = 0.0 `P(info="Width dependence of background doping NSUBO due to segregation" unit="" ); + parameter real WSEG = 1e-8 `from( 1e-10,inf ) `P(info="Char. length of segregation of background doping NSUBO" unit="m" ); + parameter real NPCK = 1e24 `from( 0.0,inf ) `P(info="Pocket doping level" unit="m^-3" ); + parameter real NPCKW = 0.0 `P(info="Width dependence of pocket doping NPCK due to segregation" unit="" ); + parameter real WSEGP = 1e-8 `from( 1e-10,inf ) `P(info="Char. length of segregation of pocket doping NPCK" unit="m" ); + parameter real LPCK = 1e-8 `from( 1e-10,inf ) `P(info="Char. length of lateral doping profile" unit="m" ); + parameter real LPCKW = 0.0 `P(info="Width dependence of char. length of lateral doping profile" unit="" ); + parameter real FOL1 = 0.0 `P(info="First length dependence coefficient for short channel body effect" unit="" ); + parameter real FOL2 = 0.0 `P(info="Second length dependence coefficient for short channel body effect" unit="" ); + parameter real VNSUBO = 0.0 `P(info="Effective doping bias-dependence parameter" unit="V" ); + parameter real NSLPO = 0.05 `P(info="Effective doping bias-dependence parameter" unit="V" ); + parameter real DNSUBO = 0.0 `P(info="Effective doping bias-dependence parameter" unit="V^-1" ); + parameter real DPHIBO = 0.0 `P(info="Geometry independent offset of PHIB" unit="V" ); + parameter real DPHIBL = 0.0 `P(info="Length dependence offset of PHIB" unit="V" ); + parameter real DPHIBLEXP= 1.0 `P(info="Exponent for length dependence of offset of PHIB" unit="" ); + parameter real DPHIBW = 0.0 `P(info="Width dependence of offset of PHIB" unit="" ); + parameter real DPHIBLW = 0.0 `P(info="Area dependence of offset of PHIB" unit="" ); + parameter real NPO = 1e26 `P(info="Geometry-independent gate poly-silicon doping" unit="m^-3" ); + parameter real NPL = 0.0 `P(info="Length dependence of gate poly-silicon doping" unit="" ); + parameter real CTO = 0.0 `P(info="Geometry-independent interface states factor" unit="" ); + parameter real CTL = 0.0 `P(info="Length dependence of interface states factor" unit="" ); + parameter real CTLEXP = 1.0 `P(info="Exponent for length dependence of interface states factor" unit="" ); + parameter real CTW = 0.0 `P(info="Width dependence of interface states factor" unit="" ); + parameter real CTLW = 0.0 `P(info="Area dependence of interface states factor" unit="" ); + parameter real TOXOVO = 2e-9 `from( 1e-10,inf ) `P(info="Overlap oxide thickness" unit="m" ); + parameter real LOV = 0 `from( 0.0,inf ) `P(info="Overlap length for gate/drain and gate/source overlap capacitance" unit="m" ); + parameter real NOVO = 5e25 `P(info="Effective doping of overlap region" unit="m^-3" ); // DIBL Parameters - (*info="Length dependence of DIBL-parameter", unit="V^-1" *) parameter real CFL = 0.0 ; - (*info="Exponent for length dependence of CF", unit="" *) parameter real CFLEXP = 2.0 ; - (*info="Width dependence of CF", unit="" *) parameter real CFW = 0.0 ; - (*info="Back-bias dependence of CF", unit="V^-1" *) parameter real CFBO = 0.0 ; + parameter real CFL = 0.0 `P(info="Length dependence of DIBL-parameter" unit="V^-1" ); + parameter real CFLEXP = 2.0 `P(info="Exponent for length dependence of CF" unit="" ); + parameter real CFW = 0.0 `P(info="Width dependence of CF" unit="" ); + parameter real CFBO = 0.0 `P(info="Back-bias dependence of CF" unit="V^-1" ); // Mobility Parameters - (*info="Zero-field mobility at TR", unit="m^2/V/s" *) parameter real UO = 5e-2 ; - (*info="Relative mobility decrease due to first lateral profile", unit="" *) parameter real FBET1 = 0.0 ; - (*info="Width dependence of relative mobility decrease due to first lateral profile", unit="" *) parameter real FBET1W = 0.0 ; - (*info="Mobility-related characteristic length of first lateral profile", unit="m" *) parameter real LP1 = 1e-8 `from( 1e-10,inf ); - (*info="Width dependence of mobility-related characteristic length of first lateral profile", unit="" *) parameter real LP1W = 0.0 ; - (*info="Relative mobility decrease due to second lateral profile", unit="" *) parameter real FBET2 = 0.0 ; - (*info="Mobility-related characteristic length of second lateral profile", unit="m" *) parameter real LP2 = 1e-8 `from( 1e-10,inf ); - (*info="First higher-order width scaling coefficient of BETN", unit="" *) parameter real BETW1 = 0.0 ; - (*info="Second higher-order width scaling coefficient of BETN", unit="" *) parameter real BETW2 = 0.0 ; - (*info="Characteristic width for width scaling of BETN", unit="m" *) parameter real WBET = 1e-9 `from( 1e-10,inf ); - (*info="Geometry independent temperature dependence of BETN", unit="" *) parameter real STBETO = 1.0 ; - (*info="Length dependence of temperature dependence of BETN", unit="" *) parameter real STBETL = 0.0 ; - (*info="Width dependence of temperature dependence of BETN", unit="" *) parameter real STBETW = 0.0 ; - (*info="Area dependence of temperature dependence of BETN", unit="" *) parameter real STBETLW = 0.0 ; - (*info="Geometry independent mobility reduction coefficient at TR", unit="m/V" *) parameter real MUEO = 0.5 ; - (*info="Width dependence of mobility reduction coefficient at TR", unit="" *) parameter real MUEW = 0.0 ; - (*info="Temperature dependence of MUE", unit="" *) parameter real STMUEO = 0.0 ; - (*info="Mobility reduction exponent at TR", unit="" *) parameter real THEMUO = 1.5 ; - (*info="Temperature dependence of THEMU", unit="" *) parameter real STTHEMUO = 1.5 ; - (*info="Geometry independent coulomb scattering parameter at TR", unit="" *) parameter real CSO = 0.0 ; - (*info="Length dependence of CS", unit="" *) parameter real CSL = 0.0 ; - (*info="Exponent for length dependence of CS", unit="" *) parameter real CSLEXP = 0.0 ; - (*info="Width dependence of CS", unit="" *) parameter real CSW = 0.0 ; - (*info="Area dependence of CS", unit="" *) parameter real CSLW = 0.0 ; - (*info="Temperature dependence of CS", unit="" *) parameter real STCSO = 0.0 ; - (*info="Geometry independent non-universality parameter", unit="V^-1" *) parameter real XCORO = 0.0 ; - (*info="Length dependence of non-universality parameter", unit="" *) parameter real XCORL = 0.0 ; - (*info="Width dependence of non-universality parameter", unit="" *) parameter real XCORW = 0.0 ; - (*info="Area dependence of non-universality parameter", unit="" *) parameter real XCORLW = 0.0 ; - (*info="Temperature dependence of XCOR", unit="" *) parameter real STXCORO = 0.0 ; - (*info="Effective field parameter", unit="" *) parameter real FETAO = 1.0 ; + parameter real UO = 5e-2 `P(info="Zero-field mobility at TR" unit="m^2/V/s" ); + parameter real FBET1 = 0.0 `P(info="Relative mobility decrease due to first lateral profile" unit="" ); + parameter real FBET1W = 0.0 `P(info="Width dependence of relative mobility decrease due to first lateral profile" unit="" ); + parameter real LP1 = 1e-8 `from( 1e-10,inf ) `P(info="Mobility-related characteristic length of first lateral profile" unit="m" ); + parameter real LP1W = 0.0 `P(info="Width dependence of mobility-related characteristic length of first lateral profile" unit="" ); + parameter real FBET2 = 0.0 `P(info="Relative mobility decrease due to second lateral profile" unit="" ); + parameter real LP2 = 1e-8 `from( 1e-10,inf ) `P(info="Mobility-related characteristic length of second lateral profile" unit="m" ); + parameter real BETW1 = 0.0 `P(info="First higher-order width scaling coefficient of BETN" unit="" ); + parameter real BETW2 = 0.0 `P(info="Second higher-order width scaling coefficient of BETN" unit="" ); + parameter real WBET = 1e-9 `from( 1e-10,inf ) `P(info="Characteristic width for width scaling of BETN" unit="m" ); + parameter real STBETO = 1.0 `P(info="Geometry independent temperature dependence of BETN" unit="" ); + parameter real STBETL = 0.0 `P(info="Length dependence of temperature dependence of BETN" unit="" ); + parameter real STBETW = 0.0 `P(info="Width dependence of temperature dependence of BETN" unit="" ); + parameter real STBETLW = 0.0 `P(info="Area dependence of temperature dependence of BETN" unit="" ); + parameter real MUEO = 0.5 `P(info="Geometry independent mobility reduction coefficient at TR" unit="m/V" ); + parameter real MUEW = 0.0 `P(info="Width dependence of mobility reduction coefficient at TR" unit="" ); + parameter real STMUEO = 0.0 `P(info="Temperature dependence of MUE" unit="" ); + parameter real THEMUO = 1.5 `P(info="Mobility reduction exponent at TR" unit="" ); + parameter real STTHEMUO = 1.5 `P(info="Temperature dependence of THEMU" unit="" ); + parameter real CSO = 0.0 `P(info="Geometry independent coulomb scattering parameter at TR" unit="" ); + parameter real CSL = 0.0 `P(info="Length dependence of CS" unit="" ); + parameter real CSLEXP = 0.0 `P(info="Exponent for length dependence of CS" unit="" ); + parameter real CSW = 0.0 `P(info="Width dependence of CS" unit="" ); + parameter real CSLW = 0.0 `P(info="Area dependence of CS" unit="" ); + parameter real STCSO = 0.0 `P(info="Temperature dependence of CS" unit="" ); + parameter real XCORO = 0.0 `P(info="Geometry independent non-universality parameter" unit="V^-1" ); + parameter real XCORL = 0.0 `P(info="Length dependence of non-universality parameter" unit="" ); + parameter real XCORW = 0.0 `P(info="Width dependence of non-universality parameter" unit="" ); + parameter real XCORLW = 0.0 `P(info="Area dependence of non-universality parameter" unit="" ); + parameter real STXCORO = 0.0 `P(info="Temperature dependence of XCOR" unit="" ); + parameter real FETAO = 1.0 `P(info="Effective field parameter" unit="" ); // Series Resistance - (*info="Source/drain series resistance for 1 um wide channel at TR", unit="Ohm" *) parameter real RSW1 = 2.5e3 ; - (*info="Higher-order width scaling of RS", unit="" *) parameter real RSW2 = 0.0 ; - (*info="Temperature dependence of RS", unit="" *) parameter real STRSO = 1.0 ; - (*info="Back-bias dependence of series resistance", unit="V^-1" *) parameter real RSBO = 0.0 ; - (*info="Gate-bias dependence of series resistance", unit="V^-1" *) parameter real RSGO = 0.0 ; + parameter real RSW1 = 2.5e3 `P(info="Source/drain series resistance for 1 um wide channel at TR" unit="Ohm" ); + parameter real RSW2 = 0.0 `P(info="Higher-order width scaling of RS" unit="" ); + parameter real STRSO = 1.0 `P(info="Temperature dependence of RS" unit="" ); + parameter real RSBO = 0.0 `P(info="Back-bias dependence of series resistance" unit="V^-1" ); + parameter real RSGO = 0.0 `P(info="Gate-bias dependence of series resistance" unit="V^-1" ); // Velocity Saturation - (*info="Geometry independent velocity saturation parameter at TR", unit="V^-1" *) parameter real THESATO = 0.0 ; - (*info="Length dependence of THESAT", unit="V^-1" *) parameter real THESATL = 0.05 ; - (*info="Exponent for length dependence of THESAT", unit="" *) parameter real THESATLEXP= 1.0 ; - (*info="Width dependence of velocity saturation parameter", unit="" *) parameter real THESATW = 0.0 ; - (*info="Area dependence of velocity saturation parameter", unit="" *) parameter real THESATLW = 0.0 ; - (*info="Geometry independent temperature dependence of THESAT", unit="" *) parameter real STTHESATO= 1.0 ; - (*info="Length dependence of temperature dependence of THESAT", unit="" *) parameter real STTHESATL= 0.0 ; - (*info="Width dependence of temperature dependence of THESAT", unit="" *) parameter real STTHESATW= 0.0 ; - (*info="Area dependence of temperature dependence of THESAT", unit="" *) parameter real STTHESATLW= 0.0 ; - (*info="Back-bias dependence of velocity saturation", unit="V^-1" *) parameter real THESATBO = 0.0 ; - (*info="Gate-bias dependence of velocity saturation", unit="V^-1" *) parameter real THESATGO = 0.0 ; + parameter real THESATO = 0.0 `P(info="Geometry independent velocity saturation parameter at TR" unit="V^-1" ); + parameter real THESATL = 0.05 `P(info="Length dependence of THESAT" unit="V^-1" ); + parameter real THESATLEXP= 1.0 `P(info="Exponent for length dependence of THESAT" unit="" ); + parameter real THESATW = 0.0 `P(info="Width dependence of velocity saturation parameter" unit="" ); + parameter real THESATLW = 0.0 `P(info="Area dependence of velocity saturation parameter" unit="" ); + parameter real STTHESATO= 1.0 `P(info="Geometry independent temperature dependence of THESAT" unit="" ); + parameter real STTHESATL= 0.0 `P(info="Length dependence of temperature dependence of THESAT" unit="" ); + parameter real STTHESATW= 0.0 `P(info="Width dependence of temperature dependence of THESAT" unit="" ); + parameter real STTHESATLW= 0.0 `P(info="Area dependence of temperature dependence of THESAT" unit="" ); + parameter real THESATBO = 0.0 `P(info="Back-bias dependence of velocity saturation" unit="V^-1" ); + parameter real THESATGO = 0.0 `P(info="Gate-bias dependence of velocity saturation" unit="V^-1" ); // Saturation Voltage - (*info="Geometry independent linear/saturation transition factor", unit="" *) parameter real AXO = 18 ; - (*info="Length dependence of AX", unit="" *) parameter real AXL = 0.4 `from( 0.0,inf ); + parameter real AXO = 18 `P(info="Geometry independent linear/saturation transition factor" unit="" ); + parameter real AXL = 0.4 `from( 0.0,inf ) `P(info="Length dependence of AX" unit="" ); // Channel Length Modulation - (*info="Length dependence of ALP", unit="" *) parameter real ALPL = 5e-4 ; - (*info="Exponent for length dependence of ALP", unit="" *) parameter real ALPLEXP = 1.0 ; - (*info="Width dependence of ALP", unit="" *) parameter real ALPW = 0.0 ; - (*info="Length dependence of CLM enhancement factor above threshold", unit="V" *) parameter real ALP1L1 = 0.0 ; - (*info="Exponent for length dependence of ALP1", unit="" *) parameter real ALP1LEXP = 0.5 ; - (*info="Second_order length dependence of ALP1", unit="" *) parameter real ALP1L2 = 0.0 `from( 0.0,inf ); - (*info="Width dependence of ALP1", unit="" *) parameter real ALP1W = 0.0 ; - (*info="Length dependence of CLM enhancement factor below threshold", unit="V^-1" *) parameter real ALP2L1 = 0.0 ; - (*info="Exponent for length dependence of ALP2", unit="" *) parameter real ALP2LEXP = 0.5 ; - (*info="Second_order length dependence of ALP2", unit="" *) parameter real ALP2L2 = 0.0 `from( 0.0,inf ); - (*info="Width dependence of ALP2", unit="" *) parameter real ALP2W = 0.0 ; - (*info="CLM logarithmic dependence parameter", unit="V" *) parameter real VPO = 0.05 ; + parameter real ALPL = 5e-4 `P(info="Length dependence of ALP" unit="" ); + parameter real ALPLEXP = 1.0 `P(info="Exponent for length dependence of ALP" unit="" ); + parameter real ALPW = 0.0 `P(info="Width dependence of ALP" unit="" ); + parameter real ALP1L1 = 0.0 `P(info="Length dependence of CLM enhancement factor above threshold" unit="V" ); + parameter real ALP1LEXP = 0.5 `P(info="Exponent for length dependence of ALP1" unit="" ); + parameter real ALP1L2 = 0.0 `from( 0.0,inf ) `P(info="Second_order length dependence of ALP1" unit="" ); + parameter real ALP1W = 0.0 `P(info="Width dependence of ALP1" unit="" ); + parameter real ALP2L1 = 0.0 `P(info="Length dependence of CLM enhancement factor below threshold" unit="V^-1" ); + parameter real ALP2LEXP = 0.5 `P(info="Exponent for length dependence of ALP2" unit="" ); + parameter real ALP2L2 = 0.0 `from( 0.0,inf ) `P(info="Second_order length dependence of ALP2" unit="" ); + parameter real ALP2W = 0.0 `P(info="Width dependence of ALP2" unit="" ); + parameter real VPO = 0.05 `P(info="CLM logarithmic dependence parameter" unit="V" ); // Weak-avalanche parameters - (*info="Geometry independent impact-ionization pre-factor", unit="" *) parameter real A1O = 1.0 ; - (*info="Length dependence of A1", unit="" *) parameter real A1L = 0.0 ; - (*info="Width dependence of A1", unit="" *) parameter real A1W = 0.0 ; - (*info="Impact-ionization exponent at TR", unit="V" *) parameter real A2O = 10 ; - (*info="Temperature dependence of A2", unit="V" *) parameter real STA2O = 0.0 ; - (*info="Geometry independent saturation-voltage dependence of II", unit="" *) parameter real A3O = 1.0 ; - (*info="Length dependence of A3", unit="" *) parameter real A3L = 0.0 ; - (*info="Width dependence of A3", unit="" *) parameter real A3W = 0.0 ; - (*info="Geometry independent back-bias dependence of II", unit="V^-0.5" *) parameter real A4O = 0.0 ; - (*info="Length dependence of A4", unit="" *) parameter real A4L = 0.0 ; - (*info="Width dependence of A4", unit="" *) parameter real A4W = 0.0 ; + parameter real A1O = 1.0 `P(info="Geometry independent impact-ionization pre-factor" unit="" ); + parameter real A1L = 0.0 `P(info="Length dependence of A1" unit="" ); + parameter real A1W = 0.0 `P(info="Width dependence of A1" unit="" ); + parameter real A2O = 10 `P(info="Impact-ionization exponent at TR" unit="V" ); + parameter real STA2O = 0.0 `P(info="Temperature dependence of A2" unit="V" ); + parameter real A3O = 1.0 `P(info="Geometry independent saturation-voltage dependence of II" unit="" ); + parameter real A3L = 0.0 `P(info="Length dependence of A3" unit="" ); + parameter real A3W = 0.0 `P(info="Width dependence of A3" unit="" ); + parameter real A4O = 0.0 `P(info="Geometry independent back-bias dependence of II" unit="V^-0.5" ); + parameter real A4L = 0.0 `P(info="Length dependence of A4" unit="" ); + parameter real A4W = 0.0 `P(info="Width dependence of A4" unit="" ); // Gate current parameters - (*info="Gate tunnelling energy adjustment", unit="" *) parameter real GCOO = 0.0 ; - (*info="Gate channel current pre-factor for 1 um^2 channel area", unit="A" *) parameter real IGINVLW = 0.0 ; - (*info="Gate overlap current pre-factor for 1 um wide channel", unit="A" *) parameter real IGOVW = 0.0 ; - (*info="Temperature dependence of IGINV and IGOV", unit="" *) parameter real STIGO = 2.0 ; - (*info="Gate current slope factor", unit="" *) parameter real GC2O = 0.375 ; - (*info="Gate current curvature factor", unit="" *) parameter real GC3O = 0.063 ; - (*info="Tunnelling barrier height", unit="V" *) parameter real CHIBO = 3.1 ; + parameter real GCOO = 0.0 `P(info="Gate tunnelling energy adjustment" unit="" ); + parameter real IGINVLW = 0.0 `P(info="Gate channel current pre-factor for 1 um^2 channel area" unit="A" ); + parameter real IGOVW = 0.0 `P(info="Gate overlap current pre-factor for 1 um wide channel" unit="A" ); + parameter real STIGO = 2.0 `P(info="Temperature dependence of IGINV and IGOV" unit="" ); + parameter real GC2O = 0.375 `P(info="Gate current slope factor" unit="" ); + parameter real GC3O = 0.063 `P(info="Gate current curvature factor" unit="" ); + parameter real CHIBO = 3.1 `P(info="Tunnelling barrier height" unit="V" ); // Gate-induced drain leakage parameters - (*info="Width dependence of GIDL pre-factor", unit="A/V^3" *) parameter real AGIDLW = 0.0 ; - (*info="GIDL probability factor at TR", unit="V" *) parameter real BGIDLO = 41 ; - (*info="Temperature dependence of BGIDL", unit="V/K" *) parameter real STBGIDLO = 0.0 ; - (*info="Back-bias dependence of GIDL", unit="" *) parameter real CGIDLO = 0.0 ; + parameter real AGIDLW = 0.0 `P(info="Width dependence of GIDL pre-factor" unit="A/V^3" ); + parameter real BGIDLO = 41 `P(info="GIDL probability factor at TR" unit="V" ); + parameter real STBGIDLO = 0.0 `P(info="Temperature dependence of BGIDL" unit="V/K" ); + parameter real CGIDLO = 0.0 `P(info="Back-bias dependence of GIDL" unit="" ); // Charge Model Parameters - (*info="Oxide capacitance for gate-bulk overlap for 1 um^2 area", unit="F" *) parameter real CGBOVL = 0.0 ; - (*info="Outer fringe capacitance for 1 um wide channel", unit="F" *) parameter real CFRW = 0.0 ; + parameter real CGBOVL = 0.0 `P(info="Oxide capacitance for gate-bulk overlap for 1 um^2 area" unit="F" ); + parameter real CFRW = 0.0 `P(info="Outer fringe capacitance for 1 um wide channel" unit="F" ); // Noise Model Parameters - (*info="Thermal noise coefficient", unit="" *) parameter real FNTO = 1.0 ; - (*info="First coefficient of flicker noise for 1 um^2 channel area", unit="V^-1/m^4" *) parameter real NFALW = 8e22 ; - (*info="Second coefficient of flicker noise for 1 um^2 channel area", unit="V^-1/m^2" *) parameter real NFBLW = 3e7 ; - (*info="Third coefficient of flicker noise for 1 um^2 channel area", unit="V^-1" *) parameter real NFCLW = 0.0 ; + parameter real FNTO = 1.0 `P(info="Thermal noise coefficient" unit="" ); + parameter real NFALW = 8e22 `P(info="First coefficient of flicker noise for 1 um^2 channel area" unit="V^-1/m^4" ); + parameter real NFBLW = 3e7 `P(info="Second coefficient of flicker noise for 1 um^2 channel area" unit="V^-1/m^2" ); + parameter real NFCLW = 0.0 `P(info="Third coefficient of flicker noise for 1 um^2 channel area" unit="V^-1" ); // Other Parameters - (*info="Temperature offset w.r.t. ambient circuit temperature", unit="K" *) parameter real DTA = 0 ; + parameter real DTA = 0 `P(info="Temperature offset w.r.t. ambient circuit temperature" unit="K" ); `endif // Binning `ifdef NQSmodel // NQS parameters - (*info="Flag for NQS, 0=off, 1, 2, 3, 5, or 9=number of collocation points", unit="" *) parameter real SWNQS = 0.0 `from( 0.0,9.0 ); - (*info="Relative mobility for NQS modelling" *) parameter real MUNQSO = 1.0 ; - (*info="Gate resistance" *) parameter real RGO = 1.0e-3 ; - (*info="Bulk resistance between node BP and BI", unit="Ohm" *) parameter real RBULKO = 1.0e-3 ; - (*info="Well resistance between node BI and B", unit="Ohm" *) parameter real RWELLO = 1.0e-3 ; - (*info="Source-side bulk resistance between node BI and BS", unit="Ohm" *) parameter real RJUNSO = 1.0e-3 ; - (*info="Drain-side bulk resistance between node BI and BD", unit="Ohm" *) parameter real RJUNDO = 1.0e-3 ; + parameter real SWNQS = 0.0 `from( 0.0,9.0 ) `P(info="Flag for NQS, 0=off, 1, 2, 3, 5, or 9=number of collocation points" unit="" ); + parameter real MUNQSO = 1.0 `P(info="Relative mobility for NQS modelling" ); + parameter real RGO = 1.0e-3 `P(info="Gate resistance" ); + parameter real RBULKO = 1.0e-3 `P(info="Bulk resistance between node BP and BI" unit="Ohm" ); + parameter real RWELLO = 1.0e-3 `P(info="Well resistance between node BI and B" unit="Ohm" ); + parameter real RJUNSO = 1.0e-3 `P(info="Source-side bulk resistance between node BI and BS" unit="Ohm" ); + parameter real RJUNDO = 1.0e-3 `P(info="Drain-side bulk resistance between node BI and BD" unit="Ohm" ); `endif // NQSmodel // Stress Model Parameters - (*info="Reference distance beteen OD-edge to poly from one side", unit="m" *) parameter real SAREF = 1.0e-6 `from( 1e-9,inf ); - (*info="Reference distance beteen OD-edge to poly from other side", unit="m" *) parameter real SBREF = 1.0e-6 `from( 1e-9,inf ); - (*info="Width parameter", unit="m" *) parameter real WLOD = 0 ; - (*info="Mobility degradation/enhancement coefficient", unit="m" *) parameter real KUO = 0 ; - (*info="Saturation velocity degradation/enhancement coefficient", unit="m" *) parameter real KVSAT = 0 `from( -1.0,1.0 ); - (*info="Temperature dependence of KUO", unit="" *) parameter real TKUO = 0 ; - (*info="Length dependence of KUO", unit="m^LLODKUO" *) parameter real LKUO = 0 ; - (*info="Width dependence of KUO", unit="m^WLODKUO" *) parameter real WKUO = 0 ; - (*info="Cross-term dependence of KUO", unit="m^(LLODKUO+WLODKUO)" *) parameter real PKUO = 0 ; - (*info="Length parameter for UO stress effect", unit="" *) parameter real LLODKUO = 0 `from( 0.0,inf ); - (*info="Width parameter for UO stress effect", unit="" *) parameter real WLODKUO = 0 `from( 0.0,inf ); - (*info="Threshold shift parameter", unit="Vm" *) parameter real KVTHO = 0 ; - (*info="Length dependence of KVTHO", unit="m^LLODVTH" *) parameter real LKVTHO = 0 ; - (*info="Width dependence of KVTHO", unit="m^WLODVTH" *) parameter real WKVTHO = 0 ; - (*info="Cross-term dependence of KVTHO", unit="m^(LLODVTH+WLODVTH)" *) parameter real PKVTHO = 0 ; - (*info="Length parameter for VTH-stress effect", unit="" *) parameter real LLODVTH = 0 `from( 0.0,inf ); - (*info="Width parameter for VTH-stress effect", unit="" *) parameter real WLODVTH = 0 `from( 0.0,inf ); - (*info="eta0 shift factor related to VTHO change", unit="m" *) parameter real STETAO = 0 ; - (*info="eta0 shift modifaction factor for stress effect", unit="" *) parameter real LODETAO = 1.0 `from( 0.0,inf ); + parameter real SAREF = 1.0e-6 `from( 1e-9,inf ) `P(info="Reference distance beteen OD-edge to poly from one side" unit="m" ); + parameter real SBREF = 1.0e-6 `from( 1e-9,inf ) `P(info="Reference distance beteen OD-edge to poly from other side" unit="m" ); + parameter real WLOD = 0 `P(info="Width parameter" unit="m" ); + parameter real KUO = 0 `P(info="Mobility degradation/enhancement coefficient" unit="m" ); + parameter real KVSAT = 0 `from( -1.0,1.0 ) `P(info="Saturation velocity degradation/enhancement coefficient" unit="m" ); + parameter real TKUO = 0 `P(info="Temperature dependence of KUO" unit="" ); + parameter real LKUO = 0 `P(info="Length dependence of KUO" unit="m^LLODKUO" ); + parameter real WKUO = 0 `P(info="Width dependence of KUO" unit="m^WLODKUO" ); + parameter real PKUO = 0 `P(info="Cross-term dependence of KUO" unit="m^(LLODKUO+WLODKUO)" ); + parameter real LLODKUO = 0 `from( 0.0,inf ) `P(info="Length parameter for UO stress effect" unit="" ); + parameter real WLODKUO = 0 `from( 0.0,inf ) `P(info="Width parameter for UO stress effect" unit="" ); + parameter real KVTHO = 0 `P(info="Threshold shift parameter" unit="Vm" ); + parameter real LKVTHO = 0 `P(info="Length dependence of KVTHO" unit="m^LLODVTH" ); + parameter real WKVTHO = 0 `P(info="Width dependence of KVTHO" unit="m^WLODVTH" ); + parameter real PKVTHO = 0 `P(info="Cross-term dependence of KVTHO" unit="m^(LLODVTH+WLODVTH)" ); + parameter real LLODVTH = 0 `from( 0.0,inf ) `P(info="Length parameter for VTH-stress effect" unit="" ); + parameter real WLODVTH = 0 `from( 0.0,inf ) `P(info="Width parameter for VTH-stress effect" unit="" ); + parameter real STETAO = 0 `P(info="eta0 shift factor related to VTHO change" unit="m" ); + parameter real LODETAO = 1.0 `from( 0.0,inf ) `P(info="eta0 shift modifaction factor for stress effect" unit="" ); // JUNCAP Parameters - (*info="reference temperature", unit="C"*) parameter real TRJ = 21 `from(`TRJ_cliplow,inf); + parameter real TRJ = 21 `from(`TRJ_cliplow,inf) `P(info="reference temperature" unit="C"); `include "JUNCAP200_parlist.include" // Instance parameters - (*type="instance", info="Design length", unit="m" *) parameter real L = 10e-6 `from( 1e-9,inf ); - (*type="instance", info="Design width", unit="m" *) parameter real W = 10e-6 `from( 1e-9,inf ); - (*type="instance", info="Distance beteen OD-edge to poly from one side", unit="m" *) parameter real SA = 0.0 ; - (*type="instance", info="Distance beteen OD-edge to poly from other side", unit="m" *) parameter real SB = 0.0 ; - (*type="instance", info="Bottom area of source junction", unit="m^2" *) parameter real ABSOURCE = 1E-12 `from(`AB_cliplow,inf); - (*type="instance", info="STI-edge length of source junction", unit="m" *) parameter real LSSOURCE = 1E-6 `from(`LS_cliplow,inf); - (*type="instance", info="Gate-edge length of source junction", unit="m" *) parameter real LGSOURCE = 1E-6 `from(`LG_cliplow,inf); - (*type="instance", info="Bottom area of drain junction", unit="m^2" *) parameter real ABDRAIN = 1E-12 `from(`AB_cliplow,inf); - (*type="instance", info="STI-edge length of drain junction", unit="m" *) parameter real LSDRAIN = 1E-6 `from(`LS_cliplow,inf); - (*type="instance", info="Gate-edge length of drain junction", unit="m" *) parameter real LGDRAIN = 1E-6 `from(`LG_cliplow,inf); - (*type="instance", info="Bottom area of source junction", unit="m^2" *) parameter real AS = 1E-12 `from(`AB_cliplow,inf); - (*type="instance", info="Perimeter of source junction", unit="m" *) parameter real PS = 1E-6 `from(`LS_cliplow,inf); - (*type="instance", info="Bottom area of drain junction", unit="m^2" *) parameter real AD = 1E-12 `from(`AB_cliplow,inf); - (*type="instance", info="Perimeter of drain junction", unit="m" *) parameter real PD = 1E-6 `from(`LS_cliplow,inf); - (*type="instance", info="Number of devices in parallel", unit="" *) parameter real MULT = 1.0 `from( 0.0,inf ); + parameter real L = 10e-6 `from( 1e-9,inf ) `P(type="instance" info="Design length" unit="m" ); + parameter real W = 10e-6 `from( 1e-9,inf ) `P(type="instance" info="Design width" unit="m" ); + parameter real SA = 0.0 `P(type="instance" info="Distance beteen OD-edge to poly from one side" unit="m" ); + parameter real SB = 0.0 `P(type="instance" info="Distance beteen OD-edge to poly from other side" unit="m" ); + parameter real ABSOURCE = 1E-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of source junction" unit="m^2" ); + parameter real LSSOURCE = 1E-6 `from(`LS_cliplow,inf) `P(type="instance" info="STI-edge length of source junction" unit="m" ); + parameter real LGSOURCE = 1E-6 `from(`LG_cliplow,inf) `P(type="instance" info="Gate-edge length of source junction" unit="m" ); + parameter real ABDRAIN = 1E-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of drain junction" unit="m^2" ); + parameter real LSDRAIN = 1E-6 `from(`LS_cliplow,inf) `P(type="instance" info="STI-edge length of drain junction" unit="m" ); + parameter real LGDRAIN = 1E-6 `from(`LG_cliplow,inf) `P(type="instance" info="Gate-edge length of drain junction" unit="m" ); + parameter real AS = 1E-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of source junction" unit="m^2" ); + parameter real PS = 1E-6 `from(`LS_cliplow,inf) `P(type="instance" info="Perimeter of source junction" unit="m" ); + parameter real AD = 1E-12 `from(`AB_cliplow,inf) `P(type="instance" info="Bottom area of drain junction" unit="m^2" ); + parameter real PD = 1E-6 `from(`LS_cliplow,inf) `P(type="instance" info="Perimeter of drain junction" unit="m" ); + parameter real MULT = 1.0 `from( 0.0,inf ) `P(type="instance" info="Number of devices in parallel" unit="" ); ////////////////////////// // @@ -632,98 +632,98 @@ real id_op, is, ig, ib, P_D, facvsb, facvsb0, sig1k; - (*ask="yes", info="Flag for channel type", unit=""*) real ctype ; - (*ask="yes", info="Flag for source-drain interchange", unit=""*) real sdint ; + real ctype `P(ask="yes" info="Flag for channel type" unit=""); + real sdint `P(ask="yes" info="Flag for source-drain interchange" unit=""); - (*ask="yes", info="Total source current", unit="A"*) real ise ; - (*ask="yes", info="Total gate current", unit="A"*) real ige ; - (*ask="yes", info="Total drain current", unit="A"*) real ide ; - (*ask="yes", info="Total bulk current", unit="A"*) real ibe ; - (*ask="yes", info="Drain current, excl. avalanche, tunnel, GISL, GIDL, and junction currents", unit="A"*) real ids ; - (*ask="yes", info="Drain to bulk current", unit="A"*) real idb ; - (*ask="yes", info="Source to bulk current", unit="A"*) real isb ; - (*ask="yes", info="Gate-source tunneling current", unit="A"*) real igs ; - (*ask="yes", info="Gate-drain tunneling current", unit="A"*) real igd ; - (*ask="yes", info="Gate-bulk tunneling current", unit="A"*) real igb ; - (*ask="yes", info="Gate-channel tunneling current (source component)", unit="A"*) real igcs ; - (*ask="yes", info="Gate-channel tunneling current (drain component)", unit="A"*) real igcd ; - (*ask="yes", info="Substrate current due to weak avelanche", unit="A"*) real iavl ; - (*ask="yes", info="Gate-induced source leakage current", unit="A"*) real igisl ; - (*ask="yes", info="Gate-induced drain leakage current", unit="A"*) real igidl ; - - (*ask="yes", info="Total source junction current", unit="A"*) real ijs ; - (*ask="yes", info="Source junction current (bottom component)", unit="A"*) real ijsbot ; - (*ask="yes", info="Source junction current (gate-edge component)", unit="A"*) real ijsgat ; - (*ask="yes", info="Source junction current (STI-edge component)", unit="A"*) real ijssti ; - (*ask="yes", info="Total drain junction current", unit="A"*) real ijd ; - (*ask="yes", info="Drain junction current (bottom component)", unit="A"*) real ijdbot ; - (*ask="yes", info="Drain junction current (gate-edge component)", unit="A"*) real ijdgat ; - (*ask="yes", info="Drain junction current (STI-edge component)", unit="A"*) real ijdsti ; - - (*ask="yes", info="Drain-source voltage", unit="V"*) real vds ; - (*ask="yes", info="Gate-source voltage", unit="V"*) real vgs ; - (*ask="yes", info="Source-bulk voltage", unit="V"*) real vsb ; - (*ask="yes", info="Zero-bias threshold voltage", unit="V"*) real vto ; - (*ask="yes", info="Threshold voltage including back bias effects", unit="V"*) real vts ; - (*ask="yes", info="Threshold voltage including back bias and drain bias effects", unit="V"*) real vth ; - (*ask="yes", info="Effective gate drive voltage including back bias and drain bias effects", unit="V"*) real vgt ; - (*ask="yes", info="Drain saturation voltage at actual bias", unit="V"*) real vdss ; - (*ask="yes", info="Saturation limit", unit="V"*) real vsat ; + real ise `P(ask="yes" info="Total source current" unit="A"); + real ige `P(ask="yes" info="Total gate current" unit="A"); + real ide `P(ask="yes" info="Total drain current" unit="A"); + real ibe `P(ask="yes" info="Total bulk current" unit="A"); + real ids `P(ask="yes" info="Drain current, excl. avalanche, tunnel, GISL, GIDL, and junction currents" unit="A"); + real idb `P(ask="yes" info="Drain to bulk current" unit="A"); + real isb `P(ask="yes" info="Source to bulk current" unit="A"); + real igs `P(ask="yes" info="Gate-source tunneling current" unit="A"); + real igd `P(ask="yes" info="Gate-drain tunneling current" unit="A"); + real igb `P(ask="yes" info="Gate-bulk tunneling current" unit="A"); + real igcs `P(ask="yes" info="Gate-channel tunneling current (source component)" unit="A"); + real igcd `P(ask="yes" info="Gate-channel tunneling current (drain component)" unit="A"); + real iavl `P(ask="yes" info="Substrate current due to weak avelanche" unit="A"); + real igisl `P(ask="yes" info="Gate-induced source leakage current" unit="A"); + real igidl `P(ask="yes" info="Gate-induced drain leakage current" unit="A"); + + real ijs `P(ask="yes" info="Total source junction current" unit="A"); + real ijsbot `P(ask="yes" info="Source junction current (bottom component)" unit="A"); + real ijsgat `P(ask="yes" info="Source junction current (gate-edge component)" unit="A"); + real ijssti `P(ask="yes" info="Source junction current (STI-edge component)" unit="A"); + real ijd `P(ask="yes" info="Total drain junction current" unit="A"); + real ijdbot `P(ask="yes" info="Drain junction current (bottom component)" unit="A"); + real ijdgat `P(ask="yes" info="Drain junction current (gate-edge component)" unit="A"); + real ijdsti `P(ask="yes" info="Drain junction current (STI-edge component)" unit="A"); + + real vds `P(ask="yes" info="Drain-source voltage" unit="V"); + real vgs `P(ask="yes" info="Gate-source voltage" unit="V"); + real vsb `P(ask="yes" info="Source-bulk voltage" unit="V"); + real vto `P(ask="yes" info="Zero-bias threshold voltage" unit="V"); + real vts `P(ask="yes" info="Threshold voltage including back bias effects" unit="V"); + real vth `P(ask="yes" info="Threshold voltage including back bias and drain bias effects" unit="V"); + real vgt `P(ask="yes" info="Effective gate drive voltage including back bias and drain bias effects" unit="V"); + real vdss `P(ask="yes" info="Drain saturation voltage at actual bias" unit="V"); + real vsat `P(ask="yes" info="Saturation limit" unit="V"); - (*ask="yes", info="Transconductance", unit="1/Ohm"*) real gm ; - (*ask="yes", info="Substrate transconductance", unit="1/Ohm"*) real gmb ; - (*ask="yes", info="Output conductance", unit="1/Ohm"*) real gds ; - (*ask="yes", info="Source junction conductance", unit="1/Ohm"*) real gjs ; - (*ask="yes", info="Drain junction conductance", unit="1/Ohm"*) real gjd ; + real gm `P(ask="yes" info="Transconductance" unit="1/Ohm"); + real gmb `P(ask="yes" info="Substrate transconductance" unit="1/Ohm"); + real gds `P(ask="yes" info="Output conductance" unit="1/Ohm"); + real gjs `P(ask="yes" info="Source junction conductance" unit="1/Ohm"); + real gjd `P(ask="yes" info="Drain junction conductance" unit="1/Ohm"); - (*ask="yes", info="Drain capacitance", unit="F"*) real cdd ; - (*ask="yes", info="Drain-gate capacitance", unit="F"*) real cdg ; - (*ask="yes", info="Drain-source capacitance", unit="F"*) real cds ; - (*ask="yes", info="Drain-bulk capacitance", unit="F"*) real cdb ; - (*ask="yes", info="Gate-drain capacitance", unit="F"*) real cgd ; - (*ask="yes", info="Gate capacitance", unit="F"*) real cgg ; - (*ask="yes", info="Gate-source capacitance", unit="F"*) real cgs ; - (*ask="yes", info="Gate-bulk capacitance", unit="F"*) real cgb ; - (*ask="yes", info="Source-drain capacitance", unit="F"*) real csd ; - (*ask="yes", info="Source-gate capacitance", unit="F"*) real csg ; - (*ask="yes", info="Source capacitance", unit="F"*) real css ; - (*ask="yes", info="Source-bulk capacitance", unit="F"*) real csb ; - (*ask="yes", info="Bulk-drain capacitance", unit="F"*) real cbd ; - (*ask="yes", info="Bulk-gate capacitance", unit="F"*) real cbg ; - (*ask="yes", info="Bulk-source capacitance", unit="F"*) real cbs ; - (*ask="yes", info="Bulk capacitance", unit="F"*) real cbb ; - (*ask="yes", info="Total gate-source overlap capacitance", unit="F"*) real cgsol ; - (*ask="yes", info="Total gate-drain overlap capacitance", unit="F"*) real cgdol ; + real cdd `P(ask="yes" info="Drain capacitance" unit="F"); + real cdg `P(ask="yes" info="Drain-gate capacitance" unit="F"); + real cds `P(ask="yes" info="Drain-source capacitance" unit="F"); + real cdb `P(ask="yes" info="Drain-bulk capacitance" unit="F"); + real cgd `P(ask="yes" info="Gate-drain capacitance" unit="F"); + real cgg `P(ask="yes" info="Gate capacitance" unit="F"); + real cgs `P(ask="yes" info="Gate-source capacitance" unit="F"); + real cgb `P(ask="yes" info="Gate-bulk capacitance" unit="F"); + real csd `P(ask="yes" info="Source-drain capacitance" unit="F"); + real csg `P(ask="yes" info="Source-gate capacitance" unit="F"); + real css `P(ask="yes" info="Source capacitance" unit="F"); + real csb `P(ask="yes" info="Source-bulk capacitance" unit="F"); + real cbd `P(ask="yes" info="Bulk-drain capacitance" unit="F"); + real cbg `P(ask="yes" info="Bulk-gate capacitance" unit="F"); + real cbs `P(ask="yes" info="Bulk-source capacitance" unit="F"); + real cbb `P(ask="yes" info="Bulk capacitance" unit="F"); + real cgsol `P(ask="yes" info="Total gate-source overlap capacitance" unit="F"); + real cgdol `P(ask="yes" info="Total gate-drain overlap capacitance" unit="F"); - (*ask="yes", info="Total source junction capacitance", unit="F"*) real cjs ; - (*ask="yes", info="Source junction capacitance (bottom component)", unit="F"*) real cjsbot ; - (*ask="yes", info="Source junction capacitance (gate-edge component)", unit="F"*) real cjsgat ; - (*ask="yes", info="Source junction capacitance (STI-edge component)", unit="F"*) real cjssti ; - (*ask="yes", info="Total drain junction capacitance", unit="F"*) real cjd ; - (*ask="yes", info="Drain junction capacitance (bottom component)", unit="F"*) real cjdbot ; - (*ask="yes", info="Drain junction capacitance (gate-edge component)", unit="F"*) real cjdgat ; - (*ask="yes", info="Drain junction capacitance (STI-edge component)", unit="F"*) real cjdsti ; + real cjs `P(ask="yes" info="Total source junction capacitance" unit="F"); + real cjsbot `P(ask="yes" info="Source junction capacitance (bottom component)" unit="F"); + real cjsgat `P(ask="yes" info="Source junction capacitance (gate-edge component)" unit="F"); + real cjssti `P(ask="yes" info="Source junction capacitance (STI-edge component)" unit="F"); + real cjd `P(ask="yes" info="Total drain junction capacitance" unit="F"); + real cjdbot `P(ask="yes" info="Drain junction capacitance (bottom component)" unit="F"); + real cjdgat `P(ask="yes" info="Drain junction capacitance (gate-edge component)" unit="F"); + real cjdsti `P(ask="yes" info="Drain junction capacitance (STI-edge component)" unit="F"); - (*ask="yes", info="Effective channel width for geometrical models", unit="m"*) real weff ; - (*ask="yes", info="Effective channel length for geometrical models", unit="m"*) real leff ; - (*ask="yes", info="Transistor gain", unit=""*) real u ; - (*ask="yes", info="Small-signal output resistance", unit="Ohm"*) real rout ; - (*ask="yes", info="Equivalent Early voltage", unit="V"*) real vearly ; - (*ask="yes", info="Gain factor", unit="A/V^2"*) real beff ; - (*ask="yes", info="Unity gain frequency at actual bias", unit="Hz"*) real fug ; - - (*ask="yes", info="Flicker noise current density at 1 Hz", unit="A/Hz"*) real sfl ; - (*ask="yes", info="Input-referred RMS white noise voltage density at 1 kHz", unit="V/sqrt(Hz)"*) real sqrtsff ; - (*ask="yes", info="Input-referred RMS white noise voltage density", unit="V/sqrt(Hz)"*) real sqrtsfw ; - (*ask="yes", info="White noise current density", unit="A^2/Hz"*) real sid ; - (*ask="yes", info="Induced gate noise current density at 1 Hz", unit="A^2/Hz"*) real sig ; - (*ask="yes", info="Imaginary part of correlation coefficient between Sig and Sid", unit=""*) real cigid ; - (*ask="yes", info="Cross-over frequency above which white noise is dominant", unit="Hz"*) real fknee ; - (*ask="yes", info="Gate-source current noise spectral density", unit="A^2/Hz"*) real sigs ; - (*ask="yes", info="Gate-drain current noise spectral density", unit="A^2/Hz"*) real sigd ; - (*ask="yes", info="Impact ionization current noise spectral density", unit="A^2/Hz"*) real siavl ; - (*ask="yes", info="Total source junction current noise spectral density", unit="A^2/Hz"*) real ssi ; - (*ask="yes", info="Total drain junction current noise specral density", unit="A^2/Hz"*) real sdi ; + real weff `P(ask="yes" info="Effective channel width for geometrical models" unit="m"); + real leff `P(ask="yes" info="Effective channel length for geometrical models" unit="m"); + real u `P(ask="yes" info="Transistor gain" unit=""); + real rout `P(ask="yes" info="Small-signal output resistance" unit="Ohm"); + real vearly `P(ask="yes" info="Equivalent Early voltage" unit="V"); + real beff `P(ask="yes" info="Gain factor" unit="A/V^2"); + real fug `P(ask="yes" info="Unity gain frequency at actual bias" unit="Hz"); + + real sfl `P(ask="yes" info="Flicker noise current density at 1 Hz" unit="A/Hz"); + real sqrtsff `P(ask="yes" info="Input-referred RMS white noise voltage density at 1 kHz" unit="V/sqrt(Hz)"); + real sqrtsfw `P(ask="yes" info="Input-referred RMS white noise voltage density" unit="V/sqrt(Hz)"); + real sid `P(ask="yes" info="White noise current density" unit="A^2/Hz"); + real sig `P(ask="yes" info="Induced gate noise current density at 1 Hz" unit="A^2/Hz"); + real cigid `P(ask="yes" info="Imaginary part of correlation coefficient between Sig and Sid" unit=""); + real fknee `P(ask="yes" info="Cross-over frequency above which white noise is dominant" unit="Hz"); + real sigs `P(ask="yes" info="Gate-source current noise spectral density" unit="A^2/Hz"); + real sigd `P(ask="yes" info="Gate-drain current noise spectral density" unit="A^2/Hz"); + real siavl `P(ask="yes" info="Impact ionization current noise spectral density" unit="A^2/Hz"); + real ssi `P(ask="yes" info="Total source junction current noise spectral density" unit="A^2/Hz"); + real sdi `P(ask="yes" info="Total drain junction current noise specral density" unit="A^2/Hz"); `endif // OPinfo /////////////////////////////////////////////////////////////////////////////