decoder.h (10152:52c552138ba1) | decoder.h (10234:5cb711fa6176) |
---|---|
1/***************************************************************************** 2 * McPAT/CACTI 3 * SOFTWARE LICENSE AGREEMENT 4 * Copyright 2012 Hewlett-Packard Development Company, L.P. | 1/***************************************************************************** 2 * McPAT/CACTI 3 * SOFTWARE LICENSE AGREEMENT 4 * Copyright 2012 Hewlett-Packard Development Company, L.P. |
5 * Copyright (c) 2010-2013 Advanced Micro Devices, Inc. |
|
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 --- 7 unchanged lines hidden (view full) --- 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 | 6 * All Rights Reserved 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are 10 * met: redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer; 12 * redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the --- 7 unchanged lines hidden (view full) --- 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (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 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 * 30 ***************************************************************************/ 31 32 33#ifndef __DECODER_H__ 34#define __DECODER_H__ 35 36#include <vector> 37 38#include "area.h" 39#include "component.h" 40#include "parameter.h" 41 42using namespace std; 43 44 | 30 * 31 ***************************************************************************/ 32 33 34#ifndef __DECODER_H__ 35#define __DECODER_H__ 36 37#include <vector> 38 39#include "area.h" 40#include "component.h" 41#include "parameter.h" 42 43using namespace std; 44 45 |
45class Decoder : public Component 46{ 47 public: | 46class Decoder : public Component { 47public: |
48 Decoder( 49 int _num_dec_signals, 50 bool flag_way_select, 51 double _C_ld_dec_out, 52 double _R_wire_dec_out, 53 bool fully_assoc_, 54 bool is_dram_, 55 bool is_wl_tr_, --- 19 unchanged lines hidden (view full) --- 75 void compute_area(); 76 double compute_delays(double inrisetime); // return outrisetime 77 78 void leakage_feedback(double temperature); 79}; 80 81 82 | 48 Decoder( 49 int _num_dec_signals, 50 bool flag_way_select, 51 double _C_ld_dec_out, 52 double _R_wire_dec_out, 53 bool fully_assoc_, 54 bool is_dram_, 55 bool is_wl_tr_, --- 19 unchanged lines hidden (view full) --- 75 void compute_area(); 76 double compute_delays(double inrisetime); // return outrisetime 77 78 void leakage_feedback(double temperature); 79}; 80 81 82 |
83class PredecBlk : public Component 84{ 85 public: 86 PredecBlk( 87 int num_dec_signals, 88 Decoder * dec, 89 double C_wire_predec_blk_out, 90 double R_wire_predec_blk_out, 91 int num_dec_per_predec, 92 bool is_dram_, 93 bool is_blk1); | 83class PredecBlk : public Component { 84public: 85 PredecBlk( 86 int num_dec_signals, 87 Decoder * dec, 88 double C_wire_predec_blk_out, 89 double R_wire_predec_blk_out, 90 int num_dec_per_predec, 91 bool is_dram_, 92 bool is_blk1); |
94 | 93 |
95 Decoder * dec; 96 bool exist; 97 int number_input_addr_bits; 98 double C_ld_predec_blk_out; 99 double R_wire_predec_blk_out; 100 int branch_effort_nand2_gate_output; 101 int branch_effort_nand3_gate_output; 102 bool flag_two_unique_paths; 103 int flag_L2_gate; 104 int number_inputs_L1_gate; 105 int number_gates_L1_nand2_path; 106 int number_gates_L1_nand3_path; 107 int number_gates_L2; 108 int min_number_gates_L1; 109 int min_number_gates_L2; 110 int num_L1_active_nand2_path; 111 int num_L1_active_nand3_path; 112 double w_L1_nand2_n[MAX_NUMBER_GATES_STAGE]; 113 double w_L1_nand2_p[MAX_NUMBER_GATES_STAGE]; 114 double w_L1_nand3_n[MAX_NUMBER_GATES_STAGE]; 115 double w_L1_nand3_p[MAX_NUMBER_GATES_STAGE]; 116 double w_L2_n[MAX_NUMBER_GATES_STAGE]; 117 double w_L2_p[MAX_NUMBER_GATES_STAGE]; 118 double delay_nand2_path; 119 double delay_nand3_path; 120 powerDef power_nand2_path; 121 powerDef power_nand3_path; 122 powerDef power_L2; | 94 Decoder * dec; 95 bool exist; 96 int number_input_addr_bits; 97 double C_ld_predec_blk_out; 98 double R_wire_predec_blk_out; 99 int branch_effort_nand2_gate_output; 100 int branch_effort_nand3_gate_output; 101 bool flag_two_unique_paths; 102 int flag_L2_gate; 103 int number_inputs_L1_gate; 104 int number_gates_L1_nand2_path; 105 int number_gates_L1_nand3_path; 106 int number_gates_L2; 107 int min_number_gates_L1; 108 int min_number_gates_L2; 109 int num_L1_active_nand2_path; 110 int num_L1_active_nand3_path; 111 double w_L1_nand2_n[MAX_NUMBER_GATES_STAGE]; 112 double w_L1_nand2_p[MAX_NUMBER_GATES_STAGE]; 113 double w_L1_nand3_n[MAX_NUMBER_GATES_STAGE]; 114 double w_L1_nand3_p[MAX_NUMBER_GATES_STAGE]; 115 double w_L2_n[MAX_NUMBER_GATES_STAGE]; 116 double w_L2_p[MAX_NUMBER_GATES_STAGE]; 117 double delay_nand2_path; 118 double delay_nand3_path; 119 powerDef power_nand2_path; 120 powerDef power_nand3_path; 121 powerDef power_L2; |
123 | 122 |
124 bool is_dram_; | 123 bool is_dram_; |
125 | 124 |
126 void compute_widths(); 127 void compute_area(); | 125 void compute_widths(); 126 void compute_area(); |
128 | 127 |
129 void leakage_feedback(double temperature); | 128 void leakage_feedback(double temperature); |
130 | 129 |
131 pair 132 // return | 130 pair<double, double> compute_delays(pair<double, double> inrisetime); // <nand2, nand3> 131 // return <outrise_nand2, outrise_nand3> |
133}; 134 135 | 132}; 133 134 |
136class PredecBlkDrv : public Component 137{ 138 public: 139 PredecBlkDrv( 140 int way_select, 141 PredecBlk * blk_, 142 bool is_dram); | 135class PredecBlkDrv : public Component { 136public: 137 PredecBlkDrv( 138 int way_select, 139 PredecBlk * blk_, 140 bool is_dram); |
143 | 141 |
144 int flag_driver_exists; 145 int number_input_addr_bits; 146 int number_gates_nand2_path; 147 int number_gates_nand3_path; 148 int min_number_gates; 149 int num_buffers_driving_1_nand2_load; 150 int num_buffers_driving_2_nand2_load; 151 int num_buffers_driving_4_nand2_load; 152 int num_buffers_driving_2_nand3_load; 153 int num_buffers_driving_8_nand3_load; 154 int num_buffers_nand3_path; 155 double c_load_nand2_path_out; 156 double c_load_nand3_path_out; 157 double r_load_nand2_path_out; 158 double r_load_nand3_path_out; 159 double width_nand2_path_n[MAX_NUMBER_GATES_STAGE]; 160 double width_nand2_path_p[MAX_NUMBER_GATES_STAGE]; 161 double width_nand3_path_n[MAX_NUMBER_GATES_STAGE]; 162 double width_nand3_path_p[MAX_NUMBER_GATES_STAGE]; 163 double delay_nand2_path; 164 double delay_nand3_path; 165 powerDef power_nand2_path; 166 powerDef power_nand3_path; | 142 int flag_driver_exists; 143 int number_input_addr_bits; 144 int number_gates_nand2_path; 145 int number_gates_nand3_path; 146 int min_number_gates; 147 int num_buffers_driving_1_nand2_load; 148 int num_buffers_driving_2_nand2_load; 149 int num_buffers_driving_4_nand2_load; 150 int num_buffers_driving_2_nand3_load; 151 int num_buffers_driving_8_nand3_load; 152 int num_buffers_nand3_path; 153 double c_load_nand2_path_out; 154 double c_load_nand3_path_out; 155 double r_load_nand2_path_out; 156 double r_load_nand3_path_out; 157 double width_nand2_path_n[MAX_NUMBER_GATES_STAGE]; 158 double width_nand2_path_p[MAX_NUMBER_GATES_STAGE]; 159 double width_nand3_path_n[MAX_NUMBER_GATES_STAGE]; 160 double width_nand3_path_p[MAX_NUMBER_GATES_STAGE]; 161 double delay_nand2_path; 162 double delay_nand3_path; 163 powerDef power_nand2_path; 164 powerDef power_nand3_path; |
167 | 165 |
168 PredecBlk * blk; 169 Decoder * dec; 170 bool is_dram_; 171 int way_select; | 166 PredecBlk * blk; 167 Decoder * dec; 168 bool is_dram_; 169 int way_select; |
172 | 170 |
173 void compute_widths(); 174 void compute_area(); | 171 void compute_widths(); 172 void compute_area(); |
175 | 173 |
176 void leakage_feedback(double temperature); | 174 void leakage_feedback(double temperature); |
177 178 | 175 176 |
179 pair 180 double inrisetime_nand2_path, 181 double inrisetime_nand3_path); // return | 177 pair<double, double> compute_delays( 178 double inrisetime_nand2_path, 179 double inrisetime_nand3_path); // return <outrise_nand2, outrise_nand3> |
182 | 180 |
183 inline int num_addr_bits_nand2_path() 184 { 185 return num_buffers_driving_1_nand2_load + 186 num_buffers_driving_2_nand2_load + 187 num_buffers_driving_4_nand2_load; 188 } 189 inline int num_addr_bits_nand3_path() 190 { 191 return num_buffers_driving_2_nand3_load + 192 num_buffers_driving_8_nand3_load; 193 } 194 double get_rdOp_dynamic_E(int num_act_mats_hor_dir); | 181 inline int num_addr_bits_nand2_path() { 182 return num_buffers_driving_1_nand2_load + 183 num_buffers_driving_2_nand2_load + 184 num_buffers_driving_4_nand2_load; 185 } 186 inline int num_addr_bits_nand3_path() { 187 return num_buffers_driving_2_nand3_load + 188 num_buffers_driving_8_nand3_load; 189 } 190 double get_rdOp_dynamic_E(int num_act_mats_hor_dir); |
195}; 196 197 198 | 191}; 192 193 194 |
199class Predec : public Component 200{ 201 public: | 195class Predec : public Component { 196public: |
202 Predec( 203 PredecBlkDrv * drv1, 204 PredecBlkDrv * drv2); 205 206 double compute_delays(double inrisetime); // return outrisetime 207 208 void leakage_feedback(double temperature); 209 PredecBlk * blk1; 210 PredecBlk * blk2; 211 PredecBlkDrv * drv1; 212 PredecBlkDrv * drv2; 213 214 powerDef block_power; 215 powerDef driver_power; 216 | 197 Predec( 198 PredecBlkDrv * drv1, 199 PredecBlkDrv * drv2); 200 201 double compute_delays(double inrisetime); // return outrisetime 202 203 void leakage_feedback(double temperature); 204 PredecBlk * blk1; 205 PredecBlk * blk2; 206 PredecBlkDrv * drv1; 207 PredecBlkDrv * drv2; 208 209 powerDef block_power; 210 powerDef driver_power; 211 |
217 private: | 212private: |
218 // returns <delay, risetime> 219 pair<double, double> get_max_delay_before_decoder( 220 pair<double, double> input_pair1, 221 pair<double, double> input_pair2); 222}; 223 224 225 | 213 // returns <delay, risetime> 214 pair<double, double> get_max_delay_before_decoder( 215 pair<double, double> input_pair1, 216 pair<double, double> input_pair2); 217}; 218 219 220 |
226class Driver : public Component 227{ 228 public: 229 Driver(double c_gate_load_, double c_wire_load_, double r_wire_load_, bool is_dram); | 221class Driver : public Component { 222public: 223 Driver(double c_gate_load_, double c_wire_load_, double r_wire_load_, bool is_dram); |
230 | 224 |
231 int number_gates; 232 int min_number_gates; 233 double width_n[MAX_NUMBER_GATES_STAGE]; 234 double width_p[MAX_NUMBER_GATES_STAGE]; 235 double c_gate_load; 236 double c_wire_load; 237 double r_wire_load; 238 double delay; 239 powerDef power; 240 bool is_dram_; | 225 int number_gates; 226 int min_number_gates; 227 double width_n[MAX_NUMBER_GATES_STAGE]; 228 double width_p[MAX_NUMBER_GATES_STAGE]; 229 double c_gate_load; 230 double c_wire_load; 231 double r_wire_load; 232 double delay; 233 powerDef power; 234 bool is_dram_; |
241 | 235 |
242 void compute_widths(); 243 double compute_delay(double inrisetime); | 236 void compute_widths(); 237 double compute_delay(double inrisetime); |
244}; 245 246 247#endif | 238}; 239 240 241#endif |