| Circuit componentsRemember that this tutorial is not 
                    exhaustive by any means, and that all descriptions for 
                    elements in the SPICE language are documented here in 
                    condensed form. SPICE is a very capable piece of software 
                    with lots of options, and I'm only going to document a few 
                    of them.  All components in a SPICE source file 
                    are primarily identified by the first letter in each 
                    respective line. Characters following the identifying letter 
                    are used to distinguish one component of a certain type from 
                    another of the same type (r1, r2, r3, rload, rpullup, etc.), 
                    and need not follow any particular naming convention, so 
                    long as no more than eight characters are used in both the 
                    component identifying letter and the distinguishing name.
                     For example, suppose you were simulating a 
                    digital circuit with "pullup" and "pulldown" resistors. The 
                    name rpullup would be valid because it is seven 
                    characters long. The name rpulldown, however, is 
                    nine characters long. This may cause problems when SPICE 
                    interprets the netlist.  You can actually get away with component 
                    names in excess of eight total characters if there are no 
                    other similarly-named components in the source file. SPICE 
                    only pays attention to the first eight characters of the 
                    first field in each line, so rpulldown is actually 
                    interpreted as rpulldow with the "n" at the end 
                    being ignored. Therefore, any other resistor having the 
                    first eight characters in its first field will be seen by 
                    SPICE as the same resistor, defined twice, which will cause 
                    an error (i.e. rpulldown1 and rpulldown2 
                    would be interpreted as the same name, rpulldow).
                     It should also be noted that SPICE ignores 
                    character case, so r1 and R1 are 
                    interpreted by SPICE as one and the same.  SPICE allows the use of metric prefixes in 
                    specifying component values, which is a very handy feature. 
                    However, the prefix convention used by SPICE differs 
                    somewhat from standard metric symbols, primarily due to the 
                    fact that netlists are restricted to standard ASCII 
                    characters (ruling out Greek letters such as � for the 
                    prefix "micro") and that SPICE is case-insensitive, so "m" 
                    (which is the standard symbol for "milli") and "M" (which is 
                    the standard symbol for "Mega") are interpreted identically. 
                    Here are a few examples of prefixes used in SPICE netlists:
                       r1 1 0 2t (Resistor R1, 
                    2t = 2 Tera-ohms = 2 TΩ)  r2 1 0 4g (Resistor R2, 
                    4g = 4 Giga-ohms = 4 GΩ)  r3 1 0 47meg (Resistor R3, 
                    47meg = 47 Mega-ohms = 47 MΩ)  r4 1 0 3.3k (Resistor R4, 
                    3.3k = 3.3 kilo-ohms = 3.3 kΩ)  r5 1 0 55m (Resistor R5, 
                    55m = 55 milli-ohms = 55 mΩ)  r6 1 0 10u (Resistor R6, 
                    10u = 10 micro-ohms 10 �Ω)  r7 1 0 30n (Resistor R7, 
                    30n = 30 nano-ohms = 30 nΩ)  r8 1 0 5p (Resistor R8, 
                    5p = 5 pico-ohms = 5 pΩ)  r9 1 0 250f (Resistor R9, 
                    250f = 250 femto-ohms = 250 fΩ)    Scientific notation is also allowed in 
                    specifying component values. For example:  r10 1 0 4.7e3 (Resistor R10, 4.7e3 = 4.7 
                    x 103 ohms = 4.7 kilo-ohms = 4.7 kΩ)
 r11 1 0 1e-12 (Resistor R11, 
                    1e-12 = 1 x 10-12 ohms = 1 pico-ohm = 1 pΩ)    The unit (ohms, volts, farads, henrys, etc.) 
                    is automatically determined by the type of component being 
                    specified. SPICE "knows" that all of the above examples are 
                    "ohms" because they are all resistors (r1, r2, r3, . . . ). 
                    If they were capacitors, the values would be interpreted as 
                    "farads," if inductors, then "henrys," etc.  Passive componentsCAPACITORS:
 General form:  c[name] [node1] [node2] [value] ic=[initial voltage]
