xschem/xschem_library/examples/plot_manipulation.sch

134 lines
4.7 KiB
XML

v {xschem version=2.9.8 file_version=1.2}
G {}
K {}
V {}
S {}
E {}
T {This example shows how to create an ngspice custom plot
some op analyses are done and operating point data for node 'S'
of all op runs is collected and stored into a new vector,
result is saved in a raw file.} 10 -770 0 0 0.7 0.7 {layer=3}
N 30 -240 30 -210 {lab=VCC}
N 30 -240 60 -240 {lab=VCC}
N 240 -260 240 -210 {lab=GN}
N 240 -210 280 -210 {lab=GN}
N 280 -210 280 -180 {lab=GN}
N 280 -180 460 -180 {lab=GN}
N 500 -250 500 -210 {lab=S}
N 430 -280 450 -280 {lab=0}
N 550 -280 570 -280 {lab=0}
N 430 -250 570 -250 {lab=S}
N 370 -280 390 -280 {lab=PLUS}
N 610 -280 630 -280 {lab=MINUS}
N 570 -430 620 -430 {lab=VCC}
N 380 -430 430 -430 {lab=VCC}
N 470 -430 530 -430 {lab=G}
N 470 -430 470 -400 {lab=G}
N 430 -400 470 -400 {lab=G}
N 430 -400 430 -310 {lab=G}
N 570 -400 570 -310 {lab=DIFFOUT}
N 570 -500 570 -460 {lab=VCC}
N 430 -500 570 -500 {lab=VCC}
N 430 -500 430 -460 {lab=VCC}
N 500 -520 500 -500 {lab=VCC}
N 570 -360 830 -360 {lab=DIFFOUT}
N 30 -370 30 -340 {lab=PLUS}
N 30 -370 60 -370 {lab=PLUS}
N 30 -520 30 -490 {lab=MINUS}
N 30 -520 60 -520 {lab=MINUS}
N 500 -150 500 -120 {lab=0}
N 500 -150 520 -150 {lab=0}
N 520 -180 520 -150 {lab=0}
N 500 -180 520 -180 {lab=0}
N 240 -150 240 -120 {lab=0}
N 220 -150 240 -150 {lab=0}
N 220 -180 220 -150 {lab=0}
N 220 -180 240 -180 {lab=0}
C {lab_pin.sym} 750 -300 0 0 {name=p20 lab=0 net_name=true}
C {lab_pin.sym} 30 -150 0 0 {name=p17 lab=0 net_name=true}
C {title.sym} 160 -30 0 0 {name=l1 author="Stefan Schippers" net_name=true}
C {nmos4.sym} 480 -180 0 0 {name=m1 model=cmosn w=5u l=2u m=1 net_name=true}
C {pmos4.sym} 550 -430 0 0 {name=m2 model=cmosp w=5u l=2u m=1 net_name=true}
C {vsource.sym} 30 -180 0 0 {name=VVCC value=5 net_name=true}
C {lab_pin.sym} 500 -120 0 0 {name=p1 lab=0 net_name=true}
C {lab_pin.sym} 60 -240 0 1 {name=p2 lab=VCC net_name=true}
C {nmos4.sym} 260 -180 0 1 {name=m3 model=cmosn w=5u l=2u m=1 net_name=true}
C {lab_pin.sym} 240 -120 0 0 {name=p3 lab=0 net_name=true}
C {isource.sym} 240 -290 0 0 {name=IBIAS value=100u net_name=true}
C {lab_pin.sym} 240 -320 0 0 {name=p4 lab=0 net_name=true}
C {nmos4.sym} 410 -280 0 0 {name=m4 model=cmosn w=10u l=1u m=1 net_name=true}
C {lab_pin.sym} 450 -280 0 1 {name=p5 lab=0 net_name=true}
C {nmos4.sym} 590 -280 0 1 {name=m5 model=cmosn w=10u l=1u m=1 net_name=true}
C {lab_pin.sym} 550 -280 0 0 {name=p0 lab=0 net_name=true}
C {lab_pin.sym} 620 -430 0 1 {name=p6 lab=VCC net_name=true}
C {pmos4.sym} 450 -430 0 1 {name=m6 model=cmosp w=5u l=2u m=1 net_name=true}
C {lab_pin.sym} 380 -430 0 0 {name=p7 lab=VCC net_name=true}
C {lab_pin.sym} 500 -520 0 0 {name=p8 lab=VCC net_name=true}
C {lab_pin.sym} 370 -280 0 0 {name=p9 lab=PLUS net_name=true}
C {lab_pin.sym} 630 -280 0 1 {name=p10 lab=MINUS net_name=true}
C {lab_pin.sym} 830 -360 0 1 {name=p11 lab=DIFFOUT net_name=true}
C {lab_pin.sym} 240 -230 0 0 {name=p13 lab=GN net_name=true}
C {lab_pin.sym} 30 -280 0 0 {name=p14 lab=0 net_name=true}
C {vsource.sym} 30 -310 0 0 {name=VPLUS value="2.5 pwl 0 2.4 10n 2.4 10.1n 2.6" net_name=true}
C {lab_pin.sym} 60 -370 0 1 {name=p15 lab=PLUS net_name=true}
C {lab_pin.sym} 30 -430 0 0 {name=p16 lab=0 net_name=true}
C {vsource.sym} 30 -460 0 0 {name=V1 value=2.5 net_name=true}
C {lab_pin.sym} 60 -520 0 1 {name=p18 lab=MINUS net_name=true}
C {capa.sym} 750 -330 0 0 {name=CL
m=1
value=2p
footprint=1206
device="ceramic capacitor" net_name=true}
C {code.sym} 870 -190 0 0 {name=STIMULI
only_toplevel=true
value="
** ngspice
.temp 30
** xyce
* .step temp list 30
** ngspice
* .save all
** models are generally not free: you must download
** SPICE models for active devices and put them into the below
** referenced file in netlist/simulation directory.
.option savecurrents
.include \\"models_cmos_example.txt\\"
.control
let vol = 0
let i = 1
set curplot = new $ create a new plot
set myplot = $curplot $ store the plot name
set curplotname = myplot
let s_vec = vector(61)
settype voltage s_vec
while vol <= 6
alter VVCC vol $ change value of vcc source
op
let vol = vol + 0.1
set run = $&i $ create a var from the vector
let i = i + 1
setplot $myplot
let s_vec[\{$run\}] = op\{$run\}.s $ get operating point v(s) and store into vector
end
* current plot here is last set one, $myplot
compose vcc start=0 stop=6 step=0.1 $ build x-axis voltage
setscale vcc $ set as xaxis for myplot
settype voltage vcc
write plot_manipulation.raw
plot s_vec
.endc
** ngspice
* .save all
** xyce, not needed if -r given om cmdline
* .print tran format=raw v(diffout) v(plus) v(minus)
" net_name=true}
C {ngspice_probe.sym} 500 -210 0 0 {name=r9}
C {lab_pin.sym} 430 -370 0 0 {name=p12 lab=G net_name=true}
C {lab_pin.sym} 500 -230 0 0 {name=p19 lab=S net_name=true}