fixed bug in MultiCompUnit, can return to combinatorial setting
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 7 Nov 2021 12:47:30 +0000 (12:47 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 7 Nov 2021 12:47:30 +0000 (12:47 +0000)
https://bugs.libre-soc.org/show_bug.cgi?id=742

wrmask was interfering by being in too many places, and it is the
amalgamation of "data ok" signals.  wrmask had to be set and left
set, in order for (unnecessary) determination of end of the requests

src/nmutil/concurrentunit.py

index b0faea7d35d4845c5555179d2fba6247ffa6f7bf..25822b1ab66b9851ad4d879cee91413040278c26 100644 (file)
@@ -266,7 +266,6 @@ class ReservationStations2(Elaboratable):
                 # indicate ready to accept data, and accept it if incoming
                 with m.State("ACCEPTING%d" % i):
                     m.d.comb += self.p[i].o_ready.eq(1) # ready indicator
-                    m.d.sync += self.n[i].o_valid.eq(0) # invalidate output
                     with m.If(self.p[i].i_valid):  # valid data incoming
                         m.d.sync += rsvd[i].eq(1)  # now reserved
                         m.d.sync += nmoperator.eq(i_buf, self.p[i].i_data)
@@ -289,11 +288,8 @@ class ReservationStations2(Elaboratable):
                 # waiting for "valid" indicator on RS output: deliver it
                 with m.State("SENDON%d" % i):
                     with m.If(self.n[i].i_ready): # user is ready to receive
-                        # XXX this should be combinatorial not sync
-                        #m.d.sync += self.n[i].o_valid.eq(1) # indicate valid
-                        #m.d.sync += nmoperator.eq(self.n[i].o_data, o_buf)
-                        m.d.sync += self.n[i].o_valid.eq(1) # indicate valid
-                        m.d.sync += nmoperator.eq(self.n[i].o_data, o_buf)
+                        m.d.comb += self.n[i].o_valid.eq(1) # indicate valid
+                        m.d.comb += nmoperator.eq(self.n[i].o_data, o_buf)
                         m.d.sync += wait[i].eq(0) # clear waiting
                         m.d.sync += sent[i].eq(0) # and sending
                         m.d.sync += rsvd[i].eq(0) # and reserved