Changeset 107 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
- Timestamp:
- Feb 11, 2009, 12:03:25 AM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp
r106 r107 1005 1005 request.address_dest = 0x21071981+i; 1006 1006 request.address_good = request.address_dest; 1007 request.condition = (rand()%2)?BRANCH_CONDITION_NONE_WITH_WRITE_STACK:BRANCH_CONDITION_FLAG_SET; 1007 request.condition = // (rand()%2)?BRANCH_CONDITION_NONE_WITH_WRITE_STACK: 1008 BRANCH_CONDITION_FLAG_SET; 1008 1009 1009 1010 have_ras |= (update_ras(request.condition)); … … 1451 1452 request.address_dest = rand(); 1452 1453 1453 request.condition = (rand()%2)?BRANCH_CONDITION_READ_STACK:BRANCH_CONDITION_FLAG_SET; 1454 request.condition = // (rand()%2)?BRANCH_CONDITION_NONE_WITHOUT_WRITE_STACK: 1455 BRANCH_CONDITION_FLAG_SET; 1454 1456 1455 1457 request.take = 1; … … 1597 1599 request.address_dest = rand(); 1598 1600 request.address_good = request.address_dest; 1599 request.condition = (rand()%2)?BRANCH_CONDITION_NONE_WITH_WRITE_STACK:BRANCH_CONDITION_FLAG_SET; 1601 request.condition = // (rand()%2)?BRANCH_CONDITION_NONE_WITH_WRITE_STACK: 1602 BRANCH_CONDITION_FLAG_SET; 1600 1603 1601 1604 have_ufpt_ras |= (update_ras(request.condition)); … … 2157 2160 request.address_dest = rand(); 2158 2161 2159 request.condition = (rand()%2)?BRANCH_CONDITION_READ_STACK:BRANCH_CONDITION_FLAG_SET; 2162 request.condition = // (rand()%2)?BRANCH_CONDITION_NONE_WITHOUT_WRITE_STACK: 2163 BRANCH_CONDITION_FLAG_SET; 2160 2164 2161 2165 request.take = 1; … … 2303 2307 request.address_dest = rand(); 2304 2308 request.address_good = request.address_dest; 2305 request.condition = (rand()%2)?BRANCH_CONDITION_NONE_WITH_WRITE_STACK:BRANCH_CONDITION_FLAG_SET; 2309 request.condition = // (rand()%2)?BRANCH_CONDITION_NONE_WITH_WRITE_STACK: 2310 BRANCH_CONDITION_FLAG_SET; 2306 2311 2307 2312 have_ufpt_ras |= (update_ras(request.condition)); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp
r106 r107 175 175 Tcontrol_t state_is_ok_ko = ((state == UPDATE_PREDICTION_STATE_OK ) or 176 176 (state == UPDATE_PREDICTION_STATE_KO )); 177 Tcontrol_t state_is_event = ((state == UPDATE_PREDICTION_STATE_KO ) or178 (state == UPDATE_PREDICTION_STATE_EVENT)// or177 // Tcontrol_t state_is_event = ((state == UPDATE_PREDICTION_STATE_KO ) or 178 // (state == UPDATE_PREDICTION_STATE_EVENT)// or 179 179 // ((have_event[context])?(state == UPDATE_PREDICTION_STATE_OK):false) 180 );181 182 Tcontrol_t state_is_event_update = state_is_event and need_update(condition);183 Tcontrol_t state_is_event_no_update = state_is_event and not need_update(condition);180 // ); 181 182 // Tcontrol_t state_is_event_update = state_is_event and need_update(condition); 183 // Tcontrol_t state_is_event_no_update = state_is_event and not need_update(condition); 184 184 185 185 if (retire_ras_from_upt [context]) 186 186 { 187 val = state_is_event_update; 188 val_without_ack = state_is_event_no_update; 187 // val = state_is_event_update; 188 // val_without_ack = state_is_event_no_update; 189 val = ((state == UPDATE_PREDICTION_STATE_KO ) or 190 ((state == UPDATE_PREDICTION_STATE_EVENT) and need_update(condition))); 191 val_without_ack = ((state == UPDATE_PREDICTION_STATE_EVENT) and not need_update(condition)); 189 192 } 190 193 else … … 205 208 ras_flush = (state == UPDATE_PREDICTION_STATE_KO); // miss prediction, RAS is corrupted 206 209 ras_push = push_ras(condition); 207 ras_address = reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras; 210 // If corrupt, RAS must be flushed. 211 // Also, if instruction l.jal, l.jalr, push addr+2 (delay slot), else (no flush) restore RAS 212 ras_address = (ras_flush)?(reg_UPDATE_PREDICTION_TABLE [context][depth]._address_src+2):reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras; 208 213 ras_index = reg_UPDATE_PREDICTION_TABLE [context][depth]._index_ras; 209 214 ras_prediction_ifetch = ifetch; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
r106 r107 422 422 423 423 // In all case : update good_take 424 reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take = good_take; 424 reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take = good_take; 425 426 // Write address_dest if need read register 427 Tbranch_condition_t condition = reg_UPDATE_PREDICTION_TABLE [context][depth]._condition; 428 429 if ((condition == BRANCH_CONDITION_READ_REGISTER_WITHOUT_WRITE_STACK) or 430 (condition == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK ) or 431 (condition == BRANCH_CONDITION_READ_STACK ) ) 432 reg_UPDATE_PREDICTION_TABLE [context][depth]._address_dest = good_addr; 425 433 } 426 434 … … 599 607 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * BRANCH_EVENT [%d] - Accepted",i); 600 608 601 #ifdef DEBUG_TEST 602 if (reg_EVENT_STATE [i] != EVENT_STATE_UPDATE_CONTEXT) 603 throw ERRORMORPHEO(FUNCTION,_("Decod : invalid event state.")); 604 #endif 605 606 // Change state 607 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * EVENT [%d] <- EVENT_STATE_WAIT_END_EVENT (branch_event)",i); 608 609 reg_EVENT_STATE [i] = EVENT_STATE_WAIT_END_EVENT; 609 // if different : an other branch is occured 610 if (reg_EVENT_STATE [i] == EVENT_STATE_UPDATE_CONTEXT) 611 { 612 // Change state 613 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * EVENT [%d] <- EVENT_STATE_WAIT_END_EVENT (branch_event)",i); 614 615 reg_EVENT_STATE [i] = EVENT_STATE_WAIT_END_EVENT; 616 } 610 617 } 611 618 … … 866 873 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UFPT_NB_UPDATE : %d",reg_UFPT_NB_UPDATE [i]); 867 874 for (uint32_t j=0; j<_param->_size_ufpt_queue[i]; j++) 868 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %.4d, %.8x %.8x, %.1d %.1d, %.8d %.8x%.4d - %s",875 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %.4d, %.8x (%.8x) %.8x (%.8x), %.1d %.1d, %.8d %.8x (%.8x) %.4d - %s", 869 876 j, 870 877 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._condition, 871 878 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_src, 879 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_src<<2, 872 880 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_dest, 881 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_dest<<2, 873 882 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._last_take, 874 883 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._is_accurate, 875 884 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._history, 876 885 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_ras, 886 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_ras<<2, 877 887 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._index_ras, 878 888 toString(reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._state).c_str() … … 886 896 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPT_EMPTY : %d",reg_UPT_EMPTY [i]); 887 897 for (uint32_t j=0; j<_param->_size_upt_queue[i]; j++) 888 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %.4d, %.8x %.8x, %.1d %.1d %.1d, %.8d %.8x%.4d - %s",898 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %.4d, %.8x (%.8x) %.8x (%.8x), %.1d %.1d %.1d, %.8d %.8x (%.8x) %.4d - %s", 889 899 j, 890 900 reg_UPDATE_PREDICTION_TABLE [i][j]._condition, 891 901 reg_UPDATE_PREDICTION_TABLE [i][j]._address_src, 902 reg_UPDATE_PREDICTION_TABLE [i][j]._address_src<<2, 892 903 reg_UPDATE_PREDICTION_TABLE [i][j]._address_dest, 904 reg_UPDATE_PREDICTION_TABLE [i][j]._address_dest<<2, 893 905 reg_UPDATE_PREDICTION_TABLE [i][j]._last_take, 894 906 reg_UPDATE_PREDICTION_TABLE [i][j]._good_take, … … 896 908 reg_UPDATE_PREDICTION_TABLE [i][j]._history, 897 909 reg_UPDATE_PREDICTION_TABLE [i][j]._address_ras, 910 reg_UPDATE_PREDICTION_TABLE [i][j]._address_ras<<2, 898 911 reg_UPDATE_PREDICTION_TABLE [i][j]._index_ras, 899 912 toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str()
Note: See TracChangeset
for help on using the changeset viewer.