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