Transmit frames without using pop
This commit is contained in:
@@ -492,6 +492,7 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause):
|
|||||||
|
|
||||||
async def _run(self):
|
async def _run(self):
|
||||||
frame = None
|
frame = None
|
||||||
|
frame_offset = 0
|
||||||
self.active = False
|
self.active = False
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@@ -513,6 +514,7 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause):
|
|||||||
self.log.info("TX frame: %s", frame)
|
self.log.info("TX frame: %s", frame)
|
||||||
frame.normalize()
|
frame.normalize()
|
||||||
self.active = True
|
self.active = True
|
||||||
|
frame_offset = 0
|
||||||
|
|
||||||
if frame and not self.pause:
|
if frame and not self.pause:
|
||||||
tdata_val = 0
|
tdata_val = 0
|
||||||
@@ -523,13 +525,14 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause):
|
|||||||
tuser_val = 0
|
tuser_val = 0
|
||||||
|
|
||||||
for offset in range(self.byte_lanes):
|
for offset in range(self.byte_lanes):
|
||||||
tdata_val |= (frame.tdata.pop(0) & self.byte_mask) << (offset * self.byte_size)
|
tdata_val |= (frame.tdata[frame_offset] & self.byte_mask) << (offset * self.byte_size)
|
||||||
tkeep_val |= (frame.tkeep.pop(0) & 1) << offset
|
tkeep_val |= (frame.tkeep[frame_offset] & 1) << offset
|
||||||
tid_val = frame.tid.pop(0)
|
tid_val = frame.tid[frame_offset]
|
||||||
tdest_val = frame.tdest.pop(0)
|
tdest_val = frame.tdest[frame_offset]
|
||||||
tuser_val = frame.tuser.pop(0)
|
tuser_val = frame.tuser[frame_offset]
|
||||||
|
frame_offset += 1
|
||||||
|
|
||||||
if len(frame.tdata) == 0:
|
if frame_offset >= len(frame.tdata):
|
||||||
tlast_val = 1
|
tlast_val = 1
|
||||||
frame.sim_time_end = get_sim_time()
|
frame.sim_time_end = get_sim_time()
|
||||||
frame.handle_tx_complete()
|
frame.handle_tx_complete()
|
||||||
|
|||||||
Reference in New Issue
Block a user