BaseCPU.py revision 3170
112027Sjungma@eit.uni-kl.defrom m5.SimObject import SimObject 212027Sjungma@eit.uni-kl.defrom m5.params import * 312027Sjungma@eit.uni-kl.defrom m5.proxy import * 412027Sjungma@eit.uni-kl.defrom m5 import build_env 512027Sjungma@eit.uni-kl.defrom AlphaTLB import AlphaDTB, AlphaITB 612027Sjungma@eit.uni-kl.defrom Bus import Bus 712027Sjungma@eit.uni-kl.de 812027Sjungma@eit.uni-kl.declass BaseCPU(SimObject): 912027Sjungma@eit.uni-kl.de type = 'BaseCPU' 1012027Sjungma@eit.uni-kl.de abstract = True 1112027Sjungma@eit.uni-kl.de mem = Param.MemObject("memory") 1212027Sjungma@eit.uni-kl.de 1312027Sjungma@eit.uni-kl.de system = Param.System(Parent.any, "system object") 1412027Sjungma@eit.uni-kl.de cpu_id = Param.Int("CPU identifier") 1512027Sjungma@eit.uni-kl.de 1612027Sjungma@eit.uni-kl.de if build_env['FULL_SYSTEM']: 1712027Sjungma@eit.uni-kl.de dtb = Param.AlphaDTB(AlphaDTB(), "Data TLB") 1812027Sjungma@eit.uni-kl.de itb = Param.AlphaITB(AlphaITB(), "Instruction TLB") 1912027Sjungma@eit.uni-kl.de else: 2012027Sjungma@eit.uni-kl.de workload = VectorParam.Process("processes to run") 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de max_insts_all_threads = Param.Counter(0, 2312027Sjungma@eit.uni-kl.de "terminate when all threads have reached this inst count") 2412027Sjungma@eit.uni-kl.de max_insts_any_thread = Param.Counter(0, 2512027Sjungma@eit.uni-kl.de "terminate when any thread reaches this inst count") 2612027Sjungma@eit.uni-kl.de max_loads_all_threads = Param.Counter(0, 2712027Sjungma@eit.uni-kl.de "terminate when all threads have reached this load count") 2812027Sjungma@eit.uni-kl.de max_loads_any_thread = Param.Counter(0, 2912027Sjungma@eit.uni-kl.de "terminate when any thread reaches this load count") 3012027Sjungma@eit.uni-kl.de progress_interval = Param.Tick(0, "interval to print out the progress message") 3112027Sjungma@eit.uni-kl.de 3212027Sjungma@eit.uni-kl.de defer_registration = Param.Bool(False, 3312027Sjungma@eit.uni-kl.de "defer registration with system (for sampling)") 3412027Sjungma@eit.uni-kl.de 3512027Sjungma@eit.uni-kl.de clock = Param.Clock(Parent.clock, "clock speed") 3612027Sjungma@eit.uni-kl.de 3712027Sjungma@eit.uni-kl.de _mem_ports = [] 3812027Sjungma@eit.uni-kl.de 3912027Sjungma@eit.uni-kl.de def connectMemPorts(self, bus): 4012027Sjungma@eit.uni-kl.de for p in self._mem_ports: 4112027Sjungma@eit.uni-kl.de exec('self.%s = bus.port' % p) 4212027Sjungma@eit.uni-kl.de 4312027Sjungma@eit.uni-kl.de def addPrivateSplitL1Caches(self, ic, dc): 4412027Sjungma@eit.uni-kl.de assert(len(self._mem_ports) == 2) 4512027Sjungma@eit.uni-kl.de self.icache = ic 4612027Sjungma@eit.uni-kl.de self.dcache = dc 4712027Sjungma@eit.uni-kl.de self.icache_port = ic.cpu_side 4812027Sjungma@eit.uni-kl.de self.dcache_port = dc.cpu_side 4912027Sjungma@eit.uni-kl.de self._mem_ports = ['icache.mem_side', 'dcache.mem_side'] 5012027Sjungma@eit.uni-kl.de# self.mem = dc 5112027Sjungma@eit.uni-kl.de 5212027Sjungma@eit.uni-kl.de def addTwoLevelCacheHierarchy(self, ic, dc, l2c): 5312027Sjungma@eit.uni-kl.de self.addPrivateSplitL1Caches(ic, dc) 5412027Sjungma@eit.uni-kl.de self.toL2Bus = Bus() 5512027Sjungma@eit.uni-kl.de self.connectMemPorts(self.toL2Bus) 5612027Sjungma@eit.uni-kl.de self.l2cache = l2c 5712027Sjungma@eit.uni-kl.de self.l2cache.cpu_side = self.toL2Bus.port 5812027Sjungma@eit.uni-kl.de self._mem_ports = ['l2cache.mem_side'] 5912027Sjungma@eit.uni-kl.de