experimenting with option to shorten MultiCompUnit delays
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 1 Dec 2021 16:25:10 +0000 (16:25 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 1 Dec 2021 16:25:10 +0000 (16:25 +0000)
src/soc/experiment/compalu_multi.py
src/soc/fu/compunits/compunits.py

index 13850b70170b04d5f19a26d162b7eb9ae97f753a..e0931a03c5c55ec46f76e443a2890f72ad4deb64 100644 (file)
@@ -260,7 +260,7 @@ class MultiCompUnit(RegSpecALUAPI, Elaboratable):
         m.d.sync += src_l.r.eq(reset_r)
 
         # dest operand latch (not using issue_i)
-        m.d.sync += req_l.s.eq(alu_pulsem & self.wrmask)
+        rw_domain += req_l.s.eq(alu_pulsem & self.wrmask)
         m.d.sync += req_l.r.eq(reset_w | prev_wr_go)
 
         # pass operation to the ALU (sync: plenty time to wait for src reads)
@@ -293,9 +293,9 @@ class MultiCompUnit(RegSpecALUAPI, Elaboratable):
                 data_r = Signal.like(lro, name=name, reset_less=True)
                 wrok.append(ok & self.busy_o)
             with m.If(alu_pulse):
-                m.d.sync += data_r.eq(lro)
+                rw_domain += data_r.eq(lro)
             with m.If(self.issue_i):
-                m.d.sync += data_r.eq(0)
+                rw_domain += data_r.eq(0)
             drl.append(data_r)
 
         # ok, above we collated anything with an "ok" on the output side
index 03c28c426e88635001976f8616da250b81b1c261..6c8c669692fa6d8a0bf213b91533754208303ab4 100644 (file)
@@ -167,7 +167,8 @@ class FunctionUnitBaseMulti(ReservationStations2):
         for idx in range(num_rows):
             alu_name = "alu_%s%d" % (alu_name, idx)
             palu = self.pseudoalus[idx]
-            cu = MultiCompUnit(regspec, palu, opsubset, name=alu_name)
+            cu = MultiCompUnit(regspec, palu, opsubset, name=alu_name,
+                               sync_rw=True)
             cu.fnunit = self.fnunit
             cu.fu_muxidx = idx
             self.cu.append(cu)