Example 1:     c1 12 33 10u 
Example 2:     c1 12 33 10u ic=3.5
 Comments: The "initial condition" (ic=) 
                    variable is the capacitor's voltage in units of volts 
                    at the start of DC analysis. It is an optional value, with 
                    the starting voltage assumed to be zero if unspecified. 
                    Starting current values for capacitors are interpreted by 
                    SPICE only if the .tran analysis option is invoked 
                    (with the "uic" option).    INDUCTORS:  General form:  l[name] [node1] [node2] [value] ic=[initial current]
Example 1:     l1 12 33 133m 
Example 2:     l1 12 33 133m ic=12.7m
 Comments: The "initial condition" (ic=) 
                    variable is the inductor's current in units of amps 
                    at the start of DC analysis. It is an optional value, with 
                    the starting current assumed to be zero if unspecified. 
                    Starting current values for inductors are interpreted by 
                    SPICE only if the .tran analysis option is invoked.    INDUCTOR COUPLING (transformers):  General form:  k[name] l[name] l[name] [coupling factor]
Example 1:     k1 l1 l2 0.999
 Comments: SPICE will only allow 
                    coupling factor values between 0 and 1 (non-inclusive), with 
                    0 representing no coupling and 1 representing perfect 
                    coupling. The order of specifying coupled inductors (l1, l2 
                    or l2, l1) is irrelevant.    RESISTORS:  General form:  r[name] [node1] [node2] [value]
Example:       rload 23 15 3.3k
 Comments: In case you were wondering, 
                    there is no declaration of resistor power dissipation rating 
                    in SPICE. All components are assumed to be indestructible. 
                    If only real life were this forgiving!  Active components
 All semiconductor components must have their 
                    electrical characteristics described in a line starting with 
                    the word ".model", which tells SPICE exactly how 
                    the device will behave. Whatever parameters are not 
                    explicitly defined in the .model card will default 
                    to values pre-programmed in SPICE. However, the .model 
                    card must be included, and at least specify the model 
                    name and device type (d, npn, pnp, njf, pjf, nmos, or pmos).
                       DIODES:  General form:  d[name] [anode] [cathode] [model]
Example:       d1 1 2 mod1
 DIODE MODELS:  General form:  .model [modelname] d [parmtr1=x] [parmtr2=x] . . .
Example:       .model mod1 d
Example:       .model mod2 d vj=0.65 rs=1.3
 Parameter definitions:  is = saturation current in amps  rs = junction resistance in ohms
                     n = emission coefficient (unitless)
                     tt = transit time in seconds  cjo = zero-bias junction 
                    capacitance in farads  vj = junction potential in volts
                     m = grading coefficient (unitless)
                     eg = activation energy in 
                    electron-volts  xti = saturation-current 
                    temperature exponent (unitless)  kf = flicker noise coefficient (unitless)
                     af = flicker noise exponent (unitless)
                     fc = forward-bias depletion 
                    capacitance coefficient (unitless)  bv = reverse breakdown voltage in 
                    volts  ibv = current at breakdown voltage 
                    in amps  Comments: The model name must 
                    begin with a letter, not a number. If you plan to specify a 
                    model for a 1N4003 rectifying diode, for instance, you 
                    cannot use "1n4003" for the model name. An alternative might 
                    be "m1n4003" instead.    TRANSISTORS (bipolar junction -- BJT):
                     General form:  q[name] [collector] [base] [emitter] [model]
Example:       q1 2 3 0 mod1
 BJT TRANSISTOR MODELS:  General form:  .model [modelname] [npn or pnp] [parmtr1=x] . . .
Example:       .model mod1 pnp
Example:       .model mod2 npn bf=75 is=1e-14
 The model examples shown above are very 
                    nonspecific. To accurately model real-life transistors, more 
                    parameters are necessary. Take these two examples, for the 
                    popular 2N2222 and 2N2907 transistors (the "+") 
                    characters represent line-continuation marks in SPICE, when 
                    you wish to break a single line (card) into two or more 
                    separate lines on your text editor:  Example:       .model m2n2222 npn is=19f bf=150 vaf=100 ikf=.18
