From 0f8898c9e383bf44d37a05d9c8490c5f97a4c385 Mon Sep 17 00:00:00 2001 From: Luke Kenneth Casson Leighton Date: Sun, 21 Nov 2021 22:21:52 +0000 Subject: [PATCH] block picker hazard on input to PriorityPicker rather than output reason: another register could be picked if the input is blocked but if the output is masked out, the picker will sit there with the highest priority port stopping all others --- src/soc/simple/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/soc/simple/core.py b/src/soc/simple/core.py index fc851d40..c47a9464 100644 --- a/src/soc/simple/core.py +++ b/src/soc/simple/core.py @@ -491,9 +491,9 @@ class NonProductionCore(ControlBase): # exclude any currently-enabled read-request (mask out active) comb += pick.eq(fu.rd_rel_o[idx] & fu_active & rdflags[i] & - ~delay_pick) + ~delay_pick & ~hazard_detected) # entirely block anything hazarded from being picked - comb += rdpick.i[pi].eq(pick & ~hazard_detected) + comb += rdpick.i[pi].eq(pick) comb += fu.go_rd_i[idx].eq(delay_pick) # pass in *delayed* pick # if picked, select read-port "reg select" number to port -- 2.30.2