addr release only on op_ldst
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 1 Jun 2019 14:28:12 +0000 (15:28 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 1 Jun 2019 14:28:12 +0000 (15:28 +0100)
src/experiment/compldst.py

index f3bd86a36c025f85a29beb4f287fa1e4efb9b05a..d6f363e2f6abdfc03a6378f8eaea905495d39c68 100644 (file)
@@ -149,13 +149,15 @@ class LDSTCompUnit(Elaboratable):
         m.d.sync += sto_l.s.eq(self.go_ad_i)
         m.d.sync += sto_l.r.eq(reset_s)
 
-        # outputs
+        # outputs: busy and release signals
         busy_o = self.busy_o
         m.d.comb += self.busy_o.eq(opc_l.q) # busy out
         m.d.comb += self.rd_rel_o.eq(src_l.q & busy_o) # src1/src2 req rel
-        m.d.comb += self.adr_rel_o.eq(adr_l.q & ~op_ldst & busy_o)
         m.d.comb += self.sto_rel_o.eq(sto_l.q & busy_o & self.shadown_i)
 
+        # address release only happens on LD/ST, and is shadowed.
+        m.d.comb += self.adr_rel_o.eq(adr_l.q & op_ldst & busy_o & self.shadownn_i)
+
         # request release enabled based on if op is a LD/ST or a plain ALU
         # if op is a LD/ST, req_rel activates from the *address* latch
         # if op is ADD/SUB, req_rel activates from the *dest* latch