Ignore:
Timestamp:
May 1, 2008, 6:48:45 PM (16 years ago)
Author:
rosiere
Message:
  • support locale (now must "just" translate)
  • update all component with new test format
  • update all component with usage
  • New component : decod queue and prediction_unit
Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register
Files:
1 added
8 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/SelfTest/src/test.cpp

    r81 r82  
    77 */
    88
     9#define NB_ITERATION  1024
     10#define CYCLE_MAX     (128*NB_ITERATION)
     11
    912#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/include/test.h"
    1013#include "Common/include/Test.h"
    1114#include "Common/include/BitManipulation.h"
    1215#include "Behavioural/include/Allocation.h"
    13 
    14 #define NB_ITERATION  1024
    15 #define CYCLE_MAX     (128*NB_ITERATION)
    16 
    17 #define LABEL(str...)                                                   \
    18   {                                                                     \
    19     msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));       \
    20     msg (str);                                                          \
    21     msg (_("\n"));                                                      \
    22   } while(0)
    23 
    24 #define SC_START(cycle_offset)                                                       \
    25   do                                                                                 \
    26     {                                                                                \
    27       /*cout << "SC_START (begin)" << endl;*/                                        \
    28                                                                                      \
    29       uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
    30       if (cycle_offset != 0)                                                         \
    31         {                                                                            \
    32           cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
    33         }                                                                            \
    34                                                                                      \
    35       if (cycle_current > CYCLE_MAX)                                                 \
    36         {                                                                            \
    37           TEST_KO("Maximal cycles Reached");                                         \
    38         }                                                                            \
    39                                                                                      \
    40       sc_start(cycle_offset);                                                        \
    41                                                                                      \
    42       /*cout << "SC_START (end  )" << endl;*/                                        \
    43     } while(0)
    44 
    4516
    4617  class entry_t
     
    12091#endif
    12192
    122   Branch_Target_Buffer_Register * _Branch_Target_Buffer_Register = new Branch_Target_Buffer_Register (name.c_str(),
     93  Branch_Target_Buffer_Register * _Branch_Target_Buffer_Register = new Branch_Target_Buffer_Register
     94    (name.c_str(),
    12395#ifdef STATISTICS
    124                                              _parameters_statistics,
     96     _parameters_statistics,
    12597#endif
    126                                              _param);
     98     _param,
     99     USE_ALL);
    127100 
    128101#ifdef SYSTEMC
     
    156129  ALLOC1_SC_SIGNAL( in_DECOD_LAST_TAKE       ," in_DECOD_LAST_TAKE       ",Tcontrol_t         ,_param->_nb_inst_decod);
    157130  ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t         ,_param->_nb_inst_decod);
     131  ALLOC1_SC_SIGNAL( in_DECOD_IS_ACCURATE     ," in_DECOD_IS_ACCURATE     ",Tcontrol_t         ,_param->_nb_inst_decod);
    158132  ALLOC1_SC_SIGNAL( in_UPDATE_VAL            ," in_UPDATE_VAL            ",Tcontrol_t         ,_param->_nb_inst_update);
    159133  ALLOC1_SC_SIGNAL(out_UPDATE_ACK            ,"out_UPDATE_ACK            ",Tcontrol_t         ,_param->_nb_inst_update);
     
    191165  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_VAL             ,_param->_nb_inst_decod);
    192166  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_ACK             ,_param->_nb_inst_decod);
     167  if (_param->_have_port_victim)
     168    {
    193169  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_HIT             ,_param->_nb_inst_decod);
    194   if (_param->_have_port_victim)
    195170  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_HIT_INDEX       ,_param->_nb_inst_decod);
    196   if (_param->_have_port_victim)
    197171  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_VICTIM          ,_param->_nb_inst_decod);
     172    }
    198173  if (_param->_have_port_context_id)
    199174  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_CONTEXT_ID      ,_param->_nb_inst_decod);
     
    203178  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_LAST_TAKE       ,_param->_nb_inst_decod);
    204179  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod);
     180  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_IS_ACCURATE     ,_param->_nb_inst_decod);
    205181
    206182  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_VAL            ,_param->_nb_inst_update);
    207183  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_ACK            ,_param->_nb_inst_update);
     184  if (_param->_have_port_victim)
     185    {
    208186  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_HIT            ,_param->_nb_inst_update);
    209   if (_param->_have_port_victim)
    210187  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_HIT_INDEX      ,_param->_nb_inst_update);
    211   if (_param->_have_port_victim)
    212188  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_VICTIM         ,_param->_nb_inst_update);
     189    }
    213190  if (_param->_have_port_context_id)
    214191  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_CONTEXT_ID     ,_param->_nb_inst_update);
     
    297274          in_DECOD_LAST_TAKE       [i]->write(rand()%2);
    298275          in_DECOD_MISS_PREDICTION [i]->write(rand()%2);
     276          in_DECOD_IS_ACCURATE     [i]->write(rand()%2);
    299277        }
    300278
     
    478456  delete []  in_DECOD_LAST_TAKE       ;
    479457  delete []  in_DECOD_MISS_PREDICTION ;
     458  delete []  in_DECOD_IS_ACCURATE     ;
    480459  delete []  in_UPDATE_VAL            ;
    481460  delete [] out_UPDATE_ACK            ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/include/Branch_Target_Buffer_Register.h

    r81 r82  
    8787  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_LAST_TAKE       ; //[nb_inst_decod]
    8888  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_PREDICTION ; //[nb_inst_decod]
     89  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IS_ACCURATE     ; //[nb_inst_decod]
    8990
    9091    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    134135#endif
    135136   Parameters                                  * param,
    136    morpheo::behavioural::Tusage_t                usage=USE_ALL
     137   morpheo::behavioural::Tusage_t                usage
    137138   );
    138139  public  :          ~Branch_Target_Buffer_Register             (void);
  • 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.cpp

    r81 r82  
    139139# endif
    140140
     141        if (_param->_have_port_victim)
     142          {
    141143        log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,"Method - genMealy_decod");
    142144
     
    161163            (*(out_DECOD_HIT [i])) (*(in_DECOD_CONTEXT_ID  [i]));
    162164
    163             if (_param->_have_port_victim)
    164               {
    165165            (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_VAL         [i]));
    166166            (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_ADDRESS_SRC [i]));
    167167            if (_param->_have_port_context_id)
    168168            (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_CONTEXT_ID  [i]));
    169               }
    170           }
    171 #endif
    172 
     169          }
     170          }
     171#endif
     172
     173        if (_param->_have_port_victim)
     174          {
    173175        log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,"Method - genMealy_update");
    174176
     
    193195            (*(out_UPDATE_HIT [i])) (*(in_UPDATE_CONTEXT_ID  [i]));
    194196
    195             if (_param->_have_port_victim)
    196               {
    197197            (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_VAL         [i]));
    198198            (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_ADDRESS_SRC [i]));
    199199            if (_param->_have_port_context_id)
    200200            (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_CONTEXT_ID  [i]));
    201               }
     201          }
    202202          }
    203203# endif
  • 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_allocation.cpp

    r81 r82  
    8484      ALLOC1_VALACK_IN ( in_DECOD_VAL            ,VAL);
    8585      ALLOC1_VALACK_OUT(out_DECOD_ACK            ,ACK);
     86      if (_param->_have_port_victim)
     87        {
    8688      ALLOC1_SIGNAL_OUT(out_DECOD_HIT            ,"hit"            ,Tcontrol_t         ,1);
    8789      ALLOC1_SIGNAL_OUT(out_DECOD_HIT_INDEX      ,"hit_index"      ,Tptr_t             ,_param->_size_victim);
    8890      ALLOC1_SIGNAL_IN ( in_DECOD_VICTIM         ,"victim"         ,Tptr_t             ,_param->_size_victim);
     91        }
    8992      ALLOC1_SIGNAL_IN ( in_DECOD_CONTEXT_ID     ,"context_id"     ,Tcontext_t         ,_param->_size_context_id);
    9093      ALLOC1_SIGNAL_IN ( in_DECOD_ADDRESS_SRC    ,"address_src"    ,Tgeneral_data_t    ,_param->_size_address);
     
    9396      ALLOC1_SIGNAL_IN ( in_DECOD_LAST_TAKE      ,"last_take"      ,Tcontrol_t         ,1);
    9497      ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
     98      ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE    ,"is_accurate"    ,Tcontrol_t         ,1);
    9599    }
    96100
     
    101105      ALLOC1_VALACK_IN ( in_UPDATE_VAL            ,VAL);
    102106      ALLOC1_VALACK_OUT(out_UPDATE_ACK            ,ACK);
     107      if (_param->_have_port_victim)
     108        {
    103109      ALLOC1_SIGNAL_OUT(out_UPDATE_HIT            ,"hit"            ,Tcontrol_t         ,1);
    104110      ALLOC1_SIGNAL_OUT(out_UPDATE_HIT_INDEX      ,"hit_index"      ,Tptr_t             ,_param->_size_victim);
    105111      ALLOC1_SIGNAL_IN ( in_UPDATE_VICTIM         ,"victim"         ,Tptr_t             ,_param->_size_victim);
     112        }
    106113      ALLOC1_SIGNAL_IN ( in_UPDATE_CONTEXT_ID     ,"context_id"     ,Tcontext_t         ,_param->_size_context_id);
    107114      ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS_SRC    ,"address_src"    ,Tgeneral_data_t    ,_param->_size_address);
  • 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_deallocation.cpp

    r81 r82  
    5454        delete []  in_DECOD_LAST_TAKE       ;
    5555        delete []  in_DECOD_MISS_PREDICTION ;
     56        delete []  in_DECOD_IS_ACCURATE     ;
    5657        delete []  in_UPDATE_VAL            ;
    5758        delete [] out_UPDATE_ACK            ;
  • 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_genMealy_decod.cpp

    r81 r82  
    4848        internal_DECOD_NUM_ENTRY [i] = num_entry;
    4949
     50        if (_param->_have_port_victim)
     51          {
    5052        PORT_WRITE(out_DECOD_HIT       [i], hit);
    51         if (_param->_have_port_victim)
    5253        PORT_WRITE(out_DECOD_HIT_INDEX [i], num_entry);
     54          }
    5355      }
    5456
  • 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_genMealy_update.cpp

    r81 r82  
    4848        internal_UPDATE_NUM_ENTRY [i] = num_entry;
    4949
     50        if (_param->_have_port_victim)
     51          {
    5052        PORT_WRITE(out_UPDATE_HIT [i], hit);
    51         if (_param->_have_port_victim)
    5253        PORT_WRITE(out_UPDATE_HIT_INDEX [i], num_entry);
     54          }
    5355      }
    5456
  • 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

    r81 r82  
    3232    else
    3333      {
     34        if (not _param->_have_port_victim)
     35          {
     36            genMealy_decod  ();
     37            genMealy_update ();
     38          }
     39
    3440        // =======================================================
    3541        // =====[ PREDICT ]=======================================
     
    6672                  reg_BTB[num_bank][num_entry]._condition        = cond;
    6773                  reg_BTB[num_bank][num_entry]._last_take        = PORT_READ(in_DECOD_LAST_TAKE    [i]);
    68                   reg_BTB[num_bank][num_entry]._accurate         = _param->_first_accurate_if_hit;
     74                  reg_BTB[num_bank][num_entry]._accurate         = (PORT_READ(in_DECOD_IS_ACCURATE [i]))?_param->_first_accurate_if_hit:_param->_first_accurate_if_miss;
    6975                }
    7076              // else (hit) : no update -> it's not the last result of the branch
     
    116122
    117123                  accurate_new =  (miss_pred)?_param->_first_accurate_if_miss:_param->_first_accurate_if_hit;
     124
     125                  reg_BTB[num_bank][num_entry]._val              = 1;
     126                  reg_BTB[num_bank][num_entry]._context          = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0;
     127                  reg_BTB[num_bank][num_entry]._address_src      = PORT_READ(in_UPDATE_ADDRESS_SRC  [i]);
     128                  reg_BTB[num_bank][num_entry]._condition        = PORT_READ(in_UPDATE_CONDITION    [i]);
     129                  reg_BTB[num_bank][num_entry]._last_take        = PORT_READ(in_UPDATE_LAST_TAKE    [i]);
    118130                }
    119131
    120132              // =====[ All Case ]
    121               reg_BTB[num_bank][num_entry]._val              = 1;
    122               reg_BTB[num_bank][num_entry]._context          = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0;
    123               reg_BTB[num_bank][num_entry]._address_src      = PORT_READ(in_UPDATE_ADDRESS_SRC  [i]);
    124               reg_BTB[num_bank][num_entry]._condition        = PORT_READ(in_UPDATE_CONDITION    [i]);
    125 
    126               reg_BTB[num_bank][num_entry]._address_dest_val = 1;
    127               reg_BTB[num_bank][num_entry]._address_dest     = PORT_READ(in_UPDATE_ADDRESS_DEST [i]);
    128               reg_BTB[num_bank][num_entry]._last_take        = PORT_READ(in_UPDATE_LAST_TAKE    [i]);
     133              if (reg_BTB[num_bank][num_entry]._address_dest_val == 0)
     134                {
     135                  reg_BTB[num_bank][num_entry]._address_dest_val = 1;
     136                  reg_BTB[num_bank][num_entry]._address_dest     = PORT_READ(in_UPDATE_ADDRESS_DEST [i]);
     137                }
    129138              reg_BTB[num_bank][num_entry]._accurate         = accurate_new;
    130139            }
Note: See TracChangeset for help on using the changeset viewer.