diff --git a/cocotbext/axi/axis.py b/cocotbext/axi/axis.py index bcfd075..d43d274 100644 --- a/cocotbext/axi/axis.py +++ b/cocotbext/axi/axis.py @@ -394,9 +394,11 @@ class AxiStreamPause: self.set_pause_generator(None) async def _run_pause(self): + clock_edge_event = RisingEdge(self.clock) + for val in self._pause_generator: self.pause = val - await RisingEdge(self.clock) + await clock_edge_event class AxiStreamSource(AxiStreamBase, AxiStreamPause): @@ -483,8 +485,10 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause): frame_offset = 0 self.active = False + clock_edge_event = RisingEdge(self.clock) + while True: - await RisingEdge(self.clock) + await clock_edge_event # read handshake signals tready_sample = (not hasattr(self.bus, "tready")) or self.bus.tready.value @@ -615,8 +619,10 @@ class AxiStreamMonitor(AxiStreamBase): frame = None self.active = False + clock_edge_event = RisingEdge(self.clock) + while True: - await RisingEdge(self.clock) + await clock_edge_event # read handshake signals tready_sample = (not hasattr(self.bus, "tready")) or self.bus.tready.value @@ -693,8 +699,10 @@ class AxiStreamSink(AxiStreamMonitor, AxiStreamPause): frame = None self.active = False + clock_edge_event = RisingEdge(self.clock) + while True: - await RisingEdge(self.clock) + await clock_edge_event # read handshake signals tready_sample = (not hasattr(self.bus, "tready")) or self.bus.tready.value diff --git a/cocotbext/axi/stream.py b/cocotbext/axi/stream.py index 16ad365..9f57337 100644 --- a/cocotbext/axi/stream.py +++ b/cocotbext/axi/stream.py @@ -181,9 +181,11 @@ class StreamPause: self.set_pause_generator(None) async def _run_pause(self): + clock_edge_event = RisingEdge(self.clock) + for val in self._pause_generator: self.pause = val - await RisingEdge(self.clock) + await clock_edge_event class StreamSource(StreamBase, StreamPause): @@ -231,8 +233,10 @@ class StreamSource(StreamBase, StreamPause): self.valid.value = 0 async def _run(self): + clock_edge_event = RisingEdge(self.clock) + while True: - await RisingEdge(self.clock) + await clock_edge_event # read handshake signals ready_sample = self.ready is None or self.ready.value @@ -282,8 +286,10 @@ class StreamMonitor(StreamBase): await self.active_event.wait() async def _run(self): + clock_edge_event = RisingEdge(self.clock) + while True: - await RisingEdge(self.clock) + await clock_edge_event # read handshake signals ready_sample = self.ready is None or self.ready.value @@ -322,8 +328,10 @@ class StreamSink(StreamMonitor, StreamPause): self.ready.value = 0 async def _run(self): + clock_edge_event = RisingEdge(self.clock) + while True: - await RisingEdge(self.clock) + await clock_edge_event # read handshake signals ready_sample = self.ready is None or self.ready.value