Changeset 88 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include
- Timestamp:
- Dec 10, 2008, 7:31:39 PM (16 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h
r82 r88 24 24 { 25 25 //-----[ fields ]------------------------------------------------------------ 26 public : uint32_t _nb_context ; 27 public : uint32_t * _size_queue ; // [nb_context] 28 public : uint32_t _size_address ; 29 public : uint32_t _nb_inst_predict ; 30 public : uint32_t _nb_inst_decod ; 31 public : uint32_t _nb_inst_branch_complete; 32 public : uint32_t _nb_inst_update ; 33 public : uint32_t _size_history ; 34 public : uint32_t * _size_ras_index ; // [nb_context] 26 public : uint32_t _nb_context ; 27 public : uint32_t * _size_upt_queue ; // [nb_context] 28 public : uint32_t * _size_ufpt_queue ; // [nb_context] 29 //public : uint32_t _size_address ; 30 public : uint32_t _nb_inst_predict ; 31 public : uint32_t _nb_inst_decod ; 32 public : uint32_t _nb_inst_branch_complete ; 33 public : uint32_t _nb_inst_update ; 34 public : uint32_t _size_history ; 35 public : uint32_t * _size_ras_index ; // [nb_context] 36 public : const bool _not_accurate_block_predict; 35 37 36 public : uint32_t _size_context_id;37 public : uint32_t * _size_depth; // [nb_context]38 public : uint32_t _max_size_depth;39 public : uint32_t _max_size_ras_index ;40 41 public : bool _have_port_context_id;42 public : bool * _have_port_depth; // [nb_context]43 public : bool _have_port_max_depth;44 public : bool _have_port_history ;38 //public : uint32_t _size_context_id ; 39 //public : uint32_t * _size_depth ; // [nb_context] 40 //public : uint32_t _max_size_depth ; 41 public : uint32_t _max_size_ras_index ; 42 43 //public : bool _have_port_context_id ; 44 //public : bool * _have_port_depth ; // [nb_context] 45 //public : bool _have_port_max_depth ; 46 public : bool _have_port_history ; 45 47 46 48 //-----[ methods ]----------------------------------------------------------- 47 49 public : Parameters (uint32_t nb_context , 48 uint32_t * size_queue , 50 uint32_t * size_upt_queue , 51 uint32_t * size_ufpt_queue , 49 52 uint32_t size_address , 50 53 uint32_t nb_inst_predict , … … 53 56 uint32_t nb_inst_update , 54 57 uint32_t size_history , 55 uint32_t * size_ras_index ); 58 uint32_t * size_ras_index , 59 bool is_toplevel=false); 56 60 //public : Parameters (Parameters & param) ; 57 61 public : ~Parameters () ; 62 63 public : void copy (void); 58 64 59 65 public : Parameters_test msg_error (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h
r82 r88 21 21 typedef enum 22 22 { 23 UPDATE_PREDICTION_STATE_EMPTY , // Slot is empty 24 UPDATE_PREDICTION_STATE_WAIT_DECOD , // Fetch have access at the predictor 25 UPDATE_PREDICTION_STATE_WAITEND , // Have make a prediction, wait branch_complete 26 UPDATE_PREDICTION_STATE_EVENT , // have a event - must signal at the context_unit 27 UPDATE_PREDICTION_STATE_OK , // branch is complete and can update predictor 28 UPDATE_PREDICTION_STATE_KO , // have a event - must update predictor unit 29 UPDATE_PREDICTION_STATE_END // branch is updated 30 } state_t; 23 EVENT_STATE_OK , // Can predict 24 EVENT_STATE_FLUSH_UFPT , // in decod stage, detect a miss, continue to execute but flush ufpt 25 EVENT_STATE_FLUSH_UFPT_AND_UPT , // in commit stage, detect a miss, stop context and flush ufpt and upt 26 EVENT_STATE_FLUSH_UPT_RAS , // in commit stage, detect a miss, context is stop and ufpt is flush, update RAS 27 EVENT_STATE_FLUSH_UPT , // in commit stage, detect a miss, context is stop and ufpt is flush 28 EVENT_STATE_UPDATE_CONTEXT // prediction unit is update, send signal to context manager 29 } event_state_t; 31 30 32 class entry_t 31 typedef enum 32 { 33 UPDATE_FETCH_PREDICTION_STATE_EMPTY , // Slot is empty 34 UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD , // Have make a prediction, wait decod 35 UPDATE_FETCH_PREDICTION_STATE_EVENT , // previous branch is a miss prediction 36 UPDATE_FETCH_PREDICTION_STATE_END // branch is updated 37 } ufpt_state_t; 38 39 typedef enum 40 { 41 UPDATE_PREDICTION_STATE_EMPTY , // Slot is empty 42 UPDATE_PREDICTION_STATE_WAIT_END , // Have make a prediction, wait branch_complete 43 UPDATE_PREDICTION_STATE_OK , // this branch is a hit prediction 44 UPDATE_PREDICTION_STATE_KO , // this branch is a miss prediction 45 UPDATE_PREDICTION_STATE_EVENT , // previous branch is a miss prediction 46 UPDATE_PREDICTION_STATE_END // branch is updated 47 } upt_state_t; 48 49 class ufpt_entry_t 33 50 { 34 public : state_t _state; 35 public : Tcontrol_t _ifetch_prediction; 36 public : Tbranch_condition_t _condition; 37 public : Taddress_t _address_src; 38 public : Taddress_t _address_dest; 39 public : Tcontrol_t _last_take; 40 public : Tcontrol_t _good_take; 41 public : Thistory_t _history; 42 public : Taddress_t _address_ras; 43 public : Tptr_t _index_ras; 51 public : ufpt_state_t _state ; 52 public : Tbranch_condition_t _condition ; 53 public : Taddress_t _address_src ; 54 public : Taddress_t _address_dest ; 55 public : Tcontrol_t _last_take ; 56 //public : Tcontrol_t _good_take ; 57 public : Tcontrol_t _is_accurate ; 58 public : Thistory_t _history ; 59 public : Taddress_t _address_ras ; 60 public : Tptr_t _index_ras ; 61 //public : Tcontrol_t _ifetch_prediction; 44 62 }; 63 64 class upt_entry_t 65 { 66 public : upt_state_t _state ; 67 public : Tbranch_condition_t _condition ; 68 public : Taddress_t _address_src ; 69 public : Taddress_t _address_dest ; 70 public : Tcontrol_t _last_take ; 71 public : Tcontrol_t _good_take ; // not in ufpt 72 public : Tcontrol_t _is_accurate ; 73 public : Thistory_t _history ; 74 public : Taddress_t _address_ras ; 75 public : Tptr_t _index_ras ; 76 public : Tcontrol_t _ifetch_prediction; // not in ufpt 77 }; 78 79 80 // BRANCH_CONDITION_NONE_WITHOUT_WRITE_STACK 81 // BRANCH_CONDITION_NONE_WITH_WRITE_STACK 82 // BRANCH_CONDITION_FLAG_UNSET 83 // BRANCH_CONDITION_FLAG_SET 84 // BRANCH_CONDITION_READ_REGISTER_WITHOUT_WRITE_STACK 85 // BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK 86 // BRANCH_CONDITION_READ_STACK 87 88 89 #define update_btb(cond) true 90 91 #define update_dir(cond) ((cond == BRANCH_CONDITION_FLAG_UNSET) or \ 92 (cond == BRANCH_CONDITION_FLAG_SET)) 93 94 #define update_ras(cond) ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK ) or \ 95 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or \ 96 (cond == BRANCH_CONDITION_READ_STACK )) 97 98 #define push_ras(cond) ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK ) or \ 99 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK)) 100 101 #define pop_ras(cond) ((cond == BRANCH_CONDITION_READ_STACK )) 102 103 #define need_update(cond) update_ras(cond) 45 104 46 105 }; // end namespace update_prediction_table … … 51 110 }; // end namespace behavioural 52 111 112 template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::event_state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::event_state_t& x) 113 { 114 switch (x) 115 { 116 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_OK : return "ok" ; break; 117 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UFPT : return "flush_ufpt" ; break; 118 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UFPT_AND_UPT : return "flush_ufpt_and_upt" ; break; 119 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UPT_RAS : return "flush_upt_ras" ; break; 120 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UPT : return "flush_upt" ; break; 121 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_UPDATE_CONTEXT : return "update_context" ; break; 122 default : return "" ; break; 123 } 124 }; 53 125 54 template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::state_t& x) 126 template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::ufpt_state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::ufpt_state_t& x) 127 { 128 switch (x) 129 { 130 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_EMPTY : return "empty" ; break; 131 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break; 132 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_EVENT : return "event" ; break; 133 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_END : return "end" ; break; 134 default : return "" ; break; 135 } 136 }; 137 138 template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::upt_state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::upt_state_t& x) 55 139 { 56 140 switch (x) 57 141 { 58 142 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EMPTY : return "empty" ; break; 59 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break; 60 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAITEND : return "waitend" ; break; 61 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT : return "event" ; break; 143 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_END : return "wait_end" ; break; 62 144 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_OK : return "ok" ; break; 63 145 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_KO : return "ko" ; break; 146 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT : return "event" ; break; 64 147 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END : return "end" ; break; 65 148 default : return "" ; break; … … 67 150 }; 68 151 69 70 152 }; // end namespace morpheo 71 153 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h
r82 r88 51 51 #ifdef STATISTICS 52 52 public : Stat * _stat; 53 54 private : counter_t ** _stat_nb_branch_hit ; //[nb_context] 55 private : counter_t ** _stat_nb_branch_miss ; //[nb_context] 56 private : counter_t ** _stat_nb_branch_unused ; //[nb_context] 57 private : counter_t ** _stat_queue_nb_cycle_empty; //[nb_context] 58 private : counter_t ** _stat_queue_nb_cycle_full ; //[nb_context] 59 private : counter_t ** _stat_queue_nb_elt ; //[nb_context] 60 53 61 #endif 54 62 … … 59 67 // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 68 // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 61 public : SC_CLOCK * in_CLOCK ;62 public : SC_IN (Tcontrol_t) * in_NRESET ;69 public : SC_CLOCK * in_CLOCK ; 70 public : SC_IN (Tcontrol_t) * in_NRESET ; 63 71 64 72 // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 65 public : SC_IN (Tcontrol_t ) ** in_PREDICT_VAL ; //[nb_inst_predict]66 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_ACK ; //[nb_inst_predict]67 public : SC_IN (Tcontext_t ) ** in_PREDICT_CONTEXT_ID ; //[nb_inst_predict]68 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_SRC ; //[nb_inst_predict]69 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_DEST ; //[nb_inst_predict]70 public : SC_IN (Tbranch_condition_t) ** in_PREDICT_BTB_CONDITION ; //[nb_inst_predict]71 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_LAST_TAKE ; //[nb_inst_predict]72 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_IS_ACCURATE ; //[nb_inst_predict]73 public : SC_IN (Thistory_t ) ** in_PREDICT_DIR_HISTORY ; //[nb_inst_predict]74 public : SC_IN (Taddress_t ) ** in_PREDICT_RAS_ADDRESS ; //[nb_inst_predict]75 public : SC_IN (Tptr_t ) ** in_PREDICT_RAS_INDEX ; //[nb_inst_predict]76 //public : SC_OUT(Tprediction_ptr_t ) ** out_PREDICT_UPDATE_PREDICTION_ID; //[nb_inst_predict]73 public : SC_IN (Tcontrol_t ) ** in_PREDICT_VAL ; //[nb_inst_predict] 74 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_ACK ; //[nb_inst_predict] 75 public : SC_IN (Tcontext_t ) ** in_PREDICT_CONTEXT_ID ; //[nb_inst_predict] 76 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_SRC ; //[nb_inst_predict] 77 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_DEST ; //[nb_inst_predict] 78 public : SC_IN (Tbranch_condition_t) ** in_PREDICT_BTB_CONDITION ; //[nb_inst_predict] 79 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_LAST_TAKE ; //[nb_inst_predict] 80 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_IS_ACCURATE ; //[nb_inst_predict] 81 public : SC_IN (Thistory_t ) ** in_PREDICT_DIR_HISTORY ; //[nb_inst_predict] 82 public : SC_IN (Taddress_t ) ** in_PREDICT_RAS_ADDRESS ; //[nb_inst_predict] 83 public : SC_IN (Tptr_t ) ** in_PREDICT_RAS_INDEX ; //[nb_inst_predict] 84 public : SC_OUT(Tprediction_ptr_t ) ** out_PREDICT_UPDATE_PREDICTION_ID ; //[nb_inst_predict] 77 85 78 86 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 79 public : SC_IN (Tcontrol_t ) ** in_DECOD_VAL ; //[nb_inst_decod]80 public : SC_OUT(Tcontrol_t ) ** out_DECOD_ACK ; //[nb_inst_decod]81 public : SC_IN (Tcontext_t ) ** in_DECOD_CONTEXT_ID ; //[nb_inst_decod]82 public : SC_IN (Taddress_t ) ** in_DECOD_BTB_ADDRESS_SRC ; //[nb_inst_decod]83 public : SC_IN (Taddress_t ) ** in_DECOD_BTB_ADDRESS_DEST ; //[nb_inst_decod]84 public : SC_IN (Tbranch_condition_t) ** in_DECOD_BTB_CONDITION ; //[nb_inst_decod]85 public : SC_IN (Tcontrol_t ) ** in_DECOD_BTB_LAST_TAKE ; //[nb_inst_decod]86 //public : SC_IN (T control_t ) ** in_DECOD_BTB_IS_ACCURATE ; //[nb_inst_decod]87 //public : SC_IN (Thistory_t ) ** in_DECOD_DIR_HISTORY ; //[nb_inst_decod] // if ifetch prediction is miss -> miss btb -> make a static state 88 public : SC_IN (T address_t ) ** in_DECOD_RAS_ADDRESS; //[nb_inst_decod]89 public : SC_IN (T ptr_t ) ** in_DECOD_RAS_INDEX; //[nb_inst_decod]90 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_ IFETCH; //[nb_inst_decod]91 public : SC_IN (T control_t ) ** in_DECOD_MISS_DECOD; //[nb_inst_decod]92 public : SC_IN (Tprediction_ptr_t ) ** in_DECOD_UPDATE_PREDICTION_ID; //[nb_inst_decod]93 //public : SC_OUT(Tdepth_t ) ** out_DECOD_DEPTH; //[nb_inst_decod]87 public : SC_IN (Tcontrol_t ) ** in_DECOD_VAL ; //[nb_inst_decod] 88 public : SC_OUT(Tcontrol_t ) ** out_DECOD_ACK ; //[nb_inst_decod] 89 public : SC_IN (Tcontext_t ) ** in_DECOD_CONTEXT_ID ; //[nb_inst_decod] 90 public : SC_IN (Taddress_t ) ** in_DECOD_BTB_ADDRESS_SRC ; //[nb_inst_decod] 91 public : SC_IN (Taddress_t ) ** in_DECOD_BTB_ADDRESS_DEST ; //[nb_inst_decod] 92 public : SC_IN (Tbranch_condition_t) ** in_DECOD_BTB_CONDITION ; //[nb_inst_decod] 93 public : SC_IN (Tcontrol_t ) ** in_DECOD_BTB_LAST_TAKE ; //[nb_inst_decod] 94 //public : SC_IN (Thistory_t ) ** in_DECOD_DIR_HISTORY ; //[nb_inst_decod] // if ifetch prediction is miss -> miss btb -> make a static state 95 public : SC_IN (Taddress_t ) ** in_DECOD_RAS_ADDRESS ; //[nb_inst_decod] 96 public : SC_IN (Tptr_t ) ** in_DECOD_RAS_INDEX ; //[nb_inst_decod] 97 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_IFETCH ; //[nb_inst_decod] 98 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_DECOD ; //[nb_inst_decod] 99 public : SC_IN (Tprediction_ptr_t ) ** in_DECOD_UPDATE_PREDICTION_ID ; //[nb_inst_decod] 100 //public : SC_OUT(Tdepth_t ) ** out_DECOD_DEPTH ; //[nb_inst_decod] 101 public : SC_IN (Tcontrol_t ) ** in_DECOD_IS_ACCURATE ; //[nb_inst_decod] 94 102 95 103 // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 106 114 107 115 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_VAL ; //[nb_context]109 public : SC_IN (Tcontrol_t ) ** in_BRANCH_EVENT_ACK ; //[nb_context]110 //public : SC_OUT(Tcontext_t ) ** out_BRANCH_EVENT_CONTEXT_ID ; //[nb_context]111 //public : SC_OUT(Tdepth_t ) ** out_BRANCH_EVENT_DEPTH ; //[nb_context]112 //public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_MISS_PREDICTION ; //[nb_context] is always miss prediction113 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_SRC ; //[nb_context]114 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_DEST ; //[nb_context]116 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_VAL ; //[nb_context] 117 public : SC_IN (Tcontrol_t ) ** in_BRANCH_EVENT_ACK ; //[nb_context] 118 //public : SC_OUT(Tcontext_t ) ** out_BRANCH_EVENT_CONTEXT_ID ; //[nb_context] 119 //public : SC_OUT(Tdepth_t ) ** out_BRANCH_EVENT_DEPTH ; //[nb_context] 120 //public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_MISS_PREDICTION ; //[nb_context] is always miss prediction 121 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_SRC ; //[nb_context] 122 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_DEST ; //[nb_context] 115 123 116 124 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 117 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_VAL ; //[nb_inst_update]118 public : SC_IN (Tcontrol_t ) ** in_UPDATE_ACK ; //[nb_inst_update]119 public : SC_OUT(Tcontext_t ) ** out_UPDATE_CONTEXT_ID ; //[nb_inst_update]120 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_MISS_PREDICTION ; //[nb_inst_update]121 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_DIRECTION_GOOD ; //[nb_inst_update]122 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_VAL ; //[nb_inst_update]123 public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_SRC ; //[nb_inst_update]124 public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_DEST ; //[nb_inst_update]125 public : SC_OUT(Tbranch_condition_t) ** out_UPDATE_BTB_CONDITION ; //[nb_inst_update]126 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_DIR_VAL ; //[nb_inst_update]127 public : SC_OUT(Thistory_t ) ** out_UPDATE_DIR_HISTORY ; //[nb_inst_update]128 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_VAL ; //[nb_inst_update]129 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PUSH ; //[nb_inst_update]130 public : SC_OUT(Taddress_t ) ** out_UPDATE_RAS_ADDRESS ; //[nb_inst_update]131 public : SC_OUT(Tptr_t ) ** out_UPDATE_RAS_INDEX ; //[nb_inst_update]132 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PREDICTION_IFETCH ; //[nb_inst_update]125 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_VAL ; //[nb_inst_update] 126 public : SC_IN (Tcontrol_t ) ** in_UPDATE_ACK ; //[nb_inst_update] 127 public : SC_OUT(Tcontext_t ) ** out_UPDATE_CONTEXT_ID ; //[nb_inst_update] 128 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_MISS_PREDICTION ; //[nb_inst_update] 129 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_DIRECTION_GOOD ; //[nb_inst_update] 130 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_VAL ; //[nb_inst_update] 131 public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_SRC ; //[nb_inst_update] 132 public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_DEST ; //[nb_inst_update] 133 public : SC_OUT(Tbranch_condition_t) ** out_UPDATE_BTB_CONDITION ; //[nb_inst_update] 134 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_DIR_VAL ; //[nb_inst_update] 135 public : SC_OUT(Thistory_t ) ** out_UPDATE_DIR_HISTORY ; //[nb_inst_update] 136 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_VAL ; //[nb_inst_update] 137 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PUSH ; //[nb_inst_update] 138 public : SC_OUT(Taddress_t ) ** out_UPDATE_RAS_ADDRESS ; //[nb_inst_update] 139 public : SC_OUT(Tptr_t ) ** out_UPDATE_RAS_INDEX ; //[nb_inst_update] 140 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PREDICTION_IFETCH ; //[nb_inst_update] 133 141 134 142 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 public : SC_OUT(Tdepth_t ) ** out_DEPTH_NB_BRANCH; //[nb_context] 136 public : SC_OUT(Tdepth_t ) ** out_DEPTH_TAIL; //[nb_context] 143 public : SC_OUT(Tdepth_t ) ** out_DEPTH_CURRENT ; //[nb_context] 144 public : SC_OUT(Tdepth_t ) ** out_DEPTH_MIN ; //[nb_context] 145 public : SC_OUT(Tdepth_t ) ** out_DEPTH_MAX ; //[nb_context] 146 // If DEPTH_CURRENT : 147 // equal at DEPTH_MIN -> not speculative 148 // not include ]DEPTH_MIN:DEPTH_MAX[ -> previous branch miss 149 // include ]DEPTH_MIN:DEPTH_MAX[ -> speculative 137 150 138 151 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 139 152 140 153 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 141 private : uint32_t * reg_TOP ; //[nb_context] 142 private : uint32_t * reg_BOTTOM ; //[nb_context] 143 private : uint32_t * reg_NB_ELT ; //[nb_context] 144 private : uint32_t * reg_NB_ELT_UPDATE ; //[nb_context] 145 private : uint32_t * reg_NB_ELT_NEED_UPDATE ; //[nb_context] 146 private : entry_t ** reg_UPDATE_PREDICTION_TABLE; //[nb_context][size_queue] 147 private : uint32_t reg_UPDATE_PRIORITY ; 154 private : uint32_t reg_UPDATE_PRIORITY ; 155 156 private : ufpt_entry_t ** reg_UPDATE_FETCH_PREDICTION_TABLE ; //[nb_context][size_ufpt_queue] 157 private : uint32_t * reg_UFPT_BOTTOM ; //[nb_context] 158 private : uint32_t * reg_UFPT_TOP ; //[nb_context] 159 private : uint32_t * reg_UFPT_UPDATE ; //[nb_context] 160 private : uint32_t * reg_UFPT_NB_NEED_UPDATE ; //[nb_context] 161 162 private : upt_entry_t ** reg_UPDATE_PREDICTION_TABLE ; //[nb_context][size_upt_queue] 163 private : uint32_t * reg_UPT_BOTTOM ; //[nb_context] 164 private : uint32_t * reg_UPT_TOP ; //[nb_context] 165 private : uint32_t * reg_UPT_UPDATE ; //[nb_context] 166 private : uint32_t * reg_UPT_NB_NEED_UPDATE ; //[nb_context] 167 168 private : bool * reg_IS_ACCURATE ; //[nb_context] 169 170 private : event_state_t * reg_EVENT_STATE ; //[nb_context] 171 private : Tcontrol_t * reg_EVENT_RAS_CORRUPTED ; //[nb_context] // RAS must be flush 172 private : Taddress_t * reg_EVENT_ADDRESS_SRC ; //[nb_context] // Address branch 173 private : Tcontrol_t * reg_EVENT_ADDRESS_SRC_VAL ; //[nb_context] // if miss ifetch, decod issue branch, dest must be reload 174 private : Taddress_t * reg_EVENT_ADDRESS_DEST ; //[nb_context] // Address dest 148 175 149 176 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 150 177 private : Tcontrol_t * internal_PREDICT_ACK ; //[nb_inst_predict] 178 private : Tdepth_t * internal_PREDICT_UPDATE_PREDICTION_ID ; //[nb_inst_predict] 151 179 private : Tcontrol_t * internal_DECOD_ACK ; //[nb_inst_decod] 180 private : uint32_t * internal_DECOD_UPT_PTR_WRITE ; //[nb_inst_decod] 152 181 private : Tcontrol_t * internal_BRANCH_COMPLETE_ACK ; //[nb_inst_branch_complete] 153 182 private : Tcontrol_t * internal_BRANCH_COMPLETE_MISS_PREDICTION; //[nb_inst_branch_complete] … … 157 186 private : Tdepth_t * internal_BRANCH_EVENT_DEPTH ; //[nb_context] 158 187 private : Tcontrol_t * internal_UPDATE_VAL ; //[nb_inst_update] 188 private : Tcontrol_t * internal_UPDATE_VAL_WITHOUT_ACK ; //[nb_inst_update] 159 189 private : Tcontext_t * internal_UPDATE_CONTEXT_ID ; //[nb_inst_update] 190 private : bool * internal_UPDATE_FROM_UFPT ; //[nb_inst_update] 160 191 private : Tdepth_t * internal_UPDATE_DEPTH ; //[nb_inst_update] 192 private : bool * internal_UPDATE_RAS ; //[nb_inst_update] 193 161 194 #endif 162 195
Note: See TracChangeset
for help on using the changeset viewer.