- Timestamp:
- May 26, 2009, 9:01:47 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h
r119 r120 52 52 #ifdef STATISTICS 53 53 public : Stat * _stat; 54 private : counter_t ** _stat_nb_cycle_state_ok ; //[nb_context] 55 private : counter_t ** _stat_nb_cycle_state_ko_excep ; //[nb_context] 56 private : counter_t ** _stat_nb_cycle_state_ko_miss_branch ; //[nb_context] 57 private : counter_t ** _stat_nb_cycle_state_ko_miss_load ; //[nb_context] 58 private : counter_t ** _stat_nb_cycle_state_ko_miss_load_and_branch; //[nb_context] 59 private : counter_t ** _stat_nb_cycle_state_ko_msync ; //[nb_context] 60 private : counter_t ** _stat_nb_cycle_state_ko_psync ; //[nb_context] 61 private : counter_t ** _stat_nb_cycle_state_ko_csync ; //[nb_context] 62 private : counter_t ** _stat_nb_cycle_state_ko_spr ; //[nb_context] 54 63 #endif 55 64 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Types.h
r119 r120 29 29 CONTEXT_STATE_KO_EXCEP_ADDR , // update address manager 30 30 CONTEXT_STATE_KO_EXCEP_SPR , // update spr (epc, esr, sr[DSX]) 31 // CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR , // update address manager32 // CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE , // branch is complete, wait update by update_prediction_table33 31 CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE , // branch is complete, wait update by update_prediction_table 34 32 CONTEXT_STATE_KO_MISS_BRANCH_ADDR , // update address manager … … 68 66 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_ADDR : return "context_state_ko_excep_addr" ; break; 69 67 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_SPR : return "context_state_ko_excep_spr" ; break; 70 // case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE : return "context_state_ko_miss_branch_fast_wait_update" ; break;71 // case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR : return "context_state_ko_miss_branch_fast_addr" ; break;72 68 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE : return "context_state_ko_miss_branch_wait_update" ; break; 73 69 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_ADDR : return "context_state_ko_miss_branch_addr" ; break; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_allocation.cpp
r83 r120 8 8 9 9 #include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h" 10 #include "Behavioural/include/Allocation.h" 10 11 11 12 namespace morpheo { … … 26 27 "Context_State", 27 28 param_statistics); 28 29 30 ALLOC1(_stat_nb_cycle_state_ok ,counter_t *,_param->_nb_context); 31 ALLOC1(_stat_nb_cycle_state_ko_excep ,counter_t *,_param->_nb_context); 32 ALLOC1(_stat_nb_cycle_state_ko_miss_branch ,counter_t *,_param->_nb_context); 33 ALLOC1(_stat_nb_cycle_state_ko_miss_load ,counter_t *,_param->_nb_context); 34 ALLOC1(_stat_nb_cycle_state_ko_miss_load_and_branch,counter_t *,_param->_nb_context); 35 ALLOC1(_stat_nb_cycle_state_ko_msync ,counter_t *,_param->_nb_context); 36 ALLOC1(_stat_nb_cycle_state_ko_psync ,counter_t *,_param->_nb_context); 37 ALLOC1(_stat_nb_cycle_state_ko_csync ,counter_t *,_param->_nb_context); 38 ALLOC1(_stat_nb_cycle_state_ko_spr ,counter_t *,_param->_nb_context); 39 40 for (uint32_t i=0; i<_param->_nb_context; ++i) 41 { 42 _stat_nb_cycle_state_ok [i] = _stat->create_counter("nb_cycle_state_ok_" +toString(i),"",toString(_("Number of cycle in state ok (context %d)"),i)); 43 _stat_nb_cycle_state_ko_excep [i] = _stat->create_counter("nb_cycle_state_ko_excep_" +toString(i),"",toString(_("Number of cycle in state ko_excep (context %d)"),i)); 44 _stat_nb_cycle_state_ko_miss_branch [i] = _stat->create_counter("nb_cycle_state_ko_miss_branch_" +toString(i),"",toString(_("Number of cycle in state ko_miss_branch (context %d)"),i)); 45 _stat_nb_cycle_state_ko_miss_load [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_" +toString(i),"",toString(_("Number of cycle in state ko_miss_load (context %d)"),i)); 46 _stat_nb_cycle_state_ko_miss_load_and_branch [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"",toString(_("Number of cycle in state ko_miss_load_and_branch (context %d)"),i)); 47 _stat_nb_cycle_state_ko_msync [i] = _stat->create_counter("nb_cycle_state_ko_msync_" +toString(i),"",toString(_("Number of cycle in state ko_msync (context %d)"),i)); 48 _stat_nb_cycle_state_ko_psync [i] = _stat->create_counter("nb_cycle_state_ko_psync_" +toString(i),"",toString(_("Number of cycle in state ko_psync (context %d)"),i)); 49 _stat_nb_cycle_state_ko_csync [i] = _stat->create_counter("nb_cycle_state_ko_csync_" +toString(i),"",toString(_("Number of cycle in state ko_csync (context %d)"),i)); 50 _stat_nb_cycle_state_ko_spr [i] = _stat->create_counter("nb_cycle_state_ko_spr_" +toString(i),"",toString(_("Number of cycle in state ko_spr (context %d)"),i)); 51 52 53 _stat->create_expr_percent("percent_state_ok_" +toString(i),"nb_cycle_state_ok_" +toString(i),"cycle",toString(_("Percent of cycle in state ok (context %d)"),i)); 54 _stat->create_expr_percent("percent_state_ko_excep_" +toString(i),"nb_cycle_state_ko_excep_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_excep (context %d)"),i)); 55 _stat->create_expr_percent("percent_state_ko_miss_branch_" +toString(i),"nb_cycle_state_ko_miss_branch_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_branch (context %d)"),i)); 56 _stat->create_expr_percent("percent_state_ko_miss_load_" +toString(i),"nb_cycle_state_ko_miss_load_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load (context %d)"),i)); 57 _stat->create_expr_percent("percent_state_ko_miss_load_and_branch_"+toString(i),"nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load_and_branch (context %d)"),i)); 58 _stat->create_expr_percent("percent_state_ko_msync_" +toString(i),"nb_cycle_state_ko_msync_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_msync (context %d)"),i)); 59 _stat->create_expr_percent("percent_state_ko_psync_" +toString(i),"nb_cycle_state_ko_psync_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_psync (context %d)"),i)); 60 _stat->create_expr_percent("percent_state_ko_csync_" +toString(i),"nb_cycle_state_ko_csync_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_csync (context %d)"),i)); 61 _stat->create_expr_percent("percent_state_ko_spr_" +toString(i),"nb_cycle_state_ko_spr_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_spr (context %d)"),i)); 62 } 63 29 64 log_end(Context_State,FUNCTION); 30 65 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_deallocation.cpp
r83 r120 8 8 9 9 #include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h" 10 #include "Behavioural/include/Allocation.h" 10 11 11 12 namespace morpheo { … … 24 25 25 26 log_printf(INFO,Context_State,FUNCTION,_("Generate Statistics file")); 26 27 27 28 delete _stat; 29 30 DELETE1(_stat_nb_cycle_state_ok ,_param->_nb_context); 31 DELETE1(_stat_nb_cycle_state_ko_excep ,_param->_nb_context); 32 DELETE1(_stat_nb_cycle_state_ko_miss_branch ,_param->_nb_context); 33 DELETE1(_stat_nb_cycle_state_ko_miss_load ,_param->_nb_context); 34 DELETE1(_stat_nb_cycle_state_ko_miss_load_and_branch,_param->_nb_context); 35 DELETE1(_stat_nb_cycle_state_ko_msync ,_param->_nb_context); 36 DELETE1(_stat_nb_cycle_state_ko_psync ,_param->_nb_context); 37 DELETE1(_stat_nb_cycle_state_ko_csync ,_param->_nb_context); 38 DELETE1(_stat_nb_cycle_state_ko_spr ,_param->_nb_context); 28 39 29 40 log_end(Context_State,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp
r119 r120 678 678 } 679 679 680 681 #ifdef STATISTICS 682 if (usage_is_set(_usage,USE_STATISTICS)) 683 for (uint32_t i=0; i<_param->_nb_context; ++i) 684 switch(reg_STATE[i]) 685 { 686 case CONTEXT_STATE_OK : (*_stat_nb_cycle_state_ok [i])++; break; 687 688 case CONTEXT_STATE_KO_EXCEP : 689 case CONTEXT_STATE_KO_EXCEP_ADDR : 690 case CONTEXT_STATE_KO_EXCEP_SPR : (*_stat_nb_cycle_state_ko_excep [i])++; break; 691 692 case CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE : 693 case CONTEXT_STATE_KO_MISS_BRANCH_ADDR : 694 case CONTEXT_STATE_KO_MISS_BRANCH_WAITEND : (*_stat_nb_cycle_state_ko_miss_branch [i])++; break; 695 696 case CONTEXT_STATE_KO_MISS_LOAD_ADDR : 697 case CONTEXT_STATE_KO_MISS_LOAD_WAITEND : (*_stat_nb_cycle_state_ko_miss_load [i])++; break; 698 699 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE: 700 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR : 701 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND : (*_stat_nb_cycle_state_ko_miss_load_and_branch [i])++; break; 702 703 // case CONTEXT_STATE_KO_MSYNC : 704 // case CONTEXT_STATE_KO_MSYNC_ISSUE : 705 case CONTEXT_STATE_KO_MSYNC_EXEC : (*_stat_nb_cycle_state_ko_msync [i])++; break; 706 707 // case CONTEXT_STATE_KO_PSYNC : 708 case CONTEXT_STATE_KO_PSYNC_FLUSH : 709 case CONTEXT_STATE_KO_PSYNC_ADDR : (*_stat_nb_cycle_state_ko_psync [i])++; break; 710 711 // case CONTEXT_STATE_KO_CSYNC : 712 case CONTEXT_STATE_KO_CSYNC_FLUSH : 713 case CONTEXT_STATE_KO_CSYNC_ADDR : (*_stat_nb_cycle_state_ko_csync [i])++; break; 714 715 // case CONTEXT_STATE_KO_SPR : 716 // case CONTEXT_STATE_KO_SPR_ISSUE : 717 case CONTEXT_STATE_KO_SPR_EXEC : (*_stat_nb_cycle_state_ko_spr [i])++; break; 718 } 719 #endif 720 721 722 680 723 #if DEBUG >= DEBUG_TRACE 681 724 for (uint32_t i=0; i<_param->_nb_context; i++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp
r119 r120 202 202 203 203 // can_continue [x] = false; // one branch per context, the DS don't execute 204 204 can_continue [x]&= PORT_READ(in_PREDICT_CAN_CONTINUE [i]); // one branch per context, the DS don't execute 205 205 have_decod_branch [x] = true; 206 } 206 207 log_printf(TRACE,Decod,FUNCTION," * predict_can_continue : %d",PORT_READ(in_PREDICT_CAN_CONTINUE [i])); 208 } 207 209 208 210 Tevent_type_t event_type = _decod_instruction->_event_type; … … 245 247 246 248 can_continue [x] &= have_transaction; // to have a in order decod !!! if a previous instruction can decod, also next instruction can't decod. 249 250 log_printf(TRACE,Decod,FUNCTION," * have_transaction : %d",have_transaction); 251 247 252 } 248 253 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h
r111 r120 34 34 public : uint32_t _size_history ; 35 35 public : uint32_t * _size_ras_index ; // [nb_context] 36 public : const bool _not_accurate_block_predict;37 36 public : uint32_t _nb_thread ; 38 37 public : uint32_t * _translate_num_context_to_num_thread;//[nb_context] 38 public : const bool _accurate_block_predict ; 39 public : const bool _accurate_block_decod ; 39 40 40 41 //public : uint32_t _size_context_id ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp
r111 r120 34 34 uint32_t * translate_num_context_to_num_thread ,//[nb_context] 35 35 bool is_toplevel): 36 _not_accurate_block_predict (false) 36 _accurate_block_predict (false), 37 _accurate_block_decod (false) 37 38 { 38 39 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin"); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
r119 r120 8 8 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h" 9 9 #include "Behavioural/include/Allocation.h" 10 #include "Common/include/Filename.h" 10 11 11 12 namespace morpheo { … … 250 251 if (_param->_have_thread [i]) 251 252 { 252 std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Branchement_prediction-thread_"+toString(i)+".log"; 253 std::string filename = morpheo::filename(MORPHEO_LOG, 254 "Branchement_prediction-thread_"+toString(i), 255 "", 256 "log", 257 false, 258 log_with_pid, 259 false); 253 260 254 261 branchement_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp
r110 r120 33 33 34 34 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 35 bool is_accurate = reg_IS_ACCURATE [context];35 bool is_accurate = _param->_accurate_block_decod or reg_IS_ACCURATE [context]; 36 36 event_state_t event_state = reg_EVENT_STATE [context]; 37 37 uint32_t ptr_write = reg_UPT_TOP [context]; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_predict.cpp
r88 r120 45 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];47 bool is_accurate = _param->_accurate_block_predict or reg_IS_ACCURATE[context]; 48 48 49 49 // Ack if : … … 52 52 // * is_accurate 53 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]) and55 (reg_EVENT_STATE [context] == EVENT_STATE_OK) and54 (reg_EVENT_STATE [context] == EVENT_STATE_OK) and 55 // (reg_UFPT_NB_UPDATE [context] == 0) and 56 56 is_accurate); 57 57 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
r119 r120 203 203 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state = UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD; 204 204 205 Tbranch_condition_t condition = PORT_READ(in_PREDICT_BTB_CONDITION [i]);206 205 Tbranch_condition_t condition = PORT_READ(in_PREDICT_BTB_CONDITION [i]); 206 bool is_accurate = _param->_accurate_block_predict or PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]); 207 207 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._condition = condition; 208 208 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_src = PORT_READ(in_PREDICT_BTB_ADDRESS_SRC [i]); 209 209 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_dest = PORT_READ(in_PREDICT_BTB_ADDRESS_DEST [i]); 210 210 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._last_take = PORT_READ(in_PREDICT_BTB_LAST_TAKE [i]); 211 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate = PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]);211 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate = is_accurate; 212 212 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._history = (_param->_have_port_history)?PORT_READ(in_PREDICT_DIR_HISTORY [i]):0; 213 213 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_ras = PORT_READ(in_PREDICT_RAS_ADDRESS [i]); … … 263 263 // Have a miss !!! 264 264 condition = PORT_READ(in_DECOD_BTB_CONDITION [i]); 265 is_accurate = PORT_READ(in_DECOD_IS_ACCURATE [i]);265 is_accurate = _param->_accurate_block_decod or PORT_READ(in_DECOD_IS_ACCURATE [i]); 266 266 267 267 // if can_continue else don't wait the end of all instruction
Note: See TracChangeset
for help on using the changeset viewer.