Ignore:
Timestamp:
Jun 3, 2009, 10:15:51 AM (15 years ago)
Author:
rosiere
Message:

Modif for performance :
1) Load Store Unit : store send request to valid exeception
2) Commit_unit : retire can bypass store
3) Commit_unit : add stat to manage store instruction
4) Load Store Unit and Load Store Pointer Manager : add store_queue_ptr_read
5) Fix lot of bug

File:
1 edited

Legend:

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

    r121 r122  
    5656
    5757        }
     58
    5859    // Scan Top of each bank
    5960    internal_BANK_RETIRE_HEAD = reg_NUM_BANK_HEAD;
     
    6263        uint32_t num_bank = (internal_BANK_RETIRE_HEAD+i)%_param->_nb_bank;
    6364
     65        // Test if have instruction
    6466        if (not _rob[num_bank].empty())
    6567          {
     
    6870            uint32_t   x     = entry->rename_unit_id;
    6971            uint32_t   y     = num_inst_retire [x];
    70        
     72            bool       bypass= false;
    7173            // test if :
    7274            //  * can retire (all previous instruction is retired)
     
    7779              {
    7880                rob_state_t state        = entry->state;
     81                Tcontext_t  front_end_id = entry->front_end_id;
     82                Tcontext_t  context_id   = entry->context_id; 
     83               
    7984                  if ((state == ROB_END_OK         ) or
    8085                      (state == ROB_END_KO         ) or
     
    8792                      Tcontrol_t         write_re       = entry->write_re;
    8893                      Tspecial_address_t num_reg_re_log = entry->num_reg_re_log;
    89                       Tcontext_t         front_end_id   = entry->front_end_id;
    90                       Tcontext_t         context_id     = entry->context_id; 
    9194                     
    9295                      // if state is ok, when write flags in the SR regsiters
     
    173176                        can_retire [x] = false;
    174177                    }
     178
     179                  bypass = ((state == ROB_END              ) or
     180                            (state == ROB_STORE_OK         ) or
     181                            (state == ROB_STORE_KO         ) or
     182                            (state == ROB_STORE_OK_WAIT_END) or
     183                            (state == ROB_STORE_KO_WAIT_END));
     184                 
     185                  uint32_t packet = ((entry->ptr << _param->_shift_num_slot) | num_bank);
     186
     187                  // if future event, don't update after this event
     188                  if (reg_EVENT_STOP [front_end_id][context_id] and
     189                      (reg_EVENT_PACKET [entry->front_end_id][entry->context_id]  == packet))
     190                    bypass = false;
    175191              }
    176192
    177193            // Retire "in-order"
    178             can_retire [x] &= retire_val [x][y];
     194            can_retire [x]  &= (retire_val [x][y] or bypass);
    179195          }
    180196      }
Note: See TracChangeset for help on using the changeset viewer.