core.h revision 10234
1/***************************************************************************** 2 * McPAT 3 * SOFTWARE LICENSE AGREEMENT 4 * Copyright 2012 Hewlett-Packard Development Company, L.P. 5 * Copyright (c) 2010-2013 Advanced Micro Devices, Inc. 6 * All Rights Reserved 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are 10 * met: redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer; 12 * redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution; 15 * neither the name of the copyright holders nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * 31 ***************************************************************************/ 32 33 34#ifndef CORE_H_ 35#define CORE_H_ 36 37#include "array.h" 38#include "basic_components.h" 39#include "cacheunit.h" 40#include "interconnect.h" 41#include "logic.h" 42#include "parameter.h" 43 44// Macros used in the various core-related classes 45#define NUM_SOURCE_OPERANDS 2 46#define NUM_INT_INST_SOURCE_OPERANDS 2 47 48class BranchPredictorParameters { 49public: 50 int assoc; 51 int nbanks; 52 int local_l1_predictor_size; 53 int local_l2_predictor_size; 54 int local_predictor_entries; 55 int global_predictor_bits; 56 int global_predictor_entries; 57 int chooser_predictor_bits; 58 int chooser_predictor_entries; 59}; 60 61class BranchPredictor : public McPATComponent { 62public: 63 ArrayST* globalBPT; 64 ArrayST* localBPT; 65 ArrayST* L1_localBPT; 66 ArrayST* L2_localBPT; 67 ArrayST* chooser; 68 ArrayST* RAS; 69 70 InputParameter interface_ip; 71 CoreParameters core_params; 72 CoreStatistics core_stats; 73 BranchPredictorParameters branch_pred_params; 74 double scktRatio, chip_PR_overhead, macro_PR_overhead; 75 bool exist; 76 77 BranchPredictor(XMLNode* _xml_data, InputParameter* interface_ip_, 78 const CoreParameters & _core_params, 79 const CoreStatistics & _core_stats, 80 bool exsit = true); 81 void set_params_stats(); 82 void computeEnergy(); 83 void displayData(uint32_t indent = 0, int plevel = 100); 84 ~BranchPredictor(); 85}; 86 87class InstFetchParameters { 88public: 89 int btb_size; 90 int btb_block_size; 91 int btb_assoc; 92 int btb_num_banks; 93 int btb_latency; 94 int btb_throughput; 95 int btb_rw_ports; 96}; 97 98class InstFetchStatistics { 99public: 100 double btb_read_accesses; 101 double btb_write_accesses; 102}; 103 104class InstFetchU : public McPATComponent { 105public: 106 CacheUnit* icache; 107 ArrayST* IB; 108 ArrayST* BTB; 109 BranchPredictor* BPT; 110 InstructionDecoder* ID_inst; 111 InstructionDecoder* ID_operand; 112 InstructionDecoder* ID_misc; 113 114 InputParameter interface_ip; 115 CoreParameters core_params; 116 CoreStatistics core_stats; 117 InstFetchParameters inst_fetch_params; 118 InstFetchStatistics inst_fetch_stats; 119 double scktRatio, chip_PR_overhead, macro_PR_overhead; 120 enum Cache_policy cache_p; 121 bool exist; 122 123 InstFetchU(XMLNode* _xml_data, InputParameter* interface_ip_, 124 const CoreParameters & _core_params, 125 const CoreStatistics & _core_stats, 126 bool exsit = true); 127 void set_params_stats(); 128 void computeEnergy(); 129 void displayData(uint32_t indent = 0, int plevel = 100); 130 ~InstFetchU(); 131}; 132 133 134class SchedulerU : public McPATComponent { 135public: 136 static int ROB_STATUS_BITS; 137 138 ArrayST* int_inst_window; 139 ArrayST* fp_inst_window; 140 ArrayST* ROB; 141 selection_logic* int_instruction_selection; 142 selection_logic* fp_instruction_selection; 143 144 InputParameter interface_ip; 145 CoreParameters core_params; 146 CoreStatistics core_stats; 147 double scktRatio, chip_PR_overhead, macro_PR_overhead; 148 double Iw_height, fp_Iw_height, ROB_height; 149 bool exist; 150 151 SchedulerU(XMLNode* _xml_data, InputParameter* interface_ip_, 152 const CoreParameters & _core_params, 153 const CoreStatistics & _core_stats, 154 bool exist_ = true); 155 void computeEnergy(); 156 void displayData(uint32_t indent = 0, int plevel = 100); 157 ~SchedulerU(); 158}; 159 160class RENAMINGU : public McPATComponent { 161public: 162 ArrayST* iFRAT; 163 ArrayST* fFRAT; 164 ArrayST* iRRAT; 165 ArrayST* fRRAT; 166 ArrayST* ifreeL; 167 ArrayST* ffreeL; 168 dep_resource_conflict_check* idcl; 169 dep_resource_conflict_check* fdcl; 170 ArrayST* RAHT; 171 172 InputParameter interface_ip; 173 CoreParameters core_params; 174 CoreStatistics core_stats; 175 bool exist; 176 177 RENAMINGU(XMLNode* _xml_data, InputParameter* interface_ip_, 178 const CoreParameters & _core_params, 179 const CoreStatistics & _core_stats, 180 bool exist_ = true); 181 void computeEnergy(); 182 void displayData(uint32_t indent = 0, int plevel = 100); 183 ~RENAMINGU(); 184}; 185 186class LoadStoreU : public McPATComponent { 187public: 188 CacheUnit* dcache; 189 ArrayST* LSQ; 190 ArrayST* LoadQ; 191 192 InputParameter interface_ip; 193 CoreParameters core_params; 194 CoreStatistics core_stats; 195 enum Cache_policy cache_p; 196 double scktRatio, chip_PR_overhead, macro_PR_overhead; 197 double lsq_height; 198 bool exist; 199 200 LoadStoreU(XMLNode* _xml_data, InputParameter* interface_ip_, 201 const CoreParameters & _core_params, 202 const CoreStatistics & _core_stats, 203 bool exist_ = true); 204 void computeEnergy(); 205 void displayData(uint32_t indent = 0, int plevel = 100); 206 ~LoadStoreU(); 207}; 208 209class MemoryManagementParams { 210public: 211 int itlb_number_entries; 212 double itlb_latency; 213 double itlb_throughput; 214 int itlb_assoc; 215 int itlb_nbanks; 216 int dtlb_number_entries; 217 double dtlb_latency; 218 double dtlb_throughput; 219 int dtlb_assoc; 220 int dtlb_nbanks; 221}; 222 223class MemoryManagementStats { 224public: 225 double itlb_total_accesses; 226 double itlb_total_misses; 227 double itlb_conflicts; 228 double dtlb_read_accesses; 229 double dtlb_read_misses; 230 double dtlb_write_accesses; 231 double dtlb_write_misses; 232 double dtlb_conflicts; 233}; 234 235class MemManU : public McPATComponent { 236public: 237 ArrayST* itlb; 238 ArrayST* dtlb; 239 240 InputParameter interface_ip; 241 CoreParameters core_params; 242 CoreStatistics core_stats; 243 MemoryManagementParams mem_man_params; 244 MemoryManagementStats mem_man_stats; 245 double scktRatio, chip_PR_overhead, macro_PR_overhead; 246 bool exist; 247 248 MemManU(XMLNode* _xml_data, InputParameter* interface_ip_, 249 const CoreParameters & _core_params, 250 const CoreStatistics & _core_stats, bool exist_ = true); 251 void set_params_stats(); 252 void computeEnergy(); 253 void displayData(uint32_t indent = 0, int plevel = 100); 254 ~MemManU(); 255}; 256 257class RegFU : public McPATComponent { 258public: 259 static int RFWIN_ACCESS_MULTIPLIER; 260 261 ArrayST* IRF; 262 ArrayST* FRF; 263 ArrayST* RFWIN; 264 265 InputParameter interface_ip; 266 CoreParameters core_params; 267 CoreStatistics core_stats; 268 double scktRatio, chip_PR_overhead, macro_PR_overhead; 269 double int_regfile_height, fp_regfile_height; 270 bool exist; 271 272 RegFU(XMLNode* _xml_data, 273 InputParameter* interface_ip_, const CoreParameters & _core_params, 274 const CoreStatistics & _core_stats, 275 bool exist_ = true); 276 void computeEnergy(); 277 void displayData(uint32_t indent = 0, int plevel = 100); 278 ~RegFU(); 279}; 280 281class EXECU : public McPATComponent { 282public: 283 RegFU* rfu; 284 SchedulerU* scheu; 285 FunctionalUnit* fp_u; 286 FunctionalUnit* exeu; 287 FunctionalUnit* mul; 288 Interconnect* int_bypass; 289 Interconnect* intTagBypass; 290 Interconnect* int_mul_bypass; 291 Interconnect* intTag_mul_Bypass; 292 Interconnect* fp_bypass; 293 Interconnect* fpTagBypass; 294 295 InputParameter interface_ip; 296 double scktRatio, chip_PR_overhead, macro_PR_overhead; 297 double lsq_height; 298 CoreParameters core_params; 299 CoreStatistics core_stats; 300 bool exist; 301 302 EXECU(XMLNode* _xml_data, InputParameter* interface_ip_, 303 double lsq_height_, const CoreParameters & _core_params, 304 const CoreStatistics & _core_stats, bool exist_ = true); 305 void computeEnergy(); 306 void displayData(uint32_t indent = 0, int plevel = 100); 307 ~EXECU(); 308}; 309 310 311class Core : public McPATComponent { 312public: 313 InstFetchU* ifu; 314 LoadStoreU* lsu; 315 MemManU* mmu; 316 EXECU* exu; 317 RENAMINGU* rnu; 318 Pipeline* corepipe; 319 UndiffCore* undiffCore; 320 CacheUnit* l2cache; 321 322 int ithCore; 323 InputParameter interface_ip; 324 double scktRatio, chip_PR_overhead, macro_PR_overhead; 325 CoreParameters core_params; 326 CoreStatistics core_stats; 327 328 // TODO: Migrate component ID handling into the XML data to remove this 329 // ithCore variable 330 Core(XMLNode* _xml_data, int _ithCore, InputParameter* interface_ip_); 331 void initialize_params(); 332 void initialize_stats(); 333 void set_core_param(); 334 void computeEnergy(); 335 ~Core(); 336}; 337 338#endif /* CORE_H_ */ 339