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

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit
Files:
4 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/SelfTest/src/test.cpp

    r104 r106  
    245245              in_INSERT_WRITE_RE        [i]->write(rand() % 2);
    246246              in_INSERT_NUM_REG_RD_LOG  [i]->write((rand() % (_param->_nb_general_register_logic-1))+1);
    247               in_INSERT_NUM_REG_RE_LOG  [i]->write( rand() %  _param->_nb_special_register_logic);
    248               in_INSERT_NUM_REG_RD_PHY  [i]->write(rand() % _param->_nb_general_register);
    249               in_INSERT_NUM_REG_RE_PHY  [i]->write(rand() % _param->_nb_special_register);
     247              in_INSERT_NUM_REG_RE_LOG  [i]->write( rand() %  _param->_nb_special_register_logic      );
     248              in_INSERT_NUM_REG_RD_PHY  [i]->write((rand() % (_param->_nb_general_register      -1))+1);
     249              in_INSERT_NUM_REG_RE_PHY  [i]->write( rand() %  _param->_nb_special_register            );
    250250            }
    251251
     
    285285              if (in_INSERT_VAL [i]->read() and out_INSERT_ACK [i]->read())
    286286                {
     287                  // ERROR BECAUSE write same register
    287288                  if (in_INSERT_WRITE_RD [i]->read() == 1)
    288289                    rat_gpr[front_end_id][context_id][in_INSERT_NUM_REG_RD_LOG[i]->read()] = in_INSERT_NUM_REG_RD_PHY[i]->read();
  • 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.cpp

    r104 r106  
    154154        for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    155155          for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
    156             sensitive << (*(in_RETIRE_EVENT_STATE [i][j]));
     156            sensitive << (*(in_RETIRE_EVENT_VAL   [i][j]))
     157                      << (*(in_RETIRE_EVENT_STATE [i][j]));
    157158       
    158159# ifdef SYSTEMCASS_SPECIFIC
  • 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_genMealy_retire.cpp

    r104 r106  
    3030      for (uint32_t j=0; j<_param->_nb_context[i]; j++)
    3131        {
     32          // An event occure
     33          bool no_event = not (PORT_READ(in_RETIRE_EVENT_STATE [i][j]) and (PORT_READ(in_RETIRE_EVENT_STATE [i][j]) == EVENT_STATE_EVENT));
    3234          for (uint32_t k=0; k<_param->_nb_general_register_logic; ++k)
    33             internal_rat_gpr_update_table [i][j][k] = rat_gpr_update_table [i][j][k];
     35            internal_rat_gpr_update_table [i][j][k] = rat_gpr_update_table [i][j][k] and no_event;
    3436          for (uint32_t k=0; k<_param->_nb_special_register_logic; ++k)
    35             internal_rat_spr_update_table [i][j][k] = rat_spr_update_table [i][j][k];
     37            internal_rat_spr_update_table [i][j][k] = rat_spr_update_table [i][j][k] and no_event;
    3638        }
    3739
  • 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.