decoder.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#ifndef __DECODER_H__
3410152Satgutier@umich.edu#define __DECODER_H__
3510152Satgutier@umich.edu
3610152Satgutier@umich.edu#include <vector>
3710152Satgutier@umich.edu
3810152Satgutier@umich.edu#include "area.h"
3910152Satgutier@umich.edu#include "component.h"
4010152Satgutier@umich.edu#include "parameter.h"
4110152Satgutier@umich.edu
4210152Satgutier@umich.eduusing namespace std;
4310152Satgutier@umich.edu
4410152Satgutier@umich.edu
4510152Satgutier@umich.educlass Decoder : public Component
4610152Satgutier@umich.edu{
4710152Satgutier@umich.edu  public:
4810152Satgutier@umich.edu    Decoder(
4910152Satgutier@umich.edu        int _num_dec_signals,
5010152Satgutier@umich.edu        bool flag_way_select,
5110152Satgutier@umich.edu        double _C_ld_dec_out,
5210152Satgutier@umich.edu        double _R_wire_dec_out,
5310152Satgutier@umich.edu        bool fully_assoc_,
5410152Satgutier@umich.edu        bool is_dram_,
5510152Satgutier@umich.edu        bool is_wl_tr_,
5610152Satgutier@umich.edu        const Area & cell_);
5710152Satgutier@umich.edu
5810152Satgutier@umich.edu    bool   exist;
5910152Satgutier@umich.edu    int    num_in_signals;
6010152Satgutier@umich.edu    double C_ld_dec_out;
6110152Satgutier@umich.edu    double R_wire_dec_out;
6210152Satgutier@umich.edu    int    num_gates;
6310152Satgutier@umich.edu    int    num_gates_min;
6410152Satgutier@umich.edu    double w_dec_n[MAX_NUMBER_GATES_STAGE];
6510152Satgutier@umich.edu    double w_dec_p[MAX_NUMBER_GATES_STAGE];
6610152Satgutier@umich.edu    double delay;
6710152Satgutier@umich.edu    //powerDef power;
6810152Satgutier@umich.edu    bool   fully_assoc;
6910152Satgutier@umich.edu    bool   is_dram;
7010152Satgutier@umich.edu    bool   is_wl_tr;
7110152Satgutier@umich.edu    const  Area & cell;
7210152Satgutier@umich.edu
7310152Satgutier@umich.edu
7410152Satgutier@umich.edu    void   compute_widths();
7510152Satgutier@umich.edu    void   compute_area();
7610152Satgutier@umich.edu    double compute_delays(double inrisetime);  // return outrisetime
7710152Satgutier@umich.edu
7810152Satgutier@umich.edu    void leakage_feedback(double temperature);
7910152Satgutier@umich.edu};
8010152Satgutier@umich.edu
8110152Satgutier@umich.edu
8210152Satgutier@umich.edu
8310152Satgutier@umich.educlass PredecBlk : public Component
8410152Satgutier@umich.edu{
8510152Satgutier@umich.edu public:
8610152Satgutier@umich.edu  PredecBlk(
8710152Satgutier@umich.edu      int num_dec_signals,
8810152Satgutier@umich.edu      Decoder * dec,
8910152Satgutier@umich.edu      double C_wire_predec_blk_out,
9010152Satgutier@umich.edu      double R_wire_predec_blk_out,
9110152Satgutier@umich.edu      int    num_dec_per_predec,
9210152Satgutier@umich.edu      bool   is_dram_,
9310152Satgutier@umich.edu      bool   is_blk1);
9410152Satgutier@umich.edu
9510152Satgutier@umich.edu  Decoder * dec;
9610152Satgutier@umich.edu  bool exist;
9710152Satgutier@umich.edu  int number_input_addr_bits;
9810152Satgutier@umich.edu  double C_ld_predec_blk_out;
9910152Satgutier@umich.edu  double R_wire_predec_blk_out;
10010152Satgutier@umich.edu  int branch_effort_nand2_gate_output;
10110152Satgutier@umich.edu  int branch_effort_nand3_gate_output;
10210152Satgutier@umich.edu  bool   flag_two_unique_paths;
10310152Satgutier@umich.edu  int flag_L2_gate;
10410152Satgutier@umich.edu  int number_inputs_L1_gate;
10510152Satgutier@umich.edu  int number_gates_L1_nand2_path;
10610152Satgutier@umich.edu  int number_gates_L1_nand3_path;
10710152Satgutier@umich.edu  int number_gates_L2;
10810152Satgutier@umich.edu  int min_number_gates_L1;
10910152Satgutier@umich.edu  int min_number_gates_L2;
11010152Satgutier@umich.edu  int num_L1_active_nand2_path;
11110152Satgutier@umich.edu  int num_L1_active_nand3_path;
11210152Satgutier@umich.edu  double w_L1_nand2_n[MAX_NUMBER_GATES_STAGE];
11310152Satgutier@umich.edu  double w_L1_nand2_p[MAX_NUMBER_GATES_STAGE];
11410152Satgutier@umich.edu  double w_L1_nand3_n[MAX_NUMBER_GATES_STAGE];
11510152Satgutier@umich.edu  double w_L1_nand3_p[MAX_NUMBER_GATES_STAGE];
11610152Satgutier@umich.edu  double w_L2_n[MAX_NUMBER_GATES_STAGE];
11710152Satgutier@umich.edu  double w_L2_p[MAX_NUMBER_GATES_STAGE];
11810152Satgutier@umich.edu  double delay_nand2_path;
11910152Satgutier@umich.edu  double delay_nand3_path;
12010152Satgutier@umich.edu  powerDef power_nand2_path;
12110152Satgutier@umich.edu  powerDef power_nand3_path;
12210152Satgutier@umich.edu  powerDef power_L2;
12310152Satgutier@umich.edu
12410152Satgutier@umich.edu  bool is_dram_;
12510152Satgutier@umich.edu
12610152Satgutier@umich.edu  void compute_widths();
12710152Satgutier@umich.edu  void compute_area();
12810152Satgutier@umich.edu
12910152Satgutier@umich.edu  void leakage_feedback(double temperature);
13010152Satgutier@umich.edu
13110152Satgutier@umich.edu  pair<double, double> compute_delays(pair<double, double> inrisetime); // <nand2, nand3>
13210152Satgutier@umich.edu  // return <outrise_nand2, outrise_nand3>
13310152Satgutier@umich.edu};
13410152Satgutier@umich.edu
13510152Satgutier@umich.edu
13610152Satgutier@umich.educlass PredecBlkDrv : public Component
13710152Satgutier@umich.edu{
13810152Satgutier@umich.edu public:
13910152Satgutier@umich.edu  PredecBlkDrv(
14010152Satgutier@umich.edu      int   way_select,
14110152Satgutier@umich.edu      PredecBlk * blk_,
14210152Satgutier@umich.edu      bool  is_dram);
14310152Satgutier@umich.edu
14410152Satgutier@umich.edu  int flag_driver_exists;
14510152Satgutier@umich.edu  int number_input_addr_bits;
14610152Satgutier@umich.edu  int number_gates_nand2_path;
14710152Satgutier@umich.edu  int number_gates_nand3_path;
14810152Satgutier@umich.edu  int min_number_gates;
14910152Satgutier@umich.edu  int num_buffers_driving_1_nand2_load;
15010152Satgutier@umich.edu  int num_buffers_driving_2_nand2_load;
15110152Satgutier@umich.edu  int num_buffers_driving_4_nand2_load;
15210152Satgutier@umich.edu  int num_buffers_driving_2_nand3_load;
15310152Satgutier@umich.edu  int num_buffers_driving_8_nand3_load;
15410152Satgutier@umich.edu  int num_buffers_nand3_path;
15510152Satgutier@umich.edu  double c_load_nand2_path_out;
15610152Satgutier@umich.edu  double c_load_nand3_path_out;
15710152Satgutier@umich.edu  double r_load_nand2_path_out;
15810152Satgutier@umich.edu  double r_load_nand3_path_out;
15910152Satgutier@umich.edu  double width_nand2_path_n[MAX_NUMBER_GATES_STAGE];
16010152Satgutier@umich.edu  double width_nand2_path_p[MAX_NUMBER_GATES_STAGE];
16110152Satgutier@umich.edu  double width_nand3_path_n[MAX_NUMBER_GATES_STAGE];
16210152Satgutier@umich.edu  double width_nand3_path_p[MAX_NUMBER_GATES_STAGE];
16310152Satgutier@umich.edu  double delay_nand2_path;
16410152Satgutier@umich.edu  double delay_nand3_path;
16510152Satgutier@umich.edu  powerDef power_nand2_path;
16610152Satgutier@umich.edu  powerDef power_nand3_path;
16710152Satgutier@umich.edu
16810152Satgutier@umich.edu  PredecBlk * blk;
16910152Satgutier@umich.edu  Decoder   * dec;
17010152Satgutier@umich.edu  bool  is_dram_;
17110152Satgutier@umich.edu  int   way_select;
17210152Satgutier@umich.edu
17310152Satgutier@umich.edu  void compute_widths();
17410152Satgutier@umich.edu  void compute_area();
17510152Satgutier@umich.edu
17610152Satgutier@umich.edu  void leakage_feedback(double temperature);
17710152Satgutier@umich.edu
17810152Satgutier@umich.edu
17910152Satgutier@umich.edu  pair<double, double> compute_delays(
18010152Satgutier@umich.edu      double inrisetime_nand2_path,
18110152Satgutier@umich.edu      double inrisetime_nand3_path);  // return <outrise_nand2, outrise_nand3>
18210152Satgutier@umich.edu
18310152Satgutier@umich.edu  inline int num_addr_bits_nand2_path()
18410152Satgutier@umich.edu  {
18510152Satgutier@umich.edu    return num_buffers_driving_1_nand2_load +
18610152Satgutier@umich.edu           num_buffers_driving_2_nand2_load +
18710152Satgutier@umich.edu           num_buffers_driving_4_nand2_load;
18810152Satgutier@umich.edu  }
18910152Satgutier@umich.edu  inline int num_addr_bits_nand3_path()
19010152Satgutier@umich.edu  {
19110152Satgutier@umich.edu    return num_buffers_driving_2_nand3_load +
19210152Satgutier@umich.edu           num_buffers_driving_8_nand3_load;
19310152Satgutier@umich.edu  }
19410152Satgutier@umich.edu  double get_rdOp_dynamic_E(int num_act_mats_hor_dir);
19510152Satgutier@umich.edu};
19610152Satgutier@umich.edu
19710152Satgutier@umich.edu
19810152Satgutier@umich.edu
19910152Satgutier@umich.educlass Predec : public Component
20010152Satgutier@umich.edu{
20110152Satgutier@umich.edu  public:
20210152Satgutier@umich.edu    Predec(
20310152Satgutier@umich.edu        PredecBlkDrv * drv1,
20410152Satgutier@umich.edu        PredecBlkDrv * drv2);
20510152Satgutier@umich.edu
20610152Satgutier@umich.edu    double compute_delays(double inrisetime);  // return outrisetime
20710152Satgutier@umich.edu
20810152Satgutier@umich.edu    void leakage_feedback(double temperature);
20910152Satgutier@umich.edu    PredecBlk    * blk1;
21010152Satgutier@umich.edu    PredecBlk    * blk2;
21110152Satgutier@umich.edu    PredecBlkDrv * drv1;
21210152Satgutier@umich.edu    PredecBlkDrv * drv2;
21310152Satgutier@umich.edu
21410152Satgutier@umich.edu    powerDef block_power;
21510152Satgutier@umich.edu    powerDef driver_power;
21610152Satgutier@umich.edu
21710152Satgutier@umich.edu  private:
21810152Satgutier@umich.edu    // returns <delay, risetime>
21910152Satgutier@umich.edu    pair<double, double> get_max_delay_before_decoder(
22010152Satgutier@umich.edu        pair<double, double> input_pair1,
22110152Satgutier@umich.edu        pair<double, double> input_pair2);
22210152Satgutier@umich.edu};
22310152Satgutier@umich.edu
22410152Satgutier@umich.edu
22510152Satgutier@umich.edu
22610152Satgutier@umich.educlass Driver : public Component
22710152Satgutier@umich.edu{
22810152Satgutier@umich.edu public:
22910152Satgutier@umich.edu  Driver(double c_gate_load_, double c_wire_load_, double r_wire_load_, bool is_dram);
23010152Satgutier@umich.edu
23110152Satgutier@umich.edu  int    number_gates;
23210152Satgutier@umich.edu  int    min_number_gates;
23310152Satgutier@umich.edu  double width_n[MAX_NUMBER_GATES_STAGE];
23410152Satgutier@umich.edu  double width_p[MAX_NUMBER_GATES_STAGE];
23510152Satgutier@umich.edu  double c_gate_load;
23610152Satgutier@umich.edu  double c_wire_load;
23710152Satgutier@umich.edu  double r_wire_load;
23810152Satgutier@umich.edu  double delay;
23910152Satgutier@umich.edu  powerDef power;
24010152Satgutier@umich.edu  bool   is_dram_;
24110152Satgutier@umich.edu
24210152Satgutier@umich.edu  void   compute_widths();
24310152Satgutier@umich.edu  double compute_delay(double inrisetime);
24410152Satgutier@umich.edu};
24510152Satgutier@umich.edu
24610152Satgutier@umich.edu
24710152Satgutier@umich.edu#endif
248