Changeset 88 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_predict.cpp
- Timestamp:
- Dec 10, 2008, 7:31:39 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_predict.cpp
r81 r88 22 22 void Update_Prediction_Table::genMealy_predict (void) 23 23 { 24 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin"); 25 24 log_begin(Update_Prediction_Table,FUNCTION); 25 log_function(Update_Prediction_Table,FUNCTION,_name.c_str()); 26 27 if (PORT_READ(in_NRESET) != 0) 28 { 29 26 30 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 27 31 { 28 32 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_PREDICT_CONTEXT_ID [i]):0; 29 uint32_t top = reg_ TOP[context];33 uint32_t top = reg_UFPT_TOP[context]; 30 34 31 //log_printf(TRACE,Update_Prediction_Table,FUNCTION,"PREDICT [%d] (genMealy)",i);32 //log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context);33 //log_printf(TRACE,Update_Prediction_Table,FUNCTION," * top : %d",top);34 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * state : %s",toString(reg_UPDATE_PREDICTION_TABLE [context][top]._state).c_str());35 //log_printf(TRACE,Update_Prediction_Table,FUNCTION," * is accurate : %d",PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]));35 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"PREDICT [%d] (genMealy)",i); 36 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 37 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * top : %d",top); 38 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * state : %s",toString(reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state).c_str()); 39 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * is accurate : %d",PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i])); 36 40 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * need update : %d",reg_NB_ELT_NEED_UPDATE [context]); 37 41 38 // Not Full, accurate and no previous miss 39 // Optimisation to restart faster : 40 // don't counter nb_elt_ko, but just nb_elt that need a update (change branch structure) 41 internal_PREDICT_ACK [i] = ((reg_UPDATE_PREDICTION_TABLE [context][top]._state == UPDATE_PREDICTION_STATE_EMPTY) and 42 PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]) and 43 (reg_NB_ELT_NEED_UPDATE [context] == 0)); 42 internal_PREDICT_UPDATE_PREDICTION_ID [i] = top; 44 43 45 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * ACK : %d",internal_PREDICT_ACK [i]); 44 if (_param->_have_port_depth) 45 PORT_WRITE(out_PREDICT_UPDATE_PREDICTION_ID [i], internal_PREDICT_UPDATE_PREDICTION_ID [i]); 46 46 47 bool is_accurate = not _param->_not_accurate_block_predict or reg_IS_ACCURATE[context]; 48 49 // Ack if : 50 // * slot is empty 51 // * no previous miss 52 // * is_accurate 53 internal_PREDICT_ACK [i] = ((reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state == UPDATE_FETCH_PREDICTION_STATE_EMPTY) and 54 // PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]) and 55 (reg_EVENT_STATE [context] == EVENT_STATE_OK) and 56 is_accurate); 57 58 59 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * ACK : %d",internal_PREDICT_ACK [i]); 47 60 PORT_WRITE(out_PREDICT_ACK [i], internal_PREDICT_ACK [i]); 48 61 } 49 62 50 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End"); 63 }//don't reset 64 65 log_end(Update_Prediction_Table,FUNCTION); 51 66 }; 52 67
Note: See TracChangeset
for help on using the changeset viewer.