loadstore: add done_delay
authorTobias Platen <tplaten@posteo.de>
Tue, 30 Nov 2021 16:56:45 +0000 (17:56 +0100)
committerTobias Platen <tplaten@posteo.de>
Tue, 30 Nov 2021 16:56:45 +0000 (17:56 +0100)
src/soc/fu/ldst/loadstore.py

index bb79fae5d9c1c461b910d6ffd0cea026712bfd72..9adb6f6b6b9d982215fee69c84a2feb08f3b1ad4 100644 (file)
@@ -86,6 +86,7 @@ class LoadStore1(PortInterfaceBase):
 
         # state info for LD/ST
         self.done          = Signal()
+        self.done_delay    = Signal()
         # latch most of the input request
         self.load          = Signal()
         self.tlbie         = Signal()
@@ -157,14 +158,16 @@ class LoadStore1(PortInterfaceBase):
         return st_ok
 
     def get_rd_data(self, m):
-        ld_ok = self.done     # indicates read data is valid
-        data = self.load_data # actual read data
+        ld_ok = self.done_delay # indicates read data is valid
+        data = self.load_data   # actual read data
         return data, ld_ok
 
     def elaborate(self, platform):
         m = super().elaborate(platform)
         comb, sync = m.d.comb, m.d.sync
 
+        sync += self.done_delay.eq(self.done)
+
         # create dcache module
         m.submodules.dcache = dcache = self.dcache