parameter.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 __PARAMETER_H__ 3510152Satgutier@umich.edu#define __PARAMETER_H__ 3610152Satgutier@umich.edu 3710152Satgutier@umich.edu#include "area.h" 3810152Satgutier@umich.edu#include "cacti_interface.h" 3910152Satgutier@umich.edu#include "const.h" 4010152Satgutier@umich.edu#include "io.h" 4110152Satgutier@umich.edu 4210152Satgutier@umich.edu// parameters which are functions of certain device technology 4310152Satgutier@umich.educlass TechnologyParameter 4410152Satgutier@umich.edu{ 4510152Satgutier@umich.edu public: 4610152Satgutier@umich.edu class DeviceType 4710152Satgutier@umich.edu { 4810152Satgutier@umich.edu public: 4910152Satgutier@umich.edu double C_g_ideal; 5010152Satgutier@umich.edu double C_fringe; 5110152Satgutier@umich.edu double C_overlap; 5210152Satgutier@umich.edu double C_junc; // C_junc_area 5310152Satgutier@umich.edu double C_junc_sidewall; 5410152Satgutier@umich.edu double l_phy; 5510152Satgutier@umich.edu double l_elec; 5610152Satgutier@umich.edu double R_nch_on; 5710152Satgutier@umich.edu double R_pch_on; 5810152Satgutier@umich.edu double Vdd; 5910152Satgutier@umich.edu double Vth; 6010152Satgutier@umich.edu double I_on_n; 6110152Satgutier@umich.edu double I_on_p; 6210152Satgutier@umich.edu double I_off_n; 6310152Satgutier@umich.edu double I_off_p; 6410152Satgutier@umich.edu double I_g_on_n; 6510152Satgutier@umich.edu double I_g_on_p; 6610152Satgutier@umich.edu double C_ox; 6710152Satgutier@umich.edu double t_ox; 6810152Satgutier@umich.edu double n_to_p_eff_curr_drv_ratio; 6910152Satgutier@umich.edu double long_channel_leakage_reduction; 7010152Satgutier@umich.edu 7110152Satgutier@umich.edu DeviceType(): C_g_ideal(0), C_fringe(0), C_overlap(0), C_junc(0), 7210152Satgutier@umich.edu C_junc_sidewall(0), l_phy(0), l_elec(0), R_nch_on(0), R_pch_on(0), 7310152Satgutier@umich.edu Vdd(0), Vth(0), 7410152Satgutier@umich.edu I_on_n(0), I_on_p(0), I_off_n(0), I_off_p(0),I_g_on_n(0),I_g_on_p(0), 7510152Satgutier@umich.edu C_ox(0), t_ox(0), n_to_p_eff_curr_drv_ratio(0), long_channel_leakage_reduction(0) { }; 7610152Satgutier@umich.edu void reset() 7710152Satgutier@umich.edu { 7810152Satgutier@umich.edu C_g_ideal = 0; 7910152Satgutier@umich.edu C_fringe = 0; 8010152Satgutier@umich.edu C_overlap = 0; 8110152Satgutier@umich.edu C_junc = 0; 8210152Satgutier@umich.edu l_phy = 0; 8310152Satgutier@umich.edu l_elec = 0; 8410152Satgutier@umich.edu R_nch_on = 0; 8510152Satgutier@umich.edu R_pch_on = 0; 8610152Satgutier@umich.edu Vdd = 0; 8710152Satgutier@umich.edu Vth = 0; 8810152Satgutier@umich.edu I_on_n = 0; 8910152Satgutier@umich.edu I_on_p = 0; 9010152Satgutier@umich.edu I_off_n = 0; 9110152Satgutier@umich.edu I_off_p = 0; 9210152Satgutier@umich.edu I_g_on_n = 0; 9310152Satgutier@umich.edu I_g_on_p = 0; 9410152Satgutier@umich.edu C_ox = 0; 9510152Satgutier@umich.edu t_ox = 0; 9610152Satgutier@umich.edu n_to_p_eff_curr_drv_ratio = 0; 9710152Satgutier@umich.edu long_channel_leakage_reduction = 0; 9810152Satgutier@umich.edu } 9910152Satgutier@umich.edu 10010152Satgutier@umich.edu void display(uint32_t indent = 0); 10110152Satgutier@umich.edu }; 10210152Satgutier@umich.edu class InterconnectType 10310152Satgutier@umich.edu { 10410152Satgutier@umich.edu public: 10510152Satgutier@umich.edu double pitch; 10610152Satgutier@umich.edu double R_per_um; 10710152Satgutier@umich.edu double C_per_um; 10810152Satgutier@umich.edu double horiz_dielectric_constant; 10910152Satgutier@umich.edu double vert_dielectric_constant; 11010152Satgutier@umich.edu double aspect_ratio; 11110152Satgutier@umich.edu double miller_value; 11210152Satgutier@umich.edu double ild_thickness; 11310152Satgutier@umich.edu 11410152Satgutier@umich.edu InterconnectType(): pitch(0), R_per_um(0), C_per_um(0) { }; 11510152Satgutier@umich.edu 11610152Satgutier@umich.edu void reset() 11710152Satgutier@umich.edu { 11810152Satgutier@umich.edu pitch = 0; 11910152Satgutier@umich.edu R_per_um = 0; 12010152Satgutier@umich.edu C_per_um = 0; 12110152Satgutier@umich.edu horiz_dielectric_constant = 0; 12210152Satgutier@umich.edu vert_dielectric_constant = 0; 12310152Satgutier@umich.edu aspect_ratio = 0; 12410152Satgutier@umich.edu miller_value = 0; 12510152Satgutier@umich.edu ild_thickness = 0; 12610152Satgutier@umich.edu } 12710152Satgutier@umich.edu 12810152Satgutier@umich.edu void display(uint32_t indent = 0); 12910152Satgutier@umich.edu }; 13010152Satgutier@umich.edu class MemoryType 13110152Satgutier@umich.edu { 13210152Satgutier@umich.edu public: 13310152Satgutier@umich.edu double b_w; 13410152Satgutier@umich.edu double b_h; 13510152Satgutier@umich.edu double cell_a_w; 13610152Satgutier@umich.edu double cell_pmos_w; 13710152Satgutier@umich.edu double cell_nmos_w; 13810152Satgutier@umich.edu double Vbitpre; 13910152Satgutier@umich.edu 14010152Satgutier@umich.edu void reset() 14110152Satgutier@umich.edu { 14210152Satgutier@umich.edu b_w = 0; 14310152Satgutier@umich.edu b_h = 0; 14410152Satgutier@umich.edu cell_a_w = 0; 14510152Satgutier@umich.edu cell_pmos_w = 0; 14610152Satgutier@umich.edu cell_nmos_w = 0; 14710152Satgutier@umich.edu Vbitpre = 0; 14810152Satgutier@umich.edu } 14910152Satgutier@umich.edu 15010152Satgutier@umich.edu void display(uint32_t indent = 0); 15110152Satgutier@umich.edu }; 15210152Satgutier@umich.edu 15310152Satgutier@umich.edu class ScalingFactor 15410152Satgutier@umich.edu { 15510152Satgutier@umich.edu public: 15610152Satgutier@umich.edu double logic_scaling_co_eff; 15710152Satgutier@umich.edu double core_tx_density; 15810152Satgutier@umich.edu double long_channel_leakage_reduction; 15910152Satgutier@umich.edu 16010152Satgutier@umich.edu ScalingFactor(): logic_scaling_co_eff(0), core_tx_density(0), 16110152Satgutier@umich.edu long_channel_leakage_reduction(0) { }; 16210152Satgutier@umich.edu 16310152Satgutier@umich.edu void reset() 16410152Satgutier@umich.edu { 16510152Satgutier@umich.edu logic_scaling_co_eff= 0; 16610152Satgutier@umich.edu core_tx_density = 0; 16710152Satgutier@umich.edu long_channel_leakage_reduction= 0; 16810152Satgutier@umich.edu } 16910152Satgutier@umich.edu 17010152Satgutier@umich.edu void display(uint32_t indent = 0); 17110152Satgutier@umich.edu }; 17210152Satgutier@umich.edu 17310152Satgutier@umich.edu double ram_wl_stitching_overhead_; 17410152Satgutier@umich.edu double min_w_nmos_; 17510152Satgutier@umich.edu double max_w_nmos_; 17610152Satgutier@umich.edu double max_w_nmos_dec; 17710152Satgutier@umich.edu double unit_len_wire_del; 17810152Satgutier@umich.edu double FO4; 17910152Satgutier@umich.edu double kinv; 18010152Satgutier@umich.edu double vpp; 18110152Satgutier@umich.edu double w_sense_en; 18210152Satgutier@umich.edu double w_sense_n; 18310152Satgutier@umich.edu double w_sense_p; 18410152Satgutier@umich.edu double sense_delay; 18510152Satgutier@umich.edu double sense_dy_power; 18610152Satgutier@umich.edu double w_iso; 18710152Satgutier@umich.edu double w_poly_contact; 18810152Satgutier@umich.edu double spacing_poly_to_poly; 18910152Satgutier@umich.edu double spacing_poly_to_contact; 19010152Satgutier@umich.edu 19110152Satgutier@umich.edu double w_comp_inv_p1; 19210152Satgutier@umich.edu double w_comp_inv_p2; 19310152Satgutier@umich.edu double w_comp_inv_p3; 19410152Satgutier@umich.edu double w_comp_inv_n1; 19510152Satgutier@umich.edu double w_comp_inv_n2; 19610152Satgutier@umich.edu double w_comp_inv_n3; 19710152Satgutier@umich.edu double w_eval_inv_p; 19810152Satgutier@umich.edu double w_eval_inv_n; 19910152Satgutier@umich.edu double w_comp_n; 20010152Satgutier@umich.edu double w_comp_p; 20110152Satgutier@umich.edu 20210152Satgutier@umich.edu double dram_cell_I_on; 20310152Satgutier@umich.edu double dram_cell_Vdd; 20410152Satgutier@umich.edu double dram_cell_I_off_worst_case_len_temp; 20510152Satgutier@umich.edu double dram_cell_C; 20610152Satgutier@umich.edu double gm_sense_amp_latch; 20710152Satgutier@umich.edu 20810152Satgutier@umich.edu double w_nmos_b_mux; 20910152Satgutier@umich.edu double w_nmos_sa_mux; 21010152Satgutier@umich.edu double w_pmos_bl_precharge; 21110152Satgutier@umich.edu double w_pmos_bl_eq; 21210152Satgutier@umich.edu double MIN_GAP_BET_P_AND_N_DIFFS; 21310152Satgutier@umich.edu double MIN_GAP_BET_SAME_TYPE_DIFFS; 21410152Satgutier@umich.edu double HPOWERRAIL; 21510152Satgutier@umich.edu double cell_h_def; 21610152Satgutier@umich.edu 21710152Satgutier@umich.edu double chip_layout_overhead; 21810152Satgutier@umich.edu double macro_layout_overhead; 21910152Satgutier@umich.edu double sckt_co_eff; 22010152Satgutier@umich.edu 22110152Satgutier@umich.edu double fringe_cap; 22210152Satgutier@umich.edu 22310152Satgutier@umich.edu uint64_t h_dec; 22410152Satgutier@umich.edu 22510152Satgutier@umich.edu DeviceType sram_cell; // SRAM cell transistor 22610152Satgutier@umich.edu DeviceType dram_acc; // DRAM access transistor 22710152Satgutier@umich.edu DeviceType dram_wl; // DRAM wordline transistor 22810152Satgutier@umich.edu DeviceType peri_global; // peripheral global 22910152Satgutier@umich.edu DeviceType cam_cell; // SRAM cell transistor 23010152Satgutier@umich.edu 23110152Satgutier@umich.edu InterconnectType wire_local; 23210152Satgutier@umich.edu InterconnectType wire_inside_mat; 23310152Satgutier@umich.edu InterconnectType wire_outside_mat; 23410152Satgutier@umich.edu 23510152Satgutier@umich.edu ScalingFactor scaling_factor; 23610152Satgutier@umich.edu 23710152Satgutier@umich.edu MemoryType sram; 23810152Satgutier@umich.edu MemoryType dram; 23910152Satgutier@umich.edu MemoryType cam; 24010152Satgutier@umich.edu 24110152Satgutier@umich.edu void display(uint32_t indent = 0); 24210152Satgutier@umich.edu 24310152Satgutier@umich.edu void reset() 24410152Satgutier@umich.edu { 24510152Satgutier@umich.edu dram_cell_Vdd = 0; 24610152Satgutier@umich.edu dram_cell_I_on = 0; 24710152Satgutier@umich.edu dram_cell_C = 0; 24810152Satgutier@umich.edu vpp = 0; 24910152Satgutier@umich.edu 25010152Satgutier@umich.edu sense_delay = 0; 25110152Satgutier@umich.edu sense_dy_power = 0; 25210152Satgutier@umich.edu fringe_cap = 0; 25310152Satgutier@umich.edu// horiz_dielectric_constant = 0; 25410152Satgutier@umich.edu// vert_dielectric_constant = 0; 25510152Satgutier@umich.edu// aspect_ratio = 0; 25610152Satgutier@umich.edu// miller_value = 0; 25710152Satgutier@umich.edu// ild_thickness = 0; 25810152Satgutier@umich.edu 25910152Satgutier@umich.edu dram_cell_I_off_worst_case_len_temp = 0; 26010152Satgutier@umich.edu 26110152Satgutier@umich.edu sram_cell.reset(); 26210152Satgutier@umich.edu dram_acc.reset(); 26310152Satgutier@umich.edu dram_wl.reset(); 26410152Satgutier@umich.edu peri_global.reset(); 26510152Satgutier@umich.edu cam_cell.reset(); 26610152Satgutier@umich.edu 26710152Satgutier@umich.edu scaling_factor.reset(); 26810152Satgutier@umich.edu 26910152Satgutier@umich.edu wire_local.reset(); 27010152Satgutier@umich.edu wire_inside_mat.reset(); 27110152Satgutier@umich.edu wire_outside_mat.reset(); 27210152Satgutier@umich.edu 27310152Satgutier@umich.edu sram.reset(); 27410152Satgutier@umich.edu dram.reset(); 27510152Satgutier@umich.edu cam.reset(); 27610152Satgutier@umich.edu 27710152Satgutier@umich.edu chip_layout_overhead = 0; 27810152Satgutier@umich.edu macro_layout_overhead = 0; 27910152Satgutier@umich.edu sckt_co_eff = 0; 28010152Satgutier@umich.edu } 28110152Satgutier@umich.edu}; 28210152Satgutier@umich.edu 28310152Satgutier@umich.edu 28410152Satgutier@umich.edu 28510152Satgutier@umich.educlass DynamicParameter 28610152Satgutier@umich.edu{ 28710152Satgutier@umich.edu public: 28810152Satgutier@umich.edu bool is_tag; 28910152Satgutier@umich.edu bool pure_ram; 29010152Satgutier@umich.edu bool pure_cam; 29110152Satgutier@umich.edu bool fully_assoc; 29210152Satgutier@umich.edu int tagbits; 29310152Satgutier@umich.edu int num_subarrays; // only for leakage computation -- the number of subarrays per bank 29410152Satgutier@umich.edu int num_mats; // only for leakage computation -- the number of mats per bank 29510152Satgutier@umich.edu double Nspd; 29610152Satgutier@umich.edu int Ndwl; 29710152Satgutier@umich.edu int Ndbl; 29810152Satgutier@umich.edu int Ndcm; 29910152Satgutier@umich.edu int deg_bl_muxing; 30010152Satgutier@umich.edu int deg_senseamp_muxing_non_associativity; 30110152Satgutier@umich.edu int Ndsam_lev_1; 30210152Satgutier@umich.edu int Ndsam_lev_2; 30310152Satgutier@umich.edu int number_addr_bits_mat; // per port 30410152Satgutier@umich.edu int number_subbanks_decode; // per_port 30510152Satgutier@umich.edu int num_di_b_bank_per_port; 30610152Satgutier@umich.edu int num_do_b_bank_per_port; 30710152Satgutier@umich.edu int num_di_b_mat; 30810152Satgutier@umich.edu int num_do_b_mat; 30910152Satgutier@umich.edu int num_di_b_subbank; 31010152Satgutier@umich.edu int num_do_b_subbank; 31110152Satgutier@umich.edu 31210152Satgutier@umich.edu int num_si_b_mat; 31310152Satgutier@umich.edu int num_so_b_mat; 31410152Satgutier@umich.edu int num_si_b_subbank; 31510152Satgutier@umich.edu int num_so_b_subbank; 31610152Satgutier@umich.edu int num_si_b_bank_per_port; 31710152Satgutier@umich.edu int num_so_b_bank_per_port; 31810152Satgutier@umich.edu 31910152Satgutier@umich.edu int number_way_select_signals_mat; 32010152Satgutier@umich.edu int num_act_mats_hor_dir; 32110152Satgutier@umich.edu 32210152Satgutier@umich.edu int num_act_mats_hor_dir_sl; 32310152Satgutier@umich.edu bool is_dram; 32410152Satgutier@umich.edu double V_b_sense; 32510152Satgutier@umich.edu unsigned int num_r_subarray; 32610152Satgutier@umich.edu unsigned int num_c_subarray; 32710152Satgutier@umich.edu int tag_num_r_subarray;//sheng: fully associative cache tag and data must be computed together, data and tag must be separate 32810152Satgutier@umich.edu int tag_num_c_subarray; 32910152Satgutier@umich.edu int data_num_r_subarray; 33010152Satgutier@umich.edu int data_num_c_subarray; 33110152Satgutier@umich.edu int num_mats_h_dir; 33210152Satgutier@umich.edu int num_mats_v_dir; 33310152Satgutier@umich.edu uint32_t ram_cell_tech_type; 33410152Satgutier@umich.edu double dram_refresh_period; 33510152Satgutier@umich.edu 33610152Satgutier@umich.edu DynamicParameter(); 33710152Satgutier@umich.edu DynamicParameter( 33810152Satgutier@umich.edu bool is_tag_, 33910152Satgutier@umich.edu int pure_ram_, 34010152Satgutier@umich.edu int pure_cam_, 34110152Satgutier@umich.edu double Nspd_, 34210152Satgutier@umich.edu unsigned int Ndwl_, 34310152Satgutier@umich.edu unsigned int Ndbl_, 34410152Satgutier@umich.edu unsigned int Ndcm_, 34510152Satgutier@umich.edu unsigned int Ndsam_lev_1_, 34610152Satgutier@umich.edu unsigned int Ndsam_lev_2_, 34710152Satgutier@umich.edu bool is_main_mem_); 34810152Satgutier@umich.edu 34910152Satgutier@umich.edu int use_inp_params; 35010152Satgutier@umich.edu unsigned int num_rw_ports; 35110152Satgutier@umich.edu unsigned int num_rd_ports; 35210152Satgutier@umich.edu unsigned int num_wr_ports; 35310152Satgutier@umich.edu unsigned int num_se_rd_ports; // number of single ended read ports 35410152Satgutier@umich.edu unsigned int num_search_ports; 35510152Satgutier@umich.edu unsigned int out_w;// == nr_bits_out 35610152Satgutier@umich.edu bool is_main_mem; 35710152Satgutier@umich.edu Area cell, cam_cell;//cell is the sram_cell in both nomal cache/ram and FA. 35810152Satgutier@umich.edu bool is_valid; 35910152Satgutier@umich.edu}; 36010152Satgutier@umich.edu 36110152Satgutier@umich.edu 36210152Satgutier@umich.edu 36310152Satgutier@umich.eduextern InputParameter * g_ip; 36410152Satgutier@umich.eduextern TechnologyParameter g_tp; 36510152Satgutier@umich.edu 36610152Satgutier@umich.edu#endif 36710152Satgutier@umich.edu 368