cacti_interface.h revision 10152
110152Satgutier@umich.edu/*****************************************************************************
210152Satgutier@umich.edu *                                McPAT/CACTI
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
3410152Satgutier@umich.edu#ifndef __CACTI_INTERFACE_H__
3510152Satgutier@umich.edu#define __CACTI_INTERFACE_H__
3610152Satgutier@umich.edu
3710152Satgutier@umich.edu#include <iostream>
3810152Satgutier@umich.edu#include <list>
3910152Satgutier@umich.edu#include <map>
4010152Satgutier@umich.edu#include <string>
4110152Satgutier@umich.edu#include <vector>
4210152Satgutier@umich.edu
4310152Satgutier@umich.edu#include "const.h"
4410152Satgutier@umich.edu
4510152Satgutier@umich.eduusing namespace std;
4610152Satgutier@umich.edu
4710152Satgutier@umich.edu
4810152Satgutier@umich.educlass min_values_t;
4910152Satgutier@umich.educlass mem_array;
5010152Satgutier@umich.educlass uca_org_t;
5110152Satgutier@umich.edu
5210152Satgutier@umich.edu
5310152Satgutier@umich.educlass powerComponents
5410152Satgutier@umich.edu{
5510152Satgutier@umich.edu  public:
5610152Satgutier@umich.edu    double dynamic;
5710152Satgutier@umich.edu    double leakage;
5810152Satgutier@umich.edu    double gate_leakage;
5910152Satgutier@umich.edu    double short_circuit;
6010152Satgutier@umich.edu    double longer_channel_leakage;
6110152Satgutier@umich.edu
6210152Satgutier@umich.edu    powerComponents() : dynamic(0), leakage(0), gate_leakage(0), short_circuit(0), longer_channel_leakage(0)  { }
6310152Satgutier@umich.edu    powerComponents(const powerComponents & obj) { *this = obj; }
6410152Satgutier@umich.edu    powerComponents & operator=(const powerComponents & rhs)
6510152Satgutier@umich.edu    {
6610152Satgutier@umich.edu      dynamic = rhs.dynamic;
6710152Satgutier@umich.edu      leakage = rhs.leakage;
6810152Satgutier@umich.edu      gate_leakage  = rhs.gate_leakage;
6910152Satgutier@umich.edu      short_circuit = rhs.short_circuit;
7010152Satgutier@umich.edu      longer_channel_leakage = rhs.longer_channel_leakage;
7110152Satgutier@umich.edu      return *this;
7210152Satgutier@umich.edu    }
7310152Satgutier@umich.edu    void reset() { dynamic = 0; leakage = 0; gate_leakage = 0; short_circuit = 0;longer_channel_leakage = 0;}
7410152Satgutier@umich.edu
7510152Satgutier@umich.edu    friend powerComponents operator+(const powerComponents & x, const powerComponents & y);
7610152Satgutier@umich.edu    friend powerComponents operator*(const powerComponents & x, double const * const y);
7710152Satgutier@umich.edu};
7810152Satgutier@umich.edu
7910152Satgutier@umich.edu
8010152Satgutier@umich.edu
8110152Satgutier@umich.educlass powerDef
8210152Satgutier@umich.edu{
8310152Satgutier@umich.edu  public:
8410152Satgutier@umich.edu    powerComponents readOp;
8510152Satgutier@umich.edu    powerComponents writeOp;
8610152Satgutier@umich.edu    powerComponents searchOp;//Sheng: for CAM and FA
8710152Satgutier@umich.edu
8810152Satgutier@umich.edu    powerDef() : readOp(), writeOp(), searchOp() { }
8910152Satgutier@umich.edu    void reset() { readOp.reset(); writeOp.reset(); searchOp.reset();}
9010152Satgutier@umich.edu
9110152Satgutier@umich.edu    friend powerDef operator+(const powerDef & x, const powerDef & y);
9210152Satgutier@umich.edu    friend powerDef operator*(const powerDef & x, double const * const y);
9310152Satgutier@umich.edu};
9410152Satgutier@umich.edu
9510152Satgutier@umich.eduenum Wire_type
9610152Satgutier@umich.edu{
9710152Satgutier@umich.edu    Global /* gloabl wires with repeaters */,
9810152Satgutier@umich.edu    Global_5 /* 5% delay penalty */,
9910152Satgutier@umich.edu    Global_10 /* 10% delay penalty */,
10010152Satgutier@umich.edu    Global_20 /* 20% delay penalty */,
10110152Satgutier@umich.edu    Global_30 /* 30% delay penalty */,
10210152Satgutier@umich.edu    Low_swing /* differential low power wires with high area overhead */,
10310152Satgutier@umich.edu    Semi_global /* mid-level wires with repeaters*/,
10410152Satgutier@umich.edu    Transmission /* tranmission lines with high area overhead */,
10510152Satgutier@umich.edu    Optical /* optical wires */,
10610152Satgutier@umich.edu    Invalid_wtype
10710152Satgutier@umich.edu};
10810152Satgutier@umich.edu
10910152Satgutier@umich.edu
11010152Satgutier@umich.edu
11110152Satgutier@umich.educlass InputParameter
11210152Satgutier@umich.edu{
11310152Satgutier@umich.edu  public:
11410152Satgutier@umich.edu    void parse_cfg(const string & infile);
11510152Satgutier@umich.edu
11610152Satgutier@umich.edu    bool error_checking();  // return false if the input parameters are problematic
11710152Satgutier@umich.edu    void display_ip();
11810152Satgutier@umich.edu
11910152Satgutier@umich.edu    unsigned int cache_sz;  // in bytes
12010152Satgutier@umich.edu    unsigned int line_sz;
12110152Satgutier@umich.edu    unsigned int assoc;
12210152Satgutier@umich.edu    unsigned int nbanks;
12310152Satgutier@umich.edu    unsigned int out_w;// == nr_bits_out
12410152Satgutier@umich.edu    bool     specific_tag;
12510152Satgutier@umich.edu    unsigned int tag_w;
12610152Satgutier@umich.edu    unsigned int access_mode;
12710152Satgutier@umich.edu    unsigned int obj_func_dyn_energy;
12810152Satgutier@umich.edu    unsigned int obj_func_dyn_power;
12910152Satgutier@umich.edu    unsigned int obj_func_leak_power;
13010152Satgutier@umich.edu    unsigned int obj_func_cycle_t;
13110152Satgutier@umich.edu
13210152Satgutier@umich.edu    double   F_sz_nm;          // feature size in nm
13310152Satgutier@umich.edu    double   F_sz_um;          // feature size in um
13410152Satgutier@umich.edu    unsigned int num_rw_ports;
13510152Satgutier@umich.edu    unsigned int num_rd_ports;
13610152Satgutier@umich.edu    unsigned int num_wr_ports;
13710152Satgutier@umich.edu    unsigned int num_se_rd_ports;  // number of single ended read ports
13810152Satgutier@umich.edu    unsigned int num_search_ports;  // Sheng: number of search ports for CAM
13910152Satgutier@umich.edu    bool     is_main_mem;
14010152Satgutier@umich.edu    bool     is_cache;
14110152Satgutier@umich.edu    bool     pure_ram;
14210152Satgutier@umich.edu    bool     pure_cam;
14310152Satgutier@umich.edu    bool     rpters_in_htree;  // if there are repeaters in htree segment
14410152Satgutier@umich.edu    unsigned int ver_htree_wires_over_array;
14510152Satgutier@umich.edu    unsigned int broadcast_addr_din_over_ver_htrees;
14610152Satgutier@umich.edu    unsigned int temp;
14710152Satgutier@umich.edu
14810152Satgutier@umich.edu    unsigned int ram_cell_tech_type;
14910152Satgutier@umich.edu    unsigned int peri_global_tech_type;
15010152Satgutier@umich.edu    unsigned int data_arr_ram_cell_tech_type;
15110152Satgutier@umich.edu    unsigned int data_arr_peri_global_tech_type;
15210152Satgutier@umich.edu    unsigned int tag_arr_ram_cell_tech_type;
15310152Satgutier@umich.edu    unsigned int tag_arr_peri_global_tech_type;
15410152Satgutier@umich.edu
15510152Satgutier@umich.edu    unsigned int burst_len;
15610152Satgutier@umich.edu    unsigned int int_prefetch_w;
15710152Satgutier@umich.edu    unsigned int page_sz_bits;
15810152Satgutier@umich.edu
15910152Satgutier@umich.edu    unsigned int ic_proj_type;      // interconnect_projection_type
16010152Satgutier@umich.edu    unsigned int wire_is_mat_type;  // wire_inside_mat_type
16110152Satgutier@umich.edu    unsigned int wire_os_mat_type; // wire_outside_mat_type
16210152Satgutier@umich.edu    enum Wire_type wt;
16310152Satgutier@umich.edu    int force_wiretype;
16410152Satgutier@umich.edu    bool print_input_args;
16510152Satgutier@umich.edu    unsigned int nuca_cache_sz; // TODO
16610152Satgutier@umich.edu    int ndbl, ndwl, nspd, ndsam1, ndsam2, ndcm;
16710152Satgutier@umich.edu    bool force_cache_config;
16810152Satgutier@umich.edu
16910152Satgutier@umich.edu    int cache_level;
17010152Satgutier@umich.edu    int cores;
17110152Satgutier@umich.edu    int nuca_bank_count;
17210152Satgutier@umich.edu    int force_nuca_bank;
17310152Satgutier@umich.edu
17410152Satgutier@umich.edu    int delay_wt, dynamic_power_wt, leakage_power_wt,
17510152Satgutier@umich.edu        cycle_time_wt, area_wt;
17610152Satgutier@umich.edu    int delay_wt_nuca, dynamic_power_wt_nuca, leakage_power_wt_nuca,
17710152Satgutier@umich.edu        cycle_time_wt_nuca, area_wt_nuca;
17810152Satgutier@umich.edu
17910152Satgutier@umich.edu    int delay_dev, dynamic_power_dev, leakage_power_dev,
18010152Satgutier@umich.edu        cycle_time_dev, area_dev;
18110152Satgutier@umich.edu    int delay_dev_nuca, dynamic_power_dev_nuca, leakage_power_dev_nuca,
18210152Satgutier@umich.edu        cycle_time_dev_nuca, area_dev_nuca;
18310152Satgutier@umich.edu    int ed; //ED or ED2 optimization
18410152Satgutier@umich.edu    int nuca;
18510152Satgutier@umich.edu
18610152Satgutier@umich.edu    bool     fast_access;
18710152Satgutier@umich.edu    unsigned int block_sz;  // bytes
18810152Satgutier@umich.edu    unsigned int tag_assoc;
18910152Satgutier@umich.edu    unsigned int data_assoc;
19010152Satgutier@umich.edu    bool     is_seq_acc;
19110152Satgutier@umich.edu    bool     fully_assoc;
19210152Satgutier@umich.edu    unsigned int nsets;  // == number_of_sets
19310152Satgutier@umich.edu    int print_detail;
19410152Satgutier@umich.edu
19510152Satgutier@umich.edu
19610152Satgutier@umich.edu    bool     add_ecc_b_;
19710152Satgutier@umich.edu  //parameters for design constraint
19810152Satgutier@umich.edu  double throughput;
19910152Satgutier@umich.edu  double latency;
20010152Satgutier@umich.edu  bool pipelinable;
20110152Satgutier@umich.edu  int pipeline_stages;
20210152Satgutier@umich.edu  int per_stage_vector;
20310152Satgutier@umich.edu  bool with_clock_grid;
20410152Satgutier@umich.edu};
20510152Satgutier@umich.edu
20610152Satgutier@umich.edu
20710152Satgutier@umich.edutypedef struct{
20810152Satgutier@umich.edu  int Ndwl;
20910152Satgutier@umich.edu  int Ndbl;
21010152Satgutier@umich.edu  double Nspd;
21110152Satgutier@umich.edu  int deg_bl_muxing;
21210152Satgutier@umich.edu  int Ndsam_lev_1;
21310152Satgutier@umich.edu  int Ndsam_lev_2;
21410152Satgutier@umich.edu  int number_activated_mats_horizontal_direction;
21510152Satgutier@umich.edu  int number_subbanks;
21610152Satgutier@umich.edu  int page_size_in_bits;
21710152Satgutier@umich.edu  double delay_route_to_bank;
21810152Satgutier@umich.edu  double delay_crossbar;
21910152Satgutier@umich.edu  double delay_addr_din_horizontal_htree;
22010152Satgutier@umich.edu  double delay_addr_din_vertical_htree;
22110152Satgutier@umich.edu  double delay_row_predecode_driver_and_block;
22210152Satgutier@umich.edu  double delay_row_decoder;
22310152Satgutier@umich.edu  double delay_bitlines;
22410152Satgutier@umich.edu  double delay_sense_amp;
22510152Satgutier@umich.edu  double delay_subarray_output_driver;
22610152Satgutier@umich.edu  double delay_bit_mux_predecode_driver_and_block;
22710152Satgutier@umich.edu  double delay_bit_mux_decoder;
22810152Satgutier@umich.edu  double delay_senseamp_mux_lev_1_predecode_driver_and_block;
22910152Satgutier@umich.edu  double delay_senseamp_mux_lev_1_decoder;
23010152Satgutier@umich.edu  double delay_senseamp_mux_lev_2_predecode_driver_and_block;
23110152Satgutier@umich.edu  double delay_senseamp_mux_lev_2_decoder;
23210152Satgutier@umich.edu  double delay_input_htree;
23310152Satgutier@umich.edu  double delay_output_htree;
23410152Satgutier@umich.edu  double delay_dout_vertical_htree;
23510152Satgutier@umich.edu  double delay_dout_horizontal_htree;
23610152Satgutier@umich.edu  double delay_comparator;
23710152Satgutier@umich.edu  double access_time;
23810152Satgutier@umich.edu  double cycle_time;
23910152Satgutier@umich.edu  double multisubbank_interleave_cycle_time;
24010152Satgutier@umich.edu  double delay_request_network;
24110152Satgutier@umich.edu  double delay_inside_mat;
24210152Satgutier@umich.edu  double delay_reply_network;
24310152Satgutier@umich.edu  double trcd;
24410152Satgutier@umich.edu  double cas_latency;
24510152Satgutier@umich.edu  double precharge_delay;
24610152Satgutier@umich.edu  powerDef power_routing_to_bank;
24710152Satgutier@umich.edu  powerDef power_addr_input_htree;
24810152Satgutier@umich.edu  powerDef power_data_input_htree;
24910152Satgutier@umich.edu  powerDef power_data_output_htree;
25010152Satgutier@umich.edu  powerDef power_addr_horizontal_htree;
25110152Satgutier@umich.edu  powerDef power_datain_horizontal_htree;
25210152Satgutier@umich.edu  powerDef power_dataout_horizontal_htree;
25310152Satgutier@umich.edu  powerDef power_addr_vertical_htree;
25410152Satgutier@umich.edu  powerDef power_datain_vertical_htree;
25510152Satgutier@umich.edu  powerDef power_row_predecoder_drivers;
25610152Satgutier@umich.edu  powerDef power_row_predecoder_blocks;
25710152Satgutier@umich.edu  powerDef power_row_decoders;
25810152Satgutier@umich.edu  powerDef power_bit_mux_predecoder_drivers;
25910152Satgutier@umich.edu  powerDef power_bit_mux_predecoder_blocks;
26010152Satgutier@umich.edu  powerDef power_bit_mux_decoders;
26110152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_1_predecoder_drivers;
26210152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_1_predecoder_blocks;
26310152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_1_decoders;
26410152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_2_predecoder_drivers;
26510152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_2_predecoder_blocks;
26610152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_2_decoders;
26710152Satgutier@umich.edu  powerDef power_bitlines;
26810152Satgutier@umich.edu  powerDef power_sense_amps;
26910152Satgutier@umich.edu  powerDef power_prechg_eq_drivers;
27010152Satgutier@umich.edu  powerDef power_output_drivers_at_subarray;
27110152Satgutier@umich.edu  powerDef power_dataout_vertical_htree;
27210152Satgutier@umich.edu  powerDef power_comparators;
27310152Satgutier@umich.edu  powerDef power_crossbar;
27410152Satgutier@umich.edu  powerDef total_power;
27510152Satgutier@umich.edu  double area;
27610152Satgutier@umich.edu  double all_banks_height;
27710152Satgutier@umich.edu  double all_banks_width;
27810152Satgutier@umich.edu  double bank_height;
27910152Satgutier@umich.edu  double bank_width;
28010152Satgutier@umich.edu  double subarray_memory_cell_area_height;
28110152Satgutier@umich.edu  double subarray_memory_cell_area_width;
28210152Satgutier@umich.edu  double mat_height;
28310152Satgutier@umich.edu  double mat_width;
28410152Satgutier@umich.edu  double routing_area_height_within_bank;
28510152Satgutier@umich.edu  double routing_area_width_within_bank;
28610152Satgutier@umich.edu  double area_efficiency;
28710152Satgutier@umich.edu//  double perc_power_dyn_routing_to_bank;
28810152Satgutier@umich.edu//  double perc_power_dyn_addr_horizontal_htree;
28910152Satgutier@umich.edu//  double perc_power_dyn_datain_horizontal_htree;
29010152Satgutier@umich.edu//  double perc_power_dyn_dataout_horizontal_htree;
29110152Satgutier@umich.edu//  double perc_power_dyn_addr_vertical_htree;
29210152Satgutier@umich.edu//  double perc_power_dyn_datain_vertical_htree;
29310152Satgutier@umich.edu//  double perc_power_dyn_row_predecoder_drivers;
29410152Satgutier@umich.edu//  double perc_power_dyn_row_predecoder_blocks;
29510152Satgutier@umich.edu//  double perc_power_dyn_row_decoders;
29610152Satgutier@umich.edu//  double perc_power_dyn_bit_mux_predecoder_drivers;
29710152Satgutier@umich.edu//  double perc_power_dyn_bit_mux_predecoder_blocks;
29810152Satgutier@umich.edu//  double perc_power_dyn_bit_mux_decoders;
29910152Satgutier@umich.edu//  double perc_power_dyn_senseamp_mux_lev_1_predecoder_drivers;
30010152Satgutier@umich.edu//  double perc_power_dyn_senseamp_mux_lev_1_predecoder_blocks;
30110152Satgutier@umich.edu//  double perc_power_dyn_senseamp_mux_lev_1_decoders;
30210152Satgutier@umich.edu//  double perc_power_dyn_senseamp_mux_lev_2_predecoder_drivers;
30310152Satgutier@umich.edu//  double perc_power_dyn_senseamp_mux_lev_2_predecoder_blocks;
30410152Satgutier@umich.edu//  double perc_power_dyn_senseamp_mux_lev_2_decoders;
30510152Satgutier@umich.edu//  double perc_power_dyn_bitlines;
30610152Satgutier@umich.edu//  double perc_power_dyn_sense_amps;
30710152Satgutier@umich.edu//  double perc_power_dyn_prechg_eq_drivers;
30810152Satgutier@umich.edu//  double perc_power_dyn_subarray_output_drivers;
30910152Satgutier@umich.edu//  double perc_power_dyn_dataout_vertical_htree;
31010152Satgutier@umich.edu//  double perc_power_dyn_comparators;
31110152Satgutier@umich.edu//  double perc_power_dyn_crossbar;
31210152Satgutier@umich.edu//  double perc_power_dyn_spent_outside_mats;
31310152Satgutier@umich.edu//  double perc_power_leak_routing_to_bank;
31410152Satgutier@umich.edu//  double perc_power_leak_addr_horizontal_htree;
31510152Satgutier@umich.edu//  double perc_power_leak_datain_horizontal_htree;
31610152Satgutier@umich.edu//  double perc_power_leak_dataout_horizontal_htree;
31710152Satgutier@umich.edu//  double perc_power_leak_addr_vertical_htree;
31810152Satgutier@umich.edu//  double perc_power_leak_datain_vertical_htree;
31910152Satgutier@umich.edu//  double perc_power_leak_row_predecoder_drivers;
32010152Satgutier@umich.edu//  double perc_power_leak_row_predecoder_blocks;
32110152Satgutier@umich.edu//  double perc_power_leak_row_decoders;
32210152Satgutier@umich.edu//  double perc_power_leak_bit_mux_predecoder_drivers;
32310152Satgutier@umich.edu//  double perc_power_leak_bit_mux_predecoder_blocks;
32410152Satgutier@umich.edu//  double perc_power_leak_bit_mux_decoders;
32510152Satgutier@umich.edu//  double perc_power_leak_senseamp_mux_lev_1_predecoder_drivers;
32610152Satgutier@umich.edu//  double perc_power_leak_senseamp_mux_lev_1_predecoder_blocks;
32710152Satgutier@umich.edu//  double perc_power_leak_senseamp_mux_lev_1_decoders;
32810152Satgutier@umich.edu//  double perc_power_leak_senseamp_mux_lev_2_predecoder_drivers;
32910152Satgutier@umich.edu//  double perc_power_leak_senseamp_mux_lev_2_predecoder_blocks;
33010152Satgutier@umich.edu//  double perc_power_leak_senseamp_mux_lev_2_decoders;
33110152Satgutier@umich.edu//  double perc_power_leak_bitlines;
33210152Satgutier@umich.edu//  double perc_power_leak_sense_amps;
33310152Satgutier@umich.edu//  double perc_power_leak_prechg_eq_drivers;
33410152Satgutier@umich.edu//  double perc_power_leak_subarray_output_drivers;
33510152Satgutier@umich.edu//  double perc_power_leak_dataout_vertical_htree;
33610152Satgutier@umich.edu//  double perc_power_leak_comparators;
33710152Satgutier@umich.edu//  double perc_power_leak_crossbar;
33810152Satgutier@umich.edu//  double perc_leak_mats;
33910152Satgutier@umich.edu//  double perc_active_mats;
34010152Satgutier@umich.edu  double refresh_power;
34110152Satgutier@umich.edu  double dram_refresh_period;
34210152Satgutier@umich.edu  double dram_array_availability;
34310152Satgutier@umich.edu  double dyn_read_energy_from_closed_page;
34410152Satgutier@umich.edu  double dyn_read_energy_from_open_page;
34510152Satgutier@umich.edu  double leak_power_subbank_closed_page;
34610152Satgutier@umich.edu  double leak_power_subbank_open_page;
34710152Satgutier@umich.edu  double leak_power_request_and_reply_networks;
34810152Satgutier@umich.edu  double activate_energy;
34910152Satgutier@umich.edu  double read_energy;
35010152Satgutier@umich.edu  double write_energy;
35110152Satgutier@umich.edu  double precharge_energy;
35210152Satgutier@umich.edu} results_mem_array;
35310152Satgutier@umich.edu
35410152Satgutier@umich.edu
35510152Satgutier@umich.educlass uca_org_t
35610152Satgutier@umich.edu{
35710152Satgutier@umich.edu  public:
35810152Satgutier@umich.edu    mem_array * tag_array2;
35910152Satgutier@umich.edu    mem_array * data_array2;
36010152Satgutier@umich.edu    double access_time;
36110152Satgutier@umich.edu    double cycle_time;
36210152Satgutier@umich.edu    double area;
36310152Satgutier@umich.edu    double area_efficiency;
36410152Satgutier@umich.edu    powerDef power;
36510152Satgutier@umich.edu    double leak_power_with_sleep_transistors_in_mats;
36610152Satgutier@umich.edu    double cache_ht;
36710152Satgutier@umich.edu    double cache_len;
36810152Satgutier@umich.edu    char file_n[100];
36910152Satgutier@umich.edu    double vdd_periph_global;
37010152Satgutier@umich.edu    bool valid;
37110152Satgutier@umich.edu    results_mem_array tag_array;
37210152Satgutier@umich.edu    results_mem_array data_array;
37310152Satgutier@umich.edu
37410152Satgutier@umich.edu    uca_org_t();
37510152Satgutier@umich.edu    void find_delay();
37610152Satgutier@umich.edu    void find_energy();
37710152Satgutier@umich.edu    void find_area();
37810152Satgutier@umich.edu    void find_cyc();
37910152Satgutier@umich.edu    void adjust_area();//for McPAT only to adjust routing overhead
38010152Satgutier@umich.edu    void cleanup();
38110152Satgutier@umich.edu    ~uca_org_t(){};
38210152Satgutier@umich.edu};
38310152Satgutier@umich.edu
38410152Satgutier@umich.eduvoid reconfigure(InputParameter *local_interface, uca_org_t *fin_res);
38510152Satgutier@umich.edu
38610152Satgutier@umich.eduuca_org_t cacti_interface(const string & infile_name);
38710152Satgutier@umich.edu//McPAT's plain interface, please keep !!!
38810152Satgutier@umich.eduuca_org_t cacti_interface(InputParameter * const local_interface);
38910152Satgutier@umich.edu//McPAT's plain interface, please keep !!!
39010152Satgutier@umich.eduuca_org_t init_interface(InputParameter * const local_interface);
39110152Satgutier@umich.edu//McPAT's plain interface, please keep !!!
39210152Satgutier@umich.eduuca_org_t cacti_interface(
39310152Satgutier@umich.edu            int cache_size,
39410152Satgutier@umich.edu            int line_size,
39510152Satgutier@umich.edu            int associativity,
39610152Satgutier@umich.edu            int rw_ports,
39710152Satgutier@umich.edu            int excl_read_ports,
39810152Satgutier@umich.edu            int excl_write_ports,
39910152Satgutier@umich.edu            int single_ended_read_ports,
40010152Satgutier@umich.edu            int search_ports,
40110152Satgutier@umich.edu            int banks,
40210152Satgutier@umich.edu            double tech_node,
40310152Satgutier@umich.edu            int output_width,
40410152Satgutier@umich.edu            int specific_tag,
40510152Satgutier@umich.edu            int tag_width,
40610152Satgutier@umich.edu            int access_mode,
40710152Satgutier@umich.edu            int cache,
40810152Satgutier@umich.edu            int main_mem,
40910152Satgutier@umich.edu            int obj_func_delay,
41010152Satgutier@umich.edu            int obj_func_dynamic_power,
41110152Satgutier@umich.edu            int obj_func_leakage_power,
41210152Satgutier@umich.edu            int obj_func_cycle_time,
41310152Satgutier@umich.edu            int obj_func_area,
41410152Satgutier@umich.edu            int dev_func_delay,
41510152Satgutier@umich.edu            int dev_func_dynamic_power,
41610152Satgutier@umich.edu            int dev_func_leakage_power,
41710152Satgutier@umich.edu            int dev_func_area,
41810152Satgutier@umich.edu            int dev_func_cycle_time,
41910152Satgutier@umich.edu            int ed_ed2_none, // 0 - ED, 1 - ED^2, 2 - use weight and deviate
42010152Satgutier@umich.edu            int temp,
42110152Satgutier@umich.edu            int wt, //0 - default(search across everything), 1 - global, 2 - 5% delay penalty, 3 - 10%, 4 - 20 %, 5 - 30%, 6 - low-swing
42210152Satgutier@umich.edu            int data_arr_ram_cell_tech_flavor_in,
42310152Satgutier@umich.edu            int data_arr_peri_global_tech_flavor_in,
42410152Satgutier@umich.edu            int tag_arr_ram_cell_tech_flavor_in,
42510152Satgutier@umich.edu            int tag_arr_peri_global_tech_flavor_in,
42610152Satgutier@umich.edu            int interconnect_projection_type_in,
42710152Satgutier@umich.edu            int wire_inside_mat_type_in,
42810152Satgutier@umich.edu            int wire_outside_mat_type_in,
42910152Satgutier@umich.edu            int REPEATERS_IN_HTREE_SEGMENTS_in,
43010152Satgutier@umich.edu            int VERTICAL_HTREE_WIRES_OVER_THE_ARRAY_in,
43110152Satgutier@umich.edu            int BROADCAST_ADDR_DATAIN_OVER_VERTICAL_HTREES_in,
43210152Satgutier@umich.edu            int PAGE_SIZE_BITS_in,
43310152Satgutier@umich.edu            int BURST_LENGTH_in,
43410152Satgutier@umich.edu            int INTERNAL_PREFETCH_WIDTH_in,
43510152Satgutier@umich.edu            int force_wiretype,
43610152Satgutier@umich.edu            int wiretype,
43710152Satgutier@umich.edu            int force_config,
43810152Satgutier@umich.edu            int ndwl,
43910152Satgutier@umich.edu            int ndbl,
44010152Satgutier@umich.edu            int nspd,
44110152Satgutier@umich.edu            int ndcm,
44210152Satgutier@umich.edu            int ndsam1,
44310152Satgutier@umich.edu            int ndsam2,
44410152Satgutier@umich.edu            int ecc);
44510152Satgutier@umich.edu//    int cache_size,
44610152Satgutier@umich.edu//    int line_size,
44710152Satgutier@umich.edu//    int associativity,
44810152Satgutier@umich.edu//    int rw_ports,
44910152Satgutier@umich.edu//    int excl_read_ports,
45010152Satgutier@umich.edu//    int excl_write_ports,
45110152Satgutier@umich.edu//    int single_ended_read_ports,
45210152Satgutier@umich.edu//    int banks,
45310152Satgutier@umich.edu//    double tech_node,
45410152Satgutier@umich.edu//    int output_width,
45510152Satgutier@umich.edu//    int specific_tag,
45610152Satgutier@umich.edu//    int tag_width,
45710152Satgutier@umich.edu//    int access_mode,
45810152Satgutier@umich.edu//    int cache,
45910152Satgutier@umich.edu//    int main_mem,
46010152Satgutier@umich.edu//    int obj_func_delay,
46110152Satgutier@umich.edu//    int obj_func_dynamic_power,
46210152Satgutier@umich.edu//    int obj_func_leakage_power,
46310152Satgutier@umich.edu//    int obj_func_area,
46410152Satgutier@umich.edu//    int obj_func_cycle_time,
46510152Satgutier@umich.edu//    int dev_func_delay,
46610152Satgutier@umich.edu//    int dev_func_dynamic_power,
46710152Satgutier@umich.edu//    int dev_func_leakage_power,
46810152Satgutier@umich.edu//    int dev_func_area,
46910152Satgutier@umich.edu//    int dev_func_cycle_time,
47010152Satgutier@umich.edu//    int temp,
47110152Satgutier@umich.edu//    int data_arr_ram_cell_tech_flavor_in,
47210152Satgutier@umich.edu//    int data_arr_peri_global_tech_flavor_in,
47310152Satgutier@umich.edu//    int tag_arr_ram_cell_tech_flavor_in,
47410152Satgutier@umich.edu//    int tag_arr_peri_global_tech_flavor_in,
47510152Satgutier@umich.edu//    int interconnect_projection_type_in,
47610152Satgutier@umich.edu//    int wire_inside_mat_type_in,
47710152Satgutier@umich.edu//    int wire_outside_mat_type_in,
47810152Satgutier@umich.edu//    int REPEATERS_IN_HTREE_SEGMENTS_in,
47910152Satgutier@umich.edu//    int VERTICAL_HTREE_WIRES_OVER_THE_ARRAY_in,
48010152Satgutier@umich.edu//    int BROADCAST_ADDR_DATAIN_OVER_VERTICAL_HTREES_in,
48110152Satgutier@umich.edu////    double MAXAREACONSTRAINT_PERC_in,
48210152Satgutier@umich.edu////    double MAXACCTIMECONSTRAINT_PERC_in,
48310152Satgutier@umich.edu////    double MAX_PERC_DIFF_IN_DELAY_FROM_BEST_DELAY_REPEATER_SOLUTION_in,
48410152Satgutier@umich.edu//    int PAGE_SIZE_BITS_in,
48510152Satgutier@umich.edu//    int BURST_LENGTH_in,
48610152Satgutier@umich.edu//    int INTERNAL_PREFETCH_WIDTH_in);
48710152Satgutier@umich.edu
48810152Satgutier@umich.edu//Naveen's interface
48910152Satgutier@umich.eduuca_org_t cacti_interface(
49010152Satgutier@umich.edu    int cache_size,
49110152Satgutier@umich.edu    int line_size,
49210152Satgutier@umich.edu    int associativity,
49310152Satgutier@umich.edu    int rw_ports,
49410152Satgutier@umich.edu    int excl_read_ports,
49510152Satgutier@umich.edu    int excl_write_ports,
49610152Satgutier@umich.edu    int single_ended_read_ports,
49710152Satgutier@umich.edu    int banks,
49810152Satgutier@umich.edu    double tech_node,
49910152Satgutier@umich.edu    int page_sz,
50010152Satgutier@umich.edu    int burst_length,
50110152Satgutier@umich.edu    int pre_width,
50210152Satgutier@umich.edu    int output_width,
50310152Satgutier@umich.edu    int specific_tag,
50410152Satgutier@umich.edu    int tag_width,
50510152Satgutier@umich.edu    int access_mode, //0 normal, 1 seq, 2 fast
50610152Satgutier@umich.edu    int cache, //scratch ram or cache
50710152Satgutier@umich.edu    int main_mem,
50810152Satgutier@umich.edu    int obj_func_delay,
50910152Satgutier@umich.edu    int obj_func_dynamic_power,
51010152Satgutier@umich.edu    int obj_func_leakage_power,
51110152Satgutier@umich.edu    int obj_func_area,
51210152Satgutier@umich.edu    int obj_func_cycle_time,
51310152Satgutier@umich.edu    int dev_func_delay,
51410152Satgutier@umich.edu    int dev_func_dynamic_power,
51510152Satgutier@umich.edu    int dev_func_leakage_power,
51610152Satgutier@umich.edu    int dev_func_area,
51710152Satgutier@umich.edu    int dev_func_cycle_time,
51810152Satgutier@umich.edu    int ed_ed2_none, // 0 - ED, 1 - ED^2, 2 - use weight and deviate
51910152Satgutier@umich.edu    int temp,
52010152Satgutier@umich.edu    int wt, //0 - default(search across everything), 1 - global, 2 - 5% delay penalty, 3 - 10%, 4 - 20 %, 5 - 30%, 6 - low-swing
52110152Satgutier@umich.edu    int data_arr_ram_cell_tech_flavor_in,
52210152Satgutier@umich.edu    int data_arr_peri_global_tech_flavor_in,
52310152Satgutier@umich.edu    int tag_arr_ram_cell_tech_flavor_in,
52410152Satgutier@umich.edu    int tag_arr_peri_global_tech_flavor_in,
52510152Satgutier@umich.edu    int interconnect_projection_type_in, // 0 - aggressive, 1 - normal
52610152Satgutier@umich.edu    int wire_inside_mat_type_in,
52710152Satgutier@umich.edu    int wire_outside_mat_type_in,
52810152Satgutier@umich.edu    int is_nuca, // 0 - UCA, 1 - NUCA
52910152Satgutier@umich.edu    int core_count,
53010152Satgutier@umich.edu    int cache_level, // 0 - L2, 1 - L3
53110152Satgutier@umich.edu    int nuca_bank_count,
53210152Satgutier@umich.edu    int nuca_obj_func_delay,
53310152Satgutier@umich.edu    int nuca_obj_func_dynamic_power,
53410152Satgutier@umich.edu    int nuca_obj_func_leakage_power,
53510152Satgutier@umich.edu    int nuca_obj_func_area,
53610152Satgutier@umich.edu    int nuca_obj_func_cycle_time,
53710152Satgutier@umich.edu    int nuca_dev_func_delay,
53810152Satgutier@umich.edu    int nuca_dev_func_dynamic_power,
53910152Satgutier@umich.edu    int nuca_dev_func_leakage_power,
54010152Satgutier@umich.edu    int nuca_dev_func_area,
54110152Satgutier@umich.edu    int nuca_dev_func_cycle_time,
54210152Satgutier@umich.edu    int REPEATERS_IN_HTREE_SEGMENTS_in,//TODO for now only wires with repeaters are supported
54310152Satgutier@umich.edu    int p_input);
54410152Satgutier@umich.edu
54510152Satgutier@umich.educlass mem_array
54610152Satgutier@umich.edu{
54710152Satgutier@umich.edu  public:
54810152Satgutier@umich.edu  int    Ndcm;
54910152Satgutier@umich.edu  int    Ndwl;
55010152Satgutier@umich.edu  int    Ndbl;
55110152Satgutier@umich.edu  double Nspd;
55210152Satgutier@umich.edu  int    deg_bl_muxing;
55310152Satgutier@umich.edu  int    Ndsam_lev_1;
55410152Satgutier@umich.edu  int    Ndsam_lev_2;
55510152Satgutier@umich.edu  double access_time;
55610152Satgutier@umich.edu  double cycle_time;
55710152Satgutier@umich.edu  double multisubbank_interleave_cycle_time;
55810152Satgutier@umich.edu  double area_ram_cells;
55910152Satgutier@umich.edu  double area;
56010152Satgutier@umich.edu  powerDef power;
56110152Satgutier@umich.edu  double delay_senseamp_mux_decoder;
56210152Satgutier@umich.edu  double delay_before_subarray_output_driver;
56310152Satgutier@umich.edu  double delay_from_subarray_output_driver_to_output;
56410152Satgutier@umich.edu  double height;
56510152Satgutier@umich.edu  double width;
56610152Satgutier@umich.edu
56710152Satgutier@umich.edu  double mat_height;
56810152Satgutier@umich.edu  double mat_length;
56910152Satgutier@umich.edu  double subarray_length;
57010152Satgutier@umich.edu  double subarray_height;
57110152Satgutier@umich.edu
57210152Satgutier@umich.edu  double delay_route_to_bank,
57310152Satgutier@umich.edu         delay_input_htree,
57410152Satgutier@umich.edu         delay_row_predecode_driver_and_block,
57510152Satgutier@umich.edu         delay_row_decoder,
57610152Satgutier@umich.edu         delay_bitlines,
57710152Satgutier@umich.edu         delay_sense_amp,
57810152Satgutier@umich.edu         delay_subarray_output_driver,
57910152Satgutier@umich.edu         delay_dout_htree,
58010152Satgutier@umich.edu         delay_comparator,
58110152Satgutier@umich.edu         delay_matchlines;
58210152Satgutier@umich.edu
58310152Satgutier@umich.edu  double all_banks_height,
58410152Satgutier@umich.edu         all_banks_width,
58510152Satgutier@umich.edu         area_efficiency;
58610152Satgutier@umich.edu
58710152Satgutier@umich.edu  powerDef power_routing_to_bank;
58810152Satgutier@umich.edu  powerDef power_addr_input_htree;
58910152Satgutier@umich.edu  powerDef power_data_input_htree;
59010152Satgutier@umich.edu  powerDef power_data_output_htree;
59110152Satgutier@umich.edu  powerDef power_htree_in_search;
59210152Satgutier@umich.edu  powerDef power_htree_out_search;
59310152Satgutier@umich.edu  powerDef power_row_predecoder_drivers;
59410152Satgutier@umich.edu  powerDef power_row_predecoder_blocks;
59510152Satgutier@umich.edu  powerDef power_row_decoders;
59610152Satgutier@umich.edu  powerDef power_bit_mux_predecoder_drivers;
59710152Satgutier@umich.edu  powerDef power_bit_mux_predecoder_blocks;
59810152Satgutier@umich.edu  powerDef power_bit_mux_decoders;
59910152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_1_predecoder_drivers;
60010152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_1_predecoder_blocks;
60110152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_1_decoders;
60210152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_2_predecoder_drivers;
60310152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_2_predecoder_blocks;
60410152Satgutier@umich.edu  powerDef power_senseamp_mux_lev_2_decoders;
60510152Satgutier@umich.edu  powerDef power_bitlines;
60610152Satgutier@umich.edu  powerDef power_sense_amps;
60710152Satgutier@umich.edu  powerDef power_prechg_eq_drivers;
60810152Satgutier@umich.edu  powerDef power_output_drivers_at_subarray;
60910152Satgutier@umich.edu  powerDef power_dataout_vertical_htree;
61010152Satgutier@umich.edu  powerDef power_comparators;
61110152Satgutier@umich.edu
61210152Satgutier@umich.edu  powerDef power_cam_bitline_precharge_eq_drv;
61310152Satgutier@umich.edu  powerDef power_searchline;
61410152Satgutier@umich.edu  powerDef power_searchline_precharge;
61510152Satgutier@umich.edu  powerDef power_matchlines;
61610152Satgutier@umich.edu  powerDef power_matchline_precharge;
61710152Satgutier@umich.edu  powerDef power_matchline_to_wordline_drv;
61810152Satgutier@umich.edu
61910152Satgutier@umich.edu  min_values_t *arr_min;
62010152Satgutier@umich.edu  enum Wire_type wt;
62110152Satgutier@umich.edu
62210152Satgutier@umich.edu  // dram stats
62310152Satgutier@umich.edu  double activate_energy, read_energy, write_energy, precharge_energy,
62410152Satgutier@umich.edu  refresh_power, leak_power_subbank_closed_page, leak_power_subbank_open_page,
62510152Satgutier@umich.edu  leak_power_request_and_reply_networks;
62610152Satgutier@umich.edu
62710152Satgutier@umich.edu  double precharge_delay;
62810152Satgutier@umich.edu
62910152Satgutier@umich.edu  static bool lt(const mem_array * m1, const mem_array * m2);
63010152Satgutier@umich.edu};
63110152Satgutier@umich.edu
63210152Satgutier@umich.edu
63310152Satgutier@umich.edu#endif
634