Changeset 122 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp
- Timestamp:
- Jun 3, 2009, 10:15:51 AM (15 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_decod.cpp
r120 r122 28 28 if (PORT_READ(in_NRESET) != 0) 29 29 { 30 // for each decod instruction 30 31 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 31 32 { 32 33 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * DECOD [%d]",i); 33 34 34 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 35 bool is_accurate = _param->_accurate_block_decod or reg_IS_ACCURATE [context]; 36 event_state_t event_state = reg_EVENT_STATE [context]; 37 uint32_t ptr_write = reg_UPT_TOP [context]; 38 // can continue if next slot is empty 39 Tcontrol_t can_continue= ((reg_UPDATE_PREDICTION_TABLE [context][(reg_UPT_TOP [context]+1)%_param->_size_upt_queue[context]]._state == UPDATE_PREDICTION_STATE_EMPTY) and 40 (reg_EVENT_STATE [context] == EVENT_STATE_OK)); 35 // Read information 36 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 37 bool is_accurate = (_param->_always_accurate_decod or 38 (_param->_can_accurate_decod and reg_IS_ACCURATE [context])); 39 upt_event_state_t upt_event_state = reg_UPT_EVENT_STATE [context]; 40 ufpt_event_state_t ufpt_event_state = reg_UFPT_EVENT_STATE [context]; 41 uint32_t ptr_write = reg_UPT_TOP [context]; // One branch per context per cycle 42 uint32_t ptr_write_next = (ptr_write+1)%_param->_size_upt_queue[context]; 43 // Decod can continue until the next branch if next slot is empty, and no event 44 Tcontrol_t can_continue = (reg_UPDATE_PREDICTION_TABLE [context][ptr_write_next]._state == UPDATE_PREDICTION_STATE_EMPTY); 41 45 42 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context ); 43 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * is_accurate : %d",is_accurate); 44 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * event_state : %s",toString(event_state).c_str()); 45 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * ptr_write : %d",ptr_write ); 46 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * upt_state : %s",toString(reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state).c_str()); 47 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * can_continue: %d",can_continue); 46 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 47 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * is_accurate : %d",is_accurate); 48 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * ufpt_event_state : %s",toString(ufpt_event_state).c_str()); 49 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * upt_event_state : %s",toString(upt_event_state).c_str()); 50 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * ptr_write : %d - %d",ptr_write,ptr_write_next); 51 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * upt_state : %s",toString(reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state).c_str()); 52 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * can_continue : %d",can_continue); 48 53 49 // ack:54 // can decod (ack) if : 50 55 // * in all case (miss or hit), need empty slot 56 // * not previous event (state = ok) 51 57 // * is_accurate 52 // * event_state : don't update upt53 58 internal_DECOD_ACK [i] = ((reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state == UPDATE_PREDICTION_STATE_EMPTY) and 54 is_accurate and 55 // ( 56 (event_state == EVENT_STATE_OK)// or 57 // (event_state == EVENT_STATE_MISS_FLUSH_UFPT ) or 58 // (event_state == EVENT_STATE_UPDATE_CONTEXT)) 59 ); 59 (ufpt_event_state == UFPT_EVENT_STATE_OK) and 60 (upt_event_state == UPT_EVENT_STATE_OK ) and 61 is_accurate); 60 62 internal_DECOD_UPT_PTR_WRITE [i] = ptr_write; 61 63 62 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * ack : %d",internal_DECOD_ACK [i]);64 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * ack : %d",internal_DECOD_ACK [i]); 63 65 64 66 PORT_WRITE(out_DECOD_ACK [i], internal_DECOD_ACK [i]);
Note: See TracChangeset
for help on using the changeset viewer.