Add queue_occupancy_limit to StreamSink

This commit is contained in:
Alex Forencich
2021-01-07 20:08:44 -08:00
parent 154d3b11f4
commit 8f719daf75

View File

@@ -247,6 +247,17 @@ class StreamSink(StreamMonitor, StreamPause):
_valid_init = None _valid_init = None
_ready_init = 0 _ready_init = 0
def __init__(self, entity, name, clock, reset=None, *args, **kwargs):
super().__init__(entity, name, clock, reset, *args, **kwargs)
self.queue_occupancy_limit = None
def full(self):
if self.queue_occupancy_limit and len(self.queue) >= self.queue_occupancy_limit:
return True
else:
return False
async def _run(self): async def _run(self):
while True: while True:
await RisingEdge(self.clock) await RisingEdge(self.clock)
@@ -268,7 +279,7 @@ class StreamSink(StreamMonitor, StreamPause):
self.queue_sync.set() self.queue_sync.set()
if self.ready is not None: if self.ready is not None:
self.ready <= (not self.pause) self.ready <= (not self.full() and not self.pause)
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):