summaryrefslogtreecommitdiff
path: root/insts.rb
diff options
context:
space:
mode:
authorJulian Blake Kongslie2021-07-16 13:22:51 -0700
committerJulian Blake Kongslie2021-07-16 13:22:51 -0700
commit765420c81d144bb08021a7aa09a9a0692f5d6322 (patch)
tree757bee21385f646fe1fedb1eeba627acbb8cdd09 /insts.rb
parentReformat modules.rb to be a little easier to read. (diff)
downloadbreadboarding-765420c81d144bb08021a7aa09a9a0692f5d6322.tar.xz
Add counter module and simplify board design for shift instructions.
Diffstat (limited to 'insts.rb')
-rw-r--r--insts.rb65
1 files changed, 63 insertions, 2 deletions
diff --git a/insts.rb b/insts.rb
index bc9c156..d24a31d 100644
--- a/insts.rb
+++ b/insts.rb
@@ -105,8 +105,69 @@ alu :xor
105alu :add 105alu :add
106alu :sub 106alu :sub
107alu :cmp 107alu :cmp
108alu :lshift 108
109alu :rshift 109inst "lshift $ #" do
110 uop { @decode.outdata_b; @counter.load; @control.set_uip_if_zero; constaddr($eom) }
111 uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata }
112 uop { @tmp0.outdata; @alu.xor; constaddr(0) }
113 shiftloop = uip()
114 uop { @counter.decrement; @alu.outdata; @alu.lshift; constaddr(0) }
115 uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) }
116 uop { @decode.outaddr_a; @alu.outdata; @rf.store }
117end
118
119inst "lshift $ $" do
120 uop { @decode.outaddr_b; @rf.outdata; @tmp0.loaddata }
121 uop { @tmp0.outdata; @counter.load; @control.set_uip_if_zero; constaddr($eom) }
122 uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata }
123 uop { @tmp0.outdata; @alu.xor; constaddr(0) }
124 shiftloop = uip()
125 uop { @counter.decrement; @alu.outdata; @alu.lshift; constaddr(0) }
126 uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) }
127 uop { @decode.outaddr_a; @alu.outdata; @rf.store }
128end
129
130inst "rshift $ #" do
131 uop { @decode.outdata_b; @counter.load; @control.set_uip_if_zero; constaddr($eom) }
132 uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata }
133 uop { @tmp0.outdata; @alu.xor; constaddr(0) }
134 shiftloop = uip()
135 uop { @counter.decrement; @alu.outdata; @alu.rshift; constaddr(0) }
136 uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) }
137 uop { @decode.outaddr_a; @alu.outdata; @rf.store }
138end
139
140inst "rshift $ $" do
141 uop { @decode.outaddr_b; @rf.outdata; @tmp0.loaddata }
142 uop { @tmp0.outdata; @counter.load; @control.set_uip_if_zero; constaddr($eom) }
143 uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata }
144 uop { @tmp0.outdata; @alu.xor; constaddr(0) }
145 shiftloop = uip()
146 uop { @counter.decrement; @alu.outdata; @alu.rshift; constaddr(0) }
147 uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) }
148 uop { @decode.outaddr_a; @alu.outdata; @rf.store }
149end
150
151inst "rshiftsign $ #" do
152 uop { @decode.outdata_b; @counter.load; @control.set_uip_if_zero; constaddr($eom) }
153 uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata }
154 uop { @tmp0.outdata; @alu.xor; constaddr(0) }
155 shiftloop = uip()
156 uop { @tmp0.outaddr; @counter.decrement; @alu.outdata; @alu.rshift }
157 uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) }
158 uop { @decode.outaddr_a; @alu.outdata; @rf.store }
159end
160
161inst "rshiftsign $ $" do
162 uop { @decode.outaddr_b; @rf.outdata; @tmp0.loaddata }
163 uop { @tmp0.outdata; @counter.load; @control.set_uip_if_zero; constaddr($eom) }
164 uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata }
165 uop { @tmp0.outdata; @alu.xor; constaddr(0) }
166 shiftloop = uip()
167 uop { @tmp0.outaddr; @counter.decrement; @alu.outdata; @alu.rshift }
168 uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) }
169 uop { @decode.outaddr_a; @alu.outdata; @rf.store }
170end
110 171
111def cmpbit(name, bit) 172def cmpbit(name, bit)
112 inst "#{name} $ #" do 173 inst "#{name} $ #" do