soc/interconnect/stream/Monitor: Add Packets count (with configurable delimiter: first or last).
This commit is contained in:
parent
a03013e427
commit
b990b90c0e
|
@ -648,7 +648,8 @@ class Monitor(Module, AutoCSR):
|
||||||
def __init__(self, endpoint, count_width=32, clock_domain="sys",
|
def __init__(self, endpoint, count_width=32, clock_domain="sys",
|
||||||
with_tokens = False,
|
with_tokens = False,
|
||||||
with_overflows = False,
|
with_overflows = False,
|
||||||
with_underflows = False):
|
with_underflows = False,
|
||||||
|
with_packets = False, packet_delimiter="last"):
|
||||||
|
|
||||||
self.reset = CSR()
|
self.reset = CSR()
|
||||||
self.latch = CSR()
|
self.latch = CSR()
|
||||||
|
@ -658,6 +659,9 @@ class Monitor(Module, AutoCSR):
|
||||||
self.overflows = CSRStatus(count_width)
|
self.overflows = CSRStatus(count_width)
|
||||||
if with_underflows:
|
if with_underflows:
|
||||||
self.underflows = CSRStatus(count_width)
|
self.underflows = CSRStatus(count_width)
|
||||||
|
if with_packets:
|
||||||
|
assert packet_delimiter in ["first", "last"]
|
||||||
|
self.packets = CSRStatus(count_width)
|
||||||
|
|
||||||
# # #
|
# # #
|
||||||
|
|
||||||
|
@ -698,18 +702,39 @@ class Monitor(Module, AutoCSR):
|
||||||
|
|
||||||
# Tokens Count -----------------------------------------------------------------------------
|
# Tokens Count -----------------------------------------------------------------------------
|
||||||
if with_tokens:
|
if with_tokens:
|
||||||
token_counter = MonitorCounter(reset, latch, endpoint.valid & endpoint.ready, self.tokens.status)
|
self.submodules.token_counter = MonitorCounter(
|
||||||
self.submodules += token_counter
|
reset = reset,
|
||||||
|
latch = latch,
|
||||||
|
enable = endpoint.valid & endpoint.ready,
|
||||||
|
count = self.tokens.status,
|
||||||
|
)
|
||||||
|
|
||||||
# Overflows Count (only useful when endpoint is expected to always be ready) ---------------
|
# Overflows Count (only useful when endpoint is expected to always be ready) ---------------
|
||||||
if with_overflows:
|
if with_overflows:
|
||||||
overflow_counter = MonitorCounter(reset, latch, endpoint.valid & ~endpoint.ready, self.overflows.status)
|
self.submodules.overflow_counter = MonitorCounter(
|
||||||
self.submodules += overflow_counter
|
reset=reset,
|
||||||
|
latch=latch,
|
||||||
|
enable=endpoint.valid & ~endpoint.ready,
|
||||||
|
count = self.overflows.status,
|
||||||
|
)
|
||||||
|
|
||||||
# Underflows Count (only useful when endpoint is expected to always be valid) --------------
|
# Underflows Count (only useful when endpoint is expected to always be valid) --------------
|
||||||
if with_underflows:
|
if with_underflows:
|
||||||
underflow_counter = MonitorCounter(reset, latch, ~endpoint.valid & endpoint.ready, self.underflows.status)
|
self.submodules.underflow_counter = MonitorCounter(
|
||||||
self.submodules += underflow_counter
|
reset = reset,
|
||||||
|
latch = latch,
|
||||||
|
enable = ~endpoint.valid & endpoint.ready,
|
||||||
|
count = self.underflows.status,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Packets Count ----------------------------------------------------------------------------
|
||||||
|
if with_underflows:
|
||||||
|
self.submodules.packet_counter = MonitorCounter(
|
||||||
|
reset=reset,
|
||||||
|
latch=latch,
|
||||||
|
enable=endpoint.valid & getattr(endpoint, packet_delimiter) & endpoint.ready,
|
||||||
|
count = self.underflows.status
|
||||||
|
)
|
||||||
|
|
||||||
# Pipe ---------------------------------------------------------------------------------------------
|
# Pipe ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue