interconnect/wishbone: Switch to LiteXModule.

This commit is contained in:
Florent Kermarrec 2023-10-27 11:05:37 +02:00
parent 9ccac7f7e0
commit fa521f5c89
1 changed files with 20 additions and 20 deletions

View File

@ -128,7 +128,7 @@ class Interface(Record):
# Wishbone Timeout --------------------------------------------------------------------------------- # Wishbone Timeout ---------------------------------------------------------------------------------
class Timeout(Module): class Timeout(LiteXModule):
def __init__(self, master, cycles): def __init__(self, master, cycles):
self.error = Signal() self.error = Signal()
@ -158,19 +158,19 @@ def get_check_parameters(ports):
return data_width return data_width
class InterconnectPointToPoint(Module): class InterconnectPointToPoint(LiteXModule):
def __init__(self, master, slave): def __init__(self, master, slave):
self.comb += master.connect(slave) self.comb += master.connect(slave)
class Arbiter(Module): class Arbiter(LiteXModule):
def __init__(self, masters=None, target=None, controllers=None): def __init__(self, masters=None, target=None, controllers=None):
assert target is not None assert target is not None
assert (masters is not None) or (controllers is not None) assert (masters is not None) or (controllers is not None)
if controllers is not None: if controllers is not None:
masters = controllers masters = controllers
self.submodules.rr = roundrobin.RoundRobin(len(masters)) self.rr = roundrobin.RoundRobin(len(masters))
# mux master->slave signals # mux master->slave signals
for name, size, direction in _layout: for name, size, direction in _layout:
@ -194,7 +194,7 @@ class Arbiter(Module):
self.comb += self.rr.request.eq(Cat(*reqs)) self.comb += self.rr.request.eq(Cat(*reqs))
class Decoder(Module): class Decoder(LiteXModule):
# slaves is a list of pairs: # slaves is a list of pairs:
# 0) function that takes the address signal and returns a FHDL expression # 0) function that takes the address signal and returns a FHDL expression
# that evaluates to 1 when the slave is selected and 0 otherwise. # that evaluates to 1 when the slave is selected and 0 otherwise.
@ -235,17 +235,17 @@ class Decoder(Module):
self.comb += master.dat_r.eq(Reduce("OR", masked)) self.comb += master.dat_r.eq(Reduce("OR", masked))
class InterconnectShared(Module): class InterconnectShared(LiteXModule):
def __init__(self, masters, slaves, register=False, timeout_cycles=1e6): def __init__(self, masters, slaves, register=False, timeout_cycles=1e6):
data_width = get_check_parameters(ports=masters + [s for _, s in slaves]) data_width = get_check_parameters(ports=masters + [s for _, s in slaves])
shared = Interface(data_width=data_width) shared = Interface(data_width=data_width)
self.submodules.arbiter = Arbiter(masters, shared) self.arbiter = Arbiter(masters, shared)
self.submodules.decoder = Decoder(shared, slaves, register) self.decoder = Decoder(shared, slaves, register)
if timeout_cycles is not None: if timeout_cycles is not None:
self.submodules.timeout = Timeout(shared, timeout_cycles) self.timeout = Timeout(shared, timeout_cycles)
class Crossbar(Module): class Crossbar(LiteXModule):
def __init__(self, masters, slaves, register=False, timeout_cycles=1e6): def __init__(self, masters, slaves, register=False, timeout_cycles=1e6):
data_width = get_check_parameters(ports=masters + [s for _, s in slaves]) data_width = get_check_parameters(ports=masters + [s for _, s in slaves])
matches, busses = zip(*slaves) matches, busses = zip(*slaves)
@ -260,7 +260,7 @@ class Crossbar(Module):
# Wishbone Data Width Converter -------------------------------------------------------------------- # Wishbone Data Width Converter --------------------------------------------------------------------
class DownConverter(Module): class DownConverter(LiteXModule):
"""DownConverter """DownConverter
This module splits Wishbone accesses from a master interface to a smaller slave interface. This module splits Wishbone accesses from a master interface to a smaller slave interface.
@ -336,7 +336,7 @@ class DownConverter(Module):
self.comb += master.dat_r.eq(Cat(dat_r[dw_to:], slave.dat_r)) self.comb += master.dat_r.eq(Cat(dat_r[dw_to:], slave.dat_r))
self.sync += If(slave.ack | skip, dat_r.eq(master.dat_r)) self.sync += If(slave.ack | skip, dat_r.eq(master.dat_r))
class UpConverter(Module): class UpConverter(LiteXModule):
"""UpConverter""" """UpConverter"""
def __init__(self, master, slave): def __init__(self, master, slave):
# Parameters/Checks. # Parameters/Checks.
@ -359,7 +359,7 @@ class UpConverter(Module):
] ]
self.comb += Case(master.adr[:int(log2(ratio))], cases) self.comb += Case(master.adr[:int(log2(ratio))], cases)
class Converter(Module): class Converter(LiteXModule):
"""Converter """Converter
This module is a wrapper for DownConverter and UpConverter. This module is a wrapper for DownConverter and UpConverter.
@ -392,7 +392,7 @@ class Converter(Module):
# Wishbone SRAM ------------------------------------------------------------------------------------ # Wishbone SRAM ------------------------------------------------------------------------------------
class SRAM(Module): class SRAM(LiteXModule):
def __init__(self, mem_or_size, read_only=None, write_only=None, init=None, bus=None, name=None): def __init__(self, mem_or_size, read_only=None, write_only=None, init=None, bus=None, name=None):
if bus is None: if bus is None:
bus = Interface(data_width=32, address_width=32, addressing="word") bus = Interface(data_width=32, address_width=32, addressing="word")
@ -515,7 +515,7 @@ class SRAM(Module):
# Wishbone To CSR ---------------------------------------------------------------------------------- # Wishbone To CSR ----------------------------------------------------------------------------------
class Wishbone2CSR(Module): class Wishbone2CSR(LiteXModule):
def __init__(self, bus_wishbone=None, bus_csr=None, register=True): def __init__(self, bus_wishbone=None, bus_csr=None, register=True):
self.csr = bus_csr self.csr = bus_csr
if self.csr is None: if self.csr is None:
@ -535,7 +535,7 @@ class Wishbone2CSR(Module):
# Registered Access. # Registered Access.
if register: if register:
self.submodules.fsm = fsm = FSM(reset_state="IDLE") self.fsm = fsm = FSM(reset_state="IDLE")
fsm.act("IDLE", fsm.act("IDLE",
NextValue(self.csr.dat_w, self.wishbone.dat_w), NextValue(self.csr.dat_w, self.wishbone.dat_w),
If(self.wishbone.cyc & self.wishbone.stb, If(self.wishbone.cyc & self.wishbone.stb,
@ -556,7 +556,7 @@ class Wishbone2CSR(Module):
) )
# Un-Registered Access. # Un-Registered Access.
else: else:
self.submodules.fsm = fsm = FSM(reset_state="WRITE-READ") self.fsm = fsm = FSM(reset_state="WRITE-READ")
fsm.act("WRITE-READ", fsm.act("WRITE-READ",
self.csr.dat_w.eq(self.wishbone.dat_w), self.csr.dat_w.eq(self.wishbone.dat_w),
If(self.wishbone.cyc & self.wishbone.stb, If(self.wishbone.cyc & self.wishbone.stb,
@ -573,7 +573,7 @@ class Wishbone2CSR(Module):
# Wishbone Cache ----------------------------------------------------------------------------------- # Wishbone Cache -----------------------------------------------------------------------------------
class Cache(Module): class Cache(LiteXModule):
"""Cache """Cache
This module is a write-back wishbone cache that can be used as a L2 cache. This module is a write-back wishbone cache that can be used as a L2 cache.
@ -581,7 +581,7 @@ class Cache(Module):
""" """
def __init__(self, cachesize, master, slave, reverse=True): def __init__(self, cachesize, master, slave, reverse=True):
self.master = master self.master = master
self.slave = slave self.slave = slave
# # # # # #
@ -671,7 +671,7 @@ class Cache(Module):
return 1 return 1
# Control FSM # Control FSM
self.submodules.fsm = fsm = FSM(reset_state="IDLE") self.fsm = fsm = FSM(reset_state="IDLE")
fsm.act("IDLE", fsm.act("IDLE",
If(master.cyc & master.stb, If(master.cyc & master.stb,
NextState("TEST_HIT") NextState("TEST_HIT")