+                     ise=50p ne=2.5 br=7.5 var=6.4 ikr=12m
+                     isc=8.7p nc=1.2 rb=50 re=0.4 rc=0.4 cje=26p
+                     tf=0.5n cjc=11p tr=7n xtb=1.5 kf=0.032f af=1
 Example:       .model m2n2907 pnp is=1.1p bf=200 nf=1.2 vaf=50 
+                     ikf=0.1 ise=13p ne=1.9 br=6 rc=0.6 cje=23p
+                     vje=0.85 mje=1.25 tf=0.5n cjc=19p vjc=0.5
+                     mjc=0.2 tr=34n xtb=1.5
 Parameter definitions:  is = transport saturation current 
                    in amps  bf = ideal maximum forward Beta (unitless)
                     nf = forward current emission 
                    coefficient (unitless)  vaf = forward Early voltage in 
                    volts  ikf = corner for forward Beta 
                    high-current rolloff in amps  ise = B-E leakage saturation 
                    current in amps  ne = B-E leakage emission 
                    coefficient (unitless)  br = ideal maximum reverse Beta (unitless)
                     nr = reverse current emission 
                    coefficient (unitless)  bar = reverse Early voltage in 
                    volts  ikrikr = corner for reverse Beta 
                    high-current rolloff in amps  iscisc = B-C leakage saturation 
                    current in amps  nc = B-C leakage emission 
                    coefficient (unitless)  rb = zero bias base resistance in 
                    ohms  irb = current for base resistance 
                    halfway value in amps  rbm = minimum base resistance at 
                    high currents in ohms  re = emitter resistance in ohms  rc = collector resistance in ohms
                     cje = B-E zero-bias depletion 
                    capacitance in farads  vje = B-E built-in potential in 
                    volts  mje = B-E junction exponential 
                    factor (unitless)  tf = ideal forward transit time 
                    (seconds)  xtf = coefficient for bias 
                    dependence of transit time (unitless)  vtf = B-C voltage dependence on 
                    transit time, in volts  itf = high-current parameter effect 
                    on transit time, in amps  ptf = excess phase at f=1/(transit 
                    time)(2)(pi) Hz, in degrees  cjc = B-C zero-bias depletion 
                    capacitance in farads  vjc = B-C built-in potential in 
                    volts  mjc = B-C junction exponential 
                    factor (unitless)  xjcj = B-C depletion capacitance 
                    fraction connected in base node (unitless)  tr = ideal reverse transit time in 
                    seconds  cjs = zero-bias collector-substrate 
                    capacitance in farads  vjs = substrate junction built-in 
                    potential in volts  mjs = substrate junction 
                    exponential factor (unitless)  xtb = forward/reverse Beta 
                    temperature exponent  eg = energy gap for temperature 
                    effect on transport saturation current in electron-volts  xti = temperature exponent for 
                    effect on transport saturation current (unitless)  kf = flicker noise coefficient (unitless)
                     af = flicker noise exponent (unitless)
                     fc = forward-bias depletion 
                    capacitance formula coefficient (unitless)  Comments: Just as with diodes, the 
                    model name given for a particular transistor type must 
                    begin with a letter, not a number. That's why the examples 
                    given above for the 2N2222 and 2N2907 types of BJTs are 
                    named "m2n2222" and "m2n2907" respectively.  As you can see, SPICE allows for very 
                    detailed specification of transistor properties. Many of the 
                    properties listed above are well beyond the scope and 
                    interest of the beginning electronics student, and aren't 
                    even useful apart from knowing the equations SPICE uses to 
                    model BJT transistors. For those interested in learning more 
                    about transistor modeling in SPICE, consult other books, 
                    such as Andrei Vladimirescu's The Spice Book (ISBN 
                    0-471-60926-9).    TRANSISTORS (junction field-effect -- 
                    JFET):  General form:  j[name] [drain] [gate] [source] [model]
Example:       j1 2 3 0 mod1
 JFET TRANSISTOR MODELS:  General form:     .model [modelname] [njf or pjf] [parmtr1=x] . . .
