O3CPU.py revision 9518:8faae62af8c3
19665Sandreas.hansson@arm.com# Copyright (c) 2005-2007 The Regents of The University of Michigan 29665Sandreas.hansson@arm.com# All rights reserved. 39665Sandreas.hansson@arm.com# 49665Sandreas.hansson@arm.com# Redistribution and use in source and binary forms, with or without 59665Sandreas.hansson@arm.com# modification, are permitted provided that the following conditions are 69665Sandreas.hansson@arm.com# met: redistributions of source code must retain the above copyright 79665Sandreas.hansson@arm.com# notice, this list of conditions and the following disclaimer; 89665Sandreas.hansson@arm.com# redistributions in binary form must reproduce the above copyright 99665Sandreas.hansson@arm.com# notice, this list of conditions and the following disclaimer in the 109665Sandreas.hansson@arm.com# documentation and/or other materials provided with the distribution; 119665Sandreas.hansson@arm.com# neither the name of the copyright holders nor the names of its 129665Sandreas.hansson@arm.com# contributors may be used to endorse or promote products derived from 135353Svilas.sridharan@gmail.com# this software without specific prior written permission. 143395Shsul@eecs.umich.edu# 153395Shsul@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 163395Shsul@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 173395Shsul@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 183395Shsul@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 193395Shsul@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 203395Shsul@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 213395Shsul@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 223395Shsul@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 233395Shsul@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 243395Shsul@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 253395Shsul@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 263395Shsul@eecs.umich.edu# 273395Shsul@eecs.umich.edu# Authors: Kevin Lim 283395Shsul@eecs.umich.edu 293395Shsul@eecs.umich.edufrom m5.defines import buildEnv 303395Shsul@eecs.umich.edufrom m5.params import * 313395Shsul@eecs.umich.edufrom m5.proxy import * 323395Shsul@eecs.umich.edufrom BaseCPU import BaseCPU 333395Shsul@eecs.umich.edufrom FUPool import * 343395Shsul@eecs.umich.edufrom O3Checker import O3Checker 353395Shsul@eecs.umich.edufrom BranchPredictor import BranchPredictor 363395Shsul@eecs.umich.edu 373395Shsul@eecs.umich.educlass DerivO3CPU(BaseCPU): 383395Shsul@eecs.umich.edu type = 'DerivO3CPU' 393395Shsul@eecs.umich.edu cxx_header = 'cpu/o3/deriv.hh' 403395Shsul@eecs.umich.edu 4113774Sandreas.sandberg@arm.com @classmethod 4213774Sandreas.sandberg@arm.com def memory_mode(cls): 4313774Sandreas.sandberg@arm.com return 'timing' 448920Snilay@cs.wisc.edu 458920Snilay@cs.wisc.edu @classmethod 468920Snilay@cs.wisc.edu def require_caches(cls): 477025SBrad.Beckmann@amd.com return True 4813774Sandreas.sandberg@arm.com 4913774Sandreas.sandberg@arm.com @classmethod 5013774Sandreas.sandberg@arm.com def support_take_over(cls): 5113876Sjavier.bueno@metempsy.com return True 5213774Sandreas.sandberg@arm.com 5313774Sandreas.sandberg@arm.com activity = Param.Unsigned(0, "Initial count") 5410747SChris.Emmons@arm.com 559520SAndreas.Sandberg@ARM.com cachePorts = Param.Unsigned(200, "Cache Ports") 569520SAndreas.Sandberg@ARM.com 579520SAndreas.Sandberg@ARM.com decodeToFetchDelay = Param.Cycles(1, "Decode to fetch delay") 589520SAndreas.Sandberg@ARM.com renameToFetchDelay = Param.Cycles(1 ,"Rename to fetch delay") 5913432Spau.cabre@metempsy.com iewToFetchDelay = Param.Cycles(1, "Issue/Execute/Writeback to fetch " 6013432Spau.cabre@metempsy.com "delay") 6113432Spau.cabre@metempsy.com commitToFetchDelay = Param.Cycles(1, "Commit to fetch delay") 6213432Spau.cabre@metempsy.com fetchWidth = Param.Unsigned(8, "Fetch width") 6313876Sjavier.bueno@metempsy.com 6413876Sjavier.bueno@metempsy.com renameToDecodeDelay = Param.Cycles(1, "Rename to decode delay") 6513876Sjavier.bueno@metempsy.com iewToDecodeDelay = Param.Cycles(1, "Issue/Execute/Writeback to decode " 6613876Sjavier.bueno@metempsy.com "delay") 6713958Sjairo.balart@metempsy.com commitToDecodeDelay = Param.Cycles(1, "Commit to decode delay") 6813958Sjairo.balart@metempsy.com fetchToDecodeDelay = Param.Cycles(1, "Fetch to decode delay") 6913958Sjairo.balart@metempsy.com decodeWidth = Param.Unsigned(8, "Decode width") 7013958Sjairo.balart@metempsy.com 719665Sandreas.hansson@arm.com iewToRenameDelay = Param.Cycles(1, "Issue/Execute/Writeback to rename " 729665Sandreas.hansson@arm.com "delay") 739665Sandreas.hansson@arm.com commitToRenameDelay = Param.Cycles(1, "Commit to rename delay") 749665Sandreas.hansson@arm.com decodeToRenameDelay = Param.Cycles(1, "Decode to rename delay") 7511238Sandreas.sandberg@arm.com renameWidth = Param.Unsigned(8, "Rename width") 7611238Sandreas.sandberg@arm.com 7711238Sandreas.sandberg@arm.com commitToIEWDelay = Param.Cycles(1, "Commit to " 7811238Sandreas.sandberg@arm.com "Issue/Execute/Writeback delay") 7911688Sandreas.hansson@arm.com renameToIEWDelay = Param.Cycles(2, "Rename to " 8011688Sandreas.hansson@arm.com "Issue/Execute/Writeback delay") 8111688Sandreas.hansson@arm.com issueToExecuteDelay = Param.Cycles(1, "Issue to execute delay (internal " 8211688Sandreas.hansson@arm.com "to the IEW stage)") 838920Snilay@cs.wisc.edu dispatchWidth = Param.Unsigned(8, "Dispatch width") 849827Sakash.bagdia@arm.com issueWidth = Param.Unsigned(8, "Issue width") 859827Sakash.bagdia@arm.com wbWidth = Param.Unsigned(8, "Writeback width") 869827Sakash.bagdia@arm.com wbDepth = Param.Unsigned(1, "Writeback depth") 879827Sakash.bagdia@arm.com fuPool = Param.FUPool(DefaultFUPool(), "Functional Unit pool") 889790Sakash.bagdia@arm.com 899790Sakash.bagdia@arm.com iewToCommitDelay = Param.Cycles(1, "Issue/Execute/Writeback to commit " 909790Sakash.bagdia@arm.com "delay") 919790Sakash.bagdia@arm.com renameToROBDelay = Param.Cycles(1, "Rename to reorder buffer delay") 9211688Sandreas.hansson@arm.com commitWidth = Param.Unsigned(8, "Commit width") 9311688Sandreas.hansson@arm.com squashWidth = Param.Unsigned(8, "Squash width") 9411688Sandreas.hansson@arm.com trapLatency = Param.Cycles(13, "Trap latency") 9511688Sandreas.hansson@arm.com fetchTrapLatency = Param.Cycles(1, "Fetch trap latency") 9611688Sandreas.hansson@arm.com 9711837Swendy.elsasser@arm.com backComSize = Param.Unsigned(5, "Time buffer size for backwards communication") 9811688Sandreas.hansson@arm.com forwardComSize = Param.Unsigned(5, "Time buffer size for forward communication") 9911688Sandreas.hansson@arm.com 10011688Sandreas.hansson@arm.com LQEntries = Param.Unsigned(32, "Number of load queue entries") 10111688Sandreas.hansson@arm.com SQEntries = Param.Unsigned(32, "Number of store queue entries") 10211688Sandreas.hansson@arm.com LSQDepCheckShift = Param.Unsigned(4, "Number of places to shift addr before check") 10311688Sandreas.hansson@arm.com LSQCheckLoads = Param.Bool(True, 10411688Sandreas.hansson@arm.com "Should dependency violations be checked for loads & stores or just stores") 10511688Sandreas.hansson@arm.com store_set_clear_period = Param.Unsigned(250000, 10611688Sandreas.hansson@arm.com "Number of load/store insts before the dep predictor should be invalidated") 10714038Smatthew.poremba@amd.com LFSTSize = Param.Unsigned(1024, "Last fetched store table size") 10814038Smatthew.poremba@amd.com SSITSize = Param.Unsigned(1024, "Store set ID table size") 10911688Sandreas.hansson@arm.com 11011688Sandreas.hansson@arm.com numRobs = Param.Unsigned(1, "Number of Reorder Buffers"); 11111688Sandreas.hansson@arm.com 11211688Sandreas.hansson@arm.com numPhysIntRegs = Param.Unsigned(256, "Number of physical integer registers") 11311688Sandreas.hansson@arm.com numPhysFloatRegs = Param.Unsigned(256, "Number of physical floating point " 11411688Sandreas.hansson@arm.com "registers") 11511688Sandreas.hansson@arm.com numIQEntries = Param.Unsigned(64, "Number of instruction queue entries") 11611688Sandreas.hansson@arm.com numROBEntries = Param.Unsigned(192, "Number of reorder buffer entries") 11711688Sandreas.hansson@arm.com 11811688Sandreas.hansson@arm.com smtNumFetchingThreads = Param.Unsigned(1, "SMT Number of Fetching Threads") 11911688Sandreas.hansson@arm.com smtFetchPolicy = Param.String('SingleThread', "SMT Fetch policy") 12011688Sandreas.hansson@arm.com smtLSQPolicy = Param.String('Partitioned', "SMT LSQ Sharing Policy") 12111688Sandreas.hansson@arm.com smtLSQThreshold = Param.Int(100, "SMT LSQ Threshold Sharing Parameter") 12211688Sandreas.hansson@arm.com smtIQPolicy = Param.String('Partitioned', "SMT IQ Sharing Policy") 12311688Sandreas.hansson@arm.com smtIQThreshold = Param.Int(100, "SMT IQ Threshold Sharing Parameter") 12411688Sandreas.hansson@arm.com smtROBPolicy = Param.String('Partitioned', "SMT ROB Sharing Policy") 12511688Sandreas.hansson@arm.com smtROBThreshold = Param.Int(100, "SMT ROB Threshold Sharing Parameter") 12611688Sandreas.hansson@arm.com smtCommitPolicy = Param.String('RoundRobin', "SMT Commit Policy") 12711688Sandreas.hansson@arm.com 12811688Sandreas.hansson@arm.com branchPred = BranchPredictor(numThreads = Parent.numThreads) 12911688Sandreas.hansson@arm.com needsTSO = Param.Bool(buildEnv['TARGET_ISA'] == 'x86', 13011688Sandreas.hansson@arm.com "Enable TSO Memory model") 13111688Sandreas.hansson@arm.com 13211688Sandreas.hansson@arm.com def addCheckerCpu(self): 13311688Sandreas.hansson@arm.com if buildEnv['TARGET_ISA'] in ['arm']: 13411688Sandreas.hansson@arm.com from ArmTLB import ArmTLB 13511688Sandreas.hansson@arm.com 13611688Sandreas.hansson@arm.com self.checker = O3Checker(workload=self.workload, 13711688Sandreas.hansson@arm.com exitOnError=False, 13811688Sandreas.hansson@arm.com updateOnError=True, 13911688Sandreas.hansson@arm.com warnOnlyOnLoadError=True) 14011688Sandreas.hansson@arm.com self.checker.itb = ArmTLB(size = self.itb.size) 14111688Sandreas.hansson@arm.com self.checker.dtb = ArmTLB(size = self.dtb.size) 14211688Sandreas.hansson@arm.com self.checker.cpu_id = self.cpu_id 14311688Sandreas.hansson@arm.com 14411688Sandreas.hansson@arm.com else: 14511688Sandreas.hansson@arm.com print "ERROR: Checker only supported under ARM ISA!" 14611688Sandreas.hansson@arm.com exit(1) 14713357Sciro.santilli@arm.com