From 246319682f60293b132fca1ce6e24689c6682617 Mon Sep 17 00:00:00 2001 From: rahulp13 Date: Fri, 28 Feb 2020 11:38:58 +0530 Subject: initial commit --- Windows/Installation.txt | 5 + Windows/LICENSE.rtf | 885 ++ Windows/dateutil/__init__.py | 8 + Windows/dateutil/_common.py | 43 + Windows/dateutil/_version.py | 4 + Windows/dateutil/easter.py | 89 + Windows/dateutil/parser/__init__.py | 60 + Windows/dateutil/parser/_parser.py | 1580 +++ Windows/dateutil/parser/isoparser.py | 411 + Windows/dateutil/relativedelta.py | 599 + Windows/dateutil/rrule.py | 1736 +++ Windows/dateutil/test/__init__.py | 0 Windows/dateutil/test/_common.py | 275 + Windows/dateutil/test/conftest.py | 41 + .../dateutil/test/property/test_isoparse_prop.py | 27 + Windows/dateutil/test/property/test_parser_prop.py | 22 + Windows/dateutil/test/test_easter.py | 93 + Windows/dateutil/test/test_import_star.py | 33 + Windows/dateutil/test/test_imports.py | 166 + Windows/dateutil/test/test_internals.py | 95 + Windows/dateutil/test/test_isoparser.py | 516 + Windows/dateutil/test/test_parser.py | 856 ++ Windows/dateutil/test/test_relativedelta.py | 696 ++ Windows/dateutil/test/test_rrule.py | 4915 ++++++++ Windows/dateutil/test/test_tz.py | 2781 +++++ Windows/dateutil/test/test_utils.py | 53 + Windows/dateutil/tz/__init__.py | 17 + Windows/dateutil/tz/_common.py | 419 + Windows/dateutil/tz/_factories.py | 73 + Windows/dateutil/tz/tz.py | 1836 +++ Windows/dateutil/tz/win.py | 370 + Windows/dateutil/tzwin.py | 2 + Windows/dateutil/utils.py | 71 + Windows/dateutil/zoneinfo/__init__.py | 167 + Windows/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz | Bin 0 -> 154405 bytes Windows/dateutil/zoneinfo/rebuild.py | 53 + .../PyQt4-4.10.4-gpl-Py3.3-Qt4.8.5-x32.exe | Bin 0 -> 28799581 bytes Windows/dependencies/library/eSim_Analog.dcm | 3 + Windows/dependencies/library/eSim_Analog.lib | 234 + Windows/dependencies/library/eSim_Devices.dcm | 46 + Windows/dependencies/library/eSim_Devices.lib | 253 + Windows/dependencies/library/eSim_Digital.dcm | 3 + Windows/dependencies/library/eSim_Digital.lib | 384 + Windows/dependencies/library/eSim_Hybrid.dcm | 3 + Windows/dependencies/library/eSim_Hybrid.lib | 340 + .../dependencies/library/eSim_Miscellaneous.dcm | 3 + .../dependencies/library/eSim_Miscellaneous.lib | 129 + Windows/dependencies/library/eSim_PSpice.dcm | 3 + Windows/dependencies/library/eSim_PSpice.lib | 12485 +++++++++++++++++++ Windows/dependencies/library/eSim_Plot.dcm | 3 + Windows/dependencies/library/eSim_Plot.lib | 84 + Windows/dependencies/library/eSim_Power.dcm | 7 + Windows/dependencies/library/eSim_Power.lib | 84 + Windows/dependencies/library/eSim_Sources.dcm | 3 + Windows/dependencies/library/eSim_Sources.lib | 220 + Windows/dependencies/library/eSim_Subckt.dcm | 7 + Windows/dependencies/library/eSim_Subckt.lib | 89 + Windows/dependencies/library/eSim_User.dcm | 3 + Windows/dependencies/library/eSim_User.lib | 4 + .../dependencies/matplotlib-1.4.0.win32-py3.3.exe | Bin 0 -> 3988767 bytes .../numpy-1.9.0-win32-superpack-python3.3.exe | Bin 0 -> 8959243 bytes .../dependencies/pyparsing-2.0.2.win32-py3.3.exe | Bin 0 -> 232538 bytes Windows/dependencies/python-3.3.0.msi | Bin 0 -> 19980288 bytes Windows/dependencies/template/kicad.pro | 73 + Windows/esim-setup-script.nsi | 251 + Windows/logo.ico | Bin 0 -> 99678 bytes Windows/six/six.py | 952 ++ Windows/spice/ReleaseNotes.txt | 27 + Windows/spice/bin/libfftw3-3.dll | Bin 0 -> 2365756 bytes Windows/spice/bin/ngspice.exe | Bin 0 -> 4744192 bytes Windows/spice/bin/vcomp100.dll | Bin 0 -> 51024 bytes Windows/spice/doc/ANALYSES | 115 + Windows/spice/doc/AUTHORS | 76 + Windows/spice/doc/BUGS | 38 + Windows/spice/doc/COPYING | 613 + Windows/spice/doc/DEVICES | 854 ++ Windows/spice/doc/FAQ | 376 + Windows/spice/doc/INSTALL | 699 ++ Windows/spice/doc/NEWS | 578 + Windows/spice/doc/README | 54 + Windows/spice/doc/ngspice26-manual.pdf | Bin 0 -> 2141771 bytes Windows/spice/examples/Monte_Carlo/MC_2_circ.sp | 109 + Windows/spice/examples/Monte_Carlo/MC_2_control.sp | 43 + Windows/spice/examples/Monte_Carlo/MC_ring.sp | 251 + Windows/spice/examples/Monte_Carlo/MonteCarlo.sp | 68 + Windows/spice/examples/Monte_Carlo/OpWien.sp | 87 + Windows/spice/examples/TransImpedanceAmp/README | 41 + .../spice/examples/TransImpedanceAmp/output.net | 454 + .../examples/TransmissionLines/cpl1_4_line.sp | 63 + .../examples/TransmissionLines/cpl2_2_line.sp | 46 + .../examples/TransmissionLines/cpl3_4_line.sp | 37 + .../examples/TransmissionLines/cpl4_txl_2_line.sp | 378 + .../spice/examples/TransmissionLines/cpl_ibm1.sp | 82 + .../spice/examples/TransmissionLines/cpl_ibm2.sp | 22 + .../spice/examples/TransmissionLines/cpl_ibm3.sp | 70 + .../examples/TransmissionLines/ltra1_1_line.sp | 19 + .../examples/TransmissionLines/ltra1_4_line.sp | 144 + .../examples/TransmissionLines/ltra2_2_line.sp | 24 + .../examples/TransmissionLines/ltra3_2_line.sp | 98 + .../examples/TransmissionLines/ltra4_1_line.sp | 239 + .../examples/TransmissionLines/ltra5_1_line.sp | 530 + .../examples/TransmissionLines/ltra6_2_line.sp | 394 + .../examples/TransmissionLines/ltra7_4_line.sp | 113 + .../examples/TransmissionLines/txl1_1_line.sp | 18 + .../examples/TransmissionLines/txl2_3_line.sp | 26 + .../examples/TransmissionLines/txl3_1_line.sp | 236 + .../examples/TransmissionLines/txl4_1_line.sp | 523 + Windows/spice/examples/cider/bicmos/bicmos.lib | 127 + Windows/spice/examples/cider/bicmos/bicmpd.cir | 26 + Windows/spice/examples/cider/bjt/astable.cir | 34 + Windows/spice/examples/cider/bjt/colposc.cir | 33 + Windows/spice/examples/cider/bjt/ecp.cir | 57 + Windows/spice/examples/cider/bjt/invchain.cir | 38 + Windows/spice/examples/cider/bjt/meclgate.cir | 74 + Windows/spice/examples/cider/bjt/pebjt.lib | 71 + Windows/spice/examples/cider/bjt/pz.cir | 16 + Windows/spice/examples/cider/bjt/rtlinv.cir | 29 + Windows/spice/examples/cider/bjt/vco.cir | 45 + Windows/spice/examples/cider/diode/diode.cir | 35 + Windows/spice/examples/cider/diode/diotran.cir | 31 + Windows/spice/examples/cider/diode/pindiode.cir | 42 + Windows/spice/examples/cider/jfet/jfet.cir | 36 + Windows/spice/examples/cider/mos/bootinv.cir | 59 + Windows/spice/examples/cider/mos/charge.cir | 57 + Windows/spice/examples/cider/mos/cmosinv.cir | 115 + Windows/spice/examples/cider/mos/nmosinv.cir | 55 + Windows/spice/examples/cider/mos/pass.cir | 59 + Windows/spice/examples/cider/mos/ringosc.cir | 122 + Windows/spice/examples/cider/parallel/BICMOS.LIB | 931 ++ Windows/spice/examples/cider/parallel/bicmpd.cir | 26 + Windows/spice/examples/cider/parallel/bicmpu.cir | 24 + Windows/spice/examples/cider/parallel/clkfeed.cir | 34 + Windows/spice/examples/cider/parallel/cmosamp.cir | 29 + Windows/spice/examples/cider/parallel/eclinv.cir | 30 + Windows/spice/examples/cider/parallel/ecpal.cir | 19 + Windows/spice/examples/cider/parallel/foobar | 10 + Windows/spice/examples/cider/parallel/gmamp.cir | 34 + Windows/spice/examples/cider/parallel/latch.cir | 46 + Windows/spice/examples/cider/parallel/ppef.1d.cir | 25 + Windows/spice/examples/cider/parallel/ppef.2d.cir | 25 + Windows/spice/examples/cider/parallel/readme | 3 + .../spice/examples/cider/parallel/ringosc.1u.cir | 39 + .../spice/examples/cider/parallel/ringosc.2u.cir | 114 + Windows/spice/examples/cider/resistor/gaasres.cir | 30 + Windows/spice/examples/cider/resistor/sires.cir | 26 + Windows/spice/examples/cider/serial/astable.cir | 30 + Windows/spice/examples/cider/serial/charge.cir | 53 + Windows/spice/examples/cider/serial/colposc.cir | 29 + Windows/spice/examples/cider/serial/dbridge.cir | 30 + Windows/spice/examples/cider/serial/invchain.cir | 34 + Windows/spice/examples/cider/serial/meclgate.cir | 70 + Windows/spice/examples/cider/serial/nmosinv.cir | 51 + Windows/spice/examples/cider/serial/pass.cir | 55 + Windows/spice/examples/cider/serial/pullup.cir | 67 + Windows/spice/examples/cider/serial/readme | 3 + Windows/spice/examples/cider/serial/recovery.cir | 40 + Windows/spice/examples/cider/serial/rtlinv.cir | 25 + Windows/spice/examples/cider/serial/vco.cir | 41 + .../examples/control_structs/foreach_bjt_ft.sp | 51 + .../spice/examples/control_structs/new-check-3.sp | 96 + .../spice/examples/control_structs/new-check-4.sp | 111 + Windows/spice/examples/control_structs/repeat3.sp | 148 + Windows/spice/examples/control_structs/s-param.cir | 120 + Windows/spice/examples/measure/func_cap.sp | 15 + .../spice/examples/measure/inv-meas-tran-auto.sp | 103 + .../examples/measure/inv-meas-tran-control.sp | 113 + Windows/spice/examples/measure/inv-meas-tran.sp | 104 + Windows/spice/examples/measure/inv-meas-tran_oc.sp | 98 + .../spice/examples/measure/mos-meas-dc-control.sp | 49 + Windows/spice/examples/measure/mos-meas-dc.sp | 37 + .../spice/examples/measure/rc-meas-ac-control.sp | 64 + Windows/spice/examples/measure/rc-meas-ac.sp | 54 + Windows/spice/examples/measure/simple-meas-tran.sp | 57 + Windows/spice/examples/memristor/memristor.sp | 65 + Windows/spice/examples/memristor/memristor_x.sp | 83 + Windows/spice/examples/numparam/example.cir | 16 + Windows/spice/examples/numparam/pin.mod | 33 + Windows/spice/examples/numparam/pintest.cir | 32 + Windows/spice/examples/pss/colpitt_osc_pss.cir | 22 + .../examples/pss/compl_cross_quad_osc_pss.cir | 35 + Windows/spice/examples/pss/hartley_osc_pss.cir | 21 + Windows/spice/examples/pss/ring_osc_pss.cir | 29 + Windows/spice/examples/pss/vackar_osc_pss.cir | 21 + Windows/spice/examples/pss/vdp_osc_pss.cir | 17 + Windows/spice/examples/snapshot/adder_mos.cir | 26 + Windows/spice/examples/snapshot/adder_mos_circ.cir | 61 + .../spice/examples/snapshot/adder_snload.script | 15 + Windows/spice/examples/transient-noise/README | 15 + .../spice/examples/transient-noise/modelcard.nmos | 41 + .../spice/examples/transient-noise/modelcard.pmos | 31 + .../examples/transient-noise/noi-ring51-demo.cir | 59 + .../spice/examples/transient-noise/noi-sc-tr.cir | 53 + .../spice/examples/transient-noise/noilib-demo.h | 56 + .../spice/examples/transient-noise/noise_vnoi.cir | 31 + Windows/spice/examples/transient-noise/rts-1.cir | 29 + Windows/spice/examples/transient-noise/shot_ng.cir | 27 + Windows/spice/examples/various/FFT_Leakage.cir | 53 + Windows/spice/examples/various/FFT_tests.cir | 123 + Windows/spice/examples/various/adder_mos.cir | 79 + Windows/spice/examples/various/agauss_test.cir | 48 + Windows/spice/examples/various/gain_stage.cir | 34 + Windows/spice/examples/various/modelcard.nmos | 34 + Windows/spice/examples/various/modelcard.pmos | 29 + Windows/spice/examples/various/nic_soa.cir | 39 + Windows/spice/examples/various/param_sweep.cir | 29 + .../examples/xspice/analog_models1_transient.sp | 65 + Windows/spice/examples/xspice/delta-sigma/README | 25 + .../xspice/delta-sigma/count-latch-dac.cir | 81 + .../examples/xspice/delta-sigma/counter-test.cir | 42 + .../examples/xspice/delta-sigma/delta-sigma-1.cir | 106 + .../examples/xspice/delta-sigma/delta-sigma-oc.cir | 95 + .../examples/xspice/delta-sigma/mod1-ct-test.cir | 52 + .../spice/examples/xspice/delta-sigma/mod1-ct.cir | 46 + Windows/spice/examples/xspice/fstest.sp | 26 + Windows/spice/examples/xspice/pll/README | 39 + .../spice/examples/xspice/pll/f-p-det-d-sub.cir | 16 + .../spice/examples/xspice/pll/loop-filter-2.cir | 50 + Windows/spice/examples/xspice/pll/loop-filter.cir | 31 + .../spice/examples/xspice/pll/pll-xspice-fstep.cir | 165 + Windows/spice/examples/xspice/pll/pll-xspice.cir | 144 + .../spice/examples/xspice/pll/pll-xspice_oc.cir | 142 + Windows/spice/examples/xspice/pll/test-f-p-det.cir | 114 + Windows/spice/examples/xspice/pll/test_vco.cir | 158 + Windows/spice/examples/xspice/pll/vco_sub.cir | 67 + Windows/spice/examples/xspice/pll/vco_sub_new.cir | 30 + Windows/spice/examples/xspice/sine.m | 264 + Windows/spice/examples/xspice/xspice_c1.cir | 22 + Windows/spice/examples/xspice/xspice_c2.cir | 16 + Windows/spice/examples/xspice/xspice_c3.cir | 97 + Windows/spice/how-to-use-ngspice140111.txt | 359 + Windows/spice/lib/ngspice/analog.cm | Bin 0 -> 98816 bytes Windows/spice/lib/ngspice/digital.cm | Bin 0 -> 102912 bytes Windows/spice/lib/ngspice/spice2poly.cm | Bin 0 -> 15360 bytes Windows/spice/lib/ngspice/xtradev.cm | Bin 0 -> 39424 bytes Windows/spice/lib/ngspice/xtraevt.cm | Bin 0 -> 20480 bytes Windows/spice/share/man/man1/ngmultidec.1 | 105 + Windows/spice/share/man/man1/ngnutmeg.1 | 83 + Windows/spice/share/man/man1/ngsconvert.1 | 126 + Windows/spice/share/man/man1/ngspice.1 | 152 + Windows/spice/share/ngspice/scripts/ciderinit | 23 + Windows/spice/share/ngspice/scripts/devaxis | 69 + Windows/spice/share/ngspice/scripts/devload | 21 + Windows/spice/share/ngspice/scripts/setplot | 64 + Windows/spice/share/ngspice/scripts/spectrum | 165 + Windows/spice/share/ngspice/scripts/spinit | 31 + Windows/spice/tests/.gitignore | 8 + Windows/spice/tests/ChangeLog | 23 + Windows/spice/tests/Makefile.am | 50 + Windows/spice/tests/Makefile.in | 644 + Windows/spice/tests/README | 28 + Windows/spice/tests/bsim1/Makefile.am | 12 + Windows/spice/tests/bsim1/Makefile.in | 514 + Windows/spice/tests/bsim1/test.cir | 108 + Windows/spice/tests/bsim2/Makefile.am | 12 + Windows/spice/tests/bsim2/Makefile.in | 514 + Windows/spice/tests/bsim2/test.cir | 80 + Windows/spice/tests/bsim3/Makefile.am | 5 + Windows/spice/tests/bsim3/Makefile.in | 609 + Windows/spice/tests/bsim3/ac_sim/Makefile.am | 13 + Windows/spice/tests/bsim3/ac_sim/Makefile.in | 514 + Windows/spice/tests/bsim3/ac_sim/gain-stage.cir | 17 + Windows/spice/tests/bsim3/ac_sim/op-amp.cir | 37 + Windows/spice/tests/bsim3/dc_sim/Makefile.am | 28 + Windows/spice/tests/bsim3/dc_sim/Makefile.in | 529 + Windows/spice/tests/bsim3/dc_sim/modelcard.nmos | 41 + Windows/spice/tests/bsim3/dc_sim/modelcard.pmos | 31 + Windows/spice/tests/bsim3/dc_sim/test1.cir | 21 + Windows/spice/tests/bsim3/dc_sim/test10.cir | 19 + Windows/spice/tests/bsim3/dc_sim/test11.cir | 17 + Windows/spice/tests/bsim3/dc_sim/test12.cir | 17 + Windows/spice/tests/bsim3/dc_sim/test13.cir | 18 + Windows/spice/tests/bsim3/dc_sim/test14.cir | 19 + Windows/spice/tests/bsim3/dc_sim/test2.cir | 21 + Windows/spice/tests/bsim3/dc_sim/test3.cir | 21 + Windows/spice/tests/bsim3/dc_sim/test4.cir | 20 + Windows/spice/tests/bsim3/dc_sim/test5.cir | 22 + Windows/spice/tests/bsim3/dc_sim/test6.cir | 17 + Windows/spice/tests/bsim3/dc_sim/test7.cir | 20 + Windows/spice/tests/bsim3/dc_sim/test8.cir | 19 + Windows/spice/tests/bsim3/dc_sim/test9.cir | 19 + Windows/spice/tests/bsim3/tran_sim/Makefile.am | 13 + Windows/spice/tests/bsim3/tran_sim/Makefile.in | 514 + Windows/spice/tests/bsim3/tran_sim/comparator.cir | 40 + Windows/spice/tests/bsim3/tran_sim/one-shot.cir | 53 + Windows/spice/tests/bsim3soidd/Makefile.am | 20 + Windows/spice/tests/bsim3soidd/Makefile.in | 516 + Windows/spice/tests/bsim3soidd/RampVg2.cir | 19 + Windows/spice/tests/bsim3soidd/inv2.cir | 17 + Windows/spice/tests/bsim3soidd/lib.h | 110 + Windows/spice/tests/bsim3soidd/nmosdd.mod | 39 + Windows/spice/tests/bsim3soidd/pmosdd.mod | 39 + Windows/spice/tests/bsim3soidd/ring51.cir | 23 + Windows/spice/tests/bsim3soidd/t3.cir | 18 + Windows/spice/tests/bsim3soidd/t4.cir | 17 + Windows/spice/tests/bsim3soidd/t5.cir | 16 + Windows/spice/tests/bsim3soifd/Makefile.am | 20 + Windows/spice/tests/bsim3soifd/Makefile.in | 516 + Windows/spice/tests/bsim3soifd/RampVg2.cir | 19 + Windows/spice/tests/bsim3soifd/inv2.cir | 17 + Windows/spice/tests/bsim3soifd/lib.h | 110 + Windows/spice/tests/bsim3soifd/nmosfd.mod | 39 + Windows/spice/tests/bsim3soifd/pmosfd.mod | 39 + Windows/spice/tests/bsim3soifd/ring51.cir | 23 + Windows/spice/tests/bsim3soifd/t3.cir | 18 + Windows/spice/tests/bsim3soifd/t4.cir | 17 + Windows/spice/tests/bsim3soifd/t5.cir | 16 + Windows/spice/tests/bsim3soipd/Makefile.am | 20 + Windows/spice/tests/bsim3soipd/Makefile.in | 516 + Windows/spice/tests/bsim3soipd/RampVg2.cir | 20 + Windows/spice/tests/bsim3soipd/inv2.cir | 17 + Windows/spice/tests/bsim3soipd/lib.h | 110 + Windows/spice/tests/bsim3soipd/nmospd.mod | 40 + Windows/spice/tests/bsim3soipd/pmospd.mod | 40 + Windows/spice/tests/bsim3soipd/ring51.cir | 26 + Windows/spice/tests/bsim3soipd/t3.cir | 18 + Windows/spice/tests/bsim3soipd/t4.cir | 18 + Windows/spice/tests/bsim3soipd/t5.cir | 16 + Windows/spice/tests/filters/Makefile.am | 12 + Windows/spice/tests/filters/Makefile.in | 514 + Windows/spice/tests/filters/lowpass.cir | 13 + Windows/spice/tests/general/Makefile.am | 20 + Windows/spice/tests/general/Makefile.in | 521 + Windows/spice/tests/general/diffpair.cir | 31 + Windows/spice/tests/general/fourbitadder.cir | 79 + Windows/spice/tests/general/mosamp.cir | 46 + Windows/spice/tests/general/mosmem.cir | 31 + Windows/spice/tests/general/rc.cir | 11 + Windows/spice/tests/general/rca3040.cir | 34 + Windows/spice/tests/general/rtlinv.cir | 24 + Windows/spice/tests/general/schmitt.cir | 28 + Windows/spice/tests/hfet/Makefile.am | 14 + Windows/spice/tests/hfet/Makefile.in | 515 + Windows/spice/tests/hfet/id_vgs.cir | 14 + Windows/spice/tests/hfet/inverter.cir | 29 + Windows/spice/tests/jfet/Makefile.am | 12 + Windows/spice/tests/jfet/Makefile.in | 512 + Windows/spice/tests/jfet/jfet_vds-vgs.cir | 14 + Windows/spice/tests/mes/Makefile.am | 12 + Windows/spice/tests/mes/Makefile.in | 512 + Windows/spice/tests/mes/subth.cir | 17 + Windows/spice/tests/mesa/Makefile.am | 22 + Windows/spice/tests/mesa/Makefile.in | 519 + Windows/spice/tests/mesa/mesa-12.cir | 23 + Windows/spice/tests/mesa/mesa.cir | 16 + Windows/spice/tests/mesa/mesa11.cir | 18 + Windows/spice/tests/mesa/mesa12.cir | 17 + Windows/spice/tests/mesa/mesa13.cir | 16 + Windows/spice/tests/mesa/mesa14.cir | 19 + Windows/spice/tests/mesa/mesa15.cir | 17 + Windows/spice/tests/mesa/mesa21.cir | 19 + Windows/spice/tests/mesa/mesgout.cir | 37 + Windows/spice/tests/mesa/mesinv.cir | 49 + Windows/spice/tests/mesa/mesosc.cir | 41 + Windows/spice/tests/mos6/Makefile.am | 14 + Windows/spice/tests/mos6/Makefile.in | 515 + Windows/spice/tests/mos6/mos6inv.cir | 107 + Windows/spice/tests/mos6/simpleinv.cir | 45 + Windows/spice/tests/polezero/Makefile.am | 17 + Windows/spice/tests/polezero/Makefile.in | 519 + Windows/spice/tests/polezero/filt_bridge_t.cir | 13 + Windows/spice/tests/polezero/filt_multistage.cir | 14 + Windows/spice/tests/polezero/filt_rc.cir | 8 + Windows/spice/tests/polezero/pz2.cir | 25 + Windows/spice/tests/polezero/pzt.cir | 25 + Windows/spice/tests/polezero/simplepz.cir | 8 + Windows/spice/tests/regression/Makefile.am | 5 + Windows/spice/tests/regression/Makefile.in | 609 + .../tests/regression/lib-processing/Makefile.am | 13 + .../tests/regression/lib-processing/Makefile.in | 513 + .../spice/tests/regression/lib-processing/ex1.lib | 9 + .../spice/tests/regression/lib-processing/ex1a.cir | 29 + .../spice/tests/regression/lib-processing/ex1b.cir | 33 + .../spice/tests/regression/lib-processing/ex2.lib | 28 + .../spice/tests/regression/lib-processing/ex2a.cir | 33 + .../spice/tests/regression/lib-processing/ex3.lib | 18 + .../spice/tests/regression/lib-processing/ex3a.cir | 33 + .../tests/regression/lib-processing/extra3.lib | 9 + Windows/spice/tests/regression/parser/Makefile.am | 12 + Windows/spice/tests/regression/parser/Makefile.in | 512 + .../spice/tests/regression/parser/minus-minus.cir | 36 + .../spice/tests/regression/parser/xpressn-1.cir | 425 + .../spice/tests/regression/parser/xpressn-2.cir | 261 + .../tests/regression/subckt-processing/Makefile.am | 12 + .../tests/regression/subckt-processing/Makefile.in | 512 + .../regression/subckt-processing/model-scope-5.cir | 84 + Windows/spice/tests/resistance/Makefile.am | 14 + Windows/spice/tests/resistance/Makefile.in | 516 + Windows/spice/tests/resistance/res_array.cir | 28 + Windows/spice/tests/resistance/res_partition.cir | 11 + Windows/spice/tests/resistance/res_simple.cir | 10 + Windows/spice/tests/sensitivity/Makefile.am | 12 + Windows/spice/tests/sensitivity/Makefile.in | 512 + Windows/spice/tests/sensitivity/diffpair.cir | 33 + Windows/spice/tests/transient/Makefile.am | 12 + Windows/spice/tests/transient/Makefile.in | 512 + Windows/spice/tests/transient/fourbitadder.cir | 79 + Windows/spice/tests/transmission/Makefile.am | 18 + Windows/spice/tests/transmission/Makefile.in | 519 + Windows/spice/tests/transmission/cpl3_4_line.cir | 36 + Windows/spice/tests/transmission/cpl_ibm2.cir | 19 + Windows/spice/tests/transmission/ltra1_1_line.cir | 18 + Windows/spice/tests/transmission/ltra2_2_line.cir | 23 + Windows/spice/tests/transmission/txl1_1_line.cir | 17 + Windows/spice/tests/transmission/txl2_3_line.cir | 25 + Windows/spice/tests/vbic/CEamp.cir | 27 + Windows/spice/tests/vbic/FG.cir | 17 + Windows/spice/tests/vbic/FO.cir | 20 + Windows/spice/tests/vbic/Makefile.am | 19 + Windows/spice/tests/vbic/Makefile.in | 518 + Windows/spice/tests/vbic/diffamp.cir | 47 + Windows/spice/tests/vbic/noise_scale_test.cir | 27 + Windows/spice/tests/vbic/temp.cir | 19 + Windows/spice/tests/xspice/Makefile.am | 5 + Windows/spice/tests/xspice/Makefile.in | 609 + Windows/spice/tests/xspice/digital/Makefile.am | 18 + Windows/spice/tests/xspice/digital/Makefile.in | 523 + .../spice/tests/xspice/digital/d_ram-stimulus.txt | 36 + Windows/spice/tests/xspice/digital/d_ram.cir | 24 + .../tests/xspice/digital/d_source-stimulus.txt | 13 + Windows/spice/tests/xspice/digital/d_source.cir | 19 + .../tests/xspice/digital/d_state-stimulus.txt | 4 + .../spice/tests/xspice/digital/d_state-updn.txt | 16 + Windows/spice/tests/xspice/digital/d_state.cir | 35 + Windows/spice/tests/xspice/digital/spinit.in | 3 + 424 files changed, 70892 insertions(+) create mode 100644 Windows/Installation.txt create mode 100644 Windows/LICENSE.rtf create mode 100644 Windows/dateutil/__init__.py create mode 100644 Windows/dateutil/_common.py create mode 100644 Windows/dateutil/_version.py create mode 100644 Windows/dateutil/easter.py create mode 100644 Windows/dateutil/parser/__init__.py create mode 100644 Windows/dateutil/parser/_parser.py create mode 100644 Windows/dateutil/parser/isoparser.py create mode 100644 Windows/dateutil/relativedelta.py create mode 100644 Windows/dateutil/rrule.py create mode 100644 Windows/dateutil/test/__init__.py create mode 100644 Windows/dateutil/test/_common.py create mode 100644 Windows/dateutil/test/conftest.py create mode 100644 Windows/dateutil/test/property/test_isoparse_prop.py create mode 100644 Windows/dateutil/test/property/test_parser_prop.py create mode 100644 Windows/dateutil/test/test_easter.py create mode 100644 Windows/dateutil/test/test_import_star.py create mode 100644 Windows/dateutil/test/test_imports.py create mode 100644 Windows/dateutil/test/test_internals.py create mode 100644 Windows/dateutil/test/test_isoparser.py create mode 100644 Windows/dateutil/test/test_parser.py create mode 100644 Windows/dateutil/test/test_relativedelta.py create mode 100644 Windows/dateutil/test/test_rrule.py create mode 100644 Windows/dateutil/test/test_tz.py create mode 100644 Windows/dateutil/test/test_utils.py create mode 100644 Windows/dateutil/tz/__init__.py create mode 100644 Windows/dateutil/tz/_common.py create mode 100644 Windows/dateutil/tz/_factories.py create mode 100644 Windows/dateutil/tz/tz.py create mode 100644 Windows/dateutil/tz/win.py create mode 100644 Windows/dateutil/tzwin.py create mode 100644 Windows/dateutil/utils.py create mode 100644 Windows/dateutil/zoneinfo/__init__.py create mode 100644 Windows/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz create mode 100644 Windows/dateutil/zoneinfo/rebuild.py create mode 100644 Windows/dependencies/PyQt4-4.10.4-gpl-Py3.3-Qt4.8.5-x32.exe create mode 100644 Windows/dependencies/library/eSim_Analog.dcm create mode 100644 Windows/dependencies/library/eSim_Analog.lib create mode 100644 Windows/dependencies/library/eSim_Devices.dcm create mode 100644 Windows/dependencies/library/eSim_Devices.lib create mode 100644 Windows/dependencies/library/eSim_Digital.dcm create mode 100644 Windows/dependencies/library/eSim_Digital.lib create mode 100644 Windows/dependencies/library/eSim_Hybrid.dcm create mode 100644 Windows/dependencies/library/eSim_Hybrid.lib create mode 100644 Windows/dependencies/library/eSim_Miscellaneous.dcm create mode 100644 Windows/dependencies/library/eSim_Miscellaneous.lib create mode 100644 Windows/dependencies/library/eSim_PSpice.dcm create mode 100644 Windows/dependencies/library/eSim_PSpice.lib create mode 100644 Windows/dependencies/library/eSim_Plot.dcm create mode 100644 Windows/dependencies/library/eSim_Plot.lib create mode 100644 Windows/dependencies/library/eSim_Power.dcm create mode 100644 Windows/dependencies/library/eSim_Power.lib create mode 100644 Windows/dependencies/library/eSim_Sources.dcm create mode 100644 Windows/dependencies/library/eSim_Sources.lib create mode 100644 Windows/dependencies/library/eSim_Subckt.dcm create mode 100644 Windows/dependencies/library/eSim_Subckt.lib create mode 100644 Windows/dependencies/library/eSim_User.dcm create mode 100644 Windows/dependencies/library/eSim_User.lib create mode 100644 Windows/dependencies/matplotlib-1.4.0.win32-py3.3.exe create mode 100644 Windows/dependencies/numpy-1.9.0-win32-superpack-python3.3.exe create mode 100644 Windows/dependencies/pyparsing-2.0.2.win32-py3.3.exe create mode 100644 Windows/dependencies/python-3.3.0.msi create mode 100644 Windows/dependencies/template/kicad.pro create mode 100644 Windows/esim-setup-script.nsi create mode 100644 Windows/logo.ico create mode 100644 Windows/six/six.py create mode 100644 Windows/spice/ReleaseNotes.txt create mode 100644 Windows/spice/bin/libfftw3-3.dll create mode 100644 Windows/spice/bin/ngspice.exe create mode 100644 Windows/spice/bin/vcomp100.dll create mode 100644 Windows/spice/doc/ANALYSES create mode 100644 Windows/spice/doc/AUTHORS create mode 100644 Windows/spice/doc/BUGS create mode 100644 Windows/spice/doc/COPYING create mode 100644 Windows/spice/doc/DEVICES create mode 100644 Windows/spice/doc/FAQ create mode 100644 Windows/spice/doc/INSTALL create mode 100644 Windows/spice/doc/NEWS create mode 100644 Windows/spice/doc/README create mode 100644 Windows/spice/doc/ngspice26-manual.pdf create mode 100644 Windows/spice/examples/Monte_Carlo/MC_2_circ.sp create mode 100644 Windows/spice/examples/Monte_Carlo/MC_2_control.sp create mode 100644 Windows/spice/examples/Monte_Carlo/MC_ring.sp create mode 100644 Windows/spice/examples/Monte_Carlo/MonteCarlo.sp create mode 100644 Windows/spice/examples/Monte_Carlo/OpWien.sp create mode 100644 Windows/spice/examples/TransImpedanceAmp/README create mode 100644 Windows/spice/examples/TransImpedanceAmp/output.net create mode 100644 Windows/spice/examples/TransmissionLines/cpl1_4_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/cpl2_2_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/cpl3_4_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/cpl4_txl_2_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/cpl_ibm1.sp create mode 100644 Windows/spice/examples/TransmissionLines/cpl_ibm2.sp create mode 100644 Windows/spice/examples/TransmissionLines/cpl_ibm3.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra1_1_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra1_4_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra2_2_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra3_2_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra4_1_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra5_1_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra6_2_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/ltra7_4_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/txl1_1_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/txl2_3_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/txl3_1_line.sp create mode 100644 Windows/spice/examples/TransmissionLines/txl4_1_line.sp create mode 100644 Windows/spice/examples/cider/bicmos/bicmos.lib create mode 100644 Windows/spice/examples/cider/bicmos/bicmpd.cir create mode 100644 Windows/spice/examples/cider/bjt/astable.cir create mode 100644 Windows/spice/examples/cider/bjt/colposc.cir create mode 100644 Windows/spice/examples/cider/bjt/ecp.cir create mode 100644 Windows/spice/examples/cider/bjt/invchain.cir create mode 100644 Windows/spice/examples/cider/bjt/meclgate.cir create mode 100644 Windows/spice/examples/cider/bjt/pebjt.lib create mode 100644 Windows/spice/examples/cider/bjt/pz.cir create mode 100644 Windows/spice/examples/cider/bjt/rtlinv.cir create mode 100644 Windows/spice/examples/cider/bjt/vco.cir create mode 100644 Windows/spice/examples/cider/diode/diode.cir create mode 100644 Windows/spice/examples/cider/diode/diotran.cir create mode 100644 Windows/spice/examples/cider/diode/pindiode.cir create mode 100644 Windows/spice/examples/cider/jfet/jfet.cir create mode 100644 Windows/spice/examples/cider/mos/bootinv.cir create mode 100644 Windows/spice/examples/cider/mos/charge.cir create mode 100644 Windows/spice/examples/cider/mos/cmosinv.cir create mode 100644 Windows/spice/examples/cider/mos/nmosinv.cir create mode 100644 Windows/spice/examples/cider/mos/pass.cir create mode 100644 Windows/spice/examples/cider/mos/ringosc.cir create mode 100644 Windows/spice/examples/cider/parallel/BICMOS.LIB create mode 100644 Windows/spice/examples/cider/parallel/bicmpd.cir create mode 100644 Windows/spice/examples/cider/parallel/bicmpu.cir create mode 100644 Windows/spice/examples/cider/parallel/clkfeed.cir create mode 100644 Windows/spice/examples/cider/parallel/cmosamp.cir create mode 100644 Windows/spice/examples/cider/parallel/eclinv.cir create mode 100644 Windows/spice/examples/cider/parallel/ecpal.cir create mode 100644 Windows/spice/examples/cider/parallel/foobar create mode 100644 Windows/spice/examples/cider/parallel/gmamp.cir create mode 100644 Windows/spice/examples/cider/parallel/latch.cir create mode 100644 Windows/spice/examples/cider/parallel/ppef.1d.cir create mode 100644 Windows/spice/examples/cider/parallel/ppef.2d.cir create mode 100644 Windows/spice/examples/cider/parallel/readme create mode 100644 Windows/spice/examples/cider/parallel/ringosc.1u.cir create mode 100644 Windows/spice/examples/cider/parallel/ringosc.2u.cir create mode 100644 Windows/spice/examples/cider/resistor/gaasres.cir create mode 100644 Windows/spice/examples/cider/resistor/sires.cir create mode 100644 Windows/spice/examples/cider/serial/astable.cir create mode 100644 Windows/spice/examples/cider/serial/charge.cir create mode 100644 Windows/spice/examples/cider/serial/colposc.cir create mode 100644 Windows/spice/examples/cider/serial/dbridge.cir create mode 100644 Windows/spice/examples/cider/serial/invchain.cir create mode 100644 Windows/spice/examples/cider/serial/meclgate.cir create mode 100644 Windows/spice/examples/cider/serial/nmosinv.cir create mode 100644 Windows/spice/examples/cider/serial/pass.cir create mode 100644 Windows/spice/examples/cider/serial/pullup.cir create mode 100644 Windows/spice/examples/cider/serial/readme create mode 100644 Windows/spice/examples/cider/serial/recovery.cir create mode 100644 Windows/spice/examples/cider/serial/rtlinv.cir create mode 100644 Windows/spice/examples/cider/serial/vco.cir create mode 100644 Windows/spice/examples/control_structs/foreach_bjt_ft.sp create mode 100644 Windows/spice/examples/control_structs/new-check-3.sp create mode 100644 Windows/spice/examples/control_structs/new-check-4.sp create mode 100644 Windows/spice/examples/control_structs/repeat3.sp create mode 100644 Windows/spice/examples/control_structs/s-param.cir create mode 100644 Windows/spice/examples/measure/func_cap.sp create mode 100644 Windows/spice/examples/measure/inv-meas-tran-auto.sp create mode 100644 Windows/spice/examples/measure/inv-meas-tran-control.sp create mode 100644 Windows/spice/examples/measure/inv-meas-tran.sp create mode 100644 Windows/spice/examples/measure/inv-meas-tran_oc.sp create mode 100644 Windows/spice/examples/measure/mos-meas-dc-control.sp create mode 100644 Windows/spice/examples/measure/mos-meas-dc.sp create mode 100644 Windows/spice/examples/measure/rc-meas-ac-control.sp create mode 100644 Windows/spice/examples/measure/rc-meas-ac.sp create mode 100644 Windows/spice/examples/measure/simple-meas-tran.sp create mode 100644 Windows/spice/examples/memristor/memristor.sp create mode 100644 Windows/spice/examples/memristor/memristor_x.sp create mode 100644 Windows/spice/examples/numparam/example.cir create mode 100644 Windows/spice/examples/numparam/pin.mod create mode 100644 Windows/spice/examples/numparam/pintest.cir create mode 100644 Windows/spice/examples/pss/colpitt_osc_pss.cir create mode 100644 Windows/spice/examples/pss/compl_cross_quad_osc_pss.cir create mode 100644 Windows/spice/examples/pss/hartley_osc_pss.cir create mode 100644 Windows/spice/examples/pss/ring_osc_pss.cir create mode 100644 Windows/spice/examples/pss/vackar_osc_pss.cir create mode 100644 Windows/spice/examples/pss/vdp_osc_pss.cir create mode 100644 Windows/spice/examples/snapshot/adder_mos.cir create mode 100644 Windows/spice/examples/snapshot/adder_mos_circ.cir create mode 100644 Windows/spice/examples/snapshot/adder_snload.script create mode 100644 Windows/spice/examples/transient-noise/README create mode 100644 Windows/spice/examples/transient-noise/modelcard.nmos create mode 100644 Windows/spice/examples/transient-noise/modelcard.pmos create mode 100644 Windows/spice/examples/transient-noise/noi-ring51-demo.cir create mode 100644 Windows/spice/examples/transient-noise/noi-sc-tr.cir create mode 100644 Windows/spice/examples/transient-noise/noilib-demo.h create mode 100644 Windows/spice/examples/transient-noise/noise_vnoi.cir create mode 100644 Windows/spice/examples/transient-noise/rts-1.cir create mode 100644 Windows/spice/examples/transient-noise/shot_ng.cir create mode 100644 Windows/spice/examples/various/FFT_Leakage.cir create mode 100644 Windows/spice/examples/various/FFT_tests.cir create mode 100644 Windows/spice/examples/various/adder_mos.cir create mode 100644 Windows/spice/examples/various/agauss_test.cir create mode 100644 Windows/spice/examples/various/gain_stage.cir create mode 100644 Windows/spice/examples/various/modelcard.nmos create mode 100644 Windows/spice/examples/various/modelcard.pmos create mode 100644 Windows/spice/examples/various/nic_soa.cir create mode 100644 Windows/spice/examples/various/param_sweep.cir create mode 100644 Windows/spice/examples/xspice/analog_models1_transient.sp create mode 100644 Windows/spice/examples/xspice/delta-sigma/README create mode 100644 Windows/spice/examples/xspice/delta-sigma/count-latch-dac.cir create mode 100644 Windows/spice/examples/xspice/delta-sigma/counter-test.cir create mode 100644 Windows/spice/examples/xspice/delta-sigma/delta-sigma-1.cir create mode 100644 Windows/spice/examples/xspice/delta-sigma/delta-sigma-oc.cir create mode 100644 Windows/spice/examples/xspice/delta-sigma/mod1-ct-test.cir create mode 100644 Windows/spice/examples/xspice/delta-sigma/mod1-ct.cir create mode 100644 Windows/spice/examples/xspice/fstest.sp create mode 100644 Windows/spice/examples/xspice/pll/README create mode 100644 Windows/spice/examples/xspice/pll/f-p-det-d-sub.cir create mode 100644 Windows/spice/examples/xspice/pll/loop-filter-2.cir create mode 100644 Windows/spice/examples/xspice/pll/loop-filter.cir create mode 100644 Windows/spice/examples/xspice/pll/pll-xspice-fstep.cir create mode 100644 Windows/spice/examples/xspice/pll/pll-xspice.cir create mode 100644 Windows/spice/examples/xspice/pll/pll-xspice_oc.cir create mode 100644 Windows/spice/examples/xspice/pll/test-f-p-det.cir create mode 100644 Windows/spice/examples/xspice/pll/test_vco.cir create mode 100644 Windows/spice/examples/xspice/pll/vco_sub.cir create mode 100644 Windows/spice/examples/xspice/pll/vco_sub_new.cir create mode 100644 Windows/spice/examples/xspice/sine.m create mode 100644 Windows/spice/examples/xspice/xspice_c1.cir create mode 100644 Windows/spice/examples/xspice/xspice_c2.cir create mode 100644 Windows/spice/examples/xspice/xspice_c3.cir create mode 100644 Windows/spice/how-to-use-ngspice140111.txt create mode 100644 Windows/spice/lib/ngspice/analog.cm create mode 100644 Windows/spice/lib/ngspice/digital.cm create mode 100644 Windows/spice/lib/ngspice/spice2poly.cm create mode 100644 Windows/spice/lib/ngspice/xtradev.cm create mode 100644 Windows/spice/lib/ngspice/xtraevt.cm create mode 100644 Windows/spice/share/man/man1/ngmultidec.1 create mode 100644 Windows/spice/share/man/man1/ngnutmeg.1 create mode 100644 Windows/spice/share/man/man1/ngsconvert.1 create mode 100644 Windows/spice/share/man/man1/ngspice.1 create mode 100644 Windows/spice/share/ngspice/scripts/ciderinit create mode 100644 Windows/spice/share/ngspice/scripts/devaxis create mode 100644 Windows/spice/share/ngspice/scripts/devload create mode 100644 Windows/spice/share/ngspice/scripts/setplot create mode 100644 Windows/spice/share/ngspice/scripts/spectrum create mode 100644 Windows/spice/share/ngspice/scripts/spinit create mode 100644 Windows/spice/tests/.gitignore create mode 100644 Windows/spice/tests/ChangeLog create mode 100644 Windows/spice/tests/Makefile.am create mode 100644 Windows/spice/tests/Makefile.in create mode 100644 Windows/spice/tests/README create mode 100644 Windows/spice/tests/bsim1/Makefile.am create mode 100644 Windows/spice/tests/bsim1/Makefile.in create mode 100644 Windows/spice/tests/bsim1/test.cir create mode 100644 Windows/spice/tests/bsim2/Makefile.am create mode 100644 Windows/spice/tests/bsim2/Makefile.in create mode 100644 Windows/spice/tests/bsim2/test.cir create mode 100644 Windows/spice/tests/bsim3/Makefile.am create mode 100644 Windows/spice/tests/bsim3/Makefile.in create mode 100644 Windows/spice/tests/bsim3/ac_sim/Makefile.am create mode 100644 Windows/spice/tests/bsim3/ac_sim/Makefile.in create mode 100644 Windows/spice/tests/bsim3/ac_sim/gain-stage.cir create mode 100644 Windows/spice/tests/bsim3/ac_sim/op-amp.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/Makefile.am create mode 100644 Windows/spice/tests/bsim3/dc_sim/Makefile.in create mode 100644 Windows/spice/tests/bsim3/dc_sim/modelcard.nmos create mode 100644 Windows/spice/tests/bsim3/dc_sim/modelcard.pmos create mode 100644 Windows/spice/tests/bsim3/dc_sim/test1.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test10.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test11.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test12.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test13.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test14.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test2.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test3.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test4.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test5.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test6.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test7.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test8.cir create mode 100644 Windows/spice/tests/bsim3/dc_sim/test9.cir create mode 100644 Windows/spice/tests/bsim3/tran_sim/Makefile.am create mode 100644 Windows/spice/tests/bsim3/tran_sim/Makefile.in create mode 100644 Windows/spice/tests/bsim3/tran_sim/comparator.cir create mode 100644 Windows/spice/tests/bsim3/tran_sim/one-shot.cir create mode 100644 Windows/spice/tests/bsim3soidd/Makefile.am create mode 100644 Windows/spice/tests/bsim3soidd/Makefile.in create mode 100644 Windows/spice/tests/bsim3soidd/RampVg2.cir create mode 100644 Windows/spice/tests/bsim3soidd/inv2.cir create mode 100644 Windows/spice/tests/bsim3soidd/lib.h create mode 100644 Windows/spice/tests/bsim3soidd/nmosdd.mod create mode 100644 Windows/spice/tests/bsim3soidd/pmosdd.mod create mode 100644 Windows/spice/tests/bsim3soidd/ring51.cir create mode 100644 Windows/spice/tests/bsim3soidd/t3.cir create mode 100644 Windows/spice/tests/bsim3soidd/t4.cir create mode 100644 Windows/spice/tests/bsim3soidd/t5.cir create mode 100644 Windows/spice/tests/bsim3soifd/Makefile.am create mode 100644 Windows/spice/tests/bsim3soifd/Makefile.in create mode 100644 Windows/spice/tests/bsim3soifd/RampVg2.cir create mode 100644 Windows/spice/tests/bsim3soifd/inv2.cir create mode 100644 Windows/spice/tests/bsim3soifd/lib.h create mode 100644 Windows/spice/tests/bsim3soifd/nmosfd.mod create mode 100644 Windows/spice/tests/bsim3soifd/pmosfd.mod create mode 100644 Windows/spice/tests/bsim3soifd/ring51.cir create mode 100644 Windows/spice/tests/bsim3soifd/t3.cir create mode 100644 Windows/spice/tests/bsim3soifd/t4.cir create mode 100644 Windows/spice/tests/bsim3soifd/t5.cir create mode 100644 Windows/spice/tests/bsim3soipd/Makefile.am create mode 100644 Windows/spice/tests/bsim3soipd/Makefile.in create mode 100644 Windows/spice/tests/bsim3soipd/RampVg2.cir create mode 100644 Windows/spice/tests/bsim3soipd/inv2.cir create mode 100644 Windows/spice/tests/bsim3soipd/lib.h create mode 100644 Windows/spice/tests/bsim3soipd/nmospd.mod create mode 100644 Windows/spice/tests/bsim3soipd/pmospd.mod create mode 100644 Windows/spice/tests/bsim3soipd/ring51.cir create mode 100644 Windows/spice/tests/bsim3soipd/t3.cir create mode 100644 Windows/spice/tests/bsim3soipd/t4.cir create mode 100644 Windows/spice/tests/bsim3soipd/t5.cir create mode 100644 Windows/spice/tests/filters/Makefile.am create mode 100644 Windows/spice/tests/filters/Makefile.in create mode 100644 Windows/spice/tests/filters/lowpass.cir create mode 100644 Windows/spice/tests/general/Makefile.am create mode 100644 Windows/spice/tests/general/Makefile.in create mode 100644 Windows/spice/tests/general/diffpair.cir create mode 100644 Windows/spice/tests/general/fourbitadder.cir create mode 100644 Windows/spice/tests/general/mosamp.cir create mode 100644 Windows/spice/tests/general/mosmem.cir create mode 100644 Windows/spice/tests/general/rc.cir create mode 100644 Windows/spice/tests/general/rca3040.cir create mode 100644 Windows/spice/tests/general/rtlinv.cir create mode 100644 Windows/spice/tests/general/schmitt.cir create mode 100644 Windows/spice/tests/hfet/Makefile.am create mode 100644 Windows/spice/tests/hfet/Makefile.in create mode 100644 Windows/spice/tests/hfet/id_vgs.cir create mode 100644 Windows/spice/tests/hfet/inverter.cir create mode 100644 Windows/spice/tests/jfet/Makefile.am create mode 100644 Windows/spice/tests/jfet/Makefile.in create mode 100644 Windows/spice/tests/jfet/jfet_vds-vgs.cir create mode 100644 Windows/spice/tests/mes/Makefile.am create mode 100644 Windows/spice/tests/mes/Makefile.in create mode 100644 Windows/spice/tests/mes/subth.cir create mode 100644 Windows/spice/tests/mesa/Makefile.am create mode 100644 Windows/spice/tests/mesa/Makefile.in create mode 100644 Windows/spice/tests/mesa/mesa-12.cir create mode 100644 Windows/spice/tests/mesa/mesa.cir create mode 100644 Windows/spice/tests/mesa/mesa11.cir create mode 100644 Windows/spice/tests/mesa/mesa12.cir create mode 100644 Windows/spice/tests/mesa/mesa13.cir create mode 100644 Windows/spice/tests/mesa/mesa14.cir create mode 100644 Windows/spice/tests/mesa/mesa15.cir create mode 100644 Windows/spice/tests/mesa/mesa21.cir create mode 100644 Windows/spice/tests/mesa/mesgout.cir create mode 100644 Windows/spice/tests/mesa/mesinv.cir create mode 100644 Windows/spice/tests/mesa/mesosc.cir create mode 100644 Windows/spice/tests/mos6/Makefile.am create mode 100644 Windows/spice/tests/mos6/Makefile.in create mode 100644 Windows/spice/tests/mos6/mos6inv.cir create mode 100644 Windows/spice/tests/mos6/simpleinv.cir create mode 100644 Windows/spice/tests/polezero/Makefile.am create mode 100644 Windows/spice/tests/polezero/Makefile.in create mode 100644 Windows/spice/tests/polezero/filt_bridge_t.cir create mode 100644 Windows/spice/tests/polezero/filt_multistage.cir create mode 100644 Windows/spice/tests/polezero/filt_rc.cir create mode 100644 Windows/spice/tests/polezero/pz2.cir create mode 100644 Windows/spice/tests/polezero/pzt.cir create mode 100644 Windows/spice/tests/polezero/simplepz.cir create mode 100644 Windows/spice/tests/regression/Makefile.am create mode 100644 Windows/spice/tests/regression/Makefile.in create mode 100644 Windows/spice/tests/regression/lib-processing/Makefile.am create mode 100644 Windows/spice/tests/regression/lib-processing/Makefile.in create mode 100644 Windows/spice/tests/regression/lib-processing/ex1.lib create mode 100644 Windows/spice/tests/regression/lib-processing/ex1a.cir create mode 100644 Windows/spice/tests/regression/lib-processing/ex1b.cir create mode 100644 Windows/spice/tests/regression/lib-processing/ex2.lib create mode 100644 Windows/spice/tests/regression/lib-processing/ex2a.cir create mode 100644 Windows/spice/tests/regression/lib-processing/ex3.lib create mode 100644 Windows/spice/tests/regression/lib-processing/ex3a.cir create mode 100644 Windows/spice/tests/regression/lib-processing/extra3.lib create mode 100644 Windows/spice/tests/regression/parser/Makefile.am create mode 100644 Windows/spice/tests/regression/parser/Makefile.in create mode 100644 Windows/spice/tests/regression/parser/minus-minus.cir create mode 100644 Windows/spice/tests/regression/parser/xpressn-1.cir create mode 100644 Windows/spice/tests/regression/parser/xpressn-2.cir create mode 100644 Windows/spice/tests/regression/subckt-processing/Makefile.am create mode 100644 Windows/spice/tests/regression/subckt-processing/Makefile.in create mode 100644 Windows/spice/tests/regression/subckt-processing/model-scope-5.cir create mode 100644 Windows/spice/tests/resistance/Makefile.am create mode 100644 Windows/spice/tests/resistance/Makefile.in create mode 100644 Windows/spice/tests/resistance/res_array.cir create mode 100644 Windows/spice/tests/resistance/res_partition.cir create mode 100644 Windows/spice/tests/resistance/res_simple.cir create mode 100644 Windows/spice/tests/sensitivity/Makefile.am create mode 100644 Windows/spice/tests/sensitivity/Makefile.in create mode 100644 Windows/spice/tests/sensitivity/diffpair.cir create mode 100644 Windows/spice/tests/transient/Makefile.am create mode 100644 Windows/spice/tests/transient/Makefile.in create mode 100644 Windows/spice/tests/transient/fourbitadder.cir create mode 100644 Windows/spice/tests/transmission/Makefile.am create mode 100644 Windows/spice/tests/transmission/Makefile.in create mode 100644 Windows/spice/tests/transmission/cpl3_4_line.cir create mode 100644 Windows/spice/tests/transmission/cpl_ibm2.cir create mode 100644 Windows/spice/tests/transmission/ltra1_1_line.cir create mode 100644 Windows/spice/tests/transmission/ltra2_2_line.cir create mode 100644 Windows/spice/tests/transmission/txl1_1_line.cir create mode 100644 Windows/spice/tests/transmission/txl2_3_line.cir create mode 100644 Windows/spice/tests/vbic/CEamp.cir create mode 100644 Windows/spice/tests/vbic/FG.cir create mode 100644 Windows/spice/tests/vbic/FO.cir create mode 100644 Windows/spice/tests/vbic/Makefile.am create mode 100644 Windows/spice/tests/vbic/Makefile.in create mode 100644 Windows/spice/tests/vbic/diffamp.cir create mode 100644 Windows/spice/tests/vbic/noise_scale_test.cir create mode 100644 Windows/spice/tests/vbic/temp.cir create mode 100644 Windows/spice/tests/xspice/Makefile.am create mode 100644 Windows/spice/tests/xspice/Makefile.in create mode 100644 Windows/spice/tests/xspice/digital/Makefile.am create mode 100644 Windows/spice/tests/xspice/digital/Makefile.in create mode 100644 Windows/spice/tests/xspice/digital/d_ram-stimulus.txt create mode 100644 Windows/spice/tests/xspice/digital/d_ram.cir create mode 100644 Windows/spice/tests/xspice/digital/d_source-stimulus.txt create mode 100644 Windows/spice/tests/xspice/digital/d_source.cir create mode 100644 Windows/spice/tests/xspice/digital/d_state-stimulus.txt create mode 100644 Windows/spice/tests/xspice/digital/d_state-updn.txt create mode 100644 Windows/spice/tests/xspice/digital/d_state.cir create mode 100644 Windows/spice/tests/xspice/digital/spinit.in diff --git a/Windows/Installation.txt b/Windows/Installation.txt new file mode 100644 index 00000000..847fdfa4 --- /dev/null +++ b/Windows/Installation.txt @@ -0,0 +1,5 @@ +1) Click on Setup.exe and select "Run as administrator". Installation process needs to be done with administrator privileges, otherwise path variables are not set correctly. +2) While selecting path where you want eSim to be installed, be sure to select a folder/directory which doesn't have any spaces in them. Default location is C:\Program Files. Ideally you should create a new folder which does not have any spaces in the name under your choice of drive(C:/ , D:/ etc). +3) Once installation is complete, a shortcut with eSim logo will be created on your desktop. You can run eSim by double clicking on the shortcut. Or you can go to the directory where eSim is installed using command prompt, and type change directory to 'src/frontEnd' , then run the command "python Application.py" excluding double quotes. +4) When creating new projects under eSim, make sure there are no spaces in the name you are giving the project to. +5) If you face difficulties while installation or while using eSim, please refer to the questions under https://esim.fossee.in/forum . If you can't find solution to your query in the forum's answered questions, you can post your questions on the same forum, or you can contact us on contact-esim@fossee.in diff --git a/Windows/LICENSE.rtf b/Windows/LICENSE.rtf new file mode 100644 index 00000000..14bf09eb --- /dev/null +++ b/Windows/LICENSE.rtf @@ -0,0 +1,885 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f40\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f61\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f62\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f64\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f65\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f66\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f67\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} +{\f68\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f69\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f61\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f62\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f64\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f65\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f66\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f67\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} +{\f68\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f69\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f431\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f432\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\f434\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f435\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f436\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\f437\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);} +{\f438\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f439\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f441\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f442\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;} +{\f444\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;}{\f445\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f448\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;}{\f449\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;} +{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew);} +{\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic);}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);} +{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\f41\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f42\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f44\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\f46\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f47\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f48\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\f49\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f31506\fs22 }{\*\defpap +\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{ +\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs21\alang1025 \ltrch\fcs0 \f40\fs21\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext15 \slink16 \sunhideused \styrsid13448531 Plain Text;}{\*\cs16 \additive \rtlch\fcs1 \af0\afs21 \ltrch\fcs0 \f40\fs21 \sbasedon10 \slink15 \slocked \styrsid13448531 Plain Text Char;}}{\*\rsidtbl \rsid11367124\rsid12855466\rsid13448531 +\rsid15037173}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author word}{\operator word}{\creatim\yr2019\mo6\dy25\hr19\min15}{\revtim\yr2019\mo6\dy25\hr19\min15} +{\version2}{\edmins0}{\nofpages3}{\nofwords5242}{\nofchars29881}{\nofcharsws35053}{\vern97}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1501\margr1502\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin360\dgvorigin360\dghshow1\dgvshow1 +\jexpand\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule +\rsidroot15037173\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0{\*\wgrffmtfilter 2450} +\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid13448531\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}} +{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (} +{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar +\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13448531 \rtlch\fcs1 \af31507\afs21\alang1025 \ltrch\fcs0 \f40\fs21\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af2 \ltrch\fcs0 +\f2\insrsid12855466\charrsid13448531 GNU GENERAL PUBLIC LICENSE +\par Version 3, 29 June 2007 +\par +\par Copyright (C) 2007 Free Software Foundation, Inc. +\par Everyone is permitted to copy and distribute verbatim copies +\par of this license document, but changing it is not allowed. +\par +\par Preamble +\par +\par The GNU General Public License is a free, copyleft license for +\par software and other kinds of works. +\par +\par The licenses for most software and other practical works are designed +\par to take away your freedom to share and change the works. By contrast, +\par the GNU General Public License is intended to guarantee your freedom to +\par share and change all versions of a program--to make sure it remains free +\par software for all its users. We, the Free Software Foundation, use the +\par GNU General Public License for most of our software; it applies also to +\par any other work released this way by its authors. You can apply it to +\par your programs, too. +\par +\par When we speak of free software, we are referring to freedom, not +\par price. Our General Public Licenses are designed to make sure that you +\par have the freedom to distribute copies of free software (and charge for +\par them if you wish), that you receive source code or can get it if you +\par want it, that you can change the software or use pieces of it in new +\par free programs, and that you know you can do these things. +\par +\par To protect your rights, we need to prevent others from denying you +\par these rights or asking you to surrender the rights. Therefore, you have +\par certain responsibilities if you distribute copies of the software, or if +\par you modify it: responsibilities to respect the freedom of others. +\par +\par For example, if you distribute copies of such a program, whether +\par gratis or for a fee, you must pass on to the recipients the same +\par freedoms that you received. You must make sure that they, too, receive +\par or can get the source code. And you must show them these terms so they +\par know their rights. +\par +\par Developers that use the GNU GPL protect your rights with two steps: +\par (1) assert copyright on the software, and (2) offer you this License +\par giving you legal permission to copy, distribute and/or modify it. +\par +\par For the developers' and authors' protection, the GPL clearly explains +\par that there is no warranty for this free software. For both users' and +\par authors' sake, the GPL requires that modified versions be marked as +\par changed, so that their problems will not be attributed erroneously to +\par authors of previous versions. +\par +\par Some devices are designed to deny users access to install or run +\par modified versions of the software inside them, although the manufacturer +\par can do so. This is fundamentally incompatible with the aim of +\par protecting users' freedom to change the software. The systematic +\par pattern of such abuse occurs in the area of products for individuals to +\par use, which is precisely where it is most unacceptable. Therefore, we +\par have designed this version of the GPL to prohibit the practice for those +\par products. If such problems arise substantially in other domains, we +\par stand ready to extend this provision to those domains in future versions +\par of the GPL, as needed to protect the freedom of users. +\par +\par Finally, every program is threatened constantly by software patents. +\par States should not allow patents to restrict development and use of +\par software on general-purpose computers, but in those that do, we wish to +\par avoid the special danger that patents applied to a free program could +\par make it effectively proprietary. To prevent this, the GPL assures that +\par patents cannot be used to render the program non-free. +\par +\par The precise terms and conditions for copying, distribution and +\par modification follow. +\par +\par TERMS AND CONDITIONS +\par +\par 0. Definitions. +\par +\par "This License" refers to version 3 of the GNU General Public License. +\par +\par "Copyright" also means copyright-like laws that apply to other kinds of +\par works, such as semiconductor masks. +\par +\par "The Program" refers to any copyrightable work licensed under this +\par License. Each licensee is addressed as "you". "Licensees" and +\par "recipients" may be individuals or organizations. +\par +\par To "modify" a work means to copy from or adapt all or part of the work +\par in a fashion requiring copyright permission, other than the making of an +\par exact copy. The resulting work is called a "modified version" of the +\par earlier work or a work "based on" the earlier work. +\par +\par A "covered work" means either the unmodified Program or a work based +\par on the Program. +\par +\par To "propagate" a work means to do anything with it that, without +\par permission, would make you directly or secondarily liable for +\par infringement under applicable copyright law, except executing it on a +\par computer or modifying a private copy. Propagation includes copying, +\par distribution (with or without modification), making available to the +\par public, and in some countries other activities as well. +\par +\par To "convey" a work means any kind of propagation that enables other +\par parties to make or receive copies. Mere interaction with a user through +\par a computer network, with no transfer of a copy, is not conveying. +\par +\par An interactive user interface displays "Appropriate Legal Notices" +\par to the extent that it includes a convenient and prominently visible +\par feature that (1) displays an appropriate copyright notice, and (2) +\par tells the user that there is no warranty for the work (except to the +\par extent that warranties are provided), that licensees may convey the +\par work under this License, and how to view a copy of this License. If +\par the interface presents a list of user commands or options, such as a +\par menu, a prominent item in the list meets this criterion. +\par +\par 1. Source Code. +\par +\par The "source code" for a work means the preferred form of the work +\par for making modifications to it. "Object code" means any non-source +\par form of a work. +\par +\par A "Standard Interface" means an interface that either is an official +\par standard defined by a recognized standards body, or, in the case of +\par interfaces specified for a particular programming language, one that +\par is widely used among developers working in that language. +\par +\par The "System Libraries" of an executable work include anything, other +\par than the work as a whole, that (a) is included in the normal form of +\par packaging a Major Component, but which is not part of that Major +\par Component, and (b) serves only to enable use of the work with that +\par Major Component, or to implement a Standard Interface for which an +\par implementation is available to the public in source code form. A +\par "Major Component", in this context, means a major essential component +\par (kernel, window system, and so on) of the specific operating system +\par (if any) on which the executable work runs, or a compiler used to +\par produce the work, or an object code interpreter used to run it. +\par +\par The "Corresponding Source" for a work in object code form means all +\par the source code needed to generate, install, and (for an executable +\par work) run the object code and to modify the work, including scripts to +\par control those activities. However, it does not include the work's +\par System Libraries, or general-purpose tools or generally available free +\par programs which are used unmodified in performing those activities but +\par which are not part of the work. For example, Corresponding Source +\par includes interface definition files associated with source files for +\par the work, and the source code for shared libraries and dynamically +\par linked subprograms that the work is specifically designed to require, +\par such as by intimate data communication or control flow between those +\par subprograms and other parts of the work. +\par +\par The Corresponding Source need not include anything that users +\par can regenerate automatically from other parts of the Corresponding +\par Source. +\par +\par The Corresponding Source for a work in source code form is that +\par same work. +\par +\par 2. Basic Permissions. +\par +\par All rights granted under this License are granted for the term of +\par copyright on the Program, and are irrevocable provided the stated +\par conditions are met. This License explicitly affirms your unlimited +\par permission to run the unmodified Program. The output from running a +\par covered work is covered by this License only if the output, given its +\par content, constitutes a covered work. This License acknowledges your +\par rights of fair use or other equivalent, as provided by copyright law. +\par +\par You may make, run and propagate covered works that you do not +\par convey, without conditions so long as your license otherwise remains +\par in force. You may convey covered works to others for the sole purpose +\par of having them make modifications exclusively for you, or provide you +\par with facilities for running those works, provided that you comply with +\par the terms of this License in conveying all material for which you do +\par not control copyright. Those thus making or running the covered works +\par for you must do so exclusively on your behalf, under your direction +\par and control, on terms that prohibit them from making any copies of +\par your copyrighted material outside their relationship with you. +\par +\par Conveying under any other circumstances is permitted solely under +\par the conditions stated below. Sublicensing is not allowed; section 10 +\par makes it unnecessary. +\par +\par 3. Protecting Users' Legal Rights From Anti-Circumvention Law. +\par +\par No covered work shall be deemed part of an effective technological +\par measure under any applicable law fulfilling obligations under article +\par 11 of the WIPO copyright treaty adopted on 20 December 1996, or +\par similar laws prohibiting or restricting circumvention of such +\par measures. +\par +\par When you convey a covered work, you waive any legal power to forbid +\par circumvention of technological measures to the extent such circumvention +\par is effected by exercising rights under this License with respect to +\par the covered work, and you disclaim any intention to limit operation or +\par modification of the work as a means of enforcing, against the work's +\par users, your or third parties' legal rights to forbid circumvention of +\par technological measures. +\par +\par 4. Conveying Verbatim Copies. +\par +\par You may convey verbatim copies of the Program's source code as you +\par receive it, in any medium, provided that you conspicuously and +\par appropriately publish on each copy an appropriate copyright notice; +\par keep intact all notices stating that this License and any +\par non-permissive terms added in accord with section 7 apply to the code; +\par keep intact all notices of the absence of any warranty; and give all +\par recipients a copy of this License along with the Program. +\par +\par You may charge any price or no price for each copy that you convey, +\par and you may offer support or warranty protection for a fee. +\par +\par 5. Conveying Modified Source Versions. +\par +\par You may convey a work based on the Program, or the modifications to +\par produce it from the Program, in the form of source code under the +\par terms of section 4, provided that you also meet all of these conditions: +\par +\par a) The work must carry prominent notices stating that you modified +\par it, and giving a relevant date. +\par +\par b) The work must carry prominent notices stating that it is +\par released under this License and any conditions added under section +\par 7. This requirement modifies the requirement in section 4 to +\par "keep intact all notices". +\par +\par c) You must license the entire work, as a whole, under this +\par License to anyone who comes into possession of a copy. This +\par License will therefore apply, along with any applicable section 7 +\par additional terms, to the whole of the work, and all its parts, +\par regardless of how they are packaged. This License gives no +\par permission to license the work in any other way, but it does not +\par invalidate such permission if you have separately received it. +\par +\par d) If the work has interactive user interfaces, each must display +\par Appropriate Legal Notices; however, if the Program has interactive +\par interfaces that do not display Appropriate Legal Notices, your +\par work need not make them do so. +\par +\par A compilation of a covered work with other separate and independent +\par works, which are not by their nature extensions of the covered work, +\par and which are not combined with it such as to form a larger program, +\par in or on a volume of a storage or distribution medium, is called an +\par "aggregate" if the compilation and its resulting copyright are not +\par used to limit the access or legal rights of the compilation's users +\par beyond what the individual works permit. Inclusion of a covered work +\par in an aggregate does not cause this License to apply to the other +\par parts of the aggregate. +\par +\par 6. Conveying Non-Source Forms. +\par +\par You may convey a covered work in object code form under the terms +\par of sections 4 and 5, provided that you also convey the +\par machine-readable Corresponding Source under the terms of this License, +\par in one of these ways: +\par +\par a) Convey the object code in, or embodied in, a physical product +\par (including a physical distribution medium), accompanied by the +\par Corresponding Source fixed on a durable physical medium +\par customarily used for software interchange. +\par +\par b) Convey the object code in, or embodied in, a physical product +\par (including a physical distribution medium), accompanied by a +\par written offer, valid for at least three years and valid for as +\par long as you offer spare parts or customer support for that product +\par model, to give anyone who possesses the object code either (1) a +\par copy of the Corresponding Source for all the software in the +\par product that is covered by this License, on a durable physical +\par medium customarily used for software interchange, for a price no +\par more than your reasonable cost of physically performing this +\par conveying of source, or (2) access to copy the +\par Corresponding Source from a network server at no charge. +\par +\par c) Convey individual copies of the object code with a copy of the +\par written offer to provide the Corresponding Source. This +\par alternative is allowed only occasionally and noncommercially, and +\par only if you received the object code with such an offer, in accord +\par with subsection 6b. +\par +\par d) Convey the object code by offering access from a designated +\par place (gratis or for a charge), and offer equivalent access to the +\par Corresponding Source in the same way through the same place at no +\par further charge. You need not require recipients to copy the +\par Corresponding Source along with the object code. If the place to +\par copy the object code is a network server, the Corresponding Source +\par may be on a different server (operated by you or a third party) +\par that supports equivalent copying facilities, provided you maintain +\par clear directions next to the object code saying where to find the +\par Corresponding Source. Regardless of what server hosts the +\par Corresponding Source, you remain obligated to ensure that it is +\par available for as long as needed to satisfy these requirements. +\par +\par e) Convey the object code using peer-to-peer transmission, provided +\par you inform other peers where the object code and Corresponding +\par Source of the work are being offered to the general public at no +\par charge under subsection 6d. +\par +\par A separable portion of the object code, whose source code is excluded +\par from the Corresponding Source as a System Library, need not be +\par included in conveying the object code work. +\par +\par A "User Product" is either (1) a "consumer product", which means any +\par tangible personal property which is normally used for personal, family, +\par or household purposes, or (2) anything designed or sold for incorporation +\par into a dwelling. In determining whether a product is a consumer product, +\par doubtful cases shall be resolved in favor of coverage. For a particular +\par product received by a particular user, "normally used" refers to a +\par typical or common use of that class of product, regardless of the status +\par of the particular user or of the way in which the particular user +\par actually uses, or expects or is expected to use, the product. A product +\par is a consumer product regardless of whether the product has substantial +\par commercial, industrial or non-consumer uses, unless such uses represent +\par the only significant mode of use of the product. +\par +\par "Installation Information" for a User Product means any methods, +\par procedures, authorization keys, or other information required to install +\par and execute modified versions of a covered work in that User Product from +\par a modified version of its Corresponding Source. The information must +\par suffice to ensure that the continued functioning of the modified object +\par code is in no case prevented or interfered with solely because +\par modification has been made. +\par +\par If you convey an object code work under this section in, or with, or +\par specifically for use in, a User Product, and the conveying occurs as +\par part of a transaction in which the right of possession and use of the +\par User Product is transferred to the recipient in perpetuity or for a +\par fixed term (regardless of how the transaction is characterized), the +\par Corresponding Source conveyed under this section must be accompanied +\par by the Installation Information. But this requirement does not apply +\par if neither you nor any third party retains the ability to install +\par modified object code on the User Product (for example, the work has +\par been installed in ROM). +\par +\par The requirement to provide Installation Information does not include a +\par requirement to continue to provide support service, warranty, or updates +\par for a work that has been modified or installed by the recipient, or for +\par the User Product in which it has been modified or installed. Access to a +\par network may be denied when the modification itself materially and +\par adversely affects the operation of the network or violates the rules and +\par protocols for communication across the network. +\par +\par Corresponding Source conveyed, and Installation Information provided, +\par in accord with this section must be in a format that is publicly +\par documented (and with an implementation available to the public in +\par source code form), and must require no special password or key for +\par unpacking, reading or copying. +\par +\par 7. Additional Terms. +\par +\par "Additional permissions" are terms that supplement the terms of this +\par License by making exceptions from one or more of its conditions. +\par Additional permissions that are applicable to the entire Program shall +\par be treated as though they were included in this License, to the extent +\par that they are valid under applicable law. If additional permissions +\par apply only to part of the Program, that part may be used separately +\par under those permissions, but the entire Program remains governed by +\par this License without regard to the additional permissions. +\par +\par When you convey a copy of a covered work, you may at your option +\par remove any additional permissions from that copy, or from any part of +\par it. (Additional permissions may be written to require their own +\par removal in certain cases when you modify the work.) You may place +\par additional permissions on material, added by you to a covered work, +\par for which you have or can give appropriate copyright permission. +\par +\par Notwithstanding any other provision of this License, for material you +\par add to a covered work, you may (if authorized by the copyright holders of +\par that material) supplement the terms of this License with terms: +\par +\par a) Disclaiming warranty or limiting liability differently from the +\par terms of sections 15 and 16 of this License; or +\par +\par b) Requiring preservation of specified reasonable legal notices or +\par author attributions in that material or in the Appropriate Legal +\par Notices displayed by works containing it; or +\par +\par c) Prohibiting misrepresentation of the origin of that material, or +\par requiring that modified versions of such material be marked in +\par reasonable ways as different from the original version; or +\par +\par d) Limiting the use for publicity purposes of names of licensors or +\par authors of the material; or +\par +\par e) Declining to grant rights under trademark law for use of some +\par trade names, trademarks, or service marks; or +\par +\par f) Requiring indemnification of licensors and authors of that +\par material by anyone who conveys the material (or modified versions of +\par it) with contractual assumptions of liability to the recipient, for +\par any liability that these contractual assumptions directly impose on +\par those licensors and authors. +\par +\par All other non-permissive additional terms are considered "further +\par restrictions" within the meaning of section 10. If the Program as you +\par received it, or any part of it, contains a notice stating that it is +\par governed by this License along with a term that is a further +\par restriction, you may remove that term. If a license document contains +\par a further restriction but permits relicensing or conveying under this +\par License, you may add to a covered work material governed by the terms +\par of that license document, provided that the further restriction does +\par not survive such relicensing or conveying. +\par +\par If you add terms to a covered work in accord with this section, you +\par must place, in the relevant source files, a statement of the +\par additional terms that apply to those files, or a notice indicating +\par where to find the applicable terms. +\par +\par Additional terms, permissive or non-permissive, may be stated in the +\par form of a separately written license, or stated as exceptions; +\par the above requirements apply either way. +\par +\par 8. Termination. +\par +\par You may not propagate or modify a covered work except as expressly +\par provided under this License. Any attempt otherwise to propagate or +\par modify it is void, and will automatically terminate your rights under +\par this License (including any patent licenses granted under the third +\par paragraph of section 11). +\par +\par However, if you cease all violation of this License, then your +\par license from a particular copyright holder is reinstated (a) +\par provisionally, unless and until the copyright holder explicitly and +\par finally terminates your license, and (b) permanently, if the copyright +\par holder fails to notify you of the violation by some reasonable means +\par prior to 60 days after the cessation. +\par +\par Moreover, your license from a particular copyright holder is +\par reinstated permanently if the copyright holder notifies you of the +\par violation by some reasonable means, this is the first time you have +\par received notice of violation of this License (for any work) from that +\par copyright holder, and you cure the violation prior to 30 days after +\par your receipt of the notice. +\par +\par Termination of your rights under this section does not terminate the +\par licenses of parties who have received copies or rights from you under +\par this License. If your rights have been terminated and not permanently +\par reinstated, you do not qualify to receive new licenses for the same +\par material under section 10. +\par +\par 9. Acceptance Not Required for Having Copies. +\par +\par You are not required to accept this License in order to receive or +\par run a copy of the Program. Ancillary propagation of a covered work +\par occurring solely as a consequence of using peer-to-peer transmission +\par to receive a copy likewise does not require acceptance. However, +\par nothing other than this License grants you permission to propagate or +\par modify any covered work. These actions infringe copyright if you do +\par not accept this License. Therefore, by modifying or propagating a +\par covered work, you indicate your acceptance of this License to do so. +\par +\par 10. Automatic Licensing of Downstream Recipients. +\par +\par Each time you convey a covered work, the recipient automatically +\par receives a license from the original licensors, to run, modify and +\par propagate that work, subject to this License. You are not responsible +\par for enforcing compliance by third parties with this License. +\par +\par An "entity transaction" is a transaction transferring control of an +\par organization, or substantially all assets of one, or subdividing an +\par organization, or merging organizations. If propagation of a covered +\par work results from an entity transaction, each party to that +\par transaction who receives a copy of the work also receives whatever +\par licenses to the work the party's predecessor in interest had or could +\par give under the previous paragraph, plus a right to possession of the +\par Corresponding Source of the work from the predecessor in interest, if +\par the predecessor has it or can get it with reasonable efforts. +\par +\par You may not impose any further restrictions on the exercise of the +\par rights granted or affirmed under this License. For example, you may +\par not impose a license fee, royalty, or other charge for exercise of +\par rights granted under this License, and you may not initiate litigation +\par (including a cross-claim or counterclaim in a lawsuit) alleging that +\par any patent claim is infringed by making, using, selling, offering for +\par sale, or importing the Program or any portion of it. +\par +\par 11. Patents. +\par +\par A "contributor" is a copyright holder who authorizes use under this +\par License of the Program or a work on which the Program is based. The +\par work thus licensed is called the contributor's "contributor version". +\par +\par A contributor's "essential patent claims" are all patent claims +\par owned or controlled by the contributor, whether already acquired or +\par hereafter acquired, that would be infringed by some manner, permitted +\par by this License, of making, using, or selling its contributor version, +\par but do not include claims that would be infringed only as a +\par consequence of further modification of the contributor version. For +\par purposes of this definition, "control" includes the right to grant +\par patent sublicenses in a manner consistent with the requirements of +\par this License. +\par +\par Each contributor grants you a non-exclusive, worldwide, royalty-free +\par patent license under the contributor's essential patent claims, to +\par make, use, sell, offer for sale, import and otherwise run, modify and +\par propagate the contents of its contributor version. +\par +\par In the following three paragraphs, a "patent license" is any express +\par agreement or commitment, however denominated, not to enforce a patent +\par (such as an express permission to practice a patent or covenant not to +\par sue for patent infringement). To "grant" such a patent license to a +\par party means to make such an agreement or commitment not to enforce a +\par patent against the party. +\par +\par If you convey a covered work, knowingly relying on a patent license, +\par and the Corresponding Source of the work is not available for anyone +\par to copy, free of charge and under the terms of this License, through a +\par publicly available network server or other readily accessible means, +\par then you must either (1) cause the Corresponding Source to be so +\par available, or (2) arrange to deprive yourself of the benefit of the +\par patent license for this particular work, or (3) arrange, in a manner +\par consistent with the requirements of this License, to extend the patent +\par license to downstream recipients. "Knowingly relying" means you have +\par actual knowledge that, but for the patent license, your conveying the +\par covered work in a country, or your recipient's use of the covered work +\par in a country, would infringe one or more identifiable patents in that +\par country that you have reason to believe are valid. +\par +\par If, pursuant to or in connection with a single transaction or +\par arrangement, you convey, or propagate by procuring conveyance of, a +\par covered work, and grant a patent license to some of the parties +\par receiving the covered work authorizing them to use, propagate, modify +\par or convey a specific copy of the covered work, then the patent license +\par you grant is automatically extended to all recipients of the covered +\par work and works based on it. +\par +\par A patent license is "discriminatory" if it does not include within +\par the scope of its coverage, prohibits the exercise of, or is +\par conditioned on the non-exercise of one or more of the rights that are +\par specifically granted under this License. You may not convey a covered +\par work if you are a party to an arrangement with a third party that is +\par in the business of distributing software, under which you make payment +\par to the third party based on the extent of your activity of conveying +\par the work, and under which the third party grants, to any of the +\par parties who would receive the covered work from you, a discriminatory +\par patent license (a) in connection with copies of the covered work +\par conveyed by you (or copies made from those copies), or (b) primarily +\par for and in connection with specific products or compilations that +\par contain the covered work, unless you entered into that arrangement, +\par or that patent license was granted, prior to 28 March 2007. +\par +\par Nothing in this License shall be construed as excluding or limiting +\par any implied license or other defenses to infringement that may +\par otherwise be available to you under applicable patent law. +\par +\par 12. No Surrender of Others' Freedom. +\par +\par If conditions are imposed on you (whether by court order, agreement or +\par otherwise) that contradict the conditions of this License, they do not +\par excuse you from the conditions of this License. If you cannot convey a +\par covered work so as to satisfy simultaneously your obligations under this +\par License and any other pertinent obligations, then as a consequence you may +\par not convey it at all. For example, if you agree to terms that obligate you +\par to collect a royalty for further conveying from those to whom you convey +\par the Program, the only way you could satisfy both those terms and this +\par License would be to refrain entirely from conveying the Program. +\par +\par 13. Use with the GNU Affero General Public License. +\par +\par Notwithstanding any other provision of this License, you have +\par permission to link or combine any covered work with a work licensed +\par under version 3 of the GNU Affero General Public License into a single +\par combined work, and to convey the resulting work. The terms of this +\par License will continue to apply to the part which is the covered work, +\par but the special requirements of the GNU Affero General Public License, +\par section 13, concerning interaction through a network will apply to the +\par combination as such. +\par +\par 14. Revised Versions of this License. +\par +\par The Free Software Foundation may publish revised and/or new versions of +\par the GNU General Public License from time to time. Such new versions will +\par be similar in spirit to the present version, but may differ in detail to +\par address new problems or concerns. +\par +\par Each version is given a distinguishing version number. If the +\par Program specifies that a certain numbered version of the GNU General +\par Public License "or any later version" applies to it, you have the +\par option of following the terms and conditions either of that numbered +\par version or of any later version published by the Free Software +\par Foundation. If the Program does not specify a version number of the +\par GNU General Public License, you may choose any version ever published +\par by the Free Software Foundation. +\par +\par If the Program specifies that a proxy can decide which future +\par versions of the GNU General Public License can be used, that proxy's +\par public statement of acceptance of a version permanently authorizes you +\par to choose that version for the Program. +\par +\par Later license versions may give you additional or different +\par permissions. However, no additional obligations are imposed on any +\par author or copyright holder as a result of your choosing to follow a +\par later version. +\par +\par 15. Disclaimer of Warranty. +\par +\par THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +\par APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +\par HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +\par OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +\par THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +\par PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +\par IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +\par ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +\par +\par 16. Limitation of Liability. +\par +\par IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +\par WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +\par THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +\par GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +\par USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +\par DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +\par PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +\par EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +\par SUCH DAMAGES. +\par +\par 17. Interpretation of Sections 15 and 16. +\par +\par If the disclaimer of warranty and limitation of liability provided +\par above cannot be given local legal effect according to their terms, +\par reviewing courts shall apply local law that most closely approximates +\par an absolute waiver of all civil liability in connection with the +\par Program, unless a warranty or assumption of liability accompanies a +\par copy of the Program in return for a fee. +\par +\par END OF TERMS AND CONDITIONS +\par +\par How to Apply These Terms to Your New Programs +\par +\par If you develop a new program, and you want it to be of the greatest +\par possible use to the public, the best way to achieve this is to make it +\par free software which everyone can redistribute and change under these terms. +\par +\par To do so, attach the following notices to the program. It is safest +\par to attach them to the start of each source file to most effectively +\par state the exclusion of warranty; and each file should have at least +\par the "copyright" line and a pointer to where the full notice is found. +\par +\par \{one line to give the program's name and a brief idea of what it does.\} +\par Copyright (C) \{year\} \{name of author\} +\par +\par This program is free software: you can redistribute it and/or modify +\par it under the terms of the GNU General Public License as published by +\par the Free Software Foundation, either version 3 of the License, or +\par (at your option) any later version. +\par +\par This program is distributed in the hope that it will be useful, +\par but WITHOUT ANY WARRANTY; without even the implied warranty of +\par MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +\par GNU General Public License for more details. +\par +\par You should have received a copy of the GNU General Public License +\par along with this program. If not, see . +\par +\par Also add information on how to contact you by electronic and paper mail. +\par +\par If the program does terminal interaction, make it output a short +\par notice like this when it starts in an interactive mode: +\par +\par \{project\} Copyright (C) \{year\} \{fullname\} +\par This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +\par This is free software, and you are welcome to redistribute it +\par under certain conditions; type `show c' for details. +\par +\par The hypothetical commands `show w' and `show c' should show the appropriate +\par parts of the General Public License. Of course, your program's commands +\par might be different; for a GUI interface, you would use an "about box". +\par +\par You should also get your employer (if you work as a programmer) or school, +\par if any, to sign a "copyright disclaimer" for the program, if necessary. +\par For more information on this, and how to apply and follow the GNU GPL, see +\par . +\par +\par The GNU General Public License does not permit incorporating your program +\par into proprietary programs. If your program is a subroutine library, you +\par may consider it more useful to permit linking proprietary applications with +\par the library. If this is what you want to do, use the GNU Lesser General +\par Public License instead of this License. But first, please read +\par . +\par +\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid12855466\charrsid13448531 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210007b740aaca0600008f1a0000160000007468656d652f7468656d652f +7468656d65312e786d6cec595b8bdb46147e2ff43f08bd3bbe49be2cf1065bb69336bb49889d943cceda636bb2238dd18c776342a0244f7d2914d2d28706fad6 +87521a68a0a12ffd310b1bdaf447f4cc489667ec71f6420aa1640d8b34face996fce39face48ba7aed51449d239c70c2e2965bbe52721d1c8fd898c4d3967b6f +d82f345c870b148f1165316eb90bccdd6bbb9f7e7215ed881047d801fb98efa0961b0a31db2916f9088611bfc26638866b13964448c069322d8e13740c7e235a +ac944ab5628448ec3a318ac0ededc9848cb033942edddda5f31e85d358703930a2c940bac68685c28e0fcb12c1173ca089738468cb8579c6ec78881f09d7a188 +0bb8d0724beacf2dee5e2da29dcc888a2db69a5d5ffd657699c1f8b0a2e64ca607f9a49ee77bb576ee5f01a8d8c4f5eabd5aaf96fb5300341ac14a532eba4fbf +d3ec74fd0cab81d2438bef6ebd5b2d1b78cd7f758373db973f03af40a97f6f03dfef07104503af4029dedfc07b5ebd1278065e81527c6d035f2fb5bb5eddc02b +5048497cb8812ef9b56ab05c6d0e99307ac30a6ffa5ebf5ec99caf50500d7975c929262c16db6a2d420f59d2078004522448ec88c50c4fd008aa3840941c24c4 +d923d3100a6f8662c661b85429f54b55f82f7f9e3a5211413b1869d6921730e11b43928fc34709998996fb39787535c8e9ebd7274f5f9d3cfdfde4d9b393a7bf +66732b5786dd0d144f75bbb73f7df3cf8b2f9dbf7ffbf1edf36fd3a9d7f15cc7bff9e5ab377ffcf92ef7b0e255284ebf7bf9e6d5cbd3efbffeebe7e716efed04 +1de8f0218930776ee163e72e8b608116fef820b998c5304444b768c7538e622467b1f8ef89d040df5a208a2cb80e36e3783f01a9b101afcf1f1a8407613217c4 +e2f1661819c07dc6688725d628dc947369611ecee3a97df264aee3ee2274649b3b40b191e5de7c061a4b6c2e83101b34ef50140b34c531168ebcc60e31b6acee +0121465cf7c928619c4d84f380381d44ac21199203a39a56463748047959d80842be8dd8ecdf773a8cda56ddc5472612ee0d442de487981a61bc8ee602453697 +4314513de07b48843692834532d2713d2e20d3534c99d31b63ce6d36b71358af96f49b2033f6b4efd345642213410e6d3ef710633ab2cb0e831045331b7640e2 +50c77ec60fa144917387091b7c9f9977883c873ca0786bbaef136ca4fb6c35b8070aab535a1588bc324f2cb9bc8e9951bf83059d20aca4061a80a1eb1189cf14 +f93579f7ff3b7907113dfde1856545ef47d2ed8e8d7c5c50ccdb09b1de4d37d6247c1b6e5db803968cc987afdb5d348fef60b855369bd747d9fe28dbeeff5eb6 +b7ddcfef5fac57fa0cd22db7ade9765d6ddea3ad7bf709a174201614ef71b57de7d095c67d189476eab915e7cf72b3100ee59d0c1318b86982948d9330f10511 +e1204433d8e3975de964ca33d753eecc1887adbf1ab6fa96783a8ff6d9387d642d97e5e3692a1e1c89d578c9cfc7e17143a4e85a7df51896bb576ca7ea717949 +40da5e8484369949a26a21515f0eca20a98773089a85845ad97b61d1b4b06848f7cb546db0006a795660dbe4c066abe5fa1e9880113c55218ac7324f69aa97d9 +55c97c9f99de164ca302600fb1ac8055a69b92ebd6e5c9d5a5a5768e4c1b24b4723349a8c8a81ec64334c65975cad1f3d0b868ae9bab941af46428d47c505a2b +1af5c6bb585c36d760b7ae0d34d69582c6ce71cbad557d2899119ab5dc093cfac3613483dae172bb8be814de9f8d4492def097519659c24517f1300db8129d54 +0d222270e25012b55cb9fc3c0d34561aa2b8952b20081f2cb926c8ca87460e926e26194f267824f4b46b2332d2e929287caa15d6abcafcf26069c9e690ee4138 +3e760ee83cb98ba0c4fc7a5906704c38bc012aa7d11c1378a5990bd9aafed61a5326bbfa3b455543e938a2b310651d4517f314aea43ca7a3cef2186867d99a21 +a05a48b2467830950d560faad14df3ae9172d8da75cf369291d34473d5330d55915dd3ae62c60ccb36b016cbcb35798dd532c4a0697a874fa57b5d729b4bad5b +db27e45d02029ec7cfd275cfd110346aabc90c6a92f1a60c4bcdce46cddeb15ce019d4ced32434d5af2dddaec52def11d6e960f0529d1fecd6ab168626cb7da5 +8ab4faf6a17f9e60070f413cbaf022784e0557a9848f0f09820dd140ed4952d9805be491c86e0d3872e60969b98f4b7edb0b2a7e502835fc5ec1ab7aa542c36f +570b6ddfaf967b7eb9d4ed549e4063116154f6d3ef2e7d780d4517d9d71735bef105265abe69bb32625191a92f2c45455c7d812957b67f81710888cee35aa5df +ac363bb542b3daee17bc6ea7516806b54ea15b0beadd7e37f01bcdfe13d7395260af5d0dbc5aaf51a89583a0e0d54a927ea359a87b954adbabb71b3daffd24db +c6c0ca53f9c86201e155bc76ff050000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72 +656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c08 +2e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd0 +8a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa +4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f +6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72 +656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210007b740aaca0600008f1a00001600000000000000000000000000d60200 +007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027000000000000000000000000 +00d40900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000cf0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; +\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Table;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden1 \lsdlocked0 Placeholder Text; +\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2; +\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List; +\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1; +\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision; +\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1; +\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1; +\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2; +\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3; +\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4; +\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5; +\lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000f014 +4a9e792bd501feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Windows/dateutil/__init__.py b/Windows/dateutil/__init__.py new file mode 100644 index 00000000..0defb82e --- /dev/null +++ b/Windows/dateutil/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +try: + from ._version import version as __version__ +except ImportError: + __version__ = 'unknown' + +__all__ = ['easter', 'parser', 'relativedelta', 'rrule', 'tz', + 'utils', 'zoneinfo'] diff --git a/Windows/dateutil/_common.py b/Windows/dateutil/_common.py new file mode 100644 index 00000000..4eb2659b --- /dev/null +++ b/Windows/dateutil/_common.py @@ -0,0 +1,43 @@ +""" +Common code used in multiple modules. +""" + + +class weekday(object): + __slots__ = ["weekday", "n"] + + def __init__(self, weekday, n=None): + self.weekday = weekday + self.n = n + + def __call__(self, n): + if n == self.n: + return self + else: + return self.__class__(self.weekday, n) + + def __eq__(self, other): + try: + if self.weekday != other.weekday or self.n != other.n: + return False + except AttributeError: + return False + return True + + def __hash__(self): + return hash(( + self.weekday, + self.n, + )) + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + s = ("MO", "TU", "WE", "TH", "FR", "SA", "SU")[self.weekday] + if not self.n: + return s + else: + return "%s(%+d)" % (s, self.n) + +# vim:ts=4:sw=4:et diff --git a/Windows/dateutil/_version.py b/Windows/dateutil/_version.py new file mode 100644 index 00000000..670d7ab7 --- /dev/null +++ b/Windows/dateutil/_version.py @@ -0,0 +1,4 @@ +# coding: utf-8 +# file generated by setuptools_scm +# don't change, don't track in version control +version = '2.8.0' diff --git a/Windows/dateutil/easter.py b/Windows/dateutil/easter.py new file mode 100644 index 00000000..53b7c789 --- /dev/null +++ b/Windows/dateutil/easter.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +""" +This module offers a generic easter computing method for any given year, using +Western, Orthodox or Julian algorithms. +""" + +import datetime + +__all__ = ["easter", "EASTER_JULIAN", "EASTER_ORTHODOX", "EASTER_WESTERN"] + +EASTER_JULIAN = 1 +EASTER_ORTHODOX = 2 +EASTER_WESTERN = 3 + + +def easter(year, method=EASTER_WESTERN): + """ + This method was ported from the work done by GM Arts, + on top of the algorithm by Claus Tondering, which was + based in part on the algorithm of Ouding (1940), as + quoted in "Explanatory Supplement to the Astronomical + Almanac", P. Kenneth Seidelmann, editor. + + This algorithm implements three different easter + calculation methods: + + 1 - Original calculation in Julian calendar, valid in + dates after 326 AD + 2 - Original method, with date converted to Gregorian + calendar, valid in years 1583 to 4099 + 3 - Revised method, in Gregorian calendar, valid in + years 1583 to 4099 as well + + These methods are represented by the constants: + + * ``EASTER_JULIAN = 1`` + * ``EASTER_ORTHODOX = 2`` + * ``EASTER_WESTERN = 3`` + + The default method is method 3. + + More about the algorithm may be found at: + + `GM Arts: Easter Algorithms `_ + + and + + `The Calendar FAQ: Easter `_ + + """ + + if not (1 <= method <= 3): + raise ValueError("invalid method") + + # g - Golden year - 1 + # c - Century + # h - (23 - Epact) mod 30 + # i - Number of days from March 21 to Paschal Full Moon + # j - Weekday for PFM (0=Sunday, etc) + # p - Number of days from March 21 to Sunday on or before PFM + # (-6 to 28 methods 1 & 3, to 56 for method 2) + # e - Extra days to add for method 2 (converting Julian + # date to Gregorian date) + + y = year + g = y % 19 + e = 0 + if method < 3: + # Old method + i = (19*g + 15) % 30 + j = (y + y//4 + i) % 7 + if method == 2: + # Extra dates to convert Julian to Gregorian date + e = 10 + if y > 1600: + e = e + y//100 - 16 - (y//100 - 16)//4 + else: + # New method + c = y//100 + h = (c - c//4 - (8*c + 13)//25 + 19*g + 15) % 30 + i = h - (h//28)*(1 - (h//28)*(29//(h + 1))*((21 - g)//11)) + j = (y + y//4 + i + 2 - c + c//4) % 7 + + # p can be from -6 to 56 corresponding to dates 22 March to 23 May + # (later dates apply to method 2, although 23 May never actually occurs) + p = i - j + e + d = 1 + (p + 27 + (p + 6)//40) % 31 + m = 3 + (p + 26)//30 + return datetime.date(int(y), int(m), int(d)) diff --git a/Windows/dateutil/parser/__init__.py b/Windows/dateutil/parser/__init__.py new file mode 100644 index 00000000..216762c0 --- /dev/null +++ b/Windows/dateutil/parser/__init__.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +from ._parser import parse, parser, parserinfo +from ._parser import DEFAULTPARSER, DEFAULTTZPARSER +from ._parser import UnknownTimezoneWarning + +from ._parser import __doc__ + +from .isoparser import isoparser, isoparse + +__all__ = ['parse', 'parser', 'parserinfo', + 'isoparse', 'isoparser', + 'UnknownTimezoneWarning'] + + +### +# Deprecate portions of the private interface so that downstream code that +# is improperly relying on it is given *some* notice. + + +def __deprecated_private_func(f): + from functools import wraps + import warnings + + msg = ('{name} is a private function and may break without warning, ' + 'it will be moved and or renamed in future versions.') + msg = msg.format(name=f.__name__) + + @wraps(f) + def deprecated_func(*args, **kwargs): + warnings.warn(msg, DeprecationWarning) + return f(*args, **kwargs) + + return deprecated_func + +def __deprecate_private_class(c): + import warnings + + msg = ('{name} is a private class and may break without warning, ' + 'it will be moved and or renamed in future versions.') + msg = msg.format(name=c.__name__) + + class private_class(c): + __doc__ = c.__doc__ + + def __init__(self, *args, **kwargs): + warnings.warn(msg, DeprecationWarning) + super(private_class, self).__init__(*args, **kwargs) + + private_class.__name__ = c.__name__ + + return private_class + + +from ._parser import _timelex, _resultbase +from ._parser import _tzparser, _parsetz + +_timelex = __deprecate_private_class(_timelex) +_tzparser = __deprecate_private_class(_tzparser) +_resultbase = __deprecate_private_class(_resultbase) +_parsetz = __deprecated_private_func(_parsetz) diff --git a/Windows/dateutil/parser/_parser.py b/Windows/dateutil/parser/_parser.py new file mode 100644 index 00000000..0da0f3e6 --- /dev/null +++ b/Windows/dateutil/parser/_parser.py @@ -0,0 +1,1580 @@ +# -*- coding: utf-8 -*- +""" +This module offers a generic date/time string parser which is able to parse +most known formats to represent a date and/or time. + +This module attempts to be forgiving with regards to unlikely input formats, +returning a datetime object even for dates which are ambiguous. If an element +of a date/time stamp is omitted, the following rules are applied: + +- If AM or PM is left unspecified, a 24-hour clock is assumed, however, an hour + on a 12-hour clock (``0 <= hour <= 12``) *must* be specified if AM or PM is + specified. +- If a time zone is omitted, a timezone-naive datetime is returned. + +If any other elements are missing, they are taken from the +:class:`datetime.datetime` object passed to the parameter ``default``. If this +results in a day number exceeding the valid number of days per month, the +value falls back to the end of the month. + +Additional resources about date/time string formats can be found below: + +- `A summary of the international standard date and time notation + `_ +- `W3C Date and Time Formats `_ +- `Time Formats (Planetary Rings Node) `_ +- `CPAN ParseDate module + `_ +- `Java SimpleDateFormat Class + `_ +""" +from __future__ import unicode_literals + +import datetime +import re +import string +import time +import warnings + +from calendar import monthrange +from io import StringIO + +import six +from six import integer_types, text_type + +from decimal import Decimal + +from warnings import warn + +from .. import relativedelta +from .. import tz + +__all__ = ["parse", "parserinfo"] + + +# TODO: pandas.core.tools.datetimes imports this explicitly. Might be worth +# making public and/or figuring out if there is something we can +# take off their plate. +class _timelex(object): + # Fractional seconds are sometimes split by a comma + _split_decimal = re.compile("([.,])") + + def __init__(self, instream): + if six.PY2: + # In Python 2, we can't duck type properly because unicode has + # a 'decode' function, and we'd be double-decoding + if isinstance(instream, (bytes, bytearray)): + instream = instream.decode() + else: + if getattr(instream, 'decode', None) is not None: + instream = instream.decode() + + if isinstance(instream, text_type): + instream = StringIO(instream) + elif getattr(instream, 'read', None) is None: + raise TypeError('Parser must be a string or character stream, not ' + '{itype}'.format(itype=instream.__class__.__name__)) + + self.instream = instream + self.charstack = [] + self.tokenstack = [] + self.eof = False + + def get_token(self): + """ + This function breaks the time string into lexical units (tokens), which + can be parsed by the parser. Lexical units are demarcated by changes in + the character set, so any continuous string of letters is considered + one unit, any continuous string of numbers is considered one unit. + + The main complication arises from the fact that dots ('.') can be used + both as separators (e.g. "Sep.20.2009") or decimal points (e.g. + "4:30:21.447"). As such, it is necessary to read the full context of + any dot-separated strings before breaking it into tokens; as such, this + function maintains a "token stack", for when the ambiguous context + demands that multiple tokens be parsed at once. + """ + if self.tokenstack: + return self.tokenstack.pop(0) + + seenletters = False + token = None + state = None + + while not self.eof: + # We only realize that we've reached the end of a token when we + # find a character that's not part of the current token - since + # that character may be part of the next token, it's stored in the + # charstack. + if self.charstack: + nextchar = self.charstack.pop(0) + else: + nextchar = self.instream.read(1) + while nextchar == '\x00': + nextchar = self.instream.read(1) + + if not nextchar: + self.eof = True + break + elif not state: + # First character of the token - determines if we're starting + # to parse a word, a number or something else. + token = nextchar + if self.isword(nextchar): + state = 'a' + elif self.isnum(nextchar): + state = '0' + elif self.isspace(nextchar): + token = ' ' + break # emit token + else: + break # emit token + elif state == 'a': + # If we've already started reading a word, we keep reading + # letters until we find something that's not part of a word. + seenletters = True + if self.isword(nextchar): + token += nextchar + elif nextchar == '.': + token += nextchar + state = 'a.' + else: + self.charstack.append(nextchar) + break # emit token + elif state == '0': + # If we've already started reading a number, we keep reading + # numbers until we find something that doesn't fit. + if self.isnum(nextchar): + token += nextchar + elif nextchar == '.' or (nextchar == ',' and len(token) >= 2): + token += nextchar + state = '0.' + else: + self.charstack.append(nextchar) + break # emit token + elif state == 'a.': + # If we've seen some letters and a dot separator, continue + # parsing, and the tokens will be broken up later. + seenletters = True + if nextchar == '.' or self.isword(nextchar): + token += nextchar + elif self.isnum(nextchar) and token[-1] == '.': + token += nextchar + state = '0.' + else: + self.charstack.append(nextchar) + break # emit token + elif state == '0.': + # If we've seen at least one dot separator, keep going, we'll + # break up the tokens later. + if nextchar == '.' or self.isnum(nextchar): + token += nextchar + elif self.isword(nextchar) and token[-1] == '.': + token += nextchar + state = 'a.' + else: + self.charstack.append(nextchar) + break # emit token + + if (state in ('a.', '0.') and (seenletters or token.count('.') > 1 or + token[-1] in '.,')): + l = self._split_decimal.split(token) + token = l[0] + for tok in l[1:]: + if tok: + self.tokenstack.append(tok) + + if state == '0.' and token.count('.') == 0: + token = token.replace(',', '.') + + return token + + def __iter__(self): + return self + + def __next__(self): + token = self.get_token() + if token is None: + raise StopIteration + + return token + + def next(self): + return self.__next__() # Python 2.x support + + @classmethod + def split(cls, s): + return list(cls(s)) + + @classmethod + def isword(cls, nextchar): + """ Whether or not the next character is part of a word """ + return nextchar.isalpha() + + @classmethod + def isnum(cls, nextchar): + """ Whether the next character is part of a number """ + return nextchar.isdigit() + + @classmethod + def isspace(cls, nextchar): + """ Whether the next character is whitespace """ + return nextchar.isspace() + + +class _resultbase(object): + + def __init__(self): + for attr in self.__slots__: + setattr(self, attr, None) + + def _repr(self, classname): + l = [] + for attr in self.__slots__: + value = getattr(self, attr) + if value is not None: + l.append("%s=%s" % (attr, repr(value))) + return "%s(%s)" % (classname, ", ".join(l)) + + def __len__(self): + return (sum(getattr(self, attr) is not None + for attr in self.__slots__)) + + def __repr__(self): + return self._repr(self.__class__.__name__) + + +class parserinfo(object): + """ + Class which handles what inputs are accepted. Subclass this to customize + the language and acceptable values for each parameter. + + :param dayfirst: + Whether to interpret the first value in an ambiguous 3-integer date + (e.g. 01/05/09) as the day (``True``) or month (``False``). If + ``yearfirst`` is set to ``True``, this distinguishes between YDM + and YMD. Default is ``False``. + + :param yearfirst: + Whether to interpret the first value in an ambiguous 3-integer date + (e.g. 01/05/09) as the year. If ``True``, the first number is taken + to be the year, otherwise the last number is taken to be the year. + Default is ``False``. + """ + + # m from a.m/p.m, t from ISO T separator + JUMP = [" ", ".", ",", ";", "-", "/", "'", + "at", "on", "and", "ad", "m", "t", "of", + "st", "nd", "rd", "th"] + + WEEKDAYS = [("Mon", "Monday"), + ("Tue", "Tuesday"), # TODO: "Tues" + ("Wed", "Wednesday"), + ("Thu", "Thursday"), # TODO: "Thurs" + ("Fri", "Friday"), + ("Sat", "Saturday"), + ("Sun", "Sunday")] + MONTHS = [("Jan", "January"), + ("Feb", "February"), # TODO: "Febr" + ("Mar", "March"), + ("Apr", "April"), + ("May", "May"), + ("Jun", "June"), + ("Jul", "July"), + ("Aug", "August"), + ("Sep", "Sept", "September"), + ("Oct", "October"), + ("Nov", "November"), + ("Dec", "December")] + HMS = [("h", "hour", "hours"), + ("m", "minute", "minutes"), + ("s", "second", "seconds")] + AMPM = [("am", "a"), + ("pm", "p")] + UTCZONE = ["UTC", "GMT", "Z", "z"] + PERTAIN = ["of"] + TZOFFSET = {} + # TODO: ERA = ["AD", "BC", "CE", "BCE", "Stardate", + # "Anno Domini", "Year of Our Lord"] + + def __init__(self, dayfirst=False, yearfirst=False): + self._jump = self._convert(self.JUMP) + self._weekdays = self._convert(self.WEEKDAYS) + self._months = self._convert(self.MONTHS) + self._hms = self._convert(self.HMS) + self._ampm = self._convert(self.AMPM) + self._utczone = self._convert(self.UTCZONE) + self._pertain = self._convert(self.PERTAIN) + + self.dayfirst = dayfirst + self.yearfirst = yearfirst + + self._year = time.localtime().tm_year + self._century = self._year // 100 * 100 + + def _convert(self, lst): + dct = {} + for i, v in enumerate(lst): + if isinstance(v, tuple): + for v in v: + dct[v.lower()] = i + else: + dct[v.lower()] = i + return dct + + def jump(self, name): + return name.lower() in self._jump + + def weekday(self, name): + try: + return self._weekdays[name.lower()] + except KeyError: + pass + return None + + def month(self, name): + try: + return self._months[name.lower()] + 1 + except KeyError: + pass + return None + + def hms(self, name): + try: + return self._hms[name.lower()] + except KeyError: + return None + + def ampm(self, name): + try: + return self._ampm[name.lower()] + except KeyError: + return None + + def pertain(self, name): + return name.lower() in self._pertain + + def utczone(self, name): + return name.lower() in self._utczone + + def tzoffset(self, name): + if name in self._utczone: + return 0 + + return self.TZOFFSET.get(name) + + def convertyear(self, year, century_specified=False): + """ + Converts two-digit years to year within [-50, 49] + range of self._year (current local time) + """ + + # Function contract is that the year is always positive + assert year >= 0 + + if year < 100 and not century_specified: + # assume current century to start + year += self._century + + if year >= self._year + 50: # if too far in future + year -= 100 + elif year < self._year - 50: # if too far in past + year += 100 + + return year + + def validate(self, res): + # move to info + if res.year is not None: + res.year = self.convertyear(res.year, res.century_specified) + + if ((res.tzoffset == 0 and not res.tzname) or + (res.tzname == 'Z' or res.tzname == 'z')): + res.tzname = "UTC" + res.tzoffset = 0 + elif res.tzoffset != 0 and res.tzname and self.utczone(res.tzname): + res.tzoffset = 0 + return True + + +class _ymd(list): + def __init__(self, *args, **kwargs): + super(self.__class__, self).__init__(*args, **kwargs) + self.century_specified = False + self.dstridx = None + self.mstridx = None + self.ystridx = None + + @property + def has_year(self): + return self.ystridx is not None + + @property + def has_month(self): + return self.mstridx is not None + + @property + def has_day(self): + return self.dstridx is not None + + def could_be_day(self, value): + if self.has_day: + return False + elif not self.has_month: + return 1 <= value <= 31 + elif not self.has_year: + # Be permissive, assume leapyear + month = self[self.mstridx] + return 1 <= value <= monthrange(2000, month)[1] + else: + month = self[self.mstridx] + year = self[self.ystridx] + return 1 <= value <= monthrange(year, month)[1] + + def append(self, val, label=None): + if hasattr(val, '__len__'): + if val.isdigit() and len(val) > 2: + self.century_specified = True + if label not in [None, 'Y']: # pragma: no cover + raise ValueError(label) + label = 'Y' + elif val > 100: + self.century_specified = True + if label not in [None, 'Y']: # pragma: no cover + raise ValueError(label) + label = 'Y' + + super(self.__class__, self).append(int(val)) + + if label == 'M': + if self.has_month: + raise ValueError('Month is already set') + self.mstridx = len(self) - 1 + elif label == 'D': + if self.has_day: + raise ValueError('Day is already set') + self.dstridx = len(self) - 1 + elif label == 'Y': + if self.has_year: + raise ValueError('Year is already set') + self.ystridx = len(self) - 1 + + def _resolve_from_stridxs(self, strids): + """ + Try to resolve the identities of year/month/day elements using + ystridx, mstridx, and dstridx, if enough of these are specified. + """ + if len(self) == 3 and len(strids) == 2: + # we can back out the remaining stridx value + missing = [x for x in range(3) if x not in strids.values()] + key = [x for x in ['y', 'm', 'd'] if x not in strids] + assert len(missing) == len(key) == 1 + key = key[0] + val = missing[0] + strids[key] = val + + assert len(self) == len(strids) # otherwise this should not be called + out = {key: self[strids[key]] for key in strids} + return (out.get('y'), out.get('m'), out.get('d')) + + def resolve_ymd(self, yearfirst, dayfirst): + len_ymd = len(self) + year, month, day = (None, None, None) + + strids = (('y', self.ystridx), + ('m', self.mstridx), + ('d', self.dstridx)) + + strids = {key: val for key, val in strids if val is not None} + if (len(self) == len(strids) > 0 or + (len(self) == 3 and len(strids) == 2)): + return self._resolve_from_stridxs(strids) + + mstridx = self.mstridx + + if len_ymd > 3: + raise ValueError("More than three YMD values") + elif len_ymd == 1 or (mstridx is not None and len_ymd == 2): + # One member, or two members with a month string + if mstridx is not None: + month = self[mstridx] + # since mstridx is 0 or 1, self[mstridx-1] always + # looks up the other element + other = self[mstridx - 1] + else: + other = self[0] + + if len_ymd > 1 or mstridx is None: + if other > 31: + year = other + else: + day = other + + elif len_ymd == 2: + # Two members with numbers + if self[0] > 31: + # 99-01 + year, month = self + elif self[1] > 31: + # 01-99 + month, year = self + elif dayfirst and self[1] <= 12: + # 13-01 + day, month = self + else: + # 01-13 + month, day = self + + elif len_ymd == 3: + # Three members + if mstridx == 0: + if self[1] > 31: + # Apr-2003-25 + month, year, day = self + else: + month, day, year = self + elif mstridx == 1: + if self[0] > 31 or (yearfirst and self[2] <= 31): + # 99-Jan-01 + year, month, day = self + else: + # 01-Jan-01 + # Give precendence to day-first, since + # two-digit years is usually hand-written. + day, month, year = self + + elif mstridx == 2: + # WTF!? + if self[1] > 31: + # 01-99-Jan + day, year, month = self + else: + # 99-01-Jan + year, day, month = self + + else: + if (self[0] > 31 or + self.ystridx == 0 or + (yearfirst and self[1] <= 12 and self[2] <= 31)): + # 99-01-01 + if dayfirst and self[2] <= 12: + year, day, month = self + else: + year, month, day = self + elif self[0] > 12 or (dayfirst and self[1] <= 12): + # 13-01-01 + day, month, year = self + else: + # 01-13-01 + month, day, year = self + + return year, month, day + + +class parser(object): + def __init__(self, info=None): + self.info = info or parserinfo() + + def parse(self, timestr, default=None, + ignoretz=False, tzinfos=None, **kwargs): + """ + Parse the date/time string into a :class:`datetime.datetime` object. + + :param timestr: + Any date/time string using the supported formats. + + :param default: + The default datetime object, if this is a datetime object and not + ``None``, elements specified in ``timestr`` replace elements in the + default object. + + :param ignoretz: + If set ``True``, time zones in parsed strings are ignored and a + naive :class:`datetime.datetime` object is returned. + + :param tzinfos: + Additional time zone names / aliases which may be present in the + string. This argument maps time zone names (and optionally offsets + from those time zones) to time zones. This parameter can be a + dictionary with timezone aliases mapping time zone names to time + zones or a function taking two parameters (``tzname`` and + ``tzoffset``) and returning a time zone. + + The timezones to which the names are mapped can be an integer + offset from UTC in seconds or a :class:`tzinfo` object. + + .. doctest:: + :options: +NORMALIZE_WHITESPACE + + >>> from dateutil.parser import parse + >>> from dateutil.tz import gettz + >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")} + >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos) + datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200)) + >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos) + datetime.datetime(2012, 1, 19, 17, 21, + tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago')) + + This parameter is ignored if ``ignoretz`` is set. + + :param \\*\\*kwargs: + Keyword arguments as passed to ``_parse()``. + + :return: + Returns a :class:`datetime.datetime` object or, if the + ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the + first element being a :class:`datetime.datetime` object, the second + a tuple containing the fuzzy tokens. + + :raises ValueError: + Raised for invalid or unknown string format, if the provided + :class:`tzinfo` is not in a valid format, or if an invalid date + would be created. + + :raises TypeError: + Raised for non-string or character stream input. + + :raises OverflowError: + Raised if the parsed date exceeds the largest valid C integer on + your system. + """ + + if default is None: + default = datetime.datetime.now().replace(hour=0, minute=0, + second=0, microsecond=0) + + res, skipped_tokens = self._parse(timestr, **kwargs) + + if res is None: + raise ValueError("Unknown string format:", timestr) + + if len(res) == 0: + raise ValueError("String does not contain a date:", timestr) + + ret = self._build_naive(res, default) + + if not ignoretz: + ret = self._build_tzaware(ret, res, tzinfos) + + if kwargs.get('fuzzy_with_tokens', False): + return ret, skipped_tokens + else: + return ret + + class _result(_resultbase): + __slots__ = ["year", "month", "day", "weekday", + "hour", "minute", "second", "microsecond", + "tzname", "tzoffset", "ampm","any_unused_tokens"] + + def _parse(self, timestr, dayfirst=None, yearfirst=None, fuzzy=False, + fuzzy_with_tokens=False): + """ + Private method which performs the heavy lifting of parsing, called from + ``parse()``, which passes on its ``kwargs`` to this function. + + :param timestr: + The string to parse. + + :param dayfirst: + Whether to interpret the first value in an ambiguous 3-integer date + (e.g. 01/05/09) as the day (``True``) or month (``False``). If + ``yearfirst`` is set to ``True``, this distinguishes between YDM + and YMD. If set to ``None``, this value is retrieved from the + current :class:`parserinfo` object (which itself defaults to + ``False``). + + :param yearfirst: + Whether to interpret the first value in an ambiguous 3-integer date + (e.g. 01/05/09) as the year. If ``True``, the first number is taken + to be the year, otherwise the last number is taken to be the year. + If this is set to ``None``, the value is retrieved from the current + :class:`parserinfo` object (which itself defaults to ``False``). + + :param fuzzy: + Whether to allow fuzzy parsing, allowing for string like "Today is + January 1, 2047 at 8:21:00AM". + + :param fuzzy_with_tokens: + If ``True``, ``fuzzy`` is automatically set to True, and the parser + will return a tuple where the first element is the parsed + :class:`datetime.datetime` datetimestamp and the second element is + a tuple containing the portions of the string which were ignored: + + .. doctest:: + + >>> from dateutil.parser import parse + >>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True) + (datetime.datetime(2047, 1, 1, 8, 21), (u'Today is ', u' ', u'at ')) + + """ + if fuzzy_with_tokens: + fuzzy = True + + info = self.info + + if dayfirst is None: + dayfirst = info.dayfirst + + if yearfirst is None: + yearfirst = info.yearfirst + + res = self._result() + l = _timelex.split(timestr) # Splits the timestr into tokens + + skipped_idxs = [] + + # year/month/day list + ymd = _ymd() + + len_l = len(l) + i = 0 + try: + while i < len_l: + + # Check if it's a number + value_repr = l[i] + try: + value = float(value_repr) + except ValueError: + value = None + + if value is not None: + # Numeric token + i = self._parse_numeric_token(l, i, info, ymd, res, fuzzy) + + # Check weekday + elif info.weekday(l[i]) is not None: + value = info.weekday(l[i]) + res.weekday = value + + # Check month name + elif info.month(l[i]) is not None: + value = info.month(l[i]) + ymd.append(value, 'M') + + if i + 1 < len_l: + if l[i + 1] in ('-', '/'): + # Jan-01[-99] + sep = l[i + 1] + ymd.append(l[i + 2]) + + if i + 3 < len_l and l[i + 3] == sep: + # Jan-01-99 + ymd.append(l[i + 4]) + i += 2 + + i += 2 + + elif (i + 4 < len_l and l[i + 1] == l[i + 3] == ' ' and + info.pertain(l[i + 2])): + # Jan of 01 + # In this case, 01 is clearly year + if l[i + 4].isdigit(): + # Convert it here to become unambiguous + value = int(l[i + 4]) + year = str(info.convertyear(value)) + ymd.append(year, 'Y') + else: + # Wrong guess + pass + # TODO: not hit in tests + i += 4 + + # Check am/pm + elif info.ampm(l[i]) is not None: + value = info.ampm(l[i]) + val_is_ampm = self._ampm_valid(res.hour, res.ampm, fuzzy) + + if val_is_ampm: + res.hour = self._adjust_ampm(res.hour, value) + res.ampm = value + + elif fuzzy: + skipped_idxs.append(i) + + # Check for a timezone name + elif self._could_be_tzname(res.hour, res.tzname, res.tzoffset, l[i]): + res.tzname = l[i] + res.tzoffset = info.tzoffset(res.tzname) + + # Check for something like GMT+3, or BRST+3. Notice + # that it doesn't mean "I am 3 hours after GMT", but + # "my time +3 is GMT". If found, we reverse the + # logic so that timezone parsing code will get it + # right. + if i + 1 < len_l and l[i + 1] in ('+', '-'): + l[i + 1] = ('+', '-')[l[i + 1] == '+'] + res.tzoffset = None + if info.utczone(res.tzname): + # With something like GMT+3, the timezone + # is *not* GMT. + res.tzname = None + + # Check for a numbered timezone + elif res.hour is not None and l[i] in ('+', '-'): + signal = (-1, 1)[l[i] == '+'] + len_li = len(l[i + 1]) + + # TODO: check that l[i + 1] is integer? + if len_li == 4: + # -0300 + hour_offset = int(l[i + 1][:2]) + min_offset = int(l[i + 1][2:]) + elif i + 2 < len_l and l[i + 2] == ':': + # -03:00 + hour_offset = int(l[i + 1]) + min_offset = int(l[i + 3]) # TODO: Check that l[i+3] is minute-like? + i += 2 + elif len_li <= 2: + # -[0]3 + hour_offset = int(l[i + 1][:2]) + min_offset = 0 + else: + raise ValueError(timestr) + + res.tzoffset = signal * (hour_offset * 3600 + min_offset * 60) + + # Look for a timezone name between parenthesis + if (i + 5 < len_l and + info.jump(l[i + 2]) and l[i + 3] == '(' and + l[i + 5] == ')' and + 3 <= len(l[i + 4]) and + self._could_be_tzname(res.hour, res.tzname, + None, l[i + 4])): + # -0300 (BRST) + res.tzname = l[i + 4] + i += 4 + + i += 1 + + # Check jumps + elif not (info.jump(l[i]) or fuzzy): + raise ValueError(timestr) + + else: + skipped_idxs.append(i) + i += 1 + + # Process year/month/day + year, month, day = ymd.resolve_ymd(yearfirst, dayfirst) + + res.century_specified = ymd.century_specified + res.year = year + res.month = month + res.day = day + + except (IndexError, ValueError): + return None, None + + if not info.validate(res): + return None, None + + if fuzzy_with_tokens: + skipped_tokens = self._recombine_skipped(l, skipped_idxs) + return res, tuple(skipped_tokens) + else: + return res, None + + def _parse_numeric_token(self, tokens, idx, info, ymd, res, fuzzy): + # Token is a number + value_repr = tokens[idx] + try: + value = self._to_decimal(value_repr) + except Exception as e: + six.raise_from(ValueError('Unknown numeric token'), e) + + len_li = len(value_repr) + + len_l = len(tokens) + + if (len(ymd) == 3 and len_li in (2, 4) and + res.hour is None and + (idx + 1 >= len_l or + (tokens[idx + 1] != ':' and + info.hms(tokens[idx + 1]) is None))): + # 19990101T23[59] + s = tokens[idx] + res.hour = int(s[:2]) + + if len_li == 4: + res.minute = int(s[2:]) + + elif len_li == 6 or (len_li > 6 and tokens[idx].find('.') == 6): + # YYMMDD or HHMMSS[.ss] + s = tokens[idx] + + if not ymd and '.' not in tokens[idx]: + ymd.append(s[:2]) + ymd.append(s[2:4]) + ymd.append(s[4:]) + else: + # 19990101T235959[.59] + + # TODO: Check if res attributes already set. + res.hour = int(s[:2]) + res.minute = int(s[2:4]) + res.second, res.microsecond = self._parsems(s[4:]) + + elif len_li in (8, 12, 14): + # YYYYMMDD + s = tokens[idx] + ymd.append(s[:4], 'Y') + ymd.append(s[4:6]) + ymd.append(s[6:8]) + + if len_li > 8: + res.hour = int(s[8:10]) + res.minute = int(s[10:12]) + + if len_li > 12: + res.second = int(s[12:]) + + elif self._find_hms_idx(idx, tokens, info, allow_jump=True) is not None: + # HH[ ]h or MM[ ]m or SS[.ss][ ]s + hms_idx = self._find_hms_idx(idx, tokens, info, allow_jump=True) + (idx, hms) = self._parse_hms(idx, tokens, info, hms_idx) + if hms is not None: + # TODO: checking that hour/minute/second are not + # already set? + self._assign_hms(res, value_repr, hms) + + elif idx + 2 < len_l and tokens[idx + 1] == ':': + # HH:MM[:SS[.ss]] + res.hour = int(value) + value = self._to_decimal(tokens[idx + 2]) # TODO: try/except for this? + (res.minute, res.second) = self._parse_min_sec(value) + + if idx + 4 < len_l and tokens[idx + 3] == ':': + res.second, res.microsecond = self._parsems(tokens[idx + 4]) + + idx += 2 + + idx += 2 + + elif idx + 1 < len_l and tokens[idx + 1] in ('-', '/', '.'): + sep = tokens[idx + 1] + ymd.append(value_repr) + + if idx + 2 < len_l and not info.jump(tokens[idx + 2]): + if tokens[idx + 2].isdigit(): + # 01-01[-01] + ymd.append(tokens[idx + 2]) + else: + # 01-Jan[-01] + value = info.month(tokens[idx + 2]) + + if value is not None: + ymd.append(value, 'M') + else: + raise ValueError() + + if idx + 3 < len_l and tokens[idx + 3] == sep: + # We have three members + value = info.month(tokens[idx + 4]) + + if value is not None: + ymd.append(value, 'M') + else: + ymd.append(tokens[idx + 4]) + idx += 2 + + idx += 1 + idx += 1 + + elif idx + 1 >= len_l or info.jump(tokens[idx + 1]): + if idx + 2 < len_l and info.ampm(tokens[idx + 2]) is not None: + # 12 am + hour = int(value) + res.hour = self._adjust_ampm(hour, info.ampm(tokens[idx + 2])) + idx += 1 + else: + # Year, month or day + ymd.append(value) + idx += 1 + + elif info.ampm(tokens[idx + 1]) is not None and (0 <= value < 24): + # 12am + hour = int(value) + res.hour = self._adjust_ampm(hour, info.ampm(tokens[idx + 1])) + idx += 1 + + elif ymd.could_be_day(value): + ymd.append(value) + + elif not fuzzy: + raise ValueError() + + return idx + + def _find_hms_idx(self, idx, tokens, info, allow_jump): + len_l = len(tokens) + + if idx+1 < len_l and info.hms(tokens[idx+1]) is not None: + # There is an "h", "m", or "s" label following this token. We take + # assign the upcoming label to the current token. + # e.g. the "12" in 12h" + hms_idx = idx + 1 + + elif (allow_jump and idx+2 < len_l and tokens[idx+1] == ' ' and + info.hms(tokens[idx+2]) is not None): + # There is a space and then an "h", "m", or "s" label. + # e.g. the "12" in "12 h" + hms_idx = idx + 2 + + elif idx > 0 and info.hms(tokens[idx-1]) is not None: + # There is a "h", "m", or "s" preceeding this token. Since neither + # of the previous cases was hit, there is no label following this + # token, so we use the previous label. + # e.g. the "04" in "12h04" + hms_idx = idx-1 + + elif (1 < idx == len_l-1 and tokens[idx-1] == ' ' and + info.hms(tokens[idx-2]) is not None): + # If we are looking at the final token, we allow for a + # backward-looking check to skip over a space. + # TODO: Are we sure this is the right condition here? + hms_idx = idx - 2 + + else: + hms_idx = None + + return hms_idx + + def _assign_hms(self, res, value_repr, hms): + # See GH issue #427, fixing float rounding + value = self._to_decimal(value_repr) + + if hms == 0: + # Hour + res.hour = int(value) + if value % 1: + res.minute = int(60*(value % 1)) + + elif hms == 1: + (res.minute, res.second) = self._parse_min_sec(value) + + elif hms == 2: + (res.second, res.microsecond) = self._parsems(value_repr) + + def _could_be_tzname(self, hour, tzname, tzoffset, token): + return (hour is not None and + tzname is None and + tzoffset is None and + len(token) <= 5 and + (all(x in string.ascii_uppercase for x in token) + or token in self.info.UTCZONE)) + + def _ampm_valid(self, hour, ampm, fuzzy): + """ + For fuzzy parsing, 'a' or 'am' (both valid English words) + may erroneously trigger the AM/PM flag. Deal with that + here. + """ + val_is_ampm = True + + # If there's already an AM/PM flag, this one isn't one. + if fuzzy and ampm is not None: + val_is_ampm = False + + # If AM/PM is found and hour is not, raise a ValueError + if hour is None: + if fuzzy: + val_is_ampm = False + else: + raise ValueError('No hour specified with AM or PM flag.') + elif not 0 <= hour <= 12: + # If AM/PM is found, it's a 12 hour clock, so raise + # an error for invalid range + if fuzzy: + val_is_ampm = False + else: + raise ValueError('Invalid hour specified for 12-hour clock.') + + return val_is_ampm + + def _adjust_ampm(self, hour, ampm): + if hour < 12 and ampm == 1: + hour += 12 + elif hour == 12 and ampm == 0: + hour = 0 + return hour + + def _parse_min_sec(self, value): + # TODO: Every usage of this function sets res.second to the return + # value. Are there any cases where second will be returned as None and + # we *dont* want to set res.second = None? + minute = int(value) + second = None + + sec_remainder = value % 1 + if sec_remainder: + second = int(60 * sec_remainder) + return (minute, second) + + def _parsems(self, value): + """Parse a I[.F] seconds value into (seconds, microseconds).""" + if "." not in value: + return int(value), 0 + else: + i, f = value.split(".") + return int(i), int(f.ljust(6, "0")[:6]) + + def _parse_hms(self, idx, tokens, info, hms_idx): + # TODO: Is this going to admit a lot of false-positives for when we + # just happen to have digits and "h", "m" or "s" characters in non-date + # text? I guess hex hashes won't have that problem, but there's plenty + # of random junk out there. + if hms_idx is None: + hms = None + new_idx = idx + elif hms_idx > idx: + hms = info.hms(tokens[hms_idx]) + new_idx = hms_idx + else: + # Looking backwards, increment one. + hms = info.hms(tokens[hms_idx]) + 1 + new_idx = idx + + return (new_idx, hms) + + def _recombine_skipped(self, tokens, skipped_idxs): + """ + >>> tokens = ["foo", " ", "bar", " ", "19June2000", "baz"] + >>> skipped_idxs = [0, 1, 2, 5] + >>> _recombine_skipped(tokens, skipped_idxs) + ["foo bar", "baz"] + """ + skipped_tokens = [] + for i, idx in enumerate(sorted(skipped_idxs)): + if i > 0 and idx - 1 == skipped_idxs[i - 1]: + skipped_tokens[-1] = skipped_tokens[-1] + tokens[idx] + else: + skipped_tokens.append(tokens[idx]) + + return skipped_tokens + + def _build_tzinfo(self, tzinfos, tzname, tzoffset): + if callable(tzinfos): + tzdata = tzinfos(tzname, tzoffset) + else: + tzdata = tzinfos.get(tzname) + # handle case where tzinfo is paased an options that returns None + # eg tzinfos = {'BRST' : None} + if isinstance(tzdata, datetime.tzinfo) or tzdata is None: + tzinfo = tzdata + elif isinstance(tzdata, text_type): + tzinfo = tz.tzstr(tzdata) + elif isinstance(tzdata, integer_types): + tzinfo = tz.tzoffset(tzname, tzdata) + return tzinfo + + def _build_tzaware(self, naive, res, tzinfos): + if (callable(tzinfos) or (tzinfos and res.tzname in tzinfos)): + tzinfo = self._build_tzinfo(tzinfos, res.tzname, res.tzoffset) + aware = naive.replace(tzinfo=tzinfo) + aware = self._assign_tzname(aware, res.tzname) + + elif res.tzname and res.tzname in time.tzname: + aware = naive.replace(tzinfo=tz.tzlocal()) + + # Handle ambiguous local datetime + aware = self._assign_tzname(aware, res.tzname) + + # This is mostly relevant for winter GMT zones parsed in the UK + if (aware.tzname() != res.tzname and + res.tzname in self.info.UTCZONE): + aware = aware.replace(tzinfo=tz.tzutc()) + + elif res.tzoffset == 0: + aware = naive.replace(tzinfo=tz.tzutc()) + + elif res.tzoffset: + aware = naive.replace(tzinfo=tz.tzoffset(res.tzname, res.tzoffset)) + + elif not res.tzname and not res.tzoffset: + # i.e. no timezone information was found. + aware = naive + + elif res.tzname: + # tz-like string was parsed but we don't know what to do + # with it + warnings.warn("tzname {tzname} identified but not understood. " + "Pass `tzinfos` argument in order to correctly " + "return a timezone-aware datetime. In a future " + "version, this will raise an " + "exception.".format(tzname=res.tzname), + category=UnknownTimezoneWarning) + aware = naive + + return aware + + def _build_naive(self, res, default): + repl = {} + for attr in ("year", "month", "day", "hour", + "minute", "second", "microsecond"): + value = getattr(res, attr) + if value is not None: + repl[attr] = value + + if 'day' not in repl: + # If the default day exceeds the last day of the month, fall back + # to the end of the month. + cyear = default.year if res.year is None else res.year + cmonth = default.month if res.month is None else res.month + cday = default.day if res.day is None else res.day + + if cday > monthrange(cyear, cmonth)[1]: + repl['day'] = monthrange(cyear, cmonth)[1] + + naive = default.replace(**repl) + + if res.weekday is not None and not res.day: + naive = naive + relativedelta.relativedelta(weekday=res.weekday) + + return naive + + def _assign_tzname(self, dt, tzname): + if dt.tzname() != tzname: + new_dt = tz.enfold(dt, fold=1) + if new_dt.tzname() == tzname: + return new_dt + + return dt + + def _to_decimal(self, val): + try: + decimal_value = Decimal(val) + # See GH 662, edge case, infinite value should not be converted via `_to_decimal` + if not decimal_value.is_finite(): + raise ValueError("Converted decimal value is infinite or NaN") + except Exception as e: + msg = "Could not convert %s to decimal" % val + six.raise_from(ValueError(msg), e) + else: + return decimal_value + + +DEFAULTPARSER = parser() + + +def parse(timestr, parserinfo=None, **kwargs): + """ + + Parse a string in one of the supported formats, using the + ``parserinfo`` parameters. + + :param timestr: + A string containing a date/time stamp. + + :param parserinfo: + A :class:`parserinfo` object containing parameters for the parser. + If ``None``, the default arguments to the :class:`parserinfo` + constructor are used. + + The ``**kwargs`` parameter takes the following keyword arguments: + + :param default: + The default datetime object, if this is a datetime object and not + ``None``, elements specified in ``timestr`` replace elements in the + default object. + + :param ignoretz: + If set ``True``, time zones in parsed strings are ignored and a naive + :class:`datetime` object is returned. + + :param tzinfos: + Additional time zone names / aliases which may be present in the + string. This argument maps time zone names (and optionally offsets + from those time zones) to time zones. This parameter can be a + dictionary with timezone aliases mapping time zone names to time + zones or a function taking two parameters (``tzname`` and + ``tzoffset``) and returning a time zone. + + The timezones to which the names are mapped can be an integer + offset from UTC in seconds or a :class:`tzinfo` object. + + .. doctest:: + :options: +NORMALIZE_WHITESPACE + + >>> from dateutil.parser import parse + >>> from dateutil.tz import gettz + >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")} + >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos) + datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200)) + >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos) + datetime.datetime(2012, 1, 19, 17, 21, + tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago')) + + This parameter is ignored if ``ignoretz`` is set. + + :param dayfirst: + Whether to interpret the first value in an ambiguous 3-integer date + (e.g. 01/05/09) as the day (``True``) or month (``False``). If + ``yearfirst`` is set to ``True``, this distinguishes between YDM and + YMD. If set to ``None``, this value is retrieved from the current + :class:`parserinfo` object (which itself defaults to ``False``). + + :param yearfirst: + Whether to interpret the first value in an ambiguous 3-integer date + (e.g. 01/05/09) as the year. If ``True``, the first number is taken to + be the year, otherwise the last number is taken to be the year. If + this is set to ``None``, the value is retrieved from the current + :class:`parserinfo` object (which itself defaults to ``False``). + + :param fuzzy: + Whether to allow fuzzy parsing, allowing for string like "Today is + January 1, 2047 at 8:21:00AM". + + :param fuzzy_with_tokens: + If ``True``, ``fuzzy`` is automatically set to True, and the parser + will return a tuple where the first element is the parsed + :class:`datetime.datetime` datetimestamp and the second element is + a tuple containing the portions of the string which were ignored: + + .. doctest:: + + >>> from dateutil.parser import parse + >>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True) + (datetime.datetime(2047, 1, 1, 8, 21), (u'Today is ', u' ', u'at ')) + + :return: + Returns a :class:`datetime.datetime` object or, if the + ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the + first element being a :class:`datetime.datetime` object, the second + a tuple containing the fuzzy tokens. + + :raises ValueError: + Raised for invalid or unknown string format, if the provided + :class:`tzinfo` is not in a valid format, or if an invalid date + would be created. + + :raises OverflowError: + Raised if the parsed date exceeds the largest valid C integer on + your system. + """ + if parserinfo: + return parser(parserinfo).parse(timestr, **kwargs) + else: + return DEFAULTPARSER.parse(timestr, **kwargs) + + +class _tzparser(object): + + class _result(_resultbase): + + __slots__ = ["stdabbr", "stdoffset", "dstabbr", "dstoffset", + "start", "end"] + + class _attr(_resultbase): + __slots__ = ["month", "week", "weekday", + "yday", "jyday", "day", "time"] + + def __repr__(self): + return self._repr("") + + def __init__(self): + _resultbase.__init__(self) + self.start = self._attr() + self.end = self._attr() + + def parse(self, tzstr): + res = self._result() + l = [x for x in re.split(r'([,:.]|[a-zA-Z]+|[0-9]+)',tzstr) if x] + used_idxs = list() + try: + + len_l = len(l) + + i = 0 + while i < len_l: + # BRST+3[BRDT[+2]] + j = i + while j < len_l and not [x for x in l[j] + if x in "0123456789:,-+"]: + j += 1 + if j != i: + if not res.stdabbr: + offattr = "stdoffset" + res.stdabbr = "".join(l[i:j]) + else: + offattr = "dstoffset" + res.dstabbr = "".join(l[i:j]) + + for ii in range(j): + used_idxs.append(ii) + i = j + if (i < len_l and (l[i] in ('+', '-') or l[i][0] in + "0123456789")): + if l[i] in ('+', '-'): + # Yes, that's right. See the TZ variable + # documentation. + signal = (1, -1)[l[i] == '+'] + used_idxs.append(i) + i += 1 + else: + signal = -1 + len_li = len(l[i]) + if len_li == 4: + # -0300 + setattr(res, offattr, (int(l[i][:2]) * 3600 + + int(l[i][2:]) * 60) * signal) + elif i + 1 < len_l and l[i + 1] == ':': + # -03:00 + setattr(res, offattr, + (int(l[i]) * 3600 + + int(l[i + 2]) * 60) * signal) + used_idxs.append(i) + i += 2 + elif len_li <= 2: + # -[0]3 + setattr(res, offattr, + int(l[i][:2]) * 3600 * signal) + else: + return None + used_idxs.append(i) + i += 1 + if res.dstabbr: + break + else: + break + + + if i < len_l: + for j in range(i, len_l): + if l[j] == ';': + l[j] = ',' + + assert l[i] == ',' + + i += 1 + + if i >= len_l: + pass + elif (8 <= l.count(',') <= 9 and + not [y for x in l[i:] if x != ',' + for y in x if y not in "0123456789+-"]): + # GMT0BST,3,0,30,3600,10,0,26,7200[,3600] + for x in (res.start, res.end): + x.month = int(l[i]) + used_idxs.append(i) + i += 2 + if l[i] == '-': + value = int(l[i + 1]) * -1 + used_idxs.append(i) + i += 1 + else: + value = int(l[i]) + used_idxs.append(i) + i += 2 + if value: + x.week = value + x.weekday = (int(l[i]) - 1) % 7 + else: + x.day = int(l[i]) + used_idxs.append(i) + i += 2 + x.time = int(l[i]) + used_idxs.append(i) + i += 2 + if i < len_l: + if l[i] in ('-', '+'): + signal = (-1, 1)[l[i] == "+"] + used_idxs.append(i) + i += 1 + else: + signal = 1 + used_idxs.append(i) + res.dstoffset = (res.stdoffset + int(l[i]) * signal) + + # This was a made-up format that is not in normal use + warn(('Parsed time zone "%s"' % tzstr) + + 'is in a non-standard dateutil-specific format, which ' + + 'is now deprecated; support for parsing this format ' + + 'will be removed in future versions. It is recommended ' + + 'that you switch to a standard format like the GNU ' + + 'TZ variable format.', tz.DeprecatedTzFormatWarning) + elif (l.count(',') == 2 and l[i:].count('/') <= 2 and + not [y for x in l[i:] if x not in (',', '/', 'J', 'M', + '.', '-', ':') + for y in x if y not in "0123456789"]): + for x in (res.start, res.end): + if l[i] == 'J': + # non-leap year day (1 based) + used_idxs.append(i) + i += 1 + x.jyday = int(l[i]) + elif l[i] == 'M': + # month[-.]week[-.]weekday + used_idxs.append(i) + i += 1 + x.month = int(l[i]) + used_idxs.append(i) + i += 1 + assert l[i] in ('-', '.') + used_idxs.append(i) + i += 1 + x.week = int(l[i]) + if x.week == 5: + x.week = -1 + used_idxs.append(i) + i += 1 + assert l[i] in ('-', '.') + used_idxs.append(i) + i += 1 + x.weekday = (int(l[i]) - 1) % 7 + else: + # year day (zero based) + x.yday = int(l[i]) + 1 + + used_idxs.append(i) + i += 1 + + if i < len_l and l[i] == '/': + used_idxs.append(i) + i += 1 + # start time + len_li = len(l[i]) + if len_li == 4: + # -0300 + x.time = (int(l[i][:2]) * 3600 + + int(l[i][2:]) * 60) + elif i + 1 < len_l and l[i + 1] == ':': + # -03:00 + x.time = int(l[i]) * 3600 + int(l[i + 2]) * 60 + used_idxs.append(i) + i += 2 + if i + 1 < len_l and l[i + 1] == ':': + used_idxs.append(i) + i += 2 + x.time += int(l[i]) + elif len_li <= 2: + # -[0]3 + x.time = (int(l[i][:2]) * 3600) + else: + return None + used_idxs.append(i) + i += 1 + + assert i == len_l or l[i] == ',' + + i += 1 + + assert i >= len_l + + except (IndexError, ValueError, AssertionError): + return None + + unused_idxs = set(range(len_l)).difference(used_idxs) + res.any_unused_tokens = not {l[n] for n in unused_idxs}.issubset({",",":"}) + return res + + +DEFAULTTZPARSER = _tzparser() + + +def _parsetz(tzstr): + return DEFAULTTZPARSER.parse(tzstr) + +class UnknownTimezoneWarning(RuntimeWarning): + """Raised when the parser finds a timezone it cannot parse into a tzinfo""" +# vim:ts=4:sw=4:et diff --git a/Windows/dateutil/parser/isoparser.py b/Windows/dateutil/parser/isoparser.py new file mode 100644 index 00000000..e3cf6d8c --- /dev/null +++ b/Windows/dateutil/parser/isoparser.py @@ -0,0 +1,411 @@ +# -*- coding: utf-8 -*- +""" +This module offers a parser for ISO-8601 strings + +It is intended to support all valid date, time and datetime formats per the +ISO-8601 specification. + +..versionadded:: 2.7.0 +""" +from datetime import datetime, timedelta, time, date +import calendar +from dateutil import tz + +from functools import wraps + +import re +import six + +__all__ = ["isoparse", "isoparser"] + + +def _takes_ascii(f): + @wraps(f) + def func(self, str_in, *args, **kwargs): + # If it's a stream, read the whole thing + str_in = getattr(str_in, 'read', lambda: str_in)() + + # If it's unicode, turn it into bytes, since ISO-8601 only covers ASCII + if isinstance(str_in, six.text_type): + # ASCII is the same in UTF-8 + try: + str_in = str_in.encode('ascii') + except UnicodeEncodeError as e: + msg = 'ISO-8601 strings should contain only ASCII characters' + six.raise_from(ValueError(msg), e) + + return f(self, str_in, *args, **kwargs) + + return func + + +class isoparser(object): + def __init__(self, sep=None): + """ + :param sep: + A single character that separates date and time portions. If + ``None``, the parser will accept any single character. + For strict ISO-8601 adherence, pass ``'T'``. + """ + if sep is not None: + if (len(sep) != 1 or ord(sep) >= 128 or sep in '0123456789'): + raise ValueError('Separator must be a single, non-numeric ' + + 'ASCII character') + + sep = sep.encode('ascii') + + self._sep = sep + + @_takes_ascii + def isoparse(self, dt_str): + """ + Parse an ISO-8601 datetime string into a :class:`datetime.datetime`. + + An ISO-8601 datetime string consists of a date portion, followed + optionally by a time portion - the date and time portions are separated + by a single character separator, which is ``T`` in the official + standard. Incomplete date formats (such as ``YYYY-MM``) may *not* be + combined with a time portion. + + Supported date formats are: + + Common: + + - ``YYYY`` + - ``YYYY-MM`` or ``YYYYMM`` + - ``YYYY-MM-DD`` or ``YYYYMMDD`` + + Uncommon: + + - ``YYYY-Www`` or ``YYYYWww`` - ISO week (day defaults to 0) + - ``YYYY-Www-D`` or ``YYYYWwwD`` - ISO week and day + + The ISO week and day numbering follows the same logic as + :func:`datetime.date.isocalendar`. + + Supported time formats are: + + - ``hh`` + - ``hh:mm`` or ``hhmm`` + - ``hh:mm:ss`` or ``hhmmss`` + - ``hh:mm:ss.ssssss`` (Up to 6 sub-second digits) + + Midnight is a special case for `hh`, as the standard supports both + 00:00 and 24:00 as a representation. The decimal separator can be + either a dot or a comma. + + + .. caution:: + + Support for fractional components other than seconds is part of the + ISO-8601 standard, but is not currently implemented in this parser. + + Supported time zone offset formats are: + + - `Z` (UTC) + - `±HH:MM` + - `±HHMM` + - `±HH` + + Offsets will be represented as :class:`dateutil.tz.tzoffset` objects, + with the exception of UTC, which will be represented as + :class:`dateutil.tz.tzutc`. Time zone offsets equivalent to UTC (such + as `+00:00`) will also be represented as :class:`dateutil.tz.tzutc`. + + :param dt_str: + A string or stream containing only an ISO-8601 datetime string + + :return: + Returns a :class:`datetime.datetime` representing the string. + Unspecified components default to their lowest value. + + .. warning:: + + As of version 2.7.0, the strictness of the parser should not be + considered a stable part of the contract. Any valid ISO-8601 string + that parses correctly with the default settings will continue to + parse correctly in future versions, but invalid strings that + currently fail (e.g. ``2017-01-01T00:00+00:00:00``) are not + guaranteed to continue failing in future versions if they encode + a valid date. + + .. versionadded:: 2.7.0 + """ + components, pos = self._parse_isodate(dt_str) + + if len(dt_str) > pos: + if self._sep is None or dt_str[pos:pos + 1] == self._sep: + components += self._parse_isotime(dt_str[pos + 1:]) + else: + raise ValueError('String contains unknown ISO components') + + if len(components) > 3 and components[3] == 24: + components[3] = 0 + return datetime(*components) + timedelta(days=1) + + return datetime(*components) + + @_takes_ascii + def parse_isodate(self, datestr): + """ + Parse the date portion of an ISO string. + + :param datestr: + The string portion of an ISO string, without a separator + + :return: + Returns a :class:`datetime.date` object + """ + components, pos = self._parse_isodate(datestr) + if pos < len(datestr): + raise ValueError('String contains unknown ISO ' + + 'components: {}'.format(datestr)) + return date(*components) + + @_takes_ascii + def parse_isotime(self, timestr): + """ + Parse the time portion of an ISO string. + + :param timestr: + The time portion of an ISO string, without a separator + + :return: + Returns a :class:`datetime.time` object + """ + components = self._parse_isotime(timestr) + if components[0] == 24: + components[0] = 0 + return time(*components) + + @_takes_ascii + def parse_tzstr(self, tzstr, zero_as_utc=True): + """ + Parse a valid ISO time zone string. + + See :func:`isoparser.isoparse` for details on supported formats. + + :param tzstr: + A string representing an ISO time zone offset + + :param zero_as_utc: + Whether to return :class:`dateutil.tz.tzutc` for zero-offset zones + + :return: + Returns :class:`dateutil.tz.tzoffset` for offsets and + :class:`dateutil.tz.tzutc` for ``Z`` and (if ``zero_as_utc`` is + specified) offsets equivalent to UTC. + """ + return self._parse_tzstr(tzstr, zero_as_utc=zero_as_utc) + + # Constants + _DATE_SEP = b'-' + _TIME_SEP = b':' + _FRACTION_REGEX = re.compile(b'[\\.,]([0-9]+)') + + def _parse_isodate(self, dt_str): + try: + return self._parse_isodate_common(dt_str) + except ValueError: + return self._parse_isodate_uncommon(dt_str) + + def _parse_isodate_common(self, dt_str): + len_str = len(dt_str) + components = [1, 1, 1] + + if len_str < 4: + raise ValueError('ISO string too short') + + # Year + components[0] = int(dt_str[0:4]) + pos = 4 + if pos >= len_str: + return components, pos + + has_sep = dt_str[pos:pos + 1] == self._DATE_SEP + if has_sep: + pos += 1 + + # Month + if len_str - pos < 2: + raise ValueError('Invalid common month') + + components[1] = int(dt_str[pos:pos + 2]) + pos += 2 + + if pos >= len_str: + if has_sep: + return components, pos + else: + raise ValueError('Invalid ISO format') + + if has_sep: + if dt_str[pos:pos + 1] != self._DATE_SEP: + raise ValueError('Invalid separator in ISO string') + pos += 1 + + # Day + if len_str - pos < 2: + raise ValueError('Invalid common day') + components[2] = int(dt_str[pos:pos + 2]) + return components, pos + 2 + + def _parse_isodate_uncommon(self, dt_str): + if len(dt_str) < 4: + raise ValueError('ISO string too short') + + # All ISO formats start with the year + year = int(dt_str[0:4]) + + has_sep = dt_str[4:5] == self._DATE_SEP + + pos = 4 + has_sep # Skip '-' if it's there + if dt_str[pos:pos + 1] == b'W': + # YYYY-?Www-?D? + pos += 1 + weekno = int(dt_str[pos:pos + 2]) + pos += 2 + + dayno = 1 + if len(dt_str) > pos: + if (dt_str[pos:pos + 1] == self._DATE_SEP) != has_sep: + raise ValueError('Inconsistent use of dash separator') + + pos += has_sep + + dayno = int(dt_str[pos:pos + 1]) + pos += 1 + + base_date = self._calculate_weekdate(year, weekno, dayno) + else: + # YYYYDDD or YYYY-DDD + if len(dt_str) - pos < 3: + raise ValueError('Invalid ordinal day') + + ordinal_day = int(dt_str[pos:pos + 3]) + pos += 3 + + if ordinal_day < 1 or ordinal_day > (365 + calendar.isleap(year)): + raise ValueError('Invalid ordinal day' + + ' {} for year {}'.format(ordinal_day, year)) + + base_date = date(year, 1, 1) + timedelta(days=ordinal_day - 1) + + components = [base_date.year, base_date.month, base_date.day] + return components, pos + + def _calculate_weekdate(self, year, week, day): + """ + Calculate the day of corresponding to the ISO year-week-day calendar. + + This function is effectively the inverse of + :func:`datetime.date.isocalendar`. + + :param year: + The year in the ISO calendar + + :param week: + The week in the ISO calendar - range is [1, 53] + + :param day: + The day in the ISO calendar - range is [1 (MON), 7 (SUN)] + + :return: + Returns a :class:`datetime.date` + """ + if not 0 < week < 54: + raise ValueError('Invalid week: {}'.format(week)) + + if not 0 < day < 8: # Range is 1-7 + raise ValueError('Invalid weekday: {}'.format(day)) + + # Get week 1 for the specific year: + jan_4 = date(year, 1, 4) # Week 1 always has January 4th in it + week_1 = jan_4 - timedelta(days=jan_4.isocalendar()[2] - 1) + + # Now add the specific number of weeks and days to get what we want + week_offset = (week - 1) * 7 + (day - 1) + return week_1 + timedelta(days=week_offset) + + def _parse_isotime(self, timestr): + len_str = len(timestr) + components = [0, 0, 0, 0, None] + pos = 0 + comp = -1 + + if len(timestr) < 2: + raise ValueError('ISO time too short') + + has_sep = len_str >= 3 and timestr[2:3] == self._TIME_SEP + + while pos < len_str and comp < 5: + comp += 1 + + if timestr[pos:pos + 1] in b'-+Zz': + # Detect time zone boundary + components[-1] = self._parse_tzstr(timestr[pos:]) + pos = len_str + break + + if comp < 3: + # Hour, minute, second + components[comp] = int(timestr[pos:pos + 2]) + pos += 2 + if (has_sep and pos < len_str and + timestr[pos:pos + 1] == self._TIME_SEP): + pos += 1 + + if comp == 3: + # Fraction of a second + frac = self._FRACTION_REGEX.match(timestr[pos:]) + if not frac: + continue + + us_str = frac.group(1)[:6] # Truncate to microseconds + components[comp] = int(us_str) * 10**(6 - len(us_str)) + pos += len(frac.group()) + + if pos < len_str: + raise ValueError('Unused components in ISO string') + + if components[0] == 24: + # Standard supports 00:00 and 24:00 as representations of midnight + if any(component != 0 for component in components[1:4]): + raise ValueError('Hour may only be 24 at 24:00:00.000') + + return components + + def _parse_tzstr(self, tzstr, zero_as_utc=True): + if tzstr == b'Z' or tzstr == b'z': + return tz.tzutc() + + if len(tzstr) not in {3, 5, 6}: + raise ValueError('Time zone offset must be 1, 3, 5 or 6 characters') + + if tzstr[0:1] == b'-': + mult = -1 + elif tzstr[0:1] == b'+': + mult = 1 + else: + raise ValueError('Time zone offset requires sign') + + hours = int(tzstr[1:3]) + if len(tzstr) == 3: + minutes = 0 + else: + minutes = int(tzstr[(4 if tzstr[3:4] == self._TIME_SEP else 3):]) + + if zero_as_utc and hours == 0 and minutes == 0: + return tz.tzutc() + else: + if minutes > 59: + raise ValueError('Invalid minutes in time zone offset') + + if hours > 23: + raise ValueError('Invalid hours in time zone offset') + + return tz.tzoffset(None, mult * (hours * 60 + minutes) * 60) + + +DEFAULT_ISOPARSER = isoparser() +isoparse = DEFAULT_ISOPARSER.isoparse diff --git a/Windows/dateutil/relativedelta.py b/Windows/dateutil/relativedelta.py new file mode 100644 index 00000000..c65c66e6 --- /dev/null +++ b/Windows/dateutil/relativedelta.py @@ -0,0 +1,599 @@ +# -*- coding: utf-8 -*- +import datetime +import calendar + +import operator +from math import copysign + +from six import integer_types +from warnings import warn + +from ._common import weekday + +MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) + +__all__ = ["relativedelta", "MO", "TU", "WE", "TH", "FR", "SA", "SU"] + + +class relativedelta(object): + """ + The relativedelta type is designed to be applied to an existing datetime and + can replace specific components of that datetime, or represents an interval + of time. + + It is based on the specification of the excellent work done by M.-A. Lemburg + in his + `mx.DateTime `_ extension. + However, notice that this type does *NOT* implement the same algorithm as + his work. Do *NOT* expect it to behave like mx.DateTime's counterpart. + + There are two different ways to build a relativedelta instance. The + first one is passing it two date/datetime classes:: + + relativedelta(datetime1, datetime2) + + The second one is passing it any number of the following keyword arguments:: + + relativedelta(arg1=x,arg2=y,arg3=z...) + + year, month, day, hour, minute, second, microsecond: + Absolute information (argument is singular); adding or subtracting a + relativedelta with absolute information does not perform an arithmetic + operation, but rather REPLACES the corresponding value in the + original datetime with the value(s) in relativedelta. + + years, months, weeks, days, hours, minutes, seconds, microseconds: + Relative information, may be negative (argument is plural); adding + or subtracting a relativedelta with relative information performs + the corresponding aritmetic operation on the original datetime value + with the information in the relativedelta. + + weekday: + One of the weekday instances (MO, TU, etc) available in the + relativedelta module. These instances may receive a parameter N, + specifying the Nth weekday, which could be positive or negative + (like MO(+1) or MO(-2)). Not specifying it is the same as specifying + +1. You can also use an integer, where 0=MO. This argument is always + relative e.g. if the calculated date is already Monday, using MO(1) + or MO(-1) won't change the day. To effectively make it absolute, use + it in combination with the day argument (e.g. day=1, MO(1) for first + Monday of the month). + + leapdays: + Will add given days to the date found, if year is a leap + year, and the date found is post 28 of february. + + yearday, nlyearday: + Set the yearday or the non-leap year day (jump leap days). + These are converted to day/month/leapdays information. + + There are relative and absolute forms of the keyword + arguments. The plural is relative, and the singular is + absolute. For each argument in the order below, the absolute form + is applied first (by setting each attribute to that value) and + then the relative form (by adding the value to the attribute). + + The order of attributes considered when this relativedelta is + added to a datetime is: + + 1. Year + 2. Month + 3. Day + 4. Hours + 5. Minutes + 6. Seconds + 7. Microseconds + + Finally, weekday is applied, using the rule described above. + + For example + + >>> from datetime import datetime + >>> from dateutil.relativedelta import relativedelta, MO + >>> dt = datetime(2018, 4, 9, 13, 37, 0) + >>> delta = relativedelta(hours=25, day=1, weekday=MO(1)) + >>> dt + delta + datetime.datetime(2018, 4, 2, 14, 37) + + First, the day is set to 1 (the first of the month), then 25 hours + are added, to get to the 2nd day and 14th hour, finally the + weekday is applied, but since the 2nd is already a Monday there is + no effect. + + """ + + def __init__(self, dt1=None, dt2=None, + years=0, months=0, days=0, leapdays=0, weeks=0, + hours=0, minutes=0, seconds=0, microseconds=0, + year=None, month=None, day=None, weekday=None, + yearday=None, nlyearday=None, + hour=None, minute=None, second=None, microsecond=None): + + if dt1 and dt2: + # datetime is a subclass of date. So both must be date + if not (isinstance(dt1, datetime.date) and + isinstance(dt2, datetime.date)): + raise TypeError("relativedelta only diffs datetime/date") + + # We allow two dates, or two datetimes, so we coerce them to be + # of the same type + if (isinstance(dt1, datetime.datetime) != + isinstance(dt2, datetime.datetime)): + if not isinstance(dt1, datetime.datetime): + dt1 = datetime.datetime.fromordinal(dt1.toordinal()) + elif not isinstance(dt2, datetime.datetime): + dt2 = datetime.datetime.fromordinal(dt2.toordinal()) + + self.years = 0 + self.months = 0 + self.days = 0 + self.leapdays = 0 + self.hours = 0 + self.minutes = 0 + self.seconds = 0 + self.microseconds = 0 + self.year = None + self.month = None + self.day = None + self.weekday = None + self.hour = None + self.minute = None + self.second = None + self.microsecond = None + self._has_time = 0 + + # Get year / month delta between the two + months = (dt1.year - dt2.year) * 12 + (dt1.month - dt2.month) + self._set_months(months) + + # Remove the year/month delta so the timedelta is just well-defined + # time units (seconds, days and microseconds) + dtm = self.__radd__(dt2) + + # If we've overshot our target, make an adjustment + if dt1 < dt2: + compare = operator.gt + increment = 1 + else: + compare = operator.lt + increment = -1 + + while compare(dt1, dtm): + months += increment + self._set_months(months) + dtm = self.__radd__(dt2) + + # Get the timedelta between the "months-adjusted" date and dt1 + delta = dt1 - dtm + self.seconds = delta.seconds + delta.days * 86400 + self.microseconds = delta.microseconds + else: + # Check for non-integer values in integer-only quantities + if any(x is not None and x != int(x) for x in (years, months)): + raise ValueError("Non-integer years and months are " + "ambiguous and not currently supported.") + + # Relative information + self.years = int(years) + self.months = int(months) + self.days = days + weeks * 7 + self.leapdays = leapdays + self.hours = hours + self.minutes = minutes + self.seconds = seconds + self.microseconds = microseconds + + # Absolute information + self.year = year + self.month = month + self.day = day + self.hour = hour + self.minute = minute + self.second = second + self.microsecond = microsecond + + if any(x is not None and int(x) != x + for x in (year, month, day, hour, + minute, second, microsecond)): + # For now we'll deprecate floats - later it'll be an error. + warn("Non-integer value passed as absolute information. " + + "This is not a well-defined condition and will raise " + + "errors in future versions.", DeprecationWarning) + + if isinstance(weekday, integer_types): + self.weekday = weekdays[weekday] + else: + self.weekday = weekday + + yday = 0 + if nlyearday: + yday = nlyearday + elif yearday: + yday = yearday + if yearday > 59: + self.leapdays = -1 + if yday: + ydayidx = [31, 59, 90, 120, 151, 181, 212, + 243, 273, 304, 334, 366] + for idx, ydays in enumerate(ydayidx): + if yday <= ydays: + self.month = idx+1 + if idx == 0: + self.day = yday + else: + self.day = yday-ydayidx[idx-1] + break + else: + raise ValueError("invalid year day (%d)" % yday) + + self._fix() + + def _fix(self): + if abs(self.microseconds) > 999999: + s = _sign(self.microseconds) + div, mod = divmod(self.microseconds * s, 1000000) + self.microseconds = mod * s + self.seconds += div * s + if abs(self.seconds) > 59: + s = _sign(self.seconds) + div, mod = divmod(self.seconds * s, 60) + self.seconds = mod * s + self.minutes += div * s + if abs(self.minutes) > 59: + s = _sign(self.minutes) + div, mod = divmod(self.minutes * s, 60) + self.minutes = mod * s + self.hours += div * s + if abs(self.hours) > 23: + s = _sign(self.hours) + div, mod = divmod(self.hours * s, 24) + self.hours = mod * s + self.days += div * s + if abs(self.months) > 11: + s = _sign(self.months) + div, mod = divmod(self.months * s, 12) + self.months = mod * s + self.years += div * s + if (self.hours or self.minutes or self.seconds or self.microseconds + or self.hour is not None or self.minute is not None or + self.second is not None or self.microsecond is not None): + self._has_time = 1 + else: + self._has_time = 0 + + @property + def weeks(self): + return int(self.days / 7.0) + + @weeks.setter + def weeks(self, value): + self.days = self.days - (self.weeks * 7) + value * 7 + + def _set_months(self, months): + self.months = months + if abs(self.months) > 11: + s = _sign(self.months) + div, mod = divmod(self.months * s, 12) + self.months = mod * s + self.years = div * s + else: + self.years = 0 + + def normalized(self): + """ + Return a version of this object represented entirely using integer + values for the relative attributes. + + >>> relativedelta(days=1.5, hours=2).normalized() + relativedelta(days=+1, hours=+14) + + :return: + Returns a :class:`dateutil.relativedelta.relativedelta` object. + """ + # Cascade remainders down (rounding each to roughly nearest microsecond) + days = int(self.days) + + hours_f = round(self.hours + 24 * (self.days - days), 11) + hours = int(hours_f) + + minutes_f = round(self.minutes + 60 * (hours_f - hours), 10) + minutes = int(minutes_f) + + seconds_f = round(self.seconds + 60 * (minutes_f - minutes), 8) + seconds = int(seconds_f) + + microseconds = round(self.microseconds + 1e6 * (seconds_f - seconds)) + + # Constructor carries overflow back up with call to _fix() + return self.__class__(years=self.years, months=self.months, + days=days, hours=hours, minutes=minutes, + seconds=seconds, microseconds=microseconds, + leapdays=self.leapdays, year=self.year, + month=self.month, day=self.day, + weekday=self.weekday, hour=self.hour, + minute=self.minute, second=self.second, + microsecond=self.microsecond) + + def __add__(self, other): + if isinstance(other, relativedelta): + return self.__class__(years=other.years + self.years, + months=other.months + self.months, + days=other.days + self.days, + hours=other.hours + self.hours, + minutes=other.minutes + self.minutes, + seconds=other.seconds + self.seconds, + microseconds=(other.microseconds + + self.microseconds), + leapdays=other.leapdays or self.leapdays, + year=(other.year if other.year is not None + else self.year), + month=(other.month if other.month is not None + else self.month), + day=(other.day if other.day is not None + else self.day), + weekday=(other.weekday if other.weekday is not None + else self.weekday), + hour=(other.hour if other.hour is not None + else self.hour), + minute=(other.minute if other.minute is not None + else self.minute), + second=(other.second if other.second is not None + else self.second), + microsecond=(other.microsecond if other.microsecond + is not None else + self.microsecond)) + if isinstance(other, datetime.timedelta): + return self.__class__(years=self.years, + months=self.months, + days=self.days + other.days, + hours=self.hours, + minutes=self.minutes, + seconds=self.seconds + other.seconds, + microseconds=self.microseconds + other.microseconds, + leapdays=self.leapdays, + year=self.year, + month=self.month, + day=self.day, + weekday=self.weekday, + hour=self.hour, + minute=self.minute, + second=self.second, + microsecond=self.microsecond) + if not isinstance(other, datetime.date): + return NotImplemented + elif self._has_time and not isinstance(other, datetime.datetime): + other = datetime.datetime.fromordinal(other.toordinal()) + year = (self.year or other.year)+self.years + month = self.month or other.month + if self.months: + assert 1 <= abs(self.months) <= 12 + month += self.months + if month > 12: + year += 1 + month -= 12 + elif month < 1: + year -= 1 + month += 12 + day = min(calendar.monthrange(year, month)[1], + self.day or other.day) + repl = {"year": year, "month": month, "day": day} + for attr in ["hour", "minute", "second", "microsecond"]: + value = getattr(self, attr) + if value is not None: + repl[attr] = value + days = self.days + if self.leapdays and month > 2 and calendar.isleap(year): + days += self.leapdays + ret = (other.replace(**repl) + + datetime.timedelta(days=days, + hours=self.hours, + minutes=self.minutes, + seconds=self.seconds, + microseconds=self.microseconds)) + if self.weekday: + weekday, nth = self.weekday.weekday, self.weekday.n or 1 + jumpdays = (abs(nth) - 1) * 7 + if nth > 0: + jumpdays += (7 - ret.weekday() + weekday) % 7 + else: + jumpdays += (ret.weekday() - weekday) % 7 + jumpdays *= -1 + ret += datetime.timedelta(days=jumpdays) + return ret + + def __radd__(self, other): + return self.__add__(other) + + def __rsub__(self, other): + return self.__neg__().__radd__(other) + + def __sub__(self, other): + if not isinstance(other, relativedelta): + return NotImplemented # In case the other object defines __rsub__ + return self.__class__(years=self.years - other.years, + months=self.months - other.months, + days=self.days - other.days, + hours=self.hours - other.hours, + minutes=self.minutes - other.minutes, + seconds=self.seconds - other.seconds, + microseconds=self.microseconds - other.microseconds, + leapdays=self.leapdays or other.leapdays, + year=(self.year if self.year is not None + else other.year), + month=(self.month if self.month is not None else + other.month), + day=(self.day if self.day is not None else + other.day), + weekday=(self.weekday if self.weekday is not None else + other.weekday), + hour=(self.hour if self.hour is not None else + other.hour), + minute=(self.minute if self.minute is not None else + other.minute), + second=(self.second if self.second is not None else + other.second), + microsecond=(self.microsecond if self.microsecond + is not None else + other.microsecond)) + + def __abs__(self): + return self.__class__(years=abs(self.years), + months=abs(self.months), + days=abs(self.days), + hours=abs(self.hours), + minutes=abs(self.minutes), + seconds=abs(self.seconds), + microseconds=abs(self.microseconds), + leapdays=self.leapdays, + year=self.year, + month=self.month, + day=self.day, + weekday=self.weekday, + hour=self.hour, + minute=self.minute, + second=self.second, + microsecond=self.microsecond) + + def __neg__(self): + return self.__class__(years=-self.years, + months=-self.months, + days=-self.days, + hours=-self.hours, + minutes=-self.minutes, + seconds=-self.seconds, + microseconds=-self.microseconds, + leapdays=self.leapdays, + year=self.year, + month=self.month, + day=self.day, + weekday=self.weekday, + hour=self.hour, + minute=self.minute, + second=self.second, + microsecond=self.microsecond) + + def __bool__(self): + return not (not self.years and + not self.months and + not self.days and + not self.hours and + not self.minutes and + not self.seconds and + not self.microseconds and + not self.leapdays and + self.year is None and + self.month is None and + self.day is None and + self.weekday is None and + self.hour is None and + self.minute is None and + self.second is None and + self.microsecond is None) + # Compatibility with Python 2.x + __nonzero__ = __bool__ + + def __mul__(self, other): + try: + f = float(other) + except TypeError: + return NotImplemented + + return self.__class__(years=int(self.years * f), + months=int(self.months * f), + days=int(self.days * f), + hours=int(self.hours * f), + minutes=int(self.minutes * f), + seconds=int(self.seconds * f), + microseconds=int(self.microseconds * f), + leapdays=self.leapdays, + year=self.year, + month=self.month, + day=self.day, + weekday=self.weekday, + hour=self.hour, + minute=self.minute, + second=self.second, + microsecond=self.microsecond) + + __rmul__ = __mul__ + + def __eq__(self, other): + if not isinstance(other, relativedelta): + return NotImplemented + if self.weekday or other.weekday: + if not self.weekday or not other.weekday: + return False + if self.weekday.weekday != other.weekday.weekday: + return False + n1, n2 = self.weekday.n, other.weekday.n + if n1 != n2 and not ((not n1 or n1 == 1) and (not n2 or n2 == 1)): + return False + return (self.years == other.years and + self.months == other.months and + self.days == other.days and + self.hours == other.hours and + self.minutes == other.minutes and + self.seconds == other.seconds and + self.microseconds == other.microseconds and + self.leapdays == other.leapdays and + self.year == other.year and + self.month == other.month and + self.day == other.day and + self.hour == other.hour and + self.minute == other.minute and + self.second == other.second and + self.microsecond == other.microsecond) + + def __hash__(self): + return hash(( + self.weekday, + self.years, + self.months, + self.days, + self.hours, + self.minutes, + self.seconds, + self.microseconds, + self.leapdays, + self.year, + self.month, + self.day, + self.hour, + self.minute, + self.second, + self.microsecond, + )) + + def __ne__(self, other): + return not self.__eq__(other) + + def __div__(self, other): + try: + reciprocal = 1 / float(other) + except TypeError: + return NotImplemented + + return self.__mul__(reciprocal) + + __truediv__ = __div__ + + def __repr__(self): + l = [] + for attr in ["years", "months", "days", "leapdays", + "hours", "minutes", "seconds", "microseconds"]: + value = getattr(self, attr) + if value: + l.append("{attr}={value:+g}".format(attr=attr, value=value)) + for attr in ["year", "month", "day", "weekday", + "hour", "minute", "second", "microsecond"]: + value = getattr(self, attr) + if value is not None: + l.append("{attr}={value}".format(attr=attr, value=repr(value))) + return "{classname}({attrs})".format(classname=self.__class__.__name__, + attrs=", ".join(l)) + + +def _sign(x): + return int(copysign(1, x)) + +# vim:ts=4:sw=4:et diff --git a/Windows/dateutil/rrule.py b/Windows/dateutil/rrule.py new file mode 100644 index 00000000..20a0c4ac --- /dev/null +++ b/Windows/dateutil/rrule.py @@ -0,0 +1,1736 @@ +# -*- coding: utf-8 -*- +""" +The rrule module offers a small, complete, and very fast, implementation of +the recurrence rules documented in the +`iCalendar RFC `_, +including support for caching of results. +""" +import itertools +import datetime +import calendar +import re +import sys + +try: + from math import gcd +except ImportError: + from fractions import gcd + +from six import advance_iterator, integer_types +from six.moves import _thread, range +import heapq + +from ._common import weekday as weekdaybase +from .tz import tzutc, tzlocal + +# For warning about deprecation of until and count +from warnings import warn + +__all__ = ["rrule", "rruleset", "rrulestr", + "YEARLY", "MONTHLY", "WEEKLY", "DAILY", + "HOURLY", "MINUTELY", "SECONDLY", + "MO", "TU", "WE", "TH", "FR", "SA", "SU"] + +# Every mask is 7 days longer to handle cross-year weekly periods. +M366MASK = tuple([1]*31+[2]*29+[3]*31+[4]*30+[5]*31+[6]*30 + + [7]*31+[8]*31+[9]*30+[10]*31+[11]*30+[12]*31+[1]*7) +M365MASK = list(M366MASK) +M29, M30, M31 = list(range(1, 30)), list(range(1, 31)), list(range(1, 32)) +MDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) +MDAY365MASK = list(MDAY366MASK) +M29, M30, M31 = list(range(-29, 0)), list(range(-30, 0)), list(range(-31, 0)) +NMDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) +NMDAY365MASK = list(NMDAY366MASK) +M366RANGE = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366) +M365RANGE = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365) +WDAYMASK = [0, 1, 2, 3, 4, 5, 6]*55 +del M29, M30, M31, M365MASK[59], MDAY365MASK[59], NMDAY365MASK[31] +MDAY365MASK = tuple(MDAY365MASK) +M365MASK = tuple(M365MASK) + +FREQNAMES = ['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY', 'HOURLY', 'MINUTELY', 'SECONDLY'] + +(YEARLY, + MONTHLY, + WEEKLY, + DAILY, + HOURLY, + MINUTELY, + SECONDLY) = list(range(7)) + +# Imported on demand. +easter = None +parser = None + + +class weekday(weekdaybase): + """ + This version of weekday does not allow n = 0. + """ + def __init__(self, wkday, n=None): + if n == 0: + raise ValueError("Can't create weekday with n==0") + + super(weekday, self).__init__(wkday, n) + + +MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) + + +def _invalidates_cache(f): + """ + Decorator for rruleset methods which may invalidate the + cached length. + """ + def inner_func(self, *args, **kwargs): + rv = f(self, *args, **kwargs) + self._invalidate_cache() + return rv + + return inner_func + + +class rrulebase(object): + def __init__(self, cache=False): + if cache: + self._cache = [] + self._cache_lock = _thread.allocate_lock() + self._invalidate_cache() + else: + self._cache = None + self._cache_complete = False + self._len = None + + def __iter__(self): + if self._cache_complete: + return iter(self._cache) + elif self._cache is None: + return self._iter() + else: + return self._iter_cached() + + def _invalidate_cache(self): + if self._cache is not None: + self._cache = [] + self._cache_complete = False + self._cache_gen = self._iter() + + if self._cache_lock.locked(): + self._cache_lock.release() + + self._len = None + + def _iter_cached(self): + i = 0 + gen = self._cache_gen + cache = self._cache + acquire = self._cache_lock.acquire + release = self._cache_lock.release + while gen: + if i == len(cache): + acquire() + if self._cache_complete: + break + try: + for j in range(10): + cache.append(advance_iterator(gen)) + except StopIteration: + self._cache_gen = gen = None + self._cache_complete = True + break + release() + yield cache[i] + i += 1 + while i < self._len: + yield cache[i] + i += 1 + + def __getitem__(self, item): + if self._cache_complete: + return self._cache[item] + elif isinstance(item, slice): + if item.step and item.step < 0: + return list(iter(self))[item] + else: + return list(itertools.islice(self, + item.start or 0, + item.stop or sys.maxsize, + item.step or 1)) + elif item >= 0: + gen = iter(self) + try: + for i in range(item+1): + res = advance_iterator(gen) + except StopIteration: + raise IndexError + return res + else: + return list(iter(self))[item] + + def __contains__(self, item): + if self._cache_complete: + return item in self._cache + else: + for i in self: + if i == item: + return True + elif i > item: + return False + return False + + # __len__() introduces a large performance penality. + def count(self): + """ Returns the number of recurrences in this set. It will have go + trough the whole recurrence, if this hasn't been done before. """ + if self._len is None: + for x in self: + pass + return self._len + + def before(self, dt, inc=False): + """ Returns the last recurrence before the given datetime instance. The + inc keyword defines what happens if dt is an occurrence. With + inc=True, if dt itself is an occurrence, it will be returned. """ + if self._cache_complete: + gen = self._cache + else: + gen = self + last = None + if inc: + for i in gen: + if i > dt: + break + last = i + else: + for i in gen: + if i >= dt: + break + last = i + return last + + def after(self, dt, inc=False): + """ Returns the first recurrence after the given datetime instance. The + inc keyword defines what happens if dt is an occurrence. With + inc=True, if dt itself is an occurrence, it will be returned. """ + if self._cache_complete: + gen = self._cache + else: + gen = self + if inc: + for i in gen: + if i >= dt: + return i + else: + for i in gen: + if i > dt: + return i + return None + + def xafter(self, dt, count=None, inc=False): + """ + Generator which yields up to `count` recurrences after the given + datetime instance, equivalent to `after`. + + :param dt: + The datetime at which to start generating recurrences. + + :param count: + The maximum number of recurrences to generate. If `None` (default), + dates are generated until the recurrence rule is exhausted. + + :param inc: + If `dt` is an instance of the rule and `inc` is `True`, it is + included in the output. + + :yields: Yields a sequence of `datetime` objects. + """ + + if self._cache_complete: + gen = self._cache + else: + gen = self + + # Select the comparison function + if inc: + comp = lambda dc, dtc: dc >= dtc + else: + comp = lambda dc, dtc: dc > dtc + + # Generate dates + n = 0 + for d in gen: + if comp(d, dt): + if count is not None: + n += 1 + if n > count: + break + + yield d + + def between(self, after, before, inc=False, count=1): + """ Returns all the occurrences of the rrule between after and before. + The inc keyword defines what happens if after and/or before are + themselves occurrences. With inc=True, they will be included in the + list, if they are found in the recurrence set. """ + if self._cache_complete: + gen = self._cache + else: + gen = self + started = False + l = [] + if inc: + for i in gen: + if i > before: + break + elif not started: + if i >= after: + started = True + l.append(i) + else: + l.append(i) + else: + for i in gen: + if i >= before: + break + elif not started: + if i > after: + started = True + l.append(i) + else: + l.append(i) + return l + + +class rrule(rrulebase): + """ + That's the base of the rrule operation. It accepts all the keywords + defined in the RFC as its constructor parameters (except byday, + which was renamed to byweekday) and more. The constructor prototype is:: + + rrule(freq) + + Where freq must be one of YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, + or SECONDLY. + + .. note:: + Per RFC section 3.3.10, recurrence instances falling on invalid dates + and times are ignored rather than coerced: + + Recurrence rules may generate recurrence instances with an invalid + date (e.g., February 30) or nonexistent local time (e.g., 1:30 AM + on a day where the local time is moved forward by an hour at 1:00 + AM). Such recurrence instances MUST be ignored and MUST NOT be + counted as part of the recurrence set. + + This can lead to possibly surprising behavior when, for example, the + start date occurs at the end of the month: + + >>> from dateutil.rrule import rrule, MONTHLY + >>> from datetime import datetime + >>> start_date = datetime(2014, 12, 31) + >>> list(rrule(freq=MONTHLY, count=4, dtstart=start_date)) + ... # doctest: +NORMALIZE_WHITESPACE + [datetime.datetime(2014, 12, 31, 0, 0), + datetime.datetime(2015, 1, 31, 0, 0), + datetime.datetime(2015, 3, 31, 0, 0), + datetime.datetime(2015, 5, 31, 0, 0)] + + Additionally, it supports the following keyword arguments: + + :param dtstart: + The recurrence start. Besides being the base for the recurrence, + missing parameters in the final recurrence instances will also be + extracted from this date. If not given, datetime.now() will be used + instead. + :param interval: + The interval between each freq iteration. For example, when using + YEARLY, an interval of 2 means once every two years, but with HOURLY, + it means once every two hours. The default interval is 1. + :param wkst: + The week start day. Must be one of the MO, TU, WE constants, or an + integer, specifying the first day of the week. This will affect + recurrences based on weekly periods. The default week start is got + from calendar.firstweekday(), and may be modified by + calendar.setfirstweekday(). + :param count: + If given, this determines how many occurrences will be generated. + + .. note:: + As of version 2.5.0, the use of the keyword ``until`` in conjunction + with ``count`` is deprecated, to make sure ``dateutil`` is fully + compliant with `RFC-5545 Sec. 3.3.10 `_. Therefore, ``until`` and ``count`` + **must not** occur in the same call to ``rrule``. + :param until: + If given, this must be a datetime instance specifying the upper-bound + limit of the recurrence. The last recurrence in the rule is the greatest + datetime that is less than or equal to the value specified in the + ``until`` parameter. + + .. note:: + As of version 2.5.0, the use of the keyword ``until`` in conjunction + with ``count`` is deprecated, to make sure ``dateutil`` is fully + compliant with `RFC-5545 Sec. 3.3.10 `_. Therefore, ``until`` and ``count`` + **must not** occur in the same call to ``rrule``. + :param bysetpos: + If given, it must be either an integer, or a sequence of integers, + positive or negative. Each given integer will specify an occurrence + number, corresponding to the nth occurrence of the rule inside the + frequency period. For example, a bysetpos of -1 if combined with a + MONTHLY frequency, and a byweekday of (MO, TU, WE, TH, FR), will + result in the last work day of every month. + :param bymonth: + If given, it must be either an integer, or a sequence of integers, + meaning the months to apply the recurrence to. + :param bymonthday: + If given, it must be either an integer, or a sequence of integers, + meaning the month days to apply the recurrence to. + :param byyearday: + If given, it must be either an integer, or a sequence of integers, + meaning the year days to apply the recurrence to. + :param byeaster: + If given, it must be either an integer, or a sequence of integers, + positive or negative. Each integer will define an offset from the + Easter Sunday. Passing the offset 0 to byeaster will yield the Easter + Sunday itself. This is an extension to the RFC specification. + :param byweekno: + If given, it must be either an integer, or a sequence of integers, + meaning the week numbers to apply the recurrence to. Week numbers + have the meaning described in ISO8601, that is, the first week of + the year is that containing at least four days of the new year. + :param byweekday: + If given, it must be either an integer (0 == MO), a sequence of + integers, one of the weekday constants (MO, TU, etc), or a sequence + of these constants. When given, these variables will define the + weekdays where the recurrence will be applied. It's also possible to + use an argument n for the weekday instances, which will mean the nth + occurrence of this weekday in the period. For example, with MONTHLY, + or with YEARLY and BYMONTH, using FR(+1) in byweekday will specify the + first friday of the month where the recurrence happens. Notice that in + the RFC documentation, this is specified as BYDAY, but was renamed to + avoid the ambiguity of that keyword. + :param byhour: + If given, it must be either an integer, or a sequence of integers, + meaning the hours to apply the recurrence to. + :param byminute: + If given, it must be either an integer, or a sequence of integers, + meaning the minutes to apply the recurrence to. + :param bysecond: + If given, it must be either an integer, or a sequence of integers, + meaning the seconds to apply the recurrence to. + :param cache: + If given, it must be a boolean value specifying to enable or disable + caching of results. If you will use the same rrule instance multiple + times, enabling caching will improve the performance considerably. + """ + def __init__(self, freq, dtstart=None, + interval=1, wkst=None, count=None, until=None, bysetpos=None, + bymonth=None, bymonthday=None, byyearday=None, byeaster=None, + byweekno=None, byweekday=None, + byhour=None, byminute=None, bysecond=None, + cache=False): + super(rrule, self).__init__(cache) + global easter + if not dtstart: + if until and until.tzinfo: + dtstart = datetime.datetime.now(tz=until.tzinfo).replace(microsecond=0) + else: + dtstart = datetime.datetime.now().replace(microsecond=0) + elif not isinstance(dtstart, datetime.datetime): + dtstart = datetime.datetime.fromordinal(dtstart.toordinal()) + else: + dtstart = dtstart.replace(microsecond=0) + self._dtstart = dtstart + self._tzinfo = dtstart.tzinfo + self._freq = freq + self._interval = interval + self._count = count + + # Cache the original byxxx rules, if they are provided, as the _byxxx + # attributes do not necessarily map to the inputs, and this can be + # a problem in generating the strings. Only store things if they've + # been supplied (the string retrieval will just use .get()) + self._original_rule = {} + + if until and not isinstance(until, datetime.datetime): + until = datetime.datetime.fromordinal(until.toordinal()) + self._until = until + + if self._dtstart and self._until: + if (self._dtstart.tzinfo is not None) != (self._until.tzinfo is not None): + # According to RFC5545 Section 3.3.10: + # https://tools.ietf.org/html/rfc5545#section-3.3.10 + # + # > If the "DTSTART" property is specified as a date with UTC + # > time or a date with local time and time zone reference, + # > then the UNTIL rule part MUST be specified as a date with + # > UTC time. + raise ValueError( + 'RRULE UNTIL values must be specified in UTC when DTSTART ' + 'is timezone-aware' + ) + + if count is not None and until: + warn("Using both 'count' and 'until' is inconsistent with RFC 5545" + " and has been deprecated in dateutil. Future versions will " + "raise an error.", DeprecationWarning) + + if wkst is None: + self._wkst = calendar.firstweekday() + elif isinstance(wkst, integer_types): + self._wkst = wkst + else: + self._wkst = wkst.weekday + + if bysetpos is None: + self._bysetpos = None + elif isinstance(bysetpos, integer_types): + if bysetpos == 0 or not (-366 <= bysetpos <= 366): + raise ValueError("bysetpos must be between 1 and 366, " + "or between -366 and -1") + self._bysetpos = (bysetpos,) + else: + self._bysetpos = tuple(bysetpos) + for pos in self._bysetpos: + if pos == 0 or not (-366 <= pos <= 366): + raise ValueError("bysetpos must be between 1 and 366, " + "or between -366 and -1") + + if self._bysetpos: + self._original_rule['bysetpos'] = self._bysetpos + + if (byweekno is None and byyearday is None and bymonthday is None and + byweekday is None and byeaster is None): + if freq == YEARLY: + if bymonth is None: + bymonth = dtstart.month + self._original_rule['bymonth'] = None + bymonthday = dtstart.day + self._original_rule['bymonthday'] = None + elif freq == MONTHLY: + bymonthday = dtstart.day + self._original_rule['bymonthday'] = None + elif freq == WEEKLY: + byweekday = dtstart.weekday() + self._original_rule['byweekday'] = None + + # bymonth + if bymonth is None: + self._bymonth = None + else: + if isinstance(bymonth, integer_types): + bymonth = (bymonth,) + + self._bymonth = tuple(sorted(set(bymonth))) + + if 'bymonth' not in self._original_rule: + self._original_rule['bymonth'] = self._bymonth + + # byyearday + if byyearday is None: + self._byyearday = None + else: + if isinstance(byyearday, integer_types): + byyearday = (byyearday,) + + self._byyearday = tuple(sorted(set(byyearday))) + self._original_rule['byyearday'] = self._byyearday + + # byeaster + if byeaster is not None: + if not easter: + from dateutil import easter + if isinstance(byeaster, integer_types): + self._byeaster = (byeaster,) + else: + self._byeaster = tuple(sorted(byeaster)) + + self._original_rule['byeaster'] = self._byeaster + else: + self._byeaster = None + + # bymonthday + if bymonthday is None: + self._bymonthday = () + self._bynmonthday = () + else: + if isinstance(bymonthday, integer_types): + bymonthday = (bymonthday,) + + bymonthday = set(bymonthday) # Ensure it's unique + + self._bymonthday = tuple(sorted(x for x in bymonthday if x > 0)) + self._bynmonthday = tuple(sorted(x for x in bymonthday if x < 0)) + + # Storing positive numbers first, then negative numbers + if 'bymonthday' not in self._original_rule: + self._original_rule['bymonthday'] = tuple( + itertools.chain(self._bymonthday, self._bynmonthday)) + + # byweekno + if byweekno is None: + self._byweekno = None + else: + if isinstance(byweekno, integer_types): + byweekno = (byweekno,) + + self._byweekno = tuple(sorted(set(byweekno))) + + self._original_rule['byweekno'] = self._byweekno + + # byweekday / bynweekday + if byweekday is None: + self._byweekday = None + self._bynweekday = None + else: + # If it's one of the valid non-sequence types, convert to a + # single-element sequence before the iterator that builds the + # byweekday set. + if isinstance(byweekday, integer_types) or hasattr(byweekday, "n"): + byweekday = (byweekday,) + + self._byweekday = set() + self._bynweekday = set() + for wday in byweekday: + if isinstance(wday, integer_types): + self._byweekday.add(wday) + elif not wday.n or freq > MONTHLY: + self._byweekday.add(wday.weekday) + else: + self._bynweekday.add((wday.weekday, wday.n)) + + if not self._byweekday: + self._byweekday = None + elif not self._bynweekday: + self._bynweekday = None + + if self._byweekday is not None: + self._byweekday = tuple(sorted(self._byweekday)) + orig_byweekday = [weekday(x) for x in self._byweekday] + else: + orig_byweekday = () + + if self._bynweekday is not None: + self._bynweekday = tuple(sorted(self._bynweekday)) + orig_bynweekday = [weekday(*x) for x in self._bynweekday] + else: + orig_bynweekday = () + + if 'byweekday' not in self._original_rule: + self._original_rule['byweekday'] = tuple(itertools.chain( + orig_byweekday, orig_bynweekday)) + + # byhour + if byhour is None: + if freq < HOURLY: + self._byhour = {dtstart.hour} + else: + self._byhour = None + else: + if isinstance(byhour, integer_types): + byhour = (byhour,) + + if freq == HOURLY: + self._byhour = self.__construct_byset(start=dtstart.hour, + byxxx=byhour, + base=24) + else: + self._byhour = set(byhour) + + self._byhour = tuple(sorted(self._byhour)) + self._original_rule['byhour'] = self._byhour + + # byminute + if byminute is None: + if freq < MINUTELY: + self._byminute = {dtstart.minute} + else: + self._byminute = None + else: + if isinstance(byminute, integer_types): + byminute = (byminute,) + + if freq == MINUTELY: + self._byminute = self.__construct_byset(start=dtstart.minute, + byxxx=byminute, + base=60) + else: + self._byminute = set(byminute) + + self._byminute = tuple(sorted(self._byminute)) + self._original_rule['byminute'] = self._byminute + + # bysecond + if bysecond is None: + if freq < SECONDLY: + self._bysecond = ((dtstart.second,)) + else: + self._bysecond = None + else: + if isinstance(bysecond, integer_types): + bysecond = (bysecond,) + + self._bysecond = set(bysecond) + + if freq == SECONDLY: + self._bysecond = self.__construct_byset(start=dtstart.second, + byxxx=bysecond, + base=60) + else: + self._bysecond = set(bysecond) + + self._bysecond = tuple(sorted(self._bysecond)) + self._original_rule['bysecond'] = self._bysecond + + if self._freq >= HOURLY: + self._timeset = None + else: + self._timeset = [] + for hour in self._byhour: + for minute in self._byminute: + for second in self._bysecond: + self._timeset.append( + datetime.time(hour, minute, second, + tzinfo=self._tzinfo)) + self._timeset.sort() + self._timeset = tuple(self._timeset) + + def __str__(self): + """ + Output a string that would generate this RRULE if passed to rrulestr. + This is mostly compatible with RFC5545, except for the + dateutil-specific extension BYEASTER. + """ + + output = [] + h, m, s = [None] * 3 + if self._dtstart: + output.append(self._dtstart.strftime('DTSTART:%Y%m%dT%H%M%S')) + h, m, s = self._dtstart.timetuple()[3:6] + + parts = ['FREQ=' + FREQNAMES[self._freq]] + if self._interval != 1: + parts.append('INTERVAL=' + str(self._interval)) + + if self._wkst: + parts.append('WKST=' + repr(weekday(self._wkst))[0:2]) + + if self._count is not None: + parts.append('COUNT=' + str(self._count)) + + if self._until: + parts.append(self._until.strftime('UNTIL=%Y%m%dT%H%M%S')) + + if self._original_rule.get('byweekday') is not None: + # The str() method on weekday objects doesn't generate + # RFC5545-compliant strings, so we should modify that. + original_rule = dict(self._original_rule) + wday_strings = [] + for wday in original_rule['byweekday']: + if wday.n: + wday_strings.append('{n:+d}{wday}'.format( + n=wday.n, + wday=repr(wday)[0:2])) + else: + wday_strings.append(repr(wday)) + + original_rule['byweekday'] = wday_strings + else: + original_rule = self._original_rule + + partfmt = '{name}={vals}' + for name, key in [('BYSETPOS', 'bysetpos'), + ('BYMONTH', 'bymonth'), + ('BYMONTHDAY', 'bymonthday'), + ('BYYEARDAY', 'byyearday'), + ('BYWEEKNO', 'byweekno'), + ('BYDAY', 'byweekday'), + ('BYHOUR', 'byhour'), + ('BYMINUTE', 'byminute'), + ('BYSECOND', 'bysecond'), + ('BYEASTER', 'byeaster')]: + value = original_rule.get(key) + if value: + parts.append(partfmt.format(name=name, vals=(','.join(str(v) + for v in value)))) + + output.append('RRULE:' + ';'.join(parts)) + return '\n'.join(output) + + def replace(self, **kwargs): + """Return new rrule with same attributes except for those attributes given new + values by whichever keyword arguments are specified.""" + new_kwargs = {"interval": self._interval, + "count": self._count, + "dtstart": self._dtstart, + "freq": self._freq, + "until": self._until, + "wkst": self._wkst, + "cache": False if self._cache is None else True } + new_kwargs.update(self._original_rule) + new_kwargs.update(kwargs) + return rrule(**new_kwargs) + + def _iter(self): + year, month, day, hour, minute, second, weekday, yearday, _ = \ + self._dtstart.timetuple() + + # Some local variables to speed things up a bit + freq = self._freq + interval = self._interval + wkst = self._wkst + until = self._until + bymonth = self._bymonth + byweekno = self._byweekno + byyearday = self._byyearday + byweekday = self._byweekday + byeaster = self._byeaster + bymonthday = self._bymonthday + bynmonthday = self._bynmonthday + bysetpos = self._bysetpos + byhour = self._byhour + byminute = self._byminute + bysecond = self._bysecond + + ii = _iterinfo(self) + ii.rebuild(year, month) + + getdayset = {YEARLY: ii.ydayset, + MONTHLY: ii.mdayset, + WEEKLY: ii.wdayset, + DAILY: ii.ddayset, + HOURLY: ii.ddayset, + MINUTELY: ii.ddayset, + SECONDLY: ii.ddayset}[freq] + + if freq < HOURLY: + timeset = self._timeset + else: + gettimeset = {HOURLY: ii.htimeset, + MINUTELY: ii.mtimeset, + SECONDLY: ii.stimeset}[freq] + if ((freq >= HOURLY and + self._byhour and hour not in self._byhour) or + (freq >= MINUTELY and + self._byminute and minute not in self._byminute) or + (freq >= SECONDLY and + self._bysecond and second not in self._bysecond)): + timeset = () + else: + timeset = gettimeset(hour, minute, second) + + total = 0 + count = self._count + while True: + # Get dayset with the right frequency + dayset, start, end = getdayset(year, month, day) + + # Do the "hard" work ;-) + filtered = False + for i in dayset[start:end]: + if ((bymonth and ii.mmask[i] not in bymonth) or + (byweekno and not ii.wnomask[i]) or + (byweekday and ii.wdaymask[i] not in byweekday) or + (ii.nwdaymask and not ii.nwdaymask[i]) or + (byeaster and not ii.eastermask[i]) or + ((bymonthday or bynmonthday) and + ii.mdaymask[i] not in bymonthday and + ii.nmdaymask[i] not in bynmonthday) or + (byyearday and + ((i < ii.yearlen and i+1 not in byyearday and + -ii.yearlen+i not in byyearday) or + (i >= ii.yearlen and i+1-ii.yearlen not in byyearday and + -ii.nextyearlen+i-ii.yearlen not in byyearday)))): + dayset[i] = None + filtered = True + + # Output results + if bysetpos and timeset: + poslist = [] + for pos in bysetpos: + if pos < 0: + daypos, timepos = divmod(pos, len(timeset)) + else: + daypos, timepos = divmod(pos-1, len(timeset)) + try: + i = [x for x in dayset[start:end] + if x is not None][daypos] + time = timeset[timepos] + except IndexError: + pass + else: + date = datetime.date.fromordinal(ii.yearordinal+i) + res = datetime.datetime.combine(date, time) + if res not in poslist: + poslist.append(res) + poslist.sort() + for res in poslist: + if until and res > until: + self._len = total + return + elif res >= self._dtstart: + if count is not None: + count -= 1 + if count < 0: + self._len = total + return + total += 1 + yield res + else: + for i in dayset[start:end]: + if i is not None: + date = datetime.date.fromordinal(ii.yearordinal + i) + for time in timeset: + res = datetime.datetime.combine(date, time) + if until and res > until: + self._len = total + return + elif res >= self._dtstart: + if count is not None: + count -= 1 + if count < 0: + self._len = total + return + + total += 1 + yield res + + # Handle frequency and interval + fixday = False + if freq == YEARLY: + year += interval + if year > datetime.MAXYEAR: + self._len = total + return + ii.rebuild(year, month) + elif freq == MONTHLY: + month += interval + if month > 12: + div, mod = divmod(month, 12) + month = mod + year += div + if month == 0: + month = 12 + year -= 1 + if year > datetime.MAXYEAR: + self._len = total + return + ii.rebuild(year, month) + elif freq == WEEKLY: + if wkst > weekday: + day += -(weekday+1+(6-wkst))+self._interval*7 + else: + day += -(weekday-wkst)+self._interval*7 + weekday = wkst + fixday = True + elif freq == DAILY: + day += interval + fixday = True + elif freq == HOURLY: + if filtered: + # Jump to one iteration before next day + hour += ((23-hour)//interval)*interval + + if byhour: + ndays, hour = self.__mod_distance(value=hour, + byxxx=self._byhour, + base=24) + else: + ndays, hour = divmod(hour+interval, 24) + + if ndays: + day += ndays + fixday = True + + timeset = gettimeset(hour, minute, second) + elif freq == MINUTELY: + if filtered: + # Jump to one iteration before next day + minute += ((1439-(hour*60+minute))//interval)*interval + + valid = False + rep_rate = (24*60) + for j in range(rep_rate // gcd(interval, rep_rate)): + if byminute: + nhours, minute = \ + self.__mod_distance(value=minute, + byxxx=self._byminute, + base=60) + else: + nhours, minute = divmod(minute+interval, 60) + + div, hour = divmod(hour+nhours, 24) + if div: + day += div + fixday = True + filtered = False + + if not byhour or hour in byhour: + valid = True + break + + if not valid: + raise ValueError('Invalid combination of interval and ' + + 'byhour resulting in empty rule.') + + timeset = gettimeset(hour, minute, second) + elif freq == SECONDLY: + if filtered: + # Jump to one iteration before next day + second += (((86399 - (hour * 3600 + minute * 60 + second)) + // interval) * interval) + + rep_rate = (24 * 3600) + valid = False + for j in range(0, rep_rate // gcd(interval, rep_rate)): + if bysecond: + nminutes, second = \ + self.__mod_distance(value=second, + byxxx=self._bysecond, + base=60) + else: + nminutes, second = divmod(second+interval, 60) + + div, minute = divmod(minute+nminutes, 60) + if div: + hour += div + div, hour = divmod(hour, 24) + if div: + day += div + fixday = True + + if ((not byhour or hour in byhour) and + (not byminute or minute in byminute) and + (not bysecond or second in bysecond)): + valid = True + break + + if not valid: + raise ValueError('Invalid combination of interval, ' + + 'byhour and byminute resulting in empty' + + ' rule.') + + timeset = gettimeset(hour, minute, second) + + if fixday and day > 28: + daysinmonth = calendar.monthrange(year, month)[1] + if day > daysinmonth: + while day > daysinmonth: + day -= daysinmonth + month += 1 + if month == 13: + month = 1 + year += 1 + if year > datetime.MAXYEAR: + self._len = total + return + daysinmonth = calendar.monthrange(year, month)[1] + ii.rebuild(year, month) + + def __construct_byset(self, start, byxxx, base): + """ + If a `BYXXX` sequence is passed to the constructor at the same level as + `FREQ` (e.g. `FREQ=HOURLY,BYHOUR={2,4,7},INTERVAL=3`), there are some + specifications which cannot be reached given some starting conditions. + + This occurs whenever the interval is not coprime with the base of a + given unit and the difference between the starting position and the + ending position is not coprime with the greatest common denominator + between the interval and the base. For example, with a FREQ of hourly + starting at 17:00 and an interval of 4, the only valid values for + BYHOUR would be {21, 1, 5, 9, 13, 17}, because 4 and 24 are not + coprime. + + :param start: + Specifies the starting position. + :param byxxx: + An iterable containing the list of allowed values. + :param base: + The largest allowable value for the specified frequency (e.g. + 24 hours, 60 minutes). + + This does not preserve the type of the iterable, returning a set, since + the values should be unique and the order is irrelevant, this will + speed up later lookups. + + In the event of an empty set, raises a :exception:`ValueError`, as this + results in an empty rrule. + """ + + cset = set() + + # Support a single byxxx value. + if isinstance(byxxx, integer_types): + byxxx = (byxxx, ) + + for num in byxxx: + i_gcd = gcd(self._interval, base) + # Use divmod rather than % because we need to wrap negative nums. + if i_gcd == 1 or divmod(num - start, i_gcd)[1] == 0: + cset.add(num) + + if len(cset) == 0: + raise ValueError("Invalid rrule byxxx generates an empty set.") + + return cset + + def __mod_distance(self, value, byxxx, base): + """ + Calculates the next value in a sequence where the `FREQ` parameter is + specified along with a `BYXXX` parameter at the same "level" + (e.g. `HOURLY` specified with `BYHOUR`). + + :param value: + The old value of the component. + :param byxxx: + The `BYXXX` set, which should have been generated by + `rrule._construct_byset`, or something else which checks that a + valid rule is present. + :param base: + The largest allowable value for the specified frequency (e.g. + 24 hours, 60 minutes). + + If a valid value is not found after `base` iterations (the maximum + number before the sequence would start to repeat), this raises a + :exception:`ValueError`, as no valid values were found. + + This returns a tuple of `divmod(n*interval, base)`, where `n` is the + smallest number of `interval` repetitions until the next specified + value in `byxxx` is found. + """ + accumulator = 0 + for ii in range(1, base + 1): + # Using divmod() over % to account for negative intervals + div, value = divmod(value + self._interval, base) + accumulator += div + if value in byxxx: + return (accumulator, value) + + +class _iterinfo(object): + __slots__ = ["rrule", "lastyear", "lastmonth", + "yearlen", "nextyearlen", "yearordinal", "yearweekday", + "mmask", "mrange", "mdaymask", "nmdaymask", + "wdaymask", "wnomask", "nwdaymask", "eastermask"] + + def __init__(self, rrule): + for attr in self.__slots__: + setattr(self, attr, None) + self.rrule = rrule + + def rebuild(self, year, month): + # Every mask is 7 days longer to handle cross-year weekly periods. + rr = self.rrule + if year != self.lastyear: + self.yearlen = 365 + calendar.isleap(year) + self.nextyearlen = 365 + calendar.isleap(year + 1) + firstyday = datetime.date(year, 1, 1) + self.yearordinal = firstyday.toordinal() + self.yearweekday = firstyday.weekday() + + wday = datetime.date(year, 1, 1).weekday() + if self.yearlen == 365: + self.mmask = M365MASK + self.mdaymask = MDAY365MASK + self.nmdaymask = NMDAY365MASK + self.wdaymask = WDAYMASK[wday:] + self.mrange = M365RANGE + else: + self.mmask = M366MASK + self.mdaymask = MDAY366MASK + self.nmdaymask = NMDAY366MASK + self.wdaymask = WDAYMASK[wday:] + self.mrange = M366RANGE + + if not rr._byweekno: + self.wnomask = None + else: + self.wnomask = [0]*(self.yearlen+7) + # no1wkst = firstwkst = self.wdaymask.index(rr._wkst) + no1wkst = firstwkst = (7-self.yearweekday+rr._wkst) % 7 + if no1wkst >= 4: + no1wkst = 0 + # Number of days in the year, plus the days we got + # from last year. + wyearlen = self.yearlen+(self.yearweekday-rr._wkst) % 7 + else: + # Number of days in the year, minus the days we + # left in last year. + wyearlen = self.yearlen-no1wkst + div, mod = divmod(wyearlen, 7) + numweeks = div+mod//4 + for n in rr._byweekno: + if n < 0: + n += numweeks+1 + if not (0 < n <= numweeks): + continue + if n > 1: + i = no1wkst+(n-1)*7 + if no1wkst != firstwkst: + i -= 7-firstwkst + else: + i = no1wkst + for j in range(7): + self.wnomask[i] = 1 + i += 1 + if self.wdaymask[i] == rr._wkst: + break + if 1 in rr._byweekno: + # Check week number 1 of next year as well + # TODO: Check -numweeks for next year. + i = no1wkst+numweeks*7 + if no1wkst != firstwkst: + i -= 7-firstwkst + if i < self.yearlen: + # If week starts in next year, we + # don't care about it. + for j in range(7): + self.wnomask[i] = 1 + i += 1 + if self.wdaymask[i] == rr._wkst: + break + if no1wkst: + # Check last week number of last year as + # well. If no1wkst is 0, either the year + # started on week start, or week number 1 + # got days from last year, so there are no + # days from last year's last week number in + # this year. + if -1 not in rr._byweekno: + lyearweekday = datetime.date(year-1, 1, 1).weekday() + lno1wkst = (7-lyearweekday+rr._wkst) % 7 + lyearlen = 365+calendar.isleap(year-1) + if lno1wkst >= 4: + lno1wkst = 0 + lnumweeks = 52+(lyearlen + + (lyearweekday-rr._wkst) % 7) % 7//4 + else: + lnumweeks = 52+(self.yearlen-no1wkst) % 7//4 + else: + lnumweeks = -1 + if lnumweeks in rr._byweekno: + for i in range(no1wkst): + self.wnomask[i] = 1 + + if (rr._bynweekday and (month != self.lastmonth or + year != self.lastyear)): + ranges = [] + if rr._freq == YEARLY: + if rr._bymonth: + for month in rr._bymonth: + ranges.append(self.mrange[month-1:month+1]) + else: + ranges = [(0, self.yearlen)] + elif rr._freq == MONTHLY: + ranges = [self.mrange[month-1:month+1]] + if ranges: + # Weekly frequency won't get here, so we may not + # care about cross-year weekly periods. + self.nwdaymask = [0]*self.yearlen + for first, last in ranges: + last -= 1 + for wday, n in rr._bynweekday: + if n < 0: + i = last+(n+1)*7 + i -= (self.wdaymask[i]-wday) % 7 + else: + i = first+(n-1)*7 + i += (7-self.wdaymask[i]+wday) % 7 + if first <= i <= last: + self.nwdaymask[i] = 1 + + if rr._byeaster: + self.eastermask = [0]*(self.yearlen+7) + eyday = easter.easter(year).toordinal()-self.yearordinal + for offset in rr._byeaster: + self.eastermask[eyday+offset] = 1 + + self.lastyear = year + self.lastmonth = month + + def ydayset(self, year, month, day): + return list(range(self.yearlen)), 0, self.yearlen + + def mdayset(self, year, month, day): + dset = [None]*self.yearlen + start, end = self.mrange[month-1:month+1] + for i in range(start, end): + dset[i] = i + return dset, start, end + + def wdayset(self, year, month, day): + # We need to handle cross-year weeks here. + dset = [None]*(self.yearlen+7) + i = datetime.date(year, month, day).toordinal()-self.yearordinal + start = i + for j in range(7): + dset[i] = i + i += 1 + # if (not (0 <= i < self.yearlen) or + # self.wdaymask[i] == self.rrule._wkst): + # This will cross the year boundary, if necessary. + if self.wdaymask[i] == self.rrule._wkst: + break + return dset, start, i + + def ddayset(self, year, month, day): + dset = [None] * self.yearlen + i = datetime.date(year, month, day).toordinal() - self.yearordinal + dset[i] = i + return dset, i, i + 1 + + def htimeset(self, hour, minute, second): + tset = [] + rr = self.rrule + for minute in rr._byminute: + for second in rr._bysecond: + tset.append(datetime.time(hour, minute, second, + tzinfo=rr._tzinfo)) + tset.sort() + return tset + + def mtimeset(self, hour, minute, second): + tset = [] + rr = self.rrule + for second in rr._bysecond: + tset.append(datetime.time(hour, minute, second, tzinfo=rr._tzinfo)) + tset.sort() + return tset + + def stimeset(self, hour, minute, second): + return (datetime.time(hour, minute, second, + tzinfo=self.rrule._tzinfo),) + + +class rruleset(rrulebase): + """ The rruleset type allows more complex recurrence setups, mixing + multiple rules, dates, exclusion rules, and exclusion dates. The type + constructor takes the following keyword arguments: + + :param cache: If True, caching of results will be enabled, improving + performance of multiple queries considerably. """ + + class _genitem(object): + def __init__(self, genlist, gen): + try: + self.dt = advance_iterator(gen) + genlist.append(self) + except StopIteration: + pass + self.genlist = genlist + self.gen = gen + + def __next__(self): + try: + self.dt = advance_iterator(self.gen) + except StopIteration: + if self.genlist[0] is self: + heapq.heappop(self.genlist) + else: + self.genlist.remove(self) + heapq.heapify(self.genlist) + + next = __next__ + + def __lt__(self, other): + return self.dt < other.dt + + def __gt__(self, other): + return self.dt > other.dt + + def __eq__(self, other): + return self.dt == other.dt + + def __ne__(self, other): + return self.dt != other.dt + + def __init__(self, cache=False): + super(rruleset, self).__init__(cache) + self._rrule = [] + self._rdate = [] + self._exrule = [] + self._exdate = [] + + @_invalidates_cache + def rrule(self, rrule): + """ Include the given :py:class:`rrule` instance in the recurrence set + generation. """ + self._rrule.append(rrule) + + @_invalidates_cache + def rdate(self, rdate): + """ Include the given :py:class:`datetime` instance in the recurrence + set generation. """ + self._rdate.append(rdate) + + @_invalidates_cache + def exrule(self, exrule): + """ Include the given rrule instance in the recurrence set exclusion + list. Dates which are part of the given recurrence rules will not + be generated, even if some inclusive rrule or rdate matches them. + """ + self._exrule.append(exrule) + + @_invalidates_cache + def exdate(self, exdate): + """ Include the given datetime instance in the recurrence set + exclusion list. Dates included that way will not be generated, + even if some inclusive rrule or rdate matches them. """ + self._exdate.append(exdate) + + def _iter(self): + rlist = [] + self._rdate.sort() + self._genitem(rlist, iter(self._rdate)) + for gen in [iter(x) for x in self._rrule]: + self._genitem(rlist, gen) + exlist = [] + self._exdate.sort() + self._genitem(exlist, iter(self._exdate)) + for gen in [iter(x) for x in self._exrule]: + self._genitem(exlist, gen) + lastdt = None + total = 0 + heapq.heapify(rlist) + heapq.heapify(exlist) + while rlist: + ritem = rlist[0] + if not lastdt or lastdt != ritem.dt: + while exlist and exlist[0] < ritem: + exitem = exlist[0] + advance_iterator(exitem) + if exlist and exlist[0] is exitem: + heapq.heapreplace(exlist, exitem) + if not exlist or ritem != exlist[0]: + total += 1 + yield ritem.dt + lastdt = ritem.dt + advance_iterator(ritem) + if rlist and rlist[0] is ritem: + heapq.heapreplace(rlist, ritem) + self._len = total + + + + +class _rrulestr(object): + """ Parses a string representation of a recurrence rule or set of + recurrence rules. + + :param s: + Required, a string defining one or more recurrence rules. + + :param dtstart: + If given, used as the default recurrence start if not specified in the + rule string. + + :param cache: + If set ``True`` caching of results will be enabled, improving + performance of multiple queries considerably. + + :param unfold: + If set ``True`` indicates that a rule string is split over more + than one line and should be joined before processing. + + :param forceset: + If set ``True`` forces a :class:`dateutil.rrule.rruleset` to + be returned. + + :param compatible: + If set ``True`` forces ``unfold`` and ``forceset`` to be ``True``. + + :param ignoretz: + If set ``True``, time zones in parsed strings are ignored and a naive + :class:`datetime.datetime` object is returned. + + :param tzids: + If given, a callable or mapping used to retrieve a + :class:`datetime.tzinfo` from a string representation. + Defaults to :func:`dateutil.tz.gettz`. + + :param tzinfos: + Additional time zone names / aliases which may be present in a string + representation. See :func:`dateutil.parser.parse` for more + information. + + :return: + Returns a :class:`dateutil.rrule.rruleset` or + :class:`dateutil.rrule.rrule` + """ + + _freq_map = {"YEARLY": YEARLY, + "MONTHLY": MONTHLY, + "WEEKLY": WEEKLY, + "DAILY": DAILY, + "HOURLY": HOURLY, + "MINUTELY": MINUTELY, + "SECONDLY": SECONDLY} + + _weekday_map = {"MO": 0, "TU": 1, "WE": 2, "TH": 3, + "FR": 4, "SA": 5, "SU": 6} + + def _handle_int(self, rrkwargs, name, value, **kwargs): + rrkwargs[name.lower()] = int(value) + + def _handle_int_list(self, rrkwargs, name, value, **kwargs): + rrkwargs[name.lower()] = [int(x) for x in value.split(',')] + + _handle_INTERVAL = _handle_int + _handle_COUNT = _handle_int + _handle_BYSETPOS = _handle_int_list + _handle_BYMONTH = _handle_int_list + _handle_BYMONTHDAY = _handle_int_list + _handle_BYYEARDAY = _handle_int_list + _handle_BYEASTER = _handle_int_list + _handle_BYWEEKNO = _handle_int_list + _handle_BYHOUR = _handle_int_list + _handle_BYMINUTE = _handle_int_list + _handle_BYSECOND = _handle_int_list + + def _handle_FREQ(self, rrkwargs, name, value, **kwargs): + rrkwargs["freq"] = self._freq_map[value] + + def _handle_UNTIL(self, rrkwargs, name, value, **kwargs): + global parser + if not parser: + from dateutil import parser + try: + rrkwargs["until"] = parser.parse(value, + ignoretz=kwargs.get("ignoretz"), + tzinfos=kwargs.get("tzinfos")) + except ValueError: + raise ValueError("invalid until date") + + def _handle_WKST(self, rrkwargs, name, value, **kwargs): + rrkwargs["wkst"] = self._weekday_map[value] + + def _handle_BYWEEKDAY(self, rrkwargs, name, value, **kwargs): + """ + Two ways to specify this: +1MO or MO(+1) + """ + l = [] + for wday in value.split(','): + if '(' in wday: + # If it's of the form TH(+1), etc. + splt = wday.split('(') + w = splt[0] + n = int(splt[1][:-1]) + elif len(wday): + # If it's of the form +1MO + for i in range(len(wday)): + if wday[i] not in '+-0123456789': + break + n = wday[:i] or None + w = wday[i:] + if n: + n = int(n) + else: + raise ValueError("Invalid (empty) BYDAY specification.") + + l.append(weekdays[self._weekday_map[w]](n)) + rrkwargs["byweekday"] = l + + _handle_BYDAY = _handle_BYWEEKDAY + + def _parse_rfc_rrule(self, line, + dtstart=None, + cache=False, + ignoretz=False, + tzinfos=None): + if line.find(':') != -1: + name, value = line.split(':') + if name != "RRULE": + raise ValueError("unknown parameter name") + else: + value = line + rrkwargs = {} + for pair in value.split(';'): + name, value = pair.split('=') + name = name.upper() + value = value.upper() + try: + getattr(self, "_handle_"+name)(rrkwargs, name, value, + ignoretz=ignoretz, + tzinfos=tzinfos) + except AttributeError: + raise ValueError("unknown parameter '%s'" % name) + except (KeyError, ValueError): + raise ValueError("invalid '%s': %s" % (name, value)) + return rrule(dtstart=dtstart, cache=cache, **rrkwargs) + + def _parse_date_value(self, date_value, parms, rule_tzids, + ignoretz, tzids, tzinfos): + global parser + if not parser: + from dateutil import parser + + datevals = [] + value_found = False + TZID = None + + for parm in parms: + if parm.startswith("TZID="): + try: + tzkey = rule_tzids[parm.split('TZID=')[-1]] + except KeyError: + continue + if tzids is None: + from . import tz + tzlookup = tz.gettz + elif callable(tzids): + tzlookup = tzids + else: + tzlookup = getattr(tzids, 'get', None) + if tzlookup is None: + msg = ('tzids must be a callable, mapping, or None, ' + 'not %s' % tzids) + raise ValueError(msg) + + TZID = tzlookup(tzkey) + continue + + # RFC 5445 3.8.2.4: The VALUE parameter is optional, but may be found + # only once. + if parm not in {"VALUE=DATE-TIME", "VALUE=DATE"}: + raise ValueError("unsupported parm: " + parm) + else: + if value_found: + msg = ("Duplicate value parameter found in: " + parm) + raise ValueError(msg) + value_found = True + + for datestr in date_value.split(','): + date = parser.parse(datestr, ignoretz=ignoretz, tzinfos=tzinfos) + if TZID is not None: + if date.tzinfo is None: + date = date.replace(tzinfo=TZID) + else: + raise ValueError('DTSTART/EXDATE specifies multiple timezone') + datevals.append(date) + + return datevals + + def _parse_rfc(self, s, + dtstart=None, + cache=False, + unfold=False, + forceset=False, + compatible=False, + ignoretz=False, + tzids=None, + tzinfos=None): + global parser + if compatible: + forceset = True + unfold = True + + TZID_NAMES = dict(map( + lambda x: (x.upper(), x), + re.findall('TZID=(?P[^:]+):', s) + )) + s = s.upper() + if not s.strip(): + raise ValueError("empty string") + if unfold: + lines = s.splitlines() + i = 0 + while i < len(lines): + line = lines[i].rstrip() + if not line: + del lines[i] + elif i > 0 and line[0] == " ": + lines[i-1] += line[1:] + del lines[i] + else: + i += 1 + else: + lines = s.split() + if (not forceset and len(lines) == 1 and (s.find(':') == -1 or + s.startswith('RRULE:'))): + return self._parse_rfc_rrule(lines[0], cache=cache, + dtstart=dtstart, ignoretz=ignoretz, + tzinfos=tzinfos) + else: + rrulevals = [] + rdatevals = [] + exrulevals = [] + exdatevals = [] + for line in lines: + if not line: + continue + if line.find(':') == -1: + name = "RRULE" + value = line + else: + name, value = line.split(':', 1) + parms = name.split(';') + if not parms: + raise ValueError("empty property name") + name = parms[0] + parms = parms[1:] + if name == "RRULE": + for parm in parms: + raise ValueError("unsupported RRULE parm: "+parm) + rrulevals.append(value) + elif name == "RDATE": + for parm in parms: + if parm != "VALUE=DATE-TIME": + raise ValueError("unsupported RDATE parm: "+parm) + rdatevals.append(value) + elif name == "EXRULE": + for parm in parms: + raise ValueError("unsupported EXRULE parm: "+parm) + exrulevals.append(value) + elif name == "EXDATE": + exdatevals.extend( + self._parse_date_value(value, parms, + TZID_NAMES, ignoretz, + tzids, tzinfos) + ) + elif name == "DTSTART": + dtvals = self._parse_date_value(value, parms, TZID_NAMES, + ignoretz, tzids, tzinfos) + if len(dtvals) != 1: + raise ValueError("Multiple DTSTART values specified:" + + value) + dtstart = dtvals[0] + else: + raise ValueError("unsupported property: "+name) + if (forceset or len(rrulevals) > 1 or rdatevals + or exrulevals or exdatevals): + if not parser and (rdatevals or exdatevals): + from dateutil import parser + rset = rruleset(cache=cache) + for value in rrulevals: + rset.rrule(self._parse_rfc_rrule(value, dtstart=dtstart, + ignoretz=ignoretz, + tzinfos=tzinfos)) + for value in rdatevals: + for datestr in value.split(','): + rset.rdate(parser.parse(datestr, + ignoretz=ignoretz, + tzinfos=tzinfos)) + for value in exrulevals: + rset.exrule(self._parse_rfc_rrule(value, dtstart=dtstart, + ignoretz=ignoretz, + tzinfos=tzinfos)) + for value in exdatevals: + rset.exdate(value) + if compatible and dtstart: + rset.rdate(dtstart) + return rset + else: + return self._parse_rfc_rrule(rrulevals[0], + dtstart=dtstart, + cache=cache, + ignoretz=ignoretz, + tzinfos=tzinfos) + + def __call__(self, s, **kwargs): + return self._parse_rfc(s, **kwargs) + + +rrulestr = _rrulestr() + +# vim:ts=4:sw=4:et diff --git a/Windows/dateutil/test/__init__.py b/Windows/dateutil/test/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Windows/dateutil/test/_common.py b/Windows/dateutil/test/_common.py new file mode 100644 index 00000000..264dfbda --- /dev/null +++ b/Windows/dateutil/test/_common.py @@ -0,0 +1,275 @@ +from __future__ import unicode_literals +import os +import time +import subprocess +import warnings +import tempfile +import pickle + + +class WarningTestMixin(object): + # Based on https://stackoverflow.com/a/12935176/467366 + class _AssertWarnsContext(warnings.catch_warnings): + def __init__(self, expected_warnings, parent, **kwargs): + super(WarningTestMixin._AssertWarnsContext, self).__init__(**kwargs) + + self.parent = parent + try: + self.expected_warnings = list(expected_warnings) + except TypeError: + self.expected_warnings = [expected_warnings] + + self._warning_log = [] + + def __enter__(self, *args, **kwargs): + rv = super(WarningTestMixin._AssertWarnsContext, self).__enter__(*args, **kwargs) + + if self._showwarning is not self._module.showwarning: + super_showwarning = self._module.showwarning + else: + super_showwarning = None + + def showwarning(*args, **kwargs): + if super_showwarning is not None: + super_showwarning(*args, **kwargs) + + self._warning_log.append(warnings.WarningMessage(*args, **kwargs)) + + self._module.showwarning = showwarning + return rv + + def __exit__(self, *args, **kwargs): + super(WarningTestMixin._AssertWarnsContext, self).__exit__(self, *args, **kwargs) + + self.parent.assertTrue(any(issubclass(item.category, warning) + for warning in self.expected_warnings + for item in self._warning_log)) + + def assertWarns(self, warning, callable=None, *args, **kwargs): + warnings.simplefilter('always') + context = self.__class__._AssertWarnsContext(warning, self) + if callable is None: + return context + else: + with context: + callable(*args, **kwargs) + + +class PicklableMixin(object): + def _get_nobj_bytes(self, obj, dump_kwargs, load_kwargs): + """ + Pickle and unpickle an object using ``pickle.dumps`` / ``pickle.loads`` + """ + pkl = pickle.dumps(obj, **dump_kwargs) + return pickle.loads(pkl, **load_kwargs) + + def _get_nobj_file(self, obj, dump_kwargs, load_kwargs): + """ + Pickle and unpickle an object using ``pickle.dump`` / ``pickle.load`` on + a temporary file. + """ + with tempfile.TemporaryFile('w+b') as pkl: + pickle.dump(obj, pkl, **dump_kwargs) + pkl.seek(0) # Reset the file to the beginning to read it + nobj = pickle.load(pkl, **load_kwargs) + + return nobj + + def assertPicklable(self, obj, singleton=False, asfile=False, + dump_kwargs=None, load_kwargs=None): + """ + Assert that an object can be pickled and unpickled. This assertion + assumes that the desired behavior is that the unpickled object compares + equal to the original object, but is not the same object. + """ + get_nobj = self._get_nobj_file if asfile else self._get_nobj_bytes + dump_kwargs = dump_kwargs or {} + load_kwargs = load_kwargs or {} + + nobj = get_nobj(obj, dump_kwargs, load_kwargs) + if not singleton: + self.assertIsNot(obj, nobj) + self.assertEqual(obj, nobj) + + +class TZContextBase(object): + """ + Base class for a context manager which allows changing of time zones. + + Subclasses may define a guard variable to either block or or allow time + zone changes by redefining ``_guard_var_name`` and ``_guard_allows_change``. + The default is that the guard variable must be affirmatively set. + + Subclasses must define ``get_current_tz`` and ``set_current_tz``. + """ + _guard_var_name = "DATEUTIL_MAY_CHANGE_TZ" + _guard_allows_change = True + + def __init__(self, tzval): + self.tzval = tzval + self._old_tz = None + + @classmethod + def tz_change_allowed(cls): + """ + Class method used to query whether or not this class allows time zone + changes. + """ + guard = bool(os.environ.get(cls._guard_var_name, False)) + + # _guard_allows_change gives the "default" behavior - if True, the + # guard is overcoming a block. If false, the guard is causing a block. + # Whether tz_change is allowed is therefore the XNOR of the two. + return guard == cls._guard_allows_change + + @classmethod + def tz_change_disallowed_message(cls): + """ Generate instructions on how to allow tz changes """ + msg = ('Changing time zone not allowed. Set {envar} to {gval} ' + 'if you would like to allow this behavior') + + return msg.format(envar=cls._guard_var_name, + gval=cls._guard_allows_change) + + def __enter__(self): + if not self.tz_change_allowed(): + raise ValueError(self.tz_change_disallowed_message()) + + self._old_tz = self.get_current_tz() + self.set_current_tz(self.tzval) + + def __exit__(self, type, value, traceback): + if self._old_tz is not None: + self.set_current_tz(self._old_tz) + + self._old_tz = None + + def get_current_tz(self): + raise NotImplementedError + + def set_current_tz(self): + raise NotImplementedError + + +class TZEnvContext(TZContextBase): + """ + Context manager that temporarily sets the `TZ` variable (for use on + *nix-like systems). Because the effect is local to the shell anyway, this + will apply *unless* a guard is set. + + If you do not want the TZ environment variable set, you may set the + ``DATEUTIL_MAY_NOT_CHANGE_TZ_VAR`` variable to a truthy value. + """ + _guard_var_name = "DATEUTIL_MAY_NOT_CHANGE_TZ_VAR" + _guard_allows_change = False + + def get_current_tz(self): + return os.environ.get('TZ', UnsetTz) + + def set_current_tz(self, tzval): + if tzval is UnsetTz and 'TZ' in os.environ: + del os.environ['TZ'] + else: + os.environ['TZ'] = tzval + + time.tzset() + + +class TZWinContext(TZContextBase): + """ + Context manager for changing local time zone on Windows. + + Because the effect of this is system-wide and global, it may have + unintended side effect. Set the ``DATEUTIL_MAY_CHANGE_TZ`` environment + variable to a truthy value before using this context manager. + """ + def get_current_tz(self): + p = subprocess.Popen(['tzutil', '/g'], stdout=subprocess.PIPE) + + ctzname, err = p.communicate() + ctzname = ctzname.decode() # Popen returns + + if p.returncode: + raise OSError('Failed to get current time zone: ' + err) + + return ctzname + + def set_current_tz(self, tzname): + p = subprocess.Popen('tzutil /s "' + tzname + '"') + + out, err = p.communicate() + + if p.returncode: + raise OSError('Failed to set current time zone: ' + + (err or 'Unknown error.')) + + +### +# Utility classes +class NotAValueClass(object): + """ + A class analogous to NaN that has operations defined for any type. + """ + def _op(self, other): + return self # Operation with NotAValue returns NotAValue + + def _cmp(self, other): + return False + + __add__ = __radd__ = _op + __sub__ = __rsub__ = _op + __mul__ = __rmul__ = _op + __div__ = __rdiv__ = _op + __truediv__ = __rtruediv__ = _op + __floordiv__ = __rfloordiv__ = _op + + __lt__ = __rlt__ = _op + __gt__ = __rgt__ = _op + __eq__ = __req__ = _op + __le__ = __rle__ = _op + __ge__ = __rge__ = _op + + +NotAValue = NotAValueClass() + + +class ComparesEqualClass(object): + """ + A class that is always equal to whatever you compare it to. + """ + + def __eq__(self, other): + return True + + def __ne__(self, other): + return False + + def __le__(self, other): + return True + + def __ge__(self, other): + return True + + def __lt__(self, other): + return False + + def __gt__(self, other): + return False + + __req__ = __eq__ + __rne__ = __ne__ + __rle__ = __le__ + __rge__ = __ge__ + __rlt__ = __lt__ + __rgt__ = __gt__ + + +ComparesEqual = ComparesEqualClass() + + +class UnsetTzClass(object): + """ Sentinel class for unset time zone variable """ + pass + + +UnsetTz = UnsetTzClass() diff --git a/Windows/dateutil/test/conftest.py b/Windows/dateutil/test/conftest.py new file mode 100644 index 00000000..78ed70ac --- /dev/null +++ b/Windows/dateutil/test/conftest.py @@ -0,0 +1,41 @@ +import os +import pytest + + +# Configure pytest to ignore xfailing tests +# See: https://stackoverflow.com/a/53198349/467366 +def pytest_collection_modifyitems(items): + for item in items: + marker_getter = getattr(item, 'get_closest_marker', None) + + # Python 3.3 support + if marker_getter is None: + marker_getter = item.get_marker + + marker = marker_getter('xfail') + + # Need to query the args because conditional xfail tests still have + # the xfail mark even if they are not expected to fail + if marker and (not marker.args or marker.args[0]): + item.add_marker(pytest.mark.no_cover) + + +def set_tzpath(): + """ + Sets the TZPATH variable if it's specified in an environment variable. + """ + tzpath = os.environ.get('DATEUTIL_TZPATH', None) + + if tzpath is None: + return + + path_components = tzpath.split(':') + + print("Setting TZPATH to {}".format(path_components)) + + from dateutil import tz + tz.TZPATHS.clear() + tz.TZPATHS.extend(path_components) + + +set_tzpath() diff --git a/Windows/dateutil/test/property/test_isoparse_prop.py b/Windows/dateutil/test/property/test_isoparse_prop.py new file mode 100644 index 00000000..c6a4b82a --- /dev/null +++ b/Windows/dateutil/test/property/test_isoparse_prop.py @@ -0,0 +1,27 @@ +from hypothesis import given, assume +from hypothesis import strategies as st + +from dateutil import tz +from dateutil.parser import isoparse + +import pytest + +# Strategies +TIME_ZONE_STRATEGY = st.sampled_from([None, tz.tzutc()] + + [tz.gettz(zname) for zname in ('US/Eastern', 'US/Pacific', + 'Australia/Sydney', 'Europe/London')]) +ASCII_STRATEGY = st.characters(max_codepoint=127) + + +@pytest.mark.isoparser +@given(dt=st.datetimes(timezones=TIME_ZONE_STRATEGY), sep=ASCII_STRATEGY) +def test_timespec_auto(dt, sep): + if dt.tzinfo is not None: + # Assume offset has no sub-second components + assume(dt.utcoffset().total_seconds() % 60 == 0) + + sep = str(sep) # Python 2.7 requires bytes + dtstr = dt.isoformat(sep=sep) + dt_rt = isoparse(dtstr) + + assert dt_rt == dt diff --git a/Windows/dateutil/test/property/test_parser_prop.py b/Windows/dateutil/test/property/test_parser_prop.py new file mode 100644 index 00000000..fdfd171e --- /dev/null +++ b/Windows/dateutil/test/property/test_parser_prop.py @@ -0,0 +1,22 @@ +from hypothesis.strategies import integers +from hypothesis import given + +import pytest + +from dateutil.parser import parserinfo + + +@pytest.mark.parserinfo +@given(integers(min_value=100, max_value=9999)) +def test_convertyear(n): + assert n == parserinfo().convertyear(n) + + +@pytest.mark.parserinfo +@given(integers(min_value=-50, + max_value=49)) +def test_convertyear_no_specified_century(n): + p = parserinfo() + new_year = p._year + n + result = p.convertyear(new_year % 100, century_specified=False) + assert result == new_year diff --git a/Windows/dateutil/test/test_easter.py b/Windows/dateutil/test/test_easter.py new file mode 100644 index 00000000..cf2ec7f2 --- /dev/null +++ b/Windows/dateutil/test/test_easter.py @@ -0,0 +1,93 @@ +from dateutil.easter import easter +from dateutil.easter import EASTER_WESTERN, EASTER_ORTHODOX, EASTER_JULIAN + +from datetime import date +import pytest + +# List of easters between 1990 and 2050 +western_easter_dates = [ + date(1990, 4, 15), date(1991, 3, 31), date(1992, 4, 19), date(1993, 4, 11), + date(1994, 4, 3), date(1995, 4, 16), date(1996, 4, 7), date(1997, 3, 30), + date(1998, 4, 12), date(1999, 4, 4), + + date(2000, 4, 23), date(2001, 4, 15), date(2002, 3, 31), date(2003, 4, 20), + date(2004, 4, 11), date(2005, 3, 27), date(2006, 4, 16), date(2007, 4, 8), + date(2008, 3, 23), date(2009, 4, 12), + + date(2010, 4, 4), date(2011, 4, 24), date(2012, 4, 8), date(2013, 3, 31), + date(2014, 4, 20), date(2015, 4, 5), date(2016, 3, 27), date(2017, 4, 16), + date(2018, 4, 1), date(2019, 4, 21), + + date(2020, 4, 12), date(2021, 4, 4), date(2022, 4, 17), date(2023, 4, 9), + date(2024, 3, 31), date(2025, 4, 20), date(2026, 4, 5), date(2027, 3, 28), + date(2028, 4, 16), date(2029, 4, 1), + + date(2030, 4, 21), date(2031, 4, 13), date(2032, 3, 28), date(2033, 4, 17), + date(2034, 4, 9), date(2035, 3, 25), date(2036, 4, 13), date(2037, 4, 5), + date(2038, 4, 25), date(2039, 4, 10), + + date(2040, 4, 1), date(2041, 4, 21), date(2042, 4, 6), date(2043, 3, 29), + date(2044, 4, 17), date(2045, 4, 9), date(2046, 3, 25), date(2047, 4, 14), + date(2048, 4, 5), date(2049, 4, 18), date(2050, 4, 10) + ] + +orthodox_easter_dates = [ + date(1990, 4, 15), date(1991, 4, 7), date(1992, 4, 26), date(1993, 4, 18), + date(1994, 5, 1), date(1995, 4, 23), date(1996, 4, 14), date(1997, 4, 27), + date(1998, 4, 19), date(1999, 4, 11), + + date(2000, 4, 30), date(2001, 4, 15), date(2002, 5, 5), date(2003, 4, 27), + date(2004, 4, 11), date(2005, 5, 1), date(2006, 4, 23), date(2007, 4, 8), + date(2008, 4, 27), date(2009, 4, 19), + + date(2010, 4, 4), date(2011, 4, 24), date(2012, 4, 15), date(2013, 5, 5), + date(2014, 4, 20), date(2015, 4, 12), date(2016, 5, 1), date(2017, 4, 16), + date(2018, 4, 8), date(2019, 4, 28), + + date(2020, 4, 19), date(2021, 5, 2), date(2022, 4, 24), date(2023, 4, 16), + date(2024, 5, 5), date(2025, 4, 20), date(2026, 4, 12), date(2027, 5, 2), + date(2028, 4, 16), date(2029, 4, 8), + + date(2030, 4, 28), date(2031, 4, 13), date(2032, 5, 2), date(2033, 4, 24), + date(2034, 4, 9), date(2035, 4, 29), date(2036, 4, 20), date(2037, 4, 5), + date(2038, 4, 25), date(2039, 4, 17), + + date(2040, 5, 6), date(2041, 4, 21), date(2042, 4, 13), date(2043, 5, 3), + date(2044, 4, 24), date(2045, 4, 9), date(2046, 4, 29), date(2047, 4, 21), + date(2048, 4, 5), date(2049, 4, 25), date(2050, 4, 17) +] + +# A random smattering of Julian dates. +# Pulled values from http://www.kevinlaughery.com/east4099.html +julian_easter_dates = [ + date( 326, 4, 3), date( 375, 4, 5), date( 492, 4, 5), date( 552, 3, 31), + date( 562, 4, 9), date( 569, 4, 21), date( 597, 4, 14), date( 621, 4, 19), + date( 636, 3, 31), date( 655, 3, 29), date( 700, 4, 11), date( 725, 4, 8), + date( 750, 3, 29), date( 782, 4, 7), date( 835, 4, 18), date( 849, 4, 14), + date( 867, 3, 30), date( 890, 4, 12), date( 922, 4, 21), date( 934, 4, 6), + date(1049, 3, 26), date(1058, 4, 19), date(1113, 4, 6), date(1119, 3, 30), + date(1242, 4, 20), date(1255, 3, 28), date(1257, 4, 8), date(1258, 3, 24), + date(1261, 4, 24), date(1278, 4, 17), date(1333, 4, 4), date(1351, 4, 17), + date(1371, 4, 6), date(1391, 3, 26), date(1402, 3, 26), date(1412, 4, 3), + date(1439, 4, 5), date(1445, 3, 28), date(1531, 4, 9), date(1555, 4, 14) +] + + +@pytest.mark.parametrize("easter_date", western_easter_dates) +def test_easter_western(easter_date): + assert easter_date == easter(easter_date.year, EASTER_WESTERN) + + +@pytest.mark.parametrize("easter_date", orthodox_easter_dates) +def test_easter_orthodox(easter_date): + assert easter_date == easter(easter_date.year, EASTER_ORTHODOX) + + +@pytest.mark.parametrize("easter_date", julian_easter_dates) +def test_easter_julian(easter_date): + assert easter_date == easter(easter_date.year, EASTER_JULIAN) + + +def test_easter_bad_method(): + with pytest.raises(ValueError): + easter(1975, 4) diff --git a/Windows/dateutil/test/test_import_star.py b/Windows/dateutil/test/test_import_star.py new file mode 100644 index 00000000..2fb70981 --- /dev/null +++ b/Windows/dateutil/test/test_import_star.py @@ -0,0 +1,33 @@ +"""Test for the "import *" functionality. + +As import * can be only done at module level, it has been added in a separate file +""" +import pytest + +prev_locals = list(locals()) +from dateutil import * +new_locals = {name:value for name,value in locals().items() + if name not in prev_locals} +new_locals.pop('prev_locals') + + +@pytest.mark.import_star +def test_imported_modules(): + """ Test that `from dateutil import *` adds modules in __all__ locally """ + import dateutil.easter + import dateutil.parser + import dateutil.relativedelta + import dateutil.rrule + import dateutil.tz + import dateutil.utils + import dateutil.zoneinfo + + assert dateutil.easter == new_locals.pop("easter") + assert dateutil.parser == new_locals.pop("parser") + assert dateutil.relativedelta == new_locals.pop("relativedelta") + assert dateutil.rrule == new_locals.pop("rrule") + assert dateutil.tz == new_locals.pop("tz") + assert dateutil.utils == new_locals.pop("utils") + assert dateutil.zoneinfo == new_locals.pop("zoneinfo") + + assert not new_locals diff --git a/Windows/dateutil/test/test_imports.py b/Windows/dateutil/test/test_imports.py new file mode 100644 index 00000000..2a19b62a --- /dev/null +++ b/Windows/dateutil/test/test_imports.py @@ -0,0 +1,166 @@ +import sys +import unittest + +class ImportVersionTest(unittest.TestCase): + """ Test that dateutil.__version__ can be imported""" + + def testImportVersionStr(self): + from dateutil import __version__ + + def testImportRoot(self): + import dateutil + + self.assertTrue(hasattr(dateutil, '__version__')) + + +class ImportEasterTest(unittest.TestCase): + """ Test that dateutil.easter-related imports work properly """ + + def testEasterDirect(self): + import dateutil.easter + + def testEasterFrom(self): + from dateutil import easter + + def testEasterStar(self): + from dateutil.easter import easter + + +class ImportParserTest(unittest.TestCase): + """ Test that dateutil.parser-related imports work properly """ + def testParserDirect(self): + import dateutil.parser + + def testParserFrom(self): + from dateutil import parser + + def testParserAll(self): + # All interface + from dateutil.parser import parse + from dateutil.parser import parserinfo + + # Other public classes + from dateutil.parser import parser + + for var in (parse, parserinfo, parser): + self.assertIsNot(var, None) + + +class ImportRelativeDeltaTest(unittest.TestCase): + """ Test that dateutil.relativedelta-related imports work properly """ + def testRelativeDeltaDirect(self): + import dateutil.relativedelta + + def testRelativeDeltaFrom(self): + from dateutil import relativedelta + + def testRelativeDeltaAll(self): + from dateutil.relativedelta import relativedelta + from dateutil.relativedelta import MO, TU, WE, TH, FR, SA, SU + + for var in (relativedelta, MO, TU, WE, TH, FR, SA, SU): + self.assertIsNot(var, None) + + # In the public interface but not in all + from dateutil.relativedelta import weekday + self.assertIsNot(weekday, None) + + +class ImportRRuleTest(unittest.TestCase): + """ Test that dateutil.rrule related imports work properly """ + def testRRuleDirect(self): + import dateutil.rrule + + def testRRuleFrom(self): + from dateutil import rrule + + def testRRuleAll(self): + from dateutil.rrule import rrule + from dateutil.rrule import rruleset + from dateutil.rrule import rrulestr + from dateutil.rrule import YEARLY, MONTHLY, WEEKLY, DAILY + from dateutil.rrule import HOURLY, MINUTELY, SECONDLY + from dateutil.rrule import MO, TU, WE, TH, FR, SA, SU + + rr_all = (rrule, rruleset, rrulestr, + YEARLY, MONTHLY, WEEKLY, DAILY, + HOURLY, MINUTELY, SECONDLY, + MO, TU, WE, TH, FR, SA, SU) + + for var in rr_all: + self.assertIsNot(var, None) + + # In the public interface but not in all + from dateutil.rrule import weekday + self.assertIsNot(weekday, None) + + +class ImportTZTest(unittest.TestCase): + """ Test that dateutil.tz related imports work properly """ + def testTzDirect(self): + import dateutil.tz + + def testTzFrom(self): + from dateutil import tz + + def testTzAll(self): + from dateutil.tz import tzutc + from dateutil.tz import tzoffset + from dateutil.tz import tzlocal + from dateutil.tz import tzfile + from dateutil.tz import tzrange + from dateutil.tz import tzstr + from dateutil.tz import tzical + from dateutil.tz import gettz + from dateutil.tz import tzwin + from dateutil.tz import tzwinlocal + from dateutil.tz import UTC + from dateutil.tz import datetime_ambiguous + from dateutil.tz import datetime_exists + from dateutil.tz import resolve_imaginary + + tz_all = ["tzutc", "tzoffset", "tzlocal", "tzfile", "tzrange", + "tzstr", "tzical", "gettz", "datetime_ambiguous", + "datetime_exists", "resolve_imaginary", "UTC"] + + tz_all += ["tzwin", "tzwinlocal"] if sys.platform.startswith("win") else [] + lvars = locals() + + for var in tz_all: + self.assertIsNot(lvars[var], None) + +@unittest.skipUnless(sys.platform.startswith('win'), "Requires Windows") +class ImportTZWinTest(unittest.TestCase): + """ Test that dateutil.tzwin related imports work properly """ + def testTzwinDirect(self): + import dateutil.tzwin + + def testTzwinFrom(self): + from dateutil import tzwin + + def testTzwinStar(self): + from dateutil.tzwin import tzwin + from dateutil.tzwin import tzwinlocal + + tzwin_all = [tzwin, tzwinlocal] + + for var in tzwin_all: + self.assertIsNot(var, None) + + +class ImportZoneInfoTest(unittest.TestCase): + def testZoneinfoDirect(self): + import dateutil.zoneinfo + + def testZoneinfoFrom(self): + from dateutil import zoneinfo + + def testZoneinfoStar(self): + from dateutil.zoneinfo import gettz + from dateutil.zoneinfo import gettz_db_metadata + from dateutil.zoneinfo import rebuild + + zi_all = (gettz, gettz_db_metadata, rebuild) + + for var in zi_all: + self.assertIsNot(var, None) diff --git a/Windows/dateutil/test/test_internals.py b/Windows/dateutil/test/test_internals.py new file mode 100644 index 00000000..a64c5148 --- /dev/null +++ b/Windows/dateutil/test/test_internals.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +""" +Tests for implementation details, not necessarily part of the user-facing +API. + +The motivating case for these tests is #483, where we want to smoke-test +code that may be difficult to reach through the standard API calls. +""" + +import unittest +import sys + +import pytest + +from dateutil.parser._parser import _ymd +from dateutil import tz + +IS_PY32 = sys.version_info[0:2] == (3, 2) + + +class TestYMD(unittest.TestCase): + + # @pytest.mark.smoke + def test_could_be_day(self): + ymd = _ymd('foo bar 124 baz') + + ymd.append(2, 'M') + assert ymd.has_month + assert not ymd.has_year + assert ymd.could_be_day(4) + assert not ymd.could_be_day(-6) + assert not ymd.could_be_day(32) + + # Assumes leapyear + assert ymd.could_be_day(29) + + ymd.append(1999) + assert ymd.has_year + assert not ymd.could_be_day(29) + + ymd.append(16, 'D') + assert ymd.has_day + assert not ymd.could_be_day(1) + + ymd = _ymd('foo bar 124 baz') + ymd.append(1999) + assert ymd.could_be_day(31) + + +### +# Test that private interfaces in _parser are deprecated properly +@pytest.mark.skipif(IS_PY32, reason='pytest.warns not supported on Python 3.2') +def test_parser_private_warns(): + from dateutil.parser import _timelex, _tzparser + from dateutil.parser import _parsetz + + with pytest.warns(DeprecationWarning): + _tzparser() + + with pytest.warns(DeprecationWarning): + _timelex('2014-03-03') + + with pytest.warns(DeprecationWarning): + _parsetz('+05:00') + + +@pytest.mark.skipif(IS_PY32, reason='pytest.warns not supported on Python 3.2') +def test_parser_parser_private_not_warns(): + from dateutil.parser._parser import _timelex, _tzparser + from dateutil.parser._parser import _parsetz + + with pytest.warns(None) as recorder: + _tzparser() + assert len(recorder) == 0 + + with pytest.warns(None) as recorder: + _timelex('2014-03-03') + + assert len(recorder) == 0 + + with pytest.warns(None) as recorder: + _parsetz('+05:00') + assert len(recorder) == 0 + + +@pytest.mark.tzstr +def test_tzstr_internal_timedeltas(): + with pytest.warns(tz.DeprecatedTzFormatWarning): + tz1 = tz.tzstr("EST5EDT,5,4,0,7200,11,-3,0,7200") + + with pytest.warns(tz.DeprecatedTzFormatWarning): + tz2 = tz.tzstr("EST5EDT,4,1,0,7200,10,-1,0,7200") + + assert tz1._start_delta != tz2._start_delta + assert tz1._end_delta != tz2._end_delta diff --git a/Windows/dateutil/test/test_isoparser.py b/Windows/dateutil/test/test_isoparser.py new file mode 100644 index 00000000..ecd6e84a --- /dev/null +++ b/Windows/dateutil/test/test_isoparser.py @@ -0,0 +1,516 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from datetime import datetime, timedelta, date, time +import itertools as it + +from dateutil.tz import tz +from dateutil.parser import isoparser, isoparse + +import pytest +import six + +UTC = tz.tzutc() + +def _generate_tzoffsets(limited): + def _mkoffset(hmtuple, fmt): + h, m = hmtuple + m_td = (-1 if h < 0 else 1) * m + + tzo = tz.tzoffset(None, timedelta(hours=h, minutes=m_td)) + return tzo, fmt.format(h, m) + + out = [] + if not limited: + # The subset that's just hours + hm_out_h = [(h, 0) for h in (-23, -5, 0, 5, 23)] + out.extend([_mkoffset(hm, '{:+03d}') for hm in hm_out_h]) + + # Ones that have hours and minutes + hm_out = [] + hm_out_h + hm_out += [(-12, 15), (11, 30), (10, 2), (5, 15), (-5, 30)] + else: + hm_out = [(-5, -0)] + + fmts = ['{:+03d}:{:02d}', '{:+03d}{:02d}'] + out += [_mkoffset(hm, fmt) for hm in hm_out for fmt in fmts] + + # Also add in UTC and naive + out.append((tz.tzutc(), 'Z')) + out.append((None, '')) + + return out + +FULL_TZOFFSETS = _generate_tzoffsets(False) +FULL_TZOFFSETS_AWARE = [x for x in FULL_TZOFFSETS if x[1]] +TZOFFSETS = _generate_tzoffsets(True) + +DATES = [datetime(1996, 1, 1), datetime(2017, 1, 1)] +@pytest.mark.parametrize('dt', tuple(DATES)) +def test_year_only(dt): + dtstr = dt.strftime('%Y') + + assert isoparse(dtstr) == dt + +DATES += [datetime(2000, 2, 1), datetime(2017, 4, 1)] +@pytest.mark.parametrize('dt', tuple(DATES)) +def test_year_month(dt): + fmt = '%Y-%m' + dtstr = dt.strftime(fmt) + + assert isoparse(dtstr) == dt + +DATES += [datetime(2016, 2, 29), datetime(2018, 3, 15)] +YMD_FMTS = ('%Y%m%d', '%Y-%m-%d') +@pytest.mark.parametrize('dt', tuple(DATES)) +@pytest.mark.parametrize('fmt', YMD_FMTS) +def test_year_month_day(dt, fmt): + dtstr = dt.strftime(fmt) + + assert isoparse(dtstr) == dt + +def _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset, + microsecond_precision=None): + tzi, offset_str = tzoffset + fmt = date_fmt + 'T' + time_fmt + dt = dt.replace(tzinfo=tzi) + dtstr = dt.strftime(fmt) + + if microsecond_precision is not None: + if not fmt.endswith('%f'): + raise ValueError('Time format has no microseconds!') + + if microsecond_precision != 6: + dtstr = dtstr[:-(6 - microsecond_precision)] + elif microsecond_precision > 6: + raise ValueError('Precision must be 1-6') + + dtstr += offset_str + + assert isoparse(dtstr) == dt + +DATETIMES = [datetime(1998, 4, 16, 12), + datetime(2019, 11, 18, 23), + datetime(2014, 12, 16, 4)] +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +def test_ymd_h(dt, date_fmt, tzoffset): + _isoparse_date_and_time(dt, date_fmt, '%H', tzoffset) + +DATETIMES = [datetime(2012, 1, 6, 9, 37)] +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('time_fmt', ('%H%M', '%H:%M')) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +def test_ymd_hm(dt, date_fmt, time_fmt, tzoffset): + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset) + +DATETIMES = [datetime(2003, 9, 2, 22, 14, 2), + datetime(2003, 8, 8, 14, 9, 14), + datetime(2003, 4, 7, 6, 14, 59)] +HMS_FMTS = ('%H%M%S', '%H:%M:%S') +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('time_fmt', HMS_FMTS) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +def test_ymd_hms(dt, date_fmt, time_fmt, tzoffset): + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset) + +DATETIMES = [datetime(2017, 11, 27, 6, 14, 30, 123456)] +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('time_fmt', (x + sep + '%f' for x in HMS_FMTS + for sep in '.,')) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +@pytest.mark.parametrize('precision', list(range(3, 7))) +def test_ymd_hms_micro(dt, date_fmt, time_fmt, tzoffset, precision): + # Truncate the microseconds to the desired precision for the representation + dt = dt.replace(microsecond=int(round(dt.microsecond, precision-6))) + + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset, precision) + +### +# Truncation of extra digits beyond microsecond precision +@pytest.mark.parametrize('dt_str', [ + '2018-07-03T14:07:00.123456000001', + '2018-07-03T14:07:00.123456999999', +]) +def test_extra_subsecond_digits(dt_str): + assert isoparse(dt_str) == datetime(2018, 7, 3, 14, 7, 0, 123456) + +@pytest.mark.parametrize('tzoffset', FULL_TZOFFSETS) +def test_full_tzoffsets(tzoffset): + dt = datetime(2017, 11, 27, 6, 14, 30, 123456) + date_fmt = '%Y-%m-%d' + time_fmt = '%H:%M:%S.%f' + + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset) + +@pytest.mark.parametrize('dt_str', [ + '2014-04-11T00', + '2014-04-10T24', + '2014-04-11T00:00', + '2014-04-10T24:00', + '2014-04-11T00:00:00', + '2014-04-10T24:00:00', + '2014-04-11T00:00:00.000', + '2014-04-10T24:00:00.000', + '2014-04-11T00:00:00.000000', + '2014-04-10T24:00:00.000000'] +) +def test_datetime_midnight(dt_str): + assert isoparse(dt_str) == datetime(2014, 4, 11, 0, 0, 0, 0) + +@pytest.mark.parametrize('datestr', [ + '2014-01-01', + '20140101', +]) +@pytest.mark.parametrize('sep', [' ', 'a', 'T', '_', '-']) +def test_isoparse_sep_none(datestr, sep): + isostr = datestr + sep + '14:33:09' + assert isoparse(isostr) == datetime(2014, 1, 1, 14, 33, 9) + +## +# Uncommon date formats +TIME_ARGS = ('time_args', + ((None, time(0), None), ) + tuple(('%H:%M:%S.%f', _t, _tz) + for _t, _tz in it.product([time(0), time(9, 30), time(14, 47)], + TZOFFSETS))) + +@pytest.mark.parametrize('isocal,dt_expected',[ + ((2017, 10), datetime(2017, 3, 6)), + ((2020, 1), datetime(2019, 12, 30)), # ISO year != Cal year + ((2004, 53), datetime(2004, 12, 27)), # Only half the week is in 2014 +]) +def test_isoweek(isocal, dt_expected): + # TODO: Figure out how to parametrize this on formats, too + for fmt in ('{:04d}-W{:02d}', '{:04d}W{:02d}'): + dtstr = fmt.format(*isocal) + assert isoparse(dtstr) == dt_expected + +@pytest.mark.parametrize('isocal,dt_expected',[ + ((2016, 13, 7), datetime(2016, 4, 3)), + ((2004, 53, 7), datetime(2005, 1, 2)), # ISO year != Cal year + ((2009, 1, 2), datetime(2008, 12, 30)), # ISO year < Cal year + ((2009, 53, 6), datetime(2010, 1, 2)) # ISO year > Cal year +]) +def test_isoweek_day(isocal, dt_expected): + # TODO: Figure out how to parametrize this on formats, too + for fmt in ('{:04d}-W{:02d}-{:d}', '{:04d}W{:02d}{:d}'): + dtstr = fmt.format(*isocal) + assert isoparse(dtstr) == dt_expected + +@pytest.mark.parametrize('isoord,dt_expected', [ + ((2004, 1), datetime(2004, 1, 1)), + ((2016, 60), datetime(2016, 2, 29)), + ((2017, 60), datetime(2017, 3, 1)), + ((2016, 366), datetime(2016, 12, 31)), + ((2017, 365), datetime(2017, 12, 31)) +]) +def test_iso_ordinal(isoord, dt_expected): + for fmt in ('{:04d}-{:03d}', '{:04d}{:03d}'): + dtstr = fmt.format(*isoord) + + assert isoparse(dtstr) == dt_expected + + +### +# Acceptance of bytes +@pytest.mark.parametrize('isostr,dt', [ + (b'2014', datetime(2014, 1, 1)), + (b'20140204', datetime(2014, 2, 4)), + (b'2014-02-04', datetime(2014, 2, 4)), + (b'2014-02-04T12', datetime(2014, 2, 4, 12)), + (b'2014-02-04T12:30', datetime(2014, 2, 4, 12, 30)), + (b'2014-02-04T12:30:15', datetime(2014, 2, 4, 12, 30, 15)), + (b'2014-02-04T12:30:15.224', datetime(2014, 2, 4, 12, 30, 15, 224000)), + (b'20140204T123015.224', datetime(2014, 2, 4, 12, 30, 15, 224000)), + (b'2014-02-04T12:30:15.224Z', datetime(2014, 2, 4, 12, 30, 15, 224000, + tz.tzutc())), + (b'2014-02-04T12:30:15.224z', datetime(2014, 2, 4, 12, 30, 15, 224000, + tz.tzutc())), + (b'2014-02-04T12:30:15.224+05:00', + datetime(2014, 2, 4, 12, 30, 15, 224000, + tzinfo=tz.tzoffset(None, timedelta(hours=5))))]) +def test_bytes(isostr, dt): + assert isoparse(isostr) == dt + + +### +# Invalid ISO strings +@pytest.mark.parametrize('isostr,exception', [ + ('201', ValueError), # ISO string too short + ('2012-0425', ValueError), # Inconsistent date separators + ('201204-25', ValueError), # Inconsistent date separators + ('20120425T0120:00', ValueError), # Inconsistent time separators + ('20120425T012500-334', ValueError), # Wrong microsecond separator + ('2001-1', ValueError), # YYYY-M not valid + ('2012-04-9', ValueError), # YYYY-MM-D not valid + ('201204', ValueError), # YYYYMM not valid + ('20120411T03:30+', ValueError), # Time zone too short + ('20120411T03:30+1234567', ValueError), # Time zone too long + ('20120411T03:30-25:40', ValueError), # Time zone invalid + ('2012-1a', ValueError), # Invalid month + ('20120411T03:30+00:60', ValueError), # Time zone invalid minutes + ('20120411T03:30+00:61', ValueError), # Time zone invalid minutes + ('20120411T033030.123456012:00', # No sign in time zone + ValueError), + ('2012-W00', ValueError), # Invalid ISO week + ('2012-W55', ValueError), # Invalid ISO week + ('2012-W01-0', ValueError), # Invalid ISO week day + ('2012-W01-8', ValueError), # Invalid ISO week day + ('2013-000', ValueError), # Invalid ordinal day + ('2013-366', ValueError), # Invalid ordinal day + ('2013366', ValueError), # Invalid ordinal day + ('2014-03-12Т12:30:14', ValueError), # Cyrillic T + ('2014-04-21T24:00:01', ValueError), # Invalid use of 24 for midnight + ('2014_W01-1', ValueError), # Invalid separator + ('2014W01-1', ValueError), # Inconsistent use of dashes + ('2014-W011', ValueError), # Inconsistent use of dashes + +]) +def test_iso_raises(isostr, exception): + with pytest.raises(exception): + isoparse(isostr) + + +@pytest.mark.parametrize('sep_act, valid_sep, exception', [ + ('T', 'C', ValueError), + ('C', 'T', ValueError), +]) +def test_iso_with_sep_raises(sep_act, valid_sep, exception): + parser = isoparser(sep=valid_sep) + isostr = '2012-04-25' + sep_act + '01:25:00' + with pytest.raises(exception): + parser.isoparse(isostr) + + +@pytest.mark.xfail() +@pytest.mark.parametrize('isostr,exception', [ + ('20120425T01:2000', ValueError), # Inconsistent time separators +]) +def test_iso_raises_failing(isostr, exception): + # These are test cases where the current implementation is too lenient + # and need to be fixed + with pytest.raises(exception): + isoparse(isostr) + + +### +# Test ISOParser constructor +@pytest.mark.parametrize('sep', [' ', '9', '🍛']) +def test_isoparser_invalid_sep(sep): + with pytest.raises(ValueError): + isoparser(sep=sep) + + +# This only fails on Python 3 +@pytest.mark.xfail(six.PY3, reason="Fails on Python 3 only") +def test_isoparser_byte_sep(): + dt = datetime(2017, 12, 6, 12, 30, 45) + dt_str = dt.isoformat(sep=str('T')) + + dt_rt = isoparser(sep=b'T').isoparse(dt_str) + + assert dt == dt_rt + + +### +# Test parse_tzstr +@pytest.mark.parametrize('tzoffset', FULL_TZOFFSETS) +def test_parse_tzstr(tzoffset): + dt = datetime(2017, 11, 27, 6, 14, 30, 123456) + date_fmt = '%Y-%m-%d' + time_fmt = '%H:%M:%S.%f' + + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset) + + +@pytest.mark.parametrize('tzstr', [ + '-00:00', '+00:00', '+00', '-00', '+0000', '-0000' +]) +@pytest.mark.parametrize('zero_as_utc', [True, False]) +def test_parse_tzstr_zero_as_utc(tzstr, zero_as_utc): + tzi = isoparser().parse_tzstr(tzstr, zero_as_utc=zero_as_utc) + assert tzi == tz.tzutc() + assert (type(tzi) == tz.tzutc) == zero_as_utc + + +@pytest.mark.parametrize('tzstr,exception', [ + ('00:00', ValueError), # No sign + ('05:00', ValueError), # No sign + ('_00:00', ValueError), # Invalid sign + ('+25:00', ValueError), # Offset too large + ('00:0000', ValueError), # String too long +]) +def test_parse_tzstr_fails(tzstr, exception): + with pytest.raises(exception): + isoparser().parse_tzstr(tzstr) + +### +# Test parse_isodate +def __make_date_examples(): + dates_no_day = [ + date(1999, 12, 1), + date(2016, 2, 1) + ] + + if six.PY3: + # strftime does not support dates before 1900 in Python 2 + dates_no_day.append(date(1000, 11, 1)) + + # Only one supported format for dates with no day + o = zip(dates_no_day, it.repeat('%Y-%m')) + + dates_w_day = [ + date(1969, 12, 31), + date(1900, 1, 1), + date(2016, 2, 29), + date(2017, 11, 14) + ] + + dates_w_day_fmts = ('%Y%m%d', '%Y-%m-%d') + o = it.chain(o, it.product(dates_w_day, dates_w_day_fmts)) + + return list(o) + + +@pytest.mark.parametrize('d,dt_fmt', __make_date_examples()) +@pytest.mark.parametrize('as_bytes', [True, False]) +def test_parse_isodate(d, dt_fmt, as_bytes): + d_str = d.strftime(dt_fmt) + if isinstance(d_str, six.text_type) and as_bytes: + d_str = d_str.encode('ascii') + elif isinstance(d_str, bytes) and not as_bytes: + d_str = d_str.decode('ascii') + + iparser = isoparser() + assert iparser.parse_isodate(d_str) == d + + +@pytest.mark.parametrize('isostr,exception', [ + ('243', ValueError), # ISO string too short + ('2014-0423', ValueError), # Inconsistent date separators + ('201404-23', ValueError), # Inconsistent date separators + ('2014日03月14', ValueError), # Not ASCII + ('2013-02-29', ValueError), # Not a leap year + ('2014/12/03', ValueError), # Wrong separators + ('2014-04-19T', ValueError), # Unknown components +]) +def test_isodate_raises(isostr, exception): + with pytest.raises(exception): + isoparser().parse_isodate(isostr) + + +### +# Test parse_isotime +def __make_time_examples(): + outputs = [] + + # HH + time_h = [time(0), time(8), time(22)] + time_h_fmts = ['%H'] + + outputs.append(it.product(time_h, time_h_fmts)) + + # HHMM / HH:MM + time_hm = [time(0, 0), time(0, 30), time(8, 47), time(16, 1)] + time_hm_fmts = ['%H%M', '%H:%M'] + + outputs.append(it.product(time_hm, time_hm_fmts)) + + # HHMMSS / HH:MM:SS + time_hms = [time(0, 0, 0), time(0, 15, 30), + time(8, 2, 16), time(12, 0), time(16, 2), time(20, 45)] + + time_hms_fmts = ['%H%M%S', '%H:%M:%S'] + + outputs.append(it.product(time_hms, time_hms_fmts)) + + # HHMMSS.ffffff / HH:MM:SS.ffffff + time_hmsu = [time(0, 0, 0, 0), time(4, 15, 3, 247993), + time(14, 21, 59, 948730), + time(23, 59, 59, 999999)] + + time_hmsu_fmts = ['%H%M%S.%f', '%H:%M:%S.%f'] + + outputs.append(it.product(time_hmsu, time_hmsu_fmts)) + + outputs = list(map(list, outputs)) + + # Time zones + ex_naive = list(it.chain.from_iterable(x[0:2] for x in outputs)) + o = it.product(ex_naive, TZOFFSETS) # ((time, fmt), (tzinfo, offsetstr)) + o = ((t.replace(tzinfo=tzi), fmt + off_str) + for (t, fmt), (tzi, off_str) in o) + + outputs.append(o) + + return list(it.chain.from_iterable(outputs)) + + +@pytest.mark.parametrize('time_val,time_fmt', __make_time_examples()) +@pytest.mark.parametrize('as_bytes', [True, False]) +def test_isotime(time_val, time_fmt, as_bytes): + tstr = time_val.strftime(time_fmt) + if isinstance(time_val, six.text_type) and as_bytes: + tstr = tstr.encode('ascii') + elif isinstance(time_val, bytes) and not as_bytes: + tstr = tstr.decode('ascii') + + iparser = isoparser() + + assert iparser.parse_isotime(tstr) == time_val + + +@pytest.mark.parametrize('isostr', [ + '24:00', + '2400', + '24:00:00', + '240000', + '24:00:00.000', + '24:00:00,000', + '24:00:00.000000', + '24:00:00,000000', +]) +def test_isotime_midnight(isostr): + iparser = isoparser() + assert iparser.parse_isotime(isostr) == time(0, 0, 0, 0) + + +@pytest.mark.parametrize('isostr,exception', [ + ('3', ValueError), # ISO string too short + ('14時30分15秒', ValueError), # Not ASCII + ('14_30_15', ValueError), # Invalid separators + ('1430:15', ValueError), # Inconsistent separator use + ('25', ValueError), # Invalid hours + ('25:15', ValueError), # Invalid hours + ('14:60', ValueError), # Invalid minutes + ('14:59:61', ValueError), # Invalid seconds + ('14:30:15.34468305:00', ValueError), # No sign in time zone + ('14:30:15+', ValueError), # Time zone too short + ('14:30:15+1234567', ValueError), # Time zone invalid + ('14:59:59+25:00', ValueError), # Invalid tz hours + ('14:59:59+12:62', ValueError), # Invalid tz minutes + ('14:59:30_344583', ValueError), # Invalid microsecond separator + ('24:01', ValueError), # 24 used for non-midnight time + ('24:00:01', ValueError), # 24 used for non-midnight time + ('24:00:00.001', ValueError), # 24 used for non-midnight time + ('24:00:00.000001', ValueError), # 24 used for non-midnight time +]) +def test_isotime_raises(isostr, exception): + iparser = isoparser() + with pytest.raises(exception): + iparser.parse_isotime(isostr) + + +@pytest.mark.xfail() +@pytest.mark.parametrize('isostr,exception', [ + ('14:3015', ValueError), # Inconsistent separator use + ('201202', ValueError) # Invalid ISO format +]) +def test_isotime_raises_xfail(isostr, exception): + iparser = isoparser() + with pytest.raises(exception): + iparser.parse_isotime(isostr) diff --git a/Windows/dateutil/test/test_parser.py b/Windows/dateutil/test/test_parser.py new file mode 100644 index 00000000..dcaa7cc0 --- /dev/null +++ b/Windows/dateutil/test/test_parser.py @@ -0,0 +1,856 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import itertools +from datetime import datetime, timedelta +import unittest +import sys + +from dateutil import tz +from dateutil.tz import tzoffset +from dateutil.parser import parse, parserinfo +from dateutil.parser import UnknownTimezoneWarning + +from ._common import TZEnvContext + +from six import assertRaisesRegex, PY3 +from io import StringIO + +import pytest + +# Platform info +IS_WIN = sys.platform.startswith('win') + +try: + datetime.now().strftime('%-d') + PLATFORM_HAS_DASH_D = True +except ValueError: + PLATFORM_HAS_DASH_D = False + +# Parser test cases using no keyword arguments. Format: (parsable_text, expected_datetime, assertion_message) +PARSER_TEST_CASES = [ + ("Thu Sep 25 10:36:28 2003", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Thu Sep 25 2003", datetime(2003, 9, 25), "date command format strip"), + ("2003-09-25T10:49:41", datetime(2003, 9, 25, 10, 49, 41), "iso format strip"), + ("2003-09-25T10:49", datetime(2003, 9, 25, 10, 49), "iso format strip"), + ("2003-09-25T10", datetime(2003, 9, 25, 10), "iso format strip"), + ("2003-09-25", datetime(2003, 9, 25), "iso format strip"), + ("20030925T104941", datetime(2003, 9, 25, 10, 49, 41), "iso stripped format strip"), + ("20030925T1049", datetime(2003, 9, 25, 10, 49, 0), "iso stripped format strip"), + ("20030925T10", datetime(2003, 9, 25, 10), "iso stripped format strip"), + ("20030925", datetime(2003, 9, 25), "iso stripped format strip"), + ("2003-09-25 10:49:41,502", datetime(2003, 9, 25, 10, 49, 41, 502000), "python logger format"), + ("199709020908", datetime(1997, 9, 2, 9, 8), "no separator"), + ("19970902090807", datetime(1997, 9, 2, 9, 8, 7), "no separator"), + ("2003-09-25", datetime(2003, 9, 25), "date with dash"), + ("09-25-2003", datetime(2003, 9, 25), "date with dash"), + ("25-09-2003", datetime(2003, 9, 25), "date with dash"), + ("10-09-2003", datetime(2003, 10, 9), "date with dash"), + ("10-09-03", datetime(2003, 10, 9), "date with dash"), + ("2003.09.25", datetime(2003, 9, 25), "date with dot"), + ("09.25.2003", datetime(2003, 9, 25), "date with dot"), + ("25.09.2003", datetime(2003, 9, 25), "date with dot"), + ("10.09.2003", datetime(2003, 10, 9), "date with dot"), + ("10.09.03", datetime(2003, 10, 9), "date with dot"), + ("2003/09/25", datetime(2003, 9, 25), "date with slash"), + ("09/25/2003", datetime(2003, 9, 25), "date with slash"), + ("25/09/2003", datetime(2003, 9, 25), "date with slash"), + ("10/09/2003", datetime(2003, 10, 9), "date with slash"), + ("10/09/03", datetime(2003, 10, 9), "date with slash"), + ("2003 09 25", datetime(2003, 9, 25), "date with space"), + ("09 25 2003", datetime(2003, 9, 25), "date with space"), + ("25 09 2003", datetime(2003, 9, 25), "date with space"), + ("10 09 2003", datetime(2003, 10, 9), "date with space"), + ("10 09 03", datetime(2003, 10, 9), "date with space"), + ("25 09 03", datetime(2003, 9, 25), "date with space"), + ("03 25 Sep", datetime(2003, 9, 25), "strangely ordered date"), + ("25 03 Sep", datetime(2025, 9, 3), "strangely ordered date"), + (" July 4 , 1976 12:01:02 am ", datetime(1976, 7, 4, 0, 1, 2), "extra space"), + ("Wed, July 10, '96", datetime(1996, 7, 10, 0, 0), "random format"), + ("1996.July.10 AD 12:08 PM", datetime(1996, 7, 10, 12, 8), "random format"), + ("July 4, 1976", datetime(1976, 7, 4), "random format"), + ("7 4 1976", datetime(1976, 7, 4), "random format"), + ("4 jul 1976", datetime(1976, 7, 4), "random format"), + ("7-4-76", datetime(1976, 7, 4), "random format"), + ("19760704", datetime(1976, 7, 4), "random format"), + ("0:01:02 on July 4, 1976", datetime(1976, 7, 4, 0, 1, 2), "random format"), + ("0:01:02 on July 4, 1976", datetime(1976, 7, 4, 0, 1, 2), "random format"), + ("July 4, 1976 12:01:02 am", datetime(1976, 7, 4, 0, 1, 2), "random format"), + ("Mon Jan 2 04:24:27 1995", datetime(1995, 1, 2, 4, 24, 27), "random format"), + ("04.04.95 00:22", datetime(1995, 4, 4, 0, 22), "random format"), + ("Jan 1 1999 11:23:34.578", datetime(1999, 1, 1, 11, 23, 34, 578000), "random format"), + ("950404 122212", datetime(1995, 4, 4, 12, 22, 12), "random format"), + ("3rd of May 2001", datetime(2001, 5, 3), "random format"), + ("5th of March 2001", datetime(2001, 3, 5), "random format"), + ("1st of May 2003", datetime(2003, 5, 1), "random format"), + ('0099-01-01T00:00:00', datetime(99, 1, 1, 0, 0), "99 ad"), + ('0031-01-01T00:00:00', datetime(31, 1, 1, 0, 0), "31 ad"), + ("20080227T21:26:01.123456789", datetime(2008, 2, 27, 21, 26, 1, 123456), "high precision seconds"), + ('13NOV2017', datetime(2017, 11, 13), "dBY (See GH360)"), + ('0003-03-04', datetime(3, 3, 4), "pre 12 year same month (See GH PR #293)"), + ('December.0031.30', datetime(31, 12, 30), "BYd corner case (GH#687)") +] + + +@pytest.mark.parametrize("parsable_text,expected_datetime,assertion_message", PARSER_TEST_CASES) +def test_parser(parsable_text, expected_datetime, assertion_message): + assert parse(parsable_text) == expected_datetime, assertion_message + + +# Parser test cases using datetime(2003, 9, 25) as a default. +# Format: (parsable_text, expected_datetime, assertion_message) +PARSER_DEFAULT_TEST_CASES = [ + ("Thu Sep 25 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Thu Sep 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Thu 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Sep 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("10:36", datetime(2003, 9, 25, 10, 36), "date command format strip"), + ("Sep 2003", datetime(2003, 9, 25), "date command format strip"), + ("Sep", datetime(2003, 9, 25), "date command format strip"), + ("2003", datetime(2003, 9, 25), "date command format strip"), + ("10h36m28.5s", datetime(2003, 9, 25, 10, 36, 28, 500000), "hour with letters"), + ("10h36m28s", datetime(2003, 9, 25, 10, 36, 28), "hour with letters strip"), + ("10h36m", datetime(2003, 9, 25, 10, 36), "hour with letters strip"), + ("10h", datetime(2003, 9, 25, 10), "hour with letters strip"), + ("10 h 36", datetime(2003, 9, 25, 10, 36), "hour with letters strip"), + ("10 h 36.5", datetime(2003, 9, 25, 10, 36, 30), "hour with letter strip"), + ("36 m 5", datetime(2003, 9, 25, 0, 36, 5), "hour with letters spaces"), + ("36 m 5 s", datetime(2003, 9, 25, 0, 36, 5), "minute with letters spaces"), + ("36 m 05", datetime(2003, 9, 25, 0, 36, 5), "minute with letters spaces"), + ("36 m 05 s", datetime(2003, 9, 25, 0, 36, 5), "minutes with letters spaces"), + ("10h am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10h pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00 am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00 pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00a.m", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00p.m", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00a.m.", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00p.m.", datetime(2003, 9, 25, 22), "hour am pm"), + ("Wed", datetime(2003, 10, 1), "weekday alone"), + ("Wednesday", datetime(2003, 10, 1), "long weekday"), + ("October", datetime(2003, 10, 25), "long month"), + ("31-Dec-00", datetime(2000, 12, 31), "zero year"), + ("0:01:02", datetime(2003, 9, 25, 0, 1, 2), "random format"), + ("12h 01m02s am", datetime(2003, 9, 25, 0, 1, 2), "random format"), + ("12:08 PM", datetime(2003, 9, 25, 12, 8), "random format"), + ("01h02m03", datetime(2003, 9, 25, 1, 2, 3), "random format"), + ("01h02", datetime(2003, 9, 25, 1, 2), "random format"), + ("01h02s", datetime(2003, 9, 25, 1, 0, 2), "random format"), + ("01m02", datetime(2003, 9, 25, 0, 1, 2), "random format"), + ("01m02h", datetime(2003, 9, 25, 2, 1), "random format"), + ("2004 10 Apr 11h30m", datetime(2004, 4, 10, 11, 30), "random format") +] + + +@pytest.mark.parametrize("parsable_text,expected_datetime,assertion_message", PARSER_DEFAULT_TEST_CASES) +def test_parser_default(parsable_text, expected_datetime, assertion_message): + assert parse(parsable_text, default=datetime(2003, 9, 25)) == expected_datetime, assertion_message + + +class TestFormat(unittest.TestCase): + + def test_ybd(self): + # If we have a 4-digit year, a non-numeric month (abbreviated or not), + # and a day (1 or 2 digits), then there is no ambiguity as to which + # token is a year/month/day. This holds regardless of what order the + # terms are in and for each of the separators below. + + seps = ['-', ' ', '/', '.'] + + year_tokens = ['%Y'] + month_tokens = ['%b', '%B'] + day_tokens = ['%d'] + if PLATFORM_HAS_DASH_D: + day_tokens.append('%-d') + + prods = itertools.product(year_tokens, month_tokens, day_tokens) + perms = [y for x in prods for y in itertools.permutations(x)] + unambig_fmts = [sep.join(perm) for sep in seps for perm in perms] + + actual = datetime(2003, 9, 25) + + for fmt in unambig_fmts: + dstr = actual.strftime(fmt) + res = parse(dstr) + self.assertEqual(res, actual) + + +class TestInputFormats(object): + def test_empty_string_invalid(self): + with pytest.raises(ValueError): + parse('') + + def test_none_invalid(self): + with pytest.raises(TypeError): + parse(None) + + def test_int_invalid(self): + with pytest.raises(TypeError): + parse(13) + + def test_duck_typing(self): + # We want to support arbitrary classes that implement the stream + # interface. + + class StringPassThrough(object): + def __init__(self, stream): + self.stream = stream + + def read(self, *args, **kwargs): + return self.stream.read(*args, **kwargs) + + dstr = StringPassThrough(StringIO('2014 January 19')) + + res = parse(dstr) + expected = datetime(2014, 1, 19) + assert res == expected + + def test_parse_stream(self): + dstr = StringIO('2014 January 19') + + res = parse(dstr) + expected = datetime(2014, 1, 19) + assert res == expected + + def test_parse_str(self): + # Parser should be able to handle bytestring and unicode + uni_str = '2014-05-01 08:00:00' + bytes_str = uni_str.encode() + + res = parse(bytes_str) + expected = parse(uni_str) + assert res == expected + + def test_parse_bytes(self): + res = parse(b'2014 January 19') + expected = datetime(2014, 1, 19) + assert res == expected + + def test_parse_bytearray(self): + # GH#417 + res = parse(bytearray(b'2014 January 19')) + expected = datetime(2014, 1, 19) + assert res == expected + + +class ParserTest(unittest.TestCase): + + def setUp(self): + self.tzinfos = {"BRST": -10800} + self.brsttz = tzoffset("BRST", -10800) + self.default = datetime(2003, 9, 25) + + # Parser should be able to handle bytestring and unicode + self.uni_str = '2014-05-01 08:00:00' + self.str_str = self.uni_str.encode() + + def testParserParseStr(self): + from dateutil.parser import parser + + self.assertEqual(parser().parse(self.str_str), + parser().parse(self.uni_str)) + + def testParseUnicodeWords(self): + + class rus_parserinfo(parserinfo): + MONTHS = [("янв", "Январь"), + ("фев", "Февраль"), + ("мар", "Март"), + ("апр", "Апрель"), + ("май", "Май"), + ("июн", "Июнь"), + ("июл", "Июль"), + ("авг", "Август"), + ("сен", "Сентябрь"), + ("окт", "Октябрь"), + ("ноя", "Ноябрь"), + ("дек", "Декабрь")] + + self.assertEqual(parse('10 Сентябрь 2015 10:20', + parserinfo=rus_parserinfo()), + datetime(2015, 9, 10, 10, 20)) + + def testParseWithNulls(self): + # This relies on the from __future__ import unicode_literals, because + # explicitly specifying a unicode literal is a syntax error in Py 3.2 + # May want to switch to u'...' if we ever drop Python 3.2 support. + pstring = '\x00\x00August 29, 1924' + + self.assertEqual(parse(pstring), + datetime(1924, 8, 29)) + + def testDateCommandFormat(self): + self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003", + tzinfos=self.tzinfos), + datetime(2003, 9, 25, 10, 36, 28, + tzinfo=self.brsttz)) + + def testDateCommandFormatUnicode(self): + self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003", + tzinfos=self.tzinfos), + datetime(2003, 9, 25, 10, 36, 28, + tzinfo=self.brsttz)) + + def testDateCommandFormatReversed(self): + self.assertEqual(parse("2003 10:36:28 BRST 25 Sep Thu", + tzinfos=self.tzinfos), + datetime(2003, 9, 25, 10, 36, 28, + tzinfo=self.brsttz)) + + def testDateCommandFormatWithLong(self): + if not PY3: + self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003", + tzinfos={"BRST": long(-10800)}), + datetime(2003, 9, 25, 10, 36, 28, + tzinfo=self.brsttz)) + + def testDateCommandFormatIgnoreTz(self): + self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003", + ignoretz=True), + datetime(2003, 9, 25, 10, 36, 28)) + + def testDateRCommandFormat(self): + self.assertEqual(parse("Thu, 25 Sep 2003 10:49:41 -0300"), + datetime(2003, 9, 25, 10, 49, 41, + tzinfo=self.brsttz)) + + def testISOFormat(self): + self.assertEqual(parse("2003-09-25T10:49:41.5-03:00"), + datetime(2003, 9, 25, 10, 49, 41, 500000, + tzinfo=self.brsttz)) + + def testISOFormatStrip1(self): + self.assertEqual(parse("2003-09-25T10:49:41-03:00"), + datetime(2003, 9, 25, 10, 49, 41, + tzinfo=self.brsttz)) + + def testISOFormatStrip2(self): + self.assertEqual(parse("2003-09-25T10:49:41+03:00"), + datetime(2003, 9, 25, 10, 49, 41, + tzinfo=tzoffset(None, 10800))) + + def testISOStrippedFormat(self): + self.assertEqual(parse("20030925T104941.5-0300"), + datetime(2003, 9, 25, 10, 49, 41, 500000, + tzinfo=self.brsttz)) + + def testISOStrippedFormatStrip1(self): + self.assertEqual(parse("20030925T104941-0300"), + datetime(2003, 9, 25, 10, 49, 41, + tzinfo=self.brsttz)) + + def testISOStrippedFormatStrip2(self): + self.assertEqual(parse("20030925T104941+0300"), + datetime(2003, 9, 25, 10, 49, 41, + tzinfo=tzoffset(None, 10800))) + + def testDateWithDash8(self): + self.assertEqual(parse("10-09-2003", dayfirst=True), + datetime(2003, 9, 10)) + + def testDateWithDash11(self): + self.assertEqual(parse("10-09-03", yearfirst=True), + datetime(2010, 9, 3)) + + def testDateWithDot8(self): + self.assertEqual(parse("10.09.2003", dayfirst=True), + datetime(2003, 9, 10)) + + def testDateWithDot11(self): + self.assertEqual(parse("10.09.03", yearfirst=True), + datetime(2010, 9, 3)) + + def testDateWithSlash8(self): + self.assertEqual(parse("10/09/2003", dayfirst=True), + datetime(2003, 9, 10)) + + def testDateWithSlash11(self): + self.assertEqual(parse("10/09/03", yearfirst=True), + datetime(2010, 9, 3)) + + def testDateWithSpace8(self): + self.assertEqual(parse("10 09 2003", dayfirst=True), + datetime(2003, 9, 10)) + + def testDateWithSpace11(self): + self.assertEqual(parse("10 09 03", yearfirst=True), + datetime(2010, 9, 3)) + + def testAMPMNoHour(self): + with self.assertRaises(ValueError): + parse("AM") + + with self.assertRaises(ValueError): + parse("Jan 20, 2015 PM") + + def testAMPMRange(self): + with self.assertRaises(ValueError): + parse("13:44 AM") + + with self.assertRaises(ValueError): + parse("January 25, 1921 23:13 PM") + + def testPertain(self): + self.assertEqual(parse("Sep 03", default=self.default), + datetime(2003, 9, 3)) + self.assertEqual(parse("Sep of 03", default=self.default), + datetime(2003, 9, 25)) + + def testFuzzy(self): + s = "Today is 25 of September of 2003, exactly " \ + "at 10:49:41 with timezone -03:00." + self.assertEqual(parse(s, fuzzy=True), + datetime(2003, 9, 25, 10, 49, 41, + tzinfo=self.brsttz)) + + def testFuzzyWithTokens(self): + s1 = "Today is 25 of September of 2003, exactly " \ + "at 10:49:41 with timezone -03:00." + self.assertEqual(parse(s1, fuzzy_with_tokens=True), + (datetime(2003, 9, 25, 10, 49, 41, + tzinfo=self.brsttz), + ('Today is ', 'of ', ', exactly at ', + ' with timezone ', '.'))) + + s2 = "http://biz.yahoo.com/ipo/p/600221.html" + self.assertEqual(parse(s2, fuzzy_with_tokens=True), + (datetime(2060, 2, 21, 0, 0, 0), + ('http://biz.yahoo.com/ipo/p/', '.html'))) + + def testFuzzyAMPMProblem(self): + # Sometimes fuzzy parsing results in AM/PM flag being set without + # hours - if it's fuzzy it should ignore that. + s1 = "I have a meeting on March 1, 1974." + s2 = "On June 8th, 2020, I am going to be the first man on Mars" + + # Also don't want any erroneous AM or PMs changing the parsed time + s3 = "Meet me at the AM/PM on Sunset at 3:00 AM on December 3rd, 2003" + s4 = "Meet me at 3:00AM on December 3rd, 2003 at the AM/PM on Sunset" + + self.assertEqual(parse(s1, fuzzy=True), datetime(1974, 3, 1)) + self.assertEqual(parse(s2, fuzzy=True), datetime(2020, 6, 8)) + self.assertEqual(parse(s3, fuzzy=True), datetime(2003, 12, 3, 3)) + self.assertEqual(parse(s4, fuzzy=True), datetime(2003, 12, 3, 3)) + + def testFuzzyIgnoreAMPM(self): + s1 = "Jan 29, 1945 14:45 AM I going to see you there?" + with pytest.warns(UnknownTimezoneWarning): + res = parse(s1, fuzzy=True) + self.assertEqual(res, datetime(1945, 1, 29, 14, 45)) + + def testRandomFormat2(self): + self.assertEqual(parse("1996.07.10 AD at 15:08:56 PDT", + ignoretz=True), + datetime(1996, 7, 10, 15, 8, 56)) + + def testRandomFormat4(self): + self.assertEqual(parse("Tuesday, April 12, 1952 AD 3:30:42pm PST", + ignoretz=True), + datetime(1952, 4, 12, 15, 30, 42)) + + def testRandomFormat5(self): + self.assertEqual(parse("November 5, 1994, 8:15:30 am EST", + ignoretz=True), + datetime(1994, 11, 5, 8, 15, 30)) + + def testRandomFormat6(self): + self.assertEqual(parse("1994-11-05T08:15:30-05:00", + ignoretz=True), + datetime(1994, 11, 5, 8, 15, 30)) + + def testRandomFormat7(self): + self.assertEqual(parse("1994-11-05T08:15:30Z", + ignoretz=True), + datetime(1994, 11, 5, 8, 15, 30)) + + def testRandomFormat17(self): + self.assertEqual(parse("1976-07-04T00:01:02Z", ignoretz=True), + datetime(1976, 7, 4, 0, 1, 2)) + + def testRandomFormat18(self): + self.assertEqual(parse("1986-07-05T08:15:30z", + ignoretz=True), + datetime(1986, 7, 5, 8, 15, 30)) + + def testRandomFormat20(self): + self.assertEqual(parse("Tue Apr 4 00:22:12 PDT 1995", ignoretz=True), + datetime(1995, 4, 4, 0, 22, 12)) + + def testRandomFormat24(self): + self.assertEqual(parse("0:00 PM, PST", default=self.default, + ignoretz=True), + datetime(2003, 9, 25, 12, 0)) + + def testRandomFormat26(self): + with pytest.warns(UnknownTimezoneWarning): + res = parse("5:50 A.M. on June 13, 1990") + + self.assertEqual(res, datetime(1990, 6, 13, 5, 50)) + + def testInvalidDay(self): + with self.assertRaises(ValueError): + parse("Feb 30, 2007") + + def testUnspecifiedDayFallback(self): + # Test that for an unspecified day, the fallback behavior is correct. + self.assertEqual(parse("April 2009", default=datetime(2010, 1, 31)), + datetime(2009, 4, 30)) + + def testUnspecifiedDayFallbackFebNoLeapYear(self): + self.assertEqual(parse("Feb 2007", default=datetime(2010, 1, 31)), + datetime(2007, 2, 28)) + + def testUnspecifiedDayFallbackFebLeapYear(self): + self.assertEqual(parse("Feb 2008", default=datetime(2010, 1, 31)), + datetime(2008, 2, 29)) + + def testTzinfoDictionaryCouldReturnNone(self): + self.assertEqual(parse('2017-02-03 12:40 BRST', tzinfos={"BRST": None}), + datetime(2017, 2, 3, 12, 40)) + + def testTzinfosCallableCouldReturnNone(self): + self.assertEqual(parse('2017-02-03 12:40 BRST', tzinfos=lambda *args: None), + datetime(2017, 2, 3, 12, 40)) + + def testErrorType01(self): + self.assertRaises(ValueError, + parse, 'shouldfail') + + def testCorrectErrorOnFuzzyWithTokens(self): + assertRaisesRegex(self, ValueError, 'Unknown string format', + parse, '04/04/32/423', fuzzy_with_tokens=True) + assertRaisesRegex(self, ValueError, 'Unknown string format', + parse, '04/04/04 +32423', fuzzy_with_tokens=True) + assertRaisesRegex(self, ValueError, 'Unknown string format', + parse, '04/04/0d4', fuzzy_with_tokens=True) + + def testIncreasingCTime(self): + # This test will check 200 different years, every month, every day, + # every hour, every minute, every second, and every weekday, using + # a delta of more or less 1 year, 1 month, 1 day, 1 minute and + # 1 second. + delta = timedelta(days=365+31+1, seconds=1+60+60*60) + dt = datetime(1900, 1, 1, 0, 0, 0, 0) + for i in range(200): + self.assertEqual(parse(dt.ctime()), dt) + dt += delta + + def testIncreasingISOFormat(self): + delta = timedelta(days=365+31+1, seconds=1+60+60*60) + dt = datetime(1900, 1, 1, 0, 0, 0, 0) + for i in range(200): + self.assertEqual(parse(dt.isoformat()), dt) + dt += delta + + def testMicrosecondsPrecisionError(self): + # Skip found out that sad precision problem. :-( + dt1 = parse("00:11:25.01") + dt2 = parse("00:12:10.01") + self.assertEqual(dt1.microsecond, 10000) + self.assertEqual(dt2.microsecond, 10000) + + def testMicrosecondPrecisionErrorReturns(self): + # One more precision issue, discovered by Eric Brown. This should + # be the last one, as we're no longer using floating points. + for ms in [100001, 100000, 99999, 99998, + 10001, 10000, 9999, 9998, + 1001, 1000, 999, 998, + 101, 100, 99, 98]: + dt = datetime(2008, 2, 27, 21, 26, 1, ms) + self.assertEqual(parse(dt.isoformat()), dt) + + def testCustomParserInfo(self): + # Custom parser info wasn't working, as Michael Elsdörfer discovered. + from dateutil.parser import parserinfo, parser + + class myparserinfo(parserinfo): + MONTHS = parserinfo.MONTHS[:] + MONTHS[0] = ("Foo", "Foo") + myparser = parser(myparserinfo()) + dt = myparser.parse("01/Foo/2007") + self.assertEqual(dt, datetime(2007, 1, 1)) + + def testCustomParserShortDaynames(self): + # Horacio Hoyos discovered that day names shorter than 3 characters, + # for example two letter German day name abbreviations, don't work: + # https://github.com/dateutil/dateutil/issues/343 + from dateutil.parser import parserinfo, parser + + class GermanParserInfo(parserinfo): + WEEKDAYS = [("Mo", "Montag"), + ("Di", "Dienstag"), + ("Mi", "Mittwoch"), + ("Do", "Donnerstag"), + ("Fr", "Freitag"), + ("Sa", "Samstag"), + ("So", "Sonntag")] + + myparser = parser(GermanParserInfo()) + dt = myparser.parse("Sa 21. Jan 2017") + self.assertEqual(dt, datetime(2017, 1, 21)) + + def testNoYearFirstNoDayFirst(self): + dtstr = '090107' + + # Should be MMDDYY + self.assertEqual(parse(dtstr), + datetime(2007, 9, 1)) + + self.assertEqual(parse(dtstr, yearfirst=False, dayfirst=False), + datetime(2007, 9, 1)) + + def testYearFirst(self): + dtstr = '090107' + + # Should be MMDDYY + self.assertEqual(parse(dtstr, yearfirst=True), + datetime(2009, 1, 7)) + + self.assertEqual(parse(dtstr, yearfirst=True, dayfirst=False), + datetime(2009, 1, 7)) + + def testDayFirst(self): + dtstr = '090107' + + # Should be DDMMYY + self.assertEqual(parse(dtstr, dayfirst=True), + datetime(2007, 1, 9)) + + self.assertEqual(parse(dtstr, yearfirst=False, dayfirst=True), + datetime(2007, 1, 9)) + + def testDayFirstYearFirst(self): + dtstr = '090107' + # Should be YYDDMM + self.assertEqual(parse(dtstr, yearfirst=True, dayfirst=True), + datetime(2009, 7, 1)) + + def testUnambiguousYearFirst(self): + dtstr = '2015 09 25' + self.assertEqual(parse(dtstr, yearfirst=True), + datetime(2015, 9, 25)) + + def testUnambiguousDayFirst(self): + dtstr = '2015 09 25' + self.assertEqual(parse(dtstr, dayfirst=True), + datetime(2015, 9, 25)) + + def testUnambiguousDayFirstYearFirst(self): + dtstr = '2015 09 25' + self.assertEqual(parse(dtstr, dayfirst=True, yearfirst=True), + datetime(2015, 9, 25)) + + def test_mstridx(self): + # See GH408 + dtstr = '2015-15-May' + self.assertEqual(parse(dtstr), + datetime(2015, 5, 15)) + + def test_idx_check(self): + dtstr = '2017-07-17 06:15:' + # Pre-PR, the trailing colon will cause an IndexError at 824-825 + # when checking `i < len_l` and then accessing `l[i+1]` + res = parse(dtstr, fuzzy=True) + self.assertEqual(res, datetime(2017, 7, 17, 6, 15)) + + def test_hmBY(self): + # See GH#483 + dtstr = '02:17NOV2017' + res = parse(dtstr, default=self.default) + self.assertEqual(res, datetime(2017, 11, self.default.day, 2, 17)) + + def test_validate_hour(self): + # See GH353 + invalid = "201A-01-01T23:58:39.239769+03:00" + with self.assertRaises(ValueError): + parse(invalid) + + def test_era_trailing_year(self): + dstr = 'AD2001' + res = parse(dstr) + assert res.year == 2001, res + + +class TestParseUnimplementedCases(object): + @pytest.mark.xfail + def test_somewhat_ambiguous_string(self): + # Ref: github issue #487 + # The parser is choosing the wrong part for hour + # causing datetime to raise an exception. + dtstr = '1237 PM BRST Mon Oct 30 2017' + res = parse(dtstr, tzinfo=self.tzinfos) + assert res == datetime(2017, 10, 30, 12, 37, tzinfo=self.tzinfos) + + @pytest.mark.xfail + def test_YmdH_M_S(self): + # found in nasdaq's ftp data + dstr = '1991041310:19:24' + expected = datetime(1991, 4, 13, 10, 19, 24) + res = parse(dstr) + assert res == expected, (res, expected) + + @pytest.mark.xfail + def test_first_century(self): + dstr = '0031 Nov 03' + expected = datetime(31, 11, 3) + res = parse(dstr) + assert res == expected, res + + @pytest.mark.xfail + def test_era_trailing_year_with_dots(self): + dstr = 'A.D.2001' + res = parse(dstr) + assert res.year == 2001, res + + @pytest.mark.xfail + def test_ad_nospace(self): + expected = datetime(6, 5, 19) + for dstr in [' 6AD May 19', ' 06AD May 19', + ' 006AD May 19', ' 0006AD May 19']: + res = parse(dstr) + assert res == expected, (dstr, res) + + @pytest.mark.xfail + def test_four_letter_day(self): + dstr = 'Frid Dec 30, 2016' + expected = datetime(2016, 12, 30) + res = parse(dstr) + assert res == expected + + @pytest.mark.xfail + def test_non_date_number(self): + dstr = '1,700' + with pytest.raises(ValueError): + parse(dstr) + + @pytest.mark.xfail + def test_on_era(self): + # This could be classified as an "eras" test, but the relevant part + # about this is the ` on ` + dstr = '2:15 PM on January 2nd 1973 A.D.' + expected = datetime(1973, 1, 2, 14, 15) + res = parse(dstr) + assert res == expected + + @pytest.mark.xfail + def test_extraneous_year(self): + # This was found in the wild at insidertrading.org + dstr = "2011 MARTIN CHILDREN'S IRREVOCABLE TRUST u/a/d NOVEMBER 7, 2012" + res = parse(dstr, fuzzy_with_tokens=True) + expected = datetime(2012, 11, 7) + assert res == expected + + @pytest.mark.xfail + def test_extraneous_year_tokens(self): + # This was found in the wild at insidertrading.org + # Unlike in the case above, identifying the first "2012" as the year + # would not be a problem, but infering that the latter 2012 is hhmm + # is a problem. + dstr = "2012 MARTIN CHILDREN'S IRREVOCABLE TRUST u/a/d NOVEMBER 7, 2012" + expected = datetime(2012, 11, 7) + (res, tokens) = parse(dstr, fuzzy_with_tokens=True) + assert res == expected + assert tokens == ("2012 MARTIN CHILDREN'S IRREVOCABLE TRUST u/a/d ",) + + @pytest.mark.xfail + def test_extraneous_year2(self): + # This was found in the wild at insidertrading.org + dstr = ("Berylson Amy Smith 1998 Grantor Retained Annuity Trust " + "u/d/t November 2, 1998 f/b/o Jennifer L Berylson") + res = parse(dstr, fuzzy_with_tokens=True) + expected = datetime(1998, 11, 2) + assert res == expected + + @pytest.mark.xfail + def test_extraneous_year3(self): + # This was found in the wild at insidertrading.org + dstr = "SMITH R & WEISS D 94 CHILD TR FBO M W SMITH UDT 12/1/1994" + res = parse(dstr, fuzzy_with_tokens=True) + expected = datetime(1994, 12, 1) + assert res == expected + + @pytest.mark.xfail + def test_unambiguous_YYYYMM(self): + # 171206 can be parsed as YYMMDD. However, 201712 cannot be parsed + # as instance of YYMMDD and parser could fallback to YYYYMM format. + dstr = "201712" + res = parse(dstr) + expected = datetime(2017, 12, 1) + assert res == expected + + +@pytest.mark.skipif(IS_WIN, reason='Windows does not use TZ var') +def test_parse_unambiguous_nonexistent_local(): + # When dates are specified "EST" even when they should be "EDT" in the + # local time zone, we should still assign the local time zone + with TZEnvContext('EST+5EDT,M3.2.0/2,M11.1.0/2'): + dt_exp = datetime(2011, 8, 1, 12, 30, tzinfo=tz.tzlocal()) + dt = parse('2011-08-01T12:30 EST') + + assert dt.tzname() == 'EDT' + assert dt == dt_exp + + +@pytest.mark.skipif(IS_WIN, reason='Windows does not use TZ var') +def test_tzlocal_in_gmt(): + # GH #318 + with TZEnvContext('GMT0BST,M3.5.0,M10.5.0'): + # This is an imaginary datetime in tz.tzlocal() but should still + # parse using the GMT-as-alias-for-UTC rule + dt = parse('2004-05-01T12:00 GMT') + dt_exp = datetime(2004, 5, 1, 12, tzinfo=tz.tzutc()) + + assert dt == dt_exp + + +@pytest.mark.skipif(IS_WIN, reason='Windows does not use TZ var') +def test_tzlocal_parse_fold(): + # One manifestion of GH #318 + with TZEnvContext('EST+5EDT,M3.2.0/2,M11.1.0/2'): + dt_exp = datetime(2011, 11, 6, 1, 30, tzinfo=tz.tzlocal()) + dt_exp = tz.enfold(dt_exp, fold=1) + dt = parse('2011-11-06T01:30 EST') + + # Because this is ambiguous, kuntil `tz.tzlocal() is tz.tzlocal()` + # we'll just check the attributes we care about rather than + # dt == dt_exp + assert dt.tzname() == dt_exp.tzname() + assert dt.replace(tzinfo=None) == dt_exp.replace(tzinfo=None) + assert getattr(dt, 'fold') == getattr(dt_exp, 'fold') + assert dt.astimezone(tz.tzutc()) == dt_exp.astimezone(tz.tzutc()) + + +def test_parse_tzinfos_fold(): + NYC = tz.gettz('America/New_York') + tzinfos = {'EST': NYC, 'EDT': NYC} + + dt_exp = tz.enfold(datetime(2011, 11, 6, 1, 30, tzinfo=NYC), fold=1) + dt = parse('2011-11-06T01:30 EST', tzinfos=tzinfos) + + assert dt == dt_exp + assert dt.tzinfo is dt_exp.tzinfo + assert getattr(dt, 'fold') == getattr(dt_exp, 'fold') + assert dt.astimezone(tz.tzutc()) == dt_exp.astimezone(tz.tzutc()) + + +@pytest.mark.parametrize('dtstr,dt', [ + ('5.6h', datetime(2003, 9, 25, 5, 36)), + ('5.6m', datetime(2003, 9, 25, 0, 5, 36)), + # '5.6s' never had a rounding problem, test added for completeness + ('5.6s', datetime(2003, 9, 25, 0, 0, 5, 600000)) +]) +def test_rounding_floatlike_strings(dtstr, dt): + assert parse(dtstr, default=datetime(2003, 9, 25)) == dt + + +@pytest.mark.parametrize('value', ['1: test', 'Nan']) +def test_decimal_error(value): + # GH 632, GH 662 - decimal.Decimal raises some non-ValueError exception when + # constructed with an invalid value + with pytest.raises(ValueError): + parse(value) diff --git a/Windows/dateutil/test/test_relativedelta.py b/Windows/dateutil/test/test_relativedelta.py new file mode 100644 index 00000000..89cc808d --- /dev/null +++ b/Windows/dateutil/test/test_relativedelta.py @@ -0,0 +1,696 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from ._common import WarningTestMixin, NotAValue + +import calendar +from datetime import datetime, date, timedelta +import unittest + +from dateutil.relativedelta import relativedelta, MO, TU, WE, FR, SU + + +class RelativeDeltaTest(WarningTestMixin, unittest.TestCase): + now = datetime(2003, 9, 17, 20, 54, 47, 282310) + today = date(2003, 9, 17) + + def testInheritance(self): + # Ensure that relativedelta is inheritance-friendly. + class rdChildClass(relativedelta): + pass + + ccRD = rdChildClass(years=1, months=1, days=1, leapdays=1, weeks=1, + hours=1, minutes=1, seconds=1, microseconds=1) + + rd = relativedelta(years=1, months=1, days=1, leapdays=1, weeks=1, + hours=1, minutes=1, seconds=1, microseconds=1) + + self.assertEqual(type(ccRD + rd), type(ccRD), + msg='Addition does not inherit type.') + + self.assertEqual(type(ccRD - rd), type(ccRD), + msg='Subtraction does not inherit type.') + + self.assertEqual(type(-ccRD), type(ccRD), + msg='Negation does not inherit type.') + + self.assertEqual(type(ccRD * 5.0), type(ccRD), + msg='Multiplication does not inherit type.') + + self.assertEqual(type(ccRD / 5.0), type(ccRD), + msg='Division does not inherit type.') + + def testMonthEndMonthBeginning(self): + self.assertEqual(relativedelta(datetime(2003, 1, 31, 23, 59, 59), + datetime(2003, 3, 1, 0, 0, 0)), + relativedelta(months=-1, seconds=-1)) + + self.assertEqual(relativedelta(datetime(2003, 3, 1, 0, 0, 0), + datetime(2003, 1, 31, 23, 59, 59)), + relativedelta(months=1, seconds=1)) + + def testMonthEndMonthBeginningLeapYear(self): + self.assertEqual(relativedelta(datetime(2012, 1, 31, 23, 59, 59), + datetime(2012, 3, 1, 0, 0, 0)), + relativedelta(months=-1, seconds=-1)) + + self.assertEqual(relativedelta(datetime(2003, 3, 1, 0, 0, 0), + datetime(2003, 1, 31, 23, 59, 59)), + relativedelta(months=1, seconds=1)) + + def testNextMonth(self): + self.assertEqual(self.now+relativedelta(months=+1), + datetime(2003, 10, 17, 20, 54, 47, 282310)) + + def testNextMonthPlusOneWeek(self): + self.assertEqual(self.now+relativedelta(months=+1, weeks=+1), + datetime(2003, 10, 24, 20, 54, 47, 282310)) + + def testNextMonthPlusOneWeek10am(self): + self.assertEqual(self.today + + relativedelta(months=+1, weeks=+1, hour=10), + datetime(2003, 10, 24, 10, 0)) + + def testNextMonthPlusOneWeek10amDiff(self): + self.assertEqual(relativedelta(datetime(2003, 10, 24, 10, 0), + self.today), + relativedelta(months=+1, days=+7, hours=+10)) + + def testOneMonthBeforeOneYear(self): + self.assertEqual(self.now+relativedelta(years=+1, months=-1), + datetime(2004, 8, 17, 20, 54, 47, 282310)) + + def testMonthsOfDiffNumOfDays(self): + self.assertEqual(date(2003, 1, 27)+relativedelta(months=+1), + date(2003, 2, 27)) + self.assertEqual(date(2003, 1, 31)+relativedelta(months=+1), + date(2003, 2, 28)) + self.assertEqual(date(2003, 1, 31)+relativedelta(months=+2), + date(2003, 3, 31)) + + def testMonthsOfDiffNumOfDaysWithYears(self): + self.assertEqual(date(2000, 2, 28)+relativedelta(years=+1), + date(2001, 2, 28)) + self.assertEqual(date(2000, 2, 29)+relativedelta(years=+1), + date(2001, 2, 28)) + + self.assertEqual(date(1999, 2, 28)+relativedelta(years=+1), + date(2000, 2, 28)) + self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1), + date(2000, 3, 1)) + self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1), + date(2000, 3, 1)) + + self.assertEqual(date(2001, 2, 28)+relativedelta(years=-1), + date(2000, 2, 28)) + self.assertEqual(date(2001, 3, 1)+relativedelta(years=-1), + date(2000, 3, 1)) + + def testNextFriday(self): + self.assertEqual(self.today+relativedelta(weekday=FR), + date(2003, 9, 19)) + + def testNextFridayInt(self): + self.assertEqual(self.today+relativedelta(weekday=calendar.FRIDAY), + date(2003, 9, 19)) + + def testLastFridayInThisMonth(self): + self.assertEqual(self.today+relativedelta(day=31, weekday=FR(-1)), + date(2003, 9, 26)) + + def testNextWednesdayIsToday(self): + self.assertEqual(self.today+relativedelta(weekday=WE), + date(2003, 9, 17)) + + def testNextWenesdayNotToday(self): + self.assertEqual(self.today+relativedelta(days=+1, weekday=WE), + date(2003, 9, 24)) + + def testAddMoreThan12Months(self): + self.assertEqual(date(2003, 12, 1) + relativedelta(months=+13), + date(2005, 1, 1)) + + def testAddNegativeMonths(self): + self.assertEqual(date(2003, 1, 1) + relativedelta(months=-2), + date(2002, 11, 1)) + + def test15thISOYearWeek(self): + self.assertEqual(date(2003, 1, 1) + + relativedelta(day=4, weeks=+14, weekday=MO(-1)), + date(2003, 4, 7)) + + def testMillenniumAge(self): + self.assertEqual(relativedelta(self.now, date(2001, 1, 1)), + relativedelta(years=+2, months=+8, days=+16, + hours=+20, minutes=+54, seconds=+47, + microseconds=+282310)) + + def testJohnAge(self): + self.assertEqual(relativedelta(self.now, + datetime(1978, 4, 5, 12, 0)), + relativedelta(years=+25, months=+5, days=+12, + hours=+8, minutes=+54, seconds=+47, + microseconds=+282310)) + + def testJohnAgeWithDate(self): + self.assertEqual(relativedelta(self.today, + datetime(1978, 4, 5, 12, 0)), + relativedelta(years=+25, months=+5, days=+11, + hours=+12)) + + def testYearDay(self): + self.assertEqual(date(2003, 1, 1)+relativedelta(yearday=260), + date(2003, 9, 17)) + self.assertEqual(date(2002, 1, 1)+relativedelta(yearday=260), + date(2002, 9, 17)) + self.assertEqual(date(2000, 1, 1)+relativedelta(yearday=260), + date(2000, 9, 16)) + self.assertEqual(self.today+relativedelta(yearday=261), + date(2003, 9, 18)) + + def testYearDayBug(self): + # Tests a problem reported by Adam Ryan. + self.assertEqual(date(2010, 1, 1)+relativedelta(yearday=15), + date(2010, 1, 15)) + + def testNonLeapYearDay(self): + self.assertEqual(date(2003, 1, 1)+relativedelta(nlyearday=260), + date(2003, 9, 17)) + self.assertEqual(date(2002, 1, 1)+relativedelta(nlyearday=260), + date(2002, 9, 17)) + self.assertEqual(date(2000, 1, 1)+relativedelta(nlyearday=260), + date(2000, 9, 17)) + self.assertEqual(self.today+relativedelta(yearday=261), + date(2003, 9, 18)) + + def testAddition(self): + self.assertEqual(relativedelta(days=10) + + relativedelta(years=1, months=2, days=3, hours=4, + minutes=5, microseconds=6), + relativedelta(years=1, months=2, days=13, hours=4, + minutes=5, microseconds=6)) + + def testAbsoluteAddition(self): + self.assertEqual(relativedelta() + relativedelta(day=0, hour=0), + relativedelta(day=0, hour=0)) + self.assertEqual(relativedelta(day=0, hour=0) + relativedelta(), + relativedelta(day=0, hour=0)) + + def testAdditionToDatetime(self): + self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=1), + datetime(2000, 1, 2)) + + def testRightAdditionToDatetime(self): + self.assertEqual(relativedelta(days=1) + datetime(2000, 1, 1), + datetime(2000, 1, 2)) + + def testAdditionInvalidType(self): + with self.assertRaises(TypeError): + relativedelta(days=3) + 9 + + def testAdditionUnsupportedType(self): + # For unsupported types that define their own comparators, etc. + self.assertIs(relativedelta(days=1) + NotAValue, NotAValue) + + def testAdditionFloatValue(self): + self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=float(1)), + datetime(2000, 1, 2)) + self.assertEqual(datetime(2000, 1, 1) + relativedelta(months=float(1)), + datetime(2000, 2, 1)) + self.assertEqual(datetime(2000, 1, 1) + relativedelta(years=float(1)), + datetime(2001, 1, 1)) + + def testAdditionFloatFractionals(self): + self.assertEqual(datetime(2000, 1, 1, 0) + + relativedelta(days=float(0.5)), + datetime(2000, 1, 1, 12)) + self.assertEqual(datetime(2000, 1, 1, 0, 0) + + relativedelta(hours=float(0.5)), + datetime(2000, 1, 1, 0, 30)) + self.assertEqual(datetime(2000, 1, 1, 0, 0, 0) + + relativedelta(minutes=float(0.5)), + datetime(2000, 1, 1, 0, 0, 30)) + self.assertEqual(datetime(2000, 1, 1, 0, 0, 0, 0) + + relativedelta(seconds=float(0.5)), + datetime(2000, 1, 1, 0, 0, 0, 500000)) + self.assertEqual(datetime(2000, 1, 1, 0, 0, 0, 0) + + relativedelta(microseconds=float(500000.25)), + datetime(2000, 1, 1, 0, 0, 0, 500000)) + + def testSubtraction(self): + self.assertEqual(relativedelta(days=10) - + relativedelta(years=1, months=2, days=3, hours=4, + minutes=5, microseconds=6), + relativedelta(years=-1, months=-2, days=7, hours=-4, + minutes=-5, microseconds=-6)) + + def testRightSubtractionFromDatetime(self): + self.assertEqual(datetime(2000, 1, 2) - relativedelta(days=1), + datetime(2000, 1, 1)) + + def testSubractionWithDatetime(self): + self.assertRaises(TypeError, lambda x, y: x - y, + (relativedelta(days=1), datetime(2000, 1, 1))) + + def testSubtractionInvalidType(self): + with self.assertRaises(TypeError): + relativedelta(hours=12) - 14 + + def testSubtractionUnsupportedType(self): + self.assertIs(relativedelta(days=1) + NotAValue, NotAValue) + + def testMultiplication(self): + self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=1) * 28, + datetime(2000, 1, 29)) + self.assertEqual(datetime(2000, 1, 1) + 28 * relativedelta(days=1), + datetime(2000, 1, 29)) + + def testMultiplicationUnsupportedType(self): + self.assertIs(relativedelta(days=1) * NotAValue, NotAValue) + + def testDivision(self): + self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=28) / 28, + datetime(2000, 1, 2)) + + def testDivisionUnsupportedType(self): + self.assertIs(relativedelta(days=1) / NotAValue, NotAValue) + + def testBoolean(self): + self.assertFalse(relativedelta(days=0)) + self.assertTrue(relativedelta(days=1)) + + def testAbsoluteValueNegative(self): + rd_base = relativedelta(years=-1, months=-5, days=-2, hours=-3, + minutes=-5, seconds=-2, microseconds=-12) + rd_expected = relativedelta(years=1, months=5, days=2, hours=3, + minutes=5, seconds=2, microseconds=12) + self.assertEqual(abs(rd_base), rd_expected) + + def testAbsoluteValuePositive(self): + rd_base = relativedelta(years=1, months=5, days=2, hours=3, + minutes=5, seconds=2, microseconds=12) + rd_expected = rd_base + + self.assertEqual(abs(rd_base), rd_expected) + + def testComparison(self): + d1 = relativedelta(years=1, months=1, days=1, leapdays=0, hours=1, + minutes=1, seconds=1, microseconds=1) + d2 = relativedelta(years=1, months=1, days=1, leapdays=0, hours=1, + minutes=1, seconds=1, microseconds=1) + d3 = relativedelta(years=1, months=1, days=1, leapdays=0, hours=1, + minutes=1, seconds=1, microseconds=2) + + self.assertEqual(d1, d2) + self.assertNotEqual(d1, d3) + + def testInequalityTypeMismatch(self): + # Different type + self.assertFalse(relativedelta(year=1) == 19) + + def testInequalityUnsupportedType(self): + self.assertIs(relativedelta(hours=3) == NotAValue, NotAValue) + + def testInequalityWeekdays(self): + # Different weekdays + no_wday = relativedelta(year=1997, month=4) + wday_mo_1 = relativedelta(year=1997, month=4, weekday=MO(+1)) + wday_mo_2 = relativedelta(year=1997, month=4, weekday=MO(+2)) + wday_tu = relativedelta(year=1997, month=4, weekday=TU) + + self.assertTrue(wday_mo_1 == wday_mo_1) + + self.assertFalse(no_wday == wday_mo_1) + self.assertFalse(wday_mo_1 == no_wday) + + self.assertFalse(wday_mo_1 == wday_mo_2) + self.assertFalse(wday_mo_2 == wday_mo_1) + + self.assertFalse(wday_mo_1 == wday_tu) + self.assertFalse(wday_tu == wday_mo_1) + + def testMonthOverflow(self): + self.assertEqual(relativedelta(months=273), + relativedelta(years=22, months=9)) + + def testWeeks(self): + # Test that the weeks property is working properly. + rd = relativedelta(years=4, months=2, weeks=8, days=6) + self.assertEqual((rd.weeks, rd.days), (8, 8 * 7 + 6)) + + rd.weeks = 3 + self.assertEqual((rd.weeks, rd.days), (3, 3 * 7 + 6)) + + def testRelativeDeltaRepr(self): + self.assertEqual(repr(relativedelta(years=1, months=-1, days=15)), + 'relativedelta(years=+1, months=-1, days=+15)') + + self.assertEqual(repr(relativedelta(months=14, seconds=-25)), + 'relativedelta(years=+1, months=+2, seconds=-25)') + + self.assertEqual(repr(relativedelta(month=3, hour=3, weekday=SU(3))), + 'relativedelta(month=3, weekday=SU(+3), hour=3)') + + def testRelativeDeltaFractionalYear(self): + with self.assertRaises(ValueError): + relativedelta(years=1.5) + + def testRelativeDeltaFractionalMonth(self): + with self.assertRaises(ValueError): + relativedelta(months=1.5) + + def testRelativeDeltaInvalidDatetimeObject(self): + with self.assertRaises(TypeError): + relativedelta(dt1='2018-01-01', dt2='2018-01-02') + + with self.assertRaises(TypeError): + relativedelta(dt1=datetime(2018, 1, 1), dt2='2018-01-02') + + with self.assertRaises(TypeError): + relativedelta(dt1='2018-01-01', dt2=datetime(2018, 1, 2)) + + def testRelativeDeltaFractionalAbsolutes(self): + # Fractional absolute values will soon be unsupported, + # check for the deprecation warning. + with self.assertWarns(DeprecationWarning): + relativedelta(year=2.86) + + with self.assertWarns(DeprecationWarning): + relativedelta(month=1.29) + + with self.assertWarns(DeprecationWarning): + relativedelta(day=0.44) + + with self.assertWarns(DeprecationWarning): + relativedelta(hour=23.98) + + with self.assertWarns(DeprecationWarning): + relativedelta(minute=45.21) + + with self.assertWarns(DeprecationWarning): + relativedelta(second=13.2) + + with self.assertWarns(DeprecationWarning): + relativedelta(microsecond=157221.93) + + def testRelativeDeltaFractionalRepr(self): + rd = relativedelta(years=3, months=-2, days=1.25) + + self.assertEqual(repr(rd), + 'relativedelta(years=+3, months=-2, days=+1.25)') + + rd = relativedelta(hours=0.5, seconds=9.22) + self.assertEqual(repr(rd), + 'relativedelta(hours=+0.5, seconds=+9.22)') + + def testRelativeDeltaFractionalWeeks(self): + # Equivalent to days=8, hours=18 + rd = relativedelta(weeks=1.25) + d1 = datetime(2009, 9, 3, 0, 0) + self.assertEqual(d1 + rd, + datetime(2009, 9, 11, 18)) + + def testRelativeDeltaFractionalDays(self): + rd1 = relativedelta(days=1.48) + + d1 = datetime(2009, 9, 3, 0, 0) + self.assertEqual(d1 + rd1, + datetime(2009, 9, 4, 11, 31, 12)) + + rd2 = relativedelta(days=1.5) + self.assertEqual(d1 + rd2, + datetime(2009, 9, 4, 12, 0, 0)) + + def testRelativeDeltaFractionalHours(self): + rd = relativedelta(days=1, hours=12.5) + d1 = datetime(2009, 9, 3, 0, 0) + self.assertEqual(d1 + rd, + datetime(2009, 9, 4, 12, 30, 0)) + + def testRelativeDeltaFractionalMinutes(self): + rd = relativedelta(hours=1, minutes=30.5) + d1 = datetime(2009, 9, 3, 0, 0) + self.assertEqual(d1 + rd, + datetime(2009, 9, 3, 1, 30, 30)) + + def testRelativeDeltaFractionalSeconds(self): + rd = relativedelta(hours=5, minutes=30, seconds=30.5) + d1 = datetime(2009, 9, 3, 0, 0) + self.assertEqual(d1 + rd, + datetime(2009, 9, 3, 5, 30, 30, 500000)) + + def testRelativeDeltaFractionalPositiveOverflow(self): + # Equivalent to (days=1, hours=14) + rd1 = relativedelta(days=1.5, hours=2) + d1 = datetime(2009, 9, 3, 0, 0) + self.assertEqual(d1 + rd1, + datetime(2009, 9, 4, 14, 0, 0)) + + # Equivalent to (days=1, hours=14, minutes=45) + rd2 = relativedelta(days=1.5, hours=2.5, minutes=15) + d1 = datetime(2009, 9, 3, 0, 0) + self.assertEqual(d1 + rd2, + datetime(2009, 9, 4, 14, 45)) + + # Carry back up - equivalent to (days=2, hours=2, minutes=0, seconds=1) + rd3 = relativedelta(days=1.5, hours=13, minutes=59.5, seconds=31) + self.assertEqual(d1 + rd3, + datetime(2009, 9, 5, 2, 0, 1)) + + def testRelativeDeltaFractionalNegativeDays(self): + # Equivalent to (days=-1, hours=-1) + rd1 = relativedelta(days=-1.5, hours=11) + d1 = datetime(2009, 9, 3, 12, 0) + self.assertEqual(d1 + rd1, + datetime(2009, 9, 2, 11, 0, 0)) + + # Equivalent to (days=-1, hours=-9) + rd2 = relativedelta(days=-1.25, hours=-3) + self.assertEqual(d1 + rd2, + datetime(2009, 9, 2, 3)) + + def testRelativeDeltaNormalizeFractionalDays(self): + # Equivalent to (days=2, hours=18) + rd1 = relativedelta(days=2.75) + + self.assertEqual(rd1.normalized(), relativedelta(days=2, hours=18)) + + # Equvalent to (days=1, hours=11, minutes=31, seconds=12) + rd2 = relativedelta(days=1.48) + + self.assertEqual(rd2.normalized(), + relativedelta(days=1, hours=11, minutes=31, seconds=12)) + + def testRelativeDeltaNormalizeFractionalDays2(self): + # Equivalent to (hours=1, minutes=30) + rd1 = relativedelta(hours=1.5) + + self.assertEqual(rd1.normalized(), relativedelta(hours=1, minutes=30)) + + # Equivalent to (hours=3, minutes=17, seconds=5, microseconds=100) + rd2 = relativedelta(hours=3.28472225) + + self.assertEqual(rd2.normalized(), + relativedelta(hours=3, minutes=17, seconds=5, microseconds=100)) + + def testRelativeDeltaNormalizeFractionalMinutes(self): + # Equivalent to (minutes=15, seconds=36) + rd1 = relativedelta(minutes=15.6) + + self.assertEqual(rd1.normalized(), + relativedelta(minutes=15, seconds=36)) + + # Equivalent to (minutes=25, seconds=20, microseconds=25000) + rd2 = relativedelta(minutes=25.33375) + + self.assertEqual(rd2.normalized(), + relativedelta(minutes=25, seconds=20, microseconds=25000)) + + def testRelativeDeltaNormalizeFractionalSeconds(self): + # Equivalent to (seconds=45, microseconds=25000) + rd1 = relativedelta(seconds=45.025) + self.assertEqual(rd1.normalized(), + relativedelta(seconds=45, microseconds=25000)) + + def testRelativeDeltaFractionalPositiveOverflow2(self): + # Equivalent to (days=1, hours=14) + rd1 = relativedelta(days=1.5, hours=2) + self.assertEqual(rd1.normalized(), + relativedelta(days=1, hours=14)) + + # Equivalent to (days=1, hours=14, minutes=45) + rd2 = relativedelta(days=1.5, hours=2.5, minutes=15) + self.assertEqual(rd2.normalized(), + relativedelta(days=1, hours=14, minutes=45)) + + # Carry back up - equivalent to: + # (days=2, hours=2, minutes=0, seconds=2, microseconds=3) + rd3 = relativedelta(days=1.5, hours=13, minutes=59.50045, + seconds=31.473, microseconds=500003) + self.assertEqual(rd3.normalized(), + relativedelta(days=2, hours=2, minutes=0, + seconds=2, microseconds=3)) + + def testRelativeDeltaFractionalNegativeOverflow(self): + # Equivalent to (days=-1) + rd1 = relativedelta(days=-0.5, hours=-12) + self.assertEqual(rd1.normalized(), + relativedelta(days=-1)) + + # Equivalent to (days=-1) + rd2 = relativedelta(days=-1.5, hours=12) + self.assertEqual(rd2.normalized(), + relativedelta(days=-1)) + + # Equivalent to (days=-1, hours=-14, minutes=-45) + rd3 = relativedelta(days=-1.5, hours=-2.5, minutes=-15) + self.assertEqual(rd3.normalized(), + relativedelta(days=-1, hours=-14, minutes=-45)) + + # Equivalent to (days=-1, hours=-14, minutes=+15) + rd4 = relativedelta(days=-1.5, hours=-2.5, minutes=45) + self.assertEqual(rd4.normalized(), + relativedelta(days=-1, hours=-14, minutes=+15)) + + # Carry back up - equivalent to: + # (days=-2, hours=-2, minutes=0, seconds=-2, microseconds=-3) + rd3 = relativedelta(days=-1.5, hours=-13, minutes=-59.50045, + seconds=-31.473, microseconds=-500003) + self.assertEqual(rd3.normalized(), + relativedelta(days=-2, hours=-2, minutes=0, + seconds=-2, microseconds=-3)) + + def testInvalidYearDay(self): + with self.assertRaises(ValueError): + relativedelta(yearday=367) + + def testAddTimedeltaToUnpopulatedRelativedelta(self): + td = timedelta( + days=1, + seconds=1, + microseconds=1, + milliseconds=1, + minutes=1, + hours=1, + weeks=1 + ) + + expected = relativedelta( + weeks=1, + days=1, + hours=1, + minutes=1, + seconds=1, + microseconds=1001 + ) + + self.assertEqual(expected, relativedelta() + td) + + def testAddTimedeltaToPopulatedRelativeDelta(self): + td = timedelta( + days=1, + seconds=1, + microseconds=1, + milliseconds=1, + minutes=1, + hours=1, + weeks=1 + ) + + rd = relativedelta( + year=1, + month=1, + day=1, + hour=1, + minute=1, + second=1, + microsecond=1, + years=1, + months=1, + days=1, + weeks=1, + hours=1, + minutes=1, + seconds=1, + microseconds=1 + ) + + expected = relativedelta( + year=1, + month=1, + day=1, + hour=1, + minute=1, + second=1, + microsecond=1, + years=1, + months=1, + weeks=2, + days=2, + hours=2, + minutes=2, + seconds=2, + microseconds=1002, + ) + + self.assertEqual(expected, rd + td) + + def testHashable(self): + try: + {relativedelta(minute=1): 'test'} + except: + self.fail("relativedelta() failed to hash!") + + +class RelativeDeltaWeeksPropertyGetterTest(unittest.TestCase): + """Test the weeks property getter""" + + def test_one_day(self): + rd = relativedelta(days=1) + self.assertEqual(rd.days, 1) + self.assertEqual(rd.weeks, 0) + + def test_minus_one_day(self): + rd = relativedelta(days=-1) + self.assertEqual(rd.days, -1) + self.assertEqual(rd.weeks, 0) + + def test_height_days(self): + rd = relativedelta(days=8) + self.assertEqual(rd.days, 8) + self.assertEqual(rd.weeks, 1) + + def test_minus_height_days(self): + rd = relativedelta(days=-8) + self.assertEqual(rd.days, -8) + self.assertEqual(rd.weeks, -1) + + +class RelativeDeltaWeeksPropertySetterTest(unittest.TestCase): + """Test the weeks setter which makes a "smart" update of the days attribute""" + + def test_one_day_set_one_week(self): + rd = relativedelta(days=1) + rd.weeks = 1 # add 7 days + self.assertEqual(rd.days, 8) + self.assertEqual(rd.weeks, 1) + + def test_minus_one_day_set_one_week(self): + rd = relativedelta(days=-1) + rd.weeks = 1 # add 7 days + self.assertEqual(rd.days, 6) + self.assertEqual(rd.weeks, 0) + + def test_height_days_set_minus_one_week(self): + rd = relativedelta(days=8) + rd.weeks = -1 # change from 1 week, 1 day to -1 week, 1 day + self.assertEqual(rd.days, -6) + self.assertEqual(rd.weeks, 0) + + def test_minus_height_days_set_minus_one_week(self): + rd = relativedelta(days=-8) + rd.weeks = -1 # does not change anything + self.assertEqual(rd.days, -8) + self.assertEqual(rd.weeks, -1) + + +# vim:ts=4:sw=4:et diff --git a/Windows/dateutil/test/test_rrule.py b/Windows/dateutil/test/test_rrule.py new file mode 100644 index 00000000..9dfa5444 --- /dev/null +++ b/Windows/dateutil/test/test_rrule.py @@ -0,0 +1,4915 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from ._common import WarningTestMixin + +from datetime import datetime, date +import unittest +from six import PY3 + +from dateutil import tz +from dateutil.rrule import ( + rrule, rruleset, rrulestr, + YEARLY, MONTHLY, WEEKLY, DAILY, + HOURLY, MINUTELY, SECONDLY, + MO, TU, WE, TH, FR, SA, SU +) + +from freezegun import freeze_time + +import pytest + + +@pytest.mark.rrule +class RRuleTest(WarningTestMixin, unittest.TestCase): + def _rrulestr_reverse_test(self, rule): + """ + Call with an `rrule` and it will test that `str(rrule)` generates a + string which generates the same `rrule` as the input when passed to + `rrulestr()` + """ + rr_str = str(rule) + rrulestr_rrule = rrulestr(rr_str) + + self.assertEqual(list(rule), list(rrulestr_rrule)) + + def testStrAppendRRULEToken(self): + # `_rrulestr_reverse_test` does not check if the "RRULE:" prefix + # property is appended properly, so give it a dedicated test + self.assertEqual(str(rrule(YEARLY, + count=5, + dtstart=datetime(1997, 9, 2, 9, 0))), + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=5") + + rr_str = ( + 'DTSTART:19970105T083000\nRRULE:FREQ=YEARLY;INTERVAL=2' + ) + self.assertEqual(str(rrulestr(rr_str)), rr_str) + + def testYearly(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testYearlyInterval(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0), + datetime(2001, 9, 2, 9, 0)]) + + def testYearlyIntervalLarge(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + interval=100, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(2097, 9, 2, 9, 0), + datetime(2197, 9, 2, 9, 0)]) + + def testYearlyByMonth(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 2, 9, 0), + datetime(1998, 3, 2, 9, 0), + datetime(1999, 1, 2, 9, 0)]) + + def testYearlyByMonthDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 9, 0), + datetime(1997, 10, 1, 9, 0), + datetime(1997, 10, 3, 9, 0)]) + + def testYearlyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 9, 0), + datetime(1998, 1, 7, 9, 0), + datetime(1998, 3, 5, 9, 0)]) + + def testYearlyByWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testYearlyByNWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 25, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 12, 31, 9, 0)]) + + def testYearlyByNWeekDayLarge(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 11, 9, 0), + datetime(1998, 1, 20, 9, 0), + datetime(1998, 12, 17, 9, 0)]) + + def testYearlyByMonthAndWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 8, 9, 0)]) + + def testYearlyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 29, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testYearlyByMonthAndNWeekDayLarge(self): + # This is interesting because the TH(-3) ends up before + # the TU(3). + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 15, 9, 0), + datetime(1998, 1, 20, 9, 0), + datetime(1998, 3, 12, 9, 0)]) + + def testYearlyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 2, 3, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testYearlyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 3, 3, 9, 0), + datetime(2001, 3, 1, 9, 0)]) + + def testYearlyByYearDay(self): + self.assertEqual(list(rrule(YEARLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testYearlyByYearDayNeg(self): + self.assertEqual(list(rrule(YEARLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testYearlyByMonthAndYearDay(self): + self.assertEqual(list(rrule(YEARLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 4, 10, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testYearlyByMonthAndYearDayNeg(self): + self.assertEqual(list(rrule(YEARLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 4, 10, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testYearlyByWeekNo(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 5, 11, 9, 0), + datetime(1998, 5, 12, 9, 0), + datetime(1998, 5, 13, 9, 0)]) + + def testYearlyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 29, 9, 0), + datetime(1999, 1, 4, 9, 0), + datetime(2000, 1, 3, 9, 0)]) + + def testYearlyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1998, 12, 27, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testYearlyByWeekNoAndWeekDayLast(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1999, 1, 3, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testYearlyByEaster(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 12, 9, 0), + datetime(1999, 4, 4, 9, 0), + datetime(2000, 4, 23, 9, 0)]) + + def testYearlyByEasterPos(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 13, 9, 0), + datetime(1999, 4, 5, 9, 0), + datetime(2000, 4, 24, 9, 0)]) + + def testYearlyByEasterNeg(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 11, 9, 0), + datetime(1999, 4, 3, 9, 0), + datetime(2000, 4, 22, 9, 0)]) + + def testYearlyByWeekNoAndWeekDay53(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 12, 28, 9, 0), + datetime(2004, 12, 27, 9, 0), + datetime(2009, 12, 28, 9, 0)]) + + def testYearlyByHour(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0), + datetime(1998, 9, 2, 6, 0), + datetime(1998, 9, 2, 18, 0)]) + + def testYearlyByMinute(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6), + datetime(1997, 9, 2, 9, 18), + datetime(1998, 9, 2, 9, 6)]) + + def testYearlyBySecond(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 6), + datetime(1997, 9, 2, 9, 0, 18), + datetime(1998, 9, 2, 9, 0, 6)]) + + def testYearlyByHourAndMinute(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6), + datetime(1997, 9, 2, 18, 18), + datetime(1998, 9, 2, 6, 6)]) + + def testYearlyByHourAndSecond(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 6), + datetime(1997, 9, 2, 18, 0, 18), + datetime(1998, 9, 2, 6, 0, 6)]) + + def testYearlyByMinuteAndSecond(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 6), + datetime(1997, 9, 2, 9, 6, 18), + datetime(1997, 9, 2, 9, 18, 6)]) + + def testYearlyByHourAndMinuteAndSecond(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 6), + datetime(1997, 9, 2, 18, 6, 18), + datetime(1997, 9, 2, 18, 18, 6)]) + + def testYearlyBySetPos(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonthday=15, + byhour=(6, 18), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 11, 15, 18, 0), + datetime(1998, 2, 15, 6, 0), + datetime(1998, 11, 15, 18, 0)]) + + def testMonthly(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 10, 2, 9, 0), + datetime(1997, 11, 2, 9, 0)]) + + def testMonthlyInterval(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 11, 2, 9, 0), + datetime(1998, 1, 2, 9, 0)]) + + def testMonthlyIntervalLarge(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + interval=18, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1999, 3, 2, 9, 0), + datetime(2000, 9, 2, 9, 0)]) + + def testMonthlyByMonth(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 2, 9, 0), + datetime(1998, 3, 2, 9, 0), + datetime(1999, 1, 2, 9, 0)]) + + def testMonthlyByMonthDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 9, 0), + datetime(1997, 10, 1, 9, 0), + datetime(1997, 10, 3, 9, 0)]) + + def testMonthlyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 9, 0), + datetime(1998, 1, 7, 9, 0), + datetime(1998, 3, 5, 9, 0)]) + + def testMonthlyByWeekDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + # Third Monday of the month + self.assertEqual(rrule(MONTHLY, + byweekday=(MO(+3)), + dtstart=datetime(1997, 9, 1)).between(datetime(1997, 9, 1), + datetime(1997, 12, 1)), + [datetime(1997, 9, 15, 0, 0), + datetime(1997, 10, 20, 0, 0), + datetime(1997, 11, 17, 0, 0)]) + + def testMonthlyByNWeekDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 25, 9, 0), + datetime(1997, 10, 7, 9, 0)]) + + def testMonthlyByNWeekDayLarge(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 11, 9, 0), + datetime(1997, 9, 16, 9, 0), + datetime(1997, 10, 16, 9, 0)]) + + def testMonthlyByMonthAndWeekDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 8, 9, 0)]) + + def testMonthlyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 29, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testMonthlyByMonthAndNWeekDayLarge(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 15, 9, 0), + datetime(1998, 1, 20, 9, 0), + datetime(1998, 3, 12, 9, 0)]) + + def testMonthlyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 2, 3, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testMonthlyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 3, 3, 9, 0), + datetime(2001, 3, 1, 9, 0)]) + + def testMonthlyByYearDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testMonthlyByYearDayNeg(self): + self.assertEqual(list(rrule(MONTHLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testMonthlyByMonthAndYearDay(self): + self.assertEqual(list(rrule(MONTHLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 4, 10, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testMonthlyByMonthAndYearDayNeg(self): + self.assertEqual(list(rrule(MONTHLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 4, 10, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testMonthlyByWeekNo(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 5, 11, 9, 0), + datetime(1998, 5, 12, 9, 0), + datetime(1998, 5, 13, 9, 0)]) + + def testMonthlyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 29, 9, 0), + datetime(1999, 1, 4, 9, 0), + datetime(2000, 1, 3, 9, 0)]) + + def testMonthlyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1998, 12, 27, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testMonthlyByWeekNoAndWeekDayLast(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1999, 1, 3, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testMonthlyByWeekNoAndWeekDay53(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 12, 28, 9, 0), + datetime(2004, 12, 27, 9, 0), + datetime(2009, 12, 28, 9, 0)]) + + def testMonthlyByEaster(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 12, 9, 0), + datetime(1999, 4, 4, 9, 0), + datetime(2000, 4, 23, 9, 0)]) + + def testMonthlyByEasterPos(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 13, 9, 0), + datetime(1999, 4, 5, 9, 0), + datetime(2000, 4, 24, 9, 0)]) + + def testMonthlyByEasterNeg(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 11, 9, 0), + datetime(1999, 4, 3, 9, 0), + datetime(2000, 4, 22, 9, 0)]) + + def testMonthlyByHour(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0), + datetime(1997, 10, 2, 6, 0), + datetime(1997, 10, 2, 18, 0)]) + + def testMonthlyByMinute(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6), + datetime(1997, 9, 2, 9, 18), + datetime(1997, 10, 2, 9, 6)]) + + def testMonthlyBySecond(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 6), + datetime(1997, 9, 2, 9, 0, 18), + datetime(1997, 10, 2, 9, 0, 6)]) + + def testMonthlyByHourAndMinute(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6), + datetime(1997, 9, 2, 18, 18), + datetime(1997, 10, 2, 6, 6)]) + + def testMonthlyByHourAndSecond(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 6), + datetime(1997, 9, 2, 18, 0, 18), + datetime(1997, 10, 2, 6, 0, 6)]) + + def testMonthlyByMinuteAndSecond(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 6), + datetime(1997, 9, 2, 9, 6, 18), + datetime(1997, 9, 2, 9, 18, 6)]) + + def testMonthlyByHourAndMinuteAndSecond(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 6), + datetime(1997, 9, 2, 18, 6, 18), + datetime(1997, 9, 2, 18, 18, 6)]) + + def testMonthlyBySetPos(self): + self.assertEqual(list(rrule(MONTHLY, + count=3, + bymonthday=(13, 17), + byhour=(6, 18), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 13, 18, 0), + datetime(1997, 9, 17, 6, 0), + datetime(1997, 10, 13, 18, 0)]) + + def testWeekly(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testWeeklyInterval(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 16, 9, 0), + datetime(1997, 9, 30, 9, 0)]) + + def testWeeklyIntervalLarge(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + interval=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 1, 20, 9, 0), + datetime(1998, 6, 9, 9, 0)]) + + def testWeeklyByMonth(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 13, 9, 0), + datetime(1998, 1, 20, 9, 0)]) + + def testWeeklyByMonthDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 9, 0), + datetime(1997, 10, 1, 9, 0), + datetime(1997, 10, 3, 9, 0)]) + + def testWeeklyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 9, 0), + datetime(1998, 1, 7, 9, 0), + datetime(1998, 3, 5, 9, 0)]) + + def testWeeklyByWeekDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testWeeklyByNWeekDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testWeeklyByMonthAndWeekDay(self): + # This test is interesting, because it crosses the year + # boundary in a weekly period to find day '1' as a + # valid recurrence. + self.assertEqual(list(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 8, 9, 0)]) + + def testWeeklyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 8, 9, 0)]) + + def testWeeklyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 2, 3, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testWeeklyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 3, 3, 9, 0), + datetime(2001, 3, 1, 9, 0)]) + + def testWeeklyByYearDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testWeeklyByYearDayNeg(self): + self.assertEqual(list(rrule(WEEKLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testWeeklyByMonthAndYearDay(self): + self.assertEqual(list(rrule(WEEKLY, + count=4, + bymonth=(1, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 1, 1, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testWeeklyByMonthAndYearDayNeg(self): + self.assertEqual(list(rrule(WEEKLY, + count=4, + bymonth=(1, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 1, 1, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testWeeklyByWeekNo(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 5, 11, 9, 0), + datetime(1998, 5, 12, 9, 0), + datetime(1998, 5, 13, 9, 0)]) + + def testWeeklyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 29, 9, 0), + datetime(1999, 1, 4, 9, 0), + datetime(2000, 1, 3, 9, 0)]) + + def testWeeklyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1998, 12, 27, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testWeeklyByWeekNoAndWeekDayLast(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1999, 1, 3, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testWeeklyByWeekNoAndWeekDay53(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 12, 28, 9, 0), + datetime(2004, 12, 27, 9, 0), + datetime(2009, 12, 28, 9, 0)]) + + def testWeeklyByEaster(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 12, 9, 0), + datetime(1999, 4, 4, 9, 0), + datetime(2000, 4, 23, 9, 0)]) + + def testWeeklyByEasterPos(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 13, 9, 0), + datetime(1999, 4, 5, 9, 0), + datetime(2000, 4, 24, 9, 0)]) + + def testWeeklyByEasterNeg(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 11, 9, 0), + datetime(1999, 4, 3, 9, 0), + datetime(2000, 4, 22, 9, 0)]) + + def testWeeklyByHour(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0), + datetime(1997, 9, 9, 6, 0), + datetime(1997, 9, 9, 18, 0)]) + + def testWeeklyByMinute(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6), + datetime(1997, 9, 2, 9, 18), + datetime(1997, 9, 9, 9, 6)]) + + def testWeeklyBySecond(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 6), + datetime(1997, 9, 2, 9, 0, 18), + datetime(1997, 9, 9, 9, 0, 6)]) + + def testWeeklyByHourAndMinute(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6), + datetime(1997, 9, 2, 18, 18), + datetime(1997, 9, 9, 6, 6)]) + + def testWeeklyByHourAndSecond(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 6), + datetime(1997, 9, 2, 18, 0, 18), + datetime(1997, 9, 9, 6, 0, 6)]) + + def testWeeklyByMinuteAndSecond(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 6), + datetime(1997, 9, 2, 9, 6, 18), + datetime(1997, 9, 2, 9, 18, 6)]) + + def testWeeklyByHourAndMinuteAndSecond(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 6), + datetime(1997, 9, 2, 18, 6, 18), + datetime(1997, 9, 2, 18, 18, 6)]) + + def testWeeklyBySetPos(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + byweekday=(TU, TH), + byhour=(6, 18), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0), + datetime(1997, 9, 4, 6, 0), + datetime(1997, 9, 9, 18, 0)]) + + def testDaily(self): + self.assertEqual(list(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0)]) + + def testDailyInterval(self): + self.assertEqual(list(rrule(DAILY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 6, 9, 0)]) + + def testDailyIntervalLarge(self): + self.assertEqual(list(rrule(DAILY, + count=3, + interval=92, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 12, 3, 9, 0), + datetime(1998, 3, 5, 9, 0)]) + + def testDailyByMonth(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 2, 9, 0), + datetime(1998, 1, 3, 9, 0)]) + + def testDailyByMonthDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 9, 0), + datetime(1997, 10, 1, 9, 0), + datetime(1997, 10, 3, 9, 0)]) + + def testDailyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 9, 0), + datetime(1998, 1, 7, 9, 0), + datetime(1998, 3, 5, 9, 0)]) + + def testDailyByWeekDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testDailyByNWeekDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testDailyByMonthAndWeekDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 8, 9, 0)]) + + def testDailyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 8, 9, 0)]) + + def testDailyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 2, 3, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testDailyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 3, 3, 9, 0), + datetime(2001, 3, 1, 9, 0)]) + + def testDailyByYearDay(self): + self.assertEqual(list(rrule(DAILY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testDailyByYearDayNeg(self): + self.assertEqual(list(rrule(DAILY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testDailyByMonthAndYearDay(self): + self.assertEqual(list(rrule(DAILY, + count=4, + bymonth=(1, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 1, 1, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testDailyByMonthAndYearDayNeg(self): + self.assertEqual(list(rrule(DAILY, + count=4, + bymonth=(1, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 7, 19, 9, 0), + datetime(1999, 1, 1, 9, 0), + datetime(1999, 7, 19, 9, 0)]) + + def testDailyByWeekNo(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 5, 11, 9, 0), + datetime(1998, 5, 12, 9, 0), + datetime(1998, 5, 13, 9, 0)]) + + def testDailyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self.assertEqual(list(rrule(DAILY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 29, 9, 0), + datetime(1999, 1, 4, 9, 0), + datetime(2000, 1, 3, 9, 0)]) + + def testDailyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self.assertEqual(list(rrule(DAILY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1998, 12, 27, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testDailyByWeekNoAndWeekDayLast(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 9, 0), + datetime(1999, 1, 3, 9, 0), + datetime(2000, 1, 2, 9, 0)]) + + def testDailyByWeekNoAndWeekDay53(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 12, 28, 9, 0), + datetime(2004, 12, 27, 9, 0), + datetime(2009, 12, 28, 9, 0)]) + + def testDailyByEaster(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 12, 9, 0), + datetime(1999, 4, 4, 9, 0), + datetime(2000, 4, 23, 9, 0)]) + + def testDailyByEasterPos(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 13, 9, 0), + datetime(1999, 4, 5, 9, 0), + datetime(2000, 4, 24, 9, 0)]) + + def testDailyByEasterNeg(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 11, 9, 0), + datetime(1999, 4, 3, 9, 0), + datetime(2000, 4, 22, 9, 0)]) + + def testDailyByHour(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0), + datetime(1997, 9, 3, 6, 0), + datetime(1997, 9, 3, 18, 0)]) + + def testDailyByMinute(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6), + datetime(1997, 9, 2, 9, 18), + datetime(1997, 9, 3, 9, 6)]) + + def testDailyBySecond(self): + self.assertEqual(list(rrule(DAILY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 6), + datetime(1997, 9, 2, 9, 0, 18), + datetime(1997, 9, 3, 9, 0, 6)]) + + def testDailyByHourAndMinute(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6), + datetime(1997, 9, 2, 18, 18), + datetime(1997, 9, 3, 6, 6)]) + + def testDailyByHourAndSecond(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 6), + datetime(1997, 9, 2, 18, 0, 18), + datetime(1997, 9, 3, 6, 0, 6)]) + + def testDailyByMinuteAndSecond(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 6), + datetime(1997, 9, 2, 9, 6, 18), + datetime(1997, 9, 2, 9, 18, 6)]) + + def testDailyByHourAndMinuteAndSecond(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 6), + datetime(1997, 9, 2, 18, 6, 18), + datetime(1997, 9, 2, 18, 18, 6)]) + + def testDailyBySetPos(self): + self.assertEqual(list(rrule(DAILY, + count=3, + byhour=(6, 18), + byminute=(15, 45), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 15), + datetime(1997, 9, 3, 6, 45), + datetime(1997, 9, 3, 18, 15)]) + + def testHourly(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 10, 0), + datetime(1997, 9, 2, 11, 0)]) + + def testHourlyInterval(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 11, 0), + datetime(1997, 9, 2, 13, 0)]) + + def testHourlyIntervalLarge(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + interval=769, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 10, 4, 10, 0), + datetime(1997, 11, 5, 11, 0)]) + + def testHourlyByMonth(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 1, 0), + datetime(1998, 1, 1, 2, 0)]) + + def testHourlyByMonthDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 0, 0), + datetime(1997, 9, 3, 1, 0), + datetime(1997, 9, 3, 2, 0)]) + + def testHourlyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 0, 0), + datetime(1998, 1, 5, 1, 0), + datetime(1998, 1, 5, 2, 0)]) + + def testHourlyByWeekDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 10, 0), + datetime(1997, 9, 2, 11, 0)]) + + def testHourlyByNWeekDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 10, 0), + datetime(1997, 9, 2, 11, 0)]) + + def testHourlyByMonthAndWeekDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 1, 0), + datetime(1998, 1, 1, 2, 0)]) + + def testHourlyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 1, 0), + datetime(1998, 1, 1, 2, 0)]) + + def testHourlyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 1, 0), + datetime(1998, 1, 1, 2, 0)]) + + def testHourlyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 1, 0), + datetime(1998, 1, 1, 2, 0)]) + + def testHourlyByYearDay(self): + self.assertEqual(list(rrule(HOURLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 0, 0), + datetime(1997, 12, 31, 1, 0), + datetime(1997, 12, 31, 2, 0), + datetime(1997, 12, 31, 3, 0)]) + + def testHourlyByYearDayNeg(self): + self.assertEqual(list(rrule(HOURLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 0, 0), + datetime(1997, 12, 31, 1, 0), + datetime(1997, 12, 31, 2, 0), + datetime(1997, 12, 31, 3, 0)]) + + def testHourlyByMonthAndYearDay(self): + self.assertEqual(list(rrule(HOURLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 0, 0), + datetime(1998, 4, 10, 1, 0), + datetime(1998, 4, 10, 2, 0), + datetime(1998, 4, 10, 3, 0)]) + + def testHourlyByMonthAndYearDayNeg(self): + self.assertEqual(list(rrule(HOURLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 0, 0), + datetime(1998, 4, 10, 1, 0), + datetime(1998, 4, 10, 2, 0), + datetime(1998, 4, 10, 3, 0)]) + + def testHourlyByWeekNo(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 5, 11, 0, 0), + datetime(1998, 5, 11, 1, 0), + datetime(1998, 5, 11, 2, 0)]) + + def testHourlyByWeekNoAndWeekDay(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 29, 0, 0), + datetime(1997, 12, 29, 1, 0), + datetime(1997, 12, 29, 2, 0)]) + + def testHourlyByWeekNoAndWeekDayLarge(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 0, 0), + datetime(1997, 12, 28, 1, 0), + datetime(1997, 12, 28, 2, 0)]) + + def testHourlyByWeekNoAndWeekDayLast(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 0, 0), + datetime(1997, 12, 28, 1, 0), + datetime(1997, 12, 28, 2, 0)]) + + def testHourlyByWeekNoAndWeekDay53(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 12, 28, 0, 0), + datetime(1998, 12, 28, 1, 0), + datetime(1998, 12, 28, 2, 0)]) + + def testHourlyByEaster(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 12, 0, 0), + datetime(1998, 4, 12, 1, 0), + datetime(1998, 4, 12, 2, 0)]) + + def testHourlyByEasterPos(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 13, 0, 0), + datetime(1998, 4, 13, 1, 0), + datetime(1998, 4, 13, 2, 0)]) + + def testHourlyByEasterNeg(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 11, 0, 0), + datetime(1998, 4, 11, 1, 0), + datetime(1998, 4, 11, 2, 0)]) + + def testHourlyByHour(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0), + datetime(1997, 9, 3, 6, 0), + datetime(1997, 9, 3, 18, 0)]) + + def testHourlyByMinute(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6), + datetime(1997, 9, 2, 9, 18), + datetime(1997, 9, 2, 10, 6)]) + + def testHourlyBySecond(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 6), + datetime(1997, 9, 2, 9, 0, 18), + datetime(1997, 9, 2, 10, 0, 6)]) + + def testHourlyByHourAndMinute(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6), + datetime(1997, 9, 2, 18, 18), + datetime(1997, 9, 3, 6, 6)]) + + def testHourlyByHourAndSecond(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 6), + datetime(1997, 9, 2, 18, 0, 18), + datetime(1997, 9, 3, 6, 0, 6)]) + + def testHourlyByMinuteAndSecond(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 6), + datetime(1997, 9, 2, 9, 6, 18), + datetime(1997, 9, 2, 9, 18, 6)]) + + def testHourlyByHourAndMinuteAndSecond(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 6), + datetime(1997, 9, 2, 18, 6, 18), + datetime(1997, 9, 2, 18, 18, 6)]) + + def testHourlyBySetPos(self): + self.assertEqual(list(rrule(HOURLY, + count=3, + byminute=(15, 45), + bysecond=(15, 45), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 15, 45), + datetime(1997, 9, 2, 9, 45, 15), + datetime(1997, 9, 2, 10, 15, 45)]) + + def testMinutely(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 9, 1), + datetime(1997, 9, 2, 9, 2)]) + + def testMinutelyInterval(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 9, 2), + datetime(1997, 9, 2, 9, 4)]) + + def testMinutelyIntervalLarge(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + interval=1501, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 10, 1), + datetime(1997, 9, 4, 11, 2)]) + + def testMinutelyByMonth(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 0, 1), + datetime(1998, 1, 1, 0, 2)]) + + def testMinutelyByMonthDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 0, 0), + datetime(1997, 9, 3, 0, 1), + datetime(1997, 9, 3, 0, 2)]) + + def testMinutelyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 0, 0), + datetime(1998, 1, 5, 0, 1), + datetime(1998, 1, 5, 0, 2)]) + + def testMinutelyByWeekDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 9, 1), + datetime(1997, 9, 2, 9, 2)]) + + def testMinutelyByNWeekDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 2, 9, 1), + datetime(1997, 9, 2, 9, 2)]) + + def testMinutelyByMonthAndWeekDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 0, 1), + datetime(1998, 1, 1, 0, 2)]) + + def testMinutelyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 0, 1), + datetime(1998, 1, 1, 0, 2)]) + + def testMinutelyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 0, 1), + datetime(1998, 1, 1, 0, 2)]) + + def testMinutelyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0), + datetime(1998, 1, 1, 0, 1), + datetime(1998, 1, 1, 0, 2)]) + + def testMinutelyByYearDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 0, 0), + datetime(1997, 12, 31, 0, 1), + datetime(1997, 12, 31, 0, 2), + datetime(1997, 12, 31, 0, 3)]) + + def testMinutelyByYearDayNeg(self): + self.assertEqual(list(rrule(MINUTELY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 0, 0), + datetime(1997, 12, 31, 0, 1), + datetime(1997, 12, 31, 0, 2), + datetime(1997, 12, 31, 0, 3)]) + + def testMinutelyByMonthAndYearDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 0, 0), + datetime(1998, 4, 10, 0, 1), + datetime(1998, 4, 10, 0, 2), + datetime(1998, 4, 10, 0, 3)]) + + def testMinutelyByMonthAndYearDayNeg(self): + self.assertEqual(list(rrule(MINUTELY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 0, 0), + datetime(1998, 4, 10, 0, 1), + datetime(1998, 4, 10, 0, 2), + datetime(1998, 4, 10, 0, 3)]) + + def testMinutelyByWeekNo(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 5, 11, 0, 0), + datetime(1998, 5, 11, 0, 1), + datetime(1998, 5, 11, 0, 2)]) + + def testMinutelyByWeekNoAndWeekDay(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 29, 0, 0), + datetime(1997, 12, 29, 0, 1), + datetime(1997, 12, 29, 0, 2)]) + + def testMinutelyByWeekNoAndWeekDayLarge(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 0, 0), + datetime(1997, 12, 28, 0, 1), + datetime(1997, 12, 28, 0, 2)]) + + def testMinutelyByWeekNoAndWeekDayLast(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 0, 0), + datetime(1997, 12, 28, 0, 1), + datetime(1997, 12, 28, 0, 2)]) + + def testMinutelyByWeekNoAndWeekDay53(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 12, 28, 0, 0), + datetime(1998, 12, 28, 0, 1), + datetime(1998, 12, 28, 0, 2)]) + + def testMinutelyByEaster(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 12, 0, 0), + datetime(1998, 4, 12, 0, 1), + datetime(1998, 4, 12, 0, 2)]) + + def testMinutelyByEasterPos(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 13, 0, 0), + datetime(1998, 4, 13, 0, 1), + datetime(1998, 4, 13, 0, 2)]) + + def testMinutelyByEasterNeg(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 11, 0, 0), + datetime(1998, 4, 11, 0, 1), + datetime(1998, 4, 11, 0, 2)]) + + def testMinutelyByHour(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0), + datetime(1997, 9, 2, 18, 1), + datetime(1997, 9, 2, 18, 2)]) + + def testMinutelyByMinute(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6), + datetime(1997, 9, 2, 9, 18), + datetime(1997, 9, 2, 10, 6)]) + + def testMinutelyBySecond(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 6), + datetime(1997, 9, 2, 9, 0, 18), + datetime(1997, 9, 2, 9, 1, 6)]) + + def testMinutelyByHourAndMinute(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6), + datetime(1997, 9, 2, 18, 18), + datetime(1997, 9, 3, 6, 6)]) + + def testMinutelyByHourAndSecond(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 6), + datetime(1997, 9, 2, 18, 0, 18), + datetime(1997, 9, 2, 18, 1, 6)]) + + def testMinutelyByMinuteAndSecond(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 6), + datetime(1997, 9, 2, 9, 6, 18), + datetime(1997, 9, 2, 9, 18, 6)]) + + def testMinutelyByHourAndMinuteAndSecond(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 6), + datetime(1997, 9, 2, 18, 6, 18), + datetime(1997, 9, 2, 18, 18, 6)]) + + def testMinutelyBySetPos(self): + self.assertEqual(list(rrule(MINUTELY, + count=3, + bysecond=(15, 30, 45), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 15), + datetime(1997, 9, 2, 9, 0, 45), + datetime(1997, 9, 2, 9, 1, 15)]) + + def testSecondly(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 0), + datetime(1997, 9, 2, 9, 0, 1), + datetime(1997, 9, 2, 9, 0, 2)]) + + def testSecondlyInterval(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 0), + datetime(1997, 9, 2, 9, 0, 2), + datetime(1997, 9, 2, 9, 0, 4)]) + + def testSecondlyIntervalLarge(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + interval=90061, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 0), + datetime(1997, 9, 3, 10, 1, 1), + datetime(1997, 9, 4, 11, 2, 2)]) + + def testSecondlyByMonth(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0, 0), + datetime(1998, 1, 1, 0, 0, 1), + datetime(1998, 1, 1, 0, 0, 2)]) + + def testSecondlyByMonthDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 0, 0, 0), + datetime(1997, 9, 3, 0, 0, 1), + datetime(1997, 9, 3, 0, 0, 2)]) + + def testSecondlyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 0, 0, 0), + datetime(1998, 1, 5, 0, 0, 1), + datetime(1998, 1, 5, 0, 0, 2)]) + + def testSecondlyByWeekDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 0), + datetime(1997, 9, 2, 9, 0, 1), + datetime(1997, 9, 2, 9, 0, 2)]) + + def testSecondlyByNWeekDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 0), + datetime(1997, 9, 2, 9, 0, 1), + datetime(1997, 9, 2, 9, 0, 2)]) + + def testSecondlyByMonthAndWeekDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0, 0), + datetime(1998, 1, 1, 0, 0, 1), + datetime(1998, 1, 1, 0, 0, 2)]) + + def testSecondlyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0, 0), + datetime(1998, 1, 1, 0, 0, 1), + datetime(1998, 1, 1, 0, 0, 2)]) + + def testSecondlyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0, 0), + datetime(1998, 1, 1, 0, 0, 1), + datetime(1998, 1, 1, 0, 0, 2)]) + + def testSecondlyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 0, 0, 0), + datetime(1998, 1, 1, 0, 0, 1), + datetime(1998, 1, 1, 0, 0, 2)]) + + def testSecondlyByYearDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 0, 0, 0), + datetime(1997, 12, 31, 0, 0, 1), + datetime(1997, 12, 31, 0, 0, 2), + datetime(1997, 12, 31, 0, 0, 3)]) + + def testSecondlyByYearDayNeg(self): + self.assertEqual(list(rrule(SECONDLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 0, 0, 0), + datetime(1997, 12, 31, 0, 0, 1), + datetime(1997, 12, 31, 0, 0, 2), + datetime(1997, 12, 31, 0, 0, 3)]) + + def testSecondlyByMonthAndYearDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 0, 0, 0), + datetime(1998, 4, 10, 0, 0, 1), + datetime(1998, 4, 10, 0, 0, 2), + datetime(1998, 4, 10, 0, 0, 3)]) + + def testSecondlyByMonthAndYearDayNeg(self): + self.assertEqual(list(rrule(SECONDLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 10, 0, 0, 0), + datetime(1998, 4, 10, 0, 0, 1), + datetime(1998, 4, 10, 0, 0, 2), + datetime(1998, 4, 10, 0, 0, 3)]) + + def testSecondlyByWeekNo(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 5, 11, 0, 0, 0), + datetime(1998, 5, 11, 0, 0, 1), + datetime(1998, 5, 11, 0, 0, 2)]) + + def testSecondlyByWeekNoAndWeekDay(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 29, 0, 0, 0), + datetime(1997, 12, 29, 0, 0, 1), + datetime(1997, 12, 29, 0, 0, 2)]) + + def testSecondlyByWeekNoAndWeekDayLarge(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 0, 0, 0), + datetime(1997, 12, 28, 0, 0, 1), + datetime(1997, 12, 28, 0, 0, 2)]) + + def testSecondlyByWeekNoAndWeekDayLast(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 28, 0, 0, 0), + datetime(1997, 12, 28, 0, 0, 1), + datetime(1997, 12, 28, 0, 0, 2)]) + + def testSecondlyByWeekNoAndWeekDay53(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 12, 28, 0, 0, 0), + datetime(1998, 12, 28, 0, 0, 1), + datetime(1998, 12, 28, 0, 0, 2)]) + + def testSecondlyByEaster(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 12, 0, 0, 0), + datetime(1998, 4, 12, 0, 0, 1), + datetime(1998, 4, 12, 0, 0, 2)]) + + def testSecondlyByEasterPos(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 13, 0, 0, 0), + datetime(1998, 4, 13, 0, 0, 1), + datetime(1998, 4, 13, 0, 0, 2)]) + + def testSecondlyByEasterNeg(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 4, 11, 0, 0, 0), + datetime(1998, 4, 11, 0, 0, 1), + datetime(1998, 4, 11, 0, 0, 2)]) + + def testSecondlyByHour(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 0), + datetime(1997, 9, 2, 18, 0, 1), + datetime(1997, 9, 2, 18, 0, 2)]) + + def testSecondlyByMinute(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 0), + datetime(1997, 9, 2, 9, 6, 1), + datetime(1997, 9, 2, 9, 6, 2)]) + + def testSecondlyBySecond(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0, 6), + datetime(1997, 9, 2, 9, 0, 18), + datetime(1997, 9, 2, 9, 1, 6)]) + + def testSecondlyByHourAndMinute(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 0), + datetime(1997, 9, 2, 18, 6, 1), + datetime(1997, 9, 2, 18, 6, 2)]) + + def testSecondlyByHourAndSecond(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 0, 6), + datetime(1997, 9, 2, 18, 0, 18), + datetime(1997, 9, 2, 18, 1, 6)]) + + def testSecondlyByMinuteAndSecond(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 6, 6), + datetime(1997, 9, 2, 9, 6, 18), + datetime(1997, 9, 2, 9, 18, 6)]) + + def testSecondlyByHourAndMinuteAndSecond(self): + self.assertEqual(list(rrule(SECONDLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 18, 6, 6), + datetime(1997, 9, 2, 18, 6, 18), + datetime(1997, 9, 2, 18, 18, 6)]) + + def testSecondlyByHourAndMinuteAndSecondBug(self): + # This explores a bug found by Mathieu Bridon. + self.assertEqual(list(rrule(SECONDLY, + count=3, + bysecond=(0,), + byminute=(1,), + dtstart=datetime(2010, 3, 22, 12, 1))), + [datetime(2010, 3, 22, 12, 1), + datetime(2010, 3, 22, 13, 1), + datetime(2010, 3, 22, 14, 1)]) + + def testLongIntegers(self): + if not PY3: # There is no longs in python3 + self.assertEqual(list(rrule(MINUTELY, + count=long(2), + interval=long(2), + bymonth=long(2), + byweekday=long(3), + byhour=long(6), + byminute=long(6), + bysecond=long(6), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 2, 5, 6, 6, 6), + datetime(1998, 2, 12, 6, 6, 6)]) + self.assertEqual(list(rrule(YEARLY, + count=long(2), + bymonthday=long(5), + byweekno=long(2), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 9, 0), + datetime(2004, 1, 5, 9, 0)]) + + def testHourlyBadRRule(self): + """ + When `byhour` is specified with `freq=HOURLY`, there are certain + combinations of `dtstart` and `byhour` which result in an rrule with no + valid values. + + See https://github.com/dateutil/dateutil/issues/4 + """ + + self.assertRaises(ValueError, rrule, HOURLY, + **dict(interval=4, byhour=(7, 11, 15, 19), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testMinutelyBadRRule(self): + """ + See :func:`testHourlyBadRRule` for details. + """ + + self.assertRaises(ValueError, rrule, MINUTELY, + **dict(interval=12, byminute=(10, 11, 25, 39, 50), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testSecondlyBadRRule(self): + """ + See :func:`testHourlyBadRRule` for details. + """ + + self.assertRaises(ValueError, rrule, SECONDLY, + **dict(interval=10, bysecond=(2, 15, 37, 42, 59), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testMinutelyBadComboRRule(self): + """ + Certain values of :param:`interval` in :class:`rrule`, when combined + with certain values of :param:`byhour` create rules which apply to no + valid dates. The library should detect this case in the iterator and + raise a :exception:`ValueError`. + """ + + # In Python 2.7 you can use a context manager for this. + def make_bad_rrule(): + list(rrule(MINUTELY, interval=120, byhour=(10, 12, 14, 16), + count=2, dtstart=datetime(1997, 9, 2, 9, 0))) + + self.assertRaises(ValueError, make_bad_rrule) + + def testSecondlyBadComboRRule(self): + """ + See :func:`testMinutelyBadComboRRule' for details. + """ + + # In Python 2.7 you can use a context manager for this. + def make_bad_minute_rrule(): + list(rrule(SECONDLY, interval=360, byminute=(10, 28, 49), + count=4, dtstart=datetime(1997, 9, 2, 9, 0))) + + def make_bad_hour_rrule(): + list(rrule(SECONDLY, interval=43200, byhour=(2, 10, 18, 23), + count=4, dtstart=datetime(1997, 9, 2, 9, 0))) + + self.assertRaises(ValueError, make_bad_minute_rrule) + self.assertRaises(ValueError, make_bad_hour_rrule) + + def testBadUntilCountRRule(self): + """ + See rfc-5545 3.3.10 - This checks for the deprecation warning, and will + eventually check for an error. + """ + with self.assertWarns(DeprecationWarning): + rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0), + count=3, until=datetime(1997, 9, 4, 9, 0)) + + def testUntilNotMatching(self): + self.assertEqual(list(rrule(DAILY, + dtstart=datetime(1997, 9, 2, 9, 0), + until=datetime(1997, 9, 5, 8, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0)]) + + def testUntilMatching(self): + self.assertEqual(list(rrule(DAILY, + dtstart=datetime(1997, 9, 2, 9, 0), + until=datetime(1997, 9, 4, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0)]) + + def testUntilSingle(self): + self.assertEqual(list(rrule(DAILY, + dtstart=datetime(1997, 9, 2, 9, 0), + until=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0)]) + + def testUntilEmpty(self): + self.assertEqual(list(rrule(DAILY, + dtstart=datetime(1997, 9, 2, 9, 0), + until=datetime(1997, 9, 1, 9, 0))), + []) + + def testUntilWithDate(self): + self.assertEqual(list(rrule(DAILY, + dtstart=datetime(1997, 9, 2, 9, 0), + until=date(1997, 9, 5))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0)]) + + def testWkStIntervalMO(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + interval=2, + byweekday=(TU, SU), + wkst=MO, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 7, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testWkStIntervalSU(self): + self.assertEqual(list(rrule(WEEKLY, + count=3, + interval=2, + byweekday=(TU, SU), + wkst=SU, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 14, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testDTStartIsDate(self): + self.assertEqual(list(rrule(DAILY, + count=3, + dtstart=date(1997, 9, 2))), + [datetime(1997, 9, 2, 0, 0), + datetime(1997, 9, 3, 0, 0), + datetime(1997, 9, 4, 0, 0)]) + + def testDTStartWithMicroseconds(self): + self.assertEqual(list(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0, 0, 500000))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0)]) + + def testMaxYear(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=2, + bymonthday=31, + dtstart=datetime(9997, 9, 2, 9, 0, 0))), + []) + + def testGetItem(self): + self.assertEqual(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))[0], + datetime(1997, 9, 2, 9, 0)) + + def testGetItemNeg(self): + self.assertEqual(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))[-1], + datetime(1997, 9, 4, 9, 0)) + + def testGetItemSlice(self): + self.assertEqual(rrule(DAILY, + # count=3, + dtstart=datetime(1997, 9, 2, 9, 0))[1:2], + [datetime(1997, 9, 3, 9, 0)]) + + def testGetItemSliceEmpty(self): + self.assertEqual(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))[:], + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0)]) + + def testGetItemSliceStep(self): + self.assertEqual(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))[::-2], + [datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 2, 9, 0)]) + + def testCount(self): + self.assertEqual(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0)).count(), + 3) + + def testCountZero(self): + self.assertEqual(rrule(YEARLY, + count=0, + dtstart=datetime(1997, 9, 2, 9, 0)).count(), + 0) + + def testContains(self): + rr = rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0)) + self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True) + + def testContainsNot(self): + rr = rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0)) + self.assertEqual(datetime(1997, 9, 3, 9, 0) not in rr, False) + + def testBefore(self): + self.assertEqual(rrule(DAILY, # count=5 + dtstart=datetime(1997, 9, 2, 9, 0)).before(datetime(1997, 9, 5, 9, 0)), + datetime(1997, 9, 4, 9, 0)) + + def testBeforeInc(self): + self.assertEqual(rrule(DAILY, + #count=5, + dtstart=datetime(1997, 9, 2, 9, 0)) + .before(datetime(1997, 9, 5, 9, 0), inc=True), + datetime(1997, 9, 5, 9, 0)) + + def testAfter(self): + self.assertEqual(rrule(DAILY, + #count=5, + dtstart=datetime(1997, 9, 2, 9, 0)) + .after(datetime(1997, 9, 4, 9, 0)), + datetime(1997, 9, 5, 9, 0)) + + def testAfterInc(self): + self.assertEqual(rrule(DAILY, + #count=5, + dtstart=datetime(1997, 9, 2, 9, 0)) + .after(datetime(1997, 9, 4, 9, 0), inc=True), + datetime(1997, 9, 4, 9, 0)) + + def testXAfter(self): + self.assertEqual(list(rrule(DAILY, + dtstart=datetime(1997, 9, 2, 9, 0)) + .xafter(datetime(1997, 9, 8, 9, 0), count=12)), + [datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 10, 9, 0), + datetime(1997, 9, 11, 9, 0), + datetime(1997, 9, 12, 9, 0), + datetime(1997, 9, 13, 9, 0), + datetime(1997, 9, 14, 9, 0), + datetime(1997, 9, 15, 9, 0), + datetime(1997, 9, 16, 9, 0), + datetime(1997, 9, 17, 9, 0), + datetime(1997, 9, 18, 9, 0), + datetime(1997, 9, 19, 9, 0), + datetime(1997, 9, 20, 9, 0)]) + + def testXAfterInc(self): + self.assertEqual(list(rrule(DAILY, + dtstart=datetime(1997, 9, 2, 9, 0)) + .xafter(datetime(1997, 9, 8, 9, 0), count=12, inc=True)), + [datetime(1997, 9, 8, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 10, 9, 0), + datetime(1997, 9, 11, 9, 0), + datetime(1997, 9, 12, 9, 0), + datetime(1997, 9, 13, 9, 0), + datetime(1997, 9, 14, 9, 0), + datetime(1997, 9, 15, 9, 0), + datetime(1997, 9, 16, 9, 0), + datetime(1997, 9, 17, 9, 0), + datetime(1997, 9, 18, 9, 0), + datetime(1997, 9, 19, 9, 0)]) + + def testBetween(self): + self.assertEqual(rrule(DAILY, + #count=5, + dtstart=datetime(1997, 9, 2, 9, 0)) + .between(datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 6, 9, 0)), + [datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 5, 9, 0)]) + + def testBetweenInc(self): + self.assertEqual(rrule(DAILY, + #count=5, + dtstart=datetime(1997, 9, 2, 9, 0)) + .between(datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 6, 9, 0), inc=True), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 5, 9, 0), + datetime(1997, 9, 6, 9, 0)]) + + def testCachePre(self): + rr = rrule(DAILY, count=15, cache=True, + dtstart=datetime(1997, 9, 2, 9, 0)) + self.assertEqual(list(rr), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 5, 9, 0), + datetime(1997, 9, 6, 9, 0), + datetime(1997, 9, 7, 9, 0), + datetime(1997, 9, 8, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 10, 9, 0), + datetime(1997, 9, 11, 9, 0), + datetime(1997, 9, 12, 9, 0), + datetime(1997, 9, 13, 9, 0), + datetime(1997, 9, 14, 9, 0), + datetime(1997, 9, 15, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testCachePost(self): + rr = rrule(DAILY, count=15, cache=True, + dtstart=datetime(1997, 9, 2, 9, 0)) + for x in rr: pass + self.assertEqual(list(rr), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 5, 9, 0), + datetime(1997, 9, 6, 9, 0), + datetime(1997, 9, 7, 9, 0), + datetime(1997, 9, 8, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 10, 9, 0), + datetime(1997, 9, 11, 9, 0), + datetime(1997, 9, 12, 9, 0), + datetime(1997, 9, 13, 9, 0), + datetime(1997, 9, 14, 9, 0), + datetime(1997, 9, 15, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testCachePostInternal(self): + rr = rrule(DAILY, count=15, cache=True, + dtstart=datetime(1997, 9, 2, 9, 0)) + for x in rr: pass + self.assertEqual(rr._cache, + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 3, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 5, 9, 0), + datetime(1997, 9, 6, 9, 0), + datetime(1997, 9, 7, 9, 0), + datetime(1997, 9, 8, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 10, 9, 0), + datetime(1997, 9, 11, 9, 0), + datetime(1997, 9, 12, 9, 0), + datetime(1997, 9, 13, 9, 0), + datetime(1997, 9, 14, 9, 0), + datetime(1997, 9, 15, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testCachePreContains(self): + rr = rrule(DAILY, count=3, cache=True, + dtstart=datetime(1997, 9, 2, 9, 0)) + self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True) + + def testCachePostContains(self): + rr = rrule(DAILY, count=3, cache=True, + dtstart=datetime(1997, 9, 2, 9, 0)) + for x in rr: pass + self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True) + + def testStr(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=3\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testStrWithTZID(self): + NYC = tz.gettz('America/New_York') + self.assertEqual(list(rrulestr( + "DTSTART;TZID=America/New_York:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=3\n" + )), + [datetime(1997, 9, 2, 9, 0, tzinfo=NYC), + datetime(1998, 9, 2, 9, 0, tzinfo=NYC), + datetime(1999, 9, 2, 9, 0, tzinfo=NYC)]) + + def testStrWithTZIDMapping(self): + rrstr = ("DTSTART;TZID=Eastern:19970902T090000\n" + + "RRULE:FREQ=YEARLY;COUNT=3") + + NYC = tz.gettz('America/New_York') + rr = rrulestr(rrstr, tzids={'Eastern': NYC}) + exp = [datetime(1997, 9, 2, 9, 0, tzinfo=NYC), + datetime(1998, 9, 2, 9, 0, tzinfo=NYC), + datetime(1999, 9, 2, 9, 0, tzinfo=NYC)] + + self.assertEqual(list(rr), exp) + + def testStrWithTZIDCallable(self): + rrstr = ('DTSTART;TZID=UTC+04:19970902T090000\n' + + 'RRULE:FREQ=YEARLY;COUNT=3') + + TZ = tz.tzstr('UTC+04') + def parse_tzstr(tzstr): + if tzstr is None: + raise ValueError('Invalid tzstr') + + return tz.tzstr(tzstr) + + rr = rrulestr(rrstr, tzids=parse_tzstr) + + exp = [datetime(1997, 9, 2, 9, 0, tzinfo=TZ), + datetime(1998, 9, 2, 9, 0, tzinfo=TZ), + datetime(1999, 9, 2, 9, 0, tzinfo=TZ),] + + self.assertEqual(list(rr), exp) + + def testStrWithTZIDCallableFailure(self): + rrstr = ('DTSTART;TZID=America/New_York:19970902T090000\n' + + 'RRULE:FREQ=YEARLY;COUNT=3') + + class TzInfoError(Exception): + pass + + def tzinfos(tzstr): + if tzstr == 'America/New_York': + raise TzInfoError('Invalid!') + return None + + with self.assertRaises(TzInfoError): + rrulestr(rrstr, tzids=tzinfos) + + def testStrWithConflictingTZID(self): + # RFC 5545 Section 3.3.5, FORM #2: DATE WITH UTC TIME + # https://tools.ietf.org/html/rfc5545#section-3.3.5 + # The "TZID" property parameter MUST NOT be applied to DATE-TIME + with self.assertRaises(ValueError): + rrulestr("DTSTART;TZID=America/New_York:19970902T090000Z\n"+ + "RRULE:FREQ=YEARLY;COUNT=3\n") + + def testStrType(self): + self.assertEqual(isinstance(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=3\n" + ), rrule), True) + + def testStrForceSetType(self): + self.assertEqual(isinstance(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=3\n" + , forceset=True), rruleset), True) + + def testStrSetType(self): + self.assertEqual(isinstance(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n" + "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n" + ), rruleset), True) + + def testStrCase(self): + self.assertEqual(list(rrulestr( + "dtstart:19970902T090000\n" + "rrule:freq=yearly;count=3\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testStrSpaces(self): + self.assertEqual(list(rrulestr( + " DTSTART:19970902T090000 " + " RRULE:FREQ=YEARLY;COUNT=3 " + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testStrSpacesAndLines(self): + self.assertEqual(list(rrulestr( + " DTSTART:19970902T090000 \n" + " \n" + " RRULE:FREQ=YEARLY;COUNT=3 \n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testStrNoDTStart(self): + self.assertEqual(list(rrulestr( + "RRULE:FREQ=YEARLY;COUNT=3\n" + , dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testStrValueOnly(self): + self.assertEqual(list(rrulestr( + "FREQ=YEARLY;COUNT=3\n" + , dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testStrUnfold(self): + self.assertEqual(list(rrulestr( + "FREQ=YEA\n RLY;COUNT=3\n", unfold=True, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testStrSet(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n" + "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testStrSetDate(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TU\n" + "RDATE:19970904T090000\n" + "RDATE:19970909T090000\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testStrSetExRule(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n" + "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testStrSetExDate(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n" + "EXDATE:19970904T090000\n" + "EXDATE:19970911T090000\n" + "EXDATE:19970918T090000\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testStrSetExDateMultiple(self): + rrstr = ("DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n" + "EXDATE:19970904T090000,19970911T090000,19970918T090000\n") + + rr = rrulestr(rrstr) + assert list(rr) == [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)] + + def testStrSetExDateWithTZID(self): + BXL = tz.gettz('Europe/Brussels') + rr = rrulestr("DTSTART;TZID=Europe/Brussels:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n" + "EXDATE;TZID=Europe/Brussels:19970904T090000\n" + "EXDATE;TZID=Europe/Brussels:19970911T090000\n" + "EXDATE;TZID=Europe/Brussels:19970918T090000\n") + + assert list(rr) == [datetime(1997, 9, 2, 9, 0, tzinfo=BXL), + datetime(1997, 9, 9, 9, 0, tzinfo=BXL), + datetime(1997, 9, 16, 9, 0, tzinfo=BXL)] + + def testStrSetExDateValueDateTimeNoTZID(self): + rrstr = '\n'.join([ + "DTSTART:19970902T090000", + "RRULE:FREQ=YEARLY;COUNT=4;BYDAY=TU,TH", + "EXDATE;VALUE=DATE-TIME:19970902T090000", + "EXDATE;VALUE=DATE-TIME:19970909T090000", + ]) + + rr = rrulestr(rrstr) + assert list(rr) == [datetime(1997, 9, 4, 9), datetime(1997, 9, 11, 9)] + + def testStrSetExDateValueMixDateTimeNoTZID(self): + rrstr = '\n'.join([ + "DTSTART:19970902T090000", + "RRULE:FREQ=YEARLY;COUNT=4;BYDAY=TU,TH", + "EXDATE;VALUE=DATE-TIME:19970902T090000", + "EXDATE:19970909T090000", + ]) + + rr = rrulestr(rrstr) + assert list(rr) == [datetime(1997, 9, 4, 9), datetime(1997, 9, 11, 9)] + + def testStrSetExDateValueDateTimeWithTZID(self): + BXL = tz.gettz('Europe/Brussels') + rrstr = '\n'.join([ + "DTSTART;VALUE=DATE-TIME;TZID=Europe/Brussels:19970902T090000", + "RRULE:FREQ=YEARLY;COUNT=4;BYDAY=TU,TH", + "EXDATE;VALUE=DATE-TIME;TZID=Europe/Brussels:19970902T090000", + "EXDATE;VALUE=DATE-TIME;TZID=Europe/Brussels:19970909T090000", + ]) + + rr = rrulestr(rrstr) + assert list(rr) == [datetime(1997, 9, 4, 9, tzinfo=BXL), + datetime(1997, 9, 11, 9, tzinfo=BXL)] + + def testStrSetExDateValueDate(self): + rrstr = '\n'.join([ + "DTSTART;VALUE=DATE:19970902", + "RRULE:FREQ=YEARLY;COUNT=4;BYDAY=TU,TH", + "EXDATE;VALUE=DATE:19970902", + "EXDATE;VALUE=DATE:19970909", + ]) + + rr = rrulestr(rrstr) + assert list(rr) == [datetime(1997, 9, 4), datetime(1997, 9, 11)] + + def testStrSetDateAndExDate(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RDATE:19970902T090000\n" + "RDATE:19970904T090000\n" + "RDATE:19970909T090000\n" + "RDATE:19970911T090000\n" + "RDATE:19970916T090000\n" + "RDATE:19970918T090000\n" + "EXDATE:19970904T090000\n" + "EXDATE:19970911T090000\n" + "EXDATE:19970918T090000\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testStrSetDateAndExRule(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RDATE:19970902T090000\n" + "RDATE:19970904T090000\n" + "RDATE:19970909T090000\n" + "RDATE:19970911T090000\n" + "RDATE:19970916T090000\n" + "RDATE:19970918T090000\n" + "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n" + )), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testStrKeywords(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=3;INTERVAL=3;" + "BYMONTH=3;BYWEEKDAY=TH;BYMONTHDAY=3;" + "BYHOUR=3;BYMINUTE=3;BYSECOND=3\n" + )), + [datetime(2033, 3, 3, 3, 3, 3), + datetime(2039, 3, 3, 3, 3, 3), + datetime(2072, 3, 3, 3, 3, 3)]) + + def testStrNWeekDay(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=3;BYDAY=1TU,-1TH\n" + )), + [datetime(1997, 12, 25, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 12, 31, 9, 0)]) + + def testStrUntil(self): + self.assertEqual(list(rrulestr( + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;" + "UNTIL=19990101T000000;BYDAY=1TU,-1TH\n" + )), + [datetime(1997, 12, 25, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 12, 31, 9, 0)]) + + def testStrValueDatetime(self): + rr = rrulestr("DTSTART;VALUE=DATE-TIME:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=2") + + self.assertEqual(list(rr), [datetime(1997, 9, 2, 9, 0, 0), + datetime(1998, 9, 2, 9, 0, 0)]) + + def testStrValueDate(self): + rr = rrulestr("DTSTART;VALUE=DATE:19970902\n" + "RRULE:FREQ=YEARLY;COUNT=2") + + self.assertEqual(list(rr), [datetime(1997, 9, 2, 0, 0, 0), + datetime(1998, 9, 2, 0, 0, 0)]) + + def testStrMultipleDTStartComma(self): + with pytest.raises(ValueError): + rr = rrulestr("DTSTART:19970101T000000,19970202T000000\n" + "RRULE:FREQ=YEARLY;COUNT=1") + + def testStrInvalidUntil(self): + with self.assertRaises(ValueError): + list(rrulestr("DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;" + "UNTIL=TheCowsComeHome;BYDAY=1TU,-1TH\n")) + + def testStrUntilMustBeUTC(self): + with self.assertRaises(ValueError): + list(rrulestr("DTSTART;TZID=America/New_York:19970902T090000\n" + "RRULE:FREQ=YEARLY;" + "UNTIL=19990101T000000;BYDAY=1TU,-1TH\n")) + + def testStrUntilWithTZ(self): + NYC = tz.gettz('America/New_York') + rr = list(rrulestr("DTSTART;TZID=America/New_York:19970101T000000\n" + "RRULE:FREQ=YEARLY;" + "UNTIL=19990101T000000Z\n")) + self.assertEqual(list(rr), [datetime(1997, 1, 1, 0, 0, 0, tzinfo=NYC), + datetime(1998, 1, 1, 0, 0, 0, tzinfo=NYC)]) + + def testStrEmptyByDay(self): + with self.assertRaises(ValueError): + list(rrulestr("DTSTART:19970902T090000\n" + "FREQ=WEEKLY;" + "BYDAY=;" # This part is invalid + "WKST=SU")) + + def testStrInvalidByDay(self): + with self.assertRaises(ValueError): + list(rrulestr("DTSTART:19970902T090000\n" + "FREQ=WEEKLY;" + "BYDAY=-1OK;" # This part is invalid + "WKST=SU")) + + def testBadBySetPos(self): + self.assertRaises(ValueError, + rrule, MONTHLY, + count=1, + bysetpos=0, + dtstart=datetime(1997, 9, 2, 9, 0)) + + def testBadBySetPosMany(self): + self.assertRaises(ValueError, + rrule, MONTHLY, + count=1, + bysetpos=(-1, 0, 1), + dtstart=datetime(1997, 9, 2, 9, 0)) + + # Tests to ensure that str(rrule) works + def testToStrYearly(self): + rule = rrule(YEARLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0)) + self._rrulestr_reverse_test(rule) + + def testToStrYearlyInterval(self): + rule = rrule(YEARLY, count=3, interval=2, + dtstart=datetime(1997, 9, 2, 9, 0)) + self._rrulestr_reverse_test(rule) + + def testToStrYearlyByMonth(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthAndMonthDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByWeekDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByNWeekDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByNWeekDayLarge(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthAndWeekDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthAndNWeekDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthAndNWeekDayLarge(self): + # This is interesting because the TH(-3) ends up before + # the TU(3). + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthAndMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByYearDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByYearDayNeg(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthAndYearDay(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMonthAndYearDayNeg(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByWeekNo(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByWeekNoAndWeekDayLast(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByEaster(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByEasterPos(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByEasterNeg(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByWeekNoAndWeekDay53(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByHour(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMinute(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyBySecond(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByHourAndMinute(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByHourAndSecond(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyByHourAndMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrYearlyBySetPos(self): + self._rrulestr_reverse_test(rrule(YEARLY, + count=3, + bymonthday=15, + byhour=(6, 18), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthly(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyInterval(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyIntervalLarge(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + interval=18, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonth(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthAndMonthDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByWeekDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + # Third Monday of the month + self.assertEqual(rrule(MONTHLY, + byweekday=(MO(+3)), + dtstart=datetime(1997, 9, 1)).between(datetime(1997, + 9, + 1), + datetime(1997, + 12, + 1)), + [datetime(1997, 9, 15, 0, 0), + datetime(1997, 10, 20, 0, 0), + datetime(1997, 11, 17, 0, 0)]) + + def testToStrMonthlyByNWeekDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByNWeekDayLarge(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthAndWeekDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthAndNWeekDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthAndNWeekDayLarge(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthAndMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByYearDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByYearDayNeg(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthAndYearDay(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMonthAndYearDayNeg(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByWeekNo(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByWeekNoAndWeekDayLast(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByWeekNoAndWeekDay53(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByEaster(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByEasterPos(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByEasterNeg(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByHour(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMinute(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyBySecond(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByHourAndMinute(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByHourAndSecond(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyByHourAndMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMonthlyBySetPos(self): + self._rrulestr_reverse_test(rrule(MONTHLY, + count=3, + bymonthday=(13, 17), + byhour=(6, 18), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeekly(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyInterval(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyIntervalLarge(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + interval=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonth(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthAndMonthDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByWeekDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByNWeekDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthAndWeekDay(self): + # This test is interesting, because it crosses the year + # boundary in a weekly period to find day '1' as a + # valid recurrence. + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthAndNWeekDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthAndMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByYearDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByYearDayNeg(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthAndYearDay(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=4, + bymonth=(1, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMonthAndYearDayNeg(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=4, + bymonth=(1, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByWeekNo(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByWeekNoAndWeekDayLast(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByWeekNoAndWeekDay53(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByEaster(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByEasterPos(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByEasterNeg(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByHour(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMinute(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyBySecond(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByHourAndMinute(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByHourAndSecond(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyByHourAndMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrWeeklyBySetPos(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + byweekday=(TU, TH), + byhour=(6, 18), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDaily(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyInterval(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyIntervalLarge(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + interval=92, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonth(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthAndMonthDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByWeekDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByNWeekDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthAndWeekDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthAndNWeekDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthAndMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByYearDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByYearDayNeg(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthAndYearDay(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=4, + bymonth=(1, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMonthAndYearDayNeg(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=4, + bymonth=(1, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByWeekNo(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByWeekNoAndWeekDay(self): + # That's a nice one. The first days of week number one + # may be in the last year. + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByWeekNoAndWeekDayLarge(self): + # Another nice test. The last days of week number 52/53 + # may be in the next year. + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByWeekNoAndWeekDayLast(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByWeekNoAndWeekDay53(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByEaster(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByEasterPos(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByEasterNeg(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByHour(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMinute(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyBySecond(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByHourAndMinute(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByHourAndSecond(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyByHourAndMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrDailyBySetPos(self): + self._rrulestr_reverse_test(rrule(DAILY, + count=3, + byhour=(6, 18), + byminute=(15, 45), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourly(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyInterval(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyIntervalLarge(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + interval=769, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonth(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthAndMonthDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByWeekDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByNWeekDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthAndWeekDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthAndNWeekDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthAndMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByYearDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByYearDayNeg(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthAndYearDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMonthAndYearDayNeg(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByWeekNo(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByWeekNoAndWeekDay(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByWeekNoAndWeekDayLarge(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByWeekNoAndWeekDayLast(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByWeekNoAndWeekDay53(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByEaster(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByEasterPos(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByEasterNeg(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByHour(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMinute(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyBySecond(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByHourAndMinute(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByHourAndSecond(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyByHourAndMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrHourlyBySetPos(self): + self._rrulestr_reverse_test(rrule(HOURLY, + count=3, + byminute=(15, 45), + bysecond=(15, 45), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutely(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyInterval(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyIntervalLarge(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + interval=1501, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonth(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthAndMonthDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByWeekDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByNWeekDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthAndWeekDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthAndNWeekDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthAndMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByYearDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByYearDayNeg(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthAndYearDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMonthAndYearDayNeg(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByWeekNo(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByWeekNoAndWeekDay(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByWeekNoAndWeekDayLarge(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByWeekNoAndWeekDayLast(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByWeekNoAndWeekDay53(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByEaster(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByEasterPos(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByEasterNeg(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByHour(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMinute(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyBySecond(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByHourAndMinute(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByHourAndSecond(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyByHourAndMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrMinutelyBySetPos(self): + self._rrulestr_reverse_test(rrule(MINUTELY, + count=3, + bysecond=(15, 30, 45), + bysetpos=(3, -3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondly(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyInterval(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyIntervalLarge(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + interval=90061, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonth(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthAndMonthDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByWeekDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByNWeekDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthAndWeekDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthAndNWeekDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthAndMonthDayAndWeekDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByYearDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByYearDayNeg(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthAndYearDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=4, + bymonth=(4, 7), + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMonthAndYearDayNeg(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=4, + bymonth=(4, 7), + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByWeekNo(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byweekno=20, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByWeekNoAndWeekDay(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byweekno=1, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByWeekNoAndWeekDayLarge(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byweekno=52, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByWeekNoAndWeekDayLast(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byweekno=-1, + byweekday=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByWeekNoAndWeekDay53(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byweekno=53, + byweekday=MO, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByEaster(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byeaster=0, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByEasterPos(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byeaster=1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByEasterNeg(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byeaster=-1, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByHour(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byhour=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMinute(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyBySecond(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByHourAndMinute(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByHourAndSecond(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byhour=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByHourAndMinuteAndSecond(self): + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + byhour=(6, 18), + byminute=(6, 18), + bysecond=(6, 18), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrSecondlyByHourAndMinuteAndSecondBug(self): + # This explores a bug found by Mathieu Bridon. + self._rrulestr_reverse_test(rrule(SECONDLY, + count=3, + bysecond=(0,), + byminute=(1,), + dtstart=datetime(2010, 3, 22, 12, 1))) + + def testToStrWithWkSt(self): + self._rrulestr_reverse_test(rrule(WEEKLY, + count=3, + wkst=SU, + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testToStrLongIntegers(self): + if not PY3: # There is no longs in python3 + self._rrulestr_reverse_test(rrule(MINUTELY, + count=long(2), + interval=long(2), + bymonth=long(2), + byweekday=long(3), + byhour=long(6), + byminute=long(6), + bysecond=long(6), + dtstart=datetime(1997, 9, 2, 9, 0))) + + self._rrulestr_reverse_test(rrule(YEARLY, + count=long(2), + bymonthday=long(5), + byweekno=long(2), + dtstart=datetime(1997, 9, 2, 9, 0))) + + def testReplaceIfSet(self): + rr = rrule(YEARLY, + count=1, + bymonthday=5, + dtstart=datetime(1997, 1, 1)) + newrr = rr.replace(bymonthday=6) + self.assertEqual(list(rr), [datetime(1997, 1, 5)]) + self.assertEqual(list(newrr), + [datetime(1997, 1, 6)]) + + def testReplaceIfNotSet(self): + rr = rrule(YEARLY, + count=1, + dtstart=datetime(1997, 1, 1)) + newrr = rr.replace(bymonthday=6) + self.assertEqual(list(rr), [datetime(1997, 1, 1)]) + self.assertEqual(list(newrr), + [datetime(1997, 1, 6)]) + + +@pytest.mark.rrule +@freeze_time(datetime(2018, 3, 6, 5, 36, tzinfo=tz.UTC)) +def test_generated_aware_dtstart(): + dtstart_exp = datetime(2018, 3, 6, 5, 36, tzinfo=tz.UTC) + UNTIL = datetime(2018, 3, 6, 8, 0, tzinfo=tz.UTC) + + rule_without_dtstart = rrule(freq=HOURLY, until=UNTIL) + rule_with_dtstart = rrule(freq=HOURLY, dtstart=dtstart_exp, until=UNTIL) + assert list(rule_without_dtstart) == list(rule_with_dtstart) + + +@pytest.mark.rrule +@pytest.mark.rrulestr +@pytest.mark.xfail(reason="rrulestr loses time zone, gh issue #637") +@freeze_time(datetime(2018, 3, 6, 5, 36, tzinfo=tz.UTC)) +def test_generated_aware_dtstart_rrulestr(): + rrule_without_dtstart = rrule(freq=HOURLY, + until=datetime(2018, 3, 6, 8, 0, + tzinfo=tz.UTC)) + rrule_r = rrulestr(str(rrule_without_dtstart)) + + assert list(rrule_r) == list(rrule_without_dtstart) + + +@pytest.mark.rruleset +class RRuleSetTest(unittest.TestCase): + def testSet(self): + rrset = rruleset() + rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, + dtstart=datetime(1997, 9, 2, 9, 0))) + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testSetDate(self): + rrset = rruleset() + rrset.rrule(rrule(YEARLY, count=1, byweekday=TU, + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.rdate(datetime(1997, 9, 4, 9)) + rrset.rdate(datetime(1997, 9, 9, 9)) + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testSetExRule(self): + rrset = rruleset() + rrset.rrule(rrule(YEARLY, count=6, byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.exrule(rrule(YEARLY, count=3, byweekday=TH, + dtstart=datetime(1997, 9, 2, 9, 0))) + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testSetExDate(self): + rrset = rruleset() + rrset.rrule(rrule(YEARLY, count=6, byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.exdate(datetime(1997, 9, 4, 9)) + rrset.exdate(datetime(1997, 9, 11, 9)) + rrset.exdate(datetime(1997, 9, 18, 9)) + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testSetExDateRevOrder(self): + rrset = rruleset() + rrset.rrule(rrule(MONTHLY, count=5, bymonthday=10, + dtstart=datetime(2004, 1, 1, 9, 0))) + rrset.exdate(datetime(2004, 4, 10, 9, 0)) + rrset.exdate(datetime(2004, 2, 10, 9, 0)) + self.assertEqual(list(rrset), + [datetime(2004, 1, 10, 9, 0), + datetime(2004, 3, 10, 9, 0), + datetime(2004, 5, 10, 9, 0)]) + + def testSetDateAndExDate(self): + rrset = rruleset() + rrset.rdate(datetime(1997, 9, 2, 9)) + rrset.rdate(datetime(1997, 9, 4, 9)) + rrset.rdate(datetime(1997, 9, 9, 9)) + rrset.rdate(datetime(1997, 9, 11, 9)) + rrset.rdate(datetime(1997, 9, 16, 9)) + rrset.rdate(datetime(1997, 9, 18, 9)) + rrset.exdate(datetime(1997, 9, 4, 9)) + rrset.exdate(datetime(1997, 9, 11, 9)) + rrset.exdate(datetime(1997, 9, 18, 9)) + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testSetDateAndExRule(self): + rrset = rruleset() + rrset.rdate(datetime(1997, 9, 2, 9)) + rrset.rdate(datetime(1997, 9, 4, 9)) + rrset.rdate(datetime(1997, 9, 9, 9)) + rrset.rdate(datetime(1997, 9, 11, 9)) + rrset.rdate(datetime(1997, 9, 16, 9)) + rrset.rdate(datetime(1997, 9, 18, 9)) + rrset.exrule(rrule(YEARLY, count=3, byweekday=TH, + dtstart=datetime(1997, 9, 2, 9, 0))) + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0)]) + + def testSetCount(self): + rrset = rruleset() + rrset.rrule(rrule(YEARLY, count=6, byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.exrule(rrule(YEARLY, count=3, byweekday=TH, + dtstart=datetime(1997, 9, 2, 9, 0))) + self.assertEqual(rrset.count(), 3) + + def testSetCachePre(self): + rrset = rruleset() + rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, + dtstart=datetime(1997, 9, 2, 9, 0))) + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testSetCachePost(self): + rrset = rruleset(cache=True) + rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, + dtstart=datetime(1997, 9, 2, 9, 0))) + for x in rrset: pass + self.assertEqual(list(rrset), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testSetCachePostInternal(self): + rrset = rruleset(cache=True) + rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, + dtstart=datetime(1997, 9, 2, 9, 0))) + rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, + dtstart=datetime(1997, 9, 2, 9, 0))) + for x in rrset: pass + self.assertEqual(list(rrset._cache), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testSetRRuleCount(self): + # Test that the count is updated when an rrule is added + rrset = rruleset(cache=False) + for cache in (True, False): + rrset = rruleset(cache=cache) + rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, + dtstart=datetime(1983, 4, 1))) + rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, + dtstart=datetime(1991, 6, 3))) + + # Check the length twice - first one sets a cache, second reads it + self.assertEqual(rrset.count(), 6) + self.assertEqual(rrset.count(), 6) + + # This should invalidate the cache and force an update + rrset.rrule(rrule(MONTHLY, count=3, dtstart=datetime(1994, 1, 3))) + + self.assertEqual(rrset.count(), 9) + self.assertEqual(rrset.count(), 9) + + def testSetRDateCount(self): + # Test that the count is updated when an rdate is added + rrset = rruleset(cache=False) + for cache in (True, False): + rrset = rruleset(cache=cache) + rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, + dtstart=datetime(1983, 4, 1))) + rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, + dtstart=datetime(1991, 6, 3))) + + # Check the length twice - first one sets a cache, second reads it + self.assertEqual(rrset.count(), 6) + self.assertEqual(rrset.count(), 6) + + # This should invalidate the cache and force an update + rrset.rdate(datetime(1993, 2, 14)) + + self.assertEqual(rrset.count(), 7) + self.assertEqual(rrset.count(), 7) + + def testSetExRuleCount(self): + # Test that the count is updated when an exrule is added + rrset = rruleset(cache=False) + for cache in (True, False): + rrset = rruleset(cache=cache) + rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, + dtstart=datetime(1983, 4, 1))) + rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, + dtstart=datetime(1991, 6, 3))) + + # Check the length twice - first one sets a cache, second reads it + self.assertEqual(rrset.count(), 6) + self.assertEqual(rrset.count(), 6) + + # This should invalidate the cache and force an update + rrset.exrule(rrule(WEEKLY, count=2, interval=2, + dtstart=datetime(1991, 6, 14))) + + self.assertEqual(rrset.count(), 4) + self.assertEqual(rrset.count(), 4) + + def testSetExDateCount(self): + # Test that the count is updated when an rdate is added + for cache in (True, False): + rrset = rruleset(cache=cache) + rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, + dtstart=datetime(1983, 4, 1))) + rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, + dtstart=datetime(1991, 6, 3))) + + # Check the length twice - first one sets a cache, second reads it + self.assertEqual(rrset.count(), 6) + self.assertEqual(rrset.count(), 6) + + # This should invalidate the cache and force an update + rrset.exdate(datetime(1991, 6, 28)) + + self.assertEqual(rrset.count(), 5) + self.assertEqual(rrset.count(), 5) + + +class WeekdayTest(unittest.TestCase): + def testInvalidNthWeekday(self): + with self.assertRaises(ValueError): + FR(0) + + def testWeekdayCallable(self): + # Calling a weekday instance generates a new weekday instance with the + # value of n changed. + from dateutil.rrule import weekday + self.assertEqual(MO(1), weekday(0, 1)) + + # Calling a weekday instance with the identical n returns the original + # object + FR_3 = weekday(4, 3) + self.assertIs(FR_3(3), FR_3) + + def testWeekdayEquality(self): + # Two weekday objects are not equal if they have different values for n + self.assertNotEqual(TH, TH(-1)) + self.assertNotEqual(SA(3), SA(2)) + + def testWeekdayEqualitySubclass(self): + # Two weekday objects equal if their "weekday" and "n" attributes are + # available and the same + class BasicWeekday(object): + def __init__(self, weekday): + self.weekday = weekday + + class BasicNWeekday(BasicWeekday): + def __init__(self, weekday, n=None): + super(BasicNWeekday, self).__init__(weekday) + self.n = n + + MO_Basic = BasicWeekday(0) + + self.assertNotEqual(MO, MO_Basic) + self.assertNotEqual(MO(1), MO_Basic) + + TU_BasicN = BasicNWeekday(1) + + self.assertEqual(TU, TU_BasicN) + self.assertNotEqual(TU(3), TU_BasicN) + + WE_Basic3 = BasicNWeekday(2, 3) + self.assertEqual(WE(3), WE_Basic3) + self.assertNotEqual(WE(2), WE_Basic3) + + def testWeekdayReprNoN(self): + no_n_reprs = ('MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU') + no_n_wdays = (MO, TU, WE, TH, FR, SA, SU) + + for repstr, wday in zip(no_n_reprs, no_n_wdays): + self.assertEqual(repr(wday), repstr) + + def testWeekdayReprWithN(self): + with_n_reprs = ('WE(+1)', 'TH(-2)', 'SU(+3)') + with_n_wdays = (WE(1), TH(-2), SU(+3)) + + for repstr, wday in zip(with_n_reprs, with_n_wdays): + self.assertEqual(repr(wday), repstr) diff --git a/Windows/dateutil/test/test_tz.py b/Windows/dateutil/test/test_tz.py new file mode 100644 index 00000000..bb0f4b7d --- /dev/null +++ b/Windows/dateutil/test/test_tz.py @@ -0,0 +1,2781 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from ._common import PicklableMixin +from ._common import TZEnvContext, TZWinContext +from ._common import WarningTestMixin +from ._common import ComparesEqual + +from datetime import datetime, timedelta +from datetime import time as dt_time +from datetime import tzinfo +from six import PY2 +from io import BytesIO, StringIO +import unittest + +import sys +import base64 +import copy +import gc +import weakref + +from functools import partial + +IS_WIN = sys.platform.startswith('win') + +import pytest + +# dateutil imports +from dateutil.relativedelta import relativedelta, SU, TH +from dateutil.parser import parse +from dateutil import tz as tz +from dateutil import zoneinfo + +try: + from dateutil import tzwin +except ImportError as e: + if IS_WIN: + raise e + else: + pass + +MISSING_TARBALL = ("This test fails if you don't have the dateutil " + "timezone file installed. Please read the README") + +TZFILE_EST5EDT = b""" +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAADrAAAABAAAABCeph5wn7rrYKCGAHCh +ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e +S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0 +YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg +yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db +wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW +8uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b +YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g +BGD9cAVQ4GAGQN9wBzDCYAeNGXAJEKRgCa2U8ArwhmAL4IVwDNmi4A3AZ3AOuYTgD6mD8BCZZuAR +iWXwEnlI4BNpR/AUWSrgFUkp8BY5DOAXKQvwGCIpYBkI7fAaAgtgGvIKcBvh7WAc0exwHcHPYB6x +znAfobFgIHYA8CGBk2AiVeLwI2qv4CQ1xPAlSpHgJhWm8Ccqc+An/sNwKQpV4CnepXAq6jfgK76H +cCzTVGAtnmlwLrM2YC9+S3AwkxhgMWdn8DJy+mAzR0nwNFLcYDUnK/A2Mr5gNwcN8Dgb2uA45u/w +Ofu84DrG0fA7257gPK/ucD27gOA+j9BwP5ti4EBvsnBBhH9gQk+UcENkYWBEL3ZwRURDYEYPWHBH +JCVgR/h08EkEB2BJ2FbwSuPpYEu4OPBMzQXgTZga8E6s5+BPd/zwUIzJ4FFhGXBSbKvgU0D7cFRM +jeBVIN1wVixv4FcAv3BYFYxgWOChcFn1bmBawINwW9VQYFypn/BdtTJgXomB8F+VFGBgaWPwYX4w +4GJJRfBjXhLgZCkn8GU99OBmEkRwZx3W4GfyJnBo/bjgadIIcGrdmuBrsepwbMa3YG2RzHBupplg +b3GucHCGe2BxWsrwcmZdYHM6rPB0Rj9gdRqO8HYvW+B2+nDweA894HjaUvB57x/gero08HvPAeB8 +o1Fwfa7j4H6DM3B/jsXgAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU +AEVQVAAAAAABAAAAAQ== +""" + +EUROPE_HELSINKI = b""" +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAAAAAB1AAAABQAAAA2kc28Yy85RYMy/hdAV +I+uQFhPckBcDzZAX876QGOOvkBnToJAaw5GQG7y9EBysrhAdnJ8QHoyQEB98gRAgbHIQIVxjECJM +VBAjPEUQJCw2ECUcJxAmDBgQJwVDkCf1NJAo5SWQKdUWkCrFB5ArtPiQLKTpkC2U2pAuhMuQL3S8 +kDBkrZAxXdkQMnK0EDM9uxA0UpYQNR2dEDYyeBA2/X8QOBuUkDjdYRA5+3aQOr1DEDvbWJA8pl+Q +Pbs6kD6GQZA/mxyQQGYjkEGEORBCRgWQQ2QbEEQl55BFQ/0QRgXJkEcj3xBH7uYQSQPBEEnOyBBK +46MQS66qEEzMv5BNjowQTqyhkE9ubhBQjIOQUVeKkFJsZZBTN2yQVExHkFUXTpBWLCmQVvcwkFgV +RhBY1xKQWfUoEFq29JBb1QoQXKAREF207BBef/MQX5TOEGBf1RBhfeqQYj+3EGNdzJBkH5kQZT2u +kGYItZBnHZCQZ+iXkGj9cpBpyHmQat1UkGuoW5BsxnEQbYg9kG6mUxBvaB+QcIY1EHFRPBByZhcQ +czEeEHRF+RB1EQAQdi8VkHbw4hB4DveQeNDEEHnu2ZB6sKYQe867kHyZwpB9rp2QfnmkkH+Of5AC +AQIDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQD +BAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAME +AwQAABdoAAAAACowAQQAABwgAAkAACowAQQAABwgAAlITVQARUVTVABFRVQAAAAAAQEAAAABAQ== +""" + +NEW_YORK = b""" +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAABcAAADrAAAABAAAABCeph5wn7rrYKCGAHCh +ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e +S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0 +YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg +yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db +wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW +8uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b +YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g +BGD9cAVQ4GEGQN9yBzDCYgeNGXMJEKRjCa2U9ArwhmQL4IV1DNmi5Q3AZ3YOuYTmD6mD9xCZZucR +iWX4EnlI6BNpR/kUWSrpFUkp+RY5DOoXKQv6GCIpaxkI7fsaAgtsGvIKfBvh7Wwc0ex8HcHPbR6x +zn0fobFtIHYA/SGBk20iVeL+I2qv7iQ1xP4lSpHuJhWm/ycqc+8n/sOAKQpV8CnepYAq6jfxK76H +gSzTVHItnmmCLrM2cy9+S4MwkxhzMWdoBDJy+nQzR0oENFLcdTUnLAU2Mr51NwcOBjgb2vY45vAG +Ofu89jrG0gY72572PK/uhj27gPY+j9CGP5ti9kBvsoZBhH92Qk+UhkNkYXZEL3aHRURDd0XzqQdH +LV/3R9OLB0kNQfdJs20HSu0j90uciYdM1kB3TXxrh062IndPXE2HUJYEd1E8L4dSdeZ3UxwRh1RV +yHdU+/OHVjWqd1blEAdYHsb3WMTyB1n+qPdapNQHW96K91yEtgddvmz3XmSYB1+eTvdgTbSHYYdr +d2ItlodjZ013ZA14h2VHL3dl7VqHZycRd2fNPIdpBvN3aa0eh2rm1XdrljsHbM/x9212HQdur9P3 +b1X/B3CPtfdxNeEHcm+X93MVwwd0T3n3dP7fh3Y4lnd23sGHeBh4d3i+o4d5+Fp3ep6Fh3vYPHd8 +fmeHfbged35eSYd/mAB3AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU +AEVQVAAEslgAAAAAAQWk7AEAAAACB4YfggAAAAMJZ1MDAAAABAtIhoQAAAAFDSsLhQAAAAYPDD8G +AAAABxDtcocAAAAIEs6mCAAAAAkVn8qJAAAACheA/goAAAALGWIxiwAAAAwdJeoMAAAADSHa5Q0A +AAAOJZ6djgAAAA8nf9EPAAAAECpQ9ZAAAAARLDIpEQAAABIuE1ySAAAAEzDnJBMAAAAUM7hIlAAA +ABU2jBAVAAAAFkO3G5YAAAAXAAAAAQAAAAE= +""" + +TZICAL_EST5EDT = """ +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +TZURL:http://zones.stds_r_us.net/tz/US-Eastern +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +""" + +TZICAL_PST8PDT = """ +BEGIN:VTIMEZONE +TZID:US-Pacific +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +END:DAYLIGHT +END:VTIMEZONE +""" + +EST_TUPLE = ('EST', timedelta(hours=-5), timedelta(hours=0)) +EDT_TUPLE = ('EDT', timedelta(hours=-4), timedelta(hours=1)) + +SUPPORTS_SUB_MINUTE_OFFSETS = sys.version_info >= (3, 6) + + +### +# Helper functions +def get_timezone_tuple(dt): + """Retrieve a (tzname, utcoffset, dst) tuple for a given DST""" + return dt.tzname(), dt.utcoffset(), dt.dst() + + +### +# Mix-ins +class context_passthrough(object): + def __init__(*args, **kwargs): + pass + + def __enter__(*args, **kwargs): + pass + + def __exit__(*args, **kwargs): + pass + + +class TzFoldMixin(object): + """ Mix-in class for testing ambiguous times """ + def gettz(self, tzname): + raise NotImplementedError + + def _get_tzname(self, tzname): + return tzname + + def _gettz_context(self, tzname): + return context_passthrough() + + def testFoldPositiveUTCOffset(self): + # Test that we can resolve ambiguous times + tzname = self._get_tzname('Australia/Sydney') + + with self._gettz_context(tzname): + SYD = self.gettz(tzname) + + t0_u = datetime(2012, 3, 31, 15, 30, tzinfo=tz.tzutc()) # AEST + t1_u = datetime(2012, 3, 31, 16, 30, tzinfo=tz.tzutc()) # AEDT + + t0_syd0 = t0_u.astimezone(SYD) + t1_syd1 = t1_u.astimezone(SYD) + + self.assertEqual(t0_syd0.replace(tzinfo=None), + datetime(2012, 4, 1, 2, 30)) + + self.assertEqual(t1_syd1.replace(tzinfo=None), + datetime(2012, 4, 1, 2, 30)) + + self.assertEqual(t0_syd0.utcoffset(), timedelta(hours=11)) + self.assertEqual(t1_syd1.utcoffset(), timedelta(hours=10)) + + def testGapPositiveUTCOffset(self): + # Test that we don't have a problem around gaps. + tzname = self._get_tzname('Australia/Sydney') + + with self._gettz_context(tzname): + SYD = self.gettz(tzname) + + t0_u = datetime(2012, 10, 6, 15, 30, tzinfo=tz.tzutc()) # AEST + t1_u = datetime(2012, 10, 6, 16, 30, tzinfo=tz.tzutc()) # AEDT + + t0 = t0_u.astimezone(SYD) + t1 = t1_u.astimezone(SYD) + + self.assertEqual(t0.replace(tzinfo=None), + datetime(2012, 10, 7, 1, 30)) + + self.assertEqual(t1.replace(tzinfo=None), + datetime(2012, 10, 7, 3, 30)) + + self.assertEqual(t0.utcoffset(), timedelta(hours=10)) + self.assertEqual(t1.utcoffset(), timedelta(hours=11)) + + def testFoldNegativeUTCOffset(self): + # Test that we can resolve ambiguous times + tzname = self._get_tzname('America/Toronto') + + with self._gettz_context(tzname): + TOR = self.gettz(tzname) + + t0_u = datetime(2011, 11, 6, 5, 30, tzinfo=tz.tzutc()) + t1_u = datetime(2011, 11, 6, 6, 30, tzinfo=tz.tzutc()) + + t0_tor = t0_u.astimezone(TOR) + t1_tor = t1_u.astimezone(TOR) + + self.assertEqual(t0_tor.replace(tzinfo=None), + datetime(2011, 11, 6, 1, 30)) + + self.assertEqual(t1_tor.replace(tzinfo=None), + datetime(2011, 11, 6, 1, 30)) + + self.assertNotEqual(t0_tor.tzname(), t1_tor.tzname()) + self.assertEqual(t0_tor.utcoffset(), timedelta(hours=-4.0)) + self.assertEqual(t1_tor.utcoffset(), timedelta(hours=-5.0)) + + def testGapNegativeUTCOffset(self): + # Test that we don't have a problem around gaps. + tzname = self._get_tzname('America/Toronto') + + with self._gettz_context(tzname): + TOR = self.gettz(tzname) + + t0_u = datetime(2011, 3, 13, 6, 30, tzinfo=tz.tzutc()) + t1_u = datetime(2011, 3, 13, 7, 30, tzinfo=tz.tzutc()) + + t0 = t0_u.astimezone(TOR) + t1 = t1_u.astimezone(TOR) + + self.assertEqual(t0.replace(tzinfo=None), + datetime(2011, 3, 13, 1, 30)) + + self.assertEqual(t1.replace(tzinfo=None), + datetime(2011, 3, 13, 3, 30)) + + self.assertNotEqual(t0, t1) + self.assertEqual(t0.utcoffset(), timedelta(hours=-5.0)) + self.assertEqual(t1.utcoffset(), timedelta(hours=-4.0)) + + def testFoldLondon(self): + tzname = self._get_tzname('Europe/London') + + with self._gettz_context(tzname): + LON = self.gettz(tzname) + UTC = tz.tzutc() + + t0_u = datetime(2013, 10, 27, 0, 30, tzinfo=UTC) # BST + t1_u = datetime(2013, 10, 27, 1, 30, tzinfo=UTC) # GMT + + t0 = t0_u.astimezone(LON) + t1 = t1_u.astimezone(LON) + + self.assertEqual(t0.replace(tzinfo=None), + datetime(2013, 10, 27, 1, 30)) + + self.assertEqual(t1.replace(tzinfo=None), + datetime(2013, 10, 27, 1, 30)) + + self.assertEqual(t0.utcoffset(), timedelta(hours=1)) + self.assertEqual(t1.utcoffset(), timedelta(hours=0)) + + def testFoldIndependence(self): + tzname = self._get_tzname('America/New_York') + + with self._gettz_context(tzname): + NYC = self.gettz(tzname) + UTC = tz.tzutc() + hour = timedelta(hours=1) + + # Firmly 2015-11-01 0:30 EDT-4 + pre_dst = datetime(2015, 11, 1, 0, 30, tzinfo=NYC) + + # Ambiguous between 2015-11-01 1:30 EDT-4 and 2015-11-01 1:30 EST-5 + in_dst = pre_dst + hour + in_dst_tzname_0 = in_dst.tzname() # Stash the tzname - EDT + + # Doing the arithmetic in UTC creates a date that is unambiguously + # 2015-11-01 1:30 EDT-5 + in_dst_via_utc = (pre_dst.astimezone(UTC) + 2*hour).astimezone(NYC) + + # Make sure the dates are actually ambiguous + self.assertEqual(in_dst, in_dst_via_utc) + + # Make sure we got the right folding behavior + self.assertNotEqual(in_dst_via_utc.tzname(), in_dst_tzname_0) + + # Now check to make sure in_dst's tzname hasn't changed + self.assertEqual(in_dst_tzname_0, in_dst.tzname()) + + def testInZoneFoldEquality(self): + # Two datetimes in the same zone are considered to be equal if their + # wall times are equal, even if they have different absolute times. + + tzname = self._get_tzname('America/New_York') + + with self._gettz_context(tzname): + NYC = self.gettz(tzname) + UTC = tz.tzutc() + + dt0 = datetime(2011, 11, 6, 1, 30, tzinfo=NYC) + dt1 = tz.enfold(dt0, fold=1) + + # Make sure these actually represent different times + self.assertNotEqual(dt0.astimezone(UTC), dt1.astimezone(UTC)) + + # Test that they compare equal + self.assertEqual(dt0, dt1) + + def _test_ambiguous_time(self, dt, tzid, ambiguous): + # This is a test to check that the individual is_ambiguous values + # on the _tzinfo subclasses work. + tzname = self._get_tzname(tzid) + + with self._gettz_context(tzname): + tzi = self.gettz(tzname) + + self.assertEqual(tz.datetime_ambiguous(dt, tz=tzi), ambiguous) + + def testAmbiguousNegativeUTCOffset(self): + self._test_ambiguous_time(datetime(2015, 11, 1, 1, 30), + 'America/New_York', True) + + def testAmbiguousPositiveUTCOffset(self): + self._test_ambiguous_time(datetime(2012, 4, 1, 2, 30), + 'Australia/Sydney', True) + + def testUnambiguousNegativeUTCOffset(self): + self._test_ambiguous_time(datetime(2015, 11, 1, 2, 30), + 'America/New_York', False) + + def testUnambiguousPositiveUTCOffset(self): + self._test_ambiguous_time(datetime(2012, 4, 1, 3, 30), + 'Australia/Sydney', False) + + def testUnambiguousGapNegativeUTCOffset(self): + # Imaginary time + self._test_ambiguous_time(datetime(2011, 3, 13, 2, 30), + 'America/New_York', False) + + def testUnambiguousGapPositiveUTCOffset(self): + # Imaginary time + self._test_ambiguous_time(datetime(2012, 10, 7, 2, 30), + 'Australia/Sydney', False) + + def _test_imaginary_time(self, dt, tzid, exists): + tzname = self._get_tzname(tzid) + with self._gettz_context(tzname): + tzi = self.gettz(tzname) + + self.assertEqual(tz.datetime_exists(dt, tz=tzi), exists) + + def testImaginaryNegativeUTCOffset(self): + self._test_imaginary_time(datetime(2011, 3, 13, 2, 30), + 'America/New_York', False) + + def testNotImaginaryNegativeUTCOffset(self): + self._test_imaginary_time(datetime(2011, 3, 13, 1, 30), + 'America/New_York', True) + + def testImaginaryPositiveUTCOffset(self): + self._test_imaginary_time(datetime(2012, 10, 7, 2, 30), + 'Australia/Sydney', False) + + def testNotImaginaryPositiveUTCOffset(self): + self._test_imaginary_time(datetime(2012, 10, 7, 1, 30), + 'Australia/Sydney', True) + + def testNotImaginaryFoldNegativeUTCOffset(self): + self._test_imaginary_time(datetime(2015, 11, 1, 1, 30), + 'America/New_York', True) + + def testNotImaginaryFoldPositiveUTCOffset(self): + self._test_imaginary_time(datetime(2012, 4, 1, 3, 30), + 'Australia/Sydney', True) + + @unittest.skip("Known failure in Python 3.6.") + def testEqualAmbiguousComparison(self): + tzname = self._get_tzname('Australia/Sydney') + + with self._gettz_context(tzname): + SYD0 = self.gettz(tzname) + SYD1 = self.gettz(tzname) + + t0_u = datetime(2012, 3, 31, 14, 30, tzinfo=tz.tzutc()) # AEST + + t0_syd0 = t0_u.astimezone(SYD0) + t0_syd1 = t0_u.astimezone(SYD1) + + # This is considered an "inter-zone comparison" because it's an + # ambiguous datetime. + self.assertEqual(t0_syd0, t0_syd1) + + +class TzWinFoldMixin(object): + def get_args(self, tzname): + return (tzname, ) + + class context(object): + def __init__(*args, **kwargs): + pass + + def __enter__(*args, **kwargs): + pass + + def __exit__(*args, **kwargs): + pass + + def get_utc_transitions(self, tzi, year, gap): + dston, dstoff = tzi.transitions(year) + if gap: + t_n = dston - timedelta(minutes=30) + + t0_u = t_n.replace(tzinfo=tzi).astimezone(tz.tzutc()) + t1_u = t0_u + timedelta(hours=1) + else: + # Get 1 hour before the first ambiguous date + t_n = dstoff - timedelta(minutes=30) + + t0_u = t_n.replace(tzinfo=tzi).astimezone(tz.tzutc()) + t_n += timedelta(hours=1) # Naive ambiguous date + t0_u = t0_u + timedelta(hours=1) # First ambiguous date + t1_u = t0_u + timedelta(hours=1) # Second ambiguous date + + return t_n, t0_u, t1_u + + def testFoldPositiveUTCOffset(self): + # Test that we can resolve ambiguous times + tzname = 'AUS Eastern Standard Time' + args = self.get_args(tzname) + + with self.context(tzname): + # Calling fromutc() alters the tzfile object + SYD = self.tzclass(*args) + + # Get the transition time in UTC from the object, because + # Windows doesn't store historical info + t_n, t0_u, t1_u = self.get_utc_transitions(SYD, 2012, False) + + # Using fresh tzfiles + t0_syd = t0_u.astimezone(SYD) + t1_syd = t1_u.astimezone(SYD) + + self.assertEqual(t0_syd.replace(tzinfo=None), t_n) + + self.assertEqual(t1_syd.replace(tzinfo=None), t_n) + + self.assertEqual(t0_syd.utcoffset(), timedelta(hours=11)) + self.assertEqual(t1_syd.utcoffset(), timedelta(hours=10)) + self.assertNotEqual(t0_syd.tzname(), t1_syd.tzname()) + + def testGapPositiveUTCOffset(self): + # Test that we don't have a problem around gaps. + tzname = 'AUS Eastern Standard Time' + args = self.get_args(tzname) + + with self.context(tzname): + SYD = self.tzclass(*args) + + t_n, t0_u, t1_u = self.get_utc_transitions(SYD, 2012, True) + + t0 = t0_u.astimezone(SYD) + t1 = t1_u.astimezone(SYD) + + self.assertEqual(t0.replace(tzinfo=None), t_n) + + self.assertEqual(t1.replace(tzinfo=None), t_n + timedelta(hours=2)) + + self.assertEqual(t0.utcoffset(), timedelta(hours=10)) + self.assertEqual(t1.utcoffset(), timedelta(hours=11)) + + def testFoldNegativeUTCOffset(self): + # Test that we can resolve ambiguous times + tzname = 'Eastern Standard Time' + args = self.get_args(tzname) + + with self.context(tzname): + TOR = self.tzclass(*args) + + t_n, t0_u, t1_u = self.get_utc_transitions(TOR, 2011, False) + + t0_tor = t0_u.astimezone(TOR) + t1_tor = t1_u.astimezone(TOR) + + self.assertEqual(t0_tor.replace(tzinfo=None), t_n) + self.assertEqual(t1_tor.replace(tzinfo=None), t_n) + + self.assertNotEqual(t0_tor.tzname(), t1_tor.tzname()) + self.assertEqual(t0_tor.utcoffset(), timedelta(hours=-4.0)) + self.assertEqual(t1_tor.utcoffset(), timedelta(hours=-5.0)) + + def testGapNegativeUTCOffset(self): + # Test that we don't have a problem around gaps. + tzname = 'Eastern Standard Time' + args = self.get_args(tzname) + + with self.context(tzname): + TOR = self.tzclass(*args) + + t_n, t0_u, t1_u = self.get_utc_transitions(TOR, 2011, True) + + t0 = t0_u.astimezone(TOR) + t1 = t1_u.astimezone(TOR) + + self.assertEqual(t0.replace(tzinfo=None), + t_n) + + self.assertEqual(t1.replace(tzinfo=None), + t_n + timedelta(hours=2)) + + self.assertNotEqual(t0.tzname(), t1.tzname()) + self.assertEqual(t0.utcoffset(), timedelta(hours=-5.0)) + self.assertEqual(t1.utcoffset(), timedelta(hours=-4.0)) + + def testFoldIndependence(self): + tzname = 'Eastern Standard Time' + args = self.get_args(tzname) + + with self.context(tzname): + NYC = self.tzclass(*args) + UTC = tz.tzutc() + hour = timedelta(hours=1) + + # Firmly 2015-11-01 0:30 EDT-4 + t_n, t0_u, t1_u = self.get_utc_transitions(NYC, 2015, False) + + pre_dst = (t_n - hour).replace(tzinfo=NYC) + + # Currently, there's no way around the fact that this resolves to an + # ambiguous date, which defaults to EST. I'm not hard-coding in the + # answer, though, because the preferred behavior would be that this + # results in a time on the EDT side. + + # Ambiguous between 2015-11-01 1:30 EDT-4 and 2015-11-01 1:30 EST-5 + in_dst = pre_dst + hour + in_dst_tzname_0 = in_dst.tzname() # Stash the tzname - EDT + + # Doing the arithmetic in UTC creates a date that is unambiguously + # 2015-11-01 1:30 EDT-5 + in_dst_via_utc = (pre_dst.astimezone(UTC) + 2*hour).astimezone(NYC) + + # Make sure we got the right folding behavior + self.assertNotEqual(in_dst_via_utc.tzname(), in_dst_tzname_0) + + # Now check to make sure in_dst's tzname hasn't changed + self.assertEqual(in_dst_tzname_0, in_dst.tzname()) + + def testInZoneFoldEquality(self): + # Two datetimes in the same zone are considered to be equal if their + # wall times are equal, even if they have different absolute times. + tzname = 'Eastern Standard Time' + args = self.get_args(tzname) + + with self.context(tzname): + NYC = self.tzclass(*args) + UTC = tz.tzutc() + + t_n, t0_u, t1_u = self.get_utc_transitions(NYC, 2011, False) + + dt0 = t_n.replace(tzinfo=NYC) + dt1 = tz.enfold(dt0, fold=1) + + # Make sure these actually represent different times + self.assertNotEqual(dt0.astimezone(UTC), dt1.astimezone(UTC)) + + # Test that they compare equal + self.assertEqual(dt0, dt1) + +### +# Test Cases +class TzUTCTest(unittest.TestCase): + def testSingleton(self): + UTC_0 = tz.tzutc() + UTC_1 = tz.tzutc() + + self.assertIs(UTC_0, UTC_1) + + def testOffset(self): + ct = datetime(2009, 4, 1, 12, 11, 13, tzinfo=tz.tzutc()) + + self.assertEqual(ct.utcoffset(), timedelta(seconds=0)) + + def testDst(self): + ct = datetime(2009, 4, 1, 12, 11, 13, tzinfo=tz.tzutc()) + + self.assertEqual(ct.dst(), timedelta(seconds=0)) + + def testTzName(self): + ct = datetime(2009, 4, 1, 12, 11, 13, tzinfo=tz.tzutc()) + self.assertEqual(ct.tzname(), 'UTC') + + def testEquality(self): + UTC0 = tz.tzutc() + UTC1 = tz.tzutc() + + self.assertEqual(UTC0, UTC1) + + def testInequality(self): + UTC = tz.tzutc() + UTCp4 = tz.tzoffset('UTC+4', 14400) + + self.assertNotEqual(UTC, UTCp4) + + def testInequalityInteger(self): + self.assertFalse(tz.tzutc() == 7) + self.assertNotEqual(tz.tzutc(), 7) + + def testInequalityUnsupported(self): + self.assertEqual(tz.tzutc(), ComparesEqual) + + def testRepr(self): + UTC = tz.tzutc() + self.assertEqual(repr(UTC), 'tzutc()') + + def testTimeOnlyUTC(self): + # https://github.com/dateutil/dateutil/issues/132 + # tzutc doesn't care + tz_utc = tz.tzutc() + self.assertEqual(dt_time(13, 20, tzinfo=tz_utc).utcoffset(), + timedelta(0)) + + def testAmbiguity(self): + # Pick an arbitrary datetime, this should always return False. + dt = datetime(2011, 9, 1, 2, 30, tzinfo=tz.tzutc()) + + self.assertFalse(tz.datetime_ambiguous(dt)) + + +@pytest.mark.tzoffset +class TzOffsetTest(unittest.TestCase): + def testTimedeltaOffset(self): + est = tz.tzoffset('EST', timedelta(hours=-5)) + est_s = tz.tzoffset('EST', -18000) + + self.assertEqual(est, est_s) + + def testTzNameNone(self): + gmt5 = tz.tzoffset(None, -18000) # -5:00 + self.assertIs(datetime(2003, 10, 26, 0, 0, tzinfo=gmt5).tzname(), + None) + + def testTimeOnlyOffset(self): + # tzoffset doesn't care + tz_offset = tz.tzoffset('+3', 3600) + self.assertEqual(dt_time(13, 20, tzinfo=tz_offset).utcoffset(), + timedelta(seconds=3600)) + + def testTzOffsetRepr(self): + tname = 'EST' + tzo = tz.tzoffset(tname, -5 * 3600) + self.assertEqual(repr(tzo), "tzoffset(" + repr(tname) + ", -18000)") + + def testEquality(self): + utc = tz.tzoffset('UTC', 0) + gmt = tz.tzoffset('GMT', 0) + + self.assertEqual(utc, gmt) + + def testUTCEquality(self): + utc = tz.tzutc() + o_utc = tz.tzoffset('UTC', 0) + + self.assertEqual(utc, o_utc) + self.assertEqual(o_utc, utc) + + def testInequalityInvalid(self): + tzo = tz.tzoffset('-3', -3 * 3600) + self.assertFalse(tzo == -3) + self.assertNotEqual(tzo, -3) + + def testInequalityUnsupported(self): + tzo = tz.tzoffset('-5', -5 * 3600) + + self.assertTrue(tzo == ComparesEqual) + self.assertFalse(tzo != ComparesEqual) + self.assertEqual(tzo, ComparesEqual) + + def testAmbiguity(self): + # Pick an arbitrary datetime, this should always return False. + dt = datetime(2011, 9, 1, 2, 30, tzinfo=tz.tzoffset("EST", -5 * 3600)) + + self.assertFalse(tz.datetime_ambiguous(dt)) + + def testTzOffsetInstance(self): + tz1 = tz.tzoffset.instance('EST', timedelta(hours=-5)) + tz2 = tz.tzoffset.instance('EST', timedelta(hours=-5)) + + assert tz1 is not tz2 + + def testTzOffsetSingletonDifferent(self): + tz1 = tz.tzoffset('EST', timedelta(hours=-5)) + tz2 = tz.tzoffset('EST', -18000) + + assert tz1 is tz2 + + +@pytest.mark.smoke +@pytest.mark.tzoffset +def test_tzoffset_weakref(): + UTC1 = tz.tzoffset('UTC', 0) + UTC_ref = weakref.ref(tz.tzoffset('UTC', 0)) + UTC1 is UTC_ref() + del UTC1 + gc.collect() + + assert UTC_ref() is not None # Should be in the strong cache + assert UTC_ref() is tz.tzoffset('UTC', 0) + + # Fill the strong cache with other items + for offset in range(5,15): + tz.tzoffset('RandomZone', offset) + + gc.collect() + assert UTC_ref() is None + assert UTC_ref() is not tz.tzoffset('UTC', 0) + + +@pytest.mark.tzoffset +@pytest.mark.parametrize('args', [ + ('UTC', 0), + ('EST', -18000), + ('EST', timedelta(hours=-5)), + (None, timedelta(hours=3)), +]) +def test_tzoffset_singleton(args): + tz1 = tz.tzoffset(*args) + tz2 = tz.tzoffset(*args) + + assert tz1 is tz2 + + +@pytest.mark.tzoffset +@pytest.mark.skipif(not SUPPORTS_SUB_MINUTE_OFFSETS, + reason='Sub-minute offsets not supported') +def test_tzoffset_sub_minute(): + delta = timedelta(hours=12, seconds=30) + test_datetime = datetime(2000, 1, 1, tzinfo=tz.tzoffset(None, delta)) + assert test_datetime.utcoffset() == delta + + +@pytest.mark.tzoffset +@pytest.mark.skipif(SUPPORTS_SUB_MINUTE_OFFSETS, + reason='Sub-minute offsets supported') +def test_tzoffset_sub_minute_rounding(): + delta = timedelta(hours=12, seconds=30) + test_date = datetime(2000, 1, 1, tzinfo=tz.tzoffset(None, delta)) + assert test_date.utcoffset() == timedelta(hours=12, minutes=1) + + +@pytest.mark.tzlocal +class TzLocalTest(unittest.TestCase): + def testEquality(self): + tz1 = tz.tzlocal() + tz2 = tz.tzlocal() + + # Explicitly calling == and != here to ensure the operators work + self.assertTrue(tz1 == tz2) + self.assertFalse(tz1 != tz2) + + def testInequalityFixedOffset(self): + tzl = tz.tzlocal() + tzos = tz.tzoffset('LST', tzl._std_offset.total_seconds()) + tzod = tz.tzoffset('LDT', tzl._std_offset.total_seconds()) + + self.assertFalse(tzl == tzos) + self.assertFalse(tzl == tzod) + self.assertTrue(tzl != tzos) + self.assertTrue(tzl != tzod) + + def testInequalityInvalid(self): + tzl = tz.tzlocal() + + self.assertTrue(tzl != 1) + self.assertFalse(tzl == 1) + + # TODO: Use some sort of universal local mocking so that it's clear + # that we're expecting tzlocal to *not* be Pacific/Kiritimati + LINT = tz.gettz('Pacific/Kiritimati') + self.assertTrue(tzl != LINT) + self.assertFalse(tzl == LINT) + + def testInequalityUnsupported(self): + tzl = tz.tzlocal() + + self.assertTrue(tzl == ComparesEqual) + self.assertFalse(tzl != ComparesEqual) + + def testRepr(self): + tzl = tz.tzlocal() + + self.assertEqual(repr(tzl), 'tzlocal()') + + +@pytest.mark.parametrize('args,kwargs', [ + (('EST', -18000), {}), + (('EST', timedelta(hours=-5)), {}), + (('EST',), {'offset': -18000}), + (('EST',), {'offset': timedelta(hours=-5)}), + (tuple(), {'name': 'EST', 'offset': -18000}) +]) +def test_tzoffset_is(args, kwargs): + tz_ref = tz.tzoffset('EST', -18000) + assert tz.tzoffset(*args, **kwargs) is tz_ref + + +def test_tzoffset_is_not(): + assert tz.tzoffset('EDT', -14400) is not tz.tzoffset('EST', -18000) + + +@pytest.mark.tzlocal +@unittest.skipIf(IS_WIN, "requires Unix") +@unittest.skipUnless(TZEnvContext.tz_change_allowed(), + TZEnvContext.tz_change_disallowed_message()) +class TzLocalNixTest(unittest.TestCase, TzFoldMixin): + # This is a set of tests for `tzlocal()` on *nix systems + + # POSIX string indicating change to summer time on the 2nd Sunday in March + # at 2AM, and ending the 1st Sunday in November at 2AM. (valid >= 2007) + TZ_EST = 'EST+5EDT,M3.2.0/2,M11.1.0/2' + + # POSIX string for AEST/AEDT (valid >= 2008) + TZ_AEST = 'AEST-10AEDT,M10.1.0/2,M4.1.0/3' + + # POSIX string for BST/GMT + TZ_LON = 'GMT0BST,M3.5.0,M10.5.0' + + # POSIX string for UTC + UTC = 'UTC' + + def gettz(self, tzname): + # Actual time zone changes are handled by the _gettz_context function + return tz.tzlocal() + + def _gettz_context(self, tzname): + tzname_map = {'Australia/Sydney': self.TZ_AEST, + 'America/Toronto': self.TZ_EST, + 'America/New_York': self.TZ_EST, + 'Europe/London': self.TZ_LON} + + return TZEnvContext(tzname_map.get(tzname, tzname)) + + def _testTzFunc(self, tzval, func, std_val, dst_val): + """ + This generates tests about how the behavior of a function ``func`` + changes between STD and DST (e.g. utcoffset, tzname, dst). + + It assume that DST starts the 2nd Sunday in March and ends the 1st + Sunday in November + """ + with TZEnvContext(tzval): + dt1 = datetime(2015, 2, 1, 12, 0, tzinfo=tz.tzlocal()) # STD + dt2 = datetime(2015, 5, 1, 12, 0, tzinfo=tz.tzlocal()) # DST + + self.assertEqual(func(dt1), std_val) + self.assertEqual(func(dt2), dst_val) + + def _testTzName(self, tzval, std_name, dst_name): + func = datetime.tzname + + self._testTzFunc(tzval, func, std_name, dst_name) + + def testTzNameDST(self): + # Test tzname in a zone with DST + self._testTzName(self.TZ_EST, 'EST', 'EDT') + + def testTzNameUTC(self): + # Test tzname in a zone without DST + self._testTzName(self.UTC, 'UTC', 'UTC') + + def _testOffset(self, tzval, std_off, dst_off): + func = datetime.utcoffset + + self._testTzFunc(tzval, func, std_off, dst_off) + + def testOffsetDST(self): + self._testOffset(self.TZ_EST, timedelta(hours=-5), timedelta(hours=-4)) + + def testOffsetUTC(self): + self._testOffset(self.UTC, timedelta(0), timedelta(0)) + + def _testDST(self, tzval, dst_dst): + func = datetime.dst + std_dst = timedelta(0) + + self._testTzFunc(tzval, func, std_dst, dst_dst) + + def testDSTDST(self): + self._testDST(self.TZ_EST, timedelta(hours=1)) + + def testDSTUTC(self): + self._testDST(self.UTC, timedelta(0)) + + def testTimeOnlyOffsetLocalUTC(self): + with TZEnvContext(self.UTC): + self.assertEqual(dt_time(13, 20, tzinfo=tz.tzlocal()).utcoffset(), + timedelta(0)) + + def testTimeOnlyOffsetLocalDST(self): + with TZEnvContext(self.TZ_EST): + self.assertIs(dt_time(13, 20, tzinfo=tz.tzlocal()).utcoffset(), + None) + + def testTimeOnlyDSTLocalUTC(self): + with TZEnvContext(self.UTC): + self.assertEqual(dt_time(13, 20, tzinfo=tz.tzlocal()).dst(), + timedelta(0)) + + def testTimeOnlyDSTLocalDST(self): + with TZEnvContext(self.TZ_EST): + self.assertIs(dt_time(13, 20, tzinfo=tz.tzlocal()).dst(), + None) + + def testUTCEquality(self): + with TZEnvContext(self.UTC): + assert tz.tzlocal() == tz.tzutc() + + +# TODO: Maybe a better hack than this? +def mark_tzlocal_nix(f): + marks = [ + pytest.mark.tzlocal, + pytest.mark.skipif(IS_WIN, reason='requires Unix'), + pytest.mark.skipif(not TZEnvContext.tz_change_allowed, + reason=TZEnvContext.tz_change_disallowed_message()) + ] + + for mark in reversed(marks): + f = mark(f) + + return f + + +@mark_tzlocal_nix +@pytest.mark.parametrize('tzvar', ['UTC', 'GMT0', 'UTC0']) +def test_tzlocal_utc_equal(tzvar): + with TZEnvContext(tzvar): + assert tz.tzlocal() == tz.UTC + + +@mark_tzlocal_nix +@pytest.mark.parametrize('tzvar', [ + 'Europe/London', 'America/New_York', + 'GMT0BST', 'EST5EDT']) +def test_tzlocal_utc_unequal(tzvar): + with TZEnvContext(tzvar): + assert tz.tzlocal() != tz.UTC + + +@mark_tzlocal_nix +def test_tzlocal_local_time_trim_colon(): + with TZEnvContext(':/etc/localtime'): + assert tz.gettz() is not None + + +@mark_tzlocal_nix +@pytest.mark.parametrize('tzvar, tzoff', [ + ('EST5', tz.tzoffset('EST', -18000)), + ('GMT', tz.tzoffset('GMT', 0)), + ('YAKT-9', tz.tzoffset('YAKT', timedelta(hours=9))), + ('JST-9', tz.tzoffset('JST', timedelta(hours=9))), +]) +def test_tzlocal_offset_equal(tzvar, tzoff): + with TZEnvContext(tzvar): + # Including both to test both __eq__ and __ne__ + assert tz.tzlocal() == tzoff + assert not (tz.tzlocal() != tzoff) + + +@mark_tzlocal_nix +@pytest.mark.parametrize('tzvar, tzoff', [ + ('EST5EDT', tz.tzoffset('EST', -18000)), + ('GMT0BST', tz.tzoffset('GMT', 0)), + ('EST5', tz.tzoffset('EST', -14400)), + ('YAKT-9', tz.tzoffset('JST', timedelta(hours=9))), + ('JST-9', tz.tzoffset('YAKT', timedelta(hours=9))), +]) +def test_tzlocal_offset_unequal(tzvar, tzoff): + with TZEnvContext(tzvar): + # Including both to test both __eq__ and __ne__ + assert tz.tzlocal() != tzoff + assert not (tz.tzlocal() == tzoff) + + +@pytest.mark.gettz +class GettzTest(unittest.TestCase, TzFoldMixin): + gettz = staticmethod(tz.gettz) + + def testGettz(self): + # bug 892569 + str(self.gettz('UTC')) + + def testGetTzEquality(self): + self.assertEqual(self.gettz('UTC'), self.gettz('UTC')) + + def testTimeOnlyGettz(self): + # gettz returns None + tz_get = self.gettz('Europe/Minsk') + self.assertIs(dt_time(13, 20, tzinfo=tz_get).utcoffset(), None) + + def testTimeOnlyGettzDST(self): + # gettz returns None + tz_get = self.gettz('Europe/Minsk') + self.assertIs(dt_time(13, 20, tzinfo=tz_get).dst(), None) + + def testTimeOnlyGettzTzName(self): + tz_get = self.gettz('Europe/Minsk') + self.assertIs(dt_time(13, 20, tzinfo=tz_get).tzname(), None) + + def testTimeOnlyFormatZ(self): + tz_get = self.gettz('Europe/Minsk') + t = dt_time(13, 20, tzinfo=tz_get) + + self.assertEqual(t.strftime('%H%M%Z'), '1320') + + def testPortugalDST(self): + # In 1996, Portugal changed from CET to WET + PORTUGAL = self.gettz('Portugal') + + t_cet = datetime(1996, 3, 31, 1, 59, tzinfo=PORTUGAL) + + self.assertEqual(t_cet.tzname(), 'CET') + self.assertEqual(t_cet.utcoffset(), timedelta(hours=1)) + self.assertEqual(t_cet.dst(), timedelta(0)) + + t_west = datetime(1996, 3, 31, 2, 1, tzinfo=PORTUGAL) + + self.assertEqual(t_west.tzname(), 'WEST') + self.assertEqual(t_west.utcoffset(), timedelta(hours=1)) + self.assertEqual(t_west.dst(), timedelta(hours=1)) + + def testGettzCacheTzFile(self): + NYC1 = tz.gettz('America/New_York') + NYC2 = tz.gettz('America/New_York') + + assert NYC1 is NYC2 + + def testGettzCacheTzLocal(self): + local1 = tz.gettz() + local2 = tz.gettz() + + assert local1 is not local2 + + +@pytest.mark.gettz +@pytest.mark.parametrize('badzone', [ + 'Fake.Region/Abcdefghijklmnop', # Violates several tz project name rules +]) +def test_gettz_badzone(badzone): + # Make sure passing a bad TZ string to gettz returns None (GH #800) + tzi = tz.gettz(badzone) + assert tzi is None + + +@pytest.mark.gettz +def test_gettz_badzone_unicode(): + # Make sure a unicode string can be passed to TZ (GH #802) + # When fixed, combine this with test_gettz_badzone + tzi = tz.gettz('🐼') + assert tzi is None + + +@pytest.mark.gettz +@pytest.mark.xfail(IS_WIN, reason='zoneinfo separately cached') +def test_gettz_cache_clear(): + NYC1 = tz.gettz('America/New_York') + tz.gettz.cache_clear() + + NYC2 = tz.gettz('America/New_York') + + assert NYC1 is not NYC2 + +@pytest.mark.gettz +@pytest.mark.xfail(IS_WIN, reason='zoneinfo separately cached') +def test_gettz_set_cache_size(): + tz.gettz.cache_clear() + tz.gettz.set_cache_size(3) + + MONACO_ref = weakref.ref(tz.gettz('Europe/Monaco')) + EASTER_ref = weakref.ref(tz.gettz('Pacific/Easter')) + CURRIE_ref = weakref.ref(tz.gettz('Australia/Currie')) + + gc.collect() + + assert MONACO_ref() is not None + assert EASTER_ref() is not None + assert CURRIE_ref() is not None + + tz.gettz.set_cache_size(2) + gc.collect() + + assert MONACO_ref() is None + +@pytest.mark.xfail(IS_WIN, reason="Windows does not use system zoneinfo") +@pytest.mark.smoke +@pytest.mark.gettz +def test_gettz_weakref(): + tz.gettz.cache_clear() + tz.gettz.set_cache_size(2) + NYC1 = tz.gettz('America/New_York') + NYC_ref = weakref.ref(tz.gettz('America/New_York')) + + assert NYC1 is NYC_ref() + + del NYC1 + gc.collect() + + assert NYC_ref() is not None # Should still be in the strong cache + assert tz.gettz('America/New_York') is NYC_ref() + + # Populate strong cache with other timezones + tz.gettz('Europe/Monaco') + tz.gettz('Pacific/Easter') + tz.gettz('Australia/Currie') + + gc.collect() + assert NYC_ref() is None # Should have been pushed out + assert tz.gettz('America/New_York') is not NYC_ref() + +class ZoneInfoGettzTest(GettzTest, WarningTestMixin): + def gettz(self, name): + zoneinfo_file = zoneinfo.get_zonefile_instance() + return zoneinfo_file.get(name) + + def testZoneInfoFileStart1(self): + tz = self.gettz("EST5EDT") + self.assertEqual(datetime(2003, 4, 6, 1, 59, tzinfo=tz).tzname(), "EST", + MISSING_TARBALL) + self.assertEqual(datetime(2003, 4, 6, 2, 00, tzinfo=tz).tzname(), "EDT") + + def testZoneInfoFileEnd1(self): + tzc = self.gettz("EST5EDT") + self.assertEqual(datetime(2003, 10, 26, 0, 59, tzinfo=tzc).tzname(), + "EDT", MISSING_TARBALL) + + end_est = tz.enfold(datetime(2003, 10, 26, 1, 00, tzinfo=tzc), fold=1) + self.assertEqual(end_est.tzname(), "EST") + + def testZoneInfoOffsetSignal(self): + utc = self.gettz("UTC") + nyc = self.gettz("America/New_York") + self.assertNotEqual(utc, None, MISSING_TARBALL) + self.assertNotEqual(nyc, None) + t0 = datetime(2007, 11, 4, 0, 30, tzinfo=nyc) + t1 = t0.astimezone(utc) + t2 = t1.astimezone(nyc) + self.assertEqual(t0, t2) + self.assertEqual(nyc.dst(t0), timedelta(hours=1)) + + def testZoneInfoCopy(self): + # copy.copy() called on a ZoneInfo file was returning the same instance + CHI = self.gettz('America/Chicago') + CHI_COPY = copy.copy(CHI) + + self.assertIsNot(CHI, CHI_COPY) + self.assertEqual(CHI, CHI_COPY) + + def testZoneInfoDeepCopy(self): + CHI = self.gettz('America/Chicago') + CHI_COPY = copy.deepcopy(CHI) + + self.assertIsNot(CHI, CHI_COPY) + self.assertEqual(CHI, CHI_COPY) + + def testZoneInfoInstanceCaching(self): + zif_0 = zoneinfo.get_zonefile_instance() + zif_1 = zoneinfo.get_zonefile_instance() + + self.assertIs(zif_0, zif_1) + + def testZoneInfoNewInstance(self): + zif_0 = zoneinfo.get_zonefile_instance() + zif_1 = zoneinfo.get_zonefile_instance(new_instance=True) + zif_2 = zoneinfo.get_zonefile_instance() + + self.assertIsNot(zif_0, zif_1) + self.assertIs(zif_1, zif_2) + + def testZoneInfoDeprecated(self): + with self.assertWarns(DeprecationWarning): + zoneinfo.gettz('US/Eastern') + + def testZoneInfoMetadataDeprecated(self): + with self.assertWarns(DeprecationWarning): + zoneinfo.gettz_db_metadata() + + +class TZRangeTest(unittest.TestCase, TzFoldMixin): + TZ_EST = tz.tzrange('EST', timedelta(hours=-5), + 'EDT', timedelta(hours=-4), + start=relativedelta(month=3, day=1, hour=2, + weekday=SU(+2)), + end=relativedelta(month=11, day=1, hour=1, + weekday=SU(+1))) + + TZ_AEST = tz.tzrange('AEST', timedelta(hours=10), + 'AEDT', timedelta(hours=11), + start=relativedelta(month=10, day=1, hour=2, + weekday=SU(+1)), + end=relativedelta(month=4, day=1, hour=2, + weekday=SU(+1))) + + TZ_LON = tz.tzrange('GMT', timedelta(hours=0), + 'BST', timedelta(hours=1), + start=relativedelta(month=3, day=31, weekday=SU(-1), + hours=2), + end=relativedelta(month=10, day=31, weekday=SU(-1), + hours=1)) + # POSIX string for UTC + UTC = 'UTC' + + def gettz(self, tzname): + tzname_map = {'Australia/Sydney': self.TZ_AEST, + 'America/Toronto': self.TZ_EST, + 'America/New_York': self.TZ_EST, + 'Europe/London': self.TZ_LON} + + return tzname_map[tzname] + + def testRangeCmp1(self): + self.assertEqual(tz.tzstr("EST5EDT"), + tz.tzrange("EST", -18000, "EDT", -14400, + relativedelta(hours=+2, + month=4, day=1, + weekday=SU(+1)), + relativedelta(hours=+1, + month=10, day=31, + weekday=SU(-1)))) + + def testRangeCmp2(self): + self.assertEqual(tz.tzstr("EST5EDT"), + tz.tzrange("EST", -18000, "EDT")) + + def testRangeOffsets(self): + TZR = tz.tzrange('EST', -18000, 'EDT', -14400, + start=relativedelta(hours=2, month=4, day=1, + weekday=SU(+2)), + end=relativedelta(hours=1, month=10, day=31, + weekday=SU(-1))) + + dt_std = datetime(2014, 4, 11, 12, 0, tzinfo=TZR) # STD + dt_dst = datetime(2016, 4, 11, 12, 0, tzinfo=TZR) # DST + + dst_zero = timedelta(0) + dst_hour = timedelta(hours=1) + + std_offset = timedelta(hours=-5) + dst_offset = timedelta(hours=-4) + + # Check dst() + self.assertEqual(dt_std.dst(), dst_zero) + self.assertEqual(dt_dst.dst(), dst_hour) + + # Check utcoffset() + self.assertEqual(dt_std.utcoffset(), std_offset) + self.assertEqual(dt_dst.utcoffset(), dst_offset) + + # Check tzname + self.assertEqual(dt_std.tzname(), 'EST') + self.assertEqual(dt_dst.tzname(), 'EDT') + + def testTimeOnlyRangeFixed(self): + # This is a fixed-offset zone, so tzrange allows this + tz_range = tz.tzrange('dflt', stdoffset=timedelta(hours=-3)) + self.assertEqual(dt_time(13, 20, tzinfo=tz_range).utcoffset(), + timedelta(hours=-3)) + + def testTimeOnlyRange(self): + # tzrange returns None because this zone has DST + tz_range = tz.tzrange('EST', timedelta(hours=-5), + 'EDT', timedelta(hours=-4)) + self.assertIs(dt_time(13, 20, tzinfo=tz_range).utcoffset(), None) + + def testBrokenIsDstHandling(self): + # tzrange._isdst() was using a date() rather than a datetime(). + # Issue reported by Lennart Regebro. + dt = datetime(2007, 8, 6, 4, 10, tzinfo=tz.tzutc()) + self.assertEqual(dt.astimezone(tz=tz.gettz("GMT+2")), + datetime(2007, 8, 6, 6, 10, tzinfo=tz.tzstr("GMT+2"))) + + def testRangeTimeDelta(self): + # Test that tzrange can be specified with a timedelta instead of an int. + EST5EDT_td = tz.tzrange('EST', timedelta(hours=-5), + 'EDT', timedelta(hours=-4)) + + EST5EDT_sec = tz.tzrange('EST', -18000, + 'EDT', -14400) + + self.assertEqual(EST5EDT_td, EST5EDT_sec) + + def testRangeEquality(self): + TZR1 = tz.tzrange('EST', -18000, 'EDT', -14400) + + # Standard abbreviation different + TZR2 = tz.tzrange('ET', -18000, 'EDT', -14400) + self.assertNotEqual(TZR1, TZR2) + + # DST abbreviation different + TZR3 = tz.tzrange('EST', -18000, 'EMT', -14400) + self.assertNotEqual(TZR1, TZR3) + + # STD offset different + TZR4 = tz.tzrange('EST', -14000, 'EDT', -14400) + self.assertNotEqual(TZR1, TZR4) + + # DST offset different + TZR5 = tz.tzrange('EST', -18000, 'EDT', -18000) + self.assertNotEqual(TZR1, TZR5) + + # Start delta different + TZR6 = tz.tzrange('EST', -18000, 'EDT', -14400, + start=relativedelta(hours=+1, month=3, + day=1, weekday=SU(+2))) + self.assertNotEqual(TZR1, TZR6) + + # End delta different + TZR7 = tz.tzrange('EST', -18000, 'EDT', -14400, + end=relativedelta(hours=+1, month=11, + day=1, weekday=SU(+2))) + self.assertNotEqual(TZR1, TZR7) + + def testRangeInequalityUnsupported(self): + TZR = tz.tzrange('EST', -18000, 'EDT', -14400) + + self.assertFalse(TZR == 4) + self.assertTrue(TZR == ComparesEqual) + self.assertFalse(TZR != ComparesEqual) + + +@pytest.mark.tzstr +class TZStrTest(unittest.TestCase, TzFoldMixin): + # POSIX string indicating change to summer time on the 2nd Sunday in March + # at 2AM, and ending the 1st Sunday in November at 2AM. (valid >= 2007) + TZ_EST = 'EST+5EDT,M3.2.0/2,M11.1.0/2' + + # POSIX string for AEST/AEDT (valid >= 2008) + TZ_AEST = 'AEST-10AEDT,M10.1.0/2,M4.1.0/3' + + # POSIX string for GMT/BST + TZ_LON = 'GMT0BST,M3.5.0,M10.5.0' + + def gettz(self, tzname): + # Actual time zone changes are handled by the _gettz_context function + tzname_map = {'Australia/Sydney': self.TZ_AEST, + 'America/Toronto': self.TZ_EST, + 'America/New_York': self.TZ_EST, + 'Europe/London': self.TZ_LON} + + return tz.tzstr(tzname_map[tzname]) + + def testStrStr(self): + # Test that tz.tzstr() won't throw an error if given a str instead + # of a unicode literal. + self.assertEqual(datetime(2003, 4, 6, 1, 59, + tzinfo=tz.tzstr(str("EST5EDT"))).tzname(), "EST") + self.assertEqual(datetime(2003, 4, 6, 2, 00, + tzinfo=tz.tzstr(str("EST5EDT"))).tzname(), "EDT") + + def testStrInequality(self): + TZS1 = tz.tzstr('EST5EDT4') + + # Standard abbreviation different + TZS2 = tz.tzstr('ET5EDT4') + self.assertNotEqual(TZS1, TZS2) + + # DST abbreviation different + TZS3 = tz.tzstr('EST5EMT') + self.assertNotEqual(TZS1, TZS3) + + # STD offset different + TZS4 = tz.tzstr('EST4EDT4') + self.assertNotEqual(TZS1, TZS4) + + # DST offset different + TZS5 = tz.tzstr('EST5EDT3') + self.assertNotEqual(TZS1, TZS5) + + def testStrInequalityStartEnd(self): + TZS1 = tz.tzstr('EST5EDT4') + + # Start delta different + TZS2 = tz.tzstr('EST5EDT4,M4.2.0/02:00:00,M10-5-0/02:00') + self.assertNotEqual(TZS1, TZS2) + + # End delta different + TZS3 = tz.tzstr('EST5EDT4,M4.2.0/02:00:00,M11-5-0/02:00') + self.assertNotEqual(TZS1, TZS3) + + def testPosixOffset(self): + TZ1 = tz.tzstr('UTC-3') + self.assertEqual(datetime(2015, 1, 1, tzinfo=TZ1).utcoffset(), + timedelta(hours=-3)) + + TZ2 = tz.tzstr('UTC-3', posix_offset=True) + self.assertEqual(datetime(2015, 1, 1, tzinfo=TZ2).utcoffset(), + timedelta(hours=+3)) + + def testStrInequalityUnsupported(self): + TZS = tz.tzstr('EST5EDT') + + self.assertFalse(TZS == 4) + self.assertTrue(TZS == ComparesEqual) + self.assertFalse(TZS != ComparesEqual) + + def testTzStrRepr(self): + TZS1 = tz.tzstr('EST5EDT4') + TZS2 = tz.tzstr('EST') + + self.assertEqual(repr(TZS1), "tzstr(" + repr('EST5EDT4') + ")") + self.assertEqual(repr(TZS2), "tzstr(" + repr('EST') + ")") + + def testTzStrFailure(self): + with self.assertRaises(ValueError): + tz.tzstr('InvalidString;439999') + + def testTzStrSingleton(self): + tz1 = tz.tzstr('EST5EDT') + tz2 = tz.tzstr('CST4CST') + tz3 = tz.tzstr('EST5EDT') + + self.assertIsNot(tz1, tz2) + self.assertIs(tz1, tz3) + + def testTzStrSingletonPosix(self): + tz_t1 = tz.tzstr('GMT+3', posix_offset=True) + tz_f1 = tz.tzstr('GMT+3', posix_offset=False) + + tz_t2 = tz.tzstr('GMT+3', posix_offset=True) + tz_f2 = tz.tzstr('GMT+3', posix_offset=False) + + self.assertIs(tz_t1, tz_t2) + self.assertIsNot(tz_t1, tz_f1) + + self.assertIs(tz_f1, tz_f2) + + def testTzStrInstance(self): + tz1 = tz.tzstr('EST5EDT') + tz2 = tz.tzstr.instance('EST5EDT') + tz3 = tz.tzstr.instance('EST5EDT') + + assert tz1 is not tz2 + assert tz2 is not tz3 + + # Ensure that these still are all the same zone + assert tz1 == tz2 == tz3 + + +@pytest.mark.smoke +@pytest.mark.tzstr +def test_tzstr_weakref(): + tz_t1 = tz.tzstr('EST5EDT') + tz_t2_ref = weakref.ref(tz.tzstr('EST5EDT')) + assert tz_t1 is tz_t2_ref() + + del tz_t1 + gc.collect() + + assert tz_t2_ref() is not None + assert tz.tzstr('EST5EDT') is tz_t2_ref() + + for offset in range(5,15): + tz.tzstr('GMT+{}'.format(offset)) + gc.collect() + + assert tz_t2_ref() is None + assert tz.tzstr('EST5EDT') is not tz_t2_ref() + + +@pytest.mark.tzstr +@pytest.mark.parametrize('tz_str,expected', [ + # From https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html + ('', tz.tzrange(None)), # TODO: Should change this so tz.tzrange('') works + ('EST+5EDT,M3.2.0/2,M11.1.0/12', + tz.tzrange('EST', -18000, 'EDT', -14400, + start=relativedelta(month=3, day=1, weekday=SU(2), hours=2), + end=relativedelta(month=11, day=1, weekday=SU(1), hours=11))), + ('WART4WARST,J1/0,J365/25', # This is DST all year, Western Argentina Summer Time + tz.tzrange('WART', timedelta(hours=-4), 'WARST', + start=relativedelta(month=1, day=1, hours=0), + end=relativedelta(month=12, day=31, days=1))), + ('IST-2IDT,M3.4.4/26,M10.5.0', # Israel Standard / Daylight Time + tz.tzrange('IST', timedelta(hours=2), 'IDT', + start=relativedelta(month=3, day=1, weekday=TH(4), days=1, hours=2), + end=relativedelta(month=10, day=31, weekday=SU(-1), hours=1))), + ('WGT3WGST,M3.5.0/2,M10.5.0/1', + tz.tzrange('WGT', timedelta(hours=-3), 'WGST', + start=relativedelta(month=3, day=31, weekday=SU(-1), hours=2), + end=relativedelta(month=10, day=31, weekday=SU(-1), hours=0))), + + # Different offset specifications + ('WGT0300WGST', + tz.tzrange('WGT', timedelta(hours=-3), 'WGST')), + ('WGT03:00WGST', + tz.tzrange('WGT', timedelta(hours=-3), 'WGST')), + ('AEST-1100AEDT', + tz.tzrange('AEST', timedelta(hours=11), 'AEDT')), + ('AEST-11:00AEDT', + tz.tzrange('AEST', timedelta(hours=11), 'AEDT')), + + # Different time formats + ('EST5EDT,M3.2.0/4:00,M11.1.0/3:00', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(month=3, day=1, weekday=SU(2), hours=4), + end=relativedelta(month=11, day=1, weekday=SU(1), hours=2))), + ('EST5EDT,M3.2.0/04:00,M11.1.0/03:00', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(month=3, day=1, weekday=SU(2), hours=4), + end=relativedelta(month=11, day=1, weekday=SU(1), hours=2))), + ('EST5EDT,M3.2.0/0400,M11.1.0/0300', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(month=3, day=1, weekday=SU(2), hours=4), + end=relativedelta(month=11, day=1, weekday=SU(1), hours=2))), +]) +def test_valid_GNU_tzstr(tz_str, expected): + tzi = tz.tzstr(tz_str) + + assert tzi == expected + + +@pytest.mark.tzstr +@pytest.mark.parametrize('tz_str, expected', [ + ('EST5EDT,5,4,0,7200,11,3,0,7200', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(month=5, day=1, weekday=SU(+4), hours=+2), + end=relativedelta(month=11, day=1, weekday=SU(+3), hours=+1))), + ('EST5EDT,5,-4,0,7200,11,3,0,7200', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(hours=+2, month=5, day=31, weekday=SU(-4)), + end=relativedelta(hours=+1, month=11, day=1, weekday=SU(+3)))), + ('EST5EDT,5,4,0,7200,11,-3,0,7200', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(hours=+2, month=5, day=1, weekday=SU(+4)), + end=relativedelta(hours=+1, month=11, day=31, weekday=SU(-3)))), + ('EST5EDT,5,4,0,7200,11,-3,0,7200,3600', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(hours=+2, month=5, day=1, weekday=SU(+4)), + end=relativedelta(hours=+1, month=11, day=31, weekday=SU(-3)))), + ('EST5EDT,5,4,0,7200,11,-3,0,7200,3600', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(hours=+2, month=5, day=1, weekday=SU(+4)), + end=relativedelta(hours=+1, month=11, day=31, weekday=SU(-3)))), + ('EST5EDT,5,4,0,7200,11,-3,0,7200,-3600', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', timedelta(hours=-6), + start=relativedelta(hours=+2, month=5, day=1, weekday=SU(+4)), + end=relativedelta(hours=+3, month=11, day=31, weekday=SU(-3)))), + ('EST5EDT,5,4,0,7200,11,-3,0,7200,+7200', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', timedelta(hours=-3), + start=relativedelta(hours=+2, month=5, day=1, weekday=SU(+4)), + end=relativedelta(hours=0, month=11, day=31, weekday=SU(-3)))), + ('EST5EDT,5,4,0,7200,11,-3,0,7200,+3600', + tz.tzrange('EST', timedelta(hours=-5), 'EDT', + start=relativedelta(hours=+2, month=5, day=1, weekday=SU(+4)), + end=relativedelta(hours=+1, month=11, day=31, weekday=SU(-3)))), +]) +def test_valid_dateutil_format(tz_str, expected): + # This tests the dateutil-specific format that is used widely in the tests + # and examples. It is unclear where this format originated from. + with pytest.warns(tz.DeprecatedTzFormatWarning): + tzi = tz.tzstr.instance(tz_str) + + assert tzi == expected + + +@pytest.mark.tzstr +@pytest.mark.parametrize('tz_str', [ + 'hdfiughdfuig,dfughdfuigpu87ñ::', + ',dfughdfuigpu87ñ::', + '-1:WART4WARST,J1,J365/25', + 'WART4WARST,J1,J365/-25', + 'IST-2IDT,M3.4.-1/26,M10.5.0', + 'IST-2IDT,M3,2000,1/26,M10,5,0' +]) +def test_invalid_GNU_tzstr(tz_str): + with pytest.raises(ValueError): + tz.tzstr(tz_str) + + +# Different representations of the same default rule set +DEFAULT_TZSTR_RULES_EQUIV_2003 = [ + 'EST5EDT', + 'EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00', + 'EST5EDT4,95/02:00:00,298/02:00', + 'EST5EDT4,J96/02:00:00,J299/02:00', + 'EST5EDT4,J96/02:00:00,J299/02' +] + + +@pytest.mark.tzstr +@pytest.mark.parametrize('tz_str', DEFAULT_TZSTR_RULES_EQUIV_2003) +def test_tzstr_default_start(tz_str): + tzi = tz.tzstr(tz_str) + dt_std = datetime(2003, 4, 6, 1, 59, tzinfo=tzi) + dt_dst = datetime(2003, 4, 6, 2, 00, tzinfo=tzi) + + assert get_timezone_tuple(dt_std) == EST_TUPLE + assert get_timezone_tuple(dt_dst) == EDT_TUPLE + + +@pytest.mark.tzstr +@pytest.mark.parametrize('tz_str', DEFAULT_TZSTR_RULES_EQUIV_2003) +def test_tzstr_default_end(tz_str): + tzi = tz.tzstr(tz_str) + dt_dst = datetime(2003, 10, 26, 0, 59, tzinfo=tzi) + dt_dst_ambig = datetime(2003, 10, 26, 1, 00, tzinfo=tzi) + dt_std_ambig = tz.enfold(dt_dst_ambig, fold=1) + dt_std = datetime(2003, 10, 26, 2, 00, tzinfo=tzi) + + assert get_timezone_tuple(dt_dst) == EDT_TUPLE + assert get_timezone_tuple(dt_dst_ambig) == EDT_TUPLE + assert get_timezone_tuple(dt_std_ambig) == EST_TUPLE + assert get_timezone_tuple(dt_std) == EST_TUPLE + + +@pytest.mark.tzstr +@pytest.mark.parametrize('tzstr_1', ['EST5EDT', + 'EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00']) +@pytest.mark.parametrize('tzstr_2', ['EST5EDT', + 'EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00']) +def test_tzstr_default_cmp(tzstr_1, tzstr_2): + tz1 = tz.tzstr(tzstr_1) + tz2 = tz.tzstr(tzstr_2) + + assert tz1 == tz2 + +class TZICalTest(unittest.TestCase, TzFoldMixin): + def _gettz_str_tuple(self, tzname): + TZ_EST = ( + 'BEGIN:VTIMEZONE', + 'TZID:US-Eastern', + 'BEGIN:STANDARD', + 'DTSTART:19971029T020000', + 'RRULE:FREQ=YEARLY;BYDAY=+1SU;BYMONTH=11', + 'TZOFFSETFROM:-0400', + 'TZOFFSETTO:-0500', + 'TZNAME:EST', + 'END:STANDARD', + 'BEGIN:DAYLIGHT', + 'DTSTART:19980301T020000', + 'RRULE:FREQ=YEARLY;BYDAY=+2SU;BYMONTH=03', + 'TZOFFSETFROM:-0500', + 'TZOFFSETTO:-0400', + 'TZNAME:EDT', + 'END:DAYLIGHT', + 'END:VTIMEZONE' + ) + + TZ_PST = ( + 'BEGIN:VTIMEZONE', + 'TZID:US-Pacific', + 'BEGIN:STANDARD', + 'DTSTART:19971029T020000', + 'RRULE:FREQ=YEARLY;BYDAY=+1SU;BYMONTH=11', + 'TZOFFSETFROM:-0700', + 'TZOFFSETTO:-0800', + 'TZNAME:PST', + 'END:STANDARD', + 'BEGIN:DAYLIGHT', + 'DTSTART:19980301T020000', + 'RRULE:FREQ=YEARLY;BYDAY=+2SU;BYMONTH=03', + 'TZOFFSETFROM:-0800', + 'TZOFFSETTO:-0700', + 'TZNAME:PDT', + 'END:DAYLIGHT', + 'END:VTIMEZONE' + ) + + TZ_AEST = ( + 'BEGIN:VTIMEZONE', + 'TZID:Australia-Sydney', + 'BEGIN:STANDARD', + 'DTSTART:19980301T030000', + 'RRULE:FREQ=YEARLY;BYDAY=+1SU;BYMONTH=04', + 'TZOFFSETFROM:+1100', + 'TZOFFSETTO:+1000', + 'TZNAME:AEST', + 'END:STANDARD', + 'BEGIN:DAYLIGHT', + 'DTSTART:19971029T020000', + 'RRULE:FREQ=YEARLY;BYDAY=+1SU;BYMONTH=10', + 'TZOFFSETFROM:+1000', + 'TZOFFSETTO:+1100', + 'TZNAME:AEDT', + 'END:DAYLIGHT', + 'END:VTIMEZONE' + ) + + TZ_LON = ( + 'BEGIN:VTIMEZONE', + 'TZID:Europe-London', + 'BEGIN:STANDARD', + 'DTSTART:19810301T030000', + 'RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10;BYHOUR=02', + 'TZOFFSETFROM:+0100', + 'TZOFFSETTO:+0000', + 'TZNAME:GMT', + 'END:STANDARD', + 'BEGIN:DAYLIGHT', + 'DTSTART:19961001T030000', + 'RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=03;BYHOUR=01', + 'TZOFFSETFROM:+0000', + 'TZOFFSETTO:+0100', + 'TZNAME:BST', + 'END:DAYLIGHT', + 'END:VTIMEZONE' + ) + + tzname_map = {'Australia/Sydney': TZ_AEST, + 'America/Toronto': TZ_EST, + 'America/New_York': TZ_EST, + 'America/Los_Angeles': TZ_PST, + 'Europe/London': TZ_LON} + + return tzname_map[tzname] + + def _gettz_str(self, tzname): + return '\n'.join(self._gettz_str_tuple(tzname)) + + def _tzstr_dtstart_with_params(self, tzname, param_str): + # Adds parameters to the DTSTART values of a given tzstr + tz_str_tuple = self._gettz_str_tuple(tzname) + + out_tz = [] + for line in tz_str_tuple: + if line.startswith('DTSTART'): + name, value = line.split(':', 1) + line = name + ';' + param_str + ':' + value + + out_tz.append(line) + + return '\n'.join(out_tz) + + def gettz(self, tzname): + tz_str = self._gettz_str(tzname) + + tzc = tz.tzical(StringIO(tz_str)).get() + + return tzc + + def testRepr(self): + instr = StringIO(TZICAL_PST8PDT) + instr.name = 'StringIO(PST8PDT)' + tzc = tz.tzical(instr) + + self.assertEqual(repr(tzc), "tzical(" + repr(instr.name) + ")") + + # Test performance + def _test_us_zone(self, tzc, func, values, start): + if start: + dt1 = datetime(2003, 3, 9, 1, 59) + dt2 = datetime(2003, 3, 9, 2, 00) + fold = [0, 0] + else: + dt1 = datetime(2003, 11, 2, 0, 59) + dt2 = datetime(2003, 11, 2, 1, 00) + fold = [0, 1] + + dts = (tz.enfold(dt.replace(tzinfo=tzc), fold=f) + for dt, f in zip((dt1, dt2), fold)) + + for value, dt in zip(values, dts): + self.assertEqual(func(dt), value) + + def _test_multi_zones(self, tzstrs, tzids, func, values, start): + tzic = tz.tzical(StringIO('\n'.join(tzstrs))) + for tzid, vals in zip(tzids, values): + tzc = tzic.get(tzid) + + self._test_us_zone(tzc, func, vals, start) + + def _prepare_EST(self): + tz_str = self._gettz_str('America/New_York') + return tz.tzical(StringIO(tz_str)).get() + + def _testEST(self, start, test_type, tzc=None): + if tzc is None: + tzc = self._prepare_EST() + + argdict = { + 'name': (datetime.tzname, ('EST', 'EDT')), + 'offset': (datetime.utcoffset, (timedelta(hours=-5), + timedelta(hours=-4))), + 'dst': (datetime.dst, (timedelta(hours=0), + timedelta(hours=1))) + } + + func, values = argdict[test_type] + + if not start: + values = reversed(values) + + self._test_us_zone(tzc, func, values, start=start) + + def testESTStartName(self): + self._testEST(start=True, test_type='name') + + def testESTEndName(self): + self._testEST(start=False, test_type='name') + + def testESTStartOffset(self): + self._testEST(start=True, test_type='offset') + + def testESTEndOffset(self): + self._testEST(start=False, test_type='offset') + + def testESTStartDST(self): + self._testEST(start=True, test_type='dst') + + def testESTEndDST(self): + self._testEST(start=False, test_type='dst') + + def testESTValueDatetime(self): + # Violating one-test-per-test rule because we're not set up to do + # parameterized tests and the manual proliferation is getting a bit + # out of hand. + tz_str = self._tzstr_dtstart_with_params('America/New_York', + 'VALUE=DATE-TIME') + + tzc = tz.tzical(StringIO(tz_str)).get() + + for start in (True, False): + for test_type in ('name', 'offset', 'dst'): + self._testEST(start=start, test_type=test_type, tzc=tzc) + + def _testMultizone(self, start, test_type): + tzstrs = (self._gettz_str('America/New_York'), + self._gettz_str('America/Los_Angeles')) + tzids = ('US-Eastern', 'US-Pacific') + + argdict = { + 'name': (datetime.tzname, (('EST', 'EDT'), + ('PST', 'PDT'))), + 'offset': (datetime.utcoffset, ((timedelta(hours=-5), + timedelta(hours=-4)), + (timedelta(hours=-8), + timedelta(hours=-7)))), + 'dst': (datetime.dst, ((timedelta(hours=0), + timedelta(hours=1)), + (timedelta(hours=0), + timedelta(hours=1)))) + } + + func, values = argdict[test_type] + + if not start: + values = map(reversed, values) + + self._test_multi_zones(tzstrs, tzids, func, values, start) + + def testMultiZoneStartName(self): + self._testMultizone(start=True, test_type='name') + + def testMultiZoneEndName(self): + self._testMultizone(start=False, test_type='name') + + def testMultiZoneStartOffset(self): + self._testMultizone(start=True, test_type='offset') + + def testMultiZoneEndOffset(self): + self._testMultizone(start=False, test_type='offset') + + def testMultiZoneStartDST(self): + self._testMultizone(start=True, test_type='dst') + + def testMultiZoneEndDST(self): + self._testMultizone(start=False, test_type='dst') + + def testMultiZoneKeys(self): + est_str = self._gettz_str('America/New_York') + pst_str = self._gettz_str('America/Los_Angeles') + tzic = tz.tzical(StringIO('\n'.join((est_str, pst_str)))) + + # Sort keys because they are in a random order, being dictionary keys + keys = sorted(tzic.keys()) + + self.assertEqual(keys, ['US-Eastern', 'US-Pacific']) + + # Test error conditions + def testEmptyString(self): + with self.assertRaises(ValueError): + tz.tzical(StringIO("")) + + def testMultiZoneGet(self): + tzic = tz.tzical(StringIO(TZICAL_EST5EDT + TZICAL_PST8PDT)) + + with self.assertRaises(ValueError): + tzic.get() + + def testDtstartDate(self): + tz_str = self._tzstr_dtstart_with_params('America/New_York', + 'VALUE=DATE') + with self.assertRaises(ValueError): + tz.tzical(StringIO(tz_str)) + + def testDtstartTzid(self): + tz_str = self._tzstr_dtstart_with_params('America/New_York', + 'TZID=UTC') + with self.assertRaises(ValueError): + tz.tzical(StringIO(tz_str)) + + def testDtstartBadParam(self): + tz_str = self._tzstr_dtstart_with_params('America/New_York', + 'FOO=BAR') + with self.assertRaises(ValueError): + tz.tzical(StringIO(tz_str)) + + # Test Parsing + def testGap(self): + tzic = tz.tzical(StringIO('\n'.join((TZICAL_EST5EDT, TZICAL_PST8PDT)))) + + keys = sorted(tzic.keys()) + self.assertEqual(keys, ['US-Eastern', 'US-Pacific']) + + +class TZTest(unittest.TestCase): + def testFileStart1(self): + tzc = tz.tzfile(BytesIO(base64.b64decode(TZFILE_EST5EDT))) + self.assertEqual(datetime(2003, 4, 6, 1, 59, tzinfo=tzc).tzname(), "EST") + self.assertEqual(datetime(2003, 4, 6, 2, 00, tzinfo=tzc).tzname(), "EDT") + + def testFileEnd1(self): + tzc = tz.tzfile(BytesIO(base64.b64decode(TZFILE_EST5EDT))) + self.assertEqual(datetime(2003, 10, 26, 0, 59, tzinfo=tzc).tzname(), + "EDT") + end_est = tz.enfold(datetime(2003, 10, 26, 1, 00, tzinfo=tzc)) + self.assertEqual(end_est.tzname(), "EST") + + def testFileLastTransition(self): + # After the last transition, it goes to standard time in perpetuity + tzc = tz.tzfile(BytesIO(base64.b64decode(TZFILE_EST5EDT))) + self.assertEqual(datetime(2037, 10, 25, 0, 59, tzinfo=tzc).tzname(), + "EDT") + + last_date = tz.enfold(datetime(2037, 10, 25, 1, 00, tzinfo=tzc), fold=1) + self.assertEqual(last_date.tzname(), + "EST") + + self.assertEqual(datetime(2038, 5, 25, 12, 0, tzinfo=tzc).tzname(), + "EST") + + def testInvalidFile(self): + # Should throw a ValueError if an invalid file is passed + with self.assertRaises(ValueError): + tz.tzfile(BytesIO(b'BadFile')) + + def testFilestreamWithNameRepr(self): + # If fileobj is a filestream with a "name" attribute this name should + # be reflected in the tz object's repr + fileobj = BytesIO(base64.b64decode(TZFILE_EST5EDT)) + fileobj.name = 'foo' + tzc = tz.tzfile(fileobj) + self.assertEqual(repr(tzc), 'tzfile(' + repr('foo') + ')') + + def testLeapCountDecodesProperly(self): + # This timezone has leapcnt, and failed to decode until + # Eugene Oden notified about the issue. + + # As leap information is currently unused (and unstored) by tzfile() we + # can only indirectly test this: Take advantage of tzfile() not closing + # the input file if handed in as an opened file and assert that the + # full file content has been read by tzfile(). Note: For this test to + # work NEW_YORK must be in TZif version 1 format i.e. no more data + # after TZif v1 header + data has been read + fileobj = BytesIO(base64.b64decode(NEW_YORK)) + tz.tzfile(fileobj) + # we expect no remaining file content now, i.e. zero-length; if there's + # still data we haven't read the file format correctly + remaining_tzfile_content = fileobj.read() + self.assertEqual(len(remaining_tzfile_content), 0) + + def testIsStd(self): + # NEW_YORK tzfile contains this isstd information: + isstd_expected = (0, 0, 0, 1) + tzc = tz.tzfile(BytesIO(base64.b64decode(NEW_YORK))) + # gather the actual information as parsed by the tzfile class + isstd = [] + for ttinfo in tzc._ttinfo_list: + # ttinfo objects contain boolean values + isstd.append(int(ttinfo.isstd)) + # ttinfo list may contain more entries than isstd file content + isstd = tuple(isstd[:len(isstd_expected)]) + self.assertEqual( + isstd_expected, isstd, + "isstd UTC/local indicators parsed: %s != tzfile contents: %s" + % (isstd, isstd_expected)) + + def testGMTHasNoDaylight(self): + # tz.tzstr("GMT+2") improperly considered daylight saving time. + # Issue reported by Lennart Regebro. + dt = datetime(2007, 8, 6, 4, 10) + self.assertEqual(tz.gettz("GMT+2").dst(dt), timedelta(0)) + + def testGMTOffset(self): + # GMT and UTC offsets have inverted signal when compared to the + # usual TZ variable handling. + dt = datetime(2007, 8, 6, 4, 10, tzinfo=tz.tzutc()) + self.assertEqual(dt.astimezone(tz=tz.tzstr("GMT+2")), + datetime(2007, 8, 6, 6, 10, tzinfo=tz.tzstr("GMT+2"))) + self.assertEqual(dt.astimezone(tz=tz.gettz("UTC-2")), + datetime(2007, 8, 6, 2, 10, tzinfo=tz.tzstr("UTC-2"))) + + @unittest.skipIf(IS_WIN, "requires Unix") + @unittest.skipUnless(TZEnvContext.tz_change_allowed(), + TZEnvContext.tz_change_disallowed_message()) + def testTZSetDoesntCorrupt(self): + # if we start in non-UTC then tzset UTC make sure parse doesn't get + # confused + with TZEnvContext('UTC'): + # this should parse to UTC timezone not the original timezone + dt = parse('2014-07-20T12:34:56+00:00') + self.assertEqual(str(dt), '2014-07-20 12:34:56+00:00') + + +@pytest.mark.tzfile +@pytest.mark.skipif(not SUPPORTS_SUB_MINUTE_OFFSETS, + reason='Sub-minute offsets not supported') +def test_tzfile_sub_minute_offset(): + # If user running python 3.6 or newer, exact offset is used + tzc = tz.tzfile(BytesIO(base64.b64decode(EUROPE_HELSINKI))) + offset = timedelta(hours=1, minutes=39, seconds=52) + assert datetime(1900, 1, 1, 0, 0, tzinfo=tzc).utcoffset() == offset + + +@pytest.mark.tzfile +@pytest.mark.skipif(SUPPORTS_SUB_MINUTE_OFFSETS, + reason='Sub-minute offsets supported.') +def test_sub_minute_rounding_tzfile(): + # This timezone has an offset of 5992 seconds in 1900-01-01. + # For python version pre-3.6, this will be rounded + tzc = tz.tzfile(BytesIO(base64.b64decode(EUROPE_HELSINKI))) + offset = timedelta(hours=1, minutes=40) + assert datetime(1900, 1, 1, 0, 0, tzinfo=tzc).utcoffset() == offset + + +@pytest.mark.tzfile +def test_samoa_transition(): + # utcoffset() was erroneously returning +14:00 an hour early (GH #812) + APIA = tz.gettz('Pacific/Apia') + dt = datetime(2011, 12, 29, 23, 59, tzinfo=APIA) + assert dt.utcoffset() == timedelta(hours=-10) + + # Make sure the transition actually works, too + dt_after = (dt.astimezone(tz.UTC) + timedelta(minutes=1)).astimezone(APIA) + assert dt_after == datetime(2011, 12, 31, tzinfo=APIA) + assert dt_after.utcoffset() == timedelta(hours=14) + + +@unittest.skipUnless(IS_WIN, "Requires Windows") +class TzWinTest(unittest.TestCase, TzWinFoldMixin): + def setUp(self): + self.tzclass = tzwin.tzwin + + def testTzResLoadName(self): + # This may not work right on non-US locales. + tzr = tzwin.tzres() + self.assertEqual(tzr.load_name(112), "Eastern Standard Time") + + def testTzResNameFromString(self): + tzr = tzwin.tzres() + self.assertEqual(tzr.name_from_string('@tzres.dll,-221'), + 'Alaskan Daylight Time') + + self.assertEqual(tzr.name_from_string('Samoa Daylight Time'), + 'Samoa Daylight Time') + + with self.assertRaises(ValueError): + tzr.name_from_string('@tzres.dll,100') + + def testIsdstZoneWithNoDaylightSaving(self): + tz = tzwin.tzwin("UTC") + dt = parse("2013-03-06 19:08:15") + self.assertFalse(tz._isdst(dt)) + + def testOffset(self): + tz = tzwin.tzwin("Cape Verde Standard Time") + self.assertEqual(tz.utcoffset(datetime(1995, 5, 21, 12, 9, 13)), + timedelta(-1, 82800)) + + def testTzwinName(self): + # https://github.com/dateutil/dateutil/issues/143 + tw = tz.tzwin('Eastern Standard Time') + + # Cover the transitions for at least two years. + ESTs = 'Eastern Standard Time' + EDTs = 'Eastern Daylight Time' + transition_dates = [(datetime(2015, 3, 8, 0, 59), ESTs), + (datetime(2015, 3, 8, 3, 1), EDTs), + (datetime(2015, 11, 1, 0, 59), EDTs), + (datetime(2015, 11, 1, 3, 1), ESTs), + (datetime(2016, 3, 13, 0, 59), ESTs), + (datetime(2016, 3, 13, 3, 1), EDTs), + (datetime(2016, 11, 6, 0, 59), EDTs), + (datetime(2016, 11, 6, 3, 1), ESTs)] + + for t_date, expected in transition_dates: + self.assertEqual(t_date.replace(tzinfo=tw).tzname(), expected) + + def testTzwinRepr(self): + tw = tz.tzwin('Yakutsk Standard Time') + self.assertEqual(repr(tw), 'tzwin(' + + repr('Yakutsk Standard Time') + ')') + + def testTzWinEquality(self): + # https://github.com/dateutil/dateutil/issues/151 + tzwin_names = ('Eastern Standard Time', + 'West Pacific Standard Time', + 'Yakutsk Standard Time', + 'Iran Standard Time', + 'UTC') + + for tzwin_name in tzwin_names: + # Get two different instances to compare + tw1 = tz.tzwin(tzwin_name) + tw2 = tz.tzwin(tzwin_name) + + self.assertEqual(tw1, tw2) + + def testTzWinInequality(self): + # https://github.com/dateutil/dateutil/issues/151 + # Note these last two currently differ only in their name. + tzwin_names = (('Eastern Standard Time', 'Yakutsk Standard Time'), + ('Greenwich Standard Time', 'GMT Standard Time'), + ('GMT Standard Time', 'UTC'), + ('E. South America Standard Time', + 'Argentina Standard Time')) + + for tzwn1, tzwn2 in tzwin_names: + # Get two different instances to compare + tw1 = tz.tzwin(tzwn1) + tw2 = tz.tzwin(tzwn2) + + self.assertNotEqual(tw1, tw2) + + def testTzWinEqualityInvalid(self): + # Compare to objects that do not implement comparison with this + # (should default to False) + UTC = tz.tzutc() + EST = tz.tzwin('Eastern Standard Time') + + self.assertFalse(EST == UTC) + self.assertFalse(EST == 1) + self.assertFalse(UTC == EST) + + self.assertTrue(EST != UTC) + self.assertTrue(EST != 1) + + def testTzWinInequalityUnsupported(self): + # Compare it to an object that is promiscuous about equality, but for + # which tzwin does not implement an equality operator. + EST = tz.tzwin('Eastern Standard Time') + self.assertTrue(EST == ComparesEqual) + self.assertFalse(EST != ComparesEqual) + + def testTzwinTimeOnlyDST(self): + # For zones with DST, .dst() should return None + tw_est = tz.tzwin('Eastern Standard Time') + self.assertIs(dt_time(14, 10, tzinfo=tw_est).dst(), None) + + # This zone has no DST, so .dst() can return 0 + tw_sast = tz.tzwin('South Africa Standard Time') + self.assertEqual(dt_time(14, 10, tzinfo=tw_sast).dst(), + timedelta(0)) + + def testTzwinTimeOnlyUTCOffset(self): + # For zones with DST, .utcoffset() should return None + tw_est = tz.tzwin('Eastern Standard Time') + self.assertIs(dt_time(14, 10, tzinfo=tw_est).utcoffset(), None) + + # This zone has no DST, so .utcoffset() returns standard offset + tw_sast = tz.tzwin('South Africa Standard Time') + self.assertEqual(dt_time(14, 10, tzinfo=tw_sast).utcoffset(), + timedelta(hours=2)) + + def testTzwinTimeOnlyTZName(self): + # For zones with DST, the name defaults to standard time + tw_est = tz.tzwin('Eastern Standard Time') + self.assertEqual(dt_time(14, 10, tzinfo=tw_est).tzname(), + 'Eastern Standard Time') + + # For zones with no DST, this should work normally. + tw_sast = tz.tzwin('South Africa Standard Time') + self.assertEqual(dt_time(14, 10, tzinfo=tw_sast).tzname(), + 'South Africa Standard Time') + + +@unittest.skipUnless(IS_WIN, "Requires Windows") +@unittest.skipUnless(TZWinContext.tz_change_allowed(), + TZWinContext.tz_change_disallowed_message()) +class TzWinLocalTest(unittest.TestCase, TzWinFoldMixin): + + def setUp(self): + self.tzclass = tzwin.tzwinlocal + self.context = TZWinContext + + def get_args(self, tzname): + return () + + def testLocal(self): + # Not sure how to pin a local time zone, so for now we're just going + # to run this and make sure it doesn't raise an error + # See Github Issue #135: https://github.com/dateutil/dateutil/issues/135 + datetime.now(tzwin.tzwinlocal()) + + def testTzwinLocalUTCOffset(self): + with TZWinContext('Eastern Standard Time'): + tzwl = tzwin.tzwinlocal() + self.assertEqual(datetime(2014, 3, 11, tzinfo=tzwl).utcoffset(), + timedelta(hours=-4)) + + def testTzwinLocalName(self): + # https://github.com/dateutil/dateutil/issues/143 + ESTs = 'Eastern Standard Time' + EDTs = 'Eastern Daylight Time' + transition_dates = [(datetime(2015, 3, 8, 0, 59), ESTs), + (datetime(2015, 3, 8, 3, 1), EDTs), + (datetime(2015, 11, 1, 0, 59), EDTs), + (datetime(2015, 11, 1, 3, 1), ESTs), + (datetime(2016, 3, 13, 0, 59), ESTs), + (datetime(2016, 3, 13, 3, 1), EDTs), + (datetime(2016, 11, 6, 0, 59), EDTs), + (datetime(2016, 11, 6, 3, 1), ESTs)] + + with TZWinContext('Eastern Standard Time'): + tw = tz.tzwinlocal() + + for t_date, expected in transition_dates: + self.assertEqual(t_date.replace(tzinfo=tw).tzname(), expected) + + def testTzWinLocalRepr(self): + tw = tz.tzwinlocal() + self.assertEqual(repr(tw), 'tzwinlocal()') + + def testTzwinLocalRepr(self): + # https://github.com/dateutil/dateutil/issues/143 + with TZWinContext('Eastern Standard Time'): + tw = tz.tzwinlocal() + + self.assertEqual(str(tw), 'tzwinlocal(' + + repr('Eastern Standard Time') + ')') + + with TZWinContext('Pacific Standard Time'): + tw = tz.tzwinlocal() + + self.assertEqual(str(tw), 'tzwinlocal(' + + repr('Pacific Standard Time') + ')') + + def testTzwinLocalEquality(self): + tw_est = tz.tzwin('Eastern Standard Time') + tw_pst = tz.tzwin('Pacific Standard Time') + + with TZWinContext('Eastern Standard Time'): + twl1 = tz.tzwinlocal() + twl2 = tz.tzwinlocal() + + self.assertEqual(twl1, twl2) + self.assertEqual(twl1, tw_est) + self.assertNotEqual(twl1, tw_pst) + + with TZWinContext('Pacific Standard Time'): + twl1 = tz.tzwinlocal() + twl2 = tz.tzwinlocal() + tw = tz.tzwin('Pacific Standard Time') + + self.assertEqual(twl1, twl2) + self.assertEqual(twl1, tw) + self.assertEqual(twl1, tw_pst) + self.assertNotEqual(twl1, tw_est) + + def testTzwinLocalTimeOnlyDST(self): + # For zones with DST, .dst() should return None + with TZWinContext('Eastern Standard Time'): + twl = tz.tzwinlocal() + self.assertIs(dt_time(14, 10, tzinfo=twl).dst(), None) + + # This zone has no DST, so .dst() can return 0 + with TZWinContext('South Africa Standard Time'): + twl = tz.tzwinlocal() + self.assertEqual(dt_time(14, 10, tzinfo=twl).dst(), timedelta(0)) + + def testTzwinLocalTimeOnlyUTCOffset(self): + # For zones with DST, .utcoffset() should return None + with TZWinContext('Eastern Standard Time'): + twl = tz.tzwinlocal() + self.assertIs(dt_time(14, 10, tzinfo=twl).utcoffset(), None) + + # This zone has no DST, so .utcoffset() returns standard offset + with TZWinContext('South Africa Standard Time'): + twl = tz.tzwinlocal() + self.assertEqual(dt_time(14, 10, tzinfo=twl).utcoffset(), + timedelta(hours=2)) + + def testTzwinLocalTimeOnlyTZName(self): + # For zones with DST, the name defaults to standard time + with TZWinContext('Eastern Standard Time'): + twl = tz.tzwinlocal() + self.assertEqual(dt_time(14, 10, tzinfo=twl).tzname(), + 'Eastern Standard Time') + + # For zones with no DST, this should work normally. + with TZWinContext('South Africa Standard Time'): + twl = tz.tzwinlocal() + self.assertEqual(dt_time(14, 10, tzinfo=twl).tzname(), + 'South Africa Standard Time') + + +class TzPickleTest(PicklableMixin, unittest.TestCase): + _asfile = False + + def setUp(self): + self.assertPicklable = partial(self.assertPicklable, + asfile=self._asfile) + + def testPickleTzUTC(self): + self.assertPicklable(tz.tzutc(), singleton=True) + + def testPickleTzOffsetZero(self): + self.assertPicklable(tz.tzoffset('UTC', 0), singleton=True) + + def testPickleTzOffsetPos(self): + self.assertPicklable(tz.tzoffset('UTC+1', 3600), singleton=True) + + def testPickleTzOffsetNeg(self): + self.assertPicklable(tz.tzoffset('UTC-1', -3600), singleton=True) + + @pytest.mark.tzlocal + def testPickleTzLocal(self): + self.assertPicklable(tz.tzlocal()) + + def testPickleTzFileEST5EDT(self): + tzc = tz.tzfile(BytesIO(base64.b64decode(TZFILE_EST5EDT))) + self.assertPicklable(tzc) + + def testPickleTzFileEurope_Helsinki(self): + tzc = tz.tzfile(BytesIO(base64.b64decode(EUROPE_HELSINKI))) + self.assertPicklable(tzc) + + def testPickleTzFileNew_York(self): + tzc = tz.tzfile(BytesIO(base64.b64decode(NEW_YORK))) + self.assertPicklable(tzc) + + @unittest.skip("Known failure") + def testPickleTzICal(self): + tzc = tz.tzical(StringIO(TZICAL_EST5EDT)).get() + self.assertPicklable(tzc) + + def testPickleTzGettz(self): + self.assertPicklable(tz.gettz('America/New_York')) + + def testPickleZoneFileGettz(self): + zoneinfo_file = zoneinfo.get_zonefile_instance() + tzi = zoneinfo_file.get('America/New_York') + self.assertIsNot(tzi, None) + self.assertPicklable(tzi) + + +class TzPickleFileTest(TzPickleTest): + """ Run all the TzPickleTest tests, using a temporary file """ + _asfile = True + + +class DatetimeAmbiguousTest(unittest.TestCase): + """ Test the datetime_exists / datetime_ambiguous functions """ + + def testNoTzSpecified(self): + with self.assertRaises(ValueError): + tz.datetime_ambiguous(datetime(2016, 4, 1, 2, 9)) + + def _get_no_support_tzinfo_class(self, dt_start, dt_end, dst_only=False): + # Generates a class of tzinfo with no support for is_ambiguous + # where dates between dt_start and dt_end are ambiguous. + + class FoldingTzInfo(tzinfo): + def utcoffset(self, dt): + if not dst_only: + dt_n = dt.replace(tzinfo=None) + + if dt_start <= dt_n < dt_end and getattr(dt_n, 'fold', 0): + return timedelta(hours=-1) + + return timedelta(hours=0) + + def dst(self, dt): + dt_n = dt.replace(tzinfo=None) + + if dt_start <= dt_n < dt_end and getattr(dt_n, 'fold', 0): + return timedelta(hours=1) + else: + return timedelta(0) + + return FoldingTzInfo + + def _get_no_support_tzinfo(self, dt_start, dt_end, dst_only=False): + return self._get_no_support_tzinfo_class(dt_start, dt_end, dst_only)() + + def testNoSupportAmbiguityFoldNaive(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_no_support_tzinfo(dt_start, dt_end) + + self.assertTrue(tz.datetime_ambiguous(datetime(2018, 9, 1, 1, 30), + tz=tzi)) + + def testNoSupportAmbiguityFoldAware(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_no_support_tzinfo(dt_start, dt_end) + + self.assertTrue(tz.datetime_ambiguous(datetime(2018, 9, 1, 1, 30, + tzinfo=tzi))) + + def testNoSupportAmbiguityUnambiguousNaive(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_no_support_tzinfo(dt_start, dt_end) + + self.assertFalse(tz.datetime_ambiguous(datetime(2018, 10, 1, 12, 30), + tz=tzi)) + + def testNoSupportAmbiguityUnambiguousAware(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_no_support_tzinfo(dt_start, dt_end) + + self.assertFalse(tz.datetime_ambiguous(datetime(2018, 10, 1, 12, 30, + tzinfo=tzi))) + + def testNoSupportAmbiguityFoldDSTOnly(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_no_support_tzinfo(dt_start, dt_end, dst_only=True) + + self.assertTrue(tz.datetime_ambiguous(datetime(2018, 9, 1, 1, 30), + tz=tzi)) + + def testNoSupportAmbiguityUnambiguousDSTOnly(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_no_support_tzinfo(dt_start, dt_end, dst_only=True) + + self.assertFalse(tz.datetime_ambiguous(datetime(2018, 10, 1, 12, 30), + tz=tzi)) + + def testSupportAmbiguityFoldNaive(self): + tzi = tz.gettz('US/Eastern') + + dt = datetime(2011, 11, 6, 1, 30) + + self.assertTrue(tz.datetime_ambiguous(dt, tz=tzi)) + + def testSupportAmbiguityFoldAware(self): + tzi = tz.gettz('US/Eastern') + + dt = datetime(2011, 11, 6, 1, 30, tzinfo=tzi) + + self.assertTrue(tz.datetime_ambiguous(dt)) + + def testSupportAmbiguityUnambiguousAware(self): + tzi = tz.gettz('US/Eastern') + + dt = datetime(2011, 11, 6, 4, 30) + + self.assertFalse(tz.datetime_ambiguous(dt, tz=tzi)) + + def testSupportAmbiguityUnambiguousNaive(self): + tzi = tz.gettz('US/Eastern') + + dt = datetime(2011, 11, 6, 4, 30, tzinfo=tzi) + + self.assertFalse(tz.datetime_ambiguous(dt)) + + def _get_ambig_error_tzinfo(self, dt_start, dt_end, dst_only=False): + cTzInfo = self._get_no_support_tzinfo_class(dt_start, dt_end, dst_only) + + # Takes the wrong number of arguments and raises an error anyway. + class FoldTzInfoRaises(cTzInfo): + def is_ambiguous(self, dt, other_arg): + raise NotImplementedError('This is not implemented') + + return FoldTzInfoRaises() + + def testIncompatibleAmbiguityFoldNaive(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_ambig_error_tzinfo(dt_start, dt_end) + + self.assertTrue(tz.datetime_ambiguous(datetime(2018, 9, 1, 1, 30), + tz=tzi)) + + def testIncompatibleAmbiguityFoldAware(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_ambig_error_tzinfo(dt_start, dt_end) + + self.assertTrue(tz.datetime_ambiguous(datetime(2018, 9, 1, 1, 30, + tzinfo=tzi))) + + def testIncompatibleAmbiguityUnambiguousNaive(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_ambig_error_tzinfo(dt_start, dt_end) + + self.assertFalse(tz.datetime_ambiguous(datetime(2018, 10, 1, 12, 30), + tz=tzi)) + + def testIncompatibleAmbiguityUnambiguousAware(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_ambig_error_tzinfo(dt_start, dt_end) + + self.assertFalse(tz.datetime_ambiguous(datetime(2018, 10, 1, 12, 30, + tzinfo=tzi))) + + def testIncompatibleAmbiguityFoldDSTOnly(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_ambig_error_tzinfo(dt_start, dt_end, dst_only=True) + + self.assertTrue(tz.datetime_ambiguous(datetime(2018, 9, 1, 1, 30), + tz=tzi)) + + def testIncompatibleAmbiguityUnambiguousDSTOnly(self): + dt_start = datetime(2018, 9, 1, 1, 0) + dt_end = datetime(2018, 9, 1, 2, 0) + + tzi = self._get_ambig_error_tzinfo(dt_start, dt_end, dst_only=True) + + self.assertFalse(tz.datetime_ambiguous(datetime(2018, 10, 1, 12, 30), + tz=tzi)) + + def testSpecifiedTzOverridesAttached(self): + # If a tz is specified, the datetime will be treated as naive. + + # This is not ambiguous in the local zone + dt = datetime(2011, 11, 6, 1, 30, tzinfo=tz.gettz('Australia/Sydney')) + + self.assertFalse(tz.datetime_ambiguous(dt)) + + tzi = tz.gettz('US/Eastern') + self.assertTrue(tz.datetime_ambiguous(dt, tz=tzi)) + + +class DatetimeExistsTest(unittest.TestCase): + def testNoTzSpecified(self): + with self.assertRaises(ValueError): + tz.datetime_exists(datetime(2016, 4, 1, 2, 9)) + + def testInGapNaive(self): + tzi = tz.gettz('Australia/Sydney') + + dt = datetime(2012, 10, 7, 2, 30) + + self.assertFalse(tz.datetime_exists(dt, tz=tzi)) + + def testInGapAware(self): + tzi = tz.gettz('Australia/Sydney') + + dt = datetime(2012, 10, 7, 2, 30, tzinfo=tzi) + + self.assertFalse(tz.datetime_exists(dt)) + + def testExistsNaive(self): + tzi = tz.gettz('Australia/Sydney') + + dt = datetime(2012, 10, 7, 10, 30) + + self.assertTrue(tz.datetime_exists(dt, tz=tzi)) + + def testExistsAware(self): + tzi = tz.gettz('Australia/Sydney') + + dt = datetime(2012, 10, 7, 10, 30, tzinfo=tzi) + + self.assertTrue(tz.datetime_exists(dt)) + + def testSpecifiedTzOverridesAttached(self): + EST = tz.gettz('US/Eastern') + AEST = tz.gettz('Australia/Sydney') + + dt = datetime(2012, 10, 7, 2, 30, tzinfo=EST) # This time exists + + self.assertFalse(tz.datetime_exists(dt, tz=AEST)) + + +class TestEnfold: + def test_enter_fold_default(self): + dt = tz.enfold(datetime(2020, 1, 19, 3, 32)) + + assert dt.fold == 1 + + def test_enter_fold(self): + dt = tz.enfold(datetime(2020, 1, 19, 3, 32), fold=1) + + assert dt.fold == 1 + + def test_exit_fold(self): + dt = tz.enfold(datetime(2020, 1, 19, 3, 32), fold=0) + + # Before Python 3.6, dt.fold won't exist if fold is 0. + assert getattr(dt, 'fold', 0) == 0 + + def test_defold(self): + dt = tz.enfold(datetime(2020, 1, 19, 3, 32), fold=1) + + dt2 = tz.enfold(dt, fold=0) + + assert getattr(dt2, 'fold', 0) == 0 + + def test_fold_replace_args(self): + # This test can be dropped when Python < 3.6 is dropped, since it + # is mainly to cover the `replace` method on _DatetimeWithFold + dt = tz.enfold(datetime(1950, 1, 2, 12, 30, 15, 8), fold=1) + + dt2 = dt.replace(1952, 2, 3, 13, 31, 16, 9) + assert dt2 == tz.enfold(datetime(1952, 2, 3, 13, 31, 16, 9), fold=1) + assert dt2.fold == 1 + + def test_fold_replace_exception_duplicate_args(self): + dt = tz.enfold(datetime(1999, 1, 3), fold=1) + + with pytest.raises(TypeError): + dt.replace(1950, year=2000) + + +@pytest.mark.tz_resolve_imaginary +class ImaginaryDateTest(unittest.TestCase): + def testCanberraForward(self): + tzi = tz.gettz('Australia/Canberra') + dt = datetime(2018, 10, 7, 2, 30, tzinfo=tzi) + dt_act = tz.resolve_imaginary(dt) + dt_exp = datetime(2018, 10, 7, 3, 30, tzinfo=tzi) + self.assertEqual(dt_act, dt_exp) + + def testLondonForward(self): + tzi = tz.gettz('Europe/London') + dt = datetime(2018, 3, 25, 1, 30, tzinfo=tzi) + dt_act = tz.resolve_imaginary(dt) + dt_exp = datetime(2018, 3, 25, 2, 30, tzinfo=tzi) + self.assertEqual(dt_act, dt_exp) + + def testKeivForward(self): + tzi = tz.gettz('Europe/Kiev') + dt = datetime(2018, 3, 25, 3, 30, tzinfo=tzi) + dt_act = tz.resolve_imaginary(dt) + dt_exp = datetime(2018, 3, 25, 4, 30, tzinfo=tzi) + self.assertEqual(dt_act, dt_exp) + + +@pytest.mark.tz_resolve_imaginary +@pytest.mark.parametrize('dt', [ + datetime(2017, 11, 5, 1, 30, tzinfo=tz.gettz('America/New_York')), + datetime(2018, 10, 28, 1, 30, tzinfo=tz.gettz('Europe/London')), + datetime(2017, 4, 2, 2, 30, tzinfo=tz.gettz('Australia/Sydney')), +]) +def test_resolve_imaginary_ambiguous(dt): + assert tz.resolve_imaginary(dt) is dt + + dt_f = tz.enfold(dt) + assert dt is not dt_f + assert tz.resolve_imaginary(dt_f) is dt_f + + +@pytest.mark.tz_resolve_imaginary +@pytest.mark.parametrize('dt', [ + datetime(2017, 6, 2, 12, 30, tzinfo=tz.gettz('America/New_York')), + datetime(2018, 4, 2, 9, 30, tzinfo=tz.gettz('Europe/London')), + datetime(2017, 2, 2, 16, 30, tzinfo=tz.gettz('Australia/Sydney')), + datetime(2017, 12, 2, 12, 30, tzinfo=tz.gettz('America/New_York')), + datetime(2018, 12, 2, 9, 30, tzinfo=tz.gettz('Europe/London')), + datetime(2017, 6, 2, 16, 30, tzinfo=tz.gettz('Australia/Sydney')), + datetime(2025, 9, 25, 1, 17, tzinfo=tz.tzutc()), + datetime(2025, 9, 25, 1, 17, tzinfo=tz.tzoffset('EST', -18000)), + datetime(2019, 3, 4, tzinfo=None) +]) +def test_resolve_imaginary_existing(dt): + assert tz.resolve_imaginary(dt) is dt + + +def __get_kiritimati_resolve_imaginary_test(): + # In the 2018d release of the IANA database, the Kiritimati "imaginary day" + # data was corrected, so if the system zoneinfo is older than 2018d, the + # Kiritimati test will fail. + + tzi = tz.gettz('Pacific/Kiritimati') + new_version = False + if not tz.datetime_exists(datetime(1995, 1, 1, 12, 30), tzi): + zif = zoneinfo.get_zonefile_instance() + if zif.metadata is not None: + new_version = zif.metadata['tzversion'] >= '2018d' + + if new_version: + tzi = zif.get('Pacific/Kiritimati') + else: + new_version = True + + if new_version: + dates = (datetime(1994, 12, 31, 12, 30), datetime(1995, 1, 1, 12, 30)) + else: + dates = (datetime(1995, 1, 1, 12, 30), datetime(1995, 1, 2, 12, 30)) + + return (tzi, ) + dates + + +resolve_imaginary_tests = [ + (tz.gettz('Europe/London'), + datetime(2018, 3, 25, 1, 30), datetime(2018, 3, 25, 2, 30)), + (tz.gettz('America/New_York'), + datetime(2017, 3, 12, 2, 30), datetime(2017, 3, 12, 3, 30)), + (tz.gettz('Australia/Sydney'), + datetime(2014, 10, 5, 2, 0), datetime(2014, 10, 5, 3, 0)), + __get_kiritimati_resolve_imaginary_test(), +] + + +if SUPPORTS_SUB_MINUTE_OFFSETS: + resolve_imaginary_tests.append( + (tz.gettz('Africa/Monrovia'), + datetime(1972, 1, 7, 0, 30), datetime(1972, 1, 7, 1, 14, 30))) + + +@pytest.mark.tz_resolve_imaginary +@pytest.mark.parametrize('tzi, dt, dt_exp', resolve_imaginary_tests) +def test_resolve_imaginary(tzi, dt, dt_exp): + dt = dt.replace(tzinfo=tzi) + dt_exp = dt_exp.replace(tzinfo=tzi) + + dt_r = tz.resolve_imaginary(dt) + assert dt_r == dt_exp + assert dt_r.tzname() == dt_exp.tzname() + assert dt_r.utcoffset() == dt_exp.utcoffset() diff --git a/Windows/dateutil/test/test_utils.py b/Windows/dateutil/test/test_utils.py new file mode 100644 index 00000000..fcdec1a5 --- /dev/null +++ b/Windows/dateutil/test/test_utils.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from datetime import timedelta, datetime + +import unittest + +from dateutil import tz +from dateutil import utils +from dateutil.utils import within_delta + +from freezegun import freeze_time + +UTC = tz.tzutc() +NYC = tz.gettz("America/New_York") + + +class UtilsTest(unittest.TestCase): + @freeze_time(datetime(2014, 12, 15, 1, 21, 33, 4003)) + def testToday(self): + self.assertEqual(utils.today(), datetime(2014, 12, 15, 0, 0, 0)) + + @freeze_time(datetime(2014, 12, 15, 12), tz_offset=5) + def testTodayTzInfo(self): + self.assertEqual(utils.today(NYC), + datetime(2014, 12, 15, 0, 0, 0, tzinfo=NYC)) + + @freeze_time(datetime(2014, 12, 15, 23), tz_offset=5) + def testTodayTzInfoDifferentDay(self): + self.assertEqual(utils.today(UTC), + datetime(2014, 12, 16, 0, 0, 0, tzinfo=UTC)) + + def testDefaultTZInfoNaive(self): + dt = datetime(2014, 9, 14, 9, 30) + self.assertIs(utils.default_tzinfo(dt, NYC).tzinfo, + NYC) + + def testDefaultTZInfoAware(self): + dt = datetime(2014, 9, 14, 9, 30, tzinfo=UTC) + self.assertIs(utils.default_tzinfo(dt, NYC).tzinfo, + UTC) + + def testWithinDelta(self): + d1 = datetime(2016, 1, 1, 12, 14, 1, 9) + d2 = d1.replace(microsecond=15) + + self.assertTrue(within_delta(d1, d2, timedelta(seconds=1))) + self.assertFalse(within_delta(d1, d2, timedelta(microseconds=1))) + + def testWithinDeltaWithNegativeDelta(self): + d1 = datetime(2016, 1, 1) + d2 = datetime(2015, 12, 31) + + self.assertTrue(within_delta(d2, d1, timedelta(days=-1))) diff --git a/Windows/dateutil/tz/__init__.py b/Windows/dateutil/tz/__init__.py new file mode 100644 index 00000000..5a2d9cd6 --- /dev/null +++ b/Windows/dateutil/tz/__init__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +from .tz import * +from .tz import __doc__ + +#: Convenience constant providing a :class:`tzutc()` instance +#: +#: .. versionadded:: 2.7.0 +UTC = tzutc() + +__all__ = ["tzutc", "tzoffset", "tzlocal", "tzfile", "tzrange", + "tzstr", "tzical", "tzwin", "tzwinlocal", "gettz", + "enfold", "datetime_ambiguous", "datetime_exists", + "resolve_imaginary", "UTC", "DeprecatedTzFormatWarning"] + + +class DeprecatedTzFormatWarning(Warning): + """Warning raised when time zones are parsed from deprecated formats.""" diff --git a/Windows/dateutil/tz/_common.py b/Windows/dateutil/tz/_common.py new file mode 100644 index 00000000..594e0823 --- /dev/null +++ b/Windows/dateutil/tz/_common.py @@ -0,0 +1,419 @@ +from six import PY2 + +from functools import wraps + +from datetime import datetime, timedelta, tzinfo + + +ZERO = timedelta(0) + +__all__ = ['tzname_in_python2', 'enfold'] + + +def tzname_in_python2(namefunc): + """Change unicode output into bytestrings in Python 2 + + tzname() API changed in Python 3. It used to return bytes, but was changed + to unicode strings + """ + if PY2: + @wraps(namefunc) + def adjust_encoding(*args, **kwargs): + name = namefunc(*args, **kwargs) + if name is not None: + name = name.encode() + + return name + + return adjust_encoding + else: + return namefunc + + +# The following is adapted from Alexander Belopolsky's tz library +# https://github.com/abalkin/tz +if hasattr(datetime, 'fold'): + # This is the pre-python 3.6 fold situation + def enfold(dt, fold=1): + """ + Provides a unified interface for assigning the ``fold`` attribute to + datetimes both before and after the implementation of PEP-495. + + :param fold: + The value for the ``fold`` attribute in the returned datetime. This + should be either 0 or 1. + + :return: + Returns an object for which ``getattr(dt, 'fold', 0)`` returns + ``fold`` for all versions of Python. In versions prior to + Python 3.6, this is a ``_DatetimeWithFold`` object, which is a + subclass of :py:class:`datetime.datetime` with the ``fold`` + attribute added, if ``fold`` is 1. + + .. versionadded:: 2.6.0 + """ + return dt.replace(fold=fold) + +else: + class _DatetimeWithFold(datetime): + """ + This is a class designed to provide a PEP 495-compliant interface for + Python versions before 3.6. It is used only for dates in a fold, so + the ``fold`` attribute is fixed at ``1``. + + .. versionadded:: 2.6.0 + """ + __slots__ = () + + def replace(self, *args, **kwargs): + """ + Return a datetime with the same attributes, except for those + attributes given new values by whichever keyword arguments are + specified. Note that tzinfo=None can be specified to create a naive + datetime from an aware datetime with no conversion of date and time + data. + + This is reimplemented in ``_DatetimeWithFold`` because pypy3 will + return a ``datetime.datetime`` even if ``fold`` is unchanged. + """ + argnames = ( + 'year', 'month', 'day', 'hour', 'minute', 'second', + 'microsecond', 'tzinfo' + ) + + for arg, argname in zip(args, argnames): + if argname in kwargs: + raise TypeError('Duplicate argument: {}'.format(argname)) + + kwargs[argname] = arg + + for argname in argnames: + if argname not in kwargs: + kwargs[argname] = getattr(self, argname) + + dt_class = self.__class__ if kwargs.get('fold', 1) else datetime + + return dt_class(**kwargs) + + @property + def fold(self): + return 1 + + def enfold(dt, fold=1): + """ + Provides a unified interface for assigning the ``fold`` attribute to + datetimes both before and after the implementation of PEP-495. + + :param fold: + The value for the ``fold`` attribute in the returned datetime. This + should be either 0 or 1. + + :return: + Returns an object for which ``getattr(dt, 'fold', 0)`` returns + ``fold`` for all versions of Python. In versions prior to + Python 3.6, this is a ``_DatetimeWithFold`` object, which is a + subclass of :py:class:`datetime.datetime` with the ``fold`` + attribute added, if ``fold`` is 1. + + .. versionadded:: 2.6.0 + """ + if getattr(dt, 'fold', 0) == fold: + return dt + + args = dt.timetuple()[:6] + args += (dt.microsecond, dt.tzinfo) + + if fold: + return _DatetimeWithFold(*args) + else: + return datetime(*args) + + +def _validate_fromutc_inputs(f): + """ + The CPython version of ``fromutc`` checks that the input is a ``datetime`` + object and that ``self`` is attached as its ``tzinfo``. + """ + @wraps(f) + def fromutc(self, dt): + if not isinstance(dt, datetime): + raise TypeError("fromutc() requires a datetime argument") + if dt.tzinfo is not self: + raise ValueError("dt.tzinfo is not self") + + return f(self, dt) + + return fromutc + + +class _tzinfo(tzinfo): + """ + Base class for all ``dateutil`` ``tzinfo`` objects. + """ + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + + + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + + dt = dt.replace(tzinfo=self) + + wall_0 = enfold(dt, fold=0) + wall_1 = enfold(dt, fold=1) + + same_offset = wall_0.utcoffset() == wall_1.utcoffset() + same_dt = wall_0.replace(tzinfo=None) == wall_1.replace(tzinfo=None) + + return same_dt and not same_offset + + def _fold_status(self, dt_utc, dt_wall): + """ + Determine the fold status of a "wall" datetime, given a representation + of the same datetime as a (naive) UTC datetime. This is calculated based + on the assumption that ``dt.utcoffset() - dt.dst()`` is constant for all + datetimes, and that this offset is the actual number of hours separating + ``dt_utc`` and ``dt_wall``. + + :param dt_utc: + Representation of the datetime as UTC + + :param dt_wall: + Representation of the datetime as "wall time". This parameter must + either have a `fold` attribute or have a fold-naive + :class:`datetime.tzinfo` attached, otherwise the calculation may + fail. + """ + if self.is_ambiguous(dt_wall): + delta_wall = dt_wall - dt_utc + _fold = int(delta_wall == (dt_utc.utcoffset() - dt_utc.dst())) + else: + _fold = 0 + + return _fold + + def _fold(self, dt): + return getattr(dt, 'fold', 0) + + def _fromutc(self, dt): + """ + Given a timezone-aware datetime in a given timezone, calculates a + timezone-aware datetime in a new timezone. + + Since this is the one time that we *know* we have an unambiguous + datetime object, we take this opportunity to determine whether the + datetime is ambiguous and in a "fold" state (e.g. if it's the first + occurence, chronologically, of the ambiguous datetime). + + :param dt: + A timezone-aware :class:`datetime.datetime` object. + """ + + # Re-implement the algorithm from Python's datetime.py + dtoff = dt.utcoffset() + if dtoff is None: + raise ValueError("fromutc() requires a non-None utcoffset() " + "result") + + # The original datetime.py code assumes that `dst()` defaults to + # zero during ambiguous times. PEP 495 inverts this presumption, so + # for pre-PEP 495 versions of python, we need to tweak the algorithm. + dtdst = dt.dst() + if dtdst is None: + raise ValueError("fromutc() requires a non-None dst() result") + delta = dtoff - dtdst + + dt += delta + # Set fold=1 so we can default to being in the fold for + # ambiguous dates. + dtdst = enfold(dt, fold=1).dst() + if dtdst is None: + raise ValueError("fromutc(): dt.dst gave inconsistent " + "results; cannot convert") + return dt + dtdst + + @_validate_fromutc_inputs + def fromutc(self, dt): + """ + Given a timezone-aware datetime in a given timezone, calculates a + timezone-aware datetime in a new timezone. + + Since this is the one time that we *know* we have an unambiguous + datetime object, we take this opportunity to determine whether the + datetime is ambiguous and in a "fold" state (e.g. if it's the first + occurance, chronologically, of the ambiguous datetime). + + :param dt: + A timezone-aware :class:`datetime.datetime` object. + """ + dt_wall = self._fromutc(dt) + + # Calculate the fold status given the two datetimes. + _fold = self._fold_status(dt, dt_wall) + + # Set the default fold value for ambiguous dates + return enfold(dt_wall, fold=_fold) + + +class tzrangebase(_tzinfo): + """ + This is an abstract base class for time zones represented by an annual + transition into and out of DST. Child classes should implement the following + methods: + + * ``__init__(self, *args, **kwargs)`` + * ``transitions(self, year)`` - this is expected to return a tuple of + datetimes representing the DST on and off transitions in standard + time. + + A fully initialized ``tzrangebase`` subclass should also provide the + following attributes: + * ``hasdst``: Boolean whether or not the zone uses DST. + * ``_dst_offset`` / ``_std_offset``: :class:`datetime.timedelta` objects + representing the respective UTC offsets. + * ``_dst_abbr`` / ``_std_abbr``: Strings representing the timezone short + abbreviations in DST and STD, respectively. + * ``_hasdst``: Whether or not the zone has DST. + + .. versionadded:: 2.6.0 + """ + def __init__(self): + raise NotImplementedError('tzrangebase is an abstract base class') + + def utcoffset(self, dt): + isdst = self._isdst(dt) + + if isdst is None: + return None + elif isdst: + return self._dst_offset + else: + return self._std_offset + + def dst(self, dt): + isdst = self._isdst(dt) + + if isdst is None: + return None + elif isdst: + return self._dst_base_offset + else: + return ZERO + + @tzname_in_python2 + def tzname(self, dt): + if self._isdst(dt): + return self._dst_abbr + else: + return self._std_abbr + + def fromutc(self, dt): + """ Given a datetime in UTC, return local time """ + if not isinstance(dt, datetime): + raise TypeError("fromutc() requires a datetime argument") + + if dt.tzinfo is not self: + raise ValueError("dt.tzinfo is not self") + + # Get transitions - if there are none, fixed offset + transitions = self.transitions(dt.year) + if transitions is None: + return dt + self.utcoffset(dt) + + # Get the transition times in UTC + dston, dstoff = transitions + + dston -= self._std_offset + dstoff -= self._std_offset + + utc_transitions = (dston, dstoff) + dt_utc = dt.replace(tzinfo=None) + + isdst = self._naive_isdst(dt_utc, utc_transitions) + + if isdst: + dt_wall = dt + self._dst_offset + else: + dt_wall = dt + self._std_offset + + _fold = int(not isdst and self.is_ambiguous(dt_wall)) + + return enfold(dt_wall, fold=_fold) + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + + + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + if not self.hasdst: + return False + + start, end = self.transitions(dt.year) + + dt = dt.replace(tzinfo=None) + return (end <= dt < end + self._dst_base_offset) + + def _isdst(self, dt): + if not self.hasdst: + return False + elif dt is None: + return None + + transitions = self.transitions(dt.year) + + if transitions is None: + return False + + dt = dt.replace(tzinfo=None) + + isdst = self._naive_isdst(dt, transitions) + + # Handle ambiguous dates + if not isdst and self.is_ambiguous(dt): + return not self._fold(dt) + else: + return isdst + + def _naive_isdst(self, dt, transitions): + dston, dstoff = transitions + + dt = dt.replace(tzinfo=None) + + if dston < dstoff: + isdst = dston <= dt < dstoff + else: + isdst = not dstoff <= dt < dston + + return isdst + + @property + def _dst_base_offset(self): + return self._dst_offset - self._std_offset + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return "%s(...)" % self.__class__.__name__ + + __reduce__ = object.__reduce__ diff --git a/Windows/dateutil/tz/_factories.py b/Windows/dateutil/tz/_factories.py new file mode 100644 index 00000000..d2560eb7 --- /dev/null +++ b/Windows/dateutil/tz/_factories.py @@ -0,0 +1,73 @@ +from datetime import timedelta +import weakref +from collections import OrderedDict + + +class _TzSingleton(type): + def __init__(cls, *args, **kwargs): + cls.__instance = None + super(_TzSingleton, cls).__init__(*args, **kwargs) + + def __call__(cls): + if cls.__instance is None: + cls.__instance = super(_TzSingleton, cls).__call__() + return cls.__instance + + +class _TzFactory(type): + def instance(cls, *args, **kwargs): + """Alternate constructor that returns a fresh instance""" + return type.__call__(cls, *args, **kwargs) + + +class _TzOffsetFactory(_TzFactory): + def __init__(cls, *args, **kwargs): + cls.__instances = weakref.WeakValueDictionary() + cls.__strong_cache = OrderedDict() + cls.__strong_cache_size = 8 + + def __call__(cls, name, offset): + if isinstance(offset, timedelta): + key = (name, offset.total_seconds()) + else: + key = (name, offset) + + instance = cls.__instances.get(key, None) + if instance is None: + instance = cls.__instances.setdefault(key, + cls.instance(name, offset)) + + cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) + + # Remove an item if the strong cache is overpopulated + # TODO: Maybe this should be under a lock? + if len(cls.__strong_cache) > cls.__strong_cache_size: + cls.__strong_cache.popitem(last=False) + + return instance + + +class _TzStrFactory(_TzFactory): + def __init__(cls, *args, **kwargs): + cls.__instances = weakref.WeakValueDictionary() + cls.__strong_cache = OrderedDict() + cls.__strong_cache_size = 8 + + def __call__(cls, s, posix_offset=False): + key = (s, posix_offset) + instance = cls.__instances.get(key, None) + + if instance is None: + instance = cls.__instances.setdefault(key, + cls.instance(s, posix_offset)) + + cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) + + + # Remove an item if the strong cache is overpopulated + # TODO: Maybe this should be under a lock? + if len(cls.__strong_cache) > cls.__strong_cache_size: + cls.__strong_cache.popitem(last=False) + + return instance + diff --git a/Windows/dateutil/tz/tz.py b/Windows/dateutil/tz/tz.py new file mode 100644 index 00000000..d05414e7 --- /dev/null +++ b/Windows/dateutil/tz/tz.py @@ -0,0 +1,1836 @@ +# -*- coding: utf-8 -*- +""" +This module offers timezone implementations subclassing the abstract +:py:class:`datetime.tzinfo` type. There are classes to handle tzfile format +files (usually are in :file:`/etc/localtime`, :file:`/usr/share/zoneinfo`, +etc), TZ environment string (in all known formats), given ranges (with help +from relative deltas), local machine timezone, fixed offset timezone, and UTC +timezone. +""" +import datetime +import struct +import time +import sys +import os +import bisect +import weakref +from collections import OrderedDict + +import six +from six import string_types +from six.moves import _thread +from ._common import tzname_in_python2, _tzinfo +from ._common import tzrangebase, enfold +from ._common import _validate_fromutc_inputs + +from ._factories import _TzSingleton, _TzOffsetFactory +from ._factories import _TzStrFactory +try: + from .win import tzwin, tzwinlocal +except ImportError: + tzwin = tzwinlocal = None + +# For warning about rounding tzinfo +from warnings import warn + +ZERO = datetime.timedelta(0) +EPOCH = datetime.datetime.utcfromtimestamp(0) +EPOCHORDINAL = EPOCH.toordinal() + + +@six.add_metaclass(_TzSingleton) +class tzutc(datetime.tzinfo): + """ + This is a tzinfo object that represents the UTC time zone. + + **Examples:** + + .. doctest:: + + >>> from datetime import * + >>> from dateutil.tz import * + + >>> datetime.now() + datetime.datetime(2003, 9, 27, 9, 40, 1, 521290) + + >>> datetime.now(tzutc()) + datetime.datetime(2003, 9, 27, 12, 40, 12, 156379, tzinfo=tzutc()) + + >>> datetime.now(tzutc()).tzname() + 'UTC' + + .. versionchanged:: 2.7.0 + ``tzutc()`` is now a singleton, so the result of ``tzutc()`` will + always return the same object. + + .. doctest:: + + >>> from dateutil.tz import tzutc, UTC + >>> tzutc() is tzutc() + True + >>> tzutc() is UTC + True + """ + def utcoffset(self, dt): + return ZERO + + def dst(self, dt): + return ZERO + + @tzname_in_python2 + def tzname(self, dt): + return "UTC" + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + + + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + return False + + @_validate_fromutc_inputs + def fromutc(self, dt): + """ + Fast track version of fromutc() returns the original ``dt`` object for + any valid :py:class:`datetime.datetime` object. + """ + return dt + + def __eq__(self, other): + if not isinstance(other, (tzutc, tzoffset)): + return NotImplemented + + return (isinstance(other, tzutc) or + (isinstance(other, tzoffset) and other._offset == ZERO)) + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return "%s()" % self.__class__.__name__ + + __reduce__ = object.__reduce__ + + +@six.add_metaclass(_TzOffsetFactory) +class tzoffset(datetime.tzinfo): + """ + A simple class for representing a fixed offset from UTC. + + :param name: + The timezone name, to be returned when ``tzname()`` is called. + :param offset: + The time zone offset in seconds, or (since version 2.6.0, represented + as a :py:class:`datetime.timedelta` object). + """ + def __init__(self, name, offset): + self._name = name + + try: + # Allow a timedelta + offset = offset.total_seconds() + except (TypeError, AttributeError): + pass + + self._offset = datetime.timedelta(seconds=_get_supported_offset(offset)) + + def utcoffset(self, dt): + return self._offset + + def dst(self, dt): + return ZERO + + @tzname_in_python2 + def tzname(self, dt): + return self._name + + @_validate_fromutc_inputs + def fromutc(self, dt): + return dt + self._offset + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + return False + + def __eq__(self, other): + if not isinstance(other, tzoffset): + return NotImplemented + + return self._offset == other._offset + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return "%s(%s, %s)" % (self.__class__.__name__, + repr(self._name), + int(self._offset.total_seconds())) + + __reduce__ = object.__reduce__ + + +class tzlocal(_tzinfo): + """ + A :class:`tzinfo` subclass built around the ``time`` timezone functions. + """ + def __init__(self): + super(tzlocal, self).__init__() + + self._std_offset = datetime.timedelta(seconds=-time.timezone) + if time.daylight: + self._dst_offset = datetime.timedelta(seconds=-time.altzone) + else: + self._dst_offset = self._std_offset + + self._dst_saved = self._dst_offset - self._std_offset + self._hasdst = bool(self._dst_saved) + self._tznames = tuple(time.tzname) + + def utcoffset(self, dt): + if dt is None and self._hasdst: + return None + + if self._isdst(dt): + return self._dst_offset + else: + return self._std_offset + + def dst(self, dt): + if dt is None and self._hasdst: + return None + + if self._isdst(dt): + return self._dst_offset - self._std_offset + else: + return ZERO + + @tzname_in_python2 + def tzname(self, dt): + return self._tznames[self._isdst(dt)] + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + + + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + naive_dst = self._naive_is_dst(dt) + return (not naive_dst and + (naive_dst != self._naive_is_dst(dt - self._dst_saved))) + + def _naive_is_dst(self, dt): + timestamp = _datetime_to_timestamp(dt) + return time.localtime(timestamp + time.timezone).tm_isdst + + def _isdst(self, dt, fold_naive=True): + # We can't use mktime here. It is unstable when deciding if + # the hour near to a change is DST or not. + # + # timestamp = time.mktime((dt.year, dt.month, dt.day, dt.hour, + # dt.minute, dt.second, dt.weekday(), 0, -1)) + # return time.localtime(timestamp).tm_isdst + # + # The code above yields the following result: + # + # >>> import tz, datetime + # >>> t = tz.tzlocal() + # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() + # 'BRDT' + # >>> datetime.datetime(2003,2,16,0,tzinfo=t).tzname() + # 'BRST' + # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() + # 'BRST' + # >>> datetime.datetime(2003,2,15,22,tzinfo=t).tzname() + # 'BRDT' + # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() + # 'BRDT' + # + # Here is a more stable implementation: + # + if not self._hasdst: + return False + + # Check for ambiguous times: + dstval = self._naive_is_dst(dt) + fold = getattr(dt, 'fold', None) + + if self.is_ambiguous(dt): + if fold is not None: + return not self._fold(dt) + else: + return True + + return dstval + + def __eq__(self, other): + if isinstance(other, tzlocal): + return (self._std_offset == other._std_offset and + self._dst_offset == other._dst_offset) + elif isinstance(other, tzutc): + return (not self._hasdst and + self._tznames[0] in {'UTC', 'GMT'} and + self._std_offset == ZERO) + elif isinstance(other, tzoffset): + return (not self._hasdst and + self._tznames[0] == other._name and + self._std_offset == other._offset) + else: + return NotImplemented + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return "%s()" % self.__class__.__name__ + + __reduce__ = object.__reduce__ + + +class _ttinfo(object): + __slots__ = ["offset", "delta", "isdst", "abbr", + "isstd", "isgmt", "dstoffset"] + + def __init__(self): + for attr in self.__slots__: + setattr(self, attr, None) + + def __repr__(self): + l = [] + for attr in self.__slots__: + value = getattr(self, attr) + if value is not None: + l.append("%s=%s" % (attr, repr(value))) + return "%s(%s)" % (self.__class__.__name__, ", ".join(l)) + + def __eq__(self, other): + if not isinstance(other, _ttinfo): + return NotImplemented + + return (self.offset == other.offset and + self.delta == other.delta and + self.isdst == other.isdst and + self.abbr == other.abbr and + self.isstd == other.isstd and + self.isgmt == other.isgmt and + self.dstoffset == other.dstoffset) + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __getstate__(self): + state = {} + for name in self.__slots__: + state[name] = getattr(self, name, None) + return state + + def __setstate__(self, state): + for name in self.__slots__: + if name in state: + setattr(self, name, state[name]) + + +class _tzfile(object): + """ + Lightweight class for holding the relevant transition and time zone + information read from binary tzfiles. + """ + attrs = ['trans_list', 'trans_list_utc', 'trans_idx', 'ttinfo_list', + 'ttinfo_std', 'ttinfo_dst', 'ttinfo_before', 'ttinfo_first'] + + def __init__(self, **kwargs): + for attr in self.attrs: + setattr(self, attr, kwargs.get(attr, None)) + + +class tzfile(_tzinfo): + """ + This is a ``tzinfo`` subclass thant allows one to use the ``tzfile(5)`` + format timezone files to extract current and historical zone information. + + :param fileobj: + This can be an opened file stream or a file name that the time zone + information can be read from. + + :param filename: + This is an optional parameter specifying the source of the time zone + information in the event that ``fileobj`` is a file object. If omitted + and ``fileobj`` is a file stream, this parameter will be set either to + ``fileobj``'s ``name`` attribute or to ``repr(fileobj)``. + + See `Sources for Time Zone and Daylight Saving Time Data + `_ for more information. + Time zone files can be compiled from the `IANA Time Zone database files + `_ with the `zic time zone compiler + `_ + + .. note:: + + Only construct a ``tzfile`` directly if you have a specific timezone + file on disk that you want to read into a Python ``tzinfo`` object. + If you want to get a ``tzfile`` representing a specific IANA zone, + (e.g. ``'America/New_York'``), you should call + :func:`dateutil.tz.gettz` with the zone identifier. + + + **Examples:** + + Using the US Eastern time zone as an example, we can see that a ``tzfile`` + provides time zone information for the standard Daylight Saving offsets: + + .. testsetup:: tzfile + + from dateutil.tz import gettz + from datetime import datetime + + .. doctest:: tzfile + + >>> NYC = gettz('America/New_York') + >>> NYC + tzfile('/usr/share/zoneinfo/America/New_York') + + >>> print(datetime(2016, 1, 3, tzinfo=NYC)) # EST + 2016-01-03 00:00:00-05:00 + + >>> print(datetime(2016, 7, 7, tzinfo=NYC)) # EDT + 2016-07-07 00:00:00-04:00 + + + The ``tzfile`` structure contains a fully history of the time zone, + so historical dates will also have the right offsets. For example, before + the adoption of the UTC standards, New York used local solar mean time: + + .. doctest:: tzfile + + >>> print(datetime(1901, 4, 12, tzinfo=NYC)) # LMT + 1901-04-12 00:00:00-04:56 + + And during World War II, New York was on "Eastern War Time", which was a + state of permanent daylight saving time: + + .. doctest:: tzfile + + >>> print(datetime(1944, 2, 7, tzinfo=NYC)) # EWT + 1944-02-07 00:00:00-04:00 + + """ + + def __init__(self, fileobj, filename=None): + super(tzfile, self).__init__() + + file_opened_here = False + if isinstance(fileobj, string_types): + self._filename = fileobj + fileobj = open(fileobj, 'rb') + file_opened_here = True + elif filename is not None: + self._filename = filename + elif hasattr(fileobj, "name"): + self._filename = fileobj.name + else: + self._filename = repr(fileobj) + + if fileobj is not None: + if not file_opened_here: + fileobj = _nullcontext(fileobj) + + with fileobj as file_stream: + tzobj = self._read_tzfile(file_stream) + + self._set_tzdata(tzobj) + + def _set_tzdata(self, tzobj): + """ Set the time zone data of this object from a _tzfile object """ + # Copy the relevant attributes over as private attributes + for attr in _tzfile.attrs: + setattr(self, '_' + attr, getattr(tzobj, attr)) + + def _read_tzfile(self, fileobj): + out = _tzfile() + + # From tzfile(5): + # + # The time zone information files used by tzset(3) + # begin with the magic characters "TZif" to identify + # them as time zone information files, followed by + # sixteen bytes reserved for future use, followed by + # six four-byte values of type long, written in a + # ``standard'' byte order (the high-order byte + # of the value is written first). + if fileobj.read(4).decode() != "TZif": + raise ValueError("magic not found") + + fileobj.read(16) + + ( + # The number of UTC/local indicators stored in the file. + ttisgmtcnt, + + # The number of standard/wall indicators stored in the file. + ttisstdcnt, + + # The number of leap seconds for which data is + # stored in the file. + leapcnt, + + # The number of "transition times" for which data + # is stored in the file. + timecnt, + + # The number of "local time types" for which data + # is stored in the file (must not be zero). + typecnt, + + # The number of characters of "time zone + # abbreviation strings" stored in the file. + charcnt, + + ) = struct.unpack(">6l", fileobj.read(24)) + + # The above header is followed by tzh_timecnt four-byte + # values of type long, sorted in ascending order. + # These values are written in ``standard'' byte order. + # Each is used as a transition time (as returned by + # time(2)) at which the rules for computing local time + # change. + + if timecnt: + out.trans_list_utc = list(struct.unpack(">%dl" % timecnt, + fileobj.read(timecnt*4))) + else: + out.trans_list_utc = [] + + # Next come tzh_timecnt one-byte values of type unsigned + # char; each one tells which of the different types of + # ``local time'' types described in the file is associated + # with the same-indexed transition time. These values + # serve as indices into an array of ttinfo structures that + # appears next in the file. + + if timecnt: + out.trans_idx = struct.unpack(">%dB" % timecnt, + fileobj.read(timecnt)) + else: + out.trans_idx = [] + + # Each ttinfo structure is written as a four-byte value + # for tt_gmtoff of type long, in a standard byte + # order, followed by a one-byte value for tt_isdst + # and a one-byte value for tt_abbrind. In each + # structure, tt_gmtoff gives the number of + # seconds to be added to UTC, tt_isdst tells whether + # tm_isdst should be set by localtime(3), and + # tt_abbrind serves as an index into the array of + # time zone abbreviation characters that follow the + # ttinfo structure(s) in the file. + + ttinfo = [] + + for i in range(typecnt): + ttinfo.append(struct.unpack(">lbb", fileobj.read(6))) + + abbr = fileobj.read(charcnt).decode() + + # Then there are tzh_leapcnt pairs of four-byte + # values, written in standard byte order; the + # first value of each pair gives the time (as + # returned by time(2)) at which a leap second + # occurs; the second gives the total number of + # leap seconds to be applied after the given time. + # The pairs of values are sorted in ascending order + # by time. + + # Not used, for now (but seek for correct file position) + if leapcnt: + fileobj.seek(leapcnt * 8, os.SEEK_CUR) + + # Then there are tzh_ttisstdcnt standard/wall + # indicators, each stored as a one-byte value; + # they tell whether the transition times associated + # with local time types were specified as standard + # time or wall clock time, and are used when + # a time zone file is used in handling POSIX-style + # time zone environment variables. + + if ttisstdcnt: + isstd = struct.unpack(">%db" % ttisstdcnt, + fileobj.read(ttisstdcnt)) + + # Finally, there are tzh_ttisgmtcnt UTC/local + # indicators, each stored as a one-byte value; + # they tell whether the transition times associated + # with local time types were specified as UTC or + # local time, and are used when a time zone file + # is used in handling POSIX-style time zone envi- + # ronment variables. + + if ttisgmtcnt: + isgmt = struct.unpack(">%db" % ttisgmtcnt, + fileobj.read(ttisgmtcnt)) + + # Build ttinfo list + out.ttinfo_list = [] + for i in range(typecnt): + gmtoff, isdst, abbrind = ttinfo[i] + gmtoff = _get_supported_offset(gmtoff) + tti = _ttinfo() + tti.offset = gmtoff + tti.dstoffset = datetime.timedelta(0) + tti.delta = datetime.timedelta(seconds=gmtoff) + tti.isdst = isdst + tti.abbr = abbr[abbrind:abbr.find('\x00', abbrind)] + tti.isstd = (ttisstdcnt > i and isstd[i] != 0) + tti.isgmt = (ttisgmtcnt > i and isgmt[i] != 0) + out.ttinfo_list.append(tti) + + # Replace ttinfo indexes for ttinfo objects. + out.trans_idx = [out.ttinfo_list[idx] for idx in out.trans_idx] + + # Set standard, dst, and before ttinfos. before will be + # used when a given time is before any transitions, + # and will be set to the first non-dst ttinfo, or to + # the first dst, if all of them are dst. + out.ttinfo_std = None + out.ttinfo_dst = None + out.ttinfo_before = None + if out.ttinfo_list: + if not out.trans_list_utc: + out.ttinfo_std = out.ttinfo_first = out.ttinfo_list[0] + else: + for i in range(timecnt-1, -1, -1): + tti = out.trans_idx[i] + if not out.ttinfo_std and not tti.isdst: + out.ttinfo_std = tti + elif not out.ttinfo_dst and tti.isdst: + out.ttinfo_dst = tti + + if out.ttinfo_std and out.ttinfo_dst: + break + else: + if out.ttinfo_dst and not out.ttinfo_std: + out.ttinfo_std = out.ttinfo_dst + + for tti in out.ttinfo_list: + if not tti.isdst: + out.ttinfo_before = tti + break + else: + out.ttinfo_before = out.ttinfo_list[0] + + # Now fix transition times to become relative to wall time. + # + # I'm not sure about this. In my tests, the tz source file + # is setup to wall time, and in the binary file isstd and + # isgmt are off, so it should be in wall time. OTOH, it's + # always in gmt time. Let me know if you have comments + # about this. + lastdst = None + lastoffset = None + lastdstoffset = None + lastbaseoffset = None + out.trans_list = [] + + for i, tti in enumerate(out.trans_idx): + offset = tti.offset + dstoffset = 0 + + if lastdst is not None: + if tti.isdst: + if not lastdst: + dstoffset = offset - lastoffset + + if not dstoffset and lastdstoffset: + dstoffset = lastdstoffset + + tti.dstoffset = datetime.timedelta(seconds=dstoffset) + lastdstoffset = dstoffset + + # If a time zone changes its base offset during a DST transition, + # then you need to adjust by the previous base offset to get the + # transition time in local time. Otherwise you use the current + # base offset. Ideally, I would have some mathematical proof of + # why this is true, but I haven't really thought about it enough. + baseoffset = offset - dstoffset + adjustment = baseoffset + if (lastbaseoffset is not None and baseoffset != lastbaseoffset + and tti.isdst != lastdst): + # The base DST has changed + adjustment = lastbaseoffset + + lastdst = tti.isdst + lastoffset = offset + lastbaseoffset = baseoffset + + out.trans_list.append(out.trans_list_utc[i] + adjustment) + + out.trans_idx = tuple(out.trans_idx) + out.trans_list = tuple(out.trans_list) + out.trans_list_utc = tuple(out.trans_list_utc) + + return out + + def _find_last_transition(self, dt, in_utc=False): + # If there's no list, there are no transitions to find + if not self._trans_list: + return None + + timestamp = _datetime_to_timestamp(dt) + + # Find where the timestamp fits in the transition list - if the + # timestamp is a transition time, it's part of the "after" period. + trans_list = self._trans_list_utc if in_utc else self._trans_list + idx = bisect.bisect_right(trans_list, timestamp) + + # We want to know when the previous transition was, so subtract off 1 + return idx - 1 + + def _get_ttinfo(self, idx): + # For no list or after the last transition, default to _ttinfo_std + if idx is None or (idx + 1) >= len(self._trans_list): + return self._ttinfo_std + + # If there is a list and the time is before it, return _ttinfo_before + if idx < 0: + return self._ttinfo_before + + return self._trans_idx[idx] + + def _find_ttinfo(self, dt): + idx = self._resolve_ambiguous_time(dt) + + return self._get_ttinfo(idx) + + def fromutc(self, dt): + """ + The ``tzfile`` implementation of :py:func:`datetime.tzinfo.fromutc`. + + :param dt: + A :py:class:`datetime.datetime` object. + + :raises TypeError: + Raised if ``dt`` is not a :py:class:`datetime.datetime` object. + + :raises ValueError: + Raised if this is called with a ``dt`` which does not have this + ``tzinfo`` attached. + + :return: + Returns a :py:class:`datetime.datetime` object representing the + wall time in ``self``'s time zone. + """ + # These isinstance checks are in datetime.tzinfo, so we'll preserve + # them, even if we don't care about duck typing. + if not isinstance(dt, datetime.datetime): + raise TypeError("fromutc() requires a datetime argument") + + if dt.tzinfo is not self: + raise ValueError("dt.tzinfo is not self") + + # First treat UTC as wall time and get the transition we're in. + idx = self._find_last_transition(dt, in_utc=True) + tti = self._get_ttinfo(idx) + + dt_out = dt + datetime.timedelta(seconds=tti.offset) + + fold = self.is_ambiguous(dt_out, idx=idx) + + return enfold(dt_out, fold=int(fold)) + + def is_ambiguous(self, dt, idx=None): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + + + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + if idx is None: + idx = self._find_last_transition(dt) + + # Calculate the difference in offsets from current to previous + timestamp = _datetime_to_timestamp(dt) + tti = self._get_ttinfo(idx) + + if idx is None or idx <= 0: + return False + + od = self._get_ttinfo(idx - 1).offset - tti.offset + tt = self._trans_list[idx] # Transition time + + return timestamp < tt + od + + def _resolve_ambiguous_time(self, dt): + idx = self._find_last_transition(dt) + + # If we have no transitions, return the index + _fold = self._fold(dt) + if idx is None or idx == 0: + return idx + + # If it's ambiguous and we're in a fold, shift to a different index. + idx_offset = int(not _fold and self.is_ambiguous(dt, idx)) + + return idx - idx_offset + + def utcoffset(self, dt): + if dt is None: + return None + + if not self._ttinfo_std: + return ZERO + + return self._find_ttinfo(dt).delta + + def dst(self, dt): + if dt is None: + return None + + if not self._ttinfo_dst: + return ZERO + + tti = self._find_ttinfo(dt) + + if not tti.isdst: + return ZERO + + # The documentation says that utcoffset()-dst() must + # be constant for every dt. + return tti.dstoffset + + @tzname_in_python2 + def tzname(self, dt): + if not self._ttinfo_std or dt is None: + return None + return self._find_ttinfo(dt).abbr + + def __eq__(self, other): + if not isinstance(other, tzfile): + return NotImplemented + return (self._trans_list == other._trans_list and + self._trans_idx == other._trans_idx and + self._ttinfo_list == other._ttinfo_list) + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return "%s(%s)" % (self.__class__.__name__, repr(self._filename)) + + def __reduce__(self): + return self.__reduce_ex__(None) + + def __reduce_ex__(self, protocol): + return (self.__class__, (None, self._filename), self.__dict__) + + +class tzrange(tzrangebase): + """ + The ``tzrange`` object is a time zone specified by a set of offsets and + abbreviations, equivalent to the way the ``TZ`` variable can be specified + in POSIX-like systems, but using Python delta objects to specify DST + start, end and offsets. + + :param stdabbr: + The abbreviation for standard time (e.g. ``'EST'``). + + :param stdoffset: + An integer or :class:`datetime.timedelta` object or equivalent + specifying the base offset from UTC. + + If unspecified, +00:00 is used. + + :param dstabbr: + The abbreviation for DST / "Summer" time (e.g. ``'EDT'``). + + If specified, with no other DST information, DST is assumed to occur + and the default behavior or ``dstoffset``, ``start`` and ``end`` is + used. If unspecified and no other DST information is specified, it + is assumed that this zone has no DST. + + If this is unspecified and other DST information is *is* specified, + DST occurs in the zone but the time zone abbreviation is left + unchanged. + + :param dstoffset: + A an integer or :class:`datetime.timedelta` object or equivalent + specifying the UTC offset during DST. If unspecified and any other DST + information is specified, it is assumed to be the STD offset +1 hour. + + :param start: + A :class:`relativedelta.relativedelta` object or equivalent specifying + the time and time of year that daylight savings time starts. To + specify, for example, that DST starts at 2AM on the 2nd Sunday in + March, pass: + + ``relativedelta(hours=2, month=3, day=1, weekday=SU(+2))`` + + If unspecified and any other DST information is specified, the default + value is 2 AM on the first Sunday in April. + + :param end: + A :class:`relativedelta.relativedelta` object or equivalent + representing the time and time of year that daylight savings time + ends, with the same specification method as in ``start``. One note is + that this should point to the first time in the *standard* zone, so if + a transition occurs at 2AM in the DST zone and the clocks are set back + 1 hour to 1AM, set the ``hours`` parameter to +1. + + + **Examples:** + + .. testsetup:: tzrange + + from dateutil.tz import tzrange, tzstr + + .. doctest:: tzrange + + >>> tzstr('EST5EDT') == tzrange("EST", -18000, "EDT") + True + + >>> from dateutil.relativedelta import * + >>> range1 = tzrange("EST", -18000, "EDT") + >>> range2 = tzrange("EST", -18000, "EDT", -14400, + ... relativedelta(hours=+2, month=4, day=1, + ... weekday=SU(+1)), + ... relativedelta(hours=+1, month=10, day=31, + ... weekday=SU(-1))) + >>> tzstr('EST5EDT') == range1 == range2 + True + + """ + def __init__(self, stdabbr, stdoffset=None, + dstabbr=None, dstoffset=None, + start=None, end=None): + + global relativedelta + from dateutil import relativedelta + + self._std_abbr = stdabbr + self._dst_abbr = dstabbr + + try: + stdoffset = stdoffset.total_seconds() + except (TypeError, AttributeError): + pass + + try: + dstoffset = dstoffset.total_seconds() + except (TypeError, AttributeError): + pass + + if stdoffset is not None: + self._std_offset = datetime.timedelta(seconds=stdoffset) + else: + self._std_offset = ZERO + + if dstoffset is not None: + self._dst_offset = datetime.timedelta(seconds=dstoffset) + elif dstabbr and stdoffset is not None: + self._dst_offset = self._std_offset + datetime.timedelta(hours=+1) + else: + self._dst_offset = ZERO + + if dstabbr and start is None: + self._start_delta = relativedelta.relativedelta( + hours=+2, month=4, day=1, weekday=relativedelta.SU(+1)) + else: + self._start_delta = start + + if dstabbr and end is None: + self._end_delta = relativedelta.relativedelta( + hours=+1, month=10, day=31, weekday=relativedelta.SU(-1)) + else: + self._end_delta = end + + self._dst_base_offset_ = self._dst_offset - self._std_offset + self.hasdst = bool(self._start_delta) + + def transitions(self, year): + """ + For a given year, get the DST on and off transition times, expressed + always on the standard time side. For zones with no transitions, this + function returns ``None``. + + :param year: + The year whose transitions you would like to query. + + :return: + Returns a :class:`tuple` of :class:`datetime.datetime` objects, + ``(dston, dstoff)`` for zones with an annual DST transition, or + ``None`` for fixed offset zones. + """ + if not self.hasdst: + return None + + base_year = datetime.datetime(year, 1, 1) + + start = base_year + self._start_delta + end = base_year + self._end_delta + + return (start, end) + + def __eq__(self, other): + if not isinstance(other, tzrange): + return NotImplemented + + return (self._std_abbr == other._std_abbr and + self._dst_abbr == other._dst_abbr and + self._std_offset == other._std_offset and + self._dst_offset == other._dst_offset and + self._start_delta == other._start_delta and + self._end_delta == other._end_delta) + + @property + def _dst_base_offset(self): + return self._dst_base_offset_ + + +@six.add_metaclass(_TzStrFactory) +class tzstr(tzrange): + """ + ``tzstr`` objects are time zone objects specified by a time-zone string as + it would be passed to a ``TZ`` variable on POSIX-style systems (see + the `GNU C Library: TZ Variable`_ for more details). + + There is one notable exception, which is that POSIX-style time zones use an + inverted offset format, so normally ``GMT+3`` would be parsed as an offset + 3 hours *behind* GMT. The ``tzstr`` time zone object will parse this as an + offset 3 hours *ahead* of GMT. If you would like to maintain the POSIX + behavior, pass a ``True`` value to ``posix_offset``. + + The :class:`tzrange` object provides the same functionality, but is + specified using :class:`relativedelta.relativedelta` objects. rather than + strings. + + :param s: + A time zone string in ``TZ`` variable format. This can be a + :class:`bytes` (2.x: :class:`str`), :class:`str` (2.x: + :class:`unicode`) or a stream emitting unicode characters + (e.g. :class:`StringIO`). + + :param posix_offset: + Optional. If set to ``True``, interpret strings such as ``GMT+3`` or + ``UTC+3`` as being 3 hours *behind* UTC rather than ahead, per the + POSIX standard. + + .. caution:: + + Prior to version 2.7.0, this function also supported time zones + in the format: + + * ``EST5EDT,4,0,6,7200,10,0,26,7200,3600`` + * ``EST5EDT,4,1,0,7200,10,-1,0,7200,3600`` + + This format is non-standard and has been deprecated; this function + will raise a :class:`DeprecatedTZFormatWarning` until + support is removed in a future version. + + .. _`GNU C Library: TZ Variable`: + https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html + """ + def __init__(self, s, posix_offset=False): + global parser + from dateutil.parser import _parser as parser + + self._s = s + + res = parser._parsetz(s) + if res is None or res.any_unused_tokens: + raise ValueError("unknown string format") + + # Here we break the compatibility with the TZ variable handling. + # GMT-3 actually *means* the timezone -3. + if res.stdabbr in ("GMT", "UTC") and not posix_offset: + res.stdoffset *= -1 + + # We must initialize it first, since _delta() needs + # _std_offset and _dst_offset set. Use False in start/end + # to avoid building it two times. + tzrange.__init__(self, res.stdabbr, res.stdoffset, + res.dstabbr, res.dstoffset, + start=False, end=False) + + if not res.dstabbr: + self._start_delta = None + self._end_delta = None + else: + self._start_delta = self._delta(res.start) + if self._start_delta: + self._end_delta = self._delta(res.end, isend=1) + + self.hasdst = bool(self._start_delta) + + def _delta(self, x, isend=0): + from dateutil import relativedelta + kwargs = {} + if x.month is not None: + kwargs["month"] = x.month + if x.weekday is not None: + kwargs["weekday"] = relativedelta.weekday(x.weekday, x.week) + if x.week > 0: + kwargs["day"] = 1 + else: + kwargs["day"] = 31 + elif x.day: + kwargs["day"] = x.day + elif x.yday is not None: + kwargs["yearday"] = x.yday + elif x.jyday is not None: + kwargs["nlyearday"] = x.jyday + if not kwargs: + # Default is to start on first sunday of april, and end + # on last sunday of october. + if not isend: + kwargs["month"] = 4 + kwargs["day"] = 1 + kwargs["weekday"] = relativedelta.SU(+1) + else: + kwargs["month"] = 10 + kwargs["day"] = 31 + kwargs["weekday"] = relativedelta.SU(-1) + if x.time is not None: + kwargs["seconds"] = x.time + else: + # Default is 2AM. + kwargs["seconds"] = 7200 + if isend: + # Convert to standard time, to follow the documented way + # of working with the extra hour. See the documentation + # of the tzinfo class. + delta = self._dst_offset - self._std_offset + kwargs["seconds"] -= delta.seconds + delta.days * 86400 + return relativedelta.relativedelta(**kwargs) + + def __repr__(self): + return "%s(%s)" % (self.__class__.__name__, repr(self._s)) + + +class _tzicalvtzcomp(object): + def __init__(self, tzoffsetfrom, tzoffsetto, isdst, + tzname=None, rrule=None): + self.tzoffsetfrom = datetime.timedelta(seconds=tzoffsetfrom) + self.tzoffsetto = datetime.timedelta(seconds=tzoffsetto) + self.tzoffsetdiff = self.tzoffsetto - self.tzoffsetfrom + self.isdst = isdst + self.tzname = tzname + self.rrule = rrule + + +class _tzicalvtz(_tzinfo): + def __init__(self, tzid, comps=[]): + super(_tzicalvtz, self).__init__() + + self._tzid = tzid + self._comps = comps + self._cachedate = [] + self._cachecomp = [] + self._cache_lock = _thread.allocate_lock() + + def _find_comp(self, dt): + if len(self._comps) == 1: + return self._comps[0] + + dt = dt.replace(tzinfo=None) + + try: + with self._cache_lock: + return self._cachecomp[self._cachedate.index( + (dt, self._fold(dt)))] + except ValueError: + pass + + lastcompdt = None + lastcomp = None + + for comp in self._comps: + compdt = self._find_compdt(comp, dt) + + if compdt and (not lastcompdt or lastcompdt < compdt): + lastcompdt = compdt + lastcomp = comp + + if not lastcomp: + # RFC says nothing about what to do when a given + # time is before the first onset date. We'll look for the + # first standard component, or the first component, if + # none is found. + for comp in self._comps: + if not comp.isdst: + lastcomp = comp + break + else: + lastcomp = comp[0] + + with self._cache_lock: + self._cachedate.insert(0, (dt, self._fold(dt))) + self._cachecomp.insert(0, lastcomp) + + if len(self._cachedate) > 10: + self._cachedate.pop() + self._cachecomp.pop() + + return lastcomp + + def _find_compdt(self, comp, dt): + if comp.tzoffsetdiff < ZERO and self._fold(dt): + dt -= comp.tzoffsetdiff + + compdt = comp.rrule.before(dt, inc=True) + + return compdt + + def utcoffset(self, dt): + if dt is None: + return None + + return self._find_comp(dt).tzoffsetto + + def dst(self, dt): + comp = self._find_comp(dt) + if comp.isdst: + return comp.tzoffsetdiff + else: + return ZERO + + @tzname_in_python2 + def tzname(self, dt): + return self._find_comp(dt).tzname + + def __repr__(self): + return "" % repr(self._tzid) + + __reduce__ = object.__reduce__ + + +class tzical(object): + """ + This object is designed to parse an iCalendar-style ``VTIMEZONE`` structure + as set out in `RFC 5545`_ Section 4.6.5 into one or more `tzinfo` objects. + + :param `fileobj`: + A file or stream in iCalendar format, which should be UTF-8 encoded + with CRLF endings. + + .. _`RFC 5545`: https://tools.ietf.org/html/rfc5545 + """ + def __init__(self, fileobj): + global rrule + from dateutil import rrule + + if isinstance(fileobj, string_types): + self._s = fileobj + # ical should be encoded in UTF-8 with CRLF + fileobj = open(fileobj, 'r') + else: + self._s = getattr(fileobj, 'name', repr(fileobj)) + fileobj = _nullcontext(fileobj) + + self._vtz = {} + + with fileobj as fobj: + self._parse_rfc(fobj.read()) + + def keys(self): + """ + Retrieves the available time zones as a list. + """ + return list(self._vtz.keys()) + + def get(self, tzid=None): + """ + Retrieve a :py:class:`datetime.tzinfo` object by its ``tzid``. + + :param tzid: + If there is exactly one time zone available, omitting ``tzid`` + or passing :py:const:`None` value returns it. Otherwise a valid + key (which can be retrieved from :func:`keys`) is required. + + :raises ValueError: + Raised if ``tzid`` is not specified but there are either more + or fewer than 1 zone defined. + + :returns: + Returns either a :py:class:`datetime.tzinfo` object representing + the relevant time zone or :py:const:`None` if the ``tzid`` was + not found. + """ + if tzid is None: + if len(self._vtz) == 0: + raise ValueError("no timezones defined") + elif len(self._vtz) > 1: + raise ValueError("more than one timezone available") + tzid = next(iter(self._vtz)) + + return self._vtz.get(tzid) + + def _parse_offset(self, s): + s = s.strip() + if not s: + raise ValueError("empty offset") + if s[0] in ('+', '-'): + signal = (-1, +1)[s[0] == '+'] + s = s[1:] + else: + signal = +1 + if len(s) == 4: + return (int(s[:2]) * 3600 + int(s[2:]) * 60) * signal + elif len(s) == 6: + return (int(s[:2]) * 3600 + int(s[2:4]) * 60 + int(s[4:])) * signal + else: + raise ValueError("invalid offset: " + s) + + def _parse_rfc(self, s): + lines = s.splitlines() + if not lines: + raise ValueError("empty string") + + # Unfold + i = 0 + while i < len(lines): + line = lines[i].rstrip() + if not line: + del lines[i] + elif i > 0 and line[0] == " ": + lines[i-1] += line[1:] + del lines[i] + else: + i += 1 + + tzid = None + comps = [] + invtz = False + comptype = None + for line in lines: + if not line: + continue + name, value = line.split(':', 1) + parms = name.split(';') + if not parms: + raise ValueError("empty property name") + name = parms[0].upper() + parms = parms[1:] + if invtz: + if name == "BEGIN": + if value in ("STANDARD", "DAYLIGHT"): + # Process component + pass + else: + raise ValueError("unknown component: "+value) + comptype = value + founddtstart = False + tzoffsetfrom = None + tzoffsetto = None + rrulelines = [] + tzname = None + elif name == "END": + if value == "VTIMEZONE": + if comptype: + raise ValueError("component not closed: "+comptype) + if not tzid: + raise ValueError("mandatory TZID not found") + if not comps: + raise ValueError( + "at least one component is needed") + # Process vtimezone + self._vtz[tzid] = _tzicalvtz(tzid, comps) + invtz = False + elif value == comptype: + if not founddtstart: + raise ValueError("mandatory DTSTART not found") + if tzoffsetfrom is None: + raise ValueError( + "mandatory TZOFFSETFROM not found") + if tzoffsetto is None: + raise ValueError( + "mandatory TZOFFSETFROM not found") + # Process component + rr = None + if rrulelines: + rr = rrule.rrulestr("\n".join(rrulelines), + compatible=True, + ignoretz=True, + cache=True) + comp = _tzicalvtzcomp(tzoffsetfrom, tzoffsetto, + (comptype == "DAYLIGHT"), + tzname, rr) + comps.append(comp) + comptype = None + else: + raise ValueError("invalid component end: "+value) + elif comptype: + if name == "DTSTART": + # DTSTART in VTIMEZONE takes a subset of valid RRULE + # values under RFC 5545. + for parm in parms: + if parm != 'VALUE=DATE-TIME': + msg = ('Unsupported DTSTART param in ' + + 'VTIMEZONE: ' + parm) + raise ValueError(msg) + rrulelines.append(line) + founddtstart = True + elif name in ("RRULE", "RDATE", "EXRULE", "EXDATE"): + rrulelines.append(line) + elif name == "TZOFFSETFROM": + if parms: + raise ValueError( + "unsupported %s parm: %s " % (name, parms[0])) + tzoffsetfrom = self._parse_offset(value) + elif name == "TZOFFSETTO": + if parms: + raise ValueError( + "unsupported TZOFFSETTO parm: "+parms[0]) + tzoffsetto = self._parse_offset(value) + elif name == "TZNAME": + if parms: + raise ValueError( + "unsupported TZNAME parm: "+parms[0]) + tzname = value + elif name == "COMMENT": + pass + else: + raise ValueError("unsupported property: "+name) + else: + if name == "TZID": + if parms: + raise ValueError( + "unsupported TZID parm: "+parms[0]) + tzid = value + elif name in ("TZURL", "LAST-MODIFIED", "COMMENT"): + pass + else: + raise ValueError("unsupported property: "+name) + elif name == "BEGIN" and value == "VTIMEZONE": + tzid = None + comps = [] + invtz = True + + def __repr__(self): + return "%s(%s)" % (self.__class__.__name__, repr(self._s)) + + +if sys.platform != "win32": + TZFILES = ["/etc/localtime", "localtime"] + TZPATHS = ["/usr/share/zoneinfo", + "/usr/lib/zoneinfo", + "/usr/share/lib/zoneinfo", + "/etc/zoneinfo"] +else: + TZFILES = [] + TZPATHS = [] + + +def __get_gettz(): + tzlocal_classes = (tzlocal,) + if tzwinlocal is not None: + tzlocal_classes += (tzwinlocal,) + + class GettzFunc(object): + """ + Retrieve a time zone object from a string representation + + This function is intended to retrieve the :py:class:`tzinfo` subclass + that best represents the time zone that would be used if a POSIX + `TZ variable`_ were set to the same value. + + If no argument or an empty string is passed to ``gettz``, local time + is returned: + + .. code-block:: python3 + + >>> gettz() + tzfile('/etc/localtime') + + This function is also the preferred way to map IANA tz database keys + to :class:`tzfile` objects: + + .. code-block:: python3 + + >>> gettz('Pacific/Kiritimati') + tzfile('/usr/share/zoneinfo/Pacific/Kiritimati') + + On Windows, the standard is extended to include the Windows-specific + zone names provided by the operating system: + + .. code-block:: python3 + + >>> gettz('Egypt Standard Time') + tzwin('Egypt Standard Time') + + Passing a GNU ``TZ`` style string time zone specification returns a + :class:`tzstr` object: + + .. code-block:: python3 + + >>> gettz('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3') + tzstr('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3') + + :param name: + A time zone name (IANA, or, on Windows, Windows keys), location of + a ``tzfile(5)`` zoneinfo file or ``TZ`` variable style time zone + specifier. An empty string, no argument or ``None`` is interpreted + as local time. + + :return: + Returns an instance of one of ``dateutil``'s :py:class:`tzinfo` + subclasses. + + .. versionchanged:: 2.7.0 + + After version 2.7.0, any two calls to ``gettz`` using the same + input strings will return the same object: + + .. code-block:: python3 + + >>> tz.gettz('America/Chicago') is tz.gettz('America/Chicago') + True + + In addition to improving performance, this ensures that + `"same zone" semantics`_ are used for datetimes in the same zone. + + + .. _`TZ variable`: + https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html + + .. _`"same zone" semantics`: + https://blog.ganssle.io/articles/2018/02/aware-datetime-arithmetic.html + """ + def __init__(self): + + self.__instances = weakref.WeakValueDictionary() + self.__strong_cache_size = 8 + self.__strong_cache = OrderedDict() + self._cache_lock = _thread.allocate_lock() + + def __call__(self, name=None): + with self._cache_lock: + rv = self.__instances.get(name, None) + + if rv is None: + rv = self.nocache(name=name) + if not (name is None + or isinstance(rv, tzlocal_classes) + or rv is None): + # tzlocal is slightly more complicated than the other + # time zone providers because it depends on environment + # at construction time, so don't cache that. + # + # We also cannot store weak references to None, so we + # will also not store that. + self.__instances[name] = rv + else: + # No need for strong caching, return immediately + return rv + + self.__strong_cache[name] = self.__strong_cache.pop(name, rv) + + if len(self.__strong_cache) > self.__strong_cache_size: + self.__strong_cache.popitem(last=False) + + return rv + + def set_cache_size(self, size): + with self._cache_lock: + self.__strong_cache_size = size + while len(self.__strong_cache) > size: + self.__strong_cache.popitem(last=False) + + def cache_clear(self): + with self._cache_lock: + self.__instances = weakref.WeakValueDictionary() + self.__strong_cache.clear() + + @staticmethod + def nocache(name=None): + """A non-cached version of gettz""" + tz = None + if not name: + try: + name = os.environ["TZ"] + except KeyError: + pass + if name is None or name == ":": + for filepath in TZFILES: + if not os.path.isabs(filepath): + filename = filepath + for path in TZPATHS: + filepath = os.path.join(path, filename) + if os.path.isfile(filepath): + break + else: + continue + if os.path.isfile(filepath): + try: + tz = tzfile(filepath) + break + except (IOError, OSError, ValueError): + pass + else: + tz = tzlocal() + else: + if name.startswith(":"): + name = name[1:] + if os.path.isabs(name): + if os.path.isfile(name): + tz = tzfile(name) + else: + tz = None + else: + for path in TZPATHS: + filepath = os.path.join(path, name) + if not os.path.isfile(filepath): + filepath = filepath.replace(' ', '_') + if not os.path.isfile(filepath): + continue + try: + tz = tzfile(filepath) + break + except (IOError, OSError, ValueError): + pass + else: + tz = None + if tzwin is not None: + try: + tz = tzwin(name) + except (WindowsError, UnicodeEncodeError): + # UnicodeEncodeError is for Python 2.7 compat + tz = None + + if not tz: + from dateutil.zoneinfo import get_zonefile_instance + tz = get_zonefile_instance().get(name) + + if not tz: + for c in name: + # name is not a tzstr unless it has at least + # one offset. For short values of "name", an + # explicit for loop seems to be the fastest way + # To determine if a string contains a digit + if c in "0123456789": + try: + tz = tzstr(name) + except ValueError: + pass + break + else: + if name in ("GMT", "UTC"): + tz = tzutc() + elif name in time.tzname: + tz = tzlocal() + return tz + + return GettzFunc() + + +gettz = __get_gettz() +del __get_gettz + + +def datetime_exists(dt, tz=None): + """ + Given a datetime and a time zone, determine whether or not a given datetime + would fall in a gap. + + :param dt: + A :class:`datetime.datetime` (whose time zone will be ignored if ``tz`` + is provided.) + + :param tz: + A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If + ``None`` or not provided, the datetime's own time zone will be used. + + :return: + Returns a boolean value whether or not the "wall time" exists in + ``tz``. + + .. versionadded:: 2.7.0 + """ + if tz is None: + if dt.tzinfo is None: + raise ValueError('Datetime is naive and no time zone provided.') + tz = dt.tzinfo + + dt = dt.replace(tzinfo=None) + + # This is essentially a test of whether or not the datetime can survive + # a round trip to UTC. + dt_rt = dt.replace(tzinfo=tz).astimezone(tzutc()).astimezone(tz) + dt_rt = dt_rt.replace(tzinfo=None) + + return dt == dt_rt + + +def datetime_ambiguous(dt, tz=None): + """ + Given a datetime and a time zone, determine whether or not a given datetime + is ambiguous (i.e if there are two times differentiated only by their DST + status). + + :param dt: + A :class:`datetime.datetime` (whose time zone will be ignored if ``tz`` + is provided.) + + :param tz: + A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If + ``None`` or not provided, the datetime's own time zone will be used. + + :return: + Returns a boolean value whether or not the "wall time" is ambiguous in + ``tz``. + + .. versionadded:: 2.6.0 + """ + if tz is None: + if dt.tzinfo is None: + raise ValueError('Datetime is naive and no time zone provided.') + + tz = dt.tzinfo + + # If a time zone defines its own "is_ambiguous" function, we'll use that. + is_ambiguous_fn = getattr(tz, 'is_ambiguous', None) + if is_ambiguous_fn is not None: + try: + return tz.is_ambiguous(dt) + except Exception: + pass + + # If it doesn't come out and tell us it's ambiguous, we'll just check if + # the fold attribute has any effect on this particular date and time. + dt = dt.replace(tzinfo=tz) + wall_0 = enfold(dt, fold=0) + wall_1 = enfold(dt, fold=1) + + same_offset = wall_0.utcoffset() == wall_1.utcoffset() + same_dst = wall_0.dst() == wall_1.dst() + + return not (same_offset and same_dst) + + +def resolve_imaginary(dt): + """ + Given a datetime that may be imaginary, return an existing datetime. + + This function assumes that an imaginary datetime represents what the + wall time would be in a zone had the offset transition not occurred, so + it will always fall forward by the transition's change in offset. + + .. doctest:: + + >>> from dateutil import tz + >>> from datetime import datetime + >>> NYC = tz.gettz('America/New_York') + >>> print(tz.resolve_imaginary(datetime(2017, 3, 12, 2, 30, tzinfo=NYC))) + 2017-03-12 03:30:00-04:00 + + >>> KIR = tz.gettz('Pacific/Kiritimati') + >>> print(tz.resolve_imaginary(datetime(1995, 1, 1, 12, 30, tzinfo=KIR))) + 1995-01-02 12:30:00+14:00 + + As a note, :func:`datetime.astimezone` is guaranteed to produce a valid, + existing datetime, so a round-trip to and from UTC is sufficient to get + an extant datetime, however, this generally "falls back" to an earlier time + rather than falling forward to the STD side (though no guarantees are made + about this behavior). + + :param dt: + A :class:`datetime.datetime` which may or may not exist. + + :return: + Returns an existing :class:`datetime.datetime`. If ``dt`` was not + imaginary, the datetime returned is guaranteed to be the same object + passed to the function. + + .. versionadded:: 2.7.0 + """ + if dt.tzinfo is not None and not datetime_exists(dt): + + curr_offset = (dt + datetime.timedelta(hours=24)).utcoffset() + old_offset = (dt - datetime.timedelta(hours=24)).utcoffset() + + dt += curr_offset - old_offset + + return dt + + +def _datetime_to_timestamp(dt): + """ + Convert a :class:`datetime.datetime` object to an epoch timestamp in + seconds since January 1, 1970, ignoring the time zone. + """ + return (dt.replace(tzinfo=None) - EPOCH).total_seconds() + + +if sys.version_info >= (3, 6): + def _get_supported_offset(second_offset): + return second_offset +else: + def _get_supported_offset(second_offset): + # For python pre-3.6, round to full-minutes if that's not the case. + # Python's datetime doesn't accept sub-minute timezones. Check + # http://python.org/sf/1447945 or https://bugs.python.org/issue5288 + # for some information. + old_offset = second_offset + calculated_offset = 60 * ((second_offset + 30) // 60) + return calculated_offset + + +try: + # Python 3.7 feature + from contextmanager import nullcontext as _nullcontext +except ImportError: + class _nullcontext(object): + """ + Class for wrapping contexts so that they are passed through in a + with statement. + """ + def __init__(self, context): + self.context = context + + def __enter__(self): + return self.context + + def __exit__(*args, **kwargs): + pass + +# vim:ts=4:sw=4:et diff --git a/Windows/dateutil/tz/win.py b/Windows/dateutil/tz/win.py new file mode 100644 index 00000000..cde07ba7 --- /dev/null +++ b/Windows/dateutil/tz/win.py @@ -0,0 +1,370 @@ +# -*- coding: utf-8 -*- +""" +This module provides an interface to the native time zone data on Windows, +including :py:class:`datetime.tzinfo` implementations. + +Attempting to import this module on a non-Windows platform will raise an +:py:obj:`ImportError`. +""" +# This code was originally contributed by Jeffrey Harris. +import datetime +import struct + +from six.moves import winreg +from six import text_type + +try: + import ctypes + from ctypes import wintypes +except ValueError: + # ValueError is raised on non-Windows systems for some horrible reason. + raise ImportError("Running tzwin on non-Windows system") + +from ._common import tzrangebase + +__all__ = ["tzwin", "tzwinlocal", "tzres"] + +ONEWEEK = datetime.timedelta(7) + +TZKEYNAMENT = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" +TZKEYNAME9X = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones" +TZLOCALKEYNAME = r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation" + + +def _settzkeyname(): + handle = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) + try: + winreg.OpenKey(handle, TZKEYNAMENT).Close() + TZKEYNAME = TZKEYNAMENT + except WindowsError: + TZKEYNAME = TZKEYNAME9X + handle.Close() + return TZKEYNAME + + +TZKEYNAME = _settzkeyname() + + +class tzres(object): + """ + Class for accessing ``tzres.dll``, which contains timezone name related + resources. + + .. versionadded:: 2.5.0 + """ + p_wchar = ctypes.POINTER(wintypes.WCHAR) # Pointer to a wide char + + def __init__(self, tzres_loc='tzres.dll'): + # Load the user32 DLL so we can load strings from tzres + user32 = ctypes.WinDLL('user32') + + # Specify the LoadStringW function + user32.LoadStringW.argtypes = (wintypes.HINSTANCE, + wintypes.UINT, + wintypes.LPWSTR, + ctypes.c_int) + + self.LoadStringW = user32.LoadStringW + self._tzres = ctypes.WinDLL(tzres_loc) + self.tzres_loc = tzres_loc + + def load_name(self, offset): + """ + Load a timezone name from a DLL offset (integer). + + >>> from dateutil.tzwin import tzres + >>> tzr = tzres() + >>> print(tzr.load_name(112)) + 'Eastern Standard Time' + + :param offset: + A positive integer value referring to a string from the tzres dll. + + .. note:: + + Offsets found in the registry are generally of the form + ``@tzres.dll,-114``. The offset in this case is 114, not -114. + + """ + resource = self.p_wchar() + lpBuffer = ctypes.cast(ctypes.byref(resource), wintypes.LPWSTR) + nchar = self.LoadStringW(self._tzres._handle, offset, lpBuffer, 0) + return resource[:nchar] + + def name_from_string(self, tzname_str): + """ + Parse strings as returned from the Windows registry into the time zone + name as defined in the registry. + + >>> from dateutil.tzwin import tzres + >>> tzr = tzres() + >>> print(tzr.name_from_string('@tzres.dll,-251')) + 'Dateline Daylight Time' + >>> print(tzr.name_from_string('Eastern Standard Time')) + 'Eastern Standard Time' + + :param tzname_str: + A timezone name string as returned from a Windows registry key. + + :return: + Returns the localized timezone string from tzres.dll if the string + is of the form `@tzres.dll,-offset`, else returns the input string. + """ + if not tzname_str.startswith('@'): + return tzname_str + + name_splt = tzname_str.split(',-') + try: + offset = int(name_splt[1]) + except: + raise ValueError("Malformed timezone string.") + + return self.load_name(offset) + + +class tzwinbase(tzrangebase): + """tzinfo class based on win32's timezones available in the registry.""" + def __init__(self): + raise NotImplementedError('tzwinbase is an abstract base class') + + def __eq__(self, other): + # Compare on all relevant dimensions, including name. + if not isinstance(other, tzwinbase): + return NotImplemented + + return (self._std_offset == other._std_offset and + self._dst_offset == other._dst_offset and + self._stddayofweek == other._stddayofweek and + self._dstdayofweek == other._dstdayofweek and + self._stdweeknumber == other._stdweeknumber and + self._dstweeknumber == other._dstweeknumber and + self._stdhour == other._stdhour and + self._dsthour == other._dsthour and + self._stdminute == other._stdminute and + self._dstminute == other._dstminute and + self._std_abbr == other._std_abbr and + self._dst_abbr == other._dst_abbr) + + @staticmethod + def list(): + """Return a list of all time zones known to the system.""" + with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: + with winreg.OpenKey(handle, TZKEYNAME) as tzkey: + result = [winreg.EnumKey(tzkey, i) + for i in range(winreg.QueryInfoKey(tzkey)[0])] + return result + + def display(self): + """ + Return the display name of the time zone. + """ + return self._display + + def transitions(self, year): + """ + For a given year, get the DST on and off transition times, expressed + always on the standard time side. For zones with no transitions, this + function returns ``None``. + + :param year: + The year whose transitions you would like to query. + + :return: + Returns a :class:`tuple` of :class:`datetime.datetime` objects, + ``(dston, dstoff)`` for zones with an annual DST transition, or + ``None`` for fixed offset zones. + """ + + if not self.hasdst: + return None + + dston = picknthweekday(year, self._dstmonth, self._dstdayofweek, + self._dsthour, self._dstminute, + self._dstweeknumber) + + dstoff = picknthweekday(year, self._stdmonth, self._stddayofweek, + self._stdhour, self._stdminute, + self._stdweeknumber) + + # Ambiguous dates default to the STD side + dstoff -= self._dst_base_offset + + return dston, dstoff + + def _get_hasdst(self): + return self._dstmonth != 0 + + @property + def _dst_base_offset(self): + return self._dst_base_offset_ + + +class tzwin(tzwinbase): + """ + Time zone object created from the zone info in the Windows registry + + These are similar to :py:class:`dateutil.tz.tzrange` objects in that + the time zone data is provided in the format of a single offset rule + for either 0 or 2 time zone transitions per year. + + :param: name + The name of a Windows time zone key, e.g. "Eastern Standard Time". + The full list of keys can be retrieved with :func:`tzwin.list`. + """ + + def __init__(self, name): + self._name = name + + with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: + tzkeyname = text_type("{kn}\\{name}").format(kn=TZKEYNAME, name=name) + with winreg.OpenKey(handle, tzkeyname) as tzkey: + keydict = valuestodict(tzkey) + + self._std_abbr = keydict["Std"] + self._dst_abbr = keydict["Dlt"] + + self._display = keydict["Display"] + + # See http://ww_winreg.jsiinc.com/SUBA/tip0300/rh0398.htm + tup = struct.unpack("=3l16h", keydict["TZI"]) + stdoffset = -tup[0]-tup[1] # Bias + StandardBias * -1 + dstoffset = stdoffset-tup[2] # + DaylightBias * -1 + self._std_offset = datetime.timedelta(minutes=stdoffset) + self._dst_offset = datetime.timedelta(minutes=dstoffset) + + # for the meaning see the win32 TIME_ZONE_INFORMATION structure docs + # http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx + (self._stdmonth, + self._stddayofweek, # Sunday = 0 + self._stdweeknumber, # Last = 5 + self._stdhour, + self._stdminute) = tup[4:9] + + (self._dstmonth, + self._dstdayofweek, # Sunday = 0 + self._dstweeknumber, # Last = 5 + self._dsthour, + self._dstminute) = tup[12:17] + + self._dst_base_offset_ = self._dst_offset - self._std_offset + self.hasdst = self._get_hasdst() + + def __repr__(self): + return "tzwin(%s)" % repr(self._name) + + def __reduce__(self): + return (self.__class__, (self._name,)) + + +class tzwinlocal(tzwinbase): + """ + Class representing the local time zone information in the Windows registry + + While :class:`dateutil.tz.tzlocal` makes system calls (via the :mod:`time` + module) to retrieve time zone information, ``tzwinlocal`` retrieves the + rules directly from the Windows registry and creates an object like + :class:`dateutil.tz.tzwin`. + + Because Windows does not have an equivalent of :func:`time.tzset`, on + Windows, :class:`dateutil.tz.tzlocal` instances will always reflect the + time zone settings *at the time that the process was started*, meaning + changes to the machine's time zone settings during the run of a program + on Windows will **not** be reflected by :class:`dateutil.tz.tzlocal`. + Because ``tzwinlocal`` reads the registry directly, it is unaffected by + this issue. + """ + def __init__(self): + with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: + with winreg.OpenKey(handle, TZLOCALKEYNAME) as tzlocalkey: + keydict = valuestodict(tzlocalkey) + + self._std_abbr = keydict["StandardName"] + self._dst_abbr = keydict["DaylightName"] + + try: + tzkeyname = text_type('{kn}\\{sn}').format(kn=TZKEYNAME, + sn=self._std_abbr) + with winreg.OpenKey(handle, tzkeyname) as tzkey: + _keydict = valuestodict(tzkey) + self._display = _keydict["Display"] + except OSError: + self._display = None + + stdoffset = -keydict["Bias"]-keydict["StandardBias"] + dstoffset = stdoffset-keydict["DaylightBias"] + + self._std_offset = datetime.timedelta(minutes=stdoffset) + self._dst_offset = datetime.timedelta(minutes=dstoffset) + + # For reasons unclear, in this particular key, the day of week has been + # moved to the END of the SYSTEMTIME structure. + tup = struct.unpack("=8h", keydict["StandardStart"]) + + (self._stdmonth, + self._stdweeknumber, # Last = 5 + self._stdhour, + self._stdminute) = tup[1:5] + + self._stddayofweek = tup[7] + + tup = struct.unpack("=8h", keydict["DaylightStart"]) + + (self._dstmonth, + self._dstweeknumber, # Last = 5 + self._dsthour, + self._dstminute) = tup[1:5] + + self._dstdayofweek = tup[7] + + self._dst_base_offset_ = self._dst_offset - self._std_offset + self.hasdst = self._get_hasdst() + + def __repr__(self): + return "tzwinlocal()" + + def __str__(self): + # str will return the standard name, not the daylight name. + return "tzwinlocal(%s)" % repr(self._std_abbr) + + def __reduce__(self): + return (self.__class__, ()) + + +def picknthweekday(year, month, dayofweek, hour, minute, whichweek): + """ dayofweek == 0 means Sunday, whichweek 5 means last instance """ + first = datetime.datetime(year, month, 1, hour, minute) + + # This will work if dayofweek is ISO weekday (1-7) or Microsoft-style (0-6), + # Because 7 % 7 = 0 + weekdayone = first.replace(day=((dayofweek - first.isoweekday()) % 7) + 1) + wd = weekdayone + ((whichweek - 1) * ONEWEEK) + if (wd.month != month): + wd -= ONEWEEK + + return wd + + +def valuestodict(key): + """Convert a registry key's values to a dictionary.""" + dout = {} + size = winreg.QueryInfoKey(key)[1] + tz_res = None + + for i in range(size): + key_name, value, dtype = winreg.EnumValue(key, i) + if dtype == winreg.REG_DWORD or dtype == winreg.REG_DWORD_LITTLE_ENDIAN: + # If it's a DWORD (32-bit integer), it's stored as unsigned - convert + # that to a proper signed integer + if value & (1 << 31): + value = value - (1 << 32) + elif dtype == winreg.REG_SZ: + # If it's a reference to the tzres DLL, load the actual string + if value.startswith('@tzres'): + tz_res = tz_res or tzres() + value = tz_res.name_from_string(value) + + value = value.rstrip('\x00') # Remove trailing nulls + + dout[key_name] = value + + return dout diff --git a/Windows/dateutil/tzwin.py b/Windows/dateutil/tzwin.py new file mode 100644 index 00000000..cebc673e --- /dev/null +++ b/Windows/dateutil/tzwin.py @@ -0,0 +1,2 @@ +# tzwin has moved to dateutil.tz.win +from .tz.win import * diff --git a/Windows/dateutil/utils.py b/Windows/dateutil/utils.py new file mode 100644 index 00000000..ebcce6aa --- /dev/null +++ b/Windows/dateutil/utils.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +""" +This module offers general convenience and utility functions for dealing with +datetimes. + +.. versionadded:: 2.7.0 +""" +from __future__ import unicode_literals + +from datetime import datetime, time + + +def today(tzinfo=None): + """ + Returns a :py:class:`datetime` representing the current day at midnight + + :param tzinfo: + The time zone to attach (also used to determine the current day). + + :return: + A :py:class:`datetime.datetime` object representing the current day + at midnight. + """ + + dt = datetime.now(tzinfo) + return datetime.combine(dt.date(), time(0, tzinfo=tzinfo)) + + +def default_tzinfo(dt, tzinfo): + """ + Sets the the ``tzinfo`` parameter on naive datetimes only + + This is useful for example when you are provided a datetime that may have + either an implicit or explicit time zone, such as when parsing a time zone + string. + + .. doctest:: + + >>> from dateutil.tz import tzoffset + >>> from dateutil.parser import parse + >>> from dateutil.utils import default_tzinfo + >>> dflt_tz = tzoffset("EST", -18000) + >>> print(default_tzinfo(parse('2014-01-01 12:30 UTC'), dflt_tz)) + 2014-01-01 12:30:00+00:00 + >>> print(default_tzinfo(parse('2014-01-01 12:30'), dflt_tz)) + 2014-01-01 12:30:00-05:00 + + :param dt: + The datetime on which to replace the time zone + + :param tzinfo: + The :py:class:`datetime.tzinfo` subclass instance to assign to + ``dt`` if (and only if) it is naive. + + :return: + Returns an aware :py:class:`datetime.datetime`. + """ + if dt.tzinfo is not None: + return dt + else: + return dt.replace(tzinfo=tzinfo) + + +def within_delta(dt1, dt2, delta): + """ + Useful for comparing two datetimes that may a negilible difference + to be considered equal. + """ + delta = abs(delta) + difference = dt1 - dt2 + return -delta <= difference <= delta diff --git a/Windows/dateutil/zoneinfo/__init__.py b/Windows/dateutil/zoneinfo/__init__.py new file mode 100644 index 00000000..34f11ad6 --- /dev/null +++ b/Windows/dateutil/zoneinfo/__init__.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +import warnings +import json + +from tarfile import TarFile +from pkgutil import get_data +from io import BytesIO + +from dateutil.tz import tzfile as _tzfile + +__all__ = ["get_zonefile_instance", "gettz", "gettz_db_metadata"] + +ZONEFILENAME = "dateutil-zoneinfo.tar.gz" +METADATA_FN = 'METADATA' + + +class tzfile(_tzfile): + def __reduce__(self): + return (gettz, (self._filename,)) + + +def getzoneinfofile_stream(): + try: + return BytesIO(get_data(__name__, ZONEFILENAME)) + except IOError as e: # TODO switch to FileNotFoundError? + warnings.warn("I/O error({0}): {1}".format(e.errno, e.strerror)) + return None + + +class ZoneInfoFile(object): + def __init__(self, zonefile_stream=None): + if zonefile_stream is not None: + with TarFile.open(fileobj=zonefile_stream) as tf: + self.zones = {zf.name: tzfile(tf.extractfile(zf), filename=zf.name) + for zf in tf.getmembers() + if zf.isfile() and zf.name != METADATA_FN} + # deal with links: They'll point to their parent object. Less + # waste of memory + links = {zl.name: self.zones[zl.linkname] + for zl in tf.getmembers() if + zl.islnk() or zl.issym()} + self.zones.update(links) + try: + metadata_json = tf.extractfile(tf.getmember(METADATA_FN)) + metadata_str = metadata_json.read().decode('UTF-8') + self.metadata = json.loads(metadata_str) + except KeyError: + # no metadata in tar file + self.metadata = None + else: + self.zones = {} + self.metadata = None + + def get(self, name, default=None): + """ + Wrapper for :func:`ZoneInfoFile.zones.get`. This is a convenience method + for retrieving zones from the zone dictionary. + + :param name: + The name of the zone to retrieve. (Generally IANA zone names) + + :param default: + The value to return in the event of a missing key. + + .. versionadded:: 2.6.0 + + """ + return self.zones.get(name, default) + + +# The current API has gettz as a module function, although in fact it taps into +# a stateful class. So as a workaround for now, without changing the API, we +# will create a new "global" class instance the first time a user requests a +# timezone. Ugly, but adheres to the api. +# +# TODO: Remove after deprecation period. +_CLASS_ZONE_INSTANCE = [] + + +def get_zonefile_instance(new_instance=False): + """ + This is a convenience function which provides a :class:`ZoneInfoFile` + instance using the data provided by the ``dateutil`` package. By default, it + caches a single instance of the ZoneInfoFile object and returns that. + + :param new_instance: + If ``True``, a new instance of :class:`ZoneInfoFile` is instantiated and + used as the cached instance for the next call. Otherwise, new instances + are created only as necessary. + + :return: + Returns a :class:`ZoneInfoFile` object. + + .. versionadded:: 2.6 + """ + if new_instance: + zif = None + else: + zif = getattr(get_zonefile_instance, '_cached_instance', None) + + if zif is None: + zif = ZoneInfoFile(getzoneinfofile_stream()) + + get_zonefile_instance._cached_instance = zif + + return zif + + +def gettz(name): + """ + This retrieves a time zone from the local zoneinfo tarball that is packaged + with dateutil. + + :param name: + An IANA-style time zone name, as found in the zoneinfo file. + + :return: + Returns a :class:`dateutil.tz.tzfile` time zone object. + + .. warning:: + It is generally inadvisable to use this function, and it is only + provided for API compatibility with earlier versions. This is *not* + equivalent to ``dateutil.tz.gettz()``, which selects an appropriate + time zone based on the inputs, favoring system zoneinfo. This is ONLY + for accessing the dateutil-specific zoneinfo (which may be out of + date compared to the system zoneinfo). + + .. deprecated:: 2.6 + If you need to use a specific zoneinfofile over the system zoneinfo, + instantiate a :class:`dateutil.zoneinfo.ZoneInfoFile` object and call + :func:`dateutil.zoneinfo.ZoneInfoFile.get(name)` instead. + + Use :func:`get_zonefile_instance` to retrieve an instance of the + dateutil-provided zoneinfo. + """ + warnings.warn("zoneinfo.gettz() will be removed in future versions, " + "to use the dateutil-provided zoneinfo files, instantiate a " + "ZoneInfoFile object and use ZoneInfoFile.zones.get() " + "instead. See the documentation for details.", + DeprecationWarning) + + if len(_CLASS_ZONE_INSTANCE) == 0: + _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) + return _CLASS_ZONE_INSTANCE[0].zones.get(name) + + +def gettz_db_metadata(): + """ Get the zonefile metadata + + See `zonefile_metadata`_ + + :returns: + A dictionary with the database metadata + + .. deprecated:: 2.6 + See deprecation warning in :func:`zoneinfo.gettz`. To get metadata, + query the attribute ``zoneinfo.ZoneInfoFile.metadata``. + """ + warnings.warn("zoneinfo.gettz_db_metadata() will be removed in future " + "versions, to use the dateutil-provided zoneinfo files, " + "ZoneInfoFile object and query the 'metadata' attribute " + "instead. See the documentation for details.", + DeprecationWarning) + + if len(_CLASS_ZONE_INSTANCE) == 0: + _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) + return _CLASS_ZONE_INSTANCE[0].metadata diff --git a/Windows/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz b/Windows/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz new file mode 100644 index 00000000..124f3e14 Binary files /dev/null and b/Windows/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz differ diff --git a/Windows/dateutil/zoneinfo/rebuild.py b/Windows/dateutil/zoneinfo/rebuild.py new file mode 100644 index 00000000..78f0d1a0 --- /dev/null +++ b/Windows/dateutil/zoneinfo/rebuild.py @@ -0,0 +1,53 @@ +import logging +import os +import tempfile +import shutil +import json +from subprocess import check_call +from tarfile import TarFile + +from dateutil.zoneinfo import METADATA_FN, ZONEFILENAME + + +def rebuild(filename, tag=None, format="gz", zonegroups=[], metadata=None): + """Rebuild the internal timezone info in dateutil/zoneinfo/zoneinfo*tar* + + filename is the timezone tarball from ``ftp.iana.org/tz``. + + """ + tmpdir = tempfile.mkdtemp() + zonedir = os.path.join(tmpdir, "zoneinfo") + moduledir = os.path.dirname(__file__) + try: + with TarFile.open(filename) as tf: + for name in zonegroups: + tf.extract(name, tmpdir) + filepaths = [os.path.join(tmpdir, n) for n in zonegroups] + try: + check_call(["zic", "-d", zonedir] + filepaths) + except OSError as e: + _print_on_nosuchfile(e) + raise + # write metadata file + with open(os.path.join(zonedir, METADATA_FN), 'w') as f: + json.dump(metadata, f, indent=4, sort_keys=True) + target = os.path.join(moduledir, ZONEFILENAME) + with TarFile.open(target, "w:%s" % format) as tf: + for entry in os.listdir(zonedir): + entrypath = os.path.join(zonedir, entry) + tf.add(entrypath, entry) + finally: + shutil.rmtree(tmpdir) + + +def _print_on_nosuchfile(e): + """Print helpful troubleshooting message + + e is an exception raised by subprocess.check_call() + + """ + if e.errno == 2: + logging.error( + "Could not find zic. Perhaps you need to install " + "libc-bin or some other package that provides it, " + "or it's not in your PATH?") diff --git a/Windows/dependencies/PyQt4-4.10.4-gpl-Py3.3-Qt4.8.5-x32.exe b/Windows/dependencies/PyQt4-4.10.4-gpl-Py3.3-Qt4.8.5-x32.exe new file mode 100644 index 00000000..b68a092c Binary files /dev/null and b/Windows/dependencies/PyQt4-4.10.4-gpl-Py3.3-Qt4.8.5-x32.exe differ diff --git a/Windows/dependencies/library/eSim_Analog.dcm b/Windows/dependencies/library/eSim_Analog.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_Analog.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Analog.lib b/Windows/dependencies/library/eSim_Analog.lib new file mode 100644 index 00000000..16797d6f --- /dev/null +++ b/Windows/dependencies/library/eSim_Analog.lib @@ -0,0 +1,234 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# aswitch +# +DEF aswitch U 0 40 Y Y 1 F N +F0 "U" 450 300 60 H V C CNN +F1 "aswitch" 450 200 60 H V C CNN +F2 "" 450 100 60 H V C CNN +F3 "" 450 100 60 H V C CNN +DRAW +S 200 250 650 100 0 1 0 N +X ~ 2 0 150 200 R 50 50 1 1 O +X ~ 3 850 150 200 L 50 50 1 1 O +X ~ 1_IN 450 -100 200 U 50 20 1 1 I +ENDDRAW +ENDDEF +# +# climit +# +DEF climit U 0 40 Y Y 1 F N +F0 "U" -150 100 51 H V C CNN +F1 "climit" -100 -100 51 H V C CNN +F2 "" 0 50 60 H V C CNN +F3 "" 0 50 60 H V C CNN +DRAW +C 300 0 0 0 1 0 N +P 4 0 1 0 -200 200 -200 -200 400 0 -200 200 N +X IN 1 -400 0 200 R 50 50 1 1 I +X CIN1 2 -50 350 200 D 50 43 1 1 I +X CIN2 3 100 -300 200 U 50 43 1 1 I +X OUT 4 600 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# d_dt +# +DEF d_dt U 0 40 Y Y 1 F N +F0 "U" 0 -50 60 H V C CNN +F1 "d_dt" 0 50 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -200 250 -200 -250 300 0 -200 250 N +X IN 1 -400 0 200 R 50 50 1 1 I +X OUT 2 500 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# divide +# +DEF divide U 0 40 Y Y 1 F N +F0 "U" 0 -50 60 H V C CNN +F1 "divide" 0 50 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -200 250 -200 -250 300 0 -200 250 N +X NUM 1 -400 150 200 R 50 50 1 1 I +X DEN 2 -400 -150 200 R 50 50 1 1 I +X OUT 3 500 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# gain +# +DEF gain U 0 40 Y Y 1 F N +F0 "U" 50 -50 60 H V C CNN +F1 "gain" 50 50 60 H V C CNN +F2 "" 0 50 60 H V C CNN +F3 "" 0 50 60 H V C CNN +DRAW +C 300 0 0 0 1 0 N +P 4 0 1 0 -200 200 -200 -200 400 0 -200 200 N +X IN 1 -400 0 200 R 50 50 1 1 I +X OUT 2 600 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# hyst +# +DEF hyst U 0 40 Y Y 1 F N +F0 "U" 0 0 47 H V C CNN +F1 "hyst" 0 100 47 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -150 150 150 -50 0 1 0 N +X IN 1 -350 50 200 R 50 39 1 1 I +X OUT 2 350 50 200 L 50 39 1 1 O +ENDDRAW +ENDDEF +# +# ilimit +# +DEF ilimit U 0 40 Y Y 1 F N +F0 "U" -150 100 51 H V C CNN +F1 "ilimit" -100 -100 51 H V C CNN +F2 "" 0 50 60 H V C CNN +F3 "" 0 50 60 H V C CNN +DRAW +C 300 0 0 0 1 0 N +P 4 0 1 0 -200 200 -200 -200 400 0 -200 200 N +X IN 1 -400 0 200 R 50 50 1 1 I +X PWR1 2 -50 350 200 D 50 43 1 1 B +X PWR2 3 100 -300 200 U 50 43 1 1 B +X OUT 4 600 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# int +# +DEF int U 0 40 Y Y 1 F N +F0 "U" 0 -50 60 H V C CNN +F1 "int" 0 50 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -200 250 -200 -250 300 0 -200 250 N +X IN 1 -400 0 200 R 50 50 1 1 I +X OUT 2 500 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# limit +# +DEF limit U 0 40 Y Y 1 F N +F0 "U" 50 -50 60 H V C CNN +F1 "limit" 50 50 60 H V C CNN +F2 "" 0 50 60 H V C CNN +F3 "" 0 50 60 H V C CNN +DRAW +C 300 0 0 0 1 0 N +P 4 0 1 0 -200 200 -200 -200 400 0 -200 200 N +X IN 1 -400 0 200 R 50 50 1 1 I +X OUT 2 600 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# mult +# +DEF mult U 0 40 Y Y 1 F N +F0 "U" 0 -50 60 H V C CNN +F1 "mult" 0 50 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -200 250 -200 -250 300 0 -200 250 N +X IN1 1 -400 150 200 R 50 50 1 1 I +X IN2 2 -400 -150 200 R 50 50 1 1 I +X OUT 3 500 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# slew +# +DEF slew U 0 40 Y Y 1 F N +F0 "U" 0 0 47 H V C CNN +F1 "slew" 0 100 47 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -150 150 150 -50 0 1 0 N +X IN 1 -350 50 200 R 50 39 1 1 I +X OUT 2 350 50 200 L 50 39 1 1 O +ENDDRAW +ENDDEF +# +# summer +# +DEF summer U 0 40 Y Y 1 F N +F0 "U" 0 -50 60 H V C CNN +F1 "summer" 0 50 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -200 250 -200 -250 300 0 -200 250 N +X IN1 1 -400 150 200 R 50 50 1 1 I +X IN2 2 -400 -150 200 R 50 50 1 1 I +X OUT 3 500 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# TRANSFO +# +DEF TRANSFO U 0 40 Y N 1 F N +F0 "U" 0 250 50 H V C CNN +F1 "TRANSFO" 0 -300 50 H V C CNN +F2 "" 0 0 50 H V C CNN +F3 "" 0 0 50 H V C CNN +DRAW +A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 +A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 +A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 +A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 +A -100 50 50 899 1 0 1 0 N -100 100 -50 50 +A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 +A -100 150 50 899 1 0 1 0 N -100 200 -50 150 +A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 +A 100 -50 50 899 -1799 0 1 0 N 100 0 51 -50 +A 100 -50 50 1799 -899 0 1 0 N 51 -50 100 -99 +A 100 50 50 899 -1799 0 1 0 N 100 100 51 50 +A 100 50 50 1799 -899 0 1 0 N 51 50 100 1 +A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 +A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 +A 101 -150 50 910 -1799 0 1 0 N 101 -100 52 -150 +A 101 -150 50 -912 -1799 0 1 0 N 101 -199 52 -150 +P 2 0 1 0 -25 200 -25 -200 N +P 2 0 1 0 25 -200 25 200 N +X AA 1 -400 200 300 R 50 50 1 1 P +X AB 2 -400 -200 300 R 50 50 1 1 P +X SA 3 400 -200 300 L 50 50 1 1 P +X SB 4 400 200 300 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# zener +# +DEF zener U 0 40 Y Y 1 F N +F0 "U" -50 -100 60 H V C CNN +F1 "zener" 0 100 60 H V C CNN +F2 "" 50 0 60 H V C CNN +F3 "" 50 0 60 H V C CNN +DRAW +P 2 0 1 0 100 -50 50 -100 N +P 2 0 1 0 100 50 100 -50 N +P 2 0 1 0 100 50 150 100 N +P 4 0 1 0 0 50 0 -50 100 0 0 50 N +X ~ IN -200 0 200 R 50 43 1 1 I +X ~ OUT 300 0 200 L 50 43 1 1 O +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Devices.dcm b/Windows/dependencies/library/eSim_Devices.dcm new file mode 100644 index 00000000..5c434cbd --- /dev/null +++ b/Windows/dependencies/library/eSim_Devices.dcm @@ -0,0 +1,46 @@ +EESchema-DOCLIB Version 2.0 +# +$CMP C +D Unpolarized capacitor +$ENDCMP +# +$CMP L +D Inductor +$ENDCMP +# +$CMP MOS_N +D Transistor N-MOSFET, collector connected to mounting plane (general) +K nmos n-mos n-mosfet transistor +$ENDCMP +# +$CMP MOS_P +D Transistor P-MOSFET, collector connected to mounting plane (general) +K pmos p-mos p-mosfet transistor +$ENDCMP +# +$CMP NJF +D Transistor N-JFET (general) +K njfet n-jfet transistor +$ENDCMP +# +$CMP NPN +D Transistor NPN (general) +K npn transistor +$ENDCMP +# +$CMP PJF +D Transistor P-JFET (general) +K pjfet p-jfet transistor +$ENDCMP +# +$CMP PNP +D Transistor PNP (general) +K pnp transistor +$ENDCMP +# +$CMP R +D Resistor +K R DEV +$ENDCMP +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Devices.lib b/Windows/dependencies/library/eSim_Devices.lib new file mode 100644 index 00000000..134bec4e --- /dev/null +++ b/Windows/dependencies/library/eSim_Devices.lib @@ -0,0 +1,253 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# eSim_C +# +DEF eSim_C C 0 10 N Y 1 F N +F0 "C" 25 100 50 H V L CNN +F1 "eSim_C" 25 -100 50 H V L CNN +F2 "" 38 -150 30 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + C_* +$ENDFPLIST +DRAW +P 2 0 1 20 -80 -30 80 -30 N +P 2 0 1 20 -80 30 80 30 N +X ~ 1 0 150 110 D 40 40 1 1 P +X ~ 2 0 -150 110 U 40 40 1 1 P +ENDDRAW +ENDDEF +# +# eSim_CP1 +# +DEF eSim_CP1 C 0 10 N N 1 F N +F0 "C" 25 100 50 H V L CNN +F1 "eSim_CP1" 25 -100 50 H V L CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + CP_* +$ENDFPLIST +DRAW +A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50 +P 2 0 1 20 -80 30 80 30 N +P 2 0 1 0 -70 90 -30 90 N +P 2 0 1 0 -50 70 -50 110 N +X ~ 1 0 150 110 D 50 50 1 1 P +X ~ 2 0 -150 130 U 50 50 1 1 P +ENDDRAW +ENDDEF +# +# eSim_L +# +DEF eSim_L L 0 40 N N 1 F N +F0 "L" 1950 500 50 H V C CNN +F1 "eSim_L" 1950 650 50 H V C CNN +F2 "" 1950 550 60 V V C CNN +F3 "" 1950 550 60 V V C CNN +DRAW +A 1802 550 48 11 1789 0 1 0 N 1849 551 1754 551 +A 1899 550 51 11 1789 0 1 0 N 1949 551 1848 551 +A 1999 550 51 11 1789 0 1 0 N 2049 551 1948 551 +A 2100 550 50 11 1789 0 1 0 N 2149 551 2050 551 +X 1 1 1650 550 100 R 70 70 1 1 P +X 2 2 2250 550 100 L 70 70 1 1 P +ENDDRAW +ENDDEF +# +# eSim_MOS_N +# +DEF eSim_MOS_N M 0 0 Y N 1 F N +F0 "M" 0 -150 50 H V R CNN +F1 "eSim_MOS_N" 100 -50 50 H V R CNN +F2 "" 300 -300 29 H V C CNN +F3 "" 100 -200 60 H V C CNN +DRAW +C 150 -200 111 0 1 10 N +P 2 0 1 10 130 -290 130 -250 N +P 2 0 1 0 130 -270 200 -270 N +P 2 0 1 10 130 -220 130 -180 N +P 2 0 1 0 130 -200 200 -200 N +P 2 0 1 10 130 -150 130 -110 N +P 2 0 1 0 130 -130 200 -130 N +P 2 0 1 0 200 -300 200 -270 N +P 2 0 1 0 200 -130 200 -100 N +P 3 0 1 10 110 -275 110 -125 110 -125 N +P 3 0 1 0 200 -200 300 -200 300 -250 N +P 4 0 1 0 140 -200 180 -215 180 -185 140 -200 F +X D 1 200 0 100 D 50 50 1 1 E +X G 2 -100 -200 210 R 50 50 1 1 I +X S 3 200 -400 100 U 50 50 1 1 C +X B 4 300 -350 98 U 47 47 1 1 I +ENDDRAW +ENDDEF +# +# eSim_MOS_P +# +DEF eSim_MOS_P M 0 0 Y N 1 F N +F0 "M" -50 50 50 H V R CNN +F1 "eSim_MOS_P" 50 150 50 H V R CNN +F2 "" 250 100 29 H V C CNN +F3 "" 50 0 60 H V C CNN +DRAW +C 100 0 111 0 1 10 N +P 2 0 1 0 80 -70 150 -70 N +P 2 0 1 10 80 -50 80 -90 N +P 2 0 1 0 80 0 150 0 N +P 2 0 1 10 80 20 80 -20 N +P 2 0 1 0 80 70 150 70 N +P 2 0 1 10 80 90 80 50 N +P 2 0 1 0 150 -70 150 -100 N +P 2 0 1 0 150 100 150 70 N +P 3 0 1 10 60 75 60 -75 60 -75 N +P 3 0 1 0 150 0 250 0 250 -50 N +P 4 0 1 0 140 0 100 -15 100 15 140 0 F +X D 1 150 200 100 D 50 50 1 1 C +X G 2 -150 0 210 R 50 50 1 1 I +X S 3 150 -200 100 U 50 50 1 1 E +X B 4 250 -150 100 U 50 50 1 1 I +ENDDRAW +ENDDEF +# +# eSim_NJF +# +DEF eSim_NJF J 0 0 Y N 1 F N +F0 "J" -100 50 50 H V R CNN +F1 "eSim_NJF" -50 150 50 H V R CNN +F2 "" 200 100 29 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 50 0 111 0 1 10 N +P 3 0 1 10 10 75 10 -75 10 -75 N +P 3 0 1 0 100 -100 100 -50 10 -50 N +P 3 0 1 0 100 100 100 55 10 55 N +P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F +X D 1 100 200 100 D 50 50 1 1 C +X G 2 -200 0 210 R 50 50 1 1 I +X S 3 100 -200 100 U 50 50 1 1 E +ENDDRAW +ENDDEF +# +# eSim_NPN +# +DEF eSim_NPN Q 0 0 Y N 1 F N +F0 "Q" -100 50 50 H V R CNN +F1 "eSim_NPN" -50 150 50 H V R CNN +F2 "" 200 100 29 H V C CNN +F3 "" 0 0 60 H V C CNN +ALIAS BC547 Q2N2222 +DRAW +C 50 0 111 0 1 10 N +P 2 0 1 0 25 25 100 100 N +P 3 0 1 0 25 -25 100 -100 100 -100 N +P 3 0 1 20 25 75 25 -75 25 -75 N +P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F +X C 1 100 200 100 D 50 50 1 1 C +X B 2 -200 0 225 R 50 50 1 1 I +X E 3 100 -200 100 U 50 50 1 1 E +ENDDRAW +ENDDEF +# +# eSim_PJF +# +DEF eSim_PJF J 0 0 Y N 1 F N +F0 "J" -100 50 50 H V R CNN +F1 "eSim_PJF" -50 150 50 H V R CNN +F2 "" 200 100 29 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 50 0 111 0 1 10 N +P 3 0 1 10 10 75 10 -75 10 -75 N +P 3 0 1 0 100 -100 100 -50 10 -50 N +P 3 0 1 0 100 100 100 55 10 55 N +P 4 0 1 0 -45 0 -5 15 -5 -15 -45 0 F +X D 1 100 200 100 D 50 50 1 1 C +X G 2 -200 0 210 R 50 50 1 1 I +X S 3 100 -200 100 U 50 50 1 1 E +ENDDRAW +ENDDEF +# +# eSim_PNP +# +DEF eSim_PNP Q 0 0 Y N 1 F N +F0 "Q" -100 50 50 H V R CNN +F1 "eSim_PNP" -50 150 50 H V R CNN +F2 "" 200 100 29 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 50 0 111 0 1 10 N +P 2 0 1 0 25 25 100 100 N +P 3 0 1 0 25 -25 100 -100 100 -100 N +P 3 0 1 20 25 75 25 -75 25 -75 N +P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F +X C 1 100 200 100 D 50 50 1 1 C +X B 2 -200 0 225 R 50 50 1 1 I +X E 3 100 -200 100 U 50 50 1 1 E +ENDDRAW +ENDDEF +# +# eSim_R +# +DEF eSim_R R 0 0 N Y 1 F N +F0 "R" 50 130 50 H V C CNN +F1 "eSim_R" 50 50 50 H V C CNN +F2 "" 50 -20 30 H V C CNN +F3 "" 50 50 30 V V C CNN +$FPLIST + R_* + Resistor_* +$ENDFPLIST +DRAW +S 150 10 -50 90 0 1 10 N +X ~ 1 -100 50 50 R 60 60 1 1 P +X ~ 2 200 50 50 L 60 60 1 1 P +ENDDRAW +ENDDEF +# +# eSim_Diode +# +DEF eSim_Diode D 0 40 N N 1 F N +F0 "D" 0 100 50 H V C CNN +F1 "eSim_Diode" 0 -100 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + TO-???* + *SingleDiode + *_Diode_* + *SingleDiode* + D_* +$ENDFPLIST +DRAW +T 0 -100 50 60 0 0 0 A Normal 0 C C +T 0 100 50 60 0 0 0 K Normal 0 C C +P 2 0 1 6 50 50 50 -50 N +P 3 0 1 0 -50 50 50 0 -50 -50 F +X A 1 -150 0 100 R 40 40 1 1 P +X K 2 150 0 100 L 40 40 1 1 P +ENDDRAW +ENDDEF +# +# eSim_LED +# +DEF eSim_LED D 0 40 Y N 1 F N +F0 "D" 0 100 50 H V C CNN +F1 "eSim_LED" 50 -100 31 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + LED* +$ENDFPLIST +DRAW +P 2 0 1 8 -50 -50 -50 50 N +P 2 0 1 0 -50 0 50 0 N +P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N +P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N +P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N +X A 1 150 0 100 L 50 50 1 1 P +X K 2 -150 0 100 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Digital.dcm b/Windows/dependencies/library/eSim_Digital.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_Digital.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Digital.lib b/Windows/dependencies/library/eSim_Digital.lib new file mode 100644 index 00000000..ff53d004 --- /dev/null +++ b/Windows/dependencies/library/eSim_Digital.lib @@ -0,0 +1,384 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# d_and +# +DEF d_and U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_and" 50 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A 149 50 100 -894 0 0 1 0 N 150 -50 250 50 +A 150 49 100 6 900 0 1 0 N 250 50 150 150 +P 4 0 1 0 150 -50 -250 -50 -250 150 150 150 N +X IN1 1 -450 100 200 R 50 50 1 1 I +X IN2 2 -450 0 200 R 50 50 1 1 I +X OUT 3 450 50 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# d_buffer +# +DEF d_buffer U 0 40 Y Y 1 F N +F0 "U" 0 -50 60 H V C CNN +F1 "d_buffer" 0 50 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -300 200 -300 -200 450 0 -300 200 N +X IN 1 -500 0 200 R 50 50 1 1 I +X OUT 2 650 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# d_dff +# +DEF d_dff U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_dff" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 350 450 -350 -400 0 1 0 N +X Din 1 -550 350 200 R 50 50 1 1 I +X Clk 2 -550 -300 200 R 50 50 1 1 I C +X Set 3 0 650 200 D 50 50 1 1 I +X Reset 4 0 -600 200 U 50 50 1 1 I +X Dout 5 550 350 200 L 50 50 1 1 O +X Ndout 6 550 -300 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_dlatch +# +DEF d_dlatch U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_dlatch" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 350 450 -350 -400 0 1 0 N +X Din 1 -550 350 200 R 50 50 1 1 I +X EN 2 -550 -300 200 R 50 50 1 1 I +X Set 3 0 650 200 D 50 50 1 1 I +X Reset 4 0 -600 200 U 50 50 1 1 I +X Dout 5 550 350 200 L 50 50 1 1 O +X Ndout 6 550 -300 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_fdiv +# +DEF d_fdiv U 0 40 Y Y 1 F N +F0 "U" 0 500 60 H V C CNN +F1 "d_fdiv" 0 600 60 H V C CNN +F2 "" 0 500 60 H V C CNN +F3 "" 0 500 60 H V C CNN +DRAW +S -400 650 500 400 0 1 0 N +X Fre_IN 1 -600 500 200 R 50 50 1 1 I +X Fre_OUT 2 700 500 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# d_inverter +# +DEF d_inverter U 0 40 Y Y 1 F N +F0 "U" 0 -100 60 H V C CNN +F1 "d_inverter" 0 150 60 H V C CNN +F2 "" 50 -50 60 H V C CNN +F3 "" 50 -50 60 H V C CNN +DRAW +P 4 0 1 0 -100 50 -100 -50 100 0 -100 50 N +X ~ 1 -300 0 200 R 50 50 1 1 I +X ~ 2 300 0 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_jkff +# +DEF d_jkff U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_jkff" 50 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 600 550 -600 -600 0 1 0 N +X J 1 -800 400 200 R 50 50 1 1 I +X K 2 -800 -450 200 R 50 50 1 1 I +X Clk 3 -800 0 200 R 50 50 1 1 I C +X Set 4 0 750 200 D 50 50 1 1 I +X Reset 5 0 -800 200 U 50 50 1 1 I +X Out 6 800 400 200 L 50 50 1 1 O +X Nout 7 800 -450 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_nand +# +DEF d_nand U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_nand" 50 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A 149 50 100 -894 0 0 1 0 N 150 -50 250 50 +A 150 49 100 6 900 0 1 0 N 250 50 150 150 +P 4 0 1 0 150 -50 -250 -50 -250 150 150 150 N +X IN1 1 -450 100 200 R 50 50 1 1 I +X IN2 2 -450 0 200 R 50 50 1 1 I +X OUT 3 450 50 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_nor +# +DEF d_nor U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_nor" 50 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A -450 50 224 266 -266 0 1 0 N -250 150 -250 -50 +A -25 -124 325 574 323 0 1 0 N 150 150 250 50 +A 74 125 191 -665 -231 0 1 0 N 150 -50 250 50 +P 2 0 1 0 -250 -50 150 -50 N +P 2 0 1 0 -250 150 150 150 N +X IN1 1 -450 100 215 R 50 50 1 1 I +X IN2 2 -450 0 215 R 50 50 1 1 I +X OUT 3 450 50 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_or +# +DEF d_or U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_or" 0 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A -450 50 224 266 -266 0 1 0 N -250 150 -250 -50 +A -25 -124 325 574 323 0 1 0 N 150 150 250 50 +A 74 125 191 -665 -231 0 1 0 N 150 -50 250 50 +P 2 0 1 0 -250 -50 150 -50 N +P 2 0 1 0 -250 150 150 150 N +X IN1 1 -450 100 215 R 50 50 1 1 I +X IN2 2 -450 0 215 R 50 50 1 1 I +X OUT 3 450 50 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# d_pulldown +# +DEF d_pulldown U 0 40 Y Y 1 F N +F0 "U" 0 200 60 H V C CNN +F1 "d_pulldown" -50 300 55 H V C CNN +F2 "" 0 200 60 H V C CNN +F3 "" 0 200 60 H V C CNN +DRAW +S 200 350 -300 150 0 1 0 N +X OUT 1 -500 250 200 R 50 43 1 1 I +ENDDRAW +ENDDEF +# +# d_pullup +# +DEF d_pullup U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_pullup" 0 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 200 150 -300 -50 0 1 0 N +X OUT 1 -500 50 200 R 50 50 1 1 I +ENDDRAW +ENDDEF +# +# d_ram +# +DEF d_ram U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_ram" 0 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -300 400 300 -300 0 1 0 N +X DIN1 1 -250 -500 200 U 50 43 1 1 I +X DIN2 2 -200 -500 200 U 50 43 1 1 I +X DIN3 3 -150 -500 200 U 50 43 1 1 I +X DIN4 4 -100 -500 200 U 50 43 1 1 I +X DOUT1 5 250 -500 200 U 50 43 1 1 O +X DOUT2 6 200 -500 200 U 50 43 1 1 O +X DOUT3 7 150 -500 200 U 50 43 1 1 O +X DOUT4 8 100 -500 200 U 50 43 1 1 O +X A1 9 -150 600 200 D 50 43 1 1 I +X A2 10 -100 600 200 D 50 43 1 1 I +X CS3 20 -500 150 200 R 50 43 1 1 I +X A3 11 -50 600 200 D 50 43 1 1 I +X A4 12 0 600 200 D 50 43 1 1 I +X A5 13 50 600 200 D 50 43 1 1 I +X A6 14 100 600 200 D 50 43 1 1 I +X A7 15 150 600 200 D 50 43 1 1 I +X A8 16 200 600 200 D 50 43 1 1 I +X WR_EN 17 500 200 200 L 50 43 1 1 I +X CS1 18 -500 250 200 R 50 43 1 1 I +X CS2 19 -500 200 200 R 50 43 1 1 I +ENDDRAW +ENDDEF +# +# d_source +# +DEF d_source U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_source" 0 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -250 200 450 -50 0 1 0 N +X OUT1 1 650 150 200 L 50 43 1 1 O +X OUT2 2 650 100 200 L 50 43 1 1 O +X OUT3 3 650 50 200 L 50 43 1 1 O +X OUT4 4 650 0 200 L 50 43 1 1 O +ENDDRAW +ENDDEF +# +# d_srff +# +DEF d_srff U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_srff" 50 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 600 550 -600 -600 0 1 0 N +X S 1 -800 400 200 R 50 50 1 1 I +X R 2 -800 -450 200 R 50 50 1 1 I +X Clk 3 -800 0 200 R 50 50 1 1 I C +X Set 4 0 750 200 D 50 50 1 1 I +X Reset 5 0 -800 200 U 50 50 1 1 I +X Out 6 800 400 200 L 50 50 1 1 O +X Nout 7 800 -450 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_srlatch +# +DEF d_srlatch U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_srlatch" 50 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 600 550 -600 -600 0 1 0 N +X S 1 -800 400 200 R 50 50 1 1 I +X R 2 -800 -450 200 R 50 50 1 1 I +X EN 3 -800 0 200 R 50 50 1 1 I +X Set 4 0 750 200 D 50 50 1 1 I +X Reset 5 0 -800 200 U 50 50 1 1 I +X Out 6 800 400 200 L 50 50 1 1 O +X Nout 7 800 -450 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_state +# +DEF d_state U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_state" 0 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -350 350 400 -50 0 1 0 N +X IN1 1 -550 250 200 R 50 43 1 1 I +X IN2 2 -550 200 200 R 50 43 1 1 I +X IN3 3 -550 150 200 R 50 43 1 1 I +X IN4 4 -550 100 200 R 50 43 1 1 I +X CLK 5 600 50 200 L 50 43 1 1 I C +X RST 6 600 200 200 L 50 43 1 1 I +X OUT1 7 -150 550 200 D 50 43 1 1 O +X OUT2 8 -100 550 200 D 50 43 1 1 O +X OUT3 9 -50 550 200 D 50 43 1 1 O +X OUT4 10 0 550 200 D 50 43 1 1 O +X OUT5 11 50 550 200 D 50 43 1 1 O +X OUT6 12 100 550 200 D 50 43 1 1 O +X OUT7 13 150 550 200 D 50 43 1 1 O +X OUT8 14 200 550 200 D 50 43 1 1 O +ENDDRAW +ENDDEF +# +# d_tff +# +DEF d_tff U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_tff" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 350 450 -350 -400 0 1 0 N +X T 1 -550 350 200 R 50 50 1 1 I +X Clk 2 -550 -300 200 R 50 50 1 1 I C +X Set 3 0 650 200 D 50 50 1 1 I +X Reset 4 0 -600 200 U 50 50 1 1 I +X Out 5 550 350 200 L 50 50 1 1 O +X Nout 6 550 -300 200 L 50 50 1 1 O I +ENDDRAW +ENDDEF +# +# d_tristate +# +DEF d_tristate U 0 40 Y Y 1 F N +F0 "U" -250 250 60 H V C CNN +F1 "d_tristate" -200 450 60 H V C CNN +F2 "" -100 350 60 H V C CNN +F3 "" -100 350 60 H V C CNN +DRAW +P 4 0 1 0 -400 550 -400 150 350 350 -400 550 N +X IN 1 -600 350 200 R 50 50 1 1 I +X EN 2 -50 50 193 U 50 50 1 1 I +X OUT 3 550 350 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# d_xnor +# +DEF d_xnor U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_xnor" 50 100 47 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A -450 50 224 266 -266 0 1 0 N -250 150 -250 -50 +A -350 50 180 -337 337 0 1 0 N -200 -50 -200 150 +A -25 -124 325 574 323 0 1 0 N 150 150 250 50 +A 74 125 191 -665 -231 0 1 0 N 150 -50 250 50 +P 2 0 1 0 150 -50 -200 -50 N +P 2 0 1 0 150 150 -200 150 N +X IN1 1 -450 100 215 R 50 43 1 1 I +X IN2 2 -450 0 215 R 50 43 1 1 I +X OUT 3 450 50 200 L 50 43 1 1 O I +ENDDRAW +ENDDEF +# +# d_xor +# +DEF d_xor U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "d_xor" 50 100 47 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A -450 50 224 266 -266 0 1 0 N -250 150 -250 -50 +A -350 50 180 -337 337 0 1 0 N -200 -50 -200 150 +A -25 -124 325 574 323 0 1 0 N 150 150 250 50 +A 74 125 191 -665 -231 0 1 0 N 150 -50 250 50 +P 2 0 1 0 150 -50 -200 -50 N +P 2 0 1 0 150 150 -200 150 N +X IN1 1 -450 100 215 R 50 43 1 1 I +X IN2 2 -450 0 215 R 50 43 1 1 I +X OUT 3 450 50 200 L 50 39 1 1 O +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Hybrid.dcm b/Windows/dependencies/library/eSim_Hybrid.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_Hybrid.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Hybrid.lib b/Windows/dependencies/library/eSim_Hybrid.lib new file mode 100644 index 00000000..e793288d --- /dev/null +++ b/Windows/dependencies/library/eSim_Hybrid.lib @@ -0,0 +1,340 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# adc_bridge_1 +# +DEF adc_bridge_1 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_1" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -50 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X OUT1 2 550 50 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# adc_bridge_2 +# +DEF adc_bridge_2 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_2" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -100 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X OUT1 3 550 50 200 L 50 50 1 1 O +X OUT2 4 550 -50 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# adc_bridge_3 +# +DEF adc_bridge_3 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_3" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -200 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X OUT1 4 550 50 200 L 50 50 1 1 O +X OUT2 5 550 -50 200 L 50 50 1 1 O +X OUT3 6 550 -150 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# adc_bridge_4 +# +DEF adc_bridge_4 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_4" 0 300 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -350 350 350 -200 0 1 0 N +X IN1 1 -550 200 200 R 50 50 1 1 I +X IN2 2 -550 100 200 R 50 50 1 1 I +X IN3 3 -550 0 200 R 50 50 1 1 I +X IN4 4 -550 -100 200 R 50 50 1 1 I +X OUT1 5 550 200 200 L 50 50 1 1 O +X OUT2 6 550 100 200 L 50 50 1 1 O +X OUT3 7 550 0 200 L 50 50 1 1 O +X OUT4 8 550 -100 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# adc_bridge_5 +# +DEF adc_bridge_5 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_5" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -400 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X OUT1 6 550 50 200 L 50 50 1 1 O +X OUT2 7 550 -50 200 L 50 50 1 1 O +X OUT3 8 550 -150 200 L 50 50 1 1 O +X OUT4 9 550 -250 200 L 50 50 1 1 O +X OUT5 10 550 -350 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# adc_bridge_6 +# +DEF adc_bridge_6 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_6" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -500 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X IN6 6 -600 -450 200 R 50 50 1 1 I +X OUT1 7 550 50 200 L 50 50 1 1 O +X OUT2 8 550 -50 200 L 50 50 1 1 O +X OUT3 9 550 -150 200 L 50 50 1 1 O +X OUT4 10 550 -250 200 L 50 50 1 1 O +X OUT5 11 550 -350 200 L 50 50 1 1 O +X OUT6 12 550 -450 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# adc_bridge_7 +# +DEF adc_bridge_7 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_7" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -600 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X IN6 6 -600 -450 200 R 50 50 1 1 I +X IN7 7 -600 -550 200 R 50 50 1 1 I +X OUT1 8 550 50 200 L 50 50 1 1 O +X OUT2 9 550 -50 200 L 50 50 1 1 O +X OUT3 10 550 -150 200 L 50 50 1 1 O +X OUT4 11 550 -250 200 L 50 50 1 1 O +X OUT5 12 550 -350 200 L 50 50 1 1 O +X OUT6 13 550 -450 200 L 50 50 1 1 O +X OUT7 14 550 -550 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# adc_bridge_8 +# +DEF adc_bridge_8 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "adc_bridge_8" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -700 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X IN6 6 -600 -450 200 R 50 50 1 1 I +X IN7 7 -600 -550 200 R 50 50 1 1 I +X IN8 8 -600 -650 200 R 50 50 1 1 I +X OUT1 9 550 50 200 L 50 50 1 1 O +X OUT2 10 550 -50 200 L 50 50 1 1 O +X OUT3 11 550 -150 200 L 50 50 1 1 O +X OUT4 12 550 -250 200 L 50 50 1 1 O +X OUT5 13 550 -350 200 L 50 50 1 1 O +X OUT6 14 550 -450 200 L 50 50 1 1 O +X OUT7 15 550 -550 200 L 50 50 1 1 O +X OUT8 16 550 -650 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_1 +# +DEF dac_bridge_1 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_1" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -50 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X OUT1 2 550 50 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_2 +# +DEF dac_bridge_2 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_2" 50 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -250 200 350 -100 0 1 0 N +X IN1 1 -450 50 200 R 50 50 1 1 I +X IN2 2 -450 -50 200 R 50 50 1 1 I +X OUT1 3 550 50 200 L 50 50 1 1 O +X OUT4 4 550 -50 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_3 +# +DEF dac_bridge_3 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_3" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -200 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X OUT1 4 550 50 200 L 50 50 1 1 O +X OUT2 5 550 -50 200 L 50 50 1 1 O +X OUT3 6 550 -150 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_4 +# +DEF dac_bridge_4 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_4" 0 300 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -350 350 350 -200 0 1 0 N +X IN1 1 -550 200 200 R 50 50 1 1 I +X IN2 2 -550 100 200 R 50 50 1 1 I +X IN3 3 -550 0 200 R 50 50 1 1 I +X IN4 4 -550 -100 200 R 50 50 1 1 I +X OUT1 5 550 200 200 L 50 50 1 1 O +X OUT2 6 550 100 200 L 50 50 1 1 O +X OUT3 7 550 0 200 L 50 50 1 1 O +X OUT4 8 550 -100 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_5 +# +DEF dac_bridge_5 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_5" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -400 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X OUT1 6 550 50 200 L 50 50 1 1 O +X OUT2 7 550 -50 200 L 50 50 1 1 O +X OUT3 8 550 -150 200 L 50 50 1 1 O +X OUT4 9 550 -250 200 L 50 50 1 1 O +X OUT5 10 550 -350 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_6 +# +DEF dac_bridge_6 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_6" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -500 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X IN6 6 -600 -450 200 R 50 50 1 1 I +X OUT1 7 550 50 200 L 50 50 1 1 O +X OUT2 8 550 -50 200 L 50 50 1 1 O +X OUT3 9 550 -150 200 L 50 50 1 1 O +X OUT4 10 550 -250 200 L 50 50 1 1 O +X OUT5 11 550 -350 200 L 50 50 1 1 O +X OUT6 12 550 -450 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_7 +# +DEF dac_bridge_7 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_7" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -600 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X IN6 6 -600 -450 200 R 50 50 1 1 I +X IN7 7 -600 -550 200 R 50 50 1 1 I +X OUT1 8 550 50 200 L 50 50 1 1 O +X OUT2 9 550 -50 200 L 50 50 1 1 O +X OUT3 10 550 -150 200 L 50 50 1 1 O +X OUT4 11 550 -250 200 L 50 50 1 1 O +X OUT5 12 550 -350 200 L 50 50 1 1 O +X OUT6 13 550 -450 200 L 50 50 1 1 O +X OUT7 14 550 -550 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# dac_bridge_8 +# +DEF dac_bridge_8 U 0 40 Y Y 1 F N +F0 "U" 0 0 60 H V C CNN +F1 "dac_bridge_8" 0 150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -400 200 350 -700 0 1 0 N +X IN1 1 -600 50 200 R 50 50 1 1 I +X IN2 2 -600 -50 200 R 50 50 1 1 I +X IN3 3 -600 -150 200 R 50 50 1 1 I +X IN4 4 -600 -250 200 R 50 50 1 1 I +X IN5 5 -600 -350 200 R 50 50 1 1 I +X IN6 6 -600 -450 200 R 50 50 1 1 I +X IN7 7 -600 -550 200 R 50 50 1 1 I +X IN8 8 -600 -650 200 R 50 50 1 1 I +X OUT1 9 550 50 200 L 50 50 1 1 O +X OUT2 10 550 -50 200 L 50 50 1 1 O +X OUT3 11 550 -150 200 L 50 50 1 1 O +X OUT4 12 550 -250 200 L 50 50 1 1 O +X OUT5 13 550 -350 200 L 50 50 1 1 O +X OUT6 14 550 -450 200 L 50 50 1 1 O +X OUT7 15 550 -550 200 L 50 50 1 1 O +X OUT8 16 550 -650 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Miscellaneous.dcm b/Windows/dependencies/library/eSim_Miscellaneous.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_Miscellaneous.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Miscellaneous.lib b/Windows/dependencies/library/eSim_Miscellaneous.lib new file mode 100644 index 00000000..f12f1dac --- /dev/null +++ b/Windows/dependencies/library/eSim_Miscellaneous.lib @@ -0,0 +1,129 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# IC +# +DEF IC U 0 40 Y Y 1 F N +F0 "U" 300 150 60 H V C CNN +F1 "IC" 250 350 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 5 0 1 0 200 300 100 250 200 200 300 250 200 300 N +X ~ 1 200 50 146 U 50 50 1 1 I +ENDDRAW +ENDDEF +# +# PORT +# +DEF PORT U 0 40 Y Y 26 F N +F0 "U" 50 100 30 H V C CNN +F1 "PORT" 0 0 30 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A 325 225 285 -1421 -1278 0 1 0 N 100 50 150 0 +A 376 -275 356 1294 1408 0 1 0 N 150 0 100 -50 +S -100 50 100 -50 0 1 0 N +X ~ 1 250 0 100 L 30 30 1 1 B +X ~ 2 250 0 100 L 30 30 2 1 B +X ~ 3 250 0 100 L 30 30 3 1 B +X ~ 4 250 0 100 L 30 30 4 1 B +X ~ 5 250 0 100 L 30 30 5 1 B +X ~ 6 250 0 100 L 30 30 6 1 B +X ~ 7 250 0 100 L 30 30 7 1 B +X ~ 8 250 0 100 L 30 30 8 1 B +X ~ 9 250 0 100 L 30 30 9 1 B +X ~ 10 250 0 100 L 30 30 10 1 B +X ~ 11 250 0 100 L 30 30 11 1 B +X ~ 12 250 0 100 L 30 30 12 1 B +X ~ 13 250 0 100 L 30 30 13 1 B +X ~ 14 250 0 100 L 30 30 14 1 B +X ~ 15 250 0 100 L 30 30 15 1 B +X ~ 16 250 0 100 L 30 30 16 1 B +X ~ 17 250 0 100 L 30 30 17 1 B +X ~ 18 250 0 100 L 30 30 18 1 B +X ~ 19 250 0 100 L 30 30 19 1 B +X ~ 20 250 0 100 L 30 30 20 1 B +X ~ 21 250 0 100 L 30 30 21 1 B +X ~ 22 250 0 100 L 30 30 22 1 B +X ~ 23 250 0 100 L 30 30 23 1 B +X ~ 24 250 0 100 L 30 30 24 1 B +X ~ 25 250 0 100 L 30 30 25 1 B +X ~ 26 250 0 100 L 30 30 26 1 B +ENDDRAW +ENDDEF +# +# eSim_1PinConn +# +DEF eSim_1PinConn J 0 40 Y N 1 F N +F0 "J" 0 100 50 H V C CNN +F1 "eSim_1PinConn" 0 -100 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_??x*mm* + Connector*:*1x??x*mm* + Pin?Header?Straight?1X* + Pin?Header?Angled?1X* + Socket?Strip?Straight?1X* + Socket?Strip?Angled?1X* +$ENDFPLIST +DRAW +S -50 5 0 -5 1 1 6 N +S -50 50 50 -50 1 1 10 f +X Pin_1 1 -200 0 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# eSim_2PinConn +# +DEF eSim_2PinConn J 0 40 Y N 1 F N +F0 "J" 0 100 50 H V C CNN +F1 "eSim_2PinConn" 0 -200 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_??x*mm* + Connector*:*1x??x*mm* + Pin?Header?Straight?1X* + Pin?Header?Angled?1X* + Socket?Strip?Straight?1X* + Socket?Strip?Angled?1X* +$ENDFPLIST +DRAW +S -50 -95 0 -105 1 1 6 N +S -50 5 0 -5 1 1 6 N +S -50 50 50 -150 1 1 10 f +X Pin_1 1 -200 0 150 R 50 50 1 1 P +X Pin_2 2 -200 -100 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# eSim_3PinConn +# +DEF eSim_3PinConn J 0 40 Y N 1 F N +F0 "J" 0 200 50 H V C CNN +F1 "eSim_3PinConn" 0 -200 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_??x*mm* + Connector*:*1x??x*mm* + Pin?Header?Straight?1X* + Pin?Header?Angled?1X* + Socket?Strip?Straight?1X* + Socket?Strip?Angled?1X* +$ENDFPLIST +DRAW +S -50 -95 0 -105 1 1 6 N +S -50 5 0 -5 1 1 6 N +S -50 105 0 95 1 1 6 N +S -50 150 50 -150 1 1 10 f +X Pin_1 1 -200 100 150 R 50 50 1 1 P +X Pin_2 2 -200 0 150 R 50 50 1 1 P +X Pin_3 3 -200 -100 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_PSpice.dcm b/Windows/dependencies/library/eSim_PSpice.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_PSpice.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_PSpice.lib b/Windows/dependencies/library/eSim_PSpice.lib new file mode 100644 index 00000000..5f5f194b --- /dev/null +++ b/Windows/dependencies/library/eSim_PSpice.lib @@ -0,0 +1,12485 @@ +EESchema-LIBRARY Version 2.3 Date: +#encoding utf-8 +# +# ABM_PSPICE +# +DEF ABM_PSPICE ABM 0 30 Y Y 1 F N +F0 "ABM" 0 0 30 H V L CNN +F1 "ABM_PSPICE" 0 60 30 H V L CNN +DRAW +S -900 200 -100 -200 0 1 0 N +X ~ OUT 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABM1_PSPICE +# +DEF ABM1_PSPICE ABM1 0 30 Y Y 1 F N +F0 "ABM1" 0 0 30 H V L CNN +F1 "ABM1_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 800 -200 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 900 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABM2_PSPICE +# +DEF ABM2_PSPICE ABM2 0 30 Y Y 1 F N +F0 "ABM2" 0 0 30 H V L CNN +F1 "ABM2_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 800 -300 0 1 0 N +X ~ IN1 0 0 100 R 30 30 0 1 P +X ~ OUT 900 -100 100 L 30 30 0 1 P +X ~ IN2 0 -200 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABM3_PSPICE +# +DEF ABM3_PSPICE ABM3 0 30 Y Y 1 F N +F0 "ABM3" 0 0 30 H V L CNN +F1 "ABM3_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 800 -300 0 1 0 N +X ~ IN1 0 0 100 R 30 30 0 1 P +X ~ OUT 900 -100 100 L 30 30 0 1 P +X ~ IN2 0 -100 100 R 30 30 0 1 P +X ~ IN3 0 -200 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABM/I_PSPICE +# +DEF ABM/I_PSPICE ABMI 0 30 Y Y 1 F N +F0 "ABMI" 0 0 30 H V L CNN +F1 "ABM/I_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -180 -120 -160 -90 N +P 2 0 1 0 -200 -90 -180 -120 N +P 2 0 1 0 -180 -40 -180 -140 N +P 2 0 1 0 -100 0 -180 0 N +P 2 0 1 0 -180 0 -180 -40 N +P 2 0 1 0 -180 -140 -180 -200 N +P 2 0 1 0 -180 -200 -100 -200 N +S -900 100 -100 -300 0 1 0 N +C -180 -90 40 0 1 0 N +X ~ out+ 0 0 100 L 30 30 0 1 P +X ~ out- 0 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABM1/I_PSPICE +# +DEF ABM1/I_PSPICE ABMII 0 30 Y Y 1 F N +F0 "ABMII" 0 0 30 H V L CNN +F1 "ABM1/I_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 720 -20 740 10 N +P 2 0 1 0 700 10 720 -20 N +P 2 0 1 0 720 60 720 -40 N +P 2 0 1 0 800 100 720 100 N +P 2 0 1 0 720 100 720 60 N +P 2 0 1 0 720 -40 720 -100 N +P 2 0 1 0 720 -100 800 -100 N +S 100 200 800 -200 0 1 0 N +C 720 10 40 0 1 0 N +X ~ out+ 900 100 100 L 30 30 0 1 P +X ~ out- 900 -100 100 L 30 30 0 1 P +X ~ IN 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABM2/I_PSPICE +# +DEF ABM2/I_PSPICE ABM2I 0 30 Y Y 1 F N +F0 "ABM2I" 0 0 30 H V L CNN +F1 "ABM2/I_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 720 -120 740 -90 N +P 2 0 1 0 700 -90 720 -120 N +P 2 0 1 0 720 -40 720 -140 N +P 2 0 1 0 800 0 720 0 N +P 2 0 1 0 720 0 720 -40 N +P 2 0 1 0 720 -140 720 -200 N +P 2 0 1 0 720 -200 800 -200 N +S 100 100 800 -300 0 1 0 N +C 720 -90 40 0 1 0 N +X ~ out+ 900 0 100 L 30 30 0 1 P +X ~ out- 900 -200 100 L 30 30 0 1 P +X ~ IN1 0 0 100 R 30 30 0 1 P +X ~ IN2 0 -200 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABM3/I_PSPICE +# +DEF ABM3/I_PSPICE ABM3I 0 30 Y Y 1 F N +F0 "ABM3I" 0 0 30 H V L CNN +F1 "ABM3/I_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 720 -120 740 -90 N +P 2 0 1 0 700 -90 720 -120 N +P 2 0 1 0 720 -40 720 -140 N +P 2 0 1 0 800 0 720 0 N +P 2 0 1 0 720 0 720 -40 N +P 2 0 1 0 720 -140 720 -200 N +P 2 0 1 0 720 -200 800 -200 N +S 100 100 800 -300 0 1 0 N +C 720 -90 40 0 1 0 N +X ~ out+ 900 0 100 L 30 30 0 1 P +X ~ out- 900 -200 100 L 30 30 0 1 P +X ~ IN1 0 0 100 R 30 30 0 1 P +X ~ IN2 0 -100 100 R 30 30 0 1 P +X ~ IN3 0 -200 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ABS_PSPICE +# +DEF ABS_PSPICE ABS 0 30 Y Y 1 F N +F0 "ABS" 0 0 30 H V L CNN +F1 "ABS_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ARCTAN_PSPICE +# +DEF ARCTAN_PSPICE ATAN 0 30 Y Y 1 F N +F0 "ATAN" 0 0 30 H V L CNN +F1 "ARCTAN_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ATAN_PSPICE +# +DEF ATAN_PSPICE ATAN 0 30 Y Y 1 F N +F0 "ATAN" 0 0 30 H V L CNN +F1 "ATAN_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# BANDPASS_PSPICE +# +DEF BANDPASS_PSPICE BPASS 0 30 Y Y 1 F N +F0 "BPASS" 0 0 30 H V L CNN +F1 "BANDPASS_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 180 -60 400 -20 N +P 2 0 1 0 180 100 400 140 N +S 100 200 800 -200 0 1 0 N +A 240 40 60 1 1799 0 1 0 N 300 40 180 40 +A 350 40 50 -1799 -1 0 1 0 N 300 40 400 40 +A 240 -40 60 1 1799 0 1 0 N 300 -40 180 -40 +A 350 -40 50 -1799 -1 0 1 0 N 300 -40 400 -40 +A 240 120 60 1 1799 0 1 0 N 300 120 180 120 +A 350 120 50 -1799 -1 0 1 0 N 300 120 400 120 +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 900 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# BANDREJ_PSPICE +# +DEF BANDREJ_PSPICE BREJ 0 30 Y Y 1 F N +F0 "BREJ" 0 0 30 H V L CNN +F1 "BANDREJ_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 180 20 400 60 N +S 100 200 800 -200 0 1 0 N +A 240 40 60 1 1799 0 1 0 N 300 40 180 40 +A 350 40 50 -1799 -1 0 1 0 N 300 40 400 40 +A 240 -40 60 1 1799 0 1 0 N 300 -40 180 -40 +A 350 -40 50 -1799 -1 0 1 0 N 300 -40 400 -40 +A 240 120 60 1 1799 0 1 0 N 300 120 180 120 +A 350 120 50 -1799 -1 0 1 0 N 300 120 400 120 +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 900 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# CONST_PSPICE +# +DEF CONST_PSPICE CONST 0 30 Y Y 1 F N +F0 "CONST" 0 0 30 H V L CNN +F1 "CONST_PSPICE" 0 60 30 H V L CNN +DRAW +S -400 100 -100 -100 0 1 0 N +X ~ OUT 0 0 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# COS_PSPICE +# +DEF COS_PSPICE COS 0 30 Y Y 1 F N +F0 "COS" 0 0 30 H V L CNN +F1 "COS_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DIFF_PSPICE +# +DEF DIFF_PSPICE DIFF 0 30 Y Y 1 F N +F0 "DIFF" 0 0 30 H V L CNN +F1 "DIFF_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 120 160 N +P 2 0 1 0 100 100 80 160 N +P 2 0 1 0 0 0 -60 20 N +P 2 0 1 0 0 0 -60 -20 N +P 2 0 1 0 80 60 120 60 N +P 2 0 1 0 20 0 60 0 N +P 2 0 1 0 40 20 40 -20 N +C 100 0 100 0 1 0 N +X ~ OUT 300 0 100 L 30 30 0 1 O +X ~ IN1 100 100 100 D 30 30 0 1 I +X ~ IN2 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# DIFFER_PSPICE +# +DEF DIFFER_PSPICE DIFFER 0 30 Y Y 1 F N +F0 "DIFFER" 0 0 30 H V L CNN +F1 "DIFFER_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 400 -200 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 500 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EXP_PSPICE +# +DEF EXP_PSPICE EXP 0 30 Y Y 1 F N +F0 "EXP" 0 0 30 H V L CNN +F1 "EXP_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# FTABLE_PSPICE +# +DEF FTABLE_PSPICE FTABLE 0 30 Y Y 1 F N +F0 "FTABLE" 0 0 30 H V L CNN +F1 "FTABLE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -200 500 -200 N +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# GAIN_PSPICE +# +DEF GAIN_PSPICE GAIN 0 30 Y Y 1 F N +F0 "GAIN" 0 0 30 H V L CNN +F1 "GAIN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 400 0 N +P 2 0 1 0 400 0 100 -200 N +P 2 0 1 0 100 200 100 -200 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 500 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# GLIMIT_PSPICE +# +DEF GLIMIT_PSPICE GLIMIT 0 30 Y Y 1 F N +F0 "GLIMIT" 0 0 30 H V L CNN +F1 "GLIMIT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 320 -160 400 -160 N +P 2 0 1 0 400 -160 400 160 N +P 2 0 1 0 400 160 480 160 N +P 2 0 1 0 180 100 180 -100 N +P 2 0 1 0 180 -100 320 0 N +P 2 0 1 0 320 0 180 100 N +S 100 200 500 -200 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# HILO_PSPICE +# +DEF HILO_PSPICE LIMIT 0 30 Y Y 1 F N +F0 "LIMIT" 0 0 30 H V L CNN +F1 "HILO_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 220 -160 300 -160 N +P 2 0 1 0 300 -160 300 160 N +P 2 0 1 0 300 160 380 160 N +S 100 200 400 -200 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 500 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# HIPASS_PSPICE +# +DEF HIPASS_PSPICE HIPASS 0 30 Y Y 1 F N +F0 "HIPASS" 0 0 30 H V L CNN +F1 "HIPASS_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 180 -60 400 -20 N +S 100 200 800 -200 0 1 0 N +A 240 60 60 1 1799 0 1 0 N 300 60 180 60 +A 350 60 50 -1799 -1 0 1 0 N 300 60 400 60 +A 240 -40 60 1 1799 0 1 0 N 300 -40 180 -40 +A 350 -40 50 -1799 -1 0 1 0 N 300 -40 400 -40 +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 900 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# INTEG_PSPICE +# +DEF INTEG_PSPICE INTEG 0 30 Y Y 1 F N +F0 "INTEG" 0 0 30 H V L CNN +F1 "INTEG_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 160 200 400 0 N +P 2 0 1 0 160 -200 400 0 N +S 100 200 160 -200 0 1 0 N +X ~ in 0 0 100 R 30 30 0 1 P +X ~ out 500 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LAPLACE_PSPICE +# +DEF LAPLACE_PSPICE LAPLACE 0 30 Y Y 1 F N +F0 "LAPLACE" 0 0 30 H V L CNN +F1 "LAPLACE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 140 0 440 0 N +S 100 200 500 -200 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LIMIT_PSPICE +# +DEF LIMIT_PSPICE LIMIT 0 30 Y Y 1 F N +F0 "LIMIT" 0 0 30 H V L CNN +F1 "LIMIT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 220 -160 300 -160 N +P 2 0 1 0 300 -160 300 160 N +P 2 0 1 0 300 160 380 160 N +S 100 200 400 -200 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 500 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LOG_PSPICE +# +DEF LOG_PSPICE LOG 0 30 Y Y 1 F N +F0 "LOG" 0 0 30 H V L CNN +F1 "LOG_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LOG10_PSPICE +# +DEF LOG10_PSPICE LOG10 0 30 Y Y 1 F N +F0 "LOG10" 0 0 30 H V L CNN +F1 "LOG10_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LOPASS_PSPICE +# +DEF LOPASS_PSPICE LOPASS 0 30 Y Y 1 F N +F0 "LOPASS" 0 0 30 H V L CNN +F1 "LOPASS_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 180 40 400 80 N +S 100 200 800 -200 0 1 0 N +A 240 60 60 1 1799 0 1 0 N 300 60 180 60 +A 350 60 50 -1799 -1 0 1 0 N 300 60 400 60 +A 240 -40 60 1 1799 0 1 0 N 300 -40 180 -40 +A 350 -40 50 -1799 -1 0 1 0 N 300 -40 400 -40 +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 900 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MULT_PSPICE +# +DEF MULT_PSPICE MULT 0 30 Y Y 1 F N +F0 "MULT" 0 0 30 H V L CNN +F1 "MULT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 120 160 N +P 2 0 1 0 100 100 80 160 N +P 2 0 1 0 0 0 -60 20 N +P 2 0 1 0 0 0 -60 -20 N +P 2 0 1 0 60 40 140 -40 N +P 2 0 1 0 140 40 60 -40 N +C 100 0 100 0 1 0 N +X ~ OUT 300 0 100 L 30 30 0 1 O +X ~ IN1 100 100 100 D 30 30 0 1 I +X ~ IN2 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# PWR_PSPICE +# +DEF PWR_PSPICE PWR 0 30 Y Y 1 F N +F0 "PWR" 0 0 30 H V L CNN +F1 "PWR_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# PWRS_PSPICE +# +DEF PWRS_PSPICE PWRS 0 30 Y Y 1 F N +F0 "PWRS" 0 0 30 H V L CNN +F1 "PWRS_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# SIN_PSPICE +# +DEF SIN_PSPICE SIN 0 30 Y Y 1 F N +F0 "SIN" 0 0 30 H V L CNN +F1 "SIN_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# SOFTLIM_PSPICE +# +DEF SOFTLIM_PSPICE SLIMIT 0 30 Y Y 1 F N +F0 "SLIMIT" 0 0 30 H V L CNN +F1 "SOFTLIM_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 120 300 -120 N +P 2 0 1 0 340 160 380 160 N +P 2 0 1 0 200 -160 260 -160 N +S 100 200 400 -200 0 1 0 N +A 270 200 0 -199 499 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +A 330 200 0 1 12149463 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 500 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# SQRT_PSPICE +# +DEF SQRT_PSPICE SQRT 0 30 Y Y 1 F N +F0 "SQRT" 0 0 30 H V L CNN +F1 "SQRT_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# SUM_PSPICE +# +DEF SUM_PSPICE SUM 0 30 Y Y 1 F N +F0 "SUM" 0 0 30 H V L CNN +F1 "SUM_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 60 100 -60 N +P 2 0 1 0 40 0 160 0 N +P 2 0 1 0 100 100 120 160 N +P 2 0 1 0 100 100 80 160 N +P 2 0 1 0 0 0 -60 20 N +P 2 0 1 0 0 0 -60 -20 N +C 100 0 100 0 1 0 N +X ~ OUT 300 0 100 L 30 30 0 1 O +X ~ IN1 100 100 100 D 30 30 0 1 I +X ~ IN2 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# TABLE_PSPICE +# +DEF TABLE_PSPICE TABLE 0 30 Y Y 1 F N +F0 "TABLE" 0 0 30 H V L CNN +F1 "TABLE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -200 500 -200 N +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# TAN_PSPICE +# +DEF TAN_PSPICE TAN 0 30 Y Y 1 F N +F0 "TAN" 0 0 30 H V L CNN +F1 "TAN_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -100 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EFREQ_PSPICE +# +DEF EFREQ_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "EFREQ_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 50 400 -150 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# ELAPLACE_PSPICE +# +DEF ELAPLACE_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "ELAPLACE_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 50 400 -150 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# EMULT_PSPICE +# +DEF EMULT_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "EMULT_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 50 500 -450 0 1 0 N +X ~ IN1+ 0 0 100 R 30 30 0 1 I +X ~ IN1- 0 -100 100 R 30 30 0 1 I +X ~ IN2+ 0 -300 100 R 30 30 0 1 I +X ~ IN2- 0 -400 100 R 30 30 0 1 I +X ~ OUT+ 600 -100 100 L 30 30 0 1 O +X ~ OUT- 600 -300 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# ESUM_PSPICE +# +DEF ESUM_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "ESUM_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 50 500 -450 0 1 0 N +X ~ IN1+ 0 0 100 R 30 30 0 1 I +X ~ IN1- 0 -100 100 R 30 30 0 1 I +X ~ IN2+ 0 -300 100 R 30 30 0 1 I +X ~ IN2- 0 -400 100 R 30 30 0 1 I +X ~ OUT+ 600 -100 100 L 30 30 0 1 O +X ~ OUT- 600 -300 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# ETABLE_PSPICE +# +DEF ETABLE_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "ETABLE_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 50 400 -150 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# EVALUE_PSPICE +# +DEF EVALUE_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "EVALUE_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 50 400 -150 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# GFREQ_PSPICE +# +DEF GFREQ_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "GFREQ_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -100 350 -100 N +P 2 0 1 0 350 0 400 0 N +P 2 0 1 0 350 -80 370 -50 N +P 2 0 1 0 330 -50 350 -80 N +P 2 0 1 0 350 0 350 -100 N +S 100 50 400 -150 0 1 0 N +C 350 -50 40 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# GLAPLACE_PSPICE +# +DEF GLAPLACE_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "GLAPLACE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -100 350 -100 N +P 2 0 1 0 350 0 400 0 N +P 2 0 1 0 350 -80 370 -50 N +P 2 0 1 0 330 -50 350 -80 N +P 2 0 1 0 350 0 350 -100 N +S 100 50 400 -150 0 1 0 N +C 350 -50 40 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# GMULT_PSPICE +# +DEF GMULT_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "GMULT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 450 -230 470 -200 N +P 2 0 1 0 430 -200 450 -230 N +P 2 0 1 0 450 -150 450 -250 N +P 2 0 1 0 500 -100 450 -100 N +P 2 0 1 0 450 -100 450 -150 N +P 2 0 1 0 500 -300 450 -300 N +P 2 0 1 0 450 -300 450 -250 N +S 100 50 500 -450 0 1 0 N +C 450 -200 40 0 1 0 N +X ~ IN1+ 0 0 100 R 30 30 0 1 I +X ~ IN1- 0 -100 100 R 30 30 0 1 I +X ~ IN2+ 0 -300 100 R 30 30 0 1 I +X ~ IN2- 0 -400 100 R 30 30 0 1 I +X ~ OUT+ 600 -100 100 L 30 30 0 1 O +X ~ OUT- 600 -300 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# GSUM_PSPICE +# +DEF GSUM_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "GSUM_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 450 -230 470 -200 N +P 2 0 1 0 430 -200 450 -230 N +P 2 0 1 0 450 -150 450 -250 N +P 2 0 1 0 500 -100 450 -100 N +P 2 0 1 0 450 -100 450 -150 N +P 2 0 1 0 500 -300 450 -300 N +P 2 0 1 0 450 -300 450 -250 N +S 100 50 500 -450 0 1 0 N +C 450 -200 40 0 1 0 N +X ~ IN1+ 0 0 100 R 30 30 0 1 I +X ~ IN1- 0 -100 100 R 30 30 0 1 I +X ~ IN2+ 0 -300 100 R 30 30 0 1 I +X ~ IN2- 0 -400 100 R 30 30 0 1 I +X ~ OUT+ 600 -100 100 L 30 30 0 1 O +X ~ OUT- 600 -300 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# GTABLE_PSPICE +# +DEF GTABLE_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "GTABLE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -100 350 -100 N +P 2 0 1 0 350 0 400 0 N +P 2 0 1 0 350 -80 370 -50 N +P 2 0 1 0 330 -50 350 -80 N +P 2 0 1 0 350 0 350 -100 N +S 100 50 400 -150 0 1 0 N +C 350 -50 40 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# GVALUE_PSPICE +# +DEF GVALUE_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "GVALUE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -100 350 -100 N +P 2 0 1 0 350 0 400 0 N +P 2 0 1 0 350 -80 370 -50 N +P 2 0 1 0 330 -50 350 -80 N +P 2 0 1 0 350 0 350 -100 N +S 100 50 400 -150 0 1 0 N +C 350 -50 40 0 1 0 N +X ~ OUT+ 500 0 100 L 30 30 0 1 O +X ~ OUT- 500 -100 100 L 30 30 0 1 O +X ~ IN+ 0 0 100 R 30 30 0 1 I +X ~ IN- 0 -100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# C_PSPICE +# +DEF C_PSPICE C 0 30 Y Y 1 F N +F0 "C" 0 0 30 H V L CNN +F1 "C_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 130 0 N +P 2 0 1 0 130 50 130 -50 N +P 2 0 1 0 170 50 170 -50 N +P 2 0 1 0 170 0 200 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# C_var_PSPICE +# +DEF C_var_PSPICE C 0 30 Y Y 1 F N +F0 "C" 0 0 30 H V L CNN +F1 "C_var_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 130 0 N +P 2 0 1 0 130 -50 130 50 N +P 2 0 1 0 170 -50 170 50 N +P 2 0 1 0 170 0 200 0 N +P 2 0 1 0 200 50 180 50 N +P 2 0 1 0 200 50 200 30 N +P 2 0 1 0 100 -50 200 50 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# E_PSPICE +# +DEF E_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "E_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 250 0 250 -10 N +P 2 0 1 0 250 -100 250 -90 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EPOLY_PSPICE +# +DEF EPOLY_PSPICE E 0 30 Y Y 1 F N +F0 "E" 0 0 30 H V L CNN +F1 "EPOLY_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 250 0 250 -10 N +P 2 0 1 0 250 -100 250 -90 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# F_PSPICE +# +DEF F_PSPICE F 0 30 Y Y 1 F N +F0 "F" 0 0 30 H V L CNN +F1 "F_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 140 0 140 -100 N +P 2 0 1 0 140 -80 160 -50 N +P 2 0 1 0 120 -50 140 -80 N +P 2 0 1 0 100 0 140 0 N +P 2 0 1 0 100 -100 140 -100 N +P 2 0 1 0 250 -80 270 -50 N +P 2 0 1 0 230 -50 250 -80 N +P 2 0 1 0 250 0 250 -100 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# FPOLY_PSPICE +# +DEF FPOLY_PSPICE F 0 30 Y Y 1 F N +F0 "F" 0 0 30 H V L CNN +F1 "FPOLY_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 140 0 140 -100 N +P 2 0 1 0 140 -80 160 -50 N +P 2 0 1 0 120 -50 140 -80 N +P 2 0 1 0 100 0 140 0 N +P 2 0 1 0 100 -100 140 -100 N +P 2 0 1 0 250 -80 270 -50 N +P 2 0 1 0 230 -50 250 -80 N +P 2 0 1 0 250 0 250 -100 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# G_PSPICE +# +DEF G_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "G_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 250 -80 270 -50 N +P 2 0 1 0 230 -50 250 -80 N +P 2 0 1 0 250 0 250 -100 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# GPOLY_PSPICE +# +DEF GPOLY_PSPICE G 0 30 Y Y 1 F N +F0 "G" 0 0 30 H V L CNN +F1 "GPOLY_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 250 -80 270 -50 N +P 2 0 1 0 230 -50 250 -80 N +P 2 0 1 0 250 0 250 -100 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# H_PSPICE +# +DEF H_PSPICE H 0 30 Y Y 1 F N +F0 "H" 0 0 30 H V L CNN +F1 "H_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 140 0 140 -100 N +P 2 0 1 0 140 -80 160 -50 N +P 2 0 1 0 120 -50 140 -80 N +P 2 0 1 0 100 0 140 0 N +P 2 0 1 0 100 -100 140 -100 N +P 2 0 1 0 250 0 250 -10 N +P 2 0 1 0 250 -100 250 -90 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# HPOLY_PSPICE +# +DEF HPOLY_PSPICE H 0 30 Y Y 1 F N +F0 "H" 0 0 30 H V L CNN +F1 "HPOLY_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 140 0 140 -100 N +P 2 0 1 0 140 -80 160 -50 N +P 2 0 1 0 120 -50 140 -80 N +P 2 0 1 0 100 0 140 0 N +P 2 0 1 0 100 -100 140 -100 N +P 2 0 1 0 250 0 250 -10 N +P 2 0 1 0 250 -100 250 -90 N +S 100 50 300 -150 0 1 0 N +C 250 -50 40 0 1 0 N +X ~ 3 0 0 100 R 30 30 0 1 P +X ~ 4 0 -100 100 R 30 30 0 1 P +X ~ 1 400 0 100 L 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# K_Linear_PSPICE +# +DEF K_Linear_PSPICE K 0 30 Y Y 1 F N +F0 "K" 0 0 30 H V L CNN +F1 "K_Linear_PSPICE" 0 60 30 H V L CNN +DRAW +S 0 100 100 0 0 1 0 N +ENDDRAW +ENDDEF +# +# L_PSPICE +# +DEF L_PSPICE L 0 30 Y Y 1 F N +F0 "L" 0 0 30 H V L CNN +F1 "L_PSPICE" 0 60 30 H V L CNN +DRAW +A 150 0 50 1 1799 0 1 0 N 200 0 100 0 +A 250 0 50 1 1799 0 1 0 N 300 0 200 0 +A 350 0 50 1 1799 0 1 0 N 400 0 300 0 +A 450 0 50 1 1799 0 1 0 N 500 0 400 0 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# OPAMP_PSPICE +# +DEF OPAMP_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "OPAMP_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 700 -200 100 100 N +P 2 0 1 0 100 100 100 -500 N +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ OUT 800 -200 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# R_PSPICE +# +DEF R_PSPICE R 0 30 Y Y 1 F N +F0 "R" 0 0 30 H V L CNN +F1 "R_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 110 0 N +P 2 0 1 0 110 0 130 40 N +P 2 0 1 0 130 40 160 -40 N +P 2 0 1 0 160 -40 190 40 N +P 2 0 1 0 190 40 220 -40 N +P 2 0 1 0 220 -40 250 40 N +P 2 0 1 0 250 40 280 -40 N +P 2 0 1 0 280 -40 300 0 N +X ~ 2 400 0 100 L 30 30 0 1 P +X ~ 1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# R_var_PSPICE +# +DEF R_var_PSPICE R 0 30 Y Y 1 F N +F0 "R" 0 0 30 H V L CNN +F1 "R_var_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 110 0 130 40 N +P 2 0 1 0 130 40 160 -40 N +P 2 0 1 0 160 -40 190 40 N +P 2 0 1 0 190 40 220 -40 N +P 2 0 1 0 220 -40 250 40 N +P 2 0 1 0 250 40 280 -40 N +P 2 0 1 0 280 -40 300 0 N +P 2 0 1 0 100 0 110 0 N +P 2 0 1 0 100 -100 300 100 N +P 2 0 1 0 250 100 300 100 N +P 2 0 1 0 300 100 300 50 N +X ~ 2 400 0 100 L 30 30 0 1 P +X ~ 1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# S_PSPICE +# +DEF S_PSPICE S 0 30 Y Y 1 F N +F0 "S" 0 0 30 H V L CNN +F1 "S_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 250 -100 200 -20 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 300 -100 250 -100 N +S 100 50 300 -150 0 1 0 N +T 0 120 -20 30 0 0 0 + +T 0 120 -120 30 0 0 0 - +T 0 240 0 30 0 0 0 + +T 0 240 -140 30 0 0 0 - +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -100 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# T_PSPICE +# +DEF T_PSPICE T 0 30 Y Y 1 F N +F0 "T" 0 0 30 H V L CNN +F1 "T_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 0 100 0 N +P 2 0 1 0 200 -100 200 -200 N +P 2 0 1 0 200 -200 100 -200 N +P 2 0 1 0 800 -100 800 -200 N +P 2 0 1 0 800 -200 900 -200 N +P 2 0 1 0 200 100 500 100 N +P 2 0 1 0 200 -100 500 -100 N +P 2 0 1 0 600 100 800 100 N +P 2 0 1 0 600 -100 800 -100 N +C 200 0 100 0 1 0 N +A 800 0 100 -899 899 0 1 0 N 800 -100 800 100 +A 710 60 120 1317 2085 0 1 0 N 630 149 604 2 +A 610 60 120 1317 2085 0 1 0 N 530 149 504 2 +A 390 200 0 1318 2084 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +A 490 200 0 1319 2083 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +X ~ A+ 0 0 100 R 30 30 0 1 P +X ~ A- 0 -200 100 R 30 30 0 1 P +X ~ B+ 1000 0 100 L 30 30 0 1 P +X ~ B- 1000 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# TLOSSY_PSPICE +# +DEF TLOSSY_PSPICE T 0 30 Y Y 1 F N +F0 "T" 0 0 30 H V L CNN +F1 "TLOSSY_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 0 100 0 N +P 2 0 1 0 200 -100 200 -200 N +P 2 0 1 0 200 -200 100 -200 N +P 2 0 1 0 800 -100 800 -200 N +P 2 0 1 0 800 -200 900 -200 N +P 2 0 1 0 200 100 500 100 N +P 2 0 1 0 200 -100 500 -100 N +P 2 0 1 0 600 100 800 100 N +P 2 0 1 0 600 -100 800 -100 N +C 200 0 100 0 1 0 N +A 800 0 100 -899 899 0 1 0 N 800 -100 800 100 +A 710 60 120 1317 2085 0 1 0 N 630 149 604 2 +A 610 60 120 1317 2085 0 1 0 N 530 149 504 2 +A 390 200 0 1318 2084 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +A 490 200 0 1319 2083 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +X ~ A+ 0 0 100 R 30 30 0 1 P +X ~ A- 0 -200 100 R 30 30 0 1 P +X ~ B+ 1000 0 100 L 30 30 0 1 P +X ~ B- 1000 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# W_PSPICE +# +DEF W_PSPICE W 0 30 Y Y 1 F N +F0 "W" 0 0 30 H V L CNN +F1 "W_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 250 -100 200 -20 N +P 3 0 1 0 120 -30 140 -80 160 -30 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 140 0 140 -100 N +P 2 0 1 0 100 0 140 0 N +P 2 0 1 0 100 -100 140 -100 N +S 100 50 300 -150 0 1 0 N +T 0 240 0 30 0 0 0 + +T 0 240 -140 30 0 0 0 - +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -100 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# XFRM_LINEAR_PSPICE +# +DEF XFRM_LINEAR_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "XFRM_LINEAR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 300 -500 300 -600 N +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# c_PSPICE +# +DEF c_PSPICE C 0 30 Y Y 1 F N +F0 "C" 0 0 30 H V L CNN +F1 "c_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 130 0 N +P 2 0 1 0 130 50 130 -50 N +P 2 0 1 0 170 50 170 -50 N +P 2 0 1 0 170 0 200 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# l_PSPICE +# +DEF l_PSPICE L 0 30 Y Y 1 F N +F0 "L" 0 0 30 H V L CNN +F1 "l_PSPICE" 0 60 30 H V L CNN +DRAW +A 150 0 50 1 1799 0 1 0 N 200 0 100 0 +A 250 0 50 1 1799 0 1 0 N 300 0 200 0 +A 350 0 50 1 1799 0 1 0 N 400 0 300 0 +A 450 0 50 1 1799 0 1 0 N 500 0 400 0 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# r_PSPICE +# +DEF r_PSPICE R 0 30 Y Y 1 F N +F0 "R" 0 0 30 H V L CNN +F1 "r_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 110 0 N +P 2 0 1 0 110 0 130 40 N +P 2 0 1 0 130 40 160 -40 N +P 2 0 1 0 160 -40 190 40 N +P 2 0 1 0 190 40 220 -40 N +P 2 0 1 0 220 -40 250 40 N +P 2 0 1 0 250 40 280 -40 N +P 2 0 1 0 280 -40 300 0 N +X ~ 2 400 0 100 L 30 30 0 1 P +X ~ 1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# R_var_PSPICE +# +DEF R_var_PSPICE R 0 30 Y Y 1 F N +F0 "R" 0 0 30 H V L CNN +F1 "R_var_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 110 0 130 40 N +P 2 0 1 0 130 40 160 -40 N +P 2 0 1 0 160 -40 190 40 N +P 2 0 1 0 190 40 220 -40 N +P 2 0 1 0 220 -40 250 40 N +P 2 0 1 0 250 40 280 -40 N +P 2 0 1 0 280 -40 300 0 N +P 2 0 1 0 100 0 110 0 N +P 2 0 1 0 100 100 300 -100 N +P 2 0 1 0 300 -50 300 -100 N +P 2 0 1 0 300 -100 250 -100 N +X ~ 2 400 0 100 L 30 30 0 1 P +X ~ 1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# C_var_PSPICE +# +DEF C_var_PSPICE C 0 30 Y Y 1 F N +F0 "C" 0 0 30 H V L CNN +F1 "C_var_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 130 0 N +P 2 0 1 0 130 -50 130 50 N +P 2 0 1 0 170 -50 170 50 N +P 2 0 1 0 170 0 200 0 N +P 2 0 1 0 100 50 200 -50 N +P 2 0 1 0 200 -50 200 -30 N +P 2 0 1 0 200 -50 180 -50 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ADC10break_PSPICE +# +DEF ADC10break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "ADC10break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1100 0 1 0 N +X ~ DB7 700 -200 100 L 30 30 0 1 P +X ~ DB6 700 -300 100 L 30 30 0 1 P +X ~ DB5 700 -400 100 L 30 30 0 1 P +X ~ DB4 700 -500 100 L 30 30 0 1 P +X ~ DB3 700 -600 100 L 30 30 0 1 P +X ~ DB2 700 -700 100 L 30 30 0 1 P +X ~ DB1 700 -800 100 L 30 30 0 1 P +X ~ DB0 700 -900 100 L 30 30 0 1 P +X ~ DPWR 300 200 100 D 30 30 0 1 P +X ~ DGND 300 -1200 100 U 30 30 0 1 P +X ~ GND 400 -1200 100 U 30 30 0 1 P +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ CNVRT 0 -200 100 R 30 30 0 1 P +X ~ STAT 0 -400 100 R 30 30 0 1 P +X ~ OVER 0 -600 100 R 30 30 0 1 P +X ~ REF 0 -800 100 R 30 30 0 1 P +X ~ DB9 700 0 100 L 30 30 0 1 P +X ~ DB8 700 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ADC12break_PSPICE +# +DEF ADC12break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "ADC12break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1300 0 1 0 N +S 700 -1200 700 -1200 0 1 0 N +X ~ DB7 700 -400 100 L 30 30 0 1 P +X ~ DB6 700 -500 100 L 30 30 0 1 P +X ~ DB5 700 -600 100 L 30 30 0 1 P +X ~ DB4 700 -700 100 L 30 30 0 1 P +X ~ DB3 700 -800 100 L 30 30 0 1 P +X ~ DB2 700 -900 100 L 30 30 0 1 P +X ~ DB1 700 -1000 100 L 30 30 0 1 P +X ~ DB0 700 -1100 100 L 30 30 0 1 P +X ~ DPWR 300 200 100 D 30 30 0 1 P +X ~ DGND 300 -1400 100 U 30 30 0 1 P +X ~ GND 400 -1400 100 U 30 30 0 1 P +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ CNVRT 0 -200 100 R 30 30 0 1 P +X ~ STAT 0 -400 100 R 30 30 0 1 P +X ~ OVER 0 -600 100 R 30 30 0 1 P +X ~ REF 0 -800 100 R 30 30 0 1 P +X ~ DB9 700 -200 100 L 30 30 0 1 P +X ~ DB8 700 -300 100 L 30 30 0 1 P +X ~ DB10 700 -100 100 L 30 30 0 1 P +X ~ DB11 700 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ADC8break_PSPICE +# +DEF ADC8break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "ADC8break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -900 0 1 0 N +X ~ DB7 700 0 100 L 30 30 0 1 P +X ~ DB6 700 -100 100 L 30 30 0 1 P +X ~ DB5 700 -200 100 L 30 30 0 1 P +X ~ DB4 700 -300 100 L 30 30 0 1 P +X ~ DB3 700 -400 100 L 30 30 0 1 P +X ~ DB2 700 -500 100 L 30 30 0 1 P +X ~ DB1 700 -600 100 L 30 30 0 1 P +X ~ DB0 700 -700 100 L 30 30 0 1 P +X ~ DPWR 300 200 100 D 30 30 0 1 P +X ~ DGND 300 -1000 100 U 30 30 0 1 P +X ~ GND 400 -1000 100 U 30 30 0 1 P +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ CNVRT 0 -200 100 R 30 30 0 1 P +X ~ STAT 0 -400 100 R 30 30 0 1 P +X ~ OVER 0 -600 100 R 30 30 0 1 P +X ~ REF 0 -800 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Bbreak_PSPICE +# +DEF Bbreak_PSPICE B 0 30 Y Y 1 F N +F0 "B" 0 0 30 H V L CNN +F1 "Bbreak_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +X ~ d 300 200 100 D 30 30 0 1 P +X ~ s 300 -200 100 U 30 30 0 1 P +X ~ g 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Cbreak_PSPICE +# +DEF Cbreak_PSPICE C 0 30 Y Y 1 F N +F0 "C" 0 0 30 H V L CNN +F1 "Cbreak_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 130 0 N +P 2 0 1 0 130 50 130 -50 N +P 2 0 1 0 170 50 170 -50 N +P 2 0 1 0 170 0 200 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DAC10break_PSPICE +# +DEF DAC10break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "DAC10break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1100 0 1 0 N +X ~ DB7 0 -200 100 R 30 30 0 1 P +X ~ DB6 0 -300 100 R 30 30 0 1 P +X ~ DB5 0 -400 100 R 30 30 0 1 P +X ~ DB4 0 -500 100 R 30 30 0 1 P +X ~ DB3 0 -600 100 R 30 30 0 1 P +X ~ DB2 0 -700 100 R 30 30 0 1 P +X ~ DB1 0 -800 100 R 30 30 0 1 P +X ~ DB0 0 -900 100 R 30 30 0 1 P +X ~ DPWR 300 200 100 D 30 30 0 1 P +X ~ DGND 300 -1200 100 U 30 30 0 1 P +X ~ GND 400 -1200 100 U 30 30 0 1 P +X ~ OUT 700 -300 100 L 30 30 0 1 P +X ~ REF 700 -600 100 L 30 30 0 1 P +X ~ DB8 0 -100 100 R 30 30 0 1 P +X ~ DB9 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DAC12break_PSPICE +# +DEF DAC12break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "DAC12break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1300 0 1 0 N +X ~ DB7 0 -400 100 R 30 30 0 1 P +X ~ DB6 0 -500 100 R 30 30 0 1 P +X ~ DB5 0 -600 100 R 30 30 0 1 P +X ~ DB4 0 -700 100 R 30 30 0 1 P +X ~ DB3 0 -800 100 R 30 30 0 1 P +X ~ DB2 0 -900 100 R 30 30 0 1 P +X ~ DB1 0 -1000 100 R 30 30 0 1 P +X ~ DB0 0 -1100 100 R 30 30 0 1 P +X ~ DPWR 300 200 100 D 30 30 0 1 P +X ~ DGND 300 -1400 100 U 30 30 0 1 P +X ~ GND 400 -1400 100 U 30 30 0 1 P +X ~ OUT 700 -300 100 L 30 30 0 1 P +X ~ REF 700 -600 100 L 30 30 0 1 P +X ~ DB8 0 -300 100 R 30 30 0 1 P +X ~ DB9 0 -200 100 R 30 30 0 1 P +X ~ DB10 0 -100 100 R 30 30 0 1 P +X ~ DB11 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DAC8break_PSPICE +# +DEF DAC8break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "DAC8break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -900 0 1 0 N +X ~ DB7 0 0 100 R 30 30 0 1 P +X ~ DB6 0 -100 100 R 30 30 0 1 P +X ~ DB5 0 -200 100 R 30 30 0 1 P +X ~ DB4 0 -300 100 R 30 30 0 1 P +X ~ DB3 0 -400 100 R 30 30 0 1 P +X ~ DB2 0 -500 100 R 30 30 0 1 P +X ~ DB1 0 -600 100 R 30 30 0 1 P +X ~ DB0 0 -700 100 R 30 30 0 1 P +X ~ DPWR 300 200 100 D 30 30 0 1 P +X ~ DGND 300 -1000 100 U 30 30 0 1 P +X ~ GND 400 -1000 100 U 30 30 0 1 P +X ~ OUT 700 -300 100 L 30 30 0 1 P +X ~ REF 700 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Dbreak_PSPICE +# +DEF Dbreak_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "Dbreak_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Dbreak3_PSPICE +# +DEF Dbreak3_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "Dbreak3_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 200 -150 200 -250 N +P 2 0 1 0 200 -200 300 -200 N +P 2 0 1 0 300 -200 300 0 N +P 2 0 1 0 300 0 200 0 N +P 2 0 1 0 100 0 120 0 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 -200 120 -200 N +P 4 0 1 0 120 -150 120 -250 200 -200 120 -150 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -200 100 R 30 30 0 1 P +X ~ 3 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DbreakCR_PSPICE +# +DEF DbreakCR_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "DbreakCR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 180 50 220 50 N +P 2 0 1 0 180 -50 220 -50 N +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 100 0 120 0 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DbreakVV_PSPICE +# +DEF DbreakVV_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "DbreakVV_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 100 0 120 0 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +A 270 0 50 1269 2330 0 1 0 N 240 40 239 -39 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DbreakZ_PSPICE +# +DEF DbreakZ_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "DbreakZ_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 170 70 200 50 N +P 2 0 1 0 200 -50 230 -70 N +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 100 0 120 0 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# JbreakN_PSPICE +# +DEF JbreakN_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "JbreakN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +P 3 0 1 0 110 20 170 0 110 -20 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# JbreakP_PSPICE +# +DEF JbreakP_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "JbreakP_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 -100 300 -100 N +P 3 0 1 0 170 -20 110 0 170 20 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# kbreak_PSPICE +# +DEF kbreak_PSPICE K 0 30 Y Y 1 F N +F0 "K" 0 0 30 H V L CNN +F1 "kbreak_PSPICE" 0 60 30 H V L CNN +DRAW +S 0 100 100 0 0 1 0 N +ENDDRAW +ENDDEF +# +# Lbreak_PSPICE +# +DEF Lbreak_PSPICE L 0 30 Y Y 1 F N +F0 "L" 0 0 30 H V L CNN +F1 "Lbreak_PSPICE" 0 60 30 H V L CNN +DRAW +A 150 0 50 1 1799 0 1 0 N 200 0 100 0 +A 250 0 50 1 1799 0 1 0 N 300 0 200 0 +A 350 0 50 1 1799 0 1 0 N 400 0 300 0 +A 450 0 50 1 1799 0 1 0 N 500 0 400 0 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 600 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakN_PSPICE +# +DEF MbreakN_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 290 -20 230 0 290 20 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +X ~ b 400 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakN3_PSPICE +# +DEF MbreakN3_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakN3_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 290 -20 230 0 290 20 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakN3D_PSPICE +# +DEF MbreakN3D_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakN3D_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 3 0 1 0 290 -20 230 0 290 20 N +P 2 0 1 0 200 130 200 -130 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakN4_PSPICE +# +DEF MbreakN4_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakN4_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 290 -20 230 0 290 20 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +X ~ b 400 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakN4D_PSPICE +# +DEF MbreakN4D_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakN4D_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 3 0 1 0 290 -20 230 0 290 20 N +P 2 0 1 0 200 130 200 -130 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +X ~ b 400 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakP_PSPICE +# +DEF MbreakP_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakP_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 230 20 290 0 230 -20 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +X ~ b 400 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakP3_PSPICE +# +DEF MbreakP3_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakP3_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 230 20 290 0 230 -20 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakP3D_PSPICE +# +DEF MbreakP3D_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakP3D_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 3 0 1 0 230 20 290 0 230 -20 N +P 2 0 1 0 200 130 200 -130 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakP4_PSPICE +# +DEF MbreakP4_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakP4_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 230 20 290 0 230 -20 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +X ~ b 400 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MbreakP4D_PSPICE +# +DEF MbreakP4D_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "MbreakP4D_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 3 0 1 0 230 20 290 0 230 -20 N +P 2 0 1 0 200 130 200 -130 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +X ~ b 400 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# POT_PSPICE +# +DEF POT_PSPICE R 0 30 Y Y 1 F N +F0 "R" 0 0 30 H V L CNN +F1 "POT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 220 -40 250 40 N +P 2 0 1 0 130 40 160 -40 N +P 2 0 1 0 160 -40 190 40 N +P 2 0 1 0 190 40 220 -40 N +P 2 0 1 0 250 40 280 -40 N +P 2 0 1 0 110 0 130 40 N +P 2 0 1 0 280 -40 300 0 N +P 2 0 1 0 200 -40 190 -100 N +P 2 0 1 0 210 -100 200 -40 N +P 2 0 1 0 190 -100 210 -100 N +P 2 0 1 0 210 -100 210 -100 N +P 2 0 1 0 100 0 110 0 N +P 2 0 1 0 200 -40 200 -40 N +P 2 0 1 0 200 -100 200 -40 N +P 2 0 1 0 200 -40 200 -40 N +P 2 0 1 0 190 -100 190 -100 N +X ~ 2 400 0 100 L 30 30 0 1 P +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ t 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QbreakL_PSPICE +# +DEF QbreakL_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QbreakL_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 100 200 -100 N +P 2 0 1 0 300 100 200 50 N +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 300 -100 300 -200 N +P 2 0 1 0 200 -50 300 -100 N +P 3 0 1 0 290 -70 220 -60 270 -110 N +P 4 0 1 0 100 -70 70 -120 130 -120 100 -70 N +P 2 0 1 0 100 -200 100 -120 N +P 2 0 1 0 70 -70 130 -70 N +P 2 0 1 0 100 -70 100 0 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 300 200 100 D 30 30 0 1 P +X ~ 1 300 -300 100 U 30 30 0 1 P +X ~ s 100 -300 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QbreakN_PSPICE +# +DEF QbreakN_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QbreakN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QbreakN3_PSPICE +# +DEF QbreakN3_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QbreakN3_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +P 2 0 1 0 200 100 100 50 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QbreakN4_PSPICE +# +DEF QbreakN4_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QbreakN4_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +P 2 0 1 0 200 100 100 50 N +P 4 0 1 0 300 30 270 -20 330 -20 300 30 N +P 2 0 1 0 300 -100 300 -20 N +P 2 0 1 0 270 30 330 30 N +P 2 0 1 0 300 30 300 100 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +X ~ s 300 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QbreakP_PSPICE +# +DEF QbreakP_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QbreakP_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 100 -50 200 -100 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QbreakP3_PSPICE +# +DEF QbreakP3_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QbreakP3_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 100 -50 200 -100 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QbreakP4_PSPICE +# +DEF QbreakP4_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QbreakP4_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 100 -50 200 -100 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +P 4 0 1 0 300 -30 330 20 270 20 300 -30 N +P 2 0 1 0 300 100 300 20 N +P 2 0 1 0 330 -30 270 -30 N +P 2 0 1 0 300 -30 300 -100 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +X ~ s 300 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QDarBreakN_PSPICE +# +DEF QDarBreakN_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "QDarBreakN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 400 0 300 -50 N +P 2 0 1 0 400 -200 300 -150 N +P 3 0 1 0 310 -180 380 -190 330 -140 N +P 2 0 1 0 300 0 300 -200 N +P 2 0 1 0 200 -100 300 -100 N +P 3 0 1 0 200 100 400 100 400 0 N +X ~ b 0 0 100 R 30 30 0 1 P +X ~ c 400 200 100 D 30 30 0 1 P +X ~ e 400 -300 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QDarBreakP_PSPICE +# +DEF QDarBreakP_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "QDarBreakP_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 -100 300 -100 N +P 3 0 1 0 200 100 400 100 400 0 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 100 -50 200 -100 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 400 0 300 -50 N +P 2 0 1 0 300 -150 400 -200 N +P 3 0 1 0 390 -170 320 -160 370 -210 N +P 2 0 1 0 300 0 300 -200 N +X ~ b 0 0 100 R 30 30 0 1 P +X ~ c 400 200 100 D 30 30 0 1 P +X ~ e 400 -300 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# RAM8Kx1break_PSPICE +# +DEF RAM8Kx1break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "RAM8Kx1break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -2100 0 1 0 N +X ~ A0 0 0 100 R 30 30 0 1 I +X ~ A1 0 -100 100 R 30 30 0 1 I +X ~ A2 0 -200 100 R 30 30 0 1 I +X ~ A3 0 -300 100 R 30 30 0 1 I +X ~ A4 0 -400 100 R 30 30 0 1 I +X ~ A5 0 -500 100 R 30 30 0 1 I +X ~ A6 0 -600 100 R 30 30 0 1 I +X ~ A7 0 -700 100 R 30 30 0 1 I +X ~ A8 0 -800 100 R 30 30 0 1 I +X ~ A9 0 -900 100 R 30 30 0 1 I +X ~ A10 0 -1000 100 R 30 30 0 1 I +X ~ A11 0 -1100 100 R 30 30 0 1 I +X ~ A12 0 -1200 100 R 30 30 0 1 I +X ~ RE 0 -1900 100 R 30 30 0 1 I +X ~ WE 0 -2000 100 R 30 30 0 1 I +X ~ VCC 400 200 100 D 30 30 0 1 W +X ~ GND 300 -2200 100 U 30 30 0 1 W +X ~ D_OUT 700 -900 100 L 30 30 0 1 P +X ~ A13 0 -1300 100 R 30 30 0 1 P +X ~ A14 0 -1400 100 R 30 30 0 1 P +X ~ A15 0 -1500 100 R 30 30 0 1 P +X ~ D_IN 0 -1700 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# RAM8Kx8break_PSPICE +# +DEF RAM8Kx8break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "RAM8Kx8break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1700 0 1 0 N +X ~ A0 0 0 100 R 30 30 0 1 I +X ~ A1 0 -100 100 R 30 30 0 1 I +X ~ A2 0 -200 100 R 30 30 0 1 I +X ~ A3 0 -300 100 R 30 30 0 1 I +X ~ A4 0 -400 100 R 30 30 0 1 I +X ~ A5 0 -500 100 R 30 30 0 1 I +X ~ A6 0 -600 100 R 30 30 0 1 I +X ~ A7 0 -700 100 R 30 30 0 1 I +X ~ A8 0 -800 100 R 30 30 0 1 I +X ~ A9 0 -900 100 R 30 30 0 1 I +X ~ A10 0 -1000 100 R 30 30 0 1 I +X ~ A11 0 -1100 100 R 30 30 0 1 I +X ~ A12 0 -1200 100 R 30 30 0 1 I +X ~ RE 0 -1500 100 R 30 30 0 1 I +X ~ WE 0 -1600 100 R 30 30 0 1 I +X ~ R7 700 0 100 L 30 30 0 1 B +X ~ R6 700 -100 100 L 30 30 0 1 B +X ~ R5 700 -200 100 L 30 30 0 1 B +X ~ R4 700 -300 100 L 30 30 0 1 B +X ~ R3 700 -400 100 L 30 30 0 1 B +X ~ R2 700 -500 100 L 30 30 0 1 B +X ~ R1 700 -600 100 L 30 30 0 1 B +X ~ R0 700 -700 100 L 30 30 0 1 B +X ~ VCC 400 200 100 D 30 30 0 1 W +X ~ GND 300 -1800 100 U 30 30 0 1 W +X ~ W0 700 -1600 100 L 30 30 0 1 P +X ~ W1 700 -1500 100 L 30 30 0 1 P +X ~ W2 700 -1400 100 L 30 30 0 1 P +X ~ W3 700 -1300 100 L 30 30 0 1 P +X ~ W4 700 -1200 100 L 30 30 0 1 P +X ~ W5 700 -1100 100 L 30 30 0 1 P +X ~ W6 700 -1000 100 L 30 30 0 1 P +X ~ W7 700 -900 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Rbreak_PSPICE +# +DEF Rbreak_PSPICE R 0 30 Y Y 1 F N +F0 "R" 0 0 30 H V L CNN +F1 "Rbreak_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 110 0 N +P 2 0 1 0 110 0 130 40 N +P 2 0 1 0 130 40 160 -40 N +P 2 0 1 0 160 -40 190 40 N +P 2 0 1 0 190 40 220 -40 N +P 2 0 1 0 220 -40 250 40 N +P 2 0 1 0 250 40 280 -40 N +P 2 0 1 0 280 -40 300 0 N +X ~ 2 400 0 100 L 30 30 0 1 P +X ~ 1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ROM32KX8break_PSPICE +# +DEF ROM32KX8break_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "ROM32KX8break_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1800 0 1 0 N +X ~ A0 0 0 100 R 30 30 0 1 I +X ~ A1 0 -100 100 R 30 30 0 1 I +X ~ A2 0 -200 100 R 30 30 0 1 I +X ~ A3 0 -300 100 R 30 30 0 1 I +X ~ A4 0 -400 100 R 30 30 0 1 I +X ~ A5 0 -500 100 R 30 30 0 1 I +X ~ A6 0 -600 100 R 30 30 0 1 I +X ~ A7 0 -700 100 R 30 30 0 1 I +X ~ A8 0 -800 100 R 30 30 0 1 I +X ~ A9 0 -900 100 R 30 30 0 1 I +X ~ A10 0 -1000 100 R 30 30 0 1 I +X ~ A11 0 -1100 100 R 30 30 0 1 I +X ~ A12 0 -1200 100 R 30 30 0 1 I +X ~ A13 0 -1300 100 R 30 30 0 1 I +X ~ A14 0 -1400 100 R 30 30 0 1 I +X ~ \OE\ 0 -1600 100 R 30 30 0 1 I +X ~ O0 700 -400 100 L 30 30 0 1 O +X ~ O1 700 -500 100 L 30 30 0 1 O +X ~ O2 700 -600 100 L 30 30 0 1 O +X ~ O3 700 -700 100 L 30 30 0 1 O +X ~ O4 700 -800 100 L 30 30 0 1 O +X ~ O5 700 -900 100 L 30 30 0 1 O +X ~ O6 700 -1000 100 L 30 30 0 1 O +X ~ O7 700 -1100 100 L 30 30 0 1 O +X ~ VCC 400 200 100 D 30 30 0 1 W +X ~ GND 400 -1900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# Sbreak_PSPICE +# +DEF Sbreak_PSPICE S 0 30 Y Y 1 F N +F0 "S" 0 0 30 H V L CNN +F1 "Sbreak_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 250 -100 200 -20 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 300 -100 250 -100 N +S 100 50 300 -150 0 1 0 N +T 0 120 -20 30 0 0 0 + +T 0 120 -120 30 0 0 0 - +T 0 240 0 30 0 0 0 + +T 0 240 -140 30 0 0 0 - +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -100 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Wbreak_PSPICE +# +DEF Wbreak_PSPICE W 0 30 Y Y 1 F N +F0 "W" 0 0 30 H V L CNN +F1 "Wbreak_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 250 -100 200 -20 N +P 3 0 1 0 120 -30 140 -80 160 -30 N +P 2 0 1 0 250 0 300 0 N +P 2 0 1 0 300 -100 250 -100 N +P 2 0 1 0 140 0 140 -100 N +P 2 0 1 0 100 0 140 0 N +P 2 0 1 0 100 -100 140 -100 N +S 100 50 300 -150 0 1 0 N +T 0 240 0 30 0 0 0 + +T 0 240 -140 30 0 0 0 - +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -100 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# XFRM_NONLINEAR_PSPICE +# +DEF XFRM_NONLINEAR_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "XFRM_NONLINEAR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 300 -500 300 -600 N +P 2 0 1 0 220 -100 220 -500 N +P 2 0 1 0 220 -500 220 -500 N +P 2 0 1 0 180 -100 180 -500 N +P 2 0 1 0 180 -500 180 -500 N +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ZbreakN_PSPICE +# +DEF ZbreakN_PSPICE Z 0 30 Y Y 1 F N +F0 "Z" 0 0 30 H V L CNN +F1 "ZbreakN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 200 200 0 N +P 2 0 1 0 170 200 170 0 N +P 2 0 1 0 100 0 170 0 N +P 2 0 1 0 300 200 200 150 N +P 2 0 1 0 200 50 300 0 N +P 3 0 1 0 210 20 280 10 230 60 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ C 300 300 100 D 30 30 0 1 P +X ~ E 300 -100 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB9M-B_PSPICE +# +DEF DB9M-B_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DB9M-B_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -900 -240 -900 N +P 2 0 1 0 -240 -900 -180 -900 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -800 -400 -900 N +P 2 0 1 0 -400 -900 -310 -900 N +P 2 0 1 0 -360 -400 -220 -400 N +P 2 0 1 0 -220 -400 -280 -360 N +P 2 0 1 0 -220 -400 -280 -440 N +A -190 -810 90 -962 62 0 1 0 N -199 -899 -100 -800 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB9F-B_PSPICE +# +DEF DB9F-B_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "DB9F-B_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -900 -240 -900 N +P 2 0 1 0 -240 -900 -180 -900 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -800 -400 -900 N +P 2 0 1 0 -400 -900 -310 -900 N +P 2 0 1 0 -320 -400 -180 -400 N +P 2 0 1 0 -320 -400 -380 -360 N +P 2 0 1 0 -320 -400 -380 -440 N +P 2 0 1 0 -200 100 -100 100 N +P 2 0 1 0 -100 100 -100 0 N +P 2 0 1 0 -200 -900 -100 -900 N +P 2 0 1 0 -100 -900 -100 -800 N +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB25M-B_PSPICE +# +DEF DB25M-B_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DB25M-B_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -2500 -240 -2500 N +P 2 0 1 0 -240 -2500 -180 -2500 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -2400 -400 -2500 N +P 2 0 1 0 -400 -2500 -310 -2500 N +P 2 0 1 0 -400 -2400 -400 -800 N +P 2 0 1 0 -100 -800 -100 -2200 N +P 2 0 1 0 -100 -2200 -100 -2400 N +P 2 0 1 0 -360 -1200 -270 -1200 N +P 2 0 1 0 -270 -1200 -300 -1180 N +P 2 0 1 0 -270 -1200 -300 -1220 N +A -190 -2410 90 -962 62 0 1 0 N -199 -2499 -100 -2400 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +X ~ 10 0 -900 100 L 30 30 0 1 P +X ~ 11 0 -1000 100 L 30 30 0 1 P +X ~ 12 0 -1100 100 L 30 30 0 1 P +X ~ 13 0 -1200 100 L 30 30 0 1 P +X ~ 14 0 -1300 100 L 30 30 0 1 P +X ~ 15 0 -1400 100 L 30 30 0 1 P +X ~ 16 0 -1500 100 L 30 30 0 1 P +X ~ 17 0 -1600 100 L 30 30 0 1 P +X ~ 18 0 -1700 100 L 30 30 0 1 P +X ~ 19 0 -1800 100 L 30 30 0 1 P +X ~ 20 0 -1900 100 L 30 30 0 1 P +X ~ 21 0 -2000 100 L 30 30 0 1 P +X ~ 22 0 -2100 100 L 30 30 0 1 P +X ~ 23 0 -2200 100 L 30 30 0 1 P +X ~ 24 0 -2300 100 L 30 30 0 1 P +X ~ 25 0 -2400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB25F-B_PSPICE +# +DEF DB25F-B_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "DB25F-B_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -2500 -240 -2500 N +P 2 0 1 0 -240 -2500 -180 -2500 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -2400 -400 -2500 N +P 2 0 1 0 -400 -2500 -310 -2500 N +P 2 0 1 0 -400 -2400 -400 -800 N +P 2 0 1 0 -100 -800 -100 -2200 N +P 2 0 1 0 -100 -2200 -100 -2400 N +P 2 0 1 0 -350 -1200 -260 -1200 N +P 2 0 1 0 -350 -1200 -380 -1180 N +P 2 0 1 0 -350 -1200 -380 -1220 N +A -190 -2410 90 -962 62 0 1 0 N -199 -2499 -100 -2400 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +X ~ 10 0 -900 100 L 30 30 0 1 P +X ~ 11 0 -1000 100 L 30 30 0 1 P +X ~ 12 0 -1100 100 L 30 30 0 1 P +X ~ 13 0 -1200 100 L 30 30 0 1 P +X ~ 14 0 -1300 100 L 30 30 0 1 P +X ~ 15 0 -1400 100 L 30 30 0 1 P +X ~ 16 0 -1500 100 L 30 30 0 1 P +X ~ 17 0 -1600 100 L 30 30 0 1 P +X ~ 18 0 -1700 100 L 30 30 0 1 P +X ~ 19 0 -1800 100 L 30 30 0 1 P +X ~ 20 0 -1900 100 L 30 30 0 1 P +X ~ 21 0 -2000 100 L 30 30 0 1 P +X ~ 22 0 -2100 100 L 30 30 0 1 P +X ~ 23 0 -2200 100 L 30 30 0 1 P +X ~ 24 0 -2300 100 L 30 30 0 1 P +X ~ 25 0 -2400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EDGE40M-B_PSPICE +# +DEF EDGE40M-B_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "EDGE40M-B_PSPICE" 0 60 30 H V L CNN +DRAW +S -400 100 -100 -4000 0 1 0 N +X ~ A1 0 0 100 L 30 30 0 1 P +X ~ A2 0 -100 100 L 30 30 0 1 P +X ~ A3 0 -200 100 L 30 30 0 1 P +X ~ A4 0 -300 100 L 30 30 0 1 P +X ~ A5 0 -400 100 L 30 30 0 1 P +X ~ A6 0 -500 100 L 30 30 0 1 P +X ~ A7 0 -600 100 L 30 30 0 1 P +X ~ A8 0 -700 100 L 30 30 0 1 P +X ~ A9 0 -800 100 L 30 30 0 1 P +X ~ A10 0 -900 100 L 30 30 0 1 P +X ~ A11 0 -1000 100 L 30 30 0 1 P +X ~ A12 0 -1100 100 L 30 30 0 1 P +X ~ A13 0 -1200 100 L 30 30 0 1 P +X ~ A14 0 -1300 100 L 30 30 0 1 P +X ~ A15 0 -1400 100 L 30 30 0 1 P +X ~ A16 0 -1500 100 L 30 30 0 1 P +X ~ A17 0 -1600 100 L 30 30 0 1 P +X ~ A18 0 -1700 100 L 30 30 0 1 P +X ~ A19 0 -1800 100 L 30 30 0 1 P +X ~ A20 0 -1900 100 L 30 30 0 1 P +X ~ B1 0 -2000 100 L 30 30 0 1 P +X ~ B2 0 -2100 100 L 30 30 0 1 P +X ~ B3 0 -2200 100 L 30 30 0 1 P +X ~ B4 0 -2300 100 L 30 30 0 1 P +X ~ B5 0 -2400 100 L 30 30 0 1 P +X ~ B6 0 -2500 100 L 30 30 0 1 P +X ~ B7 0 -2600 100 L 30 30 0 1 P +X ~ B8 0 -2700 100 L 30 30 0 1 P +X ~ B9 0 -2800 100 L 30 30 0 1 P +X ~ B10 0 -2900 100 L 30 30 0 1 P +X ~ B11 0 -3000 100 L 30 30 0 1 P +X ~ B12 0 -3100 100 L 30 30 0 1 P +X ~ B13 0 -3200 100 L 30 30 0 1 P +X ~ B14 0 -3300 100 L 30 30 0 1 P +X ~ B15 0 -3400 100 L 30 30 0 1 P +X ~ B16 0 -3500 100 L 30 30 0 1 P +X ~ B17 0 -3600 100 L 30 30 0 1 P +X ~ B18 0 -3700 100 L 30 30 0 1 P +X ~ B19 0 -3800 100 L 30 30 0 1 P +X ~ B20 0 -3900 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EDGE40F-B_PSPICE +# +DEF EDGE40F-B_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "EDGE40F-B_PSPICE" 0 60 30 H V L CNN +DRAW +S -400 100 -100 -4000 0 1 0 N +X ~ A1 0 0 100 L 30 30 0 1 P +X ~ A2 0 -100 100 L 30 30 0 1 P +X ~ A3 0 -200 100 L 30 30 0 1 P +X ~ A4 0 -300 100 L 30 30 0 1 P +X ~ A5 0 -400 100 L 30 30 0 1 P +X ~ A6 0 -500 100 L 30 30 0 1 P +X ~ A7 0 -600 100 L 30 30 0 1 P +X ~ A8 0 -700 100 L 30 30 0 1 P +X ~ A9 0 -800 100 L 30 30 0 1 P +X ~ A10 0 -900 100 L 30 30 0 1 P +X ~ A11 0 -1000 100 L 30 30 0 1 P +X ~ A12 0 -1100 100 L 30 30 0 1 P +X ~ A13 0 -1200 100 L 30 30 0 1 P +X ~ A14 0 -1300 100 L 30 30 0 1 P +X ~ A15 0 -1400 100 L 30 30 0 1 P +X ~ A16 0 -1500 100 L 30 30 0 1 P +X ~ A17 0 -1600 100 L 30 30 0 1 P +X ~ A18 0 -1700 100 L 30 30 0 1 P +X ~ A19 0 -1800 100 L 30 30 0 1 P +X ~ A20 0 -1900 100 L 30 30 0 1 P +X ~ B1 0 -2000 100 L 30 30 0 1 P +X ~ B2 0 -2100 100 L 30 30 0 1 P +X ~ B3 0 -2200 100 L 30 30 0 1 P +X ~ B4 0 -2300 100 L 30 30 0 1 P +X ~ B5 0 -2400 100 L 30 30 0 1 P +X ~ B6 0 -2500 100 L 30 30 0 1 P +X ~ B7 0 -2600 100 L 30 30 0 1 P +X ~ B8 0 -2700 100 L 30 30 0 1 P +X ~ B9 0 -2800 100 L 30 30 0 1 P +X ~ B10 0 -2900 100 L 30 30 0 1 P +X ~ B11 0 -3000 100 L 30 30 0 1 P +X ~ B12 0 -3100 100 L 30 30 0 1 P +X ~ B13 0 -3200 100 L 30 30 0 1 P +X ~ B14 0 -3300 100 L 30 30 0 1 P +X ~ B15 0 -3400 100 L 30 30 0 1 P +X ~ B16 0 -3500 100 L 30 30 0 1 P +X ~ B17 0 -3600 100 L 30 30 0 1 P +X ~ B18 0 -3700 100 L 30 30 0 1 P +X ~ B19 0 -3800 100 L 30 30 0 1 P +X ~ B20 0 -3900 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EDGE62M-B_PSPICE +# +DEF EDGE62M-B_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "EDGE62M-B_PSPICE" 0 60 30 H V L CNN +DRAW +S -400 100 -100 -6200 0 1 0 N +X ~ A1 0 0 100 L 30 30 0 1 P +X ~ A2 0 -100 100 L 30 30 0 1 P +X ~ A3 0 -200 100 L 30 30 0 1 P +X ~ A4 0 -300 100 L 30 30 0 1 P +X ~ A5 0 -400 100 L 30 30 0 1 P +X ~ A6 0 -500 100 L 30 30 0 1 P +X ~ A7 0 -600 100 L 30 30 0 1 P +X ~ A8 0 -700 100 L 30 30 0 1 P +X ~ A9 0 -800 100 L 30 30 0 1 P +X ~ A10 0 -900 100 L 30 30 0 1 P +X ~ A11 0 -1000 100 L 30 30 0 1 P +X ~ A12 0 -1100 100 L 30 30 0 1 P +X ~ A13 0 -1200 100 L 30 30 0 1 P +X ~ A14 0 -1300 100 L 30 30 0 1 P +X ~ A15 0 -1400 100 L 30 30 0 1 P +X ~ A16 0 -1500 100 L 30 30 0 1 P +X ~ A17 0 -1600 100 L 30 30 0 1 P +X ~ A18 0 -1700 100 L 30 30 0 1 P +X ~ A19 0 -1800 100 L 30 30 0 1 P +X ~ A20 0 -1900 100 L 30 30 0 1 P +X ~ A21 0 -2000 100 L 30 30 0 1 P +X ~ A22 0 -2100 100 L 30 30 0 1 P +X ~ A23 0 -2200 100 L 30 30 0 1 P +X ~ A24 0 -2300 100 L 30 30 0 1 P +X ~ A25 0 -2400 100 L 30 30 0 1 P +X ~ A26 0 -2500 100 L 30 30 0 1 P +X ~ A27 0 -2600 100 L 30 30 0 1 P +X ~ A28 0 -2700 100 L 30 30 0 1 P +X ~ A29 0 -2800 100 L 30 30 0 1 P +X ~ A30 0 -2900 100 L 30 30 0 1 P +X ~ A31 0 -3000 100 L 30 30 0 1 P +X ~ B1 0 -3100 100 L 30 30 0 1 P +X ~ B2 0 -3200 100 L 30 30 0 1 P +X ~ B3 0 -3300 100 L 30 30 0 1 P +X ~ B4 0 -3400 100 L 30 30 0 1 P +X ~ B5 0 -3500 100 L 30 30 0 1 P +X ~ B6 0 -3600 100 L 30 30 0 1 P +X ~ B7 0 -3700 100 L 30 30 0 1 P +X ~ B8 0 -3800 100 L 30 30 0 1 P +X ~ B9 0 -3900 100 L 30 30 0 1 P +X ~ B10 0 -4000 100 L 30 30 0 1 P +X ~ B11 0 -4100 100 L 30 30 0 1 P +X ~ B12 0 -4200 100 L 30 30 0 1 P +X ~ B13 0 -4300 100 L 30 30 0 1 P +X ~ B14 0 -4400 100 L 30 30 0 1 P +X ~ B15 0 -4500 100 L 30 30 0 1 P +X ~ B16 0 -4600 100 L 30 30 0 1 P +X ~ B17 0 -4700 100 L 30 30 0 1 P +X ~ B18 0 -4800 100 L 30 30 0 1 P +X ~ B19 0 -4900 100 L 30 30 0 1 P +X ~ B20 0 -5000 100 L 30 30 0 1 P +X ~ B21 0 -5100 100 L 30 30 0 1 P +X ~ B22 0 -5200 100 L 30 30 0 1 P +X ~ B23 0 -5300 100 L 30 30 0 1 P +X ~ B24 0 -5400 100 L 30 30 0 1 P +X ~ B25 0 -5500 100 L 30 30 0 1 P +X ~ B26 0 -5600 100 L 30 30 0 1 P +X ~ B27 0 -5700 100 L 30 30 0 1 P +X ~ B28 0 -5800 100 L 30 30 0 1 P +X ~ B29 0 -5900 100 L 30 30 0 1 P +X ~ B30 0 -6000 100 L 30 30 0 1 P +X ~ B31 0 -6100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EDGE62F-B_PSPICE +# +DEF EDGE62F-B_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "EDGE62F-B_PSPICE" 0 60 30 H V L CNN +DRAW +S -400 100 -100 -6200 0 1 0 N +X ~ A1 0 0 100 L 30 30 0 1 P +X ~ A2 0 -100 100 L 30 30 0 1 P +X ~ A3 0 -200 100 L 30 30 0 1 P +X ~ A4 0 -300 100 L 30 30 0 1 P +X ~ A5 0 -400 100 L 30 30 0 1 P +X ~ A6 0 -500 100 L 30 30 0 1 P +X ~ A7 0 -600 100 L 30 30 0 1 P +X ~ A8 0 -700 100 L 30 30 0 1 P +X ~ A9 0 -800 100 L 30 30 0 1 P +X ~ A10 0 -900 100 L 30 30 0 1 P +X ~ A11 0 -1000 100 L 30 30 0 1 P +X ~ A12 0 -1100 100 L 30 30 0 1 P +X ~ A13 0 -1200 100 L 30 30 0 1 P +X ~ A14 0 -1300 100 L 30 30 0 1 P +X ~ A15 0 -1400 100 L 30 30 0 1 P +X ~ A16 0 -1500 100 L 30 30 0 1 P +X ~ A17 0 -1600 100 L 30 30 0 1 P +X ~ A18 0 -1700 100 L 30 30 0 1 P +X ~ A19 0 -1800 100 L 30 30 0 1 P +X ~ A20 0 -1900 100 L 30 30 0 1 P +X ~ A21 0 -2000 100 L 30 30 0 1 P +X ~ A22 0 -2100 100 L 30 30 0 1 P +X ~ A23 0 -2200 100 L 30 30 0 1 P +X ~ A24 0 -2300 100 L 30 30 0 1 P +X ~ A25 0 -2400 100 L 30 30 0 1 P +X ~ A26 0 -2500 100 L 30 30 0 1 P +X ~ A27 0 -2600 100 L 30 30 0 1 P +X ~ A28 0 -2700 100 L 30 30 0 1 P +X ~ A29 0 -2800 100 L 30 30 0 1 P +X ~ A30 0 -2900 100 L 30 30 0 1 P +X ~ A31 0 -3000 100 L 30 30 0 1 P +X ~ B1 0 -3100 100 L 30 30 0 1 P +X ~ B2 0 -3200 100 L 30 30 0 1 P +X ~ B3 0 -3300 100 L 30 30 0 1 P +X ~ B4 0 -3400 100 L 30 30 0 1 P +X ~ B5 0 -3500 100 L 30 30 0 1 P +X ~ B6 0 -3600 100 L 30 30 0 1 P +X ~ B7 0 -3700 100 L 30 30 0 1 P +X ~ B8 0 -3800 100 L 30 30 0 1 P +X ~ B9 0 -3900 100 L 30 30 0 1 P +X ~ B10 0 -4000 100 L 30 30 0 1 P +X ~ B11 0 -4100 100 L 30 30 0 1 P +X ~ B12 0 -4200 100 L 30 30 0 1 P +X ~ B13 0 -4300 100 L 30 30 0 1 P +X ~ B14 0 -4400 100 L 30 30 0 1 P +X ~ B15 0 -4500 100 L 30 30 0 1 P +X ~ B16 0 -4600 100 L 30 30 0 1 P +X ~ B17 0 -4700 100 L 30 30 0 1 P +X ~ B18 0 -4800 100 L 30 30 0 1 P +X ~ B19 0 -4900 100 L 30 30 0 1 P +X ~ B20 0 -5000 100 L 30 30 0 1 P +X ~ B21 0 -5100 100 L 30 30 0 1 P +X ~ B22 0 -5200 100 L 30 30 0 1 P +X ~ B23 0 -5300 100 L 30 30 0 1 P +X ~ B24 0 -5400 100 L 30 30 0 1 P +X ~ B25 0 -5500 100 L 30 30 0 1 P +X ~ B26 0 -5600 100 L 30 30 0 1 P +X ~ B27 0 -5700 100 L 30 30 0 1 P +X ~ B28 0 -5800 100 L 30 30 0 1 P +X ~ B29 0 -5900 100 L 30 30 0 1 P +X ~ B30 0 -6000 100 L 30 30 0 1 P +X ~ B31 0 -6100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB9_PSPICE +# +DEF DB9_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DB9_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -900 -240 -900 N +P 2 0 1 0 -240 -900 -180 -900 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -800 -400 -900 N +P 2 0 1 0 -400 -900 -310 -900 N +P 2 0 1 0 -360 -400 -220 -400 N +P 2 0 1 0 -220 -400 -280 -360 N +P 2 0 1 0 -220 -400 -280 -440 N +A -190 -810 90 -962 62 0 1 0 N -199 -899 -100 -800 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB9M_PSPICE +# +DEF DB9M_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DB9M_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -900 -240 -900 N +P 2 0 1 0 -240 -900 -180 -900 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -800 -400 -900 N +P 2 0 1 0 -400 -900 -310 -900 N +P 2 0 1 0 -360 -400 -220 -400 N +P 2 0 1 0 -220 -400 -280 -360 N +P 2 0 1 0 -220 -400 -280 -440 N +A -190 -810 90 -962 62 0 1 0 N -199 -899 -100 -800 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB9F_PSPICE +# +DEF DB9F_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "DB9F_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -900 -240 -900 N +P 2 0 1 0 -240 -900 -180 -900 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -800 -400 -900 N +P 2 0 1 0 -400 -900 -310 -900 N +P 2 0 1 0 -320 -400 -180 -400 N +P 2 0 1 0 -320 -400 -380 -360 N +P 2 0 1 0 -320 -400 -380 -440 N +P 2 0 1 0 -200 100 -100 100 N +P 2 0 1 0 -100 100 -100 0 N +P 2 0 1 0 -200 -900 -100 -900 N +P 2 0 1 0 -100 -900 -100 -800 N +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB25_PSPICE +# +DEF DB25_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DB25_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -2500 -240 -2500 N +P 2 0 1 0 -240 -2500 -180 -2500 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -2400 -400 -2500 N +P 2 0 1 0 -400 -2500 -310 -2500 N +P 2 0 1 0 -400 -2400 -400 -800 N +P 2 0 1 0 -100 -800 -100 -2200 N +P 2 0 1 0 -100 -2200 -100 -2400 N +P 2 0 1 0 -360 -1200 -270 -1200 N +P 2 0 1 0 -270 -1200 -300 -1180 N +P 2 0 1 0 -270 -1200 -300 -1220 N +A -190 -2410 90 -962 62 0 1 0 N -199 -2499 -100 -2400 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +X ~ 10 0 -900 100 L 30 30 0 1 P +X ~ 11 0 -1000 100 L 30 30 0 1 P +X ~ 12 0 -1100 100 L 30 30 0 1 P +X ~ 13 0 -1200 100 L 30 30 0 1 P +X ~ 14 0 -1300 100 L 30 30 0 1 P +X ~ 15 0 -1400 100 L 30 30 0 1 P +X ~ 16 0 -1500 100 L 30 30 0 1 P +X ~ 17 0 -1600 100 L 30 30 0 1 P +X ~ 18 0 -1700 100 L 30 30 0 1 P +X ~ 19 0 -1800 100 L 30 30 0 1 P +X ~ 20 0 -1900 100 L 30 30 0 1 P +X ~ 21 0 -2000 100 L 30 30 0 1 P +X ~ 22 0 -2100 100 L 30 30 0 1 P +X ~ 23 0 -2200 100 L 30 30 0 1 P +X ~ 24 0 -2300 100 L 30 30 0 1 P +X ~ 25 0 -2400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB25M_PSPICE +# +DEF DB25M_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DB25M_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -2500 -240 -2500 N +P 2 0 1 0 -240 -2500 -180 -2500 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -2400 -400 -2500 N +P 2 0 1 0 -400 -2500 -310 -2500 N +P 2 0 1 0 -400 -2400 -400 -800 N +P 2 0 1 0 -100 -800 -100 -2200 N +P 2 0 1 0 -100 -2200 -100 -2400 N +P 2 0 1 0 -360 -1200 -270 -1200 N +P 2 0 1 0 -270 -1200 -300 -1180 N +P 2 0 1 0 -270 -1200 -300 -1220 N +A -190 -2410 90 -962 62 0 1 0 N -199 -2499 -100 -2400 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +X ~ 10 0 -900 100 L 30 30 0 1 P +X ~ 11 0 -1000 100 L 30 30 0 1 P +X ~ 12 0 -1100 100 L 30 30 0 1 P +X ~ 13 0 -1200 100 L 30 30 0 1 P +X ~ 14 0 -1300 100 L 30 30 0 1 P +X ~ 15 0 -1400 100 L 30 30 0 1 P +X ~ 16 0 -1500 100 L 30 30 0 1 P +X ~ 17 0 -1600 100 L 30 30 0 1 P +X ~ 18 0 -1700 100 L 30 30 0 1 P +X ~ 19 0 -1800 100 L 30 30 0 1 P +X ~ 20 0 -1900 100 L 30 30 0 1 P +X ~ 21 0 -2000 100 L 30 30 0 1 P +X ~ 22 0 -2100 100 L 30 30 0 1 P +X ~ 23 0 -2200 100 L 30 30 0 1 P +X ~ 24 0 -2300 100 L 30 30 0 1 P +X ~ 25 0 -2400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB25F_PSPICE +# +DEF DB25F_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "DB25F_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 -400 -800 N +P 2 0 1 0 -100 0 -100 -800 N +P 2 0 1 0 -310 -2500 -240 -2500 N +P 2 0 1 0 -240 -2500 -180 -2500 N +P 2 0 1 0 -400 0 -400 100 N +P 2 0 1 0 -400 100 -220 100 N +P 2 0 1 0 -400 -2400 -400 -2500 N +P 2 0 1 0 -400 -2500 -310 -2500 N +P 2 0 1 0 -400 -2400 -400 -800 N +P 2 0 1 0 -100 -800 -100 -2200 N +P 2 0 1 0 -100 -2200 -100 -2400 N +P 2 0 1 0 -350 -1200 -260 -1200 N +P 2 0 1 0 -350 -1200 -380 -1180 N +P 2 0 1 0 -350 -1200 -380 -1220 N +A -190 -2410 90 -962 62 0 1 0 N -199 -2499 -100 -2400 +A -220 -10 120 48 899 0 1 0 N -100 0 -220 110 +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ 2 0 -100 100 L 30 30 0 1 P +X ~ 3 0 -200 100 L 30 30 0 1 P +X ~ 4 0 -300 100 L 30 30 0 1 P +X ~ 5 0 -400 100 L 30 30 0 1 P +X ~ 6 0 -500 100 L 30 30 0 1 P +X ~ 7 0 -600 100 L 30 30 0 1 P +X ~ 8 0 -700 100 L 30 30 0 1 P +X ~ 9 0 -800 100 L 30 30 0 1 P +X ~ 10 0 -900 100 L 30 30 0 1 P +X ~ 11 0 -1000 100 L 30 30 0 1 P +X ~ 12 0 -1100 100 L 30 30 0 1 P +X ~ 13 0 -1200 100 L 30 30 0 1 P +X ~ 14 0 -1300 100 L 30 30 0 1 P +X ~ 15 0 -1400 100 L 30 30 0 1 P +X ~ 16 0 -1500 100 L 30 30 0 1 P +X ~ 17 0 -1600 100 L 30 30 0 1 P +X ~ 18 0 -1700 100 L 30 30 0 1 P +X ~ 19 0 -1800 100 L 30 30 0 1 P +X ~ 20 0 -1900 100 L 30 30 0 1 P +X ~ 21 0 -2000 100 L 30 30 0 1 P +X ~ 22 0 -2100 100 L 30 30 0 1 P +X ~ 23 0 -2200 100 L 30 30 0 1 P +X ~ 24 0 -2300 100 L 30 30 0 1 P +X ~ 25 0 -2400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DIN5_PSPICE +# +DEF DIN5_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DIN5_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -350 -400 -150 -400 N +P 2 0 1 0 -350 -400 -400 -350 N +P 2 0 1 0 -350 -400 -400 -450 N +P 2 0 1 0 -150 -300 -350 -300 N +P 2 0 1 0 -350 -300 -400 -250 N +P 2 0 1 0 -350 -300 -400 -350 N +P 2 0 1 0 -150 -200 -350 -200 N +P 2 0 1 0 -350 -200 -400 -250 N +P 2 0 1 0 -350 -200 -400 -150 N +P 2 0 1 0 -150 -100 -350 -100 N +P 2 0 1 0 -350 -100 -400 -150 N +P 2 0 1 0 -350 -100 -400 -50 N +P 2 0 1 0 -150 0 -350 0 N +P 2 0 1 0 -350 0 -400 -50 N +P 2 0 1 0 -350 0 -400 50 N +P 2 0 1 0 -100 0 -200 0 N +P 2 0 1 0 -150 -100 -50 -100 N +P 2 0 1 0 -150 -200 -100 -200 N +P 2 0 1 0 -200 -300 -50 -300 N +P 2 0 1 0 -150 -400 -100 -400 N +S -300 100 -100 -500 0 1 0 N +X ~ pin1 0 0 100 L 30 30 0 1 P +X ~ pin2 0 -100 100 L 30 30 0 1 P +X ~ pin3 0 -200 100 L 30 30 0 1 P +X ~ pin4 0 -300 100 L 30 30 0 1 P +X ~ pin5 0 -400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DIN96_PSPICE +# +DEF DIN96_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DIN96_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 200 -100 N +P 2 0 1 0 50 -50 100 -100 N +P 2 0 1 0 50 -150 100 -100 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EDGE40_PSPICE +# +DEF EDGE40_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "EDGE40_PSPICE" 0 60 30 H V L CNN +DRAW +S -400 100 -100 -4000 0 1 0 N +X ~ A1 0 0 100 L 30 30 0 1 P +X ~ A2 0 -100 100 L 30 30 0 1 P +X ~ A3 0 -200 100 L 30 30 0 1 P +X ~ A4 0 -300 100 L 30 30 0 1 P +X ~ A5 0 -400 100 L 30 30 0 1 P +X ~ A6 0 -500 100 L 30 30 0 1 P +X ~ A7 0 -600 100 L 30 30 0 1 P +X ~ A8 0 -700 100 L 30 30 0 1 P +X ~ A9 0 -800 100 L 30 30 0 1 P +X ~ A10 0 -900 100 L 30 30 0 1 P +X ~ A11 0 -1000 100 L 30 30 0 1 P +X ~ A12 0 -1100 100 L 30 30 0 1 P +X ~ A13 0 -1200 100 L 30 30 0 1 P +X ~ A14 0 -1300 100 L 30 30 0 1 P +X ~ A15 0 -1400 100 L 30 30 0 1 P +X ~ A16 0 -1500 100 L 30 30 0 1 P +X ~ A17 0 -1600 100 L 30 30 0 1 P +X ~ A18 0 -1700 100 L 30 30 0 1 P +X ~ A19 0 -1800 100 L 30 30 0 1 P +X ~ A20 0 -1900 100 L 30 30 0 1 P +X ~ B1 0 -2000 100 L 30 30 0 1 P +X ~ B2 0 -2100 100 L 30 30 0 1 P +X ~ B3 0 -2200 100 L 30 30 0 1 P +X ~ B4 0 -2300 100 L 30 30 0 1 P +X ~ B5 0 -2400 100 L 30 30 0 1 P +X ~ B6 0 -2500 100 L 30 30 0 1 P +X ~ B7 0 -2600 100 L 30 30 0 1 P +X ~ B8 0 -2700 100 L 30 30 0 1 P +X ~ B9 0 -2800 100 L 30 30 0 1 P +X ~ B10 0 -2900 100 L 30 30 0 1 P +X ~ B11 0 -3000 100 L 30 30 0 1 P +X ~ B12 0 -3100 100 L 30 30 0 1 P +X ~ B13 0 -3200 100 L 30 30 0 1 P +X ~ B14 0 -3300 100 L 30 30 0 1 P +X ~ B15 0 -3400 100 L 30 30 0 1 P +X ~ B16 0 -3500 100 L 30 30 0 1 P +X ~ B17 0 -3600 100 L 30 30 0 1 P +X ~ B18 0 -3700 100 L 30 30 0 1 P +X ~ B19 0 -3800 100 L 30 30 0 1 P +X ~ B20 0 -3900 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EDGE62_PSPICE +# +DEF EDGE62_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "EDGE62_PSPICE" 0 60 30 H V L CNN +DRAW +S -400 100 -100 -6200 0 1 0 N +X ~ A1 0 0 100 L 30 30 0 1 P +X ~ A2 0 -100 100 L 30 30 0 1 P +X ~ A3 0 -200 100 L 30 30 0 1 P +X ~ A4 0 -300 100 L 30 30 0 1 P +X ~ A5 0 -400 100 L 30 30 0 1 P +X ~ A6 0 -500 100 L 30 30 0 1 P +X ~ A7 0 -600 100 L 30 30 0 1 P +X ~ A8 0 -700 100 L 30 30 0 1 P +X ~ A9 0 -800 100 L 30 30 0 1 P +X ~ A10 0 -900 100 L 30 30 0 1 P +X ~ A11 0 -1000 100 L 30 30 0 1 P +X ~ A12 0 -1100 100 L 30 30 0 1 P +X ~ A13 0 -1200 100 L 30 30 0 1 P +X ~ A14 0 -1300 100 L 30 30 0 1 P +X ~ A15 0 -1400 100 L 30 30 0 1 P +X ~ A16 0 -1500 100 L 30 30 0 1 P +X ~ A17 0 -1600 100 L 30 30 0 1 P +X ~ A18 0 -1700 100 L 30 30 0 1 P +X ~ A19 0 -1800 100 L 30 30 0 1 P +X ~ A20 0 -1900 100 L 30 30 0 1 P +X ~ A21 0 -2000 100 L 30 30 0 1 P +X ~ A22 0 -2100 100 L 30 30 0 1 P +X ~ A23 0 -2200 100 L 30 30 0 1 P +X ~ A24 0 -2300 100 L 30 30 0 1 P +X ~ A25 0 -2400 100 L 30 30 0 1 P +X ~ A26 0 -2500 100 L 30 30 0 1 P +X ~ A27 0 -2600 100 L 30 30 0 1 P +X ~ A28 0 -2700 100 L 30 30 0 1 P +X ~ A29 0 -2800 100 L 30 30 0 1 P +X ~ A30 0 -2900 100 L 30 30 0 1 P +X ~ A31 0 -3000 100 L 30 30 0 1 P +X ~ B1 0 -3100 100 L 30 30 0 1 P +X ~ B2 0 -3200 100 L 30 30 0 1 P +X ~ B3 0 -3300 100 L 30 30 0 1 P +X ~ B4 0 -3400 100 L 30 30 0 1 P +X ~ B5 0 -3500 100 L 30 30 0 1 P +X ~ B6 0 -3600 100 L 30 30 0 1 P +X ~ B7 0 -3700 100 L 30 30 0 1 P +X ~ B8 0 -3800 100 L 30 30 0 1 P +X ~ B9 0 -3900 100 L 30 30 0 1 P +X ~ B10 0 -4000 100 L 30 30 0 1 P +X ~ B11 0 -4100 100 L 30 30 0 1 P +X ~ B12 0 -4200 100 L 30 30 0 1 P +X ~ B13 0 -4300 100 L 30 30 0 1 P +X ~ B14 0 -4400 100 L 30 30 0 1 P +X ~ B15 0 -4500 100 L 30 30 0 1 P +X ~ B16 0 -4600 100 L 30 30 0 1 P +X ~ B17 0 -4700 100 L 30 30 0 1 P +X ~ B18 0 -4800 100 L 30 30 0 1 P +X ~ B19 0 -4900 100 L 30 30 0 1 P +X ~ B20 0 -5000 100 L 30 30 0 1 P +X ~ B21 0 -5100 100 L 30 30 0 1 P +X ~ B22 0 -5200 100 L 30 30 0 1 P +X ~ B23 0 -5300 100 L 30 30 0 1 P +X ~ B24 0 -5400 100 L 30 30 0 1 P +X ~ B25 0 -5500 100 L 30 30 0 1 P +X ~ B26 0 -5600 100 L 30 30 0 1 P +X ~ B27 0 -5700 100 L 30 30 0 1 P +X ~ B28 0 -5800 100 L 30 30 0 1 P +X ~ B29 0 -5900 100 L 30 30 0 1 P +X ~ B30 0 -6000 100 L 30 30 0 1 P +X ~ B31 0 -6100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# HDR20_PSPICE +# +DEF HDR20_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "HDR20_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 50 N +P 2 0 1 0 150 50 400 50 N +P 2 0 1 0 400 50 400 -50 N +P 2 0 1 0 400 -50 150 -50 N +P 2 0 1 0 150 -50 100 0 N +X ~ PIN1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# HDR50_PSPICE +# +DEF HDR50_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "HDR50_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 50 N +P 2 0 1 0 150 50 400 50 N +P 2 0 1 0 400 50 400 -50 N +P 2 0 1 0 400 -50 150 -50 N +P 2 0 1 0 150 -50 100 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# CONNECTOR_PSPICE +# +DEF CONNECTOR_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "CONNECTOR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 200 -100 N +P 2 0 1 0 50 -50 100 -100 N +P 2 0 1 0 50 -150 100 -100 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# male_PSPICE +# +DEF male_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "male_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -200 0 -100 0 N +P 2 0 1 0 -150 50 -200 0 N +P 2 0 1 0 -150 -50 -200 0 N +X ~ pin1 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# edge26_PSPICE +# +DEF edge26_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "edge26_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 200 -100 N +P 2 0 1 0 50 -50 100 -100 N +P 2 0 1 0 50 -150 100 -100 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DB9M_PSPICE +# +DEF DB9M_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "DB9M_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 200 -100 N +P 2 0 1 0 150 -50 100 -100 N +P 2 0 1 0 150 -150 100 -100 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EDGE26_PSPICE +# +DEF EDGE26_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "EDGE26_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 200 -100 N +P 2 0 1 0 50 -50 100 -100 N +P 2 0 1 0 50 -150 100 -100 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# HDR20_PSPICE +# +DEF HDR20_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "HDR20_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 200 -100 N +P 2 0 1 0 50 -50 100 -100 N +P 2 0 1 0 50 -150 100 -100 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Jump1_PSPICE +# +DEF Jump1_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "Jump1_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 160 -80 160 -120 N +P 2 0 1 0 140 -100 180 -100 N +C 160 -100 40 0 1 0 N +C 160 -100 20 0 1 0 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Jump2_PSPICE +# +DEF Jump2_PSPICE P 0 30 Y Y 1 F N +F0 "P" 0 0 30 H V L CNN +F1 "Jump2_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 160 -80 160 -120 N +P 2 0 1 0 140 -100 180 -100 N +P 2 0 1 0 160 -180 160 -220 N +P 2 0 1 0 140 -200 180 -200 N +C 160 -100 40 0 1 0 N +C 160 -100 20 0 1 0 N +C 160 -200 40 0 1 0 N +C 160 -200 20 0 1 0 N +X ~ pin1 300 -100 100 L 30 30 0 1 P +X ~ pin2 300 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 2N1595_PSPICE +# +DEF 2N1595_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "2N1595_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 100 50 100 -50 200 0 100 50 N +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 300 0 200 0 N +P 2 0 1 0 300 -100 200 0 N +X ~ A 0 0 100 R 30 30 0 1 P +X ~ K 400 0 100 L 30 30 0 1 P +X ~ G 300 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 2N5444_PSPICE +# +DEF 2N5444_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "2N5444_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 100 100 100 -100 200 -50 100 0 N +P 2 0 1 0 200 -50 300 -100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 200 0 200 -50 N +P 4 0 1 0 200 0 100 50 200 100 200 0 N +X ~ MT2 0 0 100 R 30 30 0 1 P +X ~ MT1 400 0 100 L 30 30 0 1 P +X ~ G 300 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# D1N750_PSPICE +# +DEF D1N750_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "D1N750_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 170 70 200 50 N +P 2 0 1 0 200 -50 230 -70 N +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 100 0 120 0 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MV2201_PSPICE +# +DEF MV2201_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "MV2201_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 100 50 100 -50 200 0 100 50 N +P 2 0 1 0 200 50 200 -50 N +A 270 0 50 1269 2330 0 1 0 N 240 40 239 -39 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# D1N4002_PSPICE +# +DEF D1N4002_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "D1N4002_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# D1N4148_PSPICE +# +DEF D1N4148_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "D1N4148_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# MBD101_PSPICE +# +DEF MBD101_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "MBD101_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IRF150_PSPICE +# +DEF IRF150_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "IRF150_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 290 -20 230 0 290 20 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IRF9140_PSPICE +# +DEF IRF9140_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "IRF9140_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 230 20 290 0 230 -20 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# J2N3819_PSPICE +# +DEF J2N3819_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "J2N3819_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +P 3 0 1 0 110 20 170 0 110 -20 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# J2N4393_PSPICE +# +DEF J2N4393_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "J2N4393_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +P 3 0 1 0 110 20 170 0 110 -20 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LM324_PSPICE +# +DEF LM324_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LM324_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -500 N +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 700 -200 100 100 N +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +X ~ OUT 800 -200 100 L 30 30 0 1 O +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ V+ 400 100 100 D 30 30 0 1 I +X ~ V- 400 -500 100 U 30 30 0 1 I +ENDDRAW +ENDDEF +# +# LF411_PSPICE +# +DEF LF411_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LF411_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -500 N +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 700 -200 100 100 N +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 600 0 500 -100 N +P 2 0 1 0 500 -300 600 -400 N +P 2 0 1 0 600 0 700 0 N +P 2 0 1 0 600 -400 700 -400 N +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ V+ 400 100 100 D 30 30 0 1 W +X ~ V- 400 -500 100 U 30 30 0 1 W +X ~ OUT 800 -200 100 L 30 30 0 1 O +X ~ B1 800 -400 100 L 30 30 0 1 I +X ~ B2 800 0 100 L 30 30 0 1 I +ENDDRAW +ENDDEF +# +# uA741_PSPICE +# +DEF uA741_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "uA741_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -500 N +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 700 -200 100 100 N +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 600 0 500 -100 N +P 2 0 1 0 500 -300 600 -400 N +P 2 0 1 0 600 0 700 0 N +P 2 0 1 0 600 -400 700 -400 N +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ V+ 400 100 100 D 30 30 0 1 W +X ~ V- 400 -500 100 U 30 30 0 1 W +X ~ OUT 800 -200 100 L 30 30 0 1 O +X ~ OS1 800 -400 100 L 30 30 0 1 I +X ~ OS2 800 0 100 L 30 30 0 1 I +ENDDRAW +ENDDEF +# +# LM111_PSPICE +# +DEF LM111_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LM111_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -500 N +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 700 -400 600 -400 N +P 2 0 1 0 600 -400 500 -300 N +P 2 0 1 0 500 0 500 -100 N +P 2 0 1 0 700 0 600 -100 N +P 2 0 1 0 100 100 700 -200 N +P 2 0 1 0 600 -100 560 -140 N +X ~ OUT 800 -200 100 L 30 30 0 1 O +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ G 800 -400 100 L 30 30 0 1 P +X ~ V+ 400 100 100 D 30 30 0 1 W +X ~ V- 400 -500 100 U 30 30 0 1 W +X ~ B/S 800 0 100 L 30 30 0 1 I +X ~ B 500 100 100 D 30 30 0 1 I +ENDDRAW +ENDDEF +# +# Q2N2222_PSPICE +# +DEF Q2N2222_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "Q2N2222_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Q2N2907A_PSPICE +# +DEF Q2N2907A_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "Q2N2907A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 100 -50 200 -100 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Q2N3904_PSPICE +# +DEF Q2N3904_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "Q2N3904_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Q2N3906_PSPICE +# +DEF Q2N3906_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "Q2N3906_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 100 -50 200 -100 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# A4N25_PSPICE +# +DEF A4N25_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "A4N25_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 230 -50 170 -50 N +P 2 0 1 0 170 -50 200 -130 N +P 2 0 1 0 200 -130 230 -50 N +P 2 0 1 0 230 -130 170 -130 N +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 -200 100 -200 N +P 2 0 1 0 420 0 420 -160 N +P 2 0 1 0 500 0 420 -80 N +P 2 0 1 0 420 -80 500 -160 N +P 2 0 1 0 500 -110 500 -160 N +P 2 0 1 0 500 -160 450 -160 N +P 2 0 1 0 500 0 600 0 N +P 2 0 1 0 200 0 200 -50 N +P 2 0 1 0 200 -130 200 -200 N +P 2 0 1 0 500 -160 500 -300 N +P 2 0 1 0 420 -80 300 -80 N +P 2 0 1 0 300 -80 300 -300 N +S 100 100 600 -300 0 1 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -200 100 R 30 30 0 1 P +X ~ 6 300 -400 100 U 30 30 0 1 P +X ~ 4 500 -400 100 U 30 30 0 1 P +X ~ 5 700 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# K3019PL_3C8_PSPICE +# +DEF K3019PL_3C8_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "K3019PL_3C8_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 300 -500 300 -600 N +P 2 0 1 0 220 -100 220 -500 N +P 2 0 1 0 220 -500 220 -500 N +P 2 0 1 0 180 -100 180 -500 N +P 2 0 1 0 180 -500 180 -500 N +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# K502T300_3C8_PSPICE +# +DEF K502T300_3C8_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "K502T300_3C8_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 300 -500 300 -600 N +P 2 0 1 0 220 -100 220 -500 N +P 2 0 1 0 220 -500 220 -500 N +P 2 0 1 0 180 -100 180 -500 N +P 2 0 1 0 180 -500 180 -500 N +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# K528T500_3C8_PSPICE +# +DEF K528T500_3C8_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "K528T500_3C8_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 300 -500 300 -600 N +P 2 0 1 0 220 -100 220 -500 N +P 2 0 1 0 220 -500 220 -500 N +P 2 0 1 0 180 -100 180 -500 N +P 2 0 1 0 180 -500 180 -500 N +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# KRM8PL_3C8_PSPICE +# +DEF KRM8PL_3C8_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "KRM8PL_3C8_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 300 -500 300 -600 N +P 2 0 1 0 220 -100 220 -500 N +P 2 0 1 0 220 -500 220 -500 N +P 2 0 1 0 180 -100 180 -500 N +P 2 0 1 0 180 -500 180 -500 N +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +X ~ 1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 555D_PSPICE +# +DEF 555D_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "555D_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 900 -600 0 1 0 N +X ~ GND 500 -700 100 U 30 30 0 1 P +X ~ TRIGGER 0 0 100 R 30 30 0 1 P +X ~ OUTPUT 1000 -100 100 L 30 30 0 1 P +X ~ RESET 0 -100 100 R 30 30 0 1 P +X ~ CONTROL 0 -200 100 R 30 30 0 1 P +X ~ THRESHOLD 0 -300 100 R 30 30 0 1 P +X ~ DISCHARGE 0 -400 100 R 30 30 0 1 P +X ~ VCC 500 300 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Sw_tClose_PSPICE +# +DEF Sw_tClose_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "Sw_tClose_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 300 0 N +P 2 0 1 0 250 -140 230 -110 N +P 2 0 1 0 250 -140 280 -120 N +A 160 0 0 1 12148535 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +X ~ 1 0 -100 100 R 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Sw_tOpen_PSPICE +# +DEF Sw_tOpen_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "Sw_tOpen_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 -100 300 0 N +P 2 0 1 0 170 0 200 20 N +P 2 0 1 0 170 0 190 -30 N +A 160 0 0 1 12148519 0 1 0 N -2147483648 -2147483648 -2147483648 -2147483648 +X ~ 1 0 -100 100 R 30 30 0 1 P +X ~ 2 400 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# PAL20RP4B_PSPICE +# +DEF PAL20RP4B_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "PAL20RP4B_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1400 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 I +X ~ pin3 0 -200 100 R 30 30 0 1 I +X ~ pin4 0 -300 100 R 30 30 0 1 I +X ~ pin5 0 -400 100 R 30 30 0 1 I +X ~ pin6 0 -500 100 R 30 30 0 1 I +X ~ pin7 0 -600 100 R 30 30 0 1 I +X ~ pin8 0 -700 100 R 30 30 0 1 I +X ~ pin9 0 -800 100 R 30 30 0 1 I +X ~ pin10 0 -900 100 R 30 30 0 1 I +X ~ pin11 0 -1000 100 R 30 30 0 1 I +X ~ pin13 0 -1100 100 R 30 30 0 1 I +X ~ pin15 600 -1000 100 L 30 30 0 1 O +X ~ pin16 600 -900 100 L 30 30 0 1 O +X ~ pin17 600 -800 100 L 30 30 0 1 O +X ~ pin18 600 -700 100 L 30 30 0 1 O +X ~ pin19 600 -600 100 L 30 30 0 1 O +X ~ pin20 600 -500 100 L 30 30 0 1 O +X ~ pin21 600 -400 100 L 30 30 0 1 O +X ~ pin22 600 -300 100 L 30 30 0 1 O +X ~ pin12 300 -1500 100 U 30 30 0 1 W +X ~ pin24 300 200 100 D 30 30 0 1 W +X ~ pin2 0 -100 100 R 30 30 0 1 I +X ~ pin14 0 -1200 100 R 30 30 0 1 I +X ~ pin23 0 -1300 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7400_PSPICE +# +DEF 7400_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7400_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7401_PSPICE +# +DEF 7401_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7401_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ Y 700 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 7402_PSPICE +# +DEF 7402_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7402_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7403_PSPICE +# +DEF 7403_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7403_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7404_PSPICE +# +DEF 7404_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7404_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 O +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7405_PSPICE +# +DEF 7405_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7405_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7406_PSPICE +# +DEF 7406_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7406_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7407_PSPICE +# +DEF 7407_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7407_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7408_PSPICE +# +DEF 7408_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7408_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7409_PSPICE +# +DEF 7409_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7409_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7410_PSPICE +# +DEF 7410_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7410_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7411_PSPICE +# +DEF 7411_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7411_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74S11_PSPICE +# +DEF 74S11_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74S11_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7412_PSPICE +# +DEF 7412_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7412_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7413_PSPICE +# +DEF 7413_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7413_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +P 2 0 1 0 200 -150 350 -150 N +P 2 0 1 0 350 -150 350 -250 N +P 2 0 1 0 400 -250 250 -250 N +P 2 0 1 0 250 -250 250 -150 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 O +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7414_PSPICE +# +DEF 7414_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7414_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +P 2 0 1 0 140 40 260 40 N +P 2 0 1 0 260 40 260 -40 N +P 2 0 1 0 300 -40 180 -40 N +P 2 0 1 0 180 -40 180 40 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 O +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7416_PSPICE +# +DEF 7416_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7416_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7417_PSPICE +# +DEF 7417_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7417_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7420_PSPICE +# +DEF 7420_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7420_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 O +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7422_PSPICE +# +DEF 7422_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7422_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 P +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7423_PSPICE +# +DEF 7423_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7423_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -1300 N +P 2 0 1 0 500 -1300 100 -1300 N +P 2 0 1 0 100 -1300 100 100 N +X ~ 1A 0 0 100 R 30 30 0 1 I +X ~ 1B 0 -100 100 R 30 30 0 1 I +X ~ 1C 0 -200 100 R 30 30 0 1 I +X ~ 1D 0 -300 100 R 30 30 0 1 I +X ~ 1G 0 -400 100 R 30 30 0 1 I +X ~ X 0 -500 100 R 30 30 0 1 I +X ~ \X\ 0 -600 100 R 30 30 0 1 I +X ~ 2A 0 -800 100 R 30 30 0 1 I +X ~ 2B 0 -900 100 R 30 30 0 1 I +X ~ 2C 0 -1000 100 R 30 30 0 1 I +X ~ 2D 0 -1100 100 R 30 30 0 1 I +X ~ 2G 0 -1200 100 R 30 30 0 1 I +X ~ 1Y 600 -200 100 L 30 30 0 1 I +X ~ 2Y 600 -1000 100 L 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7425_PSPICE +# +DEF 7425_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7425_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -500 N +P 2 0 1 0 500 -500 100 -500 N +P 2 0 1 0 100 -500 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ G 0 -400 100 R 30 30 0 1 I +X ~ Y 600 -200 100 L 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 P +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7426_PSPICE +# +DEF 7426_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7426_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7427_PSPICE +# +DEF 7427_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7427_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7428_PSPICE +# +DEF 7428_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7428_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7430_PSPICE +# +DEF 7430_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7430_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ E 0 -400 100 R 30 30 0 1 I +X ~ F 0 -500 100 R 30 30 0 1 I +X ~ G 0 -600 100 R 30 30 0 1 I +X ~ H 0 -700 100 R 30 30 0 1 I +X ~ Y 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7432_PSPICE +# +DEF 7432_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7432_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7433_PSPICE +# +DEF 7433_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7433_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7437_PSPICE +# +DEF 7437_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7437_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7438_PSPICE +# +DEF 7438_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7438_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7439_PSPICE +# +DEF 7439_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7439_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7440_PSPICE +# +DEF 7440_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7440_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 O +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 7442A_PSPICE +# +DEF 7442A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7442A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7443A_PSPICE +# +DEF 7443A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7443A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7444A_PSPICE +# +DEF 7444A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7444A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7445_PSPICE +# +DEF 7445_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7445_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ PWR 300 300 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7446A_PSPICE +# +DEF 7446A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7446A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ INA 0 -400 100 R 30 30 0 1 I +X ~ INB 0 -500 100 R 30 30 0 1 I +X ~ INC 0 -600 100 R 30 30 0 1 I +X ~ IND 0 -700 100 R 30 30 0 1 I +X ~ \RBI\ 0 -100 100 R 30 30 0 1 I +X ~ \LT\ 0 -200 100 R 30 30 0 1 I +X ~ OUTA 600 -100 100 L 30 30 0 1 O +X ~ OUTB 600 -200 100 L 30 30 0 1 O +X ~ OUTC 600 -300 100 L 30 30 0 1 O +X ~ OUTD 600 -400 100 L 30 30 0 1 O +X ~ OUTE 600 -500 100 L 30 30 0 1 O +X ~ OUTF 600 -600 100 L 30 30 0 1 O +X ~ OUTG 600 -700 100 L 30 30 0 1 O +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ \BI\/\RBO\ 0 0 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7448_PSPICE +# +DEF 7448_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7448_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ A 0 -400 100 R 30 30 0 1 I +X ~ B 0 -500 100 R 30 30 0 1 I +X ~ C 0 -600 100 R 30 30 0 1 I +X ~ D 0 -700 100 R 30 30 0 1 I +X ~ \BI\ 0 0 100 R 30 30 0 1 I +X ~ \RBI\ 0 -100 100 R 30 30 0 1 I +X ~ \LT\ 0 -200 100 R 30 30 0 1 I +X ~ OA 600 0 100 L 30 30 0 1 O +X ~ OB 600 -100 100 L 30 30 0 1 O +X ~ OC 600 -200 100 L 30 30 0 1 O +X ~ OD 600 -300 100 L 30 30 0 1 O +X ~ OE 600 -400 100 L 30 30 0 1 O +X ~ OF 600 -500 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ OG 600 -600 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 7449_PSPICE +# +DEF 7449_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7449_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -700 N +P 2 0 1 0 500 -700 100 -700 N +P 2 0 1 0 100 -700 100 100 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ B 0 -400 100 R 30 30 0 1 I +X ~ C 0 -500 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ \BI\ 0 0 100 R 30 30 0 1 I +X ~ OA 600 0 100 L 30 30 0 1 O +X ~ OB 600 -100 100 L 30 30 0 1 O +X ~ OC 600 -200 100 L 30 30 0 1 O +X ~ OD 600 -300 100 L 30 30 0 1 O +X ~ OE 600 -400 100 L 30 30 0 1 O +X ~ OF 600 -500 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -800 100 U 30 30 0 1 W +X ~ OG 600 -600 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 7450_PSPICE +# +DEF 7450_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7450_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -1100 N +P 2 0 1 0 500 -1100 100 -1100 N +P 2 0 1 0 100 -1100 100 100 N +X ~ 1A 0 0 100 R 30 30 0 1 I +X ~ 1B 0 -100 100 R 30 30 0 1 I +X ~ 1C 0 -200 100 R 30 30 0 1 I +X ~ 1D 0 -300 100 R 30 30 0 1 I +X ~ 1X 0 -400 100 R 30 30 0 1 I +X ~ 1\X\ 0 -500 100 R 30 30 0 1 I +X ~ 2A 0 -700 100 R 30 30 0 1 I +X ~ 2B 0 -800 100 R 30 30 0 1 I +X ~ 2C 0 -900 100 R 30 30 0 1 I +X ~ 2D 0 -1000 100 R 30 30 0 1 I +X ~ 1Y 600 -200 100 L 30 30 0 1 O +X ~ 2Y 600 -900 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7451_PSPICE +# +DEF 7451_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7451_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ Y 600 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7453_PSPICE +# +DEF 7453_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7453_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ E 0 -400 100 R 30 30 0 1 I +X ~ F 0 -500 100 R 30 30 0 1 I +X ~ G 0 -600 100 R 30 30 0 1 I +X ~ H 0 -700 100 R 30 30 0 1 I +X ~ X 0 -800 100 R 30 30 0 1 I +X ~ Y 600 -400 100 L 30 30 0 1 O +X ~ \X\ 0 -900 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1100 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7454_PSPICE +# +DEF 7454_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7454_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ E 0 -400 100 R 30 30 0 1 I +X ~ F 0 -500 100 R 30 30 0 1 I +X ~ G 0 -600 100 R 30 30 0 1 I +X ~ H 0 -700 100 R 30 30 0 1 I +X ~ Y 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7460_PSPICE +# +DEF 7460_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7460_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -500 N +P 2 0 1 0 500 -500 100 -500 N +P 2 0 1 0 100 -500 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ \X\ 0 -400 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ X 600 -100 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 7470_PSPICE +# +DEF 7470_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7470_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -800 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J1 0 0 100 R 30 30 0 1 I +X ~ J2 0 -100 100 R 30 30 0 1 I +X ~ \J\ 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -300 100 R 30 30 0 1 I +X ~ K1 0 -400 100 R 30 30 0 1 I +X ~ K2 0 -500 100 R 30 30 0 1 I +X ~ \K\ 0 -600 100 R 30 30 0 1 I +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -500 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7472_PSPICE +# +DEF 7472_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7472_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 200 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J1 0 0 100 R 30 30 0 1 I +X ~ J2 0 -100 100 R 30 30 0 1 I +X ~ J3 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -300 100 R 30 30 0 1 I +X ~ K1 0 -400 100 R 30 30 0 1 I +X ~ K2 0 -500 100 R 30 30 0 1 I +X ~ K3 0 -600 100 R 30 30 0 1 I +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -500 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7473_PSPICE +# +DEF 7473_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7473_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -600 0 1 0 N +X ~ J 0 0 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 0 100 L 30 30 0 1 O +X ~ \Q\ 600 -400 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7474_PSPICE +# +DEF 7474_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7474_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7475_PSPICE +# +DEF 7475_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7475_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ 1D 0 0 100 R 30 30 0 1 I +X ~ 1Q 600 0 100 L 30 30 0 1 O +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ 2D 0 -100 100 R 30 30 0 1 I +X ~ 2Q 600 -200 100 L 30 30 0 1 O +X ~ 2\Q\ 600 -300 100 L 30 30 0 1 O +X ~ 1\Q\ 600 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7476_PSPICE +# +DEF 7476_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7476_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -600 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J 0 0 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 0 100 L 30 30 0 1 O +X ~ \Q\ 600 -400 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7477_PSPICE +# +DEF 7477_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7477_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ 1D 0 0 100 R 30 30 0 1 I +X ~ 1Q 600 -100 100 L 30 30 0 1 O +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ 2D 0 -400 100 R 30 30 0 1 I +X ~ 2Q 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7482_PSPICE +# +DEF 7482_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7482_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ C0 0 0 100 R 30 30 0 1 I +X ~ A1 0 -100 100 R 30 30 0 1 I +X ~ B1 0 -200 100 R 30 30 0 1 I +X ~ A2 0 -300 100 R 30 30 0 1 I +X ~ B2 0 -400 100 R 30 30 0 1 I +X ~ SUM1 600 -100 100 L 30 30 0 1 O +X ~ SUM2 600 -300 100 L 30 30 0 1 O +X ~ C2 600 -400 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7483A_PSPICE +# +DEF 7483A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7483A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 100 N +X ~ A4 0 0 100 R 30 30 0 1 I +X ~ A3 0 -100 100 R 30 30 0 1 I +X ~ A2 0 -200 100 R 30 30 0 1 I +X ~ A1 0 -300 100 R 30 30 0 1 I +X ~ B4 0 -400 100 R 30 30 0 1 I +X ~ B3 0 -500 100 R 30 30 0 1 I +X ~ B2 0 -600 100 R 30 30 0 1 I +X ~ B1 0 -700 100 R 30 30 0 1 I +X ~ C0 0 -800 100 R 30 30 0 1 I +X ~ C4 600 0 100 L 30 30 0 1 O +X ~ SUM4 600 -200 100 L 30 30 0 1 O +X ~ SUM3 600 -400 100 L 30 30 0 1 O +X ~ SUM2 600 -600 100 L 30 30 0 1 O +X ~ SUM1 600 -800 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7485_PSPICE +# +DEF 7485_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7485_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ B3 0 0 100 R 30 30 0 1 I +X ~ A3 0 -100 100 R 30 30 0 1 I +X ~ B2 0 -200 100 R 30 30 0 1 I +X ~ A2 0 -300 100 R 30 30 0 1 I +X ~ B1 0 -400 100 R 30 30 0 1 I +X ~ A1 0 -500 100 R 30 30 0 1 I +X ~ B0 0 -600 100 R 30 30 0 1 I +X ~ A0 0 -700 100 R 30 30 0 1 I +X ~ AB_IN 0 -1000 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ AB 600 -600 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 7486_PSPICE +# +DEF 7486_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7486_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 300 100 N +P 2 0 1 0 100 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +A -250 -90 400 -308 283 0 1 0 N 93 -295 101 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7490A_PSPICE +# +DEF 7490A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7490A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ R91 0 0 100 R 30 30 0 1 I +X ~ R92 0 -100 100 R 30 30 0 1 I +X ~ R01 0 -700 100 R 30 30 0 1 I +X ~ R02 0 -800 100 R 30 30 0 1 I +X ~ CKA 0 -300 100 R 30 30 0 1 I +X ~ CKB 0 -500 100 R 30 30 0 1 I +X ~ QA 600 -100 100 L 30 30 0 1 O +X ~ QB 600 -300 100 L 30 30 0 1 O +X ~ QC 600 -500 100 L 30 30 0 1 O +X ~ QD 600 -700 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7491A_PSPICE +# +DEF 7491A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7491A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -300 N +P 2 0 1 0 500 -300 100 -300 N +P 2 0 1 0 100 -300 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ CLOCK 0 -200 100 R 30 30 0 1 I +X ~ QH 600 0 100 L 30 30 0 1 O +X ~ \QH\ 600 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7492A_PSPICE +# +DEF 7492A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7492A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ CKA 0 0 100 R 30 30 0 1 I +X ~ CKB 0 -100 100 R 30 30 0 1 I +X ~ R01 0 -200 100 R 30 30 0 1 I +X ~ R02 0 -300 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7493A_PSPICE +# +DEF 7493A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7493A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ CKA 0 0 100 R 30 30 0 1 I +X ~ CKB 0 -100 100 R 30 30 0 1 I +X ~ R01 0 -200 100 R 30 30 0 1 I +X ~ R02 0 -300 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7494_PSPICE +# +DEF 7494_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7494_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1600 0 1 0 N +X ~ PE2 0 0 100 R 30 30 0 1 I +X ~ PE1 0 -100 100 R 30 30 0 1 I +X ~ P1A 0 -300 100 R 30 30 0 1 I +X ~ P2A 0 -800 100 R 30 30 0 1 I +X ~ P1B 0 -400 100 R 30 30 0 1 I +X ~ P1C 0 -500 100 R 30 30 0 1 I +X ~ P1D 0 -600 100 R 30 30 0 1 I +X ~ P2B 0 -900 100 R 30 30 0 1 I +X ~ P2C 0 -1000 100 R 30 30 0 1 I +X ~ P2D 0 -1100 100 R 30 30 0 1 I +X ~ SER_IN 0 -1300 100 R 30 30 0 1 I +X ~ CLOCK 0 -1400 100 R 30 30 0 1 I +X ~ CLEAR 0 -1500 100 R 30 30 0 1 I +X ~ QD 600 -700 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7495A_PSPICE +# +DEF 7495A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7495A_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ MODE 0 0 100 R 30 30 0 1 I +X ~ SER 0 -100 100 R 30 30 0 1 I +X ~ CLK1 0 -200 100 R 30 30 0 1 I +X ~ CLK2 0 -300 100 R 30 30 0 1 I +X ~ A 0 -400 100 R 30 30 0 1 I +X ~ B 0 -500 100 R 30 30 0 1 I +X ~ C 0 -600 100 R 30 30 0 1 I +X ~ D 0 -700 100 R 30 30 0 1 I +X ~ QA 600 -400 100 L 30 30 0 1 O +X ~ QB 600 -500 100 L 30 30 0 1 O +X ~ QC 600 -600 100 L 30 30 0 1 O +X ~ QD 600 -700 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 7496_PSPICE +# +DEF 7496_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "7496_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 200 N +X ~ PRE 300 300 100 D 30 30 0 1 I +X ~ SERIAL 0 0 100 R 30 30 0 1 I +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ CLK 0 -100 100 R 30 30 0 1 I +X ~ A 0 -200 100 R 30 30 0 1 I +X ~ B 0 -300 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -500 100 R 30 30 0 1 I +X ~ E 0 -600 100 R 30 30 0 1 I +X ~ QA 600 -200 100 L 30 30 0 1 O +X ~ QB 600 -300 100 L 30 30 0 1 O +X ~ QC 600 -400 100 L 30 30 0 1 O +X ~ QD 600 -500 100 L 30 30 0 1 O +X ~ QE 600 -600 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74100_PSPICE +# +DEF 74100_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74100_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ C 0 0 100 R 30 30 0 1 I +X ~ D1 0 -100 100 R 30 30 0 1 I +X ~ D2 0 -200 100 R 30 30 0 1 I +X ~ D3 0 -300 100 R 30 30 0 1 I +X ~ D4 0 -400 100 R 30 30 0 1 I +X ~ Q1 600 -100 100 L 30 30 0 1 O +X ~ Q2 600 -200 100 L 30 30 0 1 O +X ~ Q3 600 -300 100 L 30 30 0 1 O +X ~ Q4 600 -400 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74107_PSPICE +# +DEF 74107_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74107_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -600 0 1 0 N +X ~ J 0 0 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +X ~ CLK 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74109_PSPICE +# +DEF 74109_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74109_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -600 0 1 0 N +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ \K\ 0 -400 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ J 0 0 100 R 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ \Q\ 600 -300 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 74110_PSPICE +# +DEF 74110_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74110_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -800 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J1 0 0 100 R 30 30 0 1 I +X ~ J2 0 -100 100 R 30 30 0 1 I +X ~ J3 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -300 100 R 30 30 0 1 I +X ~ K1 0 -400 100 R 30 30 0 1 I +X ~ K2 0 -500 100 R 30 30 0 1 I +X ~ K3 0 -600 100 R 30 30 0 1 I +X ~ Q 600 -200 100 L 30 30 0 1 O +X ~ \Q\ 600 -400 100 L 30 30 0 1 O +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74111_PSPICE +# +DEF 74111_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74111_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -600 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J 0 0 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -300 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74121_PSPICE +# +DEF 74121_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74121_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -700 0 1 0 N +X ~ A1 0 -400 100 R 30 30 0 1 P +X ~ A2 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ RINT 0 -100 100 R 30 30 0 1 P +X ~ CEXT 0 -200 100 R 30 30 0 1 P +X ~ Q 700 -200 100 L 30 30 0 1 P +X ~ \Q\ 700 -400 100 L 30 30 0 1 P +X ~ REXT/CEXT 0 0 100 R 30 30 0 1 P +X ~ GND 300 -800 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74122_PSPICE +# +DEF 74122_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74122_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -900 0 1 0 N +X ~ RINT 0 -100 100 R 30 30 0 1 P +X ~ GND 200 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ A1 0 -400 100 R 30 30 0 1 P +X ~ A2 0 -500 100 R 30 30 0 1 P +X ~ \Q\ 700 -400 100 L 30 30 0 1 P +X ~ Q 700 -200 100 L 30 30 0 1 P +X ~ REXT/CEXT 0 0 100 R 30 30 0 1 P +X ~ CEXT 0 -200 100 R 30 30 0 1 P +X ~ B1 0 -600 100 R 30 30 0 1 P +X ~ B2 0 -700 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1000 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74123_PSPICE +# +DEF 74123_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74123_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -600 0 1 0 N +X ~ GND 200 -700 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ Q 700 -100 100 L 30 30 0 1 P +X ~ \Q\ 700 -300 100 L 30 30 0 1 P +X ~ REXT/CEXT 0 0 100 R 30 30 0 1 P +X ~ CEXT 0 -100 100 R 30 30 0 1 P +X ~ \CLR\ 300 -700 100 U 30 30 0 1 P +X ~ A 0 -300 100 R 30 30 0 1 P +X ~ B 0 -400 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74125_PSPICE +# +DEF 74125_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74125_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -140 N +C 250 -160 40 0 1 0 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74126_PSPICE +# +DEF 74126_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74126_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -200 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ G 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74128_PSPICE +# +DEF 74128_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74128_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 300 100 N +P 2 0 1 0 100 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +A -250 -90 400 -308 283 0 1 0 N 93 -295 101 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74132_PSPICE +# +DEF 74132_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74132_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74136_PSPICE +# +DEF 74136_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74136_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 300 100 N +P 2 0 1 0 100 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +A -250 -90 400 -308 283 0 1 0 N 93 -295 101 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74147_PSPICE +# +DEF 74147_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74147_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ B 600 -300 100 L 30 30 0 1 P +X ~ A 600 -100 100 L 30 30 0 1 P +X ~ C 600 -500 100 L 30 30 0 1 P +X ~ D 600 -700 100 L 30 30 0 1 P +X ~ IN1 0 0 100 R 30 30 0 1 P +X ~ IN2 0 -100 100 R 30 30 0 1 P +X ~ IN3 0 -200 100 R 30 30 0 1 P +X ~ IN4 0 -300 100 R 30 30 0 1 P +X ~ IN5 0 -400 100 R 30 30 0 1 P +X ~ IN6 0 -500 100 R 30 30 0 1 P +X ~ IN7 0 -600 100 R 30 30 0 1 P +X ~ IN8 0 -700 100 R 30 30 0 1 P +X ~ IN9 0 -800 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74148_PSPICE +# +DEF 74148_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74148_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ A1 600 -200 100 L 30 30 0 1 P +X ~ A0 600 0 100 L 30 30 0 1 P +X ~ A2 600 -400 100 L 30 30 0 1 P +X ~ GS 600 -600 100 L 30 30 0 1 P +X ~ IN0 0 0 100 R 30 30 0 1 P +X ~ IN1 0 -100 100 R 30 30 0 1 P +X ~ IN2 0 -200 100 R 30 30 0 1 P +X ~ IN3 0 -300 100 R 30 30 0 1 P +X ~ IN4 0 -400 100 R 30 30 0 1 P +X ~ IN5 0 -500 100 R 30 30 0 1 P +X ~ IN6 0 -600 100 R 30 30 0 1 P +X ~ IN7 0 -700 100 R 30 30 0 1 P +X ~ EI 0 -800 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ EO 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74151A_PSPICE +# +DEF 74151A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74151A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1400 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1500 100 U 30 30 0 1 W +X ~ Z 600 -300 100 L 30 30 0 1 O +X ~ \Z\ 600 -700 100 L 30 30 0 1 O +X ~ \E\ 0 0 100 R 30 30 0 1 I +X ~ I0 0 -200 100 R 30 30 0 1 I +X ~ I1 0 -300 100 R 30 30 0 1 I +X ~ I2 0 -400 100 R 30 30 0 1 I +X ~ I3 0 -500 100 R 30 30 0 1 I +X ~ I4 0 -600 100 R 30 30 0 1 I +X ~ I5 0 -700 100 R 30 30 0 1 I +X ~ I6 0 -800 100 R 30 30 0 1 I +X ~ I7 0 -900 100 R 30 30 0 1 I +X ~ S0 0 -1100 100 R 30 30 0 1 I +X ~ S1 0 -1200 100 R 30 30 0 1 I +X ~ S2 0 -1300 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 54152A_PSPICE +# +DEF 54152A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "54152A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1200 0 1 0 N +X ~ W 600 -500 100 L 30 30 0 1 O +X ~ GND 300 -1300 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ D0 0 0 100 R 30 30 0 1 I +X ~ D1 0 -100 100 R 30 30 0 1 I +X ~ D2 0 -200 100 R 30 30 0 1 I +X ~ D3 0 -300 100 R 30 30 0 1 I +X ~ D4 0 -400 100 R 30 30 0 1 I +X ~ D5 0 -500 100 R 30 30 0 1 I +X ~ D6 0 -600 100 R 30 30 0 1 I +X ~ D7 0 -700 100 R 30 30 0 1 I +X ~ A 0 -900 100 R 30 30 0 1 I +X ~ B 0 -1000 100 R 30 30 0 1 I +X ~ C 0 -1100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74153_PSPICE +# +DEF 74153_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74153_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1400 0 1 0 N +X ~ GND 300 -1500 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ ZA 600 -500 100 L 30 30 0 1 O +X ~ ZB 600 -1100 100 L 30 30 0 1 O +X ~ S0 0 0 100 R 30 30 0 1 I +X ~ S1 0 -100 100 R 30 30 0 1 I +X ~ \EA\ 0 -300 100 R 30 30 0 1 I +X ~ I0A 0 -400 100 R 30 30 0 1 I +X ~ I1A 0 -500 100 R 30 30 0 1 I +X ~ I2A 0 -600 100 R 30 30 0 1 I +X ~ I3A 0 -700 100 R 30 30 0 1 I +X ~ \EB\ 0 -900 100 R 30 30 0 1 I +X ~ I0B 0 -1000 100 R 30 30 0 1 I +X ~ I1B 0 -1100 100 R 30 30 0 1 I +X ~ I2B 0 -1200 100 R 30 30 0 1 I +X ~ I3B 0 -1300 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74154_PSPICE +# +DEF 74154_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74154_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1600 0 1 0 N +X ~ GND 300 -1700 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \G\1 0 0 100 R 30 30 0 1 I +X ~ \G\2 0 -200 100 R 30 30 0 1 I +X ~ A 0 -600 100 R 30 30 0 1 I +X ~ B 0 -800 100 R 30 30 0 1 I +X ~ C 0 -1000 100 R 30 30 0 1 I +X ~ D 0 -1200 100 R 30 30 0 1 I +X ~ Y0 600 0 100 L 30 30 0 1 O +X ~ Y1 600 -100 100 L 30 30 0 1 O +X ~ Y2 600 -200 100 L 30 30 0 1 O +X ~ Y3 600 -300 100 L 30 30 0 1 O +X ~ Y4 600 -400 100 L 30 30 0 1 O +X ~ Y5 600 -500 100 L 30 30 0 1 O +X ~ Y6 600 -600 100 L 30 30 0 1 O +X ~ Y7 600 -700 100 L 30 30 0 1 O +X ~ Y8 600 -800 100 L 30 30 0 1 O +X ~ Y9 600 -900 100 L 30 30 0 1 O +X ~ Y10 600 -1000 100 L 30 30 0 1 O +X ~ Y11 600 -1100 100 L 30 30 0 1 O +X ~ Y12 600 -1200 100 L 30 30 0 1 O +X ~ Y13 600 -1300 100 L 30 30 0 1 O +X ~ Y14 600 -1400 100 L 30 30 0 1 O +X ~ Y15 600 -1500 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 74155_PSPICE +# +DEF 74155_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74155_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ 1Y0 600 0 100 L 30 30 0 1 O +X ~ 1Y1 600 -100 100 L 30 30 0 1 O +X ~ 1Y2 600 -200 100 L 30 30 0 1 O +X ~ 1Y3 600 -300 100 L 30 30 0 1 O +X ~ 2Y0 600 -400 100 L 30 30 0 1 O +X ~ 2Y1 600 -500 100 L 30 30 0 1 O +X ~ 2Y2 600 -600 100 L 30 30 0 1 O +X ~ 2Y3 600 -700 100 L 30 30 0 1 O +X ~ 1\G\ 0 0 100 R 30 30 0 1 I +X ~ 1C 0 -100 100 R 30 30 0 1 I +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ B 0 -400 100 R 30 30 0 1 I +X ~ 2\G\ 0 -600 100 R 30 30 0 1 I +X ~ 2\C\ 0 -700 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74156_PSPICE +# +DEF 74156_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74156_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ 1Y0 600 0 100 L 30 30 0 1 O +X ~ 1Y1 600 -100 100 L 30 30 0 1 O +X ~ 1Y2 600 -200 100 L 30 30 0 1 O +X ~ 1Y3 600 -300 100 L 30 30 0 1 O +X ~ 2Y0 600 -400 100 L 30 30 0 1 O +X ~ 2Y1 600 -500 100 L 30 30 0 1 O +X ~ 2Y2 600 -600 100 L 30 30 0 1 O +X ~ 2Y3 600 -700 100 L 30 30 0 1 O +X ~ 1\G\ 0 0 100 R 30 30 0 1 I +X ~ 1C 0 -100 100 R 30 30 0 1 I +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ B 0 -400 100 R 30 30 0 1 I +X ~ 2\G\ 0 -600 100 R 30 30 0 1 I +X ~ 2\C\ 0 -700 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74157_PSPICE +# +DEF 74157_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74157_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1100 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ 1Y 700 -100 100 L 30 30 0 1 P +X ~ 2Y 700 -300 100 L 30 30 0 1 P +X ~ 3Y 700 -500 100 L 30 30 0 1 P +X ~ 4Y 700 -700 100 L 30 30 0 1 P +X ~ 1A 0 0 100 R 30 30 0 1 P +X ~ 1B 0 -100 100 R 30 30 0 1 P +X ~ 2A 0 -200 100 R 30 30 0 1 P +X ~ 2B 0 -300 100 R 30 30 0 1 P +X ~ 3A 0 -400 100 R 30 30 0 1 P +X ~ 3B 0 -500 100 R 30 30 0 1 P +X ~ 4A 0 -600 100 R 30 30 0 1 P +X ~ 4B 0 -700 100 R 30 30 0 1 P +X ~ STROBE\G\ 0 -900 100 R 30 30 0 1 P +X ~ SELECT\A\B 0 -1000 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74159_PSPICE +# +DEF 74159_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74159_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1600 0 1 0 N +X ~ GND 300 -1700 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \G\1 0 0 100 R 30 30 0 1 I +X ~ \G\2 0 -200 100 R 30 30 0 1 I +X ~ A 0 -600 100 R 30 30 0 1 I +X ~ B 0 -800 100 R 30 30 0 1 I +X ~ C 0 -1000 100 R 30 30 0 1 I +X ~ D 0 -1200 100 R 30 30 0 1 I +X ~ Y0 600 0 100 L 30 30 0 1 O +X ~ Y1 600 -100 100 L 30 30 0 1 O +X ~ Y2 600 -200 100 L 30 30 0 1 O +X ~ Y3 600 -300 100 L 30 30 0 1 O +X ~ Y4 600 -400 100 L 30 30 0 1 O +X ~ Y5 600 -500 100 L 30 30 0 1 O +X ~ Y6 600 -600 100 L 30 30 0 1 O +X ~ Y7 600 -700 100 L 30 30 0 1 O +X ~ Y8 600 -800 100 L 30 30 0 1 O +X ~ Y9 600 -900 100 L 30 30 0 1 O +X ~ Y10 600 -1000 100 L 30 30 0 1 O +X ~ Y11 600 -1100 100 L 30 30 0 1 O +X ~ Y12 600 -1200 100 L 30 30 0 1 O +X ~ Y13 600 -1300 100 L 30 30 0 1 O +X ~ Y14 600 -1400 100 L 30 30 0 1 O +X ~ Y15 600 -1500 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 74160_PSPICE +# +DEF 74160_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74160_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 74161_PSPICE +# +DEF 74161_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74161_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 74162_PSPICE +# +DEF 74162_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74162_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 74163_PSPICE +# +DEF 74163_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74163_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 74164_PSPICE +# +DEF 74164_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74164_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 300 500 -700 0 1 0 N +X ~ GND 200 -800 100 U 30 30 0 1 W +X ~ PWR 300 400 100 D 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -400 100 R 30 30 0 1 I +X ~ QA 600 200 100 L 30 30 0 1 O +X ~ QB 600 100 100 L 30 30 0 1 O +X ~ QC 600 0 100 L 30 30 0 1 O +X ~ QD 600 -100 100 L 30 30 0 1 O +X ~ QE 600 -200 100 L 30 30 0 1 O +X ~ QF 600 -300 100 L 30 30 0 1 O +X ~ QG 600 -400 100 L 30 30 0 1 O +X ~ QH 600 -500 100 L 30 30 0 1 O +X ~ \CLR\ 300 -800 100 U 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74173_PSPICE +# +DEF 74173_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74173_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ GND 200 -1200 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ CLR 300 -1200 100 U 30 30 0 1 I +X ~ \G\1 0 -100 100 R 30 30 0 1 I +X ~ \G\2 0 -200 100 R 30 30 0 1 I +X ~ 1D 0 -300 100 R 30 30 0 1 I +X ~ 2D 0 -400 100 R 30 30 0 1 I +X ~ 3D 0 -500 100 R 30 30 0 1 I +X ~ 4D 0 -600 100 R 30 30 0 1 I +X ~ M 0 -800 100 R 30 30 0 1 I +X ~ N 0 -900 100 R 30 30 0 1 I +X ~ 1Q 600 -300 100 L 30 30 0 1 O +X ~ 2Q 600 -400 100 L 30 30 0 1 O +X ~ 3Q 600 -500 100 L 30 30 0 1 O +X ~ 4Q 600 -600 100 L 30 30 0 1 O +X ~ CLK 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74174_PSPICE +# +DEF 74174_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74174_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ 1D 0 0 100 R 30 30 0 1 P +X ~ 2D 0 -100 100 R 30 30 0 1 P +X ~ 3D 0 -200 100 R 30 30 0 1 P +X ~ 4D 0 -300 100 R 30 30 0 1 P +X ~ 5D 0 -400 100 R 30 30 0 1 P +X ~ CLK 0 -600 100 R 30 30 0 1 P +X ~ \CLR\ 300 -900 100 U 30 30 0 1 P +X ~ 1Q 600 0 100 L 30 30 0 1 P +X ~ 2Q 600 -100 100 L 30 30 0 1 P +X ~ 4Q 600 -300 100 L 30 30 0 1 P +X ~ 5Q 600 -400 100 L 30 30 0 1 P +X ~ GND 200 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 3Q 600 -200 100 L 30 30 0 1 P +X ~ 6D 0 -500 100 R 30 30 0 1 P +X ~ 6Q 600 -500 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74175_PSPICE +# +DEF 74175_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74175_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ 1D 0 0 100 R 30 30 0 1 P +X ~ 2D 0 -200 100 R 30 30 0 1 P +X ~ 3D 0 -400 100 R 30 30 0 1 P +X ~ 4D 0 -600 100 R 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ 1Q 600 0 100 L 30 30 0 1 P +X ~ 1\Q\ 600 -100 100 L 30 30 0 1 P +X ~ 3Q 600 -400 100 L 30 30 0 1 P +X ~ 4Q 600 -600 100 L 30 30 0 1 P +X ~ 2\Q\ 600 -300 100 L 30 30 0 1 P +X ~ 3\Q\ 600 -500 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ 2Q 600 -200 100 L 30 30 0 1 P +X ~ 4\Q\ 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74176_PSPICE +# +DEF 74176_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74176_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ GND 200 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -100 100 R 30 30 0 1 P +X ~ B 0 -200 100 R 30 30 0 1 P +X ~ C 0 -300 100 R 30 30 0 1 P +X ~ D 0 -400 100 R 30 30 0 1 P +X ~ \CLR\ 300 -900 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -200 100 L 30 30 0 1 P +X ~ QC 600 -300 100 L 30 30 0 1 P +X ~ QD 600 -400 100 L 30 30 0 1 P +X ~ CLK1 0 -500 100 R 30 30 0 1 P +X ~ CLK2 0 -600 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74177_PSPICE +# +DEF 74177_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74177_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ GND 200 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -100 100 R 30 30 0 1 P +X ~ B 0 -200 100 R 30 30 0 1 P +X ~ C 0 -300 100 R 30 30 0 1 P +X ~ D 0 -400 100 R 30 30 0 1 P +X ~ \CLR\ 300 -900 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -200 100 L 30 30 0 1 P +X ~ QC 600 -300 100 L 30 30 0 1 P +X ~ QD 600 -400 100 L 30 30 0 1 P +X ~ CLK1 0 -500 100 R 30 30 0 1 P +X ~ CLK2 0 -600 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74178_PSPICE +# +DEF 74178_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74178_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ SERIAL 0 0 100 R 30 30 0 1 P +X ~ LOAD 0 -100 100 R 30 30 0 1 P +X ~ SHIFT 0 -200 100 R 30 30 0 1 P +X ~ A 0 -400 100 R 30 30 0 1 P +X ~ B 0 -500 100 R 30 30 0 1 P +X ~ C 0 -600 100 R 30 30 0 1 P +X ~ D 0 -700 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ CLK 0 -900 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74179_PSPICE +# +DEF 74179_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74179_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ GND 200 -1200 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ SERIAL 0 0 100 R 30 30 0 1 P +X ~ LOAD 0 -100 100 R 30 30 0 1 P +X ~ SHIFT 0 -200 100 R 30 30 0 1 P +X ~ A 0 -400 100 R 30 30 0 1 P +X ~ B 0 -500 100 R 30 30 0 1 P +X ~ C 0 -600 100 R 30 30 0 1 P +X ~ D 0 -700 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ CLK 0 -900 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1200 100 U 30 30 0 1 P +X ~ \Q\D 600 -900 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74180_PSPICE +# +DEF 74180_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74180_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1000 0 1 0 N +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 P +X ~ B 0 -100 100 R 30 30 0 1 P +X ~ C 0 -200 100 R 30 30 0 1 P +X ~ D 0 -300 100 R 30 30 0 1 P +X ~ E 0 -400 100 R 30 30 0 1 P +X ~ F 0 -500 100 R 30 30 0 1 P +X ~ G 0 -600 100 R 30 30 0 1 P +X ~ H 0 -700 100 R 30 30 0 1 P +X ~ ODD_IN 0 -900 100 R 30 30 0 1 P +X ~ EVEN_IN 0 -800 100 R 30 30 0 1 P +X ~ ODD_OUT 700 -400 100 L 30 30 0 1 P +X ~ EVEN_OUT 700 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74181_PSPICE +# +DEF 74181_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74181_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 600 -1000 0 1 0 N +X ~ S1 400 300 100 D 30 30 0 1 P +X ~ S2 300 300 100 D 30 30 0 1 P +X ~ S3 200 300 100 D 30 30 0 1 P +X ~ \A\0 0 0 100 R 30 30 0 1 P +X ~ \A\1 0 -100 100 R 30 30 0 1 P +X ~ \A\2 0 -200 100 R 30 30 0 1 P +X ~ \A\3 0 -300 100 R 30 30 0 1 P +X ~ \B\0 0 -400 100 R 30 30 0 1 P +X ~ \B\1 0 -500 100 R 30 30 0 1 P +X ~ \B\2 0 -600 100 R 30 30 0 1 P +X ~ \B\3 0 -700 100 R 30 30 0 1 P +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ PWR 100 300 100 D 30 30 0 1 W +X ~ CN 0 -800 100 R 30 30 0 1 P +X ~ M 0 -900 100 R 30 30 0 1 P +X ~ \F\0 700 0 100 L 30 30 0 1 P +X ~ \F\1 700 -100 100 L 30 30 0 1 P +X ~ \F\2 700 -200 100 L 30 30 0 1 P +X ~ \F\3 700 -300 100 L 30 30 0 1 P +X ~ A=B 700 -500 100 L 30 30 0 1 P +X ~ CN+4 700 -600 100 L 30 30 0 1 P +X ~ \G\ 700 -700 100 L 30 30 0 1 P +X ~ \P\ 700 -800 100 L 30 30 0 1 P +X ~ S0 500 300 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74182_PSPICE +# +DEF 74182_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74182_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ \P\0 0 0 100 R 30 30 0 1 P +X ~ \P\1 0 -100 100 R 30 30 0 1 P +X ~ \P\2 0 -200 100 R 30 30 0 1 P +X ~ \P\3 0 -300 100 R 30 30 0 1 P +X ~ \G\0 0 -400 100 R 30 30 0 1 P +X ~ \G\1 0 -500 100 R 30 30 0 1 P +X ~ \G\3 0 -700 100 R 30 30 0 1 P +X ~ CN 0 -800 100 R 30 30 0 1 P +X ~ \G\2 0 -600 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ \P\ 600 -200 100 L 30 30 0 1 P +X ~ \G\ 600 -400 100 L 30 30 0 1 P +X ~ CN+Z 600 -800 100 L 30 30 0 1 P +X ~ CN+X 600 -600 100 L 30 30 0 1 P +X ~ CN+Y 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74184_PSPICE +# +DEF 74184_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74184_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -200 100 R 30 30 0 1 P +X ~ B 0 -300 100 R 30 30 0 1 P +X ~ C 0 -400 100 R 30 30 0 1 P +X ~ D 0 -500 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ E 0 -600 100 R 30 30 0 1 P +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ Y1 600 0 100 L 30 30 0 1 P +X ~ Y2 600 -100 100 L 30 30 0 1 P +X ~ Y3 600 -200 100 L 30 30 0 1 P +X ~ Y4 600 -300 100 L 30 30 0 1 P +X ~ Y5 600 -400 100 L 30 30 0 1 P +X ~ Y6 600 -500 100 L 30 30 0 1 P +X ~ Y7 600 -600 100 L 30 30 0 1 P +X ~ Y8 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74185A_PSPICE +# +DEF 74185A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74185A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -200 100 R 30 30 0 1 P +X ~ B 0 -300 100 R 30 30 0 1 P +X ~ C 0 -400 100 R 30 30 0 1 P +X ~ D 0 -500 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ E 0 -600 100 R 30 30 0 1 P +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ Y1 600 0 100 L 30 30 0 1 P +X ~ Y2 600 -100 100 L 30 30 0 1 P +X ~ Y3 600 -200 100 L 30 30 0 1 P +X ~ Y4 600 -300 100 L 30 30 0 1 P +X ~ Y5 600 -400 100 L 30 30 0 1 P +X ~ Y6 600 -500 100 L 30 30 0 1 P +X ~ Y7 600 -600 100 L 30 30 0 1 P +X ~ Y8 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74194_PSPICE +# +DEF 74194_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74194_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ S1 0 0 100 R 30 30 0 1 P +X ~ S0 0 -100 100 R 30 30 0 1 P +X ~ SR 0 -300 100 R 30 30 0 1 P +X ~ A 0 -400 100 R 30 30 0 1 P +X ~ B 0 -500 100 R 30 30 0 1 P +X ~ C 0 -600 100 R 30 30 0 1 P +X ~ D 0 -700 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ SL 0 -200 100 R 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74195_PSPICE +# +DEF 74195_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74195_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1200 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1300 100 U 30 30 0 1 W +X ~ SH/\LD\ 0 0 100 R 30 30 0 1 P +X ~ J 0 -200 100 R 30 30 0 1 P +X ~ \K\ 0 -300 100 R 30 30 0 1 P +X ~ CLK 0 -1000 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1300 100 U 30 30 0 1 P +X ~ A 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ C 0 -700 100 R 30 30 0 1 P +X ~ D 0 -800 100 R 30 30 0 1 P +X ~ QA 600 -200 100 L 30 30 0 1 P +X ~ QB 600 -400 100 L 30 30 0 1 P +X ~ QC 600 -600 100 L 30 30 0 1 P +X ~ QD 600 -800 100 L 30 30 0 1 P +X ~ \Q\D 600 -1000 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74196_PSPICE +# +DEF 74196_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74196_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ CLK1 0 -200 100 R 30 30 0 1 P +X ~ CLK2 0 -300 100 R 30 30 0 1 P +X ~ A 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ C 0 -700 100 R 30 30 0 1 P +X ~ D 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74197_PSPICE +# +DEF 74197_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74197_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ CLK1 0 -200 100 R 30 30 0 1 P +X ~ CLK2 0 -300 100 R 30 30 0 1 P +X ~ A 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ C 0 -700 100 R 30 30 0 1 P +X ~ D 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74246_PSPICE +# +DEF 74246_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74246_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ INA 0 0 100 R 30 30 0 1 P +X ~ INB 0 -100 100 R 30 30 0 1 P +X ~ INC 0 -200 100 R 30 30 0 1 P +X ~ IND 0 -300 100 R 30 30 0 1 P +X ~ \BI\/\RBO\ 0 -800 100 R 30 30 0 1 P +X ~ \LT\ 0 -600 100 R 30 30 0 1 P +X ~ \RBI\ 0 -700 100 R 30 30 0 1 P +X ~ OUTA 600 0 100 L 30 30 0 1 P +X ~ OUTB 600 -100 100 L 30 30 0 1 P +X ~ OUTC 600 -200 100 L 30 30 0 1 P +X ~ OUTD 600 -300 100 L 30 30 0 1 P +X ~ OUTE 600 -400 100 L 30 30 0 1 P +X ~ OUTF 600 -500 100 L 30 30 0 1 P +X ~ OUTG 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74248_PSPICE +# +DEF 74248_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74248_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ INA 0 0 100 R 30 30 0 1 P +X ~ INB 0 -100 100 R 30 30 0 1 P +X ~ INC 0 -200 100 R 30 30 0 1 P +X ~ IND 0 -300 100 R 30 30 0 1 P +X ~ \BI\/\RBO\ 0 -800 100 R 30 30 0 1 P +X ~ \LT\ 0 -600 100 R 30 30 0 1 P +X ~ \RBI\ 0 -700 100 R 30 30 0 1 P +X ~ OUTA 600 0 100 L 30 30 0 1 P +X ~ OUTB 600 -100 100 L 30 30 0 1 P +X ~ OUTC 600 -200 100 L 30 30 0 1 P +X ~ OUTD 600 -300 100 L 30 30 0 1 P +X ~ OUTE 600 -400 100 L 30 30 0 1 P +X ~ OUTF 600 -500 100 L 30 30 0 1 P +X ~ OUTG 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74249_PSPICE +# +DEF 74249_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74249_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ INA 0 0 100 R 30 30 0 1 P +X ~ INB 0 -100 100 R 30 30 0 1 P +X ~ INC 0 -200 100 R 30 30 0 1 P +X ~ IND 0 -300 100 R 30 30 0 1 P +X ~ \BI\/\RBO\ 0 -800 100 R 30 30 0 1 P +X ~ \LT\ 0 -600 100 R 30 30 0 1 P +X ~ \RBI\ 0 -700 100 R 30 30 0 1 P +X ~ OUTA 600 0 100 L 30 30 0 1 P +X ~ OUTB 600 -100 100 L 30 30 0 1 P +X ~ OUTC 600 -200 100 L 30 30 0 1 P +X ~ OUTD 600 -300 100 L 30 30 0 1 P +X ~ OUTE 600 -400 100 L 30 30 0 1 P +X ~ OUTF 600 -500 100 L 30 30 0 1 P +X ~ OUTG 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74251_PSPICE +# +DEF 74251_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74251_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1400 0 1 0 N +X ~ D0 0 -200 100 R 30 30 0 1 P +X ~ D1 0 -300 100 R 30 30 0 1 P +X ~ D2 0 -400 100 R 30 30 0 1 P +X ~ D3 0 -500 100 R 30 30 0 1 P +X ~ D4 0 -600 100 R 30 30 0 1 P +X ~ D6 0 -800 100 R 30 30 0 1 P +X ~ D7 0 -900 100 R 30 30 0 1 P +X ~ A 0 -1100 100 R 30 30 0 1 P +X ~ B 0 -1200 100 R 30 30 0 1 P +X ~ C 0 -1300 100 R 30 30 0 1 P +X ~ Y 600 -200 100 L 30 30 0 1 P +X ~ \W\ 600 -400 100 L 30 30 0 1 P +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1500 100 U 30 30 0 1 W +X ~ D5 0 -700 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74259_PSPICE +# +DEF 74259_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74259_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1000 100 U 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ D 0 -200 100 R 30 30 0 1 P +X ~ S0 0 -400 100 R 30 30 0 1 P +X ~ S1 0 -500 100 R 30 30 0 1 P +X ~ S2 0 -600 100 R 30 30 0 1 P +X ~ Q0 600 0 100 L 30 30 0 1 P +X ~ Q1 600 -100 100 L 30 30 0 1 P +X ~ Q2 600 -200 100 L 30 30 0 1 P +X ~ Q3 600 -300 100 L 30 30 0 1 P +X ~ Q4 600 -400 100 L 30 30 0 1 P +X ~ Q5 600 -500 100 L 30 30 0 1 P +X ~ Q6 600 -600 100 L 30 30 0 1 P +X ~ Q7 600 -700 100 L 30 30 0 1 P +X ~ \CLR\ 300 -1000 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74265_PSPICE +# +DEF 74265_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74265_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ 1W 600 0 100 L 30 30 0 1 P +X ~ 1Y 600 -100 100 L 30 30 0 1 P +X ~ 2A 0 -300 100 R 30 30 0 1 P +X ~ 2B 0 -400 100 R 30 30 0 1 P +X ~ 2W 600 -300 100 L 30 30 0 1 P +X ~ 2Y 600 -400 100 L 30 30 0 1 P +X ~ 3A 0 -600 100 R 30 30 0 1 P +X ~ 3B 0 -700 100 R 30 30 0 1 P +X ~ 3Y 600 -700 100 L 30 30 0 1 P +X ~ 4A 0 -900 100 R 30 30 0 1 P +X ~ 4W 600 -900 100 L 30 30 0 1 P +X ~ 3W 600 -600 100 L 30 30 0 1 P +X ~ 4Y 600 -1000 100 L 30 30 0 1 P +X ~ 1A 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74273_PSPICE +# +DEF 74273_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74273_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ D1 0 0 100 R 30 30 0 1 P +X ~ D2 0 -100 100 R 30 30 0 1 P +X ~ D3 0 -200 100 R 30 30 0 1 P +X ~ D4 0 -300 100 R 30 30 0 1 P +X ~ D5 0 -400 100 R 30 30 0 1 P +X ~ D6 0 -500 100 R 30 30 0 1 P +X ~ D7 0 -600 100 R 30 30 0 1 P +X ~ D8 0 -700 100 R 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ Q1 600 0 100 L 30 30 0 1 P +X ~ Q2 600 -100 100 L 30 30 0 1 P +X ~ Q3 600 -200 100 L 30 30 0 1 P +X ~ Q4 600 -300 100 L 30 30 0 1 P +X ~ Q5 600 -400 100 L 30 30 0 1 P +X ~ Q6 600 -500 100 L 30 30 0 1 P +X ~ Q7 600 -600 100 L 30 30 0 1 P +X ~ Q8 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74276_PSPICE +# +DEF 74276_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74276_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -1300 0 1 0 N +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -1400 100 U 30 30 0 1 W +X ~ \PRE\ 300 300 100 D 30 30 0 1 P +X ~ 1J 0 0 100 R 30 30 0 1 P +X ~ 1\K\ 0 -200 100 R 30 30 0 1 P +X ~ 1CLK 0 -100 100 R 30 30 0 1 P +X ~ 2J 0 -300 100 R 30 30 0 1 P +X ~ 2CLK 0 -400 100 R 30 30 0 1 P +X ~ 2\K\ 0 -500 100 R 30 30 0 1 P +X ~ 3J 0 -600 100 R 30 30 0 1 P +X ~ 3CLK 0 -700 100 R 30 30 0 1 P +X ~ 3\K\ 0 -800 100 R 30 30 0 1 P +X ~ 4J 0 -900 100 R 30 30 0 1 P +X ~ 4CLK 0 -1000 100 R 30 30 0 1 P +X ~ 4\K\ 0 -1100 100 R 30 30 0 1 P +X ~ 1Q 600 0 100 L 30 30 0 1 P +X ~ 2Q 600 -300 100 L 30 30 0 1 P +X ~ 3Q 600 -600 100 L 30 30 0 1 P +X ~ 4Q 600 -900 100 L 30 30 0 1 P +X ~ \CLR\ 300 -1400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74278_PSPICE +# +DEF 74278_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74278_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -700 0 1 0 N +X ~ GND 300 -800 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ P0 0 0 100 R 30 30 0 1 P +X ~ STRB 0 -100 100 R 30 30 0 1 P +X ~ D1 0 -300 100 R 30 30 0 1 P +X ~ D2 0 -400 100 R 30 30 0 1 P +X ~ D3 0 -500 100 R 30 30 0 1 P +X ~ D4 0 -600 100 R 30 30 0 1 P +X ~ P1 600 0 100 L 30 30 0 1 P +X ~ Y1 600 -300 100 L 30 30 0 1 P +X ~ Y2 600 -400 100 L 30 30 0 1 P +X ~ Y3 600 -500 100 L 30 30 0 1 P +X ~ Y4 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74279_PSPICE +# +DEF 74279_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74279_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -600 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -700 100 U 30 30 0 1 W +X ~ 1\R\ 0 0 100 R 30 30 0 1 P +X ~ 1\S\1 0 -100 100 R 30 30 0 1 P +X ~ 1\S\2 0 -200 100 R 30 30 0 1 P +X ~ 2\R\ 0 -400 100 R 30 30 0 1 P +X ~ 2\S\ 0 -500 100 R 30 30 0 1 P +X ~ 1Q 600 -200 100 L 30 30 0 1 P +X ~ 2Q 600 -500 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74283_PSPICE +# +DEF 74283_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74283_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ A1 0 -700 100 R 30 30 0 1 P +X ~ A2 0 -500 100 R 30 30 0 1 P +X ~ A3 0 -300 100 R 30 30 0 1 P +X ~ A4 0 -100 100 R 30 30 0 1 P +X ~ B1 0 -600 100 R 30 30 0 1 P +X ~ B2 0 -400 100 R 30 30 0 1 P +X ~ B3 0 -200 100 R 30 30 0 1 P +X ~ B4 0 0 100 R 30 30 0 1 P +X ~ C0 0 -900 100 R 30 30 0 1 P +X ~ C4 600 -900 100 L 30 30 0 1 P +X ~ SUM1 600 -700 100 L 30 30 0 1 P +X ~ SUM2 600 -500 100 L 30 30 0 1 P +X ~ SUM3 600 -300 100 L 30 30 0 1 P +X ~ SUM4 600 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74290_PSPICE +# +DEF 74290_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74290_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ R91 0 0 100 R 30 30 0 1 P +X ~ R92 0 -100 100 R 30 30 0 1 P +X ~ CLKA 0 -300 100 R 30 30 0 1 P +X ~ CLKB 0 -400 100 R 30 30 0 1 P +X ~ R01 0 -600 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ R02 0 -700 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74293_PSPICE +# +DEF 74293_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74293_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ GND 300 -600 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ CLKA 0 0 100 R 30 30 0 1 P +X ~ CLKB 0 -100 100 R 30 30 0 1 P +X ~ R01 0 -300 100 R 30 30 0 1 P +X ~ R02 0 -400 100 R 30 30 0 1 P +X ~ QA 600 0 100 L 30 30 0 1 P +X ~ QB 600 -100 100 L 30 30 0 1 P +X ~ QC 600 -200 100 L 30 30 0 1 P +X ~ QD 600 -300 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74298_PSPICE +# +DEF 74298_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74298_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ WS 0 0 100 R 30 30 0 1 P +X ~ A1 0 -200 100 R 30 30 0 1 P +X ~ A2 0 -300 100 R 30 30 0 1 P +X ~ B1 0 -400 100 R 30 30 0 1 P +X ~ B2 0 -500 100 R 30 30 0 1 P +X ~ C1 0 -600 100 R 30 30 0 1 P +X ~ C2 0 -700 100 R 30 30 0 1 P +X ~ D1 0 -800 100 R 30 30 0 1 P +X ~ D2 0 -900 100 R 30 30 0 1 P +X ~ CLK 0 -1000 100 R 30 30 0 1 P +X ~ QA 600 -200 100 L 30 30 0 1 P +X ~ QB 600 -400 100 L 30 30 0 1 P +X ~ QC 600 -600 100 L 30 30 0 1 P +X ~ QD 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74351_PSPICE +# +DEF 74351_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74351_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -2000 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -2100 100 U 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ 1D0 0 -200 100 R 30 30 0 1 P +X ~ 1D1 0 -300 100 R 30 30 0 1 P +X ~ 1D2 0 -400 100 R 30 30 0 1 P +X ~ 1D3 0 -500 100 R 30 30 0 1 P +X ~ D4 0 -1200 100 R 30 30 0 1 P +X ~ D5 0 -1300 100 R 30 30 0 1 P +X ~ D6 0 -1400 100 R 30 30 0 1 P +X ~ D7 0 -1500 100 R 30 30 0 1 P +X ~ A 0 -1700 100 R 30 30 0 1 P +X ~ B 0 -1800 100 R 30 30 0 1 P +X ~ C 0 -1900 100 R 30 30 0 1 P +X ~ 2D0 0 -700 100 R 30 30 0 1 P +X ~ 2D1 0 -800 100 R 30 30 0 1 P +X ~ 2D2 0 -900 100 R 30 30 0 1 P +X ~ 2D3 0 -1000 100 R 30 30 0 1 P +X ~ 1Y 600 -200 100 L 30 30 0 1 P +X ~ 2Y 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74365A_PSPICE +# +DEF 74365A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74365A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \G\1 0 0 100 R 30 30 0 1 P +X ~ \G\2 0 -100 100 R 30 30 0 1 P +X ~ A1 0 -300 100 R 30 30 0 1 P +X ~ A2 0 -400 100 R 30 30 0 1 P +X ~ A3 0 -500 100 R 30 30 0 1 P +X ~ A4 0 -600 100 R 30 30 0 1 P +X ~ A5 0 -700 100 R 30 30 0 1 P +X ~ A6 0 -800 100 R 30 30 0 1 P +X ~ Y1 600 -300 100 L 30 30 0 1 P +X ~ Y2 600 -400 100 L 30 30 0 1 P +X ~ Y3 600 -500 100 L 30 30 0 1 P +X ~ Y4 600 -600 100 L 30 30 0 1 P +X ~ Y5 600 -700 100 L 30 30 0 1 P +X ~ Y6 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74366A_PSPICE +# +DEF 74366A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74366A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \G\1 0 0 100 R 30 30 0 1 P +X ~ \G\2 0 -100 100 R 30 30 0 1 P +X ~ A1 0 -300 100 R 30 30 0 1 P +X ~ A2 0 -400 100 R 30 30 0 1 P +X ~ A3 0 -500 100 R 30 30 0 1 P +X ~ A4 0 -600 100 R 30 30 0 1 P +X ~ A5 0 -700 100 R 30 30 0 1 P +X ~ A6 0 -800 100 R 30 30 0 1 P +X ~ Y1 600 -300 100 L 30 30 0 1 P +X ~ Y2 600 -400 100 L 30 30 0 1 P +X ~ Y3 600 -500 100 L 30 30 0 1 P +X ~ Y4 600 -600 100 L 30 30 0 1 P +X ~ Y5 600 -700 100 L 30 30 0 1 P +X ~ Y6 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74367A_PSPICE +# +DEF 74367A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74367A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 1\G\ 0 0 100 R 30 30 0 1 P +X ~ 1A1 0 -100 100 R 30 30 0 1 P +X ~ 1A2 0 -200 100 R 30 30 0 1 P +X ~ 1A3 0 -300 100 R 30 30 0 1 P +X ~ 1A4 0 -400 100 R 30 30 0 1 P +X ~ 2\G\ 0 -600 100 R 30 30 0 1 P +X ~ 2A1 0 -700 100 R 30 30 0 1 P +X ~ 2A2 0 -800 100 R 30 30 0 1 P +X ~ 1Y1 600 -100 100 L 30 30 0 1 P +X ~ 1Y2 600 -200 100 L 30 30 0 1 P +X ~ 1Y3 600 -300 100 L 30 30 0 1 P +X ~ 1Y4 600 -400 100 L 30 30 0 1 P +X ~ 2Y2 600 -800 100 L 30 30 0 1 P +X ~ 2Y1 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74368A_PSPICE +# +DEF 74368A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74368A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 1\G\ 0 0 100 R 30 30 0 1 P +X ~ 1A1 0 -100 100 R 30 30 0 1 P +X ~ 1A2 0 -200 100 R 30 30 0 1 P +X ~ 1A3 0 -300 100 R 30 30 0 1 P +X ~ 1A4 0 -400 100 R 30 30 0 1 P +X ~ 2\G\ 0 -600 100 R 30 30 0 1 P +X ~ 2A1 0 -700 100 R 30 30 0 1 P +X ~ 2A2 0 -800 100 R 30 30 0 1 P +X ~ 1Y1 600 -100 100 L 30 30 0 1 P +X ~ 1Y2 600 -200 100 L 30 30 0 1 P +X ~ 1Y3 600 -300 100 L 30 30 0 1 P +X ~ 1Y4 600 -400 100 L 30 30 0 1 P +X ~ 2Y2 600 -800 100 L 30 30 0 1 P +X ~ 2Y1 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74376_PSPICE +# +DEF 74376_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74376_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 1J 0 0 100 R 30 30 0 1 P +X ~ 2J 0 -200 100 R 30 30 0 1 P +X ~ 3J 0 -400 100 R 30 30 0 1 P +X ~ 4J 0 -600 100 R 30 30 0 1 P +X ~ 1\K\ 0 -100 100 R 30 30 0 1 P +X ~ 2\K\ 0 -300 100 R 30 30 0 1 P +X ~ 3\K\ 0 -500 100 R 30 30 0 1 P +X ~ 4\K\ 0 -700 100 R 30 30 0 1 P +X ~ 1Q 600 -100 100 L 30 30 0 1 P +X ~ 2Q 600 -300 100 L 30 30 0 1 P +X ~ 3Q 600 -500 100 L 30 30 0 1 P +X ~ 4Q 600 -700 100 L 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74390_PSPICE +# +DEF 74390_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74390_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -400 0 1 0 N +X ~ GND 200 -500 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +X ~ CKA 0 0 100 R 30 30 0 1 P +X ~ CKB 0 -200 100 R 30 30 0 1 P +X ~ CLR 300 -500 100 U 30 30 0 1 P +X ~ QA 600 100 100 L 30 30 0 1 P +X ~ QB 600 0 100 L 30 30 0 1 P +X ~ QC 600 -100 100 L 30 30 0 1 P +X ~ QD 600 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74393_PSPICE +# +DEF 74393_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74393_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -400 0 1 0 N +X ~ GND 200 -500 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 P +X ~ QA 600 0 100 L 30 30 0 1 P +X ~ QB 600 -100 100 L 30 30 0 1 P +X ~ QC 600 -200 100 L 30 30 0 1 P +X ~ QD 600 -300 100 L 30 30 0 1 P +X ~ CLR 300 -500 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 74425_PSPICE +# +DEF 74425_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74425_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -140 N +C 250 -160 40 0 1 0 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74426_PSPICE +# +DEF 74426_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74426_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -200 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ G 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 74490_PSPICE +# +DEF 74490_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74490_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -400 0 1 0 N +X ~ GND 200 -500 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +X ~ SET9 0 0 100 R 30 30 0 1 P +X ~ CLK 0 -200 100 R 30 30 0 1 P +X ~ CLR 300 -500 100 U 30 30 0 1 P +X ~ QA 600 100 100 L 30 30 0 1 P +X ~ QB 600 0 100 L 30 30 0 1 P +X ~ QC 600 -100 100 L 30 30 0 1 P +X ~ QD 600 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 00_PSPICE +# +DEF 00_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "00_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 01_PSPICE +# +DEF 01_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "01_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ Y 700 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 02_PSPICE +# +DEF 02_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "02_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 03_PSPICE +# +DEF 03_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "03_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 04_PSPICE +# +DEF 04_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "04_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 O +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 05_PSPICE +# +DEF 05_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "05_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 06_PSPICE +# +DEF 06_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "06_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 07_PSPICE +# +DEF 07_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "07_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 08_PSPICE +# +DEF 08_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "08_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 09_PSPICE +# +DEF 09_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "09_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 10_PSPICE +# +DEF 10_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "10_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 11_PSPICE +# +DEF 11_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "11_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 12_PSPICE +# +DEF 12_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "12_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 13_PSPICE +# +DEF 13_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "13_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +P 2 0 1 0 200 -150 350 -150 N +P 2 0 1 0 350 -150 350 -250 N +P 2 0 1 0 400 -250 250 -250 N +P 2 0 1 0 250 -250 250 -150 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 O +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 14_PSPICE +# +DEF 14_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "14_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +P 2 0 1 0 140 40 260 40 N +P 2 0 1 0 260 40 260 -40 N +P 2 0 1 0 300 -40 180 -40 N +P 2 0 1 0 180 -40 180 40 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 O +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 16_PSPICE +# +DEF 16_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "16_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 17_PSPICE +# +DEF 17_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "17_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 200 N +P 2 0 1 0 100 200 100 -200 N +P 2 0 1 0 100 -200 400 0 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ Y 500 0 100 L 30 30 0 1 P +X ~ GND 250 -200 100 U 30 30 0 1 W +X ~ PWR 250 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 20_PSPICE +# +DEF 20_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "20_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 O +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 22_PSPICE +# +DEF 22_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "22_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 P +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 23_PSPICE +# +DEF 23_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "23_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -1300 N +P 2 0 1 0 500 -1300 100 -1300 N +P 2 0 1 0 100 -1300 100 100 N +X ~ 1A 0 0 100 R 30 30 0 1 I +X ~ 1B 0 -100 100 R 30 30 0 1 I +X ~ 1C 0 -200 100 R 30 30 0 1 I +X ~ 1D 0 -300 100 R 30 30 0 1 I +X ~ 1G 0 -400 100 R 30 30 0 1 I +X ~ X 0 -500 100 R 30 30 0 1 I +X ~ \X\ 0 -600 100 R 30 30 0 1 I +X ~ 2A 0 -800 100 R 30 30 0 1 I +X ~ 2B 0 -900 100 R 30 30 0 1 I +X ~ 2C 0 -1000 100 R 30 30 0 1 I +X ~ 2D 0 -1100 100 R 30 30 0 1 I +X ~ 2G 0 -1200 100 R 30 30 0 1 I +X ~ 1Y 600 -200 100 L 30 30 0 1 I +X ~ 2Y 600 -1000 100 L 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 25_PSPICE +# +DEF 25_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "25_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -500 N +P 2 0 1 0 500 -500 100 -500 N +P 2 0 1 0 100 -500 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ G 0 -400 100 R 30 30 0 1 I +X ~ Y 600 -200 100 L 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 P +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 26_PSPICE +# +DEF 26_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "26_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 27_PSPICE +# +DEF 27_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "27_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 28_PSPICE +# +DEF 28_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "28_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 30_PSPICE +# +DEF 30_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "30_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ E 0 -400 100 R 30 30 0 1 I +X ~ F 0 -500 100 R 30 30 0 1 I +X ~ G 0 -600 100 R 30 30 0 1 I +X ~ H 0 -700 100 R 30 30 0 1 I +X ~ Y 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 32_PSPICE +# +DEF 32_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "32_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 33_PSPICE +# +DEF 33_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "33_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 60 100 300 100 N +P 2 0 1 0 60 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 37_PSPICE +# +DEF 37_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "37_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 38_PSPICE +# +DEF 38_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "38_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 39_PSPICE +# +DEF 39_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "39_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 40_PSPICE +# +DEF 40_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "40_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 100 0 N +P 2 0 1 0 100 0 100 -400 N +P 2 0 1 0 100 -400 400 -400 N +A 400 -200 200 -899 899 0 1 0 N 400 -400 400 0 +X ~ Y 700 -200 100 L 30 30 0 1 O +X ~ PWR 300 100 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ D 0 -400 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 42_PSPICE +# +DEF 42_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "42_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 43_PSPICE +# +DEF 43_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "43_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 44_PSPICE +# +DEF 44_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "44_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 45_PSPICE +# +DEF 45_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "45_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 200 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ Y0 600 100 100 L 30 30 0 1 O +X ~ Y1 600 0 100 L 30 30 0 1 O +X ~ Y2 600 -100 100 L 30 30 0 1 O +X ~ Y3 600 -200 100 L 30 30 0 1 O +X ~ Y4 600 -300 100 L 30 30 0 1 O +X ~ Y5 600 -400 100 L 30 30 0 1 O +X ~ Y6 600 -500 100 L 30 30 0 1 O +X ~ Y7 600 -600 100 L 30 30 0 1 O +X ~ Y8 600 -700 100 L 30 30 0 1 O +X ~ Y9 600 -800 100 L 30 30 0 1 O +X ~ PWR 300 300 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 46_PSPICE +# +DEF 46_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "46_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ INA 0 -400 100 R 30 30 0 1 I +X ~ INB 0 -500 100 R 30 30 0 1 I +X ~ INC 0 -600 100 R 30 30 0 1 I +X ~ IND 0 -700 100 R 30 30 0 1 I +X ~ \RBI\ 0 -100 100 R 30 30 0 1 I +X ~ \LT\ 0 -200 100 R 30 30 0 1 I +X ~ OUTA 600 -100 100 L 30 30 0 1 O +X ~ OUTB 600 -200 100 L 30 30 0 1 O +X ~ OUTC 600 -300 100 L 30 30 0 1 O +X ~ OUTD 600 -400 100 L 30 30 0 1 O +X ~ OUTE 600 -500 100 L 30 30 0 1 O +X ~ OUTF 600 -600 100 L 30 30 0 1 O +X ~ OUTG 600 -700 100 L 30 30 0 1 O +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ \BI\/\RBO\ 0 0 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 47_PSPICE +# +DEF 47_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "47_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ INA 0 -400 100 R 30 30 0 1 I +X ~ INB 0 -500 100 R 30 30 0 1 I +X ~ INC 0 -600 100 R 30 30 0 1 I +X ~ IND 0 -700 100 R 30 30 0 1 I +X ~ \RBI\ 0 -100 100 R 30 30 0 1 I +X ~ \LT\ 0 -200 100 R 30 30 0 1 I +X ~ OUTA 600 -100 100 L 30 30 0 1 O +X ~ OUTB 600 -200 100 L 30 30 0 1 O +X ~ OUTC 600 -300 100 L 30 30 0 1 O +X ~ OUTD 600 -400 100 L 30 30 0 1 O +X ~ OUTE 600 -500 100 L 30 30 0 1 O +X ~ OUTF 600 -600 100 L 30 30 0 1 O +X ~ OUTG 600 -700 100 L 30 30 0 1 O +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ \BI\/\RBO\ 0 0 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 48_PSPICE +# +DEF 48_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "48_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ A 0 -400 100 R 30 30 0 1 I +X ~ B 0 -500 100 R 30 30 0 1 I +X ~ C 0 -600 100 R 30 30 0 1 I +X ~ D 0 -700 100 R 30 30 0 1 I +X ~ \BI\ 0 0 100 R 30 30 0 1 I +X ~ \RBI\ 0 -100 100 R 30 30 0 1 I +X ~ \LT\ 0 -200 100 R 30 30 0 1 I +X ~ OA 600 0 100 L 30 30 0 1 O +X ~ OB 600 -100 100 L 30 30 0 1 O +X ~ OC 600 -200 100 L 30 30 0 1 O +X ~ OD 600 -300 100 L 30 30 0 1 O +X ~ OE 600 -400 100 L 30 30 0 1 O +X ~ OF 600 -500 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ OG 600 -600 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 49_PSPICE +# +DEF 49_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "49_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -700 N +P 2 0 1 0 500 -700 100 -700 N +P 2 0 1 0 100 -700 100 100 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ B 0 -400 100 R 30 30 0 1 I +X ~ C 0 -500 100 R 30 30 0 1 I +X ~ D 0 -600 100 R 30 30 0 1 I +X ~ \BI\ 0 0 100 R 30 30 0 1 I +X ~ OA 600 0 100 L 30 30 0 1 O +X ~ OB 600 -100 100 L 30 30 0 1 O +X ~ OC 600 -200 100 L 30 30 0 1 O +X ~ OD 600 -300 100 L 30 30 0 1 O +X ~ OE 600 -400 100 L 30 30 0 1 O +X ~ OF 600 -500 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -800 100 U 30 30 0 1 W +X ~ OG 600 -600 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 50_PSPICE +# +DEF 50_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "50_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -1100 N +P 2 0 1 0 500 -1100 100 -1100 N +P 2 0 1 0 100 -1100 100 100 N +X ~ 1A 0 0 100 R 30 30 0 1 I +X ~ 1B 0 -100 100 R 30 30 0 1 I +X ~ 1C 0 -200 100 R 30 30 0 1 I +X ~ 1D 0 -300 100 R 30 30 0 1 I +X ~ 1X 0 -400 100 R 30 30 0 1 I +X ~ 1\X\ 0 -500 100 R 30 30 0 1 I +X ~ 2A 0 -700 100 R 30 30 0 1 I +X ~ 2B 0 -800 100 R 30 30 0 1 I +X ~ 2C 0 -900 100 R 30 30 0 1 I +X ~ 2D 0 -1000 100 R 30 30 0 1 I +X ~ 1Y 600 -200 100 L 30 30 0 1 O +X ~ 2Y 600 -900 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 51_PSPICE +# +DEF 51_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "51_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ Y 600 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 60_PSPICE +# +DEF 60_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "60_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -500 N +P 2 0 1 0 500 -500 100 -500 N +P 2 0 1 0 100 -500 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ \X\ 0 -400 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ X 600 -100 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 70_PSPICE +# +DEF 70_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "70_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -800 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J1 0 0 100 R 30 30 0 1 I +X ~ J2 0 -100 100 R 30 30 0 1 I +X ~ \J\ 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -300 100 R 30 30 0 1 I +X ~ K1 0 -400 100 R 30 30 0 1 I +X ~ K2 0 -500 100 R 30 30 0 1 I +X ~ \K\ 0 -600 100 R 30 30 0 1 I +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -500 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 72_PSPICE +# +DEF 72_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "72_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 200 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J1 0 0 100 R 30 30 0 1 I +X ~ J2 0 -100 100 R 30 30 0 1 I +X ~ J3 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -300 100 R 30 30 0 1 I +X ~ K1 0 -400 100 R 30 30 0 1 I +X ~ K2 0 -500 100 R 30 30 0 1 I +X ~ K3 0 -600 100 R 30 30 0 1 I +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -500 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 73_PSPICE +# +DEF 73_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "73_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -600 0 1 0 N +X ~ J 0 0 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 0 100 L 30 30 0 1 O +X ~ \Q\ 600 -400 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 74_PSPICE +# +DEF 74_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "74_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 75_PSPICE +# +DEF 75_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "75_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ 1D 0 0 100 R 30 30 0 1 I +X ~ 1Q 600 0 100 L 30 30 0 1 O +X ~ C 0 -300 100 R 30 30 0 1 I +X ~ 2D 0 -100 100 R 30 30 0 1 I +X ~ 2Q 600 -200 100 L 30 30 0 1 O +X ~ 2\Q\ 600 -300 100 L 30 30 0 1 O +X ~ 1\Q\ 600 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 76_PSPICE +# +DEF 76_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "76_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -600 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J 0 0 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 0 100 L 30 30 0 1 O +X ~ \Q\ 600 -400 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 77_PSPICE +# +DEF 77_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "77_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ 1D 0 0 100 R 30 30 0 1 I +X ~ 1Q 600 -100 100 L 30 30 0 1 O +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ 2D 0 -400 100 R 30 30 0 1 I +X ~ 2Q 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 82_PSPICE +# +DEF 82_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "82_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ C0 0 0 100 R 30 30 0 1 I +X ~ A1 0 -100 100 R 30 30 0 1 I +X ~ B1 0 -200 100 R 30 30 0 1 I +X ~ A2 0 -300 100 R 30 30 0 1 I +X ~ B2 0 -400 100 R 30 30 0 1 I +X ~ SUM1 600 -100 100 L 30 30 0 1 O +X ~ SUM2 600 -300 100 L 30 30 0 1 O +X ~ C2 600 -400 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 83_PSPICE +# +DEF 83_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "83_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -900 N +P 2 0 1 0 500 -900 100 -900 N +P 2 0 1 0 100 -900 100 100 N +X ~ A4 0 0 100 R 30 30 0 1 I +X ~ A3 0 -100 100 R 30 30 0 1 I +X ~ A2 0 -200 100 R 30 30 0 1 I +X ~ A1 0 -300 100 R 30 30 0 1 I +X ~ B4 0 -400 100 R 30 30 0 1 I +X ~ B3 0 -500 100 R 30 30 0 1 I +X ~ B2 0 -600 100 R 30 30 0 1 I +X ~ B1 0 -700 100 R 30 30 0 1 I +X ~ C0 0 -800 100 R 30 30 0 1 I +X ~ C4 600 0 100 L 30 30 0 1 O +X ~ SUM4 600 -200 100 L 30 30 0 1 O +X ~ SUM3 600 -400 100 L 30 30 0 1 O +X ~ SUM2 600 -600 100 L 30 30 0 1 O +X ~ SUM1 600 -800 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 85_PSPICE +# +DEF 85_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "85_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ B3 0 0 100 R 30 30 0 1 I +X ~ A3 0 -100 100 R 30 30 0 1 I +X ~ B2 0 -200 100 R 30 30 0 1 I +X ~ A2 0 -300 100 R 30 30 0 1 I +X ~ B1 0 -400 100 R 30 30 0 1 I +X ~ A1 0 -500 100 R 30 30 0 1 I +X ~ B0 0 -600 100 R 30 30 0 1 I +X ~ A0 0 -700 100 R 30 30 0 1 I +X ~ AB_IN 0 -1000 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ AB 600 -600 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 86_PSPICE +# +DEF 86_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "86_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 300 100 N +P 2 0 1 0 100 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +A -250 -90 400 -308 283 0 1 0 N 93 -295 101 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 90_PSPICE +# +DEF 90_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "90_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ R91 0 0 100 R 30 30 0 1 I +X ~ R92 0 -100 100 R 30 30 0 1 I +X ~ R01 0 -700 100 R 30 30 0 1 I +X ~ R02 0 -800 100 R 30 30 0 1 I +X ~ CKA 0 -300 100 R 30 30 0 1 I +X ~ CKB 0 -500 100 R 30 30 0 1 I +X ~ QA 600 -100 100 L 30 30 0 1 O +X ~ QB 600 -300 100 L 30 30 0 1 O +X ~ QC 600 -500 100 L 30 30 0 1 O +X ~ QD 600 -700 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 91_PSPICE +# +DEF 91_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "91_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -300 N +P 2 0 1 0 500 -300 100 -300 N +P 2 0 1 0 100 -300 100 100 N +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ CLOCK 0 -200 100 R 30 30 0 1 I +X ~ QH 600 0 100 L 30 30 0 1 O +X ~ \QH\ 600 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 92_PSPICE +# +DEF 92_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "92_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ CKA 0 0 100 R 30 30 0 1 I +X ~ CKB 0 -100 100 R 30 30 0 1 I +X ~ R01 0 -200 100 R 30 30 0 1 I +X ~ R02 0 -300 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 93_PSPICE +# +DEF 93_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "93_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -400 N +P 2 0 1 0 500 -400 100 -400 N +P 2 0 1 0 100 -400 100 100 N +X ~ CKA 0 0 100 R 30 30 0 1 I +X ~ CKB 0 -100 100 R 30 30 0 1 I +X ~ R01 0 -200 100 R 30 30 0 1 I +X ~ R02 0 -300 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -500 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 94_PSPICE +# +DEF 94_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "94_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1600 0 1 0 N +X ~ PE2 0 0 100 R 30 30 0 1 I +X ~ PE1 0 -100 100 R 30 30 0 1 I +X ~ P1A 0 -300 100 R 30 30 0 1 I +X ~ P2A 0 -800 100 R 30 30 0 1 I +X ~ P1B 0 -400 100 R 30 30 0 1 I +X ~ P1C 0 -500 100 R 30 30 0 1 I +X ~ P1D 0 -600 100 R 30 30 0 1 I +X ~ P2B 0 -900 100 R 30 30 0 1 I +X ~ P2C 0 -1000 100 R 30 30 0 1 I +X ~ P2D 0 -1100 100 R 30 30 0 1 I +X ~ SER_IN 0 -1300 100 R 30 30 0 1 I +X ~ CLOCK 0 -1400 100 R 30 30 0 1 I +X ~ CLEAR 0 -1500 100 R 30 30 0 1 I +X ~ QD 600 -700 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 95_PSPICE +# +DEF 95_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "95_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 500 100 N +P 2 0 1 0 500 100 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 100 N +X ~ MODE 0 0 100 R 30 30 0 1 I +X ~ SER 0 -100 100 R 30 30 0 1 I +X ~ CLK1 0 -200 100 R 30 30 0 1 I +X ~ CLK2 0 -300 100 R 30 30 0 1 I +X ~ A 0 -400 100 R 30 30 0 1 I +X ~ B 0 -500 100 R 30 30 0 1 I +X ~ C 0 -600 100 R 30 30 0 1 I +X ~ D 0 -700 100 R 30 30 0 1 I +X ~ QA 600 -400 100 L 30 30 0 1 O +X ~ QB 600 -500 100 L 30 30 0 1 O +X ~ QC 600 -600 100 L 30 30 0 1 O +X ~ QD 600 -700 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 96_PSPICE +# +DEF 96_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "96_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 200 500 200 N +P 2 0 1 0 500 200 500 -800 N +P 2 0 1 0 500 -800 100 -800 N +P 2 0 1 0 100 -800 100 200 N +X ~ PRE 300 300 100 D 30 30 0 1 I +X ~ SERIAL 0 0 100 R 30 30 0 1 I +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ CLK 0 -100 100 R 30 30 0 1 I +X ~ A 0 -200 100 R 30 30 0 1 I +X ~ B 0 -300 100 R 30 30 0 1 I +X ~ C 0 -400 100 R 30 30 0 1 I +X ~ D 0 -500 100 R 30 30 0 1 I +X ~ E 0 -600 100 R 30 30 0 1 I +X ~ QA 600 -200 100 L 30 30 0 1 O +X ~ QB 600 -300 100 L 30 30 0 1 O +X ~ QC 600 -400 100 L 30 30 0 1 O +X ~ QD 600 -500 100 L 30 30 0 1 O +X ~ QE 600 -600 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 100_PSPICE +# +DEF 100_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "100_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ C 0 0 100 R 30 30 0 1 I +X ~ D1 0 -100 100 R 30 30 0 1 I +X ~ D2 0 -200 100 R 30 30 0 1 I +X ~ D3 0 -300 100 R 30 30 0 1 I +X ~ D4 0 -400 100 R 30 30 0 1 I +X ~ Q1 600 -100 100 L 30 30 0 1 O +X ~ Q2 600 -200 100 L 30 30 0 1 O +X ~ Q3 600 -300 100 L 30 30 0 1 O +X ~ Q4 600 -400 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -600 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 107_PSPICE +# +DEF 107_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "107_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -600 0 1 0 N +X ~ J 0 0 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -300 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +X ~ CLK 0 -200 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 109_PSPICE +# +DEF 109_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "109_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -600 0 1 0 N +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ \K\ 0 -400 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ J 0 0 100 R 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ \Q\ 600 -300 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 110_PSPICE +# +DEF 110_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "110_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -800 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J1 0 0 100 R 30 30 0 1 I +X ~ J2 0 -100 100 R 30 30 0 1 I +X ~ J3 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -300 100 R 30 30 0 1 I +X ~ K1 0 -400 100 R 30 30 0 1 I +X ~ K2 0 -500 100 R 30 30 0 1 I +X ~ K3 0 -600 100 R 30 30 0 1 I +X ~ Q 600 -200 100 L 30 30 0 1 O +X ~ \Q\ 600 -400 100 L 30 30 0 1 O +X ~ \CLR\ 300 -900 100 U 30 30 0 1 I +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 111_PSPICE +# +DEF 111_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "111_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -600 0 1 0 N +X ~ \PRE\ 300 300 100 D 30 30 0 1 I +X ~ J 0 0 100 R 30 30 0 1 I +X ~ CLK 0 -200 100 R 30 30 0 1 I +X ~ K 0 -400 100 R 30 30 0 1 I +X ~ \CLR\ 300 -700 100 U 30 30 0 1 I +X ~ Q 600 -100 100 L 30 30 0 1 O +X ~ \Q\ 600 -300 100 L 30 30 0 1 O +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -700 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 121_PSPICE +# +DEF 121_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "121_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -700 0 1 0 N +X ~ A1 0 -400 100 R 30 30 0 1 P +X ~ A2 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ RINT 0 -100 100 R 30 30 0 1 P +X ~ CEXT 0 -200 100 R 30 30 0 1 P +X ~ Q 700 -200 100 L 30 30 0 1 P +X ~ \Q\ 700 -400 100 L 30 30 0 1 P +X ~ REXT/CEXT 0 0 100 R 30 30 0 1 P +X ~ GND 300 -800 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 122_PSPICE +# +DEF 122_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "122_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -900 0 1 0 N +X ~ RINT 0 -100 100 R 30 30 0 1 P +X ~ GND 200 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ A1 0 -400 100 R 30 30 0 1 P +X ~ A2 0 -500 100 R 30 30 0 1 P +X ~ \Q\ 700 -400 100 L 30 30 0 1 P +X ~ Q 700 -200 100 L 30 30 0 1 P +X ~ REXT/CEXT 0 0 100 R 30 30 0 1 P +X ~ CEXT 0 -200 100 R 30 30 0 1 P +X ~ B1 0 -600 100 R 30 30 0 1 P +X ~ B2 0 -700 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1000 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 123_PSPICE +# +DEF 123_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "123_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -600 0 1 0 N +X ~ GND 200 -700 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ Q 700 -100 100 L 30 30 0 1 P +X ~ \Q\ 700 -300 100 L 30 30 0 1 P +X ~ REXT/CEXT 0 0 100 R 30 30 0 1 P +X ~ CEXT 0 -100 100 R 30 30 0 1 P +X ~ \CLR\ 300 -700 100 U 30 30 0 1 P +X ~ A 0 -300 100 R 30 30 0 1 P +X ~ B 0 -400 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 125_PSPICE +# +DEF 125_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "125_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -140 N +C 250 -160 40 0 1 0 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 126_PSPICE +# +DEF 126_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "126_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -200 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ G 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 128_PSPICE +# +DEF 128_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "128_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 300 100 N +P 2 0 1 0 100 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +A -250 -90 400 -308 283 0 1 0 N 93 -295 101 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 132_PSPICE +# +DEF 132_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "132_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 100 100 N +P 2 0 1 0 100 100 100 -300 N +P 2 0 1 0 100 -300 400 -300 N +A 400 -100 200 -899 899 0 1 0 N 400 -300 400 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 O +X ~ GND 300 -400 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 136_PSPICE +# +DEF 136_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "136_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 300 100 N +P 2 0 1 0 100 -300 300 -300 N +A 290 -220 330 212 881 0 1 0 N 597 -101 300 109 +A 290 30 330 -881 -228 0 1 0 N 300 -299 594 -97 +A -290 -90 400 -308 283 0 1 0 N 53 -295 61 100 +A -250 -90 400 -308 283 0 1 0 N 93 -295 101 100 +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ Y 700 -100 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -400 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 145_PSPICE +# +DEF 145_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "145_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -900 0 1 0 N +X ~ PWR 300 300 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ Y0 600 100 100 L 30 30 0 1 P +X ~ Y1 600 0 100 L 30 30 0 1 P +X ~ Y2 600 -100 100 L 30 30 0 1 P +X ~ Y3 600 -200 100 L 30 30 0 1 P +X ~ Y4 600 -300 100 L 30 30 0 1 P +X ~ Y5 600 -400 100 L 30 30 0 1 P +X ~ Y6 600 -500 100 L 30 30 0 1 P +X ~ Y7 600 -600 100 L 30 30 0 1 P +X ~ Y8 600 -700 100 L 30 30 0 1 P +X ~ Y9 600 -800 100 L 30 30 0 1 P +X ~ A 0 0 100 R 30 30 0 1 P +X ~ B 0 -200 100 R 30 30 0 1 P +X ~ C 0 -400 100 R 30 30 0 1 P +X ~ D 0 -600 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 147_PSPICE +# +DEF 147_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "147_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ B 600 -300 100 L 30 30 0 1 P +X ~ A 600 -100 100 L 30 30 0 1 P +X ~ C 600 -500 100 L 30 30 0 1 P +X ~ D 600 -700 100 L 30 30 0 1 P +X ~ IN1 0 0 100 R 30 30 0 1 P +X ~ IN2 0 -100 100 R 30 30 0 1 P +X ~ IN3 0 -200 100 R 30 30 0 1 P +X ~ IN4 0 -300 100 R 30 30 0 1 P +X ~ IN5 0 -400 100 R 30 30 0 1 P +X ~ IN6 0 -500 100 R 30 30 0 1 P +X ~ IN7 0 -600 100 R 30 30 0 1 P +X ~ IN8 0 -700 100 R 30 30 0 1 P +X ~ IN9 0 -800 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 148_PSPICE +# +DEF 148_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "148_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ A1 600 -200 100 L 30 30 0 1 P +X ~ A0 600 0 100 L 30 30 0 1 P +X ~ A2 600 -400 100 L 30 30 0 1 P +X ~ GS 600 -600 100 L 30 30 0 1 P +X ~ IN0 0 0 100 R 30 30 0 1 P +X ~ IN1 0 -100 100 R 30 30 0 1 P +X ~ IN2 0 -200 100 R 30 30 0 1 P +X ~ IN3 0 -300 100 R 30 30 0 1 P +X ~ IN4 0 -400 100 R 30 30 0 1 P +X ~ IN5 0 -500 100 R 30 30 0 1 P +X ~ IN6 0 -600 100 R 30 30 0 1 P +X ~ IN7 0 -700 100 R 30 30 0 1 P +X ~ EI 0 -800 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ EO 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 151A_PSPICE +# +DEF 151A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "151A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1400 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1500 100 U 30 30 0 1 W +X ~ Z 600 -300 100 L 30 30 0 1 O +X ~ \Z\ 600 -700 100 L 30 30 0 1 O +X ~ \E\ 0 0 100 R 30 30 0 1 I +X ~ I0 0 -200 100 R 30 30 0 1 I +X ~ I1 0 -300 100 R 30 30 0 1 I +X ~ I2 0 -400 100 R 30 30 0 1 I +X ~ I3 0 -500 100 R 30 30 0 1 I +X ~ I4 0 -600 100 R 30 30 0 1 I +X ~ I5 0 -700 100 R 30 30 0 1 I +X ~ I6 0 -800 100 R 30 30 0 1 I +X ~ I7 0 -900 100 R 30 30 0 1 I +X ~ S0 0 -1100 100 R 30 30 0 1 I +X ~ S1 0 -1200 100 R 30 30 0 1 I +X ~ S2 0 -1300 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 152_PSPICE +# +DEF 152_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "152_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1200 0 1 0 N +X ~ W 600 -500 100 L 30 30 0 1 O +X ~ GND 300 -1300 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ D0 0 0 100 R 30 30 0 1 I +X ~ D1 0 -100 100 R 30 30 0 1 I +X ~ D2 0 -200 100 R 30 30 0 1 I +X ~ D3 0 -300 100 R 30 30 0 1 I +X ~ D4 0 -400 100 R 30 30 0 1 I +X ~ D5 0 -500 100 R 30 30 0 1 I +X ~ D6 0 -600 100 R 30 30 0 1 I +X ~ D7 0 -700 100 R 30 30 0 1 I +X ~ A 0 -900 100 R 30 30 0 1 I +X ~ B 0 -1000 100 R 30 30 0 1 I +X ~ C 0 -1100 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 153A_PSPICE +# +DEF 153A_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "153A_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1400 0 1 0 N +X ~ GND 300 -1500 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ ZA 600 -500 100 L 30 30 0 1 O +X ~ ZB 600 -1100 100 L 30 30 0 1 O +X ~ S0 0 0 100 R 30 30 0 1 I +X ~ S1 0 -100 100 R 30 30 0 1 I +X ~ \EA\ 0 -300 100 R 30 30 0 1 I +X ~ I0A 0 -400 100 R 30 30 0 1 I +X ~ I1A 0 -500 100 R 30 30 0 1 I +X ~ I2A 0 -600 100 R 30 30 0 1 I +X ~ I3A 0 -700 100 R 30 30 0 1 I +X ~ \EB\ 0 -900 100 R 30 30 0 1 I +X ~ I0B 0 -1000 100 R 30 30 0 1 I +X ~ I1B 0 -1100 100 R 30 30 0 1 I +X ~ I2B 0 -1200 100 R 30 30 0 1 I +X ~ I3B 0 -1300 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 154_PSPICE +# +DEF 154_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "154_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1600 0 1 0 N +X ~ GND 300 -1700 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \G\1 0 0 100 R 30 30 0 1 I +X ~ \G\2 0 -200 100 R 30 30 0 1 I +X ~ A 0 -600 100 R 30 30 0 1 I +X ~ B 0 -800 100 R 30 30 0 1 I +X ~ C 0 -1000 100 R 30 30 0 1 I +X ~ D 0 -1200 100 R 30 30 0 1 I +X ~ Y0 600 0 100 L 30 30 0 1 O +X ~ Y1 600 -100 100 L 30 30 0 1 O +X ~ Y2 600 -200 100 L 30 30 0 1 O +X ~ Y3 600 -300 100 L 30 30 0 1 O +X ~ Y4 600 -400 100 L 30 30 0 1 O +X ~ Y5 600 -500 100 L 30 30 0 1 O +X ~ Y6 600 -600 100 L 30 30 0 1 O +X ~ Y7 600 -700 100 L 30 30 0 1 O +X ~ Y8 600 -800 100 L 30 30 0 1 O +X ~ Y9 600 -900 100 L 30 30 0 1 O +X ~ Y10 600 -1000 100 L 30 30 0 1 O +X ~ Y11 600 -1100 100 L 30 30 0 1 O +X ~ Y12 600 -1200 100 L 30 30 0 1 O +X ~ Y13 600 -1300 100 L 30 30 0 1 O +X ~ Y14 600 -1400 100 L 30 30 0 1 O +X ~ Y15 600 -1500 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 155_PSPICE +# +DEF 155_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "155_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ 1Y0 600 0 100 L 30 30 0 1 O +X ~ 1Y1 600 -100 100 L 30 30 0 1 O +X ~ 1Y2 600 -200 100 L 30 30 0 1 O +X ~ 1Y3 600 -300 100 L 30 30 0 1 O +X ~ 2Y0 600 -400 100 L 30 30 0 1 O +X ~ 2Y1 600 -500 100 L 30 30 0 1 O +X ~ 2Y2 600 -600 100 L 30 30 0 1 O +X ~ 2Y3 600 -700 100 L 30 30 0 1 O +X ~ 1\G\ 0 0 100 R 30 30 0 1 I +X ~ 1C 0 -100 100 R 30 30 0 1 I +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ B 0 -400 100 R 30 30 0 1 I +X ~ 2\G\ 0 -600 100 R 30 30 0 1 I +X ~ 2\C\ 0 -700 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 156_PSPICE +# +DEF 156_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "156_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ 1Y0 600 0 100 L 30 30 0 1 O +X ~ 1Y1 600 -100 100 L 30 30 0 1 O +X ~ 1Y2 600 -200 100 L 30 30 0 1 O +X ~ 1Y3 600 -300 100 L 30 30 0 1 O +X ~ 2Y0 600 -400 100 L 30 30 0 1 O +X ~ 2Y1 600 -500 100 L 30 30 0 1 O +X ~ 2Y2 600 -600 100 L 30 30 0 1 O +X ~ 2Y3 600 -700 100 L 30 30 0 1 O +X ~ 1\G\ 0 0 100 R 30 30 0 1 I +X ~ 1C 0 -100 100 R 30 30 0 1 I +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ B 0 -400 100 R 30 30 0 1 I +X ~ 2\G\ 0 -600 100 R 30 30 0 1 I +X ~ 2\C\ 0 -700 100 R 30 30 0 1 I +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -900 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# 157_PSPICE +# +DEF 157_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "157_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1100 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ 1Y 700 -100 100 L 30 30 0 1 P +X ~ 2Y 700 -300 100 L 30 30 0 1 P +X ~ 3Y 700 -500 100 L 30 30 0 1 P +X ~ 4Y 700 -700 100 L 30 30 0 1 P +X ~ 1A 0 0 100 R 30 30 0 1 P +X ~ 1B 0 -100 100 R 30 30 0 1 P +X ~ 2A 0 -200 100 R 30 30 0 1 P +X ~ 2B 0 -300 100 R 30 30 0 1 P +X ~ 3A 0 -400 100 R 30 30 0 1 P +X ~ 3B 0 -500 100 R 30 30 0 1 P +X ~ 4A 0 -600 100 R 30 30 0 1 P +X ~ 4B 0 -700 100 R 30 30 0 1 P +X ~ STROBE\G\ 0 -900 100 R 30 30 0 1 P +X ~ SELECT\A\B 0 -1000 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 160_PSPICE +# +DEF 160_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "160_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 161_PSPICE +# +DEF 161_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "161_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 162_PSPICE +# +DEF 162_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "162_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 163_PSPICE +# +DEF 163_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "163_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 I +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -100 100 R 30 30 0 1 I +X ~ C 0 -200 100 R 30 30 0 1 I +X ~ D 0 -300 100 R 30 30 0 1 I +X ~ CLK 0 -500 100 R 30 30 0 1 I +X ~ ENT 0 -600 100 R 30 30 0 1 I +X ~ ENP 0 -700 100 R 30 30 0 1 I +X ~ \LOAD\ 0 -800 100 R 30 30 0 1 I +X ~ QA 600 0 100 L 30 30 0 1 O +X ~ QB 600 -100 100 L 30 30 0 1 O +X ~ QC 600 -200 100 L 30 30 0 1 O +X ~ QD 600 -300 100 L 30 30 0 1 O +X ~ RCO 600 -400 100 L 30 30 0 1 O +ENDDRAW +ENDDEF +# +# 164_PSPICE +# +DEF 164_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "164_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 300 500 -700 0 1 0 N +X ~ GND 200 -800 100 U 30 30 0 1 W +X ~ PWR 300 400 100 D 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 I +X ~ B 0 -200 100 R 30 30 0 1 I +X ~ CLK 0 -400 100 R 30 30 0 1 I +X ~ QA 600 200 100 L 30 30 0 1 O +X ~ QB 600 100 100 L 30 30 0 1 O +X ~ QC 600 0 100 L 30 30 0 1 O +X ~ QD 600 -100 100 L 30 30 0 1 O +X ~ QE 600 -200 100 L 30 30 0 1 O +X ~ QF 600 -300 100 L 30 30 0 1 O +X ~ QG 600 -400 100 L 30 30 0 1 O +X ~ QH 600 -500 100 L 30 30 0 1 O +X ~ \CLR\ 300 -800 100 U 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 173_PSPICE +# +DEF 173_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "173_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ GND 200 -1200 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ CLR 300 -1200 100 U 30 30 0 1 I +X ~ \G\1 0 -100 100 R 30 30 0 1 I +X ~ \G\2 0 -200 100 R 30 30 0 1 I +X ~ 1D 0 -300 100 R 30 30 0 1 I +X ~ 2D 0 -400 100 R 30 30 0 1 I +X ~ 3D 0 -500 100 R 30 30 0 1 I +X ~ 4D 0 -600 100 R 30 30 0 1 I +X ~ M 0 -800 100 R 30 30 0 1 I +X ~ N 0 -900 100 R 30 30 0 1 I +X ~ 1Q 600 -300 100 L 30 30 0 1 O +X ~ 2Q 600 -400 100 L 30 30 0 1 O +X ~ 3Q 600 -500 100 L 30 30 0 1 O +X ~ 4Q 600 -600 100 L 30 30 0 1 O +X ~ CLK 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 174_PSPICE +# +DEF 174_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "174_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ 1D 0 0 100 R 30 30 0 1 P +X ~ 2D 0 -100 100 R 30 30 0 1 P +X ~ 3D 0 -200 100 R 30 30 0 1 P +X ~ 4D 0 -300 100 R 30 30 0 1 P +X ~ 5D 0 -400 100 R 30 30 0 1 P +X ~ CLK 0 -600 100 R 30 30 0 1 P +X ~ \CLR\ 300 -900 100 U 30 30 0 1 P +X ~ 1Q 600 0 100 L 30 30 0 1 P +X ~ 2Q 600 -100 100 L 30 30 0 1 P +X ~ 4Q 600 -300 100 L 30 30 0 1 P +X ~ 5Q 600 -400 100 L 30 30 0 1 P +X ~ GND 200 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 3Q 600 -200 100 L 30 30 0 1 P +X ~ 6D 0 -500 100 R 30 30 0 1 P +X ~ 6Q 600 -500 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 175_PSPICE +# +DEF 175_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "175_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ 1D 0 0 100 R 30 30 0 1 P +X ~ 2D 0 -200 100 R 30 30 0 1 P +X ~ 3D 0 -400 100 R 30 30 0 1 P +X ~ 4D 0 -600 100 R 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ 1Q 600 0 100 L 30 30 0 1 P +X ~ 1\Q\ 600 -100 100 L 30 30 0 1 P +X ~ 3Q 600 -400 100 L 30 30 0 1 P +X ~ 4Q 600 -600 100 L 30 30 0 1 P +X ~ 2\Q\ 600 -300 100 L 30 30 0 1 P +X ~ 3\Q\ 600 -500 100 L 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ 2Q 600 -200 100 L 30 30 0 1 P +X ~ 4\Q\ 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 176_PSPICE +# +DEF 176_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "176_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ GND 200 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -100 100 R 30 30 0 1 P +X ~ B 0 -200 100 R 30 30 0 1 P +X ~ C 0 -300 100 R 30 30 0 1 P +X ~ D 0 -400 100 R 30 30 0 1 P +X ~ \CLR\ 300 -900 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -200 100 L 30 30 0 1 P +X ~ QC 600 -300 100 L 30 30 0 1 P +X ~ QD 600 -400 100 L 30 30 0 1 P +X ~ CLK1 0 -500 100 R 30 30 0 1 P +X ~ CLK2 0 -600 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 177_PSPICE +# +DEF 177_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "177_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ GND 200 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -100 100 R 30 30 0 1 P +X ~ B 0 -200 100 R 30 30 0 1 P +X ~ C 0 -300 100 R 30 30 0 1 P +X ~ D 0 -400 100 R 30 30 0 1 P +X ~ \CLR\ 300 -900 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -200 100 L 30 30 0 1 P +X ~ QC 600 -300 100 L 30 30 0 1 P +X ~ QD 600 -400 100 L 30 30 0 1 P +X ~ CLK1 0 -500 100 R 30 30 0 1 P +X ~ CLK2 0 -600 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 178_PSPICE +# +DEF 178_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "178_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ SERIAL 0 0 100 R 30 30 0 1 P +X ~ LOAD 0 -100 100 R 30 30 0 1 P +X ~ SHIFT 0 -200 100 R 30 30 0 1 P +X ~ A 0 -400 100 R 30 30 0 1 P +X ~ B 0 -500 100 R 30 30 0 1 P +X ~ C 0 -600 100 R 30 30 0 1 P +X ~ D 0 -700 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ CLK 0 -900 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 179_PSPICE +# +DEF 179_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "179_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ GND 200 -1200 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ SERIAL 0 0 100 R 30 30 0 1 P +X ~ LOAD 0 -100 100 R 30 30 0 1 P +X ~ SHIFT 0 -200 100 R 30 30 0 1 P +X ~ A 0 -400 100 R 30 30 0 1 P +X ~ B 0 -500 100 R 30 30 0 1 P +X ~ C 0 -600 100 R 30 30 0 1 P +X ~ D 0 -700 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ CLK 0 -900 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1200 100 U 30 30 0 1 P +X ~ \Q\D 600 -900 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 180_PSPICE +# +DEF 180_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "180_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -1000 0 1 0 N +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 P +X ~ B 0 -100 100 R 30 30 0 1 P +X ~ C 0 -200 100 R 30 30 0 1 P +X ~ D 0 -300 100 R 30 30 0 1 P +X ~ E 0 -400 100 R 30 30 0 1 P +X ~ F 0 -500 100 R 30 30 0 1 P +X ~ G 0 -600 100 R 30 30 0 1 P +X ~ H 0 -700 100 R 30 30 0 1 P +X ~ ODD_IN 0 -900 100 R 30 30 0 1 P +X ~ EVEN_IN 0 -800 100 R 30 30 0 1 P +X ~ ODD_OUT 700 -400 100 L 30 30 0 1 P +X ~ EVEN_OUT 700 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 181_PSPICE +# +DEF 181_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "181_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 600 -1000 0 1 0 N +X ~ S1 400 300 100 D 30 30 0 1 P +X ~ S2 300 300 100 D 30 30 0 1 P +X ~ S3 200 300 100 D 30 30 0 1 P +X ~ \A\0 0 0 100 R 30 30 0 1 P +X ~ \A\1 0 -100 100 R 30 30 0 1 P +X ~ \A\2 0 -200 100 R 30 30 0 1 P +X ~ \A\3 0 -300 100 R 30 30 0 1 P +X ~ \B\0 0 -400 100 R 30 30 0 1 P +X ~ \B\1 0 -500 100 R 30 30 0 1 P +X ~ \B\2 0 -600 100 R 30 30 0 1 P +X ~ \B\3 0 -700 100 R 30 30 0 1 P +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ PWR 100 300 100 D 30 30 0 1 W +X ~ CN 0 -800 100 R 30 30 0 1 P +X ~ M 0 -900 100 R 30 30 0 1 P +X ~ \F\0 700 0 100 L 30 30 0 1 P +X ~ \F\1 700 -100 100 L 30 30 0 1 P +X ~ \F\2 700 -200 100 L 30 30 0 1 P +X ~ \F\3 700 -300 100 L 30 30 0 1 P +X ~ A=B 700 -500 100 L 30 30 0 1 P +X ~ CN+4 700 -600 100 L 30 30 0 1 P +X ~ \G\ 700 -700 100 L 30 30 0 1 P +X ~ \P\ 700 -800 100 L 30 30 0 1 P +X ~ S0 500 300 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 182_PSPICE +# +DEF 182_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "182_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ \P\0 0 0 100 R 30 30 0 1 P +X ~ \P\1 0 -100 100 R 30 30 0 1 P +X ~ \P\2 0 -200 100 R 30 30 0 1 P +X ~ \P\3 0 -300 100 R 30 30 0 1 P +X ~ \G\0 0 -400 100 R 30 30 0 1 P +X ~ \G\1 0 -500 100 R 30 30 0 1 P +X ~ \G\3 0 -700 100 R 30 30 0 1 P +X ~ CN 0 -800 100 R 30 30 0 1 P +X ~ \G\2 0 -600 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ \P\ 600 -200 100 L 30 30 0 1 P +X ~ \G\ 600 -400 100 L 30 30 0 1 P +X ~ CN+Z 600 -800 100 L 30 30 0 1 P +X ~ CN+X 600 -600 100 L 30 30 0 1 P +X ~ CN+Y 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 184_PSPICE +# +DEF 184_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "184_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -200 100 R 30 30 0 1 P +X ~ B 0 -300 100 R 30 30 0 1 P +X ~ C 0 -400 100 R 30 30 0 1 P +X ~ D 0 -500 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ E 0 -600 100 R 30 30 0 1 P +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ Y1 600 0 100 L 30 30 0 1 P +X ~ Y2 600 -100 100 L 30 30 0 1 P +X ~ Y3 600 -200 100 L 30 30 0 1 P +X ~ Y4 600 -300 100 L 30 30 0 1 P +X ~ Y5 600 -400 100 L 30 30 0 1 P +X ~ Y6 600 -500 100 L 30 30 0 1 P +X ~ Y7 600 -600 100 L 30 30 0 1 P +X ~ Y8 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 185_PSPICE +# +DEF 185_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "185_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ A 0 -200 100 R 30 30 0 1 P +X ~ B 0 -300 100 R 30 30 0 1 P +X ~ C 0 -400 100 R 30 30 0 1 P +X ~ D 0 -500 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ E 0 -600 100 R 30 30 0 1 P +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ Y1 600 0 100 L 30 30 0 1 P +X ~ Y2 600 -100 100 L 30 30 0 1 P +X ~ Y3 600 -200 100 L 30 30 0 1 P +X ~ Y4 600 -300 100 L 30 30 0 1 P +X ~ Y5 600 -400 100 L 30 30 0 1 P +X ~ Y6 600 -500 100 L 30 30 0 1 P +X ~ Y7 600 -600 100 L 30 30 0 1 P +X ~ Y8 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 194_PSPICE +# +DEF 194_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "194_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ S1 0 0 100 R 30 30 0 1 P +X ~ S0 0 -100 100 R 30 30 0 1 P +X ~ SR 0 -300 100 R 30 30 0 1 P +X ~ A 0 -400 100 R 30 30 0 1 P +X ~ B 0 -500 100 R 30 30 0 1 P +X ~ C 0 -600 100 R 30 30 0 1 P +X ~ D 0 -700 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ SL 0 -200 100 R 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 195_PSPICE +# +DEF 195_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "195_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1200 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1300 100 U 30 30 0 1 W +X ~ SH/\LD\ 0 0 100 R 30 30 0 1 P +X ~ J 0 -200 100 R 30 30 0 1 P +X ~ \K\ 0 -300 100 R 30 30 0 1 P +X ~ CLK 0 -1000 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1300 100 U 30 30 0 1 P +X ~ A 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ C 0 -700 100 R 30 30 0 1 P +X ~ D 0 -800 100 R 30 30 0 1 P +X ~ QA 600 -200 100 L 30 30 0 1 P +X ~ QB 600 -400 100 L 30 30 0 1 P +X ~ QC 600 -600 100 L 30 30 0 1 P +X ~ QD 600 -800 100 L 30 30 0 1 P +X ~ \Q\D 600 -1000 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 196_PSPICE +# +DEF 196_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "196_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ CLK1 0 -200 100 R 30 30 0 1 P +X ~ CLK2 0 -300 100 R 30 30 0 1 P +X ~ A 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ C 0 -700 100 R 30 30 0 1 P +X ~ D 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 197_PSPICE +# +DEF 197_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "197_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \LOAD\ 0 0 100 R 30 30 0 1 P +X ~ CLK1 0 -200 100 R 30 30 0 1 P +X ~ CLK2 0 -300 100 R 30 30 0 1 P +X ~ A 0 -500 100 R 30 30 0 1 P +X ~ B 0 -600 100 R 30 30 0 1 P +X ~ C 0 -700 100 R 30 30 0 1 P +X ~ D 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 246_PSPICE +# +DEF 246_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "246_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ INA 0 0 100 R 30 30 0 1 P +X ~ INB 0 -100 100 R 30 30 0 1 P +X ~ INC 0 -200 100 R 30 30 0 1 P +X ~ IND 0 -300 100 R 30 30 0 1 P +X ~ \BI\/\RBO\ 0 -800 100 R 30 30 0 1 P +X ~ \LT\ 0 -600 100 R 30 30 0 1 P +X ~ \RBI\ 0 -700 100 R 30 30 0 1 P +X ~ OUTA 600 0 100 L 30 30 0 1 P +X ~ OUTB 600 -100 100 L 30 30 0 1 P +X ~ OUTC 600 -200 100 L 30 30 0 1 P +X ~ OUTD 600 -300 100 L 30 30 0 1 P +X ~ OUTE 600 -400 100 L 30 30 0 1 P +X ~ OUTF 600 -500 100 L 30 30 0 1 P +X ~ OUTG 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 247_PSPICE +# +DEF 247_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "247_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ INA 0 0 100 R 30 30 0 1 P +X ~ INB 0 -100 100 R 30 30 0 1 P +X ~ INC 0 -200 100 R 30 30 0 1 P +X ~ IND 0 -300 100 R 30 30 0 1 P +X ~ \BI\/\RBO\ 0 -800 100 R 30 30 0 1 P +X ~ \LT\ 0 -600 100 R 30 30 0 1 P +X ~ \RBI\ 0 -700 100 R 30 30 0 1 P +X ~ OUTA 600 0 100 L 30 30 0 1 P +X ~ OUTB 600 -100 100 L 30 30 0 1 P +X ~ OUTC 600 -200 100 L 30 30 0 1 P +X ~ OUTD 600 -300 100 L 30 30 0 1 P +X ~ OUTE 600 -400 100 L 30 30 0 1 P +X ~ OUTF 600 -500 100 L 30 30 0 1 P +X ~ OUTG 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 248_PSPICE +# +DEF 248_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "248_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ INA 0 0 100 R 30 30 0 1 P +X ~ INB 0 -100 100 R 30 30 0 1 P +X ~ INC 0 -200 100 R 30 30 0 1 P +X ~ IND 0 -300 100 R 30 30 0 1 P +X ~ \BI\/\RBO\ 0 -800 100 R 30 30 0 1 P +X ~ \LT\ 0 -600 100 R 30 30 0 1 P +X ~ \RBI\ 0 -700 100 R 30 30 0 1 P +X ~ OUTA 600 0 100 L 30 30 0 1 P +X ~ OUTB 600 -100 100 L 30 30 0 1 P +X ~ OUTC 600 -200 100 L 30 30 0 1 P +X ~ OUTD 600 -300 100 L 30 30 0 1 P +X ~ OUTE 600 -400 100 L 30 30 0 1 P +X ~ OUTF 600 -500 100 L 30 30 0 1 P +X ~ OUTG 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 249_PSPICE +# +DEF 249_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "249_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ INA 0 0 100 R 30 30 0 1 P +X ~ INB 0 -100 100 R 30 30 0 1 P +X ~ INC 0 -200 100 R 30 30 0 1 P +X ~ IND 0 -300 100 R 30 30 0 1 P +X ~ \BI\/\RBO\ 0 -800 100 R 30 30 0 1 P +X ~ \LT\ 0 -600 100 R 30 30 0 1 P +X ~ \RBI\ 0 -700 100 R 30 30 0 1 P +X ~ OUTA 600 0 100 L 30 30 0 1 P +X ~ OUTB 600 -100 100 L 30 30 0 1 P +X ~ OUTC 600 -200 100 L 30 30 0 1 P +X ~ OUTD 600 -300 100 L 30 30 0 1 P +X ~ OUTE 600 -400 100 L 30 30 0 1 P +X ~ OUTF 600 -500 100 L 30 30 0 1 P +X ~ OUTG 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 251_PSPICE +# +DEF 251_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "251_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1400 0 1 0 N +X ~ D0 0 -200 100 R 30 30 0 1 P +X ~ D1 0 -300 100 R 30 30 0 1 P +X ~ D2 0 -400 100 R 30 30 0 1 P +X ~ D3 0 -500 100 R 30 30 0 1 P +X ~ D4 0 -600 100 R 30 30 0 1 P +X ~ D6 0 -800 100 R 30 30 0 1 P +X ~ D7 0 -900 100 R 30 30 0 1 P +X ~ A 0 -1100 100 R 30 30 0 1 P +X ~ B 0 -1200 100 R 30 30 0 1 P +X ~ C 0 -1300 100 R 30 30 0 1 P +X ~ Y 600 -200 100 L 30 30 0 1 P +X ~ \W\ 600 -400 100 L 30 30 0 1 P +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1500 100 U 30 30 0 1 W +X ~ D5 0 -700 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 259_PSPICE +# +DEF 259_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "259_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1000 100 U 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ D 0 -200 100 R 30 30 0 1 P +X ~ S0 0 -400 100 R 30 30 0 1 P +X ~ S1 0 -500 100 R 30 30 0 1 P +X ~ S2 0 -600 100 R 30 30 0 1 P +X ~ Q0 600 0 100 L 30 30 0 1 P +X ~ Q1 600 -100 100 L 30 30 0 1 P +X ~ Q2 600 -200 100 L 30 30 0 1 P +X ~ Q3 600 -300 100 L 30 30 0 1 P +X ~ Q4 600 -400 100 L 30 30 0 1 P +X ~ Q5 600 -500 100 L 30 30 0 1 P +X ~ Q6 600 -600 100 L 30 30 0 1 P +X ~ Q7 600 -700 100 L 30 30 0 1 P +X ~ \CLR\ 300 -1000 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 265_PSPICE +# +DEF 265_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "265_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ 1W 600 0 100 L 30 30 0 1 P +X ~ 1Y 600 -100 100 L 30 30 0 1 P +X ~ 2A 0 -300 100 R 30 30 0 1 P +X ~ 2B 0 -400 100 R 30 30 0 1 P +X ~ 2W 600 -300 100 L 30 30 0 1 P +X ~ 2Y 600 -400 100 L 30 30 0 1 P +X ~ 3A 0 -600 100 R 30 30 0 1 P +X ~ 3B 0 -700 100 R 30 30 0 1 P +X ~ 3Y 600 -700 100 L 30 30 0 1 P +X ~ 4A 0 -900 100 R 30 30 0 1 P +X ~ 4W 600 -900 100 L 30 30 0 1 P +X ~ 3W 600 -600 100 L 30 30 0 1 P +X ~ 4Y 600 -1000 100 L 30 30 0 1 P +X ~ 1A 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 273_PSPICE +# +DEF 273_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "273_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ D1 0 0 100 R 30 30 0 1 P +X ~ D2 0 -100 100 R 30 30 0 1 P +X ~ D3 0 -200 100 R 30 30 0 1 P +X ~ D4 0 -300 100 R 30 30 0 1 P +X ~ D5 0 -400 100 R 30 30 0 1 P +X ~ D6 0 -500 100 R 30 30 0 1 P +X ~ D7 0 -600 100 R 30 30 0 1 P +X ~ D8 0 -700 100 R 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +X ~ Q1 600 0 100 L 30 30 0 1 P +X ~ Q2 600 -100 100 L 30 30 0 1 P +X ~ Q3 600 -200 100 L 30 30 0 1 P +X ~ Q4 600 -300 100 L 30 30 0 1 P +X ~ Q5 600 -400 100 L 30 30 0 1 P +X ~ Q6 600 -500 100 L 30 30 0 1 P +X ~ Q7 600 -600 100 L 30 30 0 1 P +X ~ Q8 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 276_PSPICE +# +DEF 276_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "276_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -1300 0 1 0 N +X ~ PWR 200 300 100 D 30 30 0 1 W +X ~ GND 200 -1400 100 U 30 30 0 1 W +X ~ \PRE\ 300 300 100 D 30 30 0 1 P +X ~ 1J 0 0 100 R 30 30 0 1 P +X ~ 1\K\ 0 -200 100 R 30 30 0 1 P +X ~ 1CLK 0 -100 100 R 30 30 0 1 P +X ~ 2J 0 -300 100 R 30 30 0 1 P +X ~ 2CLK 0 -400 100 R 30 30 0 1 P +X ~ 2\K\ 0 -500 100 R 30 30 0 1 P +X ~ 3J 0 -600 100 R 30 30 0 1 P +X ~ 3CLK 0 -700 100 R 30 30 0 1 P +X ~ 3\K\ 0 -800 100 R 30 30 0 1 P +X ~ 4J 0 -900 100 R 30 30 0 1 P +X ~ 4CLK 0 -1000 100 R 30 30 0 1 P +X ~ 4\K\ 0 -1100 100 R 30 30 0 1 P +X ~ 1Q 600 0 100 L 30 30 0 1 P +X ~ 2Q 600 -300 100 L 30 30 0 1 P +X ~ 3Q 600 -600 100 L 30 30 0 1 P +X ~ 4Q 600 -900 100 L 30 30 0 1 P +X ~ \CLR\ 300 -1400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 278_PSPICE +# +DEF 278_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "278_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -700 0 1 0 N +X ~ GND 300 -800 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ P0 0 0 100 R 30 30 0 1 P +X ~ STRB 0 -100 100 R 30 30 0 1 P +X ~ D1 0 -300 100 R 30 30 0 1 P +X ~ D2 0 -400 100 R 30 30 0 1 P +X ~ D3 0 -500 100 R 30 30 0 1 P +X ~ D4 0 -600 100 R 30 30 0 1 P +X ~ P1 600 0 100 L 30 30 0 1 P +X ~ Y1 600 -300 100 L 30 30 0 1 P +X ~ Y2 600 -400 100 L 30 30 0 1 P +X ~ Y3 600 -500 100 L 30 30 0 1 P +X ~ Y4 600 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 279_PSPICE +# +DEF 279_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "279_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -600 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -700 100 U 30 30 0 1 W +X ~ 1\R\ 0 0 100 R 30 30 0 1 P +X ~ 1\S\1 0 -100 100 R 30 30 0 1 P +X ~ 1\S\2 0 -200 100 R 30 30 0 1 P +X ~ 2\R\ 0 -400 100 R 30 30 0 1 P +X ~ 2\S\ 0 -500 100 R 30 30 0 1 P +X ~ 1Q 600 -200 100 L 30 30 0 1 P +X ~ 2Q 600 -500 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 283_PSPICE +# +DEF 283_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "283_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1100 100 U 30 30 0 1 W +X ~ A1 0 -700 100 R 30 30 0 1 P +X ~ A2 0 -500 100 R 30 30 0 1 P +X ~ A3 0 -300 100 R 30 30 0 1 P +X ~ A4 0 -100 100 R 30 30 0 1 P +X ~ B1 0 -600 100 R 30 30 0 1 P +X ~ B2 0 -400 100 R 30 30 0 1 P +X ~ B3 0 -200 100 R 30 30 0 1 P +X ~ B4 0 0 100 R 30 30 0 1 P +X ~ C0 0 -900 100 R 30 30 0 1 P +X ~ C4 600 -900 100 L 30 30 0 1 P +X ~ SUM1 600 -700 100 L 30 30 0 1 P +X ~ SUM2 600 -500 100 L 30 30 0 1 P +X ~ SUM3 600 -300 100 L 30 30 0 1 P +X ~ SUM4 600 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 290_PSPICE +# +DEF 290_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "290_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -800 0 1 0 N +X ~ GND 300 -900 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ R91 0 0 100 R 30 30 0 1 P +X ~ R92 0 -100 100 R 30 30 0 1 P +X ~ CLKA 0 -300 100 R 30 30 0 1 P +X ~ CLKB 0 -400 100 R 30 30 0 1 P +X ~ R01 0 -600 100 R 30 30 0 1 P +X ~ QA 600 -100 100 L 30 30 0 1 P +X ~ QB 600 -300 100 L 30 30 0 1 P +X ~ QC 600 -500 100 L 30 30 0 1 P +X ~ QD 600 -700 100 L 30 30 0 1 P +X ~ R02 0 -700 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 293_PSPICE +# +DEF 293_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "293_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -500 0 1 0 N +X ~ GND 300 -600 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ CLKA 0 0 100 R 30 30 0 1 P +X ~ CLKB 0 -100 100 R 30 30 0 1 P +X ~ R01 0 -300 100 R 30 30 0 1 P +X ~ R02 0 -400 100 R 30 30 0 1 P +X ~ QA 600 0 100 L 30 30 0 1 P +X ~ QB 600 -100 100 L 30 30 0 1 P +X ~ QC 600 -200 100 L 30 30 0 1 P +X ~ QD 600 -300 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 298_PSPICE +# +DEF 298_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "298_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1100 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -1200 100 U 30 30 0 1 W +X ~ WS 0 0 100 R 30 30 0 1 P +X ~ A1 0 -200 100 R 30 30 0 1 P +X ~ A2 0 -300 100 R 30 30 0 1 P +X ~ B1 0 -400 100 R 30 30 0 1 P +X ~ B2 0 -500 100 R 30 30 0 1 P +X ~ C1 0 -600 100 R 30 30 0 1 P +X ~ C2 0 -700 100 R 30 30 0 1 P +X ~ D1 0 -800 100 R 30 30 0 1 P +X ~ D2 0 -900 100 R 30 30 0 1 P +X ~ CLK 0 -1000 100 R 30 30 0 1 P +X ~ QA 600 -200 100 L 30 30 0 1 P +X ~ QB 600 -400 100 L 30 30 0 1 P +X ~ QC 600 -600 100 L 30 30 0 1 P +X ~ QD 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 351_PSPICE +# +DEF 351_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "351_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -2000 0 1 0 N +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ GND 300 -2100 100 U 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 P +X ~ 1D0 0 -200 100 R 30 30 0 1 P +X ~ 1D1 0 -300 100 R 30 30 0 1 P +X ~ 1D2 0 -400 100 R 30 30 0 1 P +X ~ 1D3 0 -500 100 R 30 30 0 1 P +X ~ D4 0 -1200 100 R 30 30 0 1 P +X ~ D5 0 -1300 100 R 30 30 0 1 P +X ~ D6 0 -1400 100 R 30 30 0 1 P +X ~ D7 0 -1500 100 R 30 30 0 1 P +X ~ A 0 -1700 100 R 30 30 0 1 P +X ~ B 0 -1800 100 R 30 30 0 1 P +X ~ C 0 -1900 100 R 30 30 0 1 P +X ~ 2D0 0 -700 100 R 30 30 0 1 P +X ~ 2D1 0 -800 100 R 30 30 0 1 P +X ~ 2D2 0 -900 100 R 30 30 0 1 P +X ~ 2D3 0 -1000 100 R 30 30 0 1 P +X ~ 1Y 600 -200 100 L 30 30 0 1 P +X ~ 2Y 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 365_PSPICE +# +DEF 365_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "365_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \G\1 0 0 100 R 30 30 0 1 P +X ~ \G\2 0 -100 100 R 30 30 0 1 P +X ~ A1 0 -300 100 R 30 30 0 1 P +X ~ A2 0 -400 100 R 30 30 0 1 P +X ~ A3 0 -500 100 R 30 30 0 1 P +X ~ A4 0 -600 100 R 30 30 0 1 P +X ~ A5 0 -700 100 R 30 30 0 1 P +X ~ A6 0 -800 100 R 30 30 0 1 P +X ~ Y1 600 -300 100 L 30 30 0 1 P +X ~ Y2 600 -400 100 L 30 30 0 1 P +X ~ Y3 600 -500 100 L 30 30 0 1 P +X ~ Y4 600 -600 100 L 30 30 0 1 P +X ~ Y5 600 -700 100 L 30 30 0 1 P +X ~ Y6 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 366_PSPICE +# +DEF 366_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "366_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ \G\1 0 0 100 R 30 30 0 1 P +X ~ \G\2 0 -100 100 R 30 30 0 1 P +X ~ A1 0 -300 100 R 30 30 0 1 P +X ~ A2 0 -400 100 R 30 30 0 1 P +X ~ A3 0 -500 100 R 30 30 0 1 P +X ~ A4 0 -600 100 R 30 30 0 1 P +X ~ A5 0 -700 100 R 30 30 0 1 P +X ~ A6 0 -800 100 R 30 30 0 1 P +X ~ Y1 600 -300 100 L 30 30 0 1 P +X ~ Y2 600 -400 100 L 30 30 0 1 P +X ~ Y3 600 -500 100 L 30 30 0 1 P +X ~ Y4 600 -600 100 L 30 30 0 1 P +X ~ Y5 600 -700 100 L 30 30 0 1 P +X ~ Y6 600 -800 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 367_PSPICE +# +DEF 367_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "367_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 1\G\ 0 0 100 R 30 30 0 1 P +X ~ 1A1 0 -100 100 R 30 30 0 1 P +X ~ 1A2 0 -200 100 R 30 30 0 1 P +X ~ 1A3 0 -300 100 R 30 30 0 1 P +X ~ 1A4 0 -400 100 R 30 30 0 1 P +X ~ 2\G\ 0 -600 100 R 30 30 0 1 P +X ~ 2A1 0 -700 100 R 30 30 0 1 P +X ~ 2A2 0 -800 100 R 30 30 0 1 P +X ~ 1Y1 600 -100 100 L 30 30 0 1 P +X ~ 1Y2 600 -200 100 L 30 30 0 1 P +X ~ 1Y3 600 -300 100 L 30 30 0 1 P +X ~ 1Y4 600 -400 100 L 30 30 0 1 P +X ~ 2Y2 600 -800 100 L 30 30 0 1 P +X ~ 2Y1 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 368_PSPICE +# +DEF 368_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "368_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -900 0 1 0 N +X ~ GND 300 -1000 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 1\G\ 0 0 100 R 30 30 0 1 P +X ~ 1A1 0 -100 100 R 30 30 0 1 P +X ~ 1A2 0 -200 100 R 30 30 0 1 P +X ~ 1A3 0 -300 100 R 30 30 0 1 P +X ~ 1A4 0 -400 100 R 30 30 0 1 P +X ~ 2\G\ 0 -600 100 R 30 30 0 1 P +X ~ 2A1 0 -700 100 R 30 30 0 1 P +X ~ 2A2 0 -800 100 R 30 30 0 1 P +X ~ 1Y1 600 -100 100 L 30 30 0 1 P +X ~ 1Y2 600 -200 100 L 30 30 0 1 P +X ~ 1Y3 600 -300 100 L 30 30 0 1 P +X ~ 1Y4 600 -400 100 L 30 30 0 1 P +X ~ 2Y2 600 -800 100 L 30 30 0 1 P +X ~ 2Y1 600 -700 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 376_PSPICE +# +DEF 376_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "376_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -1000 0 1 0 N +X ~ GND 200 -1100 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ 1J 0 0 100 R 30 30 0 1 P +X ~ 2J 0 -200 100 R 30 30 0 1 P +X ~ 3J 0 -400 100 R 30 30 0 1 P +X ~ 4J 0 -600 100 R 30 30 0 1 P +X ~ 1\K\ 0 -100 100 R 30 30 0 1 P +X ~ 2\K\ 0 -300 100 R 30 30 0 1 P +X ~ 3\K\ 0 -500 100 R 30 30 0 1 P +X ~ 4\K\ 0 -700 100 R 30 30 0 1 P +X ~ 1Q 600 -100 100 L 30 30 0 1 P +X ~ 2Q 600 -300 100 L 30 30 0 1 P +X ~ 3Q 600 -500 100 L 30 30 0 1 P +X ~ 4Q 600 -700 100 L 30 30 0 1 P +X ~ CLK 0 -800 100 R 30 30 0 1 P +X ~ \CLR\ 300 -1100 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 390_PSPICE +# +DEF 390_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "390_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -400 0 1 0 N +X ~ GND 200 -500 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +X ~ CKA 0 0 100 R 30 30 0 1 P +X ~ CKB 0 -200 100 R 30 30 0 1 P +X ~ CLR 300 -500 100 U 30 30 0 1 P +X ~ QA 600 100 100 L 30 30 0 1 P +X ~ QB 600 0 100 L 30 30 0 1 P +X ~ QC 600 -100 100 L 30 30 0 1 P +X ~ QD 600 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 393_PSPICE +# +DEF 393_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "393_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 500 -400 0 1 0 N +X ~ GND 200 -500 100 U 30 30 0 1 W +X ~ PWR 300 200 100 D 30 30 0 1 W +X ~ A 0 0 100 R 30 30 0 1 P +X ~ QA 600 0 100 L 30 30 0 1 P +X ~ QB 600 -100 100 L 30 30 0 1 P +X ~ QC 600 -200 100 L 30 30 0 1 P +X ~ QD 600 -300 100 L 30 30 0 1 P +X ~ CLR 300 -500 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 425_PSPICE +# +DEF 425_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "425_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -140 N +C 250 -160 40 0 1 0 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ \G\ 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 426_PSPICE +# +DEF 426_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "426_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 -300 100 -100 N +P 2 0 1 0 100 -100 100 -500 N +P 2 0 1 0 100 -500 400 -300 N +P 2 0 1 0 100 0 250 0 N +P 2 0 1 0 250 0 250 -200 N +X ~ A 0 -300 100 R 30 30 0 1 I +X ~ Y 500 -300 100 L 30 30 0 1 O +X ~ GND 200 -530 100 U 30 30 0 1 W +X ~ PWR 200 -70 100 D 30 30 0 1 W +X ~ G 0 0 100 R 30 30 0 1 I +ENDDRAW +ENDDEF +# +# 490_PSPICE +# +DEF 490_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "490_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 200 500 -400 0 1 0 N +X ~ GND 200 -500 100 U 30 30 0 1 W +X ~ PWR 300 300 100 D 30 30 0 1 W +X ~ SET9 0 0 100 R 30 30 0 1 P +X ~ CLK 0 -200 100 R 30 30 0 1 P +X ~ CLR 300 -500 100 U 30 30 0 1 P +X ~ QA 600 100 100 L 30 30 0 1 P +X ~ QB 600 0 100 L 30 30 0 1 P +X ~ QC 600 -100 100 L 30 30 0 1 P +X ~ QD 600 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 411/OP_PSPICE +# +DEF 411/OP_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "411/OP_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -500 N +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 700 -200 100 100 N +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 600 0 500 -100 N +P 2 0 1 0 500 -300 600 -400 N +P 2 0 1 0 600 0 700 0 N +P 2 0 1 0 600 -400 700 -400 N +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ V+ 400 100 100 D 30 30 0 1 W +X ~ V- 400 -500 100 U 30 30 0 1 W +X ~ OUT 800 -200 100 L 30 30 0 1 O +X ~ B1 800 -400 100 L 30 30 0 1 I +X ~ B2 800 0 100 L 30 30 0 1 I +ENDDRAW +ENDDEF +# +# nmose_PSPICE +# +DEF nmose_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "nmose_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 290 -20 230 0 290 20 N +X ~ S 300 -200 100 U 30 30 0 1 P +X ~ G 0 0 100 R 30 30 0 1 P +X ~ D 300 200 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# 741/OP_PSPICE +# +DEF 741/OP_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "741/OP_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -500 N +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 700 -200 100 100 N +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 600 0 500 -100 N +P 2 0 1 0 500 -300 600 -400 N +P 2 0 1 0 600 0 700 0 N +P 2 0 1 0 600 -400 700 -400 N +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ V+ 400 100 100 D 30 30 0 1 W +X ~ V- 400 -500 100 U 30 30 0 1 W +X ~ OUT 800 -200 100 L 30 30 0 1 O +X ~ OS1 800 -400 100 L 30 30 0 1 I +X ~ OS2 800 0 100 L 30 30 0 1 I +ENDDRAW +ENDDEF +# +# NIGBT_PSPICE +# +DEF NIGBT_PSPICE Z 0 30 Y Y 1 F N +F0 "Z" 0 0 30 H V L CNN +F1 "NIGBT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 200 200 0 N +P 2 0 1 0 170 200 170 0 N +P 2 0 1 0 100 0 170 0 N +P 2 0 1 0 300 200 200 150 N +P 2 0 1 0 200 50 300 0 N +P 3 0 1 0 210 20 280 10 230 60 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ C 300 300 100 D 30 30 0 1 P +X ~ E 300 -100 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IXGH40N60_PSPICE +# +DEF IXGH40N60_PSPICE Z 0 30 Y Y 1 F N +F0 "Z" 0 0 30 H V L CNN +F1 "IXGH40N60_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 200 200 0 N +P 2 0 1 0 170 200 170 0 N +P 2 0 1 0 100 0 170 0 N +P 2 0 1 0 300 200 200 150 N +P 2 0 1 0 200 50 300 0 N +P 3 0 1 0 210 20 280 10 230 60 N +X ~ G 0 0 100 R 30 30 0 1 P +X ~ C 300 300 100 D 30 30 0 1 P +X ~ E 300 -100 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# D1N914_PSPICE +# +DEF D1N914_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "D1N914_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# d_PSPICE +# +DEF d_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "d_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# CD4016BD_PSPICE +# +DEF CD4016BD_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "CD4016BD_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 100 200 0 N +P 2 0 1 0 400 0 500 0 N +P 2 0 1 0 100 -200 100 -300 N +P 2 0 1 0 500 -200 500 -300 N +S 100 200 500 200 0 1 0 N +S 500 200 500 -200 0 1 0 N +S 100 -300 500 -300 0 1 0 N +S 100 200 100 200 0 1 0 N +S 100 200 100 -200 0 1 0 N +S 100 0 200 0 0 1 0 N +X ~ IN 0 0 100 R 30 30 0 1 P +X ~ OUT 600 0 100 L 30 30 0 1 P +X ~ VC 0 -200 100 R 30 30 0 1 P +X ~ VDD 300 300 100 D 30 30 0 1 P +X ~ VSS 300 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# T2coupled_PSPICE +# +DEF T2coupled_PSPICE T 0 30 Y Y 1 F N +F0 "T" 0 0 30 H V L CNN +F1 "T2coupled_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -200 0 1 0 N +X ~ in2 0 -100 100 R 30 30 0 1 P +X ~ out1 700 0 100 L 30 30 0 1 P +X ~ in1 0 0 100 R 30 30 0 1 P +X ~ out2 700 -100 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# T3coupled_PSPICE +# +DEF T3coupled_PSPICE T 0 30 Y Y 1 F N +F0 "T" 0 0 30 H V L CNN +F1 "T3coupled_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -300 0 1 0 N +X ~ in2 0 -100 100 R 30 30 0 1 P +X ~ out1 700 0 100 L 30 30 0 1 P +X ~ in1 0 0 100 R 30 30 0 1 P +X ~ out2 700 -100 100 L 30 30 0 1 P +X ~ out3 700 -200 100 L 30 30 0 1 P +X ~ in3 0 -200 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Q2N6052_PSPICE +# +DEF Q2N6052_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "Q2N6052_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 300 -50 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 100 -50 200 -100 N +P 2 0 1 0 300 -150 400 -200 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +P 3 0 1 0 390 -170 320 -160 370 -210 N +P 2 0 1 0 200 100 400 100 N +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 300 0 300 -200 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 400 100 400 0 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 400 200 100 D 30 30 0 1 P +X ~ 1 400 -300 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# Q2N6059_PSPICE +# +DEF Q2N6059_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "Q2N6059_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 300 -50 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 2 0 1 0 400 -200 300 -150 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +P 3 0 1 0 310 -180 380 -190 330 -140 N +P 2 0 1 0 200 100 400 100 N +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 300 0 300 -200 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 400 100 400 0 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 400 200 100 D 30 30 0 1 P +X ~ 1 400 -300 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# vdb_PSPICE +# +DEF vdb_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "vdb_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# idb_PSPICE +# +DEF idb_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "idb_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# vphase_PSPICE +# +DEF vphase_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "vphase_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# iphase_PSPICE +# +DEF iphase_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "iphase_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# vgroupdelay_PSPICE +# +DEF vgroupdelay_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "vgroupdelay_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# igroupdelay_PSPICE +# +DEF igroupdelay_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "igroupdelay_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# vreal_PSPICE +# +DEF vreal_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "vreal_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ireal_PSPICE +# +DEF ireal_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "ireal_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# vimaginary_PSPICE +# +DEF vimaginary_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "vimaginary_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# iimaginary_PSPICE +# +DEF iimaginary_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "iimaginary_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IMARKER_PSPICE +# +DEF IMARKER_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "IMARKER_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 230 200 180 N +P 2 0 1 0 180 230 220 230 N +P 2 0 1 0 180 180 220 180 N +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# NODEMARKER_PSPICE +# +DEF NODEMARKER_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "NODEMARKER_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VDIFFMARKER_PSPICE +# +DEF VDIFFMARKER_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "VDIFFMARKER_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 0 40 80 N +P 2 0 1 0 40 80 80 40 N +P 2 0 1 0 80 40 0 0 N +P 2 0 1 0 60 60 170 170 N +C 200 200 50 0 1 0 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# AGND_PSPICE +# +DEF AGND_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "AGND_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -50 -100 50 -100 N +P 2 0 1 0 -50 -100 0 -150 N +P 2 0 1 0 0 -150 50 -100 N +X ~ AGND 0 0 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# EGND_PSPICE +# +DEF EGND_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "EGND_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -50 -100 50 -100 N +P 2 0 1 0 -30 -120 30 -120 N +P 2 0 1 0 -10 -140 10 -140 N +X ~ EGND 0 0 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# +5V_PSPICE +# +DEF +5V_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "+5V_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 100 0 0 1 0 N +C 0 130 30 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# -5V_PSPICE +# +DEF -5V_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "-5V_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 100 0 0 1 0 N +C 0 130 30 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# BUBBLE_PSPICE +# +DEF BUBBLE_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "BUBBLE_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 100 0 0 1 0 N +C 0 130 30 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# GLOBAL_PSPICE +# +DEF GLOBAL_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "GLOBAL_PSPICE" 0 60 30 H V L CNN +DRAW +S -500 50 -100 -50 0 1 0 N +X ~ 1 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# OFFPAGE_PSPICE +# +DEF OFFPAGE_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "OFFPAGE_PSPICE" 0 60 30 H V L CNN +DRAW +S -500 50 -100 -50 0 1 0 N +X ~ 1 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IF_IN_PSPICE +# +DEF IF_IN_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "IF_IN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 0 -400 -50 N +P 2 0 1 0 -200 50 -100 0 N +P 2 0 1 0 -100 0 -200 -50 N +P 2 0 1 0 -140 0 -240 -50 N +P 2 0 1 0 -240 50 -140 0 N +P 2 0 1 0 -400 50 -500 0 N +P 2 0 1 0 -400 -50 -200 -50 N +P 2 0 1 0 -400 50 -200 50 N +X ~ 1 0 0 100 L 30 30 0 1 I +ENDDRAW +ENDDEF +# +# IF_OUT_PSPICE +# +DEF IF_OUT_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "IF_OUT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 500 0 400 -50 N +P 2 0 1 0 200 50 100 0 N +P 2 0 1 0 100 0 200 -50 N +P 2 0 1 0 460 0 360 -50 N +P 2 0 1 0 360 50 460 0 N +P 2 0 1 0 400 50 500 0 N +P 2 0 1 0 400 -50 200 -50 N +P 2 0 1 0 400 50 200 50 N +X ~ 1 0 0 100 R 30 30 0 1 O +ENDDRAW +ENDDEF +# +# INTERFACE_PSPICE +# +DEF INTERFACE_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "INTERFACE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 0 -400 -50 N +P 2 0 1 0 -200 50 -100 0 N +P 2 0 1 0 -100 0 -200 -50 N +P 2 0 1 0 -400 50 -500 0 N +P 2 0 1 0 -400 -50 -200 -50 N +P 2 0 1 0 -400 50 -200 50 N +X ~ 1 0 0 100 L 30 30 0 1 B +ENDDRAW +ENDDEF +# +# HI_PSPICE +# +DEF HI_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "HI_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -300 -50 -200 -50 N +P 2 0 1 0 -200 50 -300 50 N +P 2 0 1 0 -300 50 -300 -50 N +X ~ HI 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LO_PSPICE +# +DEF LO_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "LO_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -300 -50 -200 -50 N +P 2 0 1 0 -200 50 -300 50 N +P 2 0 1 0 -300 50 -300 -50 N +X ~ LO 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# NoConnect_PSPICE +# +DEF NoConnect_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "NoConnect_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 50 50 -50 -50 N +P 2 0 1 0 -50 50 50 -50 N +X ~ pin1 0 0 100 R 30 30 0 1 P +ENDDRAW +ENDDEF +# +# X_PSPICE +# +DEF X_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "X_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -300 50 -300 -50 N +P 2 0 1 0 -300 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -300 50 N +X ~ X 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# GND_ANALOG_PSPICE +# +DEF GND_ANALOG_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "GND_ANALOG_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -50 -100 50 -100 N +P 2 0 1 0 -50 -100 0 -150 N +P 2 0 1 0 0 -150 50 -100 N +X ~ AGND 0 0 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# GND_EARTH_PSPICE +# +DEF GND_EARTH_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "GND_EARTH_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -50 -100 50 -100 N +P 2 0 1 0 -30 -120 30 -120 N +P 2 0 1 0 -10 -140 10 -140 N +X ~ EGND 0 0 100 D 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DX_PSPICE +# +DEF DX_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "DX_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +P 2 0 1 0 200 50 200 -50 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# SG1524B_PSPICE +# +DEF SG1524B_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "SG1524B_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -800 0 1 0 N +X ~ 1 0 0 100 R 30 30 0 1 B +X ~ 2 0 -100 100 R 30 30 0 1 B +X ~ 3 0 -200 100 R 30 30 0 1 B +X ~ 4 0 -300 100 R 30 30 0 1 B +X ~ 5 0 -400 100 R 30 30 0 1 B +X ~ 7 0 -500 100 R 30 30 0 1 B +X ~ 8 0 -600 100 R 30 30 0 1 B +X ~ 9 0 -700 100 R 30 30 0 1 B +X ~ 10 700 0 100 L 30 30 0 1 B +X ~ 11 700 -100 100 L 30 30 0 1 B +X ~ 12 700 -200 100 L 30 30 0 1 B +X ~ 13 700 -300 100 L 30 30 0 1 B +X ~ 14 700 -400 100 L 30 30 0 1 B +X ~ 15 700 -500 100 L 30 30 0 1 B +X ~ 16 700 -600 100 L 30 30 0 1 B +ENDDRAW +ENDDEF +# +# LM723C_PSPICE +# +DEF LM723C_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LM723C_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -600 0 1 0 N +X ~ 2 0 0 100 R 30 30 0 1 B +X ~ 3 0 -100 100 R 30 30 0 1 B +X ~ 4 0 -200 100 R 30 30 0 1 B +X ~ 5 0 -300 100 R 30 30 0 1 B +X ~ 6 0 -400 100 R 30 30 0 1 B +X ~ 7 0 -500 100 R 30 30 0 1 B +X ~ 9 700 0 100 L 30 30 0 1 B +X ~ 10 700 -100 100 L 30 30 0 1 B +X ~ 11 700 -200 100 L 30 30 0 1 B +X ~ 12 700 -300 100 L 30 30 0 1 B +X ~ 13 700 -400 100 L 30 30 0 1 B +ENDDRAW +ENDDEF +# +# SCR3T_PSPICE +# +DEF SCR3T_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "SCR3T_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 100 50 100 -50 200 0 100 50 N +P 2 0 1 0 300 -100 200 0 N +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 300 0 200 0 N +X ~ A 0 0 100 R 30 30 0 1 P +X ~ K 400 0 100 L 30 30 0 1 P +X ~ G 300 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# LM7805C_PSPICE +# +DEF LM7805C_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LM7805C_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 1300 -200 0 1 0 N +X ~ INPUT 0 0 100 R 30 30 0 1 B +X ~ OUTPUT 1400 0 100 L 30 30 0 1 B +X ~ GROUND 700 -300 100 U 30 30 0 1 B +ENDDRAW +ENDDEF +# +# LM7815C_PSPICE +# +DEF LM7815C_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LM7815C_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 1300 -200 0 1 0 N +X ~ INPUT 0 0 100 R 30 30 0 1 B +X ~ OUTPUT 1400 0 100 L 30 30 0 1 B +X ~ GROUND 700 -300 100 U 30 30 0 1 B +ENDDRAW +ENDDEF +# +# LM7905C_PSPICE +# +DEF LM7905C_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LM7905C_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 1300 -200 0 1 0 N +X ~ INPUT 0 0 100 R 30 30 0 1 B +X ~ OUTPUT 1400 0 100 L 30 30 0 1 B +X ~ GROUND 700 -300 100 U 30 30 0 1 B +ENDDRAW +ENDDEF +# +# LM7915C_PSPICE +# +DEF LM7915C_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "LM7915C_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 1300 -200 0 1 0 N +X ~ INPUT 0 0 100 R 30 30 0 1 B +X ~ OUTPUT 1400 0 100 L 30 30 0 1 B +X ~ GROUND 700 -300 100 U 30 30 0 1 B +ENDDRAW +ENDDEF +# +# OP-07_PSPICE +# +DEF OP-07_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "OP-07_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 700 -200 100 100 N +P 2 0 1 0 100 -500 700 -200 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 100 100 100 -500 N +P 2 0 1 0 400 0 400 -50 N +X ~ OUT 800 -200 100 L 30 30 0 1 O +X ~ + 0 0 100 R 30 30 0 1 I +X ~ - 0 -400 100 R 30 30 0 1 I +X ~ V+ 400 100 100 D 30 30 0 1 I +X ~ V- 400 -500 100 U 30 30 0 1 I +ENDDRAW +ENDDEF +# +# OP_AMP_PSPICE +# +DEF OP_AMP_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "OP_AMP_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 1000 -400 0 1 0 N +X ~ NON_INV 0 0 100 R 30 30 0 1 B +X ~ INV 0 -300 100 R 30 30 0 1 B +X ~ OUT 1100 -100 100 L 30 30 0 1 B +ENDDRAW +ENDDEF +# +# IDEAL_TRAN_PSPICE +# +DEF IDEAL_TRAN_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "IDEAL_TRAN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 300 -500 300 -600 N +P 2 0 1 0 220 -100 220 -500 N +P 2 0 1 0 220 -500 220 -500 N +P 2 0 1 0 180 -100 180 -500 N +P 2 0 1 0 180 -500 180 -500 N +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# SCR2T_PSPICE +# +DEF SCR2T_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "SCR2T_PSPICE" 0 60 30 H V L CNN +DRAW +S 100 100 600 -100 0 1 0 N +X ~ A 0 0 100 R 30 30 0 1 B +X ~ K 700 0 100 L 30 30 0 1 B +ENDDRAW +ENDDEF +# +# CMOD_PSPICE +# +DEF CMOD_PSPICE K 0 30 Y Y 1 F N +F0 "K" 0 0 30 H V L CNN +F1 "CMOD_PSPICE" 0 60 30 H V L CNN +DRAW +S 0 100 100 0 0 1 0 N +T 0 20 20 30 0 0 0 K +ENDDRAW +ENDDEF +# +# Q_PI_PSPICE +# +DEF Q_PI_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "Q_PI_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +P 2 0 1 0 100 100 100 -100 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# COUPLED_INDUCTOR_PSPICE +# +DEF COUPLED_INDUCTOR_PSPICE TX 0 30 Y Y 1 F N +F0 "TX" 0 0 30 H V L CNN +F1 "COUPLED_INDUCTOR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 300 -500 300 -600 N +P 2 0 1 0 100 0 100 -100 N +P 2 0 1 0 100 -500 100 -600 N +P 2 0 1 0 300 0 300 -100 N +A 300 -350 50 901 2699 0 1 0 N 300 -300 300 -400 +A 100 -350 50 -899 899 0 1 0 N 100 -400 100 -300 +A 100 -250 50 -899 899 0 1 0 N 100 -300 100 -200 +A 100 -150 50 -899 899 0 1 0 N 100 -200 100 -100 +A 300 -150 50 901 2699 0 1 0 N 300 -100 300 -200 +A 300 -250 50 901 2699 0 1 0 N 300 -200 300 -300 +A 100 -450 50 -899 899 0 1 0 N 100 -500 100 -400 +A 300 -450 50 901 2699 0 1 0 N 300 -400 300 -500 +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 0 -600 100 R 30 30 0 1 P +X ~ 3 400 0 100 L 30 30 0 1 P +X ~ 4 400 -600 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# SCR_PSPICE +# +DEF SCR_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "SCR_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 100 50 100 -50 200 0 100 50 N +P 2 0 1 0 300 -100 200 0 N +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 300 0 200 0 N +X ~ A 0 0 100 R 30 30 0 1 P +X ~ K 400 0 100 L 30 30 0 1 P +X ~ G 300 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QM_PSPICE +# +DEF QM_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QM_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +P 2 0 1 0 100 100 100 -100 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# QN_PSPICE +# +DEF QN_PSPICE Q 0 30 Y Y 1 F N +F0 "Q" 0 0 30 H V L CNN +F1 "QN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +P 2 0 1 0 100 100 100 -100 N +X ~ 2 0 0 100 R 30 30 0 1 P +X ~ 3 200 200 100 D 30 30 0 1 P +X ~ 1 200 -200 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DXY_PSPICE +# +DEF DXY_PSPICE D 0 30 Y Y 1 F N +F0 "D" 0 0 30 H V L CNN +F1 "DXY_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +P 2 0 1 0 200 50 200 -50 N +X ~ 1 0 0 100 R 30 30 0 1 P +X ~ 2 300 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DigClock_PSPICE +# +DEF DigClock_PSPICE DSTM 0 30 Y Y 1 F N +F0 "DSTM" 0 0 30 H V L CNN +F1 "DigClock_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 50 -500 -50 N +P 2 0 1 0 -500 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -500 50 N +P 2 0 1 0 -360 -20 -310 -20 N +P 2 0 1 0 -310 -20 -310 20 N +P 2 0 1 0 -310 20 -260 20 N +P 2 0 1 0 -260 20 -260 -20 N +P 2 0 1 0 -260 -20 -210 -20 N +P 2 0 1 0 -210 -20 -210 20 N +P 2 0 1 0 -210 20 -160 20 N +X ~ 1 0 0 100 L 30 30 0 1 P +X ~ pwr -250 150 100 D 30 30 0 1 W +X ~ gnd -250 -150 100 U 30 30 0 1 W +ENDDRAW +ENDDEF +# +# FileStim_PSPICE +# +DEF FileStim_PSPICE DSTM 0 30 Y Y 1 F N +F0 "DSTM" 0 0 30 H V L CNN +F1 "FileStim_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 50 -500 -50 N +P 2 0 1 0 -500 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -500 50 N +P 2 0 1 0 -400 -20 -350 -20 N +P 2 0 1 0 -350 -20 -350 20 N +P 2 0 1 0 -350 20 -300 20 N +P 2 0 1 0 -300 20 -300 -20 N +P 2 0 1 0 -300 -20 -250 -20 N +P 2 0 1 0 -250 -20 -250 20 N +P 2 0 1 0 -250 20 -200 20 N +X ~ PWR -200 150 100 D 30 30 0 1 W +X ~ GND -200 -150 100 U 30 30 0 1 W +X ~ *1 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IAC_PSPICE +# +DEF IAC_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IAC_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +C 0 -200 100 0 1 0 N +A 30 -200 30 -1799 -1 0 1 0 N 0 -200 60 -200 +A -30 -200 30 1 1799 0 1 0 N 0 -200 -60 -200 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IDC_PSPICE +# +DEF IDC_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IDC_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -150 0 -250 N +P 2 0 1 0 0 -250 -50 -200 N +P 2 0 1 0 0 -250 50 -200 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IEXP_PSPICE +# +DEF IEXP_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IEXP_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +A -10 -230 60 716 1880 0 1 0 N 9 -173 -69 -238 +A 70 -170 60 -1799 -901 0 1 0 N 10 -170 70 -230 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPULSE_PSPICE +# +DEF IPULSE_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPULSE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -250 N +P 2 0 1 0 -40 -250 -20 -180 N +P 2 0 1 0 -20 -180 20 -180 N +P 2 0 1 0 20 -180 40 -250 N +P 2 0 1 0 40 -250 70 -250 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPWL_ENH_PSPICE +# +DEF IPWL_ENH_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPWL_ENH_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPWL_FILE_PSPICE +# +DEF IPWL_FILE_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPWL_FILE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPWL_PSPICE +# +DEF IPWL_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPWL_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ISFFM_PSPICE +# +DEF ISFFM_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "ISFFM_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +A -30 -200 30 1 1799 0 1 0 N 0 -200 -60 -200 +A 30 -200 30 -1799 -1 0 1 0 N 0 -200 60 -200 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ISIN_PSPICE +# +DEF ISIN_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "ISIN_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +A -30 -200 30 1 1799 0 1 0 N 0 -200 -60 -200 +A 30 -200 30 -1799 -1 0 1 0 N 0 -200 60 -200 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ISRC_PSPICE +# +DEF ISRC_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "ISRC_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -150 0 -250 N +P 2 0 1 0 0 -250 -50 -200 N +P 2 0 1 0 0 -250 50 -200 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# STIM1_PSPICE +# +DEF STIM1_PSPICE DSTM 0 30 Y Y 1 F N +F0 "DSTM" 0 0 30 H V L CNN +F1 "STIM1_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 50 -500 -50 N +P 2 0 1 0 -500 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -500 50 N +P 2 0 1 0 -450 -20 -400 -20 N +P 2 0 1 0 -400 -20 -400 20 N +P 2 0 1 0 -400 20 -350 20 N +P 2 0 1 0 -350 20 -350 -20 N +P 2 0 1 0 -350 -20 -300 -20 N +P 2 0 1 0 -300 -20 -300 20 N +P 2 0 1 0 -300 20 -250 20 N +X ~ pin1 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# STIM4_PSPICE +# +DEF STIM4_PSPICE DSTM 0 30 Y Y 1 F N +F0 "DSTM" 0 0 30 H V L CNN +F1 "STIM4_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 50 -500 -50 N +P 2 0 1 0 -500 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -500 50 N +P 2 0 1 0 -450 -20 -400 -20 N +P 2 0 1 0 -400 -20 -400 20 N +P 2 0 1 0 -400 20 -350 20 N +P 2 0 1 0 -350 20 -350 -20 N +P 2 0 1 0 -350 -20 -300 -20 N +P 2 0 1 0 -300 -20 -300 20 N +P 2 0 1 0 -300 20 -250 20 N +X ~ pin[0-3] 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# STIM8_PSPICE +# +DEF STIM8_PSPICE DSTM 0 30 Y Y 1 F N +F0 "DSTM" 0 0 30 H V L CNN +F1 "STIM8_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 50 -500 -50 N +P 2 0 1 0 -500 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -500 50 N +P 2 0 1 0 -450 -20 -400 -20 N +P 2 0 1 0 -400 -20 -400 20 N +P 2 0 1 0 -400 20 -350 20 N +P 2 0 1 0 -350 20 -350 -20 N +P 2 0 1 0 -350 -20 -300 -20 N +P 2 0 1 0 -300 -20 -300 20 N +P 2 0 1 0 -300 20 -250 20 N +X ~ pin[0-7] 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# STIM16_PSPICE +# +DEF STIM16_PSPICE DSTM 0 30 Y Y 1 F N +F0 "DSTM" 0 0 30 H V L CNN +F1 "STIM16_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 50 -500 -50 N +P 2 0 1 0 -500 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -500 50 N +P 2 0 1 0 -450 -20 -400 -20 N +P 2 0 1 0 -400 -20 -400 20 N +P 2 0 1 0 -400 20 -350 20 N +P 2 0 1 0 -350 20 -350 -20 N +P 2 0 1 0 -350 -20 -300 -20 N +P 2 0 1 0 -300 -20 -300 20 N +P 2 0 1 0 -300 20 -250 20 N +X ~ pin[0-15] 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VEXP_PSPICE +# +DEF VEXP_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VEXP_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +A -10 -230 60 716 1880 0 1 0 N 9 -173 -69 -238 +A 70 -170 60 -1799 -901 0 1 0 N 10 -170 70 -230 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPULSE_PSPICE +# +DEF VPULSE_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPULSE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -250 N +P 2 0 1 0 -40 -250 -20 -180 N +P 2 0 1 0 -20 -180 20 -180 N +P 2 0 1 0 20 -180 40 -250 N +P 2 0 1 0 40 -250 70 -250 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPWL_ENH_PSPICE +# +DEF VPWL_ENH_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPWL_ENH_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPWL_FILE_PSPICE +# +DEF VPWL_FILE_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPWL_FILE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPWL_PSPICE +# +DEF VPWL_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPWL_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VSFFM_PSPICE +# +DEF VSFFM_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VSFFM_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +A -30 -200 30 1 1799 0 1 0 N 0 -200 -60 -200 +A 30 -200 30 -1799 -1 0 1 0 N 0 -200 60 -200 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VSIN_PSPICE +# +DEF VSIN_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VSIN_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +A -30 -200 30 1 1799 0 1 0 N 0 -200 -60 -200 +A 30 -200 30 -1799 -1 0 1 0 N 0 -200 60 -200 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VSRC_PSPICE +# +DEF VSRC_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VSRC_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VAC_PSPICE +# +DEF VAC_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VAC_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +A -30 -200 30 1 1799 0 1 0 N 0 -200 -60 -200 +A 30 -200 30 -1799 -1 0 1 0 N 0 -200 60 -200 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VDC_PSPICE +# +DEF VDC_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VDC_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -100 -140 100 -140 N +P 2 0 1 0 -50 -170 50 -170 N +P 2 0 1 0 100 -200 -100 -200 N +P 2 0 1 0 -50 -240 50 -240 N +P 2 0 1 0 0 -90 0 -140 N +P 2 0 1 0 0 -300 0 -240 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPWL_RE_FOREVER_PSPICE +# +DEF IPWL_RE_FOREVER_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPWL_RE_FOREVER_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPWL_RE_N_TIMES_PSPICE +# +DEF IPWL_RE_N_TIMES_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPWL_RE_N_TIMES_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPWL_RE_FOREVER_PSPICE +# +DEF VPWL_RE_FOREVER_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPWL_RE_FOREVER_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPWL_RE_N_TIMES_PSPICE +# +DEF VPWL_RE_N_TIMES_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPWL_RE_N_TIMES_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPWL_F_RE_FOREVER_PSPICE +# +DEF IPWL_F_RE_FOREVER_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPWL_F_RE_FOREVER_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPWL_F_RE_N_TIMES_PSPICE +# +DEF VPWL_F_RE_N_TIMES_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPWL_F_RE_N_TIMES_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPWL_F_RE_FOREVER_PSPICE +# +DEF VPWL_F_RE_FOREVER_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VPWL_F_RE_FOREVER_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPWL_F_RE_N_TIMES_PSPICE +# +DEF IPWL_F_RE_N_TIMES_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "IPWL_F_RE_N_TIMES_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -70 -250 -40 -150 N +P 2 0 1 0 -40 -150 -10 -210 N +P 2 0 1 0 -10 -210 30 -210 N +P 2 0 1 0 30 -210 60 -130 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ISTIM_PSPICE +# +DEF ISTIM_PSPICE I 0 30 Y Y 1 F N +F0 "I" 0 0 30 H V L CNN +F1 "ISTIM_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -150 0 -250 N +P 2 0 1 0 0 -250 -50 -200 N +P 2 0 1 0 0 -250 50 -200 N +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VSTIM_PSPICE +# +DEF VSTIM_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "VSTIM_PSPICE" 0 60 30 H V L CNN +DRAW +C 0 -200 100 0 1 0 N +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DigStim_PSPICE +# +DEF DigStim_PSPICE DSTM 0 30 Y Y 1 F N +F0 "DSTM" 0 0 30 H V L CNN +F1 "DigStim_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -500 50 -500 -50 N +P 2 0 1 0 -500 -50 -200 -50 N +P 2 0 1 0 -200 -50 -100 0 N +P 2 0 1 0 -100 0 -200 50 N +P 2 0 1 0 -200 50 -500 50 N +P 2 0 1 0 -400 -20 -350 -20 N +P 2 0 1 0 -350 -20 -350 20 N +P 2 0 1 0 -350 20 -300 20 N +P 2 0 1 0 -300 20 -300 -20 N +P 2 0 1 0 -300 -20 -250 -20 N +P 2 0 1 0 -250 -20 -250 20 N +P 2 0 1 0 -250 20 -200 20 N +X ~ PWR -200 150 100 D 30 30 0 1 W +X ~ GND -200 -150 100 U 30 30 0 1 W +X ~ *OUT 0 0 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# CD4000_PWR_PSPICE +# +DEF CD4000_PWR_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "CD4000_PWR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -150 1500 -150 N +S 0 0 1500 -700 0 1 0 N +X ~ VDD -100 -300 100 R 30 30 0 1 P +X ~ AGND 500 -800 100 U 30 30 0 1 P +X ~ VSS 1600 -300 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# DIGIFPWR_PSPICE +# +DEF DIGIFPWR_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "DIGIFPWR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -150 1500 -150 N +S 0 0 1500 -700 0 1 0 N +X ~ PWR -100 -300 100 R 30 30 0 1 P +X ~ AGND 500 -800 100 U 30 30 0 1 P +X ~ GND 1600 -300 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ECL_100K_PWR_PSPICE +# +DEF ECL_100K_PWR_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "ECL_100K_PWR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -150 1600 -150 N +S 0 0 1600 -1200 0 1 0 N +X ~ VEE -100 -200 100 R 30 30 0 1 P +X ~ AGND 700 -1290 100 U 30 30 0 1 P +X ~ VCC1 1700 -200 100 L 30 30 0 1 P +X ~ VTT -100 -400 100 R 30 30 0 1 P +X ~ VCC2 1700 -400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# ECL_10K_PWR_PSPICE +# +DEF ECL_10K_PWR_PSPICE X 0 30 Y Y 1 F N +F0 "X" 0 0 30 H V L CNN +F1 "ECL_10K_PWR_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -150 1500 -150 N +S 0 0 1500 -1200 0 1 0 N +X ~ VEE -100 -200 100 R 30 30 0 1 P +X ~ AGND 700 -1300 100 U 30 30 0 1 P +X ~ VCC1 1600 -200 100 L 30 30 0 1 P +X ~ VTT -100 -400 100 R 30 30 0 1 P +X ~ VCC2 1600 -400 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IC1_PSPICE +# +DEF IC1_PSPICE IC 0 30 Y Y 1 F N +F0 "IC" 0 0 30 H V L CNN +F1 "IC1_PSPICE" 0 60 30 H V L CNN +DRAW +S -100 200 100 100 0 1 0 N +X ~ + 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IC2_PSPICE +# +DEF IC2_PSPICE IC 0 30 Y Y 1 F N +F0 "IC" 0 0 30 H V L CNN +F1 "IC2_PSPICE" 0 60 30 H V L CNN +DRAW +S 0 200 300 100 0 1 0 N +X ~ + 0 0 100 U 30 30 0 1 P +X ~ - 300 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPROBE_PSPICE +# +DEF IPROBE_PSPICE V 0 30 Y Y 1 F N +F0 "V" 0 0 30 H V L CNN +F1 "IPROBE_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 -230 50 -150 N +C 0 -200 100 0 1 0 N +A -10 -190 80 141 1639 0 1 0 N 67 -170 -86 -167 +X ~ + 0 0 100 D 30 30 0 1 P +X ~ - 0 -400 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# NODESET2_PSPICE +# +DEF NODESET2_PSPICE NS 0 30 Y Y 1 F N +F0 "NS" 0 0 30 H V L CNN +F1 "NODESET2_PSPICE" 0 60 30 H V L CNN +DRAW +S -100 200 300 100 0 1 0 N +X ~ + 0 0 100 U 30 30 0 1 P +X ~ - 200 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# OPTPARAM_PSPICE +# +DEF OPTPARAM_PSPICE PM 0 30 Y Y 1 F N +F0 "PM" 0 0 30 H V L CNN +F1 "OPTPARAM_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -400 0 900 0 N +ENDDRAW +ENDDEF +# +# PRINT1_PSPICE +# +DEF PRINT1_PSPICE PRINT 0 30 Y Y 1 F N +F0 "PRINT" 0 0 30 H V L CNN +F1 "PRINT1_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -50 200 0 200 N +P 2 0 1 0 0 200 0 280 N +P 2 0 1 0 0 280 100 280 N +P 2 0 1 0 100 280 100 200 N +P 2 0 1 0 100 200 70 170 N +P 2 0 1 0 70 170 -30 170 N +P 2 0 1 0 -30 170 0 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 100 200 150 200 N +P 2 0 1 0 20 260 80 260 N +P 2 0 1 0 20 240 80 240 N +P 2 0 1 0 20 220 80 220 N +P 2 0 1 0 20 200 80 200 N +P 2 0 1 0 50 130 80 130 N +C 130 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# PRINTDGTLCHG_PSPICE +# +DEF PRINTDGTLCHG_PSPICE PRINT 0 30 Y Y 1 F N +F0 "PRINT" 0 0 30 H V L CNN +F1 "PRINTDGTLCHG_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -50 200 0 200 N +P 2 0 1 0 0 200 0 280 N +P 2 0 1 0 0 280 100 280 N +P 2 0 1 0 100 280 100 200 N +P 2 0 1 0 100 200 70 170 N +P 2 0 1 0 70 170 -30 170 N +P 2 0 1 0 -30 170 0 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 100 200 150 200 N +P 2 0 1 0 20 260 80 260 N +P 2 0 1 0 20 240 80 240 N +P 2 0 1 0 20 220 80 220 N +P 2 0 1 0 20 200 80 200 N +P 2 0 1 0 50 130 80 130 N +C 130 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# UNKNOWN_PSPICE +# +DEF UNKNOWN_PSPICE *? 0 30 Y Y 1 F N +F0 "*?" 0 0 30 H V L CNN +F1 "UNKNOWN_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 -200 200 -300 N +S 0 0 400 -400 0 1 0 N +C 200 -350 20 0 1 0 N +A 200 -150 50 -899 899 0 1 0 N 200 -200 200 -100 +A 200 -150 50 1 1799 0 1 0 N 250 -150 150 -150 +ENDDRAW +ENDDEF +# +# VPRINT1_PSPICE +# +DEF VPRINT1_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "VPRINT1_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -50 200 0 200 N +P 2 0 1 0 0 280 100 280 N +P 2 0 1 0 100 280 100 200 N +P 2 0 1 0 100 200 70 170 N +P 2 0 1 0 70 170 -30 170 N +P 2 0 1 0 -30 170 0 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 100 200 150 200 N +P 2 0 1 0 20 260 80 260 N +P 2 0 1 0 20 240 80 240 N +P 2 0 1 0 20 220 80 220 N +P 2 0 1 0 20 200 80 200 N +P 2 0 1 0 50 130 80 130 N +P 2 0 1 0 0 200 0 280 N +C 130 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPRINT2_PSPICE +# +DEF VPRINT2_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "VPRINT2_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 120 260 180 260 N +P 2 0 1 0 120 240 180 240 N +P 2 0 1 0 120 220 180 220 N +P 2 0 1 0 120 200 180 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 100 200 100 280 N +C 230 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +X ~ 2 200 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPLOT1_PSPICE +# +DEF VPLOT1_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "VPLOT1_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -50 200 0 200 N +P 2 0 1 0 0 200 0 280 N +P 2 0 1 0 0 280 100 280 N +P 2 0 1 0 100 280 100 200 N +P 2 0 1 0 100 200 70 170 N +P 2 0 1 0 70 170 -30 170 N +P 2 0 1 0 -30 170 0 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 100 200 150 200 N +P 2 0 1 0 20 200 80 200 N +P 2 0 1 0 50 130 80 130 N +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -50 200 0 200 N +P 2 0 1 0 0 200 0 280 N +P 2 0 1 0 0 280 100 280 N +P 2 0 1 0 100 280 100 200 N +P 2 0 1 0 100 200 70 170 N +P 2 0 1 0 70 170 -30 170 N +P 2 0 1 0 -30 170 0 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 100 200 150 200 N +P 2 0 1 0 50 130 80 130 N +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -50 200 0 200 N +P 2 0 1 0 0 200 0 280 N +P 2 0 1 0 0 280 100 280 N +P 2 0 1 0 100 280 100 200 N +P 2 0 1 0 100 200 70 170 N +P 2 0 1 0 70 170 -30 170 N +P 2 0 1 0 -30 170 0 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 100 200 150 200 N +P 2 0 1 0 50 130 80 130 N +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 50 130 80 130 N +P 2 0 1 0 -100 100 100 100 N +P 2 0 1 0 100 100 150 150 N +P 2 0 1 0 150 150 150 200 N +P 2 0 1 0 150 200 100 150 N +P 2 0 1 0 100 150 -100 150 N +P 2 0 1 0 -100 150 -50 200 N +P 2 0 1 0 -50 200 0 200 N +P 2 0 1 0 0 200 0 280 N +P 2 0 1 0 0 280 100 280 N +P 2 0 1 0 100 280 100 200 N +P 2 0 1 0 100 200 70 170 N +P 2 0 1 0 70 170 -30 170 N +P 2 0 1 0 -30 170 0 200 N +P 2 0 1 0 -100 150 -100 100 N +P 2 0 1 0 100 150 100 100 N +P 2 0 1 0 100 200 150 200 N +P 2 0 1 0 50 130 80 130 N +P 2 0 1 0 -50 200 150 200 N +P 2 0 1 0 20 270 20 210 N +P 2 0 1 0 70 270 80 240 N +P 2 0 1 0 80 240 60 210 N +C 130 150 10 0 1 0 N +C 130 150 10 0 1 0 N +C 130 150 10 0 1 0 N +C 130 150 10 0 1 0 N +C 130 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# VPLOT2_PSPICE +# +DEF VPLOT2_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "VPLOT2_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 120 200 180 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 50 200 250 200 N +P 2 0 1 0 120 270 120 210 N +P 2 0 1 0 170 270 180 240 N +P 2 0 1 0 180 240 160 210 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +X ~ 2 200 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPRINT_PSPICE +# +DEF IPRINT_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "IPRINT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 120 200 180 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 50 200 250 200 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 120 260 180 260 N +P 2 0 1 0 120 240 180 240 N +P 2 0 1 0 120 220 180 220 N +P 2 0 1 0 120 200 180 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 150 0 150 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +X ~ 2 200 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# IPLOT_PSPICE +# +DEF IPLOT_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "IPLOT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 120 200 180 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 0 100 200 100 N +P 2 0 1 0 200 100 250 150 N +P 2 0 1 0 250 150 250 200 N +P 2 0 1 0 250 200 200 150 N +P 2 0 1 0 200 150 0 150 N +P 2 0 1 0 0 150 50 200 N +P 2 0 1 0 50 200 100 200 N +P 2 0 1 0 100 200 100 280 N +P 2 0 1 0 100 280 200 280 N +P 2 0 1 0 200 280 200 200 N +P 2 0 1 0 200 200 170 170 N +P 2 0 1 0 170 170 70 170 N +P 2 0 1 0 70 170 100 200 N +P 2 0 1 0 0 150 0 100 N +P 2 0 1 0 200 150 200 100 N +P 2 0 1 0 200 200 250 200 N +P 2 0 1 0 150 130 180 130 N +P 2 0 1 0 50 200 250 200 N +P 2 0 1 0 120 270 120 210 N +P 2 0 1 0 170 270 180 240 N +P 2 0 1 0 180 240 160 210 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +C 230 150 10 0 1 0 N +X ~ 1 0 0 100 U 30 30 0 1 P +X ~ 2 200 0 100 U 30 30 0 1 P +ENDDRAW +ENDDEF +# +# INCLUDE_PSPICE +# +DEF INCLUDE_PSPICE IN 0 30 Y Y 1 F N +F0 "IN" 0 0 30 H V L CNN +F1 "INCLUDE_PSPICE" 0 60 30 H V L CNN +DRAW +ENDDRAW +ENDDEF +# +# TBLK-D/E/F/H/J/K_PSPICE +# +DEF TBLK-D/E/F/H/J/K_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "TBLK-D/E/F/H/J/K_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -5120 2500 -5120 0 N +P 2 0 1 0 -4750 750 -4750 250 N +P 2 0 1 0 -3500 750 -3500 250 N +P 2 0 1 0 -3750 250 -3750 0 N +P 2 0 1 0 -1750 250 -1750 0 N +P 2 0 1 0 -5120 1880 0 1880 N +P 2 0 1 0 -5120 750 0 750 N +P 2 0 1 0 -5120 250 0 250 N +P 2 0 1 0 -5130 250 -5180 250 N +P 2 0 1 0 -5220 250 -5270 250 N +P 2 0 1 0 -5310 250 -5360 250 N +P 2 0 1 0 -5400 250 -5450 250 N +P 2 0 1 0 -5490 250 -5540 250 N +P 2 0 1 0 -5580 250 -5630 250 N +P 2 0 1 0 -5670 250 -5720 250 N +P 2 0 1 0 -5760 250 -5810 250 N +P 2 0 1 0 -5850 250 -5900 250 N +P 2 0 1 0 -5940 250 -5990 250 N +P 2 0 1 0 -6030 250 -6080 250 N +P 2 0 1 0 -6120 250 -6170 250 N +P 2 0 1 0 -6210 250 -6260 250 N +P 2 0 1 0 -6300 250 -6350 250 N +P 2 0 1 0 -6390 250 -6440 250 N +P 2 0 1 0 -6480 250 -6530 250 N +P 2 0 1 0 -6570 250 -6620 250 N +P 2 0 1 0 -6660 250 -6710 250 N +P 2 0 1 0 -6750 250 -6800 250 N +P 2 0 1 0 -6840 250 -6890 250 N +P 2 0 1 0 -6930 250 -6980 250 N +P 2 0 1 0 -7020 250 -7070 250 N +P 2 0 1 0 -500 730 -500 680 N +P 2 0 1 0 -500 640 -500 590 N +P 2 0 1 0 -500 550 -500 500 N +P 2 0 1 0 -500 460 -500 410 N +P 2 0 1 0 -500 370 -500 320 N +P 2 0 1 0 -500 280 -500 250 N +P 2 0 1 0 -7110 250 -7160 250 N +P 2 0 1 0 -7200 250 -7250 250 N +P 2 0 1 0 -7290 250 -7340 250 N +P 2 0 1 0 -7380 250 -7430 250 N +P 2 0 1 0 -7470 250 -7520 250 N +P 2 0 1 0 -7560 250 -7610 250 N +P 2 0 1 0 -5130 500 -5180 500 N +P 2 0 1 0 -5220 500 -5270 500 N +P 2 0 1 0 -5310 500 -5360 500 N +P 2 0 1 0 -5400 500 -5450 500 N +P 2 0 1 0 -5490 500 -5540 500 N +P 2 0 1 0 -5580 500 -5630 500 N +P 2 0 1 0 -5670 500 -5720 500 N +P 2 0 1 0 -5760 500 -5810 500 N +P 2 0 1 0 -5850 500 -5900 500 N +P 2 0 1 0 -5940 500 -5990 500 N +P 2 0 1 0 -6030 500 -6080 500 N +P 2 0 1 0 -6120 500 -6170 500 N +P 2 0 1 0 -6210 500 -6260 500 N +P 2 0 1 0 -6300 500 -6350 500 N +P 2 0 1 0 -6390 500 -6440 500 N +P 2 0 1 0 -6480 500 -6530 500 N +P 2 0 1 0 -6570 500 -6620 500 N +P 2 0 1 0 -6660 500 -6710 500 N +P 2 0 1 0 -6750 500 -6800 500 N +P 2 0 1 0 -6840 500 -6890 500 N +P 2 0 1 0 -6930 500 -6980 500 N +P 2 0 1 0 -7020 500 -7070 500 N +P 2 0 1 0 -7110 500 -7160 500 N +P 2 0 1 0 -7200 500 -7250 500 N +P 2 0 1 0 -7290 500 -7340 500 N +P 2 0 1 0 -7380 500 -7430 500 N +P 2 0 1 0 -7470 500 -7520 500 N +P 2 0 1 0 -7560 500 -7610 500 N +S -7620 2500 0 0 0 1 0 N +ENDDRAW +ENDDEF +# +# TBCONT-A/B/C/G_PSPICE +# +DEF TBCONT-A/B/C/G_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "TBCONT-A/B/C/G_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -3870 620 -3870 250 N +P 2 0 1 0 -2750 620 -2750 250 N +P 2 0 1 0 -3250 250 -3250 0 N +P 2 0 1 0 -1750 250 -1750 0 N +P 2 0 1 0 -4250 620 0 620 N +P 2 0 1 0 -4250 250 0 250 N +P 2 0 1 0 -380 580 -380 530 N +P 2 0 1 0 -380 490 -380 440 N +P 2 0 1 0 -380 400 -380 350 N +P 2 0 1 0 -380 310 -380 260 N +P 2 0 1 0 -4250 620 -4250 0 N +P 2 0 1 0 -4250 0 0 0 N +P 2 0 1 0 0 0 0 620 N +ENDDRAW +ENDDEF +# +# TBCONT-D/E/F/H/J/K_PSPICE +# +DEF TBCONT-D/E/F/H/J/K_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "TBCONT-D/E/F/H/J/K_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -4750 750 -4750 250 N +P 2 0 1 0 -3500 750 -3500 250 N +P 2 0 1 0 -3750 250 -3750 0 N +P 2 0 1 0 -1750 250 -1750 0 N +P 2 0 1 0 -5120 750 0 750 N +P 2 0 1 0 -5120 250 0 250 N +P 2 0 1 0 -500 730 -500 680 N +P 2 0 1 0 -500 640 -500 590 N +P 2 0 1 0 -500 550 -500 500 N +P 2 0 1 0 -500 460 -500 410 N +P 2 0 1 0 -500 370 -500 320 N +P 2 0 1 0 -450 280 -450 250 N +P 2 0 1 0 -5120 750 -5120 0 N +P 2 0 1 0 -5120 0 -20 0 N +P 2 0 1 0 -30 0 0 0 N +P 2 0 1 0 0 0 0 750 N +ENDDRAW +ENDDEF +# +# TBLK-A/B/C/G_PSPICE +# +DEF TBLK-A/B/C/G_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "TBLK-A/B/C/G_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 -4250 2000 -4250 0 N +P 2 0 1 0 -3870 620 -3870 250 N +P 2 0 1 0 -2750 620 -2750 250 N +P 2 0 1 0 -3250 250 -3250 0 N +P 2 0 1 0 -1750 250 -1750 0 N +P 2 0 1 0 -4250 1380 0 1380 N +P 2 0 1 0 -4250 620 0 620 N +P 2 0 1 0 -4250 250 0 250 N +P 2 0 1 0 -380 580 -380 530 N +P 2 0 1 0 -380 490 -380 440 N +P 2 0 1 0 -380 400 -380 350 N +P 2 0 1 0 -380 310 -380 260 N +P 2 0 1 0 -4290 250 -4340 250 N +P 2 0 1 0 -4380 250 -4430 250 N +P 2 0 1 0 -4470 250 -4520 250 N +P 2 0 1 0 -4560 250 -4610 250 N +P 2 0 1 0 -4650 250 -4700 250 N +P 2 0 1 0 -4740 250 -4790 250 N +P 2 0 1 0 -4830 250 -4880 250 N +P 2 0 1 0 -4920 250 -4970 250 N +P 2 0 1 0 -5010 250 -5060 250 N +P 2 0 1 0 -5100 250 -5150 250 N +P 2 0 1 0 -5190 250 -5240 250 N +P 2 0 1 0 -5280 250 -5330 250 N +P 2 0 1 0 -5370 250 -5420 250 N +P 2 0 1 0 -5460 250 -5510 250 N +P 2 0 1 0 -5550 250 -5600 250 N +P 2 0 1 0 -5640 250 -5690 250 N +P 2 0 1 0 -5730 250 -5780 250 N +P 2 0 1 0 -5820 250 -5870 250 N +P 2 0 1 0 -5910 250 -5960 250 N +P 2 0 1 0 -6000 250 -6050 250 N +P 2 0 1 0 -6090 250 -6140 250 N +P 2 0 1 0 -6180 250 -6230 250 N +P 2 0 1 0 -4290 500 -4340 500 N +P 2 0 1 0 -4380 500 -4430 500 N +P 2 0 1 0 -4470 500 -4520 500 N +P 2 0 1 0 -4560 500 -4610 500 N +P 2 0 1 0 -4650 500 -4700 500 N +P 2 0 1 0 -4740 500 -4790 500 N +P 2 0 1 0 -4830 500 -4880 500 N +P 2 0 1 0 -4920 500 -4970 500 N +P 2 0 1 0 -5010 500 -5060 500 N +P 2 0 1 0 -5100 500 -5150 500 N +P 2 0 1 0 -5190 500 -5240 500 N +P 2 0 1 0 -5280 500 -5330 500 N +P 2 0 1 0 -5370 500 -5420 500 N +P 2 0 1 0 -5460 500 -5510 500 N +P 2 0 1 0 -5550 500 -5600 500 N +P 2 0 1 0 -5640 500 -5690 500 N +P 2 0 1 0 -5730 500 -5780 500 N +P 2 0 1 0 -5820 500 -5870 500 N +P 2 0 1 0 -5910 500 -5960 500 N +P 2 0 1 0 -6000 500 -6050 500 N +P 2 0 1 0 -6090 500 -6140 500 N +P 2 0 1 0 -6180 500 -6230 500 N +S -6250 2000 0 0 0 1 0 N +ENDDRAW +ENDDEF +# +# COMP_PSPICE +# +DEF COMP_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "COMP_PSPICE" 0 60 30 H V L CNN +DRAW +P 4 0 1 0 100 100 700 -200 100 -500 100 100 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 400 0 400 -50 N +X ~ pin1 0 0 100 R 30 30 0 1 P +X ~ pin2 0 -300 100 R 30 30 0 1 P +X ~ pin3 800 -200 100 L 30 30 0 1 P +ENDDRAW +ENDDEF +# +# diode_PSPICE +# +DEF diode_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "diode_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 50 200 -50 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +P 2 0 1 0 100 0 120 0 N +ENDDRAW +ENDDEF +# +# npn_PSPICE +# +DEF npn_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "npn_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 200 -100 100 -50 N +P 3 0 1 0 110 -80 180 -90 130 -40 N +ENDDRAW +ENDDEF +# +# pnp_PSPICE +# +DEF pnp_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "pnp_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 100 100 -100 N +P 2 0 1 0 200 100 100 50 N +P 2 0 1 0 100 -50 200 -100 N +P 3 0 1 0 190 -70 120 -60 170 -110 N +ENDDRAW +ENDDEF +# +# zener_diode_PSPICE +# +DEF zener_diode_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "zener_diode_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 170 70 200 50 N +P 2 0 1 0 200 -50 230 -70 N +P 2 0 1 0 200 50 200 -50 N +P 2 0 1 0 100 0 120 0 N +P 4 0 1 0 120 50 120 -50 200 0 120 50 N +ENDDRAW +ENDDEF +# +# mosfet_n_3_PSPICE +# +DEF mosfet_n_3_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "mosfet_n_3_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 290 -20 230 0 290 20 N +ENDDRAW +ENDDEF +# +# mosfet_n_4_PSPICE +# +DEF mosfet_n_4_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "mosfet_n_4_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 290 -20 230 0 290 20 N +ENDDRAW +ENDDEF +# +# mosfet_p_3_PSPICE +# +DEF mosfet_p_3_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "mosfet_p_3_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 300 0 N +P 2 0 1 0 300 0 300 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 230 20 290 0 230 -20 N +ENDDRAW +ENDDEF +# +# mosfet_p_4_PSPICE +# +DEF mosfet_p_4_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "mosfet_p_4_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 150 0 N +P 2 0 1 0 150 100 150 -100 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 0 400 0 N +P 2 0 1 0 400 0 400 -100 N +P 2 0 1 0 200 130 200 70 N +P 2 0 1 0 200 30 200 -30 N +P 2 0 1 0 200 -70 200 -130 N +P 3 0 1 0 230 20 290 0 230 -20 N +ENDDRAW +ENDDEF +# +# opamp5_PSPICE +# +DEF opamp5_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "opamp5_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 4 0 1 0 100 100 700 -200 100 -500 100 100 N +ENDDRAW +ENDDEF +# +# opamp6_PSPICE +# +DEF opamp6_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "opamp6_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 700 -400 600 -400 N +P 2 0 1 0 600 -400 500 -300 N +P 4 0 1 0 100 100 700 -200 100 -500 100 100 N +ENDDRAW +ENDDEF +# +# opamp7_PSPICE +# +DEF opamp7_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "opamp7_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 400 0 400 -50 N +P 2 0 1 0 400 -400 400 -350 N +P 2 0 1 0 600 0 500 -100 N +P 2 0 1 0 500 -300 600 -400 N +P 2 0 1 0 600 0 700 0 N +P 2 0 1 0 600 -400 700 -400 N +P 4 0 1 0 100 100 700 -200 100 -500 100 100 N +ENDDRAW +ENDDEF +# +# GaAsFET_PSPICE +# +DEF GaAsFET_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "GaAsFET_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 100 0 200 0 N +ENDDRAW +ENDDEF +# +# IGBT_PSPICE +# +DEF IGBT_PSPICE 0 30 Y Y 1 F N +F0 "" 0 0 30 H V L CNN +F1 "IGBT_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 200 200 200 0 N +P 2 0 1 0 170 200 170 0 N +P 2 0 1 0 100 0 170 0 N +P 2 0 1 0 300 200 200 150 N +P 2 0 1 0 200 50 300 0 N +P 3 0 1 0 210 20 280 10 230 60 N +ENDDRAW +ENDDEF +# +# JFET_N_PSPICE +# +DEF JFET_N_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "JFET_N_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 -100 300 -100 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +P 3 0 1 0 110 20 170 0 110 -20 N +ENDDRAW +ENDDEF +# +# JFET_P_PSPICE +# +DEF JFET_P_PSPICE U 0 30 Y Y 1 F N +F0 "U" 0 0 30 H V L CNN +F1 "JFET_P_PSPICE" 0 60 30 H V L CNN +DRAW +P 2 0 1 0 100 0 200 0 N +P 2 0 1 0 200 130 200 -130 N +P 2 0 1 0 200 100 300 100 N +P 2 0 1 0 200 -100 300 -100 N +P 3 0 1 0 170 -20 110 0 170 20 N +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Plot.dcm b/Windows/dependencies/library/eSim_Plot.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_Plot.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Plot.lib b/Windows/dependencies/library/eSim_Plot.lib new file mode 100644 index 00000000..5654a3d2 --- /dev/null +++ b/Windows/dependencies/library/eSim_Plot.lib @@ -0,0 +1,84 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# plot_db +# +DEF plot_db U 0 40 Y Y 1 F N +F0 "U" 0 500 60 H V C CNN +F1 "plot_db" 200 350 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 500 100 0 1 0 N +X ~ ~ 0 200 200 U 50 50 1 1 I +ENDDRAW +ENDDEF +# +# plot_i2 +# +DEF plot_i2 U 0 40 Y Y 1 F N +F0 "U" 0 400 60 H V C CNN +F1 "plot_i2" 0 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 250 100 0 1 0 N +X + 1 -300 250 200 R 50 50 1 1 I +X - 2 300 250 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# plot_log +# +DEF plot_log U 0 40 Y Y 1 F N +F0 "U" 0 500 60 H V C CNN +F1 "plot_log" 200 350 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 500 100 0 1 0 N +X ~ ~ 0 200 200 U 50 50 1 1 I +ENDDRAW +ENDDEF +# +# plot_phase +# +DEF plot_phase U 0 40 Y Y 1 F N +F0 "U" 0 500 60 H V C CNN +F1 "plot_phase" 250 350 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 500 100 0 1 0 N +X ~ ~ 0 200 200 U 50 50 1 1 I +ENDDRAW +ENDDEF +# +# plot_v1 +# +DEF plot_v1 U 0 40 Y Y 1 F N +F0 "U" 0 500 60 H V C CNN +F1 "plot_v1" 200 350 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 500 100 0 1 0 N +X ~ ~ 0 200 200 U 50 50 1 1 I +ENDDRAW +ENDDEF +# +# plot_v2 +# +DEF plot_v2 U 0 40 Y Y 1 F N +F0 "U" 0 400 60 H V C CNN +F1 "plot_v2" 0 100 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 250 100 0 1 0 N +X + 1 -300 250 200 R 50 50 1 1 I +X - 2 300 250 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Power.dcm b/Windows/dependencies/library/eSim_Power.dcm new file mode 100644 index 00000000..1980d0d1 --- /dev/null +++ b/Windows/dependencies/library/eSim_Power.dcm @@ -0,0 +1,7 @@ +EESchema-DOCLIB Version 2.0 +# +$CMP SCR +D Thyristor +$ENDCMP +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Power.lib b/Windows/dependencies/library/eSim_Power.lib new file mode 100644 index 00000000..9e9dbcc8 --- /dev/null +++ b/Windows/dependencies/library/eSim_Power.lib @@ -0,0 +1,84 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# DIAC +# +DEF DIAC X 0 10 Y Y 1 F N +F0 "X" -200 250 50 H V C CNN +F1 "DIAC" -250 -200 50 H V C CNN +F2 "" 0 -50 60 H V C CNN +F3 "" 0 -50 60 H V C CNN +DRAW +P 2 0 1 0 -300 -100 0 -100 N +P 2 0 1 0 0 150 300 150 N +P 3 0 1 0 -300 150 -150 -100 0 150 F +P 3 0 1 0 150 150 0 -100 300 -100 F +X ~ 1 0 -300 200 U 70 70 1 1 P +X ~ 2 0 350 200 D 70 70 1 1 P +ENDDRAW +ENDDEF +# +# SCR +# +DEF SCR X 0 10 Y N 1 F N +F0 "X" 150 200 50 H V C CNN +F1 "SCR" 150 -350 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 2 0 0 0 -200 -150 200 -150 N +P 2 0 1 0 0 -150 -200 -400 N +P 3 0 1 0 -150 100 150 100 0 -150 F +X K 1 0 -550 400 U 60 70 1 1 I +X G 2 -350 -400 150 R 60 60 1 1 I +X A 3 0 400 300 D 60 60 1 1 I +ENDDRAW +ENDDEF +# +# eSim_GND +# +DEF eSim_GND #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -250 50 H I C CNN +F1 "eSim_GND" 0 -150 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +DRAW +P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N +X GND 1 0 0 0 D 50 50 1 1 W N +ENDDRAW +ENDDEF +# +# eSim_VCC +# +DEF eSim_VCC #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -150 50 H I C CNN +F1 "eSim_VCC" 0 150 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +DRAW +C 0 75 25 0 1 0 N +P 2 0 1 0 0 0 0 50 N +X VCC 1 0 0 0 U 50 50 1 1 W N +ENDDRAW +ENDDEF +# +# TRIAC +# +DEF TRIAC X 0 10 Y Y 1 F N +F0 "X" -250 250 50 H V C CNN +F1 "TRIAC" -300 -300 50 H V C CNN +F2 "" 0 -50 60 H V C CNN +F3 "" 0 -50 60 H V C CNN +DRAW +P 2 0 1 0 -300 -100 0 -100 N +P 2 0 1 0 -150 -100 -300 -250 N +P 2 0 1 0 0 150 300 150 N +P 3 0 1 0 -300 150 -150 -100 0 150 F +P 3 0 1 0 150 150 0 -100 300 -100 F +X ~ 1 0 -300 200 U 70 70 1 1 P +X ~ 2 0 350 200 D 70 70 1 1 P +X ~ 3 -500 -250 200 R 70 70 1 1 I +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Sources.dcm b/Windows/dependencies/library/eSim_Sources.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_Sources.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Sources.lib b/Windows/dependencies/library/eSim_Sources.lib new file mode 100644 index 00000000..d5958425 --- /dev/null +++ b/Windows/dependencies/library/eSim_Sources.lib @@ -0,0 +1,220 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# AC +# +DEF AC v 0 40 Y Y 1 F N +F0 "v" -200 100 60 H V C CNN +F1 "AC" -200 -50 60 H V C CNN +F2 "R1" -300 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +A -50 0 50 1 1799 0 1 0 N 0 0 -100 0 +A 50 0 50 -1799 -1 0 1 0 N 0 0 100 0 +C 0 0 150 0 1 0 N +X + 1 0 450 300 D 50 0 1 1 I +X - 2 0 -450 300 U 50 0 1 1 I +ENDDRAW +ENDDEF +# +# CCCS +# +DEF CCCS F 0 40 Y Y 1 F N +F0 "F" 0 150 50 H V C CNN +F1 "CCCS" -200 -50 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +S -100 100 100 -100 0 1 0 N +X + 1 -300 50 200 R 35 35 1 1 P +X - 2 300 50 200 L 35 35 1 1 P +X +c 3 -50 -200 100 U 35 35 1 1 P +X -c 4 50 -200 100 U 35 35 1 1 P +ENDDRAW +ENDDEF +# +# CCVS +# +DEF CCVS H 0 40 Y Y 1 F N +F0 "H" 0 150 50 H V C CNN +F1 "CCVS" -200 -50 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +S -100 100 100 -100 0 1 0 N +X + 1 -300 50 200 R 35 35 1 1 P +X - 2 300 50 200 L 35 35 1 1 P +X +c 3 -50 -200 100 U 35 35 1 1 P +X -c 4 50 -200 100 U 35 35 1 1 P +ENDDRAW +ENDDEF +# +# DC +# +DEF DC v 0 40 Y Y 1 F N +F0 "v" -200 100 60 H V C CNN +F1 "DC" -200 -50 60 H V C CNN +F2 "R1" -300 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +C 0 0 150 0 1 0 N +X + 1 0 450 300 D 50 50 1 1 P +X - 2 0 -450 300 U 50 50 1 1 P +ENDDRAW +ENDDEF +# +# VCCS +# +DEF VCCS G 0 40 Y Y 1 F N +F0 "G" 0 150 50 H V C CNN +F1 "VCCS" -200 -50 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +S -100 100 100 -100 0 1 0 N +X + 1 -300 50 200 R 35 35 1 1 P +X - 2 300 50 200 L 35 35 1 1 P +X +c 3 -50 -200 100 U 35 35 1 1 P +X -c 4 50 -200 100 U 35 35 1 1 P +ENDDRAW +ENDDEF +# +# VCVS +# +DEF VCVS E 0 40 Y Y 1 F N +F0 "E" 0 150 50 H V C CNN +F1 "VCVS" -200 -50 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +S -100 100 100 -100 0 1 0 N +X + 1 -300 50 200 R 35 35 1 1 P +X - 2 300 50 200 L 35 35 1 1 P +X +c 3 -50 -200 100 U 35 35 1 1 P +X -c 4 50 -200 100 U 35 35 1 1 P +ENDDRAW +ENDDEF +# +# exp +# +DEF exp v 0 40 Y Y 1 F N +F0 "v" -200 100 60 H V C CNN +F1 "exp" -200 -50 60 H V C CNN +F2 "R1" -300 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +A 1 -50 100 905 1800 0 1 0 N 0 50 -100 -50 +A 100 51 100 -1794 -900 0 1 0 N 0 50 100 -50 +C 0 0 150 0 1 0 N +X + 1 0 450 300 D 50 0 1 1 I +X - 2 0 -450 300 U 50 0 1 1 I +ENDDRAW +ENDDEF +# +# dc +# +DEF dc I 0 40 Y Y 1 F N +F0 "I" -200 100 60 H V C CNN +F1 "dc" -200 -50 60 H V C CNN +F2 "R1" -300 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +C 0 0 150 0 1 0 N +P 2 0 1 0 0 -100 0 -100 N +P 2 0 1 0 0 100 -50 50 N +P 2 0 1 0 0 100 0 -100 N +P 2 0 1 0 0 100 50 50 N +X ~ 1 0 450 300 D 50 50 1 1 P +X ~ 2 0 -450 300 U 50 50 1 1 P +ENDDRAW +ENDDEF +# +# pulse +# +DEF pulse v 0 40 Y Y 1 F N +F0 "v" -200 100 60 H V C CNN +F1 "pulse" -200 -50 60 H V C CNN +F2 "R1" -300 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +A -25 -450 501 928 871 0 1 0 N -50 50 0 50 +A 25 400 451 -931 -868 0 1 0 N 0 -50 50 -50 +A 75 600 551 -926 -873 0 1 0 N 50 50 100 50 +A 350 0 403 -1728 1728 0 1 0 N -50 -50 -50 50 +A 450 0 453 1736 -1736 0 1 0 N 0 50 0 -50 +A 600 0 552 -1748 1748 0 1 0 N 50 -50 50 50 +C 0 0 150 0 1 0 N +X + 1 0 450 300 D 50 50 1 1 P +X - 2 0 -450 300 U 50 50 1 1 P +ENDDRAW +ENDDEF +# +# pwl +# +DEF pwl v 0 40 Y Y 1 F N +F0 "v" -200 100 60 H V C CNN +F1 "pwl" -250 -50 60 H V C CNN +F2 "R1" -300 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +A -1144 -561 1253 291 240 0 1 0 N -50 50 0 -50 +A -765 421 941 -300 -232 0 1 0 N 50 -50 100 50 +A -75 -700 750 919 880 0 1 0 N -100 50 -50 50 +A 25 450 501 -928 -871 0 1 0 N 0 -50 50 -50 +A 1096 -609 1366 1511 1558 0 1 0 N -100 50 -150 -50 +C 0 0 150 0 1 0 N +X + 1 0 450 300 D 50 0 1 1 I +X - 2 0 -450 300 U 50 0 1 1 I +ENDDRAW +ENDDEF +# +# sine +# +DEF sine v 0 40 Y Y 1 F N +F0 "v" -200 100 60 H V C CNN +F1 "sine" -200 -50 60 H V C CNN +F2 "R1" -300 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + 1_pin +$ENDFPLIST +DRAW +A -50 0 50 1 1799 0 1 0 N 0 0 -100 0 +A 50 0 50 -1799 -1 0 1 0 N 0 0 100 0 +C 0 0 150 0 1 0 N +X + 1 0 450 300 D 50 0 1 1 I +X - 2 0 -450 300 U 50 0 1 1 I +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_Subckt.dcm b/Windows/dependencies/library/eSim_Subckt.dcm new file mode 100644 index 00000000..1980d0d1 --- /dev/null +++ b/Windows/dependencies/library/eSim_Subckt.dcm @@ -0,0 +1,7 @@ +EESchema-DOCLIB Version 2.0 +# +$CMP SCR +D Thyristor +$ENDCMP +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_Subckt.lib b/Windows/dependencies/library/eSim_Subckt.lib new file mode 100644 index 00000000..79daf246 --- /dev/null +++ b/Windows/dependencies/library/eSim_Subckt.lib @@ -0,0 +1,89 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# LM555N +# +DEF LM555N X 0 40 Y Y 1 F N +F0 "X" 0 -50 60 H V C CNN +F1 "LM555N" 0 100 60 H V C CNN +F2 "" -50 0 60 H V C CNN +F3 "" -50 0 60 H V C CNN +DRAW +S 350 -400 -350 400 0 1 0 N +X GND 1 0 -600 200 U 50 50 1 1 W +X TR 2 -550 250 200 R 50 50 1 1 I +X Q 3 550 250 200 L 50 50 1 1 O +X R 4 -550 -250 200 R 50 50 1 1 I I +X CV 5 -550 0 200 R 50 50 1 1 I +X THR 6 550 -250 200 L 50 50 1 1 I +X DIS 7 550 0 200 L 50 50 1 1 I +X VCC 8 0 600 200 D 50 50 1 1 W +ENDDRAW +ENDDEF +# +# SCR +# +DEF SCR X 0 10 Y N 1 F N +F0 "X" 150 200 50 H V C CNN +F1 "SCR" 150 -350 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 2 0 0 0 -200 -150 200 -150 N +P 2 0 1 0 0 -150 -200 -400 N +P 3 0 1 0 -150 100 150 100 0 -150 F +X A 1 0 400 300 D 60 60 1 1 I +X K 2 0 -550 400 U 60 70 1 1 I +X G 3 -350 -400 150 R 60 60 1 1 I +ENDDRAW +ENDDEF +# +# UA741 +# +DEF UA741 X 0 40 Y Y 1 F N +F0 "X" 150 0 60 H V C CNN +F1 "UA741" 250 -150 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 0 150 0 -150 350 0 0 150 N +X + 1 -200 100 200 R 50 50 1 1 I +X - 2 -200 -100 200 R 50 50 1 1 I +X ~ 3 550 0 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# full_adder +# +DEF full_adder X 0 40 Y Y 1 F N +F0 "X" 1400 700 60 H V C CNN +F1 "full_adder" 1400 600 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 800 1150 1950 0 0 1 0 N +X IN1 1 600 950 200 R 50 50 1 1 I +X IN2 2 600 550 200 R 50 50 1 1 I +X CIN 3 600 150 200 R 50 50 1 1 I +X SUM 4 2150 950 200 L 50 50 1 1 O +X COUT 5 2150 150 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +# half_adder +# +DEF half_adder X 0 40 Y Y 1 F N +F0 "X" 900 500 60 H V C CNN +F1 "half_adder" 900 400 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S 500 800 1250 0 0 1 0 N +X IN1 1 300 700 200 R 50 50 1 1 I +X IN2 2 300 100 200 R 50 50 1 1 I +X SUM 3 1450 700 200 L 50 50 1 1 O +X COUT 4 1450 100 200 L 50 50 1 1 O +ENDDRAW +ENDDEF +# +#End Library diff --git a/Windows/dependencies/library/eSim_User.dcm b/Windows/dependencies/library/eSim_User.dcm new file mode 100644 index 00000000..5f3ed79b --- /dev/null +++ b/Windows/dependencies/library/eSim_User.dcm @@ -0,0 +1,3 @@ +EESchema-DOCLIB Version 2.0 +# +#End Doc Library diff --git a/Windows/dependencies/library/eSim_User.lib b/Windows/dependencies/library/eSim_User.lib new file mode 100644 index 00000000..2063b3ae --- /dev/null +++ b/Windows/dependencies/library/eSim_User.lib @@ -0,0 +1,4 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +#End Library diff --git a/Windows/dependencies/matplotlib-1.4.0.win32-py3.3.exe b/Windows/dependencies/matplotlib-1.4.0.win32-py3.3.exe new file mode 100644 index 00000000..19cc26a9 Binary files /dev/null and b/Windows/dependencies/matplotlib-1.4.0.win32-py3.3.exe differ diff --git a/Windows/dependencies/numpy-1.9.0-win32-superpack-python3.3.exe b/Windows/dependencies/numpy-1.9.0-win32-superpack-python3.3.exe new file mode 100644 index 00000000..96cefd09 Binary files /dev/null and b/Windows/dependencies/numpy-1.9.0-win32-superpack-python3.3.exe differ diff --git a/Windows/dependencies/pyparsing-2.0.2.win32-py3.3.exe b/Windows/dependencies/pyparsing-2.0.2.win32-py3.3.exe new file mode 100644 index 00000000..9be709e6 Binary files /dev/null and b/Windows/dependencies/pyparsing-2.0.2.win32-py3.3.exe differ diff --git a/Windows/dependencies/python-3.3.0.msi b/Windows/dependencies/python-3.3.0.msi new file mode 100644 index 00000000..363c5f5d Binary files /dev/null and b/Windows/dependencies/python-3.3.0.msi differ diff --git a/Windows/dependencies/template/kicad.pro b/Windows/dependencies/template/kicad.pro new file mode 100644 index 00000000..148e9ed5 --- /dev/null +++ b/Windows/dependencies/template/kicad.pro @@ -0,0 +1,73 @@ +update=22/05/2015 07:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +LibName1=adc-dac +LibName2=memory +LibName3=xilinx +LibName4=microcontrollers +LibName5=dsp +LibName6=microchip +LibName7=analog_switches +LibName8=motorola +LibName9=texas +LibName10=intel +LibName11=audio +LibName12=interface +LibName13=digital-audio +LibName14=philips +LibName15=display +LibName16=cypress +LibName17=siliconi +LibName18=opto +LibName19=atmel +LibName20=contrib +LibName21=power +LibName22=device +LibName23=transistors +LibName24=conn +LibName25=linear +LibName26=regul +LibName27=74xx +LibName28=cmos4000 +LibName29=eSim_Analog +LibName30=eSim_Devices +LibName31=eSim_Digital +LibName32=eSim_Hybrid +LibName33=eSim_Miscellaneous +LibName34=eSim_Power +LibName35=eSim_Sources +LibName36=eSim_Subckt +LibName37=eSim_User +LibName38=eSim_Plot +LibName39=eSim_PSpice + diff --git a/Windows/esim-setup-script.nsi b/Windows/esim-setup-script.nsi new file mode 100644 index 00000000..a4456c7d --- /dev/null +++ b/Windows/esim-setup-script.nsi @@ -0,0 +1,251 @@ +;NSIS Modern User Interface +;Start Menu Folder Selection Example Script +;Modified by Fahim Khan, Saurabh Bansode +;Made by eSim Team, FOSSEE, IIT Bombay + +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + !include "ZipDLL.nsh" + !include "EnvVarUpdate.nsh" + !include "x64.nsh" +;-------------------------------- + +;General + +;Name and file + ;Name "eSim" + ;OutFile "eSim-Installer.exe" + +!define PRODUCT_NAME "eSim" +!define PRODUCT_VERSION "1.1.2" +!define PRODUCT_PUBLISHER "FOSSEE" +!define PRODUCT_WEB_SITE "http://fossee.in" +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" +!define PRODUCT_UNINST_ROOT_KEY "HKLM" + + +;Default installation folder + InstallDir "C:\" + +;Get installation folder from registry if available + InstallDirRegKey HKLM "Software\eSim" "" + +;Request application privileges for Windows Vista + RequestExecutionLevel admin + +;-------------------------------- +;Variables + Var StartMenuFolder + +;-------------------------------- +;Interface Settings + !define MUI_ABORTWARNING + !define Python_HOME "C:\Python33" +;-------------------------------- + +;Pages + + + !insertmacro MUI_PAGE_LICENSE "LICENSE.rtf" + !insertmacro MUI_PAGE_COMPONENTS + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\eSim" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + + !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder + + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- + +Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" +OutFile "eSim-Installer.exe" + + +;Installer Sections +Section "Ngspice circuit simulator" SecDummy + + SetOutPath "$INSTDIR" + +;ADD YOUR OWN FILES HERE... +;ZipDLL::extractall "$EXEDIR\spice.zip" "C:\" +;ZipDLL::extractall "$EXEDIR\six.zip" "C:\Python33" +;ZipDLL::extractall "$EXEDIR\dateutil.zip" "C:\Python33" +;ZipDLL::extractall "$EXEDIR\eSim.zip" "$INSTDIR\" + +CopyFiles "$EXEDIR\spice" "C:\" +CopyFiles "$EXEDIR\six" "C:\Python33" +CopyFiles "$EXEDIR\dateutil" "C:\Python33" +CopyFiles "$EXEDIR\eSim" "$INSTDIR\" + +;Copying Folder to install directory +SetOutPath "$INSTDIR\eSim" +;File /nonfatal /a /r "eSim\" + + + +;Store installation folder + WriteRegStr HKLM "Software\eSim" "" $INSTDIR + + + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + +;Create shortcuts + ;create desktop shortcut + CreateShortCut "$DESKTOP\eSim.lnk" "$INSTDIR\eSim\esim.bat" "" "$EXEDIR\logo.ico" "" SW_SHOWMINIMIZED + + !insertmacro MUI_STARTMENU_WRITE_END + +SectionEnd + +Section -Prerequisites + ;SetOutPath $INSTDIR\Prerequisites + + MessageBox MB_OK "Installing Python" + ExecWait '"msiexec" /i "$EXEDIR\dependencies\python-3.3.0.msi"' + + ;Setting Environment Variable for Python + + ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Python33" + + + + MessageBox MB_OK "Installing PyQT4" + ExecWait "$EXEDIR\dependencies\PyQt4-4.10.4-gpl-Py3.3-Qt4.8.5-x32.exe" + + + + MessageBox MB_OK "Installing Matplotlib" + ExecWait "$EXEDIR\dependencies\matplotlib-1.4.0.win32-py3.3.exe" + + MessageBox MB_OK "Installing Numpy" + ExecWait "$EXEDIR\dependencies\numpy-1.9.0-win32-superpack-python3.3.exe" + + ; MessageBox MB_OK "Installing Python-dateutil" + ; ExecWait '"whlexec" /i "$EXEDIR\dependencies\python_dateutil-2.6.0-py2.py3-none-any.whl"' + + ; MessageBox MB_OK "Installing dateutil for matplotlib" + ; ExecWait "$EXEDIR\dependencies\python-dateutil-2.2.win32-py2.7.exe" + +; MessageBox MB_OK "Installing six for matplotlib" +; ExecWait '"whlexec" /i "$EXEDIR\dependencies\six-1.12.0-py2.py3-none-any.whl"' + + MessageBox MB_OK "Installing pyparsing for matplotlib" + ExecWait "$EXEDIR\dependencies\pyparsing-2.0.2.win32-py3.3.exe" + + + + MessageBox MB_OK "Installing KiCad" + ExecWait "$EXEDIR\dependencies\kicad-4.0.7-i686.exe" + Goto endActiveSync + endActiveSync: + + + ${If} ${RunningX64} + ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files (x86)\KiCad\bin" + CopyFiles "$EXEDIR\dependencies\library\*.lib" "C:\Program Files (x86)\KiCad\share\library" + CopyFiles "$EXEDIR\dependencies\library\*.dcm" "C:\Program Files (x86)\KiCad\share\library" + CopyFiles "$EXEDIR\dependencies\template\kicad.pro" "C:\Program Files (x86)\KiCad\share\template" + + CopyFiles "$EXEDIR\dependencies\library\*.lib" "C:\Program Files (x86)\KiCad\share\kicad\library" + CopyFiles "$EXEDIR\dependencies\library\*.dcm" "C:\Program Files (x86)\KiCad\share\kicad\library" + CopyFiles "$EXEDIR\dependencies\template\kicad.pro" "C:\Program Files (x86)\KiCad\share\kicad\template" + ${Else} + ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\KiCad\bin" + CopyFiles "$EXEDIR\dependencies\library\*.lib" "C:\Program Files\KiCad\share\library" + CopyFiles "$EXEDIR\dependencies\library\*.dcm" "C:\Program Files\KiCad\share\library" + CopyFiles "$EXEDIR\dependencies\template\kicad.pro" "C:\Program Files\KiCad\share\template" + + CopyFiles "$EXEDIR\dependencies\library\*.lib" "C:\Program Files\KiCad\share\kicad\library" + CopyFiles "$EXEDIR\dependencies\library\*.dcm" "C:\Program Files\KiCad\share\kicad\library" + CopyFiles "$EXEDIR\dependencies\template\kicad.pro" "C:\Program Files\KiCad\share\kicad\template" + ${EndIf} + + ;Setting Env Variable for ngspice + ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\spice\bin" + + + + + SectionEnd + + Section -AdditionalIcons + SetOutPath $INSTDIR + CreateDirectory "$SMPROGRAMS\eSim" + CreateShortCut "$SMPROGRAMS\eSim\Uninstall.lnk" "$INSTDIR\uninst.exe" +SectionEnd + +Section -Post + WriteUninstaller "$INSTDIR\uninst.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" +SectionEnd + +Function un.onUninstSuccess + HideWindow + MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." +FunctionEnd + +Function un.onInit + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 + Abort +FunctionEnd + +Section Uninstall + + + + + + Delete "$INSTDIR\uninst.exe" + ;Delete "$INSTDIR\eSim" + + + Delete "$SMPROGRAMS\eSim\Uninstall.lnk" + + ${If} ${RunningX64} + ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "C:\Program Files (x86)\KiCad\bin" + + ${Else} + ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "C:\Program Files\KiCad\bin" + + ${EndIf} + + ;Setting Env Variable for ngspice + ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "C:\spice\bin" + + RMDir "$SMPROGRAMS\eSim" + RMDir /r "$INSTDIR\" + + DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" + SetAutoClose true +SectionEnd + + ;Descriptions + + ;Language strings + ;LangString DESC_SecDummy ${LANG_ENGLISH} "Ngspice is a mixed-level/mixed-signal circuit simulator. Its code is based on three open source software packages: Spice3f5, Cider1b1 and Xspice. Ngspice is part of gEDA project, a full GPL'd suite of Electronic Design Automation tools." + + ;Assign language strings to sections + ;!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + ; !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy) + ; !insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- \ No newline at end of file diff --git a/Windows/logo.ico b/Windows/logo.ico new file mode 100644 index 00000000..5ead48ca Binary files /dev/null and b/Windows/logo.ico differ diff --git a/Windows/six/six.py b/Windows/six/six.py new file mode 100644 index 00000000..89b2188f --- /dev/null +++ b/Windows/six/six.py @@ -0,0 +1,952 @@ +# Copyright (c) 2010-2018 Benjamin Peterson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +"""Utilities for writing code that runs on Python 2 and 3""" + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson " +__version__ = "1.12.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + if sys.platform.startswith("java"): + # Jython always uses 32 bits. + MAXSIZE = int((1 << 31) - 1) + else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + + +class _LazyDescr(object): + + def __init__(self, name): + self.name = name + + def __get__(self, obj, tp): + result = self._resolve() + setattr(obj, self.name, result) # Invokes __set__. + try: + # This is a bit ugly, but it avoids running this again by + # removing this descriptor. + delattr(obj.__class__, self.name) + except AttributeError: + pass + return result + + +class MovedModule(_LazyDescr): + + def __init__(self, name, old, new=None): + super(MovedModule, self).__init__(name) + if PY3: + if new is None: + new = name + self.mod = new + else: + self.mod = old + + def _resolve(self): + return _import_module(self.mod) + + def __getattr__(self, attr): + _module = self._resolve() + value = getattr(_module, attr) + setattr(self, attr, value) + return value + + +class _LazyModule(types.ModuleType): + + def __init__(self, name): + super(_LazyModule, self).__init__(name) + self.__doc__ = self.__class__.__doc__ + + def __dir__(self): + attrs = ["__doc__", "__name__"] + attrs += [attr.name for attr in self._moved_attributes] + return attrs + + # Subclasses should override this + _moved_attributes = [] + + +class MovedAttribute(_LazyDescr): + + def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): + super(MovedAttribute, self).__init__(name) + if PY3: + if new_mod is None: + new_mod = name + self.mod = new_mod + if new_attr is None: + if old_attr is None: + new_attr = name + else: + new_attr = old_attr + self.attr = new_attr + else: + self.mod = old_mod + if old_attr is None: + old_attr = name + self.attr = old_attr + + def _resolve(self): + module = _import_module(self.mod) + return getattr(module, self.attr) + + +class _SixMetaPathImporter(object): + + """ + A meta path importer to import six.moves and its submodules. + + This class implements a PEP302 finder and loader. It should be compatible + with Python 2.5 and all existing versions of Python3 + """ + + def __init__(self, six_module_name): + self.name = six_module_name + self.known_modules = {} + + def _add_module(self, mod, *fullnames): + for fullname in fullnames: + self.known_modules[self.name + "." + fullname] = mod + + def _get_module(self, fullname): + return self.known_modules[self.name + "." + fullname] + + def find_module(self, fullname, path=None): + if fullname in self.known_modules: + return self + return None + + def __get_module(self, fullname): + try: + return self.known_modules[fullname] + except KeyError: + raise ImportError("This loader does not know module " + fullname) + + def load_module(self, fullname): + try: + # in case of a reload + return sys.modules[fullname] + except KeyError: + pass + mod = self.__get_module(fullname) + if isinstance(mod, MovedModule): + mod = mod._resolve() + else: + mod.__loader__ = self + sys.modules[fullname] = mod + return mod + + def is_package(self, fullname): + """ + Return true, if the named module is a package. + + We need this method to get correct spec objects with + Python 3.4 (see PEP451) + """ + return hasattr(self.__get_module(fullname), "__path__") + + def get_code(self, fullname): + """Return None + + Required, if is_package is implemented""" + self.__get_module(fullname) # eventually raises ImportError + return None + get_source = get_code # same as get_code + +_importer = _SixMetaPathImporter(__name__) + + +class _MovedItems(_LazyModule): + + """Lazy loading of moved objects""" + __path__ = [] # mark as package + + +_moved_attributes = [ + MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), + MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), + MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), + MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), + MovedAttribute("intern", "__builtin__", "sys"), + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), + MovedAttribute("getoutput", "commands", "subprocess"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), + MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), + MovedAttribute("StringIO", "StringIO", "io"), + MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserList", "UserList", "collections"), + MovedAttribute("UserString", "UserString", "collections"), + MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), + MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), + MovedModule("cPickle", "cPickle", "pickle"), + MovedModule("queue", "Queue"), + MovedModule("reprlib", "repr"), + MovedModule("socketserver", "SocketServer"), + MovedModule("_thread", "thread", "_thread"), + MovedModule("tkinter", "Tkinter"), + MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), + MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), + MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), + MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), + MovedModule("tkinter_tix", "Tix", "tkinter.tix"), + MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), + MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), + MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), + MovedModule("tkinter_colorchooser", "tkColorChooser", + "tkinter.colorchooser"), + MovedModule("tkinter_commondialog", "tkCommonDialog", + "tkinter.commondialog"), + MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), + MovedModule("tkinter_font", "tkFont", "tkinter.font"), + MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), + MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", + "tkinter.simpledialog"), + MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), + MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), + MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), + MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), + MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), + MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), +] +# Add windows specific modules. +if sys.platform == "win32": + _moved_attributes += [ + MovedModule("winreg", "_winreg"), + ] + +for attr in _moved_attributes: + setattr(_MovedItems, attr.name, attr) + if isinstance(attr, MovedModule): + _importer._add_module(attr, "moves." + attr.name) +del attr + +_MovedItems._moved_attributes = _moved_attributes + +moves = _MovedItems(__name__ + ".moves") +_importer._add_module(moves, "moves") + + +class Module_six_moves_urllib_parse(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_parse""" + + +_urllib_parse_moved_attributes = [ + MovedAttribute("ParseResult", "urlparse", "urllib.parse"), + MovedAttribute("SplitResult", "urlparse", "urllib.parse"), + MovedAttribute("parse_qs", "urlparse", "urllib.parse"), + MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), + MovedAttribute("urldefrag", "urlparse", "urllib.parse"), + MovedAttribute("urljoin", "urlparse", "urllib.parse"), + MovedAttribute("urlparse", "urlparse", "urllib.parse"), + MovedAttribute("urlsplit", "urlparse", "urllib.parse"), + MovedAttribute("urlunparse", "urlparse", "urllib.parse"), + MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), + MovedAttribute("quote", "urllib", "urllib.parse"), + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), + MovedAttribute("splitvalue", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), + MovedAttribute("uses_query", "urlparse", "urllib.parse"), + MovedAttribute("uses_relative", "urlparse", "urllib.parse"), +] +for attr in _urllib_parse_moved_attributes: + setattr(Module_six_moves_urllib_parse, attr.name, attr) +del attr + +Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes + +_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), + "moves.urllib_parse", "moves.urllib.parse") + + +class Module_six_moves_urllib_error(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_error""" + + +_urllib_error_moved_attributes = [ + MovedAttribute("URLError", "urllib2", "urllib.error"), + MovedAttribute("HTTPError", "urllib2", "urllib.error"), + MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), +] +for attr in _urllib_error_moved_attributes: + setattr(Module_six_moves_urllib_error, attr.name, attr) +del attr + +Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes + +_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), + "moves.urllib_error", "moves.urllib.error") + + +class Module_six_moves_urllib_request(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_request""" + + +_urllib_request_moved_attributes = [ + MovedAttribute("urlopen", "urllib2", "urllib.request"), + MovedAttribute("install_opener", "urllib2", "urllib.request"), + MovedAttribute("build_opener", "urllib2", "urllib.request"), + MovedAttribute("pathname2url", "urllib", "urllib.request"), + MovedAttribute("url2pathname", "urllib", "urllib.request"), + MovedAttribute("getproxies", "urllib", "urllib.request"), + MovedAttribute("Request", "urllib2", "urllib.request"), + MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), + MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), + MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), + MovedAttribute("BaseHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), + MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), + MovedAttribute("FileHandler", "urllib2", "urllib.request"), + MovedAttribute("FTPHandler", "urllib2", "urllib.request"), + MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), + MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), + MovedAttribute("urlretrieve", "urllib", "urllib.request"), + MovedAttribute("urlcleanup", "urllib", "urllib.request"), + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), + MovedAttribute("parse_http_list", "urllib2", "urllib.request"), + MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), +] +for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +del attr + +Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes + +_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), + "moves.urllib_request", "moves.urllib.request") + + +class Module_six_moves_urllib_response(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_response""" + + +_urllib_response_moved_attributes = [ + MovedAttribute("addbase", "urllib", "urllib.response"), + MovedAttribute("addclosehook", "urllib", "urllib.response"), + MovedAttribute("addinfo", "urllib", "urllib.response"), + MovedAttribute("addinfourl", "urllib", "urllib.response"), +] +for attr in _urllib_response_moved_attributes: + setattr(Module_six_moves_urllib_response, attr.name, attr) +del attr + +Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes + +_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), + "moves.urllib_response", "moves.urllib.response") + + +class Module_six_moves_urllib_robotparser(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_robotparser""" + + +_urllib_robotparser_moved_attributes = [ + MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), +] +for attr in _urllib_robotparser_moved_attributes: + setattr(Module_six_moves_urllib_robotparser, attr.name, attr) +del attr + +Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes + +_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), + "moves.urllib_robotparser", "moves.urllib.robotparser") + + +class Module_six_moves_urllib(types.ModuleType): + + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" + __path__ = [] # mark as package + parse = _importer._get_module("moves.urllib_parse") + error = _importer._get_module("moves.urllib_error") + request = _importer._get_module("moves.urllib_request") + response = _importer._get_module("moves.urllib_response") + robotparser = _importer._get_module("moves.urllib_robotparser") + + def __dir__(self): + return ['parse', 'error', 'request', 'response', 'robotparser'] + +_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), + "moves.urllib") + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + def create_unbound_method(func, cls): + return func + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + def create_unbound_method(func, cls): + return types.MethodType(func, None, cls) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +if PY3: + def iterkeys(d, **kw): + return iter(d.keys(**kw)) + + def itervalues(d, **kw): + return iter(d.values(**kw)) + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + def iterlists(d, **kw): + return iter(d.lists(**kw)) + + viewkeys = operator.methodcaller("keys") + + viewvalues = operator.methodcaller("values") + + viewitems = operator.methodcaller("items") +else: + def iterkeys(d, **kw): + return d.iterkeys(**kw) + + def itervalues(d, **kw): + return d.itervalues(**kw) + + def iteritems(d, **kw): + return d.iteritems(**kw) + + def iterlists(d, **kw): + return d.iterlists(**kw) + + viewkeys = operator.methodcaller("viewkeys") + + viewvalues = operator.methodcaller("viewvalues") + + viewitems = operator.methodcaller("viewitems") + +_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") +_add_doc(itervalues, "Return an iterator over the values of a dictionary.") +_add_doc(iteritems, + "Return an iterator over the (key, value) pairs of a dictionary.") +_add_doc(iterlists, + "Return an iterator over the (key, [values]) pairs of a dictionary.") + + +if PY3: + def b(s): + return s.encode("latin-1") + + def u(s): + return s + unichr = chr + import struct + int2byte = struct.Struct(">B").pack + del struct + byte2int = operator.itemgetter(0) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +else: + def b(s): + return s + # Workaround for standalone backslash + + def u(s): + return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") + unichr = unichr + int2byte = chr + + def byte2int(bs): + return ord(bs[0]) + + def indexbytes(buf, i): + return ord(buf[i]) + iterbytes = functools.partial(itertools.imap, ord) + import StringIO + StringIO = BytesIO = StringIO.StringIO + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" +_add_doc(b, """Byte literal""") +_add_doc(u, """Text literal""") + + +def assertCountEqual(self, *args, **kwargs): + return getattr(self, _assertCountEqual)(*args, **kwargs) + + +def assertRaisesRegex(self, *args, **kwargs): + return getattr(self, _assertRaisesRegex)(*args, **kwargs) + + +def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + try: + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + finally: + value = None + tb = None + +else: + def exec_(_code_, _globs_=None, _locs_=None): + """Execute code in a namespace.""" + if _globs_ is None: + frame = sys._getframe(1) + _globs_ = frame.f_globals + if _locs_ is None: + _locs_ = frame.f_locals + del frame + elif _locs_ is None: + _locs_ = _globs_ + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): + try: + raise tp, value, tb + finally: + tb = None +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + try: + if from_value is None: + raise value + raise value from from_value + finally: + value = None +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + try: + raise value from from_value + finally: + value = None +""") +else: + def raise_from(value, from_value): + raise value + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + fp = kwargs.pop("file", sys.stdout) + if fp is None: + return + + def write(data): + if not isinstance(data, basestring): + data = str(data) + # If the file has an encoding, encode unicode with it. + if (isinstance(fp, file) and + isinstance(data, unicode) and + fp.encoding is not None): + errors = getattr(fp, "errors", None) + if errors is None: + errors = "strict" + data = data.encode(fp.encoding, errors) + fp.write(data) + want_unicode = False + sep = kwargs.pop("sep", None) + if sep is not None: + if isinstance(sep, unicode): + want_unicode = True + elif not isinstance(sep, str): + raise TypeError("sep must be None or a string") + end = kwargs.pop("end", None) + if end is not None: + if isinstance(end, unicode): + want_unicode = True + elif not isinstance(end, str): + raise TypeError("end must be None or a string") + if kwargs: + raise TypeError("invalid keyword arguments to print()") + if not want_unicode: + for arg in args: + if isinstance(arg, unicode): + want_unicode = True + break + if want_unicode: + newline = unicode("\n") + space = unicode(" ") + else: + newline = "\n" + space = " " + if sep is None: + sep = space + if end is None: + end = newline + for i, arg in enumerate(args): + if i: + write(sep) + write(arg) + write(end) +if sys.version_info[:2] < (3, 3): + _print = print_ + + def print_(*args, **kwargs): + fp = kwargs.get("file", sys.stdout) + flush = kwargs.pop("flush", False) + _print(*args, **kwargs) + if flush and fp is not None: + fp.flush() + +_add_doc(reraise, """Reraise an exception.""") + +if sys.version_info[0:2] < (3, 4): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +else: + wraps = functools.wraps + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(type): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + + @classmethod + def __prepare__(cls, name, this_bases): + return meta.__prepare__(name, bases) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + if hasattr(cls, '__qualname__'): + orig_vars['__qualname__'] = cls.__qualname__ + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def ensure_binary(s, encoding='utf-8', errors='strict'): + """Coerce **s** to six.binary_type. + + For Python 2: + - `unicode` -> encoded to `str` + - `str` -> `str` + + For Python 3: + - `str` -> encoded to `bytes` + - `bytes` -> `bytes` + """ + if isinstance(s, text_type): + return s.encode(encoding, errors) + elif isinstance(s, binary_type): + return s + else: + raise TypeError("not expecting type '%s'" % type(s)) + + +def ensure_str(s, encoding='utf-8', errors='strict'): + """Coerce *s* to `str`. + + For Python 2: + - `unicode` -> encoded to `str` + - `str` -> `str` + + For Python 3: + - `str` -> `str` + - `bytes` -> decoded to `str` + """ + if not isinstance(s, (text_type, binary_type)): + raise TypeError("not expecting type '%s'" % type(s)) + if PY2 and isinstance(s, text_type): + s = s.encode(encoding, errors) + elif PY3 and isinstance(s, binary_type): + s = s.decode(encoding, errors) + return s + + +def ensure_text(s, encoding='utf-8', errors='strict'): + """Coerce *s* to six.text_type. + + For Python 2: + - `unicode` -> `unicode` + - `str` -> `unicode` + + For Python 3: + - `str` -> `str` + - `bytes` -> decoded to `str` + """ + if isinstance(s, binary_type): + return s.decode(encoding, errors) + elif isinstance(s, text_type): + return s + else: + raise TypeError("not expecting type '%s'" % type(s)) + + + +def python_2_unicode_compatible(klass): + """ + A decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method + returning text and apply this decorator to the class. + """ + if PY2: + if '__str__' not in klass.__dict__: + raise ValueError("@python_2_unicode_compatible cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = lambda self: self.__unicode__().encode('utf-8') + return klass + + +# Complete the moves implementation. +# This code is at the end of this module to speed up module loading. +# Turn this module into a package. +__path__ = [] # required for PEP 302 and PEP 451 +__package__ = __name__ # see PEP 366 @ReservedAssignment +if globals().get("__spec__") is not None: + __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable +# Remove other six meta path importers, since they cause problems. This can +# happen if six is removed from sys.modules and then reloaded. (Setuptools does +# this for some reason.) +if sys.meta_path: + for i, importer in enumerate(sys.meta_path): + # Here's some real nastiness: Another "instance" of the six module might + # be floating around. Therefore, we can't use isinstance() to check for + # the six meta path importer, since the other six instance will have + # inserted an importer with different class. + if (type(importer).__name__ == "_SixMetaPathImporter" and + importer.name == __name__): + del sys.meta_path[i] + break + del i, importer +# Finally, add the importer to the meta path import hook. +sys.meta_path.append(_importer) diff --git a/Windows/spice/ReleaseNotes.txt b/Windows/spice/ReleaseNotes.txt new file mode 100644 index 00000000..3b02bb95 --- /dev/null +++ b/Windows/spice/ReleaseNotes.txt @@ -0,0 +1,27 @@ +Release Notes for ngspice-26: + +- New features: + + fft command may (optionally) use fftw3 library + + add nint() rounding function + + usage of 'temper' in behavioral devices + + check for soa (safe operating area) in several device models + + library processing rewritten completely to enhance ngspice + compatibility (.lib) + + include file processing rewritten to allow nesting and various + absolute and relative path names (.inc) + + asinh, acosh, atanh functions + + shared ngspice option added: ngspice optionally compiles as + a shared object or dynamic link library + + use a hash table to massively speed up parsing the netlist + + implement a very basic .if/.else block + + implement a signed power function `pwr' for controlled sources + + implement multiplier `m' in F, G source + + apply Area Calculation Method (ACM) to the bsim3v3.3 model + + implement `tc1', `tc2' instance parameters + +- Bug fixes: + + many, many ... please see + http://sourceforge.net/p/ngspice/ngspice/ci/master/tree/ + and check the 'history' button on the upper right. + + removed memory leaks + \ No newline at end of file diff --git a/Windows/spice/bin/libfftw3-3.dll b/Windows/spice/bin/libfftw3-3.dll new file mode 100644 index 00000000..a8f033a1 Binary files /dev/null and b/Windows/spice/bin/libfftw3-3.dll differ diff --git a/Windows/spice/bin/ngspice.exe b/Windows/spice/bin/ngspice.exe new file mode 100644 index 00000000..e5841140 Binary files /dev/null and b/Windows/spice/bin/ngspice.exe differ diff --git a/Windows/spice/bin/vcomp100.dll b/Windows/spice/bin/vcomp100.dll new file mode 100644 index 00000000..e23321c1 Binary files /dev/null and b/Windows/spice/bin/vcomp100.dll differ diff --git a/Windows/spice/doc/ANALYSES b/Windows/spice/doc/ANALYSES new file mode 100644 index 00000000..5b715be9 --- /dev/null +++ b/Windows/spice/doc/ANALYSES @@ -0,0 +1,115 @@ +12345678901234567890123456789012345678901234567890123456789012345678901234567890 + +ANALYSES +======== + +This file lists the analyses currently implemented into ngspice. + +Table of Contents + + 1 Noise analysis (NOISE) + 1.1 Small signal noise + 1.2 Transient noise + 2 Operating point analysis (OP) + 3 Operating point sweep Analysis (DC) + 4 Pole-zero analysis (PZ) + 5 Small-Signal distortion analysis (DISTO) + 6 Small Signal frequency response analysis (AC) + 7 Sensitivity analysis (SENS) + 8 Transfer function analysis (TF) + 9 Transient analysis (TRAN) + 10 Periodic steady state analysis (PSS, experimental feature) + + + +1 Noise analysis (NOISE) + + 1.1 Small signal noise + + The noise analysis does analysis device-generated noise for the given + circuit. When provided with an input source and an output port, the analysis + calculates the noise contributions of each device (and each noise generator + within the device) to the output port voltage. It also calculates the input + noise to the circuit, equivalent to the output noise referred to the + specified input source. This is done for every frequency point in a specified + range - the calculated value of the noise corresponds to the spectral density + of the circuit variable viewed as a stationary gaussian stochastic process. + + 1.2 Transient noise + + Time domain noise analysis during transient simulation is enabled by + providing voltage (and current) source options with white, 1/f and + random telegraph signal noise signals. + + +2 Operating point analysis (OP) + + The operating point analysis determines the dc operating point of the + circuit with inductors shorted and capacitors opened. + + +3 Operating point sweep Analysis (DC) + + The operating point sweep analysis determines the values of output + variables while one or two specified independent voltage or current source is + stepped over a user-specified range and the dc output variables are stored + for each sequential source value. Resistance and temperature sweep are + included. + + +4 Pole-zero analysis (PZ) + + The pole-zero analysis computes the poles and/or zeros in the small-signal + ac transfer function. The program first computes the dc operating point and + then determines the linearized, small-signal models for all the nonlinear + devices in the circuit. This circuit is then used to find the poles and zeros + of the transfer function. Unfortunately this code is (since its inception in + spice3) not free of bugs. + + +5 Small-Signal distortion analysis (DISTO) + + The distortion analysis computes steady-state harmonic and intermodulation + products for small input signal magnitudes. Not all devices are supported. + + +6 Small Signal frequency response analysis (AC) + + The ac small-signal computes the ac output variables as a function of + frequency. The program first computes the dc operating point of the circuit + and determines linearized, small-signal models for all of the nonlinear + devices in the circuit. The resultant linear circuit is then analyzed over a + user-specified range of frequencies. + + +7 Sensitivity analysis (SENS) + + Ngspice will calculate either the DC operating-point sensitivity or the AC + small-signal sensitivity of an output variable with respect to all circuit + variables, including model parameters. Spice calculates the difference in an + output variable (either a node voltage or a branch current) by perturbing + each parameter of each device independently. + + +8 Transfer function analysis (TF) + + The (small signal) transfer function analysis computes the dc small-signal + value of a transfer function (ratio of output variable to input source), + input resistance, and output resistance is also computed as a part of the dc + solution. + + +9 Transient analysis (TRAN) + + The transient analysis computes the transient output variables as a + function of time over a user-specified time interval. The initial conditions + are automatically determined by a dc analysis. All sources which are not time + dependent (for example, power supplies) are set to their dc value. + + +10 Periodic steady state analysis (PSS) + + The periodic steady state analysis computes solutions for oscillating + circuits. Currently only the autonomous case is implemented. + + diff --git a/Windows/spice/doc/AUTHORS b/Windows/spice/doc/AUTHORS new file mode 100644 index 00000000..e13a65ad --- /dev/null +++ b/Windows/spice/doc/AUTHORS @@ -0,0 +1,76 @@ +@c This file will be processed with texinfo. + +Spice was originally written at The University of California at Berkeley (USA). +Since then, there have been many people working on the software, most of them +releasing patches to the original code through the Internet. + + +The following people have contributed in some way: + +Vera Albrecht, +Cecil Aswell, +Giles C. Billingsley, +Phil Barker, +Steven Borley, +Krzysztof Blaszkowski, +Stuart Brorson, +Mansun Chan, +Wayne A. Christopher, +Al Davis, +Glao S. Dezai, +Jon Engelbert, +Daniele Foci, +Henrik Forstén, +Noah Friedman, +David A. Gates, +Alan Gillespie, +John Heidemann, +Jeffrey M. Hsu, +JianHui Huang, +S. Hwang, +Chris Inbody, +Gordon M. Jacobs, +Min-Chie Jeng, +Beorn Johnson, +Stefan Jones, +Kenneth H. Keller, +Francesco Lannutti, +Robert Larice, +Mathew Lew, +Robert Lindsell, +Weidong Liu, +Kartikeya Mayaram, +Richard D. McRoberts, +Manfred Metzger, +Wolfgang Muees, +Paolo Nenzi, +Gary W. Ng, +Hong June Park, +Arno Peters, +Stefano Perticaroli, +Serban-Mihai Popescu, +Georg Post, +Thomas L. Quarles, +Emmanuel Rouat, +Jean-Marc Routure, +Jaijeet S. Roychowdhury, +Lionel Sainte Cluque, +Takayasu Sakurai, +AMAKAWA Shuhei, +Kanwar Jit Singh, +Bill Swartz, +Hitoshi Tanaka, +Steve Tell, +Andrew Tuckey, +Andreas Unger, +Holger Vogt, +Dietmar Warning, +Michael Widlok, +Charles D.H. Williams, +Antony Wilson, +and many others... + +If someone helped in the development and has not been inserted in this list +then this omission was unintentional. If you feel you should be on this list +then please write to . Do not be shy, we +would like to make a list as complete as possible. diff --git a/Windows/spice/doc/BUGS b/Windows/spice/doc/BUGS new file mode 100644 index 00000000..b338848f --- /dev/null +++ b/Windows/spice/doc/BUGS @@ -0,0 +1,38 @@ +This file contains a list of known but not yet fixed bugs in ngspice. +=========================================================================== + +How to submit a bug report: + +There are two methods to report a bug you have discovered in ngspice: + + * Bug tracker: This is the preferred method of reporting a bug. + Using the tracker on Sourceforge.net site will make your report + open by everyone and the chances of finding a fix will increase. + + * ngspice-devel list: If you are a member of this list, you can write + directly to the developers' list. Do not subscribe to the list only + for sending bug reports. + +Before sending a bug report please note: all information you send to the bug +tracking system or on the mailing lists is public. If you need to send +sensitive information, send them to a developer directly but still write non +sensitive data on the bug tracking system to keep track of bug history. + +* please refer to the sourceforge bug tracker at + http://sourceforge.net/p/ngspice/bugs/ + +------------------------------------------------------------------------------ +OPEN BUGS: +------------------------------------------------------------------------------ +* pole-zero analysis + + The pole-zero (.pz) analysis, which still uses the original spice3f5 + algorithms, does not give correct results for all tested input files. + The effort to correct that issue seems to be large. + + +* voltage (and current) controlled switches need better timing + + The controlled switches (SW, CSW), which still stem from the original + spice3f5 implementation, sometimes lead to wrong results when on and off + ramp times differ considerably. diff --git a/Windows/spice/doc/COPYING b/Windows/spice/doc/COPYING new file mode 100644 index 00000000..e266da01 --- /dev/null +++ b/Windows/spice/doc/COPYING @@ -0,0 +1,613 @@ +12345678901234567890123456789012345678901234567890123456789012345678901234567890 +Ngspice 26 +Copyright (c) 2014, +All rights reserved. + + +Foreword: +The name 'Spice' (Simulation Program with Integrated Circuit Emphasis) +was originally chosen at the University of California, Berkeley. The +original Berkeley code is covered under the modified BSD license and +thus sets the basis for all other code added. +As Spice is the basis of almost all circuit simulators, the major part of the +analogue and mixed signals simulation's code is designed to fit with it. +The *spices (generic name for its forks) are heterogeneous in many points due +to the work of researchers, electronic designers, software editors, etc. +The Ngspice team tries to collect work from the different sources and +contribute new functionalities. Thus, the material we manipulate is +heterogeneous in licenses. Keeping the licenses as is, but also keep it +compatible with the new BSD license, is the way to live with that diversity. + +Copyleft is a fundamental question in FOSS development. The choice of a +copylefted contribution, or a non copylefted contribution is an important +choice that should be respected. Ngspice branch as a whole will not be covered +by a specific license. The Ngspice team wants to encourage contributions to +ngspice. We let each new developer choose its position regarding copyleft, +as we respect the position of the former developers. In order to keep things +clear ngspice team proposes to follow the following guidelines: + + Each piece of code should be kept under its original contributor's license. + As for any project, modifications made in sources covered by a less + restrictive license can be covered by a more restrictive license than new BSD. + We do not encourage it. + + If you feel to add code in a file under a different license than the rest of + the file, please use comments to mark the boundaries of the modification, and + edit the comments at the beginning of the file with correct license and + copyright information. + + We encourage restrictive licenses to be chosen only for new functionalities, + written in distinct files, leading to distinct libraries that link depending + on a specific configure flag. + + We encourage non proliferation of licenses (e.g. choosing either LGPL or + new BSD). GPL is not suitable for code to be directly linked into ngspice, + but may be used in shared object libraries only. + +This heterogeneous license status requires some effort to keep track on licenses +applied. Please take care of knowing which license applies to the code you are +editing, or conveying and not to commit license infringements, especially to +GPL and LGPL which are quite restrictive. + +On 2007, July 17th spice 3f5 changed from its original license to the new BSD +license. (http://embedded.eecs.berkeley.edu/pubs/downloads/spice/index.htm) + +On 2008, December 1st, tclspice changes license from GPL to LGPLv2, in +accordance with Multigig Ltd, the copyright holder. + +The following table is just a reminder on license status, please don't rely +on it: + Author License Notes + +numparam Georg Post LGPL Applies to the code in + frontend/numparam +adms Laurent Lemaitre LGPL Applies to scripts in the + spicelib/dev/adms +tclspice Stefan Jones LGPL TCL integration +cider U. of California Old BSD Device level simulator +xspice Georgia Tech. Public D Mixed signals +spice U. of California New BSD Analog circuit simulation + + +---------------------------------- Cider ----------------------------------- + + RESEARCH SOFTWARE AGREEMENT + + This file specifies the terms under which the software and + documentation provided with this distribution are provided. + + Software is distributed as is, completely without warranty + or service support. The University of California and its employ- + ees are not liable for the condition or performance of the + software. + + The University does not warrant that it owns the copyright + or other proprietary rights to all software and documentation + provided under this agreement, notwithstanding any copyright + notice, and shall not be liable for any infringement of copyright + or proprietary rights brought by third parties against the reci- + pient of the software and documentation provided under this + agreement. + + THE UNIVERSITY OF CALIFORNIA HEREBY DISCLAIMS ALL IMPLIED + WARRANTIES, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. THE UNIVERSITY IS NOT + LIABLE FOR ANY DAMAGES INCURRED BY THE RECIPIENT IN USE OF THE + SOFTWARE AND DOCUMENTATION, INCLUDING DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES. + + The University of California grants the recipient the right + to modify, copy, and redistribute the software and documentation, + both within the recipient's organization and externally, subject + to the following restrictions: + + + (a) The recipient agrees not to charge for the University of + California code itself. The recipient may, however, charge + for additions, extensions, or support. + + (b) In any product based on the software, the recipient agrees + to acknowledge the research group that developed the + software. This acknowledgement shall appear in the product + documentation. + + (c) The recipient agrees to obey all U.S. Government restric- + tions governing redistribution or export of the software and + documentation. + + +---------------------------------- Spice3f5 -------------------------------- + +Copyright (c) 1985-1991 The Regents of the University of California. +All rights reserved. + +Permission is hereby granted, without written agreement and without license +or royalty fees, to use, copy, modify, and distribute this software and its +documentation for any purpose, provided that the above copyright notice and +the following two paragraphs appear in all copies of this software. + +IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF +CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN +"AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +-------------------------------- Tclspice -------------------------------- + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +---------------------------------- Xspice -------------------------------- +THE SOFTWARE PROGRAMS BELOW ARE IN THE PUBLIC DOMAIN AND ARE PROVIDED FREE OF +ANY CHARGE. THE GEORGIA TECH RESEARCH CORPORATION, THE GEORGIA INSTITUTE OF +TECHNOLOGY, AND/OR OTHER PARTIES PROVIDE THIS SOFTWARE "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH THE USER. +SHOULD THE PROGRAM PROVE DEFECTIVE, THE USER ASSUMES THE ENTIRE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT WILL THE GEORGIA TECH +RESEARCH CORPORATION, THE GEORGIA INSTITUTE OF TECHNOLOGY, AND/OR OTHER PARTIES +PROVIDING THE PROGRAMS BELOW BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA +BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS). diff --git a/Windows/spice/doc/DEVICES b/Windows/spice/doc/DEVICES new file mode 100644 index 00000000..29c309e2 --- /dev/null +++ b/Windows/spice/doc/DEVICES @@ -0,0 +1,854 @@ +DEVICES +======= + +Table of contents + +1. Introduction +2. Linear Devices + 2.1 CAP - Linear capacitor + 2.2 IND - Linear inductor + 2.3 RES - Linear resistor +3. Distributed Elements + 3.1 CPL - Simple Coupled Multiconductor Lines (Kspice) + 3.2 LTRA - Lossy Transmission line + 3.3 TRA - Transmission line + 3.4 TXL - Simple Lossy Transmission Line (Kspice) + 3.5 URC - Uniform distributed RC line +4. Voltage and current sources + 4.1 ASRC - Arbitrary Source + 4.2 CCCS - Current Controlled Current Source + 4.3 CCVS - Current Controlled Voltage Source + 4.4 ISRC - Independent Current Source + 4.5 VCCS - Voltage Controlled Current Source + 4.6 VCVS - Voltage Controlled Voltage Source + 4.7 VSRC - Independent Voltage Source +5. Switches + 5.1 CSW - Current controlled switch + 5.2 SW - Voltage controlled switch +6. Diodes + 6.1 DIO - Junction Diode +7. Bipolar devices + 7.1 BJT - Bipolar Junction Transistor + 7.2 BJT2 - Bipolar Junction Transistor + 7.3 VBIC - Bipolar Junction Transistor +8. FET devices + 8.1 JFET - Junction Field Effect transistor +9. HFET Devices + 9.1 HFET1 - Heterostructure Field Effect Transistor Level 1 + 9.2 HFET2 - Heterostructure Field Effect Transistor Level 2 +10. MES devices + 10.1 MES - MESFET model + 10.2 MESA - MESFET model (MacSpice3f4) +11. MOS devices + 11.1 MOS1 - Level 1 MOS model + 11.2 MOS2 - Level 2 MOS model + 11.3 MOS3 - Level 3 MOS model + 11.4 MOS6 - Level 6 MOS model + 11.5 MOS9 - Level 9 MOS model + 11.6 BSIM1 - BSIM model level 1 + 11.7 BSIM2 - BSIM model level 2 + 11.8 BSIM3 - BSIM model level 3 vers. 0 + 11.9 BSIM3 - BSIM model level 3 vers. 1 + 11.10 BSIM3 - BSIM model level 3 vers. 2 + 11.11 BSIM3 - BSIM model level 3 vers. 3 + 11.12 BSIM4 - BSIM model level 4 + 11.13 HiSIM2 - Hiroshima-University STARC IGFET Model + 11.14 HiSIM_HV - Hiroshima-University STARC IGFET High Voltage Model +12. SOI devices + 12.1 BSIM3SOI_FD - SOI model (fully depleted devices) + 12.2 BSIM3SOI_DD - SOI Model (dynamic depletion model) + 12.3 BSIM3SOI_PD - SOI model (partially depleted devices) + 12.4 BSIMSOI - SOI model (partially/full depleted devices) + 12.5 SOI3 - STAG SOI3 Model +13. Verilog-A models + 13.1 EKV MOS model + 13.2 PSP MOS model + 13.3 HICUM0 Bipolar Model + 13.4 HICUM2 Bipolar Model + 13.5 Mextram Bipolar Model +14. XSPICE code models + + ------------------ + +1. Introduction + +This file contains the status of devices available in ngspice. This file +will be updated every time the device specific code is altered or changed to reflect the current status of this important part of the simulator + + +2. Linear Devices + + + 2.1 CAP - Linear capacitor + + Ver: N/A + Class: C + Level: 1 (and only) + Dir: devices/cap + Status: + + Enhancements over the original model: + - Parallel Multiplier + - Temperature difference from circuit temperature + - Preliminary technology scaling support + - Model capacitance + - Cj calculation based on relative dielectric constant + and insulator thickness + + + 2.2 IND - Linear Inductor + + Ver: N/A + Class: L + Level: 1 (and only) + Dir: devices/ind + Status: + + Enhancements over the original model: + - Parallel Multiplier + - Temperature difference from circuit temperature + - Preliminary technology scaling support + - Model inductance + - Inductance calculation for toroids or solenoids + on the model line. + + 2.3 RES - Linear resistor + + Ver: N/A + Class: R + Level: 1 (and only) + Dir: devices/res + Status: + + Enhancements over the original model: + - Parallel Multiplier + - Different value for ac analysis + - Temperature difference from circuit temperature + - Noiseless resistor + - Flicker noise + - Preliminary technology scaling support + + +3. Distributed elements + + + 3.1 CPL - Simple Coupled Multiconductor Lines (Kspice) + + Ver: N/A + Class: P + Level: 1 (and only) + Dir: devices/cpl + Status: + + This model comes from swec and kspice. It is not documented, if + you have kspice docs, can you write a short description + of its use ? + + - Does not implement parallel code switches + - Probably a lot of memory leaks + + Enhancements over the original model: + + - Better integrated into ngspice adding CPLask, CPLmAsk and + CPLunsetup functions + + 3.2 LTRA - Lossy Transmission line + + Ver: N/A + Class: O + Level: 1 (and only) + Dir: devices/ltra + Status: + + - Original spice model. + - Does not implement parallel code switches. + + 3.3 TRA - Transmission line + + Ver: N/A + Class: T + Level: 1 (and only) + Dir: devices/tra + Status: + + - Original spice model. + - Does not implement parallel code switches. + + 3.4 TXL - Simple Lossy Transmission Line (Kspice) + + Ver: N/A + Class: Y + Level: 1 (and only) + Dir: devices/txl + Status: + + This model comes from kspice. It is not documented, if + you have kspice docs, can you write a short description + of its use ? + + There is some code left out from compilation: + TXLaccept and TXLfindBr. Any ideas ? + + - Does not implement parallel code switches + + + 3.5 URC - Uniform distributed RC line + + Ver: N/A + Class: U + Level: 1 (and only) + Dir: devices/urc + Status: + + - Original spice model. + - Does not implement parallel code switches. + + +4. Voltage and current sources + + 4.1 ASRC - Arbitrary Source + + Ver: N/A + Class: B + Level: 1 (and only) + Dir: devices/asrc + Status: + + The arbitrary source code has been corrected with the patch + available on the Internet. There is still an issue to fix, the + current of current-controlled generators. + + 4.2 CCCS - Current Controlled Current Source + + Ver: N/A + Class: F + Level: 1 (and only) + Dir: devices/cccs + Status: + + - Original spice model. + + 4.3 CCVS - Current Controlled Voltage Source + + Ver: N/A + Class: H + Level: 1 (and only) + Dir: devices/ccvs + Status: + + - Original spice model. + + + 4.4 ISRC - Independent Current Source + + Ver: N/A + Class: I + Level: 1 (and only) + Dir: devices/isrc + Status: + + This is the original spice device improved by Alan Gillespie + with the following features: + + - Source ramping + - Check for non-monotonic series in PWL + + + 4.5 VCCS - Voltage Controlled Current Source + + Ver: N/A + Class: G + Level: 1 (and only) + Dir: devices/vccs + Status: + + - Original spice model. + + +4.6 VCVS - Voltage Controlled Voltage Source + + Ver: N/A + Class: E + Level: 1 (and only) + Dir: devices/vcvs + Status: + + - Original spice model. + + 4.7 VSRC - Independent Voltage Source + + Ver: N/A + Class: V + Level: 1 (and only) + Dir: devices/vsrc + Status: + + This is the original spice device improved by Alan Gillespie + with the following features: + + - Source ramping + - Check for non-monotonic series in PWL + + +5. Switches + + 5.1 CSW - Current controlled switch + + Ver: N/A + Class: W + Level: 1 (and only) + Dir: devices/csw + Status: + + - This model comes from Jon Engelbert. + + + 5.2 SW - Voltage controlled switch + + Ver: N/A + Class: S + Level: 1 (and only) + Dir: devices/sw + Status: + + - This model comes from Jon Engelbert. + + +6. Diodes + + 6.1 DIO - Junction Diode + + Ver: N/A + Class: D + Level: 1 (and only) + Dir: devices/dio + Status: + + Enhancements over the original model: + - Parallel Multiplier + - Temperature difference from circuit temperature + - Forward and reverse knee currents + - Periphery (sidewall) effects + - Temperature correction of some parameters + + +7. Bipolar devices + + 7.1 BJT - Bipolar Junction Transistor + + Ver: N/A + Class: Q + Level: 1 + Dir: devices/bjt + Status: + + Enhancements over the original model: + - Parallel Multiplier + - Temperature difference from circuit temperature + - Different area parameters for collector, base and emitter + + 7.2 BJT2 - Bipolar Junction Transistor + + Ver: N/A + Class: Q + Level: 2 + Dir: devices/bjt2 + Status: + + This is the BJT model written by Alan Gillespie to support lateral + devices. The model has been hacked by Dietmar Warning fixing some bugs + and adding some features (temp. dependency on resistors). + + Enhancements over the original model: + - Parallel Multiplier + - Temperature dependency on rc,rb,re + - Temperature difference from circuit temperature + - Different area parameters for collector, base and emitter + + 7.3 VBIC - Bipolar Junction Transistor + + Ver: N/A + Class: Q + Level: 4 & 9 + Dir: devices/vbic + Status: + + This is the Vertical Bipolar InterCompany model in version 1.2. The author + of VBIC is Colin McAndrew mcandrew@ieee.org. + Spice3 Implementation: Dietmar Warning DAnalyse GmbH + Web Site: http://www.designers-guide.com/VBIC/index.html + + Notes: This is the 4 terminals model, without excess phase and thermal + network. + + +8. FET devices + + 8.1 JFET - Junction Field Effect transistor + + Ver: N/A + Class: J + Level: 1 + Dir: devices/jfet + Status: + + This is the original spice JFET model. + + Enhancements over the original model: + - Alan Gillespie's modified diode model + - Parallel multiplier + - Instance temperature as difference for circuit temperature + + 8.2 JFET2 - Junction Field Effect Transistor (PS model) + + Ver: N/A + Class: J + Level: 2 + Dir: devices/jfet2 + Status: + + This is the Parker Skellern model for MESFETs. + + Web Site: http://www.elec.mq.edu.au/cnerf/psmodel.htm + + Enhancements over the original model: + - Parallel multiplier + - Instance temperature as difference for circuit temperature + + +9. HFET Devices + + Added code from macspice3f4 HFET1&2 and MESA model + Original note: + Added device calls for Mesfet models and HFET models + provided by Trond Ytterdal as of Nov 98 + + 9.1 HFET1 - Heterostructure Field Effect Transistor Level 1 + + Ver: N/A + Class: Z + Level: 5 + Dir: devices/hfet1 + Status: + + This is the Heterostructure Field Effect Transistor model from: + K. Lee, M. Shur, T. A. Fjeldly and T. Ytterdal + "Semiconductor Device Modeling in VLSI", + 1993, Prentice Hall, New Jersey + + Enhancements over the original model: + - Parallel multiplier + - Instance temperature as difference for circuit temperature + - Added pole-zero analysis + + + 9.2 HFET2 - Heterostructure Field Effect Transistor Level 2 + + Ver: N/A + Class: Z + Level: 6 + Dir: devices/hfet2 + Status: + + Simplified version of hfet1 + + Enhancements over the original model: + - Parallel multiplier + - Instance temperature as difference for circuit temperature + - Added pole-zero analysis + + +10. MES devices + + 10.1 MES - MESFET model + + Ver: N/A + Class: Z + Level: 1 + Dir: devices/mes + Status: + + This is the original spice3 MESFET model (Statz). + + Enhancements over the original model: + - Parallel multiplier + - Alan Gillespie junction diodes implementation + + + Added code from macspice3f4 HFET1&2 and MESA model + Original note: + Added device calls for Mesfet models and HFET models + provided by Trond Ytterdal as of Nov 98 + +10.2 MESA - MESFET model (MacSpice3f4) + + Ver: N/A + Class: Z + Level: 2,3,4 + Dir: devices/mesa + Status: + + This is a multilevel model. It contains code for mesa levels + 2,3 and 4 + + Enhancements over the original model: + - Parallel multiplier + - Instance temperature as difference from circuit temperature + - Added pole-zero analysis + + + +11. MOS devices + + 11.1 MOS1 - Level 1 MOS model + + Ver: N/A + Class: M + Level: 1 + Dir: devices/mos1 + Status: + + This is the so-called Schichman-Hodges model. + + Enhancements over the original model: + - Parallel multiplier + - Temperature difference from circuit temperature + + 11.2 MOS2 - Level 2 MOS model + + Ver: N/A + Class: M + Level: 2 + Dir: devices/mos2 + Status: + + This is the so-called Grove-Frohman model. + + Enhancements over the original model: + - Parallel multiplier + - Temperature difference from circuit temperature + + + 11.3 MOS3 - Level 3 MOS model + + Ver: N/A + Class: M + Level: 3 + Dir: devices/mos3 + Status: + + Enhancements over the original model: + - Parallel multiplier + - Temperature difference from circuit temperature + + + 11.4 MOS6 - Level 6 MOS model + + Ver: N/A + Class: M + Level: 6 + Dir: devices/mos6 + Status: + + Enhancements over the original model: + - Parallel multiplier + - Temperature difference from circuit temperature + + + 11.5 MOS9 - Level 9 MOS model + + Ver: N/A + Class: M + Level: 9 + Dir: devices/mos9 + Status: + + This is a slightly modified Level 3 MOSFET model. + (Whatever the implementer have had in mind.) + Not to confuse with Philips level 9. + Enhancements over the original model: + - Temperature difference from circuit temperature + + + 11.6 BSIM1 - BSIM model level 1 + + Ver: N/A + Class: M + Level: 4 + Dir: devices/bsim1 + Status: + + Enhancements over the original model: + - Parallel multiplier + - Noise analysis + + BUGS: + Distortion analysis probably does not + work with "parallel" devices. Equations + are too intricate to deal with. Any one + has ideas on the subject ? + + + 11.7 BSIM2 - BSIM model level 2 + + Ver: N/A + Class: M + Level: 5 + Dir: devices/bsim2 + Status: + + Enhancements over the original model: + - Parallel multiplier + - Noise analysis + + + 11.8 BSIM3v0 - BSIM model level 3 + + Ver: 3.0 + Class: M + Level: 8 & 49, version = 3.0 + Dir: devices/bsim3v0 + Status: TO BE TESTED AND IMPROVED + + + 11.9 BSIM3v1 - BSIM model level 3 + + Ver: 3.1 + Class: M + Level: 8 & 49, version = 3.1 + Dir: devices/bsim3v1 + Status: TO BE TESTED AND IMPROVED + + This is the BSIM3v3.1 model modified by Serban Popescu. + This is level 49 model. It is an implementation that supports + "HDIF" and "M" parameters. + + + 11.10 BSIM3 - BSIM model level 3 + + Ver: 3.2.4 + Class: M + Level: 8 & 49, version = 3.2.2, 3.2.3, 3.2.4 + Dir: devices/bsim3v32 (level 3.2.4) + Status: o.k. + + This is another BSIM3 model from Berkeley Device Group. + You can find some test netlists with results for this model + on its web site. + + Web site: http://www-device.eecs.berkeley.edu/~bsim3 + + Enhancements over the original model: + - Parallel Multiplier + - delvto, mulu0 instance parameter + - ACM Area Calculation Method + - Multirevision code (supports all 3v3.2 minor revisions) + - NodesetFix + + + 11.11 BSIM3 - BSIM model level 3 + + Ver: 3.3.0 + Class: M + Level: 8 & 49, version = 3.3.0 + Dir: devices/bsim3 (level 3.3.0) + Status: o.k. + + This is the actual BSIM3 model from Berkeley Device Group. + You can find some test netlists with results for this model + on its web site. + + Web site: http://www-device.eecs.berkeley.edu/~bsim3 + + Enhancements over the original model: + - Parallel Multiplier + - ACM Area Calculation Method + - Multirevision code (supports all 3v3.2 minor revisions) + - NodesetFix + - Support for Multi-core processors using OpenMP + + + 11.12 BSIM4 - BSIM model level 4 + + Ver: 4.2.0 - 4.6.5 + Class: M + Level: 14 & 54, version = 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6 + Dir: devices/bsim4 (level 4.6.5) + Status: o.k. + + This is the actual BSIM4 model from Berkeley Device Group. + Test are available on its web site. + + Web site: http://www-device.eecs.berkeley.edu/~bsim3/bsim4.html + + Enhancements over the original model: + - Parallel Multiplier + - NodesetFix + - Support for Multi-core processors using OpenMP + + + 11.13 HiSIM2 - Hiroshima-university STARC IGFET Model + + Ver: 2.7.0 + Class: M + Level: 61, 68 + Dir: devices/hisim2 + Status: TO BE TESTED. + + This is the HiSIM2 model available from Hiroshima University + (Ultra-Small Device Engineering Laboratory) + + Web site: http://home.hiroshima-u.ac.jp/usdl/HiSIM.html + + + 11.14 HiSIM_HV - Hiroshima-University STARC IGFET High Voltage Model + + Ver: 1.2.3 + Class: M + Level: 62, 73 + Dir: devices/hisimhv + Status: TO BE TESTED. + + This is the HiSIM_HV model available from Hiroshima University + (Ultra-Small Device Engineering Laboratory) + + Web site: http://home.hiroshima-u.ac.jp/usdl/HiSIM.html + + +12. SOI devices + + 12.1 BSIM3SOI_FD - SOI model (fully depleted devices) + + Ver: 2.1 + Class: M + Level: 55 + Dir: devices/bsim3soi_fd + Status: TO BE TESTED. + + FD model has been integrated. + There is a bsim3soifd directory under the test + hierarchy. Test circuits come from the bsim3soi + + Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi + + + + 12.2 BSIM3SOI_DD - SOI Model (dynamic depletion model) + + Ver: 2.1 + Class: M + Level: 56 + Dir: devices/bsim3soi_dd + Status: TO BE TESTED. + + There is a bsim3soidd directory under the + test hierarchy. Test circuits come from bsim3soi + + Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi + + + + 12.3 BSIM3SOI_PD - SOI model (partially depleted devices) + + Ver: 2.2.1 + Class: M + Level: 57 + Dir: devices/bsim3soi_pd + Status: TO BE TESTED. + + PD model has been integrated. There is a bsim3soipd directory + under the test hierarchy. Test circuits come from the bsim3soi + + Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi + + + + 12.4 BSIMSOI - Berkeley SOI model (partially/full depleted devices) + + Ver: 4.3.1 + Class: M + Level: 10 & 58 + Dir: devices/bsim3soi + Status: o.k. + + This is the actual version from Berkeley. This version is + backward compatible with its previous versions BSIMSOI3.x. + Usable for partially/full depleted devices. + + Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi + + Enhancements over the original model: + - Parallel Multiplier + - Support for Multi-core processors using OpenMP + + + + 12.5 SOI3 - STAG SOI3 Model + + Ver: 2.6 + Class: M + Level: 61 + Dir: devices/soi3 + Status: OBSOLETE + + + +13. Verilog-A models + + Configuring ngspice with ADMS (see Readme.adms) following + devices are available: + + 13.1 EKV MOS Model + + Ver: 2.6 + Level: 44 + Dir: devices/adms/ekv + Status: TO BE TESTED + + EKV version based on a contribution of Ivan Riis Nielsen 11/2006 + + Web site at: http://legwww.epfl.ch/ekv/ + (but EPFL is not publishing any usefull code) + + + 13.2 PSP MOS Model + + Ver: 102.1 + Level: 45 + Dir: devices/adms/psp102 + Status: TO BE TESTED + + Philips SimKit 2.5. + + + 13.3 HICUM0 Bipolar Model + + Ver: Level_0 Version_1.12 + Level: 7 + Dir: devices/adms/hicum0 + Status: TO BE TESTED + + A simplified version of HICUM Level2 model for BJT + Web site at: http://www.iee.et.tu-dresden.de/iee/eb/hic_new + + + 13.4 HICUM2 Bipolar Model + + Ver: Level_2 Version_2.22 + Level: 8 + Dir: devices/adms/hicum2 + Status: TO BE TESTED + + Web site at: http://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_start.html + + + 13.5 Mextram Bipolar Model + + Ver: 504.6.1 + Level: 6 + Dir: devices/adms/mextram + Status: TO BE TESTED + + Web site at: http://mextram.ewi.tudelft.nl/ and http://mextram.sourceforge.net/ + + 14. XSpice code models, see ngspice manual chapt. 12 diff --git a/Windows/spice/doc/FAQ b/Windows/spice/doc/FAQ new file mode 100644 index 00000000..e137c93c --- /dev/null +++ b/Windows/spice/doc/FAQ @@ -0,0 +1,376 @@ + Ngspice F.A.Q.Version 2.0 (ngspice 26 release) + Maintained by Paolo Nenzi, Holger Vogt + Last update: 02-01-2014 + + This document contains the Frequently Asked Questions (and Answers) + for ngspice project. + __________________________________________________________________________ + + Table of Contents + + + 1. INTRODUCTION AND GENERAL INFORMATION + 1.1 What is ngspice? + 1.2 What is sharedspice? + 1.3 What is tclspice ? + 1.4 Why resurrecting Berkeley's Spice? + 1.5 What is the project's goal? + 1.6 What you are going to do? + 1.7 Legal issues + 1.8 What mailing lists exist for ngspice? + 1.9 Are the mailing lists archived anywhere? + 1.10 What newsgroups exist for ngspice? + 1.11 Where can I get a copy of ngspice? + 1.12 Where should I look on the World Wide Web for ngspice stuff? + 1.13 Where should I look on the World Wide Web for Spice documentation? + + 2. DEVELOPMENT + 2.1 What is the current version? + 2.2 What are the latest features in the current release? + 2.3 What does it look like? + 2.4 Who are the authors of ngspice? + 2.5 How can I report a bug/request for a feature? + 2.6 How can I join the development? + + 3. SOLUTIONS TO COMMON MISCELLANEOUS PROBLEMS + 3.1 What systems are supported? + 3.2 I get errors when I try to compile the source code, why? + 3.3 This document didn't answer my question. Where else can I look for + an answer? + + 4. ADMINISTRATIVE INFORMATION AND ACKNOWLEDGEMENTS + 4.1 Feedback + 4.2 Formats in which this FAQ is available + 4.3 Authorship and acknowledgements + 4.4 Disclaimer and Copyright + + + ______________________________________________________________________ + + 1. INTRODUCTION AND GENERAL INFORMATION + + + + 1.1 What is ngspice ? + + Ngspice is a mixed-level/mixed-signal circuit simulator, based on three + open source software packages: Spice3f5, Cider1b1 and Xspice, and + including many bug fixes and enhancements: + + - Spice3 is a widely used circuit simulator. It was developed by the + University of California at Berkeley (UCB), by "a cast of thousand" + (as they say) initially under the guide of Donald O. Peterson. + + - Cider is a mixed-level simulator that already includes Spice3f5 and + adds a device simulator to it: DSIM. Cider couples the circuit level + simulator to the device simulator to provide greater simulation + accuracy (at the expense of greater simulation time). Critical + devices can be described with technology parameters (numerical + models) and non critical ones with the original spice's compact + models. + + - Xspice is an extension to Spice3 that provides code modeling support + and simulation of digital components through an embedded event + driven algorithm. + + The NG prefix has lot of meanings: Next Generation, New Good, etc. + Choose or invent the one you prefer. The heart of the project is the + ngspice program, with its tremendous advancements. + + + 1.2 What is sharedspice ? + + Sharedspice is an interface option to ngspice. It compiles the simulator + into a shared object (or dynamic link library), providing full control + of ngspice to any suitable controlling program (GUI, optimizer, + development system, etc., to be provided by the user). + + + 1.3 What is tclspice ? + + Tclspice is a another interface option of ngspice, providing a tcl/tk + interface to the user. Tclspice is both a batch and interactive simulator + and a building block for simulator applications. Analyses can be run + from a tcl script and vector plotted or post processed using tcl. A small + GUI may be built by the user to analyze a circuit or a set of circuits. + Tclspice is obtained compiling ngspice activating an additional option. + + + 1.4 Why resurrecting Berkeley's Spice? + + Berkeley's Spice can be considered the father of most circuit + simulators available today. It is an old but still good piece of + software, it may not be the fastest or the most reliable but it's + free, it's available in source code and most of the electrical + simulators inherited it's syntax. Spice3 is based on proven numerical + algorithms (most commercial implementations have only strengthened + them), implements most of the models for MOSFET submicron design + and has a powerful set of analyses. The readily availability of + its source code in the past made this simulator the de-facto standard. + + + 1.5 What is the project's goal? + + Ngspice is both a maintenance and enhancement project. It is a maintenance + project because it aims to provide the free EDA community the best spice3 + simulator available. This means fixing bugs, adding new features but always + in the spice3 framework. Achieving compatibility with commercial spice based + simulators and provide users the latest devices models are important goals + of the project. Improvements in the postprocessing (data handling + capabilities) and user interface are other goals. + + + 1.6 What you are going to do? + + An official roadmap for ngspice was never drawn. Contributions made by + developers drive ngspice development and the roadmap is built day by + day by developers writing on the lists. Ngspice development activity + can be summarized in 3 points: + + + Compatibility: Ngspice should be compatible with commercial products, + thus allowing people to use the netlist generated for such tools. As + most of the commercial simulators available tracked each other in netlist + language, this should not be an impossible task. The most important goal + here is to provide a reliable support for model libraries coming from + foundries. + + + Compact models: The interest in using ngspice is intimately connected + to the available models. To provide the latest models available for + active and passive devices is a fundamental goal of the project. In + this direction we are integrating ADMS model compiler into ngspice. + + + Documentation: Commercial simulators come with very good manuals + containing tutorials, description of models equations, example of + use, suggestions, etc. Spice came with little documentation. The + Spice3f manual, available on the Internet has been used as the basis + for the new manual. It will be constantly improved during ngspice + development and integrated with the documentation accompanying Xspice + and Cider. The ngspice manual today contains description of all + features ngspice is offering. It is however not a tutorial of ngspice + usage, but there are now several good ones available on the internet + (see http://ngspice.sourceforge.net/tutorials.html). + + + 1.7 Legal issues + + The ngspice base license is new BSD, as provided by UCB. For some parts + of the code other compatible licences apply. Please see file COPYING + for details. + + + 1.8 What mailing lists exist for ngspice? + + There are two general mailing lists dedicated to the ngspice project. + + Users mailing list: + This list is for ngspice users. Examples, problems, bug reports + and general discussion on ngspice can be sent here. + + Developers mailing list: + The list is dedicated to ngspice development. Developers should + subscribe here, to follow the program development. May be used + to send patches, and technical discussion on ngspice. + + Send an empty message with Subject "help" to the following addresses + to get instructions. + + + + + Send an empty message to the following address to Subscribe. + + + + + Documentation about the user interface of + these mailing lists can be found at: + http://www.gnu.org/software/mailman/mailman-member + + + 1.9 Are the mailing lists archived anywhere ? + + Yes, the lists are archived. There are two places where to look for + archives. The project started on the IEEE Central and South Italy + web server and then moved to sourceforge. Sourceforge provides an + archiving service that cam be accessed via the summary page: + + http://sourceforge.net/p/ngspice/mailman/ + + + + 1.10 What newsgroups exist for ngspice? + + There is no ngspice specific newsgroup. Sourceforge offers additional + discussion groups for ngspice, please see + + http://sourceforge.net/p/ngspice/discussion/ + + ngspice threads may appear on newsgroups dedicated to circuit + simulation and electronic design. + + + 1.11 Where can I get a copy of ngspice? + + You can download ngspice from: + + http://sourceforge.net/projects/ngspice/files/ng-spice-rework/ + + + 1.12 Where should I look on the World Wide Web for ngspice stuff? + + Look at the official Ngpice Web Page: + + http://ngspice.sourceforge.net + + + 1.13 Where should I look on the World Wide Web for Spice documentation? + + There is a detailed ngspice manual available at: + http://ngspice.sourceforge.net/docs.html + + Others docs are assembled at: + http://ngspice.sourceforge.net/literature.html + + + + 2. DEVELOPMENT + + + 2.1. What is the current version? + + The latest version released is: + + * ngspice-26 (released on 04/01/2013) + + + 2.2. What are the latest features in the current release? + +- New features: + + add temperature coefficients for B source + + commands "mdump", "mrdump" to dump matrix to file + + allow `time', `temper', and `hertz' in expressions with behavioral R, L, C + + Enable ctrl-c to interrupt a simulation also for Windows GUI + + tests/bsim4: use the standard CMC model check + + implement exit code for command "quit" + + .nodeset all = value + + memristor code model in extradev + + new scalable diode model including tunnel component + + variable xtrtol may override the XSPICE reduction of trtol + + XSPICE example: delta-sigma converter + + XSPICE: new d_source model + + new option noopac + + bsim3: make additonal parameters accessible with @mxx[par] + + enable Mac OS X compilation + + option reseries = val + + commands "snsave", "snload" + + update hisim to version 2.7.0, new qa tests + + hisimhv update to version 1.2.3, new qa tests + + allow Ctrl-d to quit + + jfet model temperature extension, tcv and bex parameter + + speed up vector handling by hash table for vector address storage and retrieval + + update PSS code + + +- Bug fixes: + + many, many ... please see + http://ngspice.git.sourceforge.net/git/gitweb.cgi?p=ngspice/ngspice;a=shortlog;pg=0 + + remove memory leaks + + update tclspice for MS Windows + + adms3 removed due to licensing issues + + Many small bugs + + + + 2.3. What does it look like? + + Ngspice, as the original Spice3 (and Xspice and Cider) is a command + line simulator, but with a graphics output capability. + + + 2.4. Who are the authors of ngspice? + + The development is open to anyone who wish to contribute. If the + original Spice3 was made with the contribution of "a cast of + thousand", ngspice can only increase that number. An incomplete + list of contributor makes the "acknowledgements" page of the ngspice + manual. + + + 2.5. How can I report a bug/request for a feature? + + The ngspice summary page (hosted on Sourceforge) has bug-reporting, + feature-request and bugs trackers. You can use them or subscribe to + mailing lists and post there. The former is preferred since almost + it allows to track all necessary actions upon a bug. The web site at + http://ngspice.sourceforge.net/bugrep.html will give you more details. + + + 2.6. How can I join the development? + + To join the development just code the feature you want to add and send + your patch in the mailing list. Before you start coding check the + latest development release of ngspice from our git repository. + It might be that your feature has already been implemented. + + There is no bureaucracy here. + + + + 3. SOLUTIONS TO COMMON MISCELLANEOUS PROBLEMS + + + 3.1. What systems are supported? + + Ngspice is written in C, and uses some GNU extensions, then you need + a GNU C compiler and a UNIX environment to compile it. Ngspice can + be compiled under Windows using the mingw or cygwin environment as + well as MS Visual Studio. + + + 3.2. I get errors when I try to compile the source code, why? + + This is a one-million-euros question :). + + Write a mail to the user's list describing the problem and providing + information on the type of hardware, the flavour of operating system. + + + 3.3. This document didn't answer my question. Where else can I look + for an answer? + + Read old messages from the mailing list archive, search the web site + or read the docs. Upgrade to the latest version of ngspice, many + problems are fixed in the new versions. If you still can't find an + answer, post your question to the mailing lists. + + + + 4. ADMINISTRATIVE INFORMATION AND ACKNOWLEDGEMENTS + + + 4.1. Feedback + + Send your comments about this F.A.Q. to: + + Paolo Nenzi . + + Send your comments about ngspice to: + + Paolo Nenzi . + + + 4.2. Formats in which this FAQ is available + + This document is available only in ASCII format in the ngspice source + package. + + + 4.3. Authorship and acknowledgements + + Parts of the questions and answers are originate from Paolo Nenzi. + + + 4.4. Disclaimer and Copyright + + This document is provided as is. The information in it is not + warranted to be correct: you use it at your own risk. diff --git a/Windows/spice/doc/INSTALL b/Windows/spice/doc/INSTALL new file mode 100644 index 00000000..23c1f877 --- /dev/null +++ b/Windows/spice/doc/INSTALL @@ -0,0 +1,699 @@ +Ngspice installation instructions +================================= + +Table of contents + + 1 Ngspice installation (LINUX) + 1.1 Prerequisites + 1.2 Install from tarball (e.g. ngspice-26.tar.gz) + 1.3 Install from git repository + 1.4 Advanced Install + 1.4.1 Most useful options + 1.4.2 Options Specific to Using Ngspice + 1.4.3 Options Useful for Debugging Ngspice + 2 Compilers and Options + 3 Compiling For Multiple Architectures + 4 Installation Names + 5 Optional Features + 6 Specifying the System Type + 7 Sharing Defaults + 8 Operation Controls + 9 NGSPICE COMPILATION UNDER WINDOWS OS + 9.1 How to make ngspice with MINGW and MSYS + 9.2 make ngspice with MS Visual Studio 2008 + 9.3 make ngspice with pure CYGWIN + 9.4 ngspice console app with MINGW or CYGWIN + + +This file describes the procedures to install ngspice from sources. + + +1 Ngspice Installation (LINUX, maybe others) + ==================== + +1.1 Prerequisites + + Ngspice is written in C and thus a complete C compilation environment + is needed. Almost any LINUX offers a complete C development environment. + Ngspice is developed on GNU/Linux with gcc and GNU make. + + The following software must be installed in your system to compile ngspice: + bison, flex, and X11 headers and libs. + + If you want to compile the source from the git repository you need + additional software: autoconf, automake, libtool, texinfo, readline. + + The following software may be needed when enabling additional features: + editline, tcl/tk, adms + + Please have a look at the actual ngspice manual, downloadable at + http://ngspice.sourceforge.net/docs.html, which gives you much more + information on ngspice and its usage. + + +1.2 Install from tarball (e.g. ngspice-26.tar.gz) + + This covers installation from a release distribution (for example + ngspice-26.tar.gz, the so called tar ball). + + After downloading the tar ball to a local directory unpack it using: + + $ tar -zxvf ngspice-26.tar.gz + + Now change directories in to the top-level source directory (where this + INSTALL file can be found). + + You should be able to do: + + $ mkdir release + $ cd release + $ ../configure --with-x --with-readline=yes --disable-debug + $ make + $ sudo make install + + The default install directory for executables is /usr/local/bin. + + A simple ../configure might be sufficient for a basic ngspice, but the preferred + arguments to ../configure are + --with-x --with-readline=yes and --disable-debug + providing you with a comfortably working ngspice (see section 1.4 for details). + + See the section titled 'Advanced Install' for instructions about additional arguments + that can be passed to ../configure to customise the build and installation. + + Do not use the script ./autogen.sh, because it is not required for + compiling and installing ngspice from the tarball. + + A fully featured ngspice on LINUX may be obtained with the following commands: + $ mkdir release + $ cd release + $ ../configure --with-x --enable-xspice --disable-debug --enable-cider --with-readline=yes --enable-openmp + $ make 2>&1 | tee make.log + $ sudo make install + + To remove the executables and libraries from the install directory, you may call + $ sudo make uninstall + + +1.3 Install from the git repository + + This section describes how to install from source code taken directly + from the git repository. It is intended for those who want to use the most + recent enhancements of ngspice and for developers. For user install + instructions using source from a released distributions, please see the + sections titled 'Install from tarball' and 'Advanced Install'. + + Download ngspice sources from the git repository as described on the sourceforge project page + (see http://ngspice.sourceforge.net/download.html and click on the git link) + + Now change directories in to the top-level source directory (where this + INSTALL file can be found). + + The project uses the GNU build process. The compile output should go into a separate + directory, so to e.g. maintain separate debug and release versions. + + $ ./autogen.sh + $ mkdir debug + $ cd debug + $ ../configure --with-x --with-readline=yes + $ make + $ sudo make install + + See the section titled 'Advanced Install' for instructions about arguments + that can be passed to ./configure to customise the build and installation. + + Preferred arguments to ./configure to obtain a comfortably working ngspice may be + --with-readline=yes and --disable-debug (for a smaller and speed optimized + executable). + + A fully featured ngspice on LINUX may be obtained with the following commands: + $ ./autogen.sh --adms + $ mkdir release + $ cd release + $ ../configure --with-x --enable-xspice --disable-debug --enable-cider --with-readline=yes --enable-openmp --enable-adms + $ make 2>&1 | tee make.log + $ sudo make install + + If a problem is found with the build process, please submit a report to + the ngspice development team. Please provide information about your system + and any ./configure arguments you are using, together with any error + messages. Ideally you would have tried to fix the problem yourself first. + If you have fixed the problem then the development team will love to hear + from you. + + +1.4 Advanced Install + + Some extra options can be provided to './configure'. To get all available + options do: + + $ ./configure --help + + Some of these options are generic to the GNU build process that is used by + Ngspice, other are specific to Ngspice. + + The following sections provide some guidance and descriptions for many, + but not all, of these options. + + 1.4.1 Most useful options: + + --enable-adms + ADMS is an experimental model compiler that translates + Verilog-A compact models into C code that can be compiled into + ngspice. This is (as of ngspice-26) still experimental, some + features (e.g. noise) are missing. If you want to use it, please + refer to the ADMS section on ngspice web site. + + --enable-cider + Cider is a mixed-level simulator that couples Spice3 and DSIM + to simulate devices from their technological parameters. + + --enable-xspice + Enable XSpice enhancements, + A mixed signal simulator built upon spice3 with codemodel + dynamic loading support. See the ngspice manual for details. + + --with-readline=yes + Enable GNU readline support for the command line interface. + + --enable-openmp + Compile ngspice for multi-core processors. + Parallelization is done by OpenMP, for MOS models in BSIM3.3.0 + BSIM4.6.0 and and BSOI4 only. See the ngspice manual for details. + + --disable-debug + This option will remove the '-g' option passed to the compiler + and add -O2 optimisation (instead of default O0). + This speeds up simulating significantly, and is recommended for + normal use. + + +1.4.2 Options Specific to Using Ngspice + +Most of the options now following are not well maintained, are not tested or even maybe obsolete. + + --enable-capbypass + Bypass calculation of cbd/cbs in the mosfets if the vbs/vbd + voltages are unchanged. + + --enable-cluster + Clustering code for distributed simulation. This is a + contribution never tested. This code comes from TCLspice + implementation and is implemented for transient analysis only. + + --enable-expdevices + Enable experimental devices. This option is used by developers + to mask devices under development. Almost useless for users. + + --enable-experimental + This enables some experimental code. Specifically it enables: + * The ability to save and load snapshots: adds + interactive keywords 'savesnap' and 'loadsnap'. + + --enable-help + Force building nghelp. This is deprecated. + + --enable-ndev + Enable NDEV interface, (experimental, needs updating) + A TCP/IP interface to external device simulator such as GSS. + For more information, please visit the homepage of GSS at + http://gss-tcad.sourceforge.net + + --enable-newpred + Enable the NEWPRED symbol in the code. + + --enable-newtrunc + Enable the newtrunc option + + --enable-nodelimiting + Experimental damping scheme + + --enable-nobypass + Don't bypass recalculations of slowly changing variables + + --enable-predictor + Enable a predictor method for convergence + + --enable-sense2 + Use spice2 sensitivity analysis + + --enable-xgraph + Compile the Xgraph plotting program. + Xgraph is a plotting package for X11 and was once very popular. + + --with-editline=yes + Enables the use of the BSD editline library (libedit). + See http://www.thrysoee.dk/editline/ + + --with-tcl=tcldir + When configured with this option the tcl module + "tclspice" is compiled and installed instead of + plain ngspice. + + --with-ngshared + This option let you compile ngspice as a shared + library or dll, allowing an application controlling + ngspice. This option excludes using --with-x or + --with-wingui. Useful additional options are + --enable-xspice --enable-cider --enable-openmp. + No graphics inetrface is provided, this has to be + handled by the controlling application. + + +1.4.3 Options Useful for Debugging Ngspice + + --enable-ansi + Configure will try to find an option for your compiler so that + it expects ansi-C. + +--enable-asdebug + Debug sensitivity code *ASDEBUG*. + + --enable-blktmsdebug + Debug distortion code *BLOCKTIMES* + + --enable-checkergcc + Option for compilation with checkergcc. + + --enable-cpdebug + Enable ngspice shell code debug. + + --disable-debug + This option will remove the '-g' option passed to the compiler. + This speeds up compilation a *lot*, and is recommended for + normal use. + + --enable-ftedebug + Enable ngspice frontend debug. + + --enable-gc + Enable the Boehm-Weiser Conservative Garbage Collector. + + --enable-pzdebug + Debug pole/zero code. + + --enable-sensdebug + Debug sensitivity code *SENSDEBUG*. + + --enable-smltmsdebug + Debug distortion code *SMALLTIMES* + + --enable-smoketest + Enable smoketest compile. + + --enable-stepdebug + Turns on debugging of convergence stepping?? + + +2 Compilers and Options + ===================== + + Some systems require unusual options for compilation or linking that + the `configure' script does not know about. You can give `configure' + initial values for variables by setting them in the environment. Using + a Bourne-compatible shell, you can do that on the command line like + this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + + Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +3 Compiling For Multiple Architectures + ==================================== + + You can compile the package for more than one kind of computer at the + same time, by placing the object files for each architecture in their + own directory. To do this, you must use a version of `make' that + supports the `VPATH' variable, such as GNU `make'. `cd' to the + directory where you want the object files and executables to go and run + the `configure' script. `configure' automatically checks for the + source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' + variable, you have to compile the package for one architecture at a time + in the source code directory. After you have installed the package for + one architecture, use `make distclean' before reconfiguring for another + architecture. + +4 Installation Names + ================== + + By default, `make install' will install the package's files in + `/usr/local/bin', `/usr/local/man', etc. You can specify an + installation prefix other than `/usr/local' by giving `configure' the + option `--prefix=PATH'. + + You can specify separate installation prefixes for + architecture-specific files and architecture-independent files. If you + give `configure' the option `--exec-prefix=PATH', the package will use + PATH as the prefix for installing programs and libraries. + Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give + options like `--bindir=PATH' to specify different values for particular + kinds of files. Run `configure --help' for a list of the directories + you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed + with an extra prefix or suffix on their names by giving `configure' the + option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + + When installed on MinGW with MSYS alternative paths are not fully supported. + See 'How to make ngspice with MINGW and MSYS' below for details. + + +5 Optional Features + ================= + + Some packages pay attention to `--enable-FEATURE' options to + `configure', where FEATURE indicates an optional part of the package. + They may also pay attention to `--with-PACKAGE' options, where PACKAGE + is something like `gnu-as' or `x' (for the X Window System). The + `README' should mention any `--enable-' and `--with-' options that the + package recognizes. + + For packages that use the X Window System, `configure' can usually + find the X include and library files automatically, but if it doesn't, + you can use the `configure' options `--x-includes=DIR' and + `--x-libraries=DIR' to specify their locations. + +6 Specifying the System Type + ========================== + + There may be some features `configure' can not figure out + automatically, but needs to determine by the type of host the package + will run on. Usually `configure' can figure that out, but if it prints + a message saying it can not guess the host type, give it the + `--host=TYPE' option. TYPE can either be a short name for the system + type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + + See the file `config.sub' for the possible values of each field. If + `config.sub' isn't included in this package, then this package doesn't + need to know the host type. + + If you are building compiler tools for cross-compiling, you can also + use the `--target=TYPE' option to select the type of system they will + produce code for and the `--build=TYPE' option to select the type of + system on which you are compiling the package. + +7 Sharing Defaults + ================ + + If you want to set default values for `configure' scripts to share, + you can create a site shell script called `config.site' that gives + default values for variables like `CC', `cache_file', and `prefix'. + `configure' looks for `PREFIX/share/config.site' if it exists, then + `PREFIX/etc/config.site' if it exists. Or, you can set the + `CONFIG_SITE' environment variable to the location of the site script. + A warning: not all `configure' scripts look for a site script. + +8 Operation Controls + ================== + + `configure' recognizes the following options to control how it + operates. + + `--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + + `--help' + Print a summary of the options to `configure', and exit. + + `--quiet' + `--silent' + `-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + + `--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + + `--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + + `configure' also accepts some other, not widely useful, options. + + + +9 NGSPICE COMPILATION UNDER WINDOWS OS + ==================================== + +9.1 How to make ngspice with MINGW and MSYS + + Creating ngspice with MINGW is a straight forward procedure, + if you have MSYS/MINGW installed properly. You will need some enhancements + to the standard install (FLEX and BISON have to be made available in MSYS). + Some links are given below which describe the procedures. + + Installing from the tarball, e.g. ngspice-26.tar.gz, is now simple: After + expanding, you may just run ./compile_min.sh from the ngspice-26 directory. + + The default installation location of ngspice is the Windows path + C:\spice. The install path can be altered by passing --prefix=NEWPATH + as an argument to ./configure during the build process. + + Put the install path you desire inside "", e.g. "D:/NewSpice". Be + careful to use forward slashes "/", not backward slashes "\" (something + still to be fixed). Then add --prefix="D:/NewSpice" as an argument to + ./configure in the normal way. + + The procedure of compiling a distribution (for example, a tarball from + the ngspice website), is as follows: + + $ cd ngspice-26 + $ mkdir release + $ cd release + $ ../configure --with-wingui ...and other options + $ make + $ make install + + The most useful options are: + --enable-xspice + --enable-cider + --disable-debug (-O2 optimization, no debug information) + + A fully featured ngspice on Windows may be obtained with the following commands: + $ ./autogen.sh --adms + $ mkdir release + $ cd release + $ ../configure --with-wingui --enable-cider --disable-debug --enable-openmp --enable-xspice --enable-adms + $ make install + + However, to compile code extracted from the git repository the procedure is + a little different. Firstly install git, e.g. from http://git-scm.com/download/win + To obtain ngspice, you may do the following: + + Open the git command window. Go to a directory of your choice, e.g. D:\Spice + $ cd /d/Spice + + Issue the command for downloading ngspice: + $ git clone git://ngspice.git.sourceforge.net/gitroot/ngspice/ngspice + + This will create directory /ngspice . + + Go to directory ngspice + $ cd /d/Spice/ngspice + Start compiling, e.g. by calling + $ ./autogen.sh --adms + $ ./compile_min.sh + + Update the ngspice files: + Go to directory ngspice + $ cd /d/Spice/ngspice + Issue command for update + $ git pull + + Instead of calling ./compile_min.sh, you may choose to issue + individual commands like: + $ cd ngspice + $ ./autogen.sh + $ mkdir release + $ cd release + $ ../configure --enable-maintainer-mode --with-wingui ...and other options + $ make + $ make install + + MINGW and MSYS can be downloaded from http://www.mingw.org/. The making of + ngspice and the code models *.cm for XSpice requires installation of BISON + and FLEX to MSYS. A typical installation was tested with: + + bison-2.0-MSYS.tar.gz + flex-2.5.4a-1-bin.zip + libiconv-1.9.2-1-bin.zip + libintl-0.14.4-bin.zip + + Bison 2.0 is now superseeded by newer releases (Bison 2.3, see + http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=67879) + + The last three are from + http://sourceforge.net/project/showfiles.php?group_id=23617. + + Installing from git needs more packages to MSYS in advance: + git, automake, autoconf, libtool + + You may also look at + http://www.mingw.org/wiki/HOWTO_Install_the_MinGW_GCC_Compiler_Suite + http://www.mingw.org/wiki/MSYS + http://www.mingw.org/wiki/HOWTO_Create_an_MSYS_Build_Environment. + + An alternative compiler setup is available at + http://tdm-gcc.tdragon.net/ + + +9.2 make ngspice with MS Visual Studio 2008 + + ngspice may be compiled with MS Visual Studio 2008 or 2010. + + CIDER and XSPICE are included, but the code models for XSPICE + (*.cm) are not (yet) made. You may however use the code models + created with MINGW (which in fact are dlls), as e.g. found in + the ngspice binary distribution our made as described in 9.1. + + There is currently no installation procedure provided, you may + however install the executable manually as described in the + installation tree below. + + The directory (visualc) with its files + vngspice.sln (project starter) and + vngspice.vcproj (project contents) + allows to compile and link ngspice with MS Visual Studio 2008. + Newer Visual Studio versions will translate the project files + into their compatible format (tested with MS Visual Studio 2010). + + /visualc/include contains a dedicated config.h file. It contains the + preprocessor definitions required to properly compile the code. + strings.h has been necessary during setting up the project. + + Install Microsoft Visual Studio 2008 C++ . The + MS VS 2008 C++ Express Edition (which is available at no cost from + http://www.microsoft.com/express/product/default.aspx) is adequate. + + Goto /ngspice/visualc. + + Start MS Visual Studio 2008 by double click onto vngspice.sln. + + After MS Visual Studio has opened up, select debug or release version + by checking 'Erstellen' , 'Konfigurations-Manager' 'Debug' or 'Release'. + + Start making ngspice (called vngspice.exe) by selecting 'Erstellen' and + 'vngspice neu erstellen'. + + Object files will be created and stored in visualc/debug or visualc/release. + The executable will be stored to visualc/debug/bin or visualc/release/bin. + + An installation tree (as provided with MINGW make install) and also used by + vngspice is (maybe created manually): + + C:\Spice\ + bin\ + ngspice.exe + nghelp.exe + ngmakeidx.exe + ngnutmeg.exe + cmpp.exe + lib\ + spice\ + analog.cm + digital.cm + spice2poly.cm + extradev.cm + extravt.cm + share\ + info\ + dir + ngspice.info + ngspice.info-1 + .. + ngspice.info-10 + man\ + man1\ + ngmultidec.1 + ngnutmeg.1 + ngsconvert.1 + ngspice.1 + ngspice\ + helpdir\ + ngspice.idx + ngspice.txt + scripts\ + ciderinit + devaxis + devload + setplot + spectrum + spinit + + If you intend to install vngspice into another directory, e.g. D:\MySpice, + you have to edit /visualc/include/config.h and alter the entries: + #define NGSPICEBINDIR "C:/Spice/bin" + #define NGSPICEDATADIR "C:/Spice/share/ngspice" + to + #define NGSPICEBINDIR "D:/MySpice/bin" + #define NGSPICEDATADIR "D:/MySpice/share/ngspice" + + If the code model files *.cm are not available, you will get warning messages, + but you may use ngspice in the normal way (of course without XSPICE extensions). + + + +9.3 make ngspice with pure CYGWIN + + If you don't have libdl.a you may need to link libcygwin.a + to libdl.a symbolically. + + for example: + + $ cd /lib + $ ln -s libcygwin.a libdl.a. + + The procedure of compiling is the same as Linux. + + +9.4 ngspice console app with MINGW or CYGWIN + + Omitting the configure flag --with-wingui will yield a console ngspice. + You then will not have any graphics interface. In CYGWIN you may add --with-x + for the X11 graphics (not available in mingw). A typical configure command + may look like + ./configure --enable-adms --enable-xspice --enable-cider --enable-openmp + --disable-debug CFLAGS=-m32 LDFLAGS=-m32 prefix=C:/Spice + tested with TDM mingw. + + + +10 NGSPICE COMPILATION UNDER MAC OS X + ================================== + +10.1 Use precompiled binary package + 1. Install an X11 interface (like Xquartz) + 2. Install the downloaded NGSPICE package + 3. Open a terminal window and start using NGSPICE + +10.2 Compile NGSPICE manually from a tarball + 1. Install an X11 interface (like Xquartz) + 2. Install MacPorts from http://www.macports.org + 3. Execute this command: + sudo port install bison flex ncurses xorg-libXaw + 4. Configure NGSPICE invoking "./configure". A complete set of feature is: + ./configure --enable-cider --enable-xspice --enable-openmp --enable-pss --enable-debug=no + 5. Compile NGSPICE invoking "make" + 6. Install NGSPICE invoking "make install" or "sudo make install" + +10.3 Compile NGSPICE manually from git + 1. Install an X11 interface (like Xquartz) + 2. Install MacPorts from http://www.macports.org + 3. Execute this command: + sudo port install automake autoconf libtool bison flex ncurses xorg-libXaw + 4. Execute this command: + ./autogen.sh or ./autogen.sh --adms (if you want to enable ADMS) + 5. Configure NGSPICE invoking "./configure". A complete set of feature is: + ./configure --enable-cider --enable-xspice --enable-openmp --enable-pss --enable-debug=no + ./configure --enable-adms --enable-cider --enable-xspice --enable-openmp --enable-pss --enable-debug=no (if you want to enable ADMS) + 6. Compile NGSPICE invoking "make" + 7. Install NGSPICE invoking "make install" or "sudo make install" diff --git a/Windows/spice/doc/NEWS b/Windows/spice/doc/NEWS new file mode 100644 index 00000000..dcbf695a --- /dev/null +++ b/Windows/spice/doc/NEWS @@ -0,0 +1,578 @@ +Ngspice-26, Jan 4th, 2014 +============ + +- New features: + + fft command may (optionally) use fftw3 library + + add nint() rounding function + + usage of 'temper' in behavioral devices + + check for soa (safe operating area) in several device models + + library processing rewritten completely to enhance ngspice + compatibility (.lib) + + include file processing rewritten to allow nesting and various + absolute and relative path names (.inc) + + asinh, acosh, atanh functions + + shared ngspice option added: ngspice optionally compiles as + a shared object or dynamic link library + + use a hash table to massively speed up parsing the netlist + + implement a very basic .if/.else block + + implement a signed power function `pwr' for controlled sources + + implement multiplier `m' in F, G source + + apply Area Calculation Method (ACM) to the bsim3v3.3 model + + implement `tc1', `tc2' instance parameters + +- Bug fixes: + + many, many ... please see + http://sourceforge.net/p/ngspice/ngspice/ci/master/tree/ + and check the 'history' button on the upper right. + + removed memory leaks + + +Ngspice-25, Jan 4th, 2013 +============ + +- New features: + + add temperature coefficients for B source + + commands "mdump", "mrdump" to dump matrix to file + + allow `time', `temper', and `hertz' in expressions with behavioral R, L, C + + Enable ctrl-c to interrupt a simulation also for Windows GUI + + tests/bsim4: use the standard CMC model qa check + + implement exit code for command "quit" + + .nodeset all = value + + memristor code model in extradev + + new scalable diode model including tunnel component + + variable xtrtol may override the XSPICE reduction of trtol + + XSPICE example: delta-sigma converter + + XSPICE: new d_source model + + new option noopac + + bsim3: make additonal parameters accessible with @mxx[par] + + enable Mac OS X compilation + + option reseries = val + + commands "snsave", "snload" + + update hisim to version 2.7.0, new qa tests + + hisimhv update to version 1.2.3, new qa tests + + allow Ctrl-d to quit + + jfet model temperature extension, tcv and bex parameter + + speed up vector handling by hash table for vector address storage and retrieval + + update PSS code + + +- Bug fixes: + + many, many ... please see + http://ngspice.git.sourceforge.net/git/gitweb.cgi?p=ngspice/ngspice;a=shortlog;pg=0 + + remove memory leaks + + update tclspice for MS Windows + + adms3 removed due to licensing issues + + +Ngspice-24, Jan 29th, 2012 +============ + +- New features: + + .csparam allows to tranfer a param into a vector in .control ... .endc + + functions floor and ceil + + syntax Gxxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) + + syntax Gxxx n1 n2 value={equation} or Exxx n1 n2 value={equation} + + variable strict_errorhandling to exit ngspice with exit code 1 + if any error occurs during circuit parsing + + command altermod allows reading from file + + command "devhelp" to show available devices and describe device parameters + + command "inventory" to print the number of istances of each device. + + function cph(vec) delivers phase from a vector without jumps at +-PI + + enable 64 bit compilation in MS Visual Studio + + --adms3 flag to compile with (experimental) adms code + + still very experimental pss code + + command 'remcirc' to remove a circuit from the list + + command 'wrdata' aknowledges appendwrite and prints complex variables + + allow comment lines inside of command files + + path variable NGSPICE_INPUT + + 'Filesource' code model + +- Bug fixes: + + More on prototypes, type casts, reordering of functions, compiler warnings + + fix a numerical problem in the hisim2 and hisimhv models + + plot i(vdd) from a loaded rawfile + + fix the guard for device generated internal nodes (via CKTmkVolt()) + + reduce memory leaks for command 'reset' + + parameter processing for nested .subckt + + bsim4/b4noi.c: correct init the correlated noise slot in noiseDens and lnNdens vector + + Many small bugs + +Ngspice-23, June 5th, 2011 +============ + +- New features: + + Reduction of trtol to 1 only if 'A' devices in the circuit and xspice is enabled + + command wrs2p to write a s-parameter file using Touchstone vers. 1 format + + d_source d_state d_ram, test cases for those xspice codemodels + + transient noise simulation added to independent voltage and current sources + + Random telegraph noise added to independent voltage and current sources + + 'time = nnn' in stop command added + + random voltage generator option trrandom to independent voltage and current sources + + ngspice build possible in a separate directory (e.g. in ng-spice-rework/release) + + update FIND .. WHEN measurements + + diode & bjt temperature model update with tlev and tlevc + + merge bsim3v1a code with bsim3v0 and bsim3v1s code with bsim3v1 + + bjt2: removed - all GP extensions of this model are now in the bjt model + + HiSIM_HV model vers. 1.2.1 added + + bsim3v32: delvto and mulu0 as instance parameters + + Replace HiSIM1 by HiSIM_2.5.1_Release_20110407 + +- Bug fixes: + + More on prototypes, type casts, reordering of functions, compiler warnings + + allow models like 2N2904 or 2SK136 also in subcircuits + + fix sensitvity calculation (for the dc-2+.cir testcase) + + allow multiple call to setup w/ correct node collapsing + + Many small bugs + +Ngspice-22, Sept 26th, 2010 +============ + +- New features: + + OpenMP multicore support for BSIM3, BSIM4, and BSIMSOI4 + + reinstate {$var} expansion in interactive interpreter + + .TITLE line added + + update to 'spectrum' script + + par('expression') in .four, .plot, .print, .meas, .save commands + + command 'option' for use in spinit, .spiceinit, and in scripts + + adms procedure updated + + new random number generator, random functions sunif() and sgauss() + + ngspice manual updated + +- Bug fixes: + + Major code cleanup to reduce compiler/linker warnings: ansi function prototypes, + void/char pointers to named pointers, explicit type casts and many more + + Many small bugs + + +Ng-spice-rework-21, Jun3, 13th 2010 +============ + +- Updated Devices: BSIMSOI 4.3.1 + +- New features: + + Compatibility: C, L, R, devices and E, G sources with expressions + Variables HERTZ, TIME, TEMPER added + + E, G sources with pwl function + + New manual + + Plotting with Gnuplot, + + Writing wrdata for simple text table to file + + .measure improved + + transmission line models improved + +- Bug fixes: + + Many small bugs, memory leaks, memory overflows + +Ng-spice-rework-20, November, 16th 2009 +============ + +Ngspice release 20 is the second release of the simulator in 2009. + +- Fixes: model names starting with a number (1n4001) are now correctly parsed. + The .global command has been reinstated (it was previously disabled) and + error messages now display the corresponding line numberin the input deck. +- New Features: .measure command for transient, ac and dc analyses (still not + complete, e.g. DERIV is missing). +- Devices: Updated BISM4 model to revision 4.6.5. Added PWL (PieceWise Linear) + functionality for B (arbitrary generator) sources. + + +Ng-spice-rework-19, April, 23rd 2009 +============ + +Ngspice release 19 came early after release 18. It reveals an important work +in compile scripts, many bug fixes in memory management, interface, and work in device models. + +- Compile scripts: tclspice and ADMS compiling fixes. Architecture compiling + fixes for SunOS, MS Visual Studio, MINGW, Cygwin. +- Memory management: fixed memory leaks, modifies memory management for + MS Windows, integration of espice bugfixes and enhancements, bug fixes in + plots and cli interface. +- Rework of BSim models, integration of EPFL-EKV model V2.63, ADMS models + mextram, hicum0, hicum2. + + +Ng-spice-rework-18 +============ + +Rework-18 is introduces several new features into ngspice. This is a major +release that comes after more than three years. During the silent years +ngspice developers worked in CVS to stabilize and introduce new features +into the simulator. + +- Tclspice simulator library has been merged with ngspice. Now you can + compile ngapice or tclspice by asserting a configure switch. See README.tcl +- New options have been introduced: brief, listing, autostop and scale +- Support for .lib file has been introduced. This allows the use of + third party model libraries in ngspice. +- .measure statements: avg, integ, rms, max, min, delay, param +- .global statements t support for global nodes whose name is not expanded + when flattening the netlist. +- .func macros for inlining functions into netlists. +- Improved the numparam library to support fully parametrized netlists. +- BSIM model binning. +- new multi-input gate VCVS using XSPICE extensions. + + +Ng-spice-rework-17 +============ + +This is a bug fix release. Previous release tarball did not included +an include file necessary for compiling numparam library. + + +Ng-spice-rework-16 +============ + +Rework-16 comes out after almost one year of CVS development (from +15-fixedRC3). This release improves ngspice in three ways: + +- Bug fixing: most of the bugs that affected rework-15 have been fixed, + thus ngspice is more stable, especially the xspice extension, the + subcircuit (X devices) handling and the numparam library. + +- New features: netlist syntax has been expandend allowing for end-of-line + comments. A ".global" card has beed added to define global nodes, i.e. + nodes that are not expanded in subcircuits. It is possible to define TC + for resistors on the instance line. The editline library can be used + instead of readline (no more GPL license violation). + +- Porting: ngspice now works (with xspice extension) on Windows using + MINGW/MSYS. + + +Ng-spice-rework-15 +============ + +Rework-15 release is a giant leap forward for ngspice. It incorporates +many (read most) of the improvements implemented in tclspice during the +two years long "sleep" of ngspice and adds many others. The incomplete +list of new features incorporated are: + + - Xspice simulator (with codemodel dynamic loading support): + a mixed signal simulator built upon spice3. + + - Cider simulator: + a mixed level simulator built upon spice3. + + - Numparam library: + a library that allows for parameter substitution at netlist level. + + - Improved models: + Diode model includes periphery effects and high level of injection effects, + BJT and BJT2 enhanced. + BSIM3 now includes ACM. + BSIM4 implementation corrected. + + -New models: + VBIC (3 Terminals, no excess phase and thermal network), + HiSIM. + + - Frontend leaks closed. + Now frontend works as it should. + + - Many new example file. + + - Xgraph plotting program included. + + +Ng-spice-rework-14 +============ + +This is a major release in terms of bug-fixes. Some enhancements +have been included: BSIM4 model and support for EKV model. The +source code for the latter must be obtained from EKV web site +(see DEVICE for more info). To enable EKV support you have +to obtain the code first and then use the configure switch +"--enable-ekv". + +The spice code contains an option to debug frontend code, now +this is available in configure as "--enable-ftedebug". + + + +Ng-spice-rework-13 +============ + +This is a major release in terms of fixes and enhancements. +A garbage collector support has been added. If the configuration +script detects that you have installed GC (Bohem-Weiser conservative +garbage collector), it will use it. Some memory leaks have been +fixed too. + +Enhancements to the code comes from Alan's contribute code, a +description of improvements follows (extracted form Alan's mail): + +Output File Format Changes - + + (NOTE: Do not rely on this, we may revert to the old format + in the next release). + + Text mode .OP results even though "rawfile" written. + + Internal device nodes are not saved to "rawfile" (reduces + file size). Optionally, these internal nodes can be replaced + by device currents and saved. + + +DC Convergence Enhancements - + + "Source-Stepping" algorithm modified with a "Dynamic" step size. + After each successful step, the node voltages are saved, the + source-factor is increased by the step-factor, and the step-factor + is increased (for the next step). If the step fails, i.e. the + circuit does not converge, the source-factor is set to the value + from the previous successful step, the previously stored node + voltages are restored, the step-factor is reduced, the source + factor is increased by this smaller step-factor, and convergence + is attempted again. + + Same thing done for "Gmin-stepping" algorithm. + + "Gshunt" option added. This sets the "diagGmin" variable used in + the gmin-stepping algorithm to a non-zero value for the final + solution. (Normally this is set to zero for the final solution). + This helps for circuits with floating nodes (and for some others + too). + + The Gmin implementation across the substrate diodes of MOS1, MOS2, + MOS3, MOS6 and BSIM3 devices, and across BJT base-emitter and + base-collector diodes, was incorrect. Correcting this dramatically + improved DC convergence. (I think this also affects BSIM1 and 2 + but I haven't fixed them yet !) + + The gm, gmb and gds calculations in the MOS3 model were all wrong. + The device equations were fixed, leading to much improved + convergence. + + The Vcrit value used for diode voltage limiting was calculated + without taking into account the device area (and in some cases + without using the temperature corrected saturation current). + This could cause floating point overflows, especially in device + models designed to be scaled by a small area, e.g. 2u by 2u diodes + (area=4e-12). This is now fixed for Diode, BJT, MOS1, MOS2, and + MOS3 models. + + The diode voltage limiting was modified to add negative voltage + limiting. Negative diode voltages are now limited to 3*Vdp-10, + where Vdp is the voltage from the previous iteration. If Vdp is + positive, then the voltage is limited to -10V. This prevents some + more floating point overflows. (Actually, I'm still playing with + the best values for this). + + The Spice3 "fix" for the MOS3 gds discontinuity between the + linear and saturated regions only works if the VMAX parameter + is non-zero. A "tweak" has been added for the VMAX=0 case. + + +Transient Convergence Enhancements - + + Temperature correction of various diode capacitances was implemented + slightly incorrectly, leading to capacitance discontinuities in + simulations at temperatures other than nominal. This affected the + Diode and MOS3 models. + + A mistake in the implementation of the MOS3 source-bulk capacitance + model resulted in a charge storage discontinuity. This has been fixed. + + The level 2 MOSFET model seems to calculate Von and Vth values for + the threshold and subthreshold values respectively, but then uses + Vbin to calculate the Vdsat voltage used to find the drain current. + However, a jump statement uses Von to decide that the device is in + the "cutoff" region, which means that when this jump allows the + drain current to be calculated, Vdsat can already be well above + zero. This leads to a discontinuity of drain current with respect + to gate voltage. The code is now modified to use Vbin for the jump + decision. It looks like the code should actually use Vth as the + threshold voltage, but since other SPICE simulators follow the + original Berkeley code, this was left alone. + + +New Model Parameters - + + A device multiplier instance parameter "M" (i.e. M devices in + parallel) was added to the MOS1,2,3 and BSIM3 mosfet models. + + +Input Read-in and Checking - + + Numbers beginning with a + sign got the input routine confused. + Fixed now. + + Attempts to nodeset (or .IC) non-existent nodes are flagged with a + warning. + + PWL statements on Voltage or Current sources are now checked for + "non-increasing" time-points at the start of the simulation. + Previously each time-point was checked as it was reached during + the simulation, which could be very annoying if you made a mistake + which caused the simulation to fail after hours of run-time. + + A check which was performed at the end of each sub-circuit expansion + was moved to the top level. This check makes sure that all sub-circuits + have been defined, but in its original position, it meant that if a + sub-circuit included ANY .MODEL statements at all, then ALL the models + called in that sub-circuit must also be defined within that + sub-circuit. Now SPICE behaves as expected, i.e. a subcircuit may + define its own models, but may also use models defined at any level + above. + + +Miscellaneous Fixes/Enhancements - + + MOS devices reported only half of the Meyer capacitances, and did not + include overlap capacitances, when reporting to the .OP printout, or + when storing device capacitances to the "rawfile". + + The ideal switch devices had no time-step control to stop their + controlling voltages/currents overshooting the switching thresholds. + The time-step control has been modified to use the last two time + points to estimate if the next one will move the controlling + voltage/current past a switching threshold. If this looks likely, + then the time-step is reduced. + + The "rawfile" writing routines have been modified to print the + "reference value" to the console during the simulation. This lets + the user see exactly how far and how fast the simulation is + proceeding. + + .OP printout tidied up a lot to make the printout clearer. + + Analysis order changed to fix a "feature" where, if you ask for + a .OP and a .TRAN in the same simulation, the node voltages + printed out correspond to the .OP, but the device data was from + the last timepoint of the .TRAN + + +Etc. - + + There are other minor bug fixes, and changes to reduce compiler + warnings. There are probably some more significant fixes which + I've forgotten :-) + + +Ng-spice-rework-12 +============ +Arno did a great work this summer! +The pole-zero analysis has been corrected. The error was introduced +in an attempt to eliminate compiler warnings. The source has been +reworked and info file have been updated. As you may see, a new dir +called "spicelib" has been created, another step toward the separation +of the simulator from the frontend. + +Ng-spice-rework-11 +============ + +Resistor code (device) has been modified to conform to spice3 device +coding standard. +A new step function (U2) has been introduced. +Documentation updated. + +Ng-spice-rework-10 +============ + +Added BSIM4 model and closed a couple of serious bugs. Added DEVICES +file to distribution. This file contains the status of device models +in this simulator. Read it, this file can save you a lot of time. + +Ng-spice-rework-9 +============ + +Thanks to Arno Peters now all device models are dynamically loaded on +demand. They are linked as shared libraries. The next step is the +dlopen() one which will make possible to link devices without any +recompilation. + + + +Ng-spice-rework-8 +============ + +Applied Arno's patch. + +From his mail message: + +Hi Paolo, + +I have prepared a source cleaning patch. + +Features: + + + patches don't get polluted with differences between automatically + generated Makefile.am files. Usually these make up the biggest part + of the patches. This allows me to read the patch on the mailing + list instead of sifting through 90% redundant and irrelevant changes. + + + the shell script autogen.sh automatically regenerates the required + files if the user has automake, autoconf and libtool installed. + + + this feature is only valuable to developers, not to end users. + + +Usage of this patch, once incorporated: + + # create a working tree to work from + cp -a ng-spice-rework-x ng-spice + + [ Changes made to ng-spice ] + + # clean up all the automatically generated files + cd ng-spice; make maintainer-clean + + # extract the differences + diff -ruN ng-spice-rework-x ng-spice > my.patch + + [ Patch sent to ng-spice mailing list or you ] + + # incorporate changes into the tree + cd ng-spice-rework-x; patch -p1 < my.patch + + # update the automatically generated files + cd ng-spice-rework-x; sh autogen.sh + + + + +Ng-spice-rework-7 (22 Mar 2000) +============ + +Bug fix release + + + +Ng-spice-rework-6 (29 Jan 2000) +============ + +This porting includes: + +1) BSIM3V3.1 model as level 49. This is the version modified by Serban +Popescu which understands the M parameter and implements HDIF. + +2) BSIM3V3.2 model al Level 50. This is the standard Berkeley version. + +3) Now the resistor model can accepts two different values for DC and +AC resistance. + + + +Ng-spice-rework-5 and 5_2 (Jan 2000) +============ + +Internal development release, buggy and not working. + +Ng-spice-rework-4 (22/12/99) +============ + +This porting includes a new feature: + +1) dynamically loading of some device code as an experimental feature +for the future GPL simulator. Thanks to Arno Peters and Manu Rouat. + +2) Patched the following bug (thanks to Andrew Tuckey for having +supplied the patch). + + * Wsw (current controlled switch) in subckt, parsing bug. + * scale factor in arbitrary source. + * bug in noise analysis. + * save segmentation faults. + + diff --git a/Windows/spice/doc/README b/Windows/spice/doc/README new file mode 100644 index 00000000..f5dfecc5 --- /dev/null +++ b/Windows/spice/doc/README @@ -0,0 +1,54 @@ +README for NGSPICE +================== + +Ngspice is a mixed-level/mixed-signal circuit simulator. Its code +is based on three open source software packages: Spice3f5, Cider1b1 +and Xspice. + +Spice3 does not need any introduction, is the most popular circuit +simulator. In over 30 years of its life Spice3 has become a de-facto +standard for simulating circuits. + +Cider couples Spice3f5 circuit level simulator to DSIM device simulator +to provide greater simulation accuracy of critical devices. DSIM +devices are described in terms of their structures and materials. + +Xspice is an extension to Spice3C1 that provides code modelling support +and simulation of digital components through an embedded event driven +algorithm. + +Ngspice is, anyway, much more than the simple sum of the packages +above, as many people contributed to the project with their experience, +their bug fixes and their improvements. If you are interested, browse +the site and discover what ngspice offers and what needs. If you think +you can help, join the development team. + +Ngspice is an ongoing project, growing everyday from users contributions, +suggestions and reports. What we will be able to do depends mostly on +user interests, contributions and feedback. + + +MAILING LISTS: +------------- + + There are two mailing lists dedicated to the use and development of ngspice. + + * ngspice-users@lists.sourceforge.net: + This list is the list for the users of the ngspice simulator. + + * ngspice-devel@lists.sourceforge.net: + ngspice development issues. Developers and "want to be" developers should + subscribe here. + + To subscribe the list(s), send a message to: + + + + + +WEB SITEs: +-------- + +This project is hosted on Sourceforge.net. +The home page is http://ngspice.sourceforge.net +The summary page is http://sourceforge.net/projects/ngspice diff --git a/Windows/spice/doc/ngspice26-manual.pdf b/Windows/spice/doc/ngspice26-manual.pdf new file mode 100644 index 00000000..4bd5b091 Binary files /dev/null and b/Windows/spice/doc/ngspice26-manual.pdf differ diff --git a/Windows/spice/examples/Monte_Carlo/MC_2_circ.sp b/Windows/spice/examples/Monte_Carlo/MC_2_circ.sp new file mode 100644 index 00000000..bacd07b9 --- /dev/null +++ b/Windows/spice/examples/Monte_Carlo/MC_2_circ.sp @@ -0,0 +1,109 @@ +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 +* +.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 diff --git a/Windows/spice/examples/Monte_Carlo/MC_2_control.sp b/Windows/spice/examples/Monte_Carlo/MC_2_control.sp new file mode 100644 index 00000000..9b9f3606 --- /dev/null +++ b/Windows/spice/examples/Monte_Carlo/MC_2_control.sp @@ -0,0 +1,43 @@ +* 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 + save buf $ we just need output vector buf, save memory by more than 10x + let mc_runs = 100 $ 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 + set sourcepath = ( D:\Spice_general\ngspice\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 + reset + set run ="$&run" $ create a variable from the vector + set rndseed = $run $ set the rnd seed value to the loop index + source MC_2_circ.sp $ load the circuit, including model data + tran 15p 200n 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 diff --git a/Windows/spice/examples/Monte_Carlo/MC_ring.sp b/Windows/spice/examples/Monte_Carlo/MC_ring.sp new file mode 100644 index 00000000..58e5c141 --- /dev/null +++ b/Windows/spice/examples/Monte_Carlo/MC_ring.sp @@ -0,0 +1,251 @@ +Perform Monte Carlo simulation in ngspice +* 25 stage Ring-Osc. 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 +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 +* variables. This has the advantage that you may change the parameter set +* without having to look up the values again. + set n1vth0=@n1[vth0] + set n1u0=@n1[u0] + set n1tox=@n1[tox] + set n1lint=@n1[lint] + set n1wint=@n1[wint] + set p1vth0=@p1[vth0] + set p1u0=@p1[u0] + set p1tox=@p1[tox] + set p1lint=@p1[lint] + set p1wint=@p1[wint] +* +* run the simulation loop + dowhile run <= mc_runs + * without the reset switch there is some strange drift + * towards lower and lower frequencies + reset + * run=0 simulates with nominal parameters + if run > 0 + 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 50n 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. +* Is there a variable which may be set if there is no convergence? +* Then we might skip this run and continue with a new run. It does not exist for now. +* So we have to rely on the robustness of the following steps not leading +* to a seg fault if the tran data are missing. +* + 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 + * save the linearized data for having equal time scales for all runs + linearize buf $ linearize only buf, no other vectors needed + 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 + 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 + * 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 +* setplot $plot_out +* The following command does not work here. Why not? Probably not a real copy. +* destroy $dt $ save memory, we don't need this plot (spec) any more + setplot $dt $ go back to the previous plot + let run = run + 1 + end +***** plotting ********************************************************** +* plot {$plot_out}.allv + plot {$plot_out}.vout0 $ just plot the tran output with nominal parameters +* setplot $plot_fft +* plot db(mag(ally)) xlimit .1G 1G ylimit -80 10 + plot db(mag({$plot_fft}.ally)) xlimit .1G 1G ylimit -80 10 +* +* 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 $ subtract 1 because with started with unitvec containing ones +* calculate jitter + let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6 + echo + echo Max. jitter is "$&diff40" MHz + 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 diff --git a/Windows/spice/examples/Monte_Carlo/MonteCarlo.sp b/Windows/spice/examples/Monte_Carlo/MonteCarlo.sp new file mode 100644 index 00000000..608dc4cf --- /dev/null +++ b/Windows/spice/examples/Monte_Carlo/MonteCarlo.sp @@ -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 diff --git a/Windows/spice/examples/Monte_Carlo/OpWien.sp b/Windows/spice/examples/Monte_Carlo/OpWien.sp new file mode 100644 index 00000000..91b45d08 --- /dev/null +++ b/Windows/spice/examples/Monte_Carlo/OpWien.sp @@ -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=12000m +.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 diff --git a/Windows/spice/examples/TransImpedanceAmp/README b/Windows/spice/examples/TransImpedanceAmp/README new file mode 100644 index 00000000..ea5c249d --- /dev/null +++ b/Windows/spice/examples/TransImpedanceAmp/README @@ -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. diff --git a/Windows/spice/examples/TransImpedanceAmp/output.net b/Windows/spice/examples/TransImpedanceAmp/output.net new file mode 100644 index 00000000..d6eb355f --- /dev/null +++ b/Windows/spice/examples/TransImpedanceAmp/output.net @@ -0,0 +1,454 @@ +********************************************************* +* 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/ * +********************************************************* +* 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 40ns +.plot tran Vout2 +.END diff --git a/Windows/spice/examples/TransmissionLines/cpl1_4_line.sp b/Windows/spice/examples/TransmissionLines/cpl1_4_line.sp new file mode 100644 index 00000000..7c46b655 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/cpl1_4_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/cpl2_2_line.sp b/Windows/spice/examples/TransmissionLines/cpl2_2_line.sp new file mode 100644 index 00000000..713e3334 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/cpl2_2_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/cpl3_4_line.sp b/Windows/spice/examples/TransmissionLines/cpl3_4_line.sp new file mode 100644 index 00000000..d5715481 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/cpl3_4_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/cpl4_txl_2_line.sp b/Windows/spice/examples/TransmissionLines/cpl4_txl_2_line.sp new file mode 100644 index 00000000..986c9b63 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/cpl4_txl_2_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/cpl_ibm1.sp b/Windows/spice/examples/TransmissionLines/cpl_ibm1.sp new file mode 100644 index 00000000..1077d00e --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/cpl_ibm1.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/cpl_ibm2.sp b/Windows/spice/examples/TransmissionLines/cpl_ibm2.sp new file mode 100644 index 00000000..8aeff85d --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/cpl_ibm2.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/cpl_ibm3.sp b/Windows/spice/examples/TransmissionLines/cpl_ibm3.sp new file mode 100644 index 00000000..0a0d5e22 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/cpl_ibm3.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/ltra1_1_line.sp b/Windows/spice/examples/TransmissionLines/ltra1_1_line.sp new file mode 100644 index 00000000..2d9c93bb --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra1_1_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/ltra1_4_line.sp b/Windows/spice/examples/TransmissionLines/ltra1_4_line.sp new file mode 100644 index 00000000..8d30a757 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra1_4_line.sp @@ -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 + diff --git a/Windows/spice/examples/TransmissionLines/ltra2_2_line.sp b/Windows/spice/examples/TransmissionLines/ltra2_2_line.sp new file mode 100644 index 00000000..2a4ceaa7 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra2_2_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/ltra3_2_line.sp b/Windows/spice/examples/TransmissionLines/ltra3_2_line.sp new file mode 100644 index 00000000..1a756520 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra3_2_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/ltra4_1_line.sp b/Windows/spice/examples/TransmissionLines/ltra4_1_line.sp new file mode 100644 index 00000000..8dc8ada6 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra4_1_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/ltra5_1_line.sp b/Windows/spice/examples/TransmissionLines/ltra5_1_line.sp new file mode 100644 index 00000000..35459404 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra5_1_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/ltra6_2_line.sp b/Windows/spice/examples/TransmissionLines/ltra6_2_line.sp new file mode 100644 index 00000000..45279129 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra6_2_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/ltra7_4_line.sp b/Windows/spice/examples/TransmissionLines/ltra7_4_line.sp new file mode 100644 index 00000000..7be4615a --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/ltra7_4_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/txl1_1_line.sp b/Windows/spice/examples/TransmissionLines/txl1_1_line.sp new file mode 100644 index 00000000..fdbec1ae --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/txl1_1_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/txl2_3_line.sp b/Windows/spice/examples/TransmissionLines/txl2_3_line.sp new file mode 100644 index 00000000..41b54996 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/txl2_3_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/txl3_1_line.sp b/Windows/spice/examples/TransmissionLines/txl3_1_line.sp new file mode 100644 index 00000000..466c2591 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/txl3_1_line.sp @@ -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 diff --git a/Windows/spice/examples/TransmissionLines/txl4_1_line.sp b/Windows/spice/examples/TransmissionLines/txl4_1_line.sp new file mode 100644 index 00000000..91586479 --- /dev/null +++ b/Windows/spice/examples/TransmissionLines/txl4_1_line.sp @@ -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 diff --git a/Windows/spice/examples/cider/bicmos/bicmos.lib b/Windows/spice/examples/cider/bicmos/bicmos.lib new file mode 100644 index 00000000..cc1eb20d --- /dev/null +++ b/Windows/spice/examples/cider/bicmos/bicmos.lib @@ -0,0 +1,127 @@ +.MODEL M_NPN nbjt level=2 ++ title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR ++ * Since, we are only simulating half of a device, we double the unit width ++ * 1.0 um emitter length ++ options defw=2.0u ++ output dc.debug stat ++ ++ *x.mesh w=2.5 n=5 ++ x.mesh w=2.0 h.e=0.05 h.m=0.2 r=1.5 ++ x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 ++ ++ y.mesh l=-0.2 n=1 ++ y.mesh l= 0.0 n=5 ++ y.mesh w=0.10 h.e=0.002 h.m=0.01 r=1.5 ++ y.mesh w=0.15 h.s=0.002 h.m=0.01 r=1.5 ++ y.mesh w=0.35 h.s=0.01 h.m=0.2 r=1.5 ++ y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 ++ y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.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=1e19 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 ++ + char.l=0.094 lat.rotate ++ 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 + +.MODEL M_NMOS_1 numos ++ output dc.debug stat ++ title 1.0um NMOS Device ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1.0 x.h=2.0 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1.0 x.h=2.0 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1.0 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=2.0 x.h=3.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob fieldmob surfmob srh auger conctau bgn ^aval ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_1 numos ++ title 1.0um PMOS Device ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1.0 x.h=2.0 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1.0 x.h=2.0 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1.0 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=2.0 x.h=3.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob fieldmob surfmob srh auger conctau bgn ^aval ++ method ac=direct itlim=10 onec diff --git a/Windows/spice/examples/cider/bicmos/bicmpd.cir b/Windows/spice/examples/cider/bicmos/bicmpd.cir new file mode 100644 index 00000000..8096b49b --- /dev/null +++ b/Windows/spice/examples/cider/bicmos/bicmpd.cir @@ -0,0 +1,26 @@ +BiCMOS Pulldown Circuit + +VSS 2 0 0v + +VIN 3 2 0v (PULSE 0.0v 4.2v 0ns 1ns 1ns 9ns 20ns) + +M1 8 3 5 11 M_NMOS_1 W=4u L=1u +VD 4 8 0v +VBK 11 2 0v + +Q1 10 7 9 M_NPN AREA=8 +VC 4 10 0v +VB 5 7 0v +VE 9 2 0v + +CL 4 6 1pF +VL 6 2 0v + +.IC V(10)=5.0v V(7)=0.0v +.TRAN 0.1ns 5ns 0ns 0.1ns +.PLOT TRAN I(VIN) + +.include bicmos.lib + +.OPTIONS ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/bjt/astable.cir b/Windows/spice/examples/cider/bjt/astable.cir new file mode 100644 index 00000000..bdb4a8a8 --- /dev/null +++ b/Windows/spice/examples/cider/bjt/astable.cir @@ -0,0 +1,34 @@ +Astable multivibrator + +vin 5 0 dc 0 pulse(0 5 0 1us 1us 100us 100us) +vcc 6 0 5.0 +rc1 6 1 1k +rc2 6 2 1k +rb1 6 3 30k +rb2 5 4 30k +c1 1 4 150pf +c2 2 3 150pf +q1 1 3 0 qmod area = 100p +q2 2 4 0 qmod area = 100p + +.option acct bypass=1 +.tran 0.05us 8us 0us 0.05us +.print tran v(1) v(2) v(3) v(4) + +.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 + +.end diff --git a/Windows/spice/examples/cider/bjt/colposc.cir b/Windows/spice/examples/cider/bjt/colposc.cir new file mode 100644 index 00000000..bd4d31fa --- /dev/null +++ b/Windows/spice/examples/cider/bjt/colposc.cir @@ -0,0 +1,33 @@ +Colpitt's Oscillator Circuit + +r1 1 0 1 +q1 2 1 3 qmod area = 100p +vcc 4 0 5 +rl 4 2 750 +c1 2 3 500p +c2 4 3 4500p +l1 4 2 5uH +re 3 6 4.65k +vee 6 0 dc -15 pwl 0 -15 1e-9 -10 + +.tran 30n 12u +.print tran v(2) + +.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 + +.options acct bypass=1 +.end diff --git a/Windows/spice/examples/cider/bjt/ecp.cir b/Windows/spice/examples/cider/bjt/ecp.cir new file mode 100644 index 00000000..6fb2bda9 --- /dev/null +++ b/Windows/spice/examples/cider/bjt/ecp.cir @@ -0,0 +1,57 @@ +Emitter Coupled Pair + +VCC 1 0 5v +VEE 2 0 0v +RCP 1 11 10k +RCN 1 21 10k +VBBP 12 0 3v AC 1 +VBBN 22 0 3v +IEE 13 2 0.1mA +Q1 11 12 13 M_NPN AREA=8 +Q2 21 22 13 M_NPN AREA=8 + +.DC VBBP 2.75v 3.25001v 10mv +.PRINT V(21) V(11) + +.MODEL M_NPN nbjt level=2 ++ title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR ++ * Since, we are only simulating half of a device, we double the unit width ++ * 1.0 um emitter length ++ options defw=2.0u ++ ++ *x.mesh w=2.5 n=5 ++ x.mesh w=2.0 h.e=0.05 h.m=0.2 r=1.5 ++ x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 ++ ++ y.mesh l=-0.2 n=1 ++ y.mesh l= 0.0 n=5 ++ y.mesh w=0.10 h.e=0.002 h.m=0.01 r=1.5 ++ y.mesh w=0.15 h.s=0.002 h.m=0.01 r=1.5 ++ y.mesh w=0.35 h.s=0.01 h.m=0.2 r=1.5 ++ y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 ++ y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.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=1e19 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 ++ + char.l=0.094 lat.rotate ++ 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 + +.OPTIONS ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/bjt/invchain.cir b/Windows/spice/examples/cider/bjt/invchain.cir new file mode 100644 index 00000000..92c6fad8 --- /dev/null +++ b/Windows/spice/examples/cider/bjt/invchain.cir @@ -0,0 +1,38 @@ +4 Stage RTL Inverter Chain + +vin 1 0 dc 0v pwl 0ns 0v 1ns 5v +vcc 12 0 dc 5.0v +rc1 12 3 2.5k +rb1 1 2 8k +q1 3 2 0 qmod area = 100p +rb2 3 4 8k +rc2 12 5 2.5k +q2 5 4 0 qmod area = 100p +rb3 5 6 8k +rc3 12 7 2.5k +q3 7 6 0 qmod area = 100p +rb4 7 8 8k +rc4 12 9 2.5k +q4 9 8 0 qmod area = 100p + +.print tran v(3) v(5) v(9) +.tran 1e-9 10e-9 + +.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 + +.option acct bypass=1 +.end diff --git a/Windows/spice/examples/cider/bjt/meclgate.cir b/Windows/spice/examples/cider/bjt/meclgate.cir new file mode 100644 index 00000000..33542d5d --- /dev/null +++ b/Windows/spice/examples/cider/bjt/meclgate.cir @@ -0,0 +1,74 @@ +Motorola MECL III ECL gate +*.dc vin -2.0 0 0.02 +.tran 0.2ns 20ns +vee 22 0 -6.0 +vin 1 0 pulse -0.8 -1.8 0.2ns 0.2ns 0.2ns 10ns 20ns +rs 1 2 50 +q1 4 2 6 qmod area = 100p +q2 4 3 6 qmod area = 100p +q3 5 7 6 qmod area = 100p +q4 0 8 7 qmod area = 100p + +d1 8 9 dmod +d2 9 10 dmod + +rp1 3 22 50k +rc1 0 4 100 +rc2 0 5 112 +re 6 22 380 +r1 7 22 2k +r2 0 8 350 +r3 10 22 1958 + +q5 0 5 11 qmod area = 100p +q6 0 4 12 qmod area = 100p + +rp2 11 22 560 +rp3 12 22 560 + +q7 13 12 15 qmod area = 100p +q8 14 16 15 qmod area = 100p + +re2 15 22 380 +rc3 0 13 100 +rc4 0 14 112 + +q9 0 17 16 qmod area = 100p + +r4 16 22 2k +r5 0 17 350 +d3 17 18 dmod +d4 18 19 dmod +r6 19 22 1958 + +q10 0 14 20 qmod area = 100p +q11 0 13 21 qmod area = 100p + +rp4 20 22 560 +rp5 21 22 560 + +.model dmod d rs=40 tt=0.1ns cjo=0.9pf n=1 is=1e-14 eg=1.11 vj=0.8 m=0.5 + +.model qmod nbjt level=1 ++ x.mesh node=1 loc=0.0 ++ x.mesh node=10 loc=0.9 ++ x.mesh node=20 loc=1.1 ++ x.mesh node=30 loc=1.4 ++ x.mesh node=40 loc=1.6 ++ 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 + +.options acct bypass=1 +.print tran v(12) v(21) +.end diff --git a/Windows/spice/examples/cider/bjt/pebjt.lib b/Windows/spice/examples/cider/bjt/pebjt.lib new file mode 100644 index 00000000..afbdb36c --- /dev/null +++ b/Windows/spice/examples/cider/bjt/pebjt.lib @@ -0,0 +1,71 @@ +** +* Numerical models for a +* polysilicon emitter complementary bipolar process. +* The default device size is 1um by 10um (LxW) +** + +.model M_NPN nbjt level=1 ++ title One-Dimensional Numerical Bipolar ++ options base.depth=0.15 base.area=0.1 base.length=1.0 defa=10p ++ x.mesh loc=-0.2 n=1 ++ x.mesh loc=0.0 n=51 ++ x.mesh wid=0.15 h.e=0.0001 h.m=.004 r=1.2 ++ x.mesh wid=1.15 h.s=0.0001 h.m=.004 r=1.2 ++ domain num=1 material=1 x.l=0.0 ++ domain num=2 material=2 x.h=0.0 ++ material num=1 silicon ++ mobility mat=1 concmod=ct fieldmod=ct ++ material num=2 polysilicon ++ mobility mat=2 concmod=ct fieldmod=ct ++ doping gauss n.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 ++ doping gauss p.type conc=5e18 x.l=-0.2 x.h=0.0 char.len=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.len=0.100 ++ models bgn srh auger conctau concmob fieldmob ^aval ++ method devtol=1e-12 ac=direct itlim=15 + +.model M_NPSUB numd level=1 ++ title One-Dimensional Numerical Collector-Substrate Diode ++ options defa=10p ++ x.mesh loc=1.3 n=1 ++ x.mesh loc=2.0 n=101 ++ domain num=1 material=1 ++ material num=1 silicon ++ mobility mat=1 concmod=ct fieldmod=ct ++ doping gauss n.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 ++ doping unif p.type conc=1e15 x.l=0.0 x.h=2.0 ++ models bgn srh auger conctau concmob fieldmob ^aval ++ method devtol=1e-12 itlim=10 + +.model M_PNP nbjt level=1 ++ title One-Dimensional Numerical Bipolar ++ options base.depth=0.2 base.area=0.1 base.length=1.0 defa=10p ++ x.mesh loc=-0.2 n=1 ++ x.mesh loc=0.0 n=51 ++ x.mesh wid=0.20 h.e=0.0001 h.m=.004 r=1.2 ++ x.mesh wid=1.10 h.s=0.0001 h.m=.004 r=1.2 ++ domain num=1 material=1 x.l=0.0 ++ domain num=2 material=2 x.h=0.0 ++ material num=1 silicon ++ mobility mat=1 concmod=ct fieldmod=ct ++ material num=2 polysilicon ++ mobility mat=2 concmod=ct fieldmod=ct ++ doping gauss p.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 ++ doping gauss n.type conc=5e17 x.l=-0.2 x.h=0.0 char.len=0.200 ++ doping unif p.type conc=1e16 x.l=0.0 x.h=1.3 ++ doping gauss p.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 ++ models bgn srh auger conctau concmob fieldmob ^aval ++ method devtol=1e-12 ac=direct itlim=15 + +.model M_PNSUB numd level=1 ++ title One-Dimensional Numerical Collector-Substrate Diode ++ options defa=10p ++ x.mesh loc=1.3 n=1 ++ x.mesh loc=2.0 n=101 ++ domain num=1 material=1 ++ material num=1 silicon ++ mobility mat=1 concmod=ct fieldmod=ct ++ doping gauss p.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 ++ doping unif n.type conc=1e15 x.l=0.0 x.h=2.0 ++ models bgn srh auger conctau concmob fieldmob ^aval ++ method devtol=1e-12 itlim=10 diff --git a/Windows/spice/examples/cider/bjt/pz.cir b/Windows/spice/examples/cider/bjt/pz.cir new file mode 100644 index 00000000..ad3ee675 --- /dev/null +++ b/Windows/spice/examples/cider/bjt/pz.cir @@ -0,0 +1,16 @@ +PZ Analysis of a Common Emitter Amplifier + +Vcc 1 0 5v +Vee 2 0 0v + +Vin 3 0 0.7838 AC 1 +RS 3 4 1K +Q1 5 4 2 M_NPN AREA=4 SAVE +RL 1 5 2.5k +CL 5 0 0.1pF + +.INCLUDE pebjt.lib + +.PZ 3 0 5 0 vol pz + +.END diff --git a/Windows/spice/examples/cider/bjt/rtlinv.cir b/Windows/spice/examples/cider/bjt/rtlinv.cir new file mode 100644 index 00000000..f45eb983 --- /dev/null +++ b/Windows/spice/examples/cider/bjt/rtlinv.cir @@ -0,0 +1,29 @@ +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 + +.end diff --git a/Windows/spice/examples/cider/bjt/vco.cir b/Windows/spice/examples/cider/bjt/vco.cir new file mode 100644 index 00000000..d1b1a058 --- /dev/null +++ b/Windows/spice/examples/cider/bjt/vco.cir @@ -0,0 +1,45 @@ +Voltage controlled oscillator + +rc1 7 5 1k +rc2 7 6 1k + +q5 7 7 5 qmod area = 100p +q6 7 7 6 qmod area = 100p + +q3 7 5 2 qmod area = 100p +q4 7 6 1 qmod area = 100p + +ib1 2 0 .5ma +ib2 1 0 .5ma +cb1 2 0 1pf +cb2 1 0 1pf + +q1 5 1 3 qmod area = 100p +q2 6 2 4 qmod area = 100p + +c1 3 4 .1uf + +is1 3 0 dc 2.5ma pulse 2.5ma 0.5ma 0 1us 1us 50ms +is2 4 0 1ma +vcc 7 0 10 + +.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 + +.option acct bypass=1 +.tran 3us 600us 0 3us +.print tran v(4) +.end diff --git a/Windows/spice/examples/cider/diode/diode.cir b/Windows/spice/examples/cider/diode/diode.cir new file mode 100644 index 00000000..e0ace324 --- /dev/null +++ b/Windows/spice/examples/cider/diode/diode.cir @@ -0,0 +1,35 @@ +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) + +.END diff --git a/Windows/spice/examples/cider/diode/diotran.cir b/Windows/spice/examples/cider/diode/diotran.cir new file mode 100644 index 00000000..110d2550 --- /dev/null +++ b/Windows/spice/examples/cider/diode/diotran.cir @@ -0,0 +1,31 @@ +Diode Reverse Recovery + +* This file simulates reverse recovery of a diode as it switched from an +* on to off state. + +Vpp 1 0 0.7v (PWL 0ns 3.0v 0.1ns 3.0v 0.11ns -6.0v) (AC 1v) +Vnn 2 0 0v +R1 1 3 1k +D1 3 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=3e20 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=1 abstol=1e-15 itl2=100 +.tran 0.001ns 1.0ns +.print i(Vpp) + +.END diff --git a/Windows/spice/examples/cider/diode/pindiode.cir b/Windows/spice/examples/cider/diode/pindiode.cir new file mode 100644 index 00000000..1eb18b42 --- /dev/null +++ b/Windows/spice/examples/cider/diode/pindiode.cir @@ -0,0 +1,42 @@ +TWO-DIMENSIONAL PIN-DIODE CIRCUIT + +VIN 1 0 0.0v (PWL 0ns 0.8v 1ns -50.0v) +L1 1 2 0.5uH +VD 2 3 0.0v +D1 3 0 M_PIN AREA=200 IC.FILE="OP.0.d1" +VRC 2 4 0.0v +R1 4 5 100 +C1 5 0 1.0nF + +.MODEL M_PIN NUMD LEVEL=2 ++ options defw=1000u ++ 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.h=0.0 ++ electrode num=2 y.l=20.0 ++ ++ doping gauss p.type conc=1.0e20 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.0e20 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 1NS 100NS +.PRINT TRAN v(3) I(VIN) + +.END diff --git a/Windows/spice/examples/cider/jfet/jfet.cir b/Windows/spice/examples/cider/jfet/jfet.cir new file mode 100644 index 00000000..e3f00536 --- /dev/null +++ b/Windows/spice/examples/cider/jfet/jfet.cir @@ -0,0 +1,36 @@ +Two-dimensional Junction Field-Effect Transistor (JFET) + +VDD 1 0 0.5V +VGG 2 0 -1.0v AC 1V +VSS 3 0 0.0V +QJ1 1 2 3 M_NJF AREA=1 + +.MODEL M_NJF NBJT LEVEL=2 ++ options jfet defw=10.0um ++ output dc.debug phin phip equ.psi vac.psi ++ x.mesh w=0.2 h.e=0.001 r=1.8 ++ x.mesh w=0.8 h.s=0.001 h.m=0.1 r=2.0 ++ x.mesh w=0.8 h.e=0.001 h.m=0.1 r=2.0 ++ x.mesh w=0.2 h.s=0.001 r=1.8 ++ y.mesh w=0.2 h.e=0.01 r=1.8 ++ y.mesh w=0.8 h.s=0.01 h.m=0.1 r=1.8 ++ ++ domain num=1 mat=1 ++ material num=1 silicon ++ ++ elec num=1 x.l=0.0 x.h=0.0 y.l=0.0 y.h=1.0 ++ elec num=2 x.l=0.5 x.h=1.5 y.l=0.0 y.h=0.0 ++ elec num=3 x.l=2.0 x.h=2.0 y.l=0.0 y.h=1.0 ++ ++ doping unif n.type conc=3.0e15 ++ doping unif p.type conc=2.0e17 x.l=0.2 x.h=1.8 y.h=0.2 ++ ++ models bgn srh auger conctau concmob fieldmob ^aval + +.option acct bypass=1 temp=27 +*.op +.dc vgg 0.0 -2.0001 -0.1 +*.ac dec 10 1k 100g +.print i(vnn) + +.end diff --git a/Windows/spice/examples/cider/mos/bootinv.cir b/Windows/spice/examples/cider/mos/bootinv.cir new file mode 100644 index 00000000..4c2ea40d --- /dev/null +++ b/Windows/spice/examples/cider/mos/bootinv.cir @@ -0,0 +1,59 @@ +NMOS Enhancement-Load Bootstrap Inverter + +Vdd 1 0 5.0v +Vss 2 0 0.0v + +Vin 5 0 0.0v PWL (0.0ns 5.0v) (1ns 0.0v) (10ns 0.0v) (11ns 5.0v) ++ (20ns 5.0v) (21ns 0.0v) (30ns 0.0v) (31ns 5.0v) +M1 1 1 3 2 M_NMOS w=5u +M2 1 3 4 4 M_NMOS w=5u +M3 4 5 2 2 M_NMOS w=5u +CL 4 0 0.1pf +CB 3 4 0.1pf + +.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 init elec major ++ mobility material=1 init elec minor ++ mobility material=1 init hole major ++ mobility material=1 init 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 ++ method ac=direct onec + +.tran 0.2ns 40ns +.print v(4) +.options acct bypass=1 method=gear +.end diff --git a/Windows/spice/examples/cider/mos/charge.cir b/Windows/spice/examples/cider/mos/charge.cir new file mode 100644 index 00000000..845a14a8 --- /dev/null +++ b/Windows/spice/examples/cider/mos/charge.cir @@ -0,0 +1,57 @@ +MOS charge pump + +vin 4 0 dc 0v pulse 0 5 15ns 5ns 5ns 50ns 100ns +vdd 5 6 dc 0v pulse 0 5 25ns 5ns 5ns 50ns 100ns +vbb 0 7 dc 0v pulse 0 5 0ns 5ns 5ns 50ns 100ns +rd 6 2 10k +m1 5 4 3 7 mmod w=100um +vs 3 2 0 +vc 2 1 0 +c2 1 0 10pf + +.ic v(3)=1.0 +.tran 2ns 200ns +.options acct bypass=1 +.print tran v(1) v(2) + +.model mmod numos ++ x.mesh n=1 l=0 ++ x.mesh n=3 l=0.4 ++ x.mesh n=7 l=0.6 ++ x.mesh n=15 l=1.4 ++ x.mesh n=19 l=1.6 ++ x.mesh n=21 l=2.0 ++ ++ y.mesh n=1 l=0 ++ y.mesh n=4 l=0.015 ++ y.mesh n=8 l=0.05 ++ y.mesh n=12 l=0.25 ++ y.mesh n=14 l=0.35 ++ y.mesh n=17 l=0.5 ++ y.mesh n=21 l=1.0 ++ ++ region num=1 material=1 y.l=0.015 ++ 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.015 x.l=0.5 x.h=1.5 ++ material num=2 oxide ++ ++ elec num=1 ix.l=18 ix.h=21 iy.l=4 iy.h=4 ++ elec num=2 ix.l=5 ix.h=17 iy.l=1 iy.h=1 ++ elec num=3 ix.l=1 ix.h=4 iy.l=4 iy.h=4 ++ elec num=4 ix.l=1 ix.h=21 iy.l=21 iy.h=21 ++ ++ doping unif n.type conc=1e18 x.l=0.0 x.h=0.5 y.l=0.015 y.h=0.25 ++ doping unif n.type conc=1e18 x.l=1.5 x.h=2.0 y.l=0.015 y.h=0.25 ++ doping unif p.type conc=1e15 x.l=0.0 x.h=2.0 y.l=0.015 y.h=1.0 ++ doping unif p.type conc=1.3e17 x.l=0.5 x.h=1.5 y.l=0.015 y.h=0.05 ++ ++ models concmob fieldmob ++ method onec + +.end diff --git a/Windows/spice/examples/cider/mos/cmosinv.cir b/Windows/spice/examples/cider/mos/cmosinv.cir new file mode 100644 index 00000000..8f153cc7 --- /dev/null +++ b/Windows/spice/examples/cider/mos/cmosinv.cir @@ -0,0 +1,115 @@ +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 5ns +*.op +.dc Vin 0.0v 5.001v 0.05v +.print v(4) +.options acct bypass=1 method=gear +.end diff --git a/Windows/spice/examples/cider/mos/nmosinv.cir b/Windows/spice/examples/cider/mos/nmosinv.cir new file mode 100644 index 00000000..ac49c754 --- /dev/null +++ b/Windows/spice/examples/cider/mos/nmosinv.cir @@ -0,0 +1,55 @@ +Resistive load NMOS inverter +vin 1 0 pwl 0 0.0 2ns 5 +vdd 3 0 dc 5.0 +rd 3 2 2.5k +m1 2 1 4 5 mmod w=10um +cl 2 0 2pf +vb 5 0 0 +vs 4 0 0 + +.model mmod 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 ++ method ac=direct onec + +.tran 0.2ns 30ns +.options acct bypass=1 +.print tran v(1) v(2) +.end diff --git a/Windows/spice/examples/cider/mos/pass.cir b/Windows/spice/examples/cider/mos/pass.cir new file mode 100644 index 00000000..a58c8a5f --- /dev/null +++ b/Windows/spice/examples/cider/mos/pass.cir @@ -0,0 +1,59 @@ +Turnoff transient of pass transistor + +M1 11 2 3 4 mmod w=20um +Cs 1 0 6.0pF +Cl 3 0 6.0pF +R1 3 6 200k +Vin 6 0 dc 0 +Vdrn 1 11 dc 0 +Vg 2 0 dc 5 pwl 0 5 0.1n 0 1 0 +Vb 4 0 dc 0.0 + +.tran 0.05ns 0.2ns 0.0ns 0.05ns +.print tran v(1) i(Vdrn) +.ic v(1)=0 v(3)=0 +.option acct bypass=1 + +.model mmod 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 ++ method ac=direct onec + +.end diff --git a/Windows/spice/examples/cider/mos/ringosc.cir b/Windows/spice/examples/cider/mos/ringosc.cir new file mode 100644 index 00000000..0f313320 --- /dev/null +++ b/Windows/spice/examples/cider/mos/ringosc.cir @@ -0,0 +1,122 @@ +CMOS Ring Oscillator + +Vdd 1 0 5.0v +Vss 2 0 0.0v + +X1 1 2 3 4 INV +X2 1 2 4 5 INV +X3 1 2 5 3 INV +*X4 1 2 6 7 INV +*X5 1 2 7 8 INV +*X6 1 2 8 9 INV +*X7 1 2 9 3 INV + +.IC V(3)=0.0v V(4)=2.5v V(5)=5.0v +* V(6)=0.0v V(7)=5.0v V(8)=0.0v V(9)=5.0v + +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 5ns +.print v(4) +.options acct bypass=1 method=gear +.end diff --git a/Windows/spice/examples/cider/parallel/BICMOS.LIB b/Windows/spice/examples/cider/parallel/BICMOS.LIB new file mode 100644 index 00000000..606570ca --- /dev/null +++ b/Windows/spice/examples/cider/parallel/BICMOS.LIB @@ -0,0 +1,931 @@ +** +* BICMOS.LIB: Library of models used in the 1.0 um CBiCMOS process +* Contains CIDER input descriptions as well as matching +* SPICE models for some of the CIDER models. +** + +** +* One-dimensional models for a +* polysilicon emitter complementary bipolar process. +* The default device size is 1um by 1um (LxW) +** + +.model M_NPN1D nbjt level=1 ++ title One-Dimensional Numerical Bipolar ++ options base.depth=0.15 base.area=0.1 base.length=0.5 defa=1p ++ x.mesh loc=-0.2 n=1 ++ x.mesh loc=0.0 n=51 ++ x.mesh wid=0.15 h.e=0.0001 h.m=.004 r=1.2 ++ x.mesh wid=1.15 h.s=0.0001 h.m=.004 r=1.2 ++ domain num=1 material=1 x.l=0.0 ++ domain num=2 material=2 x.h=0.0 ++ material num=1 silicon ++ mobility mat=1 concmod=ct fieldmod=ct ++ material num=2 polysilicon ++ mobility mat=2 concmod=ct fieldmod=ct ++ doping gauss n.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 ++ doping gauss p.type conc=5e18 x.l=-0.2 x.h=0.0 char.len=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.len=0.100 ++ models bgn srh auger conctau concmob fieldmob ++ method devtol=1e-12 ac=direct itlim=15 + +.model M_PNP1D nbjt level=1 ++ title One-Dimensional Numerical Bipolar ++ options base.depth=0.2 base.area=0.1 base.length=0.5 defa=1p ++ x.mesh loc=-0.2 n=1 ++ x.mesh loc=0.0 n=51 ++ x.mesh wid=0.20 h.e=0.0001 h.m=.004 r=1.2 ++ x.mesh wid=1.10 h.s=0.0001 h.m=.004 r=1.2 ++ domain num=1 material=1 x.l=0.0 ++ domain num=2 material=2 x.h=0.0 ++ material num=1 silicon ++ mobility mat=1 concmod=ct fieldmod=ct ++ material num=2 polysilicon ++ mobility mat=2 concmod=ct fieldmod=ct ++ doping gauss p.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 ++ doping gauss n.type conc=5e17 x.l=-0.2 x.h=0.0 char.len=0.200 ++ doping unif p.type conc=1e16 x.l=0.0 x.h=1.3 ++ doping gauss p.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 ++ models bgn srh auger conctau concmob fieldmob ++ method devtol=1e-12 ac=direct itlim=15 + +** +* Two-dimensional models for a +* polysilicon emitter complementary bipolar process. +* The default device size is 1um by 1um (LxW) +** + +.MODEL M_NPNS nbjt level=2 ++ title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR ++ * Since half the device is simulated, double the unit width to get ++ * 1.0 um emitter. Use a small mesh for this model. ++ options defw=2.0u ++ output stat ++ ++ 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 + +.MODEL M_NPN nbjt level=2 ++ title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR ++ * Since half the device is simulated, double the unit width to get ++ * 1.0 um emitter length. Uses a finer mesh in the X direction. ++ options defw=2.0u ++ output stat ++ ++ x.mesh w=0.5 h.e=0.075 h.m=0.2 r=2.0 ++ x.mesh w=0.75 h.s=0.075 h.m=0.2 r=2.0 ++ x.mesh w=0.75 h.e=0.05 h.m=0.2 r=1.5 ++ x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 ++ ++ y.mesh l=-0.2 n=1 ++ y.mesh l= 0.0 n=5 ++ y.mesh w=0.10 h.e=0.003 h.m=0.01 r=1.5 ++ y.mesh w=0.15 h.s=0.003 h.m=0.02 r=1.5 ++ y.mesh w=0.35 h.s=0.02 h.m=0.2 r=1.5 ++ y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 ++ y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.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 + +.MODEL M_PNPS nbjt level=2 ++ title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR ++ * Since half the device is simulated, double the unit width to get ++ * 1.0 um emitter length. Use a small mesh for this model. ++ options defw=2.0u ++ output stat ++ ++ 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.12 h.e=0.004 h.m=0.05 r=2.5 ++ y.mesh w=0.28 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 p.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 n.type conc=5e17 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 ++ + char.l=0.200 lat.rotate ++ doping gauss n.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 p.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 ++ doping gauss p.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 + +.MODEL M_PNP nbjt level=2 ++ title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR ++ * Since half the device is simulated, double the unit width to get ++ * 1.0 um emitter length. Uses a finer mesh in the X direction. ++ options defw=2.0u ++ output stat ++ ++ x.mesh w=0.5 h.e=0.075 h.m=0.2 r=2.0 ++ x.mesh w=0.75 h.s=0.075 h.m=0.2 r=2.0 ++ x.mesh w=0.75 h.e=0.05 h.m=0.2 r=1.5 ++ x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 ++ ++ y.mesh l=-0.2 n=1 ++ y.mesh l= 0.0 n=5 ++ y.mesh w=0.12 h.e=0.003 h.m=0.01 r=1.5 ++ y.mesh w=0.28 h.s=0.003 h.m=0.02 r=1.5 ++ y.mesh w=0.20 h.s=0.02 h.m=0.2 r=1.5 ++ y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 ++ y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.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 p.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 n.type conc=5e17 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 ++ + char.l=0.200 lat.rotate ++ doping gauss n.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 p.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 ++ doping gauss p.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 + +** +* Two-dimensional models for a +* complementary MOS process. +* Device models for 1um, 2um, 3um, 4um, 5um, 10um and 50um are provided. +** + +.MODEL M_NMOS_1 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=2 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=2 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=2 x.h=3.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_NMOS_2 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.005 h.m=0.2 r=2.0 ++ x.mesh w=0.9 h.e=0.005 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=3 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=3.5 x.h=4.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=3 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=4.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=4.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=4.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=3 x.h=4.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=3.05 x.h=4.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_NMOS_3 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=1.4 h.s=0.005 h.m=0.3 r=2.0 ++ x.mesh w=1.4 h.e=0.005 h.m=0.3 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=4 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=4.5 x.h=5.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=4 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=5.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=5.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=5.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=4 x.h=5.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=4.05 x.h=5.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_NMOS_4 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=1.9 h.s=0.005 h.m=0.4 r=2.0 ++ x.mesh w=1.9 h.e=0.005 h.m=0.4 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=5 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=5.5 x.h=6.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=5 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=6.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=6.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=6.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=5 x.h=6.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=5.05 x.h=6.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_NMOS_5 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=2.4 h.s=0.005 h.m=0.5 r=2.0 ++ x.mesh w=2.4 h.e=0.005 h.m=0.5 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=6 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=6.5 x.h=7.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=6 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=7.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=7.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=7.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=6 x.h=7.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=6.05 x.h=7.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_NMOS_10 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=4.9 h.s=0.005 h.m=1 r=2.0 ++ x.mesh w=4.9 h.e=0.005 h.m=1 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=11 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=11.5 x.h=12.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=11 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=12.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=12.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=12.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=11 x.h=12.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=11.05 x.h=12.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_NMOS_50 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=24.9 h.s=0.005 h.m=5 r=2.0 ++ x.mesh w=24.9 h.e=0.005 h.m=5 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=51 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=51.5 x.h=52.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=51 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=52.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=52.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif p.type conc=5.0e15 x.l=-0.1 x.h=52.1 y.l=0.0 y.h=2.1 ++ doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss n.type conc=4e17 x.l=51 x.h=52.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss n.type conc=1e20 x.l=51.05 x.h=52.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=4.10 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_1 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=2 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=2 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=2 x.h=3.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_2 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.005 h.m=0.2 r=2.0 ++ x.mesh w=0.9 h.e=0.005 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=3 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=3.5 x.h=4.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=3 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=4.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=4.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=4.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=3 x.h=4.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=3.05 x.h=4.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_3 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=1.4 h.s=0.005 h.m=0.3 r=2.0 ++ x.mesh w=1.4 h.e=0.005 h.m=0.3 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=4 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=4.5 x.h=5.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=4 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=5.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=5.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=5.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=4 x.h=5.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=4.05 x.h=5.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_4 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=1.9 h.s=0.005 h.m=0.4 r=2.0 ++ x.mesh w=1.9 h.e=0.005 h.m=0.4 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=5 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=5.5 x.h=6.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=5 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=6.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=6.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=6.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=5 x.h=6.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=5.05 x.h=6.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_5 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=2.4 h.s=0.005 h.m=0.5 r=2.0 ++ x.mesh w=2.4 h.e=0.005 h.m=0.5 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=6 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=6.5 x.h=7.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=6 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=7.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=7.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=7.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=6 x.h=7.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=6.05 x.h=7.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_10 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=4.9 h.s=0.005 h.m=1 r=2.0 ++ x.mesh w=4.9 h.e=0.005 h.m=1 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=11 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=11.5 x.h=12.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=11 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=12.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=12.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=12.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=11 x.h=12.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=11.05 x.h=12.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +.MODEL M_PMOS_50 numos ++ output stat ++ ++ x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=24.9 h.s=0.005 h.m=5 r=2.0 ++ x.mesh w=24.9 h.e=0.005 h.m=5 r=2.0 ++ x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 ++ x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 ++ ++ y.mesh l=-.0200 n=1 ++ y.mesh l=0.0 n=6 ++ y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 ++ y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 ++ y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 ++ ++ region num=1 material=1 y.h=0.0 ++ region num=2 material=2 y.l=0.0 ++ interface dom=2 nei=1 x.l=1 x.h=51 layer.width=0.0 ++ material num=1 oxide ++ material num=2 silicon ++ ++ elec num=1 x.l=51.5 x.h=52.1 y.l=0.0 y.h=0.0 ++ elec num=2 x.l=1 x.h=51 iy.l=1 iy.h=1 ++ elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 ++ elec num=4 x.l=-0.1 x.h=52.1 y.l=2.0 y.h=2.0 ++ ++ doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=52.1 y.l=0.0 ++ + char.l=0.30 ++ doping unif n.type conc=5.0e15 x.l=-0.1 x.h=52.1 y.l=0.0 y.h=2.1 ++ doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ doping gauss p.type conc=4e17 x.l=51 x.h=52.1 y.l=0.0 y.h=0.0 ++ + char.l=0.16 lat.rotate ratio=0.65 ++ doping gauss p.type conc=1e20 x.l=51.05 x.h=52.1 y.l=0.0 y.h=0.08 ++ + char.l=0.03 lat.rotate ratio=0.65 ++ ++ contact num=2 workf=5.29 ++ models concmob surfmob transmob fieldmob srh auger conctau bgn ++ method ac=direct itlim=10 onec + +** +* BSIM1 NMOS and PMOS 1.0 \um models. +* Gummel-Poon bipolar models. +** +.model M_NSIM_1 nmos level=4 ++vfb= -1.1908 ++phi= .8399 ++k1= 1.5329 ++k2= 193.7322m ++eta= 2m ++muz= 746.0 ++u0= 90.0m ++x2mz= 10.1429 ++x2e= -2.5m ++x3e= 0.2m ++x2u0= -10.0m ++mus= 975.0 ++u1= .20 ++x2ms= 0.0 ++x2u1= 0.0 ++x3ms= 10 ++x3u1= 5.0m ++tox=2.00000e-02 ++cgdo=2.0e-10 ++cgso=2.0e-10 ++cgbo=0.0 ++temp= 27 ++vdd= 7.0 ++xpart ++n0= 1.5686 ++nb= 94.6392m ++nd=0.00000e+00 ++rsh=30.0 cj=7.000e-004 cjsw=4.20e-010 ++js=1.00e-008 pb=0.700e000 ++pbsw=0.8000e000 mj=0.5 mjsw=0.33 ++wdf=0 dell=0.20u + +.model M_PSIM_1 pmos level=4 ++vfb= -1.3674 ++phi= .8414 ++k1= 1.5686 ++k2= 203m ++eta= 2m ++muz= 340.0 ++u0= 35.0m ++x2mz= 6.0 ++x2e= 0.0 ++x3e= -0.2m ++x2u0= -15.0m ++mus= 440.0 ++u1= .38 ++x2ms= 0.0 ++x2u1= 0.0 ++x3ms= -20 ++x3u1= -10.0m ++tox=2.00000e-02 ++cgdo=2.0e-10 ++cgso=2.0e-10 ++cgbo=0.0 ++temp= 27 ++vdd= 5.0 ++xpart ++n0= 1.5686 ++nb= 94.6392m ++nd=0.00000e+00 ++rsh=80.0 cj=7.000e-004 cjsw=4.20e-010 ++js=1.00e-008 pb=0.700e000 ++pbsw=0.8000e000 mj=0.5 mjsw=0.33 ++wdf=0 dell=0.17u + +.model M_GNPN npn ++ is=1.3e-16 ++ nf=1.00 bf=262.5 ikf=25mA vaf=20v ++ nr=1.00 br=97.5 ikr=0.5mA var=1.8v ++ rc=20.0 ++ re=0.09 ++ rb=15.0 ++ ise=4.0e-16 ne=2.1 ++ isc=7.2e-17 nc=2.0 ++ tf=9.4ps itf=26uA xtf=0.5 ++ tr=10ns ++ cje=89.44fF vje=0.95 mje=0.5 ++ cjc=12.82fF vjc=0.73 mjc=0.49 + +.model M_GPNP pnp ++ is=5.8e-17 ++ nf=1.001 bf=96.4 ikf=12mA vaf=29v ++ nr=1.0 br=17.3 ikr=0.2mA var=2.0v ++ rc=50.0 ++ re=0.17 ++ rb=20.0 ++ ise=6.8e-17 ne=2.0 ++ isc=9.0e-17 nc=2.1 ++ tf=27.4ps itf=26uA xtf=0.5 ++ tr=10ns ++ cje=55.36fF vje=0.95 mje=0.58 ++ cjc=11.80fF vjc=0.72 mjc=0.46 diff --git a/Windows/spice/examples/cider/parallel/bicmpd.cir b/Windows/spice/examples/cider/parallel/bicmpd.cir new file mode 100644 index 00000000..be26e40d --- /dev/null +++ b/Windows/spice/examples/cider/parallel/bicmpd.cir @@ -0,0 +1,26 @@ +BICMOS INVERTER PULLDOWN CIRCUIT + +VSS 2 0 0V + +VIN 3 2 0V (PULSE 0.0V 4.2V 0NS 1NS 1NS 9NS 20NS) + +M1 8 3 5 11 M_NMOS_1 W=4U L=1U +VD 4 8 0V +VBK 11 2 0V + +Q1 10 7 9 M_NPNS AREA=8 +VC 4 10 0V +VB 5 7 0V +VE 9 2 0V + +CL 4 6 1PF +VL 6 2 0V + +.IC V(10)=5.0V V(7)=0.0V +.TRAN 0.1NS 5NS 0NS 0.1NS +.PLOT TRAN I(VIN) + +.INCLUDE BICMOS.LIB + +.OPTIONS ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/parallel/bicmpu.cir b/Windows/spice/examples/cider/parallel/bicmpu.cir new file mode 100644 index 00000000..7067ce14 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/bicmpu.cir @@ -0,0 +1,24 @@ +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_NPNS AREA=8 +M1 5 3 1 1 M_PMOS_1 W=10U L=1U + +CL 4 0 5.0PF + +.IC V(4)=0.75V V(5)=0.0V + +.INCLUDE BICMOS.LIB + +.TRAN 0.5NS 4.0NS +.PRINT TRAN V(3) V(4) + +.OPTION ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/parallel/clkfeed.cir b/Windows/spice/examples/cider/parallel/clkfeed.cir new file mode 100644 index 00000000..d0a06f15 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/clkfeed.cir @@ -0,0 +1,34 @@ +SWITCHED CURRENT CELL - CLOCK FEEDTHROUGH + +VDD 1 0 5.0V +VSS 2 0 0.0V + +IIN 13 0 0.0 +VIN 13 3 0.0 +VL 4 0 2.5V +VCK 6 0 5.0V PULSE 5.0V 0.0V 5.0NS 5NS 5NS 20NS 50NS + +M1 3 3 2 2 M_NMOS_5 W=5U L=5U +M2 4 5 2 2 M_NMOS_5 W=10U L=5U +M3 23 26 25 22 M_NMOS_5 W=5U L=5U +RLK1 3 0 100G +RLK2 5 0 100G +VD 3 23 0.0V +VG 6 26 0.0V +VS 5 25 0.0V +VB 2 22 0.0V + +M4 7 7 1 1 M_PMOS_IDEAL W=100U L=1U +M5 3 7 1 1 M_PMOS_IDEAL W=100U L=1U +M6 4 7 1 1 M_PMOS_IDEAL W=200U L=1U +IREF 7 0 50UA + +****** MODELS ****** +.MODEL M_PMOS_IDEAL PMOS VTO=-1.0V KP=100U + +.INCLUDE BICMOS.LIB + +.TRAN 0.1NS 50NS + +.OPTIONS ACCT BYPASS=1 METHOD=GEAR +.END diff --git a/Windows/spice/examples/cider/parallel/cmosamp.cir b/Windows/spice/examples/cider/parallel/cmosamp.cir new file mode 100644 index 00000000..f88115b5 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/cmosamp.cir @@ -0,0 +1,29 @@ +CMOS 2-STAGE OPERATIONAL AMPLIFIER + +VDD 1 0 2.5V +VSS 2 0 -2.5V + +IBIAS 9 0 100UA + +VPL 3 0 0.0V AC 0.5V +VMI 4 0 0.0V AC 0.5V 180 + +M1 6 3 5 5 M_PMOS_1 W=15U L=1U +M2 7 4 5 5 M_PMOS_1 W=15U L=1U +M3 6 6 2 2 M_NMOS_1 W=7.5U L=1U +M4 7 6 2 2 M_NMOS_1 W=7.5U L=1U +M5 8 7 2 2 M_NMOS_1 W=15U L=1U +M6 9 9 1 1 M_PMOS_1 W=15U L=1U +M7 5 9 1 1 M_PMOS_1 W=15U L=1U +M8 8 9 1 1 M_PMOS_1 W=15U L=1U + +*CC 7 8 0.1PF + +.INCLUDE BICMOS.LIB + +*.OP +*.AC DEC 10 1K 100G +.DC VPL -5MV 5MV 0.1MV + +.OPTIONS ACCT BYPASS=1 METHOD=GEAR +.END diff --git a/Windows/spice/examples/cider/parallel/eclinv.cir b/Windows/spice/examples/cider/parallel/eclinv.cir new file mode 100644 index 00000000..a63c1c14 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/eclinv.cir @@ -0,0 +1,30 @@ +ECL INVERTER +*** (FROM MEINERZHAGEN ET AL.) + +VCC 1 0 0.0V +VEE 2 0 -5.2V + +VIN 3 0 -1.25V +VRF 4 0 -1.25V + +*** INPUT STAGE +Q1 5 3 9 M_NPNS AREA=8 +Q2 6 4 9 M_NPNS AREA=8 +R1 1 5 662 +R2 1 6 662 +R3 9 2 2.65K + +*** OUTPUT BUFFERS +Q3 1 5 7 M_NPNS AREA=8 +Q4 1 6 8 M_NPNS AREA=8 +R4 7 2 4.06K +R5 8 2 4.06K + +*** MODEL LIBRARY +.INCLUDE BICMOS.LIB + +.DC VIN -2.00 0.001 0.05 +.PLOT DC V(7) V(8) + +.OPTIONS ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/parallel/ecpal.cir b/Windows/spice/examples/cider/parallel/ecpal.cir new file mode 100644 index 00000000..4485a442 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/ecpal.cir @@ -0,0 +1,19 @@ +EMITTER COUPLED PAIR WITH ACTIVE LOAD + +VCC 1 0 5V +VEE 2 0 0V +VINP 4 0 2.99925V AC 0.5V +VINM 7 0 3V AC 0.5V 180 +IEE 5 2 0.1MA +Q1 3 4 5 M_NPNS AREA=8 +Q2 6 7 5 M_NPNS AREA=8 +Q3 3 3 1 M_PNPS AREA=8 +Q4 6 3 1 M_PNPS AREA=8 + +.AC DEC 10 10K 100G +.PLOT AC VDB(6) + +.INCLUDE BICMOS.LIB + +.OPTIONS ACCT RELTOL=1E-6 +.END diff --git a/Windows/spice/examples/cider/parallel/foobar b/Windows/spice/examples/cider/parallel/foobar new file mode 100644 index 00000000..1e5e7b73 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/foobar @@ -0,0 +1,10 @@ +\section*{BICMPD Benchmark} +\section*{BICMPU Benchmark} +\section*{CLKFEED Benchmark} +\section*{CMOSAMP Benchmark} +\section*{ECLINV Benchmark} +\section*{ECPAL Benchmark} +\section*{GMAMP Benchmark} +\section*{LATCH Benchmark} +\section*{PPEF Benchmarks} +\section*{RINGOSC Benchmarks} diff --git a/Windows/spice/examples/cider/parallel/gmamp.cir b/Windows/spice/examples/cider/parallel/gmamp.cir new file mode 100644 index 00000000..e570beca --- /dev/null +++ b/Windows/spice/examples/cider/parallel/gmamp.cir @@ -0,0 +1,34 @@ +BICMOS 3-STAGE AMPLIFIER +*** IN GRAY & MEYER, 3RD ED. P.266, PROB. 3.12, 8.19 + +VDD 1 0 5.0V +VSS 2 0 0.0V + +*** VOLTAGE INPUT +*VIN 13 0 0.0V AC 1V +*CIN 13 3 1UF + +*** CURRENT INPUT +IIN 3 0 0.0 AC 1.0 + +M1 4 3 2 2 M_NMOS_1 W=300U L=1U +M2 7 7 2 2 M_NMOS_1 W=20U L=1U + +Q1 6 5 4 M_NPNS AREA=40 +Q2 5 5 7 M_NPNS AREA=40 +Q3 1 6 8 M_NPNS AREA=40 + +RL1 1 4 1K +RL2 1 6 10K +RB1 1 5 10K +RL3 8 2 1K +RF1 3 8 30K + +*** NUMERICAL MODEL LIBRARY *** +.INCLUDE BICMOS.LIB + +.AC DEC 10 100KHZ 100GHZ +.PLOT AC VDB(8) + +.OPTIONS ACCT BYPASS=1 KEEPOPINFO +.END diff --git a/Windows/spice/examples/cider/parallel/latch.cir b/Windows/spice/examples/cider/parallel/latch.cir new file mode 100644 index 00000000..3ad63335 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/latch.cir @@ -0,0 +1,46 @@ +STATIC LATCH +*** IC=1MA, RE6=3K +*** SPICE ORIGINAL 1-7-80, CIDER REVISED 4-16-93 + +*** BIAS CIRCUIT +*** RESISTORS +RCC2 6 8 3.33K +REE2 9 0 200 +*** TRANSISTORS +Q1 6 8 4 M_NPN1D AREA=8 +Q2 8 4 9 M_NPN1D AREA=8 + +*** MODELS +.INCLUDE BICMOS.LIB + +*** SOURCES +VCC 6 0 5V +VREF 3 0 2.5V +VRSET 1 0 PULSE(2V 3V 0.1NS 0.1NS 0.1NS 0.9NS 4NS) +VSET 7 0 PULSE(2V 3V 2.1NS 0.1NS 0.1NS 0.9NS 4NS) + +*** LATCH +X1 1 2 3 4 5 6 ECLNOR2 +X2 5 7 3 4 2 6 ECLNOR2 + +*** SUBCIRCUITS +.SUBCKT ECLNOR2 1 2 3 4 5 6 +** RESISTORS +RS 6 11 520 +RC2 11 10 900 +RE4 12 0 200 +RE6 5 0 6K +** TRANSISTORS +Q1 9 1 8 M_NPN1D AREA=8 +Q2 9 2 8 M_NPN1D AREA=8 +Q3 11 3 8 M_NPN1D AREA=8 +Q4 8 4 12 M_NPN1D AREA=8 +Q5 10 10 9 M_NPN1D AREA=8 +Q6 6 9 5 M_NPN1D AREA=8 +.ENDS ECLNOR2 + +*** CONTROL CARDS +.TRAN 0.01NS 8NS +.PRINT TRAN V(1) V(7) V(5) V(2) +.OPTIONS ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/parallel/ppef.1d.cir b/Windows/spice/examples/cider/parallel/ppef.1d.cir new file mode 100644 index 00000000..8690c665 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/ppef.1d.cir @@ -0,0 +1,25 @@ +PUSH-PULL EMITTER FOLLOWER - ONE-DIMENSIONAL MODELS + +VCC 1 0 5.0V +VEE 2 0 -5.0V + +VIN 3 0 0.0V (SIN 0.0V 0.1V 1KHZ) AC 1 +VBU 13 3 0.7V +VBL 3 23 0.7V + +RL 4 44 50 +VLD 44 0 0V + +Q1 5 13 4 M_NPN1D AREA=40 +Q2 4 5 1 M_PNP1D AREA=200 + +Q3 6 23 4 M_PNP1D AREA=100 +Q4 4 6 2 M_NPN1D AREA=80 + +.INCLUDE BICMOS.LIB + +.TRAN 0.01MS 1.00001MS 0US 0.01MS +.PLOT TRAN V(4) + +.OPTIONS ACCT BYPASS=1 TEMP=26.85OC RELTOL=1E-5 +.END diff --git a/Windows/spice/examples/cider/parallel/ppef.2d.cir b/Windows/spice/examples/cider/parallel/ppef.2d.cir new file mode 100644 index 00000000..07fa10fb --- /dev/null +++ b/Windows/spice/examples/cider/parallel/ppef.2d.cir @@ -0,0 +1,25 @@ +PUSH-PULL EMITTER FOLLOWER - TWO-DIMENSIONAL MODELS + +VCC 1 0 5.0V +VEE 2 0 -5.0V + +VIN 3 0 0.0V (SIN 0.0V 0.1V 1KHZ) AC 1 +VBU 13 3 0.7V +VBL 3 23 0.7V + +RL 4 44 50 +VLD 44 0 0V + +Q1 5 13 4 M_NPNS AREA=40 +Q2 4 5 1 M_PNPS AREA=200 + +Q3 6 23 4 M_PNPS AREA=100 +Q4 4 6 2 M_NPNS AREA=80 + +.INCLUDE BICMOS.LIB + +.TRAN 0.01MS 1.00001MS 0US 0.01MS +.PLOT TRAN V(4) + +.OPTIONS ACCT BYPASS=1 TEMP=26.85OC RELTOL=1E-5 +.END diff --git a/Windows/spice/examples/cider/parallel/readme b/Windows/spice/examples/cider/parallel/readme new file mode 100644 index 00000000..077c78f6 --- /dev/null +++ b/Windows/spice/examples/cider/parallel/readme @@ -0,0 +1,3 @@ +This directory contains the additional CIDER parallel-version benchmarks +used in the thesis "Design-Oriented Mixed-Level Circuit and Device Simulation" +by David A. Gates. diff --git a/Windows/spice/examples/cider/parallel/ringosc.1u.cir b/Windows/spice/examples/cider/parallel/ringosc.1u.cir new file mode 100644 index 00000000..2304c4eb --- /dev/null +++ b/Windows/spice/examples/cider/parallel/ringosc.1u.cir @@ -0,0 +1,39 @@ +CMOS RING OSCILLATOR - 1UM DEVICES + +VDD 1 0 5.0V +VSS 2 0 0.0V + +X1 1 2 3 4 INV +X2 1 2 4 5 INV +X3 1 2 5 6 INV +X4 1 2 6 7 INV +X5 1 2 7 8 INV +X6 1 2 8 9 INV +X7 1 2 9 3 INV + +.IC V(3)=0.0V V(4)=2.5V V(5)=5.0V ++ V(6)=0.0V V(7)=5.0V V(8)=0.0V V(9)=5.0V + +.SUBCKT INV 1 2 3 4 +* VDD VSS VIN VOUT +M1 14 13 15 16 M_PMOS_1 W=6.0U +M2 24 23 25 26 M_NMOS_1 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 + +.INCLUDE BICMOS.LIB + +.TRAN 0.1NS 1NS +.PRINT TRAN V(3) V(4) V(5) + +.OPTIONS ACCT BYPASS=1 METHOD=GEAR +.END diff --git a/Windows/spice/examples/cider/parallel/ringosc.2u.cir b/Windows/spice/examples/cider/parallel/ringosc.2u.cir new file mode 100644 index 00000000..c79885ab --- /dev/null +++ b/Windows/spice/examples/cider/parallel/ringosc.2u.cir @@ -0,0 +1,114 @@ +CMOS RING OSCILLATOR - 2UM DEVICES + +VDD 1 0 5.0V +VSS 2 0 0.0V + +X1 1 2 3 4 INV +X2 1 2 4 5 INV +X3 1 2 5 6 INV +X4 1 2 6 7 INV +X5 1 2 7 8 INV +X6 1 2 8 9 INV +X7 1 2 9 3 INV + +.IC V(3)=0.0V V(4)=2.5V V(5)=5.0V V(6)=0.0V ++ V(7)=5.0V V(8)=0.0V V(9)=5.0V + +.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 ++ ++ 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 ++ OUTPUT ^ALL.DEBUG + +.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 ++ ++ 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 ++ OUTPUT ^ALL.DEBUG + +.TRAN 0.1NS 5.0NS +.PRINT V(4) +.OPTIONS ACCT BYPASS=1 METHOD=GEAR +.END diff --git a/Windows/spice/examples/cider/resistor/gaasres.cir b/Windows/spice/examples/cider/resistor/gaasres.cir new file mode 100644 index 00000000..c35d0ddc --- /dev/null +++ b/Windows/spice/examples/cider/resistor/gaasres.cir @@ -0,0 +1,30 @@ +Gallium Arsenide Resistor + +* This transient simulation demonstrates the effects of velocity overshoot +* and velocity saturation at high lateral electric fields. +* Do not try to do DC analysis of this resistor. It will not converge +* because of the peculiar characteristics of the GaAs velocity-field +* relation. In some cases, problems can arise in transient simulation +* as well. + +VPP 1 0 1v PWL 0s 0.0v 10s 1v +VNN 2 0 0.0v +D1 1 2 M_RES AREA=1 + +.MODEL M_RES numd level=1 ++ options resistor defa=1p ++ x.mesh loc=0.0 num=1 ++ x.mesh loc=1.0 num=101 ++ domain num=1 material=1 ++ material num=1 gaas ++ doping unif n.type conc=2.5e16 ++ models fieldmob srh auger conctau ++ method ac=direct + +*.OP +*.DC VPP 0.0v 10.01v 0.1v +.TRAN 1s 10.001s 0s 0.1s +.PRINT I(VPP) + +.OPTION ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/resistor/sires.cir b/Windows/spice/examples/cider/resistor/sires.cir new file mode 100644 index 00000000..45e2aa12 --- /dev/null +++ b/Windows/spice/examples/cider/resistor/sires.cir @@ -0,0 +1,26 @@ +Silicon Resistor + +* This simulation demonstrates the effects of velocity saturation at +* high lateral electric fields. + +VPP 1 0 10v PWL 0s 0.0v 100s 10v +VNN 2 0 0.0v +D1 1 2 M_RES AREA=1 + +.MODEL M_RES numd level=1 ++ options resistor defa=1p ++ x.mesh loc=0.0 num=1 ++ x.mesh loc=1.0 num=101 ++ domain num=1 material=1 ++ material num=1 silicon ++ doping unif n.type conc=2.5e16 ++ models bgn srh conctau auger concmob fieldmob ++ method ac=direct + +*.OP +.DC VPP 0.0v 10.01v 0.1v +*.TRAN 1s 100.001s 0s 0.2s +.PRINT I(VPP) + +.OPTION ACCT BYPASS=1 RELTOL=1e-12 +.END diff --git a/Windows/spice/examples/cider/serial/astable.cir b/Windows/spice/examples/cider/serial/astable.cir new file mode 100644 index 00000000..c04c6bba --- /dev/null +++ b/Windows/spice/examples/cider/serial/astable.cir @@ -0,0 +1,30 @@ +ASTABLE MULTIVIBRATOR + +VIN 5 0 DC 0 PULSE(0 5 0 1US 1US 100US 100US) +VCC 6 0 5.0 +RC1 6 1 1K +RC2 6 2 1K +RB1 6 3 30K +RB2 5 4 30K +C1 1 4 150PF +C2 2 3 150PF +Q1 1 3 0 QMOD AREA = 100P +Q2 2 4 0 QMOD AREA = 100P + +.OPTION ACCT BYPASS=1 +.TRAN 0.05US 8US 0US 0.05US +.PRINT TRAN V(1) V(2) V(3) V(4) + +.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 ++ 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 + +.END diff --git a/Windows/spice/examples/cider/serial/charge.cir b/Windows/spice/examples/cider/serial/charge.cir new file mode 100644 index 00000000..c4c689b6 --- /dev/null +++ b/Windows/spice/examples/cider/serial/charge.cir @@ -0,0 +1,53 @@ +MOS CHARGE PUMP + +VIN 4 0 DC 0V PULSE 0 5 15NS 5NS 5NS 50NS 100NS +VDD 5 6 DC 0V PULSE 0 5 25NS 5NS 5NS 50NS 100NS +VBB 0 7 DC 0V PULSE 0 5 0NS 5NS 5NS 50NS 100NS +RD 6 2 10K +M1 5 4 3 7 MMOD W=100UM +VS 3 2 0 +VC 2 1 0 +C2 1 0 10PF + +.IC V(3)=1.0 +.TRAN 2NS 200NS +.OPTIONS ACCT BYPASS=1 +.PRINT TRAN V(1) V(2) + +.MODEL MMOD NUMOS ++ X.MESH N=1 L=0 ++ X.MESH N=3 L=0.4 ++ X.MESH N=7 L=0.6 ++ X.MESH N=15 L=1.4 ++ X.MESH N=19 L=1.6 ++ X.MESH N=21 L=2.0 ++ ++ Y.MESH N=1 L=0 ++ Y.MESH N=4 L=0.015 ++ Y.MESH N=8 L=0.05 ++ Y.MESH N=12 L=0.25 ++ Y.MESH N=14 L=0.35 ++ Y.MESH N=17 L=0.5 ++ Y.MESH N=21 L=1.0 ++ ++ REGION NUM=1 MATERIAL=1 Y.L=0.015 ++ MATERIAL NUM=1 SILICON ++ MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG ++ ++ REGION NUM=2 MATERIAL=2 Y.H=0.015 X.L=0.5 X.H=1.5 ++ MATERIAL NUM=2 OXIDE ++ ++ ELEC NUM=1 IX.L=18 IX.H=21 IY.L=4 IY.H=4 ++ ELEC NUM=2 IX.L=5 IX.H=17 IY.L=1 IY.H=1 ++ ELEC NUM=3 IX.L=1 IX.H=4 IY.L=4 IY.H=4 ++ ELEC NUM=4 IX.L=1 IX.H=21 IY.L=21 IY.H=21 ++ ++ DOPING UNIF N.TYPE CONC=1E18 X.L=0.0 X.H=0.5 Y.L=0.015 Y.H=0.25 ++ DOPING UNIF N.TYPE CONC=1E18 X.L=1.5 X.H=2.0 Y.L=0.015 Y.H=0.25 ++ DOPING UNIF P.TYPE CONC=1E15 X.L=0.0 X.H=2.0 Y.L=0.015 Y.H=1.0 ++ DOPING UNIF P.TYPE CONC=1.3E17 X.L=0.5 X.H=1.5 Y.L=0.015 Y.H=0.05 ++ ++ MODELS CONCMOB FIELDMOB ++ METHOD ONEC + +.END diff --git a/Windows/spice/examples/cider/serial/colposc.cir b/Windows/spice/examples/cider/serial/colposc.cir new file mode 100644 index 00000000..b7d14ce9 --- /dev/null +++ b/Windows/spice/examples/cider/serial/colposc.cir @@ -0,0 +1,29 @@ +COLPITT'S OSCILLATOR CIRCUIT + +R1 1 0 1 +Q1 2 1 3 QMOD AREA = 100P +VCC 4 0 5 +RL 4 2 750 +C1 2 3 500P +C2 4 3 4500P +L1 4 2 5UH +RE 3 6 4.65K +VEE 6 0 DC -15 PWL 0 -15 1E-9 -10 + +.TRAN 30N 12U +.PRINT TRAN V(2) + +.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 ++ 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 + +.OPTIONS ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/serial/dbridge.cir b/Windows/spice/examples/cider/serial/dbridge.cir new file mode 100644 index 00000000..052ae4f0 --- /dev/null +++ b/Windows/spice/examples/cider/serial/dbridge.cir @@ -0,0 +1,30 @@ +DIODE BRIDGE RECTIFIER + +VLINE 3 4 0.0V SIN 0V 10V 60HZ +VGRND 2 0 0.0V +D1 3 1 M_PN AREA=100 +D2 4 1 M_PN AREA=100 +D3 2 3 M_PN AREA=100 +D4 2 4 M_PN AREA=100 +RL 1 2 1.0K + +.MODEL M_PN NUMD LEVEL=1 ++ *************************************** ++ *** ONE-DIMENSIONAL NUMERICAL DIODE *** ++ *************************************** ++ OPTIONS DEFA=1P ++ X.MESH LOC=0.0 N=1 ++ X.MESH LOC=30.0 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=1.0 ++ DOPING UNIF N.TYPE CONC=1E14 X.L=0.0 X.H=30.0 ++ DOPING GAUSS N.TYPE CONC=5E19 X.L=30.0 X.H=30.0 CHAR.L=2.0 ++ MODELS BGN ^AVAL SRH AUGER CONCTAU CONCMOB FIELDMOB ++ METHOD AC=DIRECT + +.OPTION ACCT BYPASS=1 METHOD=GEAR +.TRAN 0.5MS 50MS +.PRINT I(VLINE) +.END diff --git a/Windows/spice/examples/cider/serial/invchain.cir b/Windows/spice/examples/cider/serial/invchain.cir new file mode 100644 index 00000000..c05513a0 --- /dev/null +++ b/Windows/spice/examples/cider/serial/invchain.cir @@ -0,0 +1,34 @@ +4 STAGE RTL INVERTER CHAIN + +VIN 1 0 DC 0V PWL 0NS 0V 1NS 5V +VCC 12 0 DC 5.0V +RC1 12 3 2.5K +RB1 1 2 8K +Q1 3 2 0 QMOD AREA = 100P +RB2 3 4 8K +RC2 12 5 2.5K +Q2 5 4 0 QMOD AREA = 100P +RB3 5 6 8K +RC3 12 7 2.5K +Q3 7 6 0 QMOD AREA = 100P +RB4 7 8 8K +RC4 12 9 2.5K +Q4 9 8 0 QMOD AREA = 100P + +.PRINT TRAN V(3) V(5) V(9) +.TRAN 1E-9 10E-9 + +.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 ++ 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 + +.OPTION ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/serial/meclgate.cir b/Windows/spice/examples/cider/serial/meclgate.cir new file mode 100644 index 00000000..7f5e88ba --- /dev/null +++ b/Windows/spice/examples/cider/serial/meclgate.cir @@ -0,0 +1,70 @@ +MOTOROLA MECL III ECL GATE +*.DC VIN -2.0 0 0.02 +.TRAN 0.2NS 20NS +VEE 22 0 -6.0 +VIN 1 0 PULSE -0.8 -1.8 0.2NS 0.2NS 0.2NS 10NS 20NS +RS 1 2 50 +Q1 4 2 6 QMOD AREA = 100P +Q2 4 3 6 QMOD AREA = 100P +Q3 5 7 6 QMOD AREA = 100P +Q4 0 8 7 QMOD AREA = 100P + +D1 8 9 DMOD +D2 9 10 DMOD + +RP1 3 22 50K +RC1 0 4 100 +RC2 0 5 112 +RE 6 22 380 +R1 7 22 2K +R2 0 8 350 +R3 10 22 1958 + +Q5 0 5 11 QMOD AREA = 100P +Q6 0 4 12 QMOD AREA = 100P + +RP2 11 22 560 +RP3 12 22 560 + +Q7 13 12 15 QMOD AREA = 100P +Q8 14 16 15 QMOD AREA = 100P + +RE2 15 22 380 +RC3 0 13 100 +RC4 0 14 112 + +Q9 0 17 16 QMOD AREA = 100P + +R4 16 22 2K +R5 0 17 350 +D3 17 18 DMOD +D4 18 19 DMOD +R6 19 22 1958 + +Q10 0 14 20 QMOD AREA = 100P +Q11 0 13 21 QMOD AREA = 100P + +RP4 20 22 560 +RP5 21 22 560 + +.MODEL DMOD D RS=40 TT=0.1NS CJO=0.9PF N=1 IS=1E-14 EG=1.11 VJ=0.8 M=0.5 + +.MODEL QMOD NBJT LEVEL=1 ++ X.MESH NODE=1 LOC=0.0 ++ X.MESH NODE=10 LOC=0.9 ++ X.MESH NODE=20 LOC=1.1 ++ X.MESH NODE=30 LOC=1.4 ++ X.MESH NODE=40 LOC=1.6 ++ 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 ++ 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 + +.OPTIONS ACCT BYPASS=1 +.PRINT TRAN V(12) V(21) +.END diff --git a/Windows/spice/examples/cider/serial/nmosinv.cir b/Windows/spice/examples/cider/serial/nmosinv.cir new file mode 100644 index 00000000..b6fa11ab --- /dev/null +++ b/Windows/spice/examples/cider/serial/nmosinv.cir @@ -0,0 +1,51 @@ +RESISTIVE LOAD NMOS INVERTER +VIN 1 0 PWL 0 0.0 2NS 5 +VDD 3 0 DC 5.0 +RD 3 2 2.5K +M1 2 1 4 5 MMOD W=10UM +CL 2 0 2PF +VB 5 0 0 +VS 4 0 0 + +.MODEL MMOD 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 ++ ++ 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 ++ METHOD AC=DIRECT ONEC + +.TRAN 0.2NS 30NS +.OPTIONS ACCT BYPASS=1 +.PRINT TRAN V(1) V(2) +.END diff --git a/Windows/spice/examples/cider/serial/pass.cir b/Windows/spice/examples/cider/serial/pass.cir new file mode 100644 index 00000000..a15a6f61 --- /dev/null +++ b/Windows/spice/examples/cider/serial/pass.cir @@ -0,0 +1,55 @@ +TURNOFF TRANSIENT OF PASS TRANSISTOR + +M1 11 2 3 4 MMOD W=20UM +CS 1 0 6.0PF +CL 3 0 6.0PF +R1 3 6 200K +VIN 6 0 DC 0 +VDRN 1 11 DC 0 +VG 2 0 DC 5 PWL 0 5 0.1N 0 1 0 +VB 4 0 DC 0.0 + +.TRAN 0.05NS 0.2NS 0.0NS 0.05NS +.PRINT TRAN V(1) I(VDRN) +.IC V(1)=0 V(3)=0 +.OPTION ACCT BYPASS=1 + +.MODEL MMOD 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 ++ ++ 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 ++ METHOD AC=DIRECT ONEC + +.END diff --git a/Windows/spice/examples/cider/serial/pullup.cir b/Windows/spice/examples/cider/serial/pullup.cir new file mode 100644 index 00000000..a4d7a4d1 --- /dev/null +++ b/Windows/spice/examples/cider/serial/pullup.cir @@ -0,0 +1,67 @@ +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 4.0NS +.PRINT TRAN V(3) V(4) + +.OPTION ACCT BYPASS=1 +.END diff --git a/Windows/spice/examples/cider/serial/readme b/Windows/spice/examples/cider/serial/readme new file mode 100644 index 00000000..08f29304 --- /dev/null +++ b/Windows/spice/examples/cider/serial/readme @@ -0,0 +1,3 @@ +This directory contains the CIDER serial-version benchmarks used in the +thesis "Design-Oriented Mixed-Level Circuit and Device Simulation" by +David A. Gates. diff --git a/Windows/spice/examples/cider/serial/recovery.cir b/Windows/spice/examples/cider/serial/recovery.cir new file mode 100644 index 00000000..cd33be1e --- /dev/null +++ b/Windows/spice/examples/cider/serial/recovery.cir @@ -0,0 +1,40 @@ +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 10NS +.PRINT TRAN V(3) I(VIN) + +.END diff --git a/Windows/spice/examples/cider/serial/rtlinv.cir b/Windows/spice/examples/cider/serial/rtlinv.cir new file mode 100644 index 00000000..ef0dd94d --- /dev/null +++ b/Windows/spice/examples/cider/serial/rtlinv.cir @@ -0,0 +1,25 @@ +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 ++ 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 + +.END diff --git a/Windows/spice/examples/cider/serial/vco.cir b/Windows/spice/examples/cider/serial/vco.cir new file mode 100644 index 00000000..852ddd7f --- /dev/null +++ b/Windows/spice/examples/cider/serial/vco.cir @@ -0,0 +1,41 @@ +VOLTAGE CONTROLLED OSCILLATOR + +RC1 7 5 1K +RC2 7 6 1K + +Q5 7 7 5 QMOD AREA = 100P +Q6 7 7 6 QMOD AREA = 100P + +Q3 7 5 2 QMOD AREA = 100P +Q4 7 6 1 QMOD AREA = 100P + +IB1 2 0 .5MA +IB2 1 0 .5MA +CB1 2 0 1PF +CB2 1 0 1PF + +Q1 5 1 3 QMOD AREA = 100P +Q2 6 2 4 QMOD AREA = 100P + +C1 3 4 .1UF + +IS1 3 0 DC 2.5MA PULSE 2.5MA 0.5MA 0 1US 1US 50MS +IS2 4 0 1MA +VCC 7 0 10 + +.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 ++ 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 + +.OPTION ACCT BYPASS=1 +.TRAN 3US 600US 0 3US +.PRINT TRAN V(4) +.END diff --git a/Windows/spice/examples/control_structs/foreach_bjt_ft.sp b/Windows/spice/examples/control_structs/foreach_bjt_ft.sp new file mode 100644 index 00000000..ef5e9d47 --- /dev/null +++ b/Windows/spice/examples/control_structs/foreach_bjt_ft.sp @@ -0,0 +1,51 @@ +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 +.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 diff --git a/Windows/spice/examples/control_structs/new-check-3.sp b/Windows/spice/examples/control_structs/new-check-3.sp new file mode 100644 index 00000000..c85c19f6 --- /dev/null +++ b/Windows/spice/examples/control_structs/new-check-3.sp @@ -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 diff --git a/Windows/spice/examples/control_structs/new-check-4.sp b/Windows/spice/examples/control_structs/new-check-4.sp new file mode 100644 index 00000000..7c241f23 --- /dev/null +++ b/Windows/spice/examples/control_structs/new-check-4.sp @@ -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 diff --git a/Windows/spice/examples/control_structs/repeat3.sp b/Windows/spice/examples/control_structs/repeat3.sp new file mode 100644 index 00000000..5650252a --- /dev/null +++ b/Windows/spice/examples/control_structs/repeat3.sp @@ -0,0 +1,148 @@ +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 +.endc diff --git a/Windows/spice/examples/control_structs/s-param.cir b/Windows/spice/examples/control_structs/s-param.cir new file mode 100644 index 00000000..bff277f7 --- /dev/null +++ b/Windows/spice/examples/control_structs/s-param.cir @@ -0,0 +1,120 @@ +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 S22 S12 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 s11 and s21 +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 s12 and s22 +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 s11=ac1.s22 +let s21=ac1.s12 +settype s-param S11 S21 S22 S12 + +let S11db = db(s11) +let S12db = db(s12) +let S21db = db(s21) +let S22db = db(s22) +settype decibel S11db S21db S22db S12db + +let P11=180*ph(s11)/pi +let P21=180*ph(s21)/pi +let P22=180*ph(S22)/pi +let P12=180*ph(S12)/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 S11 S12 +*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 +.endc + +.end diff --git a/Windows/spice/examples/measure/func_cap.sp b/Windows/spice/examples/measure/func_cap.sp new file mode 100644 index 00000000..eca14a86 --- /dev/null +++ b/Windows/spice/examples/measure/func_cap.sp @@ -0,0 +1,15 @@ +* 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 + +.end diff --git a/Windows/spice/examples/measure/inv-meas-tran-auto.sp b/Windows/spice/examples/measure/inv-meas-tran-auto.sp new file mode 100644 index 00000000..927d9a44 --- /dev/null +++ b/Windows/spice/examples/measure/inv-meas-tran-auto.sp @@ -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.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model nch.2 nmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) +.model pch.1 pmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model pch.2 pmos ( version=4.4 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 + diff --git a/Windows/spice/examples/measure/inv-meas-tran-control.sp b/Windows/spice/examples/measure/inv-meas-tran-control.sp new file mode 100644 index 00000000..48f7d09a --- /dev/null +++ b/Windows/spice/examples/measure/inv-meas-tran-control.sp @@ -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.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model nch.2 nmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) +.model pch.1 pmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model pch.2 pmos ( version=4.4 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 + diff --git a/Windows/spice/examples/measure/inv-meas-tran.sp b/Windows/spice/examples/measure/inv-meas-tran.sp new file mode 100644 index 00000000..0a4077ea --- /dev/null +++ b/Windows/spice/examples/measure/inv-meas-tran.sp @@ -0,0 +1,104 @@ +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.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model nch.2 nmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) +.model pch.1 pmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model pch.2 pmos ( version=4.4 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 +.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) +.endc + +.end + diff --git a/Windows/spice/examples/measure/inv-meas-tran_oc.sp b/Windows/spice/examples/measure/inv-meas-tran_oc.sp new file mode 100644 index 00000000..98077b80 --- /dev/null +++ b/Windows/spice/examples/measure/inv-meas-tran_oc.sp @@ -0,0 +1,98 @@ +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.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model nch.2 nmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) +.model pch.1 pmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model pch.2 pmos ( version=4.4 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 +.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' + +.end + diff --git a/Windows/spice/examples/measure/mos-meas-dc-control.sp b/Windows/spice/examples/measure/mos-meas-dc-control.sp new file mode 100644 index 00000000..9869cf60 --- /dev/null +++ b/Windows/spice/examples/measure/mos-meas-dc-control.sp @@ -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.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u toxe=3n ) +.model nch.2 nmos ( version=4.4 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 + + + + + diff --git a/Windows/spice/examples/measure/mos-meas-dc.sp b/Windows/spice/examples/measure/mos-meas-dc.sp new file mode 100644 index 00000000..eb3892db --- /dev/null +++ b/Windows/spice/examples/measure/mos-meas-dc.sp @@ -0,0 +1,37 @@ +***** 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.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model nch.2 nmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) +.model pch.1 pmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model pch.2 pmos ( version=4.4 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) +.endc + + +.end + + + + + diff --git a/Windows/spice/examples/measure/rc-meas-ac-control.sp b/Windows/spice/examples/measure/rc-meas-ac-control.sp new file mode 100644 index 00000000..9b57929d --- /dev/null +++ b/Windows/spice/examples/measure/rc-meas-ac-control.sp @@ -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 + diff --git a/Windows/spice/examples/measure/rc-meas-ac.sp b/Windows/spice/examples/measure/rc-meas-ac.sp new file mode 100644 index 00000000..2d464ba5 --- /dev/null +++ b/Windows/spice/examples/measure/rc-meas-ac.sp @@ -0,0 +1,54 @@ +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)) +.endc + +.end + diff --git a/Windows/spice/examples/measure/simple-meas-tran.sp b/Windows/spice/examples/measure/simple-meas-tran.sp new file mode 100644 index 00000000..0279c73f --- /dev/null +++ b/Windows/spice/examples/measure/simple-meas-tran.sp @@ -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! + +.endc +.end diff --git a/Windows/spice/examples/memristor/memristor.sp b/Windows/spice/examples/memristor/memristor.sp new file mode 100644 index 00000000..fdb9488a --- /dev/null +++ b/Windows/spice/examples/memristor/memristor.sp @@ -0,0 +1,65 @@ +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 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! +.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 *** +* 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' +.endc + +.end diff --git a/Windows/spice/examples/memristor/memristor_x.sp b/Windows/spice/examples/memristor/memristor_x.sp new file mode 100644 index 00000000..1c283e73 --- /dev/null +++ b/Windows/spice/examples/memristor/memristor_x.sp @@ -0,0 +1,83 @@ +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' +.endc + +.end diff --git a/Windows/spice/examples/numparam/example.cir b/Windows/spice/examples/numparam/example.cir new file mode 100644 index 00000000..6e13bc06 --- /dev/null +++ b/Windows/spice/examples/numparam/example.cir @@ -0,0 +1,16 @@ +* Param-example +.param amplitude= 1V + +.subckt myfilter in out rval=100k cval=100nF +Ra in p1 {2*rval} +Rb p1 out {2*rval} +C1 p1 0 {2*cval} +Ca in p2 {cval} +Cb p2 out {cval} +R1 p2 0 {rval} +.ends myfilter + +X1 input output myfilter rval=1k cval=1n +V1 input 0 AC {amplitude} + +.end diff --git a/Windows/spice/examples/numparam/pin.mod b/Windows/spice/examples/numparam/pin.mod new file mode 100644 index 00000000..b035cd2f --- /dev/null +++ b/Windows/spice/examples/numparam/pin.mod @@ -0,0 +1,33 @@ +* PIN model +* line 2 +* line 3 +* -- Summary ------------------------------- +* This is a simple spice model of a PIN diode. +* +* -- Description --------------------------- +* It is a three node device; one input node (relative to ground) and two +* output nodes (cathode and anode) +* + +* -- Model ---------------------------------- +.subckt SIMPLE_PIN input cathode anode resp=0.5 + +* Input photocurrent is modled by a voltage +* This generates a current using a linear voltage-controlled current source +Gin dk da input 0 {resp} +Rin input 0 1G +Cin input 0 {resp} + +* The pn-junction that generates this photocurrent in the real device is modelled +* here by a simple diode +Dpn da dk pndiode + +* terminal resistances +Ra anode da 0.001ohm +Rk cathode dk 0.001ohm + +* subsircuit models: +.MODEL pndiode D IS=0.974p RS=0.1 N=1.986196 BV=7.1 IBV=0.1n ++ CJO=99.2p VJ=0.455536 M=0.418717 TT=500n + +.ends diff --git a/Windows/spice/examples/numparam/pintest.cir b/Windows/spice/examples/numparam/pintest.cir new file mode 100644 index 00000000..80702e14 --- /dev/null +++ b/Windows/spice/examples/numparam/pintest.cir @@ -0,0 +1,32 @@ +* Test circuit for pin.mod + +*.include C:\Spice\tests\numparam\pin.mod +.include pin.mod + +* Photodiode supply +Vbias psu 0 10V + +* Light input is modeled by a voltage source that we can vary +Vlight input 0 2mW + +* The pin diode +Xpin input cathode anode SIMPLE_PIN resp=0.7 + +* monitor resistor +Rmon anode 0 1ohm + +* Quench restistor +Rq psu cathode 1k + +*.dc vlight 0 5mW 0.01mW + +.dc vlight 0 10mW 0.01mW + +.control +dc vlight 0 10mW 0.01mW +*write pintest.raw all +plot V(anode) +.endc + +.end + diff --git a/Windows/spice/examples/pss/colpitt_osc_pss.cir b/Windows/spice/examples/pss/colpitt_osc_pss.cir new file mode 100644 index 00000000..8d0583ae --- /dev/null +++ b/Windows/spice/examples/pss/colpitt_osc_pss.cir @@ -0,0 +1,22 @@ +Colpitt's Oscillator Circuit +* Colpitt is an harmonic oscillator (LC based) which use +* a capacitive partition of resonator to feed the single +* active device. +* Predicted frequency is about 3.30435e+06 Hz. + +* Models: +.model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) + +r1 1 0 1 +q1 2 1 3 qnl +vcc 4 0 5 +rl 4 2 750 +c1 2 3 500p +c2 4 3 4500p +l1 4 2 5uH +re 3 6 4.65k +vee 6 0 dc -10 pwl 0 0 1e-9 -10 + +*.tran 30n 12u +.pss 3.1e6 500e-6 3 256 10 50 5e-3 + diff --git a/Windows/spice/examples/pss/compl_cross_quad_osc_pss.cir b/Windows/spice/examples/pss/compl_cross_quad_osc_pss.cir new file mode 100644 index 00000000..b45e730d --- /dev/null +++ b/Windows/spice/examples/pss/compl_cross_quad_osc_pss.cir @@ -0,0 +1,35 @@ +Complimentary Cross Quad CMOS Oscillator +* Predicted frequency is 5.61224e+08 Hz. +* +* PLOT i1 + +* Supply +vdd vdd gnd 1.2 pwl 0 1.2 1e-9 1.2 +rdd vdd vdd_ana 70m +rgnd gnd gnd_ana 70m + +* Cross quad +mpsx v_plus v_minus vdd_ana vdd_ana pch w=10u l=0.1u +mnsx v_plus v_minus gnd_ana gnd_ana nch w=10u l=0.1u +mpdx v_minus v_plus vdd_ana vdd_ana pch w=10u l=0.1u +mndx v_minus v_plus gnd_ana gnd_ana nch w=10u l=0.1u + +* Lumped elements model of real inductor +ls v_plus i1 19.462n ic=0.06 +rs i1 v_minus 7.789 +cs v_plus v_minus 443f +coxs v_plus is 2.178p +coxd v_minus id 2.178p +rsis is gnd_ana 308 +rsid id gnd_ana 308 +csis is gnd_ana 51f +csid id gnd_ana 51f + +* Parallel capacitor to determine leading resonance +cp v_plus v_minus 3.4p + +.model nch nmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model pch pmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) + +*.tran 0.05n 1u uic +.pss 500e6 1u 1 1024 10 10 5e-3 uic diff --git a/Windows/spice/examples/pss/hartley_osc_pss.cir b/Windows/spice/examples/pss/hartley_osc_pss.cir new file mode 100644 index 00000000..bd1eef3d --- /dev/null +++ b/Windows/spice/examples/pss/hartley_osc_pss.cir @@ -0,0 +1,21 @@ +Hartley's Oscillator Circuit +* Hartley is an harmonic oscillator (LC based) which use +* an inductive partition of resonator to feed the single +* active device. Output is taken on node 2. +* Prediceted frequency is about 121.176 Hz. +* +* PLOT V(3) + +* Models: +.model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) + +vcc 1 0 5 pwl 0 0 1e-5 5 +r1 1 2 0.2k +q1 2 3 0 qnl +c1 3 4 633n +l1 3 0 1.5 +l2 0 4 500m +r2 4 2 100 + +*.tran 300n 50m +.pss 50 200e-3 2 1024 11 10 5e-3 uic diff --git a/Windows/spice/examples/pss/ring_osc_pss.cir b/Windows/spice/examples/pss/ring_osc_pss.cir new file mode 100644 index 00000000..d2649605 --- /dev/null +++ b/Windows/spice/examples/pss/ring_osc_pss.cir @@ -0,0 +1,29 @@ +Ring CMOS Oscillator +* Oscillation is taken on node "bout". +* Predicted frequency is 3.8e+09 Hz. +* +* PLOT bout + +* Supply +vdd vdd gnd 1.2 pwl 0 1.2 1e-9 1.2 +rdd vdd vdd_ana 70m +rgnd gnd gnd_ana 70m + +* Inverter +mp1 inv1 inv3 vdd_ana vdd_ana pch w=10u l=0.18u +mn1 inv1 inv3 gnd_ana gnd_ana nch w=10u l=0.18u +mp2 inv2 inv1 vdd_ana vdd_ana pch w=10u l=0.18u +mn2 inv2 inv1 gnd_ana gnd_ana nch w=10u l=0.18u +mp3 inv3 inv2 vdd_ana vdd_ana pch w=10u l=0.18u +mn3 inv3 inv2 gnd_ana gnd_ana nch w=10u l=0.18u + +* Buffer out +mp4 bout inv3 vdd_ana vdd_ana pch w=10u l=0.18u +mn4 bout inv3 gnd_ana gnd_ana nch w=10u l=0.18u + +.model nch nmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) +.model pch pmos ( version=4.4 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) + +*.tran 0.005n 100n +*.plot tran v(4) +.pss 624e6 500n 1 1024 10 5 5e-3 uic diff --git a/Windows/spice/examples/pss/vackar_osc_pss.cir b/Windows/spice/examples/pss/vackar_osc_pss.cir new file mode 100644 index 00000000..13ce1a12 --- /dev/null +++ b/Windows/spice/examples/pss/vackar_osc_pss.cir @@ -0,0 +1,21 @@ +Vackar's Oscillator Circuit +* Vackar is a derivation of Colpitt's oscillator (LC based). +* Oscillation is taken on node 4. +* Predicted frequency is 1.91803e+06Hz. + +* Models: +.model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) + +vcc 1 0 5 pwl 0 10 1e-9 5 +lrfc 1 2 100u +cdec 2 0 7n +q1 3 2 0 qnl +rb 3 0 4700 +c1 3 4 100p +c2 3 0 600p +c0 4 0 1n +l1 4 1 6.2u + +*.tran 30n 12u +*.plot tran v(4) +.pss 1e6 10e-6 4 1024 10 50 5e-3 uic diff --git a/Windows/spice/examples/pss/vdp_osc_pss.cir b/Windows/spice/examples/pss/vdp_osc_pss.cir new file mode 100644 index 00000000..f4e66815 --- /dev/null +++ b/Windows/spice/examples/pss/vdp_osc_pss.cir @@ -0,0 +1,17 @@ +Van Der Pol Oscillator +* Prediceted frequency is about 4.54167e+06 Hz. + +* Third harmonic is high as the first one +Ba gib 0 I=-1e-2*v(gib,0)+1e-2*v(gib,0)^3 +* Q is about 10 +La gib 0 1.2e-6 +Ra gib 0 158.113 +Ca gib 0 1e-9 ic=0.5 +*La gib 0 1e-9 +*Ra gib 0 474.6 +*Ca gib 0 1e-9 ic=0.5 +* Ghost node... Test for my PSS! +Rb bad 0 1k + +*.tran 1e-9 150e-6 uic +.pss 0.8e6 130e-6 1 50 10 50 5e-3 uic diff --git a/Windows/spice/examples/snapshot/adder_mos.cir b/Windows/spice/examples/snapshot/adder_mos.cir new file mode 100644 index 00000000..603f1f11 --- /dev/null +++ b/Windows/spice/examples/snapshot/adder_mos.cir @@ -0,0 +1,26 @@ + Example: snsave +* load a circuit (including transistor models and .tran command) +* starts transient simulation until stop point +* store intermediate data to file +* begin with editing the file location +* to be run with 'ngspice adder_mos.cir' + +.include adder_mos_circ.cir + +.control +*cd to where all files are located +cd D:\Spice_general\ngspice\examples\snapshot +set noaskquit +unset ngdebug +set noinit +save vcc#branch 10 +iplot v(10) +*interrupt condition for the simulation +stop when time > 500n +* simulate +run +* store snapshot to file +snsave adder500.snap +.endc + +.END diff --git a/Windows/spice/examples/snapshot/adder_mos_circ.cir b/Windows/spice/examples/snapshot/adder_mos_circ.cir new file mode 100644 index 00000000..b0a591e4 --- /dev/null +++ b/Windows/spice/examples/snapshot/adder_mos_circ.cir @@ -0,0 +1,61 @@ +* 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=3u L=1u +M2 net.1 in2 0 0 n1 W=3u L=2u +M3 out in1 Vdd Vdd p1 W=3u L=1u +M4 out in1 net.1 0 n1 W=3u L=2u +.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 +VCC 99 0 DC 3.3V +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 100K +*RBIT1 10 0 100K +*RBIT2 11 0 100K +*RBIT3 12 0 100K +*RCOUT 13 0 100K + +.TRAN 1NS 1000NS + +.model n1 nmos level=8 version=3.3.0 +.model p1 pmos level=8 version=3.3.0 + +.END diff --git a/Windows/spice/examples/snapshot/adder_snload.script b/Windows/spice/examples/snapshot/adder_snload.script new file mode 100644 index 00000000..f5556347 --- /dev/null +++ b/Windows/spice/examples/snapshot/adder_snload.script @@ -0,0 +1,15 @@ +* SCRIPT: ADDER - 4 BIT BINARY +* script to reload circuit and continue the simulation +* begin with editing the file location +* to be started with 'ngspice adder_snload.script' + +.control +* cd to where all files are located +cd D:\Spice_general\ngspice\examples\snapshot +* load circuit and snpashot file +snload adder_mos_circ.cir adder500.snap +* continue simulation +resume +* plot some node voltages +plot v(10) v(11) v(12) +.endc diff --git a/Windows/spice/examples/transient-noise/README b/Windows/spice/examples/transient-noise/README new file mode 100644 index 00000000..ce9d4105 --- /dev/null +++ b/Windows/spice/examples/transient-noise/README @@ -0,0 +1,15 @@ +* noi-ring51-demo +ring oszillator with one noisy inverter +(requires 45min on a i7 860) + +* noi-sc-tr +noise source sampled + +* noise_vnoi +just a few 1/f and white noise sources + +* shot_ng +emulation of shot noise in a diode + +* rts-1.cir +random telegraph signals noise diff --git a/Windows/spice/examples/transient-noise/modelcard.nmos b/Windows/spice/examples/transient-noise/modelcard.nmos new file mode 100644 index 00000000..83ca9849 --- /dev/null +++ b/Windows/spice/examples/transient-noise/modelcard.nmos @@ -0,0 +1,41 @@ +*model = bsim3v3 +*Berkeley Spice Compatibility +* Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 +.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 + + + + + + diff --git a/Windows/spice/examples/transient-noise/modelcard.pmos b/Windows/spice/examples/transient-noise/modelcard.pmos new file mode 100644 index 00000000..f50fe0a6 --- /dev/null +++ b/Windows/spice/examples/transient-noise/modelcard.pmos @@ -0,0 +1,31 @@ +.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 + + + + diff --git a/Windows/spice/examples/transient-noise/noi-ring51-demo.cir b/Windows/spice/examples/transient-noise/noi-ring51-demo.cir new file mode 100644 index 00000000..8bc6f6ed --- /dev/null +++ b/Windows/spice/examples/transient-noise/noi-ring51-demo.cir @@ -0,0 +1,59 @@ +* 51 stage Ring-Osc. BSIM3, transient noise +* will need 45 min on a i7 860 with 4 threads + +* closes the loop between inverters xinv1 and xinv5 +vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1 + +vdd dd 0 dc 0 pulse 0 2.2 0 1n 1 1 1 + +vss ss 0 dc 0 +ve sub 0 dc 0 + +vpe well 0 2.2 + +* noisy inverters +xiinv2 dd ss sub well out25 out50 inv253 +xiinv1 dd ss sub well in out25 inv253 + +*very noisy inverter +xiinv5 dd ss sub well out50 out inv1_2 +*output amplifier +xiinv11 dd ss sub well out25 bufout inv1 +cout bufout ss 0.2pF + +.option itl1=500 gmin=1e-15 itl4=10 noacct + +* .dc vdd 0 2 0.01 +.tran 0.01n 500n + +.save in bufout v(t1) + +.include modelcard.nmos +.include modelcard.pmos + +.include noilib-demo.h + +.control +unset ngdebug +* first run +save bufout $ needed for restricting memory usage +rusage +tran 8p 10000n +rusage +plot bufout xlimit 90n 95n +linearize +fft bufout +* next run +reset +save bufout +alter @v.xiinv5.vn1[trnoise] = [ 0 0 0 0 ] $ no noise +tran 8p 10000n +rusage +plot bufout xlimit 90n 95n +linearize +fft bufout +plot mag(bufout) mag(sp2.bufout) xlimit 0 2G ylimit 1e-11 0.1 ylog +.endc + + +.end diff --git a/Windows/spice/examples/transient-noise/noi-sc-tr.cir b/Windows/spice/examples/transient-noise/noi-sc-tr.cir new file mode 100644 index 00000000..19c738b7 --- /dev/null +++ b/Windows/spice/examples/transient-noise/noi-sc-tr.cir @@ -0,0 +1,53 @@ +* simple sample & hold, transient noise + +* switch control +* PULSE(V1 V2 TD TR TF PW PER) +vgate1 ga1 0 dc 0 pulse (0 1 0 10n 10n 90n 200n) + +Switch1 1 2 ga1 0 smodel1 + +* noisy input +* rms value white, time step, exponent < 2, rms value 1/f +vin 1 0 dc 0 trnoise 0.1m 0.2n 1 0.1m +*vin 1 0 dc 0 trnoise 0.1m 0.2n 0 0.1m + +* output +c2 2 0 10p + +* second S&H +vgate2 ga2 0 dc 0 pulse (0 1 140n 10n 10n 30n 200n) +*Buffer EXXXXXXX N+ N- NC+ NC- VALUE +e1 4 0 2 0 1 +Switch2 4 3 ga2 0 smodel2 +c3 3 0 10p + +.option itl1=500 gmin=1e-15 itl4=10 acct + +.model smodel1 sw vt=0.5 ron=100 +.model smodel2 sw vt=0.5 ron=100 + +.tran 0.4n 100u + + +.control +unset ngdebug +set filetype=ascii +rusage +run +rusage all +write noi_test.out v(1) +plot v(2) v(3) xlimit 4u 5u +plot v(ga1) v(ga2) xlimit 4u 5u +linearize +*rms v(1) +fft v(3) +plot mag(v(3)) loglog xlimit 1e4 1e8 ylimit 1e-10 1e-4 +setplot tran1 +linearize +psd 101 v(3) +plot mag(v(3)) xlimit 0 3e7 ylimit 0 10u + +.endc + + +.end diff --git a/Windows/spice/examples/transient-noise/noilib-demo.h b/Windows/spice/examples/transient-noise/noilib-demo.h new file mode 100644 index 00000000..84e119d3 --- /dev/null +++ b/Windows/spice/examples/transient-noise/noilib-demo.h @@ -0,0 +1,56 @@ + +* standard inverter made noisy +*.subckt inv1 dd ss sub well in out +*vn1 out outi dc 0 noise 0.1 0.3n 1.0 0.1 +*mn1 outi in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u +*mp1 outi in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u +*.ends inv1 + +* standard inverter +.subckt inv1 dd ss sub well in out +mn1 out in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u +mp1 out in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u +.ends inv1 + +* very noisy inverter (noise on vdd and well) +.subckt inv1_1 dd ss sub well in out +vn1 dd idd dc 0 trnoise 0.05 0.05n 1 0.05 +vn2 well iwell dc 0 trnoise 0.05 0.05n 1 0.05 +mn1 out in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u +mp1 out in idd iwell p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u +*Cout out 0 0.1p +.ends inv1_1 + + +* another very noisy inverter +.subckt inv1_2 dd ss sub well in out +vn1 out outi dc 0 trnoise 0.05 8p 1.0 0.001 +mn1 outi in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u +mp1 outi in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u +*Cout out 0 0.1p +.ends inv1_2 + +* another very noisy inverter with current souces parallel to transistor +.subckt inv13 dd ss sub well in outi +in1 ss outi dc 0 noise 200u 0.05n 1.0 50u +mn1 outi in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u +in2 dd outi dc 0 noise 200u 0.05n 1.0 50u +mp1 outi in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u +*Cout out 0 0.1p +.ends inv13 + +.subckt inv53 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 inv53 + +.subckt inv253 dd ss sub well in out +xinv1 dd ss sub well in 1 inv53 +xinv2 dd ss sub well 1 2 inv53 +xinv3 dd ss sub well 2 3 inv53 +xinv4 dd ss sub well 3 4 inv53 +xinv5 dd ss sub well 4 out inv53 +.ends inv253 diff --git a/Windows/spice/examples/transient-noise/noise_vnoi.cir b/Windows/spice/examples/transient-noise/noise_vnoi.cir new file mode 100644 index 00000000..a589d1a0 --- /dev/null +++ b/Windows/spice/examples/transient-noise/noise_vnoi.cir @@ -0,0 +1,31 @@ +* Random noise test +* internal noise source + +* one over f +VNOI1 1 0 DC 0 TRNOISE(0n 1n 1.7 1n) +VNOI2 2 0 DC 0 TRNOISE(0n 1n 1.4 1n) +VNOI3 3 0 DC 0 TRNOISE(0n 1n 1.0 1n) +VNOI4 4 0 DC 0 TRNOISE(0n 1n 0.5 1n) +* white +VNOI5 5 0 DC 0 TRNOISE(1n 1n 0 0) +* both +VNOI6 6 0 DC 0 TRNOISE(1n 1n 1 1n) + +* 250000 sample points +.tran 1n 250u + +.control +run +plot v(1) v(2) v(3) v(4) v(5) v(6) +plot v(1) v(2) v(3) v(4) v(5) v(6) xlimit 102.0u 102.01u ylimit -3n 3n +linearize +meas tran vavg5 AVG v(5) from=0 to=250u +meas tran vpp5 PP v(5) from=0 to=250u +meas tran vrms5 RMS v(5) from=0 to=250u +fft v(1) v(2) v(3) v(4) v(5) v(6) +plot mag(v(1)) mag(v(2)) mag(v(3)) mag(v(4)) mag(v(5)) loglog xlimit 1e3 1e9 +plot mag(v(6)) loglog xlimit 1e3 1e9 +.endc + +.end + diff --git a/Windows/spice/examples/transient-noise/rts-1.cir b/Windows/spice/examples/transient-noise/rts-1.cir new file mode 100644 index 00000000..f35256dc --- /dev/null +++ b/Windows/spice/examples/transient-noise/rts-1.cir @@ -0,0 +1,29 @@ +* white noise, 1/f noise, RTS noise + +* voltage source +VRTS2 13 12 DC 0 trnoise(0 0 0 0 5m 18u 30u) +VRTS3 11 0 DC 0 trnoise(0 0 0 0 10m 20u 40u) +VALL 12 11 DC 0 trnoise(1m 1u 1.0 0.1m 15m 22u 50u) + +VW1of 21 0 DC trnoise(1m 1u 1.0 0.1m) + +* current source +IRTS2 10 0 DC 0 trnoise(0 0 0 0 5m 18u 30u) +IRTS3 10 0 DC 0 trnoise(0 0 0 0 10m 20u 40u) +IALL 10 0 DC 0 trnoise(1m 1u 1.0 0.1m 15m 22u 50u) +R10 10 0 1 + +IW1of 9 0 DC trnoise(1m 1u 1.0 0.1m) +Rall 9 0 1 + +* 500000 sample points +.tran 1u 500u + +.control +run +plot v(13) v(21) +plot v(10) v(9) +.endc + +.end + diff --git a/Windows/spice/examples/transient-noise/shot_ng.cir b/Windows/spice/examples/transient-noise/shot_ng.cir new file mode 100644 index 00000000..ed06c81c --- /dev/null +++ b/Windows/spice/examples/transient-noise/shot_ng.cir @@ -0,0 +1,27 @@ +* Shot noise test with B source, diode +* voltage on device (diode, forward) +Vdev out 0 DC 0 PULSE(0.4 0.45 10u) +* diode, forward direction, to be modeled with noise +D1 mess 0 DMOD +.model DMOD D IS=1e-14 N=1 +X1 0 mess out ishot +* device between 1 and 2 +* new output terminals of device including noise: 1 and 3 +.subckt ishot 1 2 3 +* white noise source with rms 1V +VNG 0 11 DC 0 TRNOISE(1 1n 0 0) +*measure the current i(v1) +V1 2 3 DC 0 +* calculate the shot noise +* sqrt(2*current*q*bandwidth) +BI 1 3 I=sqrt(2*abs(i(v1))*1.6e-19*1e7)*v(11) +.ends ishot +* 20000 sample points +.tran 1n 20u +.control +run +plot (-1)*i(vdev) +meas tran vdev_rms avg i(vdev) from=0u to=9.9u +meas tran vdev_rms avg i(vdev) from=10.1u to=20u +.endc +.end diff --git a/Windows/spice/examples/various/FFT_Leakage.cir b/Windows/spice/examples/various/FFT_Leakage.cir new file mode 100644 index 00000000..b2bcfb7d --- /dev/null +++ b/Windows/spice/examples/various/FFT_Leakage.cir @@ -0,0 +1,53 @@ +FFT_Leakage_tests http://www.idea2ic.com/ +*=========Create_Signal================== +VTime VTime 0 DC 0 PWL( 0 0 1 1) +Vfreq Vfreq 0 DC 5.5k +BVAC IN 0 V = sin( 6.283185307179586*V(VFreq)*V(VTime)) +.control +*TRAN TSTEP TSTOP TSTART TMAX ?UIC? +tran 1u .999m 0 1u +set pensize = 2 +linearize +let numb2 = length(in) +print numb2 + +*=========Do_FFT_and_Plot_As_dB_Freq================== +let ac = in +j(0) +let ac_fft=fft(ac) +let numb_f2 = (numb2)/2 -1 +compose freq start = 1 stop = $&numb_f2 step =1 +compose vreal start = 1 stop = $&numb_f2 step =1 +compose vimag start = 1 stop = $&numb_f2 step =1 +let j = 0 +repeat $&numb_f2 +let freq[j] = freq[j] +let vreal[j] = 2*real(ac_fft[j+1]) +let vimag[j] = 2*imag(ac_fft[j+1]) +let j = j +1 +end +plot dB(abs(vreal+1f)) dB(abs(vimag+1f)) vs freq xlog + +*=========Extract_Error_Signal========================= +let funBin = 5k/1000 +let unvect = unitvec(numb2) +let fundspec = unvect*0 +j(0) +let fundspec[funBin] = real(ac_fft[funBin]) +j(imag(ac_fft[funBin] )) +let fundspec[numb2-funBin] = real(ac_fft[numb2-funBin]) +j(imag(ac_fft[numb2-funBin] )) +let fund = ifft(fundspec) +let dc_ofset = real(ac_fft[0]) +let thdspec = ac_fft +let thdspec[0] = 0 +j(0) +let thdspec[funBin] = 0 +j(0) +let thdspec[numb2-funBin] = 0 +j(0) +let thd = ifft(thdspec) +plot norm(in) norm(fund) norm(thd)/2 + +*=========Calc_Values========================= +let rms_Fund = sqrt(mean(fund*fund)) +let rms_THD = sqrt(mean(thd*thd)) +let THD_percent = 100*rms_THD/rms_Fund +let FREQ_Hz = VFreq[0] +echo "Freq_Hz=$&FREQ_Hz THD_percent=$&THD_percent Fund_rms=$&rms_Fund THD_rms=$&rms_THD " + +.endc +.end diff --git a/Windows/spice/examples/various/FFT_tests.cir b/Windows/spice/examples/various/FFT_tests.cir new file mode 100644 index 00000000..e7ede5ec --- /dev/null +++ b/Windows/spice/examples/various/FFT_tests.cir @@ -0,0 +1,123 @@ +FFT_tests http://www.idea2ic.com/ +.control +set units=degrees +let a = vector(16) +*plot a vs a +set pensize = 2 +*=========Need_a_complex_input==================== +let ac = a+j(0) +print a ac +*plot fft(a) vs a +*plot real(fft(ac)) imag(fft(ac)) vs a +* fft(a) fft(ac) + +*=========DC_Works==================== +let b = unitvec(16) +let bc = b+j(0) +*plot fft(b) vs a title DC_WORKS +*print fft(b) fft(bc) + +*=========DC_Plus_cos_Remove_AC==================== +let numb = length(b) +print numb + +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title DC_Plus_COS + +let fftac[2]=(0,0) +let fftac[14]=(0,0) +let ifftac = ifft(fftac) +plot ifftac ac vs a title COS_REMOVED + +*=========DC_Plus_cos_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifftac ac vs a title COS_With_DC_REMOVED + +*=========DC_Plus_sin_Remove_AC==================== +let indx = 0 +repeat $&numb +let ac[indx]= sin(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title DC_Plus_SIN + +let fftac[2]=(0,0) +let fftac[14]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title SIN_REMOVED + +*=========DC_Plus_sin_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= sin(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title SIN_With_DC_REMOVED + +*=========DC_Plus_cos_Nyqusit_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/2)+1 +j(0) +let indx = indx +1 +end + +plot ac vs a title Nyq_COS + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title Nyq_FREQ_COS +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title COS_With_DC_REMOVED +*=========DC_Plus_sin_Nyqusit_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= sin(indx*360/2)+1 +j(0) +let indx = indx +1 +end + +plot ac vs a title Nyq_SIN + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title Nyq_FREQ_SIN +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title COS_With_DC_REMOVED + +*=========DC_Plus_COS_Remove_One_BIN==================== +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +let fftac[2]=(0,0) +plot real(fftac) imag(fftac) vs a title DC_Plus_Cos + +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title ONE_BIN_REMOVED + +plot real(ifft(fftac)) imag(ifft(fftac)) vs a title ONE_BIN_REMOVED + +.endc +.end diff --git a/Windows/spice/examples/various/adder_mos.cir b/Windows/spice/examples/various/adder_mos.cir new file mode 100644 index 00000000..9b85e093 --- /dev/null +++ b/Windows/spice/examples/various/adder_mos.cir @@ -0,0 +1,79 @@ + 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 6400NS +* 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 +display +* 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 +.endc + +.END diff --git a/Windows/spice/examples/various/agauss_test.cir b/Windows/spice/examples/various/agauss_test.cir new file mode 100644 index 00000000..c2532751 --- /dev/null +++ b/Windows/spice/examples/various/agauss_test.cir @@ -0,0 +1,48 @@ +* agauss test in ngspice +* generate a sequence of gaussian distributed random numbers. +* test the distribution by sorting the numbers into +* a histogram (buckets) +* chapt. 17.8.6 +.control + define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0)) + let mc_runs = 200 + let run = 0 + let no_buck = 8 $ number of buckets + let bucket = unitvec(no_buck) $ each element contains 1 + let delta = 3e-11 $ width of each bucket, depends + $ on avar and sig + let lolimit = 1e-09 - 3*delta + let hilimit = 1e-09 + 3*delta + + dowhile run < mc_runs + let val = agauss(1e-09, 1e-10, 3) $ get the random number + if (val < lolimit) + let bucket[0] = bucket[0] + 1 $ 'lowest' bucket + end + let part = 1 + dowhile part < (no_buck - 1) + if ((val < (lolimit + part*delta)) & ++ (val > (lolimit + (part-1)*delta))) + let bucket[part] = bucket[part] + 1 + break + end + let part = part + 1 + end + if (val > hilimit) +* 'highest' bucket + let bucket[no_buck - 1] = bucket[no_buck - 1] + 1 + end + let run = run + 1 + end + + let part = 0 + dowhile part < no_buck + let value = bucket[part] - 1 + set value = "$&value" +* print the buckets' contents + echo $value + let part = part + 1 + end + +.endc +.end diff --git a/Windows/spice/examples/various/gain_stage.cir b/Windows/spice/examples/various/gain_stage.cir new file mode 100644 index 00000000..adc22bfb --- /dev/null +++ b/Windows/spice/examples/various/gain_stage.cir @@ -0,0 +1,34 @@ +** MOSFET Gain Stage (AC): Benchmarking Implementation of BSIM4.0.0 +** by Weidong Liu 5/16/2000. +** output redirection into file +** chapter 17.8.8 + +M1 3 2 0 0 N1 L=1u W=4u +Rsource 1 2 100k +Rload 3 vdd 25k +Vdd vdd 0 1.8 +Vin 1 0 1.2 ac 0.1 + +.control +ac dec 10 100 1000Meg +plot v(2) v(3) +let flen = length(frequency) $ length of the vector +let loopcounter = 0 +echo output test > text.txt $ start new file test.txt +* loop +while loopcounter lt flen + let vout2 = v(2)[loopcounter] $ generate a single point complex vector + let vout2re = real(vout2) $ generate a single point real vector + let vout2im = imag(vout2) $ generate a single point imaginary vector + let vout3 = v(3)[loopcounter] $ generate a single point complex vector + let vout3re = real(vout3) $ generate a single point real vector + let vout3im = imag(vout3) $ generate a single point imaginary vector + let freq = frequency[loopcounter] $ generate a single point vector + echo bbb "$&freq" "$&vout2re" "$&vout2im" "$&vout3re" "$&vout3im" >> ++text.txt $ append text and data to file (continued fromm line above) + let loopcounter = loopcounter + 1 +end +.endc + +.MODEL N1 NMOS LEVEL=14 VERSION=4.3.0 TNOM=27 +.end diff --git a/Windows/spice/examples/various/modelcard.nmos b/Windows/spice/examples/various/modelcard.nmos new file mode 100644 index 00000000..9a9bd56c --- /dev/null +++ b/Windows/spice/examples/various/modelcard.nmos @@ -0,0 +1,34 @@ +.model N1 NMOS ++Level= 8 version=3.3.0 ++Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 ++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 ++vgs_max=4 vds_max=4 vbs_max=4 diff --git a/Windows/spice/examples/various/modelcard.pmos b/Windows/spice/examples/various/modelcard.pmos new file mode 100644 index 00000000..1f67f274 --- /dev/null +++ b/Windows/spice/examples/various/modelcard.pmos @@ -0,0 +1,29 @@ +.model P1 PMOS ++Level= 8 version=3.3.0 ++Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 ++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 ++vgs_max=4 vds_max=4 vbs_max=4 diff --git a/Windows/spice/examples/various/nic_soa.cir b/Windows/spice/examples/various/nic_soa.cir new file mode 100644 index 00000000..5752d99d --- /dev/null +++ b/Windows/spice/examples/various/nic_soa.cir @@ -0,0 +1,39 @@ +CMOS NIC +* +.subckt osc_cmos ib_osz lc ra vdd vss +m16 ib_osz ib_osz vss vss n1 w=20u l=1u m=8 +m15 ra ib_osz vss vss n1 w=20u l=1u m=2 +m8 net99 net95 ra ra n1 w=20u l=1u m=2 +m1 net95 net95 net93 net93 n1 w=20u l=1u m=2 +m25 net99 net99 vdd vdd p1 w=3.3u l=0.5u m=1 +m5 net99 net99 vdd vdd p1 w=20u l=1u m=5 +m4 net95 net99 vdd vdd p1 w=20u l=1u m=5 +r23 net99 vss r=38K +r18 net93 lc r=10 +.ends osc_cmos +* +.subckt psens LC +R1 LC P001 40K +L1 LC P002 14.9u +R2 P002 0 0.55 +L2 P001 0 1.4m +.ends psens +* +xi36 bias lc ra vdd 0 osc_cmos +v39 vdd 0 dc=3.5 pulse ( 0 3.5 10u 10n 10n 1 2 ) +r4 ra 0 3.972K +c23 lc 0 1.8n +i37 vdd bias dc=1u +* +xi18 lc psens +* +.option warn=1 +.control +tran 1u 1m 0 50n +plot v(LC) +.endc +* +.include modelcard.nmos +.include modelcard.pmos +* +.end diff --git a/Windows/spice/examples/various/param_sweep.cir b/Windows/spice/examples/various/param_sweep.cir new file mode 100644 index 00000000..79d5869e --- /dev/null +++ b/Windows/spice/examples/various/param_sweep.cir @@ -0,0 +1,29 @@ +parameter sweep +* resistive divider, R1 swept from start_r to stop_r +* replaces .STEP R1 1k 10k 1k +* chapter 16.13.4.2 + +R1 1 2 1k +R2 2 0 1k + +VDD 1 0 DC 1 +.dc VDD 0 1 .1 + +.control +let start_r = 1k +let stop_r = 10k +let delta_r = 1k +let r_act = start_r +* loop +while r_act le stop_r + alter r1 r_act + run + write dc-sweep.out v(2) + set appendwrite + let r_act = r_act + delta_r +end +plot dc1.v(2) dc2.v(2) dc3.v(2) dc4.v(2) dc5.v(2) ++ dc6.v(2) dc7.v(2) dc8.v(2) dc9.v(2) dc10.v(2) +.endc + +.end diff --git a/Windows/spice/examples/xspice/analog_models1_transient.sp b/Windows/spice/examples/xspice/analog_models1_transient.sp new file mode 100644 index 00000000..a74bd6ca --- /dev/null +++ b/Windows/spice/examples/xspice/analog_models1_transient.sp @@ -0,0 +1,65 @@ +Code Model Test - Transient: gain, summer, mult, divide, pwl +* +* +*** analysis type *** +.control +tran .1s 10s +plot v(1) v(10) v(20) v(30) v(40) v(50) +.endc +* +*** input sources *** +* +v1 1 0 DC PWL(0 0 10 10) +* +v2 2 0 DC 2 +* +*** gain block *** +a1 1 10 gain1 +.model gain1 gain (in_offset=0.0 gain=2.0 out_offset=0.0) +* +* +*** summer block *** +a2 [1 2] 20 summer1 +.model summer1 summer (in_offset=[0.0 0.0] in_gain=[1.0 1.0] ++ out_gain=1.0 out_offset=0.0) +* +* +*** mult block *** +a3 [1 1] 30 mult1 +.model mult1 mult (in_offset=[0.0 0.0] in_gain=[1.0 1.0] ++ out_gain=0.1 out_offset=0.0) +* +* +*** divider block *** +a4 2 1 40 divide1 +.model divide1 divide (num_offset=0.0 num_gain=1.0 den_offset=0.0 den_gain=1.0 ++ den_lower_limit=0.1 den_domain=1.0e-16 ++ fraction=false out_gain=1.0 out_offset=0.0) +* +* +*** pwl block *** +a5 1 50 pwl1 +.model pwl1 pwl (x_array=[-1.0 0.0 1.0 2.0 3.0 4.0 5.0] ++ y_array=[ 0.0 0.0 1.0 4.0 4.5 5.0 5.0] ++ input_domain=0.01 fraction=TRUE) +* +* +*** resistors to ground *** +r1 1 0 1k +r2 2 0 1k +r3 3 0 1k +* +r10 10 0 1k +r20 20 0 1k +r30 30 0 1k +r40 40 0 1k +r50 50 0 1k +* +* +.end + + + + + + diff --git a/Windows/spice/examples/xspice/delta-sigma/README b/Windows/spice/examples/xspice/delta-sigma/README new file mode 100644 index 00000000..3ce6ce63 --- /dev/null +++ b/Windows/spice/examples/xspice/delta-sigma/README @@ -0,0 +1,25 @@ +A simple delta sigma converter using XSPICE +according to +Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 +Fig. 2.13, p. 31; Fig. 2.27, p.58 + + +delta-sigma-1.cir +converter complete, tested against sine input + +mod1-ct.cir +first order modulator +consists of analog continuous time integrator and +digitally latched comparator + +count-latch-dac.cir +contains subcircuits of +10 bit digital latch +10 bit counter, non-revolving, saturating +simple 10 bit DAC with analog B source + +mod1-ct-test.cir +test of modulator with sine input, shows noise shaping 20dB/decade + +counter-test.cir +simple test with reset diff --git a/Windows/spice/examples/xspice/delta-sigma/count-latch-dac.cir b/Windows/spice/examples/xspice/delta-sigma/count-latch-dac.cir new file mode 100644 index 00000000..7a8c7d90 --- /dev/null +++ b/Windows/spice/examples/xspice/delta-sigma/count-latch-dac.cir @@ -0,0 +1,81 @@ +* counter, latch DAC + +* 10 bit synchronous digital counter +* inhibit at overflow, no revolving +.subckt count10 din dinb dclk drs dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 + +* j k clk set reset out nout +ajk1 din dinb diclk ds1 drs dout1 dnout1 jkflop +ajk2 dout1 dout1 diclk ds2 drs dout2 dnout2 jkflop +ajk3 djk3 djk3 diclk ds3 drs dout3 dnout3 jkflop +ajk4 djk4 djk4 diclk ds4 drs dout4 dnout4 jkflop +ajk5 djk5 djk5 diclk ds1 drs dout5 dnout5 jkflop +ajk6 djk6 djk6 diclk ds2 drs dout6 dnout6 jkflop +ajk7 djk7 djk7 diclk ds3 drs dout7 dnout8 jkflop +ajk8 djk8 djk8 diclk ds4 drs dout8 dnout8 jkflop +ajk9 djk9 djk9 diclk ds3 drs dout9 dnout9 jkflop +ajk10 djk10 djk10 diclk ds4 drs dout10 dnout10 jkflop + +aand1 [dout1 dout2] djk3 and1 +aand2 [dout1 dout2 dout3] djk4 and1 +aand3 [dout1 dout2 dout3 dout4] djk5 and1 +aand4 [dout1 dout2 dout3 dout4 dout5] djk6 and1 +aand5 [dout1 dout2 dout3 dout4 dout5 dout6] djk7 and1 +aand6 [dout1 dout2 dout3 dout4 dout5 dout6 dout7] djk8 and1 +aand7 [dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8] djk9 and1 +aand8 [dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9] djk10 and1 + +* inhibit revolving of counter, just let it saturate +* (footnote p. 57) +aand_all [dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10] dinhibit nand1 +aandclk [dclk dinhibit] diclk and1 + + +.model nand1 d_nand(rise_delay = 1e-9 fall_delay = 1e-9 ++ input_load = 0.5e-12) + +.model and1 d_and(rise_delay = 1e-9 fall_delay = 1e-9 ++ input_load = 0.5e-12) + +.model jkflop d_jkff(clk_delay = 1.0e-9 set_delay = 1e-9 ++ reset_delay = 1e-9 ic = 0 rise_delay = 1.0e-9 ++ fall_delay = 1e-9) + +.ends count 10 + +** 10 bit edge triggered latch +.subckt latch10 din1 din2 din3 din4 din5 din6 din7 din8 din9 din10 ++ dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 dclk + +*data clk set reset out nout +aff1 din1 dclk dzero dzero dout1 dnout1 flop1 +aff2 din2 dclk dzero dzero dout2 dnout2 flop1 +aff3 din3 dclk dzero dzero dout3 dnout3 flop1 +aff4 din4 dclk dzero dzero dout4 dnout4 flop1 +aff5 din5 dclk dzero dzero dout5 dnout5 flop1 +aff6 din6 dclk dzero dzero dout6 dnout6 flop1 +aff7 din7 dclk dzero dzero dout7 dnout7 flop1 +aff8 din8 dclk dzero dzero dout8 dnout8 flop1 +aff9 din9 dclk dzero dzero dout9 dnout9 flop1 +aff10 din10 dclk dzero dzero dout10 dnout10 flop1 + +.model flop1 d_dff(clk_delay = 1e-9 set_delay = 0 ++ reset_delay = 0 ic = 0 rise_delay = 1e-9 ++ fall_delay = 1e-9) + +.ends latch10 + +** emulation of 10 bit DAC +.subckt dac10 din1 din2 din3 din4 din5 din6 din7 din8 din9 din10 aout +.param vref=1 +abridge1 [din1 din2 din3 din4 din5 din6 din7 din8 din9 din10] ++ [ain1 ain2 ain3 ain4 ain5 ain6 ain7 ain8 ain9 ain10] dac1 +BVout aout 0 V = 'vref'*(v(ain10)/2 + v(ain9)/4 + v(ain8)/8 + v(ain7)/16 + v(ain6)/32 + ++ v(ain5)/64 + v(ain4)/128 + v(ain3)/256 + v(ain2)/512 + v(ain1)/1024) + +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-9 ++ t_fall = 1e-9) + +.ends dac10 + diff --git a/Windows/spice/examples/xspice/delta-sigma/counter-test.cir b/Windows/spice/examples/xspice/delta-sigma/counter-test.cir new file mode 100644 index 00000000..8bf2baf6 --- /dev/null +++ b/Windows/spice/examples/xspice/delta-sigma/counter-test.cir @@ -0,0 +1,42 @@ +* 10 bit synchronous digital counter +* inhibit at overflow, no revolving +* according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 +* Fig. 2.27, p. 58 + +* clock generation +* PULSE(V1 V2 TD TR TF PW PER) +vclk aclk 0 dc 0 pulse(0 1 1u 2n 2n 1u 2u) + +* reset generation +* single pulse, actual value stored in latch and read by DAC +vres ars 0 dc 0 pulse(0 1 1.1m 2n 2n 1u 2.2m) + +vone aone 0 dc 1 +vzero azero 0 dc 0 + +* digital one +* digital zero +abridge1 [aone azero] [done dzero] adc_buff +.model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) + +* digital clock +* digital reset +abridge2 [aclk ars] [dclk dreset] adc_buff +.model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) + +XCounter done done dclk dreset dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 count10 +Xlatch dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 ++ dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 dreset ++ latch10 +Xdac dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 adacout dac10 + +.include count-latch-dac.cir + +.control +tran 1u 2.5m +eprint dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 > digi4b.txt +eprint dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 >> digi4b.txt +plot adacout +.endc + +.end diff --git a/Windows/spice/examples/xspice/delta-sigma/delta-sigma-1.cir b/Windows/spice/examples/xspice/delta-sigma/delta-sigma-1.cir new file mode 100644 index 00000000..08322260 --- /dev/null +++ b/Windows/spice/examples/xspice/delta-sigma/delta-sigma-1.cir @@ -0,0 +1,106 @@ +* delta sigma A/D converter 9 bit +* first-order continuous time delta sigma modulator +* sinc filter with counter +* according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 +* Fig. 2.13, p. 31; Fig. 2.27, p.58 + +** sine input signal parameters +.param infreq=500 inampl=0.5 +** clock +.param clkfreq=5Meg +** simulation time +.param simtime = 2m +.csparam simtime = 'simtime' +** sample clock cycles +.param samples=500 + +.global dzero done + +** input signal +* SIN(VO VA FREQ TD THETA) +vin inp inm dc 0 sin(0 'inampl' 'infreq' 0 0) +* steps from -0.5 to 0.4 +*vin inp inm dc 0 pwl(0 -0.5 0.2m -0.5 0.201m -0.4 0.4m -0.4 0.401m -0.3 0.6m -0.3 +*+ 0.601m -0.2 0.8m -0.2 0.801m -0.1 1.0m -0.1 1.001m 0.0 1.2m 0.0 1.201m 0.1 1.4m 0.1 +*+ 1.401m 0.2 1.6m 0.2 1.601m 0.3 1.8m 0.3 1.801m 0.4 2m 0.4) + +** clock and constant logic levels +* 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) + +****** delta-sigma converter**************************************************************** +* modulator +* inp inm: analog in + - +* dclk digital clock in +* dv, dvb: modulator non-inverting/inverting out +Xmod inp inm dclk dv dvb mod1 +* sinc filter, decimator +* dlout1 ..dlout10: converter 10 bit digital out +xsinc dv dvb dclk dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 sinc1 +******************************************************************************************** + +** DACs for measuring and plotting +* converter output +Xdac_latch dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 adaclout dac10 +* counter inside of sinc filter +Xdac_counter xsinc.dout1 xsinc.dout2 xsinc.dout3 xsinc.dout4 xsinc.dout5 ++ xsinc.dout6 xsinc.dout7 xsinc.dout8 xsinc.dout9 xsinc.dout10 adaccout dac10 + +* load modulator mod1 subcircuit +.include mod1-ct.cir + +* load counter, d-latch and 10 bit DAC +.include count-latch-dac.cir + +** sinc filter 1st order subcircuit +.subckt sinc1 din dinb dclk dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 +XCounter din dinb dclk ddivndel2 dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 count10 +Xlatch dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 ++ dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 ddivndel1 ++ latch10 + +* digital divider dclk/samples +adivn dclk ddivn divider +.model divider d_fdiv(div_factor = 'samples' high_cycles = 1 ++ i_count = 0 rise_delay = 1e-9 fall_delay = 1e-9) + +* clock delays +adelay ddivn ddivndel1 buff1 ; set latch +adelay2 ddivndel1 ddivndel2 buff1 ; reset counter +.model buff1 d_buffer(rise_delay = '1/clkfreq/8' fall_delay = '1/clkfreq/8' ++ input_load = 0.5e-12) + +.ends sinc1 + +** for plotting +abridge22 [dclk xsinc.ddivndel1 xsinc.ddivndel2 dv] [acclk acset acres acin] dac1 +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-9 ++ t_fall = 1e-9) + + +.control +save inp inm adaclout adaccout ; save memory space +tran 0.1u $&simtime +* analog out, scaled 'manually'; sinc filter counter; analog differential in +plot 4.1*(adaclout-0.486) adaccout v(inp)-v(inm) ylimit -0.6 0.6 +* modulator dig out +* eprint dv > digi1.txt +* +*eprint dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 +*+ xsinc.dout1 xsinc.dout2 xsinc.dout3 xsinc.dout4 xsinc.dout5 +*+ xsinc.dout6 xsinc.dout7 xsinc.dout8 xsinc.dout9 xsinc.dout10 > digi4b.txt +.endc + +.end diff --git a/Windows/spice/examples/xspice/delta-sigma/delta-sigma-oc.cir b/Windows/spice/examples/xspice/delta-sigma/delta-sigma-oc.cir new file mode 100644 index 00000000..a0418197 --- /dev/null +++ b/Windows/spice/examples/xspice/delta-sigma/delta-sigma-oc.cir @@ -0,0 +1,95 @@ +* delta sigma A/D converter 9 bit +* first-order continuous time delta sigma modulator +* sinc filter with counter +* according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 +* Fig. 2.13, p. 31; Fig. 2.27, p.58 + +** sine input signal parameters +.param infreq=500 inampl=0.5 +** clock +.param clkfreq=5Meg +** simulation time +.param simtime = 2m +.csparam simtime = 'simtime' +** sample clock cycles +.param samples=500 + +.global dzero done + +** input signal +* SIN(VO VA FREQ TD THETA) +vin inp inm dc 0 sin(0 'inampl' 'infreq' 0 0) +* steps from -0.5 to 0.4 +*vin inp inm dc 0 pwl(0 -0.5 0.2m -0.5 0.201m -0.4 0.4m -0.4 0.401m -0.3 0.6m -0.3 +*+ 0.601m -0.2 0.8m -0.2 0.801m -0.1 1.0m -0.1 1.001m 0.0 1.2m 0.0 1.201m 0.1 1.4m 0.1 +*+ 1.401m 0.2 1.6m 0.2 1.601m 0.3 1.8m 0.3 1.801m 0.4 2m 0.4) + +** clock and constant logic levels +* 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) + +****** delta-sigma converter**************************************************************** +* modulator +* inp inm: analog in + - +* dclk digital clock in +* dv, dvb: modulator non-inverting/inverting out +Xmod inp inm dclk dv dvb mod1 +* sinc filter, decimator +* dlout1 ..dlout10: converter 10 bit digital out +xsinc dv dvb dclk dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 sinc1 +******************************************************************************************** + +** DACs for measuring and plotting +* converter output +Xdac_latch dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 adaclout dac10 +* counter inside of sinc filter +Xdac_counter xsinc.dout1 xsinc.dout2 xsinc.dout3 xsinc.dout4 xsinc.dout5 ++ xsinc.dout6 xsinc.dout7 xsinc.dout8 xsinc.dout9 xsinc.dout10 adaccout dac10 + +* load modulator mod1 subcircuit +.include mod1-ct.cir + +* load counter, d-latch and 10 bit DAC +.include count-latch-dac.cir + +** sinc filter 1st order subcircuit +.subckt sinc1 din dinb dclk dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 +XCounter din dinb dclk ddivndel2 dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 count10 +Xlatch dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 ++ dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 ddivndel1 ++ latch10 + +* digital divider dclk/samples +adivn dclk ddivn divider +.model divider d_fdiv(div_factor = 'samples' high_cycles = 1 ++ i_count = 0 rise_delay = 1e-9 fall_delay = 1e-9) + +* clock delays +adelay ddivn ddivndel1 buff1 ; set latch +adelay2 ddivndel1 ddivndel2 buff1 ; reset counter +.model buff1 d_buffer(rise_delay = '1/clkfreq/8' fall_delay = '1/clkfreq/8' ++ input_load = 0.5e-12) + +.ends sinc1 + +** for plotting +abridge22 [dclk xsinc.ddivndel1 xsinc.ddivndel2 dv] [acclk acset acres acin] dac1 +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-9 ++ t_fall = 1e-9) + +.save inp inm adaclout adaccout ; save memory space +.tran 0.1u 2m + +.end diff --git a/Windows/spice/examples/xspice/delta-sigma/mod1-ct-test.cir b/Windows/spice/examples/xspice/delta-sigma/mod1-ct-test.cir new file mode 100644 index 00000000..7ce7b0d3 --- /dev/null +++ b/Windows/spice/examples/xspice/delta-sigma/mod1-ct-test.cir @@ -0,0 +1,52 @@ +* 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 = 5m +.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+) - v(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 +.endc + +.end diff --git a/Windows/spice/examples/xspice/delta-sigma/mod1-ct.cir b/Windows/spice/examples/xspice/delta-sigma/mod1-ct.cir new file mode 100644 index 00000000..bf3129b7 --- /dev/null +++ b/Windows/spice/examples/xspice/delta-sigma/mod1-ct.cir @@ -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 diff --git a/Windows/spice/examples/xspice/fstest.sp b/Windows/spice/examples/xspice/fstest.sp new file mode 100644 index 00000000..f0f552a8 --- /dev/null +++ b/Windows/spice/examples/xspice/fstest.sp @@ -0,0 +1,26 @@ +* filesource Test + +* two differential ports 1 0 and 3 0 are used, so your input file +* has to have three columns (time, port_value 1, portvalue 2) + +AFILESRC %vd([1 0 3 0]) filesrc +.model filesrc filesource (file="sine.m" amploffset=[0 0] amplscale=[1 1] timerelative=false amplstep=false) + +V2 2 0 0.0 SIN(0 1 1MEG 0 0 0.0) +V4 4 0 0.0 SIN(0 1 1MEG 0 0 90.0) + +.tran 1n 1.0u + +.control +run +*listing param +wrdata vspice V(1) V(2) V(3) V(4) + + +plot V(1) V(2) V(3) V(4) + +* error between interpolation and sine source +* should be less than 1mV up to 1us +plot V(1,2) V(3,4) +.endc +.end diff --git a/Windows/spice/examples/xspice/pll/README b/Windows/spice/examples/xspice/pll/README new file mode 100644 index 00000000..f5c38b39 --- /dev/null +++ b/Windows/spice/examples/xspice/pll/README @@ -0,0 +1,39 @@ +This directory contains a mixed mode pll, combining +ngspice and XSPICE circuit blocks. +The pll consists of the following blocks: + +** voltage controlled oscillator: +vco_sub.cir + 7 stage ring oscillator with gain cells, CMOS devices +or +vco_sub_new.cir + vco made from code model d_osc, cntl_array/freq_array data + are gained by running test-vco.cir with vco_sub.cir + +** digital divider and frequency reference: +pll-xspice.cir + +** phase frequency detector: +f-p-det-d-sub.cir + +** loop filter: +loop-filter.cir + switched current sources as charge pump, 2nd order + passive RC filter +or +loop-filter-2.cir + transistors as switches for charge pump, 2nd or 3rd + order passive RC filters + +** main simulation control: +pll-xspice.cir + +Two test files are included: +test-vco.cir simulates vco frequency versus control voltage +test-f-p-det.cir simulates the phase frequency detector and the loop filter. + +The main building blocks are organised as subcircuits. + +main simulation control with three reference frequencies: +pll-xspice-fstep.cir + simulates two steps of the reference in one simulation run diff --git a/Windows/spice/examples/xspice/pll/f-p-det-d-sub.cir b/Windows/spice/examples/xspice/pll/f-p-det-d-sub.cir new file mode 100644 index 00000000..cdd5af9e --- /dev/null +++ b/Windows/spice/examples/xspice/pll/f-p-det-d-sub.cir @@ -0,0 +1,16 @@ +* frequency-phase detector according to +* http://www.uwe-kerwien.de/pll/pll-phasenvergleich.htm + +.subckt f-p-det d_R d_V d_U d_U_ d_D d_D_ + +aa1 [d_U d_D] d_rset and1 +.model and1 d_and(rise_delay = 1e-10 fall_delay = 0.1e-9 ++ input_load = 0.5e-12) + +ad1 d_d1 d_R d_d0 d_rset d_U d_U_ flop1 +ad2 d_d1 d_V d_d0 d_rset d_D d_D_ flop1 +.model flop1 d_dff(clk_delay = 1.0e-10 set_delay = 1.0e-10 ++ reset_delay = 1.0e-10 ic = 2 rise_delay = 1.0e-10 ++ fall_delay = 1e-10) + +.ends f-p-det diff --git a/Windows/spice/examples/xspice/pll/loop-filter-2.cir b/Windows/spice/examples/xspice/pll/loop-filter-2.cir new file mode 100644 index 00000000..3d093167 --- /dev/null +++ b/Windows/spice/examples/xspice/pll/loop-filter-2.cir @@ -0,0 +1,50 @@ +* loop filter for pll +* in: d_up d_down digital data +* out: vout, vco control voltage +* using transistors to switch current +* according to http://www.uwe-kerwien.de/pll/pll-schleifenfilter.htm +* digital input d_Un d_D +* anlog output vout + + +.subckt loopf d_Un d_D vout + +.param initcond=2.5 + +vdd dd 0 dc 'vcc' +vss ss 0 dc 0 + +* "driver" circuit, digital in, analog out +abridge-f1 [d_Un d_D] [u1n d1] dac1 +.model dac1 dac_bridge(out_low = 0 out_high = 'vcc' out_undef = 'vcc/2' ++ input_load = 5.0e-12 t_rise = 1e-10 ++ t_fall = 1e-10) + +* uses BSIM3 model parameters from pll-xspice_2.cir +* transistors as switches +mnd dra d1 ss ss n1 w=12u l=0.35u AS=24p AD=24p PS=28u PD=28u +mpd dra u1n dd dd p1 w=24u l=0.35u AS=48p AD=48p PS=52u PD=52u + +*** passive filter elements *** +*third order filter +*parameters absolutely _not_ optimised +*better check +* http://www.national.com/assets/en/boards/deansbook4.pdf +*to do so +.ic v(vout)='initcond' v(c1)='initcond' v(dra)='initcond' v(int1)='initcond' v(u1n)='vcc' v(d1)=0 +R1 dra int1 300 +R2 int1 c1 200 +C1 c1 0 10n +C2 int1 0 5n +R3 int1 vout 50 +C3 vout 0 0.5n + +*second order filter +*parameters not optimized +*.ic v(vout)='initcond' v(c1)='initcond' v(dra)='initcond' v(u1n)='vcc' v(d1)=0 +*R1 dra vout 300 +*R2 vout c1 200 +*C1 c1 0 10n +*C2 vout 0 5n + +.ends loopf diff --git a/Windows/spice/examples/xspice/pll/loop-filter.cir b/Windows/spice/examples/xspice/pll/loop-filter.cir new file mode 100644 index 00000000..a83ebb7a --- /dev/null +++ b/Windows/spice/examples/xspice/pll/loop-filter.cir @@ -0,0 +1,31 @@ +* loop filter for pll +* in: d_up d_down digital data +* out: vout, vco control voltage +* according to http://www.uwe-kerwien.de/pll/pll-schleifenfilter.htm + +.subckt loopfe d_U d_D vout + +.param loadcur=5m +.param initcond=2.5 + +v1 vtop 0 1 +v2 vbot 0 -1 + +abridge-f1 [d_U d_D] [u1 d1] dac1 +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-10 ++ t_fall = 1e-10) + +*top switched current source +Gtop vtop vout cur='loadcur*v(u1)' +*bottom switched current source +Gbot vout vbot cur='loadcur*v(d1)' + +*passive filter elements +.ic v(vout)='initcond' v(c1)='initcond' +R2 vout c1 200 +C1 c1 0 5n +C2 vout 0 5n +Rshunt vout 0 10000k + +.ends diff --git a/Windows/spice/examples/xspice/pll/pll-xspice-fstep.cir b/Windows/spice/examples/xspice/pll/pll-xspice-fstep.cir new file mode 100644 index 00000000..5c79e152 --- /dev/null +++ b/Windows/spice/examples/xspice/pll/pll-xspice-fstep.cir @@ -0,0 +1,165 @@ +* pll circuit using xspice code models +* three frequencies generate steps in control voltage v(cont) + +.param vcc=3.3 +.param divisor=40 +.param fref=10e6 +.param fref2=9e6 +.param fref3=11e6 +.csparam simtime=45u +.csparam f2='fref2' +.csparam f3='fref3' + +* digital zero and one +.global d_d0 d_d1 + +vdd dd 0 dc 'vcc' + +* 10 MHz reference frequency +* PULSE(V1 V2 TD TR TF PW PER) +vref ref 0 dc 0 pulse(0 'vcc' 10n 1n 1n '1/fref/2' '1/fref') +abridgeref [ref] [d_ref] adc_vbuf +.model adc_vbuf adc_bridge(in_low = 0.5 in_high = 0.5) + +*digital zero +vzero z 0 dc 0 +abridgev3 [z] [d_d0] adc_vbuf +.model adc_vbuf adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') +*digital one +ainv1 d_d0 d_d1 invd1 +.model invd1 d_inverter(rise_delay = 1e-10 fall_delay = 1e-10) + +* vco +* buf: analog out +* d_digout: digital out +* cont: analog control voltage +* dd: analog supply voltage +*.include vco_sub.cir +*xvco buf d_digout cont dd ro_vco +.include vco_sub_new.cir +xvco buf d_digout cont dd d_osc_vco + +* digital divider +adiv1 d_digout d_divout divider +.model divider d_fdiv(div_factor = 'divisor' high_cycles = 'divisor/2' ++ i_count = 4 rise_delay = 1e-10 ++ fall_delay = 1e-10) + +* frequency phase detector +.include f-p-det-d-sub.cir +Xfpdet d_divout d_ref d_U d_Un d_D d_Dn f-p-det + +* loop filter +*2nd or 3rd order, transistors as switches +.include loop-filter-2.cir +Xlf d_Un d_D cont loopf +* 2nd order, Exxxx voltage controlled current sources as 'switches' +* loop filter current sources as charge pump +*.include loop-filter.cir +*Xlf d_U d_D cont loopfe + +* d to a for plotting +abridge-w1 [d_divout d_ref d_Un d_D] [s1 s2 u1 d1] dac1 ; change to d_u or d_Un +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-10 ++ t_fall = 1e-10) + +.control +save cont s1 s2 u1 d1 +iplot cont +* calculate breakpoint for switching frequency +let t1_3 = simtime/3 +set ti1_3 ="$&t1_3" +let t2_3 = simtime/3*2 +set ti2_3 ="$&t2_3" +stop when time=$ti1_3 +stop when time=$ti2_3 +* calculate new periods for f2 +let per2=1/f2 +let pw2 = per2/2 +let per3=1/f3 +let pw3 = per3/2 +*simulate +tran 0.1n $&simtime uic +*change frequency after stopping +* first pair of [] without spaces, second pair with spaces +alter @vref[pulse] = [ 0 3.3 10n 1n 1n $&pw2 $&per2 ] +resume +*another change after second stop +alter @vref[pulse] = [ 0 3.3 10n 1n 1n $&pw3 $&per3 ] +resume +rusage +plot cont s1 s2+1.2 u1+2.4 d1+3.6 xlimit 15u 16u +*plot cont +.endc + +*model = bsim3v3 +*Berkeley Spice Compatibility +* Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 +.model N1 NMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + +.model P1 PMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + + +.end diff --git a/Windows/spice/examples/xspice/pll/pll-xspice.cir b/Windows/spice/examples/xspice/pll/pll-xspice.cir new file mode 100644 index 00000000..1d14368d --- /dev/null +++ b/Windows/spice/examples/xspice/pll/pll-xspice.cir @@ -0,0 +1,144 @@ +* pll circuit using xspice code models +* output frequency 400 MHz +* locked to a 1 or 10 MHz reference + +.param vcc=3.3 +.param divisor=40 +.param fref=10e6 +.csparam simtime=25u + +.global d_d0 d_d1 + +vdd dd 0 dc 'vcc' +*vco cont 0 dc 1.9 + +*PULSE(V1 V2 TD TR TF PW PER) +* reference frequency selected by param fref +* PULSE(V1 V2 TD TR TF PW PER) +vref ref 0 dc 0 pulse(0 'vcc' 10n 1n 1n '1/fref/2' '1/fref') +abridgeref [ref] [d_ref] adc_vbuf +.model adc_vbuf adc_bridge(in_low = 0.5 in_high = 0.5) + +*digital zero +vzero z 0 dc 0 +abridgev3 [z] [d_d0] adc_vbuf +.model adc_vbuf adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') +*digital one +ainv1 d_d0 d_d1 invd1 +.model invd1 d_inverter(rise_delay = 1e-10 fall_delay = 1e-10) + +* vco +* buf: analog out +* d_digout: digital out +* cont: analog control voltage +* dd: analog supply voltage +*.include vco_sub.cir +*xvco buf d_digout cont dd ro_vco +.include vco_sub_new.cir +xvco buf d_digout cont dd d_osc_vco + +* digital divider +adiv1 d_digout d_divout divider +.model divider d_fdiv(div_factor = 'divisor' high_cycles = 'divisor/2' ++ i_count = 4 rise_delay = 1e-10 ++ fall_delay = 1e-10) + +* frequency phase detector +.include f-p-det-d-sub.cir +Xfpdet d_divout d_ref d_U d_Un d_D d_Dn f-p-det + +* loop filters +*2nd or 3rd order, transistors as switches +.include loop-filter-2.cir +Xlf d_Un d_D cont loopf +* 2nd order, Exxxx voltage controlled current sources as 'switches' +* loop filter current sources as charge pump +*.include loop-filter.cir +*Xlf d_U d_D cont loopfe + +* d to a for plotting +abridge-w1 [d_divout d_ref d_Un d_D] [s1 s2 u1n d1] dac1 ; change to d_u or d_Un +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-10 ++ t_fall = 1e-10) + +.control +save cont s1 s2 u1n d1 v.xlf.vdd#branch; to save memory +iplot cont +tran 0.1n $&simtime uic +rusage +plot cont s1 s2+1.2 u1n+2.4 d1+3.6 xlimit 4u 5u +plot v.xlf.vdd#branch xlimit 4u 5u ylimit -8m 2m +*plot cont +.endc + +*model = bsim3v3 +*Berkeley Spice Compatibility +* Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 +.model N1 NMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + +.model P1 PMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + + +.end diff --git a/Windows/spice/examples/xspice/pll/pll-xspice_oc.cir b/Windows/spice/examples/xspice/pll/pll-xspice_oc.cir new file mode 100644 index 00000000..f2d235c3 --- /dev/null +++ b/Windows/spice/examples/xspice/pll/pll-xspice_oc.cir @@ -0,0 +1,142 @@ +* pll circuit using xspice code models +* output frequency 400 MHz +* locked to a 1 or 10 MHz reference + +.param vcc=3.3 +.param divisor=40 +.param fref=10e6 +.csparam simtime=25u + +.control +pre_unset ngdebug +set noinit +.endc + +.global d_d0 d_d1 + +vdd dd 0 dc 'vcc' +*vco cont 0 dc 1.9 + +*PULSE(V1 V2 TD TR TF PW PER) +* reference frequency selected by param fref +* PULSE(V1 V2 TD TR TF PW PER) +vref ref 0 dc 0 pulse(0 'vcc' 10n 1n 1n '1/fref/2' '1/fref') +abridgeref [ref] [d_ref] adc_vbuf +.model adc_vbuf adc_bridge(in_low = 0.5 in_high = 0.5) + +*digital zero +vzero z 0 dc 0 +abridgev3 [z] [d_d0] adc_vbuf +.model adc_vbuf adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') +*digital one +ainv1 d_d0 d_d1 invd1 +.model invd1 d_inverter(rise_delay = 1e-10 fall_delay = 1e-10) + +* vco +* buf: analog out +* d_digout: digital out +* cont: analog control voltage +* dd: analog supply voltage +*.include vco_sub.cir +*xvco buf d_digout cont dd ro_vco +.include vco_sub_new.cir +xvco buf d_digout cont dd d_osc_vco + +* digital divider +adiv1 d_digout d_divout divider +.model divider d_fdiv(div_factor = 'divisor' high_cycles = 'divisor/2' ++ i_count = 4 rise_delay = 1e-10 ++ fall_delay = 1e-10) + +* frequency phase detector +.include f-p-det-d-sub.cir +Xfpdet d_divout d_ref d_U d_Un d_D d_Dn f-p-det + +* loop filters +*2nd or 3rd order, transistors as switches +.include loop-filter-2.cir +Xlf d_Un d_D cont loopf +* 2nd order, Exxxx voltage controlled current sources as 'switches' +* loop filter current sources as charge pump +*.include loop-filter.cir +*Xlf d_U d_D cont loopfe + +* d to a for plotting +abridge-w1 [d_divout d_ref d_Un d_D] [s1 s2 u1n d1] dac1 ; change to d_u or d_Un +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-10 ++ t_fall = 1e-10) + +.save cont s1 s2 u1n d1 v.xlf.vdd#branch; to save memory +.tran 0.1n 10u uic + +*model = bsim3v3 +*Berkeley Spice Compatibility +* Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 +.model N1 NMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + +.model P1 PMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + + +.end diff --git a/Windows/spice/examples/xspice/pll/test-f-p-det.cir b/Windows/spice/examples/xspice/pll/test-f-p-det.cir new file mode 100644 index 00000000..16060b9b --- /dev/null +++ b/Windows/spice/examples/xspice/pll/test-f-p-det.cir @@ -0,0 +1,114 @@ +* test frequency-phase detector similar to 12040 + +.param vcc=3.3 +.global d_d0 d_d1 + +*PULSE(V1 V2 TD TR TF PW PER) +v1 1 0 dc 0 pulse(0 'vcc' 10n 1n 1n 10n 20n) +v2 2 0 dc 0 pulse(0 'vcc' 8n 1n 1n 10n 20n) + +*digital zero +v3 3 0 dc 0 +abridgev1 [1 2 3] [d_sig1 d_sig2 d_d0] adc_vbuf +.model adc_vbuf adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') +*digital one +ainv1 d_d0 d_d1 invd1 +.model invd1 d_inverter(rise_delay = 1e-10 fall_delay = 1e-10) + +Xfpdet d_sig1 d_sig2 d_U d_Un d_D d_Dn f-p-det + +*.include f-p-det-sub.cir +.include f-p-det-d-sub.cir + +* d to a for plotting +abridge-w1 [d_sig1 d_sig2 d_U d_D] [s1 s2 u1 d1] dac1 +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-10 ++ t_fall = 1e-10) + +* loop filters +*2nd or 3rd order, transistors as switches +.include loop-filter-2.cir +Xlf d_Un d_D cont loopf +* 2nd order, Exxxx voltage controlled current sources as 'switches' +* loop filter current sources as charge pump +*.include loop-filter.cir +*Xlf d_U d_D cont loopfe + +.control +set xtrtol=2 +tran 0.1n 1000n +plot s1 s2+1.2 u1+2.4 d1+3.6 xlimit 140n 200n +.endc + + +*model = bsim3v3 +*Berkeley Spice Compatibility +* Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 +.model N1 NMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + +.model P1 PMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + + +.end diff --git a/Windows/spice/examples/xspice/pll/test_vco.cir b/Windows/spice/examples/xspice/pll/test_vco.cir new file mode 100644 index 00000000..522eac00 --- /dev/null +++ b/Windows/spice/examples/xspice/pll/test_vco.cir @@ -0,0 +1,158 @@ +* Test of VCO: frequency versus control voltage +* 7 stage Ring-Osc. made of gain cells BSIM3 +* P.-H. Hsieh, J. Maxey, C.-K. K. Yang, IEEE JSSC, Sept. 2009, pp. 2488 - 2495 +* alternatively use d_osc code model +* measure frequency of R.O. by fft + +.param vcc=3.3 +.csparam simtime=500n + +vdd dd 0 dc 'vcc' +vco cont 0 dc 2.5 + +* vco +* buf: analog out +* d_digout: digital out +* cont: analog control voltage +* dd: analog supply voltage +*.include vco_sub.cir +*xvco buf d_digout cont dd ro_vco +.include vco_sub_new.cir +xvco buf d_digout cont dd d_osc_vco + +.option noacct + +.control +set xtrtol=2 +set dt = $curplot +set curplot = new +set curplottitle = "Frequency versus voltage" +set freq_volt = $curplot $ store its name to 'freq_volt' +setplot $freq_volt +let vcovec=vector(5) +let foscvec=vector(5) +setplot $dt +alter vco 0.5 +tran 0.1n $&simtime 0 +let {$freq_volt}.vcovec[0]=v(cont) +linearize buf +fft buf +* start meas at freq > 0 to skip large dc part +meas sp fosc MAX_AT buf from=1e3 to=1e9 +let {$freq_volt}.foscvec[0]=fosc +plot d_digout xlimit 140n 160n +reset +alter vco 1 +tran 0.1n $&simtime 0 +let {$freq_volt}.vcovec[1]=v(cont) +linearize buf +fft buf +meas sp fosc MAX_AT buf from=1e3 to=1e9 +let {$freq_volt}.foscvec[1]=fosc +plot d_digout xlimit 140n 160n +reset +alter vco 1.5 +tran 0.1n $&simtime 0 +let {$freq_volt}.vcovec[2]=v(cont) +linearize buf +fft buf +meas sp fosc MAX_AT buf from=1e3 to=1e9 +let {$freq_volt}.foscvec[2]=fosc +plot d_digout xlimit 140n 160n +reset +alter vco 2 +tran 0.1n $&simtime 0 +let {$freq_volt}.vcovec[3]=v(cont) +linearize buf +fft buf +meas sp fosc MAX_AT buf from=1e3 to=1e9 +let {$freq_volt}.foscvec[3]=fosc +plot d_digout xlimit 140n 160n +reset +alter vco 2.5 +tran 0.1n $&simtime 0 +let {$freq_volt}.vcovec[4]=v(cont) +linearize buf +fft buf +meas sp fosc MAX_AT buf from=1e3 to=1e9 +let {$freq_volt}.foscvec[4]=fosc +plot d_digout xlimit 140n 160n +plot tran1.buf tran3.buf tran5.buf tran7.buf tran9.buf xlimit 140n 160n +plot mag(sp2.buf) mag(sp4.buf) mag(sp6.buf) mag(sp8.buf) mag(sp10.buf) xlimit 100e6 1100e6 +setplot $freq_volt +settype frequency foscvec +settype voltage vcovec +plot foscvec vs vcovec +print vcovec foscvec +rusage +.endc + +*model = bsim3v3 +*Berkeley Spice Compatibility +* Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 +.model N1 NMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + +.model P1 PMOS +*+version = 3.2.4 ++version = 3.3.0 ++Level= 8 ++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 + +.end diff --git a/Windows/spice/examples/xspice/pll/vco_sub.cir b/Windows/spice/examples/xspice/pll/vco_sub.cir new file mode 100644 index 00000000..77f87360 --- /dev/null +++ b/Windows/spice/examples/xspice/pll/vco_sub.cir @@ -0,0 +1,67 @@ +* VCO: 7 stage Ring-Osc. made of gain cells BSIM3 +* P.-H. Hsieh, J. Maxey, C.-K. K. Yang, IEEE JSSC, Sept. 2009, pp. 2488 - 2495 +* 150 MHz to 900 MHz with control voltage 2.5 to 0.5 V at 3.3 V supply +* BSIM 3 model data for transistors in main file pll-xspice.cir + +***** ring oscillator as voltage controlled oscillator *************** +* name: ro_vco +* aout analog out +* dout digital out +* cont control voltage +* dd supply voltage + +.subckt ro_vco aout dout cont dd +* ignition circuit (not needed) +* feedback between in and out, pulse to help start oscillation +vin inm1 outp7 dc 0 +*vin inm1 outp7 dc 2.5 pulse 2.5 0 0.1n 5n 1 1 1 + +*vin2 inp1 outp7 dc -0.5 pulse -0.5 0 0.1n 5n 1 1 1 +vin2 inp1 outm7 dc 0 + + +vss ss 0 dc 0 +ve sub 0 dc 0 +vpe well 0 dc 3.3 + + +* gain cell +.subckt gaincell dd ss sub well co in- in+ out- out+ +mn1 out- in+ ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u +mn2 out- out+ ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u +mn3 out+ out- ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u +mn4 out+ in- ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u +mp1 out- co dd well p1 w=4u l=0.35u AS=7p AD=7p PS=6u PD=6u +mp2 out+ co dd well p1 w=4u l=0.35u AS=7p AD=7p PS=6u PD=6u +.ends gaincell + +* inverter +.subckt inv2 dd ss sub well in out +mn1 out in ss sub n1 w=6u l=0.35u AS=12p AD=12p PS=16u PD=16u +mp1 out in dd well p1 w=12u l=0.35u AS=24p AD=24p PS=28u PD=28u +.ends inv2 + +* inverter +.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 + +* chain of 25 inverters + output buffer +xinv1 dd ss sub well cont inm1 inp1 outm1 outp1 gaincell +xinv2 dd ss sub well cont outp1 outm1 outm2 outp2 gaincell +xinv3 dd ss sub well cont outp2 outm2 outm3 outp3 gaincell +xinv4 dd ss sub well cont outp3 outm3 outm4 outp4 gaincell +xinv5 dd ss sub well cont outp4 outm4 outm5 outp5 gaincell +xinv6 dd ss sub well cont outp5 outm5 outm6 outp6 gaincell +xinv7 dd ss sub well cont outp6 outm6 outm7 outp7 gaincell +* analog out (two stage buffer) +xinv11 dd 0 sub well outm1 outm2 inv1 +xinv12 dd 0 sub well outm2 aout inv2 +cout aout 0 0.2pF +*digital out +abridge1 [aout] [dout] adc_buff +.model adc_buff adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') +.ends ro_vco +****************************************************************** + diff --git a/Windows/spice/examples/xspice/pll/vco_sub_new.cir b/Windows/spice/examples/xspice/pll/vco_sub_new.cir new file mode 100644 index 00000000..229ccf84 --- /dev/null +++ b/Windows/spice/examples/xspice/pll/vco_sub_new.cir @@ -0,0 +1,30 @@ +***** XSPICE digital controlled oscillator d_osc as vco *************** +* 150 MHz to 900 MHz +* name: d_osc_vco +* aout analog out +* dout digital out +* cont control voltage +* dd supply voltage + +.subckt d_osc_vco aout dout cont dd +* curve fitting to ro_vco 'measured' data +Bfit fitted 0 v = (-58256685.71*v(cont)*v(cont) - 186386142.9*v(cont) + 988722980)/10. + +*a5 fitted dout var_clock +*.model var_clock d_osc(cntl_array = [1.0e7 5.0e7 9.0e7] +*+ freq_array = [1.0e8 5.0e8 9.0e8] + +* linear interpolation, input data from measured ro vco +a5 cont dout var_clock +.model var_clock d_osc(cntl_array = [0.5 1 1.5 2 2.5] ++ freq_array = [8.790820e+008 7.472197e+008 5.799500e+008 3.772727e+008 1.611650e+008] ++ duty_cycle = 0.5 init_phase = 180.0 ++ rise_delay = 1e-10 fall_delay=1e-10) + +*generate an analog output for plotting +abridge-fit [dout] [aout] dac1 +.model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 ++ input_load = 5.0e-12 t_rise = 1e-10 ++ t_fall = 1e-10) + +.ends d_osc_vco diff --git a/Windows/spice/examples/xspice/sine.m b/Windows/spice/examples/xspice/sine.m new file mode 100644 index 00000000..c01fbe9a --- /dev/null +++ b/Windows/spice/examples/xspice/sine.m @@ -0,0 +1,264 @@ +# Created by Octave 3.4.0, Mon Jun 06 10:16:19 2011 CEST +# name: x +# type: matrix +# rows: 257 +# columns: 3 + 0 0 1 + 3.90625e-09 0.02454122852291229 0.9996988186962042 + 7.8125e-09 0.04906767432741801 0.9987954562051724 + 1.171875e-08 0.07356456359966743 0.9972904566786902 + 1.5625e-08 0.0980171403295606 0.9951847266721969 + 1.953125e-08 0.1224106751992162 0.99247953459871 + 2.34375e-08 0.1467304744553617 0.989176509964781 + 2.734375e-08 0.1709618887603012 0.9852776423889412 + 3.125e-08 0.1950903220161282 0.9807852804032304 + 3.515625e-08 0.2191012401568698 0.9757021300385286 + 3.90625e-08 0.2429801799032639 0.970031253194544 + 4.296875e-08 0.2667127574748984 0.9637760657954398 + 4.6875e-08 0.2902846772544623 0.9569403357322088 + 5.078125e-08 0.3136817403988915 0.9495281805930367 + 5.46875e-08 0.3368898533922201 0.9415440651830208 + 5.859374999999999e-08 0.3598950365349881 0.932992798834739 + 6.25e-08 0.3826834323650898 0.9238795325112867 + 6.640625e-08 0.4052413140049899 0.9142097557035307 + 7.03125e-08 0.4275550934302821 0.9039892931234433 + 7.421874999999999e-08 0.4496113296546065 0.8932243011955153 + 7.812499999999999e-08 0.4713967368259976 0.881921264348355 + 8.203125e-08 0.492898192229784 0.8700869911087115 + 8.59375e-08 0.5141027441932217 0.8577286100002721 + 8.984375e-08 0.5349976198870972 0.8448535652497071 + 9.375e-08 0.5555702330196022 0.8314696123025452 + 9.765624999999999e-08 0.5758081914178453 0.8175848131515837 + 1.015625e-07 0.5956993044924334 0.8032075314806449 + 1.0546875e-07 0.6152315905806268 0.7883464276266063 + 1.09375e-07 0.6343932841636455 0.773010453362737 + 1.1328125e-07 0.6531728429537768 0.7572088465064846 + 1.171875e-07 0.6715589548470183 0.7409511253549591 + 1.2109375e-07 0.6895405447370668 0.724247082951467 + 1.25e-07 0.7071067811865475 0.7071067811865476 + 1.2890625e-07 0.7242470829514669 0.6895405447370669 + 1.328125e-07 0.7409511253549591 0.6715589548470183 + 1.3671875e-07 0.7572088465064845 0.6531728429537768 + 1.40625e-07 0.773010453362737 0.6343932841636455 + 1.4453125e-07 0.7883464276266062 0.6152315905806268 + 1.484375e-07 0.8032075314806448 0.5956993044924335 + 1.5234375e-07 0.8175848131515837 0.5758081914178453 + 1.5625e-07 0.8314696123025452 0.5555702330196023 + 1.6015625e-07 0.844853565249707 0.5349976198870973 + 1.640625e-07 0.8577286100002721 0.5141027441932217 + 1.6796875e-07 0.8700869911087113 0.4928981922297841 + 1.71875e-07 0.8819212643483549 0.4713967368259978 + 1.7578125e-07 0.8932243011955153 0.4496113296546066 + 1.796875e-07 0.9039892931234433 0.4275550934302822 + 1.8359375e-07 0.9142097557035307 0.4052413140049899 + 1.875e-07 0.9238795325112867 0.3826834323650898 + 1.9140625e-07 0.9329927988347388 0.3598950365349883 + 1.953125e-07 0.9415440651830208 0.3368898533922201 + 1.9921875e-07 0.9495281805930367 0.3136817403988916 + 2.03125e-07 0.9569403357322089 0.2902846772544623 + 2.0703125e-07 0.9637760657954398 0.2667127574748984 + 2.109375e-07 0.970031253194544 0.242980179903264 + 2.1484375e-07 0.9757021300385286 0.2191012401568698 + 2.1875e-07 0.9807852804032304 0.1950903220161283 + 2.2265625e-07 0.9852776423889412 0.1709618887603014 + 2.265625e-07 0.989176509964781 0.1467304744553617 + 2.3046875e-07 0.99247953459871 0.1224106751992163 + 2.34375e-07 0.9951847266721968 0.09801714032956077 + 2.3828125e-07 0.9972904566786902 0.07356456359966745 + 2.421875e-07 0.9987954562051724 0.04906767432741813 + 2.4609375e-07 0.9996988186962042 0.02454122852291226 + 2.5e-07 1 6.123233995736766e-17 + 2.5390625e-07 0.9996988186962042 -0.02454122852291214 + 2.578125e-07 0.9987954562051724 -0.04906767432741801 + 2.6171875e-07 0.9972904566786902 -0.07356456359966733 + 2.65625e-07 0.9951847266721969 -0.09801714032956065 + 2.6953125e-07 0.99247953459871 -0.1224106751992162 + 2.734375e-07 0.989176509964781 -0.1467304744553616 + 2.7734375e-07 0.9852776423889412 -0.1709618887603012 + 2.8125e-07 0.9807852804032304 -0.1950903220161282 + 2.8515625e-07 0.9757021300385286 -0.2191012401568697 + 2.890625e-07 0.970031253194544 -0.2429801799032639 + 2.9296875e-07 0.9637760657954398 -0.2667127574748983 + 2.96875e-07 0.9569403357322089 -0.2902846772544622 + 3.0078125e-07 0.9495281805930367 -0.3136817403988914 + 3.046875e-07 0.9415440651830208 -0.3368898533922199 + 3.0859375e-07 0.9329927988347388 -0.3598950365349882 + 3.125e-07 0.9238795325112867 -0.3826834323650897 + 3.1640625e-07 0.9142097557035307 -0.4052413140049897 + 3.203125e-07 0.9039892931234434 -0.4275550934302819 + 3.2421875e-07 0.8932243011955152 -0.4496113296546067 + 3.28125e-07 0.881921264348355 -0.4713967368259977 + 3.3203125e-07 0.8700869911087115 -0.492898192229784 + 3.359375e-07 0.8577286100002721 -0.5141027441932217 + 3.3984375e-07 0.8448535652497072 -0.534997619887097 + 3.4375e-07 0.8314696123025455 -0.555570233019602 + 3.4765625e-07 0.8175848131515837 -0.5758081914178453 + 3.515625e-07 0.8032075314806449 -0.5956993044924334 + 3.5546875e-07 0.7883464276266063 -0.6152315905806267 + 3.59375e-07 0.7730104533627371 -0.6343932841636454 + 3.6328125e-07 0.7572088465064847 -0.6531728429537765 + 3.671875e-07 0.740951125354959 -0.6715589548470184 + 3.7109375e-07 0.7242470829514669 -0.6895405447370669 + 3.75e-07 0.7071067811865476 -0.7071067811865475 + 3.7890625e-07 0.6895405447370671 -0.7242470829514668 + 3.828125e-07 0.6715589548470186 -0.7409511253549589 + 3.8671875e-07 0.6531728429537766 -0.7572088465064846 + 3.90625e-07 0.6343932841636455 -0.773010453362737 + 3.9453125e-07 0.6152315905806269 -0.7883464276266062 + 3.984375e-07 0.5956993044924335 -0.8032075314806448 + 4.0234375e-07 0.5758081914178454 -0.8175848131515836 + 4.0625e-07 0.5555702330196022 -0.8314696123025453 + 4.1015625e-07 0.5349976198870972 -0.8448535652497071 + 4.140625e-07 0.5141027441932218 -0.857728610000272 + 4.1796875e-07 0.4928981922297841 -0.8700869911087113 + 4.21875e-07 0.4713967368259979 -0.8819212643483549 + 4.2578125e-07 0.4496113296546069 -0.8932243011955152 + 4.296875e-07 0.427555093430282 -0.9039892931234433 + 4.3359375e-07 0.4052413140049899 -0.9142097557035307 + 4.375e-07 0.3826834323650899 -0.9238795325112867 + 4.4140625e-07 0.3598950365349883 -0.9329927988347388 + 4.453125e-07 0.3368898533922203 -0.9415440651830207 + 4.4921875e-07 0.3136817403988914 -0.9495281805930367 + 4.53125e-07 0.2902846772544624 -0.9569403357322088 + 4.5703125e-07 0.2667127574748985 -0.9637760657954398 + 4.609375e-07 0.2429801799032641 -0.970031253194544 + 4.6484375e-07 0.21910124015687 -0.9757021300385285 + 4.6875e-07 0.1950903220161286 -0.9807852804032304 + 4.7265625e-07 0.1709618887603012 -0.9852776423889412 + 4.765625e-07 0.1467304744553618 -0.989176509964781 + 4.804687499999999e-07 0.1224106751992163 -0.99247953459871 + 4.84375e-07 0.09801714032956083 -0.9951847266721968 + 4.8828125e-07 0.07356456359966773 -0.9972904566786902 + 4.921875e-07 0.04906767432741797 -0.9987954562051724 + 4.9609375e-07 0.02454122852291233 -0.9996988186962042 + 5e-07 1.224646799147353e-16 -1 + 5.0390625e-07 -0.02454122852291208 -0.9996988186962042 + 5.078125e-07 -0.04906767432741772 -0.9987954562051724 + 5.117187499999999e-07 -0.0735645635996675 -0.9972904566786902 + 5.156249999999999e-07 -0.09801714032956059 -0.9951847266721969 + 5.1953125e-07 -0.1224106751992161 -0.99247953459871 + 5.234375e-07 -0.1467304744553616 -0.989176509964781 + 5.2734375e-07 -0.170961888760301 -0.9852776423889413 + 5.3125e-07 -0.1950903220161284 -0.9807852804032304 + 5.3515625e-07 -0.2191012401568698 -0.9757021300385286 + 5.390625e-07 -0.2429801799032638 -0.970031253194544 + 5.4296875e-07 -0.2667127574748983 -0.96377606579544 + 5.46875e-07 -0.2902846772544621 -0.9569403357322089 + 5.507812499999999e-07 -0.3136817403988912 -0.9495281805930368 + 5.546874999999999e-07 -0.3368898533922201 -0.9415440651830208 + 5.5859375e-07 -0.3598950365349881 -0.932992798834739 + 5.625e-07 -0.3826834323650897 -0.9238795325112868 + 5.6640625e-07 -0.4052413140049897 -0.9142097557035307 + 5.703125e-07 -0.4275550934302818 -0.9039892931234434 + 5.7421875e-07 -0.4496113296546067 -0.8932243011955153 + 5.78125e-07 -0.4713967368259976 -0.881921264348355 + 5.8203125e-07 -0.4928981922297839 -0.8700869911087115 + 5.859374999999999e-07 -0.5141027441932216 -0.8577286100002721 + 5.898437499999999e-07 -0.5349976198870969 -0.8448535652497072 + 5.937499999999999e-07 -0.555570233019602 -0.8314696123025455 + 5.9765625e-07 -0.5758081914178453 -0.8175848131515837 + 6.015625e-07 -0.5956993044924332 -0.8032075314806449 + 6.0546875e-07 -0.6152315905806267 -0.7883464276266063 + 6.09375e-07 -0.6343932841636453 -0.7730104533627371 + 6.1328125e-07 -0.6531728429537765 -0.7572088465064848 + 6.171875e-07 -0.6715589548470184 -0.7409511253549591 + 6.2109375e-07 -0.6895405447370668 -0.724247082951467 + 6.249999999999999e-07 -0.7071067811865475 -0.7071067811865477 + 6.289062499999999e-07 -0.7242470829514668 -0.6895405447370671 + 6.328124999999999e-07 -0.7409511253549589 -0.6715589548470187 + 6.3671875e-07 -0.7572088465064842 -0.6531728429537771 + 6.40625e-07 -0.7730104533627367 -0.6343932841636459 + 6.4453125e-07 -0.7883464276266059 -0.6152315905806273 + 6.484375e-07 -0.8032075314806451 -0.5956993044924331 + 6.5234375e-07 -0.8175848131515838 -0.5758081914178452 + 6.5625e-07 -0.8314696123025452 -0.5555702330196022 + 6.6015625e-07 -0.844853565249707 -0.5349976198870973 + 6.640624999999999e-07 -0.857728610000272 -0.5141027441932218 + 6.679687499999999e-07 -0.8700869911087113 -0.4928981922297842 + 6.718749999999999e-07 -0.8819212643483549 -0.4713967368259979 + 6.7578125e-07 -0.8932243011955152 -0.4496113296546069 + 6.796875e-07 -0.9039892931234431 -0.4275550934302825 + 6.8359375e-07 -0.9142097557035305 -0.4052413140049904 + 6.875e-07 -0.9238795325112865 -0.3826834323650903 + 6.9140625e-07 -0.932992798834739 -0.3598950365349879 + 6.953125e-07 -0.9415440651830208 -0.3368898533922199 + 6.992187499999999e-07 -0.9495281805930367 -0.3136817403988915 + 7.031249999999999e-07 -0.9569403357322088 -0.2902846772544624 + 7.070312499999999e-07 -0.9637760657954398 -0.2667127574748985 + 7.109374999999999e-07 -0.970031253194544 -0.2429801799032641 + 7.1484375e-07 -0.9757021300385285 -0.2191012401568701 + 7.1875e-07 -0.9807852804032303 -0.1950903220161287 + 7.2265625e-07 -0.9852776423889411 -0.1709618887603017 + 7.265625e-07 -0.9891765099647809 -0.1467304744553623 + 7.3046875e-07 -0.9924795345987101 -0.122410675199216 + 7.34375e-07 -0.9951847266721969 -0.09801714032956045 + 7.382812499999999e-07 -0.9972904566786902 -0.07356456359966736 + 7.421874999999999e-07 -0.9987954562051724 -0.04906767432741803 + 7.460937499999999e-07 -0.9996988186962042 -0.02454122852291239 + 7.5e-07 -1 -1.83697019872103e-16 + 7.5390625e-07 -0.9996988186962042 0.02454122852291202 + 7.578125e-07 -0.9987954562051724 0.04906767432741766 + 7.6171875e-07 -0.9972904566786902 0.07356456359966698 + 7.65625e-07 -0.9951847266721969 0.09801714032956009 + 7.6953125e-07 -0.9924795345987101 0.1224106751992156 + 7.734375e-07 -0.9891765099647809 0.1467304744553619 + 7.773437499999999e-07 -0.9852776423889412 0.1709618887603013 + 7.812499999999999e-07 -0.9807852804032304 0.1950903220161283 + 7.851562499999999e-07 -0.9757021300385286 0.2191012401568697 + 7.890625e-07 -0.970031253194544 0.2429801799032638 + 7.9296875e-07 -0.96377606579544 0.2667127574748982 + 7.96875e-07 -0.9569403357322089 0.2902846772544621 + 8.0078125e-07 -0.9495281805930368 0.3136817403988911 + 8.046875e-07 -0.9415440651830209 0.3368898533922196 + 8.0859375e-07 -0.9329927988347391 0.3598950365349876 + 8.124999999999999e-07 -0.9238795325112866 0.38268343236509 + 8.164062499999999e-07 -0.9142097557035306 0.40524131400499 + 8.203124999999999e-07 -0.9039892931234433 0.4275550934302821 + 8.242187499999999e-07 -0.8932243011955153 0.4496113296546066 + 8.28125e-07 -0.881921264348355 0.4713967368259976 + 8.3203125e-07 -0.8700869911087115 0.4928981922297839 + 8.359375e-07 -0.8577286100002722 0.5141027441932216 + 8.3984375e-07 -0.8448535652497072 0.5349976198870969 + 8.4375e-07 -0.8314696123025455 0.5555702330196018 + 8.4765625e-07 -0.817584813151584 0.5758081914178449 + 8.515624999999999e-07 -0.8032075314806453 0.5956993044924329 + 8.554687499999999e-07 -0.7883464276266061 0.615231590580627 + 8.593749999999999e-07 -0.7730104533627369 0.6343932841636456 + 8.632812499999999e-07 -0.7572088465064846 0.6531728429537768 + 8.671875e-07 -0.7409511253549591 0.6715589548470183 + 8.7109375e-07 -0.724247082951467 0.6895405447370668 + 8.75e-07 -0.7071067811865477 0.7071067811865474 + 8.7890625e-07 -0.6895405447370672 0.7242470829514667 + 8.828125e-07 -0.6715589548470187 0.7409511253549589 + 8.8671875e-07 -0.6531728429537771 0.7572088465064842 + 8.906249999999999e-07 -0.6343932841636459 0.7730104533627367 + 8.945312499999999e-07 -0.6152315905806274 0.7883464276266059 + 8.984374999999999e-07 -0.5956993044924332 0.8032075314806451 + 9.023437499999999e-07 -0.5758081914178452 0.8175848131515837 + 9.0625e-07 -0.5555702330196022 0.8314696123025452 + 9.1015625e-07 -0.5349976198870973 0.844853565249707 + 9.140625e-07 -0.5141027441932219 0.857728610000272 + 9.1796875e-07 -0.4928981922297843 0.8700869911087113 + 9.21875e-07 -0.4713967368259979 0.8819212643483548 + 9.2578125e-07 -0.449611329654607 0.8932243011955151 + 9.296874999999999e-07 -0.4275550934302825 0.9039892931234431 + 9.335937499999999e-07 -0.4052413140049904 0.9142097557035305 + 9.374999999999999e-07 -0.3826834323650904 0.9238795325112865 + 9.414062499999999e-07 -0.359895036534988 0.932992798834739 + 9.453125e-07 -0.33688985339222 0.9415440651830208 + 9.4921875e-07 -0.3136817403988915 0.9495281805930367 + 9.53125e-07 -0.2902846772544625 0.9569403357322088 + 9.5703125e-07 -0.2667127574748986 0.9637760657954398 + 9.609374999999999e-07 -0.2429801799032642 0.970031253194544 + 9.648437499999999e-07 -0.2191012401568702 0.9757021300385285 + 9.6875e-07 -0.1950903220161287 0.9807852804032303 + 9.726562499999999e-07 -0.1709618887603018 0.9852776423889411 + 9.765625e-07 -0.1467304744553624 0.9891765099647809 + 9.804687499999999e-07 -0.122410675199216 0.99247953459871 + 9.84375e-07 -0.09801714032956051 0.9951847266721969 + 9.882812499999999e-07 -0.07356456359966741 0.9972904566786902 + 9.921875e-07 -0.04906767432741809 0.9987954562051724 + 9.960937499999999e-07 -0.02454122852291245 0.9996988186962042 + 1e-06 -2.449293598294706e-16 1 + + diff --git a/Windows/spice/examples/xspice/xspice_c1.cir b/Windows/spice/examples/xspice/xspice_c1.cir new file mode 100644 index 00000000..022d9138 --- /dev/null +++ b/Windows/spice/examples/xspice/xspice_c1.cir @@ -0,0 +1,22 @@ +A Berkeley SPICE3 compatible circuit +* +* This circuit contains only Berkeley SPICE3 components. +* +* The circuit is an AC coupled transistor amplifier with +* a sinewave input at node "1", a gain of approximately -3.9, +* and output on node "coll". +* +.tran 1e-5 2e-3 +* +vcc vcc 0 12.0 +vin 1 0 0.0 ac 1.0 sin(0 1 1k) +ccouple 1 base 10uF +rbias1 vcc base 100k +rbias2 base 0 24k +q1 coll base emit generic +rcollector vcc coll 3.9k +remitter emit 0 1k +* +.model generic npn +* +.end diff --git a/Windows/spice/examples/xspice/xspice_c2.cir b/Windows/spice/examples/xspice/xspice_c2.cir new file mode 100644 index 00000000..5c66bdd1 --- /dev/null +++ b/Windows/spice/examples/xspice/xspice_c2.cir @@ -0,0 +1,16 @@ +A transistor amplifier circuit +* +.tran 1e-5 2e-3 +* +vin 1 0 0.0 ac 1.0 sin(0 1 1k) +* +ccouple 1 in 10uF +rzin in 0 19.35k +* +aamp in aout gain_block +.model gain_block gain (gain = -3.9 out_offset = 7.003) +* +rzout aout coll 3.9k +rbig coll 0 1e12 +* +.end diff --git a/Windows/spice/examples/xspice/xspice_c3.cir b/Windows/spice/examples/xspice/xspice_c3.cir new file mode 100644 index 00000000..4c536293 --- /dev/null +++ b/Windows/spice/examples/xspice/xspice_c3.cir @@ -0,0 +1,97 @@ +Mixed IO types +* This circuit contains a mixture of IO types, including +* analog, digital, user-defined (real), and 'null'. +* +* The circuit demonstrates the use of the digital and +* user-defined node capability to model system-level designs +* such as sampled-data filters. The simulated circuit +* contains a digital oscillator enabled after 100us. The +* square wave oscillator output is divided by 8 with a +* ripple counter. The result is passed through a digital +* filter to convert it to a sine wave. +* +.tran 1e-5 1e-3 +.save all +* +v1 1 0 0.0 pulse(0 1 1e-4 1e-6) +r1 1 0 1k +* +abridge1 [1] [enable] atod +.model atod adc_bridge +* +aclk [enable clk] clk nand +.model nand d_nand (rise_delay=1e-5 fall_delay=1e-5) +* +adiv2 div2_out clk NULL NULL NULL div2_out dff +adiv4 div4_out div2_out NULL NULL NULL div4_out dff +adiv8 div8_out div4_out NULL NULL NULL div8_out dff +.model dff d_dff +* +abridge2 div8_out enable filt_in node_bridge2 +.model node_bridge2 d_to_real (zero=-1 one=1) +* +xfilter filt_in clk filt_out dig_filter +* +abridge3 filt_out a_out node_bridge3 +.model node_bridge3 real_to_v +* +rlpf1 a_out oa_minus 10k +* +xlpf 0 oa_minus lpf_out opamp +* +rlpf2 oa_minus lpf_out 10k +clpf lpf_out oa_minus 0.01uF +* +* +.subckt dig_filter filt_in clk filt_out +* +.model n0 real_gain (gain=1.0) +.model n1 real_gain (gain=2.0) +.model n2 real_gain (gain=1.0) +.model g1 real_gain (gain=0.125) +.model zm1 real_delay +.model d0a real_gain (gain=-0.75) +.model d1a real_gain (gain=0.5625) +.model d0b real_gain (gain=-0.3438) +.model d1b real_gain (gain=1.0) +* +an0a filt_in x0a n0 +an1a filt_in x1a n1 +an2a filt_in x2a n2 +* +az0a x0a clk x1a zm1 +az1a x1a clk x2a zm1 +* +ad0a x2a x0a d0a +ad1a x2a x1a d1a +* +az2a x2a filt1_out g1 +az3a filt1_out clk filt2_in zm1 +* +an0b filt2_in x0b n0 +an1b filt2_in x1b n1 +an2b filt2_in x2b n2 +* +az0b x0b clk x1b zm1 +az1b x1b clk x2b zm1 +* +ad0 x2b x0b d0b +ad1 x2b x1b d1b +* +az2b x2b clk filt_out zm1 +* +.ends dig_filter +* +* +.subckt opamp plus minus out +* +r1 plus minus 300k +a1 %vd (plus minus) outint lim +.model lim limit (out_lower_limit = -12 out_upper_limit = 12 ++ fraction = true limit_range = 0.2 gain=300e3) +r3 outint out 50.0 +r2 out 0 1e12 +* +.ends opamp +* +.end diff --git a/Windows/spice/how-to-use-ngspice140111.txt b/Windows/spice/how-to-use-ngspice140111.txt new file mode 100644 index 00000000..b84e9684 --- /dev/null +++ b/Windows/spice/how-to-use-ngspice140111.txt @@ -0,0 +1,359 @@ + H. Vogt, Jan 12th, 2014 + +ngspice-26 has been compiled from the ngspice-26 tarball, Jan 11th, 2014. + +ngspice.exe was generated by MS Visual Studio 2008, configuration +ReleaseOMP, using full optimization (compiler flags /O2 /Oi /Ot /GL, linker flag /ltcg). + +vcomp90.dll is the microsoft runtime distributable for OpenMP +(see C:\Program Files (x86)\Microsoft Visual Studio 9.0\1031\redist.txt). + +The XSPICE code models *.cm were generated with +TDM mingw gcc 4.8.1 and MSYS 1.0.10 using the following configuration: + +./configure --with-windows --enable-xspice --enable-cider --disable-debug + +gcc is invoked with the -O2 compiler flag, which is set in configure.ac. + +This version of ngspice 26 thus does not contain the adms or ndev extensions. + +Expand the ngspice-26-140112.zip file directly into C: so that you will get C:\Spice\bin etc. +For other places for ngspice installation, see below. + +The following examples are tested under Windows XP professional and Windows 7 64 Bit. + +Directory /examples offers some example input files for special commands. + + +*** How to use ngspice with examples provided in directory /tests *** + +********************************************************************* +Starting ngspice from MS Explorer window (interactive mode): + +Double click on ngspice.exe in C:\Spice\bin + +*** ngspice window: + +cd c:\spice\tests\bsim4 + +source comprt.cir + +run + +display + +plot v(1) v(2) v(3) v(8) v(9) + +write comprt2.raw + +quit +********************************************************************* + +********************************************************************* +* Starting ngspice within the msys window, interactive mode: + +* Open an MSYS window. + +*** msys window: + +export PATH=$PATH:/c/Spice/bin + +cd /c/Spice/tests/bsim4 + +ngspice comprt.cir + +*** ngspice window: + +run +display +plot all + +*** write data into raw file to actual directory /c/Spice/tests/bsim4: + +write comprt.raw + +quit + +If you want to use interactive mode with a circuit file in a different +directory (e.g. C:\test\comprt.cir) , you have to call ngspice like this: + +ngspice C:\\test\\comprt.cir +or +ngspice C:\\test/comprt.cir + +MSYS 1.0.10 is specific about file and directory names! + +You cannot start ngspice from C:\ or D:\ directly if you don't +have administrator rights. You may choose a subdirectory instead. + +********************************************************************* + +********************************************************************* +* Starting ngspice within the msys window, batch mode: + +* Open an MSYS window. + +*** msys window: + +export PATH=$PATH:/c/Spice/bin + +cd /c/Spice/tests/bsim4 + +ngspice -b -r comprt3.raw -o comprt3.out comprt.cir + +* Plotting + +*** msys window: + +ngspice +load comprt3.raw +plot v(1) v(2) v(3) v(8) v(9) +quit + +* The data in the raw file comprt3.raw are stored in a compact binary +* format. If you want them to be ASCII, you have to uncomment line +set filetype=ascii +* in C:\Spice\share\ngspice\scripts\spinit (remove the '*'). +********************************************************************* + +********************************************************************* +* Starting ngspice within the dos window (cmd.exe) , interactive mode: +* (also an example for using xspice extension) + +* Open a DOS window. + +*** DOS window: + +set PATH=%PATH%;C:\Spice\bin + +cd C:\Spice\examples\transimpedanceamp + +ngspice output.net + +*** ngspice window: + +run +display +* end display with 'q' +plot vout2 + +* write all data into raw file to actual directory C:\Spice\tests\transimpedanceamp: +write timp.raw +* write only input and output +write timp2.raw v3#branch vout2 +quit + +Calling a source file in a different directory is done by: + +ngspice D:\testinput\output.net + +********************************************************************* +********************************************************************* +* Use ngnutmeg for plotting within the dos window (cmd.exe), using the +raw file timp.raw created above: + +* Open a DOS window. + +*** DOS window: + +set PATH=%PATH%;C:\Spice\bin + +cd C:\Spice\examples\transimpedanceamp + +ngspice + +*** ngspice window: +load timp.raw +plot vout2 +plot i(v3) + +quit +********************************************************************* + +********************************************************************* +* Starting ngspice within the dos window (cmd.exe) , batch mode, using +* .plot and/or .print commands in the input file (printer plot output), +* no raw file, similar to SPICE2G6: + +* Open a DOS window. + +*** DOS window: + +set PATH=%PATH%;C:\Spice\bin + +cd C:\Spice\examples\ + +ngspice -b -o cs.out cs_mixtv4.inp + +* The ouput will be plotted and printed to C:\Spice\examples\cs.out. + +* If you enter +ngspice -b -r cs.raw -o cs.out cs_mixtv4.inp +* instead, you will get a raw file (simulator output data), +* .print and .plot will be ignored. +* You may plot the data by using ngnutmeg (see example above). + +********************************************************************* +********************************************************************* +* A numparam example with convergence and ringing problems +(Xiaoqun Wu e.a.: "Bifurcation Behavior of SPICE Simulations of Switching Converters: A Systematic +Analysis of Erroneous Results", IEEE TRANSACTIONS ON POWER ELECTRONICS, VOL. 22, NO. 5, SEPTEMBER 2007, p.1743 + +dos window (cmd.exe) , interactive mode: + +* Open a DOS window. + +*** DOS window: + +set PATH=%PATH%;C:\Spice\bin + +cd C:\Spice\examples\numparam + +ngspice power.cir + +*** ngspice window: + +run +plot vc#branch + +*** compare to literature by selecting appropriate plot windows using right mouse tab + +* write all data into raw file to actual directory C:\Spice\examples\numparam: +write power-all.raw +* write only relevant output +write power.raw vc#branch +quit + +********************************************************************* +********************************************************************* +* Running ngspice from a different directory (for example D:\tmp) +* Starting ngspice within the dos window (cmd.exe) , interactive mode: + +* Extract ngspice.zip to D:\tmp + +* Edit spinit (found in D:\tmp\Spice\share\ngspice\scripts) to have the correct + path for the XSPICE codemodels: + Line + codemodel C:/Spice/lib/spice/spice2poly.cm + has to be replaced by + codemodel D:/temp/Spice/lib/spice/spice2poly.cm + the other codemodels lines have to be changed respectively. + +* Open a DOS window. + +*** DOS window: + +set SPICE_LIB_DIR=D:\tmp\Spice\share\ngspice +set PATH=%PATH%;D:\tmp\Spice\bin +cd D:\tmp\Spice\examples\transimpedanceamp +D: + +ngspice output.net + +*** ngspice window: + +run +plot vout2 + +* write all data into raw file to actual directory D:\tmp\Spice\tests\transimpedanceamp: +write timp.raw +* write only input and output +write timp2.raw v3#branch vout2 +quit + +********************************************************************* +********************************************************************* +* Running ngspice from a different directory (for example D:\tmp) +* Starting ngspice within the dos window (cmd.exe) , interactive mode + or starting with double click on ngspice in MS explorer: + +* Extract ngspice.zip to D:\tmp +* under Windows XP you may put the following lines into C:\autoexec.bat: + +set SPICE_LIB_DIR=D:\tmp\Spice\share\ngspice +set PATH=%PATH%;D:\tmp\Spice\bin + +* Edit spinit (found in D:\tmp\share\ngspice\scripts) to have the correct + path for the XSPICE codemodels: + Line + codemodel C:/Spice/lib/spice/spice2poly.cm + has to be replaced by + codemodel D:/temp/Spice/lib/spice/spice2poly.cm + the other codemodels lines have to be changed respectively. + +* You may then start immediately after opening the command window (cmd.exe) + with: + +cd D:\tmp\Spice\examples\transimpedanceamp +D: + +ngspice output.net + +*** ngspice window: + +run +plot vout2 + +* write all data into raw file to actual directory D:\tmp\Spice\tests\transimpedanceamp: +write timp.raw +* write only input and output +write timp2.raw v3#branch vout2 +quit + +********************************************************************* + +********************************************************************* +********************************************************************* +* spinit + +* spinit is used to set options or to set varioables. spinit is read into ngspice + before any input file. The codemeodel path for xspice may be set as well. + + There is a search sequence for spinit. + 1) If the invironmental variable is SPICE_LIB_DIR is set to a path, e.g. to + SPICE_LIB_DIR=D:\tmp\Spice\share\ngspice, then spinit is searched for + in D:\tmp\Spice\share\ngspice\scripts. If not set then we look for it in + C:\Spice\share\ngspice\scripts. If this path is not available or spinit is + not there, then ngspice searches for spinit in the path where ngspice.exe + resides. If not found there, a warning note is issued. + +* .spiceinit + +* .spiceinit is read directly after the spinit file. You may keep spinit as is, + and put any personal preset variables or scripts into .spiceinit. Data in + .spiceinit will override data from spinit. + ngspice will search for .spiceinit either in your home directory or in the + directory where ngspice.exe is located. + +********************************************************************* +********************************************************************* +* Universial, simple install + + Put ngspice.exe and spinit into a subdirectory myspice\bin + Put the codemodels (e.g. analog.cm) into a subdirectoty myspice\codemodels. + Edit spinit and change the codemodel lines to + + codemodel ../codemodels/spice2poly.cm + + etc. + + Instead of 'myspice' you may now choose any directory for your installation + of \bin and \codemodels, even C:\ will work. + + +********************************************************************* +********************************************************************* +* miscellaneous + +Documentation specific to ngspice is available at +http://ngspice.sourceforge.net/docs.html. + +For additional info I recommend the Spice3 user manual at: +http://newton.ex.ac.uk/teaching/CDHW/Electronics2/userguide/index.html#toc + +For some information on CIDER see +http://embedded.eecs.berkeley.edu/pubs/downloads/cider/index.htm +A manual however is missing on this web site. + +For an xspice manual see +http://users.ece.gatech.edu/~mrichard/Xspice/ diff --git a/Windows/spice/lib/ngspice/analog.cm b/Windows/spice/lib/ngspice/analog.cm new file mode 100644 index 00000000..9d88281c Binary files /dev/null and b/Windows/spice/lib/ngspice/analog.cm differ diff --git a/Windows/spice/lib/ngspice/digital.cm b/Windows/spice/lib/ngspice/digital.cm new file mode 100644 index 00000000..dd3f943a Binary files /dev/null and b/Windows/spice/lib/ngspice/digital.cm differ diff --git a/Windows/spice/lib/ngspice/spice2poly.cm b/Windows/spice/lib/ngspice/spice2poly.cm new file mode 100644 index 00000000..e3fb67b2 Binary files /dev/null and b/Windows/spice/lib/ngspice/spice2poly.cm differ diff --git a/Windows/spice/lib/ngspice/xtradev.cm b/Windows/spice/lib/ngspice/xtradev.cm new file mode 100644 index 00000000..19117c6e Binary files /dev/null and b/Windows/spice/lib/ngspice/xtradev.cm differ diff --git a/Windows/spice/lib/ngspice/xtraevt.cm b/Windows/spice/lib/ngspice/xtraevt.cm new file mode 100644 index 00000000..437a4668 Binary files /dev/null and b/Windows/spice/lib/ngspice/xtraevt.cm differ diff --git a/Windows/spice/share/man/man1/ngmultidec.1 b/Windows/spice/share/man/man1/ngmultidec.1 new file mode 100644 index 00000000..617ed32d --- /dev/null +++ b/Windows/spice/share/man/man1/ngmultidec.1 @@ -0,0 +1,105 @@ +.TH NGMULTIDEC 1 ngpice +.SH NAME +ngmultidec \- make ngpice sub-circuit for coupled transmission lines +.SH SYNOPSIS +.B ngmultidec +[ +.IR options ... +] +.SH DESCRIPTION +.I ngmultidec +writes an ngspice input file to standard output which describes a sub-circuit for coupled lines +using uncoupled simple lossy lines. +.LP +Each generated subcircuit models a 4-conductor transmission line with +the following parameters: length +.IR l , +line capacitance +.IR c , +line resistance +.IR r , +line conductance +.IR g , +inductive_coeff_of_coupling +.IR k , +inter-line capacitance +.IR cm , +length +.IR l . +Derived parameters are: +.IR lm , +.IR ctot . +The values of +.IR l , +.IR c , +the model name, the number of conductors and the length of the line +must be specified. +.LP +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 the paper referenced below). +.LP +It may be noted that a symmetric two-conductor line is +represented accurately by this model. +.LP +Standard C language scientific (exponent) notation may be used for options' numeric values. +.SH OPTIONS +.TP +.BI \-o "subcircuit_name" +Set the subcircuit name +.TP +.BI \-l "line_inductance" +Set the line inductance. +.TP +.BI \-c "line_capacitance" +Set the line capacitance. +.TP +.BI \-r "line_resistance" +Set the line resistance. +.TP +.BI \-g "line_conductance" +Set the line conductance. +.TP +.BI \-k "inductive_coefficient_of_coupling" +Set the value of the inductive coefficient of coupling, whose +absolute value +.I k +must be less than 1.0. +.TP +.BI \-x "line-to-line-capacitance" +Set the line-to-line capacitance. +.TP +.BI \-L "length" +Set the length of the line. +.TP +.BI \-n "number" +Set the number of conductors. +.TP +.B \-u +Write a usage message to standard error. +.SH EXAMPLE +.RS +.B ngmultidec -n4 -l9e9 -c20e-12 -r5.3 -x5e12 -k0.7 -otest -L5.4 > test.cir +.RE +.SH SEE ALSO +.nf +.IR "Efficient Transient Simulation of Lossy Interconnect" , +J.S. Roychowdhury and D.O. Pederson, +Proceedings of the Design Automation Conference, +pp. 740-745. +1991. +.B http://portal.acm.org/citation.cfm?doid=127601.127762 +.fi +.sp +.IR ngnutmeg (1), +.IR ngproc2mod (1), +.IR ngsconvert (1), +.IR ngspice (1), +.IR nghelp (1). diff --git a/Windows/spice/share/man/man1/ngnutmeg.1 b/Windows/spice/share/man/man1/ngnutmeg.1 new file mode 100644 index 00000000..bafc122b --- /dev/null +++ b/Windows/spice/share/man/man1/ngnutmeg.1 @@ -0,0 +1,83 @@ +.\" Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group +.ig + +(woman-find-file buffer-file-name) + +(let* ((man-args (concat "-l " buffer-file-name)) + (bufname (concat "*Man " man-args "*"))) + (when (get-buffer bufname) + (kill-buffer bufname)) + (man man-args)) + +(compile + (concat "groff -t -e -man -Tps " + buffer-file-name + " > /tmp/tmp.ps && gv /tmp/tmp.ps")) + +.. +.TH NGNUTMEG 1 "6 June 2010" +.ds = \-\^\- +.ds ngspice \s-2NGSPICE\s+2 +.SH "NAME" +ngnutmeg \- ngspice post-processor +.SH "SYNOPSIS" +\fBngnutmeg\fP [\fIoptions\fP] [\fIdatafile\fP ...] +.SH "DESCRIPTION" +This man page is just a small overview. +The primary documentation of ngspice is in the \*[ngspice] User's Manual, +which is available as a pdf file. +.br +\fBngnutmeg\fP is a post processor for \*[ngspice] \- it takes +the raw output file created by \fBngspice \-r\fP +and plots the data on a graphics terminal or a workstation display. +Note that the raw output file is different from the +data that \*[ngspice] writes to the standard output. +.SH "OPTIONS" +.TP +\fB\-\fP +.br +Don't try to load the default data file ("rawspice") if no other files +are given. +.TP +\fB\-n\fP or \fB\*=no\-spiceinit\fP +Don't try to source the file ".spiceinit" upon startup. Normally \fBngnutmeg\fP +tries to find the file in the current directory, and if it is not found then +in the user's home directory. +.TP +\fB\-q\fP or \fB\*=completion\fP +Enable command completion. (defect) +.TP +\fB\-t\fP \fIterm\fP or \fB\*=term=\fP\fIterm\fP +The program is being run on a terminal with \fBmfb\fP name \fIterm\fP. +.TP +\fB\-h\fP or \fB\*=help\fP +Display a verbose help on the arguments available to the program. +.TP +\fB\-v\fP or \fB\*=version\fP +Display a version number and copyright information of the program. +.PP +Further arguments are taken to be data files in binary or ascii format +(see \fBsconvert\fP(1)) which are loaded into ngnutmeg. +If the file +is in binary format, it may be only partially completed (useful for +examining \*[ngspice] output before the simulation is finished). +One file may contain any number of data sets from different analyses. +.SH "ENVIRONMENT" +See ngspice(1) +.SH "FILES" +See ngspice(1) +.SH "SEE ALSO" +sconvert(1), ngspice(1), mfb(3), writedata(3), and +.br +\*[ngspice] User's Manual at \fBhttp://ngspice.sourceforge.net/docs.html\fP +.SH "BUGS" +Please report bugs to the ngspice project via +.br +\fBhttp://ngspice.sourceforge.net/bugrep.html\fP +.SH "AUTHOR" +Wayne Christopher (faustus@cad.berkeley.edu) +.br +\fBngspice\fP: various authors (see \fBhttp://sourceforge.net/projects/ngspice/\fP) +.\" Local Variables: +.\" mode: nroff +.\" End: diff --git a/Windows/spice/share/man/man1/ngsconvert.1 b/Windows/spice/share/man/man1/ngsconvert.1 new file mode 100644 index 00000000..55f72967 --- /dev/null +++ b/Windows/spice/share/man/man1/ngsconvert.1 @@ -0,0 +1,126 @@ +.\" Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group +.TH SCONVERT 1 "20 March 1986" +.UC 4 +.SH NAME +sconvert \- convert spice formats +.SH SYNOPSIS +.B sconvert fromtype fromfile totype tofile +.br +.B sconvert fromtype totype +.br +.B sconvert +.br +.SH DESCRIPTION +.B Sconvert +translates spice output files among three formats: the old +binary format, a new binary format, and a new ascii format. +The formats are specified by the +.B fromtype +and +.B totype +arguments: `o' for the old format, `b' for the new binary format, +and `a' for the new ascii format. +.B Fromtype +specifies the format to be read, and +.B totype +specifies the format to be written. +If +.B fromfile +and +.B tofile +are given, then they are used as the input and output, otherwise +standard input and output are used. +(Note that this second option is only available on \s-2UNIX\s+2 systems +\- on VMS and other systems you must supply the filenames.) +If no arguments are given, the parameters are prompted for. +.PP +Binary format is the preferred format for general use, as it is +the most economical in terms of space and speed of access, and ascii is +provided to make it easy to modify data files and transfer them +between machines with different floating-point formats. +The old format is provided only +for backward compatibility. +The three formats are as follows: +.br +.nf + +.B Old: + + What Size in Bytes + + title 80 + date 8 + time 8 + numoutputs 2 + the integer 4 2 + variable names -- + char[numoutputs][8] numoutputs * 8 + types of output numoutputs * 2 + node index numoutputs * 2 + plot title numoutputs * 24 + the actual data numpoints * numoutputs * 8 + +.B Ascii: + + Title: \fITitle Card String\fR + Date: \fIDate\fR + [ Plotname: \fIPlot Name\fR + Flags: \fIcomplex\fR or \fIreal\fR + No. Variables: \fInumoutputs\fR + No. Points: \fInumpoints\fR + Command: \fInutmeg command\fR + Variables: 0 \fIvarname1\fR \fItypename1\fR + 1 \fIvarname2\fR \fItypename2\fR + etc... + Values: + 0 n n n n ... + 1 n n n n ... + And so forth... + ] repeated one or more times +.fi +.PP +If one of the flags is \fIcomplex\fR, the points look like r,i where r and i +are floating point (in %e format). +Otherwise they are in %e format. +Only one of \fIreal\fR and \fIcomplex\fR should appear. +.PP +The lines are guaranteed to be less than 80 columns wide (unless the +plot title or variable names are very long), so this format is safe +to mail between systems like CMS. +.PP +Any number of \fBCommand:\fR lines may appear between the \fBNo. Points:\fR +and the \fBVariables:\fR lines, and whenever the plot is loaded into +\fBnutmeg\fR they will be executed. +.nf + +.B Binary: + + \fITitle Card\fR (a NULL terminated string) + \fIDate, Time\fR (a NULL terminated string) + [ + \fIPlot title\fR (a NULL terminated string) + \fINumber of variables\fR (an int) + \fINumber of data points\fR (an int) + \fIflags\fR (a short) + \fIvariable header struct\fR (repeated numoutputs times) + \fIvariable name\fR (a NULL terminated string) + \fIvariable type\fR (an int) + \fIset of outputs\fR (repeated numpoints times) + ] repeated one or more times. +.fi +.PP +A set of outputs is a vector of doubles of length numoutputs, or +a vector of real-imaginary pairs of doubles if the data is complex. +.SH "SEE ALSO" +nutmeg(1), spice(1), writedata(3) +.SH AUTHOR +Wayne Christopher (faustus@cad.berkeley.edu) +.SH BUGS +If variable names and the title +and plotname strings have trailing +blanks in them they will be stripped off when the file is read, if +it is in ascii format. +.PP +If a plot title begins with "Title:" \fBnutmeg\fR will be fooled into thinking +that this is an ascii format file. +\fBSconvert\fR always requires the type to be specified, however. diff --git a/Windows/spice/share/man/man1/ngspice.1 b/Windows/spice/share/man/man1/ngspice.1 new file mode 100644 index 00000000..cd5e31db --- /dev/null +++ b/Windows/spice/share/man/man1/ngspice.1 @@ -0,0 +1,152 @@ +.\" Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group +.ig + +(woman-find-file buffer-file-name) + +(let* ((man-args (concat "-l " buffer-file-name)) + (bufname (concat "*Man " man-args "*"))) + (when (get-buffer bufname) + (kill-buffer bufname)) + (man man-args)) + +(compile (concat "groff -t -e -man -Tps " + buffer-file-name + " > /tmp/tmp.ps && gv /tmp/tmp.ps")) + +.. +.TH NGSPICE 1 "6 June 2010" +.ds = \-\^\- +.ds ngspice \s-2NGSPICE\s+2 +.SH "NAME" +ngspice \- circuit simulator derived from SPICE3f5 +.SH "SYNOPSIS" +\fBngspice\fP [\fIoptions\fP] [\fIfile\fP ...] +.SH "DESCRIPTION" +This man page is just a small overview. +The primary documentation of ngspice is in the \*[ngspice] User's Manual, +which is available as a pdf file. +.SH "OPTIONS" +.TP +\fB\-n\fP or \fB\*=no\-spiceinit\fP +Don't try to source the file ".spiceinit" upon startup. Normally \*[ngspice] +tries to find the file in the current directory, and if it is not found then +in the user's home directory. +.TP +\fB\-q\fP or \fB\*=completion\fP +Enable command completion. (defect) +.TP +\fB\-t\fP \fIterm\fP or \fB\*=term=\fP\fIterm\fP +The program is being run on a terminal with \fBmfb\fP name \fIterm\fP. +.TP +\fB\-b\fP or \fB\*=batch\fP +Run in batch mode. +\*[ngspice] will read the standard input or the specified +input file and do the simulation. +Note that if the standard input is not a terminal, \*[ngspice] will default +to batch mode, unless the \-i flag is given. +.TP +\fB\-s\fP or \fB\*=server\fP +Run in server mode. +This is like batch mode, except that a temporary rawfile is used and then +written to the standard output, preceded by a line with a single "@", after +the simulation is done. +This mode is used by the ngspice daemon. +.TP +\fB\-i\fP or \fB\*=interactive\fP +Run in interactive mode. +This is useful if the standard input is not a terminal but interactive mode +is desired. +Command completion is not available unless the standard input is a terminal, +however. +.TP +\fB\-r\fP \fIrawfile\fP or \fB\*=rawfile=\fP\fIfile\fP +Use \fIrawfile\fP as the default file into which the results of +the simulation are saved. +.TP +\fB\-c\fP \fIcircuitfile\fP or \fB\*=circuitfile=\fP\fIcircuitfile\fP +Use \fIcircuitfile\fP as the default input deck. +.TP +\fB\-h\fP or \fB\*=help\fP +Display a verbose help on the arguments available to the program. +.TP +\fB\-v\fP or \fB\*=version\fP +Display a version number and copyright information of the program. +.TP +\fB\-a\fP or \fB\*=autorun\fP +FIXME +.TP +\fB\-o\fP \fIoutfile\fP or \fB\*=output=\fP\fIoutfile\fP +All logs generated during a batch run (\fB\-b\fP) will be saved in \fIoutfile\fP. +.TP +\fB\-p\fP or \fB\*=pipe\fP +Allow a program (e.g., xcircuit) to act as a GUI frontend for +ngspice through a pipe. +Thus ngspice will assume that the pipe is a tty and allows one to run in +interactive mode. +.PP +Further arguments are taken to be SPICE input decks, which are read +and saved. +(If batch mode is requested then they are run immediately.) +.SH "ENVIRONMENT" +.TP +\fBSPICE_LIB_DIR\fP +.TP +\fBSPICE_EXEC_DIR\fP +.TP +\fBSPICE_HOST\fP +.TP +\fBSPICE_BUGADDR\fP +.TP +\fBSPICE_EDITOR\fP +.TP +\fBSPICE_ASCIIRAWFILE\fP default \fI0\fP +Format of the rawfile. +\fI0\fP for binary, and \fI1\fP for ascii. +.TP +\fBSPICE_NEWS\fP default \fI$SPICE_LIB_DIR/news\fP +A file which is copied verbatim to stdout when ngspice starts in interactive mode. +.TP +\fBSPICE_MFBCAP\fP default \fI$SPICE_LIB_DIR/mfbcap\fP +.TP +\fBSPICE_HELP_DIR\fP default \fI$SPICE_LIB_DIR/helpdir\fP +.TP +\fBSPICE_SCRIPTS\fP default \fI$SPICE_LIB_DIR/scripts\fP +In this directory the \fIspinit\fP file will be searched. +.TP +\fBSPICE_PATH\fP default \fI$SPICE_EXEC_DIR/ngspice\fP +.PP +various undocumented ngspice centric environment variables : +.TP +\fBNGSPICE_MEAS_PRECISION\fP +.TP +\fBSPICE_NO_DATASEG_CHECK\fP +.PP +Common environment variables : +.TP +\fBTERM\fP \fBLINES\fP \fBCOLS\fP \fBDISPLAY\fP \fBHOME\fP \fBPATH\fP \fBEDITOR\fP \fBSHELL\fP +.TP +\fBPOSIXLY_CORRECT\fP +.SH "FILES" +.TP +\fI$SPICE_LIB_DIR/scripts/spinit\fP +The System's Initialisation File. +.TP +\fI\&.spiceinit\fP or \fI$HOME/.spiceinit\fP +The User's Initialisation File. +.SH "SEE ALSO" +sconvert(1), ngnutmeg(1), mfb(3), writedata(3), and +.br +\*[ngspice] User's Manual at \fBhttp://ngspice.sourceforge.net/docs.html\fP +.SH "BUGS" +Please report bugs to the ngspice project via +.br +\fBhttp://ngspice.sourceforge.net/bugrep.html\fP +.SH "AUTHORS" +\fBspice3\fP: Tom Quarles (quarles@cad.berkeley.edu) +.br +\fBnutmeg\fP: User interface: Wayne Christopher (faustus@cad.berkeley.edu) +.br +\fBngspice\fP: various authors (see \fBhttp://sourceforge.net/projects/ngspice/\fP) +.\" Local Variables: +.\" mode: nroff +.\" End: diff --git a/Windows/spice/share/ngspice/scripts/ciderinit b/Windows/spice/share/ngspice/scripts/ciderinit new file mode 100644 index 00000000..56163322 --- /dev/null +++ b/Windows/spice/share/ngspice/scripts/ciderinit @@ -0,0 +1,23 @@ +*** This is a sample spice/cider initialization file. +alias pl print line +alias pc print col +alias ds display +alias hi history +alias li listing +alias p plot +alias pr print +alias q quit +alias bye quit +alias exit quit +alias so source +alias ld load +alias xg xgraph tmp +alias sp setplot +alias dl devload +alias dx devaxis +set width = 80 height = 24 nosort noaskquit nobreak +set xbrushheight = 3 xbrushwidth = 3 +set unixcom +set hcopydevtype = postscript +set pointstyle = markers +set term = vt100 diff --git a/Windows/spice/share/ngspice/scripts/devaxis b/Windows/spice/share/ngspice/scripts/devaxis new file mode 100644 index 00000000..7b3d23f3 --- /dev/null +++ b/Windows/spice/share/ngspice/scripts/devaxis @@ -0,0 +1,69 @@ +* initialize a device plot +.control +begin + unset axis + if $argc = 1 + set axis = $argv[1] + strcmp flag $axis "x" + if ($flag = 0) + echo "setting axis to x" + strcmp flag "$?&devaxis" "0" + if ($flag = 0) + strcmp flag "$?&xaxis" "0" + if ($flag = 0) + echo "Error: no x axis present" + else + transpose all + setscale xaxis + let devaxis = 1 + end + else + strcmp flag "$&devaxis" "-1" + if ($flag = 0) + strcmp flag "$?&xaxis" "0" + if ($flag = 0) + echo "Error: no x axis present" + else + transpose all + setscale xaxis + let devaxis = 1 + end + end + end + else + strcmp flag $axis "y" + if ($flag = 0) + echo "setting axis to y" + strcmp flag "$?&devaxis" "0" + if ($flag = 0) + strcmp flag "$?&yaxis" "0" + if ($flag = 0) + echo "Error: no y axis present" + else + setscale yaxis + let devaxis = -1 + end + else + strcmp flag "$&devaxis" "1" + if ($flag = 0) + strcmp flag "$?&yaxis" "0" + if ($flag = 0) + echo "Error: no y axis present" + else + transpose all + setscale yaxis + let devaxis = -1 + end + end + end + else + echo "Error: unknown axis" $axis + echo "usage: devaxis " + end + end + else + echo "usage: devaxis " + end + + unset axis flag +end diff --git a/Windows/spice/share/ngspice/scripts/devload b/Windows/spice/share/ngspice/scripts/devload new file mode 100644 index 00000000..d007fad5 --- /dev/null +++ b/Windows/spice/share/ngspice/scripts/devload @@ -0,0 +1,21 @@ +* initialize a device plot +.control +begin + unset devfile + if $argc = 1 + set devfile = $argv[1] + load $devfile + strcmp flag "$?&y" "1" + if ($flag = 0) + let yaxis = y[0] + transpose all + let xaxis = x[0] + transpose all + setscale yaxis + end + else + echo "usage: devload " + end + + unset devfile flag +end diff --git a/Windows/spice/share/ngspice/scripts/setplot b/Windows/spice/share/ngspice/scripts/setplot new file mode 100644 index 00000000..38ca0da1 --- /dev/null +++ b/Windows/spice/share/ngspice/scripts/setplot @@ -0,0 +1,64 @@ +* set the current working plot +.control + +begin + unset resp + if $argc + set resp = $argv[1] + else + if $?plots = 0 + echo Error: there aren\'t any plots currently loaded. + goto bottom + else + if $#plots = 0 + echo Error: there aren\'t any plots currently loaded. + goto bottom + end + end + + if $?resp = 0 + set oldplot = $curplot + echo ' Type the name of the desired plot:' + echo '' + echo ' new New plot' + foreach pl $plots + set curplot = $pl + strcmp i $pl $oldplot + if $i = 0 + echo "Current $pl $curplottitle ({$curplotname})" + else + echo " $pl $curplottitle ({$curplotname})" + end + end + set curplot = $oldplot + echo -n '? ' + set resp = $< + end + end + + + strcmp i $resp "" + if $i = 0 + goto bottom + end + + strcmp i $resp new + if $i = 0 + set curplot = new + goto bottom + end + + foreach pl $plots + strcmp i $resp $pl + if $i = 0 + set curplot = $pl + goto bottom + end + end + + echo Error: no such plot name $resp + + label bottom + + unset resp i pl newflag oldplot +end diff --git a/Windows/spice/share/ngspice/scripts/spectrum b/Windows/spice/share/ngspice/scripts/spectrum new file mode 100644 index 00000000..3e394432 --- /dev/null +++ b/Windows/spice/share/ngspice/scripts/spectrum @@ -0,0 +1,165 @@ +* Fourier Series Function for SPICE +* This script is offered here for learning purposes, even if it is outdated +* and superseeded by the spec function and especially by the much faster fft function. +* You may use this script in conjunction with e.g. a ringoscillator output (see +* the ngspice manual, chapter 17). + +.control + begin + +* Variable argc delivers the number of command line parameters given by the user +* after the 'spectrum' command + if ($argc lt 4) + echo Error: Too few arguments. + echo ' 'Spectrum produces a plot containing a fourier series transformation of + echo ' 'the specified vectors + echo usage: spectrum startfreq stop step vec [[vec] ...] + goto bottom + end + +* Check if vectors 'time' and any input vector(s) are available +* argv[n] delivers the command line entries after the 'spectrum' command, +* starting with argv[1]. $argv[4-len] delivers the value of all tokens, +* starting with postion 4 till the end of the command line + if ( time eq time ) + foreach vec $argv[4-len] + if ( $vec eq $vec ) + else + goto bottom + end + end + else + echo ' 'Spectrum can not work without a time vector from a transient analysis. + goto bottom + end + + * generate a new plot entitled 'scratch', which will hold intermediate + * results and will be discarded after their evaluation. + set dt=$curplot + set title=$curplottitle + set curplot=new + set scratch=$curplot + + * A vector 'span' is created in the 'scratch' plot to hold the time difference + * of the transient simulation. {$dt}.time allows to access the 'time' vector + * from the dt plot (which is normally named 'tranx' with x a consecutoive + * integer number, depending on the amount of transient simulations already run + * in the present job. + let span={$dt}.time[length({$dt}.time)-1]-{$dt}.time[0] + +* Calculate the number of steps in all of the spectra to be evaluated below + if ($argv[3] gt 0.999/span) + let fpoints= ( $argv[2] - $argv[1] ) / $argv[3] +1 + if (fpoints < 2) + echo frequency start stop or step not correctly specified + goto reset + end + else + echo Error: time span is not long enough for a step frequency of $argv[3] Hz + goto reset + end + let lent = length({$dt}.time) + set lent = "$&lent" + let nyquist = {$lent}/2/span + if ($argv[2] gt nyquist) + echo Error: The nyquist limit is exceeded, try a frequency less than "$&nyquist" Hz + goto reset + end + set fpoints="$&fpoints" + + * generate a new plot to hold the spectra + set curplot=new + set spec=$curplot + set curplottitle=$title + set curplotname='Spectrum Analysis' + +* argv[3] is the third agrgument from the input line +* spectrum 1 1000MEG 10MEG v(out25) +* that is the delta frequency +* The fcn vector(n) creates a vector of length n, its elements have +* the values 0, 1, 2, 3, ..., n-2, n-1. Each element then is multiplied +* with the frequency step value. + let frequency=vector( $fpoints )*$argv[3] + +* Add an frequency offset to each element of vector 'frequency' +* to suppress the (typically) large dc component. + dowhile frequency[1] < ( $argv[1] + 1e-9 ) + let frequency = frequency + $argv[3] + end + +* For each input vector given on the command line, +* create a new vector for complex numbers + foreach vec $argv[4-len] + let $vec = vector( $fpoints ) + j(vector( $fpoints )) + reshape $vec [{$fpoints}] + end + +* $scratch is a plot for intermediate results, will be destroyed during cleanup +* $dt is the plot with the original data +* $spec is a plot for storing the spectrum + set curplot=$scratch + + * some test + let npers=1 + let test = span-2/$argv[3] + 1e-9 + while test > 0 + let npers = npers + 1 + let test = test-1/$argv[3] + end + + * Do the spectrum calculations + let ircle = 2*pi*max(-1,({$dt}.time-{$dt}.time[{$lent}-1])*{$argv[3]}/npers) + let win = 1 - cos(ircle) + let ircle = npers*ircle + let circle = ircle * ({$spec}.frequency[0]/$argv[3] - 1) + let k=vector( $fpoints ) + foreach k $&k + let circle = circle + ircle + foreach vec $argv[4-len] + let tmp = win*{$dt}.{$vec} + let {$spec}.{$vec}[{$k}] = 2*(mean(cos(circle)*tmp),mean(sin(circle)*tmp)) + end + end + +* plot (and write) the generated spectrum + set curplot = $spec + settype frequency frequency + foreach vec $argv[4-len] + let spectrum = mag({$vec}) + plot spectrum + write specout.out spectrum + end + +* If you have an oscillator, fimd its frequency +* as maximum of vector spectrum or goto end (uncomment next line) +* goto cleanup + set curplot=$scratch + let counter = 0 + let contents = 0 + let freqmax = 0 + let spectrum = {$spec}.spectrum + + foreach spectrum $&spectrum + if counter > 4 + if ( contents < $spectrum ) + let contents = $spectrum + set count = "$&counter" + let freqmax = {$spec}.frequency[{$count}] + end + end + let counter = counter + 1 + end + + echo + echo Osc. frequency at "$&freqmax" Hz + echo + goto cleanup + + label reset + set curplot=$dt + label cleanup + destroy $scratch + unset fpoints dt scratch spec vec k title lent + label bottom + + end diff --git a/Windows/spice/share/ngspice/scripts/spinit b/Windows/spice/share/ngspice/scripts/spinit new file mode 100644 index 00000000..ed5cd0e6 --- /dev/null +++ b/Windows/spice/share/ngspice/scripts/spinit @@ -0,0 +1,31 @@ +* Standard ngspice init file +alias exit quit +alias acct rusage all +set x11lineararcs +*set rndseed=12 +** ascii rawfile ** +*set filetype=ascii +** frontend debug output ** +*set ngdebug +** no asking after quit ** +set noaskquit +** set the number of threads in openmp +** default (if compiled with --enable-openmp) is: 2 +*set num_threads=4 + +strcmp __flag $program "ngspice" +if $__flag = 0 + +* For SPICE2 POLYs, edit the below line to point to the location +* of your codemodel. + + codemodel C:/Spice/lib/ngspice/spice2poly.cm + +* The other codemodels + codemodel C:/Spice/lib/ngspice/analog.cm + codemodel C:/Spice/lib/ngspice/digital.cm + codemodel C:/Spice/lib/ngspice/xtradev.cm + codemodel C:/Spice/lib/ngspice/xtraevt.cm + +end +unset __flag diff --git a/Windows/spice/tests/.gitignore b/Windows/spice/tests/.gitignore new file mode 100644 index 00000000..27779af0 --- /dev/null +++ b/Windows/spice/tests/.gitignore @@ -0,0 +1,8 @@ +*.test +*.log + +ngspiceCkt + +/xspice/digital/spinit + +results/ diff --git a/Windows/spice/tests/ChangeLog b/Windows/spice/tests/ChangeLog new file mode 100644 index 00000000..96f56f5b --- /dev/null +++ b/Windows/spice/tests/ChangeLog @@ -0,0 +1,23 @@ +2001-12-07 Paolo Nenzi + + * tests/: added mesa tests from macspice3f4 and corrected all other tests. + +2001-12-04 Emmanuel Rouat + + * check.sh (testdir): turned that script into 'real' sh script + (was bash, really) + +2000-09-14 Arno W. Peters + + * diffpair.out, filters/lowpass.out, polezero/filt_bridge_t.out, + polezero/filt_multistage.out, polezero/filt_rc.out, + resistance/res_array.out, resistance/res_partition.out: Updated + for new spice output. + + +2000-09-09 Arno W. Peters + + * fourbitadder.out, resistance/res_simple.out: Updated to + correspond to the new output from ngspice. + + diff --git a/Windows/spice/tests/Makefile.am b/Windows/spice/tests/Makefile.am new file mode 100644 index 00000000..8b896304 --- /dev/null +++ b/Windows/spice/tests/Makefile.am @@ -0,0 +1,50 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = \ + bsim3 \ + bsim4 \ + bsimsoi \ + hisim \ + hisimhv1 \ + regression + +if XSPICE_WANTED +SUBDIRS += xspice +endif + + +DIST_SUBDIRS = \ + bsim1 \ + bsim2 \ + bsim3 \ + bsim3soidd \ + bsim3soifd \ + bsim3soipd \ + bsim4 \ + bsimsoi \ + filters \ + general \ + hfet \ + hisim \ + hisimhv1 \ + jfet \ + mes \ + mesa \ + mos6 \ + polezero \ + regression \ + resistance \ + sensitivity \ + transient \ + transmission \ + vbic \ + xspice + + +TESTS_ENVIRONMENT = \ + $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + README bin .gitignore + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/Makefile.in b/Windows/spice/tests/Makefile.in new file mode 100644 index 00000000..6fe8eb1a --- /dev/null +++ b/Windows/spice/tests/Makefile.in @@ -0,0 +1,644 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@XSPICE_WANTED_TRUE@am__append_1 = xspice +subdir = tests +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = bsim3 bsim4 bsimsoi hisim hisimhv1 regression \ + $(am__append_1) +DIST_SUBDIRS = \ + bsim1 \ + bsim2 \ + bsim3 \ + bsim3soidd \ + bsim3soifd \ + bsim3soipd \ + bsim4 \ + bsimsoi \ + filters \ + general \ + hfet \ + hisim \ + hisimhv1 \ + jfet \ + mes \ + mesa \ + mos6 \ + polezero \ + regression \ + resistance \ + sensitivity \ + transient \ + transmission \ + vbic \ + xspice + +TESTS_ENVIRONMENT = \ + $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + README bin .gitignore + +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/README b/Windows/spice/tests/README new file mode 100644 index 00000000..cafa6690 --- /dev/null +++ b/Windows/spice/tests/README @@ -0,0 +1,28 @@ +ngspice test and example files: +=============================== + +This directory is organized as a tree of subdirectories containing test files +for devices and analyses implemented in ngspice. + +Some files comes from the original Spice3f5 package and others have been +contributed by developers and users. + + +File Extension Convention: + +.cir : Circuit file. This can be a simple circuit description or a spice2 + input file. +.out : .cir files have been run and results are recorded into this + type of file. This is useful if want to test ngspice against + known (hopefully correct results). + +REPLICATE TESTS + +To replicate tests you have to launch configure without any option and +compile ngspice. In the future this will change. + +TO ADD NEW TESTS + +Take an existing test and adopt it to your liking. Add the test +script and its supporting files to Makefile.am. Use `make check' to +see your new test in action. diff --git a/Windows/spice/tests/bsim1/Makefile.am b/Windows/spice/tests/bsim1/Makefile.am new file mode 100644 index 00000000..9924d8c7 --- /dev/null +++ b/Windows/spice/tests/bsim1/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + test.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim1/Makefile.in b/Windows/spice/tests/bsim1/Makefile.in new file mode 100644 index 00000000..e4034674 --- /dev/null +++ b/Windows/spice/tests/bsim1/Makefile.in @@ -0,0 +1,514 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim1 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + test.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim1/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim1/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim1/test.cir b/Windows/spice/tests/bsim1/test.cir new file mode 100644 index 00000000..0ca6150f --- /dev/null +++ b/Windows/spice/tests/bsim1/test.cir @@ -0,0 +1,108 @@ +Test of MOS BSIM1 implementation; DC transfer curve +****************************************************************** +MN1 13 2 0 4 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN2 23 2 0 5 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN3 33 2 0 6 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN4 43 2 0 7 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN5 53 2 0 8 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +VDS 3 0 0.05 +VGS 2 0 0 +V1 3 13 0 +V2 3 23 0 +V3 3 33 0 +V4 3 43 0 +V5 3 53 0 +VBS1 4 0 0 +VBS2 5 0 -1 +VBS3 6 0 -2 +VBS4 7 0 -3 +VBS5 8 0 -4 +*************************************************************** +*.OPTIONS LIMPTS=5000 ACCT +.OPTIONS NOACCT +.DC VGS 0 5 0.01 +.PRINT DC I(V1) I(V2) I(V3) I(V4) I(V5) +*.PLOT DC I(V1) I(V2) I(V3) I(V4) I(V5) +*.OPTIONS LIMPTS=501 ACCT +*VGS 2 0 PWL(0 0 5 5) +*.TRAN 0 5 0.01 +*.PRINT TRAN I(V1) I(V2) I(V3) I(V4) I(V5) +***** MODEL PARAMETERS TEMP2 ******************** +.MODEL NMOS NMOS ++ LEVEL = 4.00000E+000 ++ TOX = 3.00000E-002 ++ VDD = 5.00000E+000 ++ TEMP = 2.70000E+001 ++ DL = 7.97991E-001 ++ DW = 4.77402E-001 ++ VFB = -1.0087E+000 ++ PHI = 7.96434E-001 ++ K1 = 1.31191E+000 ++ K2 = 1.46640E-001 ++ ETA = -1.0027E-003 ++ MUZ = 5.34334E+002 ++ U0 = 4.38497E-002 ++ U1 = -5.7332E-002 ++ X2E = -7.6911E-004 ++ X3E = 7.86777E-004 ++ X2MZ = 8.25434E+000 ++ MUS = 5.40612E+002 ++ X2MS = -1.2992E+001 ++ X3MS = -9.4035E+000 ++ X2U0 = 1.06821E-003 ++ X2U1 = -1.9209E-002 ++ X3U1 = 7.76925E-003 ++ LVFB = -2.1402E-001 ++ WVFB = 3.44354E-001 ++ LK1 = 3.23395E-001 ++ WK1 = -5.7698E-001 ++ LK2 = 1.68585E-001 ++ WK2 = -1.8796E-001 ++ LETA = -9.4847E-003 ++ WETA = 1.47316E-002 ++ LU0 = 6.38105E-002 ++ WU0 = -6.1053E-002 ++ LU1 = 1.01174E+000 ++ WU1 = 1.62706E-002 ++ LX2E = 9.62411E-003 ++ WX2E = -3.7951E-003 ++ LX3E = 7.35448E-004 ++ WX3E = -1.7796E-003 ++ LX2MZ = -2.4197E+001 ++ WX2MZ = 1.95696E+001 ++ LMUS = 6.21401E+002 ++ WMUS = -1.9190E+002 ++ LX2MS = -6.4900E+001 ++ WX2MS = 4.29043E+001 ++ LX3MS = 1.18239E+002 ++ WX3MS = -2.9747E+001 ++ LX2U0 = -8.0958E-003 ++ WX2U0 = 4.03379E-003 ++ LX2U1 = -7.4573E-002 ++ WX2U1 = 1.47520E-002 ++ LX3U1 = -1.0940E-001 ++ WX3U1 = -8.3353E-003 ++ N0 = 1.55 ++ NB = 0.09 ++ ND = 0.0 ++ LN0 = 0.0 ++ WN0 = 0.0 ++ LNB = 0.0 ++ WNB = 0.0 ++ LND = 0.0 ++ WND = 0.0 ++ CGDO = 2.70000E-010 ++ CGSO = 2.70000E-010 ++ CGBO = 1.40000E-010 ++ XPART = 1.0 ++ RSH = 35.0 ++ CJ = 2.75E-4 ++ CJSW = 1.90E-10 ++ JS = 1.0E-8 ++ PB = 0.7 ++ PBSW = 0.8 ++ MJ = 0.5 ++ MJSW = 0.33 ++ WDF = 0.0 +***** ***** +.END diff --git a/Windows/spice/tests/bsim2/Makefile.am b/Windows/spice/tests/bsim2/Makefile.am new file mode 100644 index 00000000..9924d8c7 --- /dev/null +++ b/Windows/spice/tests/bsim2/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + test.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim2/Makefile.in b/Windows/spice/tests/bsim2/Makefile.in new file mode 100644 index 00000000..02bc2f9e --- /dev/null +++ b/Windows/spice/tests/bsim2/Makefile.in @@ -0,0 +1,514 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim2 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + test.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim2/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim2/test.cir b/Windows/spice/tests/bsim2/test.cir new file mode 100644 index 00000000..74e3a486 --- /dev/null +++ b/Windows/spice/tests/bsim2/test.cir @@ -0,0 +1,80 @@ +Test of MOS BSIM2 implementation; DC transfer curve +****************************************************************** +MN1 13 2 0 4 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN2 23 2 0 5 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN3 33 2 0 6 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN4 43 2 0 7 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +MN5 53 2 0 8 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U +VDS 3 0 0.05 +VGS 2 0 0 +V1 3 13 0 +V2 3 23 0 +V3 3 33 0 +V4 3 43 0 +V5 3 53 0 +VBS1 4 0 0 +VBS2 5 0 -1 +VBS3 6 0 -2 +VBS4 7 0 -3 +VBS5 8 0 -4 +*************************************************************** +*.OPTIONS LIMPTS=5000 ACCT +.OPTIONS NOACCT +.DC VGS 0 5 0.01 +.PRINT DC I(V1) I(V2) I(V3) I(V4) I(V5) +*.PLOT DC I(V1) I(V2) I(V3) I(V4) I(V5) +*.OPTIONS LIMPTS=501 ACCT +*VGS 2 0 PWL(0 0 5 5) +*.TRAN 0 5 0.01 +*.PRINT TRAN I(V1) I(V2) I(V3) I(V4) I(V5) +***** MODEL PARAMETERS TEMP2 ******************** +* This file contains the BSIM2 process file parameters as they should +* be input to the .model card of spice3c1. +.model nmos nmos level=5 ++ vfb = -0.7919 lvfb = -0.0266 wvfb = 0.0000 ++ phi = 0.8039 lphi = 0.0042 wphi = 0.0000 ++ k1 = 0.7286 lk1 = 0.0309 wk1 = 0.0000 ++ k2 = -0.0506 lk2 = 0.0786 wk2 = 0.0000 ++ mu0 = 453.2926 dl = 0.1553 dw = 0.0000 ++ mu0b = -5.4925 lmu0b = -1.9192 wmu0b = 0.0000 ++ mus0 = 781.7117 lmus0 = 25.2769 wmus0 = 0.0000 ++ musb = 25.5724 lmusb = -10.0060 wmusb = 0.0000 ++ mu20 = 0.9390 lmu20 = -0.0840 wmu20 = 0.0000 ++ mu2b = 0.0753 lmu2b = -0.0148 wmu2b = 0.0000 ++ mu2g = 0.1804 lmu2g = 0.0181 wmu2g = 0.0000 ++ mu30 = 44.9689 lmu30 = -0.0933 wmu30 = 0.0000 ++ mu3b = 0.5871 lmu3b = 1.0793 wmu3b = 0.0000 ++ mu3g = -11.6723 lmu3g = 0.6804 wmu3g = 0.0000 ++ mu40 = 0.2682 lmu40 = 2.3969 wmu40 = 0.0000 ++ mu4b = -0.3179 lmu4b = 0.1264 wmu4b = 0.0000 ++ mu4g = -0.2654 lmu4g = -0.5702 wmu4g = 0.0000 ++ ua0 = 0.0441 lua0 = 0.2283 wua0 = 0.0000 ++ uab = -0.0045 luab = -0.0105 wuab = 0.0000 ++ ub0 = 0.0125 lub0 = -0.0051 wub0 = 0.0000 ++ ubb = -0.0015 lubb = 0.0010 wubb = 0.0000 ++ u10 = 0.1262 lu10 = 0.5563 wu10 = 0.0000 ++ u1d = -0.2967 lu1d = -0.0062 wu1d = 0.0000 ++ u1b = 0.0960 lu1b = -0.0345 wu1b = 0.0000 ++ eta0 = -0.0373 leta0 = 0.0271 weta0 = 0.0000 ++ etab = 0.0004 letab = -0.0041 wetab = 0.0000 ++ n0 = 0.8032 ln0 = 0.1734 wn0 = 0.0000 ++ nd = 0.0105 lnd = -0.0091 wnd = 0.0000 ++ nb = 0.5978 lnb = -0.1638 wnb = 0.0000 ++ vof0 = 1.4977 lvof0 = -0.1766 wvof0 = 0.0000 ++ vofd = 0.1795 lvofd = -0.1247 wvofd = 0.0000 ++ vofb = 0.8368 lvofb = -0.3432 wvofb = 0.0000 ++ ai0 = 32.0150 lai0 = 8.2816 wai0 = 0.0000 ++ aib = -19.5396 laib = 4.9347 waib = 0.0000 ++ bi0 = 37.6044 lbi0 = -1.8713 wbi0 = 0.0000 ++ bib = -2.5109 lbib = 0.7903 wbib = 0.0000 ++ vghigh = 0.2342 lvghigh = -0.0007 wvghigh = 0.0000 ++ vglow = -0.1023 lvglow = 0.0038 wvglow = 0.0000 ++ tox = 0.0150 temp = 27 vdd = 5.0 vgg = 5.0 vbb = -3.0 ++ cgdo = 1.0e-10 cgso = 1.0e-10 cgbo = 2.5e-11 ++ xpart = 0 ++ rsh = 0 cj = 0.0002 cjsw = 1.0e-10 ++ js = 5e-5 pb = 0.7 pbsw = 0.8 ++ mj = 0.5 mjsw = 0.33 wdf = 0 ++ dell = 0 +***** ***** +.END diff --git a/Windows/spice/tests/bsim3/Makefile.am b/Windows/spice/tests/bsim3/Makefile.am new file mode 100644 index 00000000..29292d5b --- /dev/null +++ b/Windows/spice/tests/bsim3/Makefile.am @@ -0,0 +1,5 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = ac_sim dc_sim tran_sim + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim3/Makefile.in b/Windows/spice/tests/bsim3/Makefile.in new file mode 100644 index 00000000..2c0560b3 --- /dev/null +++ b/Windows/spice/tests/bsim3/Makefile.in @@ -0,0 +1,609 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim3 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = ac_sim dc_sim tran_sim +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim3/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim3/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim3/ac_sim/Makefile.am b/Windows/spice/tests/bsim3/ac_sim/Makefile.am new file mode 100644 index 00000000..e3cfa712 --- /dev/null +++ b/Windows/spice/tests/bsim3/ac_sim/Makefile.am @@ -0,0 +1,13 @@ +## Process this file with automake to produce Makefile.in + +TESTS = gain-stage.cir \ + op-amp.cir + + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim3/ac_sim/Makefile.in b/Windows/spice/tests/bsim3/ac_sim/Makefile.in new file mode 100644 index 00000000..82006c68 --- /dev/null +++ b/Windows/spice/tests/bsim3/ac_sim/Makefile.in @@ -0,0 +1,514 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim3/ac_sim +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = gain-stage.cir \ + op-amp.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim3/ac_sim/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim3/ac_sim/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim3/ac_sim/gain-stage.cir b/Windows/spice/tests/bsim3/ac_sim/gain-stage.cir new file mode 100644 index 00000000..00e31738 --- /dev/null +++ b/Windows/spice/tests/bsim3/ac_sim/gain-stage.cir @@ -0,0 +1,17 @@ +*A Simple MOSFET Gain Stage. AC Analysis. + +M1 3 2 0 0 nmos w=4u l=1u +Rsource 1 2 100k +Rload 3 vdd 25k + +Vdd vdd 0 5 +Vin 1 0 1.44 ac .1 + +.options noacct +.ac dec 10 100 1000Meg +.print ac vdb(3) + +.model nmos nmos level=8 version=3.2.2 + +.end + diff --git a/Windows/spice/tests/bsim3/ac_sim/op-amp.cir b/Windows/spice/tests/bsim3/ac_sim/op-amp.cir new file mode 100644 index 00000000..9f01c3be --- /dev/null +++ b/Windows/spice/tests/bsim3/ac_sim/op-amp.cir @@ -0,0 +1,37 @@ +* Operational Amplifier. AC Analysis. +* BSIM3 testing, 3/16/96. + +*Operational Amplifier +M1 bias1 1 cm cm nmos w=10u l=1u +M2 bias2 in2 cm cm nmos w=10u l=1u +M3 vdd bias1 bias1 vdd pmos w=2u l=1u +M4 bias2 bias1 vdd vdd pmos w=2u l=1u + +m5 cm bias vss vss nmos w=2u l=1u +mbias bias bias vss vss nmos w=2u l=1u +rbias 0 bias 195k + +m6 8 bias vss vss nmos w=2u l=1u +m7 8 bias2 vdd out nmos w=2u l=1u + +Cfb bias2 8 2p + +Vid 1 c 0 ac 0.1 +eid in2 c 1 c -1 +vic c 0 dc 0 +vss vss 0 -5 +Vdd vdd 0 5 + +*AC analysis +.options noacct +.ac dec 10 100 100Meg +.print ac vdb(8) + +.model nmos nmos level=8 version=3.2.2 +.model pmos pmos level=8 version=3.2.2 + +.end + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/Makefile.am b/Windows/spice/tests/bsim3/dc_sim/Makefile.am new file mode 100644 index 00000000..f3fa5814 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/Makefile.am @@ -0,0 +1,28 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + test1.cir \ + test2.cir \ + test3.cir \ + test4.cir \ + test5.cir \ + test6.cir \ + test7.cir \ + test8.cir \ + test9.cir \ + test10.cir \ + test11.cir \ + test12.cir \ + test13.cir \ + test14.cir + + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + modelcard.nmos \ + modelcard.pmos \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim3/dc_sim/Makefile.in b/Windows/spice/tests/bsim3/dc_sim/Makefile.in new file mode 100644 index 00000000..aa63fdcf --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/Makefile.in @@ -0,0 +1,529 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim3/dc_sim +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + test1.cir \ + test2.cir \ + test3.cir \ + test4.cir \ + test5.cir \ + test6.cir \ + test7.cir \ + test8.cir \ + test9.cir \ + test10.cir \ + test11.cir \ + test12.cir \ + test13.cir \ + test14.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + modelcard.nmos \ + modelcard.pmos \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim3/dc_sim/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim3/dc_sim/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim3/dc_sim/modelcard.nmos b/Windows/spice/tests/bsim3/dc_sim/modelcard.nmos new file mode 100644 index 00000000..e09340b3 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/modelcard.nmos @@ -0,0 +1,41 @@ +*model = bsim3v3 +*Berkeley Spice Compatibility +* Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 +.model N1 NMOS ++Level= 8 version=3.2.2 ++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 + + + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/modelcard.pmos b/Windows/spice/tests/bsim3/dc_sim/modelcard.pmos new file mode 100644 index 00000000..dfd8522d --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/modelcard.pmos @@ -0,0 +1,31 @@ +.model P1 PMOS ++Level= 8 version=3.2.2 ++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 + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test1.cir b/Windows/spice/tests/bsim3/dc_sim/test1.cir new file mode 100644 index 00000000..e7110a9f --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test1.cir @@ -0,0 +1,21 @@ +*****Single NMOS Transistor For BSIM3V3 general purpose check (Id-Vd) *** + +*** circuit description *** +m1 2 1 0 0 n1 L=0.35u W=10.0u +vgs 1 0 3.5 +vds 2 0 3.5 + +.options noacct +.dc vds 0 3.5 0.05 vgs 0 3.5 0.5 + + +.print dc v(1) i(vds) + +.include modelcard.nmos + +.end + + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test10.cir b/Windows/spice/tests/bsim3/dc_sim/test10.cir new file mode 100644 index 00000000..3592cca6 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test10.cir @@ -0,0 +1,19 @@ +*** For BSIM3V3 general purpose check (Id-Vd) for Pmosfet *** +****************************************** + +*** circuit description *** +m1 2 1 0 0 p1 L=0.35u W=10.0u +vgs 1 0 -3.5 +vds 2 0 -3.5 + + +.dc vds 0 -3.5 -0.05 vgs 0 -3.5 -0.5 + +.options Temp=100.0 noacct +.print dc v(1) i(vds) + + +.include modelcard.pmos +.end + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test11.cir b/Windows/spice/tests/bsim3/dc_sim/test11.cir new file mode 100644 index 00000000..34ad652f --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test11.cir @@ -0,0 +1,17 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Pmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 3 p1 L=0.35u W=10.0u +vgs 1 0 -3.5 +vds 2 0 -0.1 +vbs 3 0 0.0 + +.options noacct +.dc vgs 0 -3.5 -0.05 vds -0.1 -3.1 -1. + +.print dc v(2) i(vds) +.include modelcard.pmos +.end + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test12.cir b/Windows/spice/tests/bsim3/dc_sim/test12.cir new file mode 100644 index 00000000..9405bd7e --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test12.cir @@ -0,0 +1,17 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Pmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 3 p1 L=0.35u W=10.0u +vgs 1 0 -3.5 +vds 2 0 -0.1 +vbs 3 0 0.0 + +.options noacct +.dc vgs 0 -3.5 -0.05 vbs 0 3. 0.5 + +.print dc v(2) i(vds) +.include modelcard.pmos +.end + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test13.cir b/Windows/spice/tests/bsim3/dc_sim/test13.cir new file mode 100644 index 00000000..e427a0b7 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test13.cir @@ -0,0 +1,18 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Pmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 3 p1 L=0.35u W=10.0u +vgs 1 0 -3.5 +vds 2 0 -0.1 +vbs 3 0 0.0 + + +.dc vgs 0 -3.5 -0.05 vbs 0 3. 0.5 +.options Temp=-55.0 noacct + +.print dc v(2) i(vds) +.include modelcard.pmos +.end + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test14.cir b/Windows/spice/tests/bsim3/dc_sim/test14.cir new file mode 100644 index 00000000..e65eec57 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test14.cir @@ -0,0 +1,19 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Pmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 3 p1 L=0.35u W=10.0u +vgs 1 0 -3.5 +vds 2 0 -0.1 +vbs 3 0 0.0 + + +.dc vgs 0 -3.5 -0.05 vbs 0 3. 0.5 +.options Temp=100.0 noacct + +.print dc v(2) i(vds) + +.include modelcard.pmos +.end + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test2.cir b/Windows/spice/tests/bsim3/dc_sim/test2.cir new file mode 100644 index 00000000..59505042 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test2.cir @@ -0,0 +1,21 @@ +*****Single NMOS Transistor For BSIM3V3 general purpose check (Id-Vd) *** + +*** circuit description *** +m1 2 1 0 0 n1 L=0.35u W=10.0u +vgs 1 0 3.5 +vds 2 0 3.5 + + +.dc vds 0 3.5 0.05 vgs 0 3.5 0.5 +.options Temp=-55.0 noacct + +.print dc v(1) i(vds) + +.include modelcard.nmos + +.end + + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test3.cir b/Windows/spice/tests/bsim3/dc_sim/test3.cir new file mode 100644 index 00000000..3fe34d89 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test3.cir @@ -0,0 +1,21 @@ +*****Single NMOS Transistor For BSIM3V3 general purpose check (Id-Vd) *** + +*** circuit description *** +m1 2 1 0 0 n1 L=0.35u W=10.0u +vgs 1 0 3.5 +vds 2 0 3.5 + + +.dc vds 0 3.5 0.05 vgs 0 3.5 0.5 +.options Temp=100.0 noacct + +.print dc v(1) i(vds) + +.include modelcard.nmos + +.end + + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test4.cir b/Windows/spice/tests/bsim3/dc_sim/test4.cir new file mode 100644 index 00000000..dcf1e26f --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test4.cir @@ -0,0 +1,20 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Nmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 0 n1 L=0.35u W=10.0u +vgs 1 0 3.5 +vds 2 0 3.5 + +.options noacct +.dc vgs 0 3.5 0.05 vds 0.1 3.1 1 + + +.print dc v(2) i(vds) + +.include modelcard.nmos +.end + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test5.cir b/Windows/spice/tests/bsim3/dc_sim/test5.cir new file mode 100644 index 00000000..a7fc8721 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test5.cir @@ -0,0 +1,22 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Nmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 3 n1 L=0.35u W=10.0u +vgs 1 0 3.5 +vbs 3 0 0 +vds 2 0 0.1 + +.dc vgs 0 3.5 0.05 vbs 0.0 -3. -0.5 + +.options noacct +.print dc v(2) i(vds) + +.include modelcard.nmos + +.end + + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test6.cir b/Windows/spice/tests/bsim3/dc_sim/test6.cir new file mode 100644 index 00000000..71fb0cb6 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test6.cir @@ -0,0 +1,17 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Nmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 3 n1 L=0.35u W=10.0u +vgs 1 0 3.5 +vbs 3 0 0 +vds 2 0 0.1 + +.dc vgs 0 3.5 0.05 vbs 0.0 -3. -0.5 + +.options Temp=-55.0 noacct +.print dc v(2) i(vds) + +.include modelcard.nmos +.end + diff --git a/Windows/spice/tests/bsim3/dc_sim/test7.cir b/Windows/spice/tests/bsim3/dc_sim/test7.cir new file mode 100644 index 00000000..ccbd57e9 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test7.cir @@ -0,0 +1,20 @@ +*** For BSIM3V3 general purpose check (Id-Vg) for Nmosfet*** +****************************************** + +*** circuit description *** +m1 2 1 0 3 n1 L=0.35u W=10.0u +vgs 1 0 3.5 +vbs 3 0 0 +vds 2 0 0.1 + +.dc vgs 0 3.5 0.05 vbs 0.0 -3. -0.5 + +.options Temp=100.0 noacct +.print dc v(2) i(vds) +.include modelcard.nmos +.end + + + + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test8.cir b/Windows/spice/tests/bsim3/dc_sim/test8.cir new file mode 100644 index 00000000..8888bd61 --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test8.cir @@ -0,0 +1,19 @@ +*** For BSIM3V3 general purpose check (Id-Vd) for Pmosfet *** +****************************************** + +*** circuit description *** +m1 2 1 0 0 p1 L=0.35u W=10.0u +vgs 1 0 -3.5 +vds 2 0 -3.5 + +.options noacct +.dc vds 0 -3.5 -0.05 vgs 0 -3.5 -0.5 + + +.print dc v(1) i(vds) + + +.include modelcard.pmos +.end + + diff --git a/Windows/spice/tests/bsim3/dc_sim/test9.cir b/Windows/spice/tests/bsim3/dc_sim/test9.cir new file mode 100644 index 00000000..f65c75ad --- /dev/null +++ b/Windows/spice/tests/bsim3/dc_sim/test9.cir @@ -0,0 +1,19 @@ +*** For BSIM3V3 general purpose check (Id-Vd) for Pmosfet *** +****************************************** + +*** circuit description *** +m1 2 1 0 0 p1 L=0.35u W=10.0u +vgs 1 0 -3.5 +vds 2 0 -3.5 + + +.dc vds 0 -3.5 -0.05 vgs 0 -3.5 -0.5 + +.options Temp=-55 noacct +.print dc v(1) i(vds) + + +.include modelcard.pmos +.end + + diff --git a/Windows/spice/tests/bsim3/tran_sim/Makefile.am b/Windows/spice/tests/bsim3/tran_sim/Makefile.am new file mode 100644 index 00000000..54e433c4 --- /dev/null +++ b/Windows/spice/tests/bsim3/tran_sim/Makefile.am @@ -0,0 +1,13 @@ +## Process this file with automake to produce Makefile.in + +TESTS = comparator.cir \ + one-shot.cir + + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim3/tran_sim/Makefile.in b/Windows/spice/tests/bsim3/tran_sim/Makefile.in new file mode 100644 index 00000000..8b5f9f73 --- /dev/null +++ b/Windows/spice/tests/bsim3/tran_sim/Makefile.in @@ -0,0 +1,514 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim3/tran_sim +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = comparator.cir \ + one-shot.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim3/tran_sim/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim3/tran_sim/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim3/tran_sim/comparator.cir b/Windows/spice/tests/bsim3/tran_sim/comparator.cir new file mode 100644 index 00000000..8e44a171 --- /dev/null +++ b/Windows/spice/tests/bsim3/tran_sim/comparator.cir @@ -0,0 +1,40 @@ +*One Bit Comparator. Takes Two Inputs (A and B), and returns Two Ouputs - +*node 8 - (high when two signalsare equal) and node 9 (high when A is Larger Then B). +* Transient Analysis + +*circuit description + +M1 Anot A Vdd Vdd PMOS w=3.6u l=1.2u +M2 Anot A 0 0 NMOS w=1.8u l=1.2u +M3 Bnot B Vdd Vdd PMOS w=3.6u l=1.2u +M4 Bnot B 0 0 NMOS w=1.8u l=1.2u +M5 AorBnot 0 Vdd Vdd PMOS w=1.8u l=3.6u +M6 AorBnot B 1 0 NMOS w=1.8u l=1.2u +M7 1 Anot 0 0 NMOS w=1.8u l=1.2u +M8 Lnot 0 Vdd Vdd PMOS w=1.8u l=3.6u +M9 Lnot Bnot 2 0 NMOS w=1.8u l=1.2u +M10 2 A 0 0 NMOS w=1.8u l=1.2u +M11 Qnot 0 Vdd Vdd PMOS w=3.6u l=3.6u +M12 Qnot AorBnot 3 0 NMOS w=1.8u l=1.2u +M13 3 Lnot 0 0 NMOS w=1.8u l=1.2u +MQLO 8 Qnot Vdd Vdd PMOS w=3.6u l=1.2u +MQL1 8 Qnot 0 0 NMOS w=1.8u l=1.2u +MLTO 9 Lnot Vdd Vdd PMOS w=3.6u l=1.2u +MLT1 9 Lnot 0 0 NMOS w=1.8u l=1.2u +CQ Qnot 0 30f +CL Lnot 0 10f + +Vdd Vdd 0 5 +Va A 0 pulse 0 5 10ns .1ns .1ns 15ns 30ns +Vb B 0 0 + +.model nmos nmos level=8 version=3.2.2 +.model pmos pmos level=8 version=3.2.2 + +* transient analysis +.tran 1ns 60ns +.options noacct +.print tran a b v(9) v(8) + +.END + diff --git a/Windows/spice/tests/bsim3/tran_sim/one-shot.cir b/Windows/spice/tests/bsim3/tran_sim/one-shot.cir new file mode 100644 index 00000000..4e75736b --- /dev/null +++ b/Windows/spice/tests/bsim3/tran_sim/one-shot.cir @@ -0,0 +1,53 @@ +*One-shot Trigger. +*This cicruit generates a pulse of a predetermined width +*triggered by an input event. BSIM3 test. + +*A two-gate delay element +Md1 4 in Vdd Vdd PMOS w=3.6u l=1.2u +Md2 4 in 0 0 NMOS w=1.8u l=1.2u +c4 4 0 30f +Md3 A 4 Vdd Vdd PMOS w=3.6u l=1.2u +Md4 A 4 0 0 NMOS w=1.8u l=1.2u +ca a 0 30f + +*EXOR gate +*A inverter +M1 Anot A Vdd Vdd PMOS w=3.6u l=1.2u +M2 Anot A 0 0 NMOS w=1.8u l=1.2u + +M3 Bnot in Vdd Vdd PMOS w=3.6u l=1.2u +M4 Bnot in 0 0 NMOS w=1.8u l=1.2u + +M5 AorBnot 0 Vdd Vdd PMOS w=1.8u l=3.6u +M6 AorBnot in 1 0 NMOS w=1.8u l=1.2u +M7 1 Anot 0 0 NMOS w=1.8u l=1.2u + +M8 Lnot 0 Vdd Vdd PMOS w=1.8u l=3.6u +M9 Lnot Bnot 2 0 NMOS w=1.8u l=1.2u +M10 2 A 0 0 NMOS w=1.8u l=1.2u + +M11 out 0 Vdd Vdd PMOS w=3.6u l=3.6u +M12 out AorBnot 3 0 NMOS w=1.8u l=1.2u +M13 3 Lnot 0 0 NMOS w=1.8u l=1.2u +*end of EXOR gate + +Vcc vdd 0 5 +vin in 0 pulse 0 5 1ns .1ns .1ns .8ns 5ns + +.model nmos nmos level=8 version=3.2.2 +.model pmos pmos level=8 version=3.2.2 + +.tran 1ns 10ns +.print tran in out +.options noacct + +.END + + + + + + + + + diff --git a/Windows/spice/tests/bsim3soidd/Makefile.am b/Windows/spice/tests/bsim3soidd/Makefile.am new file mode 100644 index 00000000..a12504ae --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/Makefile.am @@ -0,0 +1,20 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + t3.cir \ + t4.cir \ + t5.cir \ + inv2.cir \ + RampVg2.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + nmosdd.mod \ + pmosdd.mod \ + $(TESTS) \ + $(TESTS:.cir=.out) + +EXTRA_DIST += ring51.cir lib.h + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim3soidd/Makefile.in b/Windows/spice/tests/bsim3soidd/Makefile.in new file mode 100644 index 00000000..58449324 --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/Makefile.in @@ -0,0 +1,516 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim3soidd +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + t3.cir \ + t4.cir \ + t5.cir \ + inv2.cir \ + RampVg2.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = nmosdd.mod pmosdd.mod $(TESTS) $(TESTS:.cir=.out) \ + ring51.cir lib.h +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim3soidd/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim3soidd/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim3soidd/RampVg2.cir b/Windows/spice/tests/bsim3soidd/RampVg2.cir new file mode 100644 index 00000000..dde2a26e --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/RampVg2.cir @@ -0,0 +1,19 @@ +* BSIMSOI (DD) example +* +* SOI, Ramp Vg + +Vd d 0 1.5 +Vg g 0 0.0 PULSE 0V 2V .02n .1n .1n .2n .6n +Ve e 0 0.0 +Vs s 0 0.0 +Vb b 0 0.0 + +m1 d g s e n1 w=10u l=0.25u debug=-1 + +.option gmin=1e-20 itl1=200 itl2=200 abstol=1e-9 noacct +.tran 1p 1.0ns +.print tran @m1[Vbs], V(g)/10 +.include nmosdd.mod + +.end + diff --git a/Windows/spice/tests/bsim3soidd/inv2.cir b/Windows/spice/tests/bsim3soidd/inv2.cir new file mode 100644 index 00000000..f1240e8e --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/inv2.cir @@ -0,0 +1,17 @@ +* model = BSIMSOI (DD) +* +* +* SOI Inverter - floating body + +vin in 0 dc 2.5 +vdd dd 0 dc 2.5 +vss ss 0 dc 0 +ve e 0 dc 1.25 +m1 out in dd e p1 w=20u l=0.25u +m2 out in ss e n1 w=10u l=0.25u + +.option itl1=500 gmin=1e-25 noacct +.dc vin 0 2.5 0.01 +.print dc v(in), v(out) +.include nmosdd.mod +.include pmosdd.mod diff --git a/Windows/spice/tests/bsim3soidd/lib.h b/Windows/spice/tests/bsim3soidd/lib.h new file mode 100644 index 00000000..310aa396 --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/lib.h @@ -0,0 +1,110 @@ + + +.subckt dum ss +mn1 ss ss ss ss ss n1 w=4u l=0.15u debug=1 AS=6p AD=6p PS=7u PD=7u +.ends dum + +* XOR2 +.subckt xnor2 dd ss sub A B out +mn1 T1 A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out A C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 out B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn5 C2 T1 ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 T1 A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 T1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out A C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 C3 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp5 out T1 dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends xnor2 + +.subckt nor2 dd ss sub A B out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor2 + +.subckt nand2 dd ss sub A B out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand2 + +.subckt nor3 dd ss sub A B C out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 C2 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor3 + +.subckt nand3 dd ss sub A B C out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 C2 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand3 + +.subckt nor4 dd ss sub A B C D out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 C2 C C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 C3 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor4 + +.subckt nand4 dd ss sub A B C D out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 C2 C C3 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 C3 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand4 + +.subckt inv1 dd ss sub in out +mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends inv1 + +.subckt inv5 dd ss sub in out +xinv1 dd ss sub in 1 inv1 +xinv2 dd ss sub 1 2 inv1 +xinv3 dd ss sub 2 3 inv1 +xinv4 dd ss sub 3 4 inv1 +xinv5 dd ss sub 4 out inv1 +.ends inv5 + +.subckt inv25 dd ss sub in out +xinv1 dd ss sub in 1 inv5 +xinv2 dd ss sub 1 2 inv5 +xinv3 dd ss sub 2 3 inv5 +xinv4 dd ss sub 3 4 inv5 +xinv5 dd ss sub 4 out inv5 +.ends inv25 + +.subckt inv125 dd ss sub in out +xinv1 dd ss sub in 1 inv25 +xinv2 dd ss sub 1 2 inv25 +xinv3 dd ss sub 2 3 inv25 +xinv4 dd ss sub 3 4 inv25 +xinv5 dd ss sub 4 out inv25 +.ends inv125 + +.subckt inv625 dd ss sub in out +xinv1 dd ss sub in 1 inv125 +xinv2 dd ss sub 1 2 inv125 +xinv3 dd ss sub 2 3 inv125 +xinv4 dd ss sub 3 4 inv125 +xinv5 dd ss sub 4 out inv125 +.ends inv625 diff --git a/Windows/spice/tests/bsim3soidd/nmosdd.mod b/Windows/spice/tests/bsim3soidd/nmosdd.mod new file mode 100644 index 00000000..c53fe206 --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/nmosdd.mod @@ -0,0 +1,39 @@ +*Model Card for BSIMDD2.0, floating body DD SOI NMOS +*Released on 2/15/99 +.Model N1 NMOS Level= 56 ++TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 ++MOBMOD = 0 CAPMOD = 3 SHMOD = 0 ++PARAMCHK=0 WINT = 0 LINT = -2E-08 ++VTH0 = .52 K1 = .39 K2 = .1 K3 = 0 ++KB1 = .95 K3B = 2.2 NLX = 7.2E-08 ++DVT0 = .55 DVT1 = .28 DVT2 = -1.4 ++DVT0W = 0 DVT1W = 0 DVT2W = 0 ++NCH = 3.3E+17 NSUB = 1E+15 NGATE = 1E+20 ++DVBD0 = 60.0 DVBD1 = 1.1 VBSA = 0.0 ++KB3 = 2.2 DELP = 0.02 ++ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 ++KBJT1 = 1.0E-08 EDL = .0000005 ++NDIODE = 1.13 NTUN = 14.0 ++ISBJT = 2e-6 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 1e-5 ++XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 ++U0 = 352 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 ++W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 ++B0 = .01 B1 = 10 ++RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 ++RBODY = 0.0 RBSH = 0.0 ++A0 = 1.4 KETA = -.67 VSAT = 135000 ++DWG = 0 DWB = 0 ++ALPHA0 = 0.0 ALPHA1 = 1.5 BETA0 = 20.5 ++AII = 1.2 BII = 0.1e-7 CII = 0.8 DII = 0.6 ++VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 ++CDSCD = 0 CIT = 0 ++PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 ++PDIBLCB = -.234 DROUT = .2 ++DELTA = .01 ETA0 = .01 ETAB = 0 ++DSUB = .3 RTH0 = .006 ++CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 ++CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 ++KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 ++UC1 = -5.6E-11 PRT = 760 AT = 22400 ++CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 ++ASD = 0.3 CSDESW = 1e-12 diff --git a/Windows/spice/tests/bsim3soidd/pmosdd.mod b/Windows/spice/tests/bsim3soidd/pmosdd.mod new file mode 100644 index 00000000..4cf2f135 --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/pmosdd.mod @@ -0,0 +1,39 @@ +*Model Card for BSIMDD2.0, floating body DD SOI PMOS +*Released on 2/15/99 +.Model P1 PMOS Level= 56 ++TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 ++MOBMOD = 2 CAPMOD = 3 SHMOD = 0 ++WINT = 0 LINT = -2E-08 ++VTH0 = -.52 K1 = .39 K2 = .1 K3 = 0 ++KB1 = .95 K3B = 2.2 NLX = 7.2E-08 ++DVT0 = .55 DVT1 = .28 DVT2 = -1.4 ++DVT0W = 0 DVT1W = 0 DVT2W = 0 ++NCH = 3.0E+17 NSUB = 1E+15 NGATE = 1E+20 ++DVBD0 = 60.0 DVBD1 = 1.1 VBSA = -0.2 ++KB3 = 2.2 DELP = 0.02 ++ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 ++KBJT1 = 1.0E-08 EDL = .0000005 ++NDIODE = 1.13 NTUN = 14.0 ++ISBJT = 0.0 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 0.0 ++XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 ++U0 = 145 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 ++W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 ++B0 = .01 B1 = 10 ++RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 ++RBODY = 0.0 RBSH = 0.0 ++A0 = 1.4 KETA = -.67 VSAT = 75000 ++DWG = 0 DWB = 0 ++ALPHA0 = 0.0 ALPHA1 = 1e-4 BETA0 = 19 ++AII = 1.25 BII = 0.1e-7 CII = 0.8 DII = 0.6 ++VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 ++CDSCD = 0 CIT = 0 ++PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 ++PDIBLCB = -.234 DROUT = .2 ++DELTA = .01 ETA0 = .01 ETAB = 0 ++DSUB = .3 RTH0 = .006 ++CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 ++CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 ++KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 ++UC1 = -5.6E-11 PRT = 760 AT = 22400 ++CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 ++ASD = 0.3 CSDESW = 1e-12 diff --git a/Windows/spice/tests/bsim3soidd/ring51.cir b/Windows/spice/tests/bsim3soidd/ring51.cir new file mode 100644 index 00000000..d777727e --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/ring51.cir @@ -0,0 +1,23 @@ +* 51 stage Ring-Osc. + +vin in out 2 pulse 2 0 0.1n 5n 1 1 1 +vdd dd 0 dc 0 pulse 0 2 0 1n 1 1 1 +vss ss 0 dc 0 +ve sub 0 dc 0 + +xinv1 dd ss sub in out25 inv25 +xinv2 dd ss sub out25 out50 inv25 +xinv5 dd ss sub out50 out inv1 +xinv11 dd ss sub out buf inv1 +cout buf ss 1pF + +xdum ss dum + +.option itl1=500 gmin=1e-15 itl4=10 noacct +*.dc vdd 0 2 0.01 +.tran 0.2n 50n + +.include nmosdd.mod +.include pmosdd.mod +.include lib.h +.end diff --git a/Windows/spice/tests/bsim3soidd/t3.cir b/Windows/spice/tests/bsim3soidd/t3.cir new file mode 100644 index 00000000..4faf0c7d --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/t3.cir @@ -0,0 +1,18 @@ +*model = BSIMSOI (DD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, floating body simulation + +vd d 0 dc 1.5 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 + + +m1 d g s e n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vd 0 3 0.01 vg 0.5 3 0.5 +.print dc v(g), i(vs) +.include nmosdd.mod + diff --git a/Windows/spice/tests/bsim3soidd/t4.cir b/Windows/spice/tests/bsim3soidd/t4.cir new file mode 100644 index 00000000..a30c4cc6 --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/t4.cir @@ -0,0 +1,17 @@ +*model = BSIMSOI (DD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, tied body simulation + +vd d 0 dc 0.05 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 +vb b 0 dc 0 + +m1 d g s e b n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vg 0 1.5 0.01 vb -0.3 0.5 0.1 +.print dc i(vs) +.include nmosdd.mod diff --git a/Windows/spice/tests/bsim3soidd/t5.cir b/Windows/spice/tests/bsim3soidd/t5.cir new file mode 100644 index 00000000..54e36843 --- /dev/null +++ b/Windows/spice/tests/bsim3soidd/t5.cir @@ -0,0 +1,16 @@ +*model = BSIMSOI (DD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, floating body simulation + +vd d 0 dc 0.05 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 + +m1 d g s e n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vg 0 1.5 0.01 ve -4 4 1 +.print dc i(vs) +.include nmosdd.mod diff --git a/Windows/spice/tests/bsim3soifd/Makefile.am b/Windows/spice/tests/bsim3soifd/Makefile.am new file mode 100644 index 00000000..b1c55f51 --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/Makefile.am @@ -0,0 +1,20 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + t3.cir \ + t4.cir \ + t5.cir \ + inv2.cir \ + RampVg2.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + nmosfd.mod \ + pmosfd.mod \ + $(TESTS) \ + $(TESTS:.cir=.out) + +EXTRA_DIST += ring51.cir lib.h + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim3soifd/Makefile.in b/Windows/spice/tests/bsim3soifd/Makefile.in new file mode 100644 index 00000000..b0f1e9e4 --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/Makefile.in @@ -0,0 +1,516 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim3soifd +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + t3.cir \ + t4.cir \ + t5.cir \ + inv2.cir \ + RampVg2.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = nmosfd.mod pmosfd.mod $(TESTS) $(TESTS:.cir=.out) \ + ring51.cir lib.h +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim3soifd/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim3soifd/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim3soifd/RampVg2.cir b/Windows/spice/tests/bsim3soifd/RampVg2.cir new file mode 100644 index 00000000..c8883d22 --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/RampVg2.cir @@ -0,0 +1,19 @@ +* BSIMSOI (FD) example +* +* SOI, Ramp Vg + +Vd d 0 1.5 +Vg g 0 0.0 PULSE 0V 2V .02n .1n .1n .2n .6n +Ve e 0 0.0 +Vs s 0 0.0 +Vb b 0 0.0 + +m1 d g s e n1 w=10u l=0.25u debug=-1 + +.option gmin=1e-20 itl1=200 itl2=200 abstol=1e-9 noacct +.tran 1p 1.0ns +.print tran @m1[Vbs], V(g)/10 +.include nmosfd.mod + +.end + diff --git a/Windows/spice/tests/bsim3soifd/inv2.cir b/Windows/spice/tests/bsim3soifd/inv2.cir new file mode 100644 index 00000000..9628572f --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/inv2.cir @@ -0,0 +1,17 @@ +* model = BSIMSOI (FD) +* +* +* SOI Inverter - floating body + +vin in 0 dc 2.5 +vdd dd 0 dc 2.5 +vss ss 0 dc 0 +ve e 0 dc 1.25 +m1 out in dd e p1 w=20u l=0.25u +m2 out in ss e n1 w=10u l=0.25u + +.option itl1=500 gmin=1e-25 noacct +.dc vin 0 2.5 0.01 +.print dc v(in), v(out) +.include nmosfd.mod +.include pmosfd.mod diff --git a/Windows/spice/tests/bsim3soifd/lib.h b/Windows/spice/tests/bsim3soifd/lib.h new file mode 100644 index 00000000..310aa396 --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/lib.h @@ -0,0 +1,110 @@ + + +.subckt dum ss +mn1 ss ss ss ss ss n1 w=4u l=0.15u debug=1 AS=6p AD=6p PS=7u PD=7u +.ends dum + +* XOR2 +.subckt xnor2 dd ss sub A B out +mn1 T1 A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out A C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 out B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn5 C2 T1 ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 T1 A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 T1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out A C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 C3 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp5 out T1 dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends xnor2 + +.subckt nor2 dd ss sub A B out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor2 + +.subckt nand2 dd ss sub A B out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand2 + +.subckt nor3 dd ss sub A B C out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 C2 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor3 + +.subckt nand3 dd ss sub A B C out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 C2 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand3 + +.subckt nor4 dd ss sub A B C D out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 C2 C C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 C3 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor4 + +.subckt nand4 dd ss sub A B C D out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 C2 C C3 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 C3 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand4 + +.subckt inv1 dd ss sub in out +mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends inv1 + +.subckt inv5 dd ss sub in out +xinv1 dd ss sub in 1 inv1 +xinv2 dd ss sub 1 2 inv1 +xinv3 dd ss sub 2 3 inv1 +xinv4 dd ss sub 3 4 inv1 +xinv5 dd ss sub 4 out inv1 +.ends inv5 + +.subckt inv25 dd ss sub in out +xinv1 dd ss sub in 1 inv5 +xinv2 dd ss sub 1 2 inv5 +xinv3 dd ss sub 2 3 inv5 +xinv4 dd ss sub 3 4 inv5 +xinv5 dd ss sub 4 out inv5 +.ends inv25 + +.subckt inv125 dd ss sub in out +xinv1 dd ss sub in 1 inv25 +xinv2 dd ss sub 1 2 inv25 +xinv3 dd ss sub 2 3 inv25 +xinv4 dd ss sub 3 4 inv25 +xinv5 dd ss sub 4 out inv25 +.ends inv125 + +.subckt inv625 dd ss sub in out +xinv1 dd ss sub in 1 inv125 +xinv2 dd ss sub 1 2 inv125 +xinv3 dd ss sub 2 3 inv125 +xinv4 dd ss sub 3 4 inv125 +xinv5 dd ss sub 4 out inv125 +.ends inv625 diff --git a/Windows/spice/tests/bsim3soifd/nmosfd.mod b/Windows/spice/tests/bsim3soifd/nmosfd.mod new file mode 100644 index 00000000..af6665fd --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/nmosfd.mod @@ -0,0 +1,39 @@ +*Model Card for BSIMFD2.0, floating body FD SOI NMOS +*Released on 2/15/99 +.Model N1 NMOS Level= 55 ++TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 ++MOBMOD = 0 CAPMOD = 3 SHMOD = 0 ++PARAMCHK=0 WINT = 0 LINT = -2E-08 ++VTH0 = .52 K1 = .39 K2 = .1 K3 = 0 ++KB1 = .95 K3B = 2.2 NLX = 7.2E-08 ++DVT0 = .55 DVT1 = .28 DVT2 = -1.4 ++DVT0W = 0 DVT1W = 0 DVT2W = 0 ++NCH = 3.3E+17 NSUB = 1E+15 NGATE = 1E+20 ++DVBD0 = 60.0 DVBD1 = 1.1 VBSA = 0.0 ++KB3 = 2.2 DELP = 0.02 ++ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 ++KBJT1 = 1.0E-08 EDL = .0000005 ++NDIODE = 1.13 NTUN = 14.0 ++ISBJT = 2e-6 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 1e-5 ++XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 ++U0 = 352 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 ++W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 ++B0 = .01 B1 = 10 ++RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 ++RBODY = 0.0 RBSH = 0.0 ++A0 = 1.4 KETA = -.67 VSAT = 135000 ++DWG = 0 DWB = 0 ++ALPHA0 = 0.0 ALPHA1 = 1.5 BETA0 = 20.5 ++AII = 1.2 BII = 0.1e-7 CII = 0.8 DII = 0.6 ++VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 ++CDSCD = 0 CIT = 0 ++PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 ++PDIBLCB = -.234 DROUT = .2 ++DELTA = .01 ETA0 = .01 ETAB = 0 ++DSUB = .3 RTH0 94 = .006 ++CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 ++CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 ++KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 ++UC1 = -5.6E-11 PRT = 760 AT = 22400 ++CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 ++ASD = 0.3 CSDESW = 1e-12 diff --git a/Windows/spice/tests/bsim3soifd/pmosfd.mod b/Windows/spice/tests/bsim3soifd/pmosfd.mod new file mode 100644 index 00000000..d033570c --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/pmosfd.mod @@ -0,0 +1,39 @@ +*Model Card for BSIMFD2.0, floating body FD SOI PMOS +*Released on 2/15/99 +.Model P1 PMOS Level= 55 ++TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 ++MOBMOD = 2 CAPMOD = 3 SHMOD = 0 ++WINT = 0 LINT = -2E-08 ++VTH0 = -.52 K1 = .39 K2 = .1 K3 = 0 ++KB1 = .95 K3B = 2.2 NLX = 7.2E-08 ++DVT0 = .55 DVT1 = .28 DVT2 = -1.4 ++DVT0W = 0 DVT1W = 0 DVT2W = 0 ++NCH = 3.0E+17 NSUB = 1E+15 NGATE = 1E+20 ++DVBD0 = 60.0 DVBD1 = 1.1 VBSA = -0.2 ++KB3 = 2.2 DELP = 0.02 ++ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 ++KBJT1 = 1.0E-08 EDL = .0000005 ++NDIODE = 1.13 NTUN = 14.0 ++ISBJT = 0.0 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 0.0 ++XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 ++U0 = 145 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 ++W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 ++B0 = .01 B1 = 10 ++RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 ++RBODY = 0.0 RBSH = 0.0 ++A0 = 1.4 KETA = -.67 VSAT = 75000 ++DWG = 0 DWB = 0 ++ALPHA0 = 0.0 ALPHA1 = 1e-4 BETA0 = 19 ++AII = 1.25 BII = 0.1e-7 CII = 0.8 DII = 0.6 ++VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 ++CDSCD = 0 CIT = 0 ++PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 ++PDIBLCB = -.234 DROUT = .2 ++DELTA = .01 ETA0 = .01 ETAB = 0 ++DSUB = .3 RTH0 = .006 ++CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 ++CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 ++KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 ++UC1 = -5.6E-11 PRT = 760 AT = 22400 ++CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 ++ASD = 0.3 CSDESW = 1e-12 diff --git a/Windows/spice/tests/bsim3soifd/ring51.cir b/Windows/spice/tests/bsim3soifd/ring51.cir new file mode 100644 index 00000000..958b0951 --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/ring51.cir @@ -0,0 +1,23 @@ +* 51 stage Ring-Osc. + +vin in out 2 pulse 2 0 0.1n 5n 1 1 1 +vdd dd 0 dc 0 pulse 0 2 0 1n 1 1 1 +vss ss 0 dc 0 +ve sub 0 dc 0 + +xinv1 dd ss sub in out25 inv25 +xinv2 dd ss sub out25 out50 inv25 +xinv5 dd ss sub out50 out inv1 +xinv11 dd ss sub out buf inv1 +cout buf ss 1pF + +xdum ss dum + +.option itl1=500 gmin=1e-15 itl4=10 noacct +*.dc vdd 0 2 0.01 +.tran 0.2n 50n + +.include nmosfd.mod +.include pmosfd.mod +.include lib.h +.end diff --git a/Windows/spice/tests/bsim3soifd/t3.cir b/Windows/spice/tests/bsim3soifd/t3.cir new file mode 100644 index 00000000..84692212 --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/t3.cir @@ -0,0 +1,18 @@ +*model = BSIMSOI (FD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, floating body simulation + +vd d 0 dc 1.5 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 + + +m1 d g s e n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vd 0 3 0.01 vg 0.5 3 0.5 +.print dc v(g), i(vs) +.include nmosfd.mod + diff --git a/Windows/spice/tests/bsim3soifd/t4.cir b/Windows/spice/tests/bsim3soifd/t4.cir new file mode 100644 index 00000000..54a9794b --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/t4.cir @@ -0,0 +1,17 @@ +*model = BSIMSOI (FD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, tied body simulation + +vd d 0 dc 0.05 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 +vb b 0 dc 0 + +m1 d g s e b n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vg 0 1.5 0.01 vb -0.3 0.5 0.1 +.print dc i(vs) +.include nmosfd.mod diff --git a/Windows/spice/tests/bsim3soifd/t5.cir b/Windows/spice/tests/bsim3soifd/t5.cir new file mode 100644 index 00000000..5969f224 --- /dev/null +++ b/Windows/spice/tests/bsim3soifd/t5.cir @@ -0,0 +1,16 @@ +*model = BSIMSOI (FD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, floating body simulation + +vd d 0 dc 0.05 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 + +m1 d g s e n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vg 0 1.5 0.01 ve -4 4 1 +.print dc i(vs) +.include nmosfd.mod diff --git a/Windows/spice/tests/bsim3soipd/Makefile.am b/Windows/spice/tests/bsim3soipd/Makefile.am new file mode 100644 index 00000000..9ab5c91b --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/Makefile.am @@ -0,0 +1,20 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + t3.cir \ + t4.cir \ + t5.cir \ + inv2.cir \ + RampVg2.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + nmospd.mod \ + pmospd.mod \ + $(TESTS) \ + $(TESTS:.cir=.out) + +EXTRA_DIST += ring51.cir lib.h + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/bsim3soipd/Makefile.in b/Windows/spice/tests/bsim3soipd/Makefile.in new file mode 100644 index 00000000..e5f766b5 --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/Makefile.in @@ -0,0 +1,516 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/bsim3soipd +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + t3.cir \ + t4.cir \ + t5.cir \ + inv2.cir \ + RampVg2.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = nmospd.mod pmospd.mod $(TESTS) $(TESTS:.cir=.out) \ + ring51.cir lib.h +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bsim3soipd/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/bsim3soipd/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/bsim3soipd/RampVg2.cir b/Windows/spice/tests/bsim3soipd/RampVg2.cir new file mode 100644 index 00000000..72d46a2b --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/RampVg2.cir @@ -0,0 +1,20 @@ +* BSIMSOI (PD) example +* +* SOI, Ramp Vg + +Vd d 0 1.5 +Vg g 0 0.0 PULSE 0V 2V .02n .1n .1n .2n .6n +Ve e 0 0.0 +Vs s 0 0.0 +Vb b 0 0.0 + +m1 d g s e n1 w=10u l=0.25u debug=-1 + +.option gmin=1e-20 itl1=200 itl2=200 abstol=1e-9 noacct +.tran 1p 1.0ns +.save @m1[Vbs], V(g)/10 +.print tran v(g)/10 +.include nmospd.mod + +.end + diff --git a/Windows/spice/tests/bsim3soipd/inv2.cir b/Windows/spice/tests/bsim3soipd/inv2.cir new file mode 100644 index 00000000..51f3aa8a --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/inv2.cir @@ -0,0 +1,17 @@ +* model = BSIMSOI (PD) +* +* +* SOI Inverter - floating body + +vin in 0 dc 2.5 +vdd dd 0 dc 2.5 +vss ss 0 dc 0 +ve e 0 dc 1.25 +m1 out in dd e p1 w=20u l=0.25u +m2 out in ss e n1 w=10u l=0.25u + +.option itl1=500 gmin=1e-25 noacct +.dc vin 0 2.5 0.01 +.print dc v(in), v(out) +.include nmospd.mod +.include pmospd.mod diff --git a/Windows/spice/tests/bsim3soipd/lib.h b/Windows/spice/tests/bsim3soipd/lib.h new file mode 100644 index 00000000..310aa396 --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/lib.h @@ -0,0 +1,110 @@ + + +.subckt dum ss +mn1 ss ss ss ss ss n1 w=4u l=0.15u debug=1 AS=6p AD=6p PS=7u PD=7u +.ends dum + +* XOR2 +.subckt xnor2 dd ss sub A B out +mn1 T1 A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out A C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 out B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn5 C2 T1 ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 T1 A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 T1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out A C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 C3 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp5 out T1 dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends xnor2 + +.subckt nor2 dd ss sub A B out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor2 + +.subckt nand2 dd ss sub A B out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand2 + +.subckt nor3 dd ss sub A B C out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 C2 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor3 + +.subckt nand3 dd ss sub A B C out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 C2 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand3 + +.subckt nor4 dd ss sub A B C D out +mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 C2 C C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 C3 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nor4 + +.subckt nand4 dd ss sub A B C D out +mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn3 C2 C C3 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mn4 C3 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +mp4 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends nand4 + +.subckt inv1 dd ss sub in out +mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u +mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u +.ends inv1 + +.subckt inv5 dd ss sub in out +xinv1 dd ss sub in 1 inv1 +xinv2 dd ss sub 1 2 inv1 +xinv3 dd ss sub 2 3 inv1 +xinv4 dd ss sub 3 4 inv1 +xinv5 dd ss sub 4 out inv1 +.ends inv5 + +.subckt inv25 dd ss sub in out +xinv1 dd ss sub in 1 inv5 +xinv2 dd ss sub 1 2 inv5 +xinv3 dd ss sub 2 3 inv5 +xinv4 dd ss sub 3 4 inv5 +xinv5 dd ss sub 4 out inv5 +.ends inv25 + +.subckt inv125 dd ss sub in out +xinv1 dd ss sub in 1 inv25 +xinv2 dd ss sub 1 2 inv25 +xinv3 dd ss sub 2 3 inv25 +xinv4 dd ss sub 3 4 inv25 +xinv5 dd ss sub 4 out inv25 +.ends inv125 + +.subckt inv625 dd ss sub in out +xinv1 dd ss sub in 1 inv125 +xinv2 dd ss sub 1 2 inv125 +xinv3 dd ss sub 2 3 inv125 +xinv4 dd ss sub 3 4 inv125 +xinv5 dd ss sub 4 out inv125 +.ends inv625 diff --git a/Windows/spice/tests/bsim3soipd/nmospd.mod b/Windows/spice/tests/bsim3soipd/nmospd.mod new file mode 100644 index 00000000..e0710b2e --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/nmospd.mod @@ -0,0 +1,40 @@ +*Model Card for BSIMPD2.0 +* Lmin= .2 Lmax= .8 Wmin= 2.8 Wmax= 2.8 +.Model N1 NMOS Level= 57 ++TNOM = 27 TOX = 4.5E-09 TSI = .0000001 TBOX = 8E-08 ++MOBMOD = 0 CAPMOD = 2 SHMOD =0 ++PARAMCHK=0 WINT = 0 LINT = -2E-08 ++VTH0 = .42 K1 = .49 K2 = .1 K3 = 0 ++K3B = 2.2 NLX = 2E-7 ++DVT0 = 10 DVT1 = .55 DVT2 = -1.4 ++DVT0W = 0 DVT1W = 0 DVT2W = 0 ++NCH = 4.7E+17 NSUB = -1E+15 NGATE = 1E+20 ++AGIDL=1e-15 BGIDL=1e9 NGIDL=1.1 ++NDIODE = 1.13 NTUN = 14.0 NRECF0=2.5 NRECR0=4 ++VREC0=1.2 NTRECF=.1 NTRECR=.2 ++ISBJT = 1e-4 ISDIF = 1e-5 ISTUN = 2e-5 ISREC = 4e-2 ++XBJT = .9 XDIF = .9 XREC = .9 XTUN = 0.01 ++AHLI=1e-9 LBJT0=0.2e-6 LN=2e-6 ++NBJT=.8 NDIF=-1 AELY=1e8 VABJT=0 ++U0 = 352 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 ++W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 ++B0 = .01 B1 = 10 ++RDSW = 0 PRWG = 0 PRWB = -.2 WR = 1 ++RBODY = 1e0 RBSH = 0.0 ++A0 = 1.4 KETA = 0.1 KETAS = 0.2 VSAT = 135000 ++DWG = 0 DWB = 0 ++ALPHA0 = 1e-8 BETA0 = 0 BETA1 = 0.05 BETA2 = 0.07 ++VDSATII0 = .8 ESATII = 1e7 ++VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 ++CDSCD = 0 CIT = 0 ++PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 ++PDIBLCB = -.234 DROUT = .2 ++DELTA = .01 ETA0 = .05 ETAB = 0 ++DSUB = .2 RTH0 = .005 ++CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 ++CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 ++KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 ++UC1 = -5.6E-11 PRT = 760 AT = 22400 ++CGSO = 1e-10 CGDO = 1e-10 CJSWG = 1e-12 TT=3e-10 ++ASD = 0.3 CSDESW = 1e-12 ++TCJSWG=1e-4 MJSWG=.5 PBSWG=1 diff --git a/Windows/spice/tests/bsim3soipd/pmospd.mod b/Windows/spice/tests/bsim3soipd/pmospd.mod new file mode 100644 index 00000000..9fe7d714 --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/pmospd.mod @@ -0,0 +1,40 @@ +*Model Card for BSIMPD2.0 +* Lmin= .2 Lmax= .8 Wmin= 2.8 Wmax= 2.8 +.Model P1 PMOS Level= 57 ++TNOM = 27 TOX = 4.5E-09 TSI = .0000001 TBOX = 8E-08 ++MOBMOD = 2 CAPMOD = 2 SHMOD = 0 ++WINT = 0 LINT = -2E-08 ++VTH0 = -.42 K1 = .49 K2 = .1 K3 = 0 ++K3B = 2.2 NLX = 2E-07 ++DVT0 = 10 DVT1 = .55 DVT2 = -1.4 ++DVT0W = 0 DVT1W = 0 DVT2W = 0 ++NCH = 4.7E+17 NSUB = -1E+15 NGATE = 1E+20 ++AGIDL=1e-16 BGIDL=1e9 NGIDL=1.1 ++NDIODE = 1.13 NTUN = 14.0 NRECF0=2.5 NRECR0=4 ++VREC0=1.2 NTRECF=.1 NTRECR=.2 ++ISBJT = 1e-4 ISDIF = 1e-5 ISTUN = 2e-5 ISREC = 4e-2 ++XBJT = .9 XDIF = .9 XREC = .9 XTUN = 0.01 ++AHLI=1e-9 LBJT0=0.2e-6 LN=2e-6 ++NBJT=.8 NDIF=-1 AELY=1e8 VABJT=0 ++U0 = 145 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 ++W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 ++B0 = .01 B1 = 10 ++RDSW = 350 PRWG = 0 PRWB = -.2 WR = 1 ++RBODY = 1e0 RBSH = 0.0 ++A0 = 1.4 KETA = 0.1 KETAS = 0.2 VSAT = 75000 ++DWG = 0 DWB = 0 ++ALPHA0 = 1e-8 BETA0 = 0 BETA1 = 0.05 BETA2 = 0.07 ++VDSATII0 = 1.6 ESATII = 1e7 ++VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 ++CDSCD = 0 CIT = 0 ++PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 ++PDIBLCB = -.234 DROUT = .2 ++DELTA = .01 ETA0 = .05 ETAB = 0 ++DSUB = .2 RTH0 = .005 ++CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 ++CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 ++KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 ++UC1 = -5.6E-11 PRT = 760 AT = 22400 ++CGSO = 1e-10 CGDO = 1e-10 CJSWG = 1e-12 TT=3e-10 ++ASD = 0.3 CSDESW = 1e-12 ++TCJSWG=1e-4 MJSWG=.5 PBSWG=1 diff --git a/Windows/spice/tests/bsim3soipd/ring51.cir b/Windows/spice/tests/bsim3soipd/ring51.cir new file mode 100644 index 00000000..8fa16979 --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/ring51.cir @@ -0,0 +1,26 @@ +* 51 stage Ring-Osc. (PD) + +vin in out 2 pulse 2 0 0.1n 5n 1 1 1 +vdd dd 0 dc 0 pulse 0 2 0 1n 1 1 1 +vss ss 0 dc 0 +ve sub 0 dc 0 + +xinv1 dd ss sub in out25 inv25 +xinv2 dd ss sub out25 out50 inv25 +xinv5 dd ss sub out50 out inv1 +xinv11 dd ss sub out buf inv1 +cout buf ss 1pF + +xdum ss dum + +.option itl1=500 gmin=1e-15 itl4=10 noacct +.dc vdd 0 2 0.01 +.tran 0.2n 50n + +.print dc v(out) +.print tran v(out) + +.include nmospd.mod +.include pmospd.mod +.include lib.h +.end diff --git a/Windows/spice/tests/bsim3soipd/t3.cir b/Windows/spice/tests/bsim3soipd/t3.cir new file mode 100644 index 00000000..39d0f78e --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/t3.cir @@ -0,0 +1,18 @@ +*model = BSIMSOI (PD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, floating body simulation + +vd d 0 dc 1.5 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 + + +m1 d g s e n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vd 0 3 0.01 vg 0.5 3 0.5 +.print dc v(g), i(vs) +.include nmospd.mod + diff --git a/Windows/spice/tests/bsim3soipd/t4.cir b/Windows/spice/tests/bsim3soipd/t4.cir new file mode 100644 index 00000000..5bc912d6 --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/t4.cir @@ -0,0 +1,18 @@ +*model = BSIMSOI (PD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, tied body simulation + +vd d 0 dc 0.05 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 +vb b 0 dc 0 + +m1 d g s e b n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vg 0 1.5 0.01 vb -0.3 0.5 0.1 +.print dc i(vs) +.include nmospd.mod + diff --git a/Windows/spice/tests/bsim3soipd/t5.cir b/Windows/spice/tests/bsim3soipd/t5.cir new file mode 100644 index 00000000..69ce3725 --- /dev/null +++ b/Windows/spice/tests/bsim3soipd/t5.cir @@ -0,0 +1,16 @@ +*model = BSIMSOI (PD) +*Berkeley Spice Compatibility +* +* SOI NMOSFET, floating body simulation + +vd d 0 dc 0.05 +vs s 0 dc 0 +ve e 0 dc 0 +vg g 0 dc 3 + +m1 d g s e n1 w=10u l=0.25u + +.option gmin=1e-25 itl1=500 noacct +.dc vg 0 1.5 0.01 ve -4 4 1 +.print dc i(vs) +.include nmospd.mod diff --git a/Windows/spice/tests/filters/Makefile.am b/Windows/spice/tests/filters/Makefile.am new file mode 100644 index 00000000..8f273be2 --- /dev/null +++ b/Windows/spice/tests/filters/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + lowpass.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/filters/Makefile.in b/Windows/spice/tests/filters/Makefile.in new file mode 100644 index 00000000..a1efe192 --- /dev/null +++ b/Windows/spice/tests/filters/Makefile.in @@ -0,0 +1,514 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/filters +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + lowpass.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/filters/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/filters/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/filters/lowpass.cir b/Windows/spice/tests/filters/lowpass.cir new file mode 100644 index 00000000..eb21b4a0 --- /dev/null +++ b/Windows/spice/tests/filters/lowpass.cir @@ -0,0 +1,13 @@ +A Simple AC Run + +.OPTIONS LIST NODE POST TRANS noacct +.OP +.AC DEC 10 1k 1Meg +.PRINT AC V(2) + +V1 1 0 DC 0 AC 1 SIN 0 1 1K 0 0 DISTOF1 0 DISTOF2 0 +R1 1 2 10k +R2 2 0 10k +C1 2 0 1n + +.END diff --git a/Windows/spice/tests/general/Makefile.am b/Windows/spice/tests/general/Makefile.am new file mode 100644 index 00000000..a6c1775d --- /dev/null +++ b/Windows/spice/tests/general/Makefile.am @@ -0,0 +1,20 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = \ + mosamp.cir \ + mosmem.cir \ + rc.cir \ + rca3040.cir \ + rtlinv.cir \ + schmitt.cir \ + diffpair.cir \ + fourbitadder.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/general/Makefile.in b/Windows/spice/tests/general/Makefile.in new file mode 100644 index 00000000..0e59e3ce --- /dev/null +++ b/Windows/spice/tests/general/Makefile.in @@ -0,0 +1,521 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/general +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + mosamp.cir \ + mosmem.cir \ + rc.cir \ + rca3040.cir \ + rtlinv.cir \ + schmitt.cir \ + diffpair.cir \ + fourbitadder.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/general/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/general/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/general/diffpair.cir b/Windows/spice/tests/general/diffpair.cir new file mode 100644 index 00000000..732d844b --- /dev/null +++ b/Windows/spice/tests/general/diffpair.cir @@ -0,0 +1,31 @@ +simple differential pair - CM and DM dc sensitivity + +* Models: +.model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) +.model qnr npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) + +.options noacct + +* Circuit description: +q1 4 2 6 qnr +q2 5 3 6 qnl +rs1 11 2 1k +rs2 3 1 1k +rc1 4 8 10k +rc2 5 8 10k +q3 7 7 9 qnl +q4 6 7 9 qnr +rbias 7 8 20k + +* Inputs/Supplies: +vcm 1 0 dc 0 sin(0 0.1 5meg) ac 1 +vdm 1 11 dc 0 sin(0 0.1 5meg) ac 1 +vcc 8 0 12 +vee 9 0 -12 + +* Analysys: +.tf v(5) vcm +.tf v(5) vdm +.sens v(5,4) + +.end diff --git a/Windows/spice/tests/general/fourbitadder.cir b/Windows/spice/tests/general/fourbitadder.cir new file mode 100644 index 00000000..d6b577df --- /dev/null +++ b/Windows/spice/tests/general/fourbitadder.cir @@ -0,0 +1,79 @@ +4 bit adder + +* Models: +.MODEL dmod D +.MODEL qmod NPN(level=1 BF=75 RB=100 CJE=1PF CJC=3PF) + +.options noacct + +.SUBCKT NAND 1 2 3 4 +* noeuds: entrees(2) sortie 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 +* noeuds entrees(2) ,carryin, sortie, carryout, 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 +* noeuds +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 + +x1 1 2 3 4 9 10 13 16 15 TWOBIT +x2 5 6 7 8 11 12 16 14 15 TWOBIT +.ends FOURBIT + + + +* Inputs/Supplies: + +vcc 99 0 DC 5V +VIN1A 1 0 DC 0 pulse(0 3 0 10ns 10ns 10ns 50ns) +VIN1B 2 0 DC 0 pulse(0 3 0 10ns 10ns 20ns 100ns) +VIN2A 3 0 DC 0 pulse(0 3 0 10ns 10ns 40ns 200ns) +VIN2B 4 0 DC 0 pulse(0 3 0 10ns 10ns 80ns 400ns) +VIN3A 5 0 DC 0 pulse(0 3 0 10ns 10ns 160ns 800ns) +VIN3B 6 0 DC 0 pulse(0 3 0 10ns 10ns 320ns 1600ns) +VIN4A 7 0 DC 0 pulse(0 3 0 10ns 10ns 640ns 3200ns) +VIN4B 8 0 DC 0 pulse(0 3 0 10ns 10ns 1280ns 6400ns) + +* Circuit description: +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 + +* Analysys: +.tran 1ns 6ns +.print tran v(1) + + +.end + + diff --git a/Windows/spice/tests/general/mosamp.cir b/Windows/spice/tests/general/mosamp.cir new file mode 100644 index 00000000..7ea28504 --- /dev/null +++ b/Windows/spice/tests/general/mosamp.cir @@ -0,0 +1,46 @@ +mosamp - mos amplifier - transient + +* The original options line (removed acct) +* .options acct abstol=10n vntol=10n + +.options abstol=10n vntol=10n noacct +.tran 0.1us 10us +m1 15 15 1 32 m w=88.9u l=25.4u +m2 1 1 2 32 m w=12.7u l=266.7u +m3 2 2 30 32 m w=88.9u l=25.4u +m4 15 5 4 32 m w=12.7u l=106.7u +m5 4 4 30 32 m w=88.9u l=12.7u +m6 15 15 5 32 m w=44.5u l=25.4u +m7 5 20 8 32 m w=482.6u l=12.7u +m8 8 2 30 32 m w=88.9u l=25.4u +m9 15 15 6 32 m w=44.5u l=25.4u +m10 6 21 8 32 m w=482.6u l=12.7u +m11 15 6 7 32 m w=12.7u l=106.7u +m12 7 4 30 32 m w=88.9u l=12.7u +m13 15 10 9 32 m w=139.7u l=12.7u +m14 9 11 30 32 m w=139.7u l=12.7u +m15 15 15 12 32 m w=12.7u l=207.8u +m16 12 12 11 32 m w=54.1u l=12.7u +m17 11 11 30 32 m w=54.1u l=12.7u +m18 15 15 10 32 m w=12.7u l=45.2u +m19 10 12 13 32 m w=270.5u l=12.7u +m20 13 7 30 32 m w=270.5u l=12.7u +m21 15 10 14 32 m w=254u l=12.7u +m22 14 11 30 32 m w=241.3u l=12.7u +m23 15 20 16 32 m w=19u l=38.1u +m24 16 14 30 32 m w=406.4u l=12.7u +m25 15 15 20 32 m w=38.1u l=42.7u +m26 20 16 30 32 m w=381u l=25.4u +m27 20 15 66 32 m w=22.9u l=7.6u +cc 7 9 40pf +cl 66 0 70pf +vin 21 0 pulse(0 5 1ns 1ns 1ns 5us 10us) +vccp 15 0 dc +15 +vddn 30 0 dc -15 +vb 32 0 dc -20 +.model m nmos(nsub=2.2e15 uo=575 ucrit=49k uexp=0.1 tox=0.11u xj=2.95u ++ level=2 cgso=1.5n cgdo=1.5n cbd=4.5f cbs=4.5f ld=2.4485u nss=3.2e10 ++ kp=2e-5 phi=0.6 ) +.print tran v(20) v(66) +.plot tran v(20) v(66) +.end diff --git a/Windows/spice/tests/general/mosmem.cir b/Windows/spice/tests/general/mosmem.cir new file mode 100644 index 00000000..2a55bd9c --- /dev/null +++ b/Windows/spice/tests/general/mosmem.cir @@ -0,0 +1,31 @@ +mosmem - mos memory cell +.width in=72 +.opt abstol=1u + +.opt list node noacct +* The original line is below +*.opt acct list node + +.tran 20ns 2us +vdd 9 0 dc 5 +vs 7 0 pulse(2 0 520ns 20ns 20ns 500ns 2000ns) +vw 1 0 pulse(0 2 20ns 20ns 500ns 200ns 2000ns) +vwb 2 0 pulse(2 0 20ns 20ns 20ns 2000ns 2000ns) +m1 3 1 0 0 mod w=250u l=5u +m2 4 2 0 0 mod w=250u l=5u +m3 9 9 3 0 mod w=5u l=5u +m4 9 9 4 0 mod w=5u l=5u +m5 5 7 3 0 mod w=50u l=5u +m6 6 7 4 0 mod w=50u l=5u +m7 5 6 0 0 mod w=250u l=5u +m8 6 5 0 0 mod w=250u l=5u +m9 9 9 5 0 mod w=5u l=5u +m10 9 9 6 0 mod w=5u l=5u +m11 8 4 0 0 mod w=250u l=5u +m12 9 9 8 0 mod w=5u l=5u +.model mod nmos(vto=0.5 phi=0.7 kp=1.0e-6 gamma=1.83 lambda=0.115 ++ level=1 cgso=1u cgdo=1u cbd=50p cbs=50p) +.print dc v(5) v(6) +.plot dc v(6) +.plot tran v(6) v(5) v(7) v(1) v(2) +.end diff --git a/Windows/spice/tests/general/rc.cir b/Windows/spice/tests/general/rc.cir new file mode 100644 index 00000000..6f79d4b8 --- /dev/null +++ b/Windows/spice/tests/general/rc.cir @@ -0,0 +1,11 @@ +Basic RC circuit +r 1 2 1.0 +*l 1 2 1.0 +c 2 0 1.0 +vin 1 0 pulse (0 1) ac 1 +.options noacct +.tran 0.1 7.0 +*.ac dec 10 .01 10 +.plot tran v(2) i(vin) +*.plot ac vdb(2) xlog +.end diff --git a/Windows/spice/tests/general/rca3040.cir b/Windows/spice/tests/general/rca3040.cir new file mode 100644 index 00000000..d5323916 --- /dev/null +++ b/Windows/spice/tests/general/rca3040.cir @@ -0,0 +1,34 @@ +rca3040 ckt - rca 3040 wideband amplifier +.options noacct +.ac dec 10 1 10ghz +.dc vin -0.25 0.25 0.005 +.tran 2.0ns 200ns +vin 1 0 sin(0 0.1 50meg 0.5ns) ac 1 +vcc 2 0 15.0 +vee 3 0 -15.0 +rs1 30 1 1k +rs2 31 0 1k +r1 5 3 4.8k +r2 6 3 4.8k +r3 9 3 811 +r4 8 3 2.17k +r5 8 0 820 +r6 2 14 1.32k +r7 2 12 4.5k +r8 2 15 1.32k +r9 16 0 5.25k +r10 17 0 5.25k +q1 2 30 5 qnl +q2 2 31 6 qnl +q3 10 5 7 qnl +q4 11 6 7 qnl +q5 14 12 10 qnl +q6 15 12 11 qnl +q7 12 12 13 qnl +q8 13 13 0 qnl +q9 7 8 9 qnl +q10 2 15 16 qnl +q11 2 14 17 qnl +.model qnl npn level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf ++ cjc=2pf va=50 +.end diff --git a/Windows/spice/tests/general/rtlinv.cir b/Windows/spice/tests/general/rtlinv.cir new file mode 100644 index 00000000..2fee0617 --- /dev/null +++ b/Windows/spice/tests/general/rtlinv.cir @@ -0,0 +1,24 @@ +rtlinv ckt - cascaded rtl inverters +.width in=72 + +.opt list node lvlcod=2 noacct +* The original line is below +*.opt acct list node lvlcod=2 + +.dc vin 0.0 2.5 0.025 +.tran 2ns 200ns +vcc 6 0 5 +vin 1 0 pulse(0 5 2ns 2ns 2ns 80ns) +rb1 1 2 10k +rc1 6 3 1k +q1 3 2 0 qnd +rb2 3 4 10k +q2 5 4 0 qnd +rc2 6 5 1k +.model qnd npn(level=1 bf=50 rb=70 rc=40 ccs=2pf tf=0.1ns tr=10ns cje=0.9pf ++ cjc=1.5pf pc=0.85 va=50) +.print dc v(3) v(5) +.plot dc v(3) +.print tran v(3) v(5) +.plot tran v(3) v(5) v(1) +.end diff --git a/Windows/spice/tests/general/schmitt.cir b/Windows/spice/tests/general/schmitt.cir new file mode 100644 index 00000000..81ba0871 --- /dev/null +++ b/Windows/spice/tests/general/schmitt.cir @@ -0,0 +1,28 @@ +schmitt ckt - ecl compatible schmitt trigger +.width in=72 + +.opt list node lvlcod=2 noacct +* The original line is below +*.opt acct list node lvlcod=2 + +.tran 10ns 1000ns +vin 1 0 pulse(-1.6 -1.2 10ns 400ns 400ns 100ns 10000ns) +vee 8 0 -5 +rin 1 2 50 +rc1 0 3 50 +r1 3 5 185 +r2 5 8 760 +rc2 0 6 100 +re 4 8 260 +rth1 7 8 125 +rth2 7 0 85 +cload 7 0 5pf +q1 3 2 4 qstd off +q2 6 5 4 qstd +q3 0 6 7 qstd +q4 0 6 7 qstd +.model qstd npn(level=1 is=1.0e-16 bf=50 br=0.1 rb=50 rc=10 tf=0.12ns tr=5ns ++ cje=0.4pf pe=0.8 me=0.4 cjc=0.5pf pc=0.8 mc=0.333 ccs=1pf va=50) +.print tran v(1) v(3) v(5) v(6) +.plot tran v(3) v(5) v(6) v(1) +.end diff --git a/Windows/spice/tests/hfet/Makefile.am b/Windows/spice/tests/hfet/Makefile.am new file mode 100644 index 00000000..36913130 --- /dev/null +++ b/Windows/spice/tests/hfet/Makefile.am @@ -0,0 +1,14 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = \ + id_vgs.cir \ + inverter.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/hfet/Makefile.in b/Windows/spice/tests/hfet/Makefile.in new file mode 100644 index 00000000..6c4fdbc1 --- /dev/null +++ b/Windows/spice/tests/hfet/Makefile.in @@ -0,0 +1,515 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/hfet +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + id_vgs.cir \ + inverter.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/hfet/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/hfet/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/hfet/id_vgs.cir b/Windows/spice/tests/hfet/id_vgs.cir new file mode 100644 index 00000000..a0a1c149 --- /dev/null +++ b/Windows/spice/tests/hfet/id_vgs.cir @@ -0,0 +1,14 @@ +HFET Id versus Vgs characteristic + +z1 1 2 0 hfet l=1u w=10u +vgs 2 0 dc 0.3 +vds 1 0 dc 1.0 + +.options noacct +.model hfet nhfet level=5 rdi=0 rsi=0 m=2.57 lambda=0.17 ++ vs=1.5e5 mu=0.385 vt0=0.13 eta=1.32 sigma0=0.04 ++ vsigma=0.1 Vsigmat=0.3 js1s=0 js1d=0 nmax=6e15 + +.dc vds 0 1 0.01 +.print DC i(vds) +.end diff --git a/Windows/spice/tests/hfet/inverter.cir b/Windows/spice/tests/hfet/inverter.cir new file mode 100644 index 00000000..16a449c6 --- /dev/null +++ b/Windows/spice/tests/hfet/inverter.cir @@ -0,0 +1,29 @@ +DCFL inverter circuit + +.subckt inv 1 2 3 +* +*Vdd 1.0 +*Vin 2 0 +*Vout 3 0 +z1 1 3 3 aload l=1u w=10u +z2 3 2 0 adrv l=1u w=10u +.ends + +vdd 1 0 dc 2 +vin 2 0 dc 0 pwl(0,0V 1ns,0V 1.005ns,1V 2ns,1V) +x1 1 2 3 inv +x2 1 3 4 inv + +.options noacct +.tran 0.01n 3n +.print tran all +.model adrv nhfet level=5 rd=60 rs=60 m=2.57 lambda=0.17 ++ vs=1.5e5 mu=0.385 vt0=0.3 eta=1.32 sigma0=0.04 ++ vsigma=0.1 vsigmat=0.3 js1s=1e-12 js1d=1e-12 ++ nmax=6e15 +.model aload nhfet level=5 rd=60 rs=60 m=2.57 lambda=0.17 ++ vs=1.5e5 mu=0.385 vt0=-0.3 eta=1.32 sigma0=0.04 ++ vsigma=0.1 vsigmat=0.3 js1s=1e-12 js1d=1e-12 ++ nmax=6e15 + +.end diff --git a/Windows/spice/tests/jfet/Makefile.am b/Windows/spice/tests/jfet/Makefile.am new file mode 100644 index 00000000..77425073 --- /dev/null +++ b/Windows/spice/tests/jfet/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = jfet_vds-vgs.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/jfet/Makefile.in b/Windows/spice/tests/jfet/Makefile.in new file mode 100644 index 00000000..136e47d6 --- /dev/null +++ b/Windows/spice/tests/jfet/Makefile.in @@ -0,0 +1,512 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/jfet +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = jfet_vds-vgs.cir +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/jfet/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/jfet/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/jfet/jfet_vds-vgs.cir b/Windows/spice/tests/jfet/jfet_vds-vgs.cir new file mode 100644 index 00000000..a2f7bce7 --- /dev/null +++ b/Windows/spice/tests/jfet/jfet_vds-vgs.cir @@ -0,0 +1,14 @@ +* I-V Characteristics of JFET 2N4221 +* +* +j1 2 1 0 MODJ +VD 2 0 25 +VG 1 0 -2 +* +.model MODJ NJF LEVEL=1 VTO=-3.5 BETA=4.1E-4 LAMBDA=0.002 RD=200 +* +.options noacct +.op +.dc VD 0 25 1 VG -3 0 1 +.print DC I(VD) +.END diff --git a/Windows/spice/tests/mes/Makefile.am b/Windows/spice/tests/mes/Makefile.am new file mode 100644 index 00000000..51dc7c39 --- /dev/null +++ b/Windows/spice/tests/mes/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = subth.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/mes/Makefile.in b/Windows/spice/tests/mes/Makefile.in new file mode 100644 index 00000000..ae06d792 --- /dev/null +++ b/Windows/spice/tests/mes/Makefile.in @@ -0,0 +1,512 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/mes +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = subth.cir +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/mes/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/mes/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/mes/subth.cir b/Windows/spice/tests/mes/subth.cir new file mode 100644 index 00000000..ba487966 --- /dev/null +++ b/Windows/spice/tests/mes/subth.cir @@ -0,0 +1,17 @@ +Mesfet level 1 subthreshold characteristics + +Vds 1 0 dc 0.1 +vids 1 2 dc 0 +Vgs 3 0 dc 0 + +z1 2 3 0 mesmod area=1.4 + +.model mesmod nmf level=1 rd=46 rs=46 vt0=-1.3 ++ lambda=0.03 alpha=3 beta=1.4e-3 + +.options noacct +.dc vgs -3 0 0.05 +.print DC vids#branch + + +.end diff --git a/Windows/spice/tests/mesa/Makefile.am b/Windows/spice/tests/mesa/Makefile.am new file mode 100644 index 00000000..a516408b --- /dev/null +++ b/Windows/spice/tests/mesa/Makefile.am @@ -0,0 +1,22 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + mesa11.cir \ + mesa13.cir \ + mesa14.cir \ + mesa15.cir \ + mesa21.cir \ + mesa.cir \ + mesgout.cir \ + mesinv.cir \ + mesosc.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +EXTRA_DIST += mesa12.cir mesa-12.cir + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/mesa/Makefile.in b/Windows/spice/tests/mesa/Makefile.in new file mode 100644 index 00000000..304d4e92 --- /dev/null +++ b/Windows/spice/tests/mesa/Makefile.in @@ -0,0 +1,519 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/mesa +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + mesa11.cir \ + mesa13.cir \ + mesa14.cir \ + mesa15.cir \ + mesa21.cir \ + mesa.cir \ + mesgout.cir \ + mesinv.cir \ + mesosc.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = $(TESTS) $(TESTS:.cir=.out) mesa12.cir mesa-12.cir +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/mesa/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/mesa/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/mesa/mesa-12.cir b/Windows/spice/tests/mesa/mesa-12.cir new file mode 100644 index 00000000..69eef9ba --- /dev/null +++ b/Windows/spice/tests/mesa/mesa-12.cir @@ -0,0 +1,23 @@ +* MESA1 transient test - +* Taken from macspice3f4 +* +* This netlist shows convergence problems in ngspice. +* Paolo Nenzi (rework-14) + +rd 1 3 10k +z1 3 2 0 mesa1 l=1u w=20u +vgs 2 0 dc 0 pulse(-3 0 0 0.5n 0.5n 2n 4n) +vdd 1 0 5v +.model mesa1 nmf(level=2 rd=31 rs=31) + +.options noacct + +.dc vgs -2 0 0.02 +.tran 0.1n 5n +.print v(3) v(2) +.end + +.control +run +plot v(2) v(3) +.endc diff --git a/Windows/spice/tests/mesa/mesa.cir b/Windows/spice/tests/mesa/mesa.cir new file mode 100644 index 00000000..2df40984 --- /dev/null +++ b/Windows/spice/tests/mesa/mesa.cir @@ -0,0 +1,16 @@ +* DCFL GaAs MESFET Gate\ +* Taken from macspice3f4 + +vdd 1 0 dc 3 +vin 3 0 dc 0 +z1 2 3 0 enha l=1u w=10u +z2 1 2 2 depl l=1u w=10u + +.model enha nmf level=2 rd=31 rs=31 vto=0.1 astar=0 +.model depl nmf level=2 rd=31 rs=31 vto=-1.0 astar=0 + +.options noacct + +.dc vin 0 3.0 0.05 +.print dc v(2) vin#branch +.end diff --git a/Windows/spice/tests/mesa/mesa11.cir b/Windows/spice/tests/mesa/mesa11.cir new file mode 100644 index 00000000..45978b43 --- /dev/null +++ b/Windows/spice/tests/mesa/mesa11.cir @@ -0,0 +1,18 @@ +* Mesa Level 2 test +* Taken from macspice3f4 archive. + +vds 1 0 +vids 1 2 dc 0 +vgs 3 0 dc 0 +z1 2 3 0 mesmod l=1u w=20u + +.options noacct +.op +.dc vds 0 2 0.05 vgs -1.2 0 0.4 +.print DC vids#branch + +.model mesmod nmf level=2 +*d=0.12u mu=0.23 vs=1.5e5 m=2.5 +*+ vto=-1.26 eta=1.73 lambda=0.045 sigma0=0.081 vsigma=0.1 +*+ vsigmat=1 rd=31 rs=31 +.end diff --git a/Windows/spice/tests/mesa/mesa12.cir b/Windows/spice/tests/mesa/mesa12.cir new file mode 100644 index 00000000..71efea97 --- /dev/null +++ b/Windows/spice/tests/mesa/mesa12.cir @@ -0,0 +1,17 @@ +* MESA1 transient test +* Taken from macspice3f4 +* +* This netlist shows convergence problems in ngspice + +rd 1 3 10k +z1 3 2 0 mesa1 l=1u w=20u +vgs 2 0 dc 0 pulse(-3 0 0 0.5n 0.5n 2n 4n) +vdd 1 0 5v +.model mesa1 nmf(level=2 rd=31 rs=31) + +.options noacct +.dc vgs -2 0 0.02 +.tran 0.1n 5n +.print tran v(2) v(3) + +.print diff --git a/Windows/spice/tests/mesa/mesa13.cir b/Windows/spice/tests/mesa/mesa13.cir new file mode 100644 index 00000000..d1514501 --- /dev/null +++ b/Windows/spice/tests/mesa/mesa13.cir @@ -0,0 +1,16 @@ +* MESA1 - Gate Leakage Test +* Taken from macspice3f4 +* + +z1 0 2 0 mesmod l=1u w=20u +vgs 1 0 dc 0 +vig 1 2 dc 0 +.model mesmod nmf(level=2 rd=31 rs=31 rg=10) + +.options noacct + +.dc vgs -3 0.4 0.05 +.print vig#branch + +.end + diff --git a/Windows/spice/tests/mesa/mesa14.cir b/Windows/spice/tests/mesa/mesa14.cir new file mode 100644 index 00000000..5d2e6031 --- /dev/null +++ b/Windows/spice/tests/mesa/mesa14.cir @@ -0,0 +1,19 @@ +* MESA1 - DCFL GaAs MESFET Gate +* Taken from macspice3f4 +* +* Removed: jsdf = 0 in modelcards + +vdd 1 0 dc 3 +vin 3 0 dc 0 +z1 2 3 0 enha l=1u w=10u +z2 1 2 2 depl l=1u w=10u + +.model enha nmf level=2 rd=31 rs=31 vto=0.1 +.model depl nmf level=2 rd=31 rs=31 vto=-1.0 + +.options noacct + +.dc vin 0 3.0 0.05 +.print DC V(2) + +.end diff --git a/Windows/spice/tests/mesa/mesa15.cir b/Windows/spice/tests/mesa/mesa15.cir new file mode 100644 index 00000000..c5361a93 --- /dev/null +++ b/Windows/spice/tests/mesa/mesa15.cir @@ -0,0 +1,17 @@ +* MESA1 subtreshold characteristics (T=400) +* Taken form macspice3f4 + +vds 1 0 dc 0.1 +vids 1 2 dc 0 +vgs 3 0 dc 0 + +z1 2 3 0 mesmod l=1u w=20u ts=400 td=400 +.model mesmod nmf level=2 rd=31 rs=31 + +.options noacct + +.dc vgs -3 0 0.05 +.print DC vids#branch + +.end + diff --git a/Windows/spice/tests/mesa/mesa21.cir b/Windows/spice/tests/mesa/mesa21.cir new file mode 100644 index 00000000..e1c342e4 --- /dev/null +++ b/Windows/spice/tests/mesa/mesa21.cir @@ -0,0 +1,19 @@ +* Mesa Test +* Taken from macspice3f4 + +z1 3 2 0 mesmod l=1u w=150u +vgs 2 0 dc 0 +vds 1 0 dc 0 +vids 1 3 dc 0 + +.model mesmod nmf level=3 rdi=2.7 rsi=2.7 mu=0.2 m=2.2 vto=-2.04 ++ eta=1.5 lambda=0.04 tc=0.001 sigma0=0.02 vsigma=0.1 vsigmat=1.37 ++ delta=5 beta=0.0085 + +.options noacct + +.dc vds 0 4 0.05 vgs -1.5 0.5 0.5 +.print vids#branch + +.end + diff --git a/Windows/spice/tests/mesa/mesgout.cir b/Windows/spice/tests/mesa/mesgout.cir new file mode 100644 index 00000000..e84c46fb --- /dev/null +++ b/Windows/spice/tests/mesa/mesgout.cir @@ -0,0 +1,37 @@ +* Simulation of MESFET output conductance +* Taken from macspice3f4 +* + +rd 1 2 20 +z1 3 4 0 driver l=1u w=10u +rs 5 0 20 +vgs 4 0 dc 0.5 ac 0.01 +vds 1 0 dc 1.0 +vid 2 3 dc 0 + +.model driver nmf ++ level=2 +*+ jsdf=1e-100 ++ n=1.44 ++ rd=0 ++ rs=0 ++ vs=1.5e5 ++ mu=0.25 ++ d=2e-7 ++ vto=0.1 ++ m=2 ++ lambda=0 ++ sigma0=0 ++ delfo=5 ++ flo=0.5 ++ tf=100000 ++ lambdahf=120 + +.options noacct + +.ac DEC 10 0.001 1e6 + +.print ac V(3) + +.end + diff --git a/Windows/spice/tests/mesa/mesinv.cir b/Windows/spice/tests/mesa/mesinv.cir new file mode 100644 index 00000000..33624ff3 --- /dev/null +++ b/Windows/spice/tests/mesa/mesinv.cir @@ -0,0 +1,49 @@ +* Mesfet Inverter with ungated load/Wload=2e-6 +* Taken from macspice3f4 package +* +* Output node is 70 +* + +bl1 10 40 i=0.0005*tanh(v(10,40)/0.0005/1120)*(1+v(10,40)*0.027) +bl2 20 50 i=0.0005*tanh(v(20,50)/0.0005/1120)*(1+v(20,50)*0.027) + +zd1 70 2 0 driver l=0.7u w=20u +zd2 80 70 0 driver l=0.7u w=20u + +rdl1 1 10 20 +rdl2 1 20 20 +rsl1 40 70 20 +rsl2 50 80 20 + +vin 1000 0 dc 0 +vdd 2000 0 dc 1.6 +visrc 2000 1 dc 0 +vig 1000 2 dc 0 + +.model driver nmf ++ level=2 ++ n=1.44 ++ rd=20 ++ rs=20 ++ ri=10 ++ rf=10 ++ vs=1.9e5 ++ mu=0.25 ++ d=1e-7 ++ vto=0.15 ++ m=2 ++ lambda=0.15 ++ sigma0=0.02 ++ vsigmat=0.5 + +*.nodeset v(10)=1.6 v(40)=1.6 v(70)=1.6 v(20)=0.2 v(50)=0.2 +*+ v(80)=0.2 + +.options noacct + +.dc vin 0 1 0.01 + +.print dc v(70) + +.end + diff --git a/Windows/spice/tests/mesa/mesosc.cir b/Windows/spice/tests/mesa/mesosc.cir new file mode 100644 index 00000000..e81b4ee7 --- /dev/null +++ b/Windows/spice/tests/mesa/mesosc.cir @@ -0,0 +1,41 @@ +* Mesfet Ring Oscillator with ungated load +* Taken form macspice3f4 +* + +.subckt mesinv 10 20 3 +* Node 10: Power Supply +* Node 20: Input +* Node 30: Output +rdl 10 1 20 +bl1 1 2 i=0.00025*tanh(v(1,2)/0.00025/2240)*(1+v(1,2)*0.027) +rsl 2 3 20 +zd 3 20 0 driver l=0.7u w=20u +ci 3 0 20f +.ends mesinv + +.options noacct +.model driver nmf level=2 n=1.44 rd=20 rs=20 vs=1.9e5 ++ mu=0.25 d=1e-7 vto=0.15 m=2 lambda=0.15 sigma0=0.02 ++ vsigmat=0.5 + +vdd 1 0 dc 1.6 + +xinv01 1 2 3 mesinv +xinv02 1 3 4 mesinv +xinv03 1 4 5 mesinv +xinv04 1 5 6 mesinv +xinv05 1 6 7 mesinv +xinv06 1 7 8 mesinv +xinv07 1 8 9 mesinv +xinv08 1 9 10 mesinv +xinv09 1 10 11 mesinv +xinv10 1 11 12 mesinv +xinv11 1 12 2000 mesinv + +vnoise 2000 2 dc 0 pwl(0 0 0.2n 0 0.3n 0.1 0.4n 0) + +.tran 1p 5n 1n 20p + +.print tran V(8) + +.end diff --git a/Windows/spice/tests/mos6/Makefile.am b/Windows/spice/tests/mos6/Makefile.am new file mode 100644 index 00000000..96db4d0e --- /dev/null +++ b/Windows/spice/tests/mos6/Makefile.am @@ -0,0 +1,14 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = \ + mos6inv.cir \ + simpleinv.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/mos6/Makefile.in b/Windows/spice/tests/mos6/Makefile.in new file mode 100644 index 00000000..c5e1eb14 --- /dev/null +++ b/Windows/spice/tests/mos6/Makefile.in @@ -0,0 +1,515 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/mos6 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + mos6inv.cir \ + simpleinv.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/mos6/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/mos6/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/mos6/mos6inv.cir b/Windows/spice/tests/mos6/mos6inv.cir new file mode 100644 index 00000000..25018c60 --- /dev/null +++ b/Windows/spice/tests/mos6/mos6inv.cir @@ -0,0 +1,107 @@ +*** NDINV * 4 +XNDINV1 1 11 12 13 2 100 NDINV +XNDINV2 2 21 22 23 3 100 NDINV +XNDINV3 3 31 32 33 4 100 NDINV +XNDINV4 4 41 42 43 5 100 NDINV + +.SUBCKT NDINV 10 11 21 31 41 100 +MP11 11 100 100 100 P12L5 L=1.2U W=5U +MP12 11 100 100 100 P12L5 L=1.2U W=5U +MP13 11 100 100 100 P12L5 L=1.2U W=5U +MP14 11 10 100 100 P12L5 L=1.2U W=5U +MN11 11 100 12 0 N10L5 L=1.0U W=5U +MN12 12 100 13 0 N10L5 L=1.0U W=5U +MN13 13 100 14 0 N10L5 L=1.0U W=5U +MN14 14 10 0 0 N10L5 L=1.0U W=5U + +MP21 23 0 100 100 P12L5 L=1.2U W=20U +MP22 22 11 23 100 P12L5 L=1.2U W=20U +MP23 21 0 22 100 P12L5 L=1.2U W=20U +MN21 21 0 0 0 N10L5 L=1.0U W=5U +MN22 21 11 0 0 N10L5 L=1.0U W=5U +MN23 21 0 0 0 N10L5 L=1.0U W=5U + +MP31 31 21 100 100 P12L5 L=1.2U W=10U +MP32 31 100 100 100 P12L5 L=1.2U W=10U +MN31 31 21 32 0 N10L5 L=1.0U W=5U +MN32 32 100 0 0 N10L5 L=1.0U W=5U + +MP41 41 31 100 100 P12L5 L=1.2U W=10U +MN41 41 31 0 0 N10L5 L=1.0U W=5U + +C11 11 0 1P +C21 21 0 1P +C31 31 0 1P +C41 41 0 1P +.ENDS + +VDD 100 0 5 +VIN 1 0 DC 0 PWL(0 0 2N 5) + +.TRAN 0.5N 150N +.PRINT TRAN V(1) V(2) V(3) V(4) V(5) +.PRINT TRAN V(11) V(12) V(13) V(41) V(42) V(43) + +.OPTIONS NOACCT + +**** LEVEL 1 NMOS **** +.MODEL N10L1 NMOS ++ LEVEL=1 TPG=1 ++ KP=2.33082E-05 ++ LAMBDA=0.013333 VT0=0.69486 GAMMA=0.60309 PHI=1 ++ TOX=1.9800000E-08 XJ=0.2U LD=0.1U NSUB=4.9999999E+16 ++ NSS=0.0000000E+00 ++ CJ=4.091E-4 MJ=0.307 PB=1.0 ++ CJSW=3.078E-10 MJSW=1.0E-2 ++ CGSO=3.93E-10 CGDO=3.93E-10 +**** LEVEL 1 PMOS **** +.MODEL P12L1 PMOS ++ LEVEL=1 TPG=-1 ++ KP=7.69968E-06 ++ LAMBDA=0.018966 VT0=-0.60865 GAMMA=0.89213 PHI=1 ++ TOX=1.9800000E-08 XJ=0.4U LD=0.28U NSUB=4.9999999E+17 ++ NSS=0.0000000E+00 ++ CJ=6.852E-4 MJ=0.429 PB=1.0 ++ CJSW=5.217E-10 MJSW=0.351 ++ CGSO=7.29E-10 CGDO=7.29E-10 +**** LEVEL 3 NMOS **** +.MODEL N10L3 NMOS ++ LEVEL=3 TPG=+1 ++ GAMMA=1.140501 THETA=0.8109787 KAPPA=0.1579183 ETA=5.0622310E-02 ++ DELTA=0.000000E+00 UO=812.5126 VMAX=1186662. VTO=0.8 ++ TOX=1.9800000E-08 XJ=0.2U LD=0.1U NSUB=4.9999999E+16 ++ NSS=0.0000000E+00 ++ CJ=4.091E-4 MJ=0.307 PB=1.0 ++ CJSW=3.078E-10 MJSW=1.0E-2 ++ CGSO=3.93E-10 CGDO=3.93E-10 +**** LEVEL 3 PMOS **** +.MODEL P12L3 PMOS ++ LEVEL=3 TPG=-1 ++ GAMMA=1.211640 THETA=0.1184638 KAPPA=0.2162577 ETA=2.7580135E-02 ++ DELTA=0.000000E+00 UO=89.16160 VMAX=5.9000000E+07 VTO=-0.8 ++ TOX=1.9800000E-08 XJ=0.4U LD=0.28U NSUB=4.9999999E+17 ++ NSS=0.0000000E+00 ++ CJ=6.852E-4 MJ=0.429 PB=1.0 ++ CJSW=5.217E-10 MJSW=0.351 ++ CGSO=7.29E-10 CGDO=7.29E-10 +**** LEVEL 6 NMOS **** +.MODEL N10L5 NMOS ++ LEVEL=6 TPG=1 ++ KC=3.8921e-05 NC=1.1739 KV=0.91602 NV=0.87225 ++ LAMBDA0=0.013333 LAMBDA1=0.0046901 VT0=0.69486 GAMMA=0.60309 PHI=1 ++ TOX=1.9800000E-08 XJ=0.2U LD=0.1U NSUB=4.9999999E+16 ++ NSS=0.0000000E+00 ++ CJ=4.091E-4 MJ=0.307 PB=1.0 ++ CJSW=3.078E-10 MJSW=1.0E-2 ++ CGSO=3.93E-10 CGDO=3.93E-10 +**** LEVEL 6 PMOS **** +.MODEL P12L5 PMOS ++ LEVEL=6 TPG=-1 ++ KC=6.42696E-06 NC=1.6536 KV=0.92145 NV=0.88345 ++ LAMBDA0=0.018966 LAMBDA1=0.0084012 VT0=-0.60865 GAMMA=0.89213 PHI=1 ++ TOX=1.9800000E-08 XJ=0.4U LD=0.28U NSUB=4.9999999E+17 ++ NSS=0.0000000E+00 ++ CJ=6.852E-4 MJ=0.429 PB=1.0 ++ CJSW=5.217E-10 MJSW=0.351 ++ CGSO=7.29E-10 CGDO=7.29E-10 +.END diff --git a/Windows/spice/tests/mos6/simpleinv.cir b/Windows/spice/tests/mos6/simpleinv.cir new file mode 100644 index 00000000..6aea71c8 --- /dev/null +++ b/Windows/spice/tests/mos6/simpleinv.cir @@ -0,0 +1,45 @@ +*** NDINV * 4 + +VDD 100 0 5 +VIN 1 0 DC 0 PWL(0 0 150N 5) + +MP10 11 1 100 100 p12l5 L=1.0U W=5U +MN11 11 1 0 0 N10L5 L=1.0U W=5U + +.TRAN 0.5N 150N + +.PRINT TRAN V(1) V(11) + +.OPTIONS NOACCT + +**** LEVEL 1 NMOS **** +.MODEL N10L1 NMOS ++ LEVEL=1 TPG=1 ++ KP=2.33082E-05 ++ LAMBDA=0.013333 VT0=0.69486 GAMMA=0.60309 PHI=1 ++ TOX=1.9800000E-08 LD=0.1U NSUB=4.9999999E+16 ++ NSS=0.0000000E+00 ++ CJ=4.091E-4 MJ=0.307 PB=1.0 ++ CJSW=3.078E-10 MJSW=1.0E-2 ++ CGSO=3.93E-10 CGDO=3.93E-10 +**** LEVEL 6 NMOS **** +.MODEL N10L5 NMOS ++ LEVEL=6 TPG=1 ++ KC=3.8921e-05 NC=1.1739 KV=0.91602 NV=0.87225 ++ LAMBDA0=0.013333 LAMBDA1=0.0046901 VT0=0.69486 GAMMA=0.60309 PHI=1 ++ TOX=1.9800000E-08 LD=0.1U NSUB=4.9999999E+16 ++ NSS=0.0000000E+00 ++ CJ=4.091E-4 MJ=0.307 PB=1.0 ++ CJSW=3.078E-10 MJSW=1.0E-2 ++ CGSO=3.93E-10 CGDO=3.93E-10 +**** LEVEL 6 PMOS **** +.MODEL P12L5 PMOS ++ LEVEL=6 TPG=-1 ++ KC=6.42696E-06 NC=1.6536 KV=0.92145 NV=0.88345 ++ LAMBDA0=0.018966 LAMBDA1=0.0084012 VT0=-0.60865 GAMMA=0.89213 PHI=1 ++ TOX=1.9800000E-08 LD=0.28U NSUB=4.9999999E+17 ++ NSS=0.0000000E+00 ++ CJ=6.852E-4 MJ=0.429 PB=1.0 ++ CJSW=5.217E-10 MJSW=0.351 ++ CGSO=7.29E-10 CGDO=7.29E-10 +.END diff --git a/Windows/spice/tests/polezero/Makefile.am b/Windows/spice/tests/polezero/Makefile.am new file mode 100644 index 00000000..d48c50f3 --- /dev/null +++ b/Windows/spice/tests/polezero/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + filt_multistage.cir \ + filt_rc.cir \ + filt_bridge_t.cir \ + pz2.cir \ + pzt.cir \ + simplepz.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/polezero/Makefile.in b/Windows/spice/tests/polezero/Makefile.in new file mode 100644 index 00000000..5cf0ea87 --- /dev/null +++ b/Windows/spice/tests/polezero/Makefile.in @@ -0,0 +1,519 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/polezero +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + filt_multistage.cir \ + filt_rc.cir \ + filt_bridge_t.cir \ + pz2.cir \ + pzt.cir \ + simplepz.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/polezero/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/polezero/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/polezero/filt_bridge_t.cir b/Windows/spice/tests/polezero/filt_bridge_t.cir new file mode 100644 index 00000000..9366fdcd --- /dev/null +++ b/Windows/spice/tests/polezero/filt_bridge_t.cir @@ -0,0 +1,13 @@ +BRIDGE-T FILTER +V1 1 0 12 AC 1 +C1 1 2 1U +C2 2 3 1U +R3 2 0 1K +R4 1 3 1K +* +.options noacct +.OP +.PZ 1 0 3 0 VOL PZ +.PRINT PZ ALL +* +.END diff --git a/Windows/spice/tests/polezero/filt_multistage.cir b/Windows/spice/tests/polezero/filt_multistage.cir new file mode 100644 index 00000000..11cd827d --- /dev/null +++ b/Windows/spice/tests/polezero/filt_multistage.cir @@ -0,0 +1,14 @@ +Multistage filter +v1 1 0 0 ac 1.0 +r1 1 2 1k +c1 2 0 10p +e2 3 0 2 0 10 +r2 3 4 1k +c2 4 0 1.25p +e3 5 0 4 0 10 +r3 5 6 1k +c3 6 0 .02p +.options noacct +.pz 1 0 6 0 vol pz +.print pz all +.end diff --git a/Windows/spice/tests/polezero/filt_rc.cir b/Windows/spice/tests/polezero/filt_rc.cir new file mode 100644 index 00000000..79800c12 --- /dev/null +++ b/Windows/spice/tests/polezero/filt_rc.cir @@ -0,0 +1,8 @@ +RC filter +v1 1 0 0 ac 1.0 +r1 1 2 1k +c1 2 0 10p +.options noacct +.pz 1 0 2 0 vol pz +.print pz all +.end diff --git a/Windows/spice/tests/polezero/pz2.cir b/Windows/spice/tests/polezero/pz2.cir new file mode 100644 index 00000000..9b772485 --- /dev/null +++ b/Windows/spice/tests/polezero/pz2.cir @@ -0,0 +1,25 @@ +test pz +iin 1 0 ac +r1 1 0 1.019524e+9Ohms +l1 1 0 1H + +gm2 2 0 1 0 1 +r2 2 0 8.296965e+08Ohms +l2 2 0 1H + +gm3 3 0 2 0 1 +r3 3 0 8.652054e+07Ohms +l3 3 0 1H + +gm4 4 0 3 0 1 +r4 4 0 1.060594e+07Ohms +l4 4 0 1H + +*gm5 5 0 4 0 1 +*r5 5 0 10Ohms +*l5 5 0 0.66mH + +.options noacct +.pz 1 0 4 0 cur pol +.print pz all +.end diff --git a/Windows/spice/tests/polezero/pzt.cir b/Windows/spice/tests/polezero/pzt.cir new file mode 100644 index 00000000..b94413b5 --- /dev/null +++ b/Windows/spice/tests/polezero/pzt.cir @@ -0,0 +1,25 @@ +test pz +iin 1 0 ac +r1 1 0 1Ohms +l1 1 0 0.05H + +gm2 2 0 1 0 1 +r2 2 0 1Ohms +l2 2 0 0.05H + +gm3 3 0 2 0 1 +r3 3 0 1Ohms +l3 3 0 0.05H + +*gm4 4 0 3 0 1 +*r4 4 0 1Ohms +*l4 4 0 0.05H + +*gm5 5 0 4 0 1 +*r5 5 0 10Ohms +*l5 5 0 0.66mH + +.options noacct +.pz 1 0 3 0 cur pol +.print pz all +.end diff --git a/Windows/spice/tests/polezero/simplepz.cir b/Windows/spice/tests/polezero/simplepz.cir new file mode 100644 index 00000000..e9f30d51 --- /dev/null +++ b/Windows/spice/tests/polezero/simplepz.cir @@ -0,0 +1,8 @@ +test circuit #1 for pz analysis:high pass filter +r1 1 0 1k +r2 2 0 1k +c1 1 2 1.0e-12 +.options noacct +.pz 1 0 2 0 cur pz +.print pz all +.end diff --git a/Windows/spice/tests/regression/Makefile.am b/Windows/spice/tests/regression/Makefile.am new file mode 100644 index 00000000..9fd1a3d7 --- /dev/null +++ b/Windows/spice/tests/regression/Makefile.am @@ -0,0 +1,5 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = lib-processing parser subckt-processing + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/regression/Makefile.in b/Windows/spice/tests/regression/Makefile.in new file mode 100644 index 00000000..2778feb0 --- /dev/null +++ b/Windows/spice/tests/regression/Makefile.in @@ -0,0 +1,609 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/regression +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = lib-processing parser subckt-processing +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/regression/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/regression/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/regression/lib-processing/Makefile.am b/Windows/spice/tests/regression/lib-processing/Makefile.am new file mode 100644 index 00000000..920ebed8 --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/Makefile.am @@ -0,0 +1,13 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = ex1a.cir ex1b.cir ex2a.cir ex3a.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + ex1.lib ex2.lib ex3.lib extra3.lib \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/regression/lib-processing/Makefile.in b/Windows/spice/tests/regression/lib-processing/Makefile.in new file mode 100644 index 00000000..dfc9777d --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/Makefile.in @@ -0,0 +1,513 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/regression/lib-processing +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = ex1a.cir ex1b.cir ex2a.cir ex3a.cir +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + ex1.lib ex2.lib ex3.lib extra3.lib \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/regression/lib-processing/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/regression/lib-processing/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/regression/lib-processing/ex1.lib b/Windows/spice/tests/regression/lib-processing/ex1.lib new file mode 100644 index 00000000..cf64f010 --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/ex1.lib @@ -0,0 +1,9 @@ +* -*- spice -*- + +.LIB RES + +.subckt sub_in_lib n1 n2 +R3 n1 n2 2k +.ends + +.ENDL RES diff --git a/Windows/spice/tests/regression/lib-processing/ex1a.cir b/Windows/spice/tests/regression/lib-processing/ex1a.cir new file mode 100644 index 00000000..d3bfb5fe --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/ex1a.cir @@ -0,0 +1,29 @@ +ex1a, check lib processing + +I1 9 0 -1mA +X1 9 0 sub1 + +Vcheck 9 check0 1.0V + +.lib 'ex1.lib' RES + +.subckt sub1 n1 n2 +X2 n1 n2 sub_in_lib +R2 n1 n2 2k +.ends + +.control +op + +print v(check0) + +if abs(v(check0)) > 1e-9 + quit 1 +end + +echo "INFO: ok" +quit 0 + +.endc + +.end diff --git a/Windows/spice/tests/regression/lib-processing/ex1b.cir b/Windows/spice/tests/regression/lib-processing/ex1b.cir new file mode 100644 index 00000000..203fc373 --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/ex1b.cir @@ -0,0 +1,33 @@ +ex1b, check lib processing + +I1 9 0 -1mA +X1 9 0 sub1 +R2 9 0 4k +X3 9 0 sub_in_lib + +Vcheck 9 check0 1.0V + +.subckt sub1 n1 n2 +.lib 'ex1.lib' RES +X1 n1 n2 sub_in_lib +.ends + +.subckt sub_in_lib n1 n2 +R4 n1 n2 4k +.ends + +.control +op + +print v(check0) + +if abs(v(check0)) > 1e-9 + quit 1 +end + +echo "INFO: ok" +quit 0 + +.endc + +.end diff --git a/Windows/spice/tests/regression/lib-processing/ex2.lib b/Windows/spice/tests/regression/lib-processing/ex2.lib new file mode 100644 index 00000000..a04614e2 --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/ex2.lib @@ -0,0 +1,28 @@ +* -*- spice -*- + +.LIB MOS + +.subckt sub1_in_lib n1 n2 +.LIB 'ex2.lib' RES +Xsub1 n1 n2 sub3_in_lib +R1a n1 n2 4k +R1b n1 n2 2k +.ends + +.subckt sub2_in_lib n1 n2 +.LIB 'ex2.lib' RES +Xsub2 n1 n2 sub3_in_lib +R2 n1 n2 4k +.ends + +.ENDL MOS + + + +.LIB RES + +.subckt sub3_in_lib n1 n2 +R3 n1 n2 4k +.ends + +.ENDL RES diff --git a/Windows/spice/tests/regression/lib-processing/ex2a.cir b/Windows/spice/tests/regression/lib-processing/ex2a.cir new file mode 100644 index 00000000..7e119ad5 --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/ex2a.cir @@ -0,0 +1,33 @@ +ex2a, check lib processing + +I1 7 0 -1mA +X1 7 0 sub1_in_lib + +Vcheck1 7 check1 1.0V + +I2 9 0 -1mA +X2 9 0 sub2_in_lib + +Vcheck2 9 check2 2.0V + +.lib 'ex2.lib' MOS + +.control +op + +print v(check1) v(check2) + +if abs(v(check1)) > 1e-9 + quit 1 +end + +if abs(v(check2)) > 1e-9 + quit 1 +end + +echo "INFO: ok" +quit 0 + +.endc + +.end diff --git a/Windows/spice/tests/regression/lib-processing/ex3.lib b/Windows/spice/tests/regression/lib-processing/ex3.lib new file mode 100644 index 00000000..6f7a26d8 --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/ex3.lib @@ -0,0 +1,18 @@ +* -*- spice -*- + +.LIB MOS + +.subckt sub1_in_lib n1 n2 +.LIB 'extra3.lib' RES +Xsub1 n1 n2 sub3_in_lib +R1a n1 n2 4k +R1b n1 n2 2k +.ends + +.subckt sub2_in_lib n1 n2 +.LIB 'extra3.lib' RES +Xsub2 n1 n2 sub3_in_lib +R2 n1 n2 4k +.ends + +.ENDL MOS diff --git a/Windows/spice/tests/regression/lib-processing/ex3a.cir b/Windows/spice/tests/regression/lib-processing/ex3a.cir new file mode 100644 index 00000000..a2122f0d --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/ex3a.cir @@ -0,0 +1,33 @@ +ex3a, check lib processing + +I1 7 0 -1mA +X1 7 0 sub1_in_lib + +Vcheck1 7 check1 1.0V + +I2 9 0 -1mA +X2 9 0 sub2_in_lib + +Vcheck2 9 check2 2.0V + +.lib 'ex3.lib' MOS + +.control +op + +print v(check1) v(check2) + +if abs(v(check1)) > 1e-9 + quit 1 +end + +if abs(v(check2)) > 1e-9 + quit 1 +end + +echo "INFO: ok" +quit 0 + +.endc + +.end diff --git a/Windows/spice/tests/regression/lib-processing/extra3.lib b/Windows/spice/tests/regression/lib-processing/extra3.lib new file mode 100644 index 00000000..24e9498c --- /dev/null +++ b/Windows/spice/tests/regression/lib-processing/extra3.lib @@ -0,0 +1,9 @@ +* -*- spice -*- + +.LIB RES + +.subckt sub3_in_lib n1 n2 +R3 n1 n2 4k +.ends + +.ENDL RES diff --git a/Windows/spice/tests/regression/parser/Makefile.am b/Windows/spice/tests/regression/parser/Makefile.am new file mode 100644 index 00000000..4a53ca10 --- /dev/null +++ b/Windows/spice/tests/regression/parser/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = minus-minus.cir xpressn-1.cir xpressn-2.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/regression/parser/Makefile.in b/Windows/spice/tests/regression/parser/Makefile.in new file mode 100644 index 00000000..f7eeb597 --- /dev/null +++ b/Windows/spice/tests/regression/parser/Makefile.in @@ -0,0 +1,512 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/regression/parser +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = minus-minus.cir xpressn-1.cir xpressn-2.cir +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/regression/parser/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/regression/parser/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/regression/parser/minus-minus.cir b/Windows/spice/tests/regression/parser/minus-minus.cir new file mode 100644 index 00000000..b44c169a --- /dev/null +++ b/Windows/spice/tests/regression/parser/minus-minus.cir @@ -0,0 +1,36 @@ +test dash dash + +* (exec-spice "ngspice -b %s") + +v1 1 0 '2--3' +b2 2 0 v = 2--3 + +.control + +define mismatch(a,b,err) abs(a-b)>err + +op + +let foo = 2--3 + +if mismatch(v(1), 5.0, 1e-9) + echo "ERROR: v(1) failed" +end + +if mismatch(v(2), 5.0, 1e-9) + echo "ERROR: v(2) failed" +end + +if mismatch(foo, 5.0, 1e-9) + echo "ERROR: foo failed" +end + +print v(1) v(2) foo + +echo "INFO: -- yes we can, print dash dash --" +echo "INFO: -- yes we can, print upper and lower case --" +quit 0 + +.endc + +.end diff --git a/Windows/spice/tests/regression/parser/xpressn-1.cir b/Windows/spice/tests/regression/parser/xpressn-1.cir new file mode 100644 index 00000000..a680633c --- /dev/null +++ b/Windows/spice/tests/regression/parser/xpressn-1.cir @@ -0,0 +1,425 @@ +* 'xpressn-1' check xpressn.c parser + +* (exec-spice "ngspice -b %s") +* (tests-aux-renumber) + +* ---------------------------------------- +* arbitrary tests + +v1001_t n1001_t 0 '1+2' +v1002_t n1002_t 0 '1 + 2 ' +v1003_t n1003_t 0 '1+2*3' +v1004_t n1004_t 0 '(1?2:3)+100' +v1005_t n1005_t 0 '(1>2?2*4:1+2*3)+100' + +v1001_g n1001_g 0 '3' +v1002_g n1002_g 0 '3' +v1003_g n1003_g 0 '7' +v1004_g n1004_g 0 '102' +v1005_g n1005_g 0 '107' + + +v1006_t n1006_t 0 '1-2.1' +v1007_t n1007_t 0 '1--1' +v1008_t n1008_t 0 '5+2/-4' + +v1006_g n1006_g 0 '-1.1' +v1007_g n1007_g 0 '2' +v1008_g n1008_g 0 '4.5' + + +* ---------------------------------------- +* boolean operators '&&' '||' '!' +* output: 0.0 or 1.0 +* input: 0.0 is 'false', everything else is 'true' + +* --------------- +* `&&' operator + +v1009_t n1009_t 0 '0 && 0' +v1010_t n1010_t 0 '0 && 1' +v1011_t n1011_t 0 '1 && 0' +v1012_t n1012_t 0 '0.1 && 0.2' +v1013_t n1013_t 0 '-0.1 && 0.2' + +v1009_g n1009_g 0 '0' +v1010_g n1010_g 0 '0' +v1011_g n1011_g 0 '0' +v1012_g n1012_g 0 '1' +v1013_g n1013_g 0 '1' + + +* --------------- +* `||' operator + +v1014_t n1014_t 0 '0 || 0' +v1015_t n1015_t 0 '0 || 0.1' +v1016_t n1016_t 0 '-0.1 || 0' +v1017_t n1017_t 0 '0.1 || -0.2' + +v1014_g n1014_g 0 '0' +v1015_g n1015_g 0 '1' +v1016_g n1016_g 0 '1' +v1017_g n1017_g 0 '1' + + +* --------------- +* `!' operator + +v1018_t n1018_t 0 '! 0.0' +v1019_t n1019_t 0 '! 0.1' +v1020_t n1020_t 0 '! (-0.1)' + +v1018_g n1018_g 0 '1' +v1019_g n1019_g 0 '0' +v1020_g n1020_g 0 '0' + + + +* ---------------------------------------- +* comparison operators +* output: 0.0 or 1.0 + +* ---------- +* `>' + +v1021_t n1021_t 0 '3 > 2' +v1022_t n1022_t 0 '2 > 3' +v1023_t n1023_t 0 '2 > 2' + +v1021_g n1021_g 0 '1' +v1022_g n1022_g 0 '0' +v1023_g n1023_g 0 '0' + + +* ---------- +* '<' + +v1024_t n1024_t 0 '3 < 2' +v1025_t n1025_t 0 '2 < 3' +v1026_t n1026_t 0 '2 < 2' + +v1024_g n1024_g 0 '0' +v1025_g n1025_g 0 '1' +v1026_g n1026_g 0 '0' + + +* ---------- +* '<=' + +v1027_t n1027_t 0 '3 >= 2' +v1028_t n1028_t 0 '2 >= 3' +v1029_t n1029_t 0 '2 >= 2' + +v1027_g n1027_g 0 '1' +v1028_g n1028_g 0 '0' +v1029_g n1029_g 0 '1' + + +* ---------- +* '>=' + +v1030_t n1030_t 0 '3 <= 2' +v1031_t n1031_t 0 '2 <= 3' +v1032_t n1032_t 0 '2 <= 2' + +v1030_g n1030_g 0 '0' +v1031_g n1031_g 0 '1' +v1032_g n1032_g 0 '1' + + +* ---------- +* '==' + +v1033_t n1033_t 0 '3 == 2' +v1034_t n1034_t 0 '2 == 3' +v1035_t n1035_t 0 '2 == 2' + +v1033_g n1033_g 0 '0' +v1034_g n1034_g 0 '0' +v1035_g n1035_g 0 '1' + + +* ---------- +* '!=' + +v1036_t n1036_t 0 '3 != 2' +v1037_t n1037_t 0 '2 != 3' +v1038_t n1038_t 0 '2 != 2' + +v1036_g n1036_g 0 '1' +v1037_g n1037_g 0 '1' +v1038_g n1038_g 0 '0' + + +* ---------------------------------------- +* four variants of exponentiation + +v1039_t n1039_t 0 '2 ^ 3' +v1039_g n1039_g 0 '8' + +v1040_t n1040_t 0 '2 ** 3' +v1040_g n1040_g 0 '8' + +v1041_t n1041_t 0 'pwr(2,3)' +v1041_g n1041_g 0 '8' + +v1042_t n1042_t 0 'pow(2,3)' +v1042_g n1042_g 0 '8' + + +* ---------------------------------------- +* ternary 'c ? x : y' operator +* input: 0.0 is false, everything else is true + +v1043_t n1043_t 0 ' 0.1 ? 42 : 43' +v1044_t n1044_t 0 '-0.1 ? 42 : 43' +v1045_t n1045_t 0 ' 0.0 ? 42 : 43' + +v1043_g n1043_g 0 '42' +v1044_g n1044_g 0 '42' +v1045_g n1045_g 0 '43' + +* assoziativity + +v1046_t n1046_t 0 '1 ? 42 : 1 ? 41 : 40' +v1047_t n1047_t 0 '1 ? 42 : 0 ? 41 : 40' +v1048_t n1048_t 0 '0 ? 42 : 1 ? 41 : 40' +v1049_t n1049_t 0 '0 ? 42 : 0 ? 41 : 40' + +v1046_g n1046_g 0 '42' +v1047_g n1047_g 0 '42' +v1048_g n1048_g 0 '41' +v1049_g n1049_g 0 '40' + +* -------------------- +* regression tests +* these failed in the past, due to incorrect transformations in inpcom.c + +* was incorrectly transformed --> (3>2)||ternary_fcn((1<4),0.2,0.3) +v1050_t n1050_t 0 '(3>2)||(1<4) ? 0.2 : 0.3' +v1050_g n1050_g 0 '0.2' + +* was incorrectly transformed --> controlled_exit() +v1051_t n1051_t 0 '(3>2) ? (3+2)*((2>1)?1:1) : 42' +v1051_g n1051_g 0 '5' + +* was incorrectly transformed --> ternary_fcn((3>2),42,(2*2))3 +v1052_t n1052_t 0 '(3>2) ? 42 : (2*2)+3' +v1052_g n1052_g 0 '42' + + +* ---------------------------------------- +* functions + +v1053_t n1053_t 0 'sin(0.3)' +v1054_t n1054_t 0 'cos(0.3)' +v1055_t n1055_t 0 'tan(0.3)' +v1056_t n1056_t 0 'asin(0.3)' +v1057_t n1057_t 0 'acos(0.3)' +v1058_t n1058_t 0 'atan(0.3)' +v1059_t n1059_t 0 'arctan(0.3)' +v1060_t n1060_t 0 'sinh(0.3)' +v1061_t n1061_t 0 'cosh(0.3)' +v1062_t n1062_t 0 'tanh(0.3)' +v1063_t n1063_t 0 'asinh(0.3)' +v1064_t n1064_t 0 'acosh(1.3)' +v1065_t n1065_t 0 'atanh(0.3)' + +v1053_g n1053_g 0 '0.29552020666133955' +v1054_g n1054_g 0 '0.955336489125606' +v1055_g n1055_g 0 '0.30933624960962325' +v1056_g n1056_g 0 '0.3046926540153975' +v1057_g n1057_g 0 '1.266103672779499' +v1058_g n1058_g 0 '0.29145679447786704' +v1059_g n1059_g 0 '0.29145679447786704' +v1060_g n1060_g 0 '0.3045202934471426' +v1061_g n1061_g 0 '1.0453385141288605' +v1062_g n1062_g 0 '0.2913126124515909' +v1063_g n1063_g 0 '0.2956730475634223' +v1064_g n1064_g 0 '0.7564329108569595' +v1065_g n1065_g 0 '0.3095196042031116' + +* ---------- + +v1066_t n1066_t 0 'exp(2.0)' +v1067_t n1067_t 0 'exp(-2.0)' + +v1066_g n1066_g 0 '7.38905609893065' +v1067_g n1067_g 0 '0.1353352832366127' + +* ---------- + +v1068_t n1068_t 0 'log(2.0)' +v1069_t n1069_t 0 'log(0.5)' + +v1068_g n1068_g 0 '0.6931471805599453' +v1069_g n1069_g 0 '-0.6931471805599453' + +v1070_t n1070_t 0 'ln(2.0)' +v1071_t n1071_t 0 'ln(0.5)' + +v1070_g n1070_g 0 '0.6931471805599453' +v1071_g n1071_g 0 '-0.6931471805599453' + +* ---------- + +v1072_t n1072_t 0 'sqrt(2.0)' +v1072_g n1072_g 0 '1.4142135623730951' + +v1073_t n1073_t 0 'sqr(2.0)' +v1073_g n1073_g 0 '4.0' + + +* ---------------------------------------- +* functions + +v1074_t n1074_t 0 'abs(2.0)' +v1075_t n1075_t 0 'abs(-2.0)' + +v1074_g n1074_g 0 '2' +v1075_g n1075_g 0 '2' + + +v1076_t n1076_t 0 'sgn(2.0)' +v1077_t n1077_t 0 'sgn(0.0)' +v1078_t n1078_t 0 'sgn(-2.0)' + +v1076_g n1076_g 0 '1' +v1077_g n1077_g 0 '0' +v1078_g n1078_g 0 '-1' + + +v1079_t n1079_t 0 'int(2.1)' +v1080_t n1080_t 0 'int(1.9)' +v1081_t n1081_t 0 'int(0)' +v1082_t n1082_t 0 'int(-1.9)' +v1083_t n1083_t 0 'int(-2.1)' + +v1079_g n1079_g 0 '2' +v1080_g n1080_g 0 '1' +v1081_g n1081_g 0 '0' +v1082_g n1082_g 0 '-1' +v1083_g n1083_g 0 '-2' + + +v1084_t n1084_t 0 'nint(2.6)' +v1085_t n1085_t 0 'nint(2.5)' +v1086_t n1086_t 0 'nint(2.4)' +v1087_t n1087_t 0 'nint(1.6)' +v1088_t n1088_t 0 'nint(1.5)' +v1089_t n1089_t 0 'nint(1.4)' +v1090_t n1090_t 0 'nint(0.6)' +v1091_t n1091_t 0 'nint(0.5)' +v1092_t n1092_t 0 'nint(0.4)' +v1093_t n1093_t 0 'nint(0)' +v1094_t n1094_t 0 'nint(-0.4)' +v1095_t n1095_t 0 'nint(-0.5)' +v1096_t n1096_t 0 'nint(-0.6)' +v1097_t n1097_t 0 'nint(-1.4)' +v1098_t n1098_t 0 'nint(-1.5)' +v1099_t n1099_t 0 'nint(-1.6)' +v1100_t n1100_t 0 'nint(-2.4)' +v1101_t n1101_t 0 'nint(-2.5)' +v1102_t n1102_t 0 'nint(-2.6)' + +v1084_g n1084_g 0 '3' +v1085_g n1085_g 0 '2' +v1086_g n1086_g 0 '2' +v1087_g n1087_g 0 '2' +v1088_g n1088_g 0 '2' +v1089_g n1089_g 0 '1' +v1090_g n1090_g 0 '1' +v1091_g n1091_g 0 '0' +v1092_g n1092_g 0 '0' +v1093_g n1093_g 0 '0' +v1094_g n1094_g 0 '0' +v1095_g n1095_g 0 '0' +v1096_g n1096_g 0 '-1' +v1097_g n1097_g 0 '-1' +v1098_g n1098_g 0 '-2' +v1099_g n1099_g 0 '-2' +v1100_g n1100_g 0 '-2' +v1101_g n1101_g 0 '-2' +v1102_g n1102_g 0 '-3' + + +v1103_t n1103_t 0 'floor(2.1)' +v1104_t n1104_t 0 'floor(1.9)' +v1105_t n1105_t 0 'floor(0)' +v1106_t n1106_t 0 'floor(-1.9)' +v1107_t n1107_t 0 'floor(-2.1)' + +v1103_g n1103_g 0 '2' +v1104_g n1104_g 0 '1' +v1105_g n1105_g 0 '0' +v1106_g n1106_g 0 '-2' +v1107_g n1107_g 0 '-3' + + +v1108_t n1108_t 0 'ceil(2.1)' +v1109_t n1109_t 0 'ceil(1.9)' +v1110_t n1110_t 0 'ceil(0)' +v1111_t n1111_t 0 'ceil(-1.9)' +v1112_t n1112_t 0 'ceil(-2.1)' + +v1108_g n1108_g 0 '3' +v1109_g n1109_g 0 '2' +v1110_g n1110_g 0 '0' +v1111_g n1111_g 0 '-1' +v1112_g n1112_g 0 '-2' + + +* ---------------------------------------- +* min(a,b) max(a,b) + +v1113_t n1113_t 0 'min(1.1, 2.1)' +v1114_t n1114_t 0 'min(2.1, 1.1)' + +v1113_g n1113_g 0 '1.1' +v1114_g n1114_g 0 '1.1' + + +v1115_t n1115_t 0 'max(1.1, 2.1)' +v1116_t n1116_t 0 'max(2.1, 1.1)' + +v1115_g n1115_g 0 '2.1' +v1116_g n1116_g 0 '2.1' + + +* ---------------------------------------- + +.control + +define mismatch(a,b,err) abs(a-b)>err + +op + +let total_count = 0 +let fail_count = 0 + +let tests = 1001 + vector(116) + +foreach n $&tests + set n_test = "n{$n}_t" + set n_gold = "n{$n}_g" + if mismatch(v($n_test), v($n_gold), 1e-9) + let v_test = v($n_test) + let v_gold = v($n_gold) + echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" + let fail_count = fail_count + 1 + end + let total_count = total_count + 1 +end + +if fail_count > 0 + echo "ERROR: $&fail_count of $&total_count tests failed" + quit 1 +else + echo "INFO: $&fail_count of $&total_count tests failed" + quit 0 +end + +.endc + +.end diff --git a/Windows/spice/tests/regression/parser/xpressn-2.cir b/Windows/spice/tests/regression/parser/xpressn-2.cir new file mode 100644 index 00000000..2c3ecb75 --- /dev/null +++ b/Windows/spice/tests/regression/parser/xpressn-2.cir @@ -0,0 +1,261 @@ +check precision of some functions + +* do not change this file, its generated +* (exec-spice "ngspice -b %s") + +v0 n0 0 'sin(1.0e-9)' +v1 n1 0 'sin(1.0e-1)' +v2 n2 0 'sin(7.0e-1)' +v3 n3 0 'cos(1.0e-9)' +v4 n4 0 'cos(1.0e-1)' +v5 n5 0 'cos(7.0e-1)' +v6 n6 0 'tan(1.0e-9)' +v7 n7 0 'tan(1.0e-1)' +v8 n8 0 'tan(7.0e-1)' +v9 n9 0 'asin(1.0e-9)' +v10 n10 0 'asin(1.0e-1)' +v11 n11 0 'asin(7.0e-1)' +v12 n12 0 'acos(1.0e-9)' +v13 n13 0 'acos(1.0e-1)' +v14 n14 0 'acos(7.0e-1)' +v15 n15 0 'atan(1.0e-9)' +v16 n16 0 'atan(1.0e-1)' +v17 n17 0 'atan(7.0e-1)' +v18 n18 0 'sinh(1.0e-9)' +v19 n19 0 'sinh(1.0e-1)' +v20 n20 0 'sinh(7.0e-1)' +v21 n21 0 'cosh(1.0e-9)' +v22 n22 0 'cosh(1.0e-1)' +v23 n23 0 'cosh(7.0e-1)' +v24 n24 0 'tanh(1.0e-9)' +v25 n25 0 'tanh(1.0e-1)' +v26 n26 0 'tanh(7.0e-1)' +v27 n27 0 'asinh(1.0e-9)' +v28 n28 0 'asinh(1.0e-1)' +v29 n29 0 'asinh(7.0e-1)' +v30 n30 0 'acosh(1.2e+0)' +v31 n31 0 'atanh(1.0e-9)' +v32 n32 0 'atanh(1.0e-1)' +v33 n33 0 'atanh(7.0e-1)' + + +.control + +op + +let eps = 1.1102230246251568e-16 + +define mismatch(y,gold,err) abs(y-gold)>(err*gold) + +define relerr_(y,gold) (y-gold)/(gold*eps) + + +if mismatch(v(n0), 1.0e-9, 10*eps) + let relerr = relerr_(v(n0), 1.0e-9) + echo "ERROR, sin(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n1), 9.983341664682815e-2, 10*eps) + let relerr = relerr_(v(n1), 9.983341664682815e-2) + echo "ERROR, sin(1.0e-1) versus 9.983341664682815e-2 mismatch" + print relerr +end + +if mismatch(v(n2), 6.44217687237691e-1, 10*eps) + let relerr = relerr_(v(n2), 6.44217687237691e-1) + echo "ERROR, sin(7.0e-1) versus 6.44217687237691e-1 mismatch" + print relerr +end + +if mismatch(v(n3), 1.0e+0, 10*eps) + let relerr = relerr_(v(n3), 1.0e+0) + echo "ERROR, cos(1.0e-9) versus 1.0e+0 mismatch" + print relerr +end + +if mismatch(v(n4), 9.950041652780258e-1, 10*eps) + let relerr = relerr_(v(n4), 9.950041652780258e-1) + echo "ERROR, cos(1.0e-1) versus 9.950041652780258e-1 mismatch" + print relerr +end + +if mismatch(v(n5), 7.648421872844885e-1, 10*eps) + let relerr = relerr_(v(n5), 7.648421872844885e-1) + echo "ERROR, cos(7.0e-1) versus 7.648421872844885e-1 mismatch" + print relerr +end + +if mismatch(v(n6), 1.0e-9, 10*eps) + let relerr = relerr_(v(n6), 1.0e-9) + echo "ERROR, tan(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n7), 1.0033467208545055e-1, 10*eps) + let relerr = relerr_(v(n7), 1.0033467208545055e-1) + echo "ERROR, tan(1.0e-1) versus 1.0033467208545055e-1 mismatch" + print relerr +end + +if mismatch(v(n8), 8.422883804630794e-1, 10*eps) + let relerr = relerr_(v(n8), 8.422883804630794e-1) + echo "ERROR, tan(7.0e-1) versus 8.422883804630794e-1 mismatch" + print relerr +end + +if mismatch(v(n9), 1.0e-9, 10*eps) + let relerr = relerr_(v(n9), 1.0e-9) + echo "ERROR, asin(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n10), 1.0016742116155979e-1, 10*eps) + let relerr = relerr_(v(n10), 1.0016742116155979e-1) + echo "ERROR, asin(1.0e-1) versus 1.0016742116155979e-1 mismatch" + print relerr +end + +if mismatch(v(n11), 7.753974966107529e-1, 10*eps) + let relerr = relerr_(v(n11), 7.753974966107529e-1) + echo "ERROR, asin(7.0e-1) versus 7.753974966107529e-1 mismatch" + print relerr +end + +if mismatch(v(n12), 1.5707963257948965e+0, 10*eps) + let relerr = relerr_(v(n12), 1.5707963257948965e+0) + echo "ERROR, acos(1.0e-9) versus 1.5707963257948965e+0 mismatch" + print relerr +end + +if mismatch(v(n13), 1.470628905633337e+0, 10*eps) + let relerr = relerr_(v(n13), 1.470628905633337e+0) + echo "ERROR, acos(1.0e-1) versus 1.470628905633337e+0 mismatch" + print relerr +end + +if mismatch(v(n14), 7.953988301841437e-1, 10*eps) + let relerr = relerr_(v(n14), 7.953988301841437e-1) + echo "ERROR, acos(7.0e-1) versus 7.953988301841437e-1 mismatch" + print relerr +end + +if mismatch(v(n15), 1.0e-9, 10*eps) + let relerr = relerr_(v(n15), 1.0e-9) + echo "ERROR, atan(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n16), 9.966865249116206e-2, 10*eps) + let relerr = relerr_(v(n16), 9.966865249116206e-2) + echo "ERROR, atan(1.0e-1) versus 9.966865249116206e-2 mismatch" + print relerr +end + +if mismatch(v(n17), 6.107259643892086e-1, 10*eps) + let relerr = relerr_(v(n17), 6.107259643892086e-1) + echo "ERROR, atan(7.0e-1) versus 6.107259643892086e-1 mismatch" + print relerr +end + +if mismatch(v(n18), 1.0e-9, 10*eps) + let relerr = relerr_(v(n18), 1.0e-9) + echo "ERROR, sinh(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n19), 1.0016675001984403e-1, 10*eps) + let relerr = relerr_(v(n19), 1.0016675001984403e-1) + echo "ERROR, sinh(1.0e-1) versus 1.0016675001984403e-1 mismatch" + print relerr +end + +if mismatch(v(n20), 7.585837018395335e-1, 10*eps) + let relerr = relerr_(v(n20), 7.585837018395335e-1) + echo "ERROR, sinh(7.0e-1) versus 7.585837018395335e-1 mismatch" + print relerr +end + +if mismatch(v(n21), 1.0e+0, 10*eps) + let relerr = relerr_(v(n21), 1.0e+0) + echo "ERROR, cosh(1.0e-9) versus 1.0e+0 mismatch" + print relerr +end + +if mismatch(v(n22), 1.0050041680558035e+0, 10*eps) + let relerr = relerr_(v(n22), 1.0050041680558035e+0) + echo "ERROR, cosh(1.0e-1) versus 1.0050041680558035e+0 mismatch" + print relerr +end + +if mismatch(v(n23), 1.255169005630943e+0, 10*eps) + let relerr = relerr_(v(n23), 1.255169005630943e+0) + echo "ERROR, cosh(7.0e-1) versus 1.255169005630943e+0 mismatch" + print relerr +end + +if mismatch(v(n24), 1.0e-9, 10*eps) + let relerr = relerr_(v(n24), 1.0e-9) + echo "ERROR, tanh(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n25), 9.966799462495581e-2, 10*eps) + let relerr = relerr_(v(n25), 9.966799462495581e-2) + echo "ERROR, tanh(1.0e-1) versus 9.966799462495581e-2 mismatch" + print relerr +end + +if mismatch(v(n26), 6.043677771171635e-1, 10*eps) + let relerr = relerr_(v(n26), 6.043677771171635e-1) + echo "ERROR, tanh(7.0e-1) versus 6.043677771171635e-1 mismatch" + print relerr +end + +if mismatch(v(n27), 1.0e-9, 10*eps) + let relerr = relerr_(v(n27), 1.0e-9) + echo "ERROR, asinh(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n28), 9.983407889920759e-2, 10*eps) + let relerr = relerr_(v(n28), 9.983407889920759e-2) + echo "ERROR, asinh(1.0e-1) versus 9.983407889920759e-2 mismatch" + print relerr +end + +if mismatch(v(n29), 6.526665660823557e-1, 10*eps) + let relerr = relerr_(v(n29), 6.526665660823557e-1) + echo "ERROR, asinh(7.0e-1) versus 6.526665660823557e-1 mismatch" + print relerr +end + +if mismatch(v(n30), 6.223625037147784e-1, 10*eps) + let relerr = relerr_(v(n30), 6.223625037147784e-1) + echo "ERROR, acosh(1.2e+0) versus 6.223625037147784e-1 mismatch" + print relerr +end + +if mismatch(v(n31), 1.0e-9, 10*eps) + let relerr = relerr_(v(n31), 1.0e-9) + echo "ERROR, atanh(1.0e-9) versus 1.0e-9 mismatch" + print relerr +end + +if mismatch(v(n32), 1.0033534773107558e-1, 10*eps) + let relerr = relerr_(v(n32), 1.0033534773107558e-1) + echo "ERROR, atanh(1.0e-1) versus 1.0033534773107558e-1 mismatch" + print relerr +end + +if mismatch(v(n33), 8.673005276940532e-1, 10*eps) + let relerr = relerr_(v(n33), 8.673005276940532e-1) + echo "ERROR, atanh(7.0e-1) versus 8.673005276940532e-1 mismatch" + print relerr +end + + +quit 0 + + +.endc diff --git a/Windows/spice/tests/regression/subckt-processing/Makefile.am b/Windows/spice/tests/regression/subckt-processing/Makefile.am new file mode 100644 index 00000000..4bef8024 --- /dev/null +++ b/Windows/spice/tests/regression/subckt-processing/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = model-scope-5.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/regression/subckt-processing/Makefile.in b/Windows/spice/tests/regression/subckt-processing/Makefile.in new file mode 100644 index 00000000..50c1402c --- /dev/null +++ b/Windows/spice/tests/regression/subckt-processing/Makefile.in @@ -0,0 +1,512 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/regression/subckt-processing +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = model-scope-5.cir +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/regression/subckt-processing/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/regression/subckt-processing/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/regression/subckt-processing/model-scope-5.cir b/Windows/spice/tests/regression/subckt-processing/model-scope-5.cir new file mode 100644 index 00000000..1baf1081 --- /dev/null +++ b/Windows/spice/tests/regression/subckt-processing/model-scope-5.cir @@ -0,0 +1,84 @@ +check scoping of nested .model definitions + +* (exec-spice "ngspice -b %s") +* (tests-aux-renumber) + + +i1 n1001_t 0 dc=-1 +i2 n1002_t 0 dc=-1 +i3 n1003_t 0 dc=-1 +i4 n1004_t 0 dc=-1 +i5 n1005_t 0 dc=-1 +i6 n1006_t 0 dc=-1 +i7 n1007_t 0 dc=-1 + +x1 n1001_t sub1 +v1_g n1001_g 0 2k + +x2 n1002_t n1003_t n1004_t n1005_t n1006_t n1007_t sub2 +v2_g n1002_g 0 4k +v3_g n1003_g 0 1k +v4_g n1004_g 0 8k +v5_g n1005_g 0 1k +v6_g n1006_g 0 8k +v7_g n1007_g 0 43 + +.subckt sub1 2 + .model my r r=2k + r1 2 0 my +.ends + +.subckt sub2 3 41a 41b 42a 42b 5 + r2 3 0 my + + x31 41a 41b sub3 + x32 42a 42b sub3 + + .subckt sub3 4 5 + .model my r r=8k + .model any r r=42 + r5 4 0 1k + r6 5 0 my + .ends + + .model just r r=43 + r5 5 0 just +.ends + +.model my r r=4k + + +.control + +define mismatch(a,b,err) abs(a-b)>err + +op + +let total_count = 0 +let fail_count = 0 + +let tests = 1001 + vector(7) + +foreach n $&tests + set n_test = "n{$n}_t" + set n_gold = "n{$n}_g" + if mismatch(v($n_test), v($n_gold), 1e-9) + let v_test = v($n_test) + let v_gold = v($n_gold) + echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" + let fail_count = fail_count + 1 + end + let total_count = total_count + 1 +end + +if fail_count > 0 + echo "ERROR: $&fail_count of $&total_count tests failed" + quit 1 +else + echo "INFO: $&fail_count of $&total_count tests failed" + quit 0 +end + +.endc + +.end diff --git a/Windows/spice/tests/resistance/Makefile.am b/Windows/spice/tests/resistance/Makefile.am new file mode 100644 index 00000000..ff1e7970 --- /dev/null +++ b/Windows/spice/tests/resistance/Makefile.am @@ -0,0 +1,14 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + res_array.cir \ + res_simple.cir \ + res_partition.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/resistance/Makefile.in b/Windows/spice/tests/resistance/Makefile.in new file mode 100644 index 00000000..1c0671b3 --- /dev/null +++ b/Windows/spice/tests/resistance/Makefile.in @@ -0,0 +1,516 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/resistance +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + res_array.cir \ + res_simple.cir \ + res_partition.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/resistance/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/resistance/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/resistance/res_array.cir b/Windows/spice/tests/resistance/res_array.cir new file mode 100644 index 00000000..4080fc3e --- /dev/null +++ b/Windows/spice/tests/resistance/res_array.cir @@ -0,0 +1,28 @@ +A paralled resistor array + +Vin 1 0 DC 1 SIN (0 1 100MEG 1NS 0.0) AC 1 + +VR1 1 2 DC 0 +R1 2 0 10K + +VR2 1 3 DC 0 +R2 3 0 10K ac=5K + +VR3 1 4 DC 0 +R3 4 0 rmodel1 L=11u W=2u ac=2.5k + +VR4 1 5 DC 0 +R4 5 0 10K ac=5k m=2 +.model rmodel1 R RSH = 1000 NARROW = 1u + +VR5 1 6 DC 0 +R5 6 0 10 ac=5 scale=1K + +.options noacct +.OP +.TRAN 1ns 10ns +.AC DEC 100 1MEG 100MEG +.PRINT TRAN I(VR1), I(VR2), I(VR3), I(VR4),I(VR5) +.PRINT AC I(VR1), I(VR2), I(VR3), I(VR4),I(VR5) + +.END diff --git a/Windows/spice/tests/resistance/res_partition.cir b/Windows/spice/tests/resistance/res_partition.cir new file mode 100644 index 00000000..40bcdd02 --- /dev/null +++ b/Windows/spice/tests/resistance/res_partition.cir @@ -0,0 +1,11 @@ +* Resistive partition with different ratios for AC/DC (Print V(2)) + +vin 1 0 DC 1V AC 1V +r1 1 2 5K +r2 2 0 5K ac=15k + +.options noacct +.OP +.AC DEC 10 1 10K +.print ac v(2) +.END diff --git a/Windows/spice/tests/resistance/res_simple.cir b/Windows/spice/tests/resistance/res_simple.cir new file mode 100644 index 00000000..7dc66cae --- /dev/null +++ b/Windows/spice/tests/resistance/res_simple.cir @@ -0,0 +1,10 @@ +A simple resistor with a voltage source + +R1 1 0 10k +V1 1 0 DC 1 + +.options noacct +.TRAN 1ns 6ns +.PRINT TRAN I(V1) + +.END diff --git a/Windows/spice/tests/sensitivity/Makefile.am b/Windows/spice/tests/sensitivity/Makefile.am new file mode 100644 index 00000000..437ad699 --- /dev/null +++ b/Windows/spice/tests/sensitivity/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = diffpair.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/sensitivity/Makefile.in b/Windows/spice/tests/sensitivity/Makefile.in new file mode 100644 index 00000000..e10e8d3d --- /dev/null +++ b/Windows/spice/tests/sensitivity/Makefile.in @@ -0,0 +1,512 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/sensitivity +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = diffpair.cir +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/sensitivity/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/sensitivity/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/sensitivity/diffpair.cir b/Windows/spice/tests/sensitivity/diffpair.cir new file mode 100644 index 00000000..ddd1b8ef --- /dev/null +++ b/Windows/spice/tests/sensitivity/diffpair.cir @@ -0,0 +1,33 @@ +simple differential pair - CM and DM dc sensitivity + +* Models: +.model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) +.model qnr npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) + +* Circuit description: +q1 4 2 6 qnr +q2 5 3 6 qnl +rs1 11 2 1k +rs2 3 1 1k +rc1 4 8 10k +rc2 5 8 10k +q3 7 7 9 qnl +q4 6 7 9 qnr +rbias 7 8 20k + +* Inputs/Supplies: +vcm 1 0 dc 0 sin(0 0.1 5meg) ac 1 +vdm 1 11 dc 0 sin(0 0.1 5meg) ac 1 +vcc 8 0 12 +vee 9 0 -12 + +.options noacct + +* Analyses: +.tf v(5) vcm +.tf v(5) vdm +.sens v(5,4) + +.print SENS all + +.end diff --git a/Windows/spice/tests/transient/Makefile.am b/Windows/spice/tests/transient/Makefile.am new file mode 100644 index 00000000..9b2ccced --- /dev/null +++ b/Windows/spice/tests/transient/Makefile.am @@ -0,0 +1,12 @@ +## Process this file with automake to produce Makefile.in + + +TESTS = fourbitadder.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/transient/Makefile.in b/Windows/spice/tests/transient/Makefile.in new file mode 100644 index 00000000..360024fa --- /dev/null +++ b/Windows/spice/tests/transient/Makefile.in @@ -0,0 +1,512 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/transient +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = fourbitadder.cir +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/transient/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/transient/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/transient/fourbitadder.cir b/Windows/spice/tests/transient/fourbitadder.cir new file mode 100644 index 00000000..d6b577df --- /dev/null +++ b/Windows/spice/tests/transient/fourbitadder.cir @@ -0,0 +1,79 @@ +4 bit adder + +* Models: +.MODEL dmod D +.MODEL qmod NPN(level=1 BF=75 RB=100 CJE=1PF CJC=3PF) + +.options noacct + +.SUBCKT NAND 1 2 3 4 +* noeuds: entrees(2) sortie 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 +* noeuds entrees(2) ,carryin, sortie, carryout, 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 +* noeuds +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 + +x1 1 2 3 4 9 10 13 16 15 TWOBIT +x2 5 6 7 8 11 12 16 14 15 TWOBIT +.ends FOURBIT + + + +* Inputs/Supplies: + +vcc 99 0 DC 5V +VIN1A 1 0 DC 0 pulse(0 3 0 10ns 10ns 10ns 50ns) +VIN1B 2 0 DC 0 pulse(0 3 0 10ns 10ns 20ns 100ns) +VIN2A 3 0 DC 0 pulse(0 3 0 10ns 10ns 40ns 200ns) +VIN2B 4 0 DC 0 pulse(0 3 0 10ns 10ns 80ns 400ns) +VIN3A 5 0 DC 0 pulse(0 3 0 10ns 10ns 160ns 800ns) +VIN3B 6 0 DC 0 pulse(0 3 0 10ns 10ns 320ns 1600ns) +VIN4A 7 0 DC 0 pulse(0 3 0 10ns 10ns 640ns 3200ns) +VIN4B 8 0 DC 0 pulse(0 3 0 10ns 10ns 1280ns 6400ns) + +* Circuit description: +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 + +* Analysys: +.tran 1ns 6ns +.print tran v(1) + + +.end + + diff --git a/Windows/spice/tests/transmission/Makefile.am b/Windows/spice/tests/transmission/Makefile.am new file mode 100644 index 00000000..0d79bbd0 --- /dev/null +++ b/Windows/spice/tests/transmission/Makefile.am @@ -0,0 +1,18 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + cpl_ibm2.cir \ + cpl3_4_line.cir \ + ltra1_1_line.cir \ + ltra2_2_line.cir \ + txl1_1_line.cir \ + txl2_3_line.cir + + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/transmission/Makefile.in b/Windows/spice/tests/transmission/Makefile.in new file mode 100644 index 00000000..73aabe47 --- /dev/null +++ b/Windows/spice/tests/transmission/Makefile.in @@ -0,0 +1,519 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/transmission +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + cpl_ibm2.cir \ + cpl3_4_line.cir \ + ltra1_1_line.cir \ + ltra2_2_line.cir \ + txl1_1_line.cir \ + txl2_3_line.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/transmission/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/transmission/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/transmission/cpl3_4_line.cir b/Windows/spice/tests/transmission/cpl3_4_line.cir new file mode 100644 index 00000000..5f90ec21 --- /dev/null +++ b/Windows/spice/tests/transmission/cpl3_4_line.cir @@ -0,0 +1,36 @@ +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) +* +.OPTION NOACCT +.TRAN 0.2NS 50NS 0 0.05N +.PRINT TRAN V(2) V(7) V(9) +.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 diff --git a/Windows/spice/tests/transmission/cpl_ibm2.cir b/Windows/spice/tests/transmission/cpl_ibm2.cir new file mode 100644 index 00000000..912dd6e6 --- /dev/null +++ b/Windows/spice/tests/transmission/cpl_ibm2.cir @@ -0,0 +1,19 @@ +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 +R3 V3 0 100 +R4 V4 0 100 +.OPTION NOACCT +.TRAN 0.1N 20N +.PRINT TRAN V(V1) V(V3) +.END diff --git a/Windows/spice/tests/transmission/ltra1_1_line.cir b/Windows/spice/tests/transmission/ltra1_1_line.cir new file mode 100644 index 00000000..7b85af97 --- /dev/null +++ b/Windows/spice/tests/transmission/ltra1_1_line.cir @@ -0,0 +1,18 @@ +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 ) +.OPTION NOACCT +.TRAN 0.2N 47N 0 0.1N +.PRINT TRAN V(2) V(3) +.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 diff --git a/Windows/spice/tests/transmission/ltra2_2_line.cir b/Windows/spice/tests/transmission/ltra2_2_line.cir new file mode 100644 index 00000000..d8a39137 --- /dev/null +++ b/Windows/spice/tests/transmission/ltra2_2_line.cir @@ -0,0 +1,23 @@ +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 ) +.OPTION NOACCT +.TRAN 0.2N 47N 0 0.1N +.PRINT TRAN V(2) V(3) V(4) V(5) +.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 diff --git a/Windows/spice/tests/transmission/txl1_1_line.cir b/Windows/spice/tests/transmission/txl1_1_line.cir new file mode 100644 index 00000000..6993161d --- /dev/null +++ b/Windows/spice/tests/transmission/txl1_1_line.cir @@ -0,0 +1,17 @@ +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 ) +.OPTION NOACCT +.TRAN 0.2N 47N 0 0.1N +.PRINT TRAN V(2) V(3) +.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 diff --git a/Windows/spice/tests/transmission/txl2_3_line.cir b/Windows/spice/tests/transmission/txl2_3_line.cir new file mode 100644 index 00000000..a7200009 --- /dev/null +++ b/Windows/spice/tests/transmission/txl2_3_line.cir @@ -0,0 +1,25 @@ +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 ) +.OPTION NOACCT +.TRAN 0.2N 47N 0 0.1N +.PRINT TRAN V(2) V(3) V(4) V(5) V(6) +.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 diff --git a/Windows/spice/tests/vbic/CEamp.cir b/Windows/spice/tests/vbic/CEamp.cir new file mode 100644 index 00000000..df3096e1 --- /dev/null +++ b/Windows/spice/tests/vbic/CEamp.cir @@ -0,0 +1,27 @@ +VBIC Pole Zero Test + +Vcc 3 0 5 +Rc 2 3 1k +Rb 3 1 200k +I1 0 1 AC 1 DC 0 +Vmeas 4 2 DC 0 +Cshunt 4 0 .1u + +Q1 2 1 0 0 N1 + +.OPTIONS NOACCT + +.ac dec 100 0.1Meg 10G +.print ac db(i(vmeas)) +.print ac ph(i(vmeas)) +.pz 1 0 4 0 cur pz +.print pz all + + +.MODEL N1 NPN LEVEL=4 ++ IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 ++ RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 ++ XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 ++ GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 + +.END diff --git a/Windows/spice/tests/vbic/FG.cir b/Windows/spice/tests/vbic/FG.cir new file mode 100644 index 00000000..23eed0f8 --- /dev/null +++ b/Windows/spice/tests/vbic/FG.cir @@ -0,0 +1,17 @@ +VBIC Gummel Test +V1 Q1_E 0 5.0 +VC Q1_C 0 0.0 +VB Q1_B 0 0.0 +Q1 Q1_C Q1_B Q1_E P1 +.DC V1 0.2 1.2 10m +.OPTIONS GMIN=1e-13 NOACCT + +.print dc abs(i(vc)) abs(i(vb)) + +.MODEL P1 PNP LEVEL=4 ++ IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 ++ RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 ++ XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 ++ GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 + +.END diff --git a/Windows/spice/tests/vbic/FO.cir b/Windows/spice/tests/vbic/FO.cir new file mode 100644 index 00000000..37950b23 --- /dev/null +++ b/Windows/spice/tests/vbic/FO.cir @@ -0,0 +1,20 @@ +VBIC Output Test +V1 V1_P V1_N 0.0 +VB V1_N 0 0.5 +VC Q1_C 0 0.0 +Q1 Q1_C V1_P 0 N1 + +.OPTIONS NOACCT + +.DC VC 0 5 50M VB 700M 1 50M + +.print dc -i(vc) +.print dc -i(vb) + +.MODEL N1 NPN LEVEL=4 ++ IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 ++ RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 ++ XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 ++ GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 + +.END diff --git a/Windows/spice/tests/vbic/Makefile.am b/Windows/spice/tests/vbic/Makefile.am new file mode 100644 index 00000000..e9186f87 --- /dev/null +++ b/Windows/spice/tests/vbic/Makefile.am @@ -0,0 +1,19 @@ +## Process this file with automake to produce Makefile.in + + + +TESTS = CEamp.cir \ + FG.cir \ + FO.cir \ + diffamp.cir \ + noise_scale_test.cir \ + temp.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice + +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/vbic/Makefile.in b/Windows/spice/tests/vbic/Makefile.in new file mode 100644 index 00000000..530ef907 --- /dev/null +++ b/Windows/spice/tests/vbic/Makefile.in @@ -0,0 +1,518 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/vbic +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = CEamp.cir \ + FG.cir \ + FO.cir \ + diffamp.cir \ + noise_scale_test.cir \ + temp.cir + +TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice +EXTRA_DIST = \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/vbic/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/vbic/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/vbic/diffamp.cir b/Windows/spice/tests/vbic/diffamp.cir new file mode 100644 index 00000000..cf1b9108 --- /dev/null +++ b/Windows/spice/tests/vbic/diffamp.cir @@ -0,0 +1,47 @@ +VBIC DiffAmp Test + +V1 VCC 0 3.3 +V2 V2_P R3_N AC 1 DC 0 Sine(0 10m 10Meg 0 0) +R1 Q3_C 0 100k +R2 Q4_C 0 100k +R3 VCC R3_N 1K +R4 R3_N 0 1K +Q10 Q1_E I1_N 0 0 N1 +Q11 I1_N I1_N 0 0 N1 +Q12 Q9_B I1_N 0 0 N1 M=2 +Q13 Q5_B I1_N 0 0 N1 M=2 +Q1 Q5_C V2_P Q1_E 0 N1 +Q2 Q6_C R3_N Q1_E 0 N1 +Q3 Q3_C Q9_B Q5_C Q3_C P1 +Q4 Q4_C Q9_B Q6_C Q4_C P1 +I1 VCC I1_N 10u +Q5 Q5_C Q5_B VCC Q5_C P1 +Q6 Q6_C Q5_B VCC Q6_C P1 +E1 E1_P 0 Q3_C Q4_C 1 +RH E1_P 0 1G +Q7 Q5_B Q5_B VCC Q5_B P1 +Q8 Q8_B Q8_B VCC Q8_B P1 +Q9 Q9_B Q9_B Q8_B Q9_B P1 + +.OPTIONS NOACCT + +.OP +.TRAN 1n 1u 0 10n +.AC DEC 25 100k 1G + +.print ac v(e1_p) +.print tran v(e1_p) + +.MODEL N1 NPN LEVEL=4 ++ IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 ++ RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 ++ XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 ++ GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 + +.MODEL P1 PNP LEVEL=4 ++ IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 ++ RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 ++ XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 ++ GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 + +.END diff --git a/Windows/spice/tests/vbic/noise_scale_test.cir b/Windows/spice/tests/vbic/noise_scale_test.cir new file mode 100644 index 00000000..6d9bd5e4 --- /dev/null +++ b/Windows/spice/tests/vbic/noise_scale_test.cir @@ -0,0 +1,27 @@ +VBIC Noise Scale Test + +V1 R3_P 0 5 +V2 V2_P 0 5 AC 1 +C1 R3_N V2_P 1n +R4 R3_N 0 100k +Q1 VOUT R3_N Q1_E N1 M=2 +*Q2 VOUT R3_N Q1_E N1 +R1 R3_P VOUT 100k +R2 Q1_E 0 10k +R3 R3_P R3_N 500k + +.OPTIONS NOACCT + +.NOISE v(vout) V2 DEC 25 1k 100Meg + +.print noise v(inoise_spectrum) + + +.MODEL N1 NPN LEVEL=4 ++ IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 ++ RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 ++ XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 ++ GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 ++ RTH=300 KFN=10e-15 AFN=1 BFN=1 + +.END diff --git a/Windows/spice/tests/vbic/temp.cir b/Windows/spice/tests/vbic/temp.cir new file mode 100644 index 00000000..15355b76 --- /dev/null +++ b/Windows/spice/tests/vbic/temp.cir @@ -0,0 +1,19 @@ +VBIC Temp test + +V1 1 0 1.0 +VC 1 Q1_C 0.0 +VB 1 Q1_B 0.0 +Q1 Q1_C Q1_B 0 N1 +.OPTIONS TEMP=150 NOACCT +.DC V1 0.2 1.2 10m + +.print dc i(vc) i(vb) + + +.MODEL N1 NPN LEVEL=4 ++ IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 ++ RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 ++ XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 ++ GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 + +.END diff --git a/Windows/spice/tests/xspice/Makefile.am b/Windows/spice/tests/xspice/Makefile.am new file mode 100644 index 00000000..77f968b3 --- /dev/null +++ b/Windows/spice/tests/xspice/Makefile.am @@ -0,0 +1,5 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = digital + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/xspice/Makefile.in b/Windows/spice/tests/xspice/Makefile.in new file mode 100644 index 00000000..5b596649 --- /dev/null +++ b/Windows/spice/tests/xspice/Makefile.in @@ -0,0 +1,609 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/xspice +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = digital +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/xspice/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/xspice/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/xspice/digital/Makefile.am b/Windows/spice/tests/xspice/digital/Makefile.am new file mode 100644 index 00000000..c89536ee --- /dev/null +++ b/Windows/spice/tests/xspice/digital/Makefile.am @@ -0,0 +1,18 @@ +## Process this file with automake to produce Makefile.in + +TESTS = \ + d_ram.cir \ + d_source.cir \ + d_state.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) SPICE_SCRIPTS=. $(SHELL) $(top_srcdir)/tests/bin/check.sh "$(top_builddir)/src/ngspice -r foobaz" + +EXTRA_DIST = \ + d_ram-stimulus.txt \ + d_source-stimulus.txt \ + d_state-stimulus.txt \ + d_state-updn.txt \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/Windows/spice/tests/xspice/digital/Makefile.in b/Windows/spice/tests/xspice/digital/Makefile.in new file mode 100644 index 00000000..37e4f3f0 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/Makefile.in @@ -0,0 +1,523 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = tests/xspice/digital +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/spinit.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/ngspice/config.h +CONFIG_CLEAN_FILES = spinit +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMSXML = @ADMSXML@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTVLADEVDIR = @NOTVLADEVDIR@ +NOTXGRAPH = @NOTXGRAPH@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC = @STATIC@ +STRIP = @STRIP@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ +VERSION = @VERSION@ +VLADEV = @VLADEV@ +VLADEVDIR = @VLADEVDIR@ +XGRAPHDIR = @XGRAPHDIR@ +XMKMF = @XMKMF@ +XSPICEDLLIBS = @XSPICEDLLIBS@ +XSPICEINIT = @XSPICEINIT@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = \ + d_ram.cir \ + d_source.cir \ + d_state.cir + +TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) SPICE_SCRIPTS=. $(SHELL) $(top_srcdir)/tests/bin/check.sh "$(top_builddir)/src/ngspice -r foobaz" +EXTRA_DIST = \ + d_ram-stimulus.txt \ + d_source-stimulus.txt \ + d_state-stimulus.txt \ + d_state-updn.txt \ + $(TESTS) \ + $(TESTS:.cir=.out) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/xspice/digital/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/xspice/digital/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +spinit: $(top_builddir)/config.status $(srcdir)/spinit.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Windows/spice/tests/xspice/digital/d_ram-stimulus.txt b/Windows/spice/tests/xspice/digital/d_ram-stimulus.txt new file mode 100644 index 00000000..36b04c84 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/d_ram-stimulus.txt @@ -0,0 +1,36 @@ +* ram test +* a a a d d d d d we cs +0ns 0s 0s 0s 0r 0r 0r 0r 0r 0s 1s +10ns 0s 0s 0s 0r 0r 0r 0r 0r 1s 1s +20ns 0s 0s 0s 0r 0r 0r 0r 0r 0s 1s +30ns 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s +40ns 0s 0s 1s 0r 1r 1r 0r 1r 1s 1s +50ns 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s +60ns 0s 1s 0s 1r 1r 0r 1r 0r 0s 0s +70ns 0s 1s 0s 1r 1r 0r 1r 0r 1s 0s +80ns 0s 1s 0s 1r 1r 0r 1r 0r 0s 0s +90ns 0s 1s 1s 0r 0r 1r 1r 1r 0s 1s +100ns 0s 1s 1s 0r 0r 1r 1r 1r 1s 1s +110ns 0s 1s 1s 0r 0r 1r 1r 1r 0s 1s +120ns 1s 0s 0s 1r 0r 1r 0r 0r 0s 1s +130ns 1s 0s 0s 1r 0r 1r 0r 0r 1s 1s +140ns 1s 0s 0s 1r 0r 1r 0r 0r 0s 1s +150ns 1s 0s 1s 0r 0r 0r 0r 1r 0s 1s +160ns 1s 0s 1s 0r 0r 0r 0r 1r 1s 1s +170ns 1s 0s 1s 0r 0r 0r 0r 1r 0s 1s +180ns 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s +190ns 1s 1s 0s 0r 1r 1r 1r 0r 1s 1s +200ns 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s +210ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s +220ns 1s 1s 1s 1r 1r 0r 1r 1r 1s 1s +230ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s +240ns 0s 0s 0s 0r 0r 0r 0r 0r 0s 1s +250ns 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s +260ns 0s 1s 0s 1r 1r 0r 1r 0r 0s 1s +270ns 0s 1s 1s 0r 0r 1r 1r 1r 0s 1s +280ns 1s 0s 0s 1r 0r 1r 0r 0r 0s 1s +290ns 1s 0s 1s 0r 0r 0r 0r 1r 0s 1s +300ns 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s +310ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s +320ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 0s +330ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s diff --git a/Windows/spice/tests/xspice/digital/d_ram.cir b/Windows/spice/tests/xspice/digital/d_ram.cir new file mode 100644 index 00000000..1f1deb43 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/d_ram.cir @@ -0,0 +1,24 @@ +Code Model Test: d_source + d_ram + +* (compile (concat "SPICE_SCRIPTS=. ../../../src/ngspice " buffer-file-name) t) + + +vdummy dummy 0 DC=0 + +a_source [a0 a1 a2 d0 d1 d2 d3 d4 we cs] d_source1 +aram [d0 d1 d2 d3 d4] [o0 o1 o2 o3 o4] [a0 a1 a2] we [cs] d_ram1 + + +.model d_source1 d_source input_file="d_ram-stimulus.txt" + +.model d_ram1 d_ram (select_value=1 ic=2 read_delay=1ns) + + +.control +set noaskquit +set noacct +tran 100ps 350ns +eprint a0 a1 a2 d0 d1 d2 d3 d4 o0 o1 o2 o3 o4 we cs +.endc + +.end diff --git a/Windows/spice/tests/xspice/digital/d_source-stimulus.txt b/Windows/spice/tests/xspice/digital/d_source-stimulus.txt new file mode 100644 index 00000000..7f0d5d6a --- /dev/null +++ b/Windows/spice/tests/xspice/digital/d_source-stimulus.txt @@ -0,0 +1,13 @@ +* time, a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab +0n 0s 0s Uu Uu Uu Uu Uu Uu Uu Uu Uu +1n 1s 0s Uu Uu 0u Uu Uu Uu Uu Uu Uu +2n Us 0s Uu Uu 0u 0u Uu Uu Uu Uu Uu +3n Us 0r Uu Uu 0u 0u 0u Uu Uu Uu Uu +4n Us 1r Uu Uu 0u 0u 0u 0u Uu Uu Uu +5n Us Ur Uu Uu 0u 0u 0u 0u 0u Uu Uu +6n Us Ur 0z Uu 0u 0u 0u 0u 0u 0u Uu +7n Us Ur 1z Uu 0u 0u 0u 0u 0u 0u 0u +8n Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u +9n Us Ur Uz 0u 0u 0u 0u 0u 0u 0u 0u +10n Us Ur Uz 1u 0u 0u 0u 0u 0u 0u 0u +11n Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u diff --git a/Windows/spice/tests/xspice/digital/d_source.cir b/Windows/spice/tests/xspice/digital/d_source.cir new file mode 100644 index 00000000..83cc8b56 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/d_source.cir @@ -0,0 +1,19 @@ +Code Model Test: d_source + +* (compile (concat "SPICE_SCRIPTS=. ../../../src/ngspice " buffer-file-name) t) + + +vdummy dummy 0 DC=0 + +a_source [a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab] d_source1 + +.model d_source1 d_source (input_file="d_source-stimulus.txt") + +.control +set noaskquit +set noacct +tran 100ps 30ns +eprint a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab +.endc + +.end diff --git a/Windows/spice/tests/xspice/digital/d_state-stimulus.txt b/Windows/spice/tests/xspice/digital/d_state-stimulus.txt new file mode 100644 index 00000000..92b493c1 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/d_state-stimulus.txt @@ -0,0 +1,4 @@ +* time, enable, reset, up +0 0s 1s 1s +1n 1s 0s 1s +9n 1s 0s 0s diff --git a/Windows/spice/tests/xspice/digital/d_state-updn.txt b/Windows/spice/tests/xspice/digital/d_state-updn.txt new file mode 100644 index 00000000..085159e7 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/d_state-updn.txt @@ -0,0 +1,16 @@ +* This is an example state.in file. This file +* defines a simple 2-bit counter with one input. The +* value of this input determines whether the counter counts +* up (in = 1) or down (in = 0). + +0 0s 0s 0 -> 3 + 1 -> 1 + +1 0s 1z 0 -> 0 + 1 -> 2 + +2 1z 0s 0 -> 1 + 1 -> 3 + +3 1z 1z 0 -> 2 +3 1z 1z 1 -> 0 diff --git a/Windows/spice/tests/xspice/digital/d_state.cir b/Windows/spice/tests/xspice/digital/d_state.cir new file mode 100644 index 00000000..facc8650 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/d_state.cir @@ -0,0 +1,35 @@ +Code Model Test: d_source + d_state + +* (compile (concat "SPICE_SCRIPTS=. ../../../src/ngspice " buffer-file-name) t) + + +vdummy dummy 0 DC=0 + +a_source [enable reset up] d_source1 + +a_osc [enable clk] clk d_xor1 + +a_counter [up] clk reset [o1 o2] d_state1 + + +.model d_source1 d_source (input_file="d_state-stimulus.txt") + +.model d_xor1 d_xor (rise_delay=1ns fall_delay=1ns) + +.model d_state1 d_state (clk_delay=0.1ns reset_delay=0.1ns ++ state_file="d_state-updn.txt" reset_state=0) + +.control +set noaskquit +set noacct +tran 100ps 20ns +eprint clk up reset o1 o2 +.endc + +.end + + + + + + diff --git a/Windows/spice/tests/xspice/digital/spinit.in b/Windows/spice/tests/xspice/digital/spinit.in new file mode 100644 index 00000000..d43d6aa9 --- /dev/null +++ b/Windows/spice/tests/xspice/digital/spinit.in @@ -0,0 +1,3 @@ +codemodel @top_builddir@/src/xspice/icm/digital/digital.cm +set sourcepath = ( $ngspice_vpath . ) +set filetype=binary -- cgit