BaseCPU.py revision 4167
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 SparcTLB import SparcDTB, SparcITB 712027Sjungma@eit.uni-kl.defrom Bus import Bus 812027Sjungma@eit.uni-kl.deimport sys 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.declass BaseCPU(SimObject): 1112027Sjungma@eit.uni-kl.de type = 'BaseCPU' 1212027Sjungma@eit.uni-kl.de abstract = True 1312027Sjungma@eit.uni-kl.de 1412027Sjungma@eit.uni-kl.de system = Param.System(Parent.any, "system object") 1512027Sjungma@eit.uni-kl.de cpu_id = Param.Int("CPU identifier") 1612027Sjungma@eit.uni-kl.de 1712027Sjungma@eit.uni-kl.de if build_env['FULL_SYSTEM']: 1812027Sjungma@eit.uni-kl.de do_quiesce = Param.Bool(True, "enable quiesce instructions") 1912027Sjungma@eit.uni-kl.de do_checkpoint_insts = Param.Bool(True, 2012027Sjungma@eit.uni-kl.de "enable checkpoint pseudo instructions") 2112027Sjungma@eit.uni-kl.de do_statistics_insts = Param.Bool(True, 2212027Sjungma@eit.uni-kl.de "enable statistics pseudo instructions") 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de if build_env['TARGET_ISA'] == 'sparc': 2512027Sjungma@eit.uni-kl.de dtb = Param.SparcDTB(SparcDTB(), "Data TLB") 2612027Sjungma@eit.uni-kl.de itb = Param.SparcITB(SparcITB(), "Instruction TLB") 2712027Sjungma@eit.uni-kl.de elif build_env['TARGET_ISA'] == 'alpha': 2812027Sjungma@eit.uni-kl.de dtb = Param.AlphaDTB(AlphaDTB(), "Data TLB") 2912027Sjungma@eit.uni-kl.de itb = Param.AlphaITB(AlphaITB(), "Instruction TLB") 3012027Sjungma@eit.uni-kl.de else: 3112027Sjungma@eit.uni-kl.de print "Unknown architecture, can't pick TLBs" 3212027Sjungma@eit.uni-kl.de sys.exit(1) 3312027Sjungma@eit.uni-kl.de else: 3412027Sjungma@eit.uni-kl.de workload = VectorParam.Process("processes to run") 3512027Sjungma@eit.uni-kl.de 3612027Sjungma@eit.uni-kl.de max_insts_all_threads = Param.Counter(0, 3712027Sjungma@eit.uni-kl.de "terminate when all threads have reached this inst count") 3812027Sjungma@eit.uni-kl.de max_insts_any_thread = Param.Counter(0, 3912027Sjungma@eit.uni-kl.de "terminate when any thread reaches this inst count") 4012027Sjungma@eit.uni-kl.de max_loads_all_threads = Param.Counter(0, 4112027Sjungma@eit.uni-kl.de "terminate when all threads have reached this load count") 4212027Sjungma@eit.uni-kl.de max_loads_any_thread = Param.Counter(0, 4312027Sjungma@eit.uni-kl.de "terminate when any thread reaches this load count") 4412027Sjungma@eit.uni-kl.de progress_interval = Param.Tick(0, 4512027Sjungma@eit.uni-kl.de "interval to print out the progress message") 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.de defer_registration = Param.Bool(False, 4812027Sjungma@eit.uni-kl.de "defer registration with system (for sampling)") 4912027Sjungma@eit.uni-kl.de 5012027Sjungma@eit.uni-kl.de clock = Param.Clock('1t', "clock speed") 5112027Sjungma@eit.uni-kl.de phase = Param.Latency('0ns', "clock phase") 5212027Sjungma@eit.uni-kl.de 5312027Sjungma@eit.uni-kl.de _mem_ports = [] 5412027Sjungma@eit.uni-kl.de 5512027Sjungma@eit.uni-kl.de def connectMemPorts(self, bus): 5612027Sjungma@eit.uni-kl.de for p in self._mem_ports: 5712027Sjungma@eit.uni-kl.de exec('self.%s = bus.port' % p) 5812027Sjungma@eit.uni-kl.de 5912027Sjungma@eit.uni-kl.de def addPrivateSplitL1Caches(self, ic, dc): 6012027Sjungma@eit.uni-kl.de assert(len(self._mem_ports) == 2) 6112027Sjungma@eit.uni-kl.de self.icache = ic 6212027Sjungma@eit.uni-kl.de self.dcache = dc 6312027Sjungma@eit.uni-kl.de self.icache_port = ic.cpu_side 6412027Sjungma@eit.uni-kl.de self.dcache_port = dc.cpu_side 6512027Sjungma@eit.uni-kl.de self._mem_ports = ['icache.mem_side', 'dcache.mem_side'] 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de def addTwoLevelCacheHierarchy(self, ic, dc, l2c): 6812027Sjungma@eit.uni-kl.de self.addPrivateSplitL1Caches(ic, dc) 6912027Sjungma@eit.uni-kl.de self.toL2Bus = Bus() 7012027Sjungma@eit.uni-kl.de self.connectMemPorts(self.toL2Bus) 7112027Sjungma@eit.uni-kl.de self.l2cache = l2c 7212027Sjungma@eit.uni-kl.de self.l2cache.cpu_side = self.toL2Bus.port 7312027Sjungma@eit.uni-kl.de self._mem_ports = ['l2cache.mem_side'] 7412027Sjungma@eit.uni-kl.de