From: Luke Kenneth Casson Leighton Date: Sun, 7 Nov 2021 12:47:30 +0000 (+0000) Subject: fixed bug in MultiCompUnit, can return to combinatorial setting X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1a4ce85f335b82044a2ee70f299acb69b871041e;p=nmutil.git fixed bug in MultiCompUnit, can return to combinatorial setting 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 --- diff --git a/src/nmutil/concurrentunit.py b/src/nmutil/concurrentunit.py index b0faea7..25822b1 100644 --- a/src/nmutil/concurrentunit.py +++ b/src/nmutil/concurrentunit.py @@ -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