summaryrefslogtreecommitdiff
path: root/ext/mcpat/cacti/parameter.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mcpat/cacti/parameter.h')
-rw-r--r--ext/mcpat/cacti/parameter.h367
1 files changed, 367 insertions, 0 deletions
diff --git a/ext/mcpat/cacti/parameter.h b/ext/mcpat/cacti/parameter.h
new file mode 100644
index 000000000..9c827bbc8
--- /dev/null
+++ b/ext/mcpat/cacti/parameter.h
@@ -0,0 +1,367 @@
+/*****************************************************************************
+ * McPAT/CACTI
+ * SOFTWARE LICENSE AGREEMENT
+ * Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * 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
+