Clean up sink pause handling

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2023-08-13 13:20:35 -07:00
parent 775301c6fe
commit 28f4585c08
2 changed files with 22 additions and 10 deletions

View File

@@ -784,7 +784,7 @@ class AxiStreamSink(AxiStreamMonitor, AxiStreamPause):
wake_event = self.wake_event.wait() wake_event = self.wake_event.wait()
while True: while True:
pause_sample = self.pause pause_sample = bool(self.pause)
await clock_edge_event await clock_edge_event
@@ -827,8 +827,14 @@ class AxiStreamSink(AxiStreamMonitor, AxiStreamPause):
self.active = bool(frame) self.active = bool(frame)
if has_tready: if has_tready:
self.bus.tready.value = (not self.full() and not pause_sample) paused = self.full() or pause_sample
if not tvalid_sample or (self.pause and pause_sample) or self.full(): self.bus.tready.value = not paused
self.wake_event.clear()
await wake_event if (not tvalid_sample or paused) and (pause_sample == bool(self.pause)):
self.wake_event.clear()
await wake_event
else:
if not tvalid_sample:
self.wake_event.clear()
await wake_event

View File

@@ -398,7 +398,7 @@ class StreamSink(StreamMonitor, StreamPause):
wake_event = self.wake_event.wait() wake_event = self.wake_event.wait()
while True: while True:
pause_sample = self.pause pause_sample = bool(self.pause)
await clock_edge_event await clock_edge_event
@@ -413,11 +413,17 @@ class StreamSink(StreamMonitor, StreamPause):
self.active_event.set() self.active_event.set()
if has_ready: if has_ready:
self.ready.value = (not self.full() and not pause_sample) paused = self.full() or pause_sample
if not valid_sample or (self.pause and pause_sample) or self.full(): self.ready.value = not paused
self.wake_event.clear()
await wake_event if (not valid_sample or paused) and (pause_sample == bool(self.pause)):
self.wake_event.clear()
await wake_event
else:
if not valid_sample:
self.wake_event.clear()
await wake_event
def define_stream(name, signals, optional_signals=None, valid_signal=None, ready_signal=None, signal_widths=None): def define_stream(name, signals, optional_signals=None, valid_signal=None, ready_signal=None, signal_widths=None):