Changeset 112 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit
- Timestamp:
- Mar 18, 2009, 11:36:26 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/SelfTest/src/test.cpp
r110 r112 153 153 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_NO_SEQUENCE ,"out_BRANCH_COMPLETE_NO_SEQUENCE ",Tcontrol_t ,_param->_nb_inst_branch_complete); 154 154 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_MISS_PREDICTION," in_BRANCH_COMPLETE_MISS_PREDICTION",Tcontrol_t ,_param->_nb_inst_branch_complete); 155 ALLOC _SC_SIGNAL(out_UPDATE_VAL ,"out_UPDATE_VAL ",Tcontrol_t );156 ALLOC _SC_SIGNAL( in_UPDATE_ACK ," in_UPDATE_ACK ",Tcontrol_t );157 ALLOC _SC_SIGNAL(out_UPDATE_CONTEXT_ID ,"out_UPDATE_CONTEXT_ID ",Tcontext_t );158 ALLOC _SC_SIGNAL(out_UPDATE_FRONT_END_ID ,"out_UPDATE_FRONT_END_ID ",Tcontext_t );159 ALLOC _SC_SIGNAL(out_UPDATE_DEPTH ,"out_UPDATE_DEPTH ",Tdepth_t );160 ALLOC _SC_SIGNAL(out_UPDATE_TYPE ,"out_UPDATE_TYPE ",Tevent_type_t );161 ALLOC _SC_SIGNAL(out_UPDATE_IS_DELAY_SLOT ,"out_UPDATE_IS_DELAY_SLOT ",Tcontrol_t );162 ALLOC _SC_SIGNAL(out_UPDATE_ADDRESS ,"out_UPDATE_ADDRESS ",Taddress_t );163 ALLOC _SC_SIGNAL(out_UPDATE_ADDRESS_EPCR_VAL ,"out_UPDATE_ADDRESS_EPCR_VAL ",Tcontrol_t );164 ALLOC _SC_SIGNAL(out_UPDATE_ADDRESS_EPCR ,"out_UPDATE_ADDRESS_EPCR ",Taddress_t );165 ALLOC _SC_SIGNAL(out_UPDATE_ADDRESS_EEAR_VAL ,"out_UPDATE_ADDRESS_EEAR_VAL ",Tcontrol_t );166 ALLOC _SC_SIGNAL(out_UPDATE_ADDRESS_EEAR ,"out_UPDATE_ADDRESS_EEAR ",Tgeneral_data_t );155 ALLOC0_SC_SIGNAL(out_UPDATE_VAL ,"out_UPDATE_VAL ",Tcontrol_t ); 156 ALLOC0_SC_SIGNAL( in_UPDATE_ACK ," in_UPDATE_ACK ",Tcontrol_t ); 157 ALLOC0_SC_SIGNAL(out_UPDATE_CONTEXT_ID ,"out_UPDATE_CONTEXT_ID ",Tcontext_t ); 158 ALLOC0_SC_SIGNAL(out_UPDATE_FRONT_END_ID ,"out_UPDATE_FRONT_END_ID ",Tcontext_t ); 159 ALLOC0_SC_SIGNAL(out_UPDATE_DEPTH ,"out_UPDATE_DEPTH ",Tdepth_t ); 160 ALLOC0_SC_SIGNAL(out_UPDATE_TYPE ,"out_UPDATE_TYPE ",Tevent_type_t ); 161 ALLOC0_SC_SIGNAL(out_UPDATE_IS_DELAY_SLOT ,"out_UPDATE_IS_DELAY_SLOT ",Tcontrol_t ); 162 ALLOC0_SC_SIGNAL(out_UPDATE_ADDRESS ,"out_UPDATE_ADDRESS ",Taddress_t ); 163 ALLOC0_SC_SIGNAL(out_UPDATE_ADDRESS_EPCR_VAL ,"out_UPDATE_ADDRESS_EPCR_VAL ",Tcontrol_t ); 164 ALLOC0_SC_SIGNAL(out_UPDATE_ADDRESS_EPCR ,"out_UPDATE_ADDRESS_EPCR ",Taddress_t ); 165 ALLOC0_SC_SIGNAL(out_UPDATE_ADDRESS_EEAR_VAL ,"out_UPDATE_ADDRESS_EEAR_VAL ",Tcontrol_t ); 166 ALLOC0_SC_SIGNAL(out_UPDATE_ADDRESS_EEAR ,"out_UPDATE_ADDRESS_EEAR ",Tgeneral_data_t ); 167 167 168 168 ALLOC2_SC_SIGNAL( in_EVENT_VAL ," in_EVENT_VAL ",Tcontrol_t,_param->_nb_front_end,_param->_nb_context[it1]); … … 304 304 INSTANCE1_SC_SIGNAL(_Commit_unit,out_BRANCH_COMPLETE_NO_SEQUENCE ,_param->_nb_inst_branch_complete); 305 305 INSTANCE1_SC_SIGNAL(_Commit_unit, in_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete); 306 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_VAL );307 INSTANCE _SC_SIGNAL(_Commit_unit, in_UPDATE_ACK );306 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_VAL ); 307 INSTANCE0_SC_SIGNAL(_Commit_unit, in_UPDATE_ACK ); 308 308 if (_param->_have_port_context_id) 309 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_CONTEXT_ID );309 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_CONTEXT_ID ); 310 310 if (_param->_have_port_front_end_id) 311 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_FRONT_END_ID );311 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_FRONT_END_ID ); 312 312 if (_param->_have_port_depth) 313 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_DEPTH );314 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_TYPE );315 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_IS_DELAY_SLOT );316 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS );317 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EPCR_VAL );318 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EPCR );319 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EEAR_VAL );320 INSTANCE _SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EEAR );313 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_DEPTH ); 314 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_TYPE ); 315 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_IS_DELAY_SLOT ); 316 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS ); 317 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EPCR_VAL ); 318 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EPCR ); 319 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EEAR_VAL ); 320 INSTANCE0_SC_SIGNAL(_Commit_unit,out_UPDATE_ADDRESS_EEAR ); 321 321 322 322 INSTANCE2_SC_SIGNAL(_Commit_unit, in_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); … … 708 708 DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_NO_SEQUENCE ,_param->_nb_inst_branch_complete); 709 709 DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete); 710 DELETE _SC_SIGNAL(out_UPDATE_VAL );711 DELETE _SC_SIGNAL( in_UPDATE_ACK );712 DELETE _SC_SIGNAL(out_UPDATE_CONTEXT_ID );713 DELETE _SC_SIGNAL(out_UPDATE_FRONT_END_ID );714 DELETE _SC_SIGNAL(out_UPDATE_DEPTH );715 DELETE _SC_SIGNAL(out_UPDATE_TYPE );716 DELETE _SC_SIGNAL(out_UPDATE_IS_DELAY_SLOT );717 DELETE _SC_SIGNAL(out_UPDATE_ADDRESS );718 DELETE _SC_SIGNAL(out_UPDATE_ADDRESS_EPCR_VAL );719 DELETE _SC_SIGNAL(out_UPDATE_ADDRESS_EPCR );720 DELETE _SC_SIGNAL(out_UPDATE_ADDRESS_EEAR_VAL );721 DELETE _SC_SIGNAL(out_UPDATE_ADDRESS_EEAR );710 DELETE0_SC_SIGNAL(out_UPDATE_VAL ); 711 DELETE0_SC_SIGNAL( in_UPDATE_ACK ); 712 DELETE0_SC_SIGNAL(out_UPDATE_CONTEXT_ID ); 713 DELETE0_SC_SIGNAL(out_UPDATE_FRONT_END_ID ); 714 DELETE0_SC_SIGNAL(out_UPDATE_DEPTH ); 715 DELETE0_SC_SIGNAL(out_UPDATE_TYPE ); 716 DELETE0_SC_SIGNAL(out_UPDATE_IS_DELAY_SLOT ); 717 DELETE0_SC_SIGNAL(out_UPDATE_ADDRESS ); 718 DELETE0_SC_SIGNAL(out_UPDATE_ADDRESS_EPCR_VAL ); 719 DELETE0_SC_SIGNAL(out_UPDATE_ADDRESS_EPCR ); 720 DELETE0_SC_SIGNAL(out_UPDATE_ADDRESS_EEAR_VAL ); 721 DELETE0_SC_SIGNAL(out_UPDATE_ADDRESS_EEAR ); 722 722 723 723 DELETE2_SC_SIGNAL( in_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h
r111 r112 238 238 private : Tevent_state_t ** reg_EVENT_STATE ;//[nb_front_end][nb_context] 239 239 private : bool ** reg_EVENT_FLUSH ;//[nb_front_end][nb_context] 240 private : bool ** reg_EVENT_STOP ;//[nb_front_end][nb_context] 240 241 241 242 //private : Taddress_t ** reg_PC_PREVIOUS ;//[nb_front_end][nb_context] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Types.h
r111 r112 35 35 ROB_STORE_HEAD_KO , // 36 36 ROB_OTHER_WAIT_END , // 37 ROB_MISS_WAIT_END , // 37 38 ROB_EVENT_WAIT_END , // 39 38 40 ROB_END_OK_SPECULATIVE , // 39 41 ROB_END_OK , // … … 49 51 ROB_END_EXCEPTION_UPDATE , // 50 52 ROB_END_EXCEPTION // 53 51 54 } rob_state_t; 52 55 … … 121 124 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_HEAD_KO : return "ROB_STORE_HEAD_KO" ; break; 122 125 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_OTHER_WAIT_END : return "ROB_OTHER_WAIT_END" ; break; 123 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_ MISS_WAIT_END : return "ROB_MISS_WAIT_END"; break;126 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_EVENT_WAIT_END : return "ROB_EVENT_WAIT_END" ; break; 124 127 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_OK_SPECULATIVE : return "ROB_END_OK_SPECULATIVE" ; break; 125 128 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_OK : return "ROB_END_OK" ; break; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit.cpp
r110 r112 118 118 # ifdef SYSTEMCASS_SPECIFIC 119 119 // List dependency information 120 for (uint32_t i=0; i<_param->_nb_rename_unit; i++)121 for (uint32_t j=0; j<_param->_nb_inst_insert[i]; j++)122 for (uint32_t x=0; x<_param->_nb_rename_unit; x++)123 for (uint32_t y=0; y<_param->_nb_inst_insert[x]; y++)124 {125 (*(out_INSERT_ACK [i][j])) (*(in_INSERT_VAL [x][y]));126 if (_param->_have_port_rob_ptr)127 (*(out_INSERT_PACKET_ID [i][j])) (*(in_INSERT_VAL [x][y]));128 }120 // for (uint32_t i=0; i<_param->_nb_rename_unit; i++) 121 // for (uint32_t j=0; j<_param->_nb_inst_insert[i]; j++) 122 // for (uint32_t x=0; x<_param->_nb_rename_unit; x++) 123 // for (uint32_t y=0; y<_param->_nb_inst_insert[x]; y++) 124 // { 125 // (*(out_INSERT_ACK [i][j])) (*(in_INSERT_VAL [x][y])); 126 // if (_param->_have_port_rob_ptr) 127 // (*(out_INSERT_PACKET_ID [i][j])) (*(in_INSERT_VAL [x][y])); 128 // } 129 129 # endif 130 130 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp
r111 r112 58 58 // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 59 59 { 60 ALLOC2_INTERFACE ("insert", IN, SOUTH, _("Interface with rename_unit."),_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);60 ALLOC2_INTERFACE_BEGIN("insert", IN, SOUTH, _("Interface with rename_unit."),_param->_nb_rename_unit,_param->_nb_inst_insert[it1]); 61 61 62 62 _ALLOC2_VALACK_IN ( in_INSERT_VAL ,VAL,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]); … … 96 96 _ALLOC2_SIGNAL_IN ( in_INSERT_NUM_REG_RE_PHY_OLD ,"num_reg_re_phy_old" ,Tspecial_address_t,_param->_size_special_register ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]); 97 97 _ALLOC2_SIGNAL_IN ( in_INSERT_NUM_REG_RE_PHY_NEW ,"num_reg_re_phy_new" ,Tspecial_address_t,_param->_size_special_register ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]); 98 99 ALLOC2_INTERFACE_END(_param->_nb_rename_unit,_param->_nb_inst_insert[it1]); 98 100 } 99 101 100 102 // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 101 103 { 102 ALLOC2_INTERFACE ("retire",OUT,SOUTH, _("Interface to update rename_unit."),_param->_nb_rename_unit,_param->_nb_inst_retire[it1]);104 ALLOC2_INTERFACE_BEGIN("retire",OUT,SOUTH, _("Interface to update rename_unit."),_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 103 105 104 106 _ALLOC2_VALACK_OUT(out_RETIRE_VAL ,VAL,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); … … 125 127 _ALLOC2_SIGNAL_OUT(out_RETIRE_NUM_REG_RE_PHY_OLD ,"num_reg_re_phy_old" ,Tspecial_address_t,_param->_size_special_register ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 126 128 _ALLOC2_SIGNAL_OUT(out_RETIRE_NUM_REG_RE_PHY_NEW ,"num_reg_re_phy_new" ,Tspecial_address_t,_param->_size_special_register ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 129 130 ALLOC2_INTERFACE_END(_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 127 131 } 128 132 129 133 // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 130 134 { 131 ALLOC2_INTERFACE ("retire_event",OUT,SOUTH, _("Interface to update rename_unit."),_param->_nb_front_end,_param->_nb_context[it1]);135 ALLOC2_INTERFACE_BEGIN("retire_event",OUT,SOUTH, _("Interface to update rename_unit."),_param->_nb_front_end,_param->_nb_context[it1]); 132 136 133 137 _ALLOC2_VALACK_OUT(out_RETIRE_EVENT_VAL ,VAL,_param->_nb_front_end,_param->_nb_context[it1]); 134 138 _ALLOC2_VALACK_IN ( in_RETIRE_EVENT_ACK ,ACK,_param->_nb_front_end,_param->_nb_context[it1]); 135 139 _ALLOC2_SIGNAL_OUT(out_RETIRE_EVENT_STATE ,"state" ,Tevent_state_t ,_param->_size_event_state ,_param->_nb_front_end,_param->_nb_context[it1]); 140 141 ALLOC2_INTERFACE_END(_param->_nb_front_end,_param->_nb_context[it1]); 136 142 } 137 143 138 144 // ~~~~~[ Interface : "commit" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 139 145 { 140 ALLOC1_INTERFACE ("commit",IN,EAST,_("End of execute."),_param->_nb_inst_commit);146 ALLOC1_INTERFACE_BEGIN("commit",IN,EAST,_("End of execute."),_param->_nb_inst_commit); 141 147 142 148 ALLOC1_VALACK_IN ( in_COMMIT_VAL ,VAL); … … 152 158 // ALLOC1_SIGNAL_OUT(out_COMMIT_NUM_REG_RD ,"num_reg_rd" ,Tgeneral_address_t,_param->_size_general_register+_param->_size_rename_unit_id); 153 159 ALLOC1_SIGNAL_OUT(out_COMMIT_NUM_REG_RD ,"num_reg_rd" ,Tgeneral_address_t,_param->_size_general_register); 160 161 ALLOC1_INTERFACE_END(_param->_nb_inst_commit); 154 162 } 155 163 156 164 // ~~~~~[ Interface : "reexecute" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 157 165 { 158 ALLOC1_INTERFACE ("reexecute",OUT,EAST,_("Interface to reexecute an instruction (store)"),_param->_nb_inst_reexecute);166 ALLOC1_INTERFACE_BEGIN("reexecute",OUT,EAST,_("Interface to reexecute an instruction (store)"),_param->_nb_inst_reexecute); 159 167 160 168 ALLOC1_VALACK_OUT(out_REEXECUTE_VAL ,VAL); … … 166 174 ALLOC1_SIGNAL_OUT(out_REEXECUTE_TYPE ,"type" ,Ttype_t ,_param->_size_type); 167 175 ALLOC1_SIGNAL_OUT(out_REEXECUTE_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t ,_param->_size_store_queue_ptr); 176 177 ALLOC1_INTERFACE_END(_param->_nb_inst_reexecute); 168 178 } 169 179 170 180 // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 171 181 { 172 ALLOC1_INTERFACE ("branch_complete",OUT,WEST,_("Interface to reexecute an instruction (store)"),_param->_nb_inst_branch_complete);182 ALLOC1_INTERFACE_BEGIN("branch_complete",OUT,WEST,_("Interface to reexecute an instruction (store)"),_param->_nb_inst_branch_complete); 173 183 174 184 ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_VAL ,VAL); … … 181 191 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_NO_SEQUENCE ,"no_sequence" ,Tcontrol_t ,1); 182 192 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_MISS_PREDICTION,"miss_prediction",Tcontrol_t ,1); 193 194 ALLOC1_INTERFACE_END(_param->_nb_inst_branch_complete); 183 195 } 184 196 185 197 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 186 198 { 187 ALLOC_INTERFACE("update", OUT, WEST,_("Interface with to Context State.")); 188 189 ALLOC_VALACK_OUT(out_UPDATE_VAL ,VAL); 190 ALLOC_VALACK_IN ( in_UPDATE_ACK ,ACK); 191 ALLOC_SIGNAL_OUT(out_UPDATE_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 192 ALLOC_SIGNAL_OUT(out_UPDATE_FRONT_END_ID ,"front_end_id" ,Tcontext_t ,_param->_size_front_end_id); 193 ALLOC_SIGNAL_OUT(out_UPDATE_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth ); 194 ALLOC_SIGNAL_OUT(out_UPDATE_TYPE ,"type" ,Tevent_type_t ,_param->_size_event_type); 195 ALLOC_SIGNAL_OUT(out_UPDATE_IS_DELAY_SLOT ,"is_delay_slot" ,Tcontrol_t ,1); 196 ALLOC_SIGNAL_OUT(out_UPDATE_ADDRESS ,"address" ,Taddress_t ,_param->_size_instruction_address); 197 ALLOC_SIGNAL_OUT(out_UPDATE_ADDRESS_EPCR_VAL ,"address_epcr_val",Tcontrol_t ,1); 198 ALLOC_SIGNAL_OUT(out_UPDATE_ADDRESS_EPCR ,"address_epcr" ,Taddress_t ,_param->_size_instruction_address); 199 ALLOC_SIGNAL_OUT(out_UPDATE_ADDRESS_EEAR_VAL ,"address_eear_val",Tcontrol_t ,1); 200 ALLOC_SIGNAL_OUT(out_UPDATE_ADDRESS_EEAR ,"address_eear" ,Tgeneral_data_t ,_param->_size_general_data); 199 ALLOC0_INTERFACE_BEGIN("update", OUT, WEST,_("Interface with to Context State.")); 200 201 ALLOC0_VALACK_OUT(out_UPDATE_VAL ,VAL); 202 ALLOC0_VALACK_IN ( in_UPDATE_ACK ,ACK); 203 ALLOC0_SIGNAL_OUT(out_UPDATE_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 204 ALLOC0_SIGNAL_OUT(out_UPDATE_FRONT_END_ID ,"front_end_id" ,Tcontext_t ,_param->_size_front_end_id); 205 ALLOC0_SIGNAL_OUT(out_UPDATE_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth ); 206 ALLOC0_SIGNAL_OUT(out_UPDATE_TYPE ,"type" ,Tevent_type_t ,_param->_size_event_type); 207 ALLOC0_SIGNAL_OUT(out_UPDATE_IS_DELAY_SLOT ,"is_delay_slot" ,Tcontrol_t ,1); 208 ALLOC0_SIGNAL_OUT(out_UPDATE_ADDRESS ,"address" ,Taddress_t ,_param->_size_instruction_address); 209 ALLOC0_SIGNAL_OUT(out_UPDATE_ADDRESS_EPCR_VAL ,"address_epcr_val",Tcontrol_t ,1); 210 ALLOC0_SIGNAL_OUT(out_UPDATE_ADDRESS_EPCR ,"address_epcr" ,Taddress_t ,_param->_size_instruction_address); 211 ALLOC0_SIGNAL_OUT(out_UPDATE_ADDRESS_EEAR_VAL ,"address_eear_val",Tcontrol_t ,1); 212 ALLOC0_SIGNAL_OUT(out_UPDATE_ADDRESS_EEAR ,"address_eear" ,Tgeneral_data_t ,_param->_size_general_data); 213 214 ALLOC0_INTERFACE_END(); 201 215 } 202 216 203 217 // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 204 218 { 205 ALLOC2_INTERFACE ("event",IN,WEST,_("Interface with Context State (event)."),_param->_nb_front_end, _param->_nb_context[it1]);219 ALLOC2_INTERFACE_BEGIN("event",IN,WEST,_("Interface with Context State (event)."),_param->_nb_front_end, _param->_nb_context[it1]); 206 220 207 221 _ALLOC2_VALACK_IN ( in_EVENT_VAL , VAL ,_param->_nb_front_end, _param->_nb_context[it1]); … … 211 225 _ALLOC2_SIGNAL_IN ( in_EVENT_ADDRESS_NEXT_VAL,"ADDRESS_NEXT_VAL",Tcontrol_t,1 ,_param->_nb_front_end, _param->_nb_context[it1]); 212 226 _ALLOC2_SIGNAL_IN ( in_EVENT_IS_DS_TAKE ,"IS_DS_TAKE" ,Tcontrol_t,1 ,_param->_nb_front_end, _param->_nb_context[it1]); 227 228 ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]); 213 229 } 214 230 215 231 // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 216 232 { 217 ALLOC2_INTERFACE ("nb_inst",OUT,WEST,_("Interface with Context State (synchronization)."),_param->_nb_front_end, _param->_nb_context[it1]);233 ALLOC2_INTERFACE_BEGIN("nb_inst",OUT,WEST,_("Interface with Context State (synchronization)."),_param->_nb_front_end, _param->_nb_context[it1]); 218 234 219 235 _ALLOC2_SIGNAL_OUT(out_NB_INST_COMMIT_ALL ,"commit_all",Tcounter_t ,_param->_size_nb_inst_commit,_param->_nb_front_end, _param->_nb_context[it1]); 220 236 _ALLOC2_SIGNAL_OUT(out_NB_INST_COMMIT_MEM ,"commit_mem",Tcounter_t ,_param->_size_nb_inst_commit,_param->_nb_front_end, _param->_nb_context[it1]); 221 237 _ALLOC2_SIGNAL_IN ( in_NB_INST_DECOD_ALL ,"decod_all" ,Tcounter_t ,_param->_size_nb_inst_decod ,_param->_nb_front_end, _param->_nb_context[it1]); 238 239 ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]); 222 240 } 223 241 224 242 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 225 243 { 226 ALLOC2_INTERFACE ("depth",IN,WEST,_("Interface with Prediction unit."),_param->_nb_front_end, _param->_nb_context[it1]);244 ALLOC2_INTERFACE_BEGIN("depth",IN,WEST,_("Interface with Prediction unit."),_param->_nb_front_end, _param->_nb_context[it1]); 227 245 228 246 _ALLOC2_SIGNAL_IN ( in_DEPTH_MIN ,"min" ,Tdepth_t ,_param->_size_depth,_param->_nb_front_end, _param->_nb_context[it1]); 229 247 _ALLOC2_SIGNAL_IN ( in_DEPTH_MAX ,"max" ,Tdepth_t ,_param->_size_depth,_param->_nb_front_end, _param->_nb_context[it1]); 230 248 _ALLOC2_SIGNAL_IN ( in_DEPTH_FULL ,"full" ,Tcontrol_t ,1 ,_param->_nb_front_end, _param->_nb_context[it1]); 249 250 ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]); 231 251 } 232 252 … … 234 254 // ~~~~~[ Interface : "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 235 255 { 236 ALLOC2_INTERFACE ("spr_read",IN ,EAST,_("Interface with special register file (read)."),_param->_nb_front_end, _param->_nb_context[it1]);256 ALLOC2_INTERFACE_BEGIN("spr_read",IN ,EAST,_("Interface with special register file (read)."),_param->_nb_front_end, _param->_nb_context[it1]); 237 257 238 258 _ALLOC2_SIGNAL_IN ( in_SPR_READ_SR_OVE ,"sr_ove" ,Tcontrol_t ,1,_param->_nb_front_end, _param->_nb_context[it1]); 259 260 ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]); 239 261 } 240 262 241 263 // ~~~~~[ Interface : "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 242 264 { 243 ALLOC2_INTERFACE ("spr_write",OUT,EAST,_("Interface with special register file (write)."),_param->_nb_front_end, _param->_nb_context[it1]);265 ALLOC2_INTERFACE_BEGIN("spr_write",OUT,EAST,_("Interface with special register file (write)."),_param->_nb_front_end, _param->_nb_context[it1]); 244 266 245 267 _ALLOC2_VALACK_OUT(out_SPR_WRITE_VAL ,VAL,_param->_nb_front_end, _param->_nb_context[it1]); … … 251 273 _ALLOC2_SIGNAL_OUT(out_SPR_WRITE_SR_OV_VAL ,"sr_ov_val" ,Tcontrol_t ,1 ,_param->_nb_front_end, _param->_nb_context[it1]); 252 274 _ALLOC2_SIGNAL_OUT(out_SPR_WRITE_SR_OV ,"sr_ov" ,Tcontrol_t ,1 ,_param->_nb_front_end, _param->_nb_context[it1]); 275 276 ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]); 253 277 } 254 278 … … 289 313 ALLOC2(reg_EVENT_STATE ,Tevent_state_t,_param->_nb_front_end,_param->_nb_context [it1]); 290 314 ALLOC2(reg_EVENT_FLUSH ,bool ,_param->_nb_front_end,_param->_nb_context [it1]); 315 ALLOC2(reg_EVENT_STOP ,bool ,_param->_nb_front_end,_param->_nb_context [it1]); 291 316 292 317 // ALLOC2(reg_PC_PREVIOUS ,Taddress_t ,_param->_nb_front_end,_param->_nb_context [it1]); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_deallocation.cpp
r111 r112 124 124 DELETE1_SIGNAL( in_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete,1); 125 125 126 DELETE _SIGNAL(out_UPDATE_VAL ,1 );127 DELETE _SIGNAL( in_UPDATE_ACK ,1 );128 DELETE _SIGNAL(out_UPDATE_CONTEXT_ID ,_param->_size_context_id );129 DELETE _SIGNAL(out_UPDATE_FRONT_END_ID ,_param->_size_front_end_id);130 DELETE _SIGNAL(out_UPDATE_DEPTH ,_param->_size_depth );131 DELETE _SIGNAL(out_UPDATE_TYPE ,_param->_size_event_type );132 DELETE _SIGNAL(out_UPDATE_IS_DELAY_SLOT ,1 );133 DELETE _SIGNAL(out_UPDATE_ADDRESS ,_param->_size_instruction_address );134 DELETE _SIGNAL(out_UPDATE_ADDRESS_EPCR_VAL ,1 );135 DELETE _SIGNAL(out_UPDATE_ADDRESS_EPCR ,_param->_size_instruction_address );136 DELETE _SIGNAL(out_UPDATE_ADDRESS_EEAR_VAL ,1 );137 DELETE _SIGNAL(out_UPDATE_ADDRESS_EEAR ,_param->_size_instruction_address );126 DELETE0_SIGNAL(out_UPDATE_VAL ,1 ); 127 DELETE0_SIGNAL( in_UPDATE_ACK ,1 ); 128 DELETE0_SIGNAL(out_UPDATE_CONTEXT_ID ,_param->_size_context_id ); 129 DELETE0_SIGNAL(out_UPDATE_FRONT_END_ID ,_param->_size_front_end_id); 130 DELETE0_SIGNAL(out_UPDATE_DEPTH ,_param->_size_depth ); 131 DELETE0_SIGNAL(out_UPDATE_TYPE ,_param->_size_event_type ); 132 DELETE0_SIGNAL(out_UPDATE_IS_DELAY_SLOT ,1 ); 133 DELETE0_SIGNAL(out_UPDATE_ADDRESS ,_param->_size_instruction_address ); 134 DELETE0_SIGNAL(out_UPDATE_ADDRESS_EPCR_VAL ,1 ); 135 DELETE0_SIGNAL(out_UPDATE_ADDRESS_EPCR ,_param->_size_instruction_address ); 136 DELETE0_SIGNAL(out_UPDATE_ADDRESS_EEAR_VAL ,1 ); 137 DELETE0_SIGNAL(out_UPDATE_ADDRESS_EEAR ,_param->_size_instruction_address ); 138 138 139 139 DELETE2_SIGNAL( in_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1],1 ); … … 194 194 DELETE2(reg_EVENT_STATE ,_param->_nb_front_end,_param->_nb_context [it1]); 195 195 DELETE2(reg_EVENT_FLUSH ,_param->_nb_front_end,_param->_nb_context [it1]); 196 DELETE2(reg_EVENT_STOP ,_param->_nb_front_end,_param->_nb_context [it1]); 196 197 // DELETE2(reg_PC_PREVIOUS ,_param->_nb_front_end,_param->_nb_context [it1]); 197 198 DELETE2(reg_PC_CURRENT ,_param->_nb_front_end,_param->_nb_context [it1]); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMealy_insert.cpp
r100 r112 30 30 #endif 31 31 bool can_rename_select [_param->_nb_rename_unit]; 32 33 // Initialisation 32 bool event_stop; 33 34 // Initialisation 35 event_stop = false; // one signal for all context. 36 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 37 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 38 event_stop |= reg_EVENT_STOP [i][j]; 34 39 for (uint32_t i=0; i<_param->_nb_bank; i++) 35 40 { … … 52 57 // log_printf(TRACE,Commit_unit,FUNCTION," * reg_NUM_BANK_TAIL : %d",reg_NUM_BANK_TAIL); 53 58 54 std::list<generic::priority::select_t> * select_insert = _priority_insert ->select(); // same select for all insert 55 std::list<generic::priority::select_t>::iterator it=select_insert ->begin(); 56 57 // Scan all bank ... 58 for (uint32_t i=0; i<_param->_nb_bank; i++) 59 if (not event_stop) 59 60 { 60 // compute the bank number (num_bank_tail is the older write slot) 61 uint32_t num_bank = (reg_NUM_BANK_TAIL+i)%_param->_nb_bank; 62 63 // log_printf(TRACE,Commit_unit,FUNCTION," * BANK : %d", num_bank); 64 // log_printf(TRACE,Commit_unit,FUNCTION," * val : %d", internal_BANK_INSERT_VAL [num_bank]); 65 // log_printf(TRACE,Commit_unit,FUNCTION," * full : %d", bank_full [num_bank]); 66 67 // Scan all insert interface to find a valid transaction 68 while (it!=select_insert ->end()) 69 { 70 uint32_t num_rename_unit = it->grp; 71 uint32_t num_inst_insert = it->elt; 72 73 it++; 74 75 log_printf(TRACE,Commit_unit,FUNCTION," * INSERT [%d][%d]", num_rename_unit,num_inst_insert); 76 // log_printf(TRACE,Commit_unit,FUNCTION," * INSERT_VAL : %d", PORT_READ(in_INSERT_VAL [num_rename_unit][num_inst_insert])); 77 log_printf(TRACE,Commit_unit,FUNCTION," * can_rename_select : %d", can_rename_select [num_rename_unit]); 78 79 // Test if have instruction 80 // -> rename_unit_glue test the in-order insert !!!!! 81 if (can_rename_select [num_rename_unit] // and 82 // PORT_READ(in_INSERT_VAL [num_rename_unit][num_inst_insert]) 83 ) 84 { 85 log_printf(TRACE,Commit_unit,FUNCTION," * have instruction"); 86 log_printf(TRACE,Commit_unit,FUNCTION," * bank_full : %d",bank_full [num_bank]); 87 88 // test if bank is not busy (full or previous access) 89 if (not bank_full [num_bank]) 90 { 91 // find !!! 92 insert_ack [num_rename_unit][num_inst_insert] = true; 93 94 Tpacket_t packet_id = ((num_bank << _param->_shift_num_bank) | reg_BANK_PTR [num_bank]); 95 61 std::list<generic::priority::select_t> * select_insert = _priority_insert ->select(); // same select for all insert 62 std::list<generic::priority::select_t>::iterator it=select_insert ->begin(); 63 64 // Scan all bank ... 65 for (uint32_t i=0; i<_param->_nb_bank; i++) 66 { 67 // compute the bank number (num_bank_tail is the older write slot) 68 uint32_t num_bank = (reg_NUM_BANK_TAIL+i)%_param->_nb_bank; 69 70 // log_printf(TRACE,Commit_unit,FUNCTION," * BANK : %d", num_bank); 71 // log_printf(TRACE,Commit_unit,FUNCTION," * val : %d", internal_BANK_INSERT_VAL [num_bank]); 72 // log_printf(TRACE,Commit_unit,FUNCTION," * full : %d", bank_full [num_bank]); 73 74 // Scan all insert interface to find a valid transaction 75 while (it!=select_insert ->end()) 76 { 77 uint32_t num_rename_unit = it->grp; 78 uint32_t num_inst_insert = it->elt; 79 80 it++; 81 82 log_printf(TRACE,Commit_unit,FUNCTION," * INSERT [%d][%d]", num_rename_unit,num_inst_insert); 83 // log_printf(TRACE,Commit_unit,FUNCTION," * INSERT_VAL : %d", PORT_READ(in_INSERT_VAL [num_rename_unit][num_inst_insert])); 84 log_printf(TRACE,Commit_unit,FUNCTION," * can_rename_select : %d", can_rename_select [num_rename_unit]); 85 86 // Test if have instruction 87 // -> rename_unit_glue test the in-order insert !!!!! 88 if (can_rename_select [num_rename_unit] // and 89 // PORT_READ(in_INSERT_VAL [num_rename_unit][num_inst_insert]) 90 ) 91 { 92 log_printf(TRACE,Commit_unit,FUNCTION," * have instruction"); 93 log_printf(TRACE,Commit_unit,FUNCTION," * bank_full : %d",bank_full [num_bank]); 94 95 // test if bank is not busy (full or previous access) 96 if (not bank_full [num_bank]) 97 { 98 // find !!! 99 insert_ack [num_rename_unit][num_inst_insert] = true; 100 101 Tpacket_t packet_id = ((num_bank << _param->_shift_num_bank) | reg_BANK_PTR [num_bank]); 102 96 103 #ifdef SYSTEMC_VHDL_COMPATIBILITY 97 104 insert_packet_id [num_rename_unit][num_inst_insert] = packet_id; 98 105 #else 99 100 106 if (_param->_have_port_rob_ptr ) 107 PORT_WRITE(out_INSERT_PACKET_ID [num_rename_unit][num_inst_insert],packet_id); 101 108 #endif 102 103 104 105 106 107 108 109 internal_BANK_INSERT_VAL [num_bank] = true; 110 internal_BANK_INSERT_NUM_RENAME_UNIT [num_bank] = num_rename_unit; 111 internal_BANK_INSERT_NUM_INST [num_bank] = num_inst_insert; 112 113 break; 114 } 115 } 109 116 110 // is a valid instruction, but it's not send at a bank 111 // ... invalid this rename_unit (because, insert in_order) 112 can_rename_select [num_rename_unit] = false; 113 } 117 // is a valid instruction, but it's not send at a bank 118 // ... invalid this rename_unit (because, insert in_order) 119 can_rename_select [num_rename_unit] = false; 120 } 121 } 114 122 } 115 123 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMealy_retire.cpp
r110 r112 76 76 PORT_READ(in_RETIRE_ACK [x][y])) // not busy 77 77 { 78 rob_state_t state = entry->state; 79 80 if ((state == ROB_END_OK ) or 81 (state == ROB_END_KO ) or 82 (state == ROB_END_BRANCH_MISS) or 83 (state == ROB_END_LOAD_MISS ) or 84 (state == ROB_END_MISS )// or 85 // (state == ROB_END_EXCEPTION) 86 ) 87 { 88 Tcontext_t front_end_id = entry->front_end_id; 89 Tcontext_t context_id = entry->context_id; 90 Tcontrol_t write_re = entry->write_re; 91 Tspecial_address_t num_reg_re_log = entry->num_reg_re_log; 92 93 // if state is ok, when write flags in the SR regsiters 94 bool spr_write_ack = true; 95 96 // Write in SR the good flag 97 if ((state == ROB_END_OK ) and write_re) 98 // ROB_END_BRANCH_MISS is a valid branch instruction but don't modify RE 99 { 100 spr_write_ack = PORT_READ(in_SPR_WRITE_ACK [front_end_id][context_id]); 101 102 // retire_ack is set !!! 103 spr_write_val [front_end_id][context_id] = 1; 104 105 Tspecial_data_t flags = entry->flags; 106 107 switch (num_reg_re_log) 108 { 109 case SPR_LOGIC_SR_F : 110 { 111 spr_write_sr_f_val [front_end_id][context_id] = 1; 112 spr_write_sr_f [front_end_id][context_id] = (flags & FLAG_F )!=0; 113 114 break; 115 } 116 case SPR_LOGIC_SR_CY_OV : 117 { 118 spr_write_sr_cy_val [front_end_id][context_id] = 1; 119 spr_write_sr_ov_val [front_end_id][context_id] = 1; 120 spr_write_sr_cy [front_end_id][context_id] = (flags & FLAG_CY)!=0; 121 spr_write_sr_ov [front_end_id][context_id] = (flags & FLAG_OV)!=0; 122 123 break; 124 } 125 default : 126 { 78 rob_state_t state = entry->state; 79 if ((state == ROB_END_OK ) or 80 (state == ROB_END_KO ) or 81 (state == ROB_END_BRANCH_MISS) or 82 (state == ROB_END_LOAD_MISS ) or 83 (state == ROB_END_MISS )// or 84 // (state == ROB_END_EXCEPTION) 85 ) 86 { 87 Tcontrol_t write_re = entry->write_re; 88 Tspecial_address_t num_reg_re_log = entry->num_reg_re_log; 89 Tcontext_t front_end_id = entry->front_end_id; 90 Tcontext_t context_id = entry->context_id; 91 92 // if state is ok, when write flags in the SR regsiters 93 bool spr_write_ack = true; 94 95 // Write in SR the good flag 96 if ((state == ROB_END_OK ) and write_re) 97 // ROB_END_BRANCH_MISS is a valid branch instruction but don't modify RE 98 { 99 spr_write_ack = PORT_READ(in_SPR_WRITE_ACK [front_end_id][context_id]); 100 101 // retire_ack is set !!! 102 spr_write_val [front_end_id][context_id] = 1; 103 104 Tspecial_data_t flags = entry->flags; 105 106 switch (num_reg_re_log) 107 { 108 case SPR_LOGIC_SR_F : 109 { 110 spr_write_sr_f_val [front_end_id][context_id] = 1; 111 spr_write_sr_f [front_end_id][context_id] = (flags & FLAG_F )!=0; 112 113 break; 114 } 115 case SPR_LOGIC_SR_CY_OV : 116 { 117 spr_write_sr_cy_val [front_end_id][context_id] = 1; 118 spr_write_sr_ov_val [front_end_id][context_id] = 1; 119 spr_write_sr_cy [front_end_id][context_id] = (flags & FLAG_CY)!=0; 120 spr_write_sr_ov [front_end_id][context_id] = (flags & FLAG_OV)!=0; 121 122 break; 123 } 124 default : 125 { 127 126 #ifdef DEBUG_TEST 128 127 throw ERRORMORPHEO(FUNCTION,_("Invalid num_reg_re_log.\n")); 129 128 #endif 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 // PORT_WRITE(out_RETIRE_RENAME_UNIT_ID [x][y], entry->rename_unit_id );151 152 153 154 155 PORT_WRITE(out_RETIRE_LOAD_QUEUE_PTR_WRITE [x][y], entry->load_queue_ptr_write );156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 // Event -> rob must be manage this event172 if ((state == ROB_END_BRANCH_MISS) or173 (state == ROB_END_LOAD_MISS))174 can_retire [x] = false;175 129 } 130 } 131 } 132 133 // find an instruction can be retire, and in order 134 135 if (spr_write_ack) 136 { 137 retire_val [x][y] = 1; 138 num_inst_retire [x] ++; 139 internal_BANK_RETIRE_VAL [num_bank] = true; 140 } 141 142 internal_BANK_RETIRE_NUM_RENAME_UNIT [num_bank] = x; 143 internal_BANK_RETIRE_NUM_INST [num_bank] = y; 144 145 if (_param->_have_port_front_end_id) 146 PORT_WRITE(out_RETIRE_FRONT_END_ID [x][y], front_end_id ); 147 if (_param->_have_port_context_id) 148 PORT_WRITE(out_RETIRE_CONTEXT_ID [x][y], context_id ); 149 // PORT_WRITE(out_RETIRE_RENAME_UNIT_ID [x][y], entry->rename_unit_id ); 150 PORT_WRITE(out_RETIRE_USE_STORE_QUEUE [x][y], entry->use_store_queue ); 151 PORT_WRITE(out_RETIRE_USE_LOAD_QUEUE [x][y], entry->use_load_queue ); 152 PORT_WRITE(out_RETIRE_STORE_QUEUE_PTR_WRITE [x][y], entry->store_queue_ptr_write); 153 if (_param->_have_port_load_queue_ptr) 154 PORT_WRITE(out_RETIRE_LOAD_QUEUE_PTR_WRITE [x][y], entry->load_queue_ptr_write ); 155 PORT_WRITE(out_RETIRE_READ_RA [x][y], entry->read_ra ); 156 PORT_WRITE(out_RETIRE_NUM_REG_RA_PHY [x][y], entry->num_reg_ra_phy ); 157 PORT_WRITE(out_RETIRE_READ_RB [x][y], entry->read_rb ); 158 PORT_WRITE(out_RETIRE_NUM_REG_RB_PHY [x][y], entry->num_reg_rb_phy ); 159 PORT_WRITE(out_RETIRE_READ_RC [x][y], entry->read_rc ); 160 PORT_WRITE(out_RETIRE_NUM_REG_RC_PHY [x][y], entry->num_reg_rc_phy ); 161 PORT_WRITE(out_RETIRE_WRITE_RD [x][y], entry->write_rd ); 162 PORT_WRITE(out_RETIRE_NUM_REG_RD_LOG [x][y], entry->num_reg_rd_log ); 163 PORT_WRITE(out_RETIRE_NUM_REG_RD_PHY_OLD [x][y], entry->num_reg_rd_phy_old ); 164 PORT_WRITE(out_RETIRE_NUM_REG_RD_PHY_NEW [x][y], entry->num_reg_rd_phy_new ); 165 PORT_WRITE(out_RETIRE_WRITE_RE [x][y], write_re ); 166 PORT_WRITE(out_RETIRE_NUM_REG_RE_LOG [x][y], num_reg_re_log ); 167 PORT_WRITE(out_RETIRE_NUM_REG_RE_PHY_OLD [x][y], entry->num_reg_re_phy_old ); 168 PORT_WRITE(out_RETIRE_NUM_REG_RE_PHY_NEW [x][y], entry->num_reg_re_phy_new ); 169 170 // Event -> rob must be manage this event 171 if ((state == ROB_END_BRANCH_MISS) or 172 (state == ROB_END_LOAD_MISS)) 173 can_retire [x] = false; 174 } 176 175 } 177 176 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp
r111 r112 49 49 reg_EVENT_STATE [i][j] = EVENT_STATE_NO_EVENT; 50 50 reg_EVENT_FLUSH [i][j] = false; 51 reg_EVENT_STOP [i][j] = false; 51 52 52 53 // reg_PC_PREVIOUS [i][j] = (0x100-4)>>2; … … 90 91 reg_EVENT_STATE [i][j] = EVENT_STATE_END; 91 92 reg_EVENT_FLUSH [i][j] = false; 93 //reg_EVENT_STOP [i][j] = false; 92 94 } 93 95 break; … … 324 326 case ROB_BRANCH_WAIT_END : {state = (have_exception)?ROB_END_EXCEPTION_WAIT_HEAD:ROB_BRANCH_COMPLETE; break;} 325 327 // Store KO 326 case ROB_ MISS_WAIT_END: {state = ROB_END_KO_SPECULATIVE; break;}328 case ROB_EVENT_WAIT_END : {state = ROB_END_KO_SPECULATIVE; break;} 327 329 // Store OK, Load and other instruction 328 330 case ROB_OTHER_WAIT_END : {state = (have_exception)?ROB_END_EXCEPTION_WAIT_HEAD:((have_miss_speculation)?ROB_END_LOAD_MISS_SPECULATIVE:ROB_END_OK_SPECULATIVE); break;} … … 333 335 } 334 336 } 337 338 if ((have_exception or have_miss_speculation) and 339 (reg_EVENT_FLUSH [entry->front_end_id][entry->context_id] == 0)) 340 reg_EVENT_STOP [entry->front_end_id][entry->context_id] = true; 335 341 336 342 // update Re Order Buffer … … 364 370 365 371 log_printf(TRACE,Commit_unit,FUNCTION," * RETIRE [%d][%d]",x,y); 372 log_printf(TRACE,Commit_unit,FUNCTION," * num_bank : %d",num_bank ); 366 373 367 374 #ifdef DEBUG_TEST … … 381 388 log_printf(TRACE,Commit_unit,FUNCTION," * front_end_id : %d",front_end_id ); 382 389 log_printf(TRACE,Commit_unit,FUNCTION," * context_id : %d",context_id ); 390 log_printf(TRACE,Commit_unit,FUNCTION," * rob_ptr : %d",((num_bank << _param->_shift_num_bank) | entry->ptr)); 383 391 log_printf(TRACE,Commit_unit,FUNCTION," * num_thread : %d",num_thread ); 384 392 log_printf(TRACE,Commit_unit,FUNCTION," * type : %s",toString(type).c_str()); … … 406 414 // throw ERRORMORPHEO(FUNCTION,toString(_("Retire : Instruction's address_next (%.8x) is different of commit_unit's address_next (%.8x)"),entry->address_next,reg_PC_NEXT [front_end_id][context_id])); 407 415 } 408 416 409 417 if ((state == ROB_END_BRANCH_MISS) or 410 418 (state == ROB_END_LOAD_MISS)) 411 { 412 reg_EVENT_STATE [front_end_id][context_id] = EVENT_STATE_EVENT; 413 reg_EVENT_FLUSH [front_end_id][context_id] = true; 414 } 419 { 420 reg_EVENT_STATE [front_end_id][context_id] = EVENT_STATE_EVENT; 421 reg_EVENT_FLUSH [front_end_id][context_id] = true; 422 reg_EVENT_STOP [front_end_id][context_id] = false; 423 } 415 424 416 425 #if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true) … … 475 484 { 476 485 case ROB_STORE_HEAD_OK : {state = ROB_OTHER_WAIT_END; break; } 477 case ROB_STORE_HEAD_KO : {state = ROB_ MISS_WAIT_END; break; }486 case ROB_STORE_HEAD_KO : {state = ROB_EVENT_WAIT_END; break; } 478 487 default : {throw ERRORMORPHEO(FUNCTION,_("Reexecute : invalid state value.\n"));} 479 488 } … … 500 509 throw ERRORMORPHEO(FUNCTION,_("Branch_complete : Invalid state value.\n")); 501 510 #endif 502 503 entry->state = (PORT_READ(in_BRANCH_COMPLETE_MISS_PREDICTION [i]))?ROB_END_BRANCH_MISS_SPECULATIVE:ROB_END_OK_SPECULATIVE; 511 Tcontrol_t miss = PORT_READ(in_BRANCH_COMPLETE_MISS_PREDICTION [i]); 512 513 entry->state = (miss)?ROB_END_BRANCH_MISS_SPECULATIVE:ROB_END_OK_SPECULATIVE; 514 515 if (miss and (reg_EVENT_FLUSH [entry->front_end_id][entry->context_id] == 0)) 516 reg_EVENT_STOP [entry->front_end_id][entry->context_id] = true; 517 518 504 519 // entry->state = ROB_END_OK_SPECULATIVE; 505 520 } … … 612 627 switch (state) 613 628 { 614 case ROB_BRANCH_WAIT_END : {state = ROB_ MISS_WAIT_END; break;}615 case ROB_BRANCH_COMPLETE : {state = ROB_END_MISS ; break;}629 case ROB_BRANCH_WAIT_END : {state = ROB_EVENT_WAIT_END; break;} 630 case ROB_BRANCH_COMPLETE : {state = ROB_END_MISS ; break;} 616 631 case ROB_END_BRANCH_MISS : 617 case ROB_END_BRANCH_MISS_SPECULATIVE : {state = ROB_END_MISS ; break;}632 case ROB_END_BRANCH_MISS_SPECULATIVE : {state = ROB_END_MISS ; break;} 618 633 case ROB_END_LOAD_MISS_UPDATE : 619 634 case ROB_END_LOAD_MISS : 620 case ROB_END_LOAD_MISS_SPECULATIVE : {state = ROB_END_MISS ; break;}621 case ROB_STORE_WAIT_HEAD_OK : {state = ROB_STORE_HEAD_KO ; break;}635 case ROB_END_LOAD_MISS_SPECULATIVE : {state = ROB_END_MISS ; break;} 636 case ROB_STORE_WAIT_HEAD_OK : {state = ROB_STORE_HEAD_KO ; break;} 622 637 //case ROB_STORE_WAIT_HEAD_KO : {state = ; break;} 623 case ROB_OTHER_WAIT_END : {state = ROB_ MISS_WAIT_END; break;}638 case ROB_OTHER_WAIT_END : {state = ROB_EVENT_WAIT_END; break;} 624 639 case ROB_END_OK : 625 case ROB_END_OK_SPECULATIVE : {state = ROB_END_MISS ; break;}640 case ROB_END_OK_SPECULATIVE : {state = ROB_END_MISS ; break;} 626 641 case ROB_END_KO : 627 case ROB_END_KO_SPECULATIVE : {state = ROB_END_MISS ; break;}642 case ROB_END_KO_SPECULATIVE : {state = ROB_END_MISS ; break;} 628 643 case ROB_END_EXCEPTION_UPDATE : 629 644 case ROB_END_EXCEPTION : 630 case ROB_END_EXCEPTION_WAIT_HEAD : {state = ROB_END_MISS ; break;}645 case ROB_END_EXCEPTION_WAIT_HEAD : {state = ROB_END_MISS ; break;} 631 646 632 647 // don't change 633 648 case ROB_STORE_HEAD_KO : {break;} 634 case ROB_ MISS_WAIT_END: {break;}649 case ROB_EVENT_WAIT_END : {break;} 635 650 case ROB_END_MISS : {break;} 636 651 … … 671 686 case ROB_STORE_WAIT_HEAD_OK : {state = ROB_STORE_HEAD_OK; break;} 672 687 case ROB_END_EXCEPTION_WAIT_HEAD : {state = ROB_END_EXCEPTION_UPDATE; break;} 673 688 default : {break;} // else, no change 674 689 } 675 690 } … … 701 716 log_printf(TRACE,Commit_unit,FUNCTION," * EVENT_STATE : %s",toString(reg_EVENT_STATE [i][j]).c_str()); 702 717 log_printf(TRACE,Commit_unit,FUNCTION," * EVENT_FLUSH : %d",reg_EVENT_FLUSH [i][j]); 718 log_printf(TRACE,Commit_unit,FUNCTION," * EVENT_STOP : %d",reg_EVENT_STOP [i][j]); 703 719 log_printf(TRACE,Commit_unit,FUNCTION," * NB_INST_ALL : %d",reg_NB_INST_COMMIT_ALL[i][j]); 704 720 log_printf(TRACE,Commit_unit,FUNCTION," * NB_INST_MEM : %d",reg_NB_INST_COMMIT_MEM[i][j]); … … 784 800 // or (entry->state == ROB_STORE_HEAD_KO ) 785 801 // or (entry->state == ROB_OTHER_WAIT_END ) 786 // or (entry->state == ROB_ MISS_WAIT_END)802 // or (entry->state == ROB_EVENT_WAIT_END ) 787 803 // or (entry->state == ROB_END_OK_SPECULATIVE ) 788 804 or (entry->state == ROB_END_OK )
Note: See TracChangeset
for help on using the changeset viewer.