trigger ALU ready when operands ready
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 29 May 2020 16:11:00 +0000 (17:11 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 29 May 2020 16:11:06 +0000 (17:11 +0100)
src/soc/experiment/compalu_multi.py

index baa18031471107c871ed292a4384426e1e78c80e..3523e3fbdda88968630b1cccbad0a992b62b025e 100644 (file)
@@ -284,11 +284,9 @@ class MultiCompUnit(RegSpecALUAPI, Elaboratable):
         m.d.comb += all_rd_pulse.eq(all_rd & ~all_rd_dly)
 
         # on a go_read, tell the ALU we're accepting data.
-        # NOTE: this spells TROUBLE if the ALU isn't ready!
-        # go_read is only valid for one clock!
         m.submodules.alui_l = alui_l = SRLatch(False, name="alui")
         m.d.comb += self.alu.p.valid_i.eq(alui_l.q)
-        m.d.comb += alui_l.r.eq(self.alu.p.ready_o) # valid for one extra
+        m.d.sync += alui_l.r.eq(self.alu.p.ready_o & alui_l.q)
         m.d.comb += alui_l.s.eq(all_rd_pulse)
 
         # ALU output "ready" side.  alu "ready" indication stays hi until