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