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.
510234Syasuko.eckert@amd.com *            Copyright (c) 2010-2013 Advanced Micro Devices, Inc.
610152Satgutier@umich.edu *                          All Rights Reserved
710152Satgutier@umich.edu *
810152Satgutier@umich.edu * Redistribution and use in source and binary forms, with or without
910152Satgutier@umich.edu * modification, are permitted provided that the following conditions are
1010152Satgutier@umich.edu * met: redistributions of source code must retain the above copyright
1110152Satgutier@umich.edu * notice, this list of conditions and the following disclaimer;
1210152Satgutier@umich.edu * redistributions in binary form must reproduce the above copyright
1310152Satgutier@umich.edu * notice, this list of conditions and the following disclaimer in the
1410152Satgutier@umich.edu * documentation and/or other materials provided with the distribution;
1510152Satgutier@umich.edu * neither the name of the copyright holders nor the names of its
1610152Satgutier@umich.edu * contributors may be used to endorse or promote products derived from
1710152Satgutier@umich.edu * this software without specific prior written permission.
1810152Satgutier@umich.edu
1910152Satgutier@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2010152Satgutier@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2110152Satgutier@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2210152Satgutier@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2310152Satgutier@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2410152Satgutier@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2510152Satgutier@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2610152Satgutier@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2710152Satgutier@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2810152Satgutier@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2910234Syasuko.eckert@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3010152Satgutier@umich.edu *
3110152Satgutier@umich.edu ***************************************************************************/
3210152Satgutier@umich.edu
3310152Satgutier@umich.edu
3410152Satgutier@umich.edu
3510152Satgutier@umich.edu#ifndef __CACTI_INTERFACE_H__
3610152Satgutier@umich.edu#define __CACTI_INTERFACE_H__
3710152Satgutier@umich.edu
3810152Satgutier@umich.edu#include <iostream>
3910152Satgutier@umich.edu#include <list>
4010152Satgutier@umich.edu#include <map>
4110152Satgutier@umich.edu#include <string>
4210152Satgutier@umich.edu#include <vector>
4310152Satgutier@umich.edu
4410152Satgutier@umich.edu#include "const.h"
4510152Satgutier@umich.edu
4610152Satgutier@umich.eduusing namespace std;
4710152Satgutier@umich.edu
4810152Satgutier@umich.edu
4910152Satgutier@umich.educlass min_values_t;
5010152Satgutier@umich.educlass mem_array;
5110152Satgutier@umich.educlass uca_org_t;
5210152Satgutier@umich.edu
5310152Satgutier@umich.edu
5410234Syasuko.eckert@amd.comclass powerComponents {
5510234Syasuko.eckert@amd.compublic:
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)  { }
6310234Syasuko.eckert@amd.com    powerComponents(const powerComponents & obj) {
6410234Syasuko.eckert@amd.com        *this = obj;
6510152Satgutier@umich.edu    }
6610234Syasuko.eckert@amd.com    powerComponents & operator=(const powerComponents & rhs) {
6710234Syasuko.eckert@amd.com        dynamic = rhs.dynamic;
6810234Syasuko.eckert@amd.com        leakage = rhs.leakage;
6910234Syasuko.eckert@amd.com        gate_leakage  = rhs.gate_leakage;
7010234Syasuko.eckert@amd.com        short_circuit = rhs.short_circuit;
7110234Syasuko.eckert@amd.com        longer_channel_leakage = rhs.longer_channel_leakage;
7210234Syasuko.eckert@amd.com        return *this;
7310234Syasuko.eckert@amd.com    }
7410234Syasuko.eckert@amd.com    void reset() {
7510234Syasuko.eckert@amd.com        dynamic = 0;
7610234Syasuko.eckert@amd.com        leakage = 0;
7710234Syasuko.eckert@amd.com        gate_leakage = 0;
7810234Syasuko.eckert@amd.com        short_circuit = 0;
7910234Syasuko.eckert@amd.com        longer_channel_leakage = 0;
8010234Syasuko.eckert@amd.com    }
8110152Satgutier@umich.edu
8210152Satgutier@umich.edu    friend powerComponents operator+(const powerComponents & x, const powerComponents & y);
8310152Satgutier@umich.edu    friend powerComponents operator*(const powerComponents & x, double const * const y);
8410152Satgutier@umich.edu};
8510152Satgutier@umich.edu
8610152Satgutier@umich.edu
8710152Satgutier@umich.edu
8810234Syasuko.eckert@amd.comclass powerDef {
8910234Syasuko.eckert@amd.compublic:
9010152Satgutier@umich.edu    powerComponents readOp;
9110152Satgutier@umich.edu    powerComponents writeOp;
9210152Satgutier@umich.edu    powerComponents searchOp;//Sheng: for CAM and FA
9310152Satgutier@umich.edu
9410152Satgutier@umich.edu    powerDef() : readOp(), writeOp(), searchOp() { }
9510234Syasuko.eckert@amd.com    void reset() {
9610234Syasuko.eckert@amd.com        readOp.reset();
9710234Syasuko.eckert@amd.com        writeOp.reset();
9810234Syasuko.eckert@amd.com        searchOp.reset();
9910234Syasuko.eckert@amd.com    }
10010152Satgutier@umich.edu
10110152Satgutier@umich.edu    friend powerDef operator+(const powerDef & x, const powerDef & y);
10210152Satgutier@umich.edu    friend powerDef operator*(const powerDef & x, double const * const y);
10310152Satgutier@umich.edu};
10410152Satgutier@umich.edu
10510234Syasuko.eckert@amd.comenum Wire_type {
10610152Satgutier@umich.edu    Global /* gloabl wires with repeaters */,
10710152Satgutier@umich.edu    Global_5 /* 5% delay penalty */,
10810152Satgutier@umich.edu    Global_10 /* 10% delay penalty */,
10910152Satgutier@umich.edu    Global_20 /* 20% delay penalty */,
11010152Satgutier@umich.edu    Global_30 /* 30% delay penalty */,
11110152Satgutier@umich.edu    Low_swing /* differential low power wires with high area overhead */,
11210152Satgutier@umich.edu    Semi_global /* mid-level wires with repeaters*/,
11310152Satgutier@umich.edu    Transmission /* tranmission lines with high area overhead */,
11410152Satgutier@umich.edu    Optical /* optical wires */,
11510152Satgutier@umich.edu    Invalid_wtype
11610152Satgutier@umich.edu};
11710152Satgutier@umich.edu
11810152Satgutier@umich.edu
11910152Satgutier@umich.edu
12010234Syasuko.eckert@amd.comclass InputParameter {
12110234Syasuko.eckert@amd.compublic:
12210152Satgutier@umich.edu    void parse_cfg(const string & infile);
12310152Satgutier@umich.edu
12410234Syasuko.eckert@amd.com    // return false if the input parameters are problematic
12510234Syasuko.eckert@amd.com    bool error_checking(string name = "CACTI");
12610152Satgutier@umich.edu    void display_ip();
12710152Satgutier@umich.edu
12810152Satgutier@umich.edu    unsigned int cache_sz;  // in bytes
12910152Satgutier@umich.edu    unsigned int line_sz;
13010152Satgutier@umich.edu    unsigned int assoc;
13110152Satgutier@umich.edu    unsigned int nbanks;
13210152Satgutier@umich.edu    unsigned int out_w;// == nr_bits_out
13310152Satgutier@umich.edu    bool     specific_tag;
13410152Satgutier@umich.edu    unsigned int tag_w;
13510152Satgutier@umich.edu    unsigned int access_mode;
13610152Satgutier@umich.edu    unsigned int obj_func_dyn_energy;
13710152Satgutier@umich.edu    unsigned int obj_func_dyn_power;
13810152Satgutier@umich.edu    unsigned int obj_func_leak_power;
13910152Satgutier@umich.edu    unsigned int obj_func_cycle_t;
14010152Satgutier@umich.edu
14110152Satgutier@umich.edu    double   F_sz_nm;          // feature size in nm
14210152Satgutier@umich.edu    double   F_sz_um;          // feature size in um
14310152Satgutier@umich.edu    unsigned int num_rw_ports;
14410152Satgutier@umich.edu    unsigned int num_rd_ports;
14510152Satgutier@umich.edu    unsigned int num_wr_ports;
14610152Satgutier@umich.edu    unsigned int num_se_rd_ports;  // number of single ended read ports
14710152Satgutier@umich.edu    unsigned int num_search_ports;  // Sheng: number of search ports for CAM
14810152Satgutier@umich.edu    bool     is_main_mem;
14910152Satgutier@umich.edu    bool     is_cache;
15010152Satgutier@umich.edu    bool     pure_ram;
15110152Satgutier@umich.edu    bool     pure_cam;
15210152Satgutier@umich.edu    bool     rpters_in_htree;  // if there are repeaters in htree segment
15310152Satgutier@umich.edu    unsigned int ver_htree_wires_over_array;
15410152Satgutier@umich.edu    unsigned int broadcast_addr_din_over_ver_htrees;
15510152Satgutier@umich.edu    unsigned int temp;
15610152Satgutier@umich.edu
15710152Satgutier@umich.edu    unsigned int ram_cell_tech_type;
15810152Satgutier@umich.edu    unsigned int peri_global_tech_type;
15910152Satgutier@umich.edu    unsigned int data_arr_ram_cell_tech_type;
16010152Satgutier@umich.edu    unsigned int data_arr_peri_global_tech_type;
16110152Satgutier@umich.edu    unsigned int tag_arr_ram_cell_tech_type;
16210152Satgutier@umich.edu    unsigned int tag_arr_peri_global_tech_type;
16310152Satgutier@umich.edu
16410152Satgutier@umich.edu    unsigned int burst_len;
16510152Satgutier@umich.edu    unsigned int int_prefetch_w;
16610152Satgutier@umich.edu    unsigned int page_sz_bits;
16710152Satgutier@umich.edu
16810152Satgutier@umich.edu    unsigned int ic_proj_type;      // interconnect_projection_type
16910152Satgutier@umich.edu    unsigned int wire_is_mat_type;  // wire_inside_mat_type
17010152Satgutier@umich.edu    unsigned int wire_os_mat_type; // wire_outside_mat_type
17110152Satgutier@umich.edu    enum Wire_type wt;
17210152Satgutier@umich.edu    int force_wiretype;
17310152Satgutier@umich.edu    bool print_input_args;
17410152Satgutier@umich.edu    unsigned int nuca_cache_sz; // TODO
17510152Satgutier@umich.edu    int ndbl, ndwl, nspd, ndsam1, ndsam2, ndcm;
17610152Satgutier@umich.edu    bool force_cache_config;
17710152Satgutier@umich.edu
17810152Satgutier@umich.edu    int cache_level;
17910152Satgutier@umich.edu    int cores;
18010152Satgutier@umich.edu    int nuca_bank_count;
18110152Satgutier@umich.edu    int force_nuca_bank;
18210152Satgutier@umich.edu
18310152Satgutier@umich.edu    int delay_wt, dynamic_power_wt, leakage_power_wt,
18410234Syasuko.eckert@amd.com    cycle_time_wt, area_wt;
18510152Satgutier@umich.edu    int delay_wt_nuca, dynamic_power_wt_nuca, leakage_power_wt_nuca,
18610234Syasuko.eckert@amd.com    cycle_time_wt_nuca, area_wt_nuca;
18710152Satgutier@umich.edu
18810152Satgutier@umich.edu    int delay_dev, dynamic_power_dev, leakage_power_dev,
18910234Syasuko.eckert@amd.com    cycle_time_dev, area_dev;
19010152Satgutier@umich.edu    int delay_dev_nuca, dynamic_power_dev_nuca, leakage_power_dev_nuca,
19110234Syasuko.eckert@amd.com    cycle_time_dev_nuca, area_dev_nuca;
19210152Satgutier@umich.edu    int ed; //ED or ED2 optimization
19310152Satgutier@umich.edu    int nuca;
19410152Satgutier@umich.edu
19510152Satgutier@umich.edu    bool     fast_access;
19610152Satgutier@umich.edu    unsigned int block_sz;  // bytes
19710152Satgutier@umich.edu    unsigned int tag_assoc;
19810152Satgutier@umich.edu    unsigned int data_assoc;
19910152Satgutier@umich.edu    bool     is_seq_acc;
20010152Satgutier@umich.edu    bool     fully_assoc;
20110152Satgutier@umich.edu    unsigned int nsets;  // == number_of_sets
20210152Satgutier@umich.edu    int print_detail;
20310152Satgutier@umich.edu
20410152Satgutier@umich.edu
20510152Satgutier@umich.edu    bool     add_ecc_b_;
20610234Syasuko.eckert@amd.com    //parameters for design constraint
20710234Syasuko.eckert@amd.com    double throughput;
20810234Syasuko.eckert@amd.com    double latency;
20910234Syasuko.eckert@amd.com    bool pipelinable;
21010234Syasuko.eckert@amd.com    int pipeline_stages;
21110234Syasuko.eckert@amd.com    int per_stage_vector;
21210234Syasuko.eckert@amd.com    bool with_clock_grid;
21310152Satgutier@umich.edu};
21410152Satgutier@umich.edu
21510152Satgutier@umich.edu
21610234Syasuko.eckert@amd.comtypedef struct {
21710234Syasuko.eckert@amd.com    int Ndwl;
21810234Syasuko.eckert@amd.com    int Ndbl;
21910234Syasuko.eckert@amd.com    double Nspd;
22010234Syasuko.eckert@amd.com    int deg_bl_muxing;
22110234Syasuko.eckert@amd.com    int Ndsam_lev_1;
22210234Syasuko.eckert@amd.com    int Ndsam_lev_2;
22310234Syasuko.eckert@amd.com    int number_activated_mats_horizontal_direction;
22410234Syasuko.eckert@amd.com    int number_subbanks;
22510234Syasuko.eckert@amd.com    int page_size_in_bits;
22610234Syasuko.eckert@amd.com    double delay_route_to_bank;
22710234Syasuko.eckert@amd.com    double delay_crossbar;
22810234Syasuko.eckert@amd.com    double delay_addr_din_horizontal_htree;
22910234Syasuko.eckert@amd.com    double delay_addr_din_vertical_htree;
23010234Syasuko.eckert@amd.com    double delay_row_predecode_driver_and_block;
23110234Syasuko.eckert@amd.com    double delay_row_decoder;
23210234Syasuko.eckert@amd.com    double delay_bitlines;
23310234Syasuko.eckert@amd.com    double delay_sense_amp;
23410234Syasuko.eckert@amd.com    double delay_subarray_output_driver;
23510234Syasuko.eckert@amd.com    double delay_bit_mux_predecode_driver_and_block;
23610234Syasuko.eckert@amd.com    double delay_bit_mux_decoder;
23710234Syasuko.eckert@amd.com    double delay_senseamp_mux_lev_1_predecode_driver_and_block;
23810234Syasuko.eckert@amd.com    double delay_senseamp_mux_lev_1_decoder;
23910234Syasuko.eckert@amd.com    double delay_senseamp_mux_lev_2_predecode_driver_and_block;
24010234Syasuko.eckert@amd.com    double delay_senseamp_mux_lev_2_decoder;
24110234Syasuko.eckert@amd.com    double delay_input_htree;
24210234Syasuko.eckert@amd.com    double delay_output_htree;
24310234Syasuko.eckert@amd.com    double delay_dout_vertical_htree;
24410234Syasuko.eckert@amd.com    double delay_dout_horizontal_htree;
24510234Syasuko.eckert@amd.com    double delay_comparator;
24610234Syasuko.eckert@amd.com    double access_time;
24710234Syasuko.eckert@amd.com    double cycle_time;
24810234Syasuko.eckert@amd.com    double multisubbank_interleave_cycle_time;
24910234Syasuko.eckert@amd.com    double delay_request_network;
25010234Syasuko.eckert@amd.com    double delay_inside_mat;
25110234Syasuko.eckert@amd.com    double delay_reply_network;
25210234Syasuko.eckert@amd.com    double trcd;
25310234Syasuko.eckert@amd.com    double cas_latency;
25410234Syasuko.eckert@amd.com    double precharge_delay;
25510234Syasuko.eckert@amd.com    powerDef power_routing_to_bank;
25610234Syasuko.eckert@amd.com    powerDef power_addr_input_htree;
25710234Syasuko.eckert@amd.com    powerDef power_data_input_htree;
25810234Syasuko.eckert@amd.com    powerDef power_data_output_htree;
25910234Syasuko.eckert@amd.com    powerDef power_addr_horizontal_htree;
26010234Syasuko.eckert@amd.com    powerDef power_datain_horizontal_htree;
26110234Syasuko.eckert@amd.com    powerDef power_dataout_horizontal_htree;
26210234Syasuko.eckert@amd.com    powerDef power_addr_vertical_htree;
26310234Syasuko.eckert@amd.com    powerDef power_datain_vertical_htree;
26410234Syasuko.eckert@amd.com    powerDef power_row_predecoder_drivers;
26510234Syasuko.eckert@amd.com    powerDef power_row_predecoder_blocks;
26610234Syasuko.eckert@amd.com    powerDef power_row_decoders;
26710234Syasuko.eckert@amd.com    powerDef power_bit_mux_predecoder_drivers;
26810234Syasuko.eckert@amd.com    powerDef power_bit_mux_predecoder_blocks;
26910234Syasuko.eckert@amd.com    powerDef power_bit_mux_decoders;
27010234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_1_predecoder_drivers;
27110234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_1_predecoder_blocks;
27210234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_1_decoders;
27310234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_2_predecoder_drivers;
27410234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_2_predecoder_blocks;
27510234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_2_decoders;
27610234Syasuko.eckert@amd.com    powerDef power_bitlines;
27710234Syasuko.eckert@amd.com    powerDef power_sense_amps;
27810234Syasuko.eckert@amd.com    powerDef power_prechg_eq_drivers;
27910234Syasuko.eckert@amd.com    powerDef power_output_drivers_at_subarray;
28010234Syasuko.eckert@amd.com    powerDef power_dataout_vertical_htree;
28110234Syasuko.eckert@amd.com    powerDef power_comparators;
28210234Syasuko.eckert@amd.com    powerDef power_crossbar;
28310234Syasuko.eckert@amd.com    powerDef total_power;
28410234Syasuko.eckert@amd.com    double area;
28510234Syasuko.eckert@amd.com    double all_banks_height;
28610234Syasuko.eckert@amd.com    double all_banks_width;
28710234Syasuko.eckert@amd.com    double bank_height;
28810234Syasuko.eckert@amd.com    double bank_width;
28910234Syasuko.eckert@amd.com    double subarray_memory_cell_area_height;
29010234Syasuko.eckert@amd.com    double subarray_memory_cell_area_width;
29110234Syasuko.eckert@amd.com    double mat_height;
29210234Syasuko.eckert@amd.com    double mat_width;
29310234Syasuko.eckert@amd.com    double routing_area_height_within_bank;
29410234Syasuko.eckert@amd.com    double routing_area_width_within_bank;
29510234Syasuko.eckert@amd.com    double area_efficiency;
29610234Syasuko.eckert@amd.com    double refresh_power;
29710234Syasuko.eckert@amd.com    double dram_refresh_period;
29810234Syasuko.eckert@amd.com    double dram_array_availability;
29910234Syasuko.eckert@amd.com    double dyn_read_energy_from_closed_page;
30010234Syasuko.eckert@amd.com    double dyn_read_energy_from_open_page;
30110234Syasuko.eckert@amd.com    double leak_power_subbank_closed_page;
30210234Syasuko.eckert@amd.com    double leak_power_subbank_open_page;
30310234Syasuko.eckert@amd.com    double leak_power_request_and_reply_networks;
30410234Syasuko.eckert@amd.com    double activate_energy;
30510234Syasuko.eckert@amd.com    double read_energy;
30610234Syasuko.eckert@amd.com    double write_energy;
30710234Syasuko.eckert@amd.com    double precharge_energy;
30810152Satgutier@umich.edu} results_mem_array;
30910152Satgutier@umich.edu
31010152Satgutier@umich.edu
31110234Syasuko.eckert@amd.comclass uca_org_t {
31210234Syasuko.eckert@amd.compublic:
31310152Satgutier@umich.edu    mem_array * tag_array2;
31410152Satgutier@umich.edu    mem_array * data_array2;
31510152Satgutier@umich.edu    double access_time;
31610152Satgutier@umich.edu    double cycle_time;
31710152Satgutier@umich.edu    double area;
31810152Satgutier@umich.edu    double area_efficiency;
31910152Satgutier@umich.edu    powerDef power;
32010152Satgutier@umich.edu    double leak_power_with_sleep_transistors_in_mats;
32110152Satgutier@umich.edu    double cache_ht;
32210152Satgutier@umich.edu    double cache_len;
32310152Satgutier@umich.edu    char file_n[100];
32410152Satgutier@umich.edu    double vdd_periph_global;
32510152Satgutier@umich.edu    bool valid;
32610152Satgutier@umich.edu    results_mem_array tag_array;
32710152Satgutier@umich.edu    results_mem_array data_array;
32810152Satgutier@umich.edu
32910152Satgutier@umich.edu    uca_org_t();
33010152Satgutier@umich.edu    void find_delay();
33110152Satgutier@umich.edu    void find_energy();
33210152Satgutier@umich.edu    void find_area();
33310152Satgutier@umich.edu    void find_cyc();
33410152Satgutier@umich.edu    void adjust_area();//for McPAT only to adjust routing overhead
33510152Satgutier@umich.edu    void cleanup();
33610234Syasuko.eckert@amd.com    ~uca_org_t() {};
33710152Satgutier@umich.edu};
33810152Satgutier@umich.edu
33910152Satgutier@umich.eduvoid reconfigure(InputParameter *local_interface, uca_org_t *fin_res);
34010152Satgutier@umich.edu
34110152Satgutier@umich.eduuca_org_t cacti_interface(const string & infile_name);
34210152Satgutier@umich.edu//McPAT's plain interface, please keep !!!
34310152Satgutier@umich.eduuca_org_t cacti_interface(InputParameter * const local_interface);
34410152Satgutier@umich.edu//McPAT's plain interface, please keep !!!
34510234Syasuko.eckert@amd.comuca_org_t init_interface(InputParameter * const local_interface,
34610234Syasuko.eckert@amd.com                         const string &name);
34710152Satgutier@umich.edu//McPAT's plain interface, please keep !!!
34810152Satgutier@umich.eduuca_org_t cacti_interface(
34910234Syasuko.eckert@amd.com    int cache_size,
35010234Syasuko.eckert@amd.com    int line_size,
35110234Syasuko.eckert@amd.com    int associativity,
35210234Syasuko.eckert@amd.com    int rw_ports,
35310234Syasuko.eckert@amd.com    int excl_read_ports,
35410234Syasuko.eckert@amd.com    int excl_write_ports,
35510234Syasuko.eckert@amd.com    int single_ended_read_ports,
35610234Syasuko.eckert@amd.com    int search_ports,
35710234Syasuko.eckert@amd.com    int banks,
35810234Syasuko.eckert@amd.com    double tech_node,
35910234Syasuko.eckert@amd.com    int output_width,
36010234Syasuko.eckert@amd.com    int specific_tag,
36110234Syasuko.eckert@amd.com    int tag_width,
36210234Syasuko.eckert@amd.com    int access_mode,
36310234Syasuko.eckert@amd.com    int cache,
36410234Syasuko.eckert@amd.com    int main_mem,
36510234Syasuko.eckert@amd.com    int obj_func_delay,
36610234Syasuko.eckert@amd.com    int obj_func_dynamic_power,
36710234Syasuko.eckert@amd.com    int obj_func_leakage_power,
36810234Syasuko.eckert@amd.com    int obj_func_cycle_time,
36910234Syasuko.eckert@amd.com    int obj_func_area,
37010234Syasuko.eckert@amd.com    int dev_func_delay,
37110234Syasuko.eckert@amd.com    int dev_func_dynamic_power,
37210234Syasuko.eckert@amd.com    int dev_func_leakage_power,
37310234Syasuko.eckert@amd.com    int dev_func_area,
37410234Syasuko.eckert@amd.com    int dev_func_cycle_time,
37510234Syasuko.eckert@amd.com    int ed_ed2_none, // 0 - ED, 1 - ED^2, 2 - use weight and deviate
37610234Syasuko.eckert@amd.com    int temp,
37710234Syasuko.eckert@amd.com    int wt, //0 - default(search across everything), 1 - global, 2 - 5% delay penalty, 3 - 10%, 4 - 20 %, 5 - 30%, 6 - low-swing
37810234Syasuko.eckert@amd.com    int data_arr_ram_cell_tech_flavor_in,
37910234Syasuko.eckert@amd.com    int data_arr_peri_global_tech_flavor_in,
38010234Syasuko.eckert@amd.com    int tag_arr_ram_cell_tech_flavor_in,
38110234Syasuko.eckert@amd.com    int tag_arr_peri_global_tech_flavor_in,
38210234Syasuko.eckert@amd.com    int interconnect_projection_type_in,
38310234Syasuko.eckert@amd.com    int wire_inside_mat_type_in,
38410234Syasuko.eckert@amd.com    int wire_outside_mat_type_in,
38510234Syasuko.eckert@amd.com    int REPEATERS_IN_HTREE_SEGMENTS_in,
38610234Syasuko.eckert@amd.com    int VERTICAL_HTREE_WIRES_OVER_THE_ARRAY_in,
38710234Syasuko.eckert@amd.com    int BROADCAST_ADDR_DATAIN_OVER_VERTICAL_HTREES_in,
38810234Syasuko.eckert@amd.com    int PAGE_SIZE_BITS_in,
38910234Syasuko.eckert@amd.com    int BURST_LENGTH_in,
39010234Syasuko.eckert@amd.com    int INTERNAL_PREFETCH_WIDTH_in,
39110234Syasuko.eckert@amd.com    int force_wiretype,
39210234Syasuko.eckert@amd.com    int wiretype,
39310234Syasuko.eckert@amd.com    int force_config,
39410234Syasuko.eckert@amd.com    int ndwl,
39510234Syasuko.eckert@amd.com    int ndbl,
39610234Syasuko.eckert@amd.com    int nspd,
39710234Syasuko.eckert@amd.com    int ndcm,
39810234Syasuko.eckert@amd.com    int ndsam1,
39910234Syasuko.eckert@amd.com    int ndsam2,
40010234Syasuko.eckert@amd.com    int ecc);
40110152Satgutier@umich.edu
40210152Satgutier@umich.edu//Naveen's interface
40310152Satgutier@umich.eduuca_org_t cacti_interface(
40410152Satgutier@umich.edu    int cache_size,
40510152Satgutier@umich.edu    int line_size,
40610152Satgutier@umich.edu    int associativity,
40710152Satgutier@umich.edu    int rw_ports,
40810152Satgutier@umich.edu    int excl_read_ports,
40910152Satgutier@umich.edu    int excl_write_ports,
41010152Satgutier@umich.edu    int single_ended_read_ports,
41110152Satgutier@umich.edu    int banks,
41210152Satgutier@umich.edu    double tech_node,
41310152Satgutier@umich.edu    int page_sz,
41410152Satgutier@umich.edu    int burst_length,
41510152Satgutier@umich.edu    int pre_width,
41610152Satgutier@umich.edu    int output_width,
41710152Satgutier@umich.edu    int specific_tag,
41810152Satgutier@umich.edu    int tag_width,
41910152Satgutier@umich.edu    int access_mode, //0 normal, 1 seq, 2 fast
42010152Satgutier@umich.edu    int cache, //scratch ram or cache
42110152Satgutier@umich.edu    int main_mem,
42210152Satgutier@umich.edu    int obj_func_delay,
42310152Satgutier@umich.edu    int obj_func_dynamic_power,
42410152Satgutier@umich.edu    int obj_func_leakage_power,
42510152Satgutier@umich.edu    int obj_func_area,
42610152Satgutier@umich.edu    int obj_func_cycle_time,
42710152Satgutier@umich.edu    int dev_func_delay,
42810152Satgutier@umich.edu    int dev_func_dynamic_power,
42910152Satgutier@umich.edu    int dev_func_leakage_power,
43010152Satgutier@umich.edu    int dev_func_area,
43110152Satgutier@umich.edu    int dev_func_cycle_time,
43210152Satgutier@umich.edu    int ed_ed2_none, // 0 - ED, 1 - ED^2, 2 - use weight and deviate
43310152Satgutier@umich.edu    int temp,
43410152Satgutier@umich.edu    int wt, //0 - default(search across everything), 1 - global, 2 - 5% delay penalty, 3 - 10%, 4 - 20 %, 5 - 30%, 6 - low-swing
43510152Satgutier@umich.edu    int data_arr_ram_cell_tech_flavor_in,
43610152Satgutier@umich.edu    int data_arr_peri_global_tech_flavor_in,
43710152Satgutier@umich.edu    int tag_arr_ram_cell_tech_flavor_in,
43810152Satgutier@umich.edu    int tag_arr_peri_global_tech_flavor_in,
43910152Satgutier@umich.edu    int interconnect_projection_type_in, // 0 - aggressive, 1 - normal
44010152Satgutier@umich.edu    int wire_inside_mat_type_in,
44110152Satgutier@umich.edu    int wire_outside_mat_type_in,
44210152Satgutier@umich.edu    int is_nuca, // 0 - UCA, 1 - NUCA
44310152Satgutier@umich.edu    int core_count,
44410152Satgutier@umich.edu    int cache_level, // 0 - L2, 1 - L3
44510152Satgutier@umich.edu    int nuca_bank_count,
44610152Satgutier@umich.edu    int nuca_obj_func_delay,
44710152Satgutier@umich.edu    int nuca_obj_func_dynamic_power,
44810152Satgutier@umich.edu    int nuca_obj_func_leakage_power,
44910152Satgutier@umich.edu    int nuca_obj_func_area,
45010152Satgutier@umich.edu    int nuca_obj_func_cycle_time,
45110152Satgutier@umich.edu    int nuca_dev_func_delay,
45210152Satgutier@umich.edu    int nuca_dev_func_dynamic_power,
45310152Satgutier@umich.edu    int nuca_dev_func_leakage_power,
45410152Satgutier@umich.edu    int nuca_dev_func_area,
45510152Satgutier@umich.edu    int nuca_dev_func_cycle_time,
45610152Satgutier@umich.edu    int REPEATERS_IN_HTREE_SEGMENTS_in,//TODO for now only wires with repeaters are supported
45710152Satgutier@umich.edu    int p_input);
45810152Satgutier@umich.edu
45910234Syasuko.eckert@amd.comclass mem_array {
46010234Syasuko.eckert@amd.compublic:
46110234Syasuko.eckert@amd.com    int    Ndcm;
46210234Syasuko.eckert@amd.com    int    Ndwl;
46310234Syasuko.eckert@amd.com    int    Ndbl;
46410234Syasuko.eckert@amd.com    double Nspd;
46510234Syasuko.eckert@amd.com    int    deg_bl_muxing;
46610234Syasuko.eckert@amd.com    int    Ndsam_lev_1;
46710234Syasuko.eckert@amd.com    int    Ndsam_lev_2;
46810234Syasuko.eckert@amd.com    double access_time;
46910234Syasuko.eckert@amd.com    double cycle_time;
47010234Syasuko.eckert@amd.com    double multisubbank_interleave_cycle_time;
47110234Syasuko.eckert@amd.com    double area_ram_cells;
47210234Syasuko.eckert@amd.com    double area;
47310234Syasuko.eckert@amd.com    powerDef power;
47410234Syasuko.eckert@amd.com    double delay_senseamp_mux_decoder;
47510234Syasuko.eckert@amd.com    double delay_before_subarray_output_driver;
47610234Syasuko.eckert@amd.com    double delay_from_subarray_output_driver_to_output;
47710234Syasuko.eckert@amd.com    double height;
47810234Syasuko.eckert@amd.com    double width;
47910152Satgutier@umich.edu
48010234Syasuko.eckert@amd.com    double mat_height;
48110234Syasuko.eckert@amd.com    double mat_length;
48210234Syasuko.eckert@amd.com    double subarray_length;
48310234Syasuko.eckert@amd.com    double subarray_height;
48410152Satgutier@umich.edu
48510234Syasuko.eckert@amd.com    double delay_route_to_bank,
48610234Syasuko.eckert@amd.com    delay_input_htree,
48710234Syasuko.eckert@amd.com    delay_row_predecode_driver_and_block,
48810234Syasuko.eckert@amd.com    delay_row_decoder,
48910234Syasuko.eckert@amd.com    delay_bitlines,
49010234Syasuko.eckert@amd.com    delay_sense_amp,
49110234Syasuko.eckert@amd.com    delay_subarray_output_driver,
49210234Syasuko.eckert@amd.com    delay_dout_htree,
49310234Syasuko.eckert@amd.com    delay_comparator,
49410234Syasuko.eckert@amd.com    delay_matchlines;
49510152Satgutier@umich.edu
49610234Syasuko.eckert@amd.com    double all_banks_height,
49710234Syasuko.eckert@amd.com    all_banks_width,
49810234Syasuko.eckert@amd.com    area_efficiency;
49910152Satgutier@umich.edu
50010234Syasuko.eckert@amd.com    powerDef power_routing_to_bank;
50110234Syasuko.eckert@amd.com    powerDef power_addr_input_htree;
50210234Syasuko.eckert@amd.com    powerDef power_data_input_htree;
50310234Syasuko.eckert@amd.com    powerDef power_data_output_htree;
50410234Syasuko.eckert@amd.com    powerDef power_htree_in_search;
50510234Syasuko.eckert@amd.com    powerDef power_htree_out_search;
50610234Syasuko.eckert@amd.com    powerDef power_row_predecoder_drivers;
50710234Syasuko.eckert@amd.com    powerDef power_row_predecoder_blocks;
50810234Syasuko.eckert@amd.com    powerDef power_row_decoders;
50910234Syasuko.eckert@amd.com    powerDef power_bit_mux_predecoder_drivers;
51010234Syasuko.eckert@amd.com    powerDef power_bit_mux_predecoder_blocks;
51110234Syasuko.eckert@amd.com    powerDef power_bit_mux_decoders;
51210234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_1_predecoder_drivers;
51310234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_1_predecoder_blocks;
51410234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_1_decoders;
51510234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_2_predecoder_drivers;
51610234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_2_predecoder_blocks;
51710234Syasuko.eckert@amd.com    powerDef power_senseamp_mux_lev_2_decoders;
51810234Syasuko.eckert@amd.com    powerDef power_bitlines;
51910234Syasuko.eckert@amd.com    powerDef power_sense_amps;
52010234Syasuko.eckert@amd.com    powerDef power_prechg_eq_drivers;
52110234Syasuko.eckert@amd.com    powerDef power_output_drivers_at_subarray;
52210234Syasuko.eckert@amd.com    powerDef power_dataout_vertical_htree;
52310234Syasuko.eckert@amd.com    powerDef power_comparators;
52410152Satgutier@umich.edu
52510234Syasuko.eckert@amd.com    powerDef power_cam_bitline_precharge_eq_drv;
52610234Syasuko.eckert@amd.com    powerDef power_searchline;
52710234Syasuko.eckert@amd.com    powerDef power_searchline_precharge;
52810234Syasuko.eckert@amd.com    powerDef power_matchlines;
52910234Syasuko.eckert@amd.com    powerDef power_matchline_precharge;
53010234Syasuko.eckert@amd.com    powerDef power_matchline_to_wordline_drv;
53110152Satgutier@umich.edu
53210234Syasuko.eckert@amd.com    min_values_t *arr_min;
53310234Syasuko.eckert@amd.com    enum Wire_type wt;
53410152Satgutier@umich.edu
53510234Syasuko.eckert@amd.com    // dram stats
53610234Syasuko.eckert@amd.com    double activate_energy, read_energy, write_energy, precharge_energy,
53710234Syasuko.eckert@amd.com    refresh_power, leak_power_subbank_closed_page, leak_power_subbank_open_page,
53810234Syasuko.eckert@amd.com    leak_power_request_and_reply_networks;
53910152Satgutier@umich.edu
54010234Syasuko.eckert@amd.com    double precharge_delay;
54110152Satgutier@umich.edu
54210234Syasuko.eckert@amd.com    static bool lt(const mem_array * m1, const mem_array * m2);
54310152Satgutier@umich.edu};
54410152Satgutier@umich.edu
54510152Satgutier@umich.edu
54610152Satgutier@umich.edu#endif
547