Example:          .model mod1 pjf
Example:          .model mod2 njf lambda=1e-5 pb=0.75
 Parameter definitions:  vto = threshold voltage in volts
                     beta = transconductance parameter 
                    in amps/volts2  lambda = channel length modulation 
                    parameter in units of 1/volts  rd = drain resistance in ohms  rs = source resistance in ohms  cgs = zero-bias G-S junction 
                    capacitance in farads  cgd = zero-bias G-D junction 
                    capacitance in farads  pb = gate junction potential in 
                    volts  is = gate junction saturation 
                    current in amps  kf = flicker noise coefficient (unitless)
                     af = flicker noise exponent (unitless)
                     fc = forward-bias depletion 
                    capacitance coefficient (unitless)    TRANSISTORS (insulated-gate field-effect 
                    -- IGFET or MOSFET):  General form:  m[name] [drain] [gate] [source] [substrate] [model]
Example:       m1 2 3 0 0 mod1
 MOSFET TRANSISTOR MODELS:  General form:  .model [modelname] [nmos or pmos] [parmtr1=x] . . .
Example:       .model mod1 pmos
Example:       .model mod2 nmos level=2 phi=0.65 rd=1.5
Example:       .model mod3 nmos vto=-1   (depletion)
Example:       .model mod4 nmos vto=1    (enhancement)
Example:       .model mod5 pmos vto=1    (depletion)
Example:       .model mod6 pmos vto=-1   (enhancement)
 Comments: In order to distinguish 
                    between enhancement mode and depletion-mode (also known as 
                    depletion-enhancement mode) transistors, the model parameter 
                    "vto" (zero-bias threshold voltage) must be 
                    specified. Its default value is zero, but a positive value 
                    (+1 volts, for example) on a P-channel transistor or a 
                    negative value (-1 volts) on an N-channel transistor will 
                    specify that transistor to be a depletion (otherwise 
                    known as depletion-enhancement) mode device. 
                    Conversely, a negative value on a P-channel transistor or a 
                    positive value on an N-channel transistor will specify that 
                    transistor to be an enhancement mode device.  Remember that enhancement mode transistors 
                    are normally-off devices, and must be turned on by the 
                    application of gate voltage. Depletion-mode transistors are 
                    normally "on," but can be "pinched off" as well as enhanced 
                    to greater levels of drain current by applied gate voltage, 
                    hence the alternate designation of "depletion-enhancement" 
                    MOSFETs. The "vto" parameter specifies the 
                    threshold gate voltage for MOSFET conduction.  SourcesAC SINEWAVE VOLTAGE SOURCES (when using 
                    .ac card to specify frequency):  General form:  v[name] [+node] [-node] ac [voltage] [phase] sin
Example 1:     v1 1 0 ac 12 sin
Example 2:     v1 1 0 ac 12 240 sin   (12 V ∠ 240o)
 Comments: This method of specifying 
                    AC voltage sources works well if you're using multiple 
                    sources at different phase angles from each other, but all 
                    at the same frequency. If you need to specify sources at 
                    different frequencies in the same circuit, you must use the 
                    next method!    AC SINEWAVE VOLTAGE SOURCES (when NOT 
                    using .ac card to specify frequency):  General form:  v[name] [+node] [-node] sin([offset] [voltage] 
+               [freq] [delay] [damping factor])
Example 1:     v1 1 0 sin(0 12 60 0 0)
 Parameter definitions:  offset = DC bias voltage, 
                    offsetting the AC waveform by a specified voltage.  voltage = peak, or crest, AC 
                    voltage value for the waveform.  freq = frequency in Hertz.  delay = time delay, or phase offset 
                    for the waveform, in seconds.  damping factor = a figure used to 
                    create waveforms of decaying amplitude.  Comments: This method of specifying 
                    AC voltage sources works well if you're using multiple 
                    sources at different frequencies from each other. 
                    Representing phase shift is tricky, though, necessitating 
                    the use of the delay factor.    DC VOLTAGE SOURCES (when using .dc card 
                    to specify voltage):  General form:  v[name] [+node] [-node] dc
