bank.cc 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 3410152Satgutier@umich.edu#include <iostream> 3510152Satgutier@umich.edu 3610152Satgutier@umich.edu#include "bank.h" 3710152Satgutier@umich.edu 3810152Satgutier@umich.eduBank::Bank(const DynamicParameter & dyn_p): 3910152Satgutier@umich.edu dp(dyn_p), mat(dp), 4010152Satgutier@umich.edu num_addr_b_mat(dyn_p.number_addr_bits_mat), 4110152Satgutier@umich.edu num_mats_hor_dir(dyn_p.num_mats_h_dir), num_mats_ver_dir(dyn_p.num_mats_v_dir) 4210152Satgutier@umich.edu{ 4310152Satgutier@umich.edu int RWP; 4410152Satgutier@umich.edu int ERP; 4510152Satgutier@umich.edu int EWP; 4610152Satgutier@umich.edu int SCHP; 4710152Satgutier@umich.edu 4810152Satgutier@umich.edu if (dp.use_inp_params) 4910152Satgutier@umich.edu { 5010152Satgutier@umich.edu RWP = dp.num_rw_ports; 5110152Satgutier@umich.edu ERP = dp.num_rd_ports; 5210152Satgutier@umich.edu EWP = dp.num_wr_ports; 5310152Satgutier@umich.edu SCHP = dp.num_search_ports; 5410152Satgutier@umich.edu } 5510152Satgutier@umich.edu else 5610152Satgutier@umich.edu { 5710152Satgutier@umich.edu RWP = g_ip->num_rw_ports; 5810152Satgutier@umich.edu ERP = g_ip->num_rd_ports; 5910152Satgutier@umich.edu EWP = g_ip->num_wr_ports; 6010152Satgutier@umich.edu SCHP = g_ip->num_search_ports; 6110152Satgutier@umich.edu } 6210152Satgutier@umich.edu 6310152Satgutier@umich.edu int total_addrbits = (dp.number_addr_bits_mat + dp.number_subbanks_decode)*(RWP+ERP+EWP); 6410152Satgutier@umich.edu int datainbits = dp.num_di_b_bank_per_port * (RWP + EWP); 6510152Satgutier@umich.edu int dataoutbits = dp.num_do_b_bank_per_port * (RWP + ERP); 6610152Satgutier@umich.edu int searchinbits; 6710152Satgutier@umich.edu int searchoutbits; 6810152Satgutier@umich.edu 6910152Satgutier@umich.edu if (dp.fully_assoc || dp.pure_cam) 7010152Satgutier@umich.edu { 7110152Satgutier@umich.edu datainbits = dp.num_di_b_bank_per_port * (RWP + EWP); 7210152Satgutier@umich.edu dataoutbits = dp.num_do_b_bank_per_port * (RWP + ERP); 7310152Satgutier@umich.edu searchinbits = dp.num_si_b_bank_per_port * SCHP; 7410152Satgutier@umich.edu searchoutbits = dp.num_so_b_bank_per_port * SCHP; 7510152Satgutier@umich.edu } 7610152Satgutier@umich.edu 7710152Satgutier@umich.edu if (!(dp.fully_assoc || dp.pure_cam)) 7810152Satgutier@umich.edu { 7910152Satgutier@umich.edu if (g_ip->fast_access && dp.is_tag == false) 8010152Satgutier@umich.edu { 8110152Satgutier@umich.edu dataoutbits *= g_ip->data_assoc; 8210152Satgutier@umich.edu } 8310152Satgutier@umich.edu 8410152Satgutier@umich.edu htree_in_add = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 8510152Satgutier@umich.edu total_addrbits, datainbits, 0,dataoutbits,0, num_mats_ver_dir*2, num_mats_hor_dir*2, Add_htree); 8610152Satgutier@umich.edu htree_in_data = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 8710152Satgutier@umich.edu total_addrbits, datainbits, 0,dataoutbits,0, num_mats_ver_dir*2, num_mats_hor_dir*2, Data_in_htree); 8810152Satgutier@umich.edu htree_out_data = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 8910152Satgutier@umich.edu total_addrbits, datainbits, 0,dataoutbits,0, num_mats_ver_dir*2, num_mats_hor_dir*2, Data_out_htree); 9010152Satgutier@umich.edu 9110152Satgutier@umich.edu// htree_out_data = new Htree2 (g_ip->wt,(double) 100, (double)100, 9210152Satgutier@umich.edu// total_addrbits, datainbits, 0,dataoutbits,0, num_mats_ver_dir*2, num_mats_hor_dir*2, Data_out_htree); 9310152Satgutier@umich.edu 9410152Satgutier@umich.edu area.w = htree_in_data->area.w; 9510152Satgutier@umich.edu area.h = htree_in_data->area.h; 9610152Satgutier@umich.edu } 9710152Satgutier@umich.edu else 9810152Satgutier@umich.edu { 9910152Satgutier@umich.edu htree_in_add = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 10010152Satgutier@umich.edu total_addrbits, datainbits, searchinbits,dataoutbits,searchoutbits, num_mats_ver_dir*2, num_mats_hor_dir*2, Add_htree); 10110152Satgutier@umich.edu htree_in_data = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 10210152Satgutier@umich.edu total_addrbits, datainbits,searchinbits, dataoutbits, searchoutbits, num_mats_ver_dir*2, num_mats_hor_dir*2, Data_in_htree); 10310152Satgutier@umich.edu htree_out_data = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 10410152Satgutier@umich.edu total_addrbits, datainbits,searchinbits, dataoutbits, searchoutbits,num_mats_ver_dir*2, num_mats_hor_dir*2, Data_out_htree); 10510152Satgutier@umich.edu htree_in_search = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 10610152Satgutier@umich.edu total_addrbits, datainbits,searchinbits, dataoutbits, searchoutbits, num_mats_ver_dir*2, num_mats_hor_dir*2, Data_in_htree,true, true); 10710152Satgutier@umich.edu htree_out_search = new Htree2 (g_ip->wt,(double) mat.area.w, (double)mat.area.h, 10810152Satgutier@umich.edu total_addrbits, datainbits,searchinbits, dataoutbits, searchoutbits,num_mats_ver_dir*2, num_mats_hor_dir*2, Data_out_htree,true); 10910152Satgutier@umich.edu 11010152Satgutier@umich.edu area.w = htree_in_data->area.w; 11110152Satgutier@umich.edu area.h = htree_in_data->area.h; 11210152Satgutier@umich.edu } 11310152Satgutier@umich.edu 11410152Satgutier@umich.edu num_addr_b_row_dec = _log2(mat.subarray.num_rows); 11510152Satgutier@umich.edu num_addr_b_routed_to_mat_for_act = num_addr_b_row_dec; 11610152Satgutier@umich.edu num_addr_b_routed_to_mat_for_rd_or_wr = num_addr_b_mat - num_addr_b_row_dec; 11710152Satgutier@umich.edu} 11810152Satgutier@umich.edu 11910152Satgutier@umich.edu 12010152Satgutier@umich.edu 12110152Satgutier@umich.eduBank::~Bank() 12210152Satgutier@umich.edu{ 12310152Satgutier@umich.edu delete htree_in_add; 12410152Satgutier@umich.edu delete htree_out_data; 12510152Satgutier@umich.edu delete htree_in_data; 12610152Satgutier@umich.edu if (dp.fully_assoc || dp.pure_cam) 12710152Satgutier@umich.edu { 12810152Satgutier@umich.edu delete htree_in_search; 12910152Satgutier@umich.edu delete htree_out_search; 13010152Satgutier@umich.edu } 13110152Satgutier@umich.edu} 13210152Satgutier@umich.edu 13310152Satgutier@umich.edu 13410152Satgutier@umich.edu 13510152Satgutier@umich.edudouble Bank::compute_delays(double inrisetime) 13610152Satgutier@umich.edu{ 13710152Satgutier@umich.edu return mat.compute_delays(inrisetime); 13810152Satgutier@umich.edu} 13910152Satgutier@umich.edu 14010152Satgutier@umich.edu 14110152Satgutier@umich.edu 14210152Satgutier@umich.eduvoid Bank::compute_power_energy() 14310152Satgutier@umich.edu{ 14410152Satgutier@umich.edu mat.compute_power_energy(); 14510152Satgutier@umich.edu 14610152Satgutier@umich.edu if (!(dp.fully_assoc || dp.pure_cam)) 14710152Satgutier@umich.edu { 14810152Satgutier@umich.edu power.readOp.dynamic += mat.power.readOp.dynamic * dp.num_act_mats_hor_dir; 14910152Satgutier@umich.edu power.readOp.leakage += mat.power.readOp.leakage * dp.num_mats; 15010152Satgutier@umich.edu power.readOp.gate_leakage += mat.power.readOp.gate_leakage * dp.num_mats; 15110152Satgutier@umich.edu 15210152Satgutier@umich.edu power.readOp.dynamic += htree_in_add->power.readOp.dynamic; 15310152Satgutier@umich.edu power.readOp.dynamic += htree_out_data->power.readOp.dynamic; 15410152Satgutier@umich.edu 15510152Satgutier@umich.edu power.readOp.leakage += htree_in_add->power.readOp.leakage; 15610152Satgutier@umich.edu power.readOp.leakage += htree_in_data->power.readOp.leakage; 15710152Satgutier@umich.edu power.readOp.leakage += htree_out_data->power.readOp.leakage; 15810152Satgutier@umich.edu power.readOp.gate_leakage += htree_in_add->power.readOp.gate_leakage; 15910152Satgutier@umich.edu power.readOp.gate_leakage += htree_in_data->power.readOp.gate_leakage; 16010152Satgutier@umich.edu power.readOp.gate_leakage += htree_out_data->power.readOp.gate_leakage; 16110152Satgutier@umich.edu } 16210152Satgutier@umich.edu else 16310152Satgutier@umich.edu { 16410152Satgutier@umich.edu 16510152Satgutier@umich.edu power.readOp.dynamic += mat.power.readOp.dynamic ;//for fa and cam num_act_mats_hor_dir is 1 for plain r/w 16610152Satgutier@umich.edu power.readOp.leakage += mat.power.readOp.leakage * dp.num_mats; 16710152Satgutier@umich.edu power.readOp.gate_leakage += mat.power.readOp.gate_leakage * dp.num_mats; 16810152Satgutier@umich.edu 16910152Satgutier@umich.edu power.searchOp.dynamic += mat.power.searchOp.dynamic * dp.num_mats; 17010152Satgutier@umich.edu power.searchOp.dynamic += mat.power_bl_precharge_eq_drv.searchOp.dynamic + 17110152Satgutier@umich.edu mat.power_sa.searchOp.dynamic + 17210152Satgutier@umich.edu mat.power_bitline.searchOp.dynamic + 17310152Satgutier@umich.edu mat.power_subarray_out_drv.searchOp.dynamic+ 17410152Satgutier@umich.edu mat.ml_to_ram_wl_drv->power.readOp.dynamic; 17510152Satgutier@umich.edu 17610152Satgutier@umich.edu power.readOp.dynamic += htree_in_add->power.readOp.dynamic; 17710152Satgutier@umich.edu power.readOp.dynamic += htree_out_data->power.readOp.dynamic; 17810152Satgutier@umich.edu 17910152Satgutier@umich.edu power.searchOp.dynamic += htree_in_search->power.searchOp.dynamic; 18010152Satgutier@umich.edu power.searchOp.dynamic += htree_out_search->power.searchOp.dynamic; 18110152Satgutier@umich.edu 18210152Satgutier@umich.edu power.readOp.leakage += htree_in_add->power.readOp.leakage; 18310152Satgutier@umich.edu power.readOp.leakage += htree_in_data->power.readOp.leakage; 18410152Satgutier@umich.edu power.readOp.leakage += htree_out_data->power.readOp.leakage; 18510152Satgutier@umich.edu power.readOp.leakage += htree_in_search->power.readOp.leakage; 18610152Satgutier@umich.edu power.readOp.leakage += htree_out_search->power.readOp.leakage; 18710152Satgutier@umich.edu 18810152Satgutier@umich.edu 18910152Satgutier@umich.edu power.readOp.gate_leakage += htree_in_add->power.readOp.gate_leakage; 19010152Satgutier@umich.edu power.readOp.gate_leakage += htree_in_data->power.readOp.gate_leakage; 19110152Satgutier@umich.edu power.readOp.gate_leakage += htree_out_data->power.readOp.gate_leakage; 19210152Satgutier@umich.edu power.readOp.gate_leakage += htree_in_search->power.readOp.gate_leakage; 19310152Satgutier@umich.edu power.readOp.gate_leakage += htree_out_search->power.readOp.gate_leakage; 19410152Satgutier@umich.edu 19510152Satgutier@umich.edu } 19610152Satgutier@umich.edu 19710152Satgutier@umich.edu} 19810152Satgutier@umich.edu 199