Defer idle event until completion of transfer
This commit is contained in:
@@ -469,8 +469,6 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause):
|
|||||||
if (tready_sample and tvalid_sample) or not tvalid_sample:
|
if (tready_sample and tvalid_sample) or not tvalid_sample:
|
||||||
if frame is None and not self.queue.empty():
|
if frame is None and not self.queue.empty():
|
||||||
frame = self.queue.get_nowait()
|
frame = self.queue.get_nowait()
|
||||||
if self.queue.empty():
|
|
||||||
self.idle_event.set()
|
|
||||||
self.queue_occupancy_bytes -= len(frame)
|
self.queue_occupancy_bytes -= len(frame)
|
||||||
self.queue_occupancy_frames -= 1
|
self.queue_occupancy_frames -= 1
|
||||||
frame.sim_time_start = get_sim_time()
|
frame.sim_time_start = get_sim_time()
|
||||||
@@ -520,6 +518,8 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause):
|
|||||||
if hasattr(self.bus, "tlast"):
|
if hasattr(self.bus, "tlast"):
|
||||||
self.bus.tlast <= 0
|
self.bus.tlast <= 0
|
||||||
self.active = bool(frame)
|
self.active = bool(frame)
|
||||||
|
if not frame and self.queue.empty():
|
||||||
|
self.idle_event.set()
|
||||||
|
|
||||||
|
|
||||||
class AxiStreamMonitor(AxiStreamBase):
|
class AxiStreamMonitor(AxiStreamBase):
|
||||||
|
|||||||
@@ -219,8 +219,6 @@ class StreamSource(StreamBase, StreamPause):
|
|||||||
if (ready_sample and valid_sample) or (not valid_sample):
|
if (ready_sample and valid_sample) or (not valid_sample):
|
||||||
if not self.queue.empty() and not self.pause:
|
if not self.queue.empty() and not self.pause:
|
||||||
self.bus.drive(self.queue.get_nowait())
|
self.bus.drive(self.queue.get_nowait())
|
||||||
if self.queue.empty():
|
|
||||||
self.idle_event.set()
|
|
||||||
if self.valid is not None:
|
if self.valid is not None:
|
||||||
self.valid <= 1
|
self.valid <= 1
|
||||||
self.active = True
|
self.active = True
|
||||||
@@ -228,6 +226,8 @@ class StreamSource(StreamBase, StreamPause):
|
|||||||
if self.valid is not None:
|
if self.valid is not None:
|
||||||
self.valid <= 0
|
self.valid <= 0
|
||||||
self.active = not self.queue.empty()
|
self.active = not self.queue.empty()
|
||||||
|
if self.queue.empty():
|
||||||
|
self.idle_event.set()
|
||||||
|
|
||||||
|
|
||||||
class StreamMonitor(StreamBase):
|
class StreamMonitor(StreamBase):
|
||||||
|
|||||||
Reference in New Issue
Block a user