Ejemplo n.º 1
0
 def addTwoLevelCacheHierarchy(self, ic, dc, l2c, iwc=None, dwc=None):
     self.addPrivateSplitL1Caches(ic, dc, iwc, dwc)
     self.toL2Bus = CoherentBus()
     self.connectCachedPorts(self.toL2Bus)
     self.l2cache = l2c
     self.toL2Bus.master = self.l2cache.cpu_side
     self._cached_ports = ['l2cache.mem_side']
Ejemplo n.º 2
0
 def addTwoLevelCacheHierarchy(self, ic, dc, l2c, iwc=None, dwc=None):
     self.addPrivateSplitL1Caches(ic, dc, iwc, dwc)
     # Set a width of 32 bytes (256-bits), which is four times that
     # of the default bus. The clock of the CPU is inherited by
     # default.
     self.toL2Bus = CoherentBus(width=32)
     self.connectCachedPorts(self.toL2Bus)
     self.l2cache = l2c
     self.toL2Bus.master = self.l2cache.cpu_side
     self._cached_ports = ['l2cache.mem_side']
Ejemplo n.º 3
0
 def addTwoLevelCacheHierarchy(self, ic, dc, l2c, iwc=None, dwc=None):
     self.addPrivateSplitL1Caches(ic, dc, iwc, dwc)
     # Override the default bus clock of 1 GHz and uses the CPU
     # clock for the L1-to-L2 bus, and also set a width of 32 bytes
     # (256-bits), which is four times that of the default bus.
     self.toL2Bus = CoherentBus(clock=Parent.clock, width=32)
     self.connectCachedPorts(self.toL2Bus)
     self.l2cache = l2c
     self.toL2Bus.master = self.l2cache.cpu_side
     self._cached_ports = ['l2cache.mem_side']
Ejemplo n.º 4
0
    def addPrivateSplitL1Caches(self, ic, dc, iwc=None, dwc=None):
        self.icache = ic
        self.dcache = dc
        self.icache_port = ic.cpu_side
        self.dcache_port = dc.cpu_side
        self._cached_ports = ['icache.mem_side', 'dcache.mem_side']
        if buildEnv['TARGET_ISA'] in ['x86', 'arm']:
            if iwc and dwc:
                self.itb_walker_cache = iwc
                self.dtb_walker_cache = dwc
                if buildEnv['TARGET_ISA'] in ['arm']:
                    self.itb_walker_cache_bus = CoherentBus()
                    self.dtb_walker_cache_bus = CoherentBus()
                    self.itb_walker_cache_bus.master = iwc.cpu_side
                    self.dtb_walker_cache_bus.master = dwc.cpu_side
                    self.itb.walker.port = self.itb_walker_cache_bus.slave
                    self.dtb.walker.port = self.dtb_walker_cache_bus.slave
                    self.istage2_mmu.stage2_tlb.walker.port = self.itb_walker_cache_bus.slave
                    self.dstage2_mmu.stage2_tlb.walker.port = self.dtb_walker_cache_bus.slave
                else:
                    self.itb.walker.port = iwc.cpu_side
                    self.dtb.walker.port = dwc.cpu_side
                self._cached_ports += ["itb_walker_cache.mem_side", \
                                       "dtb_walker_cache.mem_side"]
            else:
                self._cached_ports += ["itb.walker.port", "dtb.walker.port"]

                if buildEnv['TARGET_ISA'] in ['arm']:
                    self._cached_ports += ["istage2_mmu.stage2_tlb.walker.port", \
                                           "dstage2_mmu.stage2_tlb.walker.port"]

            # Checker doesn't need its own tlb caches because it does
            # functional accesses only
            if self.checker != NULL:
                self._cached_ports += ["checker.itb.walker.port", \
                                       "checker.dtb.walker.port"]
                if buildEnv['TARGET_ISA'] in ['arm']:
                    self._cached_ports += ["checker.istage2_mmu.stage2_tlb.walker.port", \
                                           "checker.dstage2_mmu.stage2_tlb.walker.port"]