O3CPU.py revision 4303
111986Sandreas.sandberg@arm.comfrom m5.params import * 211986Sandreas.sandberg@arm.comfrom m5.proxy import * 311986Sandreas.sandberg@arm.comfrom m5 import build_env 411986Sandreas.sandberg@arm.comfrom BaseCPU import BaseCPU 511986Sandreas.sandberg@arm.comfrom Checker import O3Checker 611986Sandreas.sandberg@arm.comfrom FUPool import * 711986Sandreas.sandberg@arm.com 811986Sandreas.sandberg@arm.comclass DerivO3CPU(BaseCPU): 911986Sandreas.sandberg@arm.com type = 'DerivO3CPU' 1011986Sandreas.sandberg@arm.com activity = Param.Unsigned(0, "Initial count") 1111986Sandreas.sandberg@arm.com numThreads = Param.Unsigned(1, "number of HW thread contexts") 1211986Sandreas.sandberg@arm.com 1312037Sandreas.sandberg@arm.com if build_env['FULL_SYSTEM']: 1412037Sandreas.sandberg@arm.com profile = Param.Latency('0ns', "trace the kernel stack") 1511986Sandreas.sandberg@arm.com if build_env['USE_CHECKER']: 1611986Sandreas.sandberg@arm.com if not build_env['FULL_SYSTEM']: 1711986Sandreas.sandberg@arm.com checker = Param.BaseCPU(O3Checker(workload=Parent.workload, 1811986Sandreas.sandberg@arm.com exitOnError=False, 1911986Sandreas.sandberg@arm.com updateOnError=True, 2011986Sandreas.sandberg@arm.com warnOnlyOnLoadError=False), 2111986Sandreas.sandberg@arm.com "checker") 2211986Sandreas.sandberg@arm.com else: 2311986Sandreas.sandberg@arm.com checker = Param.BaseCPU(O3Checker(exitOnError=False, updateOnError=True, 2411986Sandreas.sandberg@arm.com warnOnlyOnLoadError=False), "checker") 2511986Sandreas.sandberg@arm.com checker.itb = Parent.itb 2611986Sandreas.sandberg@arm.com checker.dtb = Parent.dtb 2711986Sandreas.sandberg@arm.com 2811986Sandreas.sandberg@arm.com cachePorts = Param.Unsigned("Cache Ports") 2911986Sandreas.sandberg@arm.com icache_port = Port("Instruction Port") 3011986Sandreas.sandberg@arm.com dcache_port = Port("Data Port") 3111986Sandreas.sandberg@arm.com _mem_ports = ['icache_port', 'dcache_port'] 3211986Sandreas.sandberg@arm.com 3311986Sandreas.sandberg@arm.com decodeToFetchDelay = Param.Unsigned(1, "Decode to fetch delay") 3411986Sandreas.sandberg@arm.com renameToFetchDelay = Param.Unsigned(1 ,"Rename to fetch delay") 3511986Sandreas.sandberg@arm.com iewToFetchDelay = Param.Unsigned(1, "Issue/Execute/Writeback to fetch " 3611986Sandreas.sandberg@arm.com "delay") 3711986Sandreas.sandberg@arm.com commitToFetchDelay = Param.Unsigned(1, "Commit to fetch delay") 3811986Sandreas.sandberg@arm.com fetchWidth = Param.Unsigned(8, "Fetch width") 3911986Sandreas.sandberg@arm.com 4011986Sandreas.sandberg@arm.com renameToDecodeDelay = Param.Unsigned(1, "Rename to decode delay") 4111986Sandreas.sandberg@arm.com iewToDecodeDelay = Param.Unsigned(1, "Issue/Execute/Writeback to decode " 4211986Sandreas.sandberg@arm.com "delay") 4311986Sandreas.sandberg@arm.com commitToDecodeDelay = Param.Unsigned(1, "Commit to decode delay") 4411986Sandreas.sandberg@arm.com fetchToDecodeDelay = Param.Unsigned(1, "Fetch to decode delay") 4511986Sandreas.sandberg@arm.com decodeWidth = Param.Unsigned(8, "Decode width") 4611986Sandreas.sandberg@arm.com 4711986Sandreas.sandberg@arm.com iewToRenameDelay = Param.Unsigned(1, "Issue/Execute/Writeback to rename " 4811986Sandreas.sandberg@arm.com "delay") 4911986Sandreas.sandberg@arm.com commitToRenameDelay = Param.Unsigned(1, "Commit to rename delay") 5011986Sandreas.sandberg@arm.com decodeToRenameDelay = Param.Unsigned(1, "Decode to rename delay") 5111986Sandreas.sandberg@arm.com renameWidth = Param.Unsigned(8, "Rename width") 5211986Sandreas.sandberg@arm.com 5311986Sandreas.sandberg@arm.com commitToIEWDelay = Param.Unsigned(1, "Commit to " 5411986Sandreas.sandberg@arm.com "Issue/Execute/Writeback delay") 5511986Sandreas.sandberg@arm.com renameToIEWDelay = Param.Unsigned(2, "Rename to " 5611986Sandreas.sandberg@arm.com "Issue/Execute/Writeback delay") 5711986Sandreas.sandberg@arm.com issueToExecuteDelay = Param.Unsigned(1, "Issue to execute delay (internal " 5811986Sandreas.sandberg@arm.com "to the IEW stage)") 5911986Sandreas.sandberg@arm.com dispatchWidth = Param.Unsigned(8, "Dispatch width") 6011986Sandreas.sandberg@arm.com issueWidth = Param.Unsigned(8, "Issue width") 6111986Sandreas.sandberg@arm.com wbWidth = Param.Unsigned(8, "Writeback width") 6211986Sandreas.sandberg@arm.com wbDepth = Param.Unsigned(1, "Writeback depth") 6311986Sandreas.sandberg@arm.com fuPool = Param.FUPool(DefaultFUPool(), "Functional Unit pool") 6411986Sandreas.sandberg@arm.com 6511986Sandreas.sandberg@arm.com iewToCommitDelay = Param.Unsigned(1, "Issue/Execute/Writeback to commit " 6611986Sandreas.sandberg@arm.com "delay") 6711986Sandreas.sandberg@arm.com renameToROBDelay = Param.Unsigned(1, "Rename to reorder buffer delay") 6811986Sandreas.sandberg@arm.com commitWidth = Param.Unsigned(8, "Commit width") 6911986Sandreas.sandberg@arm.com squashWidth = Param.Unsigned(8, "Squash width") 7011986Sandreas.sandberg@arm.com trapLatency = Param.Tick(13, "Trap latency") 7111986Sandreas.sandberg@arm.com fetchTrapLatency = Param.Tick(1, "Fetch trap latency") 7211986Sandreas.sandberg@arm.com 7311986Sandreas.sandberg@arm.com backComSize = Param.Unsigned(5, "Time buffer size for backwards communication") 7411986Sandreas.sandberg@arm.com forwardComSize = Param.Unsigned(5, "Time buffer size for forward communication") 7511986Sandreas.sandberg@arm.com 7611986Sandreas.sandberg@arm.com predType = Param.String("tournament", "Branch predictor type ('local', 'tournament')") 7711986Sandreas.sandberg@arm.com localPredictorSize = Param.Unsigned(2048, "Size of local predictor") 7811986Sandreas.sandberg@arm.com localCtrBits = Param.Unsigned(2, "Bits per counter") 7911986Sandreas.sandberg@arm.com localHistoryTableSize = Param.Unsigned(2048, "Size of local history table") 8011986Sandreas.sandberg@arm.com localHistoryBits = Param.Unsigned(11, "Bits for the local history") 8111986Sandreas.sandberg@arm.com globalPredictorSize = Param.Unsigned(8192, "Size of global predictor") 8211986Sandreas.sandberg@arm.com globalCtrBits = Param.Unsigned(2, "Bits per counter") 8311986Sandreas.sandberg@arm.com globalHistoryBits = Param.Unsigned(13, "Bits of history") 8411986Sandreas.sandberg@arm.com choicePredictorSize = Param.Unsigned(8192, "Size of choice predictor") 8511986Sandreas.sandberg@arm.com choiceCtrBits = Param.Unsigned(2, "Bits of choice counters") 8611986Sandreas.sandberg@arm.com 8711986Sandreas.sandberg@arm.com BTBEntries = Param.Unsigned(4096, "Number of BTB entries") 8811986Sandreas.sandberg@arm.com BTBTagSize = Param.Unsigned(16, "Size of the BTB tags, in bits") 8911986Sandreas.sandberg@arm.com 9011986Sandreas.sandberg@arm.com RASSize = Param.Unsigned(16, "RAS size") 9111986Sandreas.sandberg@arm.com 9211986Sandreas.sandberg@arm.com LQEntries = Param.Unsigned(32, "Number of load queue entries") 9311986Sandreas.sandberg@arm.com SQEntries = Param.Unsigned(32, "Number of store queue entries") 9411986Sandreas.sandberg@arm.com LFSTSize = Param.Unsigned(1024, "Last fetched store table size") 9511986Sandreas.sandberg@arm.com SSITSize = Param.Unsigned(1024, "Store set ID table size") 9611986Sandreas.sandberg@arm.com 9711986Sandreas.sandberg@arm.com numRobs = Param.Unsigned(1, "Number of Reorder Buffers"); 9811986Sandreas.sandberg@arm.com 9911986Sandreas.sandberg@arm.com numPhysIntRegs = Param.Unsigned(256, "Number of physical integer registers") 10011986Sandreas.sandberg@arm.com numPhysFloatRegs = Param.Unsigned(256, "Number of physical floating point " 10111986Sandreas.sandberg@arm.com "registers") 10211986Sandreas.sandberg@arm.com numIQEntries = Param.Unsigned(64, "Number of instruction queue entries") 10311986Sandreas.sandberg@arm.com numROBEntries = Param.Unsigned(192, "Number of reorder buffer entries") 10411986Sandreas.sandberg@arm.com 10511986Sandreas.sandberg@arm.com instShiftAmt = Param.Unsigned(2, "Number of bits to shift instructions by") 10612037Sandreas.sandberg@arm.com 10712037Sandreas.sandberg@arm.com function_trace = Param.Bool(False, "Enable function trace") 10812037Sandreas.sandberg@arm.com function_trace_start = Param.Tick(0, "Cycle to start function trace") 10911986Sandreas.sandberg@arm.com 11011986Sandreas.sandberg@arm.com smtNumFetchingThreads = Param.Unsigned("SMT Number of Fetching Threads") 11111986Sandreas.sandberg@arm.com smtFetchPolicy = Param.String("SMT Fetch policy") 11211986Sandreas.sandberg@arm.com smtLSQPolicy = Param.String("SMT LSQ Sharing Policy") 11311986Sandreas.sandberg@arm.com smtLSQThreshold = Param.String("SMT LSQ Threshold Sharing Parameter") 11411986Sandreas.sandberg@arm.com smtIQPolicy = Param.String("SMT IQ Sharing Policy") 11511986Sandreas.sandberg@arm.com smtIQThreshold = Param.String("SMT IQ Threshold Sharing Parameter") 11611986Sandreas.sandberg@arm.com smtROBPolicy = Param.String("SMT ROB Sharing Policy") 11711986Sandreas.sandberg@arm.com smtROBThreshold = Param.String("SMT ROB Threshold Sharing Parameter") 11811986Sandreas.sandberg@arm.com smtCommitPolicy = Param.String("SMT Commit Policy") 11911986Sandreas.sandberg@arm.com 12011986Sandreas.sandberg@arm.com def addPrivateSplitL1Caches(self, ic, dc): 12111986Sandreas.sandberg@arm.com BaseCPU.addPrivateSplitL1Caches(self, ic, dc) 12211986Sandreas.sandberg@arm.com self.icache.tgts_per_mshr = 20 12311986Sandreas.sandberg@arm.com self.dcache.tgts_per_mshr = 20 12411986Sandreas.sandberg@arm.com