Changeset 119 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State
- Timestamp:
- May 25, 2009, 7:40:26 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/SelfTest/src/test.cpp
r112 r119 56 56 ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ADDRESS_DEST_VAL ," in_BRANCH_EVENT_ADDRESS_DEST_VAL ",Tcontrol_t ,_param->_nb_context); 57 57 ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ADDRESS_DEST ," in_BRANCH_EVENT_ADDRESS_DEST ",Taddress_t ,_param->_nb_context); 58 ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_CAN_CONTINUE ," in_BRANCH_EVENT_CAN_CONTINUE ",Tcontrol_t ,_param->_nb_context); 58 59 59 60 ALLOC1_SC_SIGNAL( in_DECOD_EVENT_VAL ," in_DECOD_EVENT_VAL ",Tcontrol_t ,_param->_nb_decod_unit); … … 97 98 ALLOC1_SC_SIGNAL(out_EVENT_ADDRESS_NEXT ,"out_EVENT_ADDRESS_NEXT ",Taddress_t ,_param->_nb_context ); 98 99 ALLOC1_SC_SIGNAL(out_EVENT_ADDRESS_NEXT_VAL ,"out_EVENT_ADDRESS_NEXT_VAL ",Tcontrol_t ,_param->_nb_context ); 100 ALLOC1_SC_SIGNAL(out_EVENT_FLUSH_ONLY ,"out_EVENT_FLUSH_ONLY ",Tcontrol_t ,_param->_nb_context ); 99 101 ALLOC1_SC_SIGNAL(out_EVENT_IS_DS_TAKE ,"out_EVENT_IS_DS_TAKE ",Tcontrol_t ,_param->_nb_context ); 100 102 ALLOC1_SC_SIGNAL(out_EVENT_TYPE ,"out_EVENT_TYPE ",Tevent_type_t,_param->_nb_context ); 101 103 ALLOC1_SC_SIGNAL(out_EVENT_DEPTH ,"out_EVENT_DEPTH ",Tdepth_t ,_param->_nb_context ); 104 ALLOC1_SC_SIGNAL(out_EVENT_FLUSH_ONLY ,"out_EVENT_FLUSH_ONLY ",Tcontrol_t ,_param->_nb_context ); 102 105 103 106 ALLOC1_SC_SIGNAL(out_SPR_EVENT_VAL ,"out_SPR_EVENT_VAL ",Tcontrol_t ,_param->_nb_context ); … … 136 139 INSTANCE1_SC_SIGNAL(_Context_State, in_BRANCH_EVENT_ADDRESS_DEST_VAL ,_param->_nb_context); 137 140 INSTANCE1_SC_SIGNAL(_Context_State, in_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context); 141 INSTANCE1_SC_SIGNAL(_Context_State, in_BRANCH_EVENT_CAN_CONTINUE ,_param->_nb_context); 142 138 143 INSTANCE1_SC_SIGNAL(_Context_State, in_DECOD_EVENT_VAL ,_param->_nb_decod_unit); 139 144 INSTANCE1_SC_SIGNAL(_Context_State,out_DECOD_EVENT_ACK ,_param->_nb_decod_unit); … … 185 190 if (_param->_have_port_depth) 186 191 INSTANCE1_SC_SIGNAL(_Context_State,out_EVENT_DEPTH ,_param->_nb_context ); 192 INSTANCE1_SC_SIGNAL(_Context_State,out_EVENT_FLUSH_ONLY ,_param->_nb_context ); 187 193 188 194 INSTANCE1_SC_SIGNAL(_Context_State,out_SPR_EVENT_VAL ,_param->_nb_context ); … … 399 405 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 400 406 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 407 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 401 408 402 409 find = true; … … 477 484 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 478 485 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 486 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 479 487 480 488 find = true; … … 582 590 in_BRANCH_EVENT_ADDRESS_SRC [port]->write(0x400); 583 591 in_BRANCH_EVENT_ADDRESS_DEST [port]->write(0x500); 584 in_BRANCH_EVENT_ADDRESS_DEST_VAL [port]->write(0); 592 in_BRANCH_EVENT_ADDRESS_DEST_VAL [port]->write(0); 593 in_BRANCH_EVENT_CAN_CONTINUE [port]->write(0); 585 594 586 595 TEST(Tcontrol_t, out_CONTEXT_DECOD_ENABLE[context]->read(), 1); … … 623 632 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 624 633 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 634 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 625 635 626 636 find = true; … … 672 682 in_BRANCH_EVENT_ADDRESS_DEST [port]->write(0x700); 673 683 in_BRANCH_EVENT_ADDRESS_DEST_VAL [port]->write(1); 684 in_BRANCH_EVENT_CAN_CONTINUE [port]->write(0); 674 685 675 686 TEST(Tcontrol_t, out_CONTEXT_DECOD_ENABLE[context]->read(), 1); … … 711 722 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),1); 712 723 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),1); 724 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 713 725 714 726 find = true; … … 779 791 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 780 792 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 793 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 781 794 782 795 find = true; … … 873 886 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 874 887 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 888 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 875 889 876 890 find = true; … … 968 982 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 969 983 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 984 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 970 985 971 986 find = true; … … 1063 1078 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 1064 1079 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 1080 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 1065 1081 1066 1082 find = true; … … 1158 1174 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 1159 1175 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 1176 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 1160 1177 1161 1178 find = true; … … 1253 1270 TEST(Tcontrol_t,out_EVENT_ADDRESS_NEXT_VAL [context]->read(),0); 1254 1271 TEST(Tcontrol_t,out_EVENT_IS_DS_TAKE [context]->read(),0); 1272 TEST(Tcontrol_t,out_EVENT_FLUSH_ONLY [context]->read(),0); 1255 1273 1256 1274 find = true; … … 1315 1333 DELETE1_SC_SIGNAL( in_BRANCH_EVENT_ADDRESS_DEST_VAL ,_param->_nb_context); 1316 1334 DELETE1_SC_SIGNAL( in_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context); 1335 DELETE1_SC_SIGNAL( in_BRANCH_EVENT_CAN_CONTINUE ,_param->_nb_context); 1336 1317 1337 DELETE1_SC_SIGNAL( in_DECOD_EVENT_VAL ,_param->_nb_decod_unit); 1318 1338 DELETE1_SC_SIGNAL(out_DECOD_EVENT_ACK ,_param->_nb_decod_unit); … … 1353 1373 DELETE1_SC_SIGNAL(out_EVENT_TYPE ,_param->_nb_context ); 1354 1374 DELETE1_SC_SIGNAL(out_EVENT_DEPTH ,_param->_nb_context ); 1375 DELETE1_SC_SIGNAL(out_EVENT_FLUSH_ONLY ,_param->_nb_context ); 1355 1376 DELETE1_SC_SIGNAL(out_SPR_EVENT_VAL ,_param->_nb_context ); 1356 1377 DELETE1_SC_SIGNAL( in_SPR_EVENT_ACK ,_param->_nb_context ); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h
r111 r119 72 72 public : SC_IN (Tcontrol_t ) ** in_BRANCH_EVENT_ADDRESS_DEST_VAL ;//[nb_context]// take or not 73 73 public : SC_IN (Taddress_t ) ** in_BRANCH_EVENT_ADDRESS_DEST ;//[nb_context] 74 public : SC_IN (Tcontrol_t ) ** in_BRANCH_EVENT_CAN_CONTINUE ;//[nb_context] 74 75 75 76 // ~~~~~[ Interface : "decod_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 120 121 public : SC_OUT(Tevent_type_t ) ** out_EVENT_TYPE ;//[nb_context] 121 122 public : SC_OUT(Tdepth_t ) ** out_EVENT_DEPTH ;//[nb_context] 123 public : SC_OUT(Tcontrol_t ) ** out_EVENT_FLUSH_ONLY ;//[nb_context] 122 124 123 125 // ~~~~~[ Interface "spr_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 155 157 private : Tcontrol_t * reg_EVENT_IS_DS_TAKE ;//[nb_context] 156 158 private : Tdepth_t * reg_EVENT_DEPTH ;//[nb_context] 159 private : Tcontrol_t * reg_EVENT_FLUSH_ONLY ;//[nb_context] 157 160 private : Tcontrol_t * reg_INTERRUPT_ENABLE ;//[nb_context] 158 161 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Types.h
r117 r119 29 29 CONTEXT_STATE_KO_EXCEP_ADDR , // update address manager 30 30 CONTEXT_STATE_KO_EXCEP_SPR , // update spr (epc, esr, sr[DSX]) 31 // CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR , // update address manager 32 // CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE , // branch is complete, wait update by update_prediction_table 31 33 CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE , // branch is complete, wait update by update_prediction_table 32 34 CONTEXT_STATE_KO_MISS_BRANCH_ADDR , // update address manager … … 66 68 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_ADDR : return "context_state_ko_excep_addr" ; break; 67 69 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_SPR : return "context_state_ko_excep_spr" ; break; 70 // case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE : return "context_state_ko_miss_branch_fast_wait_update" ; break; 71 // case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR : return "context_state_ko_miss_branch_fast_addr" ; break; 68 72 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE : return "context_state_ko_miss_branch_wait_update" ; break; 69 73 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_ADDR : return "context_state_ko_miss_branch_addr" ; break; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_allocation.cpp
r112 r119 68 68 ALLOC1_SIGNAL_IN ( in_BRANCH_EVENT_ADDRESS_DEST_VAL ,"address_dest_val" ,Tcontrol_t ,1); 69 69 ALLOC1_SIGNAL_IN ( in_BRANCH_EVENT_ADDRESS_DEST ,"address_dest" ,Taddress_t ,_param->_size_instruction_address); 70 ALLOC1_SIGNAL_IN ( in_BRANCH_EVENT_CAN_CONTINUE ,"can_continue" ,Tcontrol_t ,1); 70 71 71 72 ALLOC1_INTERFACE_END(_param->_nb_context); … … 146 147 ALLOC1_SIGNAL_OUT(out_EVENT_TYPE ,"type" ,Tevent_type_t ,_param->_size_event_type); 147 148 ALLOC1_SIGNAL_OUT(out_EVENT_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth); 149 ALLOC1_SIGNAL_OUT(out_EVENT_FLUSH_ONLY ,"flush_only" ,Tcontrol_t ,1); 148 150 149 151 ALLOC1_INTERFACE_END(_param->_nb_context); … … 216 218 ALLOC1(reg_EVENT_IS_DS_TAKE ,Tcontrol_t ,_param->_nb_context); 217 219 ALLOC1(reg_EVENT_DEPTH ,Tdepth_t ,_param->_nb_context); 220 ALLOC1(reg_EVENT_FLUSH_ONLY ,Tcontrol_t ,_param->_nb_context); 218 221 ALLOC1(reg_INTERRUPT_ENABLE ,Tcontrol_t ,_param->_nb_context); 219 222 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_deallocation.cpp
r112 r119 36 36 DELETE1_SIGNAL( in_BRANCH_EVENT_ADDRESS_DEST_VAL ,_param->_nb_context,1); 37 37 DELETE1_SIGNAL( in_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context,_param->_size_instruction_address); 38 DELETE1_SIGNAL( in_BRANCH_EVENT_CAN_CONTINUE ,_param->_nb_context,1); 38 39 39 40 DELETE1_SIGNAL( in_DECOD_EVENT_VAL ,_param->_nb_decod_unit,1); … … 79 80 DELETE1_SIGNAL(out_EVENT_TYPE ,_param->_nb_context,_param->_size_event_type); 80 81 DELETE1_SIGNAL(out_EVENT_DEPTH ,_param->_nb_context,_param->_size_depth); 82 DELETE1_SIGNAL(out_EVENT_FLUSH_ONLY ,_param->_nb_context,1); 81 83 82 84 DELETE1_SIGNAL(out_SPR_EVENT_VAL ,_param->_nb_context,1); … … 107 109 DELETE1(reg_EVENT_IS_DS_TAKE ,_param->_nb_context); 108 110 DELETE1(reg_EVENT_DEPTH ,_param->_nb_context); 111 DELETE1(reg_EVENT_FLUSH_ONLY ,_param->_nb_context); 109 112 DELETE1(reg_INTERRUPT_ENABLE ,_param->_nb_context); 110 113 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMoore.cpp
r111 r119 50 50 Tevent_type_t type ;//[nb_context] 51 51 Tdepth_t depth = reg_EVENT_DEPTH [i]; 52 Tcontrol_t flush_only = reg_EVENT_FLUSH_ONLY [i]; 52 53 53 54 switch (state) … … 74 75 if (_param->_have_port_depth) 75 76 PORT_WRITE(out_EVENT_DEPTH [i], depth); 77 PORT_WRITE(out_EVENT_FLUSH_ONLY [i], flush_only); 76 78 77 79 log_printf(TRACE,Context_State,FUNCTION," * EVENT Context : %d", i); … … 83 85 log_printf(TRACE,Context_State,FUNCTION," * TYPE : %d", type); 84 86 log_printf(TRACE,Context_State,FUNCTION," * DEPTH : %d", depth); 87 log_printf(TRACE,Context_State,FUNCTION," * FLUSH_ONLY : %d", flush_only); 85 88 } 86 89 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp
r117 r119 328 328 else 329 329 { 330 reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_WAITEND; //@@@ TODO : make MISS fast (miss decod) 331 332 Tcontrol_t dest_val = PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST_VAL[i]); 333 reg_EVENT_ADDRESS [i] = PORT_READ(in_BRANCH_EVENT_ADDRESS_SRC [i])+1; // address delay slot 334 reg_EVENT_ADDRESS_EPCR [i] = PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST [i]); // address_next 335 reg_EVENT_ADDRESS_EPCR_VAL [i] = dest_val; 336 //reg_EVENT_ADDRESS_EEAR [i] = 0; 337 reg_EVENT_ADDRESS_EEAR_VAL [i] = 0; 338 reg_EVENT_IS_DELAY_SLOT [i] = 1; 339 reg_EVENT_IS_DS_TAKE [i] = dest_val; 340 reg_EVENT_DEPTH [i] = depth; 330 Tcontrol_t can_continue = PORT_READ(in_BRANCH_EVENT_CAN_CONTINUE [i]); 331 Tcontrol_t dest_val = PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST_VAL[i]); 332 333 log_printf(TRACE,Context_State,FUNCTION," * dest_val : %d",dest_val ); 334 log_printf(TRACE,Context_State,FUNCTION," * can_continue: %d",can_continue); 335 336 if (can_continue) 337 reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR; 338 else 339 reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_WAITEND; 340 341 reg_EVENT_ADDRESS [i] = PORT_READ(in_BRANCH_EVENT_ADDRESS_SRC [i])+1; // address delay slot 342 reg_EVENT_ADDRESS_EPCR [i] = PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST [i]); // address_next 343 reg_EVENT_ADDRESS_EPCR_VAL [i] = dest_val; 344 //reg_EVENT_ADDRESS_EEAR [i] = 0; 345 reg_EVENT_ADDRESS_EEAR_VAL [i] = 0; 346 reg_EVENT_IS_DELAY_SLOT [i] = 1; 347 reg_EVENT_IS_DS_TAKE [i] = dest_val; 348 reg_EVENT_DEPTH [i] = depth; 349 reg_EVENT_FLUSH_ONLY [i] = can_continue; 341 350 } 342 351 } … … 363 372 Tdepth_t depth0 = (depth_cur>=depth_min)?(depth_cur-depth_min):((depth_cur+depth_max-depth_min)); 364 373 Tdepth_t depth1 = (depth >=depth_min)?(depth -depth_min):((depth +depth_max-depth_min)); 365 // 366 // 374 // Tdepth_t depth0 = (depth_cur>=depth_min)?(depth_cur):((depth_cur+depth_max)); 375 // Tdepth_t depth1 = (depth >=depth_min)?(depth ):((depth +depth_max)); 367 376 368 377 // priority : miss_load > miss_branch > excep > spr/sync … … 390 399 if (is_valid) 391 400 { 392 // reg_STATE [context_id] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR; 393 reg_STATE [context_id] = CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE; 394 reg_EVENT_DEPTH [context_id] = depth; 401 // reg_STATE [context_id] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR; 402 reg_STATE [context_id] = CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE; 403 reg_EVENT_DEPTH [context_id] = depth; 404 reg_EVENT_FLUSH_ONLY [context_id] = false; 395 405 } 396 406 } … … 524 534 //reg_EVENT_IS_DS_TAKE [context] = 0; 525 535 reg_EVENT_DEPTH [context] = depth; 536 reg_EVENT_FLUSH_ONLY [context] = false; 526 537 } 527 538 } … … 635 646 reg_EVENT_IS_DS_TAKE [context] = 0; 636 647 reg_EVENT_DEPTH [context] = depth; 648 reg_EVENT_FLUSH_ONLY [context] = false; 637 649 } 638 650 } … … 679 691 log_printf(TRACE,Context_State,FUNCTION," * reg_EVENT_IS_DS_TAKE : %d" ,reg_EVENT_IS_DS_TAKE [i]); 680 692 log_printf(TRACE,Context_State,FUNCTION," * reg_EVENT_DEPTH : %d" ,reg_EVENT_DEPTH [i]); 693 log_printf(TRACE,Context_State,FUNCTION," * reg_EVENT_FLUSH_ONLY : %d" ,reg_EVENT_FLUSH_ONLY [i]); 681 694 } 682 695 #endif
Note: See TracChangeset
for help on using the changeset viewer.