core.h revision 10152
110152Satgutier@umich.edu/***************************************************************************** 210152Satgutier@umich.edu * McPAT 310152Satgutier@umich.edu * SOFTWARE LICENSE AGREEMENT 410152Satgutier@umich.edu * Copyright 2012 Hewlett-Packard Development Company, L.P. 510152Satgutier@umich.edu * All Rights Reserved 610152Satgutier@umich.edu * 710152Satgutier@umich.edu * Redistribution and use in source and binary forms, with or without 810152Satgutier@umich.edu * modification, are permitted provided that the following conditions are 910152Satgutier@umich.edu * met: redistributions of source code must retain the above copyright 1010152Satgutier@umich.edu * notice, this list of conditions and the following disclaimer; 1110152Satgutier@umich.edu * redistributions in binary form must reproduce the above copyright 1210152Satgutier@umich.edu * notice, this list of conditions and the following disclaimer in the 1310152Satgutier@umich.edu * documentation and/or other materials provided with the distribution; 1410152Satgutier@umich.edu * neither the name of the copyright holders nor the names of its 1510152Satgutier@umich.edu * contributors may be used to endorse or promote products derived from 1610152Satgutier@umich.edu * this software without specific prior written permission. 1710152Satgutier@umich.edu 1810152Satgutier@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1910152Satgutier@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2010152Satgutier@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2110152Satgutier@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2210152Satgutier@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2310152Satgutier@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2410152Satgutier@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2510152Satgutier@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2610152Satgutier@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2710152Satgutier@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2810152Satgutier@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.” 2910152Satgutier@umich.edu * 3010152Satgutier@umich.edu ***************************************************************************/ 3110152Satgutier@umich.edu 3210152Satgutier@umich.edu 3310152Satgutier@umich.edu#ifndef CORE_H_ 3410152Satgutier@umich.edu#define CORE_H_ 3510152Satgutier@umich.edu 3610152Satgutier@umich.edu#include "XML_Parse.h" 3710152Satgutier@umich.edu#include "array.h" 3810152Satgutier@umich.edu#include "basic_components.h" 3910152Satgutier@umich.edu#include "interconnect.h" 4010152Satgutier@umich.edu#include "logic.h" 4110152Satgutier@umich.edu#include "parameter.h" 4210152Satgutier@umich.edu#include "sharedcache.h" 4310152Satgutier@umich.edu 4410152Satgutier@umich.educlass BranchPredictor :public Component { 4510152Satgutier@umich.edu public: 4610152Satgutier@umich.edu 4710152Satgutier@umich.edu ParseXML *XML; 4810152Satgutier@umich.edu int ithCore; 4910152Satgutier@umich.edu InputParameter interface_ip; 5010152Satgutier@umich.edu CoreDynParam coredynp; 5110152Satgutier@umich.edu double clockRate,executionTime; 5210152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 5310152Satgutier@umich.edu ArrayST * globalBPT; 5410152Satgutier@umich.edu ArrayST * localBPT; 5510152Satgutier@umich.edu ArrayST * L1_localBPT; 5610152Satgutier@umich.edu ArrayST * L2_localBPT; 5710152Satgutier@umich.edu ArrayST * chooser; 5810152Satgutier@umich.edu ArrayST * RAS; 5910152Satgutier@umich.edu bool exist; 6010152Satgutier@umich.edu 6110152Satgutier@umich.edu BranchPredictor(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_,const CoreDynParam & dyn_p_, bool exsit=true); 6210152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 6310152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 6410152Satgutier@umich.edu ~BranchPredictor(); 6510152Satgutier@umich.edu}; 6610152Satgutier@umich.edu 6710152Satgutier@umich.edu 6810152Satgutier@umich.educlass InstFetchU :public Component { 6910152Satgutier@umich.edu public: 7010152Satgutier@umich.edu 7110152Satgutier@umich.edu ParseXML *XML; 7210152Satgutier@umich.edu int ithCore; 7310152Satgutier@umich.edu InputParameter interface_ip; 7410152Satgutier@umich.edu CoreDynParam coredynp; 7510152Satgutier@umich.edu double clockRate,executionTime; 7610152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 7710152Satgutier@umich.edu enum Cache_policy cache_p; 7810152Satgutier@umich.edu InstCache icache; 7910152Satgutier@umich.edu ArrayST * IB; 8010152Satgutier@umich.edu ArrayST * BTB; 8110152Satgutier@umich.edu BranchPredictor * BPT; 8210152Satgutier@umich.edu inst_decoder * ID_inst; 8310152Satgutier@umich.edu inst_decoder * ID_operand; 8410152Satgutier@umich.edu inst_decoder * ID_misc; 8510152Satgutier@umich.edu bool exist; 8610152Satgutier@umich.edu 8710152Satgutier@umich.edu InstFetchU(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_,const CoreDynParam & dyn_p_, bool exsit=true); 8810152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 8910152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 9010152Satgutier@umich.edu ~InstFetchU(); 9110152Satgutier@umich.edu}; 9210152Satgutier@umich.edu 9310152Satgutier@umich.edu 9410152Satgutier@umich.educlass SchedulerU :public Component { 9510152Satgutier@umich.edu public: 9610152Satgutier@umich.edu 9710152Satgutier@umich.edu ParseXML *XML; 9810152Satgutier@umich.edu int ithCore; 9910152Satgutier@umich.edu InputParameter interface_ip; 10010152Satgutier@umich.edu CoreDynParam coredynp; 10110152Satgutier@umich.edu double clockRate,executionTime; 10210152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 10310152Satgutier@umich.edu double Iw_height, fp_Iw_height,ROB_height; 10410152Satgutier@umich.edu ArrayST * int_inst_window; 10510152Satgutier@umich.edu ArrayST * fp_inst_window; 10610152Satgutier@umich.edu ArrayST * ROB; 10710152Satgutier@umich.edu selection_logic * instruction_selection; 10810152Satgutier@umich.edu bool exist; 10910152Satgutier@umich.edu 11010152Satgutier@umich.edu SchedulerU(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_,const CoreDynParam & dyn_p_, bool exist_=true); 11110152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 11210152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 11310152Satgutier@umich.edu ~SchedulerU(); 11410152Satgutier@umich.edu}; 11510152Satgutier@umich.edu 11610152Satgutier@umich.educlass RENAMINGU :public Component { 11710152Satgutier@umich.edu public: 11810152Satgutier@umich.edu 11910152Satgutier@umich.edu ParseXML *XML; 12010152Satgutier@umich.edu int ithCore; 12110152Satgutier@umich.edu InputParameter interface_ip; 12210152Satgutier@umich.edu double clockRate,executionTime; 12310152Satgutier@umich.edu CoreDynParam coredynp; 12410152Satgutier@umich.edu ArrayST * iFRAT; 12510152Satgutier@umich.edu ArrayST * fFRAT; 12610152Satgutier@umich.edu ArrayST * iRRAT; 12710152Satgutier@umich.edu ArrayST * fRRAT; 12810152Satgutier@umich.edu ArrayST * ifreeL; 12910152Satgutier@umich.edu ArrayST * ffreeL; 13010152Satgutier@umich.edu dep_resource_conflict_check * idcl; 13110152Satgutier@umich.edu dep_resource_conflict_check * fdcl; 13210152Satgutier@umich.edu ArrayST * RAHT;//register alias history table Used to store GC 13310152Satgutier@umich.edu bool exist; 13410152Satgutier@umich.edu 13510152Satgutier@umich.edu 13610152Satgutier@umich.edu RENAMINGU(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_, const CoreDynParam & dyn_p_, bool exist_=true); 13710152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 13810152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 13910152Satgutier@umich.edu ~RENAMINGU(); 14010152Satgutier@umich.edu}; 14110152Satgutier@umich.edu 14210152Satgutier@umich.educlass LoadStoreU :public Component { 14310152Satgutier@umich.edu public: 14410152Satgutier@umich.edu 14510152Satgutier@umich.edu ParseXML *XML; 14610152Satgutier@umich.edu int ithCore; 14710152Satgutier@umich.edu InputParameter interface_ip; 14810152Satgutier@umich.edu CoreDynParam coredynp; 14910152Satgutier@umich.edu enum Cache_policy cache_p; 15010152Satgutier@umich.edu double clockRate,executionTime; 15110152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 15210152Satgutier@umich.edu double lsq_height; 15310152Satgutier@umich.edu DataCache dcache; 15410152Satgutier@umich.edu ArrayST * LSQ;//it is actually the store queue but for inorder processors it serves as both loadQ and StoreQ 15510152Satgutier@umich.edu ArrayST * LoadQ; 15610152Satgutier@umich.edu bool exist; 15710152Satgutier@umich.edu 15810152Satgutier@umich.edu LoadStoreU(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_,const CoreDynParam & dyn_p_, bool exist_=true); 15910152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 16010152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 16110152Satgutier@umich.edu ~LoadStoreU(); 16210152Satgutier@umich.edu}; 16310152Satgutier@umich.edu 16410152Satgutier@umich.educlass MemManU :public Component { 16510152Satgutier@umich.edu public: 16610152Satgutier@umich.edu 16710152Satgutier@umich.edu ParseXML *XML; 16810152Satgutier@umich.edu int ithCore; 16910152Satgutier@umich.edu InputParameter interface_ip; 17010152Satgutier@umich.edu CoreDynParam coredynp; 17110152Satgutier@umich.edu double clockRate,executionTime; 17210152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 17310152Satgutier@umich.edu ArrayST * itlb; 17410152Satgutier@umich.edu ArrayST * dtlb; 17510152Satgutier@umich.edu bool exist; 17610152Satgutier@umich.edu 17710152Satgutier@umich.edu MemManU(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_,const CoreDynParam & dyn_p_, bool exist_=true); 17810152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 17910152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 18010152Satgutier@umich.edu ~MemManU(); 18110152Satgutier@umich.edu}; 18210152Satgutier@umich.edu 18310152Satgutier@umich.educlass RegFU :public Component { 18410152Satgutier@umich.edu public: 18510152Satgutier@umich.edu 18610152Satgutier@umich.edu ParseXML *XML; 18710152Satgutier@umich.edu int ithCore; 18810152Satgutier@umich.edu InputParameter interface_ip; 18910152Satgutier@umich.edu CoreDynParam coredynp; 19010152Satgutier@umich.edu double clockRate,executionTime; 19110152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 19210152Satgutier@umich.edu double int_regfile_height, fp_regfile_height; 19310152Satgutier@umich.edu ArrayST * IRF; 19410152Satgutier@umich.edu ArrayST * FRF; 19510152Satgutier@umich.edu ArrayST * RFWIN; 19610152Satgutier@umich.edu bool exist; 19710152Satgutier@umich.edu 19810152Satgutier@umich.edu RegFU(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_,const CoreDynParam & dyn_p_, bool exist_=true); 19910152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 20010152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 20110152Satgutier@umich.edu ~RegFU(); 20210152Satgutier@umich.edu}; 20310152Satgutier@umich.edu 20410152Satgutier@umich.educlass EXECU :public Component { 20510152Satgutier@umich.edu public: 20610152Satgutier@umich.edu 20710152Satgutier@umich.edu ParseXML *XML; 20810152Satgutier@umich.edu int ithCore; 20910152Satgutier@umich.edu InputParameter interface_ip; 21010152Satgutier@umich.edu double clockRate,executionTime; 21110152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 21210152Satgutier@umich.edu double lsq_height; 21310152Satgutier@umich.edu CoreDynParam coredynp; 21410152Satgutier@umich.edu RegFU * rfu; 21510152Satgutier@umich.edu SchedulerU * scheu; 21610152Satgutier@umich.edu FunctionalUnit * fp_u; 21710152Satgutier@umich.edu FunctionalUnit * exeu; 21810152Satgutier@umich.edu FunctionalUnit * mul; 21910152Satgutier@umich.edu interconnect * int_bypass; 22010152Satgutier@umich.edu interconnect * intTagBypass; 22110152Satgutier@umich.edu interconnect * int_mul_bypass; 22210152Satgutier@umich.edu interconnect * intTag_mul_Bypass; 22310152Satgutier@umich.edu interconnect * fp_bypass; 22410152Satgutier@umich.edu interconnect * fpTagBypass; 22510152Satgutier@umich.edu 22610152Satgutier@umich.edu Component bypass; 22710152Satgutier@umich.edu bool exist; 22810152Satgutier@umich.edu 22910152Satgutier@umich.edu EXECU(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_, double lsq_height_,const CoreDynParam & dyn_p_, bool exist_=true); 23010152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 23110152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 23210152Satgutier@umich.edu ~EXECU(); 23310152Satgutier@umich.edu}; 23410152Satgutier@umich.edu 23510152Satgutier@umich.edu 23610152Satgutier@umich.educlass Core :public Component { 23710152Satgutier@umich.edu public: 23810152Satgutier@umich.edu 23910152Satgutier@umich.edu ParseXML *XML; 24010152Satgutier@umich.edu int ithCore; 24110152Satgutier@umich.edu InputParameter interface_ip; 24210152Satgutier@umich.edu double clockRate,executionTime; 24310152Satgutier@umich.edu double scktRatio, chip_PR_overhead, macro_PR_overhead; 24410152Satgutier@umich.edu InstFetchU * ifu; 24510152Satgutier@umich.edu LoadStoreU * lsu; 24610152Satgutier@umich.edu MemManU * mmu; 24710152Satgutier@umich.edu EXECU * exu; 24810152Satgutier@umich.edu RENAMINGU * rnu; 24910152Satgutier@umich.edu Pipeline * corepipe; 25010152Satgutier@umich.edu UndiffCore * undiffCore; 25110152Satgutier@umich.edu SharedCache * l2cache; 25210152Satgutier@umich.edu CoreDynParam coredynp; 25310152Satgutier@umich.edu //full_decoder inst_decoder; 25410152Satgutier@umich.edu //clock_network clockNetwork; 25510152Satgutier@umich.edu Core(ParseXML *XML_interface, int ithCore_, InputParameter* interface_ip_); 25610152Satgutier@umich.edu void set_core_param(); 25710152Satgutier@umich.edu void computeEnergy(bool is_tdp=true); 25810152Satgutier@umich.edu void displayEnergy(uint32_t indent = 0,int plevel = 100, bool is_tdp=true); 25910152Satgutier@umich.edu ~Core(); 26010152Satgutier@umich.edu}; 26110152Satgutier@umich.edu 26210152Satgutier@umich.edu#endif /* CORE_H_ */ 263