Ignore:
Timestamp:
Feb 11, 2009, 12:03:25 AM (15 years ago)
Author:
rosiere
Message:

1) Fix test in Direction_Glue for Conditionnal Branch
2) Fix Instruction Address Compute

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_transition.cpp

    r88 r107  
    9292
    9393              // detect new branch !!! insert in branch target buffer
    94               log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * hit       : %d",hit);
    95               log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * num_bank  : %d",num_bank );
    96               log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * num_entry : %d",num_entry);
     94              log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * hit          : %d",hit);
     95              log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * miss_pred    : %d",miss_pred);
     96              log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * num_bank     : %d",num_bank );
     97              log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * num_entry    : %d",num_entry);
    9798
    9899              Tcounter_t accurate_new = 0;
     
    106107                  //    * in all case : is valid in this step
    107108                  Tcounter_t accurate_old = reg_BTB[num_bank][num_entry]._accurate;
     109
     110                  log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * accurate_old : %d",accurate_old);
     111
    108112                  // hit  : increase accurate
    109113                  // miss : decrease accurate
    110                   Tcounter_t accurate_new = (miss_pred)?((accurate_old>0)?(accurate_old-1):accurate_old):((accurate_old<_param->_accurate_max)?(accurate_old+1):accurate_old);
     114                  accurate_new = (miss_pred)?((accurate_old>0)?(accurate_old-1):accurate_old):((accurate_old<_param->_accurate_max)?(accurate_old+1):accurate_old);
    111115
    112116                  // test if accurate go to the threshold
    113117                  if ((accurate_old >= _param->_accurate_limit) and
    114118                      (accurate_new <  _param->_accurate_limit))
    115                     accurate_new = 0;
     119                    {
     120                      log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * decrease downto the accurate_limid (%d)",_param->_accurate_limit);
     121                      accurate_new = 0;
     122                    }
    116123                   
    117124                //reg_BTB[num_bank][num_entry]._val              : no update because hit
     
    135142//                reg_BTB[num_bank][num_entry]._condition        = PORT_READ(in_UPDATE_CONDITION    [i]);
    136143//                reg_BTB[num_bank][num_entry]._last_take        = PORT_READ(in_UPDATE_LAST_TAKE    [i]);
    137                   reg_BTB[num_bank][num_entry]._address_dest_val = 0;
     144//                reg_BTB[num_bank][num_entry]._address_dest_val = 0;
    138145                }
    139146
     
    144151//                reg_BTB[num_bank][num_entry]._address_dest     = PORT_READ(in_UPDATE_ADDRESS_DEST [i]);
    145152//              }
     153
     154              log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION,"    * accurate_new : %d",accurate_new);
     155
    146156              reg_BTB[num_bank][num_entry]._val              = 1;
    147157              reg_BTB[num_bank][num_entry]._context          = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0;
Note: See TracChangeset for help on using the changeset viewer.