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