cores/dma: add stream.last support on WishboneDMAReader.
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 9 Jul 2020 10:18:09 +0000 (12:18 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 9 Jul 2020 10:18:09 +0000 (12:18 +0200)
litex/soc/cores/dma.py

index b9902a9aad87d544433e847c28ef54c4657d2e22..b116c867cd5fa6af6ef9d9d6601f8efd9ef2c7c3 100644 (file)
@@ -39,7 +39,7 @@ class WishboneDMAReader(Module, AutoCSR):
     def __init__(self, bus, endianness="little", with_csr=False):
         assert isinstance(bus, wishbone.Interface)
         self.bus    = bus
-        self.sink   = sink   = stream.Endpoint([("address", bus.adr_width)])
+        self.sink   = sink   = stream.Endpoint([("address", bus.adr_width, ("last", 1))])
         self.source = source = stream.Endpoint([("data",    bus.data_width)])
 
         # # #
@@ -60,6 +60,7 @@ class WishboneDMAReader(Module, AutoCSR):
         )
         fsm.act("SOURCE-WRITE",
             source.valid.eq(1),
+            source.last.eq(sink.last),
             source.data.eq(data),
             If(source.ready,
                 sink.ready.eq(1),
@@ -99,10 +100,11 @@ class WishboneDMAReader(Module, AutoCSR):
         )
         fsm.act("RUN",
             self.sink.valid.eq(1),
+            self.sink.last.eq(offset == (length - 1)),
             self.sink.address.eq(base + offset),
             If(self.sink.ready,
                 NextValue(offset, offset + 1),
-                If(offset == (length - 1),
+                If(self.sink.last,
                     If(self._loop.storage,
                         NextValue(offset, 0)
                     ).Else(