From a767e00ce5db5faea2c6646f8b8051491d6c0736 Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Mon, 12 Apr 2021 13:49:20 -0700 Subject: [PATCH] Transmit frames without using pop --- cocotbext/axi/axis.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cocotbext/axi/axis.py b/cocotbext/axi/axis.py index ae70bdc..71694a3 100644 --- a/cocotbext/axi/axis.py +++ b/cocotbext/axi/axis.py @@ -492,6 +492,7 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause): async def _run(self): frame = None + frame_offset = 0 self.active = False while True: @@ -513,6 +514,7 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause): self.log.info("TX frame: %s", frame) frame.normalize() self.active = True + frame_offset = 0 if frame and not self.pause: tdata_val = 0 @@ -523,13 +525,14 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause): tuser_val = 0 for offset in range(self.byte_lanes): - tdata_val |= (frame.tdata.pop(0) & self.byte_mask) << (offset * self.byte_size) - tkeep_val |= (frame.tkeep.pop(0) & 1) << offset - tid_val = frame.tid.pop(0) - tdest_val = frame.tdest.pop(0) - tuser_val = frame.tuser.pop(0) + tdata_val |= (frame.tdata[frame_offset] & self.byte_mask) << (offset * self.byte_size) + tkeep_val |= (frame.tkeep[frame_offset] & 1) << offset + tid_val = frame.tid[frame_offset] + tdest_val = frame.tdest[frame_offset] + tuser_val = frame.tuser[frame_offset] + frame_offset += 1 - if len(frame.tdata) == 0: + if frame_offset >= len(frame.tdata): tlast_val = 1 frame.sim_time_end = get_sim_time() frame.handle_tx_complete()