From 10f0807a9b69963084b2219600a178a4d7f901cf Mon Sep 17 00:00:00 2001 From: Peter Rugg Date: Fri, 28 May 2021 14:37:24 +0100 Subject: [PATCH] Fix arbitration for non-power-of-two numbers of sources --- src_Core/RISCY_OOO/coherence/src/CrossBar.bsv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_Core/RISCY_OOO/coherence/src/CrossBar.bsv b/src_Core/RISCY_OOO/coherence/src/CrossBar.bsv index dba7565..4e1bb86 100644 --- a/src_Core/RISCY_OOO/coherence/src/CrossBar.bsv +++ b/src_Core/RISCY_OOO/coherence/src/CrossBar.bsv @@ -102,7 +102,7 @@ module mkXBar#( end endfunction // find the first valid source starting at srcRR[dst] - Vector#(srcNum, srcIdxT) srcIdxVec = rotateBy(genWith(fromInteger), -unpack(srcRR[dst])); + Vector#(srcNum, srcIdxT) srcIdxVec = reverse(rotateBy(reverse(genWith(fromInteger)), unpack(srcRR[dst]))); // Double reverse to achieve rotateBy left, since it's not provided by Bluespec Maybe#(srcIdxT) whichSrc = fmap(select(srcIdxVec), searchIndex(isFromSrc, srcIdxVec)); // the src to select if(whichSrc matches tagged Valid .src) begin // can do enq & deq