From 55a87d1b817e9a6bbbace99d8687d25e09db5b02 Mon Sep 17 00:00:00 2001 From: r29173 Date: Mon, 12 Dec 2011 21:02:18 +0000 Subject: [PATCH] Make veriloga models compliant with Language Reference Manual. They will not compile with --adms flag. --- .../devices/adms/hicum0/admsva/hicum0.va | 453 ++++++----- .../devices/adms/mextram/admsva/bjt504t.va | 32 +- .../psp102/admsva/JUNCAP200_parlist.include | 84 +- .../adms/psp102/admsva/PSP102_module.include | 732 +++++++++--------- 4 files changed, 645 insertions(+), 656 deletions(-) diff --git a/src/spicelib/devices/adms/hicum0/admsva/hicum0.va b/src/spicelib/devices/adms/hicum0/admsva/hicum0.va index 76dc6de91..90511a1a8 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,12 +39,8 @@ `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 @@ -146,7 +142,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;\ @@ -166,7 +162,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) @@ -193,24 +189,24 @@ end else begin\ Iz = 0.0;\ end - -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"); - - + +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; + + //Branch definitions branch (ci,c) br_cic_i; branch (ci,c) br_cic_v; @@ -219,143 +215,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 - 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"); - + 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); + // Transistor type - 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" ); + (*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]; //Circuit simulator specific parameters - 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"); + (*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; // Declaration of the variables: begin real _circuit_gmin; - real HICUMtype `P(spice:name="type" info="Device type from npn or pnp flags" unit="no" ask="yes"); + real HICUMtype ; // QCJMOD real cj0,vd,z,aj; @@ -363,17 +359,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; @@ -385,23 +381,23 @@ module hic0_full (c,b,e,s,tnode); real aje_t; // bc charge and cap - real qjci `P(ask="yes" info="B-C internal junction charge" unit="C"); + (*ask="yes", info="B-C internal junction charge", unit="C"*) real qjci ; real qjcx,qjcii,cjcii,qjcxi,qjciii; //cjcx real cjci0_t_ii,cjcx0_t_ii,cjcx0_t_i,v_j; // be junction - 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; - + (*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; + // transfer and internal base current real cc,qj_2,facl; real tf0,ickf,ickr,itfi,itri,qm; real qpt,itf,itr; - real it `P(ask="yes" info="Transfer Current" unit="A"); + (*ask="yes", info="Transfer Current", unit="A"*) real it ; 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; @@ -412,60 +408,59 @@ 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 - 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"); + (*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 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 - `INITIAL_MODEL - begin - if (`PGIVEN(npn)) + begin : initial_model + if ($param_given(npn)) HICUMtype = `NPN; - else if (`PGIVEN(pnp)) + else if ($param_given(pnp)) HICUMtype = `PNP; else HICUMtype = `NPN; @@ -491,7 +486,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; @@ -503,15 +498,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 @@ -551,13 +546,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) @@ -566,9 +561,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)); @@ -582,7 +577,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); @@ -590,7 +585,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 @@ -604,7 +599,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; @@ -617,10 +612,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 @@ -632,7 +627,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; @@ -654,15 +649,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; @@ -679,7 +674,7 @@ analog begin // Total base current ibi = ijbe+ijbc; -// Avalanche current +// Avalanche current if (Vbici < 0) begin : HICAVL v_bord = eavl_t*vdci_t; @@ -687,7 +682,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 @@ -717,7 +712,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 @@ -739,7 +734,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 @@ -756,7 +751,7 @@ analog begin // // Compute branch sources // - + Ibici = ijbc - iavl; Qbci = cbcpar*Vbci; @@ -766,70 +761,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; @@ -847,8 +842,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 5e5bbea38..1d2920892 100644 --- a/src/spicelib/devices/adms/mextram/admsva/bjt504t.va +++ b/src/spicelib/devices/adms/mextram/admsva/bjt504t.va @@ -4,31 +4,25 @@ 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; - 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"); + (*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; // Internal nodes - 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"); + (*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; // For correlated noise implementation - electrical noi `P(info="internal noise node"); + (*info="internal noise node"*) electrical noi; `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 d0064f197..5974b65b4 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 @@ // ////////////////////////////////////////// - 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" ); + (*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 ); diff --git a/src/spicelib/devices/adms/psp102/admsva/PSP102_module.include b/src/spicelib/devices/adms/psp102/admsva/PSP102_module.include index 7180ded1e..f1756a185 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 - 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" ); + (*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 ); // Switch parameters that turn models or effects on or off - 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="" ); + (*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 ); // Process parameters - 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" ); + (*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 ); // DIBL parameters - 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" ); + (*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 ); // Mobility parameters - 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="" ); + (*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 ); // Series-resistance parameters (for resistance modeling as part of intrinsic mobility reduction) - 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" ); + (*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 ); // Velocity saturation parameters - 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" ); + (*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 ); // Saturation voltage parameters - parameter real AX = 3.0 `from( 2.0,inf ) `P(info="Linear/saturation transition factor" unit="" ); + (*info="Linear/saturation transition factor", unit="" *) parameter real AX = 3.0 `from( 2.0,inf ); // Channel length modulation (CLM) parameters - 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" ); + (*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 ); // Impact ionization (II) parameters - 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" ); + (*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 ); // Gate current parameters - 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" ); + (*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 ); // Gate Induced Drain/Source Leakage (GIDL) parameters - 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="" ); + (*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 ; // Charge model parameters - 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" ); + (*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 ); // Noise parameters - 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" ); + (*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 ); `ifdef NQSmodel // NQS parameters - 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" ); + (*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 ); `endif // NQSmodel // JUNCAP Parameters - parameter real TRJ = 21 `from(`TRJ_cliplow,inf) `P(info="reference temperature" unit="C" ); + (*info="reference temperature", unit="C" *) parameter real TRJ = 21 `from(`TRJ_cliplow,inf); `include "JUNCAP200_parlist.include" // Other parameters - parameter real DTA = 0.0 `P(info="Temperature offset w.r.t. ambient temperature" unit="K" ); + (*info="Temperature offset w.r.t. ambient temperature", unit="K" *) parameter real DTA = 0.0 ; // Instance parameters - 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="" ); + (*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 ); `else // LocalModel `ifdef Binning @@ -225,239 +225,239 @@ /////////////////////////////////////////////////// // Special model parameters - 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="" ); + (*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 ); // Reference Temperature - parameter real TR = 21.0 `from( -273.0,inf ) `P(info="nominal (reference) temperature" unit="C" ); + (*info="nominal (reference) temperature", unit="C" *) parameter real TR = 21.0 `from( -273.0,inf ); // Switch parameters that turn models or effects on or off - 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="" ); + (*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 ); // Process Parameters - 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" ); + (*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 ; // DIBL Parameters - 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" ); + (*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 ; // Mobility Parameters - 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="" ); + (*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 ; // Series Resistance - 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" ); + (*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 ; // Velocity Saturation - 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" ); + (*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 ; // Saturation Voltage - 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="" ); + (*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 ); // Channel Length Modulation - 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" ); + (*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 ; // Weak-avalanche parameters - 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="" ); + (*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 ; // Gate current parameters - 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" ); + (*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 ; // Gate-induced drain leakage parameters - 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="" ); + (*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 ; // Charge Model Parameters - 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" ); + (*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 ; // Noise Model Parameters - 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" ); + (*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 ; // Other Parameters - parameter real DTA = 0 `P(info="Temperature offset w.r.t. ambient circuit temperature" unit="K" ); + (*info="Temperature offset w.r.t. ambient circuit temperature", unit="K" *) parameter real DTA = 0 ; `endif // Binning `ifdef NQSmodel // NQS parameters - 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" ); + (*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 ; `endif // NQSmodel // Stress Model Parameters - 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="" ); + (*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 ); // JUNCAP Parameters - parameter real TRJ = 21 `from(`TRJ_cliplow,inf) `P(info="reference temperature" unit="C"); + (*info="reference temperature", unit="C"*) parameter real TRJ = 21 `from(`TRJ_cliplow,inf); `include "JUNCAP200_parlist.include" // Instance parameters - 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="" ); + (*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 ); ////////////////////////// // @@ -632,98 +632,98 @@ real id_op, is, ig, ib, P_D, facvsb, facvsb0, sig1k; - 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="Flag for channel type", unit=""*) real ctype ; + (*ask="yes", info="Flag for source-drain interchange", unit=""*) real sdint ; - 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"); + (*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 ; - 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"); + (*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 ; - 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="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 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="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 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="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 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="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 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"); + (*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 ; - 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"); + (*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 ; `endif // OPinfo /////////////////////////////////////////////////////////////////////////////