interconnect/stream: Switch to LiteXModule.
This commit is contained in:
parent
002aad7a43
commit
9ccac7f7e0
|
@ -13,7 +13,7 @@ from migen.util.misc import xdir
|
|||
from migen.genlib import fifo
|
||||
from migen.genlib.cdc import MultiReg, PulseSynchronizer, AsyncResetSynchronizer
|
||||
|
||||
from litex.gen import LiteXContext
|
||||
from litex.gen import *
|
||||
|
||||
from litex.soc.interconnect.csr import *
|
||||
|
||||
|
@ -108,7 +108,7 @@ def get_single_ep(obj, filt):
|
|||
return list(eps.items())[0]
|
||||
|
||||
|
||||
class BinaryActor(Module):
|
||||
class BinaryActor(LiteXModule):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.build_binary_control(self.sink, self.source, *args, **kwargs)
|
||||
|
||||
|
@ -167,7 +167,7 @@ class PipelinedActor(BinaryActor):
|
|||
|
||||
# FIFO ---------------------------------------------------------------------------------------------
|
||||
|
||||
class _FIFOWrapper(Module):
|
||||
class _FIFOWrapper(LiteXModule):
|
||||
def __init__(self, fifo_class, layout, depth):
|
||||
self.sink = sink = Endpoint(layout)
|
||||
self.source = source = Endpoint(layout)
|
||||
|
@ -182,7 +182,7 @@ class _FIFOWrapper(Module):
|
|||
("last", 1)
|
||||
]
|
||||
|
||||
self.submodules.fifo = fifo = fifo_class(layout_len(fifo_layout), depth)
|
||||
self.fifo = fifo = fifo_class(layout_len(fifo_layout), depth)
|
||||
fifo_in = Record(fifo_layout)
|
||||
fifo_out = Record(fifo_layout)
|
||||
self.comb += [
|
||||
|
@ -244,7 +244,7 @@ class AsyncFIFO(_FIFOWrapper):
|
|||
|
||||
# ClockDomainCrossing ------------------------------------------------------------------------------
|
||||
|
||||
class ClockDomainCrossing(Module):
|
||||
class ClockDomainCrossing(LiteXModule):
|
||||
def __init__(self, layout, cd_from="sys", cd_to="sys", depth=None, buffered=False, with_common_rst=False):
|
||||
self.sink = Endpoint(layout)
|
||||
self.source = Endpoint(layout)
|
||||
|
@ -288,7 +288,7 @@ class ClockDomainCrossing(Module):
|
|||
|
||||
# Mux/Demux ----------------------------------------------------------------------------------------
|
||||
|
||||
class Multiplexer(Module):
|
||||
class Multiplexer(LiteXModule):
|
||||
def __init__(self, layout, n):
|
||||
self.source = Endpoint(layout)
|
||||
sinks = []
|
||||
|
@ -306,7 +306,7 @@ class Multiplexer(Module):
|
|||
self.comb += Case(self.sel, cases)
|
||||
|
||||
|
||||
class Demultiplexer(Module):
|
||||
class Demultiplexer(LiteXModule):
|
||||
def __init__(self, layout, n):
|
||||
self.sink = Endpoint(layout)
|
||||
sources = []
|
||||
|
@ -326,7 +326,7 @@ class Demultiplexer(Module):
|
|||
|
||||
# Gate ---------------------------------------------------------------------------------------------
|
||||
|
||||
class Gate(Module):
|
||||
class Gate(LiteXModule):
|
||||
def __init__(self, layout, sink_ready_when_disabled=False):
|
||||
self.sink = Endpoint(layout)
|
||||
self.source = Endpoint(layout)
|
||||
|
@ -344,7 +344,7 @@ class Gate(Module):
|
|||
|
||||
# Converter ----------------------------------------------------------------------------------------
|
||||
|
||||
class _UpConverter(Module):
|
||||
class _UpConverter(LiteXModule):
|
||||
def __init__(self, nbits_from, nbits_to, ratio, reverse):
|
||||
self.sink = sink = Endpoint([("data", nbits_from)])
|
||||
self.source = source = Endpoint([("data", nbits_to), ("valid_token_count", bits_for(ratio))])
|
||||
|
@ -399,7 +399,7 @@ class _UpConverter(Module):
|
|||
self.sync += If(load_part, source.valid_token_count.eq(demux + 1))
|
||||
|
||||
|
||||
class _DownConverter(Module):
|
||||
class _DownConverter(LiteXModule):
|
||||
def __init__(self, nbits_from, nbits_to, ratio, reverse):
|
||||
self.sink = sink = Endpoint([("data", nbits_from)])
|
||||
self.source = source = Endpoint([("data", nbits_to), ("valid_token_count", 1)])
|
||||
|
@ -439,7 +439,7 @@ class _DownConverter(Module):
|
|||
self.comb += source.valid_token_count.eq(last)
|
||||
|
||||
|
||||
class _IdentityConverter(Module):
|
||||
class _IdentityConverter(LiteXModule):
|
||||
def __init__(self, nbits_from, nbits_to, ratio, reverse):
|
||||
self.sink = sink = Endpoint([("data", nbits_from)])
|
||||
self.source = source = Endpoint([("data", nbits_to), ("valid_token_count", 1)])
|
||||
|
@ -470,7 +470,7 @@ def _get_converter_ratio(nbits_from, nbits_to):
|
|||
return converter_cls, ratio
|
||||
|
||||
|
||||
class Converter(Module):
|
||||
class Converter(LiteXModule):
|
||||
def __init__(self, nbits_from, nbits_to,
|
||||
reverse = False,
|
||||
report_valid_token_count = False):
|
||||
|
@ -490,7 +490,7 @@ class Converter(Module):
|
|||
self.comb += converter.source.connect(self.source, omit=set(["valid_token_count"]))
|
||||
|
||||
|
||||
class StrideConverter(Module):
|
||||
class StrideConverter(LiteXModule):
|
||||
def __init__(self, description_from, description_to, reverse=False):
|
||||
self.sink = sink = Endpoint(description_from)
|
||||
self.source = source = Endpoint(description_to)
|
||||
|
@ -560,7 +560,7 @@ def inc_mod(s, m):
|
|||
return [s.eq(s + 1), If(s == (m -1), s.eq(0))]
|
||||
|
||||
|
||||
class Gearbox(Module):
|
||||
class Gearbox(LiteXModule):
|
||||
def __init__(self, i_dw, o_dw, msb_first=True):
|
||||
self.sink = sink = Endpoint([("data", i_dw)])
|
||||
self.source = source = Endpoint([("data", o_dw)])
|
||||
|
@ -647,7 +647,7 @@ class Shifter(PipelinedActor):
|
|||
|
||||
# Monitor ------------------------------------------------------------------------------------------
|
||||
|
||||
class Monitor(Module, AutoCSR):
|
||||
class Monitor(LiteXModule):
|
||||
def __init__(self, endpoint, count_width=32, clock_domain="sys",
|
||||
with_tokens = False,
|
||||
with_overflows = False,
|
||||
|
@ -707,7 +707,7 @@ class Monitor(Module, AutoCSR):
|
|||
|
||||
# Tokens Count -----------------------------------------------------------------------------
|
||||
if with_tokens:
|
||||
self.submodules.token_counter = MonitorCounter(
|
||||
self.token_counter = MonitorCounter(
|
||||
reset = reset,
|
||||
latch = latch,
|
||||
enable = endpoint.valid & endpoint.ready,
|
||||
|
@ -716,7 +716,7 @@ class Monitor(Module, AutoCSR):
|
|||
|
||||
# Overflows Count (only useful when endpoint is expected to always be ready) ---------------
|
||||
if with_overflows:
|
||||
self.submodules.overflow_counter = MonitorCounter(
|
||||
self.overflow_counter = MonitorCounter(
|
||||
reset = reset,
|
||||
latch = latch,
|
||||
enable = endpoint.valid & ~endpoint.ready,
|
||||
|
@ -725,7 +725,7 @@ class Monitor(Module, AutoCSR):
|
|||
|
||||
# Underflows Count (only useful when endpoint is expected to always be valid) --------------
|
||||
if with_underflows:
|
||||
self.submodules.underflow_counter = MonitorCounter(
|
||||
self.underflow_counter = MonitorCounter(
|
||||
reset = reset,
|
||||
latch = latch,
|
||||
enable = ~endpoint.valid & endpoint.ready,
|
||||
|
@ -734,7 +734,7 @@ class Monitor(Module, AutoCSR):
|
|||
|
||||
# Packets Count ----------------------------------------------------------------------------
|
||||
if with_packets:
|
||||
self.submodules.packet_counter = MonitorCounter(
|
||||
self.packet_counter = MonitorCounter(
|
||||
reset = reset,
|
||||
latch = latch,
|
||||
enable = endpoint.valid & getattr(endpoint, packet_delimiter) & endpoint.ready,
|
||||
|
@ -743,7 +743,7 @@ class Monitor(Module, AutoCSR):
|
|||
|
||||
# Pipe ---------------------------------------------------------------------------------------------
|
||||
|
||||
class PipeValid(Module):
|
||||
class PipeValid(LiteXModule):
|
||||
"""Pipe valid/payload to cut timing path"""
|
||||
def __init__(self, layout):
|
||||
self.sink = sink = Endpoint(layout)
|
||||
|
@ -764,7 +764,7 @@ class PipeValid(Module):
|
|||
self.comb += sink.ready.eq(~source.valid | source.ready)
|
||||
|
||||
|
||||
class PipeReady(Module):
|
||||
class PipeReady(LiteXModule):
|
||||
"""Pipe ready to cut timing path"""
|
||||
def __init__(self, layout):
|
||||
self.sink = sink = Endpoint(layout)
|
||||
|
@ -796,7 +796,7 @@ class PipeReady(Module):
|
|||
|
||||
# Buffer -------------------------------------------------------------------------------------------
|
||||
|
||||
class Buffer(Module):
|
||||
class Buffer(LiteXModule):
|
||||
"""Pipe valid/payload and/or ready to cut timing path"""
|
||||
def __init__(self, layout, pipe_valid=True, pipe_ready=False):
|
||||
self.sink = sink = Endpoint(layout)
|
||||
|
@ -808,16 +808,16 @@ class Buffer(Module):
|
|||
|
||||
# Pipe Valid (Optional).
|
||||
if pipe_valid:
|
||||
self.submodules.pipe_valid = PipeValid(layout)
|
||||
self.pipe_valid = PipeValid(layout)
|
||||
pipeline.append(self.pipe_valid)
|
||||
|
||||
# Pipe Ready (Optional).
|
||||
if pipe_ready:
|
||||
self.submodules.pipe_ready = PipeReady(layout)
|
||||
self.pipe_ready = PipeReady(layout)
|
||||
pipeline.append(self.pipe_ready)
|
||||
|
||||
# Buffer Pipeline.
|
||||
self.submodules.pipeline = Pipeline(
|
||||
self.pipeline = Pipeline(
|
||||
sink,
|
||||
*pipeline,
|
||||
source
|
||||
|
@ -845,7 +845,7 @@ class Cast(CombinatorialActor):
|
|||
|
||||
# Unpack/Pack --------------------------------------------------------------------------------------
|
||||
|
||||
class Unpack(Module):
|
||||
class Unpack(LiteXModule):
|
||||
def __init__(self, n, layout_to, reverse=False):
|
||||
self.source = source = Endpoint(layout_to)
|
||||
description_from = Endpoint(layout_to).description
|
||||
|
@ -889,7 +889,7 @@ class Unpack(Module):
|
|||
]
|
||||
|
||||
|
||||
class Pack(Module):
|
||||
class Pack(LiteXModule):
|
||||
def __init__(self, layout_from, n, reverse=False):
|
||||
self.sink = sink = Endpoint(layout_from)
|
||||
description_to = Endpoint(layout_from).description
|
||||
|
@ -941,7 +941,7 @@ class Pack(Module):
|
|||
|
||||
# Pipeline -----------------------------------------------------------------------------------------
|
||||
|
||||
class Pipeline(Module):
|
||||
class Pipeline(LiteXModule):
|
||||
def __init__(self, *modules):
|
||||
self.modules = list(modules)
|
||||
if len(self.modules):
|
||||
|
|
Loading…
Reference in New Issue