| /***************************************************************************** | |
| * McPAT/CACTI | |
| * SOFTWARE LICENSE AGREEMENT | |
| * Copyright 2012 Hewlett-Packard Development Company, L.P. | |
| * Copyright (c) 2010-2013 Advanced Micro Devices, Inc. | |
| * All Rights Reserved | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions are | |
| * met: redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer; | |
| * redistributions in binary form must reproduce the above copyright | |
| * notice, this list of conditions and the following disclaimer in the | |
| * documentation and/or other materials provided with the distribution; | |
| * neither the name of the copyright holders nor the names of its | |
| * contributors may be used to endorse or promote products derived from | |
| * this software without specific prior written permission. | |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| * | |
| ***************************************************************************/ | |
| #ifndef __PARAMETER_H__ | |
| #define __PARAMETER_H__ | |
| #include "area.h" | |
| #include "cacti_interface.h" | |
| #include "const.h" | |
| #include "io.h" | |
| // parameters which are functions of certain device technology | |
| class TechnologyParameter { | |
| public: | |
| class DeviceType { | |
| public: | |
| double C_g_ideal; | |
| double C_fringe; | |
| double C_overlap; | |
| double C_junc; // C_junc_area | |
| double C_junc_sidewall; | |
| double l_phy; | |
| double l_elec; | |
| double R_nch_on; | |
| double R_pch_on; | |
| double Vdd; | |
| double Vth; | |
| double I_on_n; | |
| double I_on_p; | |
| double I_off_n; | |
| double I_off_p; | |
| double I_g_on_n; | |
| double I_g_on_p; | |
| double C_ox; | |
| double t_ox; | |
| double n_to_p_eff_curr_drv_ratio; | |
| double long_channel_leakage_reduction; | |
| DeviceType(): C_g_ideal(0), C_fringe(0), C_overlap(0), C_junc(0), | |
| C_junc_sidewall(0), l_phy(0), l_elec(0), R_nch_on(0), R_pch_on(0), | |
| Vdd(0), Vth(0), | |
| 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), | |
| C_ox(0), t_ox(0), n_to_p_eff_curr_drv_ratio(0), | |
| long_channel_leakage_reduction(0) { }; | |
| void reset() { | |
| C_g_ideal = 0; | |
| C_fringe = 0; | |
| C_overlap = 0; | |
| C_junc = 0; | |
| l_phy = 0; | |
| l_elec = 0; | |
| R_nch_on = 0; | |
| R_pch_on = 0; | |
| Vdd = 0; | |
| Vth = 0; | |
| 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; | |
| C_ox = 0; | |
| t_ox = 0; | |
| n_to_p_eff_curr_drv_ratio = 0; | |
| long_channel_leakage_reduction = 0; | |
| } | |
| void display(uint32_t indent = 0); | |
| }; | |
| class InterconnectType { | |
| public: | |
| double pitch; | |
| double R_per_um; | |
| double C_per_um; | |
| double horiz_dielectric_constant; | |
| double vert_dielectric_constant; | |
| double aspect_ratio; | |
| double miller_value; | |
| double ild_thickness; | |
| InterconnectType(): pitch(0), R_per_um(0), C_per_um(0) { }; | |
| void reset() { | |
| pitch = 0; | |
| R_per_um = 0; | |
| C_per_um = 0; | |
| horiz_dielectric_constant = 0; | |
| vert_dielectric_constant = 0; | |
| aspect_ratio = 0; | |
| miller_value = 0; | |
| ild_thickness = 0; | |
| } | |
| void display(uint32_t indent = 0); | |
| }; | |
| class MemoryType { | |
| public: | |
| double b_w; | |
| double b_h; | |
| double cell_a_w; | |
| double cell_pmos_w; | |
| double cell_nmos_w; | |
| double Vbitpre; | |
| void reset() { | |
| b_w = 0; | |
| b_h = 0; | |
| cell_a_w = 0; | |
| cell_pmos_w = 0; | |
| cell_nmos_w = 0; | |
| Vbitpre = 0; | |
| } | |
| void display(uint32_t indent = 0); | |
| }; | |
| class ScalingFactor { | |
| public: | |
| double logic_scaling_co_eff; | |
| double core_tx_density; | |
| double long_channel_leakage_reduction; | |
| ScalingFactor(): logic_scaling_co_eff(0), core_tx_density(0), | |
| long_channel_leakage_reduction(0) { }; | |
| void reset() { | |
| logic_scaling_co_eff = 0; | |
| core_tx_density = 0; | |
| long_channel_leakage_reduction = 0; | |
| } | |
| void display(uint32_t indent = 0); | |
| }; | |
| double ram_wl_stitching_overhead_; | |
| double min_w_nmos_; | |
| double max_w_nmos_; | |
| double max_w_nmos_dec; | |
| double unit_len_wire_del; | |
| double FO4; | |
| double kinv; | |
| double vpp; | |
| double w_sense_en; | |
| double w_sense_n; | |
| double w_sense_p; | |
| double sense_delay; | |
| double sense_dy_power; | |
| double w_iso; | |
| double w_poly_contact; | |
| double spacing_poly_to_poly; | |
| double spacing_poly_to_contact; | |
| double w_comp_inv_p1; | |
| double w_comp_inv_p2; | |
| double w_comp_inv_p3; | |
| double w_comp_inv_n1; | |
| double w_comp_inv_n2; | |
| double w_comp_inv_n3; | |
| double w_eval_inv_p; | |
| double w_eval_inv_n; | |
| double w_comp_n; | |
| double w_comp_p; | |
| double dram_cell_I_on; | |
| double dram_cell_Vdd; | |
| double dram_cell_I_off_worst_case_len_temp; | |
| double dram_cell_C; | |
| double gm_sense_amp_latch; | |
| double w_nmos_b_mux; | |
| double w_nmos_sa_mux; | |
| double w_pmos_bl_precharge; | |
| double w_pmos_bl_eq; | |
| double MIN_GAP_BET_P_AND_N_DIFFS; | |
| double MIN_GAP_BET_SAME_TYPE_DIFFS; | |
| double HPOWERRAIL; | |
| double cell_h_def; | |
| double chip_layout_overhead; | |
| double macro_layout_overhead; | |
| double sckt_co_eff; | |
| double fringe_cap; | |
| uint64_t h_dec; | |
| DeviceType sram_cell; // SRAM cell transistor | |
| DeviceType dram_acc; // DRAM access transistor | |
| DeviceType dram_wl; // DRAM wordline transistor | |
| DeviceType peri_global; // peripheral global | |
| DeviceType cam_cell; // SRAM cell transistor | |
| InterconnectType wire_local; | |
| InterconnectType wire_inside_mat; | |
| InterconnectType wire_outside_mat; | |
| ScalingFactor scaling_factor; | |
| MemoryType sram; | |
| MemoryType dram; | |
| MemoryType cam; | |
| void display(uint32_t indent = 0); | |
| void reset() { | |
| dram_cell_Vdd = 0; | |
| dram_cell_I_on = 0; | |
| dram_cell_C = 0; | |
| vpp = 0; | |
| sense_delay = 0; | |
| sense_dy_power = 0; | |
| fringe_cap = 0; | |
| // horiz_dielectric_constant = 0; | |
| // vert_dielectric_constant = 0; | |
| // aspect_ratio = 0; | |
| // miller_value = 0; | |
| // ild_thickness = 0; | |
| dram_cell_I_off_worst_case_len_temp = 0; | |
| sram_cell.reset(); | |
| dram_acc.reset(); | |
| dram_wl.reset(); | |
| peri_global.reset(); | |
| cam_cell.reset(); | |
| scaling_factor.reset(); | |
| wire_local.reset(); | |
| wire_inside_mat.reset(); | |
| wire_outside_mat.reset(); | |
| sram.reset(); | |
| dram.reset(); | |
| cam.reset(); | |
| chip_layout_overhead = 0; | |
| macro_layout_overhead = 0; | |
| sckt_co_eff = 0; | |
| } | |
| }; | |
| class DynamicParameter { | |
| public: | |
| bool is_tag; | |
| bool pure_ram; | |
| bool pure_cam; | |
| bool fully_assoc; | |
| int tagbits; | |
| int num_subarrays; // only for leakage computation -- the number of subarrays per bank | |
| int num_mats; // only for leakage computation -- the number of mats per bank | |
| double Nspd; | |
| int Ndwl; | |
| int Ndbl; | |
| int Ndcm; | |
| int deg_bl_muxing; | |
| int deg_senseamp_muxing_non_associativity; | |
| int Ndsam_lev_1; | |
| int Ndsam_lev_2; | |
| int number_addr_bits_mat; // per port | |
| int number_subbanks_decode; // per_port | |
| int num_di_b_bank_per_port; | |
| int num_do_b_bank_per_port; | |
| int num_di_b_mat; | |
| int num_do_b_mat; | |
| int num_di_b_subbank; | |
| int num_do_b_subbank; | |
| int num_si_b_mat; | |
| int num_so_b_mat; | |
| int num_si_b_subbank; | |
| int num_so_b_subbank; | |
| int num_si_b_bank_per_port; | |
| int num_so_b_bank_per_port; | |
| int number_way_select_signals_mat; | |
| int num_act_mats_hor_dir; | |
| int num_act_mats_hor_dir_sl; | |
| bool is_dram; | |
| double V_b_sense; | |
| unsigned int num_r_subarray; | |
| unsigned int num_c_subarray; | |
| int tag_num_r_subarray;//sheng: fully associative cache tag and data must be computed together, data and tag must be separate | |
| int tag_num_c_subarray; | |
| int data_num_r_subarray; | |
| int data_num_c_subarray; | |
| int num_mats_h_dir; | |
| int num_mats_v_dir; | |
| uint32_t ram_cell_tech_type; | |
| double dram_refresh_period; | |
| DynamicParameter(); | |
| DynamicParameter( | |
| bool is_tag_, | |
| int pure_ram_, | |
| int pure_cam_, | |
| double Nspd_, | |
| unsigned int Ndwl_, | |
| unsigned int Ndbl_, | |
| unsigned int Ndcm_, | |
| unsigned int Ndsam_lev_1_, | |
| unsigned int Ndsam_lev_2_, | |
| bool is_main_mem_); | |
| int use_inp_params; | |
| unsigned int num_rw_ports; | |
| unsigned int num_rd_ports; | |
| unsigned int num_wr_ports; | |
| unsigned int num_se_rd_ports; // number of single ended read ports | |
| unsigned int num_search_ports; | |
| unsigned int out_w;// == nr_bits_out | |
| bool is_main_mem; | |
| Area cell, cam_cell;//cell is the sram_cell in both nomal cache/ram and FA. | |
| bool is_valid; | |
| }; | |
| extern InputParameter * g_ip; | |
| extern TechnologyParameter g_tp; | |
| #endif | |