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