parameter.h revision 10152
1/*****************************************************************************
2 *                                McPAT/CACTI
3 *                      SOFTWARE LICENSE AGREEMENT
4 *            Copyright 2012 Hewlett-Packard Development Company, L.P.
5 *                          All Rights Reserved
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are
9 * met: redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer;
11 * redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution;
14 * neither the name of the copyright holders nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.”
29 *
30 ***************************************************************************/
31
32
33
34#ifndef __PARAMETER_H__
35#define __PARAMETER_H__
36
37#include "area.h"
38#include "cacti_interface.h"
39#include "const.h"
40#include "io.h"
41
42// parameters which are functions of certain device technology
43class TechnologyParameter
44{
45 public:
46  class DeviceType
47  {
48   public:
49    double C_g_ideal;
50    double C_fringe;
51    double C_overlap;
52    double C_junc;  // C_junc_area
53    double C_junc_sidewall;
54    double l_phy;
55    double l_elec;
56    double R_nch_on;
57    double R_pch_on;
58    double Vdd;
59    double Vth;
60    double I_on_n;
61    double I_on_p;
62    double I_off_n;
63    double I_off_p;
64    double I_g_on_n;
65    double I_g_on_p;
66    double C_ox;
67    double t_ox;
68    double n_to_p_eff_curr_drv_ratio;
69    double long_channel_leakage_reduction;
70
71    DeviceType(): C_g_ideal(0), C_fringe(0), C_overlap(0), C_junc(0),
72                  C_junc_sidewall(0), l_phy(0), l_elec(0), R_nch_on(0), R_pch_on(0),
73                  Vdd(0), Vth(0),
74                  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),
75                  C_ox(0), t_ox(0), n_to_p_eff_curr_drv_ratio(0), long_channel_leakage_reduction(0) { };
76    void reset()
77    {
78      C_g_ideal = 0;
79      C_fringe  = 0;
80      C_overlap = 0;
81      C_junc    = 0;
82      l_phy     = 0;
83      l_elec    = 0;
84      R_nch_on  = 0;
85      R_pch_on  = 0;
86      Vdd       = 0;
87      Vth       = 0;
88      I_on_n    = 0;
89      I_on_p    = 0;
90      I_off_n   = 0;
91      I_off_p   = 0;
92      I_g_on_n   = 0;
93      I_g_on_p   = 0;
94      C_ox      = 0;
95      t_ox      = 0;
96      n_to_p_eff_curr_drv_ratio = 0;
97      long_channel_leakage_reduction = 0;
98    }
99
100    void display(uint32_t indent = 0);
101  };
102  class InterconnectType
103  {
104   public:
105    double pitch;
106    double R_per_um;
107    double C_per_um;
108    double horiz_dielectric_constant;
109    double vert_dielectric_constant;
110    double aspect_ratio;
111    double miller_value;
112    double ild_thickness;
113
114    InterconnectType(): pitch(0), R_per_um(0), C_per_um(0) { };
115
116    void reset()
117    {
118      pitch = 0;
119      R_per_um = 0;
120      C_per_um = 0;
121      horiz_dielectric_constant = 0;
122      vert_dielectric_constant = 0;
123      aspect_ratio = 0;
124      miller_value = 0;
125      ild_thickness = 0;
126    }
127
128    void display(uint32_t indent = 0);
129  };
130  class MemoryType
131  {
132   public:
133    double b_w;
134    double b_h;
135    double cell_a_w;
136    double cell_pmos_w;
137    double cell_nmos_w;
138    double Vbitpre;
139
140    void reset()
141    {
142      b_w = 0;
143      b_h = 0;
144      cell_a_w = 0;
145      cell_pmos_w = 0;
146      cell_nmos_w = 0;
147      Vbitpre = 0;
148    }
149
150    void display(uint32_t indent = 0);
151  };
152
153  class ScalingFactor
154  {
155   public:
156    double logic_scaling_co_eff;
157    double core_tx_density;
158    double long_channel_leakage_reduction;
159
160    ScalingFactor(): logic_scaling_co_eff(0), core_tx_density(0),
161    long_channel_leakage_reduction(0) { };
162
163    void reset()
164    {
165      logic_scaling_co_eff= 0;
166      core_tx_density = 0;
167      long_channel_leakage_reduction= 0;
168    }
169
170    void display(uint32_t indent = 0);
171  };
172
173  double ram_wl_stitching_overhead_;
174  double min_w_nmos_;
175  double max_w_nmos_;
176  double max_w_nmos_dec;
177  double unit_len_wire_del;
178  double FO4;
179  double kinv;
180  double vpp;
181  double w_sense_en;
182  double w_sense_n;
183  double w_sense_p;
184  double sense_delay;
185  double sense_dy_power;
186  double w_iso;
187  double w_poly_contact;
188  double spacing_poly_to_poly;
189  double spacing_poly_to_contact;
190
191  double w_comp_inv_p1;
192  double w_comp_inv_p2;
193  double w_comp_inv_p3;
194  double w_comp_inv_n1;
195  double w_comp_inv_n2;
196  double w_comp_inv_n3;
197  double w_eval_inv_p;
198  double w_eval_inv_n;
199  double w_comp_n;
200  double w_comp_p;
201
202  double dram_cell_I_on;
203  double dram_cell_Vdd;
204  double dram_cell_I_off_worst_case_len_temp;
205  double dram_cell_C;
206  double gm_sense_amp_latch;
207
208  double w_nmos_b_mux;
209  double w_nmos_sa_mux;
210  double w_pmos_bl_precharge;
211  double w_pmos_bl_eq;
212  double MIN_GAP_BET_P_AND_N_DIFFS;
213  double MIN_GAP_BET_SAME_TYPE_DIFFS;
214  double HPOWERRAIL;
215  double cell_h_def;
216
217  double chip_layout_overhead;
218  double macro_layout_overhead;
219  double sckt_co_eff;
220
221  double fringe_cap;
222
223  uint64_t h_dec;
224
225  DeviceType sram_cell;   // SRAM cell transistor
226  DeviceType dram_acc;    // DRAM access transistor
227  DeviceType dram_wl;     // DRAM wordline transistor
228  DeviceType peri_global; // peripheral global
229  DeviceType cam_cell;   // SRAM cell transistor
230
231  InterconnectType wire_local;
232  InterconnectType wire_inside_mat;
233  InterconnectType wire_outside_mat;
234
235  ScalingFactor scaling_factor;
236
237  MemoryType sram;
238  MemoryType dram;
239  MemoryType cam;
240
241  void display(uint32_t indent = 0);
242
243  void reset()
244  {
245    dram_cell_Vdd  = 0;
246    dram_cell_I_on = 0;
247    dram_cell_C    = 0;
248    vpp            = 0;
249
250    sense_delay               = 0;
251    sense_dy_power            = 0;
252    fringe_cap                = 0;
253//    horiz_dielectric_constant = 0;
254//    vert_dielectric_constant  = 0;
255//    aspect_ratio              = 0;
256//    miller_value              = 0;
257//    ild_thickness             = 0;
258
259    dram_cell_I_off_worst_case_len_temp = 0;
260
261    sram_cell.reset();
262    dram_acc.reset();
263    dram_wl.reset();
264    peri_global.reset();
265    cam_cell.reset();
266
267    scaling_factor.reset();
268
269    wire_local.reset();
270    wire_inside_mat.reset();
271    wire_outside_mat.reset();
272
273    sram.reset();
274    dram.reset();
275    cam.reset();
276
277    chip_layout_overhead  = 0;
278    macro_layout_overhead = 0;
279    sckt_co_eff           = 0;
280  }
281};
282
283
284
285class DynamicParameter
286{
287  public:
288    bool is_tag;
289    bool pure_ram;
290    bool pure_cam;
291    bool fully_assoc;
292    int tagbits;
293    int num_subarrays;  // only for leakage computation  -- the number of subarrays per bank
294    int num_mats;       // only for leakage computation  -- the number of mats per bank
295    double Nspd;
296    int Ndwl;
297    int Ndbl;
298    int Ndcm;
299    int deg_bl_muxing;
300    int deg_senseamp_muxing_non_associativity;
301    int Ndsam_lev_1;
302    int Ndsam_lev_2;
303    int number_addr_bits_mat;             // per port
304    int number_subbanks_decode;           // per_port
305    int num_di_b_bank_per_port;
306    int num_do_b_bank_per_port;
307    int num_di_b_mat;
308    int num_do_b_mat;
309    int num_di_b_subbank;
310    int num_do_b_subbank;
311
312    int num_si_b_mat;
313    int num_so_b_mat;
314    int num_si_b_subbank;
315    int num_so_b_subbank;
316        int num_si_b_bank_per_port;
317        int num_so_b_bank_per_port;
318
319    int number_way_select_signals_mat;
320    int num_act_mats_hor_dir;
321
322    int num_act_mats_hor_dir_sl;
323    bool is_dram;
324    double V_b_sense;
325    unsigned int num_r_subarray;
326    unsigned int num_c_subarray;
327    int tag_num_r_subarray;//sheng: fully associative cache tag and data must be computed together, data and tag must be separate
328    int tag_num_c_subarray;
329    int data_num_r_subarray;
330    int data_num_c_subarray;
331    int num_mats_h_dir;
332    int num_mats_v_dir;
333    uint32_t ram_cell_tech_type;
334    double dram_refresh_period;
335
336    DynamicParameter();
337    DynamicParameter(
338        bool         is_tag_,
339        int          pure_ram_,
340        int          pure_cam_,
341        double       Nspd_,
342        unsigned int Ndwl_,
343        unsigned int Ndbl_,
344        unsigned int Ndcm_,
345        unsigned int Ndsam_lev_1_,
346        unsigned int Ndsam_lev_2_,
347        bool         is_main_mem_);
348
349    int use_inp_params;
350    unsigned int num_rw_ports;
351    unsigned int num_rd_ports;
352    unsigned int num_wr_ports;
353    unsigned int num_se_rd_ports;  // number of single ended read ports
354    unsigned int num_search_ports;
355    unsigned int out_w;// == nr_bits_out
356    bool   is_main_mem;
357    Area   cell, cam_cell;//cell is the sram_cell in both nomal cache/ram and FA.
358    bool   is_valid;
359};
360
361
362
363extern InputParameter * g_ip;
364extern TechnologyParameter g_tp;
365
366#endif
367
368