Example 1:     v1 1 0 dc
 Comments: If you wish to have SPICE 
                    output voltages not in reference to node 0, you must 
                    use the .dc analysis option, and to use this option 
                    you must specify at least one of your DC sources in this 
                    manner.    DC VOLTAGE SOURCES (when NOT using .dc 
                    card to specify voltage):  General form:  v[name] [+node] [-node] dc [voltage]
Example 1:     v1 1 0 dc 12
 Comments: Nothing noteworthy here!
                       PULSE VOLTAGE SOURCES  General form:  v[name] [+node] [-node] pulse ([i] [p] [td] [tr]
+              [tf] [pw] [pd])
 Parameter definitions:  i = initial value  p = pulse value  td = delay time (all time 
                    parameters in units of seconds)  tr = rise time  tf = fall time  pw = pulse width  pd = period  Example 1:     v1 1 0 pulse (-3 3 0 0 0 10m 20m)
 Comments: Example 1 is a perfect 
                    square wave oscillating between -3 and +3 volts, with zero 
                    rise and fall times, a 20 millisecond period, and a 50 
                    percent duty cycle (+3 volts for 10 ms, then -3 volts for 10 
                    ms).    AC SINEWAVE CURRENT SOURCES (when using 
                    .ac card to specify frequency):  General form:  i[name] [+node] [-node] ac [current] [phase] sin
Example 1:     i1 1 0 ac 3 sin        (3 amps)
Example 2:     i1 1 0 ac 1m 240 sin   (1 mA ∠ 240o)
 Comments: The same comments apply 
                    here (and in the next example) as for AC voltage sources.
                       AC SINEWAVE CURRENT SOURCES (when NOT 
                    using .ac card to specify frequency):  General form:  i[name] [+node] [-node] sin([offset] 
+              [current] [freq] 0 0)
Example 1:     i1 1 0 sin(0 1.5 60 0 0)  
 DC CURRENT SOURCES (when using .dc card 
                    to specify current):  General form:  i[name] [+node] [-node] dc
Example 1:     i1 1 0 dc
 DC CURRENT SOURCES (when NOT using .dc 
                    card to specify current):  General form:  i[name] [+node] [-node] dc [current]
Example 1:     i1 1 0 dc 12
 Comments: Even though the books all 
                    say that the first node given for the DC current source is 
                    the positive node, that's not what I've found to be in 
                    practice. In actuality, a DC current source in SPICE pushes 
                    current in the same direction as a voltage source (battery) 
                    would with its negative node specified first.    PULSE CURRENT SOURCES  General form:  i[name] [+node] [-node] pulse ([i] [p] [td] [tr]
+              [tf] [pw] [pd])
 Parameter definitions:  i = initial value  p = pulse value  td = delay time  tr = rise time  tf = fall time  pw = pulse width  pd = period  Example 1:     i1 1 0 pulse (-3m 3m 0 0 0 17m 34m)
 Comments: Example 1 is a perfect 
                    square wave oscillating between -3 mA and +3 mA, with zero 
                    rise and fall times, a 34 millisecond period, and a 50 
                    percent duty cycle (+3 mA for 17 ms, then -3 mA for 17 ms).
                       VOLTAGE SOURCES (dependent):  General form:  e[name] [out+node] [out-node] [in+node] [in-node]
+               [gain]
Example 1:     e1 2 0 1 2 999k
 Comments: Dependent voltage sources 
                    are great to use for simulating operational amplifiers. 
                    Example 1 shows how such a source would be configured for 
                    use as a voltage follower, inverting input connected to 
                    output (node 2) for negative feedback, and the noninverting 
                    input coming in on node 1. The gain has been set to an 
                    arbitrarily high value of 999,000. One word of caution, 
                    though: SPICE does not recognize the input of a dependent 
                    source as being a load, so a voltage source tied only to the 
                    input of an independent voltage source will be interpreted 
                    as "open." See op-amp circuit examples for more details on 
                    this.  CURRENT SOURCES (dependent):  |