2015-11-04 00:35:03 +08:00
|
|
|
from migen import *
|
|
|
|
from misoc.interconnect.csr import *
|
|
|
|
from misoc.interconnect import wishbone
|
2021-08-17 11:07:18 +08:00
|
|
|
from misoc.cores import vexriscv
|
2017-07-13 19:16:49 +08:00
|
|
|
from misoc.integration.wb_slaves import WishboneSlaveManager
|
2015-04-02 16:48:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
class KernelCPU(Module):
|
2015-06-17 21:36:12 +08:00
|
|
|
def __init__(self, platform,
|
2021-02-21 19:06:07 +08:00
|
|
|
exec_address=0x45000000,
|
2015-04-02 16:48:59 +08:00
|
|
|
main_mem_origin=0x40000000,
|
|
|
|
l2_size=8192):
|
|
|
|
self._reset = CSRStorage(reset=1)
|
|
|
|
|
|
|
|
# # #
|
|
|
|
|
2017-07-13 19:16:49 +08:00
|
|
|
self._wb_slaves = WishboneSlaveManager(0x80000000)
|
2015-04-02 16:48:59 +08:00
|
|
|
|
|
|
|
# CPU core
|
|
|
|
self.clock_domains.cd_sys_kernel = ClockDomain()
|
|
|
|
self.comb += [
|
|
|
|
self.cd_sys_kernel.clk.eq(ClockSignal()),
|
|
|
|
self.cd_sys_kernel.rst.eq(self._reset.storage)
|
|
|
|
]
|
2021-11-08 12:37:36 +08:00
|
|
|
kasli_v1 = isinstance(platform, kasli.Platform) and platform.hw_rev in ("v1.0", "v1.1")
|
2015-11-04 00:35:03 +08:00
|
|
|
self.submodules.cpu = ClockDomainsRenamer("sys_kernel")(
|
2021-11-08 12:37:36 +08:00
|
|
|
vexriscv.VexRiscv(platform, exec_address,
|
|
|
|
variant="VexRiscv_IMA" if kasli_v1 else "VexRiscv_G"))
|
2015-04-02 16:48:59 +08:00
|
|
|
|
|
|
|
# DRAM access
|
2015-06-17 21:36:12 +08:00
|
|
|
self.wb_sdram = wishbone.Interface()
|
2017-07-13 19:16:49 +08:00
|
|
|
self.add_wb_slave(main_mem_origin, 0x10000000, self.wb_sdram)
|
2015-04-02 16:48:59 +08:00
|
|
|
|
|
|
|
def get_csrs(self):
|
|
|
|
return [self._reset]
|
|
|
|
|
|
|
|
def do_finalize(self):
|
|
|
|
self.submodules.wishbonecon = wishbone.InterconnectShared(
|
2017-07-13 19:16:49 +08:00
|
|
|
[self.cpu.ibus, self.cpu.dbus],
|
|
|
|
self._wb_slaves.get_interconnect_slaves(), register=True)
|
2015-04-02 16:48:59 +08:00
|
|
|
|
2017-07-13 19:16:49 +08:00
|
|
|
def add_wb_slave(self, origin, length, interface):
|
2015-04-02 16:48:59 +08:00
|
|
|
if self.finalized:
|
|
|
|
raise FinalizeError
|
2017-07-13 19:16:49 +08:00
|
|
|
self._wb_slaves.add(origin, length, interface)
|