Changeset 88 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
- Timestamp:
- Dec 10, 2008, 7:31:39 PM (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_allocation.cpp
r82 r88 63 63 ALLOC1_VALACK_OUT(out_PREDICT_ACK ,ACK); 64 64 ALLOC1_SIGNAL_IN ( in_PREDICT_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 65 ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_address); 66 ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_address); 65 ALLOC1_SIGNAL_OUT(out_PREDICT_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_size_depth); 66 ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_instruction_address); 67 ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_instruction_address); 67 68 ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_CONDITION ,"btb_condition" ,Tbranch_condition_t,_param->_size_branch_condition); 68 69 ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_LAST_TAKE ,"btb_last_take" ,Tcontrol_t ,1); 69 70 ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_IS_ACCURATE ,"btb_is_accurate" ,Tcontrol_t ,1); 70 71 ALLOC1_SIGNAL_IN ( in_PREDICT_DIR_HISTORY ,"dir_history" ,Thistory_t ,_param->_size_history); 71 ALLOC1_SIGNAL_IN ( in_PREDICT_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_ address);72 ALLOC1_SIGNAL_IN ( in_PREDICT_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_instruction_address); 72 73 ALLOC1_SIGNAL_IN ( in_PREDICT_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); 73 // ALLOC1_SIGNAL_OUT(out_PREDICT_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_size_depth);74 74 } 75 75 76 76 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 77 77 { 78 ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_ predict);78 ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_decod); 79 79 80 80 ALLOC1_VALACK_IN ( in_DECOD_VAL ,VAL); 81 81 ALLOC1_VALACK_OUT(out_DECOD_ACK ,ACK); 82 82 ALLOC1_SIGNAL_IN ( in_DECOD_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 83 ALLOC1_SIGNAL_IN ( in_DECOD_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_ address);84 ALLOC1_SIGNAL_IN ( in_DECOD_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_ address);83 ALLOC1_SIGNAL_IN ( in_DECOD_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_instruction_address); 84 ALLOC1_SIGNAL_IN ( in_DECOD_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_instruction_address); 85 85 ALLOC1_SIGNAL_IN ( in_DECOD_BTB_CONDITION ,"btb_condition" ,Tbranch_condition_t,_param->_size_branch_condition); 86 86 ALLOC1_SIGNAL_IN ( in_DECOD_BTB_LAST_TAKE ,"btb_last_take" ,Tcontrol_t ,1); 87 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_ address);87 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_instruction_address); 88 88 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); 89 89 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_IFETCH ,"miss_ifetch" ,Tcontrol_t ,1); 90 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 ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_size_depth); 92 92 // ALLOC1_SIGNAL_OUT(out_DECOD_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth); 93 ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE ,"is_accurate" ,Tcontrol_t ,1); 93 94 } 94 95 … … 100 101 ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK ,ACK); 101 102 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->_ max_size_depth);103 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS ,"address" ,Taddress_t,_param->_size_ address);103 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth); 104 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS ,"address" ,Taddress_t,_param->_size_instruction_address); 104 105 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG ,"flag" ,Tcontrol_t,1); 105 106 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1); 106 107 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_TAKE ,"take" ,Tcontrol_t,1); 107 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_ address);108 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_ address);108 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_instruction_address); 109 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_instruction_address); 109 110 } 110 111 … … 116 117 ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK ,ACK); 117 118 // 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_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth); 119 120 // 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);121 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_instruction_address); 122 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_instruction_address); 122 123 } 123 124 … … 132 133 ALLOC1_SIGNAL_OUT(out_UPDATE_DIRECTION_GOOD ,"direction_good" ,Tcontrol_t ,1); 133 134 ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_VAL ,"btb_val" ,Tcontrol_t ,1); 134 ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_ address);135 ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_ address);135 ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_instruction_address); 136 ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_instruction_address); 136 137 ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_CONDITION ,"btb_condition" ,Tbranch_condition_t,_param->_size_branch_condition); 137 138 ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_VAL ,"dir_val" ,Tcontrol_t ,1); … … 139 140 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_VAL ,"ras_val" ,Tcontrol_t ,1); 140 141 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH ,"ras_push" ,Tcontrol_t ,1); 141 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_ address);142 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_instruction_address); 142 143 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); 143 144 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PREDICTION_IFETCH,"ras_prediction_ifetch",Tcontrol_t ,1); … … 147 148 { 148 149 ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context); 149 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); 152 } 153 150 ALLOC1_SIGNAL_OUT(out_DEPTH_CURRENT,"CURRENT",Tdepth_t,_param->_size_depth); 151 ALLOC1_SIGNAL_OUT(out_DEPTH_MIN ,"MIN" ,Tdepth_t,_param->_size_depth); 152 ALLOC1_SIGNAL_OUT(out_DEPTH_MAX ,"MAX" ,Tdepth_t,_param->_size_depth+1); 153 } 154 155 if (usage_is_set(_usage,USE_SYSTEMC)) 156 { 154 157 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 155 internal_PREDICT_ACK = new Tcontrol_t [_param->_nb_inst_predict]; 156 internal_DECOD_ACK = new Tcontrol_t [_param->_nb_inst_decod]; 157 internal_BRANCH_COMPLETE_ACK = new Tcontrol_t [_param->_nb_inst_branch_complete]; 158 internal_BRANCH_COMPLETE_MISS_PREDICTION = new Tcontrol_t [_param->_nb_inst_branch_complete]; 159 internal_BRANCH_COMPLETE_TAKE = new Tcontrol_t [_param->_nb_inst_branch_complete]; 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]; 163 internal_UPDATE_VAL = new Tcontrol_t [_param->_nb_inst_update]; 164 internal_UPDATE_CONTEXT_ID = new Tcontext_t [_param->_nb_inst_update]; 165 internal_UPDATE_DEPTH = new Tdepth_t [_param->_nb_inst_update]; 158 ALLOC1(internal_PREDICT_ACK ,Tcontrol_t,_param->_nb_inst_predict); 159 ALLOC1(internal_PREDICT_UPDATE_PREDICTION_ID ,Tdepth_t ,_param->_nb_inst_predict); 160 ALLOC1(internal_DECOD_ACK ,Tcontrol_t,_param->_nb_inst_decod); 161 ALLOC1(internal_DECOD_UPT_PTR_WRITE ,uint32_t ,_param->_nb_inst_decod); 162 ALLOC1(internal_BRANCH_COMPLETE_ACK ,Tcontrol_t,_param->_nb_inst_branch_complete); 163 ALLOC1(internal_BRANCH_COMPLETE_MISS_PREDICTION ,Tcontrol_t,_param->_nb_inst_branch_complete); 164 ALLOC1(internal_BRANCH_COMPLETE_TAKE ,Tcontrol_t,_param->_nb_inst_branch_complete); 165 ALLOC1(internal_BRANCH_COMPLETE_ADDRESS_DEST ,Taddress_t,_param->_nb_inst_branch_complete); 166 ALLOC1(internal_BRANCH_EVENT_VAL ,Tcontrol_t,_param->_nb_context); 167 ALLOC1(internal_BRANCH_EVENT_DEPTH ,Tdepth_t ,_param->_nb_context); 168 ALLOC1(internal_UPDATE_VAL ,Tcontrol_t,_param->_nb_inst_update); 169 ALLOC1(internal_UPDATE_VAL_WITHOUT_ACK ,Tcontrol_t,_param->_nb_inst_update); 170 ALLOC1(internal_UPDATE_CONTEXT_ID ,Tcontext_t,_param->_nb_inst_update); 171 ALLOC1(internal_UPDATE_FROM_UFPT ,bool ,_param->_nb_inst_update); 172 ALLOC1(internal_UPDATE_DEPTH ,Tdepth_t ,_param->_nb_inst_update); 173 ALLOC1(internal_UPDATE_RAS ,bool ,_param->_nb_inst_update); 166 174 167 175 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 168 reg_TOP = new uint32_t [_param->_nb_context]; 169 reg_BOTTOM = new uint32_t [_param->_nb_context]; 170 reg_NB_ELT = new uint32_t [_param->_nb_context]; 171 reg_NB_ELT_UPDATE = new uint32_t [_param->_nb_context]; 172 reg_NB_ELT_NEED_UPDATE = new uint32_t [_param->_nb_context]; 173 reg_UPDATE_PREDICTION_TABLE = new entry_t * [_param->_nb_context]; 174 for (uint32_t i=0; i<_param->_nb_context; i++) 175 { 176 #ifndef NO_INIT 177 reg_TOP [i] = 0; 178 #endif 179 reg_UPDATE_PREDICTION_TABLE [i] = new entry_t [_param->_size_queue[i]]; 176 177 ALLOC1(reg_IS_ACCURATE ,bool ,_param->_nb_context); 178 179 ALLOC2(reg_UPDATE_FETCH_PREDICTION_TABLE,ufpt_entry_t ,_param->_nb_context,_param->_size_ufpt_queue[it1]); 180 ALLOC1(reg_UFPT_BOTTOM ,uint32_t ,_param->_nb_context); 181 ALLOC1(reg_UFPT_TOP ,uint32_t ,_param->_nb_context); 182 ALLOC1(reg_UFPT_UPDATE ,uint32_t ,_param->_nb_context); 183 ALLOC1(reg_UFPT_NB_NEED_UPDATE ,uint32_t ,_param->_nb_context); 184 185 ALLOC2(reg_UPDATE_PREDICTION_TABLE ,upt_entry_t ,_param->_nb_context,_param->_size_upt_queue[it1]); 186 ALLOC1(reg_UPT_BOTTOM ,uint32_t ,_param->_nb_context); 187 ALLOC1(reg_UPT_TOP ,uint32_t ,_param->_nb_context); 188 ALLOC1(reg_UPT_UPDATE ,uint32_t ,_param->_nb_context); 189 ALLOC1(reg_UPT_NB_NEED_UPDATE ,uint32_t ,_param->_nb_context); 190 191 ALLOC1(reg_EVENT_STATE ,event_state_t,_param->_nb_context); 192 ALLOC1(reg_EVENT_RAS_CORRUPTED ,Tcontrol_t ,_param->_nb_context); 193 ALLOC1(reg_EVENT_ADDRESS_SRC ,Taddress_t ,_param->_nb_context); 194 ALLOC1(reg_EVENT_ADDRESS_SRC_VAL ,Tcontrol_t ,_param->_nb_context); 195 ALLOC1(reg_EVENT_ADDRESS_DEST ,Taddress_t ,_param->_nb_context); 180 196 } 197 181 198 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 182 199 183 200 #ifdef POSITION 184 _component->generate_file(); 201 if (usage_is_set(_usage,USE_POSITION)) 202 _component->generate_file(); 185 203 #endif 186 204
Note: See TracChangeset
for help on using the changeset viewer.