From 1a4ce85f335b82044a2ee70f299acb69b871041e Mon Sep 17 00:00:00 2001 From: Luke Kenneth Casson Leighton Date: Sun, 7 Nov 2021 12:47:30 +0000 Subject: [PATCH] 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 --- src/nmutil/concurrentunit.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) 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 -- 2.30.2