from migen import ClockSignal, ResetSignal, Signal, Instance, Cat
-from litex.soc.interconnect import wishbone
+from litex.soc.interconnect import wishbone as wb
from litex.soc.cores.cpu import CPU
-CPU_VARIANTS = ["standard", "standard32"]
+CPU_VARIANTS = ["standard", "standard32", "ls180"]
def make_wb_bus(prefix, obj):
res['i_%s_%s' % (prefix, i)] = getattr(obj, i)
return res
+def make_wb_slave(prefix, obj):
+ res = {}
+ for i in ['stb', 'cyc', 'cti', 'bte', 'we', 'adr', 'dat_w', 'sel']:
+ res['i_%s_%s' % (prefix, i)] = getattr(obj, i)
+ for o in ['ack', 'err', 'dat_r']:
+ res['o_%s_%s' % (prefix, o)] = getattr(obj, o)
+ return res
+
class LibreSoC(CPU):
name = "libre_soc"
if variant == "standard32":
self.data_width = 32
- self.dbus = dbus = wishbone.Interface(data_width=32, adr_width=30)
+ self.dbus = dbus = wb.Interface(data_width=32, adr_width=30)
else:
- self.dbus = dbus = wishbone.Interface(data_width=64, adr_width=29)
+ self.dbus = dbus = wb.Interface(data_width=64, adr_width=29)
self.data_width = 64
- self.ibus = ibus = wishbone.Interface(data_width=64, adr_width=29)
+ self.ibus = ibus = wb.Interface(data_width=64, adr_width=29)
+
+ self.xics_icp = icp = wb.Interface(data_width=32, adr_width=30)
+ self.xics_ics = ics = wb.Interface(data_width=32, adr_width=30)
- self.xics_icp = icp = wishbone.Interface(data_width=32, adr_width=5)
- self.xics_ics = ics = wishbone.Interface(data_width=32, adr_width=14)
+ if variant != "ls180":
+ self.simple_gpio = gpio = wb.Interface(data_width=32, adr_width=30)
- self.ics_buses = [icp, ics]
self.periph_buses = [ibus, dbus]
self.memory_buses = []
# add wishbone buses to cpu params
self.cpu_params.update(make_wb_bus("ibus_", ibus))
self.cpu_params.update(make_wb_bus("dbus_", dbus))
- self.cpu_params.update(make_wb_bus("ics_wb_", ics))
- self.cpu_params.update(make_wb_bus("icp_wb_", icp))
+ self.cpu_params.update(make_wb_slave("ics_wb_", ics))
+ self.cpu_params.update(make_wb_slave("icp_wb_", icp))
+ if variant != "ls180":
+ self.cpu_params.update(make_wb_slave("gpio_wb_", gpio))
# add verilog sources
self.add_sources(platform)