Ignore:
Timestamp:
Jan 21, 2009, 10:53:13 PM (15 years ago)
Author:
rosiere
Message:

Fix Bug :
1) Load Store Unit : check big endian
2) Commit unit & RAT : add retire_event interface

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp

    r101 r104  
    4141          for (uint32_t j=0; j<_param->_nb_context [i]; j++)
    4242            {
    43               reg_NB_INST_COMMIT_ALL [i][j] = 0;
    44               reg_NB_INST_COMMIT_MEM [i][j] = 0;
    45 
    46               reg_EVENT_STATE        [i][j] = EVENT_STATE_NO_EVENT;
     43              reg_NB_INST_COMMIT_ALL    [i][j] = 0;
     44              reg_NB_INST_COMMIT_MEM    [i][j] = 0;
     45                                       
     46              reg_EVENT_STATE           [i][j] = EVENT_STATE_NO_EVENT;
     47              reg_EVENT_FLUSH           [i][j] = false;
     48
     49//            reg_PC_PREVIOUS           [i][j] = (0x100-4)>>2;
     50              reg_PC_CURRENT            [i][j] = (0x100  )>>2;
     51              reg_PC_CURRENT_IS_DS      [i][j] = 0;
     52              reg_PC_CURRENT_IS_DS_TAKE [i][j] = 0;
     53//            reg_PC_NEXT               [i][j] = (0x100+4)>>2;
    4754            }
    4855
     
    6269            switch (reg_EVENT_STATE [i][j])
    6370              {
    64               case EVENT_STATE_EVENT    : reg_EVENT_STATE [i][j] = EVENT_STATE_WAITEND ; break;
    65               case EVENT_STATE_END      : reg_EVENT_STATE [i][j] = EVENT_STATE_NO_EVENT; break;
     71              case EVENT_STATE_EVENT    :
     72                {
     73                  if (internal_RETIRE_EVENT_VAL [i][j] and in_RETIRE_EVENT_ACK [i][j])
     74                    reg_EVENT_STATE [i][j] = EVENT_STATE_WAITEND ;
     75                  break;
     76                }
     77              case EVENT_STATE_WAITEND  :
     78                {
     79                  if (reg_NB_INST_COMMIT_ALL [i][j] == 0)
     80                    {
     81                      reg_EVENT_STATE [i][j] = EVENT_STATE_END;
     82                      reg_EVENT_FLUSH [i][j] = false;
     83                    }
     84                  break;
     85                }
     86              case EVENT_STATE_END      :
     87                {
     88                  reg_EVENT_STATE [i][j] = EVENT_STATE_NO_EVENT;
     89                  break;
     90                }
    6691//            case EVENT_STATE_NO_EVENT :
    67 //            case EVENT_STATE_WAITEND  :
    6892              default : break;
    6993              }
     
    324348                {
    325349                  reg_EVENT_STATE [front_end_id][context_id] = EVENT_STATE_EVENT;
    326 
    327                   // !!!!!!!!!!! Compute address
     350                  reg_EVENT_FLUSH [front_end_id][context_id] = true;
     351
     352                  // TODO Compute address !!!!!!!!!!!
    328353                }
    329354             
     
    332357              if (type == TYPE_MEMORY)
    333358                reg_NB_INST_COMMIT_MEM [front_end_id][context_id] --;
    334 
    335               if (reg_NB_INST_COMMIT_ALL [front_end_id][context_id] == 0)
    336                 reg_EVENT_STATE [front_end_id][context_id] = EVENT_STATE_END;
    337359
    338360              reg_NUM_BANK_HEAD = (reg_NUM_BANK_HEAD+1)%_param->_nb_bank;
     
    416438
    417439              Tdepth_t     depth_min    = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MIN[front_end_id][context_id]):0;
    418               Tdepth_t     depth_max    = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX[front_end_id][context_id]):0;
    419               Tcontrol_t   depth_full   = PORT_READ(in_DEPTH_FULL [front_end_id][context_id]);
     440//               Tdepth_t     depth_max    = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX[front_end_id][context_id]):0;
     441//               Tcontrol_t   depth_full   = PORT_READ(in_DEPTH_FULL [front_end_id][context_id]);
    420442             
    421443              // is a valid instruction ?
     
    433455              // ....... max ...X... min ....... KO
    434456             
    435               Tcontrol_t   is_valid      = ((depth == depth_min) or
    436                                             depth_full or
    437                                             ((depth_min <= depth_max)?
    438                                              ((depth >= depth_min) and (depth <=depth_max)):
    439                                              ((depth >= depth_min) or  (depth <=depth_max))));
     457//               Tcontrol_t   is_valid      = ((depth == depth_min) or
     458//                                             depth_full or
     459//                                             ((depth_min <= depth_max)?
     460//                                              ((depth >= depth_min) and (depth <=depth_max)):
     461//                                              ((depth >= depth_min) or  (depth <=depth_max))));
     462
     463              bool         flush         = reg_EVENT_FLUSH [front_end_id][context_id];
     464              Tcontrol_t   is_valid      = ((depth == depth_min) and not flush);
    440465
    441466              log_printf(TRACE,Commit_unit,FUNCTION,"  * HEAD              [%d]",i);
     
    443468              log_printf(TRACE,Commit_unit,FUNCTION,"    * depth           : %d",depth    );
    444469              log_printf(TRACE,Commit_unit,FUNCTION,"    * depth_min       : %d",depth_min);
    445               log_printf(TRACE,Commit_unit,FUNCTION,"    * depth_max       : %d",depth_max);
     470//               log_printf(TRACE,Commit_unit,FUNCTION,"    * depth_max       : %d",depth_max);
     471              log_printf(TRACE,Commit_unit,FUNCTION,"    * flush           : %d",flush);
    446472
    447473              //------------------------------------------------------
     
    522548    for (uint32_t i=0; i<_param->_nb_front_end; i++)
    523549      for (uint32_t j=0; j<_param->_nb_context [i]; j++)
    524         log_printf(TRACE,Commit_unit,FUNCTION,"    * num_inst[%d][%d] all : %d, mem : %d",i,j,reg_NB_INST_COMMIT_ALL[i][j],reg_NB_INST_COMMIT_MEM[i][j]);
     550        {
     551          log_printf(TRACE,Commit_unit,FUNCTION,"    * [%d][%d] num_inst_all : %d, num_inst_mem : %d",i,j,reg_NB_INST_COMMIT_ALL[i][j],reg_NB_INST_COMMIT_MEM[i][j]);
     552          log_printf(TRACE,Commit_unit,FUNCTION,"    * [%d][%d] state        : %s",i,j,toString(reg_EVENT_STATE [i][j]).c_str());
     553        }
    525554       
    526555    for (uint32_t i=0; i<_param->_nb_bank; i++)
    527556      {
    528         log_printf(TRACE,Commit_unit,FUNCTION,"    * Bank[%d] size : %d, ptr : %d",i,(int)_rob[i].size(), reg_BANK_PTR [i]);
     557        log_printf(TRACE,Commit_unit,FUNCTION,"    * Bank [%d] size : %d, ptr : %d",i,(int)_rob[i].size(), reg_BANK_PTR [i]);
    529558
    530559#ifdef STATISTICS
Note: See TracChangeset for help on using the changeset viewer.