scoreboard 6600 experimentation
[soc.git] / src / scoreboard / fn_unit.py
index 1e597cda4dbd44a9830639a386ad05d4bcde21fc..3edabbde16eb2c2dc41eb4b5f9e8a4d508835090 100644 (file)
@@ -126,6 +126,7 @@ class FnUnit(Elaboratable):
         for i in range(self.n_dests):
             m.d.comb += self.xx_pend_o[i].eq(0)  # initialise all array
             m.d.comb += self.writable_o[i].eq(0) # to zero
+            m.d.comb += self.readable_o[i].eq(0) # to zero
 
         # go_wr latch: reset on go_wr HI, set on issue
         m.d.comb += wr_l.s.eq(self.issue_i)
@@ -161,8 +162,10 @@ class FnUnit(Elaboratable):
 
         # readable output signal
         g_rd = Signal(self.reg_width, reset_less=True)
-        m.d.comb += g_rd.eq((~self.g_wr_pend_i) & self.rd_pend_o)
-        m.d.comb += self.readable_o.eq(g_rd.bool())
+        ro = Signal(reset_less=True)
+        m.d.comb += g_rd.eq(self.g_wr_pend_i & self.rd_pend_o)
+        m.d.comb += ro.eq(~g_rd.bool())
+        m.d.comb += self.readable_o.eq(ro & rd_l.q)
 
         # writable output signal
         g_wr_v = Signal(self.reg_width, reset_less=True)