Ignore:
Timestamp:
Feb 5, 2009, 12:18:31 PM (15 years ago)
Author:
rosiere
Message:

1) Bug fix : Load Miss Speculation (in Commit_unit, Update Prediction Table and Context State)
2) Change address, in rob write address_next.
3) Move Meta_Predictor in save directory

File:
1 edited

Legend:

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

    r104 r105  
    9999                      if (_param->_have_port_depth)
    100100                      PORT_WRITE(out_BRANCH_COMPLETE_DEPTH        [i], entry->depth           );
    101                       PORT_WRITE(out_BRANCH_COMPLETE_ADDRESS      [i], entry->data_commit     );
     101                      PORT_WRITE(out_BRANCH_COMPLETE_ADDRESS      [i], entry->address_next    );
    102102//                    PORT_WRITE(out_BRANCH_COMPLETE_FLAG         [i],(entry->flags&FLAG_F)!=0);
    103103                      PORT_WRITE(out_BRANCH_COMPLETE_NO_SEQUENCE  [i], entry->no_sequence     );
     
    117117    // ===================================================================
    118118    {
    119       Tcontrol_t val = false;
    120 
    121       if (not _rob[reg_NUM_BANK_HEAD].empty())
    122         {
    123           entry_t    * entry = _rob [reg_NUM_BANK_HEAD].front();
    124           rob_state_t  state = entry->state;
    125 
    126           val   = (state == ROB_END_EXCEPTION);
    127          
    128           if (val)
    129             {
    130               throw ERRORMORPHEO(FUNCTION,_("Moore : exception is not yet supported (Coming Soon).\n"));
    131             }
    132         }
     119      internal_UPDATE_VAL = 0;
     120      internal_UPDATE_NUM_BANK = reg_NUM_BANK_HEAD;
     121
     122      if (not _rob[internal_UPDATE_NUM_BANK].empty())
     123        {
     124          log_printf(TRACE,Commit_unit,FUNCTION,"  * UPDATE");
     125          log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank : %d",internal_UPDATE_NUM_BANK);
     126
     127          entry_t * entry = _rob [internal_UPDATE_NUM_BANK].front();
     128
     129          switch (entry->state)
     130            {
     131            case ROB_END_EXCEPTION_UPDATE :
     132              {
     133                internal_UPDATE_VAL = 1;
     134                throw ERRORMORPHEO(FUNCTION,_("Moore : exception is not yet supported (Coming Soon).\n"));
     135                break;
     136              }
     137            case ROB_END_LOAD_MISS_UPDATE :
     138              {
     139                log_printf(TRACE,Commit_unit,FUNCTION,"    * ROB_END_LOAD_MISS_UPDATE");
     140
     141                internal_UPDATE_VAL = 1;
     142
     143                Tcontext_t front_end_id = entry->front_end_id;
     144                Tcontext_t context_id   = entry->context_id  ;
     145
     146                log_printf(TRACE,Commit_unit,FUNCTION,"      * front_end_id : %d",front_end_id);
     147                log_printf(TRACE,Commit_unit,FUNCTION,"      * context_id   : %d",context_id  );
     148
     149                if (_param->_have_port_front_end_id)
     150                PORT_WRITE(out_UPDATE_FRONT_END_ID    ,front_end_id);
     151                if (_param->_have_port_context_id)
     152                PORT_WRITE(out_UPDATE_CONTEXT_ID      ,context_id  );
     153                if (_param->_have_port_depth)
     154                PORT_WRITE(out_UPDATE_DEPTH           ,entry->depth);
     155                PORT_WRITE(out_UPDATE_TYPE            ,EVENT_TYPE_LOAD_MISS_SPECULATION);
     156//                 PORT_WRITE(out_UPDATE_IS_DELAY_SLOT   ,reg_PC_CURRENT_IS_DS      [front_end_id][context_id]);
     157//                 PORT_WRITE(out_UPDATE_ADDRESS         ,reg_PC_CURRENT            [front_end_id][context_id]);
     158//                 PORT_WRITE(out_UPDATE_ADDRESS_EPCR_VAL,reg_PC_CURRENT_IS_DS_TAKE [front_end_id][context_id]);
     159//                 PORT_WRITE(out_UPDATE_ADDRESS_EPCR    ,reg_PC_NEXT               [front_end_id][context_id]);
     160//                 PORT_WRITE(out_UPDATE_ADDRESS_EEAR_VAL,0);
     161// //              PORT_WRITE(out_UPDATE_ADDRESS_EEAR    ,);
     162
     163                PORT_WRITE(out_UPDATE_IS_DELAY_SLOT   ,0);
     164                PORT_WRITE(out_UPDATE_ADDRESS         ,reg_PC_NEXT [front_end_id][context_id]);
     165                PORT_WRITE(out_UPDATE_ADDRESS_EPCR_VAL,0);
     166//              PORT_WRITE(out_UPDATE_ADDRESS_EPCR    ,);
     167                PORT_WRITE(out_UPDATE_ADDRESS_EEAR_VAL,0);
     168//              PORT_WRITE(out_UPDATE_ADDRESS_EEAR    ,);
     169
     170                break;
     171              }
     172            default :
     173              {
     174//                 internal_UPDATE_VAL = 0;
     175              }
     176            }
     177        }
     178     
     179      PORT_WRITE(out_UPDATE_VAL, internal_UPDATE_VAL);
     180
     181      log_printf(TRACE,Commit_unit,FUNCTION,"  * UPDATE (end)");
    133182    }
    134183 
Note: See TracChangeset for help on using the changeset viewer.