From ede6270ed75c9717bc85b0f7b5847da854bf497e Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Fri, 20 Jan 2023 15:49:16 -0800 Subject: [PATCH] Put source to sleep when there is no data to send Signed-off-by: Alex Forencich --- cocotbext/axi/axis.py | 5 +++++ cocotbext/axi/stream.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/cocotbext/axi/axis.py b/cocotbext/axi/axis.py index d5fee2f..20a7cd5 100644 --- a/cocotbext/axi/axis.py +++ b/cocotbext/axi/axis.py @@ -425,6 +425,7 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause): frame = AxiStreamFrame(frame) await self.queue.put(frame) self.idle_event.clear() + self.active_event.set() self.queue_occupancy_bytes += len(frame) self.queue_occupancy_frames += 1 @@ -434,6 +435,7 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause): frame = AxiStreamFrame(frame) self.queue.put_nowait(frame) self.idle_event.clear() + self.active_event.set() self.queue_occupancy_bytes += len(frame) self.queue_occupancy_frames += 1 @@ -561,6 +563,9 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause): self.active = bool(frame) if not frame and self.queue.empty(): self.idle_event.set() + self.active_event.clear() + + await self.active_event.wait() class AxiStreamMonitor(AxiStreamBase): diff --git a/cocotbext/axi/stream.py b/cocotbext/axi/stream.py index de2a3b6..d85aa80 100644 --- a/cocotbext/axi/stream.py +++ b/cocotbext/axi/stream.py @@ -206,12 +206,14 @@ class StreamSource(StreamBase, StreamPause): await self.dequeue_event.wait() await self.queue.put(obj) self.idle_event.clear() + self.active_event.set() def send_nowait(self, obj): if self.full(): raise QueueFull() self.queue.put_nowait(obj) self.idle_event.clear() + self.active_event.set() def full(self): if self.queue_occupancy_limit > 0 and self.count() >= self.queue_occupancy_limit: @@ -255,6 +257,9 @@ class StreamSource(StreamBase, StreamPause): self.active = not self.queue.empty() if self.queue.empty(): self.idle_event.set() + self.active_event.clear() + + await self.active_event.wait() class StreamMonitor(StreamBase):