Clean up sink pause handling
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user