basic_components.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#ifndef BASIC_COMPONENTS_H_
3310152Satgutier@umich.edu#define BASIC_COMPONENTS_H_
3410152Satgutier@umich.edu
3510152Satgutier@umich.edu#include <vector>
3610152Satgutier@umich.edu
3710152Satgutier@umich.edu#include "XML_Parse.h"
3810152Satgutier@umich.edu#include "parameter.h"
3910152Satgutier@umich.edu
4010152Satgutier@umich.educonst double cdb_overhead = 1.1;
4110152Satgutier@umich.edu
4210152Satgutier@umich.eduenum FU_type {
4310152Satgutier@umich.edu    FPU,
4410152Satgutier@umich.edu    ALU,
4510152Satgutier@umich.edu    MUL
4610152Satgutier@umich.edu};
4710152Satgutier@umich.edu
4810152Satgutier@umich.eduenum Core_type {
4910152Satgutier@umich.edu        OOO,
5010152Satgutier@umich.edu        Inorder
5110152Satgutier@umich.edu};
5210152Satgutier@umich.edu
5310152Satgutier@umich.eduenum Renaming_type {
5410152Satgutier@umich.edu    RAMbased,
5510152Satgutier@umich.edu        CAMbased
5610152Satgutier@umich.edu};
5710152Satgutier@umich.edu
5810152Satgutier@umich.eduenum Scheduler_type {
5910152Satgutier@umich.edu    PhysicalRegFile,
6010152Satgutier@umich.edu        ReservationStation
6110152Satgutier@umich.edu};
6210152Satgutier@umich.edu
6310152Satgutier@umich.eduenum cache_level {
6410152Satgutier@umich.edu    L2,
6510152Satgutier@umich.edu    L3,
6610152Satgutier@umich.edu    L1Directory,
6710152Satgutier@umich.edu    L2Directory
6810152Satgutier@umich.edu};
6910152Satgutier@umich.edu
7010152Satgutier@umich.eduenum MemoryCtrl_type {
7110152Satgutier@umich.edu        MC,    //memory controller
7210152Satgutier@umich.edu        FLASHC //flash controller
7310152Satgutier@umich.edu};
7410152Satgutier@umich.edu
7510152Satgutier@umich.eduenum Dir_type {
7610152Satgutier@umich.edu        ST,//shadowed tag
7710152Satgutier@umich.edu        DC,//directory cache
7810152Satgutier@umich.edu        SBT,//static bank tag
7910152Satgutier@umich.edu        NonDir
8010152Satgutier@umich.edu
8110152Satgutier@umich.edu};
8210152Satgutier@umich.edu
8310152Satgutier@umich.eduenum Cache_policy {
8410152Satgutier@umich.edu        Write_through,
8510152Satgutier@umich.edu        Write_back
8610152Satgutier@umich.edu};
8710152Satgutier@umich.edu
8810152Satgutier@umich.eduenum Device_ty {
8910152Satgutier@umich.edu        Core_device,
9010152Satgutier@umich.edu        Uncore_device,
9110152Satgutier@umich.edu        LLC_device
9210152Satgutier@umich.edu};
9310152Satgutier@umich.edu
9410152Satgutier@umich.educlass statsComponents
9510152Satgutier@umich.edu{
9610152Satgutier@umich.edu  public:
9710152Satgutier@umich.edu    double access;
9810152Satgutier@umich.edu    double hit;
9910152Satgutier@umich.edu    double miss;
10010152Satgutier@umich.edu
10110152Satgutier@umich.edu    statsComponents() : access(0), hit(0), miss(0)  {}
10210152Satgutier@umich.edu    statsComponents(const statsComponents & obj) { *this = obj; }
10310152Satgutier@umich.edu    statsComponents & operator=(const statsComponents & rhs)
10410152Satgutier@umich.edu    {
10510152Satgutier@umich.edu      access = rhs.access;
10610152Satgutier@umich.edu      hit = rhs.hit;
10710152Satgutier@umich.edu      miss  = rhs.miss;
10810152Satgutier@umich.edu      return *this;
10910152Satgutier@umich.edu    }
11010152Satgutier@umich.edu    void reset() { access = 0; hit = 0; miss = 0;}
11110152Satgutier@umich.edu
11210152Satgutier@umich.edu    friend statsComponents operator+(const statsComponents & x, const statsComponents & y);
11310152Satgutier@umich.edu    friend statsComponents operator*(const statsComponents & x, double const * const y);
11410152Satgutier@umich.edu};
11510152Satgutier@umich.edu
11610152Satgutier@umich.educlass statsDef
11710152Satgutier@umich.edu{
11810152Satgutier@umich.edu  public:
11910152Satgutier@umich.edu    statsComponents readAc;
12010152Satgutier@umich.edu    statsComponents writeAc;
12110152Satgutier@umich.edu    statsComponents searchAc;
12210152Satgutier@umich.edu
12310152Satgutier@umich.edu    statsDef() : readAc(), writeAc(),searchAc() { }
12410152Satgutier@umich.edu    void reset() { readAc.reset(); writeAc.reset();searchAc.reset();}
12510152Satgutier@umich.edu
12610152Satgutier@umich.edu    friend statsDef operator+(const statsDef & x, const statsDef & y);
12710152Satgutier@umich.edu    friend statsDef operator*(const statsDef & x, double const * const y);
12810152Satgutier@umich.edu};
12910152Satgutier@umich.edu
13010152Satgutier@umich.edudouble longer_channel_device_reduction(
13110152Satgutier@umich.edu                enum Device_ty device_ty=Core_device,
13210152Satgutier@umich.edu                enum Core_type core_ty=Inorder);
13310152Satgutier@umich.edu
13410152Satgutier@umich.educlass CoreDynParam {
13510152Satgutier@umich.edupublic:
13610152Satgutier@umich.edu        CoreDynParam(){};
13710152Satgutier@umich.edu        CoreDynParam(ParseXML *XML_interface, int ithCore_);
13810152Satgutier@umich.edu        //    :XML(XML_interface),
13910152Satgutier@umich.edu        //     ithCore(ithCore_)
14010152Satgutier@umich.edu        //     core_ty(inorder),
14110152Satgutier@umich.edu        //     rm_ty(CAMbased),
14210152Satgutier@umich.edu        //     scheu_ty(PhysicalRegFile),
14310152Satgutier@umich.edu        //     clockRate(1e9),//1GHz
14410152Satgutier@umich.edu        //     arch_ireg_width(32),
14510152Satgutier@umich.edu        //     arch_freg_width(32),
14610152Satgutier@umich.edu        //     phy_ireg_width(128),
14710152Satgutier@umich.edu        //     phy_freg_width(128),
14810152Satgutier@umich.edu        //     perThreadState(8),
14910152Satgutier@umich.edu        //     globalCheckpoint(32),
15010152Satgutier@umich.edu        //     instructionLength(32){};
15110152Satgutier@umich.edu        //ParseXML * XML;
15210152Satgutier@umich.edu        bool opt_local;
15310152Satgutier@umich.edu        bool x86;
15410152Satgutier@umich.edu        bool Embedded;
15510152Satgutier@umich.edu    enum Core_type  core_ty;
15610152Satgutier@umich.edu        enum Renaming_type rm_ty;
15710152Satgutier@umich.edu    enum Scheduler_type scheu_ty;
15810152Satgutier@umich.edu    double clockRate,executionTime;
15910152Satgutier@umich.edu    int  arch_ireg_width, arch_freg_width, phy_ireg_width, phy_freg_width;
16010152Satgutier@umich.edu    int  num_IRF_entry, num_FRF_entry, num_ifreelist_entries, num_ffreelist_entries;
16110152Satgutier@umich.edu    int  fetchW, decodeW,issueW,peak_issueW, commitW,peak_commitW, predictionW, fp_issueW, fp_decodeW;
16210152Satgutier@umich.edu    int  perThreadState, globalCheckpoint, instruction_length, pc_width, opcode_length, micro_opcode_length;
16310152Satgutier@umich.edu    int  num_hthreads, pipeline_stages, fp_pipeline_stages, num_pipelines, num_fp_pipelines;
16410152Satgutier@umich.edu    int  num_alus, num_muls;
16510152Satgutier@umich.edu    double num_fpus;
16610152Satgutier@umich.edu    int  int_data_width, fp_data_width,v_address_width, p_address_width;
16710152Satgutier@umich.edu    double pipeline_duty_cycle, total_cycles, busy_cycles, idle_cycles;
16810152Satgutier@umich.edu    bool regWindowing,multithreaded;
16910152Satgutier@umich.edu    double pppm_lkg_multhread[4];
17010152Satgutier@umich.edu        double IFU_duty_cycle,BR_duty_cycle,LSU_duty_cycle,MemManU_I_duty_cycle,
17110152Satgutier@umich.edu               MemManU_D_duty_cycle, ALU_duty_cycle,MUL_duty_cycle,
17210152Satgutier@umich.edu               FPU_duty_cycle, ALU_cdb_duty_cycle,MUL_cdb_duty_cycle,
17310152Satgutier@umich.edu               FPU_cdb_duty_cycle;
17410152Satgutier@umich.edu    ~CoreDynParam(){};
17510152Satgutier@umich.edu};
17610152Satgutier@umich.edu
17710152Satgutier@umich.educlass CacheDynParam {
17810152Satgutier@umich.edupublic:
17910152Satgutier@umich.edu        CacheDynParam(){};
18010152Satgutier@umich.edu        CacheDynParam(ParseXML *XML_interface, int ithCache_);
18110152Satgutier@umich.edu    string name;
18210152Satgutier@umich.edu        enum Dir_type    dir_ty;
18310152Satgutier@umich.edu        double clockRate,executionTime;
18410152Satgutier@umich.edu    double    capacity, blockW, assoc, nbanks;
18510152Satgutier@umich.edu    double throughput, latency;
18610152Satgutier@umich.edu    double duty_cycle, dir_duty_cycle;
18710152Satgutier@umich.edu    //double duty_cycle;
18810152Satgutier@umich.edu    int missb_size, fu_size, prefetchb_size, wbb_size;
18910152Satgutier@umich.edu    ~CacheDynParam(){};
19010152Satgutier@umich.edu};
19110152Satgutier@umich.edu
19210152Satgutier@umich.educlass MCParam {
19310152Satgutier@umich.edupublic:
19410152Satgutier@umich.edu        MCParam(){};
19510152Satgutier@umich.edu        MCParam(ParseXML *XML_interface, int ithCache_);
19610152Satgutier@umich.edu    string name;
19710152Satgutier@umich.edu    double  clockRate,num_mcs, peakDataTransferRate, num_channels;
19810152Satgutier@umich.edu    //  double mcTEPowerperGhz;
19910152Satgutier@umich.edu    //	double mcPHYperGbit;
20010152Satgutier@umich.edu    //	double area;
20110152Satgutier@umich.edu    int	   llcBlockSize, dataBusWidth, addressBusWidth;
20210152Satgutier@umich.edu    int    opcodeW;
20310152Satgutier@umich.edu    int    memAccesses;
20410152Satgutier@umich.edu    int    memRank;
20510152Satgutier@umich.edu    int    type;
20610152Satgutier@umich.edu    double frontend_duty_cycle, duty_cycle, perc_load;
20710152Satgutier@umich.edu    double executionTime, reads, writes;
20810152Satgutier@umich.edu    bool   LVDS, withPHY;
20910152Satgutier@umich.edu
21010152Satgutier@umich.edu    ~MCParam(){};
21110152Satgutier@umich.edu};
21210152Satgutier@umich.edu
21310152Satgutier@umich.educlass NoCParam {
21410152Satgutier@umich.edupublic:
21510152Satgutier@umich.edu        NoCParam(){};
21610152Satgutier@umich.edu        NoCParam(ParseXML *XML_interface, int ithCache_);
21710152Satgutier@umich.edu    string name;
21810152Satgutier@umich.edu    double  clockRate;
21910152Satgutier@umich.edu    int	   flit_size;
22010152Satgutier@umich.edu    int    input_ports, output_ports, min_ports, global_linked_ports;
22110152Satgutier@umich.edu    int    virtual_channel_per_port,input_buffer_entries_per_vc;
22210152Satgutier@umich.edu    int    horizontal_nodes,vertical_nodes, total_nodes;
22310152Satgutier@umich.edu    double executionTime, total_access, link_throughput,link_latency,
22410152Satgutier@umich.edu                   duty_cycle, chip_coverage, route_over_perc;
22510152Satgutier@umich.edu    bool   has_global_link, type;
22610152Satgutier@umich.edu
22710152Satgutier@umich.edu    ~NoCParam(){};
22810152Satgutier@umich.edu};
22910152Satgutier@umich.edu
23010152Satgutier@umich.educlass ProcParam {
23110152Satgutier@umich.edupublic:
23210152Satgutier@umich.edu        ProcParam(){};
23310152Satgutier@umich.edu        ProcParam(ParseXML *XML_interface, int ithCache_);
23410152Satgutier@umich.edu    string name;
23510152Satgutier@umich.edu    int  numCore, numL2, numL3, numNOC, numL1Dir, numL2Dir,numMC, numMCChannel;
23610152Satgutier@umich.edu    bool homoCore, homoL2, homoL3, homoNOC, homoL1Dir, homoL2Dir;
23710152Satgutier@umich.edu
23810152Satgutier@umich.edu    ~ProcParam(){};
23910152Satgutier@umich.edu};
24010152Satgutier@umich.edu
24110152Satgutier@umich.educlass NIUParam {
24210152Satgutier@umich.edupublic:
24310152Satgutier@umich.edu        NIUParam(){};
24410152Satgutier@umich.edu        NIUParam(ParseXML *XML_interface, int ithCache_);
24510152Satgutier@umich.edu    string name;
24610152Satgutier@umich.edu    double  clockRate;
24710152Satgutier@umich.edu    int    num_units;
24810152Satgutier@umich.edu    int    type;
24910152Satgutier@umich.edu    double duty_cycle, perc_load;
25010152Satgutier@umich.edu    ~NIUParam(){};
25110152Satgutier@umich.edu};
25210152Satgutier@umich.edu
25310152Satgutier@umich.educlass PCIeParam {
25410152Satgutier@umich.edupublic:
25510152Satgutier@umich.edu        PCIeParam(){};
25610152Satgutier@umich.edu        PCIeParam(ParseXML *XML_interface, int ithCache_);
25710152Satgutier@umich.edu    string name;
25810152Satgutier@umich.edu    double  clockRate;
25910152Satgutier@umich.edu    int    num_channels, num_units;
26010152Satgutier@umich.edu    bool   withPHY;
26110152Satgutier@umich.edu    int    type;
26210152Satgutier@umich.edu    double duty_cycle, perc_load;
26310152Satgutier@umich.edu    ~PCIeParam(){};
26410152Satgutier@umich.edu};
26510152Satgutier@umich.edu#endif /* BASIC_COMPONENTS_H_ */
266