1 # Copyright (c) 2012 The Regents of The University of Michigan
2 # Copyright (c) 2016 Centre National de la Recherche Scientifique
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are
7 # met: redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer;
9 # redistributions in binary form must reproduce the above copyright
10 # notice, this list of conditions and the following disclaimer in the
11 # documentation and/or other materials provided with the distribution;
12 # neither the name of the copyright holders nor the names of its
13 # contributors may be used to endorse or promote products derived from
14 # this software without specific prior written permission.
16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 # Authors: Ron Dreslinski
32 from m5
.objects
import *
33 from O3_ARM_v7a
import *
36 #-----------------------------------------------------------------------
37 # ex5 big core (based on the ARM Cortex-A15)
38 #-----------------------------------------------------------------------
40 # Simple ALU Instructions have a latency of 1
41 class ex5_big_Simple_Int(O3_ARM_v7a_Simple_Int
):
42 opList
= [ OpDesc(opClass
='IntAlu', opLat
=1) ]
45 # Complex ALU instructions have a variable latencies
46 class ex5_big_Complex_Int(O3_ARM_v7a_Complex_Int
):
47 opList
= [ OpDesc(opClass
='IntMult', opLat
=4, pipelined
=True),
48 OpDesc(opClass
='IntDiv', opLat
=11, pipelined
=False),
49 OpDesc(opClass
='IprAccess', opLat
=3, pipelined
=True) ]
52 # Floating point and SIMD instructions
53 class ex5_big_FP(O3_ARM_v7a_FP
):
54 opList
= [ OpDesc(opClass
='SimdAdd', opLat
=3),
55 OpDesc(opClass
='SimdAddAcc', opLat
=4),
56 OpDesc(opClass
='SimdAlu', opLat
=4),
57 OpDesc(opClass
='SimdCmp', opLat
=4),
58 OpDesc(opClass
='SimdCvt', opLat
=3),
59 OpDesc(opClass
='SimdMisc', opLat
=3),
60 OpDesc(opClass
='SimdMult',opLat
=6),
61 OpDesc(opClass
='SimdMultAcc',opLat
=5),
62 OpDesc(opClass
='SimdShift',opLat
=3),
63 OpDesc(opClass
='SimdShiftAcc', opLat
=3),
64 OpDesc(opClass
='SimdSqrt', opLat
=9),
65 OpDesc(opClass
='SimdFloatAdd',opLat
=6),
66 OpDesc(opClass
='SimdFloatAlu',opLat
=5),
67 OpDesc(opClass
='SimdFloatCmp', opLat
=3),
68 OpDesc(opClass
='SimdFloatCvt', opLat
=3),
69 OpDesc(opClass
='SimdFloatDiv', opLat
=21),
70 OpDesc(opClass
='SimdFloatMisc', opLat
=3),
71 OpDesc(opClass
='SimdFloatMult', opLat
=6),
72 OpDesc(opClass
='SimdFloatMultAcc',opLat
=1),
73 OpDesc(opClass
='SimdFloatSqrt', opLat
=9),
74 OpDesc(opClass
='FloatAdd', opLat
=6),
75 OpDesc(opClass
='FloatCmp', opLat
=5),
76 OpDesc(opClass
='FloatCvt', opLat
=5),
77 OpDesc(opClass
='FloatDiv', opLat
=12, pipelined
=False),
78 OpDesc(opClass
='FloatSqrt', opLat
=33, pipelined
=False),
79 OpDesc(opClass
='FloatMult', opLat
=8) ]
84 class ex5_big_Load(O3_ARM_v7a_Load
):
85 opList
= [ OpDesc(opClass
='MemRead',opLat
=2) ]
88 class ex5_big_Store(O3_ARM_v7a_Store
):
89 opList
= [OpDesc(opClass
='MemWrite',opLat
=2) ]
92 # Functional Units for this CPU
93 class ex5_big_FUP(O3_ARM_v7a_FUP
):
94 FUList
= [ex5_big_Simple_Int(), ex5_big_Complex_Int(),
95 ex5_big_Load(), ex5_big_Store(), ex5_big_FP()]
97 # Bi-Mode Branch Predictor
98 class ex5_big_BP(O3_ARM_v7a_BP
):
99 globalPredictorSize
= 4096
101 choicePredictorSize
= 1024
108 class ex5_big(O3_ARM_v7a_3
):
114 decodeToFetchDelay
= 1
115 renameToFetchDelay
= 1
117 commitToFetchDelay
= 1
118 renameToDecodeDelay
= 1
120 commitToDecodeDelay
= 1
122 commitToRenameDelay
= 1
126 fetchToDecodeDelay
= 3
128 decodeToRenameDelay
= 2
131 issueToExecuteDelay
= 1
135 fuPool
= ex5_big_FUP()
144 numPhysFloatRegs
= 256
149 branchPred
= ex5_big_BP()
152 class L1I(O3_ARM_v7a_ICache
):
161 # Writeback clean lines as well
162 writeback_clean
= True
165 class L1D(O3_ARM_v7a_DCache
):
174 # Consider the L2 a victim cache also for clean lines
175 writeback_clean
= True
178 # Use a cache as a L2 TLB
179 class WalkCache(O3_ARM_v7aWalkCache
):
189 # Writeback clean lines as well
190 writeback_clean
= True
193 class L2(O3_ARM_v7aL2
):
196 response_latency
= 15
202 prefetch_on_access
= True
203 clusivity
= 'mostly_excl'
204 # Simple stride prefetcher
205 prefetcher
= StridePrefetcher(degree
=8, latency
= 1)