delay MMU LOOKUP done by one clock so that the exception matches timing
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 12 Dec 2021 20:45:04 +0000 (20:45 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 12 Dec 2021 20:45:04 +0000 (20:45 +0000)
src/soc/fu/mmu/fsm.py

index 3f20d9ab11951f57e6cec780495cd990cedf4811..5d0cc8140897f44983c64fd772256402869270a1 100644 (file)
@@ -224,7 +224,10 @@ class FSMMMUStage(ControlBase):
                     comb += valid.eq(1)   # start "pulse"
                     comb += ldst.instr_fault.eq(blip)
                     comb += ldst.maddr.eq(nia_i)
-                    comb += done.eq(mmu.d_in.done) # XXX should not access this!
+                    # XXX should not access this!
+                    mmu_done_delay = Signal()
+                    sync += mmu_done_delay.eq(mmu.d_in.done)
+                    comb += done.eq(mmu_done_delay)
                     comb += self.debug0.eq(3)
                     # LDST unit contains exception data, which (messily)
                     # is copied over, here.  not ideal but it will do for now