Ignore:
Timestamp:
Feb 27, 2009, 7:37:40 PM (15 years ago)
Author:
rosiere
Message:

1) Decod_queue : multi implementation (one_fifo, multi_fifo)
2) Issue_queue : multi implementation (in_order, out_of_order)
3) Direction : Add Meta predictor
4) Context_State : re add Branch_complete, More priority to Load miss (is not speculative)
5) Return_Address_Stack : update reg_PREDICT pointer on decod miss prediction
6) UPT : Fix bug in multi event
7) Prediction_glue : in read_stack case, insert in UPT pc_next
8) Rename select : when rob have an event (need flush), read_r{a,b,c} and write_r{d,e} is set at 0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Parameters.cpp

    r110 r111  
    77
    88#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/include/Parameters.h"
     9#include "Common/include/BitManipulation.h"
    910
    1011namespace morpheo {
     
    2122#undef  FUNCTION
    2223#define FUNCTION "Two_Level_Branch_Predictor::Parameters"
    23   Parameters::Parameters (bool is_toplevel)
     24  Parameters::Parameters (uint32_t nb_inst_predict       ,
     25                          uint32_t nb_inst_update        ,
     26                          uint32_t size_address          ,
     27                          bool     have_bht              ,
     28                          uint32_t bht_size_shifter      ,
     29                          uint32_t bht_nb_shifter        ,
     30                          bool     have_pht              ,
     31                          uint32_t pht_size_counter      ,
     32                          uint32_t pht_nb_counter        ,
     33                          uint32_t pht_size_address_share,
     34                          bool     update_on_prediction  ,
     35                          bool is_toplevel)
    2436  {
    2537    log_begin(Two_Level_Branch_Predictor,FUNCTION);
    2638
    27     test();
     39    _nb_inst_predict         = nb_inst_predict       ;
     40    _nb_inst_update          = nb_inst_update        ;
     41    _size_address            = size_address          ;
     42    _have_bht                = have_bht              ;
     43    _bht_size_shifter        = (have_bht)?(bht_size_shifter):0;
     44    _bht_nb_shifter          = (have_bht)?(bht_nb_shifter  ):0;
     45    _have_pht                = have_pht              ;
     46    _pht_size_counter        = (have_pht)?(pht_size_counter      ):0;
     47    _pht_nb_counter          = (have_pht)?(pht_nb_counter        ):0;
     48    _pht_size_address_share  = (have_bht and have_pht)?(pht_size_address_share):0;
     49    _update_on_prediction    = update_on_prediction  ;
     50                             
     51    _bht_size_address        = (_have_bht)?log2(_bht_nb_shifter):0;
     52    _pht_size_address        = (_have_pht)?log2(_pht_nb_counter):0;
     53                             
     54    test();                 
     55
     56    _size_history            = _bht_size_shifter + _pht_size_counter;
     57                             
     58    _bht_history_mask        = gen_mask<Thistory_t>(_bht_size_shifter);
     59    _bht_history_rshift      = 0;
     60    _pht_history_mask        = gen_mask<Thistory_t>(_pht_size_counter);
     61    _pht_history_rshift      = _bht_size_shifter;
     62                             
     63    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _size_history             : %d",_size_history  );
     64    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _bht_history_mask         : 0x%x",_bht_history_mask  );
     65    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _bht_history_rshift       : %d",_bht_history_rshift);
     66    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_history_mask         : 0x%x",_pht_history_mask  );
     67    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_history_rshift       : %d",_pht_history_rshift);
     68
     69    if (_have_bht)
     70      {
     71        _bht_address_mask        = gen_mask<Taddress_t>(_bht_size_address);
     72
     73        log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _bht_address_mask         : 0x%x",_bht_address_mask  );
     74      }
     75
     76    if (_have_pht)
     77      {
     78        _pht_counter_max         = (1<<_pht_size_counter)-1;
     79       
     80        _pht_nb_bank             = (_pht_nb_counter - (1<<_bht_size_shifter))+1;
     81        _pht_size_bank           = _pht_nb_counter / _pht_nb_bank;
     82
     83        _pht_address_share_mask  = gen_mask<Taddress_t>(_pht_size_address_share);
     84        _pht_address_share_lshift= _bht_size_shifter-_pht_size_address_share;
     85        _pht_address_bank_mask   = gen_mask<Taddress_t>(log2(_pht_nb_bank));
     86        _pht_address_bank_rshift = _pht_size_address_share;
     87
     88        log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_nb_bank              : %d"  ,_pht_nb_bank   );
     89        log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_size_bank            : %d"  ,_pht_size_bank );
     90        log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_address_share_mask   : 0x%x",_pht_address_share_mask  );
     91        log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_address_share_lshift : %d"  ,_pht_address_share_lshift);
     92        log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_address_bank_mask    : 0x%x",_pht_address_bank_mask   );
     93        log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_address_bank_rshift  : %d"  ,_pht_address_bank_rshift );
     94      }
    2895
    2996    if (is_toplevel)
    30       {
    31         copy();
    32       }
     97      copy();
    3398
    3499    log_end(Two_Level_Branch_Predictor,FUNCTION);
Note: See TracChangeset for help on using the changeset viewer.