Ignore:
Timestamp:
Feb 9, 2009, 11:55:26 PM (15 years ago)
Author:
rosiere
Message:

1) RAT : Fix bug when update and event in same cycle
2) Context State : Compute depth
3) Load Store Unit : In check logic, translate all access in little endian. More easy to check
4) UFPT : End Event

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit_transition.cpp

    r104 r106  
    6464              Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RENAME_FRONT_END_ID [i]):0;
    6565              Tcontext_t context_id   = (_param->_have_port_context_id  )?PORT_READ(in_RENAME_CONTEXT_ID   [i]):0;
     66
     67              log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * front_end      : %d",front_end_id);
     68              log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * context        : %d",context_id);
    6669             
    6770              // Test if write
     71              log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * write_rd       : %d",PORT_READ(in_INSERT_WRITE_RD [i]));
    6872              if (PORT_READ(in_INSERT_WRITE_RD [i]) == 1)
    69                 rat_gpr[front_end_id][context_id][PORT_READ(in_INSERT_NUM_REG_RD_LOG [i])] = PORT_READ(in_INSERT_NUM_REG_RD_PHY [i]);
     73                {
     74                  log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * num_reg_rd_phy : %d",PORT_READ(in_INSERT_NUM_REG_RD_PHY [i]));
     75                  rat_gpr[front_end_id][context_id][PORT_READ(in_INSERT_NUM_REG_RD_LOG [i])] = PORT_READ(in_INSERT_NUM_REG_RD_PHY [i]);
     76                }
     77
     78              log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * write_re       : %d",PORT_READ(in_INSERT_WRITE_RE [i]));
    7079              if (PORT_READ(in_INSERT_WRITE_RE [i]) == 1)
    71                 rat_spr[front_end_id][context_id][PORT_READ(in_INSERT_NUM_REG_RE_LOG [i])] = PORT_READ(in_INSERT_NUM_REG_RE_PHY [i]);
     80                {
     81                  log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * num_reg_re_phy : %d",PORT_READ(in_INSERT_NUM_REG_RE_PHY [i]));
     82                  rat_spr[front_end_id][context_id][PORT_READ(in_INSERT_NUM_REG_RE_LOG [i])] = PORT_READ(in_INSERT_NUM_REG_RE_PHY [i]);
     83                }
    7284            }
    7385
     
    109121              Tevent_state_t     event_state  = PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]);
    110122
     123              log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * front_end_id : %d",front_end_id);
     124              log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * context_id   : %d",context_id);
     125              log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * event_state  : %d",event_state);
     126
    111127              if (event_state != EVENT_STATE_NO_EVENT)
    112128                {
    113                   log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * front_end_id : %d",front_end_id);
    114                   log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * context_id   : %d",context_id);
    115                   log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * event_state  : %d",event_state);
    116 
    117129                  // Test if write and have not a previous update
    118130                  if (PORT_READ(in_RETIRE_WRITE_RD [i]) == 1)
     
    150162
    151163#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Register_Address_Translation_unit == true)
    152     log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"  * Dump RAT (Register_Address_Translation_unit)");
    153     for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    154       for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
    155         {
    156           log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * front_end[%d].context[%d]",i,j);
    157 
    158           for (uint32_t k=0; k<_param->_nb_general_register_logic; ++k)
    159             log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"      * GPR[%.4d] - %.5d %.1d",k,rat_gpr[i][j][k],rat_gpr_update_table[i][j][k]);
    160 
    161           for (uint32_t k=0; k<_param->_nb_special_register_logic; ++k)
    162             log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"      * SPR[%.4d] - %.5d %.1d",k,rat_spr[i][j][k],rat_spr_update_table[i][j][k]);
    163         }
     164    {
     165      uint32_t limit = 4;
     166     
     167      log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"  * Dump RAT (Register_Address_Translation_unit)");
     168      for (uint32_t i=0; i<_param->_nb_front_end; ++i)
     169        for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
     170          {
     171            log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * front_end[%d].context[%d]",i,j);
     172         
     173            for (uint32_t k=0; k<_param->_nb_general_register_logic; k+=limit)
     174              {
     175                std::string str = "";
     176                for (uint32_t x=0; x<limit; x++)
     177                  {
     178                    uint32_t index = k+x;
     179                    if (index >= _param->_nb_general_register_logic)
     180                      break;
     181                    else
     182                      str+=toString("GPR[%.4d] - %.5d %.1d | ",index,rat_gpr[i][j][index],rat_gpr_update_table[i][j][index]);
     183                  }
     184                log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"      * %s",str.c_str());
     185              }
     186     
     187            for (uint32_t k=0; k<_param->_nb_special_register_logic; k+=limit)
     188              {
     189                std::string str = "";
     190               
     191                for (uint32_t x=0; x<limit; x++)
     192                  {
     193                    uint32_t index = k+x;
     194                    if (index >= _param->_nb_special_register_logic)
     195                      break;
     196                    else
     197                      str+=toString("SPR[%.4d] - %.5d %.1d | ",index,rat_spr[i][j][index],rat_spr_update_table[i][j][index]);
     198                  }
     199                log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"      * %s",str.c_str());
     200              }
     201          }
     202    }
     203#endif
     204
     205#ifdef DEBUG_TEST
     206        if (1)
     207          {
     208            for (uint32_t i=0; i<_param->_nb_front_end; ++i)
     209              for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
     210                {
     211                  for (uint32_t x=0; x<_param->_nb_general_register_logic; ++x)
     212                    for (uint32_t y=x+1; y<_param->_nb_general_register_logic; ++y)
     213                      if (rat_gpr[i][j][x] == rat_gpr[i][j][y])
     214                        throw ERRORMORPHEO (FUNCTION,toString(_("In RAT, rat_gpr[%d][%d][%d] == rat_gpr[%d][%d][%d] == %d"),i,j,x,i,j,y,rat_gpr[i][j][x]));
     215                  for (uint32_t x=0; x<_param->_nb_special_register_logic; ++x)
     216                    for (uint32_t y=x+1; y<_param->_nb_special_register_logic; ++y)
     217                      if (rat_spr[i][j][x] == rat_spr[i][j][y])
     218                        throw ERRORMORPHEO (FUNCTION,toString(_("In RAT, rat_spr[%d][%d][%d] == rat_spr[%d][%d][%d] == %d"),i,j,x,i,j,y,rat_spr[i][j][x]));
     219                }
     220
     221          }
    164222#endif
    165223
Note: See TracChangeset for help on using the changeset viewer.