Paranoia_Parallel: a test suite for more than 100 test circuits,

running in parallel on a multi-core machine (12 min execution time
on a i9 9900, ngspice compiled with gcc, debug mode enabled.
Linux with Valgrind and Parallel are required.
This commit is contained in:
Brian Taylor 2026-06-29 17:35:00 +02:00 committed by Holger Vogt
parent 2988b5db66
commit d881158a41
345 changed files with 42242 additions and 0 deletions

16
paranoia_parallel/README Normal file
View File

@ -0,0 +1,16 @@
How to run paranoia_parallel
Install valgrind
Install parallel
Extract paranoia_parallel.7z into a directory of your choice.
In a terminal window, cd into the directory chosen.
Edit runtest.sh, line 14, -jx, with x being the physical cores available on your machine.
Run ./paranoia_table_generators.sh
to generate some input tables (only required once in the beginning).
Run ./runtests.sh paranoia_test_extra.sh ./working

View File

@ -0,0 +1,111 @@
Circuit to perform Monte Carlo simulation in ngspice
* 25 stage Ring-Osc. using inverters with BSIM3
vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1
vdd dd 0 dc 3.3
vss ss 0 dc 0
ve sub 0 dc 0
vpe well 0 dc 3.3
.subckt inv1 dd ss sub well in out
mn1 out in ss sub n1 w=2u l=0.35u as=3p ad=3p ps=4u pd=4u
mp1 out in dd well p1 w=4u l=0.35u as=7p ad=7p ps=6u pd=6u
.ends inv1
.subckt inv5 dd ss sub well in out
xinv1 dd ss sub well in 1 inv1
xinv2 dd ss sub well 1 2 inv1
xinv3 dd ss sub well 2 3 inv1
xinv4 dd ss sub well 3 4 inv1
xinv5 dd ss sub well 4 out inv1
.ends inv5
xinv1 dd ss sub well in out5 inv5
xinv2 dd ss sub well out5 out10 inv5
xinv3 dd ss sub well out10 out15 inv5
xinv4 dd ss sub well out15 out20 inv5
xinv5 dd ss sub well out20 out inv5
xinv11 dd 0 sub well out buf inv1
* output is buf
cout buf ss 0.2pF
.ic v(out20) = 0
*
.options noacct
* The following model parameters are varying statistically:
* vth0, u0, tox
* see the AGAUSS function used to define the parameter
* the deviation is 10%, just for example, not measured
********************************************************************************
.model n1 nmos
+level=8
+version=3.3.0
+tnom=27.0
+nch=2.498e+17 tox=AGAUSS(9e-09, 9e-09, 10) xj=1.00000e-07
+lint=9.36e-8 wint=1.47e-7
+vth0=AGAUSS(.6322,.6322,10) k1=.756 k2=-3.83e-2 k3=-2.612
+dvt0=2.812 dvt1=0.462 dvt2=-9.17e-2
+nlx=3.52291e-08 w0=1.163e-6
+k3b=2.233
+vsat=86301.58 ua=6.47e-9 ub=4.23e-18 uc=-4.706281e-11
+rdsw=650 u0=AGAUSS(388.3203,388.3203,10) wr=1
+a0=.3496967 ags=.1 b0=0.546 b1=1
+dwg=-6.0e-09 dwb=-3.56e-09 prwb=-.213
+keta=-3.605872e-02 a1=2.778747e-02 a2=.9
+voff=-6.735529e-02 nfactor=1.139926 cit=1.622527e-04
+cdsc=-2.147181e-05
+cdscb=0 dvt0w=0 dvt1w=0 dvt2w=0
+cdscd=0 prwg=0
+eta0=1.0281729e-02 etab=-5.042203e-03
+dsub=.31871233
+pclm=1.114846 pdiblc1=2.45357e-03 pdiblc2=6.406289e-03
+drout=.31871233 pscbe1=5000000 pscbe2=5e-09 pdiblcb=-.234
+pvag=0 delta=0.01
+wl=0 ww=-1.420242e-09 wwl=0
+wln=0 wwn=.2613948 ll=1.300902e-10
+lw=0 lwl=0 lln=.316394 lwn=0
+kt1=-.3 kt2=-.051
+at=22400
+ute=-1.48
+ua1=3.31e-10 ub1=2.61e-19 uc1=-3.42e-10
+kt1l=0 prt=764.3
+noimod=2
+af=1.075e+00 kf=9.670e-28 ef=1.056e+00
+noia=1.130e+20 noib=7.530e+04 noic=-8.950e-13
**** PMOS ***
.model p1 pmos
+level=8
+version=3.3.0
+tnom=27.0
+nch=3.533024e+17 tox=AGAUSS(9e-09,9e-09,10) xj=1.00000e-07
+lint=6.23e-8 wint=1.22e-7
+vth0=AGAUSS(-.6732829,-.6732829,10) k1=.8362093 k2=-8.606622e-02 k3=1.82
+dvt0=1.903801 dvt1=.5333922 dvt2=-.1862677
+nlx=1.28e-8 w0=2.1e-6
+k3b=-0.24 prwg=-0.001 prwb=-0.323
+vsat=103503.2 ua=1.39995e-09 ub=1.e-19 uc=-2.73e-11
+rdsw=460 u0=AGAUSS(138.7609,138.7609,10)
+a0=.4716551 ags=0.12
+keta=-1.871516e-03 a1=.3417965 a2=0.83
+voff=-.074182 nfactor=1.54389 cit=-1.015667e-03
+cdsc=8.937517e-04
+cdscb=1.45e-4 cdscd=1.04e-4
+dvt0w=0.232 dvt1w=4.5e6 dvt2w=-0.0023
+eta0=6.024776e-02 etab=-4.64593e-03
+dsub=.23222404
+pclm=.989 pdiblc1=2.07418e-02 pdiblc2=1.33813e-3
+drout=.3222404 pscbe1=118000 pscbe2=1e-09
+pvag=0
+kt1=-0.25 kt2=-0.032 prt=64.5
+at=33000
+ute=-1.5
+ua1=4.312e-9 ub1=6.65e-19 uc1=0
+kt1l=0
+noimod=2
+af=9.970e-01 kf=2.080e-29 ef=1.015e+00
+noia=1.480e+18 noib=3.320e+03 noic=1.770e-13
.end
.end

View File

@ -0,0 +1,47 @@
*ng_script
* Perform Monte Carlo simulation in ngspice
* script for use with 25 stage Ring-Osc. BSIM3
* circuit is in MC_2_circ.sp
* edit 'set sourcepath' for your path to circuit file
* start script by 'ngspice -o MC_2_control.log MC_2_control.sp'
*
.control
let mc_runs = 3 ; number of runs for monte carlo
let run = 1 ; number of the actual run
* Where to find the circuit netlist file MC_2_circ.sp
setcs sourcepath = ( /home/holger/Software/paranoia/examples/Monte_Carlo )
* create file for frequency information
echo Monte Carlo, frequency of R.O. > MC_frequ.log
* run the simulation loop
dowhile run <= mc_runs
* without the reset switch there is some strange drift
* towards lower and lower frequencies
set run = $&run ; create a variable from the vector
setseed $run ; set the rnd seed value to the loop index
if run = 1
source MC_2_circ.sp ; load the circuit once from file, including model data
else
mc_source ; re-load the circuit from internal storage
end
save buf ; we just need output vector buf, save memory by more than 10x
tran 15p 2n 0
write mc_ring{$run}.out buf ; write each sim output to its own rawfile
linearize buf ; lienarize buf to allow fft
fft buf ; run fft on vector buf
let buf2=db(mag(buf))
* find the frequency where buf has its maximum of the fft signal
meas sp fft_max MAX_AT buf2 from=0.1G to=0.7G
print fft_max >> MC_frequ.log ; print frequency to file
destroy all ; delete all output vectors
remcirc ; delete circuit
let run = run + 1 ; increase loop counter
end
quit
.endc
.end

View File

@ -0,0 +1,4 @@
Monte Carlo frequency of R.O.
fft_max = 2.604167e+08
fft_max = 2.604167e+08
fft_max = 2.604167e+08

View File

@ -0,0 +1,292 @@
Perform Monte Carlo simulation in ngspice
* 25 stage Ring-Osc. BSIM3 with statistical variation of various model parameters
* cd into ngspice/examples/Monte_Carlo
* start in interactive mode 'ngspice MC_ring.sp' with several plots for output
* or start in batch mode, controlled by .control section (Control mode)
* with 'ngspice -b -r MC_ring.raw -o MC_ring.log MC_ring.sp'.
vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1
vdd dd 0 dc 3.3
vss ss 0 dc 0
ve sub 0 dc 0
vpe well 0 dc 3.3
.subckt inv1 dd ss sub well in out
mn1 out in ss sub n1 w=2u l=0.35u as=3p ad=3p ps=4u pd=4u
mp1 out in dd well p1 w=4u l=0.35u as=7p ad=7p ps=6u pd=6u
.ends inv1
.subckt inv5 dd ss sub well in out
xinv1 dd ss sub well in 1 inv1
xinv2 dd ss sub well 1 2 inv1
xinv3 dd ss sub well 2 3 inv1
xinv4 dd ss sub well 3 4 inv1
xinv5 dd ss sub well 4 out inv1
.ends inv5
xinv1 dd ss sub well in out5 inv5
xinv2 dd ss sub well out5 out10 inv5
xinv3 dd ss sub well out10 out15 inv5
xinv4 dd ss sub well out15 out20 inv5
xinv5 dd ss sub well out20 out inv5
xinv11 dd 0 sub well out buf inv1
cout buf ss 0.2pF
.ic v(out20) = 0
*
.options noacct
.control
save buf ; we just need buf, save memory by more than 10x
let mc_runs = 2 ; number of runs for monte carlo
let run = 0 ; number of actual run
set curplot = new ; create a new plot
set curplottitle = "Transient outputs"
set plot_out = $curplot ; store its name to 'plot_out'
set curplot = new ; create a new plot
set curplottitle = "FFT outputs"
set plot_fft = $curplot ; store its name to 'plot_fft'
set curplot = new ; create a new plot
set curplottitle = "Oscillation frequency"
set max_fft = $curplot ; store its name to 'max_fft'
let mc_runsp = mc_runs + 1
let maxffts = unitvec(mc_runsp) ; vector for storing max measure results
let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising
*
* define distributions for random numbers:
* unif: uniform distribution, deviation relativ to nominal value
* aunif: uniform distribution, deviation absolut
* gauss: Gaussian distribution, deviation relativ to nominal value
* agauss: Gaussian distribution, deviation absolut
define unif(nom, var) (nom + (nom*var) * sunif(0))
define aunif(nom, avar) (nom + avar * sunif(0))
define gauss(nom, var, sig) (nom + (nom*var)/sig * sgauss(0))
define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0))
*
* We want to vary the model parameters vth0, u0, tox, lint, and wint
* of the BSIM3 model for the NMOS and PMOS transistors.
* We may obtain the nominal values (nom) by manually extracting them from
* the parameter set. Here we get them automatically and store them into
* vectors. This has the advantage that you may change the parameter set
* without having to look up the values again.
let n1vth0=@n1[vth0]
let n1u0=@n1[u0]
let n1tox=@n1[tox]
let n1lint=@n1[lint]
let n1wint=@n1[wint]
let p1vth0=@p1[vth0]
let p1u0=@p1[u0]
let p1tox=@p1[tox]
let p1lint=@p1[lint]
let p1wint=@p1[wint]
*
* run the simulation loop
dowhile run <= mc_runs
* run=0 simulates with nominal parameters
if run > 0
setplot $max_fft
altermod @n1[vth0] = gauss(n1vth0, 0.1, 3)
altermod @n1[u0] = gauss(n1u0, 0.05, 3)
altermod @n1[tox] = gauss(n1tox, 0.1, 3)
altermod @n1[lint] = gauss(n1lint, 0.1, 3)
altermod @n1[wint] = gauss(n1wint, 0.1, 3)
altermod @p1[vth0] = gauss(p1vth0, 0.1, 3)
altermod @p1[u0] = gauss(p1u0, 0.1, 3)
altermod @p1[tox] = gauss(p1tox, 0.1, 3 )
altermod @p1[lint] = gauss(p1lint, 0.1, 3)
altermod @p1[wint] = gauss(p1wint, 0.1, 3)
end
tran 15p 3n 0
* select stop and step so that number of data points after linearization is not too
* close to 8192, which would yield varying number of line length and thus scale for fft.
*
* We have to figure out what to do if a single simulation will not converge.
* There is the variable 'sim_status' which is set to 1 if the simulation
* fails with xx simulation(s) aborted, e.g. because of non-convergence.
* Then we might skip this run and continue with a new run.
*
echo Simulation status $sim_status
let simstat = $sim_status
if simstat = 1
if run = mc_runs
echo go to end
else
echo go to next run
end
destroy $curplot
goto next
end
set run ="$&run" ; create a variable from the vector
set mc_runs ="$&mc_runs" ; create a variable from the vector
echo simulation run no. $run of $mc_runs
set dt = $curplot
* save the linearized data for having equal time scales for all runs
linearize buf ; linearize only buf, no other vectors needed
destroy $dt ; delete the tran i plot
set dt = $curplot ; store the current plot to dt (tran i+1)
setplot $plot_out ; make 'plt_out' the active plot
* firstly save the time scale once to become the default scale
if run=0
let time={$dt}.time
end
let vout{$run}={$dt}.buf ; store the output vector to plot 'plot_out'
setplot $dt ; go back to the previous plot (tran i+1)
fft buf ; run fft on vector buf
destroy $dt ; delete the tran i+1 plot
let buf2=db(mag(buf))
plot buf2
* find the frequency where buf has its maximum of the fft signal
meas sp fft_max MAX_AT buf2 from=0.0 to=0.7G
* find the frequency where buf is -40dB at rising fft signal
meas sp fft_40 WHEN buf2=-40 FALL=1 from=0 to=7G
echo
echo
* store the fft vector
set dt = $curplot ; store the current plot to dt (spec i)
setplot $plot_fft ; make 'plot_fft' the active plot
if run=0
let frequency={$dt}.frequency
end
let fft{$run}={$dt}.buf ; store the output vector to plot 'plot_fft'
* store the measured value
setplot $max_fft ; make 'max_fft' the active plot
let maxffts[{$run}]={$dt}.fft_max
let halfffts[{$run}]={$dt}.fft_40
let run = run + 1
label next
reset
end
***** plotting **********************************************************
if $?batchmode
echo
echo Plotting not available in batch mode
echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile
echo
write $rawfile {$plot_out}.allv
rusage
quit
else
setplot $plot_out
plot vout0 ylabel 'RO output, original parameters' ; just plot the tran output with nominal parameters
setplot $plot_fft
settype decibel ally
plot db(mag(ally)) xlimit .1G 1G ylimit -80 10 ylabel 'fft output'
*
* create a histogram from vector maxffts
setplot $max_fft ; make 'max_fft' the active plot
set startfreq=400MEG
set bin_size=5MEG
set bin_count=20
compose xvec start=$startfreq step=$bin_size lin=$bin_count ; requires variables as parameters
settype frequency xvec
let bin_count=$bin_count ; create a vector from the variable
let yvec=unitvec(bin_count) ; requires vector as parameter
let startfreq=$startfreq
let bin_size=$bin_size
* put data into the correct bins
let run = 0
dowhile run < mc_runs
set run = $&run ; create a variable from the vector
let val = maxffts[{$run}]
let part = 0
* Check if val fits into a bin. If yes, raise bin by 1
dowhile part < bin_count
if ((val < (startfreq + (part+1)*bin_size)) & (val > (startfreq + part*bin_size)))
let yvec[part] = yvec[part] + 1
break
end
let part = part + 1
end
let run = run + 1
end
* plot the histogram
set plotstyle=combplot
plot yvec-1 vs xvec xlabel 'oscillation frequency' ylabel 'bin count' ; subtract 1 because we started with unitvec containing ones
* plot simulation series
set plotstyle=linplot
let xx = vector(mc_runsp)
settype frequency maxffts
plot maxffts vs xx xlabel 'iteration no.' ylabel 'RO frequency'
* calculate jitter
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
echo
echo Max. jitter is "$&diff40" MHz
end
rusage
quit
.endc
********************************************************************************
.model n1 nmos
+level=8
+version=3.3.0
+tnom=27.0
+nch=2.498e+17 tox=9e-09 xj=1.00000e-07
+lint=9.36e-8 wint=1.47e-7
+vth0=.6322 k1=.756 k2=-3.83e-2 k3=-2.612
+dvt0=2.812 dvt1=0.462 dvt2=-9.17e-2
+nlx=3.52291e-08 w0=1.163e-6
+k3b=2.233
+vsat=86301.58 ua=6.47e-9 ub=4.23e-18 uc=-4.706281e-11
+rdsw=650 u0=388.3203 wr=1
+a0=.3496967 ags=.1 b0=0.546 b1=1
+dwg=-6.0e-09 dwb=-3.56e-09 prwb=-.213
+keta=-3.605872e-02 a1=2.778747e-02 a2=.9
+voff=-6.735529e-02 nfactor=1.139926 cit=1.622527e-04
+cdsc=-2.147181e-05
+cdscb=0 dvt0w=0 dvt1w=0 dvt2w=0
+cdscd=0 prwg=0
+eta0=1.0281729e-02 etab=-5.042203e-03
+dsub=.31871233
+pclm=1.114846 pdiblc1=2.45357e-03 pdiblc2=6.406289e-03
+drout=.31871233 pscbe1=5000000 pscbe2=5e-09 pdiblcb=-.234
+pvag=0 delta=0.01
+wl=0 ww=-1.420242e-09 wwl=0
+wln=0 wwn=.2613948 ll=1.300902e-10
+lw=0 lwl=0 lln=.316394 lwn=0
+kt1=-.3 kt2=-.051
+at=22400
+ute=-1.48
+ua1=3.31e-10 ub1=2.61e-19 uc1=-3.42e-10
+kt1l=0 prt=764.3
+noimod=2
+af=1.075e+00 kf=9.670e-28 ef=1.056e+00
+noia=1.130e+20 noib=7.530e+04 noic=-8.950e-13
**** PMOS ***
.model p1 pmos
+level=8
+version=3.3.0
+tnom=27.0
+nch=3.533024e+17 tox=9e-09 xj=1.00000e-07
+lint=6.23e-8 wint=1.22e-7
+vth0=-.6732829 k1=.8362093 k2=-8.606622e-02 k3=1.82
+dvt0=1.903801 dvt1=.5333922 dvt2=-.1862677
+nlx=1.28e-8 w0=2.1e-6
+k3b=-0.24 prwg=-0.001 prwb=-0.323
+vsat=103503.2 ua=1.39995e-09 ub=1.e-19 uc=-2.73e-11
+rdsw=460 u0=138.7609
+a0=.4716551 ags=0.12
+keta=-1.871516e-03 a1=.3417965 a2=0.83
+voff=-.074182 nfactor=1.54389 cit=-1.015667e-03
+cdsc=8.937517e-04
+cdscb=1.45e-4 cdscd=1.04e-4
+dvt0w=0.232 dvt1w=4.5e6 dvt2w=-0.0023
+eta0=6.024776e-02 etab=-4.64593e-03
+dsub=.23222404
+pclm=.989 pdiblc1=2.07418e-02 pdiblc2=1.33813e-3
+drout=.3222404 pscbe1=118000 pscbe2=1e-09
+pvag=0
+kt1=-0.25 kt2=-0.032 prt=64.5
+at=33000
+ute=-1.5
+ua1=4.312e-9 ub1=6.65e-19 uc1=0
+kt1l=0
+noimod=2
+af=9.970e-01 kf=2.080e-29 ef=1.015e+00
+noia=1.480e+18 noib=3.320e+03 noic=1.770e-13
.end

View File

@ -0,0 +1,180 @@
*ng_script
* Example script for Monte Carlo with commercial HSPICE-compatible libraries
* The circuit in mc_ring_circ.net is a 25-stage inverter ring oscillator.
* Add your library to mc_ring_circ.net and choose transistors accordingly.
* Add the source file and the library path.
* A simple BSIM3 inverter R.O. serves as an MC example wtihout need for a library.
.control
begin
let mc_runs = 3 ; number of runs for monte carlo
let run = 0 ; number of actual run
set curplot = new ; create a new plot
set curplottitle = "Transient outputs"
set plot_out = $curplot ; store its name to 'plot_out'
set curplot = new ; create a new plot
set curplottitle = "FFT outputs"
set plot_fft = $curplot ; store its name to 'plot_fft'
set curplot = new ; create a new plot
set curplottitle = "Oscillation frequency"
set max_fft = $curplot ; store its name to 'max_fft'
let mc_runsp = mc_runs + 1
let maxffts = unitvec(mc_runsp) ; vector for storing max measure results
let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising
unlet mc_runsp
set mc_runs = $&mc_runs ; create a variable from the vector
let seeds = mc_runs + 2
setseed $&seeds
unlet seeds
echo source the input file
* Path of your circuit file and library file here
* Will be added to the already existing sourcepath
set sourcepath = ( $inputdir $sourcepath ./ngspice/examples/Monte_Carlo )
* source with file name of your circuit file
source mc_ring_circ.net
save buf ; we just need buf, save memory by more than 10x
* Output path (directory has already to be there)
* set outputpath = 'D:\Spice_general\ngspice\examples\Monte_Carlo\out'
* If your current directory is the 'ngspice' directory
* set outputpath = './examples/Monte_Carlo/out' ; LINUX alternative
* run the simulation loop
* We have to figure out what to do if a single simulation will not converge.
* There is now the variable sim_status, that is 0 if simulation ended regularly,
* and 1 if the simulation has been aborted with error message '...simulation(s) aborted'.
* Then we skip the rest of the run and continue with a new run.
dowhile run <= mc_runs
set run = $&run ; create a variable from the vector
* run=0 simulates with nominal parameters
if run > 0
echo
echo * * * * * *
echo Source the circuit again internally for run no. $run
echo * * * * * *
setseed $run
mc_source ; re-source the input file
else
echo run no. $run
end
echo simulation run no. $run of $mc_runs
tran 100p 2n 0
echo Simulation status $sim_status
let simstat = $sim_status
if simstat = 1
if run = mc_runs
echo go to end
else
echo go to next run
end
destroy $curplot
goto next
end
* select stop and step so that number of data points after linearization is not too
* close to 8192, which would yield varying number of line length and thus scale for fft.
*
set dt0 = $curplot
* save the linearized data for having equal time scales for all runs
linearize buf ; linearize only buf, no other vectors needed
set dt1 = $curplot ; store the current plot to dt (tran i+1)
setplot $plot_out ; make 'plt_out' the active plot
* firstly save the time scale once to become the default scale
if run=0
let time={$dt1}.time
end
let vout{$run}={$dt1}.buf ; store the output vector to plot 'plot_out'
setplot $dt1 ; go back to the previous plot (tran i+1)
fft buf ; run fft on vector buf
let buf2=db(mag(buf))
* find the frequency where buf has its maximum of the fft signal
meas sp fft_max MAX_AT buf2 from=0.05G to=0.7G
* find the frequency where buf is -40dB at rising fft signal
meas sp fft_40 WHEN buf2=-40 FALL=1 from=0.05G to=7G
* store the fft vector
set dt2 = $curplot ; store the current plot to dt (spec i)
setplot $plot_fft ; make 'plot_fft' the active plot
if run=0
let frequency={$dt2}.frequency
end
let fft{$run}={$dt2}.buf ; store the output vector to plot 'plot_fft'
settype decibel fft{$run}
* store the measured value
setplot $max_fft ; make 'max_fft' the active plot
let maxffts[{$run}]={$dt2}.fft_max
let halfffts[{$run}]={$dt2}.fft_40
destroy $dt0 $dt1 $dt2 ; save memory, we don't need this plot (spec) any more
label next
remcirc
let run = run + 1
end
***** plotting **********************************************************
if $?batchmode
echo
echo Plotting not available in batch mode
echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile
echo
write $rawfile {$plot_out}.allv
rusage
quit
else
if $?sharedmode or $?win_console
gnuplot xnp_pl1 {$plot_out}.vout0 ; just plot the tran output with nominal parameters
else
plot {$plot_out}.vout0 ; just plot the tran output with nominal parameters
end
setplot $plot_fft
if $?sharedmode or $?win_console
gnuplot xnp_pl2 db(mag(ally)) xlimit 0 1G ylimit -80 10
else
plot db(mag(ally)) xlimit 0 1G ylimit -80 10
end
*
* create a histogram from vector maxffts
setplot $max_fft ; make 'max_fft' the active plot
set startfreq=50MEG
set bin_size=1MEG
set bin_count=100
compose osc_frequ start=$startfreq step=$bin_size lin=$bin_count ; requires variables as parameters
settype frequency osc_frequ
let bin_count=$bin_count ; create a vector from the variable
let yvec=unitvec(bin_count) ; requires vector as parameter
let startfreq=$startfreq
let bin_size=$bin_size
* put data into the correct bins
let run = 0
dowhile run < mc_runs
set run = $&run ; create a variable from the vector
let val = maxffts[{$run}]
let part = 0
* Check if val fits into a bin. If yes, raise bin by 1
dowhile part < bin_count
if ((val < (startfreq + (part+1)*bin_size)) & (val >= (startfreq + part*bin_size)))
let yvec[part] = yvec[part] + 1
break
end
let part = part + 1
end
let run = run + 1
end
* plot the histogram
let count = yvec - 1 ; subtract 1 because we started with unitvec containing ones
if $?sharedmode or $?win_console
gnuplot np_pl3 count vs osc_frequ combplot
else
plot count vs osc_frequ combplot
end
* calculate jitter
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
echo
echo Max. jitter is "$&diff40" MHz
end
rusage
quit
end

View File

@ -0,0 +1,180 @@
*ng_script
* Example script for Monte Carlo with commercial HSPICE-compatible libraries
* The circuit in mc_ring_circ.net is a 25-stage inverter ring oscillator.
* Add your library to mc_ring_circ.net and choose transistors accordingly.
* Add the source file and the library path.
* A simple BSIM3 inverter R.O. serves as an MC example wtihout need for a library.
.control
begin
let mc_runs = 5 ; number of runs for monte carlo
let run = 0 ; number of actual run
set curplot = new ; create a new plot
set curplottitle = "Transient outputs"
set plot_out = $curplot ; store its name to 'plot_out'
set curplot = new ; create a new plot
set curplottitle = "FFT outputs"
set plot_fft = $curplot ; store its name to 'plot_fft'
set curplot = new ; create a new plot
set curplottitle = "Oscillation frequency"
set max_fft = $curplot ; store its name to 'max_fft'
let mc_runsp = mc_runs + 1
let maxffts = unitvec(mc_runsp) ; vector for storing max measure results
let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising
unlet mc_runsp
set mc_runs = $&mc_runs ; create a variable from the vector
let seeds = mc_runs + 2
setseed $&seeds
unlet seeds
echo source the input file
* Path of your circuit file and library file here
* Will be added to the already existing sourcepath
set sourcepath = ( $inputdir $sourcepath ./ngspice/examples/Monte_Carlo )
* source with file name of your circuit file
source mc_ring_circ.net
save buf ; we just need buf, save memory by more than 10x
* Output path (directory has already to be there)
* set outputpath = 'D:\Spice_general\ngspice\examples\Monte_Carlo\out'
* If your current directory is the 'ngspice' directory
* set outputpath = './examples/Monte_Carlo/out' ; LINUX alternative
* run the simulation loop
* We have to figure out what to do if a single simulation will not converge.
* There is now the variable sim_status, that is 0 if simulation ended regularly,
* and 1 if the simulation has been aborted with error message '...simulation(s) aborted'.
* Then we skip the rest of the run and continue with a new run.
dowhile run <= mc_runs
set run = $&run ; create a variable from the vector
* run=0 simulates with nominal parameters
if run > 0
echo
echo * * * * * *
echo Source the circuit again internally for run no. $run
echo * * * * * *
setseed $run
mc_source ; re-source the input file
else
echo run no. $run
end
echo simulation run no. $run of $mc_runs
tran 100p 5n 0
echo Simulation status $sim_status
let simstat = $sim_status
if simstat = 1
if run = mc_runs
echo go to end
else
echo go to next run
end
destroy $curplot
goto next
end
* select stop and step so that number of data points after linearization is not too
* close to 8192, which would yield varying number of line length and thus scale for fft.
*
set dt0 = $curplot
* save the linearized data for having equal time scales for all runs
linearize buf ; linearize only buf, no other vectors needed
set dt1 = $curplot ; store the current plot to dt (tran i+1)
setplot $plot_out ; make 'plt_out' the active plot
* firstly save the time scale once to become the default scale
if run=0
let time={$dt1}.time
end
let vout{$run}={$dt1}.buf ; store the output vector to plot 'plot_out'
setplot $dt1 ; go back to the previous plot (tran i+1)
fft buf ; run fft on vector buf
let buf2=db(mag(buf))
* find the frequency where buf has its maximum of the fft signal
meas sp fft_max MAX_AT buf2 from=0.05G to=0.7G
* find the frequency where buf is -40dB at rising fft signal
meas sp fft_40 WHEN buf2=-40 RISE=1 from=0.05G to=0.7G
* store the fft vector
set dt2 = $curplot ; store the current plot to dt (spec i)
setplot $plot_fft ; make 'plot_fft' the active plot
if run=0
let frequency={$dt2}.frequency
end
let fft{$run}={$dt2}.buf ; store the output vector to plot 'plot_fft'
settype decibel fft{$run}
* store the measured value
setplot $max_fft ; make 'max_fft' the active plot
let maxffts[{$run}]={$dt2}.fft_max
let halfffts[{$run}]={$dt2}.fft_40
destroy $dt0 $dt1 $dt2 ; save memory, we don't need this plot (spec) any more
label next
remcirc
let run = run + 1
end
***** plotting **********************************************************
if $?batchmode
echo
echo Plotting not available in batch mode
echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile
echo
write $rawfile {$plot_out}.allv
rusage
quit
else
if $?sharedmode or $?win_console
gnuplot xnp_pl1 {$plot_out}.vout0 ; just plot the tran output with nominal parameters
else
plot {$plot_out}.vout0 ; just plot the tran output with nominal parameters
end
setplot $plot_fft
if $?sharedmode or $?win_console
gnuplot xnp_pl2 db(mag(ally)) xlimit 0 1G ylimit -80 10
else
plot db(mag(ally)) xlimit 0 1G ylimit -80 10
end
*
* create a histogram from vector maxffts
setplot $max_fft ; make 'max_fft' the active plot
set startfreq=50MEG
set bin_size=1MEG
set bin_count=100
compose osc_frequ start=$startfreq step=$bin_size lin=$bin_count ; requires variables as parameters
settype frequency osc_frequ
let bin_count=$bin_count ; create a vector from the variable
let yvec=unitvec(bin_count) ; requires vector as parameter
let startfreq=$startfreq
let bin_size=$bin_size
* put data into the correct bins
let run = 0
dowhile run < mc_runs
set run = $&run ; create a variable from the vector
let val = maxffts[{$run}]
let part = 0
* Check if val fits into a bin. If yes, raise bin by 1
dowhile part < bin_count
if ((val < (startfreq + (part+1)*bin_size)) & (val >= (startfreq + part*bin_size)))
let yvec[part] = yvec[part] + 1
break
end
let part = part + 1
end
let run = run + 1
end
* plot the histogram
let count = yvec - 1 ; subtract 1 because we started with unitvec containing ones
if $?sharedmode or $?win_console
gnuplot np_pl3 count vs osc_frequ combplot
else
plot count vs osc_frequ combplot
end
* calculate jitter
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
echo
echo Max. jitter is "$&diff40" MHz
end
rusage
* quit
end

View File

@ -0,0 +1,180 @@
*ng_script
* Example script for Monte Carlo with commercial HSPICE-compatible libraries
* The circuit in mc_ring_circ.net is a 25-stage inverter ring oscillator.
* Add your library to mc_ring_circ.net and choose transistors accordingly.
* Add the source file and the library path.
* A simple BSIM3 inverter R.O. serves as an MC example wtihout need for a library.
.control
begin
let mc_runs = 3 ; number of runs for monte carlo
let run = 0 ; number of actual run
set curplot = new ; create a new plot
set curplottitle = "Transient outputs"
set plot_out = $curplot ; store its name to 'plot_out'
set curplot = new ; create a new plot
set curplottitle = "FFT outputs"
set plot_fft = $curplot ; store its name to 'plot_fft'
set curplot = new ; create a new plot
set curplottitle = "Oscillation frequency"
set max_fft = $curplot ; store its name to 'max_fft'
let mc_runsp = mc_runs + 1
let maxffts = unitvec(mc_runsp) ; vector for storing max measure results
let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising
unlet mc_runsp
set mc_runs = $&mc_runs ; create a variable from the vector
let seeds = mc_runs + 2
setseed $&seeds
unlet seeds
echo source the input file
* Path of your circuit file and library file here
* Will be added to the already existing sourcepath
set sourcepath = ( $inputdir $sourcepath ./ngspice/examples/Monte_Carlo )
* source with file name of your circuit file
source mc_ring_circ.net
save buf ; we just need buf, save memory by more than 10x
* Output path (directory has already to be there)
* set outputpath = 'D:\Spice_general\ngspice\examples\Monte_Carlo\out'
* If your current directory is the 'ngspice' directory
* set outputpath = './examples/Monte_Carlo/out' ; LINUX alternative
* run the simulation loop
* We have to figure out what to do if a single simulation will not converge.
* There is now the variable sim_status, that is 0 if simulation ended regularly,
* and 1 if the simulation has been aborted with error message '...simulation(s) aborted'.
* Then we skip the rest of the run and continue with a new run.
dowhile run <= mc_runs
set run = $&run ; create a variable from the vector
* run=0 simulates with nominal parameters
if run > 0
echo
echo * * * * * *
echo Source the circuit again internally for run no. $run
echo * * * * * *
setseed $run
mc_source ; re-source the input file
else
echo run no. $run
end
echo simulation run no. $run of $mc_runs
tran 100p 10n 0
echo Simulation status $sim_status
let simstat = $sim_status
if simstat = 1
if run = mc_runs
echo go to end
else
echo go to next run
end
destroy $curplot
goto next
end
* select stop and step so that number of data points after linearization is not too
* close to 8192, which would yield varying number of line length and thus scale for fft.
*
set dt0 = $curplot
* save the linearized data for having equal time scales for all runs
linearize buf ; linearize only buf, no other vectors needed
set dt1 = $curplot ; store the current plot to dt (tran i+1)
setplot $plot_out ; make 'plt_out' the active plot
* firstly save the time scale once to become the default scale
if run=0
let time={$dt1}.time
end
let vout{$run}={$dt1}.buf ; store the output vector to plot 'plot_out'
setplot $dt1 ; go back to the previous plot (tran i+1)
fft buf ; run fft on vector buf
let buf2=db(mag(buf))
* find the frequency where buf has its maximum of the fft signal
meas sp fft_max MAX_AT buf2 from=0.05G to=0.7G
* find the frequency where buf is -40dB at rising fft signal
meas sp fft_40 WHEN buf2=-40 RISE=1 from=0.05G to=0.7G
* store the fft vector
set dt2 = $curplot ; store the current plot to dt (spec i)
setplot $plot_fft ; make 'plot_fft' the active plot
if run=0
let frequency={$dt2}.frequency
end
let fft{$run}={$dt2}.buf ; store the output vector to plot 'plot_fft'
settype decibel fft{$run}
* store the measured value
setplot $max_fft ; make 'max_fft' the active plot
let maxffts[{$run}]={$dt2}.fft_max
let halfffts[{$run}]={$dt2}.fft_40
destroy $dt0 $dt1 $dt2 ; save memory, we don't need this plot (spec) any more
label next
remcirc
let run = run + 1
end
***** plotting **********************************************************
if $?batchmode
echo
echo Plotting not available in batch mode
echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile
echo
write $rawfile {$plot_out}.allv
rusage
quit
else
if $?sharedmode or $?win_console
gnuplot xnp_pl1 {$plot_out}.vout0 ; just plot the tran output with nominal parameters
else
plot {$plot_out}.vout0 ; just plot the tran output with nominal parameters
end
setplot $plot_fft
if $?sharedmode or $?win_console
gnuplot xnp_pl2 db(mag(ally)) xlimit 0 1G ylimit -80 10
else
plot db(mag(ally)) xlimit 0 1G ylimit -80 10
end
*
* create a histogram from vector maxffts
setplot $max_fft ; make 'max_fft' the active plot
set startfreq=50MEG
set bin_size=1MEG
set bin_count=100
compose osc_frequ start=$startfreq step=$bin_size lin=$bin_count ; requires variables as parameters
settype frequency osc_frequ
let bin_count=$bin_count ; create a vector from the variable
let yvec=unitvec(bin_count) ; requires vector as parameter
let startfreq=$startfreq
let bin_size=$bin_size
* put data into the correct bins
let run = 0
dowhile run < mc_runs
set run = $&run ; create a variable from the vector
let val = maxffts[{$run}]
let part = 0
* Check if val fits into a bin. If yes, raise bin by 1
dowhile part < bin_count
if ((val < (startfreq + (part+1)*bin_size)) & (val >= (startfreq + part*bin_size)))
let yvec[part] = yvec[part] + 1
break
end
let part = part + 1
end
let run = run + 1
end
* plot the histogram
let count = yvec - 1 ; subtract 1 because we started with unitvec containing ones
if $?sharedmode or $?win_console
gnuplot np_pl3 count vs osc_frequ combplot
else
plot count vs osc_frequ combplot
end
* calculate jitter
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
echo
echo Max. jitter is "$&diff40" MHz
end
rusage
* quit
end

View File

@ -0,0 +1,286 @@
Perform Monte Carlo simulation in ngspice
* 25 stage Ring-Osc. BSIM3 with statistical variation of various model parameters
* cd into ngspice/examples/Monte_Carlo
* start in interactive mode 'ngspice MC_ring.sp' with several plots for output
* or start in batch mode, controlled by .control section (Control mode)
* with 'ngspice -b -r MC_ring.raw -o MC_ring.log MC_ring.sp'.
vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1
vdd dd 0 dc 3.3
vss ss 0 dc 0
ve sub 0 dc 0
vpe well 0 dc 3.3
.subckt inv1 dd ss sub well in out
mn1 out in ss sub n1 w=2u l=0.35u as=3p ad=3p ps=4u pd=4u
mp1 out in dd well p1 w=4u l=0.35u as=7p ad=7p ps=6u pd=6u
.ends inv1
.subckt inv5 dd ss sub well in out
xinv1 dd ss sub well in 1 inv1
xinv2 dd ss sub well 1 2 inv1
xinv3 dd ss sub well 2 3 inv1
xinv4 dd ss sub well 3 4 inv1
xinv5 dd ss sub well 4 out inv1
.ends inv5
xinv1 dd ss sub well in out5 inv5
xinv2 dd ss sub well out5 out10 inv5
xinv3 dd ss sub well out10 out15 inv5
xinv4 dd ss sub well out15 out20 inv5
xinv5 dd ss sub well out20 out inv5
xinv11 dd 0 sub well out buf inv1
cout buf ss 0.2pF
*
.options noacct
.control
save buf ; we just need buf, save memory by more than 10x
let mc_runs = 10 ; number of runs for monte carlo
let run = 0 ; number of actual run
set curplot = new ; create a new plot
set curplottitle = "Transient outputs"
set plot_out = $curplot ; store its name to 'plot_out'
set curplot = new ; create a new plot
set curplottitle = "FFT outputs"
set plot_fft = $curplot ; store its name to 'plot_fft'
set curplot = new ; create a new plot
set curplottitle = "Oscillation frequency"
set max_fft = $curplot ; store its name to 'max_fft'
let mc_runsp = mc_runs + 1
let maxffts = unitvec(mc_runsp) ; vector for storing max measure results
let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising
*
* define distributions for random numbers:
* unif: uniform distribution, deviation relativ to nominal value
* aunif: uniform distribution, deviation absolut
* gauss: Gaussian distribution, deviation relativ to nominal value
* agauss: Gaussian distribution, deviation absolut
define unif(nom, var) (nom + (nom*var) * sunif(0))
define aunif(nom, avar) (nom + avar * sunif(0))
define gauss(nom, var, sig) (nom + (nom*var)/sig * sgauss(0))
define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0))
*
* We want to vary the model parameters vth0, u0, tox, lint, and wint
* of the BSIM3 model for the NMOS and PMOS transistors.
* We may obtain the nominal values (nom) by manually extracting them from
* the parameter set. Here we get them automatically and store them into
* vectors. This has the advantage that you may change the parameter set
* without having to look up the values again.
let n1vth0=@n1[vth0]
let n1u0=@n1[u0]
let n1tox=@n1[tox]
let n1lint=@n1[lint]
let n1wint=@n1[wint]
let p1vth0=@p1[vth0]
let p1u0=@p1[u0]
let p1tox=@p1[tox]
let p1lint=@p1[lint]
let p1wint=@p1[wint]
*
* run the simulation loop
dowhile run <= mc_runs
* run=0 simulates with nominal parameters
if run > 0
setplot $max_fft
altermod @n1[vth0] = gauss(n1vth0, 0.1, 3)
altermod @n1[u0] = gauss(n1u0, 0.05, 3)
altermod @n1[tox] = gauss(n1tox, 0.1, 3)
altermod @n1[lint] = gauss(n1lint, 0.1, 3)
altermod @n1[wint] = gauss(n1wint, 0.1, 3)
altermod @p1[vth0] = gauss(p1vth0, 0.1, 3)
altermod @p1[u0] = gauss(p1u0, 0.1, 3)
altermod @p1[tox] = gauss(p1tox, 0.1, 3 )
altermod @p1[lint] = gauss(p1lint, 0.1, 3)
altermod @p1[wint] = gauss(p1wint, 0.1, 3)
end
tran 15p 1n 0
* select stop and step so that number of data points after linearization is not too
* close to 8192, which would yield varying number of line length and thus scale for fft.
*
* We have to figure out what to do if a single simulation will not converge.
* There is the variable 'sim_status' which is set to 1 if the simulation
* fails with xx simulation(s) aborted, e.g. because of non-convergence.
* Then we might skip this run and continue with a new run.
*
echo Simulation status $sim_status
let simstat = $sim_status
if simstat = 1
if run = mc_runs
echo go to end
else
echo go to next run
end
destroy $curplot
goto next
end
set run ="$&run" ; create a variable from the vector
set mc_runs ="$&mc_runs" ; create a variable from the vector
echo simulation run no. $run of $mc_runs
set dt = $curplot
* save the linearized data for having equal time scales for all runs
linearize buf ; linearize only buf, no other vectors needed
destroy $dt ; delete the tran i plot
set dt = $curplot ; store the current plot to dt (tran i+1)
setplot $plot_out ; make 'plt_out' the active plot
* firstly save the time scale once to become the default scale
if run=0
let time={$dt}.time
end
let vout{$run}={$dt}.buf ; store the output vector to plot 'plot_out'
setplot $dt ; go back to the previous plot (tran i+1)
fft buf ; run fft on vector buf
destroy $dt ; delete the tran i+1 plot
let buf2=db(mag(buf))
* find the frequency where buf has its maximum of the fft signal
meas sp fft_max MAX_AT buf2 from=0.1G to=0.7G
* find the frequency where buf is -40dB at rising fft signal
meas sp fft_40 WHEN buf2=-40 RISE=1 from=0.1G to=0.7G
echo
echo
* store the fft vector
set dt = $curplot ; store the current plot to dt (spec i)
setplot $plot_fft ; make 'plot_fft' the active plot
if run=0
let frequency={$dt}.frequency
end
let fft{$run}={$dt}.buf ; store the output vector to plot 'plot_fft'
* store the measured value
setplot $max_fft ; make 'max_fft' the active plot
let maxffts[{$run}]={$dt}.fft_max
let halfffts[{$run}]={$dt}.fft_40
let run = run + 1
label next
reset
end
***** plotting **********************************************************
if $?batchmode
echo
echo Plotting not available in batch mode
echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile
echo
write $rawfile {$plot_out}.allv
rusage
quit
else
setplot $plot_out
plot vout0 ylabel 'RO output, original parameters' ; just plot the tran output with nominal parameters
setplot $plot_fft
settype decibel ally
plot db(mag(ally)) xlimit .1G 1G ylimit -80 10 ylabel 'fft output'
*
* create a histogram from vector maxffts
setplot $max_fft ; make 'max_fft' the active plot
set startfreq=400MEG
set bin_size=5MEG
set bin_count=20
compose xvec start=$startfreq step=$bin_size lin=$bin_count ; requires variables as parameters
settype frequency xvec
let bin_count=$bin_count ; create a vector from the variable
let yvec=unitvec(bin_count) ; requires vector as parameter
let startfreq=$startfreq
let bin_size=$bin_size
* put data into the correct bins
let run = 0
dowhile run < mc_runs
set run = $&run ; create a variable from the vector
let val = maxffts[{$run}]
let part = 0
* Check if val fits into a bin. If yes, raise bin by 1
dowhile part < bin_count
if ((val < (startfreq + (part+1)*bin_size)) & (val > (startfreq + part*bin_size)))
let yvec[part] = yvec[part] + 1
break
end
let part = part + 1
end
let run = run + 1
end
* plot the histogram
set plotstyle=combplot
plot yvec-1 vs xvec xlabel 'oscillation frequency' ylabel 'bin count' ; subtract 1 because we started with unitvec containing ones
* plot simulation series
set plotstyle=linplot
let xx = vector(mc_runsp)
settype frequency maxffts
plot maxffts vs xx xlabel 'iteration no.' ylabel 'RO frequency'
* calculate jitter
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
echo
echo Max. jitter is "$&diff40" MHz
end
rusage
.endc
********************************************************************************
.model n1 nmos
+level=8
+version=3.3.0
+tnom=27.0
+nch=2.498e+17 tox=9e-09 xj=1.00000e-07
+lint=9.36e-8 wint=1.47e-7
+vth0=.6322 k1=.756 k2=-3.83e-2 k3=-2.612
+dvt0=2.812 dvt1=0.462 dvt2=-9.17e-2
+nlx=3.52291e-08 w0=1.163e-6
+k3b=2.233
+vsat=86301.58 ua=6.47e-9 ub=4.23e-18 uc=-4.706281e-11
+rdsw=650 u0=388.3203 wr=1
+a0=.3496967 ags=.1 b0=0.546 b1=1
+dwg=-6.0e-09 dwb=-3.56e-09 prwb=-.213
+keta=-3.605872e-02 a1=2.778747e-02 a2=.9
+voff=-6.735529e-02 nfactor=1.139926 cit=1.622527e-04
+cdsc=-2.147181e-05
+cdscb=0 dvt0w=0 dvt1w=0 dvt2w=0
+cdscd=0 prwg=0
+eta0=1.0281729e-02 etab=-5.042203e-03
+dsub=.31871233
+pclm=1.114846 pdiblc1=2.45357e-03 pdiblc2=6.406289e-03
+drout=.31871233 pscbe1=5000000 pscbe2=5e-09 pdiblcb=-.234
+pvag=0 delta=0.01
+wl=0 ww=-1.420242e-09 wwl=0
+wln=0 wwn=.2613948 ll=1.300902e-10
+lw=0 lwl=0 lln=.316394 lwn=0
+kt1=-.3 kt2=-.051
+at=22400
+ute=-1.48
+ua1=3.31e-10 ub1=2.61e-19 uc1=-3.42e-10
+kt1l=0 prt=764.3
+noimod=2
+af=1.075e+00 kf=9.670e-28 ef=1.056e+00
+noia=1.130e+20 noib=7.530e+04 noic=-8.950e-13
**** PMOS ***
.model p1 pmos
+level=8
+version=3.3.0
+tnom=27.0
+nch=3.533024e+17 tox=9e-09 xj=1.00000e-07
+lint=6.23e-8 wint=1.22e-7
+vth0=-.6732829 k1=.8362093 k2=-8.606622e-02 k3=1.82
+dvt0=1.903801 dvt1=.5333922 dvt2=-.1862677
+nlx=1.28e-8 w0=2.1e-6
+k3b=-0.24 prwg=-0.001 prwb=-0.323
+vsat=103503.2 ua=1.39995e-09 ub=1.e-19 uc=-2.73e-11
+rdsw=460 u0=138.7609
+a0=.4716551 ags=0.12
+keta=-1.871516e-03 a1=.3417965 a2=0.83
+voff=-.074182 nfactor=1.54389 cit=-1.015667e-03
+cdsc=8.937517e-04
+cdscb=1.45e-4 cdscd=1.04e-4
+dvt0w=0.232 dvt1w=4.5e6 dvt2w=-0.0023
+eta0=6.024776e-02 etab=-4.64593e-03
+dsub=.23222404
+pclm=.989 pdiblc1=2.07418e-02 pdiblc2=1.33813e-3
+drout=.3222404 pscbe1=118000 pscbe2=1e-09
+pvag=0
+kt1=-0.25 kt2=-0.032 prt=64.5
+at=33000
+ute=-1.5
+ua1=4.312e-9 ub1=6.65e-19 uc1=0
+kt1l=0
+noimod=2
+af=9.970e-01 kf=2.080e-29 ef=1.015e+00
+noia=1.480e+18 noib=3.320e+03 noic=1.770e-13
.end

View File

@ -0,0 +1,68 @@
* Effecting a Monte Carlo calculation in ngspice
V1 N001 0 AC 1 DC 0
R1 N002 N001 141
*
C1 OUT 0 1e-09
L1 OUT 0 10e-06
C2 N002 0 1e-09
L2 N002 0 10e-06
L3 N003 N002 40e-06
C3 OUT N003 250e-12
*
R2 0 OUT 141
.control
let mc_runs = 5
let run = 0
set curplot=new ; create a new plot
set scratch=$curplot ; store its name to 'scratch'
setplot $scratch ; make 'scratch' the active plot
let bwh=unitvec(mc_runs) ; create a vector in plot 'scratch' to store bandwidth data
* define distributions for random numbers:
* unif: uniform distribution, deviation relativ to nominal value
* aunif: uniform distribution, deviation absolut
* gauss: Gaussian distribution, deviation relativ to nominal value
* agauss: Gaussian distribution, deviation absolut
* limit: if unif. distributed value >=0 then add +avar to nom, else -avar
define unif(nom, rvar) (nom + (nom*rvar) * sunif(0))
define aunif(nom, avar) (nom + avar * sunif(0))
define gauss(nom, rvar, sig) (nom + (nom*rvar)/sig * sgauss(0))
define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0))
* define limit(nom, avar) (nom + ((sgauss(0) ge 0) ? avar : -avar))
define limit(nom, avar) (nom + ((sgauss(0) >= 0) ? avar : -avar))
*
*
dowhile run < mc_runs ; loop starts here
*
* alter c1 = unif(1e-09, 0.1)
* alter c1 = aunif(1e-09, 100e-12)
* alter c1 = gauss(1e-09, 0.1, 3)
* alter c1 = agauss(1e-09, 100e-12, 3)
*
alter c1 = unif(1e-09, 0.1)
alter l1 = unif(10e-06, 0.1)
alter c2 = unif(1e-09, 0.1)
alter l2 = unif(10e-06, 0.1)
alter l3 = unif(40e-06, 0.1)
alter c3 = limit(250e-12, 25e-12)
*
ac oct 100 250K 10Meg
*
* measure bandwidth at -10 dB
meas ac bw trig vdb(out) val=-10 rise=1 targ vdb(out) val=-10 fall=1
*
set run = $&run ; create a variable from the vector
set dt = $curplot ; store the current plot to dt
setplot $scratch ; make 'scratch' the active plot
let vout{$run}={$dt}.v(out) ; store the output vector to plot 'scratch'
let bwh[run]={$dt}.bw ; store bw to vector bwh in plot 'scratch'
setplot $dt ; go back to the previous plot
let run = run + 1
end ; loop ends here
*
plot db({$scratch}.allv)
echo
print {$scratch}.bwh
.endc
.end

View File

@ -0,0 +1,88 @@
OPWIEN.CIR - OPAMP WIEN-BRIDGE OSCILLATOR
* http://www.ecircuitcenter.com/circuits/opwien/opwien.htm
* single simulation run
* 2 resistors and 2 capacitors of Wien bridge a varied statistically
* number of variations: varia
* Simulation time
.param ttime=120m
.param varia=100
.param ttime10 = 'ttime/varia'
* nominal resistor and capacitor values
.param res = 10k
.param cn = 16NF
* CURRENT PULSE TO START OSCILLATIONS
IS 0 3 dc 0 PWL(0US 0MA 10US 0.1MA 40US 0.1MA 50US 0MA 10MS 0MA)
*
* RC TUNING
VR2 r2 0 dc 0 trrandom (2 'ttime10' 0 1) ; Gauss controlling voltage
*
*VR2 r2 0 dc 0 trrandom (1 'ttime10' 0 3) ; Uniform within -3 3
*
* If Gauss, factor 0.033 is 10% equivalent to 3 sigma
* if uniform, uniform between +/- 10%
R2 4 6 R = 'res + 0.033 * res*V(r2)' ; behavioral resistor
*R2 4 6 'res' ; constant R
VC2 c2 0 dc 0 trrandom (2 'ttime10' 0 1)
*C2 6 3'cn' ; constant C
C2 6 3 C = 'cn + 0.033 * cn*V(c2)' ; behavioral capacitor
VR1 r1 0 dc 0 trrandom (2 'ttime10' 0 1)
*VR1 r1 0 dc 0 trrandom (1 'ttime10' 0 3)
R1 3 0 R = 'res + 0.033 * res*V(r1)'
*R1 3 0 'res'
VC1 c1 0 dc 0 trrandom (2 'ttime10' 0 1)
C1 3 0 C = 'cn + 0.033 * cn*V(c2)'
*C1 3 0 'cn'
* NON-INVERTING OPAMP
R10 0 2 10K
R11 2 5 18K
XOP 3 2 4 OPAMP1
* AMPLITUDE STABILIZATION
R12 5 4 5K
D1 5 4 D1N914
D2 4 5 D1N914
*
.model D1N914 D(Is=0.1p Rs=16 CJO=2p Tt=12n Bv=100 Ibv=0.4n)
*
* OPAMP MACRO MODEL, SINGLE-POLE
* connections: non-inverting input
* | inverting input
* | | output
* | | |
.SUBCKT OPAMP1 1 2 6
* INPUT IMPEDANCE
RIN 1 2 10MEG
* DC GAIN (100K) AND POLE 1 (100HZ)
EGAIN 3 0 1 2 100K
RP1 3 4 1K
CP1 4 0 1.5915UF
* OUTPUT BUFFER AND RESISTANCE
EBUFFER 5 0 4 0 1
ROUT 5 6 10
.ENDS
*
* ANALYSIS
.TRAN 0.05MS 'ttime'
*
* VIEW RESULTS
.control
option noinit
run
plot V(4) 5*V(r1) 5*V(r2) 5*V(c1) 5*V(c2)
linearize v(4)
fft v(4)
let v4mag = mag(v(4))
plot v4mag
plot v4mag xlimit 500 1500
*wrdata histo v4mag
rusage
quit
.endc
.END

View File

@ -0,0 +1,87 @@
OPWIEN.CIR - OPAMP WIEN-BRIDGE OSCILLATOR
* http://www.ecircuitcenter.com/circuits/opwien/opwien.htm
* single simulation run
* 2 resistors and 2 capacitors of Wien bridge a varied statistically
* number of variations: varia
* Simulation time
.param ttime=1200m
.param varia=100
.param ttime10 = 'ttime/varia'
* nominal resistor and capacitor values
.param res = 10k
.param cn = 16NF
* CURRENT PULSE TO START OSCILLATIONS
IS 0 3 dc 0 PWL(0US 0MA 10US 0.1MA 40US 0.1MA 50US 0MA 10MS 0MA)
*
* RC TUNING
VR2 r2 0 dc 0 trrandom (2 'ttime10' 0 1) ; Gauss controlling voltage
*
*VR2 r2 0 dc 0 trrandom (1 'ttime10' 0 3) ; Uniform within -3 3
*
* If Gauss, factor 0.033 is 10% equivalent to 3 sigma
* if uniform, uniform between +/- 10%
R2 4 6 R = 'res + 0.033 * res*V(r2)' ; behavioral resistor
*R2 4 6 'res' ; constant R
VC2 c2 0 dc 0 trrandom (2 'ttime10' 0 1)
*C2 6 3'cn' ; constant C
C2 6 3 C = 'cn + 0.033 * cn*V(c2)' ; behavioral capacitor
VR1 r1 0 dc 0 trrandom (2 'ttime10' 0 1)
*VR1 r1 0 dc 0 trrandom (1 'ttime10' 0 3)
R1 3 0 R = 'res + 0.033 * res*V(r1)'
*R1 3 0 'res'
VC1 c1 0 dc 0 trrandom (2 'ttime10' 0 1)
C1 3 0 C = 'cn + 0.033 * cn*V(c2)'
*C1 3 0 'cn'
* NON-INVERTING OPAMP
R10 0 2 10K
R11 2 5 18K
XOP 3 2 4 OPAMP1
* AMPLITUDE STABILIZATION
R12 5 4 5K
D1 5 4 D1N914
D2 4 5 D1N914
*
.model D1N914 D(Is=0.1p Rs=16 CJO=2p Tt=12n Bv=100 Ibv=0.4n)
*
* OPAMP MACRO MODEL, SINGLE-POLE
* connections: non-inverting input
* | inverting input
* | | output
* | | |
.SUBCKT OPAMP1 1 2 6
* INPUT IMPEDANCE
RIN 1 2 10MEG
* DC GAIN (100K) AND POLE 1 (100HZ)
EGAIN 3 0 1 2 100K
RP1 3 4 1K
CP1 4 0 1.5915UF
* OUTPUT BUFFER AND RESISTANCE
EBUFFER 5 0 4 0 1
ROUT 5 6 10
.ENDS
*
* ANALYSIS
.TRAN 0.05MS 'ttime'
*
* VIEW RESULTS
.control
option noinit
run
plot V(4) 5*V(r1) 5*V(r2) 5*V(c1) 5*V(c2)
linearize v(4)
fft v(4)
let v4mag = mag(v(4))
plot v4mag
plot v4mag xlimit 500 1500
*wrdata histo v4mag
rusage
.endc
.END

View File

@ -0,0 +1,58 @@
Perform Monte Carlo simulation in ngspice
* 25 stage Ring-Osc. BSIM3 or 4 with statistical variation of model parameters
* Model parameters are varied according to the PDK selection.
* Tested with 3 different commercial HSPICE libraries from 2 vendors.
* To be started with script MC_ring_ts.sp
.options noacct seedinfo
vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1
vdd dd 0 dc 3.3
vss ss 0 dc 0
ve sub 0 dc 0
vpe well 0 dc 3.3
* transistors to be selected according to the library (here: p33ll and n33ll or pch_5_mac and nch_5_mac
* or pe3 and ne3 or p1 and n1 (these models see below))
.subckt inv1 dd ss sub well in out
*XMP1 out in dd well p33ll w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1
*XMN1 out in ss sub n33ll w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1
*XMP1 out in dd well pch_5_mac w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1
*XMN1 out in ss sub nch_5_mac w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1
*XMP1 out in dd well pe3 w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1
*XMN1 out in ss sub ne3 w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1
MP1 out in dd well p1 w=5u l=800n m=3 ad=1.35p as=1.35p pd=9.6u ps=9.6u
MN1 out in ss sub n1 w=5u l=800n m=1 ad=0.9p as=0.9p pd=6.6u ps=6.6u
.ends inv1
.subckt inv5 dd ss sub well in out
xinv1 dd ss sub well in 1 inv1
xinv2 dd ss sub well 1 2 inv1
xinv3 dd ss sub well 2 3 inv1
xinv4 dd ss sub well 3 4 inv1
xinv5 dd ss sub well 4 out inv1
.ends inv5
xinv1 dd ss sub well in out5 inv5
xinv2 dd ss sub well out5 out10 inv5
xinv3 dd ss sub well out10 out15 inv5
xinv4 dd ss sub well out15 out20 inv5
xinv5 dd ss sub well out20 out inv5
xinv11 dd 0 sub well out buf inv1
cout buf ss 0.2pF
.ic v(out20) = 0
*** Model library files.
* Add your library here
* Chose the transistors for XMP1 and XMN1 accordingly
*.lib "jc_usage.l" MC_LIB
*.lib "my_ts_usage.l" MC_LIB
*.lib "x_usage.l" MC_LIB
* or use the BSIM3 model with internal parameters except Vth0
* that varies the threshold voltage +-3 sigma around a mean of +-0.6V
.model p1 PMOS version=3.3.0 Level=8 Vth0=agauss(-0.6, 0.1, 3)
.model n1 NMOS version=3.3.0 Level=8 Vth0=agauss(0.6, 0.1, 3)
.end

View File

@ -0,0 +1,212 @@
Perform Monte Carlo simulation in ngspice
* 25 stage Ring-Osc. BSIM3 or 4 with statistical variation of model parameters
* Model parameters are varied according to the PDK selection.
* Tested with 3 different commercial HSPICE libraries from 2 vendors.
* Add your library to mc_ring_circ.net and choose transistors accordingly.
* Add the library path to the .LIB statement.
* A simple BSIM3 inverter R.O. serves as an MC example.
.options noacct
vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1
vdd dd 0 dc 3.3
vss ss 0 dc 0
ve sub 0 dc 0
vpe well 0 dc 3.3
* transistors to be selected according to the library (here: p33ll and n33ll or pch_5_mac and nch_5_mac
* or pe3 and ne3 or p1 and n1 (these models see below))
.subckt inv1 dd ss sub well in out
*XMP1 out in dd well p33ll w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1
*XMN1 out in ss sub n33ll w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1
XMP1 out in dd well pch_5_mac w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1
XMN1 out in ss sub nch_5_mac w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1
*XMP1 out in dd well pe3 w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1
*XMN1 out in ss sub ne3 w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1
*MP1 out in dd well p1 w=5u l=800n m=3 ad=1.35p as=1.35p pd=9.6u ps=9.6u
*MN1 out in ss sub n1 w=5u l=800n m=1 ad=0.9p as=0.9p pd=6.6u ps=6.6u
.ends inv1
.subckt inv5 dd ss sub well in out
xinv1 dd ss sub well in 1 inv1
xinv2 dd ss sub well 1 2 inv1
xinv3 dd ss sub well 2 3 inv1
xinv4 dd ss sub well 3 4 inv1
xinv5 dd ss sub well 4 out inv1
.ends inv5
xinv1 dd ss sub well in out5 inv5
xinv2 dd ss sub well out5 out10 inv5
xinv3 dd ss sub well out10 out15 inv5
xinv4 dd ss sub well out15 out20 inv5
xinv5 dd ss sub well out20 out inv5
xinv11 dd 0 sub well out buf inv1
cout buf ss 0.2pF
*** Model library files.
* Add your library here (full path required, or path relative to path
* of ngspice executable (interactive mode), or relative to path of
* input file (batch mode))
* Chose the transistors for XMP1 and XMN1 according to the library
*.lib "jc_usage.l" MC_LIB
*.lib "../../../various/lib-test/my_usage.l" MC_LIB
.lib "D:\Spice_general\tests\lib-test\ts14\my_ts_usage.l" MC_LIB
*.lib "x_usage.l" MC_LIB
* or use the BSIM3 model with internal parameters except Vth0
* that varies the threshold voltage +-3 sigma around a mean of +-0.6V
*.model p1 PMOS version=3.3.0 Level=8 Vth0=agauss(-0.6, 0.1, 3)
*.model n1 NMOS version=3.3.0 Level=8 Vth0=agauss(0.6, 0.1, 3)
.control
let mc_runs = 10 ; number of runs for monte carlo
let run = 0 ; number of actual run
set curplot = new ; create a new plot
set curplottitle = "Transient outputs"
set plot_out = $curplot ; store its name to 'plot_out'
set curplot = new ; create a new plot
set curplottitle = "FFT outputs"
set plot_fft = $curplot ; store its name to 'plot_fft'
set curplot = new ; create a new plot
set curplottitle = "Oscillation frequency"
set max_fft = $curplot ; store its name to 'max_fft'
let mc_runsp = mc_runs + 1
let maxffts = unitvec(mc_runsp) ; vector for storing max measure results
let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising
unlet mc_runsp
set mc_runs = $&mc_runs ; create a variable from the vector
let seeds = mc_runs + 2
setseed $&seeds
unlet seeds
save buf ; we just need buf, save memory by more than 10x
* run the simulation loop
* We have to figure out what to do if a single simulation will not converge.
* There is now the variable sim_status, that is 0 if simulation ended regularly,
* and 1 if the simulation has been aborted with error message '...simulation(s) aborted'.
* Then we skip the rest of the run and continue with a new run.
dowhile run <= mc_runs
set run = $&run ; create a variable from the vector
* run=0 simulates with nominal parameters
if run > 0
echo
echo * * * * * *
echo Source the circuit again internally for run no. $run
echo * * * * * *
setseed $run
mc_source ; re-source the input file
else
echo run no. $run
end
echo simulation run no. $run of $mc_runs
tran 100p 1000n 0
echo Simulation status $sim_status
let simstat = $sim_status
if simstat = 1
if run = mc_runs
echo go to end
else
echo go to next run
end
destroy $curplot
goto next
end
* select stop and step so that number of data points after linearization is not too
* close to 8192, which would yield varying number of line length and thus scale for fft.
*
set dt0 = $curplot
* save the linearized data for having equal time scales for all runs
linearize buf ; linearize only buf, no other vectors needed
set dt1 = $curplot ; store the current plot to dt (tran i+1)
setplot $plot_out ; make 'plt_out' the active plot
* firstly save the time scale once to become the default scale
if run=0
let time={$dt1}.time
end
let vout{$run}={$dt1}.buf ; store the output vector to plot 'plot_out'
setplot $dt1 ; go back to the previous plot (tran i+1)
fft buf ; run fft on vector buf
let buf2=db(mag(buf))
* find the frequency where buf has its maximum of the fft signal
meas sp fft_max MAX_AT buf2 from=0.05G to=0.7G
* find the frequency where buf is -40dB at rising fft signal
meas sp fft_40 WHEN buf2=-40 RISE=1 from=0.05G to=0.7G
* store the fft vector
set dt2 = $curplot ; store the current plot to dt (spec i)
setplot $plot_fft ; make 'plot_fft' the active plot
if run=0
let frequency={$dt2}.frequency
end
let fft{$run}={$dt2}.buf ; store the output vector to plot 'plot_fft'
* store the measured value
setplot $max_fft ; make 'max_fft' the active plot
let maxffts[{$run}]={$dt2}.fft_max
let halfffts[{$run}]={$dt2}.fft_40
destroy $dt0 $dt1 $dt2 ; save memory, we don't need this plot (spec) any more
label next
remcirc
let run = run + 1
end
***** plotting **********************************************************
if $?batchmode
echo
echo Plotting not available in batch mode
echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile
echo
write $rawfile {$plot_out}.allv
rusage
quit
else
plot {$plot_out}.vout0 ; just plot the tran output with run 0 parameters
setplot $plot_fft
plot db(mag(ally)) xlimit 0 1G ylimit -80 10
*
* create a histogram from vector maxffts
setplot $max_fft ; make 'max_fft' the active plot
set startfreq=50MEG
set bin_size=1MEG
set bin_count=100
compose osc_frequ start=$startfreq step=$bin_size lin=$bin_count ; requires variables as parameters
settype frequency osc_frequ
let bin_count=$bin_count ; create a vector from the variable
let yvec=unitvec(bin_count) ; requires vector as parameter
let startfreq=$startfreq
let bin_size=$bin_size
* put data into the correct bins
let run = 0
dowhile run < mc_runs
set run = $&run ; create a variable from the vector
let val = maxffts[{$run}]
let part = 0
* Check if val fits into a bin. If yes, raise bin by 1
dowhile part < bin_count
if ((val < (startfreq + (part+1)*bin_size)) & (val > (startfreq + part*bin_size)))
let yvec[part] = yvec[part] + 1
break
end
let part = part + 1
end
let run = run + 1
end
* plot the histogram
set plotstyle=combplot
let counts = yvec - 1 ; subtract 1 because we started with unitvec containing ones
plot counts vs osc_frequ
* calculate jitter
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
echo
echo Max. jitter is "$&diff40" MHz
end
rusage
* quit
.endc
.end

View File

@ -0,0 +1,9 @@
simple test for names = ft_getpnames() versus free_pnode(names)
.control
let buf = [ 1 2 3 ]
let buf2=db(mag(buf))
quit
.endc
.end

View File

@ -0,0 +1,21 @@
simple test for names = ft_getpnames() versus free_pnode(names)
* altermod
R1 1 0 RE
V1 1 0 1
.model RE r r=1
.control
op
print all
define gauss(nom, var, sig) (nom + (nom*var)/sig * sgauss(0))
altermod r1 R = (1 + (1 * 2) / 3 * sgauss(0)) ; no leak
* altermod @r1[r] = gauss(1,2,3) ; leak
* altermod r1 r = gauss(1,2,3) ; leak
op
print all
quit
.endc
.end

View File

@ -0,0 +1,9 @@
simple test for names = ft_getpnames() versus free_pnode(names)
.control
let buf = 0
let buf = buf + 1
quit
.endc
.end

View File

@ -0,0 +1,40 @@
*** random number test for scope-inpcom-8
*** Start value of seed for random number generator: variable 'rndseed' is set to 1
*** and random number generator is seeded with this value.
*** You may override this value by adding 'setseed 5' or similar to file .spiceinit.
*** print a message when the random number generator gets a new seed
.option seedinfo
*** like HSPICE: set rndseed to (number of seconds since 1.1.1970 - 1470000000)
*** and seed the random number generator with rndseed
*.option seed = random
*** like HSPICE: set rndseed to 55
*** and seed the random number generator with rndseed (here 55)
.option seed = 55
*** the 'circuit'
.param myval = agauss(0, 1, 1)
v1 1 0 'myval'
*** the .control script
.control
*** set variable rndseed to value 11
*set rndseed = 11
*** seed the random number generator with value from variable rndseed
*setseed
*** seed the random number generator with value 12 and set rndseed to 12
setseed 12
*** reload circuit and re-evaluate all random functions (agauss etc.)
mc_source
*** simulate and print result
op
print v(1)
.endc
.end

View File

@ -0,0 +1,41 @@
This directory holds a SPICE netlist with SPICE2 POLY constructs in
controlled sources as typically found in vendor models. The circuit
is just a two-stage transimpedance amp using an AD8009,
along with some slow components (AD780 and OP177A) to set bias
points. Vendor models are used for all active components.
Successfully running this test shows that you have successfully built
the XSpice stuff with the POLY codemodel, and that you should be able
to simulate SPICE netlists with embedded vendor models.
To run this netlist, just do the following:
[localhost]# ngspice
ngspice 1 -> source output.net
ngspice 2 -> run
ngspice 3 -> plot Vout2
(Note that when you read in the netlist, you will get a bunch of
warnings saying stuff like:
Warning -- Level not specified on line "()"
Using level 1.
Also, ngspice will complain about:
Error on line 50 : r:u101:1 u101:40 0 1e3 tc=7e-6
unknown parameter (tc)
Error on line 283 : .temp 0 25 50 75 100
Warning: .TEMP card obsolete - use .options TEMP and TNOM
You can ignore all this stuff . . . .)
You should get a pop-up window showing two square pulses (the second
smaller than the first) with a little bit of overshoot on the rising
and falling edges.
This stuff was done as an adjunct to work on the gEDA project.
Information about gEDA is available at http://geda.seul.org/ .
Please direct all questions/suggestions/bugs/complaints about XSpice
extensions to ngspice to Stuart Brorson -- mailto:sdb@cloud9.net.
6.23.2002 -- SDB.

View File

@ -0,0 +1,469 @@
*********************************************************
* Spice file generated by gnetlist *
* spice-SDB version 3.30.2003 by SDB -- *
* provides advanced spice netlisting capability. *
* Documentation at http://www.brorson.com/gEDA/SPICE/ *
*********************************************************
* Batch command
* ngspice -b -o output.log output.net
* will generate a nice printer plot in output.log
* (remember the old times !)
* Interactive commands for usage:
* run
* plot vout1 vout2
* Command stuff
.options gmin=1e-9
.options method=gear
.options abstol=1e-11
* .ac dec 10 10MegHz 10 Ghz
* Remainder of file
R112 0 6 1Meg
R111 0 8 10Meg
R110 0 7 1Meg
Rref2in 11 VU780out 25000
Rref2fb VU2bias+ 11 33
C201 0 9 1uF
C202 10 0 1uF
XU200 0 11 10 9 VU2bias+ OP177A
R202 10 +5V 22
R201 -5V 9 22
Rref1in VU100in- VU780out 9130
Rref1fb VU1bias+ VU100in- 33
XU101 +5V 7 0 6 VU780out 8 AD780A
* AD780A SPICE Macromodel 5/93, Rev. A
* AAG / PMI
*
* This version of the AD780 voltage reference model simulates the worst case
* parameters of the 'A' grade. The worst case parameters used
* correspond to those in the data sheet.
*
* Copyright 1993 by Analog Devices, Inc.
*
* Refer to "README.DOC" file for License Statement. Use of this model
* indicates your acceptance with the terms and provisions in the License Statement.
*
* NODE NUMBERS
* VIN
* | TEMP
* | | GND
* | | | TRIM
* | | | | VOUT
* | | | | | RANGE
* | | | | | |
.SUBCKT AD780A 2 3 4 5 6 8
*
* BANDGAP REFERENCE
*
I1 4 40 DC 1.21174E-3
R1 40 4 1E3 TC=7E-6
EN 10 40 42 0 1
G1 4 10 2 4 4.85668E-9
F1 4 10 POLY(2) VS1 VS2 (0,2.42834E-5,3.8E-5)
Q1 2 10 11 QT
I2 11 4 DC 12.84E-6
R2 11 3 1E3
I3 3 4 DC 0
*
* NOISE VOLTAGE GENERATOR
*
VN1 41 0 DC 2
DN1 41 42 DEN
DN2 42 43 DEN
VN2 0 43 DC 2
*
* INTERNAL OP AMP
*
G2 4 12 10 20 1.93522E-4
R3 12 4 2.5837E9
C1 12 4 6.8444E-11
D1 12 13 DX
V1 2 13 DC 1.2
*
* SECONDARY POLE @ 508 kHz
*
G3 4 14 12 4 1E-6
R4 14 4 1E6
C2 14 4 3.1831E-13
*
* OUTPUT STAGE
*
ISY 2 4 6.8282E-4
FSY 2 4 V1 -1
RSY 2 4 500E3
*
G4 4 15 14 4 25E-6
R5 15 4 40E3
Q2 4 15 16 QP
I4 2 16 DC 100E-6
Q3 4 16 18 QP
R6 18 23 15
R7 16 21 150E3
R8 2 17 34.6
Q4 17 16 19 QN
R9 21 20 6.46E3
R10 20 4 6.1E3
R11 20 5 53E3
R12 20 8 15.6E3
I5 5 4 DC 0
I6 8 4 DC 0
VS1 21 19 DC 0
VS2 23 21 DC 0
L1 21 6 1E-7
*
* OUTPUT CURRENT LIMIT
*
FSC 15 4 VSC 1
VSC 2 22 DC 0
QSC 22 2 17 QN
*
.MODEL QT NPN(level=1 IS=1.68E-16 BF=1E4)
.MODEL QN NPN(level=1 IS=1E-15 BF=1E3)
.MODEL QP PNP(level=1 IS=1E-15 BF=1E3)
.MODEL DX D(IS=1E-15)
.MODEL DEN D(IS=1E-12 RS=2.425E+05 AF=1 KF=6.969E-16)
.ENDS AD780A
C101 0 U100V- 1uF
C102 U100V+ 0 1uF
XU100 0 VU100in- U100V+ U100V- VU1bias+ OP177A
* OP177A SPICE Macro-model 12/90, Rev. B
* JCB / PMI
*
* Revision History:
* REV. B
* Re-ordered subcircuit call out nodes to put the
* output node last.
* Changed Ios from 1E-9 to 0.5E-9
* Added F1 and F2 to fix short circuit current limit.
*
*
* This version of the OP-177 model simulates the worst case
* parameters of the 'A' grade. The worst case parameters
* used correspond to those in the data book.
*
*
* Copyright 1990 by Analog Devices, Inc.
*
* Refer to "README.DOC" file for License Statement. Use of this model
* indicates your acceptance with the terms and provisions in the License Statement.
*
* Node assignments
* non-inverting input
* | inverting input
* | | positive supply
* | | | negative supply
* | | | | output
* | | | | |
.SUBCKT OP177A 1 2 99 50 39
*
* INPUT STAGE & POLE AT 6 MHZ
*
R1 2 3 5E11
R2 1 3 5E11
R3 5 97 0.0606
R4 6 97 0.0606
CIN 1 2 4E-12
C2 5 6 218.9E-9
I1 4 51 1
IOS 1 2 0.5E-9
EOS 9 10 POLY(1) 30 33 10E-6 1
Q1 5 2 7 QX
Q2 6 9 8 QX
R5 7 4 0.009
R6 8 4 0.009
D1 2 1 DX
D2 1 2 DX
EN 10 1 12 0 1
GN1 0 2 15 0 1
GN2 0 1 18 0 1
*
EREF 98 0 33 0 1
EPLUS 97 0 99 0 1
ENEG 51 0 50 0 1
*
* VOLTAGE NOISE SOURCE WITH FLICKER NOISE
*
DN1 11 12 DEN
DN2 12 13 DEN
VN1 11 0 DC 2
VN2 0 13 DC 2
*
* CURRENT NOISE SOURCE WITH FLICKER NOISE
*
DN3 14 15 DIN
DN4 15 16 DIN
VN3 14 0 DC 2
VN4 0 16 DC 2
*
* SECOND CURRENT NOISE SOURCE
*
DN5 17 18 DIN
DN6 18 19 DIN
VN5 17 0 DC 2
VN6 0 19 DC 2
*
* FIRST GAIN STAGE
*
R7 20 98 1
G1 98 20 5 6 119.8
D3 20 21 DX
D4 22 20 DX
E1 97 21 POLY(1) 97 33 -2.4 1
E2 22 51 POLY(1) 33 51 -2.4 1
*
* GAIN STAGE & DOMINANT POLE AT 0.127 HZ
*
R8 23 98 1.253E9
C3 23 98 1E-9
G2 98 23 20 33 33.3E-6
V1 97 24 1.8
V2 25 51 1.8
D5 23 24 DX
D6 25 23 DX
*
* NEGATIVE ZERO AT -4MHZ
*
R9 26 27 1
C4 26 27 -39.75E-9
R10 27 98 1E-6
E3 26 98 23 33 1E6
*
* COMMON-MODE GAIN NETWORK WITH ZERO AT 63 HZ
*
R13 30 31 1
L2 31 98 2.52E-3
G4 98 30 3 33 0.316E-6
D7 30 97 DX
D8 51 30 DX
*
* POLE AT 2 MHZ
*
R14 32 98 1
C5 32 98 79.5E-9
G5 98 32 27 33 1
*
* OUTPUT STAGE
*
R15 33 97 1
R16 33 51 1
GSY 99 50 POLY(1) 99 50 0.725E-3 0.0425E-3
F1 34 0 V3 1
F2 0 34 V4 1
R17 34 99 400
R18 34 50 400
L3 34 39 2E-7
G6 37 50 32 34 2.5E-3
G7 38 50 34 32 2.5E-3
G8 34 99 99 32 2.5E-3
G9 50 34 32 50 2.5E-3
V3 35 34 6.8
V4 34 36 4.4
D9 32 35 DX
D10 36 32 DX
D11 99 37 DX
D12 99 38 DX
D13 50 37 DY
D14 50 38 DY
*
* MODELS USED
*
.MODEL QX NPN(level=1 BF=333.3E6)
.MODEL DX D(IS=1E-15)
.MODEL DY D(IS=1E-15 BV=50)
.MODEL DEN D(IS=1E-12, RS=14.61K, KF=2E-17, AF=1)
.MODEL DIN D(IS=1E-12, RS=7.55E-6, KF=3E-15, AF=1)
.ENDS
R102 U100V+ +5V 22
R101 -5V U100V- 22
R98 0 VU2bias+ 1K
R99 0 VU1bias+ 1K
C95 VU2bias+ 0 100pF
* C96 0 5 1uF
* C97 4 0 1uF
Cphotodiode 0 Vinput 0.9pF
C99 0 VU1bias+ 100pF
R25 Vout2 2 250
C24 Vout1 VU1in- 1pF
R24 VU1in- 1 150
* C21 0 3 1uF
Cc Vout2 VU2in- 1pF
Rc Vout1 VU2in- 10
RL 0 Vout2 50
.TEMP 0 25 50 75 100
C12 2 0 1.5pF
C11 0 V2- .01uF
C10 V2+ 0 .01uF
R13 +5V V2+ 5
R12 V2- -5V 5
R26 2 VU2in- 150
R11 Vout2 VU2in- 180
XU2 VU2bias+ VU2in- V2+ V2- Vout2 AD8009an
XU1 VU1bias+ VU1in- V1+ V1- Vout1 AD8009an
***** AD8009 SPICE model Rev B SMR/ADI 8-21-97
* Copyright 1997 by Analog Devices, Inc.
* Refer to "README.DOC" file for License Statement. Use of this model
* indicates your acceptance with the terms and provisions in the License Statement.
* rev B of this model corrects a problem in the output stage that would not
* correctly reflect the output current to the voltage supplies
* This model will give typical performance characteristics
* for the following parameters;
* closed loop gain and phase vs bandwidth
* output current and voltage limiting
* offset voltage (is static, will not vary with vcm)
* ibias (again, is static, will not vary with vcm)
* slew rate and step response performance
* (slew rate is based on 10-90% of step response)
* current on output will be reflected to the supplies
* vnoise, referred to the input
* inoise, referred to the input
* distortion is not characterized
* Node assignments
* non-inverting input
* | inverting input
* | | positive supply
* | | | negative supply
* | | | | output
* | | | | |
.SUBCKT AD8009an 1 2 99 50 28
* input stage *
q1 50 3 5 qp1
q2 99 5 4 qn1
q3 99 3 6 qn2
q4 50 6 4 qp2
i1 99 5 1.625e-3
i2 6 50 1.625e-3
cin1 1 98 2.6e-12
cin2 2 98 1e-12
v1 4 2 0
* input error sources *
eos 3 1 poly(1) 20 98 2e-3 1
fbn 2 98 poly(1) vnoise3 50e-6 1e-3
fbp 1 98 poly(1) vnoise3 50e-6 1e-3
* slew limiting stage *
fsl 98 16 v1 1
dsl1 98 16 d1
dsl2 16 98 d1
dsl3 16 17 d1
dsl4 17 16 d1
rsl 17 18 0.22
vsl 18 98 0
* gain stage *
f1 98 7 vsl 2
rgain 7 98 2.5e5
cgain 7 98 1.25e-12
dcl1 7 8 d1
dcl2 9 7 d1
vcl1 99 8 1.83
vcl2 9 50 1.83
gcm 98 7 poly(2) 98 0 30 0 0 1e-5 1e-5
* second pole *
epole 14 98 7 98 1
rpole 14 15 1
cpole 15 98 2e-10
* reference stage *
eref 98 0 poly(2) 99 0 50 0 0 0.5 0.5
ecmref 30 0 poly(2) 1 0 2 0 0 0.5 0.5
* vnoise stage *
rnoise1 19 98 4.6e-3
vnoise1 19 98 0
vnoise2 21 98 0.53
dnoise1 21 19 dn
fnoise1 20 98 vnoise1 1
rnoise2 20 98 1
* inoise stage *
rnoise3 22 98 8.18e-6
vnoise3 22 98 0
vnoise4 24 98 0.575
dnoise2 24 22 dn
fnoise2 23 98 vnoise3 1
rnoise4 23 98 1
* buffer stage *
gbuf 98 13 15 98 1e-2
rbuf 98 13 1e2
* output current reflected to supplies *
fcurr 98 40 voc 1
vcur1 26 98 0
vcur2 98 27 0
dcur1 40 26 d1
dcur2 27 40 d1
* output stage *
vo1 99 90 0
vo2 91 50 0
fout1 0 99 poly(2) vo1 vcur1 -9.27e-3 1 -1
fout2 50 0 poly(2) vo2 vcur2 -9.27e-3 1 -1
gout1 90 10 13 99 0.5
gout2 91 10 13 50 0.5
rout1 10 90 2
rout2 10 91 2
voc 10 28 0
rout3 28 98 1e6
dcl3 13 11 d1
dcl4 12 13 d1
vcl3 11 10 -0.445
vcl4 10 12 -0.445
.model qp1 pnp(level=1)
.model qp2 pnp(level=1)
.model qn1 npn(level=1)
.model qn2 npn(level=1)
.model d1 d()
.model dn d(af=1 kf=1e-8)
.ends
R6 1 Vout1 250
C3 1 0 1.5pF
V3 VU1in- Vinput DC 0V
* .INCLUDE /home/sdb/OpticalReceiver/Simulation.cmd
R5 -5V Vout1 1K
I1 0 Vinput AC 1 PWL (0ns 0mA 1nS 0mA 1.01nS 1mA 10nS 1mA 10.01nS 0mA 20nS 0mA 20.01nS .1mA 30nS .1mA 30.01nS 0mA)
R4 V1- -5V 5
C2 0 V1- .01uF
V2 -5V 0 DC -5V
R2 VU1in- Vout1 180
V1 +5V 0 DC 5V
C1 V1+ 0 .01uF
R1 +5V V1+ 5
* When run, this SPICE file should output a square waveform
* with a little overshoot
.tran 0.05ns 4ns
.plot tran Vout2
.control
run
quit
.endc
.END

View File

@ -0,0 +1,63 @@
MOSdriver -- 6.3inch 4 lossy line CPL model -- C load
m1 1 2 6 1 mp1p0 w = 36.0u l=1.0u
m2 1 3 7 1 mp1p0 w = 36.0u l=1.0u
m3 1 4 8 1 mp1p0 w = 36.0u l=1.0u
m4 1 10 5 1 mp1p0 w = 36.0u l=1.0u
m5 1 11 13 1 mp1p0 w = 36.0u l=1.0u
m6 1 12 13 1 mp1p0 w = 36.0u l=1.0u
m7 0 2 6 0 mn0p9 w = 18.0u l=0.9u
m8 0 3 7 0 mn0p9 w = 18.0u l=0.9u
m9 0 4 8 0 mn0p9 w = 18.0u l=0.9u
m10 0 10 5 0 mn0p9 w = 18.0u l=0.9u
m11 14 11 13 0 mn0p9 w = 18.0u l=0.9u
m12 0 12 14 0 mn0p9 w = 18.0u l=0.9u
*
CN5 5 0 0.025398e-12
CN6 6 0 0.007398e-12
CN7 7 0 0.007398e-12
CN8 8 0 0.007398e-12
CN9 9 0 0.097398e-12
CN10 10 0 0.007398e-12
CN11 11 0 0.003398e-12
CN12 12 0 0.004398e-12
CN13 13 0 0.008398e-12
CN14 14 0 0.005398e-12
*
P1 5 6 7 8 0 9 10 11 12 0 pline
*
*
vdd 1 0 DC 5.0
v3 3 0 DC 5.0
*
VS1 2 0 PULSE ( 0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS)
VS2 4 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS )
*
.control
TRAN 0.2N 47.9N 0 0.05N
plot V(5) V(6) V(7) V(8) V(9) V(10) V(11) V(12)
.endc
.MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0
+CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0
+CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL PLINE cpl
+R=0.03 0 0 0
+ 0.03 0 0
+ 0.03 0
+ 0.03
+L=9e-9 5.4e-9 0 0
+ 9e-9 5.4e-9 0
+ 9e-9 5.4e-9
+ 9e-9
+G=0 0 0 0 0 0 0 0 0 0
+C=3.5e-13 -3e-14 0 0
+ 3.5e-13 -3e-14 0
+ 3.5e-13 -3e-14
+ 3.5e-13
+length=6.3
.END

View File

@ -0,0 +1,46 @@
MOSdriver -- 24inch 2 lossy lines CPL model -- C load
m1 0 268 299 0 mn0p9 w = 18.0u l=1.0u
m2 299 267 748 0 mn0p9 w = 18.0u l=1.0u
m3 0 168 648 0 mn0p9 w = 18.0u l=0.9u
m4 1 268 748 1 mp1p0 w = 36.0u l=1.0u
m5 1 267 748 1 mp1p0 w = 36.0u l=1.0u
m6 1 168 648 1 mp1p0 w = 36.0u l=1.0u
*
CN648 648 0 0.025398e-12
CN651 651 0 0.007398e-12
CN748 748 0 0.025398e-12
CN751 751 0 0.009398e-12
CN299 299 0 0.005398e-12
*
P1 648 748 0 651 751 0 PLINE
*
vdd 1 0 DC 5.0
VK 267 0 DC 5.0
*
*VS 168 0 PWL 4 15.9N 0.0 16.1n 5.0 31.9n 5.0 32.1n 0.0
*VS 268 0 PWL 4 15.9N 0.0 16.1n 5.0 31.9n 5.0 32.1n 0.0
*
VS1 168 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N)
VS2 268 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N)
*
.control
TRAN 0.2N 47.9NS 0 1N
plot v(648) v(651) v(751)
.endc
*
.MODEL PLINE CPL
+R=0.2 0
+ 0.2
+L=9.13e-9 3.3e-9
+ 9.13e-9
+G=0 0 0
+C=3.65e-13 -9e-14
+ 3.65e-13
+length=24
******************* MODEL SPECIFICATION **********************
.MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0
+ CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0
+ CJ=0 CJSW=0 TOX=18000N LD=0.0U
.END

View File

@ -0,0 +1,37 @@
6.3inch 4 lossy lines CPL model -- R load
Ra 1 2 1K
Rb 0 3 1K
Rc 0 4 1K
Rd 0 5 1K
Re 6 0 1Meg
Rf 7 0 1Meg
Rg 8 0 1Meg
Rh 9 0 1Meg
*
P1 2 3 4 5 0 6 7 8 9 0 LOSSYMODE
*
*
VS1 1 0 PWL(15.9NS 0.0 16.1Ns 5.0 31.9Ns 5.0 32.1Ns 0.0)
*
.control
TRAN 0.2NS 50NS 0 0.05N
PLOT V(1) V(2) V(6) V(7) V(8) V(9)
.endc
.MODEL LOSSYMODE CPL
+R=0.3 0 0 0
+ 0.3 0 0
+ 0.3 0
+ 0.3
+L=9e-9 5.4e-9 0 0
+ 9e-9 5.4e-9 0
+ 9e-9 5.4e-9
+ 9e-9
+G=0 0 0 0 0 0 0 0 0 0
+C=3.5e-13 -3e-14 0 0
+ 3.5e-13 -3e-14 0
+ 3.5e-13 -3e-14
+ 3.5e-13
+length=6.3
.END

View File

@ -0,0 +1,378 @@
BJTdriver -- 2in st. lin -- 20in coupled line CPL -- 2in st line -- DiodeCircuit
* This unclassified circuit is from Raytheon, courtesy Gerry Marino.
*
* _______
* -------- 2in _________________ 2in | |
* | BJT |______| |______|Diode|
* | |------| |------| |
* | Drvr | line | 2-wire | line |rcvr.|
* -------- | coupled | |_____|
* | transmission |
* |-/\/\/\/\----| line |-------\/\/\/\/\----|
* | 50ohms | | 50ohms |
* | | | |
* Ground ----------------- Ground
*
*
* Each inch of the lossy line is modelled by 10 LRC lumps in the
* Raytheon model.
* The line parameters (derived from the Raytheon input file) are:
* L = 9.13nH per inch
* C = 3.65pF per inch
* R = 0.2 ohms per inch
* K = 0.482 [coupling coefficient; K = M/sqrt(L1*L2)]
* Cc = 1.8pF per inch
*
* coupled ltra model generated using the standalone program
* multi_decomp
* the circuit
*tran 0.1ns 60ns
v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns)
*v1 1 0 4v pulse(4 0 1ns 1ns 1ns 20ns 40ns)
vcc 10 0 5v
* series termination
*x1 1 oof 10 bjtdrvr
*rseries oof 2 50
x1 1 2 10 bjtdrvr
rt1 3 0 50
* convolution model
x2 2 3 4 5 conv2wetcmodel
* rlc segments model
*x2 2 3 4 5 rlc2wetcmodel
x3 4 dioload
rt2 5 0 50
.model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12
+pe=0.5 pc=0.5)
.model dmod1 d(n=2.25 is=1.6399e-4 bv=10)
.model dmod2 d
.model dmod d(vj=0.3v)
.model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10)
.model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10)
.options acct reltol=1e-3 abstol=1e-12
.control
tran 0.1ns 60ns 0 0.35N
plot v(2) v(4) v(5)
.endc
* bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from
* the Raytheon file
.subckt bjtdrvr 19 268 20
q1 22 18 13 qmodn
q2 18 16 13 qmodn
qd2 21 9 0 qmodn
q4 14 14 0 qmodn
q3 16 15 14 qmodpd
q5 8 13 17 qmodn
q6 25 12 0 qmodn
q7 6 17 0 qmodpd
qd1 26 10 0 qmodn
q8 7 11 10 qmodn
*q10 268 17 0 qmodpd
q10 268 17 0 qmodpdmine
q9 7 10 268 qmodn
d1 0 19 dmod1
d2 18 19 dmod2
d3 13 19 dmod
dq1 18 22 dmod
dq2 16 18 dmod
d502 9 21 dmod
dq3 15 16 dmod
d10 24 8 dmod
d4 15 6 dmod
dq6 12 25 dmod
dq7 17 6 dmod
dd1 17 10 dmod
d7 11 6 dmod
dd2 17 26 dmod
d9 23 6 dmod
dq8 11 7 dmod
d501 17 268 dmod
dq9 10 7 dmod
d14 20 27 dmod
d8 0 268 dmod
r1 18 20 6k
r2 22 20 2.2k
r4 0 13 7k
rd1 9 13 2k
rd2 21 13 3k
r3 16 20 10k
r5 15 20 15k
r9 0 17 4k
r6 24 20 750
r10 12 17 2k
r12 24 11 1.5k
r11 25 17 3k
r15 23 20 10k
r13 0 10 15k
r14 7 27 12
.ends bjtdrvr
* subckt dioload - diode load: input=28, output=4, vcc=5
.subckt dioload 28
*comment out everything in dioload except d5 and r503, and watch
* the difference in results obtained between a tran 0.1ns 20ns and
* a tran 0.01ns 20ns
vccint 5 0 5v
c1 28 0 5pF
r503 0 4 5.55
r4 0 28 120k
r5 1 5 7.5k
d5 4 28 diod2
d1 1 28 diod1
d4 2 0 diod1
d3 3 2 diod1
d2 1 3 diod1
.ends dioload
* subckt rlclump - one RLC lump of the lossy line
.subckt rlclump 1 2
*r1 1 3 0.02
*c1 3 0 0.365pF
*l1 3 2 0.913nH
l1 1 3 0.913nH
c1 2 0 0.365pF
r1 3 2 0.02
*r1 1 3 0.01
*c1 3 0 0.1825pF
*l1 3 4 0.4565nH
*r2 4 5 0.01
*c2 5 0 0.1825pF
*l2 5 2 0.4565nH
*c1 1 0 0.365pF
*l1 1 2 0.913nH
.ends lump
.subckt rlconeinch 1 2
x1 1 3 rlclump
x2 3 4 rlclump
x3 4 5 rlclump
x4 5 6 rlclump
x5 6 7 rlclump
x6 7 8 rlclump
x7 8 9 rlclump
x8 9 10 rlclump
x9 10 11 rlclump
x10 11 2 rlclump
.ends rlconeinch
.subckt rlctwoinch 1 2
x1 1 3 rlconeinch
x2 3 2 rlconeinch
.ends rlctwoinch
.subckt rlcfourinch 1 2
x1 1 3 rlconeinch
x2 3 4 rlconeinch
x3 4 5 rlconeinch
x4 5 2 rlconeinch
.ends rlcfourinch
.subckt rlcfiveinch 1 2
x1 1 3 rlconeinch
x2 3 4 rlconeinch
x3 4 5 rlconeinch
x4 5 6 rlconeinch
x5 6 2 rlconeinch
.ends rlcfiveinch
.subckt rlctwentyrlcfourinch 1 2
x1 1 3 rlcfiveinch
x2 3 4 rlcfiveinch
x3 4 5 rlcfiveinch
x4 5 6 rlcfiveinch
x5 6 2 rlcfourinch
.ends rlctwentyrlcfourinch
.subckt rlclumpstub A B C D
x1 A int1 rlcfiveinch
x2 int1 int2 rlcfiveinch
x3 int2 1 rlcfiveinch
x4 1 2 rlcfourinch
x5 1 int3 rlcfiveinch
x6 int3 B rlconeinch
x7 2 C rlcfiveinch
x8 2 D rlcfourinch
.ends rlclumpstub
.subckt ltrastub A B C D
yy1 A 0 1 0 ylline15in
yy2 1 0 B 0 ylline6in
yy3 1 0 2 0 ylline4in
yy4 2 0 C 0 ylline5in
yy5 2 0 D 0 ylline4in
.ends ltrastub
*modelling using R and lossless lines
*5 segments per inch
.model yllfifth txl r=0 g=0 l=9.13e-9 c=3.65e-12 length=0.2
.subckt xlump 1 2
y1 1 0 3 0 yllfifth
r1 2 3 0.04
.ends xlump
.subckt xoneinch 1 2
x1 1 3 xlump
x2 3 4 xlump
x3 4 5 xlump
x4 5 6 xlump
x5 6 2 xlump
*x5 6 7 xlump
*x6 7 8 xlump
*x7 8 9 xlump
*x8 9 10 xlump
*x9 10 11 xlump
*x10 11 2 xlump
.ends xoneinch
.subckt xFourinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 2 xoneinch
.ends xfourinch
.subckt xfiveinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 6 xoneinch
x5 6 2 xoneinch
.ends xfiveinch
.subckt xlumpstub A B C D
x1 A int1 xfiveinch
x2 int1 int2 xfiveinch
x3 int2 1 xfiveinch
x4 1 2 xfourinch
x5 1 int3 xfiveinch
x6 int3 B xoneinch
x7 2 C xfiveinch
x8 2 D xfourinch
.ends xlumpstub
* modelling a 2 wire coupled system using RLC lumps
* 10 segments per inch
*
* 1---xxxxx----2
* 3---xxxxx----4
.subckt rlc2wlump 1 3 2 4
l1 1 5 0.913nH
c1 2 0 0.365pF
r1 5 2 0.02
l2 3 6 0.913nH
c2 4 0 0.365pF
r2 6 4 0.02
cmut 2 4 0.18pF
k12 l1 l2 0.482
.ends rlc2wlump
.subckt rlc2woneinch 1 2 3 4
x1 1 2 5 6 rlc2wlump
x2 5 6 7 8 rlc2wlump
x3 7 8 9 10 rlc2wlump
x4 9 10 11 12 rlc2wlump
x5 11 12 13 14 rlc2wlump
x6 13 14 15 16 rlc2wlump
x7 15 16 17 18 rlc2wlump
x8 17 18 19 20 rlc2wlump
x9 19 20 21 22 rlc2wlump
x10 21 22 3 4 rlc2wlump
.ends rlc2woneinch
.subckt rlc2wfiveinch 1 2 3 4
x1 1 2 5 6 rlc2woneinch
x2 5 6 7 8 rlc2woneinch
x3 7 8 9 10 rlc2woneinch
x4 9 10 11 12 rlc2woneinch
x5 11 12 3 4 rlc2woneinch
.ends rlc2wfiveinch
.subckt rlc2wtwentyinch 1 2 3 4
x1 1 2 5 6 rlc2wfiveinch
x2 5 6 7 8 rlc2wfiveinch
x3 7 8 9 10 rlc2wfiveinch
x4 9 10 3 4 rlc2wfiveinch
.ends rlc2wtwentyinch
.subckt rlc2wetcmodel 1 2 3 4
x1 1 5 rlctwoinch
x2 5 2 6 4 rlc2wtwentyinch
x3 6 3 rlctwoinch
.ends rlc2wetcmodel
* Subcircuit conv2wtwentyinch
* conv2wtwentyinch is a subcircuit that models a 2-conductor transmission line with
* the following parameters: l=9.13e-09, c=3.65e-12, r=0.2, g=0,
* inductive_coeff_of_coupling k=0.482, inter-line capacitance cm=1.8e-12,
* length=20. Derived parameters are: lm=4.40066e-09, ctot=5.45e-12.
*
* It is important to note that the model is a simplified one - the
* following assumptions are made: 1. The self-inductance l, the
* self-capacitance ctot (note: not c), the series resistance r and the
* parallel capacitance g are the same for all lines, and 2. Each line
* is coupled only to the two lines adjacent to it, with the same
* coupling parameters cm and lm. The first assumption imply that edge
* effects have to be neglected. The utility of these assumptions is
* that they make the sL+R and sC+G matrices symmetric, tridiagonal and
* Toeplitz, with useful consequences.
*
* It may be noted that a symmetric two-conductor line will be
* accurately represented by this model.
* swec model
.model plines cpl
+R=0.2 0
+ 0.2
+L=9.13e-9 4.4e-9
+ 9.13e-9
+G=0 0 0
+C=5.45e-12 -1.8e-12
+ 5.45e-12
+length=20
.model yconvtwoinch txl r=0.2 g=0 l=9.13e-9 c=3.65e-12 length=2.0
.subckt conv2wetcmodel 1 2 3 4
y1 1 0 5 0 yconvtwoinch
p2 5 2 0 6 4 0 plines
y2 6 0 3 0 yconvtwoinch
.ends conv2wetcmodel
.end

View File

@ -0,0 +1,82 @@
6-line coupled multiconductor with ECL drivers
vemm mm 0 DC -0.4
vepp pp 0 DC 0.4
vein_left lin 0 PULSE (-0.4 0.4 0N 1N 1N 7N 200N)
vein_right rin 0 PULSE (-0.4 0.4 2N 1N 1N 7N 200N)
* upper 2 lines
x1 lin 0 1 1outn ECL
x2 mm 0 2 2outn ECL
x7 7 0 7r 7routn ECL
x8 8 0 8r 8routn ECL
c7r 7r 0 0.1P
c8r 8r 0 0.1P
* lower 2 lines
x11 pp 0 11 11outn ECL
x12 rin 0 12 12outn ECL
x5 5 0 5l 5loutn ECL
x6 6 0 6l 6loutn ECL
c5l 5l 0 0.1P
c6l 6l 0 0.1P
p1 1 2 3 4 5 6 0 7 8 9 10 11 12 0 pline
.model pline cpl
+C = 0.900000P -0.657947P -0.0767356P -0.0536544P -0.0386514P -0.0523990P
+ 1.388730P -0.607034P -0.0597635P -0.0258851P -0.0273442P
+ 1.39328P -0.625675P -0.0425551P -0.0319791P
+ 1.07821P -0.255048P -0.0715824P
+ 1.06882P -0.692091P
+ 0.900000P
+L = 0.868493E-7 0.781712E-7 0.748428E-7 0.728358E-7 0.700915E-7 0.692178E-7
+ 0.866074E-7 0.780613E-7 0.748122E-7 0.711591E-7 0.701023E-7
+ 0.865789E-7 0.781095E-7 0.725431E-7 0.711986E-7
+ 0.867480E-7 0.744242E-7 0.725826E-7
+ 0.868022E-7 0.782377E-7
+ 0.868437E-7
+R = 0.2 0 0 0 0 0
+ 0.2 0 0 0 0
+ 0.2 0 0 0
+ 0.2 0 0
+ 0.2 0
+ 0.2
+G = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+length = 2
*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
.SUBCKT ECL EIN GND 9 8
* Input-GND-OUTP-OUTN
RIN 1 2 0.077K
REF 5 6 0.077K
R1 7 N 1.0K
R2 P 3 0.4555K
R3 P 4 0.4555K
R4 8 N 0.615K
R5 9 N 0.615K
RL1 8 GND 0.093K
RL2 9 GND 0.093K
LIN EIN 1 0.01U
LREF 5 GND 0.01U
CIN 1 GND 0.68P
CL1 8 GND 1P
CL2 9 GND 1P
Q1 3 2 7 JCTRAN
Q2 4 6 7 JCTRAN
Q3 P 3 8 JCTRAN
Q4 P 4 9 JCTRAN
VEP P GND DC 1.25
VEN N GND DC -3
.ENDS ECL
.control
TRAN 0.1N 20N
plot V(3) V(5) V(8) V(11) V(12)
.endc
.MODEL JCTRAN NPN BF=150 VAF=20 IS=4E-17 RB=300 RC=100 CJE=30F CJC=30F
+ CJS=40F VJE=0.6 VJC=0.6 VJS=0.6 MJE=0.5 MJC=0.5
+ MJS=0.5 TF=16P TR=1N
.END

View File

@ -0,0 +1,22 @@
Simple coupled transmissionlines
VES IN 0 PULSE (0 1 0N 1.5N 1.5N 4.5N 200N)
R1 IN V1 50
R2 V2 0 10
p1 V1 V2 0 V3 V4 0 cpl1
.model cpl1 cpl
+R = 0.5 0
+ 0.5
+L = 247.3e-9 31.65e-9
+ 247.3e-9
+C = 31.4e-12 -2.45e-12
+ 31.4e-12
+G = 0 0 0
+length = 0.3048
*length = 0.6096
R3 V3 0 100
R4 V4 0 100
.control
TRAN 0.1N 20N
plot v(in) v(v1) v(v3)
.endc
.END

View File

@ -0,0 +1,70 @@
Mixed single and coupled transmission lines
c1g 1 0 1P
l11a 1 1a 6e-9
r1a7 1a 7 0.025K
rin6 in 6 0.075K
l67 6 7 10e-9
c7g 7 0 1P
P2 1 7 0 2 8 0 PLINE
.MODEL PLINE CPL
+R = 2.25 0
+ 2.25
+L = 0.6e-6 0.05e-6
+ 0.6e-6
+G = 0 0 0
+C = 1.2e-9 -0.11e-9
+ 1.2e-9
+length = 0.03
c2g 2 0 0.5P
r2g 2 0 0.05K
r23 2 3 0.025K
l34 3 4 5e-9
c4g 4 0 2P
l89 8 9 10e-9
c9g 9 0 1P
Y1 9 0 10 0 txline
.model txline txl R = 1 L =0.6e-6 G = 0 C= 1.0e-9 length=0.04
l1011 10 11 10e-9
c11g 11 0 0.5P
r11g 11 0 0.05K
r1112 11 12 0.025K
l1213 12 13 5e-9
c13g 13 0 2P
r1116 11 16 0.025K
l1617 16 17 5e-9
c17g 17 0 2P
P1 4 2 13 17 0 5 14 15 18 0 PLINE1
.MODEL PLINE1 CPL
+R = 3.5 0 0 0
+ 3.5 0 0
+ 3.5 0
+ 3.5
+L =
+1e-6 0.11e-6 0.03e-6 0
+ 1e-6 0.11e-6 0.03e-6
+ 1e-6 0.11e-6
+ 1e-6
+G = 0 0 0 0 0 0 0 0 0 0
+C =
+1.5e-9 -0.17e-9 -0.03e-9 0
+ 1.5e-9 -0.17e-9 -0.03e-9
+ 1.5e-9 -0.17e-9
+ 1.5e-9
+length = 0.02
D1 5 0 dmod
D2 14 0 dmod
D3 15 0 dmod
D4 18 0 dmod
.model dmod d
VES in 0 PULSE (0 5 0 1.1ns 0.1ns 0.9ns 200ns)
.control
TRAN 0.2N 10.0N
plot v(3) v(6) v(7) v(8) v(11) v(15)
.endc
.END

View File

@ -0,0 +1,19 @@
MOSdriver -- lossy line LTRA model -- C load
m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u
m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u
CN2 2 0 0.025398e-12
CN3 3 0 0.007398e-12
o1 2 0 3 0 lline
vdd 1 0 dc 5.0
VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS )
.control
TRAN 0.2N 47N 0 0.1N
plot v(2) v(3) ylimit -0.5 5
.endc
.MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.model lline ltra rel=1 r=12.45 g=0 l=8.972e-9 c=0.468e-12
+len=16 steplimit compactrel=1.0e-3 compactabs=1.0e-14
.end

View File

@ -0,0 +1,144 @@
MOSdriver -- 6.3inch 4 lossy line LTRA model -- C load
m1 1 2 6 1 mp1p0 w = 36.0u l=1.0u
m2 1 3 7 1 mp1p0 w = 36.0u l=1.0u
m3 1 4 8 1 mp1p0 w = 36.0u l=1.0u
m4 1 10 5 1 mp1p0 w = 36.0u l=1.0u
m5 1 11 13 1 mp1p0 w = 36.0u l=1.0u
m6 1 12 13 1 mp1p0 w = 36.0u l=1.0u
m7 0 2 6 0 mn0p9 w = 18.0u l=0.9u
m8 0 3 7 0 mn0p9 w = 18.0u l=0.9u
m9 0 4 8 0 mn0p9 w = 18.0u l=0.9u
m10 0 10 5 0 mn0p9 w = 18.0u l=0.9u
m11 14 11 13 0 mn0p9 w = 18.0u l=0.9u
m12 0 12 14 0 mn0p9 w = 18.0u l=0.9u
*
CN5 5 0 0.025398e-12
CN6 6 0 0.007398e-12
CN7 7 0 0.007398e-12
CN8 8 0 0.007398e-12
CN9 9 0 0.097398e-12
CN10 10 0 0.007398e-12
CN11 11 0 0.003398e-12
CN12 12 0 0.004398e-12
CN13 13 0 0.008398e-12
CN14 14 0 0.005398e-12
*
* Subcircuit test
* test is a subcircuit that models a 4-conductor transmission line with
* the following parameters: l=9e-09, c=2.9e-13, r=0.3, g=0,
* inductive_coeff_of_coupling k=0.6, inter-line capacitance cm=3e-14,
* length=6.3. Derived parameters are: lm=5.4e-09, ctot=3.5e-13.
*
* It is important to note that the model is a simplified one - the
* following assumptions are made: 1. The self-inductance l, the
* self-capacitance ctot (note: not c), the series resistance r and the
* parallel capacitance g are the same for all lines, and 2. Each line
* is coupled only to the two lines adjacent to it, with the same
* coupling parameters cm and lm. The first assumption implies that edge
* effects have to be neglected. The utility of these assumptions is
* that they make the sL+R and sC+G matrices symmetric, tridiagonal and
* Toeplitz, with useful consequences (see "Efficient Transient
* Simulation of Lossy Interconnect", by J.S. Roychowdhury and
* D.O Pederson, Proc. DAC 91).
* It may be noted that a symmetric two-conductor line is
* represented accurately by this model.
* Subckt node convention:
*
* |--------------------------|
* 1-----| |-----n+1
* 2-----| |-----n+2
* : | n-wire multiconductor | :
* : | line | :
* n-1-----|(node 0=common gnd plane) |-----2n-1
* n-----| |-----2n
* |--------------------------|
* Lossy line models
.model mod1_test ltra rel=1.2 nocontrol r=0.3 l=2.62616456193e-10 g=0 c=3.98541019688e-13 len=6.3
.model mod2_test ltra rel=1.2 nocontrol r=0.3 l=5.662616446e-09 g=0 c=3.68541019744e-13 len=6.3
.model mod3_test ltra rel=1.2 nocontrol r=0.3 l=1.23373835171e-08 g=0 c=3.3145898046e-13 len=6.3
.model mod4_test ltra rel=1.2 nocontrol r=0.3 l=1.7737383521e-08 g=0 c=3.01458980439e-13 len=6.3
* subcircuit m_test - modal transformation network for test
.subckt m_test 1 2 3 4 5 6 7 8
v1 9 0 0v
v2 10 0 0v
v3 11 0 0v
v4 12 0 0v
f1 0 5 v1 0.371748033738
f2 0 5 v2 -0.601500954587
f3 0 5 v3 0.601500954587
f4 0 5 v4 -0.371748036544
f5 0 6 v1 0.60150095443
f6 0 6 v2 -0.371748035044
f7 0 6 v3 -0.371748030937
f8 0 6 v4 0.601500957402
f9 0 7 v1 0.601500954079
f10 0 7 v2 0.37174803072
f11 0 7 v3 -0.371748038935
f12 0 7 v4 -0.601500955482
f13 0 8 v1 0.371748035626
f14 0 8 v2 0.601500956073
f15 0 8 v3 0.601500954504
f16 0 8 v4 0.371748032386
e1 13 9 5 0 0.371748033909
e2 14 13 6 0 0.601500954587
e3 15 14 7 0 0.601500955639
e4 1 15 8 0 0.371748036664
e5 16 10 5 0 -0.60150095443
e6 17 16 6 0 -0.371748035843
e7 18 17 7 0 0.371748032386
e8 2 18 8 0 0.601500957319
e9 19 11 5 0 0.601500955131
e10 20 19 6 0 -0.371748032169
e11 21 20 7 0 -0.371748037896
e12 3 21 8 0 0.601500954513
e13 22 12 5 0 -0.371748035746
e14 23 22 6 0 0.60150095599
e15 24 23 7 0 -0.601500953534
e16 4 24 8 0 0.371748029317
.ends m_test
* Subckt test
.subckt test 1 2 3 4 5 6 7 8
x1 1 2 3 4 9 10 11 12 m_test
o1 9 0 13 0 mod1_test
o2 10 0 14 0 mod2_test
o3 11 0 15 0 mod3_test
o4 12 0 16 0 mod4_test
x2 5 6 7 8 13 14 15 16 m_test
.ends test
*
x1 5 6 7 8 9 10 11 12 test
*
*
vdd 1 0 PULSE (0 5 0Ns 0.1Ns 0.1Ns 600Ns 800Ns)
v3 3 0 PULSE (0 5 0Ns 0.1Ns 0.1Ns 600Ns 800Ns)
.model mn0p9 nmos LEVEL=1 vto=0.8V kp=48u gamma=0.3 phi=0.55 lambda=0.00
+ PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0
+ CJ=0 CJSW=0 TOX=18000N NSUB=1E16 LD=0.0U
.model mp1p0 pmos vto=-0.8V kp=21u gamma=0.45 phi=0.61 lambda=0.00
+ PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0
+ CJ=0 CJSW=0 TOX=18000N NSUB=3E16 LD=0.0U
VS1 2 0 PULSE (0 5 15.9Ns 0.2Ns 0.2Ns 15.8Ns 32Ns)
VS2 4 0 PULSE (0 5 15.9Ns 0.2Ns 0.2Ns 15.8Ns 32Ns)
.control
TRAN 0.1N 47.9N
plot v(5) v(6) v(7) v(8) v(9) v(10) v(11) v(12)
.endc
*
.END

View File

@ -0,0 +1,24 @@
MOSdriver -- 2 lossy lines LTRA model -- C load
m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u
m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u
m1 0 3 4 0 mn0p9 w = 18.0u l=0.9u
m2 1 3 4 1 mp1p0 w = 36.0u l=1.0u
CN2 2 0 0.025398e-12
CN3 3 0 0.007398e-12
CN4 4 0 0.025398e-12
CN5 5 0 0.007398e-12
o1 2 0 3 0 lline
o2 4 0 5 0 lline
vdd 1 0 dc 5.0
VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS )
.control
TRAN 0.2N 47N 0 0.1N
plot v(2) v(3) v(4) v(5)
.endc
.MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.model lline ltra rel=1 r=12.45 g=0 l=8.972e-9 c=0.468e-12
+len=16 steplimit compactrel=1.0e-3 compactabs=1.0e-14
.end

View File

@ -0,0 +1,98 @@
MOSdriver -- 24inch 2 lossy lines LTRA model -- C load
m1 0 268 299 0 mn0p9 w = 18.0u l=1.0u
m2 299 267 748 0 mn0p9 w = 18.0u l=1.0u
m3 0 168 648 0 mn0p9 w = 18.0u l=0.9u
m4 1 268 748 1 mp1p0 w = 36.0u l=1.0u
m5 1 267 748 1 mp1p0 w = 36.0u l=1.0u
m6 1 168 648 1 mp1p0 w = 36.0u l=1.0u
*
CN648 648 0 0.025398e-12
CN651 651 0 0.007398e-12
CN748 748 0 0.025398e-12
CN751 751 0 0.009398e-12
CN299 299 0 0.005398e-12
*
* Subcircuit test
* test is a subcircuit that models a 2-conductor transmission line with
* the following parameters: l=9.13e-09, c=2.75e-13, r=0.2, g=0,
* inductive_coeff_of_coupling k=0.36144, inter-line capacitance cm=9e-14,
* length=24. Derived parameters are: lm=3.29995e-09, ctot=3.65e-13.
*
* It is important to note that the model is a simplified one - the
* following assumptions are made: 1. The self-inductance l, the
* self-capacitance ctot (note: not c), the series resistance r and the
* parallel capacitance g are the same for all lines, and 2. Each line
* is coupled only to the two lines adjacent to it, with the same
* coupling parameters cm and lm. The first assumption implies that edge
* effects have to be neglected. The utility of these assumptions is
* that they make the sL+R and sC+G matrices symmetric, tridiagonal and
* Toeplitz, with useful consequences (see "Efficient Transient
* Simulation of Lossy Interconnect", by J.S. Roychowdhury and
* D.O Pederson, Proc. DAC 91).
* It may be noted that a symmetric two-conductor line is
* represented accurately by this model.
* Subckt node convention:
*
* |--------------------------|
* 1-----| |-----n+1
* 2-----| |-----n+2
* : | n-wire multiconductor | :
* : | line | :
* n-1-----|(node 0=common gnd plane) |-----2n-1
* n-----| |-----2n
* |--------------------------|
* Lossy line models
.model mod1_test ltra rel=1.2 nocontrol r=0.2 l=5.83005279316e-09 g=0 c=4.55000000187e-13 len=24
.model mod2_test ltra rel=1.2 nocontrol r=0.2 l=1.24299471863e-08 g=0 c=2.75000000373e-13 len=24
* subcircuit m_test - modal transformation network for test
.subckt m_test 1 2 3 4
v1 5 0 0v
v2 6 0 0v
f1 0 3 v1 0.707106779721
f2 0 3 v2 -0.707106782652
f3 0 4 v1 0.707106781919
f4 0 4 v2 0.707106780454
e1 7 5 3 0 0.707106780454
e2 1 7 4 0 0.707106782652
e3 8 6 3 0 -0.707106781919
e4 2 8 4 0 0.707106779721
.ends m_test
* Subckt test
.subckt test 1 2 3 4
x1 1 2 5 6 m_test
o1 5 0 7 0 mod1_test
o2 6 0 8 0 mod2_test
x2 3 4 7 8 m_test
.ends test
*
x1 648 748 651 751 test
*
*
vdd 1 0 DC 5.0
VK 267 0 DC 5.0
*
VS1 168 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N)
VS2 268 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N)
*
.control
TRAN 0.2N 47.9NS
PLOT v(648) v(651) v(751)
.endc
*
.model mn0p9 nmos LEVEL=1 vto=0.8V kp=48u gamma=0.3 phi=0.55 lambda=0.0
+ PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0
+ CJ=0 CJSW=0 TOX=18000N NSUB=1E16 LD=0.0U
.model mp1p0 pmos LEVEL=1 vto=-0.8V kp=21u gamma=0.45 phi=0.61 lambda=0.0
+ PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0
+ CJ=0 CJSW=0 TOX=18000N NSUB=3E16 LD=0.0U
.END

View File

@ -0,0 +1,239 @@
BJTdriver -- 24inch lossy line LTRA model -- DiodeCircuit
* This unclassified circuit is from Raytheon, courtesy Gerry Marino.
* It consists of a BJT driver connected by a 24 inch lossy line to a
* passive load consisting mostly of diodes. Each inch
* of the lossy line is modelled by 10 LRC lumps in the Raytheon
* model.
* The line parameters (derived from the Raytheon input file) are:
* L = 9.13nH per inch
* C = 3.65pF per inch
* R = 0.2 ohms per inch
* the circuit
v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns)
vcc 10 0 5v
*rseries 1 2 5
x1 1 2 10 bjtdrvr
*t1 2 0 3 0 z0=50.0136 td=4.38119ns rel=10
o2 2 0 3 0 lline1
*x2 2 3 oneinch
*x2 100 101 twentyfourinch
*x2 100 101 xtwentyfourinch
vtest1 2 100 0
vtest2 101 3 0
x3 3 4 10 dioload
*rl 3 0 5
*dl 0 3 diod2
.model lline1 ltra rel=1 r=0.2 g=0 l=9.13e-9 c=3.65e-12 len=24 steplimit
.model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12
+pe=0.5 pc=0.5)
.model dmod1 d(n=2.25 is=1.6399e-4 bv=10)
.model dmod2 d
.model dmod d(vj=0.3v)
.model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10)
.model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10)
.options acct
+reltol=1e-3 abstol=1e-14
.control
tran 0.1ns 60ns
plot v(1) v(2) v(3)
.endc
* bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from
* the Raytheon file
.subckt bjtdrvr 19 268 20
q1 22 18 13 qmodn
q2 18 16 13 qmodn
qd2 21 9 0 qmodn
q4 14 14 0 qmodn
q3 16 15 14 qmodpd
q5 8 13 17 qmodn
q6 25 12 0 qmodn
q7 6 17 0 qmodpd
qd1 26 10 0 qmodn
q8 7 11 10 qmodn
q10 268 17 0 qmodpdmine
*q10 268 17 0 qmodpd
q9 7 10 268 qmodn
d1 0 19 dmod1
d2 18 19 dmod2
d3 13 19 dmod
dq1 18 22 dmod
dq2 16 18 dmod
d502 9 21 dmod
dq3 15 16 dmod
d10 24 8 dmod
d4 15 6 dmod
dq6 12 25 dmod
dq7 17 6 dmod
dd1 17 10 dmod
d7 11 6 dmod
dd2 17 26 dmod
d9 23 6 dmod
dq8 11 7 dmod
d501 17 268 dmod
dq9 10 7 dmod
d14 20 27 dmod
d8 0 268 dmod
r1 18 20 6k
r2 22 20 2.2k
r4 0 13 7k
rd1 9 13 2k
rd2 21 13 3k
r3 16 20 10k
r5 15 20 15k
r9 0 17 4k
r6 24 20 750
r10 12 17 2k
r12 24 11 1.5k
r11 25 17 3k
r15 23 20 10k
r13 0 10 15k
r14 7 27 12
.ends bjtdrvr
* subckt dioload - diode load: input=28, output=4, vcc=5
.subckt dioload 28 4 5
*comment out everything in dioload except d5 and r503, and watch
* the difference in results obtained between a tran 0.1ns 20ns and
* a tran 0.01ns 20ns
c1 28 0 5pF
r503 0 4 5.55
r4 0 28 120k
r5 1 5 7.5k
d5 4 28 diod2
d1 1 28 diod1
d4 2 0 diod1
d3 3 2 diod1
d2 1 3 diod1
.ends dioload
* subckt lump - one RLC lump of the lossy line
*10 segments per inch
.subckt lump 1 2
*r1 1 3 0.02
*c1 3 0 0.365pF
*l1 3 2 0.913nH
l1 1 3 0.913nH
c1 2 0 0.365pF
r1 3 2 0.02
*r1 1 3 0.01
*c1 3 0 0.1825pF
*l1 3 4 0.4565nH
*r2 4 5 0.01
*c2 5 0 0.1825pF
*l2 5 2 0.4565nH
*c1 1 0 0.365pF
*l1 1 2 0.913nH
.ends lump
.subckt oneinch 1 2
x1 1 3 lump
x2 3 4 lump
x3 4 5 lump
x4 5 6 lump
x5 6 7 lump
x6 7 8 lump
x7 8 9 lump
x8 9 10 lump
x9 10 11 lump
x10 11 2 lump
.ends oneinch
.subckt fourinch 1 2
x1 1 3 oneinch
x2 3 4 oneinch
x3 4 5 oneinch
x4 5 2 oneinch
.ends fourinch
.subckt fiveinch 1 2
x1 1 3 oneinch
x2 3 4 oneinch
x3 4 5 oneinch
x4 5 6 oneinch
x5 6 2 oneinch
.ends fiveinch
.subckt twentyfourinch 1 2
x1 1 3 fiveinch
x2 3 4 fiveinch
x3 4 5 fiveinch
x4 5 6 fiveinch
x5 6 2 fourinch
.ends twentyfourinch
*modelling using R and lossless lines
*5 segments per inch
.model llfifth ltra nocontrol noprint rel=10 r=0 g=0 l=9.13e-9
+c=3.65e-12 len=0.2 steplimit quadinterp
.subckt xlump 1 2
o1 1 0 3 0 llfifth
r1 2 3 0.04
.ends xlump
.subckt xoneinch 1 2
x1 1 3 xlump
x2 3 4 xlump
x3 4 5 xlump
x4 5 6 xlump
x5 6 2 xlump
*x5 6 7 xlump
*x6 7 8 xlump
*x7 8 9 xlump
*x8 9 10 xlump
*x9 10 11 xlump
*x10 11 2 xlump
.ends xoneinch
.subckt xfourinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 2 xoneinch
.ends xfourinch
.subckt xfiveinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 6 xoneinch
x5 6 2 xoneinch
.ends xfiveinch
.subckt xtwentyfourinch 1 2
x1 1 3 xfiveinch
x2 3 4 xfiveinch
x3 4 5 xfiveinch
x4 5 6 xfiveinch
x5 6 2 xfourinch
.ends xtwentyfourinch
.end

View File

@ -0,0 +1,530 @@
Example 3 for interconnect simulation
* From neug1, Mosaic aluminum lines. 2um thick, 11um wide. Assuming
* 10um above the ground.
* Material: aluminum; resistivity (sigma) = 2.74uohm-cm = 2.74e-8 ohm-m
* Dielectric: SiO2, dielectric constant (epsilon) =3.7
* epsilon0 = 8.85e-12 MKS units
* mu0 = 4e-7*PI
* speed of light in free space = 1/sqrt(mu0*epsilon0) = 2.9986e8 MKS units
*
* Line parameter calculations:
* capacitance: parallel plate
* C = epsilon*epsilon0 * A / l
* C = 3.7*8.85e-12 * 11e-6 * 1(metre) / 10e-6 = 36.02e-12 F/m
* + 30% = 46.8e-12 F/m = 0.468pF/cm
*
* C_freespace = 46.8e-12/epsilon = 12.65e-12 F/m
* speed of light in free space v0 = 2.9986e8 = 1/sqrt(L0*C0)
* => L0 = 1/C0*v0^2
* L0 = 1/(12.65e-12 * 8.9916e16) = 1/113.74e4 = 0.008792e-4 H/m
* = 0.8792 uH/m = 8.792nH/cm
*
* R = rho * l / A = 2.74e-8 * 1 / (11e-6*2e-6) = 1245.45 ohms/m
* = 12.45ohms/cm
*
* transmission line parameters:
* nominal z0 = sqrt(L/C) = 137 ohms
* td = sqrt(LC) = 64.14e-12 secs/cm = 0.064ns/cm
*
*
vcc vcc 0 5
v1 1 0 0v pulse(0 5 0.1ns 0.1ns 0.1ns 1ns 100ns)
rs 1 2 10
xdrv 1 2 vcc bjtdrvr
xrcv 3 4 vcc bjtdrvr
xrcv 3 4 vcc dioload
d1 3 vcc diod
d2 0 3 diod
cl 3 0 1pF
o1 2 0 3 0 lline
*x1 2 3 sixteencm
x1 2 3 xonecm
.model diod d
.model lline ltra rel=1.8 r=12.45 g=0 l=8.792e-9 c=0.468e-12 len=16 steplimit
.control
* 1cm
* 2cm
* 4cm
* 6cm
* 8cm
* 10cm
* 12cm
*tran 0.001ns 15ns 0 0.1ns
* 24cm
tran 0.001ns 10ns 0 0.1ns
* onecm10
*tran 0.001ns 10ns 0 0.01ns
plot v(1) v(2) v(3)
.endc
* 1. define the subckt r10 to be one tenth of the resistance per cm.
* 2. define the subckt onecm to be one of onecm10 (modelled using
* 10 segments), onecm8, onecm4, onecm2 and lump1. Then use
* the subckts onecm, fourcm, fivecm, tencm, twelvecm,
* twentyfourcm in the circuit. The line is modelled as rlc segments.
* 3. define the subckt xonecm to be one of xonecm10, xonecm8,
* xonecm4, xonecm2 and xlump1. Use the subckts xonecm,
* xfourcm, xfivecm, xtencm, xtwelvecm, xtwentyfourcm in the
* circuit. The line will be modelled as r-lossless lumps.
.subckt xonecm 1 2
*x1 1 2 xlump1
x1 1 2 xonecm4
.ends xonecm
.subckt onecm 1 2
*x1 1 2 lump1
x1 1 2 onecm4
.ends onecm
.subckt r10 1 2
r1 1 2 1.245
.ends r10
* ECL driver and diode receiver models - from Raytheon
.model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12
+pe=0.5 pc=0.5)
.model dmod1 d(n=2.25 is=1.6399e-4 bv=10)
.model dmod2 d
.model dmod d(vj=0.3v)
.model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10)
.model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10)
* bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from
* the Raytheon file
.subckt bjtdrvr 19 268 20
q1 22 18 13 qmodn
q2 18 16 13 qmodn
qd2 21 9 0 qmodn
q4 14 14 0 qmodn
q3 16 15 14 qmodpd
q5 8 13 17 qmodn
q6 25 12 0 qmodn
q7 6 17 0 qmodpd
qd1 26 10 0 qmodn
q8 7 11 10 qmodn
q10 268 17 0 qmodpdmine
*q10 268 17 0 qmodpd
q9 7 10 268 qmodn
d1 0 19 dmod1
d2 18 19 dmod2
d3 13 19 dmod
dq1 18 22 dmod
dq2 16 18 dmod
d502 9 21 dmod
dq3 15 16 dmod
d10 24 8 dmod
d4 15 6 dmod
dq6 12 25 dmod
dq7 17 6 dmod
dd1 17 10 dmod
d7 11 6 dmod
dd2 17 26 dmod
d9 23 6 dmod
dq8 11 7 dmod
d501 17 268 dmod
dq9 10 7 dmod
d14 20 27 dmod
d8 0 268 dmod
r1 18 20 6k
r2 22 20 2.2k
r4 0 13 7k
rd1 9 13 2k
rd2 21 13 3k
r3 16 20 10k
r5 15 20 15k
r9 0 17 4k
r6 24 20 750
r10 12 17 2k
r12 24 11 1.5k
r11 25 17 3k
r15 23 20 10k
r13 0 10 15k
r14 7 27 12
.ends bjtdrvr
* subckt dioload - diode load: input=28, output=4, vcc=5
.subckt dioload 28 4 5
c1 28 0 5pF
r503 0 4 5.55
r400 0 28 120k
r500 1 5 7.5k
d5 4 28 diod2
d1 1 28 diod1
d4 2 0 diod1
d3 3 2 diod1
d2 1 3 diod1
.ends dioload
* End ECL driver and Diode receiver models from Raytheon
*10 segments per cm
.subckt lump10 1 2
l1 1 3 0.0.8792nH
c1 2 0 0.0468pF
x1 3 2 r10
.ends lump10
*1 segment per cm
.subckt lump1 1 2
l1 1 3 8.792nH
c1 2 0 0.468pF
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 8 r10
x6 8 9 r10
x7 9 10 r10
x8 10 11 r10
x9 11 12 r10
x10 12 2 r10
.ends lump1
*2 segments per cm
.subckt lump2 1 2
l1 1 3 4.396nH
c1 2 0 0.234pF
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 2 r10
.ends lump2
*4 segments per cm
.subckt lump4 1 2
l1 1 3 2.198nH
c1 2 0 0.117pF
x1 3 4 r10
x2 4 5 r10
x3 5 2 r10
x4 5 2 r10
.ends lump4
*8 segments per cm
.subckt lump8 1 2
l1 1 3 1.099nH
c1 2 0 0.0585pF
x1 3 4 r10
x2 4 2 r10
x3 4 2 r10
x4 4 2 r10
x5 4 2 r10
.ends lump8
.subckt onecm10 1 2
x1 1 3 lump10
x2 3 4 lump10
x3 4 5 lump10
x4 5 6 lump10
x5 6 7 lump10
x6 7 8 lump10
x7 8 9 lump10
x8 9 10 lump10
x9 10 11 lump10
x10 11 2 lump10
.ends onecm10
.subckt onecm8 1 2
x1 1 3 lump8
x2 3 4 lump8
x3 4 5 lump8
x4 5 6 lump8
x5 6 7 lump8
x6 7 8 lump8
x7 8 9 lump8
x8 9 2 lump8
.ends onecm8
.subckt onecm4 1 2
x1 1 3 lump4
x2 3 4 lump4
x3 4 5 lump4
x4 5 2 lump4
.ends onecm4
.subckt onecm2 1 2
x1 1 3 lump2
x2 3 2 lump2
.ends onecm2
.subckt twocm 1 2
x1 1 3 onecm
x2 3 2 onecm
.ends twocm
.subckt threecm 1 2
x1 1 3 onecm
x2 3 4 onecm
x3 4 2 onecm
.ends threecm
.subckt fourcm 1 2
x1 1 3 onecm
x2 3 4 onecm
x3 4 5 onecm
x4 5 2 onecm
.ends fourcm
.subckt fivecm 1 2
x1 1 3 onecm
x2 3 4 onecm
x3 4 5 onecm
x4 5 6 onecm
x5 6 2 onecm
.ends fivecm
.subckt sixcm 1 2
x1 1 3 fivecm
x2 3 2 onecm
.ends sixcm
.subckt sevencm 1 2
x1 1 3 sixcm
x2 3 2 onecm
.ends sevencm
.subckt eightcm 1 2
x1 1 3 sevencm
x2 3 2 onecm
.ends eightcm
.subckt ninecm 1 2
x1 1 3 eightcm
x2 3 2 onecm
.ends ninecm
.subckt tencm 1 2
x1 1 3 fivecm
x2 3 2 fivecm
.ends tencm
.subckt elevencm 1 2
x1 1 3 tencm
x2 3 2 onecm
.ends elevencm
.subckt twelvecm 1 2
x1 1 3 tencm
x2 3 4 onecm
x3 4 2 onecm
.ends twelvecm
.subckt sixteencm 1 2
x1 1 3 eightcm
x2 3 2 eightcm
.ends sixteencm
.subckt twentyfourcm 1 2
x1 1 3 twelvecm
x2 3 2 twelvecm
.ends twentyfourcm
*modelling using R and lossless lines
* 10 segments per cm
.model lless10 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9
+c=0.468e-12 len=0.1 steplimit quadinterp
* 8 segments per cm
.model lless8 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9
+c=0.468e-12 len=0.125 steplimit quadinterp
* 4 segments per cm
.model lless4 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9
+c=0.468e-12 len=0.25 steplimit quadinterp
* 2 segments per cm
.model lless2 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9
+c=0.468e-12 len=0.5 steplimit quadinterp
* 1 segment per cm
.model lless1 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9
+c=0.468e-12 len=1 steplimit quadinterp
*10 segments per cm
.subckt xlump10 1 2
o1 1 0 3 0 lless10
x1 3 2 r10
.ends xlump10
*1 segment per cm
.subckt xlump1 1 2
o1 1 0 3 0 lless1
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 8 r10
x6 8 9 r10
x7 9 10 r10
x8 10 11 r10
x9 11 12 r10
x10 12 2 r10
.ends xlump1
*2 segments per cm
.subckt xlump2 1 2
o1 1 0 3 0 lless2
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 2 r10
.ends xlump2
*4 segments per cm
.subckt xlump4 1 2
o1 1 0 3 0 lless4
x1 3 4 r10
x2 4 5 r10
x3 5 2 r10
x4 5 2 r10
.ends xlump4
*8 segments per cm
.subckt xlump8 1 2
o1 1 0 3 0 lless8
x1 3 4 r10
x2 4 2 r10
x3 4 2 r10
x4 4 2 r10
x5 4 2 r10
.ends xlump8
.subckt xonecm10 1 2
x1 1 3 xlump10
x2 3 4 xlump10
x3 4 5 xlump10
x4 5 6 xlump10
x5 6 7 xlump10
x6 7 8 xlump10
x7 8 9 xlump10
x8 9 10 xlump10
x9 10 11 xlump10
x10 11 2 xlump10
.ends xonecm10
.subckt xonecm8 1 2
x1 1 3 xlump8
x2 3 4 xlump8
x3 4 5 xlump8
x4 5 6 xlump8
x5 6 7 xlump8
x6 7 8 xlump8
x7 8 9 xlump8
x8 9 2 xlump8
.ends xonecm8
.subckt xonecm4 1 2
x1 1 3 xlump4
x2 3 4 xlump4
x3 4 5 xlump4
x4 5 2 xlump4
.ends xonecm4
.subckt xonecm2 1 2
x1 1 3 xlump2
x2 3 2 xlump2
.ends xonecm2
.subckt xtwocm 1 2
x1 1 3 xonecm
x2 3 2 xonecm
.ends xtwocm
.subckt xthreecm 1 2
x1 1 3 xonecm
x2 3 4 xonecm
x3 4 2 xonecm
.ends xthreecm
.subckt xfourcm 1 2
x1 1 3 xonecm
x2 3 4 xonecm
x3 4 5 xonecm
x4 5 2 xonecm
.ends xfourcm
.subckt xfivecm 1 2
x1 1 3 xonecm
x2 3 4 xonecm
x3 4 5 xonecm
x4 5 6 xonecm
x5 6 2 xonecm
.ends xfivecm
.subckt xsixcm 1 2
x1 1 3 xfivecm
x2 3 2 xonecm
.ends xsixcm
.subckt xsevencm 1 2
x1 1 3 xsixcm
x2 3 2 xonecm
.ends xsevencm
.subckt xeightcm 1 2
x1 1 3 xsevencm
x2 3 2 xonecm
.ends xeightcm
.subckt xninecm 1 2
x1 1 3 xeightcm
x2 3 2 xonecm
.ends xninecm
.subckt xtencm 1 2
x1 1 3 xfivecm
x2 3 2 xfivecm
.ends xtencm
.subckt xelevencm 1 2
x1 1 3 xtencm
x2 3 2 xonecm
.ends xelevencm
.subckt xtwelvecm 1 2
x1 1 3 xtencm
x2 3 4 xonecm
x3 4 2 xonecm
.ends xtwelvecm
.subckt xsixteencm 1 2
x1 1 3 xeightcm
x2 3 2 xeightcm
.ends xsixteencm
.subckt xtwentyfourcm 1 2
x1 1 3 xtwelvecm
x2 3 2 xtwelvecm
.ends xtwentyfourcm
.end

View File

@ -0,0 +1,394 @@
BJTdriver -- 2in st. lin -- 20in coupled line LTRA -- 2in st line -- DiodeCircuit
* This unclassified circuit is from Raytheon, courtesy Gerry Marino.
*
* _______
* -------- 2in _________________ 2in | |
* | BJT |______| |______|Diode|
* | |------| |------| |
* | Drvr | line | 2-wire | line |rcvr.|
* -------- | coupled | |_____|
* | transmission |
* |-/\/\/\/\----| line |-------\/\/\/\/\----|
* | 50ohms | | 50ohms |
* | | | |
* Ground ----------------- Ground
*
*
* Each inch of the lossy line is modelled by 10 LRC lumps in the
* Raytheon model.
* The line parameters (derived from the Raytheon input file) are:
* L = 9.13nH per inch
* C = 3.65pF per inch
* R = 0.2 ohms per inch
* K = 0.482 [coupling coefficient; K = M/sqrt(L1*L2)]
* Cc = 1.8pF per inch
*
* coupled ltra model generated using the standalone program
* multi_decomp
* the circuit
v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns)
vcc 10 0 5v
* series termination
*x1 1 oof 10 bjtdrvr
*rseries oof 2 50
x1 1 2 10 bjtdrvr
rt1 3 0 50
* convolution model
x2 2 3 4 5 conv2wetcmodel
* rlc segments model
*x2 2 3 4 5 rlc2wetcmodel
x3 4 dioload
rt2 5 0 50
.model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12
+pe=0.5 pc=0.5)
.model dmod1 d(n=2.25 is=1.6399e-4 bv=10)
.model dmod2 d
.model dmod d(vj=0.3v)
.model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10)
.model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10)
.options acct reltol=1e-3 abstol=1e-12
.control
tran 0.1ns 60ns
plot v(2) v(4) v(5)
.endc
* bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from
* the Raytheon file
.subckt bjtdrvr 19 268 20
q1 22 18 13 qmodn
q2 18 16 13 qmodn
qd2 21 9 0 qmodn
q4 14 14 0 qmodn
q3 16 15 14 qmodpd
q5 8 13 17 qmodn
q6 25 12 0 qmodn
q7 6 17 0 qmodpd
qd1 26 10 0 qmodn
q8 7 11 10 qmodn
*q10 268 17 0 qmodpd
q10 268 17 0 qmodpdmine
q9 7 10 268 qmodn
d1 0 19 dmod1
d2 18 19 dmod2
d3 13 19 dmod
dq1 18 22 dmod
dq2 16 18 dmod
d502 9 21 dmod
dq3 15 16 dmod
d10 24 8 dmod
d4 15 6 dmod
dq6 12 25 dmod
dq7 17 6 dmod
dd1 17 10 dmod
d7 11 6 dmod
dd2 17 26 dmod
d9 23 6 dmod
dq8 11 7 dmod
d501 17 268 dmod
dq9 10 7 dmod
d14 20 27 dmod
d8 0 268 dmod
r1 18 20 6k
r2 22 20 2.2k
r4 0 13 7k
rd1 9 13 2k
rd2 21 13 3k
r3 16 20 10k
r5 15 20 15k
r9 0 17 4k
r6 24 20 750
r10 12 17 2k
r12 24 11 1.5k
r11 25 17 3k
r15 23 20 10k
r13 0 10 15k
r14 7 27 12
.ends bjtdrvr
* subckt dioload - diode load: input=28, output=4, vcc=5
.subckt dioload 28
*comment out everything in dioload except d5 and r503, and watch
* the difference in results obtained between a tran 0.1ns 20ns and
* a tran 0.01ns 20ns
vccint 5 0 5v
c1 28 0 5pF
r503 0 4 5.55
r4 0 28 120k
r5 1 5 7.5k
d5 4 28 diod2
d1 1 28 diod1
d4 2 0 diod1
d3 3 2 diod1
d2 1 3 diod1
.ends dioload
* subckt rlclump - one RLC lump of the lossy line
.subckt rlclump 1 2
*r1 1 3 0.02
*c1 3 0 0.365pF
*l1 3 2 0.913nH
l1 1 3 0.913nH
c1 2 0 0.365pF
r1 3 2 0.02
*r1 1 3 0.01
*c1 3 0 0.1825pF
*l1 3 4 0.4565nH
*r2 4 5 0.01
*c2 5 0 0.1825pF
*l2 5 2 0.4565nH
*c1 1 0 0.365pF
*l1 1 2 0.913nH
.ends lump
.subckt rlconeinch 1 2
x1 1 3 rlclump
x2 3 4 rlclump
x3 4 5 rlclump
x4 5 6 rlclump
x5 6 7 rlclump
x6 7 8 rlclump
x7 8 9 rlclump
x8 9 10 rlclump
x9 10 11 rlclump
x10 11 2 rlclump
.ends rlconeinch
.subckt rlctwoinch 1 2
x1 1 3 rlconeinch
x2 3 2 rlconeinch
.ends rlctwoinch
.subckt rlcfourinch 1 2
x1 1 3 rlconeinch
x2 3 4 rlconeinch
x3 4 5 rlconeinch
x4 5 2 rlconeinch
.ends rlcfourinch
.subckt rlcfiveinch 1 2
x1 1 3 rlconeinch
x2 3 4 rlconeinch
x3 4 5 rlconeinch
x4 5 6 rlconeinch
x5 6 2 rlconeinch
.ends rlcfiveinch
.subckt rlctwentyrlcfourinch 1 2
x1 1 3 rlcfiveinch
x2 3 4 rlcfiveinch
x3 4 5 rlcfiveinch
x4 5 6 rlcfiveinch
x5 6 2 rlcfourinch
.ends rlctwentyrlcfourinch
.subckt rlclumpstub A B C D
x1 A int1 rlcfiveinch
x2 int1 int2 rlcfiveinch
x3 int2 1 rlcfiveinch
x4 1 2 rlcfourinch
x5 1 int3 rlcfiveinch
x6 int3 B rlconeinch
x7 2 C rlcfiveinch
x8 2 D rlcfourinch
.ends rlclumpstub
.subckt ltrastub A B C D
o1 A 0 1 0 lline15in
o2 1 0 B 0 lline6in
o3 1 0 2 0 lline4in
o4 2 0 C 0 lline5in
o5 2 0 D 0 lline4in
.ends ltrastub
*modelling using R and lossless lines
*5 segments per inch
.model llfifth ltra nocontrol rel=10 r=0 g=0 l=9.13e-9
+c=3.65e-12 len=0.2 steplimit quadinterp
.subckt xlump 1 2
o1 1 0 3 0 llfifth
r1 2 3 0.04
.ends xlump
.subckt xoneinch 1 2
x1 1 3 xlump
x2 3 4 xlump
x3 4 5 xlump
x4 5 6 xlump
x5 6 2 xlump
*x5 6 7 xlump
*x6 7 8 xlump
*x7 8 9 xlump
*x8 9 10 xlump
*x9 10 11 xlump
*x10 11 2 xlump
.ends xoneinch
.subckt xFourinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 2 xoneinch
.ends xfourinch
.subckt xfiveinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 6 xoneinch
x5 6 2 xoneinch
.ends xfiveinch
.subckt xlumpstub A B C D
x1 A int1 xfiveinch
x2 int1 int2 xfiveinch
x3 int2 1 xfiveinch
x4 1 2 xfourinch
x5 1 int3 xfiveinch
x6 int3 B xoneinch
x7 2 C xfiveinch
x8 2 D xfourinch
.ends xlumpstub
* modelling a 2 wire coupled system using RLC lumps
* 10 segments per inch
*
* 1---xxxxx----2
* 3---xxxxx----4
.subckt rlc2wlump 1 3 2 4
l1 1 5 0.913nH
c1 2 0 0.365pF
r1 5 2 0.02
l2 3 6 0.913nH
c2 4 0 0.365pF
r2 6 4 0.02
cmut 2 4 0.18pF
k12 l1 l2 0.482
.ends rlc2wlump
.subckt rlc2woneinch 1 2 3 4
x1 1 2 5 6 rlc2wlump
x2 5 6 7 8 rlc2wlump
x3 7 8 9 10 rlc2wlump
x4 9 10 11 12 rlc2wlump
x5 11 12 13 14 rlc2wlump
x6 13 14 15 16 rlc2wlump
x7 15 16 17 18 rlc2wlump
x8 17 18 19 20 rlc2wlump
x9 19 20 21 22 rlc2wlump
x10 21 22 3 4 rlc2wlump
.ends rlc2woneinch
.subckt rlc2wfiveinch 1 2 3 4
x1 1 2 5 6 rlc2woneinch
x2 5 6 7 8 rlc2woneinch
x3 7 8 9 10 rlc2woneinch
x4 9 10 11 12 rlc2woneinch
x5 11 12 3 4 rlc2woneinch
.ends rlc2wfiveinch
.subckt rlc2wtwentyinch 1 2 3 4
x1 1 2 5 6 rlc2wfiveinch
x2 5 6 7 8 rlc2wfiveinch
x3 7 8 9 10 rlc2wfiveinch
x4 9 10 3 4 rlc2wfiveinch
.ends rlc2wtwentyinch
.subckt rlc2wetcmodel 1 2 3 4
x1 1 5 rlctwoinch
x2 5 2 6 4 rlc2wtwentyinch
x3 6 3 rlctwoinch
.ends rlc2wetcmodel
* Subcircuit conv2wtwentyinch
* conv2wtwentyinch is a subcircuit that models a 2-conductor transmission line with
* the following parameters: l=9.13e-09, c=3.65e-12, r=0.2, g=0,
* inductive_coeff_of_coupling k=0.482, inter-line capacitance cm=1.8e-12,
* length=20. Derived parameters are: lm=4.40066e-09, ctot=5.45e-12.
*
* It is important to note that the model is a simplified one - the
* following assumptions are made: 1. The self-inductance l, the
* self-capacitance ctot (note: not c), the series resistance r and the
* parallel capacitance g are the same for all lines, and 2. Each line
* is coupled only to the two lines adjacent to it, with the same
* coupling parameters cm and lm. The first assumption imply that edge
* effects have to be neglected. The utility of these assumptions is
* that they make the sL+R and sC+G matrices symmetric, tridiagonal and
* Toeplitz, with useful consequences.
*
* It may be noted that a symmetric two-conductor line will be
* accurately represented by this model.
* Lossy line models
.model mod1_conv2wtwentyinch ltra rel=1.2 nocontrol r=0.2 l=4.72933999088e-09 g=0 c=7.25000000373e-12 len=20
.model mod2_conv2wtwentyinch ltra rel=1.2 nocontrol r=0.2 l=1.35306599818e-08 g=0 c=3.65000000746e-12 len=20
* subcircuit m_conv2wtwentyinch - modal transformation network for conv2wtwentyinch
.subckt m_conv2wtwentyinch 1 2 3 4
v1 5 0 0v
v2 6 0 0v
f1 0 3 v1 0.707106779721
f2 0 3 v2 -0.707106782652
f3 0 4 v1 0.707106781919
f4 0 4 v2 0.707106780454
e1 7 5 3 0 0.707106780454
e2 1 7 4 0 0.707106782652
e3 8 6 3 0 -0.707106781919
e4 2 8 4 0 0.707106779721
.ends m_conv2wtwentyinch
* Subckt conv2wtwentyinch
.subckt conv2wtwentyinch 1 2 3 4
x1 1 2 5 6 m_conv2wtwentyinch
o1 5 0 7 0 mod1_conv2wtwentyinch
o2 6 0 8 0 mod2_conv2wtwentyinch
x2 3 4 7 8 m_conv2wtwentyinch
.ends conv2wtwentyinch
.model convtwoinch ltra r=0.2 l=9.13e-9 c=3.65e-12 len=2.0 rel=1.2 nocontrol
.subckt conv2wetcmodel 1 2 3 4
o1 1 0 5 0 convtwoinch
x1 5 2 6 4 conv2wtwentyinch
o2 6 0 3 0 convtwoinch
.ends conv2wetcmodel
.end

View File

@ -0,0 +1,113 @@
6.3inch 4 lossy lines LTRA model -- R load
Ra 1 2 1K
Rb 0 3 1K
Rc 0 4 1K
Rd 0 5 1K
Re 6 0 1Meg
Rf 7 0 1Meg
Rg 8 0 1Meg
Rh 9 0 1Meg
*
* Subcircuit test
* test is a subcircuit that models a 4-conductor transmission line with
* the following parameters: l=9e-09, c=2.9e-13, r=0.3, g=0,
* inductive_coeff_of_coupling k=0.6, inter-line capacitance cm=3e-14,
* length=6.3. Derived parameters are: lm=5.4e-09, ctot=3.5e-13.
*
* It is important to note that the model is a simplified one - the
* following assumptions are made: 1. The self-inductance l, the
* self-capacitance ctot (note: not c), the series resistance r and the
* parallel capacitance g are the same for all lines, and 2. Each line
* is coupled only to the two lines adjacent to it, with the same
* coupling parameters cm and lm. The first assumption implies that edge
* effects have to be neglected. The utility of these assumptions is
* that they make the sL+R and sC+G matrices symmetric, tridiagonal and
* Toeplitz, with useful consequences (see "Efficient Transient
* Simulation of Lossy Interconnect", by J.S. Roychowdhury and
* D.O Pederson, Proc. DAC 91).
* It may be noted that a symmetric two-conductor line is
* represented accurately by this model.
* Subckt node convention:
*
* |--------------------------|
* 1-----| |-----n+1
* 2-----| |-----n+2
* : | n-wire multiconductor | :
* : | line | :
* n-1-----|(node 0=common gnd plane) |-----2n-1
* n-----| |-----2n
* |--------------------------|
* Lossy line models
.model mod1_test ltra rel=1.2 nocontrol r=0.3 l=2.62616456193e-10 g=0 c=3.98541019688e-13 len=6.3
.model mod2_test ltra rel=1.2 nocontrol r=0.3 l=5.662616446e-09 g=0 c=3.68541019744e-13 len=6.3
.model mod3_test ltra rel=1.2 nocontrol r=0.3 l=1.23373835171e-08 g=0 c=3.3145898046e-13 len=6.3
.model mod4_test ltra rel=1.2 nocontrol r=0.3 l=1.7737383521e-08 g=0 c=3.01458980439e-13 len=6.3
* subcircuit m_test - modal transformation network for test
.subckt m_test 1 2 3 4 5 6 7 8
v1 9 0 0v
v2 10 0 0v
v3 11 0 0v
v4 12 0 0v
f1 0 5 v1 0.371748033738
f2 0 5 v2 -0.601500954587
f3 0 5 v3 0.601500954587
f4 0 5 v4 -0.371748036544
f5 0 6 v1 0.60150095443
f6 0 6 v2 -0.371748035044
f7 0 6 v3 -0.371748030937
f8 0 6 v4 0.601500957402
f9 0 7 v1 0.601500954079
f10 0 7 v2 0.37174803072
f11 0 7 v3 -0.371748038935
f12 0 7 v4 -0.601500955482
f13 0 8 v1 0.371748035626
f14 0 8 v2 0.601500956073
f15 0 8 v3 0.601500954504
f16 0 8 v4 0.371748032386
e1 13 9 5 0 0.371748033909
e2 14 13 6 0 0.601500954587
e3 15 14 7 0 0.601500955639
e4 1 15 8 0 0.371748036664
e5 16 10 5 0 -0.60150095443
e6 17 16 6 0 -0.371748035843
e7 18 17 7 0 0.371748032386
e8 2 18 8 0 0.601500957319
e9 19 11 5 0 0.601500955131
e10 20 19 6 0 -0.371748032169
e11 21 20 7 0 -0.371748037896
e12 3 21 8 0 0.601500954513
e13 22 12 5 0 -0.371748035746
e14 23 22 6 0 0.60150095599
e15 24 23 7 0 -0.601500953534
e16 4 24 8 0 0.371748029317
.ends m_test
* Subckt test
.subckt test 1 2 3 4 5 6 7 8
x1 1 2 3 4 9 10 11 12 m_test
o1 9 0 13 0 mod1_test
o2 10 0 14 0 mod2_test
o3 11 0 15 0 mod3_test
o4 12 0 16 0 mod4_test
x2 5 6 7 8 13 14 15 16 m_test
.ends test
*
x1 2 3 4 5 6 7 8 9 test
*
*
VS1 1 0 PWL(15.9NS 0.0 16.1Ns 5.0 31.9Ns 5.0 32.1Ns 0.0)
.control
TRAN 0.2NS 50NS
plot v(1) v(2) v(6) v(7) v(8) v(9)
.endc
*
.END

View File

@ -0,0 +1,18 @@
MOSdriver -- lossy line TXL model -- C load
m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u
m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u
CN2 2 0 0.025398e-12
CN3 3 0 0.007398e-12
y1 2 0 3 0 ymod
vdd 1 0 dc 5.0
VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS )
.control
TRAN 0.2N 47N 0 0.1N
plot v(2) v(3) ylimit -0.5 5
.endc
.MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL ymod txl R=12.45 L=8.972e-9 G=0 C=0.468e-12 length=16
.end

View File

@ -0,0 +1,26 @@
MOSdriver -- 3 lossy lines TXL model -- C load
m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u
m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u
m1 0 3 4 0 mn0p9 w = 18.0u l=0.9u
m2 1 3 4 1 mp1p0 w = 36.0u l=1.0u
CN2 2 0 0.025398e-12
CN3 3 0 0.007398e-12
CN4 4 0 0.025398e-12
CN5 5 0 0.007398e-12
CN6 6 0 0.007398e-12
CN7 168 0 0.007398e-12
y1 2 0 3 0 ymod
y2 4 0 5 0 ymod
y3 6 0 168 0 ymod
vdd 1 0 dc 5.0
VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS )
.control
TRAN 0.2N 47N 0 0.1N
plot v(2) v(3) v(4) v(5) v(6)
.endc
.MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61
+LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U
.MODEL ymod txl R=12.45 L=8.972e-9 G=0 C=0.468e-12 length=16
.end

View File

@ -0,0 +1,236 @@
BJTdriver -- 24inch lossy line TXL model -- DiodeCircuit
* This unclassified circuit is from Raytheon, courtesy Gerry Marino.
* It consists of a BJT driver connected by a 24 inch lossy line to a
* passive load consisting mostly of diodes. Each inch
* of the lossy line is modelled by 10 LRC lumps in the Raytheon
* model.
* The line parameters (derived from the Raytheon input file) are:
* L = 9.13nH per inch
* C = 3.65pF per inch
* R = 0.2 ohms per inch
* the circuit
v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns)
vcc 10 0 5v
*rseries 1 2 5
x1 1 2 10 bjtdrvr
*t1 2 0 3 0 z0=50.0136 td=4.38119ns rel=10
y2 2 0 3 0 ymod1
*x2 2 3 oneinch
*x2 100 101 twentyfourinch
*x2 100 101 xtwentyfourinch
vtest1 2 100 0
vtest2 101 3 0
x3 3 4 10 dioload
*rl 3 0 5
*dl 0 3 diod2
.model ymod1 txl r=0.2 g=0 l=9.13e-9 c=3.65e-12 length=24
.model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12
+pe=0.5 pc=0.5)
.model dmod1 d(n=2.25 is=1.6399e-4 bv=10)
.model dmod2 d
.model dmod d(vj=0.3v)
.model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10)
.model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10)
.options acct
+reltol=1e-3 abstol=1e-14
.control
tran 0.1ns 60ns 0 0.5ns
plot v(1) v(2) v(3)
.endc
* bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from
* the Raytheon file
.subckt bjtdrvr 19 268 20
q1 22 18 13 qmodn
q2 18 16 13 qmodn
qd2 21 9 0 qmodn
q4 14 14 0 qmodn
q3 16 15 14 qmodpd
q5 8 13 17 qmodn
q6 25 12 0 qmodn
q7 6 17 0 qmodpd
qd1 26 10 0 qmodn
q8 7 11 10 qmodn
q10 268 17 0 qmodpdmine
*q10 268 17 0 qmodpd
q9 7 10 268 qmodn
d1 0 19 dmod1
d2 18 19 dmod2
d3 13 19 dmod
dq1 18 22 dmod
dq2 16 18 dmod
d502 9 21 dmod
dq3 15 16 dmod
d10 24 8 dmod
d4 15 6 dmod
dq6 12 25 dmod
dq7 17 6 dmod
dd1 17 10 dmod
d7 11 6 dmod
dd2 17 26 dmod
d9 23 6 dmod
dq8 11 7 dmod
d501 17 268 dmod
dq9 10 7 dmod
d14 20 27 dmod
d8 0 268 dmod
r1 18 20 6k
r2 22 20 2.2k
r4 0 13 7k
rd1 9 13 2k
rd2 21 13 3k
r3 16 20 10k
r5 15 20 15k
r9 0 17 4k
r6 24 20 750
r10 12 17 2k
r12 24 11 1.5k
r11 25 17 3k
r15 23 20 10k
r13 0 10 15k
r14 7 27 12
.ends bjtdrvr
* subckt dioload - diode load: input=28, output=4, vcc=5
.subckt dioload 28 4 5
*comment out everything in dioload except d5 and r503, and watch
* the difference in results obtained between a tran 0.1ns 20ns and
* a tran 0.01ns 20ns
c1 28 0 5pF
r503 0 4 5.55
r4 0 28 120k
r5 1 5 7.5k
d5 4 28 diod2
d1 1 28 diod1
d4 2 0 diod1
d3 3 2 diod1
d2 1 3 diod1
.ends dioload
* subckt lump - one RLC lump of the lossy line
*10 segments per inch
.subckt lump 1 2
*r1 1 3 0.02
*c1 3 0 0.365pF
*l1 3 2 0.913nH
l1 1 3 0.913nH
c1 2 0 0.365pF
r1 3 2 0.02
*r1 1 3 0.01
*c1 3 0 0.1825pF
*l1 3 4 0.4565nH
*r2 4 5 0.01
*c2 5 0 0.1825pF
*l2 5 2 0.4565nH
*c1 1 0 0.365pF
*l1 1 2 0.913nH
.ends lump
.subckt oneinch 1 2
x1 1 3 lump
x2 3 4 lump
x3 4 5 lump
x4 5 6 lump
x5 6 7 lump
x6 7 8 lump
x7 8 9 lump
x8 9 10 lump
x9 10 11 lump
x10 11 2 lump
.ends oneinch
.subckt fourinch 1 2
x1 1 3 oneinch
x2 3 4 oneinch
x3 4 5 oneinch
x4 5 2 oneinch
.ends fourinch
.subckt fiveinch 1 2
x1 1 3 oneinch
x2 3 4 oneinch
x3 4 5 oneinch
x4 5 6 oneinch
x5 6 2 oneinch
.ends fiveinch
.subckt twentyfourinch 1 2
x1 1 3 fiveinch
x2 3 4 fiveinch
x3 4 5 fiveinch
x4 5 6 fiveinch
x5 6 2 fourinch
.ends twentyfourinch
*modelling using R and lossless lines
*5 segments per inch
.model ymod2 txl r=0 g=0 l=9.13e-9 c=3.65e-12 length=0.2
.subckt xlump 1 2
y1 1 0 3 0 ymod2
r1 2 3 0.04
.ends xlump
.subckt xoneinch 1 2
x1 1 3 xlump
x2 3 4 xlump
x3 4 5 xlump
x4 5 6 xlump
x5 6 2 xlump
*x5 6 7 xlump
*x6 7 8 xlump
*x7 8 9 xlump
*x8 9 10 xlump
*x9 10 11 xlump
*x10 11 2 xlump
.ends xoneinch
.subckt xfourinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 2 xoneinch
.ends xfourinch
.subckt xfiveinch 1 2
x1 1 3 xoneinch
x2 3 4 xoneinch
x3 4 5 xoneinch
x4 5 6 xoneinch
x5 6 2 xoneinch
.ends xfiveinch
.subckt xtwentyfourinch 1 2
x1 1 3 xfiveinch
x2 3 4 xfiveinch
x3 4 5 xfiveinch
x4 5 6 xfiveinch
x5 6 2 xfourinch
.ends xtwentyfourinch
.end

View File

@ -0,0 +1,523 @@
Example 3 for interconnect simulation
* From neug1, Mosaic aluminum lines. 2um thick, 11um wide. Assuming
* 10um above the ground.
* Material: aluminum; resistivity (sigma) = 2.74uohm-cm = 2.74e-8 ohm-m
* Dielectric: SiO2, dielectric constant (epsilon) =3.7
* epsilon0 = 8.85e-12 MKS units
* mu0 = 4e-7*PI
* speed of light in free space = 1/sqrt(mu0*epsilon0) = 2.9986e8 MKS units
*
* Line parameter calculations:
* capacitance: parallel plate
* C = epsilon*epsilon0 * A / l
* C = 3.7*8.85e-12 * 11e-6 * 1(metre) / 10e-6 = 36.02e-12 F/m
* + 30% = 46.8e-12 F/m = 0.468pF/cm
*
* C_freespace = 46.8e-12/epsilon = 12.65e-12 F/m
* speed of light in free space v0 = 2.9986e8 = 1/sqrt(L0*C0)
* => L0 = 1/C0*v0^2
* L0 = 1/(12.65e-12 * 8.9916e16) = 1/113.74e4 = 0.008792e-4 H/m
* = 0.8792 uH/m = 8.792nH/cm
*
* R = rho * l / A = 2.74e-8 * 1 / (11e-6*2e-6) = 1245.45 ohms/m
* = 12.45ohms/cm
*
* transmission line parameters:
* nominal z0 = sqrt(L/C) = 137 ohms
* td = sqrt(LC) = 64.14e-12 secs/cm = 0.064ns/cm
*
*
vcc vcc 0 5
v1 1 0 0v pulse(0 5 0.1ns 0.1ns 0.1ns 1ns 100ns)
rs 1 2 10
xdrv 1 2 vcc bjtdrvr
xrcv 3 4 vcc bjtdrvr
xrcv 3 4 vcc dioload
d1 3 vcc diod
d2 0 3 diod
cl 3 0 1pF
y1 2 0 3 0 yline
*x1 2 3 sixteencm
x1 2 3 xonecm
.model diod d
.model yline txl r=12.45 g=0 l=8.792e-9 c=0.468e-12 length=16
.control
* 1cm
* 2cm
* 4cm
* 6cm
* 8cm
* 10cm
* 12cm
*tran 0.001ns 15ns 0 0.1ns
* 24cm
tran 0.001ns 10ns 0 0.1ns
* onecm10
*tran 0.001ns 10ns 0 0.01ns
plot v(1) v(2) v(3)
.endc
* 1. define the subckt r10 to be one tenth of the resistance per cm.
* 2. define the subckt onecm to be one of onecm10 (modelled using
* 10 segments), onecm8, onecm4, onecm2 and lump1. Then use
* the subckts onecm, fourcm, fivecm, tencm, twelvecm,
* twentyfourcm in the circuit. The line is modelled as rlc segments.
* 3. define the subckt xonecm to be one of xonecm10, xonecm8,
* xonecm4, xonecm2 and xlump1. Use the subckts xonecm,
* xfourcm, xfivecm, xtencm, xtwelvecm, xtwentyfourcm in the
* circuit. The line will be modelled as r-lossless lumps.
.subckt xonecm 1 2
*x1 1 2 xlump1
x1 1 2 xonecm4
.ends xonecm
.subckt onecm 1 2
*x1 1 2 lump1
x1 1 2 onecm4
.ends onecm
.subckt r10 1 2
r1 1 2 1.245
.ends r10
* ECL driver and diode receiver models - from Raytheon
.model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12
+pe=0.5 pc=0.5)
.model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12
+pe=0.5 pc=0.5)
.model dmod1 d(n=2.25 is=1.6399e-4 bv=10)
.model dmod2 d
.model dmod d(vj=0.3v)
.model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10)
.model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10)
* bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from
* the Raytheon file
.subckt bjtdrvr 19 268 20
q1 22 18 13 qmodn
q2 18 16 13 qmodn
qd2 21 9 0 qmodn
q4 14 14 0 qmodn
q3 16 15 14 qmodpd
q5 8 13 17 qmodn
q6 25 12 0 qmodn
q7 6 17 0 qmodpd
qd1 26 10 0 qmodn
q8 7 11 10 qmodn
q10 268 17 0 qmodpdmine
*q10 268 17 0 qmodpd
q9 7 10 268 qmodn
d1 0 19 dmod1
d2 18 19 dmod2
d3 13 19 dmod
dq1 18 22 dmod
dq2 16 18 dmod
d502 9 21 dmod
dq3 15 16 dmod
d10 24 8 dmod
d4 15 6 dmod
dq6 12 25 dmod
dq7 17 6 dmod
dd1 17 10 dmod
d7 11 6 dmod
dd2 17 26 dmod
d9 23 6 dmod
dq8 11 7 dmod
d501 17 268 dmod
dq9 10 7 dmod
d14 20 27 dmod
d8 0 268 dmod
r1 18 20 6k
r2 22 20 2.2k
r4 0 13 7k
rd1 9 13 2k
rd2 21 13 3k
r3 16 20 10k
r5 15 20 15k
r9 0 17 4k
r6 24 20 750
r10 12 17 2k
r12 24 11 1.5k
r11 25 17 3k
r15 23 20 10k
r13 0 10 15k
r14 7 27 12
.ends bjtdrvr
* subckt dioload - diode load: input=28, output=4, vcc=5
.subckt dioload 28 4 5
c1 28 0 5pF
r503 0 4 5.55
r400 0 28 120k
r500 1 5 7.5k
d5 4 28 diod2
d1 1 28 diod1
d4 2 0 diod1
d3 3 2 diod1
d2 1 3 diod1
.ends dioload
* End ECL driver and Diode receiver models from Raytheon
*10 segments per cm
.subckt lump10 1 2
l1 1 3 0.0.8792nH
c1 2 0 0.0468pF
x1 3 2 r10
.ends lump10
*1 segment per cm
.subckt lump1 1 2
l1 1 3 8.792nH
c1 2 0 0.468pF
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 8 r10
x6 8 9 r10
x7 9 10 r10
x8 10 11 r10
x9 11 12 r10
x10 12 2 r10
.ends lump1
*2 segments per cm
.subckt lump2 1 2
l1 1 3 4.396nH
c1 2 0 0.234pF
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 2 r10
.ends lump2
*4 segments per cm
.subckt lump4 1 2
l1 1 3 2.198nH
c1 2 0 0.117pF
x1 3 4 r10
x2 4 5 r10
x3 5 2 r10
x4 5 2 r10
.ends lump4
*8 segments per cm
.subckt lump8 1 2
l1 1 3 1.099nH
c1 2 0 0.0585pF
x1 3 4 r10
x2 4 2 r10
x3 4 2 r10
x4 4 2 r10
x5 4 2 r10
.ends lump8
.subckt onecm10 1 2
x1 1 3 lump10
x2 3 4 lump10
x3 4 5 lump10
x4 5 6 lump10
x5 6 7 lump10
x6 7 8 lump10
x7 8 9 lump10
x8 9 10 lump10
x9 10 11 lump10
x10 11 2 lump10
.ends onecm10
.subckt onecm8 1 2
x1 1 3 lump8
x2 3 4 lump8
x3 4 5 lump8
x4 5 6 lump8
x5 6 7 lump8
x6 7 8 lump8
x7 8 9 lump8
x8 9 2 lump8
.ends onecm8
.subckt onecm4 1 2
x1 1 3 lump4
x2 3 4 lump4
x3 4 5 lump4
x4 5 2 lump4
.ends onecm4
.subckt onecm2 1 2
x1 1 3 lump2
x2 3 2 lump2
.ends onecm2
.subckt twocm 1 2
x1 1 3 onecm
x2 3 2 onecm
.ends twocm
.subckt threecm 1 2
x1 1 3 onecm
x2 3 4 onecm
x3 4 2 onecm
.ends threecm
.subckt fourcm 1 2
x1 1 3 onecm
x2 3 4 onecm
x3 4 5 onecm
x4 5 2 onecm
.ends fourcm
.subckt fivecm 1 2
x1 1 3 onecm
x2 3 4 onecm
x3 4 5 onecm
x4 5 6 onecm
x5 6 2 onecm
.ends fivecm
.subckt sixcm 1 2
x1 1 3 fivecm
x2 3 2 onecm
.ends sixcm
.subckt sevencm 1 2
x1 1 3 sixcm
x2 3 2 onecm
.ends sevencm
.subckt eightcm 1 2
x1 1 3 sevencm
x2 3 2 onecm
.ends eightcm
.subckt ninecm 1 2
x1 1 3 eightcm
x2 3 2 onecm
.ends ninecm
.subckt tencm 1 2
x1 1 3 fivecm
x2 3 2 fivecm
.ends tencm
.subckt elevencm 1 2
x1 1 3 tencm
x2 3 2 onecm
.ends elevencm
.subckt twelvecm 1 2
x1 1 3 tencm
x2 3 4 onecm
x3 4 2 onecm
.ends twelvecm
.subckt sixteencm 1 2
x1 1 3 eightcm
x2 3 2 eightcm
.ends sixteencm
.subckt twentyfourcm 1 2
x1 1 3 twelvecm
x2 3 2 twelvecm
.ends twentyfourcm
*modelling using R and lossless lines
* 10 segments per cm
.model yless10 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.1
* 8 segments per cm
.model yless8 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.125
* 4 segments per cm
.model yless4 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.25
* 2 segments per cm
.model yless2 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.5
* 1 segment per cm
.model yless1 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=1
*10 segments per cm
.subckt xlump10 1 2
y1 1 0 3 0 yless10
x1 3 2 r10
.ends xlump10
*1 segment per cm
.subckt xlump1 1 2
y1 1 0 3 0 yless1
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 8 r10
x6 8 9 r10
x7 9 10 r10
x8 10 11 r10
x9 11 12 r10
x10 12 2 r10
.ends xlump1
*2 segments per cm
.subckt xlump2 1 2
y1 1 0 3 0 yless2
x1 3 4 r10
x2 4 5 r10
x3 5 6 r10
x4 6 7 r10
x5 7 2 r10
.ends xlump2
*4 segments per cm
.subckt xlump4 1 2
y1 1 0 3 0 yless4
x1 3 4 r10
x2 4 5 r10
x3 5 2 r10
x4 5 2 r10
.ends xlump4
*8 segments per cm
.subckt xlump8 1 2
y1 1 0 3 0 yless8
x1 3 4 r10
x2 4 2 r10
x3 4 2 r10
x4 4 2 r10
x5 4 2 r10
.ends xlump8
.subckt xonecm10 1 2
x1 1 3 xlump10
x2 3 4 xlump10
x3 4 5 xlump10
x4 5 6 xlump10
x5 6 7 xlump10
x6 7 8 xlump10
x7 8 9 xlump10
x8 9 10 xlump10
x9 10 11 xlump10
x10 11 2 xlump10
.ends xonecm10
.subckt xonecm8 1 2
x1 1 3 xlump8
x2 3 4 xlump8
x3 4 5 xlump8
x4 5 6 xlump8
x5 6 7 xlump8
x6 7 8 xlump8
x7 8 9 xlump8
x8 9 2 xlump8
.ends xonecm8
.subckt xonecm4 1 2
x1 1 3 xlump4
x2 3 4 xlump4
x3 4 5 xlump4
x4 5 2 xlump4
.ends xonecm4
.subckt xonecm2 1 2
x1 1 3 xlump2
x2 3 2 xlump2
.ends xonecm2
.subckt xtwocm 1 2
x1 1 3 xonecm
x2 3 2 xonecm
.ends xtwocm
.subckt xthreecm 1 2
x1 1 3 xonecm
x2 3 4 xonecm
x3 4 2 xonecm
.ends xthreecm
.subckt xfourcm 1 2
x1 1 3 xonecm
x2 3 4 xonecm
x3 4 5 xonecm
x4 5 2 xonecm
.ends xfourcm
.subckt xfivecm 1 2
x1 1 3 xonecm
x2 3 4 xonecm
x3 4 5 xonecm
x4 5 6 xonecm
x5 6 2 xonecm
.ends xfivecm
.subckt xsixcm 1 2
x1 1 3 xfivecm
x2 3 2 xonecm
.ends xsixcm
.subckt xsevencm 1 2
x1 1 3 xsixcm
x2 3 2 xonecm
.ends xsevencm
.subckt xeightcm 1 2
x1 1 3 xsevencm
x2 3 2 xonecm
.ends xeightcm
.subckt xninecm 1 2
x1 1 3 xeightcm
x2 3 2 xonecm
.ends xninecm
.subckt xtencm 1 2
x1 1 3 xfivecm
x2 3 2 xfivecm
.ends xtencm
.subckt xelevencm 1 2
x1 1 3 xtencm
x2 3 2 xonecm
.ends xelevencm
.subckt xtwelvecm 1 2
x1 1 3 xtencm
x2 3 4 xonecm
x3 4 2 xonecm
.ends xtwelvecm
.subckt xsixteencm 1 2
x1 1 3 xeightcm
x2 3 2 xeightcm
.ends xsixteencm
.subckt xtwentyfourcm 1 2
x1 1 3 xtwelvecm
x2 3 2 xtwelvecm
.ends xtwentyfourcm
.end

View File

@ -0,0 +1,123 @@
CMOS Inverter
Vdd 1 0 5.0v
Vss 2 0 0.0v
X1 1 2 3 4 INV
Vin 3 0 2.5v
.SUBCKT INV 1 2 3 4
* Vdd Vss Vin Vout
M1 14 13 15 16 M_PMOS w=6.0u
M2 24 23 25 26 M_NMOS w=3.0u
Vgp 3 13 0.0v
Vdp 4 14 0.0v
Vsp 1 15 0.0v
Vbp 1 16 0.0v
Vgn 3 23 0.0v
Vdn 4 24 0.0v
Vsn 2 25 0.0v
Vbn 2 26 0.0v
.ENDS INV
.model M_NMOS numos
+ x.mesh l=0.0 n=1
+ x.mesh l=0.6 n=4
+ x.mesh l=0.7 n=5
+ x.mesh l=1.0 n=7
+ x.mesh l=1.2 n=11
+ x.mesh l=3.2 n=21
+ x.mesh l=3.4 n=25
+ x.mesh l=3.7 n=27
+ x.mesh l=3.8 n=28
+ x.mesh l=4.4 n=31
+
+ y.mesh l=-.05 n=1
+ y.mesh l=0.0 n=5
+ y.mesh l=.05 n=9
+ y.mesh l=0.3 n=14
+ y.mesh l=2.0 n=19
+
+ region num=1 material=1 y.l=0.0
+ material num=1 silicon
+ mobility material=1 concmod=sg fieldmod=sg
+ mobility material=1 elec major
+ mobility material=1 elec minor
+ mobility material=1 hole major
+ mobility material=1 hole minor
+
+ region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7
+ material num=2 oxide
+
+ elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0
+ elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1
+ elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0
+ elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0
+
+ doping unif p.type conc=2.5e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0
+ doping unif p.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05
+ doping unif n.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2
+ doping unif n.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2
+
+ models concmob fieldmob bgn srh conctau
+ method ac=direct onec
.model M_PMOS numos
+ x.mesh l=0.0 n=1
+ x.mesh l=0.6 n=4
+ x.mesh l=0.7 n=5
+ x.mesh l=1.0 n=7
+ x.mesh l=1.2 n=11
+ x.mesh l=3.2 n=21
+ x.mesh l=3.4 n=25
+ x.mesh l=3.7 n=27
+ x.mesh l=3.8 n=28
+ x.mesh l=4.4 n=31
+
+ y.mesh l=-.05 n=1
+ y.mesh l=0.0 n=5
+ y.mesh l=.05 n=9
+ y.mesh l=0.3 n=14
+ y.mesh l=2.0 n=19
+
+ region num=1 material=1 y.l=0.0
+ material num=1 silicon
+ mobility material=1 concmod=sg fieldmod=sg
+ mobility material=1 elec major
+ mobility material=1 elec minor
+ mobility material=1 hole major
+ mobility material=1 hole minor
+
+ region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7
+ material num=2 oxide
+
+ elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0
+ elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1
+ elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0
+ elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0
+
+ doping unif n.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0
+ doping unif p.type conc=3e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05
+ doping unif p.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2
+ doping unif p.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2
+
+ models concmob fieldmob bgn srh conctau
+ method ac=direct onec
*.tran 0.1ns 1ns
*.op
.dc Vin 0.0v 3.001v 0.05v
.print dc v(4)
*.plot dc v(4)
.options acct bypass=1 method=gear nopage
.control
run
print v(4)
quit
.endc
.end

View File

@ -0,0 +1,40 @@
One-Dimensional Diode Simulation
* Several simulations are performed by this file.
* They are:
* 1. An operating point at 0.7v forward bias.
* 2. An ac analysis at 0.7v forward bias.
* 3. The forward and reverse bias characteristics from -3v to 2v.
Vpp 1 0 0.7v (PWL 0ns 3.0v 0.01ns -6.0v) (AC 1v)
Vnn 2 0 0v
D1 1 2 M_PN AREA=100
.model M_PN numd level=1
+ ***************************************
+ *** One-Dimensional Numerical Diode ***
+ ***************************************
+ options defa=1p
+ x.mesh loc=0.0 n=1
+ x.mesh loc=1.3 n=201
+ domain num=1 material=1
+ material num=1 silicon
+ mobility mat=1 concmod=ct fieldmod=ct
+ doping gauss p.type conc=1e20 x.l=0.0 x.h=0.0 char.l=0.100
+ doping unif n.type conc=1e16 x.l=0.0 x.h=1.3
+ doping gauss n.type conc=5e19 x.l=1.3 x.h=1.3 char.l=0.100
+ models bgn aval srh auger conctau concmob fieldmob
+ method ac=direct
.option acct bypass=0 abstol=1e-18 itl2=100
*.op
.ac dec 10 100kHz 10gHz
*.dc Vpp -3.0v 2.0001v 50mv
*.print i(Vpp)
.control
run
quit
.endc
.END

View File

@ -0,0 +1,74 @@
BICMOS INVERTER PULLUP CIRCUIT
VDD 1 0 5.0V
VSS 2 0 0.0V
VIN 3 0 0.75V
VC 1 11 0.0V
VB 5 15 0.0V
Q1 11 15 4 M_NPN AREA=4
M1 5 3 1 1 M_PMOS W=20U L=2U AD=30P AS=30P PD=21U PS=21U
CL 4 0 5.0PF
.IC V(4)=0.75V V(5)=0.0V
.MODEL M_PMOS PMOS VTO=-0.8 UO=250 TOX=25N NSUB=5E16
+ UCRIT=10K UEXP=.15 VMAX=50K NEFF=2 XJ=.02U
+ LD=.15U CGSO=.1N CGDO=.1N CJ=.12M MJ=0.5
+ CJSW=0.3N MJSW=0.5 LEVEL=2
.MODEL M_NPN NBJT LEVEL=2
+ TITLE TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR
+ ; SINCE ONLY HALF THE DEVICE IS SIMULATED, DOUBLE THE UNIT WIDTH TO GET
+ ; 1.0 UM EMITTER.
+ OPTIONS DEFW=2.0U
+ OUTPUT STATISTICS
+
+ X.MESH W=2.0 H.E=0.02 H.M=0.5 R=2.0
+ X.MESH W=0.5 H.S=0.02 H.M=0.2 R=2.0
+
+ Y.MESH L=-0.2 N=1
+ Y.MESH L= 0.0 N=5
+ Y.MESH W=0.10 H.E=0.004 H.M=0.05 R=2.5
+ Y.MESH W=0.15 H.S=0.004 H.M=0.02 R=2.5
+ Y.MESH W=1.05 H.S=0.02 H.M=0.1 R=2.5
+
+ DOMAIN NUM=1 MATERIAL=1 X.L=2.0 Y.H=0.0
+ DOMAIN NUM=2 MATERIAL=2 X.H=2.0 Y.H=0.0
+ DOMAIN NUM=3 MATERIAL=3 Y.L=0.0
+ MATERIAL NUM=1 POLYSILICON
+ MATERIAL NUM=2 OXIDE
+ MATERIAL NUM=3 SILICON
+
+ ELEC NUM=1 X.L=0.0 X.H=0.0 Y.L=1.1 Y.H=1.3
+ ELEC NUM=2 X.L=0.0 X.H=0.5 Y.L=0.0 Y.H=0.0
+ ELEC NUM=3 X.L=2.0 X.H=3.0 Y.L=-0.2 Y.H=-0.2
+
+ DOPING GAUSS N.TYPE CONC=3E20 X.L=2.0 X.H=3.0 Y.L=-0.2 Y.H=0.0
+ + CHAR.L=0.047 LAT.ROTATE
+ DOPING GAUSS P.TYPE CONC=5E18 X.L=0.0 X.H=5.0 Y.L=-0.2 Y.H=0.0
+ + CHAR.L=0.100 LAT.ROTATE
+ DOPING GAUSS P.TYPE CONC=1E20 X.L=0.0 X.H=0.5 Y.L=-0.2 Y.H=0.0
+ + CHAR.L=0.100 LAT.ROTATE RATIO=0.7
+ DOPING UNIF N.TYPE CONC=1E16 X.L=0.0 X.H=5.0 Y.L=0.0 Y.H=1.3
+ DOPING GAUSS N.TYPE CONC=5E19 X.L=0.0 X.H=5.0 Y.L=1.3 Y.H=1.3
+ + CHAR.L=0.100 LAT.ROTATE
+
+ METHOD AC=DIRECT ITLIM=10
+ MODELS BGN SRH AUGER CONCTAU CONCMOB FIELDMOB
.TRAN 0.5NS 1.5NS
.PRINT TRAN V(3) V(4)
.OPTION ACCT BYPASS=1
.control
run
print V(3) V(4)
quit
.endc
.END

View File

@ -0,0 +1,46 @@
DIODE REVERSE RECOVERY
VPP 1 0 0.0V (PULSE 1.0V -1.0V 1NS 1PS 1PS 20NS 40NS)
VNN 2 0 0.0V
RS 1 3 1.0
LS 3 4 0.5UH
DT 4 2 M_PIN AREA=1
.MODEL M_PIN NUMD LEVEL=2
+ OPTIONS DEFW=100U
+ X.MESH N=1 L=0.0
+ X.MESH N=2 L=0.2
+ X.MESH N=4 L=0.4
+ X.MESH N=8 L=0.6
+ X.MESH N=13 L=1.0
+
+ Y.MESH N=1 L=0.0
+ Y.MESH N=9 L=4.0
+ Y.MESH N=24 L=10.0
+ Y.MESH N=29 L=15.0
+ Y.MESH N=34 L=20.0
+
+ DOMAIN NUM=1 MATERIAL=1
+ MATERIAL NUM=1 SILICON TN=20NS TP=20NS
+
+ ELECTRODE NUM=1 X.L=0.6 X.H=1.0 Y.L=0.0 Y.H=0.0
+ ELECTRODE NUM=2 X.L=-0.1 X.H=1.0 Y.L=20.0 Y.H=20.0
+
+ DOPING GAUSS P.TYPE CONC=1.0E19 CHAR.LEN=1.076 X.L=0.75 X.H=1.1 Y.H=0.0
+ + LAT.ROTATE RATIO=0.1
+ DOPING UNIF N.TYPE CONC=1.0E14
+ DOPING GAUSS N.TYPE CONC=1.0E19 CHAR.LEN=1.614 X.L=-0.1 X.H=1.1 Y.L=20.0
+
+ MODELS BGN SRH AUGER CONCTAU CONCMOB FIELDMOB
.OPTION ACCT BYPASS=1
.TRAN 0.1NS 1NS
.PRINT TRAN V(3) I(VNN)
.control
run
print V(3) I(VNN)
quit
.endc
.END

View File

@ -0,0 +1,34 @@
RTL inverter
vin 1 0 dc 1 pwl 0 4 1ns 0
vcc 12 0 dc 5.0
rc1 12 3 2.5k
rb1 1 2 8k
q1 3 2 0 qmod area = 100p
.option acct bypass=1
.tran 0.5n 5n
.print tran v(2) v(3)
.model qmod nbjt level=1
+ x.mesh node=1 loc=0.0
+ x.mesh node=61 loc=3.0
+ region num=1 material=1
+ material num=1 silicon nbgnn=1e17 nbgnp=1e17
+ mobility material=1 concmod=sg fieldmod=sg
+ mobility material=1 elec major
+ mobility material=1 elec minor
+ mobility material=1 hole major
+ mobility material=1 hole minor
+ doping unif n.type conc=1e17 x.l=0.0 x.h=1.0
+ doping unif p.type conc=1e16 x.l=0.0 x.h=1.5
+ doping unif n.type conc=1e15 x.l=0.0 x.h=3.0
+ models bgnw srh conctau auger concmob fieldmob
+ options base.length=1.0 base.depth=1.25
.control
run
quit
.endc
.end

View File

@ -0,0 +1,52 @@
BJT ft Test
vce 1 0 dc 3.0
vgain 1 c dc 0.0
f 0 2 vgain -1000
l 2 b 1g
c 2 0 1g
ib 0 b dc 0.0 ac 1.0
ic 0 c 0.01
q1 c b 0 bfs17
.control
foreach myic 0.5e-3 1e-3 5e-3 10e-3 50e-3 100e-3
alter ic = $myic
ac dec 10 10k 5g
end
*foreach mytf 50p 100p 150p 200p 250p 300p
* altermod q.x1.q1 tf = $mytf
* ac dec 10 10k 5g
*end
plot abs(ac1.vgain#branch) abs(ac2.vgain#branch) abs(ac3.vgain#branch) abs(ac4.vgain#branch) abs(ac5.vgain#branch) abs(ac6.vgain#branch) ylimit 0.1 100 loglog
quit
.endc
*****************************************************************
* SPICE2G6 MODEL OF THE NPN BIPOLAR TRANSISTOR BFS17 (SOT-23) *
* REV: 98.1 DANALYSE GMBH BERLIN (27.07.1998) *
*****************************************************************
.SUBCKT BFS17C 1 2 3
Q1 6 5 7 BFS17 1.000
LC 1 6 0.350N
L1 2 4 0.400N
LB 4 5 0.500N
L2 3 8 0.400N
LE 8 7 0.600N
CGBC 4 6 70.00F
CGBE 4 8 0.150P
CGCE 6 8 15.00F
.ENDS
.MODEL BFS17 NPN (level=1 IS=0.480F NF=1.008 BF=99.655 VAF=90.000 IKF=0.190
+ ISE=7.490F NE=1.762 NR=1.010 BR=38.400 VAR=7.000 IKR=93.200M
+ ISC=0.200F NC=1.042
+ RB=1.500 IRB=0.100M RBM=1.200
+ RE=0.500 RC=2.680
+ CJE=1.325P VJE=0.700 MJE=0.220 FC=0.890
+ CJC=1.050P VJC=0.610 MJC=0.240 XCJC=0.400
+ TF=56.940P TR=1.000N PTF=21.000
+ XTF=68.398 VTF=0.600 ITF=0.700
+ XTB=1.600 EG=1.110 XTI=3.000
+ KF=1.000F AF=1.000)
.end

View File

@ -0,0 +1,31 @@
use $batchmode
* use $batchmode variable to steer control flow
*
* start either with
* ngspice -b -r rawfile.raw if-batchmode.cir
* or with
* ngspice if-batchmode.cir
v0 1 0 dc 1
R1 1 2 1k
C1 2 0 1u
.tran 100u 10m uic
.print tran all
.control
if $?batchmode
echo "Info: batchmode has been set by command line option -b"
echo
else
echo "Info: batchmode has not been set"
echo
unset ngdebug
tran 100u 10m uic
plot v(2)
end
.endc
.end

View File

@ -0,0 +1,78 @@
test if conditions
* test behaviour in special circumstances
v1 1 0 dc 42
R1 1 0 1k
.control
echo "expect Error: missing if condition"
* does not enter cp_istrue()
if
echo "FAIL: you should not see this"
else
echo "nonetheless evaluated as FALSE"
end
echo
set testvar_b=""
echo "expect |false|"
* in cp_istrue(): wl!=NULL names==NULL v==NULL
if $testvar_b
echo "FAIL: you should not see this"
else
echo "|false|"
end
echo
set testvar_c
echo "expect testvar_c=|TRUE|"
* in cp_istrue(): wl!=NULL names!=NULL v!=NULL
if $testvar_c
echo "testvar_c=|$testvar_c|"
end
echo
echo "expect Error: testvar_d: no such variable."
* in cp_istrue(): wl!=NULL then wl==NULL names==NULL v==NULL
if $testvar_d
echo "FAIL: you should not see this"
else
echo "nonetheless evaluated as FALSE"
end
echo
echo "expect Error(parse.c--checkvalid): testvar_e: no such vector."
* in cp_istrue(): wl!=NULL names==NULL v==NULL
if testvar_e = 3.3
echo "FAIL: you should not see this"
else
echo "nonetheless evaluated as FALSE"
end
echo
let testvar_f = 3.5
echo "expect |false|"
if testvar_f = 3.3
echo "FAIL: you should not see this"
else
echo "|false|"
end
echo
echo "expect |true|"
if testvar_f = 3.5
echo "|true|"
else
echo "FAIL: you should not see this"
end
echo
op
print v(1)
.endc
.end

View File

@ -0,0 +1,96 @@
new ft_getpnames parser check 3, try ternary
* (compile (concat "tmp-1/ng-spice-rework/src/ngspice " buffer-file-name) t)
VIN 1 0 DC=0
.control
dc VIN 0 10 5
* trying the ternary
let checks = 0
let const0 = 0
let const5 = 5
let const6 = 6
let tmp = const0 ? const5 : const6
if tmp eq const6
let checks = checks + 1
else
echo "ERROR:"
end
let tmp = const6 ? const5 : const6
if tmp eq const5
let checks = checks + 1
else
echo "ERROR:"
end
define foo(a,b,d) a ? b : d
if foo(const0,const5,const6) eq const6
let checks = checks + 1
else
echo "ERROR:"
end
if foo(const6,const5,const6) eq const5
let checks = checks + 1
else
echo "ERROR:"
end
let vec7 = 7*unitvec(7)
let vec8 = 8*unitvec(8)
if length(const5 ? vec7 : vec8) eq 7
let checks = checks + 1
else
echo "ERROR:"
end
if length(const0 ? vec7 : vec8) eq 8
let checks = checks + 1
else
echo "ERROR:"
end
* FIXME, "1 ? 1:1" (without spaces around of ':') doesnt work,
* "1:1" is a lexem, WHY !!!
* ist that an old artifact, (ancient hierarchical name separator ':')
*
*print length(1?1:1)
*if (1 ? 1:1) eq 1
if (1 ? 1 : 1) eq 1
let checks = checks + 1
else
echo "ERROR:"
end
print @vin[dc]
* '"' survives, and will be processed in the ft_getpnames() lexer, that is PPlex()
* where the string will be unqoted
* thats used vor weired variable names, for example "zero(1)"
let foo = "vec8"
if foo eq vec8
let checks = checks + 1
else
echo "ERROR:"
end
if checks eq 8
echo "INFO: ok"
else
echo "ERROR:"
end
.endc
.end

View File

@ -0,0 +1,111 @@
demonstrate < etc in ft_getpnames
* (compile (concat "tmp-1/ng-spice-rework/src/ngspice " buffer-file-name) t)
VIN 1 0 DC=0
.control
dc VIN 0 10 5
let checks = 0
let const0 = 0
let const5 = 5
let const6 = 6
* check some relational operators, which are in danger to mixed up
* with csh semantic, that is IO redirection
if const5 < const6
let checks = checks + 1
else
echo "ERROR:"
end
if const6 > const5
let checks = checks + 1
else
echo "ERROR:"
end
if const5 >= const5
let checks = checks + 1
else
echo "ERROR:"
end
if const5 <= const5
let checks = checks + 1
else
echo "ERROR:"
end
if const5 = const5
let checks = checks + 1
else
echo "ERROR:"
end
* check some wired non-equality operators
* note: there are some awkward tranformations ahead of the ft_getpnames lexer
* transforming "><" into "> <"
* and "<>" into "< >"
* note: "!=" would have been in serious danger to be fooled up within
* csh history mechanism
if const6 <> const5
let checks = checks + 1
else
echo "ERROR:"
end
if const6 >< const5
let checks = checks + 1
else
echo "ERROR:"
end
* check some boolean operators, which are in danger to be mixed up
* with csh semantic, `&' background '|' pipe '~' homedirectory
if const5 & const5
let checks = checks + 1
else
echo "ERROR:"
end
if const0 | const5
let checks = checks + 1
else
echo "ERROR:"
end
if ~ const0
let checks = checks + 1
else
echo "ERROR:"
end
* note:
* "!=" would be in danger, '!' triggers the csh history mechanism
*if const5 != const6
* echo "just trying"
*end
* Note: csh semantics swallows the '>' and '<' operators
* on most of the com lines
* witnessed by
let tmp = const5 > unwanted_output_file_1
define foo(a,b) a > unwanted_output_file_2
print const0 > unwanted_output_file_3
if checks eq 10
echo "INFO: ok"
end
.endc
.end

View File

@ -0,0 +1,150 @@
Test sequences for ngspice control structures
*vectors are used (except foreach)
*start in interactive mode
.control
* test for while, repeat, if, break
let loop = 0
while loop < 4
let index = 0
repeat
let index = index + 1
if index > 4
break
end
end
echo index "$&index" loop "$&loop"
let loop = loop + 1
end
* test sequence for while, dowhile
let loop = 0
echo
echo enter loop with "$&loop"
dowhile loop < 3
echo within dowhile loop "$&loop"
let loop = loop + 1
end
echo after dowhile loop "$&loop"
echo
let loop = 0
while loop < 3
echo within while loop "$&loop"
let loop = loop + 1
end
echo after while loop "$&loop"
let loop = 3
echo
echo enter loop with "$&loop"
dowhile loop < 3
echo within dowhile loop "$&loop" ; output expected
let loop = loop + 1
end
echo after dowhile loop "$&loop"
echo
let loop = 3
while loop < 3
echo within while loop "$&loop" ; no output expected
let loop = loop + 1
end
echo after while loop "$&loop"
* test sequence for foreach
echo
foreach outvar 0 0.5 1 1.5
echo parameters: $outvar ; foreach parameters are variables, not vectors!
end
* test for if ... else ... end
echo
let loop = 0
let index = 1
dowhile loop < 10
let index = index * 2
if index < 128
echo "$&index" lt 128
else
echo "$&index" ge 128
end
let loop = loop + 1
end
* simple test for label, goto
echo
let loop = 0
label starthere
echo start "$&loop"
let loop = loop + 1
if loop < 3
goto starthere
end
echo end "$&loop"
* test for label, nested goto
echo
let loop = 0
label starthere1
echo start nested "$&loop"
let loop = loop + 1
if loop < 3
if loop < 3
goto starthere1
end
end
echo end "$&loop"
* test for label, goto
echo
let index = 0
label starthere2
let loop = 0
echo We are at start with index "$&index" and loop "$&loop"
if index < 6
label inhere
let index = index + 1
if loop < 3
let loop = loop + 1
if index > 1
echo jump2
goto starthere2
end
end
echo jump
goto inhere
end
echo We are at end with index "$&index" and loop "$&loop"
* test goto in while loop
echo
let loop = 0
if 1 ; outer loop to allow nested forward label 'endlabel'
while loop < 10
if loop > 5
echo jump
goto endlabel
end
let loop = loop + 1
end
echo before ; never reached
label endlabel
echo after "$&loop"
end
*test for using variables
* simple test for label, goto
echo
set loop = 0
label starthe
echo start $loop
let loop = $loop + 1 ; expression needs vector at lhs
set loop = "$&loop" ; convert vector contents to variable
if $loop < 3
goto starthe
end
echo end $loop
quit
.endc

View File

@ -0,0 +1,11 @@
Test sequences for ngspice control structure got
.control
goto starthere
echo this not
* label starthere
echo done
quit
.endc

View File

@ -0,0 +1,19 @@
Test sequences for ngspice control structures
*vectors are used (except foreach)
*start in interactive mode
.control
* simple test for label, goto
echo
let loop = 0
label starthere
echo start "$&loop"
let loop = loop + 1
if loop < 3
goto starthere
end
echo end "$&loop"
quit
.endc

View File

@ -0,0 +1,46 @@
Test sequences for ngspice control structures
*vectors are used (except foreach)
*start in interactive mode
.control
* test for label, goto
echo
let index = 0
label starthere2
let loop = 0
echo We are at start with index "$&index" and loop "$&loop"
if index < 6
label inhere
let index = index + 1
if loop < 3
let loop = loop + 1
if index > 1
echo jump2
goto starthere2
end
end
echo jump
goto inhere
end
echo We are at end with index "$&index" and loop "$&loop"
* test goto in while loop
echo
let loop = 0
if 1 ; outer loop to allow nested forward label 'endlabel'
while loop < 10
if loop > 5
echo jump
goto endlabel
end
let loop = loop + 1
end
echo before ; never reached
label endlabel
echo after "$&loop"
end
quit
.endc

View File

@ -0,0 +1,121 @@
Test for Scattering Parameters
** Two ports
** Examples: Bipolar, Tschebyschef, RC
.param Rbase=50 Vbias_in=0 Vbias_out=0
*** The two-port circuit:
** port 1: in 0
** port 2: out 0
** Bias on both ports through resistor Rbase (to obtain operating point)
** Example RF Bipolar mrf5711
** VCE 1 V, IE = 5mA
** QXXXXXXX nc nb ne
** model obtained from
** http://141.69.160.32/~krausg/Spice_Model_CD/Vendor%20List/Motorola/Spice/RFBJT/
*.include MRF5711.lib
*XMRF5711 out in e MRF5711
*Ie e 0 5m
*Ce e 0 1
** Example Tschebyschef Low Pass filter
C1 in 0 33.2p
L1 in 2 99.2n
C2 2 0 57.2p
L2 2 out 99.2n
C3 out 0 33.2p
** Example RC
** see
** http://www.allenhollister.com/allen/files/scatteringparameters.pdf
*R2 in out 10
*C1 out int5 30p
*R1 int5 0 10
*** End of circuit
** The following subcircuit to be changed only by an experienced user!
*** Driver and readout
X1 in out S_2_2 S_1_2 S_PARAM
.SUBCKT S_PARAM 22 66 5 7
* Resistors emulate switches with Ron=0.001 and Roff=1e12
* to switch driver to input and readout to output (and vice versa, see below)
RS1 22 2 0.001
RS2 66 6 0.001
RS3 22 6 1e12
RS4 66 2 1e12
*Driver
Vacdc 1 0 DC 'Vbias_in' AC 1 ; ac voltage and dc bias at input (applied through load resistor)
R1 1 2 'Rbase'
E1 3 0 2 0 2 ; amplify in port ac voltage by 2
Vac 3 4 DC 0 AC 1 ; subtract driving ac voltage
R_loop 4 5 0.001
R3 5 0 1 ; ground return for measure node 5
*Readout
E2 7 0 6 0 2 ; amplify out port ac voltage by 2
R4 6 8 'Rbase' ; load resistor at output (ac)
Vdc 8 0 DC 'Vbias_out' AC 0 ; dc bias at output (applied through load resistor)
.ends
** Check the two ac lines below for being equal!
.control
set noaskquit
set filetype=ascii
*** measurement for s_1_1 and s_2_1
op
** save bias voltages to vector
let Vdcnew=V(X1.1) ; former Vacdc
let Vacdcnew=v(X1.8) ; former Vdc
** first ac measurement (change this line only together with following ac line)
*ac lin 20 0.1G 2G ; use for bip transistor
ac lin 100 2.5MEG 250MEG ; use for Tschebyschef
*ac lin 101 1k 10G ; use for RC
**
** switch input and output
alter R.X1.RS1=1e12
alter R.X1.RS2=1e12
alter R.X1.RS3=0.001
alter R.X1.RS4=0.001
** switch bias voltages between in and out
alter V.X1.Vacdc DC=op1.Vacdcnew
alter V.X1.Vdc DC=op1.Vdcnew
*** measurement for s_1_2 and s_2_2
op
** second ac measurement (change this line only together with ac line above)
*ac lin 20 0.1G 2G ; use for bip transistor
ac lin 100 2.5MEG 250MEG ; use for Tschebyschef
*ac lin 101 1 10G ; use for RC
**
let s_1_1=ac1.s_2_2
let s_2_1=ac1.s_1_2
settype s-param S_1_1 S_2_1 S_2_2 S_1_2
let S11db = db(s_1_1)
let S12db = db(s_1_2)
let S21db = db(s_2_1)
let S22db = db(s_2_2)
settype decibel S11db S21db S22db S12db
let P11=180*ph(s_1_1)/pi
let P21=180*ph(s_2_1)/pi
let P22=180*ph(S_2_2)/pi
let P12=180*ph(S_1_2)/pi
settype phase P11 P21 P22 P12
let Rbase=@R.X1.R4[Resistance]
settype impedance Rbase
*plot s11db s21db S22db S12db ylimit -50 0 xlog ; used with RC
plot s11db s21db S22db S12db ylimit -0.5 0 ; used with Tschebyschef
plot P11 P21 P22 P12
plot smithgrid S_1_1 S_1_2
*wrdata s3046 mag(S11) P11 mag(S21) P21 mag(S22) P22 mag(S12) P12 ; write simple table
wrs2p s3046.s2p ; write touchstone vers. 1 file s3046.s2p
quit
.endc
.end

View File

@ -0,0 +1,105 @@
!2-port S-parameter file
!Title: test for scattering parameters
!Generated by ngspice at Mon Jun 29 16:30:10 2026
# Hz S RI R 50
!freq ReS11 ImS11 ReS21 ImS21 ReS12 ImS12 ReS22 ImS22
2.500000e+06 -1.358762e-03 -1.726349e-02 9.966563e-01 -7.959753e-02 9.966563e-01 -7.959753e-02 -1.358762e-03 -1.726349e-02
5.000000e+06 -5.439573e-03 -3.397117e-02 9.867253e-01 -1.585780e-01 9.867253e-01 -1.585780e-01 -5.439573e-03 -3.397117e-02
7.500000e+06 -1.205882e-02 -4.958988e-02 9.703054e-01 -2.363411e-01 9.703054e-01 -2.363411e-01 -1.205882e-02 -4.958988e-02
1.000000e+07 -2.095226e-02 -6.363041e-02 9.475859e-01 -3.123192e-01 9.475859e-01 -3.123192e-01 -2.095226e-02 -6.363041e-02
1.250000e+07 -3.176693e-02 -7.566616e-02 9.188161e-01 -3.859893e-01 9.188161e-01 -3.859893e-01 -3.176693e-02 -7.566616e-02
1.500000e+07 -4.407645e-02 -8.534828e-02 8.842915e-01 -4.568821e-01 8.842915e-01 -4.568821e-01 -4.407645e-02 -8.534828e-02
1.750000e+07 -5.739842e-02 -9.241679e-02 8.443387e-01 -5.245862e-01 8.443387e-01 -5.245862e-01 -5.739842e-02 -9.241679e-02
2.000000e+07 -7.121292e-02 -9.670767e-02 7.992999e-01 -5.887480e-01 7.992999e-01 -5.887480e-01 -7.121292e-02 -9.670767e-02
2.250000e+07 -8.498089e-02 -9.815599e-02 7.495191e-01 -6.490667e-01 7.495191e-01 -6.490667e-01 -8.498089e-02 -9.815599e-02
2.500000e+07 -9.816184e-02 -9.679587e-02 6.953303e-01 -7.052862e-01 6.953303e-01 -7.052862e-01 -9.816184e-02 -9.679587e-02
2.750000e+07 -1.102302e-01 -9.275778e-02 6.370488e-01 -7.571844e-01 6.370488e-01 -7.571844e-01 -1.102302e-01 -9.275778e-02
3.000000e+07 -1.206903e-01 -8.626387e-02 5.749671e-01 -8.045597e-01 5.749671e-01 -8.045597e-01 -1.206903e-01 -8.626387e-02
3.250000e+07 -1.290901e-01 -7.762196e-02 5.093540e-01 -8.472181e-01 5.093540e-01 -8.472181e-01 -1.290901e-01 -7.762196e-02
3.500000e+07 -1.350339e-01 -6.721847e-02 4.404583e-01 -8.849594e-01 4.404583e-01 -8.849594e-01 -1.350339e-01 -6.721847e-02
3.750000e+07 -1.381947e-01 -5.551036e-02 3.685166e-01 -9.175655e-01 3.685166e-01 -9.175655e-01 -1.381947e-01 -5.551036e-02
4.000000e+07 -1.383257e-01 -4.301599e-02 2.937651e-01 -9.447911e-01 2.937651e-01 -9.447911e-01 -1.383257e-01 -4.301599e-02
4.250000e+07 -1.352730e-01 -3.030416e-02 2.164537e-01 -9.663575e-01 2.164537e-01 -9.663575e-01 -1.352730e-01 -3.030416e-02
4.500000e+07 -1.289872e-01 -1.798090e-02 1.368634e-01 -9.819513e-01 1.368634e-01 -9.819513e-01 -1.289872e-01 -1.798090e-02
4.750000e+07 -1.195356e-01 -6.672926e-03 5.532482e-02 -9.912277e-01 5.532482e-02 -9.912277e-01 -1.195356e-01 -6.672926e-03
5.000000e+07 -1.071119e-01 2.992941e-03 -2.776434e-02 -9.938209e-01 -2.776434e-02 -9.938209e-01 -1.071119e-01 2.992941e-03
5.250000e+07 -9.204473e-02 1.041495e-02 -1.119227e-01 -9.893593e-01 -1.119227e-01 -9.893593e-01 -9.204473e-02 1.041495e-02
5.500000e+07 -7.479988e-02 1.504632e-02 -1.965734e-01 -9.774880e-01 -1.965734e-01 -9.774880e-01 -7.479988e-02 1.504632e-02
5.750000e+07 -5.597718e-02 1.642913e-02 -2.810392e-01 -9.578959e-01 -2.810392e-01 -9.578959e-01 -5.597718e-02 1.642913e-02
6.000000e+07 -3.629761e-02 1.423063e-02 -3.645451e-01 -9.303453e-01 -3.645451e-01 -9.303453e-01 -3.629761e-02 1.423063e-02
6.250000e+07 -1.658003e-02 8.279254e-03 -4.462325e-01 -8.947021e-01 -4.462325e-01 -8.947021e-01 -1.658003e-02 8.279254e-03
6.500000e+07 2.293456e-03 -1.403107e-03 -5.251827e-01 -8.509618e-01 -5.251827e-01 -8.509618e-01 2.293456e-03 -1.403107e-03
6.750000e+07 1.942301e-02 -1.457657e-02 -6.004512e-01 -7.992673e-01 -6.004512e-01 -7.992673e-01 1.942301e-02 -1.457657e-02
7.000000e+07 3.394498e-02 -3.077019e-02 -6.711071e-01 -7.399144e-01 -6.711071e-01 -7.399144e-01 3.394498e-02 -3.077019e-02
7.250000e+07 4.509064e-02 -4.928309e-02 -7.362749e-01 -6.733425e-01 -7.362749e-01 -6.733425e-01 4.509064e-02 -4.928309e-02
7.500000e+07 5.224510e-02 -6.920078e-02 -7.951722e-01 -6.001083e-01 -7.951722e-01 -6.001083e-01 5.224510e-02 -6.920078e-02
7.750000e+07 5.500169e-02 -8.942553e-02 -8.471349e-01 -5.208459e-01 -8.471349e-01 -5.208459e-01 5.500169e-02 -8.942553e-02
8.000000e+07 5.320862e-02 -1.087178e-01 -8.916265e-01 -4.362158e-01 -8.916265e-01 -4.362158e-01 5.320862e-02 -1.087178e-01
8.250000e+07 4.700673e-02 -1.257444e-01 -9.282245e-01 -3.468485e-01 -9.282245e-01 -3.468485e-01 4.700673e-02 -1.257444e-01
8.500000e+07 3.686015e-02 -1.391301e-01 -9.565809e-01 -2.532925e-01 -9.565809e-01 -2.532925e-01 3.686015e-02 -1.391301e-01
8.750000e+07 2.358475e-02 -1.475095e-01 -9.763571e-01 -1.559739e-01 -9.763571e-01 -1.559739e-01 2.358475e-02 -1.475095e-01
9.000000e+07 8.381382e-03 -1.495831e-01 -9.871299e-01 -5.517864e-02 -9.871299e-01 -5.517864e-02 8.381382e-03 -1.495831e-01
9.250000e+07 -7.118544e-03 -1.441840e-01 -9.882734e-01 4.892923e-02 -9.882734e-01 4.892923e-02 -7.118544e-03 -1.441840e-01
9.500000e+07 -2.079005e-02 -1.303751e-01 -9.788181e-01 1.562356e-01 -9.788181e-01 1.562356e-01 -2.079005e-02 -1.303751e-01
9.750000e+07 -2.993798e-02 -1.076032e-01 -9.573006e-01 2.665235e-01 -9.573006e-01 2.665235e-01 -2.993798e-02 -1.076032e-01
1.000000e+08 -3.123039e-02 -7.595215e-02 -9.216321e-01 3.792038e-01 -9.216321e-01 3.792038e-01 -3.123039e-02 -7.595215e-02
1.025000e+08 -2.070470e-02 -3.654144e-02 -8.690529e-01 4.928882e-01 -8.690529e-01 4.928882e-01 -2.070470e-02 -3.654144e-02
1.050000e+08 6.025502e-03 7.907262e-03 -7.963008e-01 6.047861e-01 -7.963008e-01 6.047861e-01 6.025502e-03 7.907262e-03
1.075000e+08 5.315491e-02 5.240190e-02 -7.002024e-01 7.099973e-01 -7.002024e-01 7.099973e-01 5.315491e-02 5.240190e-02
1.100000e+08 1.234268e-01 8.919325e-02 -5.789199e-01 8.009873e-01 -5.789199e-01 8.009873e-01 1.234268e-01 8.919325e-02
1.125000e+08 2.161923e-01 1.080766e-01 -4.338893e-01 8.678549e-01 -4.338893e-01 8.678549e-01 2.161923e-01 1.080766e-01
1.150000e+08 3.253809e-01 9.825973e-02 -2.718540e-01 9.001720e-01 -2.718540e-01 9.001720e-01 3.253809e-01 9.825973e-02
1.175000e+08 4.388659e-01 5.198956e-02 -1.055070e-01 8.905890e-01 -1.055070e-01 8.905890e-01 4.388659e-01 5.198956e-02
1.200000e+08 5.408130e-01 -3.149563e-02 4.884981e-02 8.387714e-01 4.884981e-02 8.387714e-01 5.408130e-01 -3.149563e-02
1.225000e+08 6.167585e-01 -1.444873e-01 1.763784e-01 7.528644e-01 1.763784e-01 7.528644e-01 6.167585e-01 -1.444873e-01
1.250000e+08 6.585082e-01 -2.734229e-01 2.685960e-01 6.468633e-01 2.685960e-01 6.468633e-01 6.585082e-01 -2.734229e-01
1.275000e+08 6.657311e-01 -4.039413e-01 3.249590e-01 5.355451e-01 3.249590e-01 5.355451e-01 6.657311e-01 -4.039413e-01
1.300000e+08 6.439584e-01 -5.250419e-01 3.508493e-01 4.302996e-01 3.508493e-01 4.302996e-01 6.439584e-01 -5.250419e-01
1.325000e+08 6.011843e-01 -6.305572e-01 3.541621e-01 3.376531e-01 3.541621e-01 3.376531e-01 6.011843e-01 -6.305572e-01
1.350000e+08 5.451725e-01 -7.184622e-01 3.426007e-01 2.599575e-01 3.426007e-01 2.599575e-01 5.451725e-01 -7.184622e-01
1.375000e+08 4.821433e-01 -7.893860e-01 3.223551e-01 1.968808e-01 3.223551e-01 1.968808e-01 4.821433e-01 -7.893860e-01
1.400000e+08 4.165141e-01 -8.452649e-01 2.978358e-01 1.467550e-01 2.978358e-01 1.467550e-01 4.165141e-01 -8.452649e-01
1.425000e+08 3.511565e-01 -8.884498e-01 2.719260e-01 1.074716e-01 2.719260e-01 1.074716e-01 3.511565e-01 -8.884498e-01
1.450000e+08 2.877951e-01 -9.212259e-01 2.463757e-01 7.696353e-02 2.463757e-01 7.696353e-02 2.877951e-01 -9.212259e-01
1.475000e+08 2.273727e-01 -9.456046e-01 2.221642e-01 5.341517e-02 2.221642e-01 5.341517e-02 2.273727e-01 -9.456046e-01
1.500000e+08 1.703290e-01 -9.632664e-01 1.997756e-01 3.532106e-02 1.997756e-01 3.532106e-02 1.703290e-01 -9.632664e-01
1.525000e+08 1.167948e-01 -9.755766e-01 1.793909e-01 2.147277e-02 1.793909e-01 2.147277e-02 1.167948e-01 -9.755766e-01
1.550000e+08 6.671938e-02 -9.836268e-01 1.610137e-01 1.091828e-02 1.610137e-01 1.091828e-02 6.671938e-02 -9.836268e-01
1.575000e+08 1.995235e-02 -9.882835e-01 1.445500e-01 2.915383e-03 1.445500e-01 2.915383e-03 1.995235e-02 -9.882835e-01
1.600000e+08 -2.370667e-02 -9.902329e-01 1.298576e-01 -3.111475e-03 1.298576e-01 -3.111475e-03 -2.370667e-02 -9.902329e-01
1.625000e+08 -6.447758e-02 -9.900183e-01 1.167745e-01 -7.607606e-03 1.167745e-01 -7.607606e-03 -6.447758e-02 -9.900183e-01
1.650000e+08 -1.025822e-01 -9.880715e-01 1.051368e-01 -1.091749e-02 1.051368e-01 -1.091749e-02 -1.025822e-01 -9.880715e-01
1.675000e+08 -1.382345e-01 -9.847362e-01 9.478726e-02 -1.330789e-02 9.478726e-02 -1.330789e-02 -1.382345e-01 -9.847362e-01
1.700000e+08 -1.716355e-01 -9.802877e-01 8.558031e-02 -1.498573e-02 8.558031e-02 -1.498573e-02 -1.716355e-01 -9.802877e-01
1.725000e+08 -2.029710e-01 -9.749474e-01 7.738382e-02 -1.611186e-02 7.738382e-02 -1.611186e-02 -2.029710e-01 -9.749474e-01
1.750000e+08 -2.324111e-01 -9.688939e-01 7.007948e-02 -1.681159e-02 7.007948e-02 -1.681159e-02 -2.324111e-01 -9.688939e-01
1.775000e+08 -2.601105e-01 -9.622725e-01 6.356230e-02 -1.718275e-02 6.356230e-02 -1.718275e-02 -2.601105e-01 -9.622725e-01
1.800000e+08 -2.862096e-01 -9.552014e-01 5.773960e-02 -1.730188e-02 5.773960e-02 -1.730188e-02 -2.862096e-01 -9.552014e-01
1.825000e+08 -3.108352e-01 -9.477774e-01 5.252990e-02 -1.722893e-02 5.252990e-02 -1.722893e-02 -3.108352e-01 -9.477774e-01
1.850000e+08 -3.341022e-01 -9.400800e-01 4.786169e-02 -1.701095e-02 4.786169e-02 -1.701095e-02 -3.341022e-01 -9.400800e-01
1.875000e+08 -3.561145e-01 -9.321749e-01 4.367231e-02 -1.668487e-02 4.367231e-02 -1.668487e-02 -3.561145e-01 -9.321749e-01
1.900000e+08 -3.769660e-01 -9.241162e-01 3.990685e-02 -1.627969e-02 3.990685e-02 -1.627969e-02 -3.769660e-01 -9.241162e-01
1.925000e+08 -3.967419e-01 -9.159490e-01 3.651720e-02 -1.581817e-02 3.651720e-02 -1.581817e-02 -3.967419e-01 -9.159490e-01
1.950000e+08 -4.155196e-01 -9.077105e-01 3.346118e-02 -1.531815e-02 3.346118e-02 -1.531815e-02 -4.155196e-01 -9.077105e-01
1.975000e+08 -4.333691e-01 -8.994320e-01 3.070179e-02 -1.479358e-02 3.070179e-02 -1.479358e-02 -4.333691e-01 -8.994320e-01
2.000000e+08 -4.503545e-01 -8.911392e-01 2.820653e-02 -1.425535e-02 2.820653e-02 -1.425535e-02 -4.503545e-01 -8.911392e-01
2.025000e+08 -4.665341e-01 -8.828538e-01 2.594680e-02 -1.371188e-02 2.594680e-02 -1.371188e-02 -4.665341e-01 -8.828538e-01
2.050000e+08 -4.819612e-01 -8.745937e-01 2.389744e-02 -1.316967e-02 2.389744e-02 -1.316967e-02 -4.819612e-01 -8.745937e-01
2.075000e+08 -4.966844e-01 -8.663740e-01 2.203625e-02 -1.263369e-02 2.203625e-02 -1.263369e-02 -4.966844e-01 -8.663740e-01
2.100000e+08 -5.107484e-01 -8.582071e-01 2.034363e-02 -1.210767e-02 2.034363e-02 -1.210767e-02 -5.107484e-01 -8.582071e-01
2.125000e+08 -5.241943e-01 -8.501032e-01 1.880226e-02 -1.159437e-02 1.880226e-02 -1.159437e-02 -5.241943e-01 -8.501032e-01
2.150000e+08 -5.370598e-01 -8.420709e-01 1.739678e-02 -1.109581e-02 1.739678e-02 -1.109581e-02 -5.370598e-01 -8.420709e-01
2.175000e+08 -5.493797e-01 -8.341172e-01 1.611357e-02 -1.061336e-02 1.611357e-02 -1.061336e-02 -5.493797e-01 -8.341172e-01
2.200000e+08 -5.611860e-01 -8.262478e-01 1.494054e-02 -1.014795e-02 1.494054e-02 -1.014795e-02 -5.611860e-01 -8.262478e-01
2.225000e+08 -5.725084e-01 -8.184672e-01 1.386692e-02 -9.700091e-03 1.386692e-02 -9.700091e-03 -5.725084e-01 -8.184672e-01
2.250000e+08 -5.833743e-01 -8.107791e-01 1.288314e-02 -9.270031e-03 1.288314e-02 -9.270031e-03 -5.833743e-01 -8.107791e-01
2.275000e+08 -5.938092e-01 -8.031864e-01 1.198062e-02 -8.857773e-03 1.198062e-02 -8.857773e-03 -5.938092e-01 -8.031864e-01
2.300000e+08 -6.038367e-01 -7.956913e-01 1.115174e-02 -8.463144e-03 1.115174e-02 -8.463144e-03 -6.038367e-01 -7.956913e-01
2.325000e+08 -6.134786e-01 -7.882954e-01 1.038964e-02 -8.085839e-03 1.038964e-02 -8.085839e-03 -6.134786e-01 -7.882954e-01
2.350000e+08 -6.227555e-01 -7.809997e-01 9.688200e-03 -7.725449e-03 9.688200e-03 -7.725449e-03 -6.227555e-01 -7.809997e-01
2.375000e+08 -6.316864e-01 -7.738050e-01 9.041918e-03 -7.381493e-03 9.041918e-03 -7.381493e-03 -6.316864e-01 -7.738050e-01
2.400000e+08 -6.402889e-01 -7.667116e-01 8.445851e-03 -7.053439e-03 8.445851e-03 -7.053439e-03 -6.402889e-01 -7.667116e-01
2.425000e+08 -6.485798e-01 -7.597196e-01 7.895554e-03 -6.740717e-03 7.895554e-03 -6.740717e-03 -6.485798e-01 -7.597196e-01
2.450000e+08 -6.565745e-01 -7.528286e-01 7.387021e-03 -6.442737e-03 7.387021e-03 -6.442737e-03 -6.565745e-01 -7.528286e-01
2.475000e+08 -6.642874e-01 -7.460383e-01 6.916640e-03 -6.158900e-03 6.916640e-03 -6.158900e-03 -6.642874e-01 -7.460383e-01
2.500000e+08 -6.717324e-01 -7.393479e-01 6.481147e-03 -5.888603e-03 6.481147e-03 -5.888603e-03 -6.717324e-01 -7.393479e-01

View File

@ -0,0 +1,53 @@
* first-order delta sigma modulator
* continuous time
* according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005
* Fig. 2.13, p. 31
** signal
.param infreq=13k inampl=0.3
** clock
.param clkfreq=5Meg
** simulation time
.param simtime = 5u
.csparam simtime = 'simtime'
** input signal
*SIN(VO VA FREQ TD THETA)
vin in+ in- dc 0 sin(0 'inampl' 'infreq' 0 0)
* clock generation
* PULSE(V1 V2 TD TR TF PW PER)
vclk aclk 0 dc 0 pulse(0 1 0.1u 2n 2n '1/clkfreq/2' '1/clkfreq')
* digital one
* digital zero
vone aone 0 dc 1
vzero azero 0 dc 0
abridge1 [aone azero] [done dzero] adc_buff
.model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5)
* digital clock
abridge2 [aclk] [dclk] adc_buff
.model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5)
Xmod in+ in- dclk dv dvb mod1
* load mod1 subcircuit
.include mod1-ct.cir
.control
save xmod.adffq in+ in- xmod.outintp xmod.outintn
tran 0.01u $&simtime
* digit density vs input
plot xmod.adffq V("in+","in-") xlimit 0.1m 0.2m
* modulator integrator out, digital out
plot xmod.outintp-xmod.outintn xmod.adffq xlimit 0.140m 0.148m
*eprint dv dclk > digi1.txt
linearize xmod.adffq
fft xmod.adffq
* noise shaping 20dB/decade
plot db(xmod.adffq) xlimit 10k 1Meg xlog ylimit -20 -120
quit
.endc
.end

View File

@ -0,0 +1,46 @@
* delta sigma modulator
* first order, continuous time
.subckt mod1 ainp ainn dclk ddffq ddffqb
* integrator and summer
Ri1 ainn inintn 500
Rf1 adffq inintn 500
Cint1 outintp inintn 1n
.IC v(outintp) = 0 v(inintp) = 0
*
Rshunt1 outintp 0 100Meg
Rshunt2 initn 0 100Meg
*
Ri2 ainp inintp 500
Rf2 adffqb inintp 500
Cint2 outintn inintp 1n
.IC v(outintn) = 0 v(inintn) = 0
*
Rshunt3 outintn 0 100Meg
Rshunt4 inintp 0 100Meg
*
aint %vd(inintp inintn) %vd(outintp outintn) amp
.model amp gain ( in_offset =0.0 gain =100000
+ out_offset = 0)
* latched comparator (code model or B source, analog in, digital out)
*acomp %vd(outintp outintn) acompout limit5
*.model limit5 limit(in_offset=0 gain=100000 out_lower_limit=-1.0
*+ out_upper_limit=1.0 limit_range=0.10 fraction=FALSE)
*
BComp acompout 0 V = (V(outintp) - V(outintn)) >= 0 ? 1 : -1
*
abridge2 [acompout] [dcompout] adc_buff
.model adc_buff adc_bridge(in_low = 0 in_high = 0)
*
* D flip flop: data clk set reset out nout
adff1 dcompout dclk ds drs ddffq ddffqb flop2
.model flop2 d_dff(clk_delay = 1e-9 set_delay = 1.0e-9
+ reset_delay = 1.0e-9 ic = 0 rise_delay = 1.0e-9
+ fall_delay = 1e-9)
abridge1 [ddffq ddffqb dclk] [adffq adffqb aclk] dac1
.model dac1 dac_bridge(out_low = -1 out_high = 1 out_undef = 0
+ input_load = 5.0e-12
.ends mod1

View File

@ -0,0 +1,226 @@
* 74hcng.lib
*
* derived from 74HCxxx Model libraray for LTSPICE from www.linear.com/software
*
* Revision 1.01 06/25/2018 test devices NAND, NOR, and XOR as XSPICE subcircuit for ngspice
*
* All parts have been divided into three sections.
*
* >--| A-D-Converter (threshold VCC1/2) |----| Event LOGIC Axx (delay) |----| OUTPUT LEVEL D-A (rise and fall times) |-->
*
* Delays are given for Vcc = 2V/4.5V/6V (HC) from the
* Philips data sheets. http://www.philipslogic.com
*
* Delays are given for Vcc = 2V/4.5V/6V .
* Used delay: Td = (Tpd-Tr/2)*(4.5-0.5)/(Vcc-0.5)
* The gate delay has to be set to tpd minus 3ns for the input filter
* and another minus 3ns for Trise/2
* td1 = tpd - 3ns - 3ns
*
.param vcc=5 tripdt=6n
***********************************************************************************
* The 74HCXX gates
*
* 2-input NAND gate
* vcc 2 /4.5/5 /6
* tpd 25n/9n/7n/7n
* tr 19n/7n / /6n
.SUBCKT 74HC00 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt}
.param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)}
.param Rout={60*4.0/(vcc1-0.5)} ; standard output driver
*Cin1 in1 0 3.5p
*Cin2 in2 0 3.5p
abridge2 [in1 in2] [din1 din2] adc_buff
.model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0})
a6 [din1 din2] dout nand1
.model nand1 d_nand(rise_delay = {td1} fall_delay = {td1}
+ input_load = 0.5e-12)
abridge1 [dout] [out20] dac1
.model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0}
+ input_load = 5.0e-12 t_rise = {tripdt1}
+ t_fall = {tripdt1})
Rout out20 out {Rout}
.ends
* 2-input NOR gate
* tpd 25n/9n/7n
* tr 19n/7n/6n
.SUBCKT 74HC02 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt}
.param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)}
.param Rout={60*4.0/(vcc1-0.5)} ; standard output driver
*Cin1 in1 0 3.5p
*Cin2 in2 0 3.5p
abridge2 [in1 in2] [din1 din2] adc_buff
.model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0})
a6 [din1 din2] dout nor1
.model nor1 d_nor(rise_delay = {td1} fall_delay = {td1} input_load = 0.5e-12)
abridge1 [dout] [out20] dac1
.model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0}
+ input_load = 5.0e-12 t_rise = {tripdt1} t_fall = {tripdt1})
Rout out20 out {Rout}
.ends
** 2-input AND gate
* tpd 25n/9n/7n
* tr 19n/7n/6n
.SUBCKT 74HC08 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt}
.param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)}
.param Rout={60*4.0/(vcc1-0.5)} ; standard output driver
*Cin1 in1 0 3.5p
*Cin2 in2 0 3.5p
abridge2 [in1 in2] [din1 din2] adc_buff
.model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0})
a6 [din1 din2] dout and1
.model and1 d_and(rise_delay = {td1} fall_delay = {td1}
+ input_load = 0.5e-12)
abridge1 [dout] [out20] dac1
.model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0}
+ input_load = 5.0e-12 t_rise = {tripdt1}
+ t_fall = {tripdt1})
Rout out20 out {Rout}
.ends
**
* 2-input OR gate
* tpd 25n/9n/7n
* tr 19n/7n/6n
.SUBCKT 74HC32 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt}
.param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)}
.param Rout={60*4.0/(vcc1-0.5)} ; standard output driver
*Cin1 in1 0 3.5p
*Cin2 in2 0 3.5p
abridge2 [in1 in2] [din1 din2] adc_buff
.model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0})
a6 [din1 din2] dout or1
.model or1 d_or(rise_delay = {td1} fall_delay = {td1} input_load = 0.5e-12)
abridge1 [dout] [out20] dac1
.model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0}
+ input_load = 5.0e-12 t_rise = {tripdt1} t_fall = {tripdt1})
Rout out20 out {Rout}
.ends
* 2-input EXOR gate
* tpd 39n/14n/11n
* tr 19n/7n/6n
.SUBCKT 74HC86 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt}
.param td1={1e-9*(14-3-3)*4.0/(vcc1-0.5)}
.param Rout={60*4.0/(vcc1-0.5)} ; standard output driver
*Cin1 in1 0 3.5p
*Cin2 in2 0 3.5p
abridge2 [in1 in2] [din1 din2] adc_buff
.model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0})
a6 [din1 din2] dout xor3
.model xor3 d_xor(rise_delay = {td1} fall_delay = {td1}
+ input_load = 0.5e-12)
abridge1 [dout] [out20] dac1
.model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0}
+ input_load = 5.0e-12 t_rise = {tripdt1} t_fall = {tripdt1})
Rout out20 out {Rout}
.ends
*
*============================================================================
*
* A hopefully real transistor level based model of the 74HCU04. The model
* comes directly from philips. http://www.philipslogic.com/support/spice/
* This a unbuffered inverter which is often used in LC or crystal oscillators.
* Inverter, unbuffered
* Original Philips model used.
.SUBCKT 74HCU04 A Y VCC VGND vcc1={vcc} speed1={speed} tripdt1={tripdt}
*Rin A A1 200
*Cin A1 VGND 3p
*XAY A1 Y VCC VGND 74HC04_INV0
XAY A Y VCC VGND 74HC04_INV0
.ends
*
*
.SUBCKT 74HC04_INV0 2 3 80 90
*IN=2, OUT=3, VCC=80, GND=90
XINP 20 25 50 60 74HC_INP0N
XOUTP 25 30 50 60 74HC_OUTPN
L1 80 50 6.87NH
L2 60 90 6.87NH
L3 2 20 5.97NH
L4 30 3 5.97NH
C1 50 90 1.5P
C2 60 90 1.5P
C3 20 90 1.5P
C4 3 90 1.5P
.ENDS
*
.SUBCKT 74HC_INP0N 2 3 50 60
*IN=2, OUT=3, VCC=50, GND=60
R1 2 3 100
MP1 3 50 50 50 MHCPEN W=20U L=2.4U AD=100P AS=100P PD=40U PS= 20U
MN1 3 60 60 60 MHCNEN W=35U L=2.4U AD=260P AS=260P PD=70U PS= 20U
.ENDS
*
.SUBCKT 74HC_OUTPN 2 3 50 60
*IN=2, OUT=3, VCC=50, GND=60
R1 2 4 100
MP1 3 4 50 50 MHCPEN W=360U L=2.4U AD=400P AS=400P PD=10U PS=180U
MN1 3 4 60 60 MHCNEN W=140U L=2.4U AD=200P AS=300P PD=10U PS=130U
R2 4 5 50
MP2 3 5 50 50 MHCPEN W=360U L=2.4U AD=400P AS=400P PD=10U PS=180U
MN2 3 5 60 60 MHCNEN W=140U L=2.4U AD=200P AS=200P PD=10U PS=130U
R3 5 6 50
MP3 3 6 50 50 MHCPEN W=360U L=2.4U AD=400P AS=400P PD=10U PS=180U
MN3 3 6 60 60 MHCNEN W=140U L=2.4U AD=200P AS=200P PD=10U PS=130U
.ENDS
************************************************
* NOMINAL N-Channel Transistor *
* UCB-3 Parameter Set *
* HIGH-SPEED CMOS Logic Family *
* 10-Jan.-1995 *
************************************************
.Model MHCNEN NMOS (
+LEVEL = 3
+KP = 45.3E-6
+VTO = 0.72
+TOX = 51.5E-9
+NSUB = 2.8E15
+GAMMA = 0.94
+PHI = 0.65
+VMAX = 150E3
+RS = 40
+RD = 40
+XJ = 0.11E-6
+LD = 0.52E-6
+DELTA = 0.315
+THETA = 0.054
+ETA = 0.025
+KAPPA = 0.0
+WD = 0.0 )
***********************************************
* NOMINAL P-Channel transistor *
* UCB-3 Parameter Set *
* HIGH-SPEED CMOS Logic Family *
* 10-Jan.-1995 *
***********************************************
.Model MHCPEN PMOS (
+LEVEL = 3
+KP = 22.1E-6
+VTO = -0.71
+TOX = 51.5E-9
+NSUB = 3.3E16
+GAMMA = 0.92
+PHI = 0.65
+VMAX = 970E3
+RS = 80
+RD = 80
+XJ = 0.63E-6
+LD = 0.23E-6
+DELTA = 2.24
+THETA = 0.108
+ETA = 0.322
+KAPPA = 0.0
+WD = 0.0 )

View File

@ -0,0 +1,23 @@
Compare four different 4-bit full adders,
made of NAND gates
Simulating for 6400ns
adder_bib
The old spice bipolar NAND gate full adder
Simulation time 14.0s
adder_mos
A MOS NAND gate inverter, using BSIM3 and OpenMP
Simulation time 10.5s
adder_behav
NAND gates made with XSPICE digital devices,
but each has an analog interface, the interconnect
is analog, gate library is 74HCng_short_2.lib
Simulation time 1.9s
adder_Xspice
Fully digital, event node based NAND gates
digital plotting into vcd file, display with gtkwave
Simulation time 0.27s

View File

@ -0,0 +1,85 @@
ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER
*** SUBCIRCUIT DEFINITIONS
.SUBCKT NAND in1 in2 out
* NODES: INPUT(2), OUTPUT
a6 [in1 in2] out nand1
.ENDS NAND
.model nand1 d_nand(rise_delay = 0.7e-9 fall_delay = 0.7e-9
+ input_load = 0.5e-12)
.SUBCKT ONEBIT 1 2 3 4 5
* NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT
X1 1 2 7 NAND
X2 1 7 8 NAND
X3 2 7 9 NAND
X4 8 9 10 NAND
X5 3 10 11 NAND
X6 3 11 12 NAND
X7 10 11 13 NAND
X8 12 13 4 NAND
X9 11 7 5 NAND
.ENDS ONEBIT
.SUBCKT TWOBIT 1 2 3 4 5 6 7 8
* NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1,
* CARRY-IN, CARRY-OUT
X1 1 2 7 5 10 ONEBIT
X2 3 4 10 6 8 ONEBIT
.ENDS TWOBIT
.SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14
* NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2),
* OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT
X1 1 2 3 4 9 10 13 16 TWOBIT
X2 5 6 7 8 11 12 16 14 TWOBIT
.ENDS FOURBIT
*** ALL INPUTS (analog)
VIN1A a1 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 20NS 50NS)
VIN1B a2 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 30NS 100NS)
VIN2A a3 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 50NS 200NS)
VIN2B a4 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 90NS 400NS)
VIN3A a5 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 170NS 800NS)
VIN3B a6 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 330NS 1600NS)
VIN4A a7 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 650NS 3200NS)
VIN4B a8 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 1290NS 6400NS)
*** analog to digital
abridge2 [a1 a2 a3 a4 a5 a6 a7 a8] [1 2 3 4 5 6 7 8] adc_buff
.model adc_buff adc_bridge(in_low = 1 in_high = 2)
*** digital 0
V0 a0 0 0
abridge0 [a0] [d0] adc_buff
*** DEFINE NOMINAL CIRCUIT
X1 1 2 3 4 5 6 7 8 s0 s1 s2 s3 d0 c3 FOURBIT
*.TRAN 500p 6400NS
* save inputs
*.save V(a1) V(a2) V(a3) V(a4) V(a5) V(a6) V(a7) V(a8)
*.save v(1)
.control
*save v(1)
TRAN 500p 100NS
rusage
display
edisplay
* save data to input directory
cd $inputdir
eprvcd 1 2 3 4 5 6 7 8 s0 s1 s2 s3 c3 > adder_x.vcd
* plotting the vcd file (e.g. with GTKWave)
* For Windows: returns control to ngspice
*shell start gtkwave adder_x.vcd --script nggtk.tcl
* Others
shell gtkwave adder_x.vcd --script nggtk.tcl &
quit
.endc
.END

View File

@ -0,0 +1,70 @@
ADDER - 4 BIT ALL-74HC00-GATE BINARY ADDER
* behavioral gate description
*** SUBCIRCUIT DEFINITIONS
.include 74HCng_short_2.lib
.param vcc=3 tripdt=6n
.SUBCKT ONEBIT 1 2 3 4 5 6
* NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC
X1 1 2 7 6 0 74HC00
X2 1 7 8 6 0 74HC00
X3 2 7 9 6 0 74HC00
X4 8 9 10 6 0 74HC00
X5 3 10 11 6 0 74HC00
X6 3 11 12 6 0 74HC00
X7 10 11 13 6 0 74HC00
X8 12 13 4 6 0 74HC00
X9 11 7 5 6 0 74HC00
.ENDS ONEBIT
.SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9
* NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1,
* CARRY-IN, CARRY-OUT, VCC
X1 1 2 7 5 10 9 ONEBIT
X2 3 4 10 6 8 9 ONEBIT
.ENDS TWOBIT
.SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
* NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2),
* OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC
X1 1 2 3 4 9 10 13 16 15 TWOBIT
X2 5 6 7 8 11 12 16 14 15 TWOBIT
.ENDS FOURBIT
*** POWER
VCC 99 0 DC 3.3V
*** ALL INPUTS
VIN1A 1 0 DC 0 PULSE(0 3 0 5NS 5NS 20NS 50NS)
VIN1B 2 0 DC 0 PULSE(0 3 0 5NS 5NS 30NS 100NS)
VIN2A 3 0 DC 0 PULSE(0 3 0 5NS 5NS 50NS 200NS)
VIN2B 4 0 DC 0 PULSE(0 3 0 5NS 5NS 90NS 400NS)
VIN3A 5 0 DC 0 PULSE(0 3 0 5NS 5NS 170NS 800NS)
VIN3B 6 0 DC 0 PULSE(0 3 0 5NS 5NS 330NS 1600NS)
VIN4A 7 0 DC 0 PULSE(0 3 0 5NS 5NS 650NS 3200NS)
VIN4B 8 0 DC 0 PULSE(0 3 0 5NS 5NS 1290NS 6400NS)
*** DEFINE NOMINAL CIRCUIT
X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT
.option noinit acct
.TRAN 500p 100NS
* save inputs
.save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8)
.control
pre_set strict_errorhandling
unset ngdebug
*save outputs and specials
save x1.x1.x1.7 V(9) V(10) V(11) V(12) V(13)
run
rusage
* plot the inputs, use offset to plot on top of each other
plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28
* plot the outputs, use offset to plot on top of each other
plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16
quit
.endc
.END

View File

@ -0,0 +1,89 @@
ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER
*** SUBCIRCUIT DEFINITIONS
.SUBCKT NAND 1 2 3 4
* NODES: INPUT(2), OUTPUT, VCC
Q1 9 5 1 QMOD
D1CLAMP 0 1 DMOD
Q2 9 5 2 QMOD
D2CLAMP 0 2 DMOD
RB 4 5 4K
R1 4 6 1.6K
Q3 6 9 8 QMOD
R2 8 0 1K
RC 4 7 130
Q4 7 6 10 QMOD
DVBEDROP 10 3 DMOD
Q5 3 8 0 QMOD
.ENDS NAND
.SUBCKT ONEBIT 1 2 3 4 5 6
* NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC
X1 1 2 7 6 NAND
X2 1 7 8 6 NAND
X3 2 7 9 6 NAND
X4 8 9 10 6 NAND
X5 3 10 11 6 NAND
X6 3 11 12 6 NAND
X7 10 11 13 6 NAND
X8 12 13 4 6 NAND
X9 11 7 5 6 NAND
.ENDS ONEBIT
.SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9
* NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1,
* CARRY-IN, CARRY-OUT, VCC
X1 1 2 7 5 10 9 ONEBIT
X2 3 4 10 6 8 9 ONEBIT
.ENDS TWOBIT
.SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
* NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2),
* OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC
X1 1 2 3 4 9 10 13 16 15 TWOBIT
X2 5 6 7 8 11 12 16 14 15 TWOBIT
.ENDS FOURBIT
*** DEFINE NOMINAL CIRCUIT
.MODEL DMOD D
.MODEL QMOD NPN(BF=75 RB=100 CJE=1PF CJC=3PF)
VCC 99 0 DC 5V
VIN1A 1 0 PULSE(0 3 0 10NS 10NS 10NS 50NS)
VIN1B 2 0 PULSE(0 3 0 10NS 10NS 20NS 100NS)
VIN2A 3 0 PULSE(0 3 0 10NS 10NS 40NS 200NS)
VIN2B 4 0 PULSE(0 3 0 10NS 10NS 80NS 400NS)
VIN3A 5 0 PULSE(0 3 0 10NS 10NS 160NS 800NS)
VIN3B 6 0 PULSE(0 3 0 10NS 10NS 320NS 1600NS)
VIN4A 7 0 PULSE(0 3 0 10NS 10NS 640NS 3200NS)
VIN4B 8 0 PULSE(0 3 0 10NS 10NS 1280NS 6400NS)
X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT
RBIT0 9 0 1K
RBIT1 10 0 1K
RBIT2 11 0 1K
RBIT3 12 0 1K
RCOUT 13 0 1K
*** (FOR THOSE WITH MONEY (AND MEMORY) TO BURN)
.option noinit acct
.TRAN 1NS 100NS
*.save VIN1A VIN1B VIN2A VIN2B VIN3A VIN3B VIN4A VIN4B
* save inputs
.save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8)
* save outputs
.save V(9) V(10) V(11) V(12) V(13)
*.options savecurrents
*.save alli
.control
run
rusage
* plot the inputs, use offset to plot on top of each other
plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28
* plot the outputs, use offset to plot on top of each other
plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16
quit
.endc
.END

View File

@ -0,0 +1,81 @@
ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER
*** SUBCIRCUIT DEFINITIONS
.SUBCKT NAND in1 in2 out VDD
* NODES: INPUT(2), OUTPUT, VCC
M1 out in2 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p
M2 net.1 in2 0 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p
M3 out in1 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p
M4 out in1 net.1 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p
.ENDS NAND
.SUBCKT ONEBIT 1 2 3 4 5 6
* NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC
X1 1 2 7 6 NAND
X2 1 7 8 6 NAND
X3 2 7 9 6 NAND
X4 8 9 10 6 NAND
X5 3 10 11 6 NAND
X6 3 11 12 6 NAND
X7 10 11 13 6 NAND
X8 12 13 4 6 NAND
X9 11 7 5 6 NAND
.ENDS ONEBIT
.SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9
* NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1,
* CARRY-IN, CARRY-OUT, VCC
X1 1 2 7 5 10 9 ONEBIT
X2 3 4 10 6 8 9 ONEBIT
.ENDS TWOBIT
.SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
* NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2),
* OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC
X1 1 2 3 4 9 10 13 16 15 TWOBIT
X2 5 6 7 8 11 12 16 14 15 TWOBIT
.ENDS FOURBIT
*** POWER
VCC 99 0 DC 3.3V
*** ALL INPUTS
VIN1A 1 0 DC 0 PULSE(0 3 0 5NS 5NS 20NS 50NS)
VIN1B 2 0 DC 0 PULSE(0 3 0 5NS 5NS 30NS 100NS)
VIN2A 3 0 DC 0 PULSE(0 3 0 5NS 5NS 50NS 200NS)
VIN2B 4 0 DC 0 PULSE(0 3 0 5NS 5NS 90NS 400NS)
VIN3A 5 0 DC 0 PULSE(0 3 0 5NS 5NS 170NS 800NS)
VIN3B 6 0 DC 0 PULSE(0 3 0 5NS 5NS 330NS 1600NS)
VIN4A 7 0 DC 0 PULSE(0 3 0 5NS 5NS 650NS 3200NS)
VIN4B 8 0 DC 0 PULSE(0 3 0 5NS 5NS 1290NS 6400NS)
*** DEFINE NOMINAL CIRCUIT
X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT
.option noinit acct
.option cshunt=100f
.TRAN 500p 100NS
* save inputs
.save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8)
* use BSIM3 model with default parameters
.model n1 nmos level=49 version=3.3.0
.model p1 pmos level=49 version=3.3.0
*.include ./Modelcards/modelcard32.nmos
*.include ./Modelcards/modelcard32.pmos
.control
pre_set strict_errorhandling
unset ngdebug
*save outputs and specials
save x1.x1.x1.7 V(9) V(10) V(11) V(12) V(13)
run
rusage
* plot the inputs, use offset to plot on top of each other
plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28
* plot the outputs, use offset to plot on top of each other
plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16
quit
.endc
.END

View File

@ -0,0 +1,81 @@
ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER
*** SUBCIRCUIT DEFINITIONS
.SUBCKT NAND in1 in2 out VDD
* NODES: INPUT(2), OUTPUT, VCC
M1 out in2 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p
M2 net.1 in2 0 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p
M3 out in1 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p
M4 out in1 net.1 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p
.ENDS NAND
.SUBCKT ONEBIT 1 2 3 4 5 6
* NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC
X1 1 2 7 6 NAND
X2 1 7 8 6 NAND
X3 2 7 9 6 NAND
X4 8 9 10 6 NAND
X5 3 10 11 6 NAND
X6 3 11 12 6 NAND
X7 10 11 13 6 NAND
X8 12 13 4 6 NAND
X9 11 7 5 6 NAND
.ENDS ONEBIT
.SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9
* NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1,
* CARRY-IN, CARRY-OUT, VCC
X1 1 2 7 5 10 9 ONEBIT
X2 3 4 10 6 8 9 ONEBIT
.ENDS TWOBIT
.SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
* NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2),
* OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC
X1 1 2 3 4 9 10 13 16 15 TWOBIT
X2 5 6 7 8 11 12 16 14 15 TWOBIT
.ENDS FOURBIT
*** POWER
VCC 99 0 DC 3.3V
*** ALL INPUTS
VIN1A 1 0 DC 0 PULSE(0 3 0 5NS 5NS 20NS 50NS)
VIN1B 2 0 DC 0 PULSE(0 3 0 5NS 5NS 30NS 100NS)
VIN2A 3 0 DC 0 PULSE(0 3 0 5NS 5NS 50NS 200NS)
VIN2B 4 0 DC 0 PULSE(0 3 0 5NS 5NS 90NS 400NS)
VIN3A 5 0 DC 0 PULSE(0 3 0 5NS 5NS 170NS 800NS)
VIN3B 6 0 DC 0 PULSE(0 3 0 5NS 5NS 330NS 1600NS)
VIN4A 7 0 DC 0 PULSE(0 3 0 5NS 5NS 650NS 3200NS)
VIN4B 8 0 DC 0 PULSE(0 3 0 5NS 5NS 1290NS 6400NS)
*** DEFINE NOMINAL CIRCUIT
X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT
.option noinit acct
.TRAN 500p 100NS
* save inputs
.save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8)
* use BSIM3 model with default parameters
.model n1 nmos level=49 version=3.3.0
.model p1 pmos level=49 version=3.3.0
*.include ./Modelcards/modelcard32.nmos
*.include ./Modelcards/modelcard32.pmos
.control
pre_set strict_errorhandling
unset ngdebug
*save outputs and specials
save x1.x1.x1.7 V(9) V(10) V(11) V(12) V(13)
run
rusage
* plot the inputs, use offset to plot on top of each other
plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28
* plot the outputs, use offset to plot on top of each other
plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16
quit
.endc
.END

View File

@ -0,0 +1,10 @@
# tcl script for gtkwave: show vcd file data created by ngspice
set nfacs [ gtkwave::getNumFacs ]
for {set i 0} {$i < $nfacs } {incr i} {
set facname [ gtkwave::getFacName $i ]
set num_added [ gtkwave::addSignalsFromList $facname ]
}
gtkwave::/Edit/UnHighlight_All
gtkwave::/Time/Zoom/Zoom_Full

View File

@ -0,0 +1 @@
set ngbehavior=ltpsa

View File

@ -0,0 +1,464 @@
behav-568 74ALS568a 74F568 74LS568
* ----------------------------------------------------------- 74ALS568A ------
* Synchronous 4-Bit Up/Down Binary Counters With 3-State Outputs
*
* The ALS/AS Logic Data Book, 1986, TI Pages 2-425 to 2-433
* bss 5/3/94
*
.SUBCKT 74ALS568A GBAR U/DB CLK ENTBAR ENPBAR SCLRBAR LOADBAR ACLRBAR
+ A B C D CCOBAR RCOBAR QA QB QC QD
+ optional: DPWR=$G_DPWR DGND=$G_DGND
+ params: MNTYMXDLY=0 IO_LEVEL=0
U1 dff(4) DPWR DGND
+ $D_HI ACLRBAR CLK
+ DA DB DC DD
+ QA_O QB_O QC_O QD_O
+ QABAR QBBAR QCBAR QDBAR
+ D0_EFF IO_ALS00 MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
U2LOG LOGICEXP(18,6) DPWR DGND
+ U/DB CLK ENTBAR ENPBAR SCLRBAR LOADBAR A B C D
+ QA_O QB_O QC_O QD_O QABAR QBBAR QCBAR QDBAR
+ DA DB DC DD RCOBAR_O CCOBAR_O
+ D0_GATE IO_ALS00 MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
+
+ LOGIC:
+ clkbar = {~CLK}
+ sclr = {~SCLRBAR}
+ ub/d = {~U/DB}
+ ent = {~ENTBAR}
+ count = {~(ENTBAR | ENPBAR)}
+ sync2 = {~(sclr | LOADBAR)}
+ sync1 = {~(ENTBAR | ENPBAR | sclr | sync2)}
+ sync3 = {(SCLRBAR & LOADBAR)}
+ fba = {~((QABAR & U/DB) | (QA_O & ub/d))}
+ fbb = {~((QBBAR & U/DB) | (QB_O & ub/d))}
+ fbc = {~((QCBAR & U/DB) | (QC_O & ub/d))}
+ fbd = {~((QDBAR & U/DB) | (QD_O & ub/d))}
+ nand1 = {~(U/DB & fbd)}
+ nand2 = {~(QCBAR & ub/d & QDBAR)}
+ and1a = {(A & sync2)}
+ and2a = {((~sync1) & sync3 & QA_O)}
+ and3a = {((~(QA_O & sync3)) & sync1)}
+ DA = {and1a | and2a | and3a}
+ and1b = {(B & sync2)}
+ and2b = {((~(fba & sync1)) & sync3 & QB_O)}
+ and3b = {(fba & sync1 & nand2 & nand1 & QBBAR)}
+ DB = {and1b | and2b | and3b}
+ and1c = {(C & sync2)}
+ and2c = {((~(fba & fbb & sync1)) & sync3 & QC_O)}
+ and3c = {((~(QC_O & sync3)) & fbb & fba & sync1 & nand2)}
+ DC = {and1c | and2c | and3c}
+ and1d = {(D & sync2)}
+ and2d = {((~(fba & sync1)) & sync3 & QD_O)}
+ and3d = {((~(QD_O & sync3)) & fbc & fbb & fba & sync1)}
+ DD = {and1d | and2d | and3d}
+ RCOBAR_O = {~((U/DB & fbd & fba & ent) | (ent & fba & fbb & fbc & fbd & ub/d))}
+ rco = {~RCOBAR_O}
+ CCOBAR_O = {~(clkbar & count & rco)}
U3DLY PINDLY(6,1,5) DPWR DGND
+ QA_O QB_O QC_O QD_O RCOBAR_O CCOBAR_O
+ GBAR
+ CLK U/DB ENTBAR ENPBAR ACLRBAR
+ QA QB QC QD RCOBAR CCOBAR
+ IO_ALS00 MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
+
+ BOOLEAN:
+ CLOCK = {CHANGED_LH(CLK,0)}
+ CCK1 = {CHANGED(CLK,0)}
+ UPDOWN = {CHANGED(U/DB,0)}
+ ENABT = {CHANGED(ENTBAR,0)}
+ ENABP = {CHANGED(ENPBAR,0)}
+ CLEAR = {CHANGED_HL(ACLRBAR,0)}
+
+ TRISTATE:
+ ENABLE LO=GBAR
+ QA QB QC QD = {
+ CASE(
+ CLEAR & TRN_HL, DELAY(9ns,-1,20ns),
+ CLOCK & TRN_LH, DELAY(4ns,-1,13ns),
+ CLOCK & TRN_HL, DELAY(7ns,-1,16ns),
+ TRN_ZH, DELAY(6ns,-1,18ns),
+ TRN_ZL, DELAY(6ns,-1,24ns),
+ TRN_HZ, DELAY(1ns,-1,10ns),
+ TRN_LZ, DELAY(3ns,-1,13ns),
+ DELAY(10ns,-1,25ns))}
+
+ PINDLY:
+ RCOBAR = {
+ CASE(
+ CLOCK & TRN_LH, DELAY(12ns,-1,28ns),
+ CLOCK & TRN_HL, DELAY(10ns,-1,19ns),
+ UPDOWN & TRN_LH, DELAY(9ns,-1,23ns),
+ UPDOWN & TRN_HL, DELAY(9ns,-1,19ns),
+ ENABT & TRN_LH, DELAY(6ns,-1,15ns),
+ ENABT & TRN_HL, DELAY(4ns,-1,13ns),
+ DELAY(13ns,-1,29ns))}
+
+ CCOBAR = {
+ CASE(
+ ENABT & TRN_LH, DELAY(5ns,-1,13ns),
+ ENABT & TRN_HL, DELAY(9ns,-1,23ns),
+ CCK1 & TRN_LH, DELAY(5ns,-1,13ns),
+ CCK1 & TRN_HL, DELAY(6ns,-1,25ns),
+ ENABP & TRN_LH, DELAY(4ns,-1,12ns),
+ ENABP & TRN_HL, DELAY(5ns,-1,14ns),
+ DELAY(10ns,-1,26ns))}
U4CON CONSTRAINT(11) DPWR DGND
+ ACLRBAR LOADBAR CLK A B C D ENPBAR ENTBAR SCLRBAR U/DB
+ IO_ALS00 IO_LEVEL={IO_LEVEL}
+
+ FREQ:
+ NODE=CLK
+ MAXFREQ=20MEG
+
+ WIDTH:
+ NODE=CLK
+ MIN_HI=25ns
+ MIN_LO=25ns
+
+ WIDTH:
+ NODE=ACLRBAR
+ MIN_LO=15ns
+
+ WIDTH:
+ NODE=LOADBAR
+ MIN_LO=15ns
+
+ SETUP_HOLD:
+ CLOCK LH=CLK
+ DATA(4)=A B C D
+ SETUPTIME=20ns
+ WHEN={SCLRBAR!='0 | ACLRBAR!='0}
+
+ SETUP_HOLD:
+ CLOCK LH=CLK
+ DATA(2)=ENPBAR ENTBAR
+ SETUPTIME_HI=30ns
+ SETUPTIME_LO=20ns
+
+ SETUP_HOLD:
+ CLOCK LH=CLK
+ DATA(2)=SCLRBAR LOADBAR
+ SETUPTIME_LO=15ns
+ SETUPTIME_HI=30ns
+
+ SETUP_HOLD:
+ CLOCK LH=CLK
+ DATA(1)=U/DB
+ SETUPTIME=30ns
+
+ SETUP_HOLD:
+ CLOCK LH=CLK
+ DATA(1)=ACLRBAR
+ SETUPTIME_HI=10ns
.ENDS 74ALS568A
*
*
* ----------------------------------------------------------- 74F568 ------
* 4-Bit Bidirectional Decade Counters With 3-State Outputs
*
* The FAST TTL Logic Data Book, 1992, Philips Pages 562 to 572
* bss 5/3/94
* Left out the top AND gate in the feedback for the 2nd D flip-flop
* or the logic would be wrong
*
.SUBCKT 74F568 OEBAR U/DB CP CETBAR CEPBAR SRBAR PEBAR MRBAR
+ D0 D1 D2 D3 CCBAR TCBAR Q0 Q1 Q2 Q3
+ optional: DPWR=$G_DPWR DGND=$G_DGND
+ params: MNTYMXDLY=0 IO_LEVEL=0
U1 dff(4) DPWR DGND
+ $D_HI MRBAR CP
+ DA DB DC DD
+ Q0_O Q1_O Q2_O Q3_O
+ Q0BAR Q1BAR Q2BAR Q3BAR
+ D0_EFF IO_F MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
U2LOG LOGICEXP(18,6) DPWR DGND
+ U/DB CP CETBAR CEPBAR SRBAR PEBAR D0 D1 D2 D3
+ Q0_O Q1_O Q2_O Q3_O Q0BAR Q1BAR Q2BAR Q3BAR
+ DA DB DC DD TCBAR_O CCBAR_O
+ D0_GATE IO_F MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
+
+ LOGIC:
+ clkbar = {~CP}
+ ub/d = {~U/DB}
+ ent = {~CETBAR}
+ cnt = {~(SRBAR & PEBAR)}
+ cntbar = {~cnt}
+ count = {~(CETBAR | CEPBAR | cnt)}
+ nand0 = {~(D0 & SRBAR)}
+ nand1 = {~(D1 & SRBAR)}
+ nand2 = {~(D2 & SRBAR)}
+ nand3 = {~(D3 & SRBAR)}
+ fb1 = {(U/DB | ub/d)}
* Logic added to fb2 and fb3 so C would go to 5 on a count down
+ fb2 = {((Q3BAR & Q0_O & U/DB) | (Q3_O & Q2BAR & Q1BAR & Q0BAR & ub/d) |
+ (Q0BAR & Q1BAR & Q3BAR & Q2_O & ub/d) | (Q1_O & Q0BAR & ub/d))}
+ fb3 = {((Q1_O & Q0_O & U/DB) | (Q2BAR & Q1BAR & Q0BAR & Q3_O & ub/d) |
+ (Q0BAR & Q1BAR & Q2_O & Q3BAR & ub/d))}
+ fb4 = {((Q0_O & Q3_O & U/DB) | (Q2_O & Q1_O & Q0_O & U/DB) |
+ (Q2BAR & Q1BAR & Q0BAR & ub/d) | (Q0BAR & ub/d & Q3_O))}
+ TCBAR_O = {~((Q3_O & Q2BAR & Q1BAR & U/DB & Q0_O & ent) |
+ (ent & Q0BAR & Q1BAR & Q2BAR & Q3BAR & ub/d))}
+ tc = {~TCBAR_O}
+ CCBAR_O = {~(tc & clkbar & count)}
+ xor0 = {(~(fb1 & count)) ^ Q0_O}
+ xor1 = {(~(fb2 & count)) ^ Q1_O}
+ xor2 = {(~(fb3 & count)) ^ Q2_O}
+ xor3 = {(~(fb4 & count)) ^ Q3_O}
+ DA = {~((xor0 & cntbar) | (nand0 & cnt))}
+ DB = {~((xor1 & cntbar) | (nand1 & cnt))}
+ DC = {~((xor2 & cntbar) | (nand2 & cnt))}
+ DD = {~((xor3 & cntbar) | (nand3 & cnt))}
U3DLY PINDLY(6,1,7) DPWR DGND
+ Q0_O Q1_O Q2_O Q3_O TCBAR_O CCBAR_O
+ OEBAR
+ CP U/DB CETBAR CEPBAR MRBAR SRBAR PEBAR
+ Q0 Q1 Q2 Q3 TCBAR CCBAR
+ IO_F MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
+
+ BOOLEAN:
+ CLOCK = {CHANGED_LH(CP,0)}
+ CCK1 = {CHANGED(CP,0)}
+ UPDOWN = {CHANGED(U/DB,0)}
+ ENABT = {CHANGED(CETBAR,0)}
+ ENABP = {CHANGED(CEPBAR,0)}
+ CLEAR = {CHANGED_HL(MRBAR,0)}
+ SYCLR = {CHANGED(SRBAR,0)}
+ LOAD = {CHANGED(PEBAR,0)}
+
+ TRISTATE:
+ ENABLE LO=OEBAR
+ Q0 Q1 Q2 Q3 = {
+ CASE(
+ CLEAR & TRN_HL, DELAY(6ns,8ns,11ns),
+ CLOCK & TRN_LH, DELAY(3ns,6ns,9.5ns),
+ CLOCK & TRN_HL, DELAY(4ns,7.5ns,11ns),
+ TRN_ZH, DELAY(2ns,4ns,7ns),
+ TRN_ZL, DELAY(4.5ns,6.5ns,9.5ns),
+ TRN_HZ, DELAY(1.5ns,3.5ns,6.5ns),
+ TRN_LZ, DELAY(1.5ns,3.5ns,6ns),
+ DELAY(7ns,9ns,12ns))}
+
+ PINDLY:
+ TCBAR = {
+ CASE(
+ CLEAR, DELAY(8ns,11ns,15ns),
+ CLOCK & TRN_LH, DELAY(5.5ns,10ns,15ns),
+ CLOCK & TRN_HL, DELAY(4ns,7.5ns,11ns),
+ UPDOWN & TRN_LH, DELAY(2.5ns,5ns,9ns),
+ UPDOWN & TRN_HL, DELAY(5ns,10ns,15ns),
+ ENABT & TRN_LH, DELAY(1.5ns,3ns,6ns),
+ ENABT & TRN_HL, DELAY(2.5ns,5ns,8ns),
+ DELAY(9ns,12ns,16ns))}
+
+ CCBAR = {
+ CASE(
+ CLEAR, DELAY(8ns,11ns,15ns),
+ UPDOWN & TRN_LH, DELAY(4.5ns,9ns,12ns),
+ UPDOWN & TRN_HL, DELAY(5ns,11ns,16ns),
+ (ENABT | ENABP) & TRN_LH, DELAY(2ns,4ns,7ns),
+ (ENABT | ENABP) & TRN_HL, DELAY(3.5ns,5.5ns,9ns),
+ CCK1 & TRN_LH, DELAY(2.5ns,4.5ns,7.5ns),
+ CCK1 & TRN_HL, DELAY(2ns,4ns,6.5ns),
+ SYCLR & TRN_LH, DELAY(5.5ns,8ns,11ns),
+ SYCLR & TRN_HL, DELAY(7.5ns,9.5ns,12ns),
+ LOAD & TRN_LH, DELAY(3ns,5ns,8ns),
+ LOAD & TRN_HL, DELAY(4ns,6ns,8.5ns),
+ DELAY(9ns,12ns,16ns))}
U4CON CONSTRAINT(11) DPWR DGND
+ MRBAR PEBAR CP D0 D1 D2 D3 CEPBAR CETBAR SRBAR U/DB
+ IO_F IO_LEVEL={IO_LEVEL}
+
+ WIDTH:
+ NODE=CP
+ MIN_HI=8ns
+ MIN_LO=6ns
+
+ WIDTH:
+ NODE=MRBAR
+ MIN_LO=5ns
+
+ SETUP_HOLD:
+ CLOCK LH=CP
+ DATA(4)=D0 D1 D2 D3
+ SETUPTIME=4.5ns
+ HOLDTIME=2.5ns
+ WHEN={SRBAR!='0 | MRBAR!='0}
+
+ SETUP_HOLD:
+ CLOCK LH=CP
+ DATA(2)=CEPBAR CETBAR
+ SETUPTIME=6ns
+
+ SETUP_HOLD:
+ CLOCK LH=CP
+ DATA(2)=SRBAR PEBAR
+ SETUPTIME=9ns
+
+ SETUP_HOLD:
+ CLOCK LH=CP
+ DATA(1)=U/DB
+ SETUPTIME_HI=12.5ns
+ SETUPTIME_LO=17.5ns
+
+ SETUP_HOLD:
+ CLOCK LH=CP
+ DATA(1)=MRBAR
+ SETUPTIME_HI=7ns
.ENDS 74F568
*-----------------------------------------------------------74LS568------
* Four-Bit Up/Down Counters with Tri-State Outputs
* Motorola Schottky TTL Data, 1983, pages 4-321 to 4-325
* jat 8/14/96
.SUBCKT 74LS568 LOADBAR A B C D CEPBAR CETBAR U/DBAR CP YA YB YC YD RCOBAR
+ ACLRBAR SCLRBAR OEBAR CCO
+ OPTIONAL: DPWR=$G_DPWR DGND=$G_DGND
+ PARAMS: MNTYMXDLY=0 IO_LEVEL=0
U1 LOGICEXP(18,6) DPWR DGND
+ A B C D SCLRBAR LOADBAR CEPBAR CETBAR CP U/DBAR Q0 Q1 Q2 Q3 Q0BAR Q1BAR
+ Q2BAR Q3BAR
+ D0 D1 D2 D3 RCOBARO CCOO
+ D0_GATE IO_LS MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
+ LOGIC:
+ CE = {~(CETBAR | CEPBAR)}
+ X1 = {~(Q0BAR & CE)}
+ X2 = {~(Q2BAR & Q3BAR)}
+ X3 = {~(Q0 & CE)}
+ X4 = {~(Q1 & Q0 & CE)}
+ X5 = {~(Q1BAR & Q0BAR & CE)}
+ X6 = {~(Q0BAR & CE)}
+ X7 = {~(Q0 & CE)}
+ D0 = {SCLRBAR & ((LOADBAR & ~CE & Q0) | (A & ~LOADBAR) | (CE & LOADBAR & Q0BAR))}
+ D1 = {SCLRBAR & ((X1 & LOADBAR & Q1 & ~U/DBAR) | (Q1BAR & X2 & ~U/DBAR & LOADBAR & Q0BAR & CE)
+ | (B & ~LOADBAR) | (Q1 & X3 & LOADBAR & U/DBAR) |
+ (Q1BAR & LOADBAR & U/DBAR & CE & Q0 & Q3BAR))}
+ D2 = {SCLRBAR & ((X4 & LOADBAR & U/DBAR & Q2) | (U/DBAR & LOADBAR & Q2BAR & Q1 & Q0 & CE) |
+ (C & ~LOADBAR) | (Q2 & X5 & LOADBAR & ~U/DBAR) |
+ (Q2BAR & ~U/DBAR & CE & LOADBAR & Q1BAR & Q0BAR & Q3))}
+ D3 = {SCLRBAR & ((X6 & LOADBAR & ~U/DBAR & Q3) | (~U/DBAR & LOADBAR & Q3BAR & Q2BAR & Q1BAR & Q0BAR & CE) |
+ (D & ~LOADBAR) | (Q3 & X7 & LOADBAR & U/DBAR) |
+ (Q3BAR & U/DBAR & CE & LOADBAR & Q0 & Q1 & Q2))}
+ RCOBARO = {~((~U/DBAR & ~CETBAR & Q0BAR & Q1BAR & Q2BAR & Q3BAR) |
+ (U/DBAR & ~CETBAR & Q0 & Q3))}
+ CCOO = {~(CE & ~RCOBARO & ~CP)}
U2 DFF(4) DPWR DGND
+ $D_HI ACLRBAR CP
+ D0 D1 D2 D3
+ Q0 Q1 Q2 Q3
+ Q0BAR Q1BAR Q2BAR Q3BAR
+ D0_EFF IO_LS MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
U3 PINDLY(6,1,5) DPWR DGND
+ Q0 Q1 Q2 Q3 RCOBARO CCOO
+ OEBAR
+ CP CETBAR U/DBAR CEPBAR ACLRBAR
+ YA YB YC YD RCOBAR CCO
+ IO_LS MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
+ BOOLEAN:
+ EDGE = {CHANGED_LH(CP,0)}
+ DOWNEDGE = {CHANGED_HL(CP,0)}
+ T = {CHANGED(CETBAR,0)}
+ P = {CHANGED(CEPBAR,0)}
+ UPDOWN = {CHANGED(U/DBAR,0)}
+ ACLEAR = {CHANGED(ACLRBAR,0)}
+ TRISTATE:
+ ENABLE LO = OEBAR
+ YA YB YC YD = {
+ CASE(
+ TRN_ZH, DELAY(-1,10NS,16NS),
+ TRN_ZL, DELAY(-1,17NS,24NS),
+ TRN_HZ, DELAY(-1,20NS,25NS),
+ TRN_LZ, DELAY(-1,17NS,27NS),
+ ACLEAR & (TRN_LH | TRN_HL), DELAY(-1,21NS,32NS),
+ EDGE & TRN_LH, DELAY(-1,15NS,24NS),
+ EDGE & TRN_HL, DELAY(-1,23NS,35NS),
+ DELAY(-1,24NS,36NS))}
+ PINDLY:
+ RCOBAR = {
+ CASE(
+ T & TRN_LH, DELAY(-1,14NS,24NS),
+ T & TRN_HL, DELAY(-1,14NS,24NS),
+ UPDOWN & TRN_LH, DELAY(-1,20NS,30NS),
+ UPDOWN & TRN_HL, DELAY(-1,15NS,24NS),
+ EDGE & TRN_LH, DELAY(-1,25NS,40NS),
+ EDGE & TRN_HL, DELAY(-1,26NS,40NS),
+ DELAY(-1,27NS,41NS))}
+ CCO = {
+ CASE(
+ (T | P) & TRN_LH, DELAY(-1,12NS,20NS),
+ (T | P) & TRN_HL, DELAY(-1,20NS,30NS),
+ DOWNEDGE & TRN_LH, DELAY(-1,17NS,27NS),
+ DOWNEDGE & TRN_HL, DELAY(-1,26NS,40NS),
+ DELAY(-1,27NS,41NS))}
U4 CONSTRAINT(10) DPWR DGND
+ CP A B C D SCLRBAR LOADBAR U/DBAR CETBAR CEPBAR
+ IO_LS IO_LEVEL={IO_LEVEL}
+ FREQ:
+ NODE = CP
+ MAXFREQ = 25MEG
+ WIDTH:
+ NODE = CP
+ MIN_LO = 30NS
+ MIN_HI = 30NS
+ SETUP_HOLD:
+ CLOCK LH = CP
+ DATA(5) = A B C D SCLRBAR
+ SETUPTIME = 20NS
+ SETUP_HOLD:
+ CLOCK LH = CP
+ DATA(1) = LOADBAR
+ SETUPTIME = 30NS
+ SETUP_HOLD:
+ CLOCK LH = CP
+ DATA(1) = U/DBAR
+ SETUPTIME = 50NS
+ SETUP_HOLD:
+ CLOCK LH = CP
+ DATA(2) = CETBAR CEPBAR
+ SETUPTIME = 32NS
.ENDS 74LS568
* .SUBCKT 74ALS568A GBAR U/DB CLK ENTBAR ENPBAR SCLRBAR LOADBAR ACLRBAR
* + A B C D CCOBAR RCOBAR QA QB QC QD
x1 gb ub clk etbar epbar sclrb loadb mclrb d0 d1 d2 d3 ccobar rcobar qa qb qc qd 74als568a
* .SUBCKT 74F568 OEBAR U/DB CP CETBAR CEPBAR SRBAR PEBAR MRBAR
* + D0 D1 D2 D3 CCBAR TCBAR Q0 Q1 Q2 Q3
x2 gb ub clk etbar epbar sclrb loadb mclrb d0 d1 d2 d3 ccbar tcbar q0 q1 q2 q3 74f568
* .SUBCKT 74LS568 LOADBAR A B C D CEPBAR CETBAR U/DBAR CP YA YB YC YD RCOBAR
* + ACLRBAR SCLRBAR OEBAR CCO
x3 loadb d0 d1 d2 d3 epbar etbar ub clk ya yb yc yd rbar mclrb sclrb gb cco 74ls568
a_1 [ loadb sclrb mclrb clk gb ub d0 d1 d2 d3 epbar etbar ] input_vec1
.model input_vec1 d_source(input_file = "behav-568.stim")
.tran 0.1ns 8us
.control
run
listing r
* edisplay
eprint qd qc qb qa q3 q2 q1 q0 ya yb yc yd
quit
.endc
.end

View File

@ -0,0 +1,83 @@
* t l s m c g u d d d d e e
* i o c c l b b 0 1 2 3 p t
* m a l l k b b
* e d r r
* b b b
0ns 1s 1s 0s 0s 0s 0s 1s 0s 0s 1s 0s 0s
100ns 1s 1s 1s 0s 0s 0s 1s 0s 0s 1s 0s 0s
200ns 1s 1s 1s 1s 0s 0s 1s 0s 0s 1s 0s 0s
300ns 1s 1s 1s 0s 0s 0s 1s 0s 0s 1s 0s 0s
400ns 1s 1s 1s 1s 0s 0s 1s 0s 0s 1s 0s 0s
500ns 1s 1s 1s 0s 0s 0s 1s 0s 0s 1s 0s 0s
600ns 1s 1s 1s 1s 0s 0s 1s 0s 0s 1s 0s 0s
700ns 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
800ns 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
900ns 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
1.0us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
1.1us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
1.2us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
1.3us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
1.4us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
1.5us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
1.6us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
1.7us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
1.8us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
1.9us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
2.0us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
2.1us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
2.2us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
2.3us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
2.4us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
2.5us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
2.6us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
2.7us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
2.8us 1s 1s 1s 1s 0s 0s 1s 0s 0s 0s 0s 0s
2.9us 1s 1s 1s 0s 0s 0s 1s 0s 0s 0s 0s 0s
3.0us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
3.1us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
3.2us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
3.3us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
3.4us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
3.5us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
3.6us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
3.7us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
3.8us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
3.9us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
4.0us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
4.1us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
4.2us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
4.3us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
4.4us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
4.5us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
4.6us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
4.7us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
4.8us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
4.9us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
5.0us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
5.1us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
5.2us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
5.3us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
5.4us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
5.5us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
5.6us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
5.7us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
5.8us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
5.9us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
6.0us 0s 1s 1s 0s 0s 1s 1s 0s 1s 0s 0s 0s
6.1us 0s 1s 1s 1s 0s 1s 1s 0s 1s 0s 0s 0s
6.2us 1s 1s 1s 0s 0s 1s 1s 0s 1s 0s 0s 0s
6.3us 1s 1s 1s 1s 0s 1s 0s 0s 0s 1s 0s 0s
6.4us 1s 1s 1s 0s 0s 1s 0s 0s 0s 1s 0s 0s
6.5us 1s 1s 1s 1s 0s 1s 0s 0s 0s 1s 0s 0s
6.6us 1s 1s 1s 0s 0s 1s 0s 0s 0s 1s 0s 0s
6.7us 1s 1s 1s 1s 0s 1s 0s 0s 0s 1s 0s 0s
6.8us 1s 1s 1s 0s 0s 1s 0s 0s 0s 1s 0s 0s
6.9us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
7.0us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
7.1us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
7.2us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
7.3us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
7.4us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s
7.5us 1s 1s 1s 1s 0s 1s 1s 0s 0s 0s 0s 0s
7.6us 1s 1s 1s 0s 0s 1s 1s 0s 0s 0s 0s 0s

View File

@ -0,0 +1,49 @@
Conversion of Pspice counter
.subckt counter high clear clk qa qb qc qd 5 7 9 11
U1 JKFF(1) $G_DPWR $G_DGND HIGH CLEAR CLK HIGH HIGH QA 5
+ D0_EFF IO_STD IO_LEVEL=0 MNTYMXDLY=2
U2 JKFF(1) $G_DPWR $G_DGND HIGH CLEAR QA HIGH HIGH QB 7
+ D0_EFF IO_STD IO_LEVEL=0 MNTYMXDLY=2
U3 JKFF(1) $G_DPWR $G_DGND HIGH CLEAR QB HIGH HIGH QC 9
+ D0_EFF IO_STD IO_LEVEL=0 MNTYMXDLY=2
U4 JKFF(1) $G_DPWR $G_DGND HIGH CLEAR QC HIGH HIGH QD 11
+ D0_EFF IO_STD IO_LEVEL=0 MNTYMXDLY=2
.MODEL D0_EFF UEFF ()
.ends counter
*** input sources ***
vclk 100 0 pulse( 0.0 1.0 50ns 0ns 0ns 50ns 100ns )
vreset 200 0 pulse( 1.0 0.0 10ns 0ns 0ns 50ns )
vhigh 300 0 DC 1.0
*** adc_bridge blocks ***
aconverter [100 200 300] [clock clr hi] adc_bridge1
.model adc_bridge1 adc_bridge (in_low=0.1 in_high=0.9
+ rise_delay=1.0e-12 fall_delay=1.0e-12)
*** resistors to ground ***
r1 100 0 1k
r2 200 0 1k
r3 300 0 1k
r4 q1b 0 1k
r5 q2b 0 1k
r6 q3b 0 1k
r7 q4b 0 1k
x1 hi clr clock q1 q2 q3 q4 q1b q2b q3b q4b counter
.TRAN 1e-008 1u 0
.save all
.control
*TRAN 1e-008 1u 0
run
listing r
display
edisplay
print q2b q3b q4b
eprint hi clr clock q1 q2 q3 q4
quit
.endc
.END

View File

@ -0,0 +1,85 @@
Conversion of Pspice full adder
* ----------------------------------------------------------- 74LV86A ------
* Quad 2-Input Exclusive-Or Gate
*
* TI PDF File
* bss 2/24/03
*
.SUBCKT 74LV86A 1A 1B 1Y
+ optional: DPWR_3V=$G_DPWR_3V DGND_3V=$G_DGND_3V
+ params: MNTYMXDLY=0 IO_LEVEL=0
U1 xor DPWR_3V DGND_3V
+ 1A 1B 1Y
+ DLY_LV86 IO_LV-A MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
.model DLY_LV86 ugate (tplhTY=7.4ns tplhMX=14.5ns tphlTY=7.4ns tphlMX=14.5ns)
.ENDS 74LV86A
* ----------------------------------------------------------- 74LV08A ------
* Quad 2-Input And Gate
*
* TI PDF File
* bss 2/21/03
*
.SUBCKT 74LV08A 1A 1B 1Y
+ optional: DPWR_3V=$G_DPWR_3V DGND_3V=$G_DGND_3V
+ params: MNTYMXDLY=0 IO_LEVEL=0
U1 and(2) DPWR_3V DGND_3V
+ 1A 1B 1Y
+ DLY_LV08 IO_LV-A MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
.model DLY_LV08 ugate (tplhTY=7.5ns tplhMX=12.3ns tphlTY=7.5ns tphlMX=12.3ns)
.ENDS 74LV08A
* ----------------------------------------------------------- 74LV32A ------
* Quad 2-Input Or Gate
*
* TI PDF File
* bss 2/24/03
*
.SUBCKT 74LV32A 1A 1B 1Y
+ optional: DPWR_3V=$G_DPWR_3V DGND_3V=$G_DGND_3V
+ params: MNTYMXDLY=0 IO_LEVEL=0
U1 or(2) DPWR_3V DGND_3V
+ 1A 1B 1Y
+ DLY_LV32 IO_LV-A MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL}
.model DLY_LV32 ugate (
+ tplhTY=6.9ns tplhMX=11.4ns tphlTY=6.9ns tphlMX=11.4ns)
.ENDS 74LV32A
.subckt hadd a b sum carry
x1_xor a b sum 74lv86a
x2_and a b carry 74lv08a
.ends hadd
.subckt fadd a b cin sum cout
x1_ha a b 1 2 hadd
x2_ha 1 cin sum 3 hadd
x3_or 3 2 cout 74lv32a
.ends fadd
x1 a b cin sum cout fadd
a2 [a b cin] input_vec1
.model input_vec1 d_source(input_file = "ex4.stim")
.tran 0.5ns 1650ns 0
.save all
.control
listing r
run
display
edisplay
eprint a b cin sum cout
*set xbrushwidth=3
*plot a b cin cout sum digitop
quit
.endc
.end

View File

@ -0,0 +1,13 @@
* T a b C
* i i
* m n
* e
0.000 0s 0s 0s
2.0e-7 0s 0s 1s
4.0e-7 0s 1s 0s
6.0e-7 0s 1s 1s
8.0e-7 1s 0s 0s
10.0e-7 1s 0s 1s
12.0e-7 1s 1s 0s
14.0e-7 1s 1s 1s
16.0e-7 0s 0s 0s

View File

@ -0,0 +1,32 @@
* indentify non-viable inductive systems (2x2 case)
* (compile (concat "../../../w32/src/ngspice " buffer-file-name) t)
* (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t)
.subckt ind2 a1 a2 b1 b2 L11=0 L22=0 L12=0
R1 a1 n1 1k
L1 n1 a2 {L11}
L2 n2 b2 {L22}
R2 n2 a2 1k
K12 L1 L2 {L12/sqrt(abs(L11*L22))}
.ends
v1 a 0 dc 1
R1 a 0 1k
R2 b 0 1k
Xgood1 a 0 b 0 ind2 L11=1u L22=4u L12=1.98u
Xbad2 a 0 b 0 ind2 L11=1u L22=4u L12=2.01u
Xgood3 a 0 b 0 ind2 L11=1u L22=4u L12=-1.98u
Xbad4 a 0 b 0 ind2 L11=1u L22=4u L12=-2.01u
Xbad5 a 0 b 0 ind2 L11=1u L22=-4u L12=1n
Xbad6 a 0 b 0 ind2 L11=-1u L22=4u L12=1n
.control
op
remcirc
quit 0
.endc
.end

View File

@ -0,0 +1,31 @@
* indentify non-viable inductive systems (3xx case)
* (compile (concat "../../../w32/src/ngspice " buffer-file-name) t)
* (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t)
.subckt ind3 a b c L11=10u L22=11u L33=10u K12=0 K13=0 K23=0
R1 a n1 1k
R2 b n2 1k
R4 c n3 1k
L1 n1 0 {L11}
L2 n2 0 {L22}
L3 n3 0 {L33}
K12 L1 L2 {K12}
K13 L1 L3 {K13}
K23 L2 L3 {K23}
.ends
Xgood1 a b c ind3
Xgood2 a b c ind3 K12=0.96 K23=0.99 K13=0.98
Xgood3 a b c ind3 K12=0.96 K23=0.99 K13=0.9898988607
Xbad4 a b c ind3 K12=0.96 K23=0.99 K13=0.9898988608
Xborder5 a b c ind3 K12=1 K23=1 K13=1
Xbad6 a b c ind3 K12=1.01 K23=1 K13=1
.control
op
remcirc
quit 0
.endc
.end

View File

@ -0,0 +1,33 @@
* indentify non-viable inductive systems (4x4 case)
* this excersices the "merging" case in muttemp.c
* (compile (concat "../../../w32/src/ngspice " buffer-file-name) t)
* (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t)
.subckt ind4 a b c d L11=0 L22=0 L33=0 L44=0 L12=0 L13=0 L14=0 L23=0 L24=0 L34=0
R1 a 1 1k
R2 b 2 1k
R3 c 3 1k
R4 d 4 1k
L1 a 0 {L11}
L2 b 0 {L22}
L3 c 0 {L33}
L4 d 0 {L44}
K13 L1 L3 {L13/sqrt(abs(L11*L33))}
K14 L1 L4 {L14/sqrt(abs(L11*L44))}
K23 L2 L3 {L23/sqrt(abs(L22*L33))}
K24 L2 L4 {L24/sqrt(abs(L22*L44))}
K12 L1 L2 {L12/sqrt(abs(L11*L22))}
K34 L3 L4 {L34/sqrt(abs(L33*L44))}
.ends
Xgood1 a b c d ind4 L11=1u L22=4u L33=3u L44=5u L12=1n L13=1n L14=1n L23=1n L24=1n L34=1n
.control
op
remcirc
quit 0
.endc
.end

View File

@ -0,0 +1,80 @@
* indentify non-viable inductive systems ("altering" case)
* exercise "alter" and "indverbosity"
* (compile (concat "../../../w32/src/ngspice " buffer-file-name) t)
* (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t)
V1 x 0 dc=0 ac=1
Rx x 1 1
R1 2 0 1k
R2 3 0 1k
L1 1 0 10u
L2 2 0 11u
L3 3 0 10u
k12 L1 L2 0
k23 L2 L3 0
k13 L1 L3 0
R101 101 0 1k
L101 101 0 1u
L102 102 0 2u
L103 103 0 3u
K1012 L101 L102 0.1
K1013 L101 L103 0.2
.AC LIN 5k 1k 10MEG
.control
listing e
echo coupling factors 0 0 0 -- ok
op
alter k12 0.96
alter k23 0.99
alter k13 0.98
echo coupling factors 0.96 0.98 0.98 -- ok
op
alter k12 0.96
alter k23 0.99
alter k13 0.9898988607
echo coupling factors 0.96 0.98 0.9898988607 -- ok
op
alter k12 0.96
alter k23 0.99
alter k13 0.9898988608
echo coupling factors 0.96 0.98 0.9898988608 -- not ok
op
alter k12 1
alter k23 1
alter k13 1
echo coupling factors 1 1 1 -- not ok
op
echo coupling factors 1.01 1 1 -- not ok
alter k12 1.01
set indverbosity = 2
echo "op with indverbosity=2"
op
set indverbosity = 1
echo "op with indverbosity=1"
op
set indverbosity = 0
echo "op with indverbosity=0"
op
destroy all
remcirc
quit
.endc
.END

View File

@ -0,0 +1,20 @@
* func_cap.sp
.func icap_calc(A,B,C,D) '2*A*sqrt(B*C*D)'
.param cap_val = 'max(icap_calc(1,2,3,4))'
VDD 1 0 DC 1
C1 1 0 'cap_val'
.measure tran capacitance param='cap_val'
.measure tran capac2 param='max(icap_calc(1,2,3,4))'
.tran 1ps 100ps
.control
run
quit
.endc
.end

View File

@ -0,0 +1,103 @@
Inverter example circuit
* This netlist demonstrates the following:
* global nodes (vdd, gnd)
* autostop (.tran defines simulation end as 4ns but simulation stops at
* 142.5ps when .measure statements are evaluated)
* scale (all device units are in microns)
* model binning (look in device.values file for which bin chosen)
*
* m.x1.mn:
* model = nch.2
*
* m.x1.mp:
* model = pch.2
*
* parameters
* parameterized subckt
* vsrc with repeat
* .measure statements for delay and an example ternary operator
* device listing and parameter listing
* You can run the example circuit with this command:
*
* ngspice inverter3.sp
* global nodes
.global vdd gnd
* autostop -- stop simulation early if .measure statements done
* scale -- define scale factor for mosfet device parameters (l,w,area,perimeter)
.option autostop
.option scale = 1e-6
* model binning
.model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
.model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
* parameters
.param vp = 1.0v
.param lmin = 0.10
.param wmin = 0.12
.param plmin = 'lmin'
.param nlmin = 'lmin'
.param wpmin = 'wmin'
.param wnmin = 'wmin'
.param drise = 400ps
.param dfall = 100ps
.param trise = 100ps
.param tfall = 100ps
.param period = 1ns
.param skew_meas = 'vp/2'
* parameterized subckt
.subckt inv in out pw='wpmin' pl='plmin' nw='wnmin' nl='nlmin'
mp out in vdd vdd pch w='pw' l='pl'
mn out in gnd gnd nch w='nw' l='nl'
.ends
v0 vdd gnd 'vp'
* vsrc with repeat
v1 in gnd pwl
+ 0ns 'vp'
+ 'dfall-0.8*tfall' 'vp'
+ 'dfall-0.4*tfall' '0.9*vp'
+ 'dfall+0.4*tfall' '0.1*vp'
+ 'dfall+0.8*tfall' 0v
+ 'drise-0.8*trise' 0v
+ 'drise-0.4*trise' '0.1*vp'
+ 'drise+0.4*trise' '0.9*vp'
+ 'drise+0.8*trise' 'vp'
+ 'period+dfall-0.8*tfall' 'vp'
+ r='dfall-0.8*tfall'
x1 in out inv pw=60 nw=20
c1 out gnd 220fF
.tran 1ps 4ns
.meas tran inv_delay trig v(in) val='vp/2' fall=1 targ v(out) val='vp/2' rise=1
.meas tran inv_delay2 trig v(in) val='vp/2' td=1n fall=1 targ v(out) val='vp/2' rise=1
.meas tran test_data1 trig AT = 1n targ v(out) val='vp/2' rise=3
.meas tran out_slew trig v(out) val='0.2*vp' rise=2 targ v(out) val='0.8*vp' rise=2
.meas tran delay_chk param='(inv_delay < 100ps) ? 1 : 0'
.meas tran skew when v(out)=0.6
.meas tran skew2 when v(out)=skew_meas
.meas tran skew3 when v(out)=skew_meas fall=2
.meas tran skew4 when v(out)=skew_meas fall=LAST
.meas tran skew5 FIND v(out) AT=2n
*.measure tran v0_min min i(v0) from='dfall' to='dfall+period'
*.measure tran v0_avg avg i(v0) from='dfall' to='dfall+period'
*.measure tran v0_integ integ i(v0) from='dfall' to='dfall+period'
*.measure tran v0_rms rms i(v0) from='dfall' to='dfall+period'
.control
run
rusage all
plot v(in) v(out)
.endc
.end

View File

@ -0,0 +1,113 @@
Inverter example circuit
* This netlist demonstrates the following:
* global nodes (vdd, gnd)
* autostop (.tran defines simulation end as 4ns but simulation stops at
* 142.5ps when .measure statements are evaluated)
* scale (all device units are in microns)
* model binning (look in device.values file for which bin chosen)
*
* m.x1.mn:
* model = nch.2
*
* m.x1.mp:
* model = pch.2
*
* parameters
* parameterized subckt
* vsrc with repeat
* .measure statements for delay and an example ternary operator
* device listing and parameter listing
* You can run the example circuit with this command:
*
* ngspice inverter3.sp
* global nodes
.global vdd gnd
* autostop -- stop simulation early if .measure statements done
* scale -- define scale factor for mosfet device parameters (l,w,area,perimeter)
*.option autostop
.option scale = 1e-6
* model binning
.model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
.model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
* parameters
.param vp = 1.0v
.param lmin = 0.10
.param wmin = 0.12
.param plmin = 'lmin'
.param nlmin = 'lmin'
.param wpmin = 'wmin'
.param wnmin = 'wmin'
.param drise = 400ps
.param dfall = 100ps
.param trise = 100ps
.param tfall = 100ps
.param period = 1ns
.param skew_meas = 'vp/2'
* parameterized subckt
.subckt inv in out pw='wpmin' pl='plmin' nw='wnmin' nl='nlmin'
mp out in vdd vdd pch w='pw' l='pl'
mn out in gnd gnd nch w='nw' l='nl'
.ends
v0 vdd gnd 'vp'
* vsrc with repeat
v1 in gnd pwl
+ 0ns 'vp'
+ 'dfall-0.8*tfall' 'vp'
+ 'dfall-0.4*tfall' '0.9*vp'
+ 'dfall+0.4*tfall' '0.1*vp'
+ 'dfall+0.8*tfall' 0v
+ 'drise-0.8*trise' 0v
+ 'drise-0.4*trise' '0.1*vp'
+ 'drise+0.4*trise' '0.9*vp'
+ 'drise+0.8*trise' 'vp'
+ 'period+dfall-0.8*tfall' 'vp'
+ r='dfall-0.8*tfall'
x1 in out inv pw=60 nw=20
c1 out gnd 220fF
.control
tran 1ps 4ns
meas tran inv_delay trig v(in) val=0.5 fall=1 targ v(out) val=0.5 rise=1
meas tran inv_delay2 trig v(in) val=0.5 td=1n fall=1 targ v(out) val=0.5 rise=1
meas tran test_data1 trig AT = 1n targ v(out) val=0.5 rise=3
meas tran out_slew trig v(out) val=0.2 rise=2 targ v(out) val=0.8 rise=2
*.meas tran delay_chk param='(inv_delay < 100ps) ? 1 : 0'
if ( inv_delay < 100ps )
let delay_chk = 1
else
let delay_chk = 0
end
echo delay_chk = "$&delay_chk"
meas tran skew when v(out)=0.6
let skew_meas = 0.5
meas tran skew2 when v(out)=skew_meas
meas tran skew3 when v(out)=skew_meas fall=2
meas tran skew4 when v(out)=skew_meas fall=LAST
meas tran skew5 FIND v(out) AT=2n
let dfall = 100p
let period = 1n
let delta = dfall+period
meas tran v0_min min i(v0) from=dfall to=delta
meas tran i_v0_min min_at i(v0) from=dfall to=delta
meas tran v0_avg avg i(v0) from = dfall to = delta
meas tran v0_integ integ i(v0) from=dfall to=delta
meas tran v0_rms rms i(v0) from=dfall to=delta
rusage all
plot v(in) v(out)
.endc
.end

View File

@ -0,0 +1,105 @@
Inverter example circuit
* This netlist demonstrates the following:
* global nodes (vdd, gnd)
* autostop (.tran defines simulation end as 4ns but simulation stops at
* 142.5ps when .measure statements are evaluated)
* scale (all device units are in microns)
* model binning (look in device.values file for which bin chosen)
*
* m.x1.mn:
* model = nch.2
*
* m.x1.mp:
* model = pch.2
*
* parameters
* parameterized subckt
* vsrc with repeat
* .measure statements for delay and an example ternary operator
* device listing and parameter listing
* You can run the example circuit with this command:
*
* ngspice inverter3.sp
* global nodes
.global vdd gnd
* autostop -- stop simulation early if .measure statements done
* scale -- define scale factor for mosfet device parameters (l,w,area,perimeter)
*.option autostop
*.option scale = 1e-6
* model binning
.model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
.model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
* parameters
.param vp = 1.0v
.param lmin = 0.10u
.param wmin = 0.12u
.param plmin = 'lmin'
.param nlmin = 'lmin'
.param wpmin = 'wmin'
.param wnmin = 'wmin'
.param drise = 400ps
.param dfall = 100ps
.param trise = 100ps
.param tfall = 100ps
.param period = 1ns
.param skew_meas = 'vp/2'
* parameterized subckt
.subckt inv in out pw='wpmin' pl='plmin' nw='wnmin' nl='nlmin'
mp out in vdd vdd pch w='pw' l='pl'
mn out in gnd gnd nch w='nw' l='nl'
.ends
v0 vdd gnd 'vp'
* vsrc with repeat
v1 in gnd pwl
+ 0ns 'vp'
+ 'dfall-0.8*tfall' 'vp'
+ 'dfall-0.4*tfall' '0.9*vp'
+ 'dfall+0.4*tfall' '0.1*vp'
+ 'dfall+0.8*tfall' 0v
+ 'drise-0.8*trise' 0v
+ 'drise-0.4*trise' '0.1*vp'
+ 'drise+0.4*trise' '0.9*vp'
+ 'drise+0.8*trise' 'vp'
+ 'period+dfall-0.8*tfall' 'vp'
+ r='dfall-0.8*tfall'
x1 in out inv pw=60u nw=20u
c1 out gnd 220fF
.tran 10ps 4ns
.meas tran inv_delay trig v(in) val='vp/2' fall=1 targ v(out) val='vp/2' rise=1
.meas tran inv_delay2 trig v(in) val='vp/2' td=1n fall=1 targ v(out) val='vp/2' rise=1
.meas tran test_data1 trig AT = 1n targ v(out) val='vp/2' rise=3
.meas tran out_slew trig v(out) val='0.2*vp' rise=2 targ v(out) val='0.8*vp' rise=2
.meas tran delay_chk param='(inv_delay < 100ps) ? 1 : 0'
.meas tran skew when v(out)=0.6
.meas tran skew2 when v(out)=skew_meas
.meas tran skew3 when v(out)=skew_meas fall=2
.meas tran skew4 when v(out)=skew_meas fall=LAST
.meas tran skew5 FIND v(out) AT=2n
.meas tran v0_min min i(v0) from='dfall' to='dfall+period'
.meas tran i_v0_min min_at i(v0) from='dfall' to='dfall+period'
.meas tran v0_avg avg i(v0) from='dfall' to='dfall+period'
.meas tran v0_integ integ i(v0) from='dfall' to='dfall+period'
.meas tran v0_rms rms i(v0) from='dfall' to='dfall+period'
.control
run
rusage all
plot v(in) v(out)
quit
.endc
.end

View File

@ -0,0 +1,49 @@
***** Single NMOS Transistor .measure (Id-Vd) ***
* Altering device witdth leads to select new model due to binning limits.
* New model has artificially thick gate oxide (changed from default 3n to 4n)
* to demonstrate the effect.
m1 d g s b nch L=0.6u W=9.99u ; W is slightly below binning limit
vgs g 0 3.5
vds d 0 3.5
vs s 0 dc 0
vb b 0 dc 0
* model binning
* uses default parameters, except toxe
.model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u toxe=3n )
.model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u toxe=4n)
.control
dc vds 0 3.5 0.05 vgs 3.5 0.5 -0.5
meas dc is_at FIND i(vs) AT=1
meas dc is_max max i(vs)
meas dc vds_at2 when i(vs)=10m
* starting with branches in descending order of vgs
* trig ist the first branch which crosses 5mA
* Targ is the first branch crossing 10mA
meas dc vd_diff1 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=1
* trig ist the first branch which crosses 5mA
* Targ is the second branch crossing 10mA
meas dc vd_diff2 trig i(vs) val=0.005 rise=2 targ i(vs) val=0.01 rise=2
alter @m1[w]=10.01u ; W is slightly above binning limit
dc vds 0 3.5 0.05 vgs 3.5 0.5 -0.5
meas dc is_at FIND i(vs) AT=1
meas dc is_max max i(vs)
meas dc vds_at2 when i(vs)=10m
meas dc vd_diff1 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=1
* there is only one branch crossing 10mA, so this second meas fails with targ out of interval
echo
echo The next one will fail (no two branches crossing 10 mA):
meas dc vd_diff2 trig i(vs) val=0.005 rise=2 targ i(vs) val=0.01 rise=2
*rusage all
plot dc1.i(vs) i(vs)
.endc
.end

View File

@ -0,0 +1,38 @@
***** Single NMOS Transistor .measure (Id-Vd) ***
m1 d g s b nch L=0.6u W=10.0u
vgs g 0 3.5
vds d 0 3.5
vs s 0 dc 0
vb b 0 dc 0
.dc vds 0 3.5 0.05 vgs 0.5 3.5 0.5
.print dc v(1) i(vs)
* model binning
.model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
.model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u )
.model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u )
.meas dc is_at FIND i(vs) AT=1
.meas dc is_max max i(vs) from=0 to=3.5
.meas dc vds_at2 when i(vs)=10m
.meas dc vd_diff1 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=1
.meas dc vd_diff2 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=2
.control
run
*rusage all
plot i(vs)
quit
.endc
.end

View File

@ -0,0 +1,64 @@
RC band pass example circuit
* This netlist demonstrates the following:
* global nodes (vdd, gnd)
* .measure statements for delay and an example ternary operator
* You can run the example circuit with this command:
*
* ngspice rc-meas-ac.sp
* global nodes
.global vdd gnd
* autostop -- stop simulation early if .measure statements done
*.option autostop
vin in gnd dc 0 ac 1
R1 in mid1 1k
c1 mid1 gnd 1n
C2 mid1 out 500p
R2 out gnd 1k
.control
ac DEC 10 1k 10MEG
meas ac vout_at FIND v(out) AT=1MEG
meas ac vout_atr FIND vr(out) AT=1MEG
meas ac vout_ati FIND vi(out) AT=1MEG
meas ac vout_atm FIND vm(out) AT=1MEG
meas ac vout_atp FIND vp(out) AT=1MEG
meas ac vout_atd FIND vdb(out) AT=1MEG
meas ac vout_max max v(out) from=1k to=10MEG
meas ac freq_at when v(out)=0.1
meas ac vout_diff trig v(out) val=0.1 rise=1 targ v(out) val=0.1 fall=1
meas ac fixed_diff trig AT = 10k targ v(out) val=0.1 rise=1
meas ac vout_avg avg v(out) from=10k to=1MEG
meas ac vout_integ integ v(out) from=20k to=500k
meas ac freq_at2 when v(out)=0.1 fall=LAST
*meas ac bw_chk param='(vout_diff < 100k) ? 1 : 0'
if (vout_diff < 100k)
let bw_chk = 1
else
let bw_chk = 0
end
echo bw_chk = "$&bw_chk"
*meas ac bw_chk2 param='(vout_diff > 500k) ? 1 : 0'
if (vout_diff > 500k)
let bw_chk2 = 1
else
let bw_chk2 = 0
end
echo bw_chk2 = "$&bw_chk2"
meas ac vout_rms rms v(out) from=10 to=1G
*rusage all
plot v(out)
plot ph(v(out))
plot mag(v(out))
plot db(v(out))
.endc
.end

View File

@ -0,0 +1,55 @@
RC band pass example circuit
* This netlist demonstrates the following:
* global nodes (vdd, gnd)
* .measure statements for delay and an example ternary operator
* You can run the example circuit with this command:
*
* ngspice rc-meas-ac.sp
* global nodes
.global vdd gnd
* autostop -- stop simulation early if .measure statements done
*.option autostop
vin in gnd dc 0 ac 1
R1 in mid1 1k
c1 mid1 gnd 1n
C2 mid1 out 500p
R2 out gnd 1k
.ac DEC 10 1k 10MEG
.meas ac vout_at FIND v(out) AT=1MEG
.meas ac vout_atr FIND vr(out) AT=1MEG
.meas ac vout_ati FIND vi(out) AT=1MEG
.meas ac vout_atm FIND vm(out) AT=1MEG
.meas ac vout_atp FIND vp(out) AT=1MEG
.meas ac vout_atd FIND vdb(out) AT=1MEG
.meas ac vout_max max v(out) from=1k to=10MEG
.meas ac freq_at when v(out)=0.1
.meas ac vout_diff trig v(out) val=0.1 rise=1 targ v(out) val=0.1 fall=1
.meas ac fixed_diff trig AT = 10k targ v(out) val=0.1 rise=1
.meas ac vout_avg avg v(out) from=10k to=1MEG
.meas ac vout_integ integ v(out) from=20k to=500k
.meas ac freq_at2 when v(out)=0.1 fall=LAST
.meas ac bw_chk param='(vout_diff < 100k) ? 1 : 0'
.meas ac bw_chk2 param='(vout_diff > 500k) ? 1 : 0'
.meas ac vout_rms rms v(out) from=10 to=1G
.control
run
*rusage all
plot v(out)
plot ph(v(out))
plot mag(v(out))
plot db(v(out))
quit
.endc
.end

View File

@ -0,0 +1,57 @@
File: simple-meas-tran.sp
* Simple .measurement examples
* transient simulation of two sine signals with different frequencies
vac1 1 0 DC 0 sin(0 1 1k 0 0)
R1 1 0 100k
vac2 2 0 DC 0 sin(0 1.2 0.9k 0 0)
.tran 10u 5m
*
.measure tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2
.measure tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=3
.measure tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 FALL=1
.measure tran tdiff TRIG v(1) VAL=0 FALL=3 TARG v(2) VAL=0 FALL=3
.measure tran tdiff TRIG v(1) VAL=-0.6 CROSS=1 TARG v(2) VAL=-0.8 CROSS=1
.measure tran tdiff TRIG AT=1m TARG v(2) VAL=-0.8 CROSS=3
.measure tran teval WHEN v(2)=0.7 CROSS=LAST
.measure tran teval WHEN v(2)=v(1) FALL=LAST
.measure tran teval WHEN v(1)=v(2) CROSS=LAST
.measure tran yeval FIND v(2) WHEN v(1)=0.2 FALL=2
.measure tran yeval FIND v(2) AT=2m
.measure tran ymax MAX v(2) from=2m to=3m
.measure tran tymax MAX_AT v(2) from=2m to=3m
.measure tran ypp PP v(1) from=2m to=4m
.measure tran yrms RMS v(1) from=2m to=3.5m
.measure tran yavg AVG v(1) from=2m to=4m
.measure tran yint INTEG v(2) from=2m to=3m
.param fval=5
.measure tran yadd param='fval + 7'
.param vout_diff=50k
.meas tran bw_chk param='(vout_diff < 100k) ? 1 : 0'
.measure tran vtest find par('v(2)*v(1)') AT=2.3m
*
.control
run
plot v(1) v(2)
gnuplot ttt i(vac1)
meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2
meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=3
meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 FALL=1
meas tran tdiff TRIG v(1) VAL=0 FALL=3 TARG v(2) VAL=0 FALL=3
meas tran tdiff TRIG v(1) VAL=-0.6 CROSS=1 TARG v(2) VAL=-0.8 CROSS=1
meas tran tdiff TRIG AT=1m TARG v(2) VAL=-0.8 CROSS=3
meas tran teval WHEN v(2)=0.7 CROSS=LAST
meas tran teval WHEN v(2)=v(1) FALL=LAST
meas tran teval WHEN v(1)=v(2) CROSS=LAST
meas tran yeval FIND v(2) WHEN v(1)=0.2 FALL=2
meas tran yeval FIND v(2) AT=2m
meas tran ymax MAX v(2) from=2m to=3m
meas tran tymax MAX_AT v(2) from=2m to=3m
meas tran ypp PP v(1) from=2m to=4m
meas tran yrms RMS v(1) from=2m to=3.5m
meas tran yavg AVG v(1) from=2m to=4m
meas tran yint INTEG v(2) from=2m to=3m
meas tran ymax MAX v(2) from=2m to=3m
meas tran tmax WHEN v(2)=YMAX from=1m to=2m ; from..to.. not recognized!
quit
.endc
.end

View File

@ -0,0 +1,66 @@
Memristor with threshold
* Y. V. Pershin, M. Di Ventra: "SPICE model of memristive devices with threshold",
* arXiv:1204.2600v1 [physics.comp-ph] 12 Apr 2012,
* http://arxiv.org/pdf/1204.2600.pdf
* Parameter selection and plotting by
* Holger Vogt 2012
.param stime=10n
.param vmax = 3
* send parameters to the .control section
.csparam stime={stime}
.csparam vmax={vmax}
Xmem 1 0 memristor
* triangular sweep (you have to adapt the parameters to 'alter' command in the .control section)
*V1 1 0 DC 0 PWL(0 0 '0.25*stime' 'vmax' '0.5*stime' 0 '0.75*stime' '-vmax' 'stime' 0)
* sinusoidal sweep
V1 0 1 DC 0 sin(0 'vmax' '1/stime')
* memristor model with limits and threshold
* "artificial" parameters alpha, beta, and vtt. beta and vtt adapted to basic programming frequency
* just to obtain nice results!
* You have to care for the physics and set real values!
.subckt memristor plus minus PARAMS: Ron=1K Roff=10K Rinit=7.0K alpha=0 beta=20e3/stime Vtt=1.6
Bx 0 x I='((f1(V(plus)-V(minus))> 0) && (V(x) < Roff)) ? {f1(V(plus)-V(minus))}: ((((f1(V(plus)-V(minus)) < 0) && (V(x)>Ron)) ? {f1(V(plus)-V(minus))}: 0)) '
Vx x x1 dc 0
Cx x1 0 1 IC={Rinit}
Rmem plus minus r={V(x)}
.func f1(y)={beta*y+0.5*(alpha-beta)*(abs(y+Vtt)-abs(y-Vtt))}
.ends
* transient simulation same programming voltage but rising frequencies
.control
*** first simulation ***
* approx. 100 simulation points
let deltime = stime/100
tran $&deltime $&stime uic
* plot i(v1) vs v(1)
*** you may just stop here ***
* raise the frequency
let newfreq = 1.1/stime
let newstime = stime/1.1
let deltime = newstime/100
alter @V1[sin] [ 0 $&vmax $&newfreq ]
tran $&deltime $&newstime uic
* raise the frequency even more
let newfreq = 1.4/stime
let newstime = stime/1.4
let deltime = newstime/100
alter @V1[sin] [ 0 $&vmax $&newfreq ]
tran $&deltime $&newstime uic
* the 'programming' currents
plot tran1.alli tran2.alli alli title 'Memristor with threshold: Internal Programming currents'
* resistance versus time plot
settype impedance xmem.x1 tran1.xmem.x1 tran2.xmem.x1
plot xmem.x1 tran1.xmem.x1 tran2.xmem.x1 title 'Memristor with threshold: resistance'
* resistance versus voltage (change occurs only above threshold!)
plot xmem.x1 vs v(1) tran1.xmem.x1 vs tran1.v(1) tran2.xmem.x1 vs tran2.v(1) title 'Memristor with threshold: resistance'
* current through resistor for all plots versus voltage
plot i(v1) vs v(1) tran1.i(v1) vs tran1.v(1) tran2.i(v1) vs tran2.v(1) title 'Memristor with threshold: external current loops'
quit
.endc
.end

View File

@ -0,0 +1,84 @@
Memristor with threshold as XSPICE code model
* Y. V. Pershin, M. Di Ventra: "SPICE model of memristive devices with threshold",
* arXiv:1204.2600v1 [physics.comp-ph] 12 Apr 2012,
* http://arxiv.org/pdf/1204.2600.pdf
* XSPICE code model, parameter selection and plotting by
* Holger Vogt 2012
* ac and op (dc) simulation just use start resistance rinit!
.param stime=10n
.param vmax = 4.2
* send parameters to the .control section
.csparam stime={stime}
.csparam vmax={vmax}
*Xmem 1 0 memristor
* triangular sweep (you have to adapt the parameters to 'alter' command in the .control section)
*V1 1 0 DC 0 PWL(0 0 '0.25*stime' 'vmax' '0.5*stime' 0 '0.75*stime' '-vmax' 'stime' 0)
* sinusoidal sweep for transient, dc for op, ac
V1 0 1 DC 0.1 ac 1 sin(0 'vmax' '1/stime')
Rl 1 11 1k
* memristor model with limits and threshold
* "artificial" parameters alpha, beta, and vt. beta and vt adapted to basic programming frequency
* just to obtain nice results!
* You have to care for the physics and set real values!
amen 11 2 memr
.model memr memristor (rmin=1k rmax=10k rinit=7k alpha=0 beta='20e3/stime' vt=1.6)
vgnd 2 0 dc 0
* This is the original subcircuit model
.subckt memristor plus minus PARAMS: Ron=1K Roff=10K Rinit=7.0K alpha=0 beta=20e3/stime Vt=1.6
Bx 0 x I='((f1(V(plus)-V(minus))> 0) && (V(x) < Roff)) ? {f1(V(plus)-V(minus))}: ((((f1(V(plus)-V(minus)) < 0) && (V(x)>Ron)) ? {f1(V(plus)-V(minus))}: 0)) '
Vx x x1 dc 0
Cx x1 0 1 IC={Rinit}
Rmem plus minus r={V(x)}
.func f1(y)={beta*y+0.5*(alpha-beta)*(abs(y+Vt)-abs(y-Vt))}
.ends
* transient simulation same programming voltage but rising frequencies
.control
*** first simulation ***
op
print all
ac lin 101 1 100k
plot v(11)
* approx. 100 simulation points
let deltime = stime/100
tran $&deltime $&stime uic
* plot i(v1) vs v(1)
*** you may just stop here ***
* raise the frequency
let newfreq = 1.2/stime
let newstime = stime/1.2
let deltime = newstime/100
alter @V1[sin] [ 0 $&vmax $&newfreq ]
tran $&deltime $&newstime uic
* raise the frequency even more
let newfreq = 1.4/stime
let newstime = stime/1.4
let deltime = newstime/100
alter @V1[sin] [ 0 $&vmax $&newfreq ]
tran $&deltime $&newstime uic
* the resistor currents
plot tran1.alli tran2.alli alli title 'Memristor with threshold: currents'
* calculate resistance (avoid dividing by zero)
let res = v(1)/(I(v1) + 1e-16)
let res1 = tran1.v(1)/(tran1.I(v1) + 1e-16)
let res2 = tran2.v(1)/(tran2.I(v1) + 1e-16)
* resistance versus time plot
settype impedance res res1 res2
plot res vs time res1 vs tran1.time res2 vs tran2.time title 'Memristor with threshold: resistance'
* resistance versus voltage (change occurs only above threshold!)
plot res vs v(1) res1 vs tran1.v(1) res2 vs tran2.v(1) title 'Memristor with threshold: resistance'
* current through resistor for all plots versus voltage
plot i(v1) vs v(1) tran1.i(v1) vs tran1.v(1) tran2.i(v1) vs tran2.v(1) title 'Memristor with threshold: external current loops'
quit
.endc
.end

View File

@ -0,0 +1,5 @@
set ngbehavior=ps
* Standard ngspice init file
alias exit quit
* step size is limited to TSTEP in tansient simulation
set stepsizelimit

View File

@ -0,0 +1,92 @@
.title KiCad schematic
.include "F5models.lib"
.include "c:\Spice64\bin\F5interm.inc"
R2 in 0 47.5k
R1 Net-_Q1-Pad2_ in 1k
R5 +32 Net-_P1-Pad1_ 1k
R3 Net-_P3-Pad1_ 0 10
R4 0 Net-_P3-Pad3_ 10
R6 Net-_P2-Pad1_ -32 1k
R7 out Net-_P3-Pad1_ 220
R8 out Net-_P3-Pad1_ 220
R9 out Net-_P3-Pad3_ 220
R10 out Net-_P3-Pad3_ 220
R11 Net-_R11-Pad1_ Net-_P1-Pad1_ 2.2k
R13 Net-_Q3-Pad2_ Net-_P1-Pad1_ 47.5
R15 Net-_Q5-Pad2_ Net-_P2-Pad1_ 47.5
R12 Net-_R12-Pad1_ Net-_P2-Pad1_ 2.2k
R17 +32 Net-_D3a1-Pad1_ 1
R21 Net-_D1a1-Pad2_ -32 1
R18 +32 Net-_D3a1-Pad1_ 1
R22 Net-_D1a1-Pad2_ -32 1
R16 Net-_Q6-Pad2_ Net-_P2-Pad1_ 47.5
R14 Net-_Q4-Pad2_ Net-_P1-Pad1_ 47.5
R19 +32 Net-_D4a1-Pad1_ 1
R23 Net-_D2a1-Pad2_ -32 1
R20 +32 Net-_D4a1-Pad1_ 1
R24 Net-_D2a1-Pad2_ -32 1
Ra2 Net-_Ra1-Pad2_ 0 4
D3a1 +32 Net-_D3a1-Pad1_ DMOD
D1a1 Net-_D1a1-Pad2_ -32 DMOD
D3b1 +32 Net-_D3a1-Pad1_ DMOD
D1b1 Net-_D1a1-Pad2_ -32 DMOD
D4a1 +32 Net-_D4a1-Pad1_ DMOD
D2a1 Net-_D2a1-Pad2_ -32 DMOD
D4b1 +32 Net-_D4a1-Pad1_ DMOD
D2b1 Net-_D2a1-Pad2_ -32 DMOD
XP3 Net-_P3-Pad1_ 0 Net-_P3-Pad3_ RPOT value=200 ratio={rp3}
XP1 Net-_P1-Pad1_ +32 +32 RPOT value=5k ratio={rp1}
XP2 Net-_P2-Pad1_ -32 -32 RPOT value=5k ratio={rp2}
V3 in 0 dc 0 ac 1 sin(0 2 1k 5m)
JQ1 Net-_P1-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SK170
JQ2 Net-_P2-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad3_ 2SJ74
MQ5 out Net-_Q5-Pad2_ Net-_D1a1-Pad2_ Q5tj Q5tc IRFP240 thermal
MQ4 out Net-_Q4-Pad2_ Net-_D4a1-Pad1_ Q4tj Q4tc IRFP9240 thermal
MQ6 out Net-_Q6-Pad2_ Net-_D2a1-Pad2_ Q6tj Q6tc IRFP240 thermal
Rj1 Q3tj 0 1G
Rj2 Q4tj 0 1G
Rj3 Q5tj 0 1G
Rj4 Q6tj 0 1G
Rc2 Q3hs Net-_Rc2-Pad2_ {hs}
Rc4 Q4hs Net-_Rc2-Pad2_ {hs}
Rc6 Q5hs Net-_Rc2-Pad2_ {hs}
Rc8 Q6hs Net-_Rc2-Pad2_ {hs}
Rc1 Q3tc Q3hs {chs}
Rc3 Q4tc Q4hs {chs}
Rc5 Q5tc Q5hs {chs}
Rc7 Q6tc Q6hs {chs}
Vt1 Net-_Rc2-Pad2_ 0 {envtemp}
Cc1 Q3hs 0 {hscc}
Cc3 Q5hs 0 {hscc}
Cc4 Q6hs 0 {hscc}
V1 +32 0 dc 32 ; pulse(0 32 0.4m 2m 2m 100 200)
V2 -32 0 dc -32 ; pulse(0 -32 0.4m 2m 2m 100 200)
XTH2 Net-_D1a1-Pad2_ Q5hs Net-_R12-Pad1_ th R25=4.7k
XTH1 Net-_D3a1-Pad1_ Q3hs Net-_R11-Pad1_ th R25=4.7k
MQ3 out Net-_Q3-Pad2_ Net-_D3a1-Pad1_ Q3tj Q3tc IRFP9240 thermal
Vs1 Net-_S1-Pad3_ 0 dc 0 pulse(0 5 6 1m 1m 20 20)
XS1 Net-_Ra1-Pad2_ 0 Net-_S1-Pad3_ 0 genrelay
Cc2 Q4hs 0 {hscc}
Ra1 out Net-_Ra1-Pad2_ 4
.param envtemp=40
.param chs=1
.param hs=1.2
.param hscc=1
.param rp2=0.21
.param rp1=0.36
.param rp3=0.505
.control
tran 20u 5 uic
* temperature transistor Q6
set xbrushwidth=4
settype temperature q6tj q6tc q6hs
plot q6tj q6tc q6hs q3tj q3tc q3hs ylimit 0 160
set xbrushwidth=2
* input and output voltages
plot in out
.endc
.end

View File

@ -0,0 +1,79 @@
.title KiCad schematic
.include "F5models.lib"
.include "script-icout.txt"
R2 in 0 47.5k
R1 Net-_Q1-Pad2_ in 1k
R5 +32 Net-_P1-Pad1_ 1k
R3 Net-_P3-Pad1_ 0 10
R4 0 Net-_P3-Pad3_ 10
R6 Net-_P2-Pad1_ -32 1k
R7 out Net-_P3-Pad1_ 220
R8 out Net-_P3-Pad1_ 220
R9 out Net-_P3-Pad3_ 220
R10 out Net-_P3-Pad3_ 220
R11 Net-_R11-Pad1_ Net-_P1-Pad1_ 2.2k
R13 Net-_Q3-Pad2_ Net-_P1-Pad1_ 47.5
R15 Net-_Q5-Pad2_ Net-_P2-Pad1_ 47.5
R12 Net-_R12-Pad1_ Net-_P2-Pad1_ 2.2k
R17 +32 Net-_D3a1-Pad1_ 1
R21 Net-_D1a1-Pad2_ -32 1
R18 +32 Net-_D3a1-Pad1_ 1
R22 Net-_D1a1-Pad2_ -32 1
R16 Net-_Q6-Pad2_ Net-_P2-Pad1_ 47.5
R14 Net-_Q4-Pad2_ Net-_P1-Pad1_ 47.5
R19 +32 Net-_D4a1-Pad1_ 1
R23 Net-_D2a1-Pad2_ -32 1
R20 +32 Net-_D4a1-Pad1_ 1
R24 Net-_D2a1-Pad2_ -32 1
Ra2 Net-_Ra1-Pad2_ 0 4
D3a1 +32 Net-_D3a1-Pad1_ DMOD
D1a1 Net-_D1a1-Pad2_ -32 DMOD
D3b1 +32 Net-_D3a1-Pad1_ DMOD
D1b1 Net-_D1a1-Pad2_ -32 DMOD
D4a1 +32 Net-_D4a1-Pad1_ DMOD
D2a1 Net-_D2a1-Pad2_ -32 DMOD
D4b1 +32 Net-_D4a1-Pad1_ DMOD
D2b1 Net-_D2a1-Pad2_ -32 DMOD
XP3 Net-_P3-Pad1_ 0 Net-_P3-Pad3_ RPOT value=200 ratio={rp3}
XP1 Net-_P1-Pad1_ +32 +32 RPOT value=5k ratio={rp1}
XP2 Net-_P2-Pad1_ -32 -32 RPOT value=5k ratio={rp2}
V3 in 0 dc 0 ac 1 sin(0 2 1k 5m)
JQ1 Net-_P1-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SK170
JQ2 Net-_P2-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad3_ 2SJ74
MQ5 out Net-_Q5-Pad2_ Net-_D1a1-Pad2_ Q5tj Q5tc IRFP240 thermal
MQ4 out Net-_Q4-Pad2_ Net-_D4a1-Pad1_ Q4tj Q4tc IRFP9240 thermal
MQ6 out Net-_Q6-Pad2_ Net-_D2a1-Pad2_ Q6tj Q6tc IRFP240 thermal
Rj1 Q3tj 0 1G
Rj2 Q4tj 0 1G
Rj3 Q5tj 0 1G
Rj4 Q6tj 0 1G
Rc2 Q3hs Net-_Rc2-Pad2_ {hs}
Rc4 Q4hs Net-_Rc2-Pad2_ {hs}
Rc6 Q5hs Net-_Rc2-Pad2_ {hs}
Rc8 Q6hs Net-_Rc2-Pad2_ {hs}
Rc1 Q3tc Q3hs {chs}
Rc3 Q4tc Q4hs {chs}
Rc5 Q5tc Q5hs {chs}
Rc7 Q6tc Q6hs {chs}
Vt1 Net-_Rc2-Pad2_ 0 {envtemp}
Cc1 Q3hs 0 {hscc}
Cc3 Q5hs 0 {hscc}
Cc4 Q6hs 0 {hscc}
V1 +32 0 dc 32 ; pulse(0 32 0.4m 2m 2m 100 200)
V2 -32 0 dc -32 ; pulse(0 -32 0.4m 2m 2m 100 200)
XTH2 Net-_D1a1-Pad2_ Q5hs Net-_R12-Pad1_ th R25=4.7k
XTH1 Net-_D3a1-Pad1_ Q3hs Net-_R11-Pad1_ th R25=4.7k
MQ3 out Net-_Q3-Pad2_ Net-_D3a1-Pad1_ Q3tj Q3tc IRFP9240 thermal
Vs1 Net-_S1-Pad3_ 0 dc 0 pulse(0 5 6 1m 1m 20 20)
XS1 Net-_Ra1-Pad2_ 0 Net-_S1-Pad3_ 0 genrelay
Cc2 Q4hs 0 {hscc}
Ra1 out Net-_Ra1-Pad2_ 4
.tran 20u 5
.param envtemp=40
.param chs=1
.param hs=1.2
.param hscc=1
.param rp2=0.21
.param rp1=0.36
.param rp3=0.505
.end

View File

@ -0,0 +1,79 @@
.title KiCad schematic
.include "F5models.lib"
.include "script-optran.txt"
R2 in 0 47.5k
R1 Net-_Q1-Pad2_ in 1k
R5 +32 Net-_P1-Pad1_ 1k
R3 Net-_P3-Pad1_ 0 10
R4 0 Net-_P3-Pad3_ 10
R6 Net-_P2-Pad1_ -32 1k
R7 out Net-_P3-Pad1_ 220
R8 out Net-_P3-Pad1_ 220
R9 out Net-_P3-Pad3_ 220
R10 out Net-_P3-Pad3_ 220
R11 Net-_R11-Pad1_ Net-_P1-Pad1_ 2.2k
R13 Net-_Q3-Pad2_ Net-_P1-Pad1_ 47.5
R15 Net-_Q5-Pad2_ Net-_P2-Pad1_ 47.5
R12 Net-_R12-Pad1_ Net-_P2-Pad1_ 2.2k
R17 +32 Net-_D3a1-Pad1_ 1
R21 Net-_D1a1-Pad2_ -32 1
R18 +32 Net-_D3a1-Pad1_ 1
R22 Net-_D1a1-Pad2_ -32 1
R16 Net-_Q6-Pad2_ Net-_P2-Pad1_ 47.5
R14 Net-_Q4-Pad2_ Net-_P1-Pad1_ 47.5
R19 +32 Net-_D4a1-Pad1_ 1
R23 Net-_D2a1-Pad2_ -32 1
R20 +32 Net-_D4a1-Pad1_ 1
R24 Net-_D2a1-Pad2_ -32 1
Ra2 Net-_Ra1-Pad2_ 0 4
D3a1 +32 Net-_D3a1-Pad1_ DMOD
D1a1 Net-_D1a1-Pad2_ -32 DMOD
D3b1 +32 Net-_D3a1-Pad1_ DMOD
D1b1 Net-_D1a1-Pad2_ -32 DMOD
D4a1 +32 Net-_D4a1-Pad1_ DMOD
D2a1 Net-_D2a1-Pad2_ -32 DMOD
D4b1 +32 Net-_D4a1-Pad1_ DMOD
D2b1 Net-_D2a1-Pad2_ -32 DMOD
XP3 Net-_P3-Pad1_ 0 Net-_P3-Pad3_ RPOT value=200 ratio={rp3}
XP1 Net-_P1-Pad1_ +32 +32 RPOT value=5k ratio={rp1}
XP2 Net-_P2-Pad1_ -32 -32 RPOT value=5k ratio={rp2}
V3 in 0 dc 0 ac 1 sin(0 2 1k 5m)
JQ1 Net-_P1-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SK170
JQ2 Net-_P2-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad3_ 2SJ74
MQ5 out Net-_Q5-Pad2_ Net-_D1a1-Pad2_ Q5tj Q5tc IRFP240 thermal
MQ4 out Net-_Q4-Pad2_ Net-_D4a1-Pad1_ Q4tj Q4tc IRFP9240 thermal
MQ6 out Net-_Q6-Pad2_ Net-_D2a1-Pad2_ Q6tj Q6tc IRFP240 thermal
Rj1 Q3tj 0 1G
Rj2 Q4tj 0 1G
Rj3 Q5tj 0 1G
Rj4 Q6tj 0 1G
Rc2 Q3hs Net-_Rc2-Pad2_ {hs}
Rc4 Q4hs Net-_Rc2-Pad2_ {hs}
Rc6 Q5hs Net-_Rc2-Pad2_ {hs}
Rc8 Q6hs Net-_Rc2-Pad2_ {hs}
Rc1 Q3tc Q3hs {chs}
Rc3 Q4tc Q4hs {chs}
Rc5 Q5tc Q5hs {chs}
Rc7 Q6tc Q6hs {chs}
Vt1 Net-_Rc2-Pad2_ 0 {envtemp}
Cc1 Q3hs 0 {hscc}
Cc3 Q5hs 0 {hscc}
Cc4 Q6hs 0 {hscc}
V1 +32 0 dc 32 ; pulse(0 32 0.4m 2m 2m 100 200)
V2 -32 0 dc -32 ; pulse(0 -32 0.4m 2m 2m 100 200)
XTH2 Net-_D1a1-Pad2_ Q5hs Net-_R12-Pad1_ th R25=4.7k
XTH1 Net-_D3a1-Pad1_ Q3hs Net-_R11-Pad1_ th R25=4.7k
MQ3 out Net-_Q3-Pad2_ Net-_D3a1-Pad1_ Q3tj Q3tc IRFP9240 thermal
Vs1 Net-_S1-Pad3_ 0 dc 0 pulse(0 5 6 1m 1m 20 20)
XS1 Net-_Ra1-Pad2_ 0 Net-_S1-Pad3_ 0 genrelay
Cc2 Q4hs 0 {hscc}
Ra1 out Net-_Ra1-Pad2_ 4
*.tran 20u 5m
.param envtemp=40
.param chs=1
.param hs=1.2
.param hscc=1
.param rp2=0.21
.param rp1=0.36
.param rp3=0.505
.end

View File

@ -0,0 +1,78 @@
* from https://www.diyaudio.com/forums/solid-state/252973-2sk170-2sj74-spice-model-pass-0-4ma.html
*2SJ74
*Toshiba Dep-Mode 20mA 400mW LowNoise pkg:TO-92B 2,1,3
.MODEL 2SJ74 PJF(Beta=92.12m Rs=7.748 Rd=7.748 Lambda=4.464m
+Vto=-.5428 Cgd=85.67p Pb=.3905 Fc=.5
+Cgs=78.27p Is=12.98p
+Kf=26.64E-18 Af=1)
*2SK170
* 20mA 400mW LowNoise Dep-Mode pkg:TO-92B 3,1,2
.MODEL 2SK170 NJF(Beta=59.86m Rs=4.151 Rd=4.151 Lambda=1.923m
+Vto=-.5024 Cgd=20p Pb=.4746 Fc=.5
+Cgs=25.48p Is=8.477p
+Kf=111.3E-18 Af=1)
.subckt RPOT 1 2 3
R1 1 2 {value*ratio + 1m}
R2 2 3 {value*(1-ratio)+ 1m}
* below are default parameters, which are required by some simulators
.param value=1k
.param ratio=1
.ends
.model IRFP240 VDMOS nchan
+ Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27
+ Rd=61m Rs=18m Rg=3 Rds=1e7
+ Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n
+ Is=60p N=1.1 Rb=14m XTI=3
+ Cjo=1.5n Vj=0.8 m=0.5
+ tcvth=0.0065 MU=-1.27 texp0=1.5
+ Rthjc=0.4 Cthj=0.1
+ mtriode=0.8
.model IRFP9240 VDMOS pchan
+ Vto=-4 Kp=8.8 Lambda=.003 Theta=0.08 ksubthres=.35
+ Rd=180m Rs=50m Rg=3 Rds=1e7
+ Cgdmax=1.25n Cgdmin=50p a=0.23 Cgs=1.15n
+ Is=150p N=1.3 Rb=16m XTI=2
+ Cjo=1.3n Vj=0.8 m=0.5
+ tcvth=0.004 MU=-1.27 texp0=1.5
+ Rthjc=0.4 Cthj=0.1
+ mtriode=0.6
.model DMOD D
* Thermistor model
.subckt th n1 nt n2
.param B=3977
.param R25=4700
*control node
Ctherm1 n1 0 100p
Ctherm2 n2 0 100p
Rtherm n1 n2 R = {R25*exp(B*(1/(v(nt)+273.15)-1/(25+273.15)))}
.ends
* generic relay model
.subckt genrelay out1 out2 in1 in2
.param ron = 10m
S1 out1 out2 in1 in2 SW
.MODEL SW VSWITCH(VON=4V VOFF=1V RON={ron} ROFF=100K)
.ends
.MODEL IXTH16N10 VDMOS Nchan Vds=100
+ VTO=-3.2 KP=9
+ Lambda=2m
+ Mtriode=1.8
+ Ksubthres=120m
+ subshift=160m
+ Rs=4m Rd=5m Rds=200e6
+ Cgdmax=9000p Cgdmin=300p A=0.25
+ Cgs=5500p Cjo=11000p
+ Is=10e-6 Rb=8m
+ BV=200 IBV=250e-6
+ NBV=4
+ TT=250e-9
+ vq=100
+ rq=0.1
+ Rthjc=0.2 Cthj=0.1

View File

@ -0,0 +1,72 @@
.title KiCad schematic
.include "models/TL072-dual.lib"
.include "models/opa1612c-dual.lib"
.include "models/opa1656c-dual.lib"
V1 Net-_C1-Pad2_ GND dc 0 ac 1
V2 15+ GND dc 15
V3 GND 15- dc 15
C2 Net-_C2-Pad1_ Net-_C1-Pad1_ 330n
C1 Net-_C1-Pad1_ Net-_C1-Pad2_ 330n
C3 Net-_C3-Pad1_ Net-_C3-Pad2_ 330n
C4 Net-_C4-Pad1_ Net-_C3-Pad2_ 330n
R8 Net-_C4-Pad1_ Net-_R7-Pad1_ 2780
R3 Net-_C2-Pad1_ Net-_R2-Pad1_ 2780
R2 Net-_R2-Pad1_ GND 2780
R1 Net-_R1-Pad1_ Net-_C1-Pad1_ 2780
R6 Net-_R10-Pad1_ Net-_C3-Pad2_ 2780
R7 Net-_R7-Pad1_ GND 2780
R10 Net-_R10-Pad1_ TL072_OUT 10k
R4 GND Net-_R1-Pad1_ 2780
R9 GND Net-_R10-Pad1_ 2780
R11 TL072_OUT GND 100k
XU1 Net-_C3-Pad1_ Net-_R1-Pad1_ Net-_C2-Pad1_ 15- Net-_C4-Pad1_ Net-_R10-Pad1_ TL072_OUT 15+ TL072c
R5 Net-_R1-Pad1_ Net-_C3-Pad1_ 10k
C6 Net-_C6-Pad1_ Net-_C5-Pad1_ 330n
C5 Net-_C5-Pad1_ Net-_C1-Pad2_ 330n
C7 Net-_C7-Pad1_ Net-_C7-Pad2_ 330n
C8 Net-_C8-Pad1_ Net-_C7-Pad2_ 330n
R19 Net-_C8-Pad1_ Net-_R18-Pad1_ 2780
R14 Net-_C6-Pad1_ Net-_R13-Pad1_ 2780
R13 Net-_R13-Pad1_ GND 2780
R12 Net-_R12-Pad1_ Net-_C5-Pad1_ 2780
R17 Net-_R17-Pad1_ Net-_C7-Pad2_ 2780
R18 Net-_R18-Pad1_ GND 2780
R21 Net-_R17-Pad1_ OPA1656_OUT 10k
R15 GND Net-_R12-Pad1_ 2780
R20 GND Net-_R17-Pad1_ 2780
R22 OPA1656_OUT GND 100k
XU2 Net-_C7-Pad1_ Net-_R12-Pad1_ Net-_C6-Pad1_ 15- Net-_C8-Pad1_ Net-_R17-Pad1_ OPA1656_OUT 15+ OPA1656c
R16 Net-_R12-Pad1_ Net-_C7-Pad1_ 10k
C10 Net-_C10-Pad1_ Net-_C10-Pad2_ 330n
C9 Net-_C10-Pad2_ Net-_C1-Pad2_ 330n
C11 Net-_C11-Pad1_ Net-_C11-Pad2_ 330n
C12 Net-_C12-Pad1_ Net-_C11-Pad2_ 330n
R30 Net-_C12-Pad1_ Net-_R29-Pad1_ 2780
R25 Net-_C10-Pad1_ Net-_R24-Pad1_ 2780
R24 Net-_R24-Pad1_ GND 2780
R23 Net-_R23-Pad1_ Net-_C10-Pad2_ 2780
R28 Net-_R28-Pad1_ Net-_C11-Pad2_ 2780
R29 Net-_R29-Pad1_ GND 2780
R32 Net-_R28-Pad1_ OPA1612_OUT 10k
R26 GND Net-_R23-Pad1_ 2780
R31 GND Net-_R28-Pad1_ 2780
R33 OPA1612_OUT GND 100k
XU3 Net-_C11-Pad1_ Net-_R23-Pad1_ Net-_C10-Pad1_ 15- Net-_C12-Pad1_ Net-_R28-Pad1_ OPA1612_OUT 15+ OPA1612c
R27 Net-_R23-Pad1_ Net-_C11-Pad1_ 10k
*.ac dec 1k 1 10k
*.options reltol=0.01 rshunt=1e12
.control
*op
optran 0 0 0 100n 10u 0
*op
*print all
ac dec 10 100 10Meg
set color0=white
set xbrushwidth=2
plot db(OPA1612_OUT) db(OPA1656_OUT) db(TL072_OUT)
plot cph(OPA1612_OUT) cph(OPA1656_OUT) cph(TL072_OUT)
.endc
.end

View File

@ -0,0 +1,32 @@
.title KiCad schematic
.include "./models/TLV6001.LIB"
Vsignal1 Vin GND dc 2.5 ac 1
Vcc1 Vcc GND 5
R1 Vin Net-_R1-Pad2_ 1000
R2 Vout Net-_R1-Pad2_ 1meg
R3 Vcc Net-_R3-Pad2_ 10k
R4 Net-_R3-Pad2_ GND 10k
XU1 Net-_R3-Pad2_ Net-_R1-Pad2_ Vcc GND Vout TLV6001
.save @vsignal1[i]
.save @vcc1[i]
.save @r1[i]
.save @r2[i]
.save @r3[i]
.save @r4[i]
.save V(Net-_R1-Pad2_)
.save V(Net-_R3-Pad2_)
.save V(Vcc)
.save V(Vin)
.save V(Vout)
.ac dec 5 10 20k
.control
optran 0 0 0 100n 10u 0 ; override optran from spinit
run
plot db(Vout)
set units=degrees
plot ph(Vout)
quit
.endc
.end

View File

@ -0,0 +1,31 @@
.title KiCad schematic
.include "./models/TLV9002.lib"
Vsignal1 Vin GND dc 2.5 ac 1
Vcc1 Vcc GND 5
R1 Vin Net-_R1-Pad2_ 1000
R2 Vout Net-_R1-Pad2_ 1meg
R3 Vcc Net-_R3-Pad2_ 10k
R4 Net-_R3-Pad2_ GND 10k
XU1 Net-_R3-Pad2_ Net-_R1-Pad2_ Vcc GND Vout TLV9002
.save @vsignal1[i]
.save @vcc1[i]
.save @r1[i]
.save @r2[i]
.save @r3[i]
.save @r4[i]
.save V(Net-_R1-Pad2_)
.save V(Net-_R3-Pad2_)
.save V(Vcc)
.save V(Vin)
.save V(Vout)
.ac dec 5 10 20k
.control
run
plot db(Vout)
set units=degrees
plot ph(Vout)
quit
.endc
.end

View File

@ -0,0 +1,12 @@
ngspice input files using optran
Pass Labs F5 turbo
thermal simulation
use optran for 4s and coarse steps to obtain stable temperature
then simulate transient with high resolution
HiPass3opamps_optran.cir
Just a check with three different OpAmps
TLV6001-test.cir, TLV9002-test.cir
These OpAmp currently allow op calculation only with optran

View File

@ -0,0 +1,438 @@
*$
* OPA1611
*************************************************************************************************
* (C) Copyright 2018 Texas Instruments Incorporated. All rights reserved.
*************************************************************************************************
** This model is designed as an aid for customers of Texas Instruments.
** TI and its licensors and suppliers make no warranties, either expressed
** or implied, with respect to this model, including the warranties of
** merchantability or fitness for a particular purpose. The model is
** provided solely on an "as is" basis. The entire risk as to its quality
** and performance is with the customer
*************************************************************************************************
*
* This model is subject to change without notice. Texas Instruments
* Incorporated is not responsible for updating this model.
*
*************************************************************************************************
*
** Released by: Online Design Tools, Texas Instruments Inc.
* Part: OPA1611
* Date: 07FEB2019
* Model Type: Generic (suitable for all analysis types)
* EVM Order Number: N/A
* EVM Users Guide: N/A
* Datasheet: SBOS450C -JULY 2009-REVISED AUGUST 2014
* Created with Green-Williams-Lis Op Amp Macro-model Architecture
*
* Model Version: Final 1.2
*
*****************************************************************************
*
* Updates:
*
* Final 1.2
* VOS drift feature is added
* Added Unique subckt name, removed Claw ABS.
*
* Final 1.1
* Release to Web.
*
****************************************************************************
* Model Usage Notes:
* 1. The following parameters are modeled:
* OPEN-LOOP GAIN AND PHASE VS. FREQUENCY WITH RL, CL EFFECTS (Aol)
* UNITY GAIN BANDWIDTH (GBW)
* INPUT COMMON-MODE REJECTION RATIO VS. FREQUENCY (CMRR)
* POWER SUPPLY REJECTION RATIO VS. FREQUENCY (PSRR)
* DIFFERENTIAL INPUT IMPEDANCE (Zid)
* COMMON-MODE INPUT IMPEDANCE (Zic)
* OPEN-LOOP OUTPUT IMPEDANCE VS. FREQUENCY (Zo)
* OUTPUT CURRENT THROUGH THE SUPPLY (Iout)
* INPUT VOLTAGE NOISE DENSITY VS. FREQUENCY (en)
* INPUT CURRENT NOISE DENSITY VS. FREQUENCY (in)
* OUTPUT VOLTAGE SWING vs. OUTPUT CURRENT (Vo)
* SHORT-CIRCUIT OUTPUT CURRENT (Isc)
* QUIESCENT CURRENT (Iq)
* SETTLING TIME VS. CAPACITIVE LOAD (ts)
* SLEW RATE (SR)
* SMALL SIGNAL OVERSHOOT VS. CAPACITIVE LOAD
* LARGE SIGNAL RESPONSE
* OVERLOAD RECOVERY TIME (tor)
* INPUT BIAS CURRENT (Ib)
* INPUT OFFSET CURRENT (Ios)
* INPUT OFFSET VOLTAGE (Vos)
* INPUT OFFSET VOLTAGE VS. TEMPERATURE (Vos Drift)
* INPUT COMMON-MODE VOLTAGE RANGE (Vcm)
* INPUT OFFSET VOLTAGE VS. INPUT COMMON-MODE VOLTAGE (Vos vs. Vcm)
* INPUT/OUTPUT ESD CELLS (ESDin, ESDout)
******************************************************
.subckt OPA1611 IN+ IN- VCC VEE OUT
******************************************************
.model R_NOISELESS RES (TCE=0 T_ABS=-273.15)
******************************************************
I_OS ESDn MID 3.5e-08
I_B 30 MID 6e-08
V_GRp 45 MID 48
V_GRn 46 MID -47
V_ISCp 39 MID 49.8
V_ISCn 40 MID -47
V_ORn 38 VCLP -13.759
V11 44 37 0
V_ORp 36 VCLP 13.6794
V12 43 35 0
V4 27 OUT 0
VCM_MIN 67 VEE_B 2
VCM_MAX 68 VCC_B -2
I_Q VCC VEE 0.0036
XV_OS 75 30 VOS_DRIFT_OPA1611
XU5 ESDp ESDn VCC VEE ESD_0_OPA1611
XU4 19 ESDp MID PSRR_CMRR_0_OPA1611
XU3 20 VEE_B MID PSRR_CMRR_1_OPA1611
XU2 21 VCC_B MID PSRR_CMRR_2_OPA1611
XU1 23 22 CLAMP VSENSE CLAW_CLAMP CL_CLAMP 24 26 27 MID AOL_ZO_0_OPA1611
C28 31 MID 1P
R77 32 31 R_NOISELESS 100
C27 33 MID 1P
R76 34 33 R_NOISELESS 100
R75 MID 35 R_NOISELESS 1
GVCCS8 35 MID 36 MID -1
R74 37 MID R_NOISELESS 1
GVCCS7 37 MID 38 MID -1
Xi_nn ESDn MID FEMT_0_OPA1611
Xi_np MID 30 FEMT_0_OPA1611
Xe_n ESDp 30 VNSE_0_OPA1611
XIQPos VIMON MID MID VCC VCCS_LIMIT_IQ_0_OPA1611
XIQNeg MID VIMON VEE MID VCCS_LIMIT_IQ_0_OPA1611
C_DIFF ESDp ESDn 8e-12
XCL_AMP 39 40 VIMON MID 41 42 CLAMP_AMP_LO_0_OPA1611
SOR_SWp CLAMP 43 CLAMP 43 S_VSWITCH_1
SOR_SWn 44 CLAMP 44 CLAMP S_VSWITCH_1
XGR_AMP 45 46 47 MID 48 49 CLAMP_AMP_HI_0_OPA1611
R39 45 MID R_NOISELESS 1G
R37 46 MID R_NOISELESS 1G
R42 VSENSE 47 R_NOISELESS 1M
C19 47 MID 1F
R38 48 MID R_NOISELESS 1
R36 MID 49 R_NOISELESS 1
R40 48 50 R_NOISELESS 1M
R41 49 51 R_NOISELESS 1M
C17 50 MID 1F
C18 MID 51 1F
XGR_SRC 50 51 CLAMP MID VCCS_LIM_GR_0_OPA1611
R21 41 MID R_NOISELESS 1
R20 MID 42 R_NOISELESS 1
R29 41 52 R_NOISELESS 1M
R30 42 53 R_NOISELESS 1M
C9 52 MID 1F
C8 MID 53 1F
XCL_SRC 52 53 CL_CLAMP MID VCCS_LIM_4_0_OPA1611
R22 39 MID R_NOISELESS 1G
R19 MID 40 R_NOISELESS 1G
XCLAWp VIMON MID 54 VCC_B VCCS_LIM_CLAW+_0_OPA1611
XCLAWn MID VIMON VEE_B 55 VCCS_LIM_CLAW-_0_OPA1611
R12 54 VCC_B R_NOISELESS 1K
R16 54 56 R_NOISELESS 1M
R13 VEE_B 55 R_NOISELESS 1K
R17 57 55 R_NOISELESS 1M
C6 57 MID 1F
C5 MID 56 1F
G2 VCC_CLP MID 56 MID -1M
R15 VCC_CLP MID R_NOISELESS 1K
G3 VEE_CLP MID 57 MID -1M
R14 MID VEE_CLP R_NOISELESS 1K
XCLAW_AMP VCC_CLP VEE_CLP VOUT_S MID 58 59 CLAMP_AMP_LO_0_OPA1611
R26 VCC_CLP MID R_NOISELESS 1G
R23 VEE_CLP MID R_NOISELESS 1G
R25 58 MID R_NOISELESS 1
R24 MID 59 R_NOISELESS 1
R27 58 60 R_NOISELESS 1M
R28 59 61 R_NOISELESS 1M
C11 60 MID 1F
C10 MID 61 1F
XCLAW_SRC 60 61 CLAW_CLAMP MID VCCS_LIM_3_0_OPA1611
H2 34 MID V11 -1
H3 32 MID V12 1
C12 SW_OL MID 100P
R32 62 SW_OL R_NOISELESS 100
R31 62 MID R_NOISELESS 1
XOL_SENSE MID 62 33 31 OL_SENSE_0_OPA1611
S1 24 26 SW_OL MID S_VSWITCH_3
H1 63 MID V4 1K
S7 VEE OUT VEE OUT S_VSWITCH_4
S6 OUT VCC OUT VCC S_VSWITCH_4
R11 MID 64 R_NOISELESS 1G
R18 64 VOUT_S R_NOISELESS 100
C7 VOUT_S MID 10P
E5 64 MID OUT MID 1
C13 VIMON MID 10P
R33 63 VIMON R_NOISELESS 100
R10 MID 63 R_NOISELESS 1G
R47 65 VCLP R_NOISELESS 100
C24 VCLP MID 10P
E4 65 MID CL_CLAMP MID 1
C4 23 MID 1F
R9 23 66 R_NOISELESS 1M
R7 MID 67 R_NOISELESS 1G
R6 68 MID R_NOISELESS 1G
R8 MID 66 R_NOISELESS 1
XVCM_CLAMP 69 MID 66 MID 68 67 VCCS_EXT_LIM_0_OPA1611
E1 MID 0 70 0 1
R89 VEE_B 0 R_NOISELESS 1
R5 71 VEE_B R_NOISELESS 1M
C3 71 0 1F
R60 70 71 R_NOISELESS 1MEG
C1 70 0 1
R3 70 0 R_NOISELESS 1G
R59 72 70 R_NOISELESS 1MEG
C2 72 0 1F
R4 VCC_B 72 R_NOISELESS 1M
R88 VCC_B 0 R_NOISELESS 1
G17 VEE_B 0 VEE 0 -1
G16 VCC_B 0 VCC 0 -1
R_PSR 73 69 R_NOISELESS 1K
G_PSR 69 73 21 20 -1M
R2 22 ESDn R_NOISELESS 1M
R1 73 74 R_NOISELESS 1M
R_CMR 75 74 R_NOISELESS 1K
G_CMR 74 75 19 MID -1M
C_CMn ESDn MID 2e-12
C_CMp MID ESDp 2e-12
R53 ESDn MID R_NOISELESS 1T
R52 MID ESDp R_NOISELESS 1T
R35 IN- ESDn R_NOISELESS 10M
R34 IN+ ESDp R_NOISELESS 10M
.MODEL S_VSWITCH_1 VSWITCH (RON=10e-3 ROFF=1e9 VON=10e-3 VOFF=0)
.MODEL S_VSWITCH_3 VSWITCH (RON=1e-3 ROFF=1e9 VON=900e-3 VOFF=800e-3)
.MODEL S_VSWITCH_4 VSWITCH (RON=50 ROFF=1e12 VON=500e-3 VOFF=450e-3)
.ENDS OPA1611
*
.SUBCKT VOS_DRIFT_OPA1611 VOS+ VOS-
.PARAM DC = 9.729e-05
.PARAM POL = 1
.PARAM DRIFT = 1E-06
E1 VOS+ VOS- VALUE={DC+POL*DRIFT*(TEMP-27)}
.ENDS
*
.SUBCKT ESD_0_OPA1611 ESDp ESDn VCC VEE
SW6 ESDn ESDp ESDn ESDp S_VSWITCH_1
SW5 ESDp ESDn ESDp ESDn S_VSWITCH_1
SW4 ESDn VCC ESDn VCC S_VSWITCH_3
SW3 VEE ESDn VEE ESDn S_VSWITCH_3
SW2 ESDp VCC ESDp VCC S_VSWITCH_3
SW1 VEE ESDp VEE ESDp S_VSWITCH_3
.MODEL S_VSWITCH_1 VSWITCH (RON=50 ROFF=1e12 VON=700e-3 VOFF=650e-3)
.MODEL S_VSWITCH_3 VSWITCH (RON=50 ROFF=1e12 VON=500e-3 VOFF=450e-3)
.ENDS
*
.SUBCKT PSRR_CMRR_0_OPA1611 psrr_in psrr_vccb mid
.model R_NOISELESS RES ( TCE=0 T_ABS=-273.15)
R74 mid psrr_in R_NOISELESS 1
G_2 psrr_in mid 4 mid -140.513
R2b mid 4 R_NOISELESS 716778.969
C2a 4 5 2.2044e-14
R73 5 4 R_NOISELESS 100MEG
R49 mid 5 R_NOISELESS 1
GVCCS7 5 mid 6 mid -1
R2a mid 6 R_NOISELESS 716778.969
C1a 6 7 2.2044e-14
R48 7 6 R_NOISELESS 100MEG
G_1 7 mid psrr_vccb mid -0.00016265
Rsrc mid 7 R_NOISELESS 1
.ENDS
*
.SUBCKT PSRR_CMRR_1_OPA1611 psrr_in psrr_vccb psrr_mid
.model R_NOISELESS RES ( TCE=0 T_ABS=-273.15)
R80 psrr_mid psrr_in R_NOISELESS 79.383
C27 psrr_in 4 2.1432e-10
R79 4 psrr_in R_NOISELESS 100MEG
GVCCS8 4 psrr_mid psrr_vccb psrr_mid -0.11572
R78 psrr_mid 4 R_NOISELESS 1
.ENDS
*
.SUBCKT PSRR_CMRR_2_OPA1611 psrr_in psrr_vccb psrr_mid
.model R_NOISELESS RES ( TCE=0 T_ABS=-273.15)
R80 psrr_mid psrr_in R_NOISELESS 74.0813
C27 psrr_in 4 3.1831e-10
R79 4 psrr_in R_NOISELESS 100MEG
GVCCS8 4 psrr_mid psrr_vccb psrr_mid -0.12195
R78 psrr_mid 4 R_NOISELESS 1
.ENDS
*
.SUBCKT VCCS_LIM_2_0_OPA1611 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 0.0053649
.PARAM IPOS = 0.028032
.PARAM INEG = -0.027711
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIM_1_0_OPA1611 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1E-4
.PARAM IPOS = .5
.PARAM INEG = -.5
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT AOL_ZO_0_OPA1611 AOL_INP AOL_INN CLAMP VSENSE CLAW_CLAMP CL_CLAMP ZO_CLEFT ZO_CRIGHT ZO_OUT MID
.MODEL R_NOISELESS RES ( TCE=0 T_ABS=-273.15)
C1_A0 CLAMP MID 9.2525e-10
R4_A0 MID CLAMP R_NOISELESS 1MEG
XVCCS_LIM_2_A0 4_A0 MID MID CLAMP VCCS_LIM_2_0_OPA1611
R3_A0 MID 4_A0 R_NOISELESS 1MEG
XVCCS_LIM_1_A0 AOL_INP AOL_INN MID 4_A0 VCCS_LIM_1_0_OPA1611
R4_VS VSENSE MID R_NOISELESS 1K
GVCCS4_VS VSENSE MID CLAMP MID -1M
C2_A2 out2 MID 2.316e-14
R3_A2 out2 MID R_NOISELESS 1MEG
GVCCS3_A2 out2 MID VSENSE MID -1U
C3_A3 4_A3 out3 1.061e-13
GVCCS4_A3 4_A3 MID out2 MID -21.5263
R4_A3 4_A3 MID R_NOISELESS 1
R5_A3 out3 4_A3 R_NOISELESS 10K
R6_A3 out3 MID R_NOISELESS 487.1795
C3_A4 4_A4 out4 1.4283e-12
GVCCS4_A4 4_A4 MID out3 MID -21.5263
R4_A4 4_A4 MID R_NOISELESS 1
R5_A4 out4 4_A4 R_NOISELESS 10K
R6_A4 out4 MID R_NOISELESS 487.1795
R4_CC CLAW_CLAMP MID R_NOISELESS 1K
GVCCS4_CC CLAW_CLAMP MID out4 MID -1M
R4_CL CL_CLAMP MID R_NOISELESS 1K
GVCCS4_CL CL_CLAMP MID CLAW_CLAMP MID -1M
G_Aol_Zo Zo_Cleft MID CL_CLAMP ZO_OUT -89.0524
GVCCS1_1 outz1 MID Zo_Cright MID -270.7824
C1_1 Zo_Cleft Zo_Cright 1.1766e-07
R2_1 Zo_Cright MID R_NOISELESS 37.0669
R1_1 Zo_Cright Zo_Cleft R_NOISELESS 10K
Rdc_1 Zo_Cleft MID R_NOISELESS 1
GVCCS2_2 outz2 MID net2 MID -1
C2_2 5_2 MID 1.1756e-12
R5_2 net2 5_2 R_NOISELESS 10K
R4_2 net2 outz1 R_NOISELESS 1312633.434
R7_2 outz1 MID R_NOISELESS 1
R1_3 2_3 MID R_NOISELESS 1
R11_3 5_3 MID R_NOISELESS 9.2681
C4_3 5_3 outz2 4.138e-13
R10_3 5_3 outz2 R_NOISELESS 10K
XVCVS_LIM_1 5_3 MID MID 2_3 VCCS_LIM_ZO_0_OPA1611
R9_3 outz2 MID R_NOISELESS 1
Rdummy MID ZO_OUT R_NOISELESS 1410
Rx ZO_OUT 2_3 R_NOISELESS 14100
.ENDS
*
.SUBCKT VCCS_LIM_ZO_0_OPA1611 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1079.9748
.PARAM IPOS = 1551
.PARAM INEG = -1748.4
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT FEMT_0_OPA1611 1 2
.PARAM FLWF=0.1
.PARAM NLFF=39529.1
.PARAM NVRF=1683.74
.PARAM GLFF={PWR(FLWF,0.25)*NLFF/1164}
.PARAM RNVF={1.184*PWR(NVRF,2)}
.MODEL DVNF D KF={PWR(FLWF,0.5)/1E11} IS=1.0E-16
I1 0 7 10E-3
I2 0 8 10E-3
D1 7 0 DVNF
D2 8 0 DVNF
E1 3 6 7 8 {GLFF}
R1 3 0 1E9
R2 3 0 1E9
R3 3 6 1E9
E2 6 4 5 0 10
R4 5 0 {RNVF}
R5 5 0 {RNVF}
R6 3 4 1E9
R7 4 0 1E9
G1 1 2 3 4 1E-6
.ENDS
*
.SUBCKT VNSE_0_OPA1611 1 2
.PARAM FLW=0.1
.PARAM NLF=23.8513
.PARAM NVR=1.24
.PARAM GLF={PWR(FLW,0.25)*NLF/1164}
.PARAM RNV={1.184*PWR(NVR,2)}
.MODEL DVN D KF={PWR(FLW,0.5)/1E11} IS=1.0E-16
I1 0 7 10E-3
I2 0 8 10E-3
D1 7 0 DVN
D2 8 0 DVN
E1 3 6 7 8 {GLF}
R1 3 0 1E9
R2 3 0 1E9
R3 3 6 1E9
E2 6 4 5 0 10
R4 5 0 {RNV}
R5 5 0 {RNV}
R6 3 4 1E9
R7 4 0 1E9
E3 1 2 3 4 1
.ENDS
*
.SUBCKT VCCS_LIMIT_IQ_0_OPA1611 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1E-3
G1 IOUT- IOUT+ VALUE={IF( (V(VC+,VC-)<=0),0,GAIN*V(VC+,VC-) )}
.ENDS
*
.SUBCKT CLAMP_AMP_LO_0_OPA1611 VC+ VC- VIN COM VO+ VO-
.PARAM G=1
GVO+ COM VO+ VALUE = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)}
GVO- COM VO- VALUE = {IF(V(VIN,COM)<V(VC-,COM),((V(VC-,COM)-V(VIN,COM))*G),0)}
.ENDS
*
.SUBCKT CLAMP_AMP_HI_0_OPA1611 VC+ VC- VIN COM VO+ VO-
.PARAM G=10
GVO+ COM VO+ VALUE = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)}
GVO- COM VO- VALUE = {IF(V(VIN,COM)<V(VC-,COM),((V(VC-,COM)-V(VIN,COM))*G),0)}
.ENDS
*
.SUBCKT VCCS_LIM_GR_0_OPA1611 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1
.PARAM IPOS = 0.056064
.PARAM INEG = -0.056064
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIM_4_0_OPA1611 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1
.PARAM IPOS = 0.2016
.PARAM INEG = -0.1974
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIM_CLAW+_0_OPA1611 VC+ VC- IOUT+ IOUT-
G1 IOUT+ IOUT- TABLE {(V(VC+,VC-))} =
+(0, 2.1334E-4)
+(48.1473, 0.001)
+(49.2541, 0.0012)
+(49.8, 0.0013)
.ENDS
*
.SUBCKT VCCS_LIM_CLAW-_0_OPA1611 VC+ VC- IOUT+ IOUT-
G1 IOUT+ IOUT- TABLE {(V(VC+,VC-))} =
+(0, 2.1349E-4)
+(45.4769, 0.0008314)
+(46.5224, 0.00085953)
+(47, 0.0010745)
.ENDS
*
.SUBCKT VCCS_LIM_3_0_OPA1611 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1
.PARAM IPOS = 0.1008
.PARAM INEG = -0.0987
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT OL_SENSE_0_OPA1611 COM SW+ OLN OLP
GSW+ COM SW+ VALUE = {IF((V(OLN,COM)>10E-3 | V(OLP,COM)>10E-3),1,0)}
.ENDS
*
.SUBCKT VCCS_EXT_LIM_0_OPA1611 VIN+ VIN- IOUT- IOUT+ VP+ VP-
.PARAM GAIN = 1
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VIN+,VIN-),V(VP-,VIN-), V(VP+,VIN-))}
.ENDS
*

View File

@ -0,0 +1,7 @@
* A dual opamp ngspice model
* file name: TL072-dual.lib
.subckt TL072c 1out 1in- 1in+ vcc- 2in+ 2in- 2out vcc+
.include TL072.301
XU1A 1in+ 1in- vcc+ vcc- 1out TL072
XU1B 2in+ 2in- vcc+ vcc- 2out TL072
.ends

View File

@ -0,0 +1,42 @@
* TL072 OPERATIONAL AMPLIFIER "MACROMODEL" SUBCIRCUIT
* CREATED USING PARTS RELEASE 4.01 ON 06/16/89 AT 13:08
* (REV N/A) SUPPLY VOLTAGE: +/-15V
* CONNECTIONS: NON-INVERTING INPUT
* | INVERTING INPUT
* | | POSITIVE POWER SUPPLY
* | | | NEGATIVE POWER SUPPLY
* | | | | OUTPUT
* | | | | |
.SUBCKT TL072 1 2 3 4 5
*
C1 11 12 3.498E-12
C2 6 7 15.00E-12
DC 5 53 DX
DE 54 5 DX
DLP 90 91 DX
DLN 92 90 DX
DP 4 3 DX
EGND 99 0 POLY(2) (3,0) (4,0) 0 .5 .5
FB 7 99 POLY(5) VB VC VE VLP VLN 0 4.715E6 -5E6 5E6 5E6 -5E6
GA 6 0 11 12 282.8E-6
GCM 0 6 10 99 8.942E-9
ISS 3 10 DC 195.0E-6
HLIM 90 0 VLIM 1K
J1 11 2 10 JX
J2 12 1 10 JX
R2 6 9 100.0E3
RD1 4 11 3.536E3
RD2 4 12 3.536E3
RO1 8 5 150
RO2 7 99 150
RP 3 4 2.143E3
RSS 10 99 1.026E6
VB 9 0 DC 0
VC 3 53 DC 2.200
VE 54 4 DC 2.200
VLIM 7 8 DC 0
VLP 91 0 DC 25
VLN 0 92 DC 25
.MODEL DX D(IS=800.0E-18)
.MODEL JX PJF(IS=15.00E-12 BETA=270.1E-6 VTO=-1)
.ENDS

View File

@ -0,0 +1,382 @@
*$
* TLV6001
*****************************************************************************
* (C) Copyright 2019 Texas Instruments Incorporated. All rights reserved.
*****************************************************************************
** This model is designed as an aid for customers of Texas Instruments.
** TI and its licensors and suppliers make no warranties, either expressed
** or implied, with respect to this model, including the warranties of
** merchantability or fitness for a particular purpose. The model is
** provided solely on an "as is" basis. The entire risk as to its quality
** and performance is with the customer
*****************************************************************************
*
* This model is subject to change without notice. Texas Instruments
* Incorporated is not responsible for updating this model.
*
*****************************************************************************
*
** Released by: Online Design Tools, Texas Instruments Inc.
* Part: TLV6001
* Date: 19FEB2019
* Model Type: Generic (suitable for all analysis types)
* EVM Order Number: N/A
* EVM Users Guide: N/A
* Datasheet: SBOS779D -JUNE 2016-REVISED MAY 2017
* Created with Green-Williams-Lis Op Amp Macro-model Architecture
*
* Model Version: Final 1.2
*
*****************************************************************************
*
* Updates:
*
* Final 1.2
* VOS drift feature is added
* Added Unique subckt name, removed Claw ABS.
* Simplified subckt for current noise.
*
* Final 1.1
* Release to Web.
*
****************************************************************************
* Model Usage Notes:
* 1. The following parameters are modeled:
* OPEN-LOOP GAIN AND PHASE VS. FREQUENCY WITH RL, CL EFFECTS (Aol)
* UNITY GAIN BANDWIDTH (GBW)
* INPUT COMMON-MODE REJECTION RATIO VS. FREQUENCY (CMRR)
* POWER SUPPLY REJECTION RATIO VS. FREQUENCY (PSRR)
* DIFFERENTIAL INPUT IMPEDANCE (Zid)
* COMMON-MODE INPUT IMPEDANCE (Zic)
* OPEN-LOOP OUTPUT IMPEDANCE VS. FREQUENCY (Zo)
* OUTPUT CURRENT THROUGH THE SUPPLY (Iout)
* INPUT VOLTAGE NOISE DENSITY VS. FREQUENCY (en)
* INPUT CURRENT NOISE DENSITY VS. FREQUENCY (in)
* OUTPUT VOLTAGE SWING vs. OUTPUT CURRENT (Vo)
* SHORT-CIRCUIT OUTPUT CURRENT (Isc)
* QUIESCENT CURRENT (Iq)
* SETTLING TIME VS. CAPACITIVE LOAD (ts)
* SLEW RATE (SR)
* SMALL SIGNAL OVERSHOOT VS. CAPACITIVE LOAD
* LARGE SIGNAL RESPONSE
* OVERLOAD RECOVERY TIME (tor)
* INPUT BIAS CURRENT (Ib)
* INPUT OFFSET CURRENT (Ios)
* INPUT OFFSET VOLTAGE (Vos)
* INPUT OFFSET VOLTAGE VS. TEMPERATURE (Vos Drift)
* INPUT COMMON-MODE VOLTAGE RANGE (Vcm)
* INPUT OFFSET VOLTAGE VS. INPUT COMMON-MODE VOLTAGE (Vos vs. Vcm)
* INPUT/OUTPUT ESD CELLS (ESDin, ESDout)
******************************************************
.subckt TLV6001 IN+ IN- VCC VEE OUT
******************************************************
* MODEL DEFINITIONS:
.model BB_SW VSWITCH(Ron=50 Roff=1e9 Von=700e-3 Voff=0)
.model ESD_SW VSWITCH(Ron=50 Roff=1e9 Von=500e-3 Voff=100e-3)
.model OL_SW VSWITCH(Ron=1e-3 Roff=1e9 Von=900e-3 Voff=800e-3)
.model OR_SW VSWITCH(Ron=10e-3 Roff=1e9 Von=1e-3 Voff=0)
.model R_NOISELESS RES(T_ABS=-273.15)
******************************************************
XV_OS N032 N038 VOS_DRIFT_TLV6001
R1 N035 N033 R_NOISELESS 1e-3
R2 N044 ESDn R_NOISELESS 1e-3
R3 N056 0 R_NOISELESS 1e9
C1 N056 0 1
R4 VCC_B N055 R_NOISELESS 1e-3
C2 N055 0 1e-15
C3 N057 0 1e-15
R5 N057 VEE_B R_NOISELESS 1e-3
G1 N035 N036 N006 N005 1e-3
R6 MID N042 R_NOISELESS 1e9
VCM_MIN N043 VEE_B -0.2
R7 N043 MID R_NOISELESS 1e9
VCM_MAX N042 VCC_B 0.2
XVCM_CLAMP N036 MID N039 MID N042 N043 VCCS_EXT_LIM_TLV6001
R8 N039 MID R_NOISELESS 1
C4 N040 MID 1e-15
R9 N039 N040 R_NOISELESS 1e-3
V4 N053 OUT 0
XIQ+ VIMON MID VCC MID VCCS_LIM_IQ_TLV6001
XIQ- MID VIMON VEE MID VCCS_LIM_IQ_TLV6001
R12 VCC_B N009 R_NOISELESS 1e3
R13 N028 VEE_B R_NOISELESS 1e3
XCLAWp VIMON MID N009 VCC_B VCCS_LIM_CLAWp_TLV6001
XCLAWn MID VIMON VEE_B N028 VCCS_LIM_CLAWn_TLV6001
R14 VEE_CLP MID R_NOISELESS 1e3
R15 MID VCC_CLP R_NOISELESS 1e3
R16 N010 N009 R_NOISELESS 1e-3
R17 N029 N028 R_NOISELESS 1e-3
C5 MID N010 1e-15
C6 N029 MID 1e-15
R18 VOUT_S N046 R_NOISELESS 100
C7 VOUT_S MID 1e-9
G2 MID VCC_CLP N010 MID 1e-3
G3 MID VEE_CLP N029 MID 1e-3
XCL_AMP N003 N034 VIMON MID N013 N026 CLAMP_AMP_LO_TLV6001
V_ISCp N003 MID 13.5
V_ISCn N034 MID -12.5
R19 N034 MID R_NOISELESS 1e9
R20 N026 MID R_NOISELESS 1
C8 N027 MID 1e-15
R21 MID N013 R_NOISELESS 1
R22 MID N003 R_NOISELESS 1e9
C9 MID N014 1e-15
XCLAW_AMP VCC_CLP VEE_CLP VOUT_S MID N011 N024 CLAMP_AMP_LO_TLV6001
R23 VEE_CLP MID R_NOISELESS 1e9
R24 N024 MID R_NOISELESS 1
C10 N025 MID 1e-15
R25 MID N011 R_NOISELESS 1
R26 MID VCC_CLP R_NOISELESS 1e9
C11 MID N012 1e-15
XCL_SRC N014 N027 CL_CLAMP MID VCCS_LIM_4_TLV6001
XCLAW_SRC N012 N025 CLAW_CLAMP MID VCCS_LIM_3_TLV6001
R27 N011 N012 R_NOISELESS 1e-3
R28 N025 N024 R_NOISELESS 1e-3
R29 N013 N014 R_NOISELESS 1e-3
R30 N027 N026 R_NOISELESS 1e-3
R33 VIMON N045 R_NOISELESS 100
C13 VIMON MID 1e-9
C_DIFF ESDp ESDn 1e-12
C_CMn ESDn MID 5e-12
C_CMp MID ESDp 5e-12
I_Q VCC VEE 75e-6
I_B N036 MID 1e-12
I_OS N044 MID 1e-15
R34 IN+ ESDp R_NOISELESS 10e-3
R35 IN- ESDn R_NOISELESS 10e-3
R36 N030 MID R_NOISELESS 1
R37 N037 MID R_NOISELESS 1e9
R38 MID N022 R_NOISELESS 1
R39 MID N008 R_NOISELESS 1e9
XGR_AMP N008 N037 N021 MID N022 N030 CLAMP_AMP_HI_TLV6001
XGR_SRC N023 N031 CLAMP MID VCCS_LIM_GR_TLV6001
C17 MID N023 1e-15
C18 N031 MID 1e-15
V_GRn N037 MID -160
V_GRp N008 MID 160
R40 N022 N023 R_NOISELESS 1e-3
R41 N031 N030 R_NOISELESS 1e-3
R42 VSENSE N021 R_NOISELESS 1e-3
C19 MID N021 1e-15
R43 MID VSENSE R_NOISELESS 1e3
G5 N032 N033 N002 MID 1e-3
G8 MID CLAW_CLAMP N047 MID 1e-3
R45 MID CLAW_CLAMP R_NOISELESS 1e3
G9 MID CL_CLAMP CLAW_CLAMP MID 1e-3
R46 MID CL_CLAMP R_NOISELESS 1e3
R47 N054 VCLP R_NOISELESS 100
C24 MID VCLP 1e-9
E4 N054 MID CL_CLAMP MID 1
R52 MID ESDp R_NOISELESS 1e12
R53 ESDn MID R_NOISELESS 1e12
R58 N033 N032 R_NOISELESS 1e3
R59 N055 N056 R_NOISELESS 1e6
R60 N056 N057 R_NOISELESS 1e6
R67 N036 N035 R_NOISELESS 1e3
G15 MID VSENSE CLAMP MID 1e-3
V_ORp N020 VCLP 1.8
V_ORn N015 VCLP -1.8
E1 MID 0 N056 0 1
S8 N018 CLAMP CLAMP N018 OR_SW
S9 CLAMP N017 N017 CLAMP OR_SW
Xe_n N038 ESDp VNSE_TLV6001
Xi_nn ESDn MID FEMT_TLV6001
Xi_np N038 MID FEMT_TLV6001
XVCCS_LIMIT_1 N040 N044 MID N041 VCCS_LIM_1_TLV6001
XVCCS_LIMIT_2 N041 MID MID CLAMP VCCS_LIM_2_TLV6001
R44 N041 MID R_NOISELESS 1e6
R68 CLAMP MID R_NOISELESS 1e6
C20 CLAMP MID 84.3e-9
G7 MID N047 VSENSE MID 1e-6
R69 N047 MID R_NOISELESS 1e6
C25 N047 MID 5.3e-14
XOL_SENSE_TLV6001 MID N060 N059 N062 OL_SENSE_TLV6001
R31 N060 MID R_NOISELESS 1
R51 N060 SW_OL R_NOISELESS 100
C12 SW_OL MID 1e-12
H2 N058 MID V11 -1
H3 N061 MID V12 1
V11 N017 N016 0
V12 N018 N019 0
R77 N058 N059 R_NOISELESS 100
C28 N059 MID 1e-12
R78 N061 N062 R_NOISELESS 100
C29 N062 MID 1e-12
G14 MID N016 N015 MID 1
G16 MID N019 N020 MID 1
R75 N016 MID R_NOISELESS 1
R76 N019 MID R_NOISELESS 1
G17 0 VCC_B VCC 0 1
G18 0 VEE_B VEE 0 1
R79 VCC_B 0 R_NOISELESS 1
R80 VEE_B 0 R_NOISELESS 1
C27 N002 N001 21.22e-12
R81 N002 MID R_NOISELESS 5.64e3
R82 N002 N001 R_NOISELESS 1e8
G_adjust2 MID N001 ESDp MID 1.03
C14 N006 N007 13.26e-12
R48 N006 MID R_NOISELESS 2.82e3
R49 N006 N007 R_NOISELESS 1e8
G22 MID N007 VCC_B MID 998e-3
R88 N007 MID R_NOISELESS 1
C15 N005 N004 13.26e-12
R54 N005 MID R_NOISELESS 2.82e3
R55 N005 N004 R_NOISELESS 1e8
G4 MID N004 VEE_B MID 998e-3
R56 N004 MID R_NOISELESS 1
Rx N053 N052 R_NOISELESS 1e6
Rdummy N053 MID R_NOISELESS 1e5
G6 MID N048 CL_CLAMP N053 89.3
Rdc1 N048 MID R_NOISELESS 1
R32 N048 N049 R_NOISELESS 1e4
R50 N049 MID R_NOISELESS 2.65e3
G10 MID N050 N049 MID 4.77
C16 N049 N048 5.31e-6
R63 N050 MID R_NOISELESS 1
R64 N050 N051 R_NOISELESS 1e4
R65 N051 MID R_NOISELESS 10.01
C22 N051 N050 159e-15
R89 N001 MID R_NOISELESS 1
S2 VCC ESDn ESDn VCC ESD_SW
S3 VCC ESDp ESDp VCC ESD_SW
S4 ESDn VEE VEE ESDn ESD_SW
S5 ESDp VEE VEE ESDp ESD_SW
E2 N046 MID OUT MID 1
R10 MID N046 R_NOISELESS 1e9
H1 N045 MID V4 1e3
R11 MID N045 R_NOISELESS 1e9
S6 VCC OUT OUT VCC ESD_SW
S7 OUT VEE VEE OUT ESD_SW
S1 N049 N048 SW_OL MID OL_SW
XVCCS_LIM_ZO_TLV6001 N051 MID MID N052 VCCS_LIM_ZO_TLV6001
R57 N052 MID R_NOISELESS 1
.ends TLV6001
*
.SUBCKT VOS_DRIFT_TLV6001 VOS+ VOS-
.PARAM DC = 595.218e-6
.PARAM POL = 1
.PARAM DRIFT = 2.00E-06
E1 VOS+ VOS- VALUE={DC+POL*DRIFT*(TEMP-27)}
.ENDS
*
.subckt CLAMP_AMP_HI_TLV6001 VC+ VC- VIN COM VO+ VO-
.param G=10
GVo+ COM Vo+ Value = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)}
GVo- COM Vo- Value = {IF(V(VIN,COM)<V(VC-,COM),((V(VC-,COM)-V(VIN,COM))*G),0)}
.ends CLAMP_AMP_HI_TLV6001
*
.subckt FEMT_TLV6001 1 2
.PARAM NVRF=5
.PARAM RNVF={1.184*PWR(NVRF,2)}
E1 3 0 5 0 10
R1 5 0 {RNVF}
R2 5 0 {RNVF}
G1 1 2 3 0 1E-6
.ENDS
*
.subckt VCCS_EXT_LIM_TLV6001 VIN+ VIN- IOUT- IOUT+ VP+ VP-
.param Gain = 1
G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VIN+,VIN-),V(VP-,VIN-), V(VP+,VIN-))}
.ends VCCS_EXT_LIM_TLV6001
*
.subckt VCCS_LIM_3_TLV6001 VC+ VC- IOUT+ IOUT-
.param Gain = 1
.param Ipos = 320e-3
.param Ineg = -320e-3
G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)}
.ends VCCS_LIM_3_TLV6001
*
.subckt VCCS_LIM_4_TLV6001 VC+ VC- IOUT+ IOUT-
.param Gain = 1
.param Ipos = 640e-3
.param Ineg = -640e-3
G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)}
.ends VCCS_LIM_4_TLV6001
*
.subckt VCCS_LIM_CLAWp_TLV6001 VC+ VC- IOUT+ IOUT-
G1 IOUT+ IOUT- TABLE {(V(VC+,VC-))} =
+(0, 0.663e-5)
+(4.78, 2.7e-4)
+(8.3, 5.02e-4)
+(11.3, 8.03e-4)
+(12.2, 9.18e-4)
+(13.5, 1.4e-3)
.ends VCCS_LIM_CLAWp_TLV6001
*
.subckt VCCS_LIM_CLAWn_TLV6001 VC+ VC- IOUT+ IOUT-
G1 IOUT+ IOUT- TABLE {(V(VC+,VC-))} =
+(0, 0.664e-5)
+(3.1, 1.77e-4)
+(6.1, 3.6e-4)
+(9.2, 5.67e-4)
+(11.2, 7.51e-4)
+(12.1, 8.9e-4)
+(12.5, 1.01e-3)
.ends VCCS_LIM_CLAWn_TLV6001
*
.subckt VCCS_LIM_IQ_TLV6001 VC+ VC- IOUT+ IOUT-
.param Gain = 1e-3
G1 IOUT+ IOUT- VALUE={IF( (V(VC+,VC-)<=0),0,Gain*V(VC+,VC-) )}
.ends VCCS_LIM_IQ_TLV6001
*
.subckt VNSE_TLV6001 1 2
.param FLW=1
.param NLF=134
.param NVR=25
.param GLF={PWR(FLW,0.25)*NLF/1164}
.param RNV={1.184*PWR(NVR,2)}
.model DVN D KF={PWR(FLW,0.5)/1E11} IS=1.0E-16
I1 0 7 10E-3
I2 0 8 10E-3
D1 7 0 DVN
D2 8 0 DVN
E1 3 6 7 8 {GLF}
R1 3 0 1E9
R2 3 0 1E9
R3 3 6 1E9
E2 6 4 5 0 10
R4 5 0 {RNV}
R5 5 0 {RNV}
R6 3 4 1E9
R7 4 0 1E9
E3 1 2 3 4 1
.ends VNSE_TLV6001
*
.subckt CLAMP_AMP_LO_TLV6001 VC+ VC- VIN COM VO+ VO-
.param G=1
GVo+ COM Vo+ Value = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)}
GVo- COM Vo- Value = {IF(V(VIN,COM)<V(VC-,COM),((V(VC-,COM)-V(VIN,COM))*G),0)}
.ends CLAMP_AMP_LO_TLV6001
*
.subckt VCCS_LIM_GR_TLV6001 VC+ VC- IOUT+ IOUT-
.param Gain = 1
.param Ipos =110e-3
.param Ineg = -110e-3
G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)}
.ends VCCS_LIM_GR_TLV6001
*
.subckt VCCS_LIM_1_TLV6001 VC+ VC- IOUT+ IOUT-
.param Gain = 1e-4
.param Ipos = .5
.param Ineg = -.5
G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)}
.ends VCCS_LIM_1_TLV6001
*
.subckt VCCS_LIM_2_TLV6001 VC+ VC- IOUT+ IOUT-
.param Gain = 71e-4
.param Ipos = 53.1e-3
.param Ineg = -53.1e-3
G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)}
.ends VCCS_LIM_2_TLV6001
*
.subckt OL_SENSE_TLV6001 1 2 3 4
GSW+ 1 2 Value = {IF((V(3,1)>10e-3 | V(4,1)>10e-3),1,0)}
.ends OL_SENSE_TLV6001
*
.subckt VCCS_LIM_ZO_TLV6001 VC+ VC- IOUT+ IOUT-
.param Gain = 1e3
.param Ipos =30e3
.param Ineg = -30e3
G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)}
.ends VCCS_LIM_ZO_TLV6001
*

View File

@ -0,0 +1,422 @@
* TLV9002 - Rev. C
* Created by Paul Goedeke; May 01, 2018 - Revised by GPAMPS Team; 2021-06-10
* Created with Green-Williams-Lis Op Amp Macro-model Architecture
* Copyright 2018 by Texas Instruments Corporation
******************************************************
* MACRO-MODEL SIMULATED PARAMETERS:
******************************************************
* OPEN-LOOP GAIN AND PHASE VS. FREQUENCY WITH RL, CL EFFECTS (Aol)
* UNITY GAIN BANDWIDTH (GBW)
* INPUT COMMON-MODE REJECTION RATIO VS. FREQUENCY (CMRR)
* POWER SUPPLY REJECTION RATIO VS. FREQUENCY (PSRR)
* DIFFERENTIAL INPUT IMPEDANCE (Zid)
* COMMON-MODE INPUT IMPEDANCE (Zic)
* OPEN-LOOP OUTPUT IMPEDANCE VS. FREQUENCY (Zo)
* OUTPUT CURRENT THROUGH THE SUPPLY (Iout)
* INPUT VOLTAGE NOISE DENSITY VS. FREQUENCY (en)
* INPUT CURRENT NOISE DENSITY VS. FREQUENCY (in)
* OUTPUT VOLTAGE SWING vs. OUTPUT CURRENT (Vo)
* SHORT-CIRCUIT OUTPUT CURRENT (Isc)
* QUIESCENT CURRENT (Iq)
* SETTLING TIME VS. CAPACITIVE LOAD (ts)
* SLEW RATE (SR)
* SMALL SIGNAL OVERSHOOT VS. CAPACITIVE LOAD
* LARGE SIGNAL RESPONSE
* OVERLOAD RECOVERY TIME (tor)
* INPUT BIAS CURRENT (Ib)
* INPUT OFFSET CURRENT (Ios)
* INPUT OFFSET VOLTAGE (Vos)
* INPUT COMMON-MODE VOLTAGE RANGE (Vcm)
* INPUT OFFSET VOLTAGE VS. INPUT COMMON-MODE VOLTAGE (Vos vs. Vcm)
* INPUT/OUTPUT ESD CELLS (ESDin, ESDout)
******************************************************
.subckt TLV9002 IN+ IN- VCC VEE OUT
******************************************************
* MODEL DEFINITIONS:
.model BB_SW VSWITCH(Ron=50 Roff=1e12 Von=700e-3 Voff=0)
.model ESD_SW VSWITCH(Ron=50 Roff=1e12 Von=250e-3 Voff=0)
.model OL_SW VSWITCH(Ron=1e-3 Roff=1e9 Von=900e-3 Voff=800e-3)
.model OR_SW VSWITCH(Ron=10e-3 Roff=1e9 Von=1e-3 Voff=0)
.model R_NOISELESS RES(T_ABS=-273.15)
******************************************************
I_OS ESDn MID 3P
I_B 33 MID 5P
V_GRp 58 MID 180
V_GRn 59 MID -180
V_ISCp 52 MID 42
V_ISCn 53 MID -42
V_ORn 41 VCLP -1.22
V11 57 40 0
V_ORp 39 VCLP 1.22
V12 56 38 0
V4 29 OUT 0
VCM_MIN 79 VEE_B -100M
VCM_MAX 80 VCC_B 100M
I_Q VCC VEE 60U
V_OS 22 33 396.11U
XVOS_VCM 21 22 VCC VEE VOS_SRC_0
C30 23 24 15.92U
R85 24 MID R_NOISELESS 30K
R84 24 23 R_NOISELESS 10K
R83 23 MID R_NOISELESS 1
GVCCS10 26 MID 25 MID -1
C29 27 MID 19.89F
R82 25 27 R_NOISELESS 10K
R81 25 28 R_NOISELESS 70K
R80 28 MID R_NOISELESS 1
GVCCS9 28 MID 24 MID -3.8
GVCCS4 23 MID CL_CLAMP 29 -87
R79 30 MID R_NOISELESS 1
XU1 31 MID MID 30 VCCS_LIM_ZO_0
R78 31 MID R_NOISELESS 101
C22 31 26 15.92F
R65 31 26 R_NOISELESS 10K
R64 26 MID R_NOISELESS 1
R63 29 30 R_NOISELESS 400K
XCLAWn MID VIMON VEE_B 32 VCCS_LIM_CLAW-_0
Xe_n ESDp 33 VNSE_0
Xi_nn ESDn MID FEMT_0_0
Xi_np MID 33 FEMT_0_0
S5 VEE ESDp VEE ESDp S_VSWITCH_1
S4 VEE ESDn VEE ESDn S_VSWITCH_2
S2 ESDn VCC ESDn VCC S_VSWITCH_3
S3 ESDp VCC ESDp VCC S_VSWITCH_4
C28 34 MID 1P
R77 35 34 R_NOISELESS 100
C27 36 MID 1P
R76 37 36 R_NOISELESS 100
R75 MID 38 R_NOISELESS 1
GVCCS8 38 MID 39 MID -1
R74 40 MID R_NOISELESS 1
GVCCS7 40 MID 41 MID -1
C25 42 MID 25F
R69 MID 42 R_NOISELESS 1MEG
GVCCS6 42 MID VSENSE MID -1U
C20 CLAMP MID 151.6N
R68 MID CLAMP R_NOISELESS 1MEG
XVCCS_LIM_2 43 MID MID CLAMP VCCS_LIM_2_0
R44 MID 43 R_NOISELESS 1MEG
XVCCS_LIM_1 44 45 MID 43 VCCS_LIM_1_0
Rdummy MID 29 R_NOISELESS 40K
R61 MID 46 R_NOISELESS 273.3609
C16 46 47 1.1018N
R58 47 46 R_NOISELESS 100MEG
GVCCS2 47 MID VEE_B MID -258.98M
R57 MID 47 R_NOISELESS 1
R56 MID 48 R_NOISELESS 273.3609
C15 48 49 1.1018N
R55 49 48 R_NOISELESS 100MEG
GVCCS1 49 MID VCC_B MID -258.98M
R54 MID 49 R_NOISELESS 1
R49 MID 50 R_NOISELESS 337.4K
C14 50 51 591.7F
R48 51 50 R_NOISELESS 100MEG
G_adjust 51 MID ESDp MID -44.81M
Rsrc MID 51 R_NOISELESS 1
XIQPos VIMON MID MID VCC VCCS_LIMIT_IQ_0
XIQNeg MID VIMON VEE MID VCCS_LIMIT_IQ_0
C_DIFF ESDp ESDn 1P
XCL_AMP 52 53 VIMON MID 54 55 CLAMP_AMP_LO_0
SOR_SWp CLAMP 56 CLAMP 56 S_VSWITCH_5
SOR_SWn 57 CLAMP 57 CLAMP S_VSWITCH_6
XGR_AMP 58 59 60 MID 61 62 CLAMP_AMP_HI_0
R39 58 MID R_NOISELESS 1T
R37 59 MID R_NOISELESS 1T
R42 VSENSE 60 R_NOISELESS 1M
C19 60 MID 1F
R38 61 MID R_NOISELESS 1
R36 MID 62 R_NOISELESS 1
R40 61 63 R_NOISELESS 1M
R41 62 64 R_NOISELESS 1M
C17 63 MID 1F
C18 MID 64 1F
XGR_SRC 63 64 CLAMP MID VCCS_LIM_GR_0
R21 54 MID R_NOISELESS 1
R20 MID 55 R_NOISELESS 1
R29 54 65 R_NOISELESS 1M
R30 55 66 R_NOISELESS 1M
C9 65 MID 1F
C8 MID 66 1F
XCL_SRC 65 66 CL_CLAMP MID VCCS_LIM_4_0
R22 52 MID R_NOISELESS 1T
R19 MID 53 R_NOISELESS 1T
XCLAWp VIMON MID 67 VCC_B VCCS_LIM_CLAW+_0
R12 67 VCC_B R_NOISELESS 1K
R16 67 68 R_NOISELESS 1M
R13 VEE_B 32 R_NOISELESS 1K
R17 69 32 R_NOISELESS 1M
C6 69 MID 1F
C5 MID 68 1F
G2 VCC_CLP MID 68 MID -1M
R15 VCC_CLP MID R_NOISELESS 1K
G3 VEE_CLP MID 69 MID -1M
R14 MID VEE_CLP R_NOISELESS 1K
XCLAW_AMP VCC_CLP VEE_CLP VOUT_S MID 70 71 CLAMP_AMP_LO_0
R26 VCC_CLP MID R_NOISELESS 1T
R23 VEE_CLP MID R_NOISELESS 1T
R25 70 MID R_NOISELESS 1
R24 MID 71 R_NOISELESS 1
R27 70 72 R_NOISELESS 1M
R28 71 73 R_NOISELESS 1M
C11 72 MID 1F
C10 MID 73 1F
XCLAW_SRC 72 73 CLAW_CLAMP MID VCCS_LIM_3_0
H2 37 MID V11 -1
H3 35 MID V12 1
C12 SW_OL MID 100P
R32 74 SW_OL R_NOISELESS 100
R31 74 MID R_NOISELESS 1
XOL_SENSE MID 74 36 34 OL_SENSE_0
S1 23 24 SW_OL MID S_VSWITCH_7
H1 75 MID V4 1K
S7 VEE OUT VEE OUT S_VSWITCH_8
S6 OUT VCC OUT VCC S_VSWITCH_9
R11 MID 76 R_NOISELESS 1T
R18 76 VOUT_S R_NOISELESS 100
C7 VOUT_S MID 1P
E5 76 MID OUT MID 1
C13 VIMON MID 1N
R33 75 VIMON R_NOISELESS 100
R10 MID 75 R_NOISELESS 1T
R47 77 VCLP R_NOISELESS 100
C24 VCLP MID 100P
E4 77 MID CL_CLAMP MID 1
R46 MID CL_CLAMP R_NOISELESS 1K
G9 CL_CLAMP MID CLAW_CLAMP MID -1M
R45 MID CLAW_CLAMP R_NOISELESS 1K
G8 CLAW_CLAMP MID 42 MID -1M
R43 MID VSENSE R_NOISELESS 1K
G15 VSENSE MID CLAMP MID -1M
C4 44 MID 1F
R9 44 78 R_NOISELESS 1M
R7 MID 79 R_NOISELESS 1T
R6 80 MID R_NOISELESS 1T
R8 MID 78 R_NOISELESS 1
XVCM_CLAMP 81 MID 78 MID 80 79 VCCS_EXT_LIM_0
E1 MID 0 82 0 1
R89 VEE_B 0 R_NOISELESS 1
R5 83 VEE_B R_NOISELESS 1M
C3 83 0 1F
R60 82 83 R_NOISELESS 1MEG
C1 82 0 100e-9
R3 82 0 R_NOISELESS 1T
R59 84 82 R_NOISELESS 1MEG
C2 84 0 1F
R4 VCC_B 84 R_NOISELESS 1M
R88 VCC_B 0 R_NOISELESS 1
G17 VEE_B 0 VEE 0 -1
G16 VCC_B 0 VCC 0 -1
R_PSR 85 81 R_NOISELESS 1K
G_PSR 81 85 48 46 -1M
R2 45 ESDn R_NOISELESS 1M
R1 85 86 R_NOISELESS 1M
R_CMR 21 86 R_NOISELESS 1K
G_CMR 86 21 50 MID -1M
C_CMn ESDn MID 5P
C_CMp MID ESDp 5P
R53 ESDn MID R_NOISELESS 1T
R52 MID ESDp R_NOISELESS 1T
R35 IN- ESDn R_NOISELESS 10M
R34 IN+ ESDp R_NOISELESS 10M
.MODEL S_VSWITCH_1 VSWITCH (RON=50 ROFF=1T VON=500M VOFF=100M)
.MODEL S_VSWITCH_2 VSWITCH (RON=50 ROFF=1T VON=500M VOFF=100M)
.MODEL S_VSWITCH_3 VSWITCH (RON=50 ROFF=1T VON=500M VOFF=100M)
.MODEL S_VSWITCH_4 VSWITCH (RON=50 ROFF=1T VON=500M VOFF=100M)
.MODEL S_VSWITCH_5 VSWITCH (RON=10M ROFF=1T VON=10M VOFF=0)
.MODEL S_VSWITCH_6 VSWITCH (RON=10M ROFF=1T VON=10M VOFF=0)
.MODEL S_VSWITCH_7 VSWITCH (RON=1M ROFF=1T VON=500M VOFF=100M)
.MODEL S_VSWITCH_8 VSWITCH (RON=50 ROFF=1T VON=500M VOFF=100M)
.MODEL S_VSWITCH_9 VSWITCH (RON=50 ROFF=1T VON=500M VOFF=100M)
.ENDS TLV9002
*
.SUBCKT VOS_SRC_0 V+ V- REF+ REF-
E1 V+ 1 TABLE {(V(REF+, V-))} =
+(0, 0.8E-3)
+(1, 0.8E-3)
+(1.3, 0)
+(5.5, 0)
E2 1 V- TABLE {(V(V-, REF-))}=
+(-0.7, -2E-4)
+(-0.5, -2E-4)
+(-0.4, 0)
+(5.5, 0)
.ENDS VOS_SRC_0
*
.SUBCKT VCCS_LIM_ZO_0 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 100
.PARAM IPOS = 35E3
.PARAM INEG = -35E3
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIM_CLAW-_0 VC+ VC- IOUT+ IOUT-
G1 IOUT+ IOUT- TABLE {ABS(V(VC+,VC-))} =
+(00.0000, 0.00001)
+(14.0000, 0.000379)
+(28.0000, 0.000877)
+(37.3333, 0.001382)
+(37.8000, 0.00142)
+(38.7333, 0.001493)
+(39.6667, 0.001583)
+(40.6000, 0.001703)
+(41.5333, 0.00191)
+(42.0000, 0.00204)
.ENDS VCCS_LIM_CLAW-_0
*
.SUBCKT VNSE_0 1 2
.PARAM FLW=10
.PARAM NLF=115
.PARAM NVR=27
.PARAM GLF={PWR(FLW,0.25)*NLF/1164}
.PARAM RNV={1.184*PWR(NVR,2)}
.MODEL DVN D KF={PWR(FLW,0.5)/1E11} IS=1.0E-16
I1 0 7 10E-3
I2 0 8 10E-3
D1 7 0 DVN
D2 8 0 DVN
E1 3 6 7 8 {GLF}
R1 3 0 1E9
R2 3 0 1E9
R3 3 6 1E9
E2 6 4 5 0 10
R4 5 0 {RNV}
R5 5 0 {RNV}
R6 3 4 1E9
R7 4 0 1E9
E3 1 2 3 4 1
.ENDS
*
.SUBCKT FEMT_0_0 1 2
.PARAM FLWF=0.001
.PARAM NLFF=23
.PARAM NVRF=23
.PARAM GLFF={PWR(FLWF,0.25)*NLFF/1164}
.PARAM RNVF={1.184*PWR(NVRF,2)}
.MODEL DVNF D KF={PWR(FLWF,0.5)/1E11} IS=1.0E-16
I1 0 7 10E-3
I2 0 8 10E-3
D1 7 0 DVNF
D2 8 0 DVNF
E1 3 6 7 8 {GLFF}
R1 3 0 1E9
R2 3 0 1E9
R3 3 6 1E9
E2 6 4 5 0 10
R4 5 0 {RNVF}
R5 5 0 {RNVF}
R6 3 4 1E9
R7 4 0 1E9
G1 1 2 3 4 1E-6
.ENDS
*
.SUBCKT VCCS_LIM_2_0 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 11.15E-3
.PARAM IPOS = 0.352
.PARAM INEG = -0.352
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIM_1_0 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1E-4
.PARAM IPOS = .5
.PARAM INEG = -.5
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIMIT_IQ_0 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1E-3
G1 IOUT- IOUT+ VALUE={IF( (V(VC+,VC-)<=0),0,GAIN*V(VC+,VC-) )}
.ENDS
*
.SUBCKT CLAMP_AMP_LO_0 VC+ VC- VIN COM VO+ VO-
.PARAM G=1
GVO+ COM VO+ VALUE = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)}
GVO- COM VO- VALUE = {IF(V(VIN,COM)<V(VC-,COM),((V(VC-,COM)-V(VIN,COM))*G),0)}
.ENDS
*
.SUBCKT CLAMP_AMP_HI_0 VC+ VC- VIN COM VO+ VO-
.PARAM G=10
GVO+ COM VO+ VALUE = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)}
GVO- COM VO- VALUE = {IF(V(VIN,COM)<V(VC-,COM),((V(VC-,COM)-V(VIN,COM))*G),0)}
.ENDS
*
.SUBCKT VCCS_LIM_GR_0 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1
.PARAM IPOS = 0.7
.PARAM INEG = -0.7
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIM_4_0 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1
.PARAM IPOS = 0.8
.PARAM INEG = -0.8
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT VCCS_LIM_CLAW+_0 VC+ VC- IOUT+ IOUT-
G1 IOUT+ IOUT- TABLE {ABS(V(VC+,VC-))} =
+(00.00, 0.000010)
+(13.67, 0.0003467)
+(27.33, 0.0007994)
+(36.44, 0.001309)
+(36.90, 0.001351)
+(37.81, 0.001455)
+(38.72, 0.001600)
+(39.63, 0.001812)
+(40.54, 0.002117)
+(41.00, 0.002292)
.ENDS VCCS_LIM_CLAW+_0
*
.SUBCKT VCCS_LIM_3_0 VC+ VC- IOUT+ IOUT-
.PARAM GAIN = 1
.PARAM IPOS = 0.400
.PARAM INEG = -0.400
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VC+,VC-),INEG,IPOS)}
.ENDS
*
.SUBCKT OL_SENSE_0 COM SW+ OLN OLP
GSW+ COM SW+ VALUE = {IF((V(OLN,COM)>10E-3 | V(OLP,COM)>10E-3),1,0)}
.ENDS
*
.SUBCKT VCCS_EXT_LIM_0 VIN+ VIN- IOUT- IOUT+ VP+ VP-
.PARAM GAIN = 1
G1 IOUT+ IOUT- VALUE={LIMIT(GAIN*V(VIN+,VIN-),V(VP-,VIN-), V(VP+,VIN-))}
.ENDS
*

Some files were not shown because too many files have changed in this diff Show More