XSPICE state machine example

This commit is contained in:
Holger Vogt 2018-07-28 12:54:02 +02:00
parent a5e382d0ea
commit 0de66ea3b8
2 changed files with 49 additions and 0 deletions

View File

@ -0,0 +1,36 @@
* state machine example
* by Marcel Hendrix, Jan. 10th, 2014
* Define a simple up/down counter that counts clk edges.
* Digital outputs are on msb+lsb.
* inputs clock reset outputs (all digital)
a0 [n_one] clk n_zero [msb lsb] state1
*.model state1 d_state(state_file = "D:\Software\Spice\various\xspice\state.in")
.model state1 d_state(state_file = "state.in")
* Digital "one" and "zero"
a1 n_one pullup1
.model pullup1 d_pullup(load = 1pF)
a2 n_zero pulldown1
.model pulldown1 d_pulldown(load = 1pF)
* Convert the digital outputs to analog so we can conveniently plot them
a3 [msb] [out_msb] dac1
a4 [lsb] [out_lsb] dac1
.model dac1 dac_bridge(out_low = 0 out_high = 5 out_undef = 2.5)
* The digital VCO needs an analog control voltage
Vcnt cntl 0 pulse(-1V 1V 0 5ms 4ms 1ms 1)
* Digital VCO to drive state-machine (counter)
a5 cntl clk var_clock
.model var_clock d_osc(cntl_array = [-2 -1 1 2] freq_array = [1e3 1e3 10e3 10e3]
+ duty_cycle = 0.1)
.control
tran 1us 10ms
write spifsim.raw
eprvcd n_one clk n_zero msb lsb > spifsim.vcd
.endc
.end

View File

@ -0,0 +1,13 @@
* 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).
* [state#] [output1 output2] [input] [next state]
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