}
self.pspec = pspec
if self.pspec.imem_ifacetype in ['mmu_cache_wb', 'test_mmu_cache_wb']:
- self.fu = self.lsmem.lsi.icache # ICache already FetchUnitInterface
+ # XXX BLECH! use pspec to transfer the I-Cache which is
+ # created down inside LoadStore1!
+ self.fu = icache = pspec.icache # ICache already FetchUnitInterface
# tell I-Cache to connect up to its FetchUnitInterface
- self.fu.use_fetch_interface()
+ icache.use_fetch_interface()
return
fukls = fudict[pspec.imem_ifacetype]
lsi = l0.cmpi.lsmem.lsi # a LoadStore1 Interface object
print ("core lsmem.lsi", lsi)
mmu.alu.set_ldst_interface(lsi)
+ # urr store I-Cache in core so it is easier to get at
+ self.icache = lsi.icache
# register files (yes plural)
self.regs = RegFiles(pspec, make_hazard_vecs=self.make_hazard_vecs)
from soc.clock.select import ClockSelect
from soc.clock.dummypll import DummyPLL
from openpower.sv.svstate import SVSTATERec
-
+from soc.experiment.icache import ICache
from nmutil.util import rising_edge
self.svp64 = SVP64PrefixDecoder() # for decoding SVP64 prefix
# Test Instruction memory
+ if hasattr(core, "icache"):
+ # XXX BLECH! use pspec to transfer the I-Cache to ConfigFetchUnit
+ # truly dreadful. needs a huge reorg.
+ pspec.icache = core.icache
self.imem = ConfigFetchUnit(pspec).fu
# DMI interface
dbd = DomainRenamer(self.dbg_domain)
m.submodules.core = core = csd(self.core)
- m.submodules.imem = imem = csd(self.imem)
+ # this _so_ needs sorting out. ICache is added down inside
+ # LoadStore1 and is already a submodule of LoadStore1
+ if not isinstance(self.imem, ICache):
+ m.submodules.imem = imem = csd(self.imem)
m.submodules.dbg = dbg = dbd(self.dbg)
if self.jtag_en:
m.submodules.jtag = jtag = dbd(self.jtag)