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