From 765420c81d144bb08021a7aa09a9a0692f5d6322 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Fri, 16 Jul 2021 13:22:51 -0700 Subject: Add counter module and simplify board design for shift instructions. --- insts.rb | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) (limited to 'insts.rb') diff --git a/insts.rb b/insts.rb index bc9c156..d24a31d 100644 --- a/insts.rb +++ b/insts.rb @@ -105,8 +105,69 @@ alu :xor alu :add alu :sub alu :cmp -alu :lshift -alu :rshift + +inst "lshift $ #" do + uop { @decode.outdata_b; @counter.load; @control.set_uip_if_zero; constaddr($eom) } + uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @alu.xor; constaddr(0) } + shiftloop = uip() + uop { @counter.decrement; @alu.outdata; @alu.lshift; constaddr(0) } + uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) } + uop { @decode.outaddr_a; @alu.outdata; @rf.store } +end + +inst "lshift $ $" do + uop { @decode.outaddr_b; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @counter.load; @control.set_uip_if_zero; constaddr($eom) } + uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @alu.xor; constaddr(0) } + shiftloop = uip() + uop { @counter.decrement; @alu.outdata; @alu.lshift; constaddr(0) } + uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) } + uop { @decode.outaddr_a; @alu.outdata; @rf.store } +end + +inst "rshift $ #" do + uop { @decode.outdata_b; @counter.load; @control.set_uip_if_zero; constaddr($eom) } + uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @alu.xor; constaddr(0) } + shiftloop = uip() + uop { @counter.decrement; @alu.outdata; @alu.rshift; constaddr(0) } + uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) } + uop { @decode.outaddr_a; @alu.outdata; @rf.store } +end + +inst "rshift $ $" do + uop { @decode.outaddr_b; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @counter.load; @control.set_uip_if_zero; constaddr($eom) } + uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @alu.xor; constaddr(0) } + shiftloop = uip() + uop { @counter.decrement; @alu.outdata; @alu.rshift; constaddr(0) } + uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) } + uop { @decode.outaddr_a; @alu.outdata; @rf.store } +end + +inst "rshiftsign $ #" do + uop { @decode.outdata_b; @counter.load; @control.set_uip_if_zero; constaddr($eom) } + uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @alu.xor; constaddr(0) } + shiftloop = uip() + uop { @tmp0.outaddr; @counter.decrement; @alu.outdata; @alu.rshift } + uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) } + uop { @decode.outaddr_a; @alu.outdata; @rf.store } +end + +inst "rshiftsign $ $" do + uop { @decode.outaddr_b; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @counter.load; @control.set_uip_if_zero; constaddr($eom) } + uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } + uop { @tmp0.outdata; @alu.xor; constaddr(0) } + shiftloop = uip() + uop { @tmp0.outaddr; @counter.decrement; @alu.outdata; @alu.rshift } + uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(shiftloop) } + uop { @decode.outaddr_a; @alu.outdata; @rf.store } +end def cmpbit(name, bit) inst "#{name} $ #" do -- cgit v1.2.3