00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifndef __MAT_H__
00050 #define __MAT_H__
00051
00052 #include "McPATcomponent.h"
00053 #include "decoder.h"
00054 #include "wire.h"
00055 #include "subarray.h"
00056
00057 class Mat : public McPATComponent
00058 {
00059 public:
00060 Mat(const DynamicParameter & dyn_p);
00061 ~Mat();
00062 double compute_delays(double inrisetime);
00063 void compute_power_energy();
00064
00065 const DynamicParameter & dp;
00066
00067
00068 Decoder * row_dec;
00069 Decoder * bit_mux_dec;
00070 Decoder * sa_mux_lev_1_dec;
00071 Decoder * sa_mux_lev_2_dec;
00072 PredecBlk * dummy_way_sel_predec_blk1;
00073 PredecBlk * dummy_way_sel_predec_blk2;
00074 PredecBlkDrv * way_sel_drv1;
00075 PredecBlkDrv * dummy_way_sel_predec_blk_drv2;
00076
00077 Predec * r_predec;
00078 Predec * b_mux_predec;
00079 Predec * sa_mux_lev_1_predec;
00080 Predec * sa_mux_lev_2_predec;
00081
00082 Wire * subarray_out_wire;
00083 Driver * bl_precharge_eq_drv;
00084 Driver * cam_bl_precharge_eq_drv;
00085 Driver * ml_precharge_drv;
00086 Driver * sl_precharge_eq_drv;
00087 Driver * sl_data_drv;
00088 Driver * ml_to_ram_wl_drv;
00089
00090
00091 powerDef power_row_decoders;
00092 powerDef power_bit_mux_decoders;
00093 powerDef power_sa_mux_lev_1_decoders;
00094 powerDef power_sa_mux_lev_2_decoders;
00095 powerDef power_fa_cam;
00096 powerDef power_bl_precharge_eq_drv;
00097 powerDef power_subarray_out_drv;
00098 powerDef power_cam_all_active;
00099 powerDef power_searchline_precharge;
00100 powerDef power_matchline_precharge;
00101 powerDef power_ml_to_ram_wl_drv;
00102
00103 double delay_fa_tag, delay_cam;
00104 double delay_before_decoder;
00105 double delay_bitline;
00106 double delay_wl_reset;
00107 double delay_bl_restore;
00108
00109 double delay_searchline;
00110 double delay_matchchline;
00111 double delay_cam_sl_restore;
00112 double delay_cam_ml_reset;
00113 double delay_fa_ram_wl;
00114
00115 double delay_hit_miss_reset;
00116 double delay_hit_miss;
00117
00118 Subarray subarray;
00119 powerDef power_bitline, power_searchline, power_matchline;
00120 double per_bitline_read_energy;
00121 int deg_bl_muxing;
00122 int num_act_mats_hor_dir;
00123 double delay_writeback;
00124 Area cell,cam_cell;
00125 bool is_dram,is_fa, pure_cam, camFlag;
00126 int num_mats;
00127 powerDef power_sa;
00128 double delay_sa;
00129 double leak_power_sense_amps_closed_page_state;
00130 double leak_power_sense_amps_open_page_state;
00131 double delay_subarray_out_drv;
00132 double delay_subarray_out_drv_htree;
00133 double delay_comparator;
00134 powerDef power_comparator;
00135 int num_do_b_mat;
00136 int num_so_b_mat;
00137 int num_sa_subarray;
00138 int num_sa_subarray_search;
00139 double C_bl;
00140
00141 uint32_t num_subarrays_per_mat;
00142 uint32_t num_subarrays_per_row;
00143
00144
00145 private:
00146 double compute_bit_mux_sa_precharge_sa_mux_wr_drv_wr_mux_h();
00147 double width_write_driver_or_write_mux();
00148 double compute_comparators_height(int tagbits, int number_ways_in_mat, double subarray_mem_cell_area_w);
00149 double compute_cam_delay(double inrisetime);
00150 double compute_bitline_delay(double inrisetime);
00151 double compute_sa_delay(double inrisetime);
00152 double compute_subarray_out_drv(double inrisetime);
00153 double compute_comparator_delay(double inrisetime);
00154
00155 int RWP;
00156 int ERP;
00157 int EWP;
00158 int SCHP;
00159 };
00160
00161
00162
00163 #endif