interconnect/axi/AXIStreamInterface: add tuser support.
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 26 Jun 2020 06:36:16 +0000 (08:36 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 26 Jun 2020 06:36:16 +0000 (08:36 +0200)
litex/soc/interconnect/axi.py

index e95e01e03433a56180364783022ddb588fb51923..e094a3d158fbc711b896ccf3a24634bffef21bb9 100644 (file)
@@ -141,9 +141,13 @@ class AXILiteInterface:
 # AXI Stream Definition ----------------------------------------------------------------------------
 
 class AXIStreamInterface(stream.Endpoint):
-    def __init__(self, data_width=32):
+    def __init__(self, data_width=32, user_width=0):
         self.data_width = data_width
-        stream.Endpoint.__init__(self, [("data", data_width)])
+        self.user_width = user_width
+        axi_layout = [("data", data_width)]
+        if self.user_width:
+            axi_layout += [("user", user_width)]
+        stream.Endpoint.__init__(self, axi_layout)
 
     def get_ios(self, bus_name="axi"):
         subsignals = [
@@ -152,6 +156,8 @@ class AXIStreamInterface(stream.Endpoint):
             Subsignal("tready", Pins(1)),
             Subsignal("tdata",  Pins(self.data_width)),
         ]
+        if self.user_width:
+            subsignals += [Subsignal("tuser", Pins(self.user_width))]
         ios = [(bus_name , 0) + tuple(subsignals)]
         return ios
 
@@ -163,11 +169,15 @@ class AXIStreamInterface(stream.Endpoint):
             r.append(self.ready.eq(pads.tready))
             r.append(pads.tlast.eq(self.last))
             r.append(pads.tdata.eq(self.data))
+            if self.user_width:
+                r.append(pads.tuser.eq(self.user))
         if mode == "slave":
             r.append(self.valid.eq(pads.tvalid))
             r.append(pads.tready.eq(self.ready))
             r.append(self.last.eq(pads.tlast))
             r.append(self.data.eq(pads.tdata))
+            if self.user_width:
+                r.append(self.user.eq(pads.tuser))
         return r
 
 # AXI Bursts to Beats ------------------------------------------------------------------------------