Changeset 82 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src
- Timestamp:
- May 1, 2008, 6:48:45 PM (16 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp
r81 r82 43 43 44 44 _size_context_id = log2(nb_context); 45 _size_depth = log2(max<uint32_t>(size_queue,nb_context)); 45 _size_depth = new uint32_t[_nb_context]; 46 _have_port_depth = new bool [_nb_context]; 47 for (uint32_t i=0; i<_nb_context; i++) 48 { 49 _size_depth [i] = log2(_size_queue[i]); 50 _have_port_depth [i] = (_size_depth [i] > 0); 51 } 52 _max_size_depth = max<uint32_t>(_size_depth,_nb_context); 46 53 _max_size_ras_index = max<uint32_t>(_size_ras_index,nb_context); 47 54 48 55 _have_port_context_id = _size_context_id> 0; 49 _have_port_ depth = _size_depth> 0;56 _have_port_max_depth = _max_size_depth > 0; 50 57 _have_port_history = _size_history > 0; 51 58 … … 68 75 { 69 76 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin"); 77 delete [] _size_depth ; 78 delete [] _have_port_depth; 70 79 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End"); 71 80 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters_msg_error.cpp
r81 r82 27 27 Parameters_test test ("Update_Prediction_Table"); 28 28 29 if (morpheo::behavioural::test<Tdepth_t>(_ size_depth) == false)29 if (morpheo::behavioural::test<Tdepth_t>(_max_size_depth) == false) 30 30 test.error("type \"Tdepth_t\" is too small."); 31 31 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp
r81 r82 128 128 if (_param->_have_port_context_id) 129 129 sensitive << (*(in_DECOD_CONTEXT_ID [i])); 130 sensitive << (*(in_DECOD_MISS_PREDICTION [i])); 130 sensitive << (*(in_DECOD_MISS_IFETCH [i])) 131 << (*(in_DECOD_MISS_DECOD [i])); 131 132 } 132 133 … … 135 136 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 136 137 { 137 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_PREDICTION [i])); 138 if (_param->_have_port_context_id) 139 (*(out_DECOD_ACK [i])) (*(in_DECOD_CONTEXT_ID [i])); 138 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_IFETCH [i])); 139 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_DECOD [i])); 140 if (_param->_have_port_context_id) 141 (*(out_DECOD_ACK [i])) (*(in_DECOD_CONTEXT_ID [i])); 140 142 } 141 143 # endif … … 150 152 if (_param->_have_port_context_id) 151 153 sensitive << (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 152 if (_param->_have_port_ depth)154 if (_param->_have_port_max_depth) 153 155 sensitive << (*(in_BRANCH_COMPLETE_DEPTH [i])); 154 156 sensitive << (*(in_BRANCH_COMPLETE_FLAG [i])) … … 162 164 if (_param->_have_port_context_id) 163 165 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 164 if (_param->_have_port_ depth)166 if (_param->_have_port_max_depth) 165 167 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 166 168 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_FLAG [i])); … … 169 171 if (_param->_have_port_context_id) 170 172 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 171 if (_param->_have_port_ depth)173 if (_param->_have_port_max_depth) 172 174 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 173 175 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_FLAG [i])); … … 175 177 if (_param->_have_port_context_id) 176 178 (*(out_BRANCH_COMPLETE_ADDRESS_SRC [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 177 if (_param->_have_port_ depth)179 if (_param->_have_port_max_depth) 178 180 (*(out_BRANCH_COMPLETE_ADDRESS_SRC [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 179 181 180 182 if (_param->_have_port_context_id) 181 183 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 182 if (_param->_have_port_ depth)184 if (_param->_have_port_max_depth) 183 185 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 184 186 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_ADDRESS [i])); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
r81 r82 76 76 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 77 77 { 78 ALLOC1_INTERFACE(" predict", IN,SOUTH, "predict", _param->_nb_inst_predict);78 ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_predict); 79 79 80 80 ALLOC1_VALACK_IN ( in_DECOD_VAL ,VAL); … … 87 87 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 88 88 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); 89 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION ,"miss_prediction" ,Tcontrol_t ,1); 90 ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_size_depth); 89 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_IFETCH ,"miss_ifetch" ,Tcontrol_t ,1); 90 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_DECOD ,"miss_decod" ,Tcontrol_t ,1); 91 ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_max_size_depth); 91 92 // ALLOC1_SIGNAL_OUT(out_DECOD_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth); 92 93 } … … 95 96 { 96 97 ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete); 97 98 98 99 99 ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL ,VAL); 100 100 ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK ,ACK); 101 101 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_CONTEXT_ID ,"context_id" ,Tcontext_t,_param->_size_context_id); 102 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH ,"depth" ,Tdepth_t ,_param->_ size_depth);102 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH ,"depth" ,Tdepth_t ,_param->_max_size_depth); 103 103 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS ,"address" ,Taddress_t,_param->_size_address); 104 104 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG ,"flag" ,Tcontrol_t,1); … … 107 107 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_address); 108 108 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_address); 109 } 110 111 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 112 { 113 ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context); 114 115 ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL ,VAL); 116 ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK ,ACK); 117 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_CONTEXT_ID ,"context_id" ,Tcontext_t,_param->_size_context_id); 118 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH ,"depth" ,Tdepth_t ,_param->_max_size_depth); 119 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1); 120 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_address); 121 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_address); 109 122 } 110 123 … … 125 138 ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_HISTORY ,"dir_history" ,Thistory_t ,_param->_size_history); 126 139 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_VAL ,"ras_val" ,Tcontrol_t ,1); 140 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH ,"ras_push" ,Tcontrol_t ,1); 127 141 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 128 142 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); … … 134 148 ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context); 135 149 136 ALLOC1_SIGNAL_OUT(out_DEPTH_ NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth);137 ALLOC1_SIGNAL_OUT(out_DEPTH_ TAIL,"TAIL",Tdepth_t,_param->_size_depth);150 ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL ,"TAIL" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]); 151 ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth[alloc_signal_it1]+1); 138 152 } 139 153 … … 145 159 internal_BRANCH_COMPLETE_TAKE = new Tcontrol_t [_param->_nb_inst_branch_complete]; 146 160 internal_BRANCH_COMPLETE_ADDRESS_DEST = new Taddress_t [_param->_nb_inst_branch_complete]; 161 internal_BRANCH_EVENT_VAL = new Tcontrol_t [_param->_nb_context]; 162 internal_BRANCH_EVENT_DEPTH = new Tdepth_t [_param->_nb_context]; 147 163 internal_UPDATE_VAL = new Tcontrol_t [_param->_nb_inst_update]; 148 164 internal_UPDATE_CONTEXT_ID = new Tcontext_t [_param->_nb_inst_update]; … … 153 169 reg_BOTTOM = new uint32_t [_param->_nb_context]; 154 170 reg_NB_ELT = new uint32_t [_param->_nb_context]; 171 reg_NB_ELT_UPDATE = new uint32_t [_param->_nb_context]; 155 172 reg_NB_ELT_NEED_UPDATE = new uint32_t [_param->_nb_context]; 156 173 reg_UPDATE_PREDICTION_TABLE = new entry_t * [_param->_nb_context]; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp
r81 r82 56 56 delete [] in_DECOD_RAS_ADDRESS ; 57 57 delete [] in_DECOD_RAS_INDEX ; 58 delete [] in_DECOD_MISS_PREDICTION ; 59 if (_param->_have_port_depth) 58 delete [] in_DECOD_MISS_IFETCH ; 59 delete [] in_DECOD_MISS_DECOD ; 60 if (_param->_have_port_max_depth) 60 61 delete [] in_DECOD_UPDATE_PREDICTION_ID ; 61 62 // if (_param->_have_port_depth) … … 67 68 if (_param->_have_port_context_id) 68 69 delete [] in_BRANCH_COMPLETE_CONTEXT_ID ; 69 if (_param->_have_port_ depth)70 if (_param->_have_port_max_depth) 70 71 delete [] in_BRANCH_COMPLETE_DEPTH ; 71 72 delete [] in_BRANCH_COMPLETE_ADDRESS ; … … 75 76 delete [] out_BRANCH_COMPLETE_ADDRESS_SRC ; 76 77 delete [] out_BRANCH_COMPLETE_ADDRESS_DEST ; 78 79 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 80 delete [] out_BRANCH_EVENT_VAL ; 81 delete [] in_BRANCH_EVENT_ACK ; 82 // if (_param->_have_port_context_id) 83 // delete [] in_BRANCH_EVENT_CONTEXT_ID ; 84 // if (_param->_have_port_max_depth) 85 // delete [] in_BRANCH_EVENT_DEPTH ; 86 // delete [] out_BRANCH_EVENT_MISS_PREDICTION; 87 delete [] out_BRANCH_EVENT_ADDRESS_SRC ; 88 delete [] out_BRANCH_EVENT_ADDRESS_DEST ; 77 89 78 90 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 91 103 delete [] out_UPDATE_DIR_HISTORY ; 92 104 delete [] out_UPDATE_RAS_VAL ; 105 delete [] out_UPDATE_RAS_PUSH ; 93 106 delete [] out_UPDATE_RAS_ADDRESS ; 94 107 delete [] out_UPDATE_RAS_INDEX ; … … 96 109 97 110 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 98 if (_param->_have_port_ depth)111 if (_param->_have_port_max_depth) 99 112 { 100 113 delete [] out_DEPTH_NB_BRANCH; … … 110 123 delete [] internal_BRANCH_COMPLETE_TAKE ; 111 124 delete [] internal_BRANCH_COMPLETE_ADDRESS_DEST ; 125 delete [] internal_BRANCH_EVENT_VAL ; 126 delete [] internal_BRANCH_EVENT_DEPTH ; 112 127 delete [] internal_UPDATE_VAL ; 113 128 delete [] internal_UPDATE_CONTEXT_ID ; … … 118 133 delete [] reg_BOTTOM; 119 134 delete [] reg_NB_ELT; 135 delete [] reg_NB_ELT_UPDATE; 120 136 delete [] reg_NB_ELT_NEED_UPDATE; 121 137 for (uint32_t i=0; i<_param->_nb_context; i++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp
r81 r82 27 27 { 28 28 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0; 29 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0;29 Tdepth_t depth = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0; 30 30 Tcontrol_t miss = false; 31 31 Tcontrol_t take = reg_UPDATE_PREDICTION_TABLE [context][depth]._last_take ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp
r81 r82 26 26 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 27 27 { 28 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_ PREDICTION[i]);28 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_DECOD [i]); 29 29 30 30 if (miss) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp
r81 r82 28 28 // =================================================================== 29 29 30 if (_param->_have_port_depth) 31 for (uint32_t i=0; i<_param->_nb_context; i++) 32 { 33 PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]); 34 PORT_WRITE(out_DEPTH_TAIL [i], reg_BOTTOM [i]); 35 } 36 30 for (uint32_t i=0; i<_param->_nb_context; i++) 31 { 32 if (_param->_have_port_depth [i]) 33 { 34 PORT_WRITE(out_DEPTH_TAIL [i], reg_BOTTOM [i]); 35 } 36 PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]); 37 } 37 38 // =================================================================== 38 39 // =====[ UPDATE ]==================================================== … … 72 73 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or 73 74 (cond == BRANCH_CONDITION_READ_STACK)); 74 75 76 Tcontrol_t push = ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK) or 77 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK)); 78 75 79 if (_param->_have_port_context_id) 76 80 PORT_WRITE(out_UPDATE_CONTEXT_ID [i],context); … … 85 89 PORT_WRITE(out_UPDATE_DIR_HISTORY [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._history ); 86 90 PORT_WRITE(out_UPDATE_RAS_VAL [i],ras_val); 91 PORT_WRITE(out_UPDATE_RAS_PUSH [i],push); 87 92 PORT_WRITE(out_UPDATE_RAS_ADDRESS [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras ); 88 93 PORT_WRITE(out_UPDATE_RAS_INDEX [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._index_ras ); … … 99 104 } 100 105 106 // =================================================================== 107 // =====[ BRANCH_EVENT ]============================================== 108 // =================================================================== 109 for (uint32_t i=0; i<_param->_nb_context; i++) 110 { 111 Tdepth_t depth = (reg_BOTTOM [i] + reg_NB_ELT_UPDATE [i])%_param->_size_queue [i]; 112 state_t state = reg_UPDATE_PREDICTION_TABLE [i][depth]._state; 113 114 Tcontrol_t val = (state == UPDATE_PREDICTION_STATE_EVENT); 115 116 if (val) 117 { 118 PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_src ); 119 PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_dest); 120 internal_BRANCH_EVENT_DEPTH [i] = depth; 121 } 122 123 internal_BRANCH_EVENT_VAL [i] = val; 124 PORT_WRITE(out_BRANCH_EVENT_VAL [i], internal_BRANCH_EVENT_VAL [i]); 125 } 101 126 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End"); 102 127 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
r81 r82 31 31 reg_BOTTOM [i] = 0; 32 32 reg_NB_ELT [i] = 0; 33 reg_NB_ELT_UPDATE [i] = 0; 33 34 reg_NB_ELT_NEED_UPDATE [i] = 0; 34 35 for (uint32_t j=0; j<_param->_size_queue[i]; j++) … … 74 75 if (PORT_READ(in_DECOD_VAL[i]) and internal_DECOD_ACK [i]) 75 76 { 76 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 77 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_PREDICTION [i]); 77 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 78 Tcontrol_t miss_ifetch = PORT_READ(in_DECOD_MISS_IFETCH [i]); 79 Tcontrol_t miss_decod = PORT_READ(in_DECOD_MISS_DECOD [i]); 78 80 79 81 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"DECOD[%d] - Accepted",i); 80 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 81 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss : %d",miss); 82 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt : %d",reg_NB_ELT[context]); 82 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 83 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_ifetch : %d",miss_ifetch); 84 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_decod : %d",miss_decod); 85 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt : %d",reg_NB_ELT[context]); 83 86 84 87 // Test if miss ifetch 85 88 // miss ifetch = decod a branch and the predict unit have not predict this branch ... gloup :P 86 if (miss )89 if (miss_ifetch or miss_decod) 87 90 { 88 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;91 Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0; 89 92 Tdepth_t top = reg_TOP [context]; 90 93 … … 127 130 } 128 131 } 132 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; // rewrite 129 133 130 134 reg_TOP [context] = (depth+1)%_param->_size_queue [context]; … … 135 139 { 136 140 // Normal case : branch is previous predicated, change state of branch 137 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;141 Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0; 138 142 139 143 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_WAITEND; … … 148 152 { 149 153 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0; 150 Tdepth_t depth = (_param->_have_port_ depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0;154 Tdepth_t depth = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0; 151 155 152 156 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"BRANCH_COMPLETE[%d] - Accepted",i); … … 158 162 { 159 163 // Miss case 160 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_ KO;164 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; 161 165 162 166 // Another prediction (prediction with depth higer) … … 231 235 232 236 // =================================================================== 237 // =====[ BRANCH_EVENT ]============================================== 238 // =================================================================== 239 for (uint32_t i=0; i<_param->_nb_context; i++) 240 if (internal_BRANCH_EVENT_VAL [i] and PORT_READ(in_BRANCH_EVENT_ACK [i])) 241 { 242 Tdepth_t depth = internal_BRANCH_EVENT_DEPTH [i]; 243 244 reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_KO; 245 } 246 247 // =================================================================== 233 248 // =====[ GARBAGE COLLECTOR ]========================================= 234 249 // =================================================================== … … 253 268 } 254 269 255 //#if (DEBUG >= DEBUG_TRACE)270 #if (DEBUG >= DEBUG_TRACE) 256 271 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"Dump Update_Prediction_Table"); 257 272 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPDATE_PRIORITY : %d",reg_UPDATE_PRIORITY); 258 273 for (uint32_t i=0; i<_param->_nb_context; i++) 259 274 { 260 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * Update_Prediction_Table [%d]",i);275 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * Update_Prediction_Table [%d]",i); 261 276 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_TOP : %d",reg_TOP [i]); 262 277 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_BOTTOM : %d",reg_BOTTOM [i]); … … 266 281 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %s %x",j,toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str(),reg_UPDATE_PREDICTION_TABLE [i][j]._address_src); 267 282 } 268 //#endif283 #endif 269 284 270 285
Note: See TracChangeset
for help on using the changeset viewer.