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