Ignore:
Timestamp:
Dec 10, 2008, 7:31:39 PM (15 years ago)
Author:
rosiere
Message:

Almost complete design
with Test and test platform

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_transition.cpp

    r81 r88  
    2020
    2121#ifdef  SYSTEMC_VHDL_COMPATIBILITY
    22 #define dump_queue() \
    23   do\
    24   {\
    25    log_printf(TRACE,Reservation_station,FUNCTION," * dump queue");\
    26    log_printf(TRACE,Reservation_station,FUNCTION,"   * nb_elt : %d",_queue_nb_elt);\
    27    for (uint32_t j=0;j<_param->_size_queue; j++)\
    28    {\
    29      cout << "\t"\
    30           << "[" << j << "] "\
    31           << "{" << _queue[j]._rob_id << " - "<< _queue[j]._context_id << "} " << " - "<< _queue[j]._front_end_id << "} " << " - "<< _queue[j]._ooo_engine_id << "} "\
    32           << _queue[j]._data_ra_val << ", "\
    33           << _queue[j]._num_reg_ra  << " - "\
    34           << _queue[j]._data_rb_val << ","\
    35           << _queue[j]._num_reg_rb  << " - "\
    36           << _queue[j]._data_rc_val << ","\
    37           << _queue[j]._num_reg_rc  \
    38           << endl;\
    39     }\
    40   } while (0)
    41 #else
    42 #define dump_queue() \
    43   do\
    44   {\
    45    log_printf(TRACE,Reservation_station,FUNCTION," * dump queue");\
    46    log_printf(TRACE,Reservation_station,FUNCTION,"   * nb_elt : %d",_queue_nb_elt);\
    47    for (uint32_t j=0;j<_param->_size_queue; j++)\
    48    {\
    49      cout << "\t"\
    50           << "[" << (*_queue_control)[j] << "] "\
    51           << "{" << _queue[(*_queue_control)[j]]._rob_id << " - "<< _queue[(*_queue_control)[j]]._context_id << "} " << " - "<< _queue[(*_queue_control)[j]]._front_end_id << "} " << " - "<< _queue[(*_queue_control)[j]]._ooo_engine_id << "} "\
    52           << _queue[(*_queue_control)[j]]._data_ra_val << ", "\
    53           << _queue[(*_queue_control)[j]]._num_reg_ra  << " - "\
    54           << _queue[(*_queue_control)[j]]._data_rb_val << ","\
    55           << _queue[(*_queue_control)[j]]._num_reg_rb  << " - "\
    56           << _queue[(*_queue_control)[j]]._data_rc_val << ","\
    57           << _queue[(*_queue_control)[j]]._num_reg_rc  \
    58           << endl;\
    59     }\
    60   } while (0)
     22#define dump_queue()                                                    \
     23  do                                                                    \
     24    {                                                                   \
     25      log_printf(TRACE,Reservation_station,FUNCTION,"  * Dump Reservation Station");  \
     26      for (uint32_t it_dump=0;it_dump<_param->_size_queue; it_dump++)   \
     27        log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
     28                   it_dump,                                             \
     29                   _queue[it_dump]._context_id           ,              \
     30                   _queue[it_dump]._front_end_id         ,              \
     31                   _queue[it_dump]._ooo_engine_id        ,              \
     32                   _queue[it_dump]._rob_id               ,              \
     33                   _queue[it_dump]._type                 ,              \
     34                   _queue[it_dump]._operation            ,              \
     35                   _queue[it_dump]._store_queue_ptr_write,              \
     36                   _queue[it_dump]._load_queue_ptr_write ,              \
     37                   _queue[it_dump]._has_immediat         ,              \
     38                   _queue[it_dump]._immediat             ,              \
     39                   _queue[it_dump]._num_reg_ra           ,              \
     40                   _queue[it_dump]._data_ra_val          ,              \
     41                   _queue[it_dump]._data_ra              ,              \
     42                   _queue[it_dump]._num_reg_rb           ,              \
     43                   _queue[it_dump]._data_rb_val          ,              \
     44                   _queue[it_dump]._data_rb              ,              \
     45                   _queue[it_dump]._num_reg_rc           ,              \
     46                   _queue[it_dump]._data_rc_val          ,              \
     47                   _queue[it_dump]._data_rc              ,              \
     48                   _queue[it_dump]._write_rd             ,              \
     49                   _queue[it_dump]._num_reg_rd           ,              \
     50                   _queue[it_dump]._write_re             ,              \
     51                   _queue[it_dump]._num_reg_re           ,              \
     52                   toString_type(_queue[it_dump]._type).c_str());       \
     53    } while (0)
     54#else
     55#define dump_queue()                                                    \
     56  do                                                                    \
     57    {                                                                   \
     58      log_printf(TRACE,Reservation_station,FUNCTION,"  * Dump Reservation Station"); \
     59      log_printf(TRACE,Reservation_station,FUNCTION,"    * nb_elt : %d",_queue_control->nb_elt()); \
     60      for (uint32_t it_dump=0;it_dump<_param->_size_queue; it_dump++)   \
     61        log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
     62                   (*_queue_control)[it_dump],                          \
     63                   _queue[(*_queue_control)[it_dump]]._context_id           , \
     64                   _queue[(*_queue_control)[it_dump]]._front_end_id         , \
     65                   _queue[(*_queue_control)[it_dump]]._ooo_engine_id        , \
     66                   _queue[(*_queue_control)[it_dump]]._rob_id               , \
     67                   _queue[(*_queue_control)[it_dump]]._type                 , \
     68                   _queue[(*_queue_control)[it_dump]]._operation            , \
     69                   _queue[(*_queue_control)[it_dump]]._store_queue_ptr_write, \
     70                   _queue[(*_queue_control)[it_dump]]._load_queue_ptr_write , \
     71                   _queue[(*_queue_control)[it_dump]]._has_immediat         , \
     72                   _queue[(*_queue_control)[it_dump]]._immediat             , \
     73                   _queue[(*_queue_control)[it_dump]]._num_reg_ra           , \
     74                   _queue[(*_queue_control)[it_dump]]._data_ra_val          , \
     75                   _queue[(*_queue_control)[it_dump]]._data_ra              , \
     76                   _queue[(*_queue_control)[it_dump]]._num_reg_rb           , \
     77                   _queue[(*_queue_control)[it_dump]]._data_rb_val          , \
     78                   _queue[(*_queue_control)[it_dump]]._data_rb              , \
     79                   _queue[(*_queue_control)[it_dump]]._num_reg_rc           , \
     80                   _queue[(*_queue_control)[it_dump]]._data_rc_val          , \
     81                   _queue[(*_queue_control)[it_dump]]._data_rc              , \
     82                   _queue[(*_queue_control)[it_dump]]._write_rd             , \
     83                   _queue[(*_queue_control)[it_dump]]._num_reg_rd           , \
     84                   _queue[(*_queue_control)[it_dump]]._write_re             , \
     85                   _queue[(*_queue_control)[it_dump]]._num_reg_re           , \
     86                   toString_type(_queue[(*_queue_control)[it_dump]]._type).c_str());       \
     87    } while (0)
    6188#endif
    6289
     
    6592  void Reservation_station::transition (void)
    6693  {
    67     log_printf(FUNC,Reservation_station,FUNCTION,"Begin");
     94    log_begin(Reservation_station,FUNCTION);
     95    log_function(Reservation_station,FUNCTION,_name.c_str());
    6896
    6997    if (PORT_READ(in_NRESET) == 0)
     
    89117                //uint32_t index = (*_queue_control)[i];
    90118
    91                 log_printf(NONE,Reservation_station,FUNCTION,"POP  [%d]",i);
     119                log_printf(NONE,Reservation_station,FUNCTION,"  * POP  [%d]",i);
    92120
    93121                uint32_t index  = internal_RETIRE_SLOT[i];
     
    102130//                   << " * index       : " << index << endl;
    103131
    104                 log_printf(NONE,Reservation_station,FUNCTION," * index         : %d",index);
     132                log_printf(NONE,Reservation_station,FUNCTION,"    * index         : %d",index);
    105133              }
    106134          }
     
    140168                    if (PORT_READ(in_GPR_WRITE_NUM_REG [j]) == _queue[index]._num_reg_ra)
    141169                      {
    142                         log_printf(TRACE,Reservation_station,FUNCTION," -> GPR_WRITE     [%d] - Hit queue[%d]-GPR_RA[%d]",i,index,_queue[index]._num_reg_ra);
     170                        log_printf(TRACE,Reservation_station,FUNCTION,"    -> GPR_WRITE     [%d] - Hit queue[%d]-GPR_RA[%d]",i,index,_queue[index]._num_reg_ra);
    143171                        _queue[index]._data_ra_val = 1;
    144172                        _queue[index]._data_ra     = PORT_READ(in_GPR_WRITE_DATA [j]);
     
    146174                    if (PORT_READ(in_GPR_WRITE_NUM_REG [j]) == _queue[index]._num_reg_rb)
    147175                      {
    148                         log_printf(TRACE,Reservation_station,FUNCTION," -> GPR_WRITE     [%d] - Hit queue[%d]-GPR_RB[%d]",i,index,_queue[index]._num_reg_rb);
     176                        log_printf(TRACE,Reservation_station,FUNCTION,"    -> GPR_WRITE     [%d] - Hit queue[%d]-GPR_RB[%d]",i,index,_queue[index]._num_reg_rb);
    149177                        _queue[index]._data_rb_val = 1;
    150178                        _queue[index]._data_rb     = PORT_READ(in_GPR_WRITE_DATA [j]);
     
    165193                    (PORT_READ(in_SPR_WRITE_NUM_REG       [j]) == _queue[index]._num_reg_rc))
    166194                  {
    167                     log_printf(TRACE,Reservation_station,FUNCTION," -> SPR_WRITE     [%d] - Hit queue[%d]-SPR_RC[%d]",i,index,_queue[index]._num_reg_rc);
     195                    log_printf(TRACE,Reservation_station,FUNCTION,"    -> SPR_WRITE     [%d] - Hit queue[%d]-SPR_RC[%d]",i,index,_queue[index]._num_reg_rc);
    168196                    _queue[index]._data_rc_val = 1;
    169197                    _queue[index]._data_rc     = PORT_READ(in_SPR_WRITE_DATA [j]);
     
    185213                    if (PORT_READ(in_BYPASS_WRITE_GPR_NUM_REG[j]) == _queue[index]._num_reg_ra)
    186214                      {
    187                         log_printf(TRACE,Reservation_station,FUNCTION," -> BYPASS_WRITE  [%d] - Hit queue[%d]-GPR_RA[%d]",i,index,_queue[index]._num_reg_ra);
     215                        log_printf(TRACE,Reservation_station,FUNCTION,"    -> BYPASS_WRITE  [%d] - Hit queue[%d]-GPR_RA[%d]",i,index,_queue[index]._num_reg_ra);
    188216                        _queue[index]._data_ra_val = 1;
    189217                        _queue[index]._data_ra     = PORT_READ(in_BYPASS_WRITE_GPR_DATA [j]);
     
    191219                    if (PORT_READ(in_BYPASS_WRITE_GPR_NUM_REG [j]) == _queue[index]._num_reg_rb)
    192220                      {
    193                         log_printf(TRACE,Reservation_station,FUNCTION," -> BYPASS_WRITE  [%d] - Hit queue[%d]-GPR_RB[%d]",i,index,_queue[index]._num_reg_rb);
     221                        log_printf(TRACE,Reservation_station,FUNCTION,"    -> BYPASS_WRITE  [%d] - Hit queue[%d]-GPR_RB[%d]",i,index,_queue[index]._num_reg_rb);
    194222                        _queue[index]._data_rb_val = 1;
    195223                        _queue[index]._data_rb     = PORT_READ(in_BYPASS_WRITE_GPR_DATA [j]);
     
    199227                        (PORT_READ(in_BYPASS_WRITE_SPR_NUM_REG[j]) == _queue[index]._num_reg_rc))
    200228                      {
    201                         log_printf(TRACE,Reservation_station,FUNCTION," -> BYPASS_WRITE  [%d] - Hit queue[%d]-SPR_RC[%d]",i,index,_queue[index]._num_reg_rc);
     229                        log_printf(TRACE,Reservation_station,FUNCTION,"    -> BYPASS_WRITE  [%d] - Hit queue[%d]-SPR_RC[%d]",i,index,_queue[index]._num_reg_rc);
    202230                        _queue[index]._data_rc_val = 1;
    203231                        _queue[index]._data_rc     = PORT_READ(in_BYPASS_WRITE_SPR_DATA [j]);
     
    218246                    if (PORT_READ(in_BYPASS_MEMORY_NUM_REG [j]) == _queue[index]._num_reg_ra)
    219247                      {
    220                         log_printf(TRACE,Reservation_station,FUNCTION," -> BYPASS_MEMORY [%d] - Hit queue[%d]-GPR_RA[%d]",i,index,_queue[index]._num_reg_ra);
     248                        log_printf(TRACE,Reservation_station,FUNCTION,"    -> BYPASS_MEMORY [%d] - Hit queue[%d]-GPR_RA[%d]",i,index,_queue[index]._num_reg_ra);
    221249                        _queue[index]._data_ra_val = 1;
    222250                        _queue[index]._data_ra     = PORT_READ(in_BYPASS_MEMORY_DATA [j]);
     
    224252                    if (PORT_READ(in_BYPASS_MEMORY_NUM_REG [j]) == _queue[index]._num_reg_rb)
    225253                      {
    226                         log_printf(TRACE,Reservation_station,FUNCTION," -> BYPASS_MEMORY [%d] - Hit queue[%d]-GPR_RB[%d]",i,index,_queue[index]._num_reg_rb);
     254                        log_printf(TRACE,Reservation_station,FUNCTION,"    -> BYPASS_MEMORY [%d] - Hit queue[%d]-GPR_RB[%d]",i,index,_queue[index]._num_reg_rb);
    227255                        _queue[index]._data_rb_val = 1;
    228256                        _queue[index]._data_rb     = PORT_READ(in_BYPASS_MEMORY_DATA [j]);
     
    235263            (    internal_INSERT_ACK  == 1))
    236264          {
    237             log_printf(TRACE,Reservation_station,FUNCTION,"PUSH");
     265            log_printf(TRACE,Reservation_station,FUNCTION,"  * PUSH");
    238266
    239267            // Write in reservation station
     
    246274            index = _queue_control->push();
    247275#endif
    248             log_printf(TRACE,Reservation_station,FUNCTION," * index         : %d",index);
     276            log_printf(TRACE,Reservation_station,FUNCTION,"    * index         : %d",index);
    249277
    250278            if (_param->_have_port_context_id)
     
    254282            if (_param->_have_port_ooo_engine_id)
    255283            _queue[index]._ooo_engine_id   = PORT_READ(in_INSERT_OOO_ENGINE_ID  );
    256             if (_param->_have_port_rob_id)
     284            if (_param->_have_port_rob_ptr)
    257285            _queue[index]._rob_id          = PORT_READ(in_INSERT_ROB_ID         );
    258286            _queue[index]._operation       = PORT_READ(in_INSERT_OPERATION      );
     
    283311      }
    284312
     313    dump_queue();
     314
    285315    end_cycle ();
    286316
    287     log_printf(FUNC,Reservation_station,FUNCTION,"End");
     317    log_end(Reservation_station,FUNCTION);
    288318  };
    289319
Note: See TracChangeset for help on using the changeset viewer.