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