summaryrefslogtreecommitdiff
path: root/Windows/spice/examples/measure/inv-meas-tran-control.sp
diff options
context:
space:
mode:
Diffstat (limited to 'Windows/spice/examples/measure/inv-meas-tran-control.sp')
-rw-r--r--Windows/spice/examples/measure/inv-meas-tran-control.sp113
1 files changed, 113 insertions, 0 deletions
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
+