Changeset 101 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
- Timestamp:
- Jan 15, 2009, 6:19:08 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
- Files:
-
- 7 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
r98 r101 143 143 ALLOC1_SC_SIGNAL( in_EVENT_DEPTH ," in_EVENT_DEPTH ",Tdepth_t ,_param->_nb_context); 144 144 145 ALLOC1_SC_SIGNAL(out_DEPTH_VAL ,"out_DEPTH_VAL ",Tcontrol_t ,_param->_nb_context); 145 146 ALLOC1_SC_SIGNAL(out_DEPTH_CURRENT ,"out_DEPTH_CURRENT ",Tdepth_t ,_param->_nb_context); 146 147 ALLOC1_SC_SIGNAL(out_DEPTH_MIN ,"out_DEPTH_MIN ",Tdepth_t ,_param->_nb_context); 147 148 ALLOC1_SC_SIGNAL(out_DEPTH_MAX ,"out_DEPTH_MAX ",Tdepth_t ,_param->_nb_context); 149 ALLOC1_SC_SIGNAL(out_DEPTH_FULL ,"out_DEPTH_FULL ",Tcontrol_t ,_param->_nb_context); 148 150 149 151 /******************************************************** … … 239 241 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_CURRENT ,_param->_nb_context); 240 242 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_MIN ,_param->_nb_context); 243 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_MAX ,_param->_nb_context); 241 244 } 242 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_MAX ,_param->_nb_context); 245 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_VAL ,_param->_nb_context); 246 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_FULL ,_param->_nb_context); 243 247 244 248 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 373 377 374 378 if (_param->_have_port_depth) 379 { 375 380 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 376 381 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 377 382 } 378 383 SC_START(0); // fct melay 379 384 … … 404 409 405 410 if (_param->_have_port_depth) 411 { 406 412 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 407 413 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 414 } 408 415 } 409 416 } … … 462 469 463 470 if (_param->_have_port_depth) 471 { 464 472 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 465 473 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 474 } 466 475 } 467 476 } … … 490 499 491 500 if (_param->_have_port_depth) 501 { 492 502 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 493 503 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 504 } 494 505 495 506 SC_START(0); … … 516 527 517 528 if (_param->_have_port_depth) 529 { 518 530 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 519 531 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 532 } 520 533 } 521 534 } … … 539 552 540 553 // if (_param->_have_port_depth) 554 // { 541 555 // TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 542 556 // TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 557 // } 543 558 544 559 SC_START(0); … … 654 669 655 670 if (_param->_have_port_depth) 671 { 656 672 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 657 673 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 658 674 } 659 675 SC_START(0); // fct melay 660 676 … … 685 701 686 702 if (_param->_have_port_depth) 703 { 687 704 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 688 705 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 706 } 689 707 } 690 708 } … … 764 782 765 783 if (_param->_have_port_depth) 784 { 766 785 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 767 786 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 787 } 768 788 } 769 789 } … … 793 813 794 814 if (_param->_have_port_depth) 815 { 795 816 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 796 817 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 797 818 } 798 819 SC_START(0); 799 820 … … 819 840 820 841 if (_param->_have_port_depth) 842 { 821 843 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 822 844 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 845 } 823 846 } 824 847 } … … 1013 1036 1014 1037 if (_param->_have_port_depth) 1038 { 1015 1039 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1016 1040 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1017 1041 } 1018 1042 SC_START(0); // fct melay 1019 1043 … … 1044 1068 1045 1069 if (_param->_have_port_depth) 1070 { 1046 1071 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1047 1072 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1073 } 1048 1074 } 1049 1075 } … … 1123 1149 1124 1150 if (_param->_have_port_depth) 1151 { 1125 1152 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1126 1153 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1154 } 1127 1155 } 1128 1156 } … … 1152 1180 1153 1181 if (_param->_have_port_depth) 1182 { 1154 1183 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1155 1184 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1156 1185 } 1157 1186 SC_START(0); 1158 1187 … … 1178 1207 1179 1208 if (_param->_have_port_depth) 1209 { 1180 1210 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1181 1211 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1212 } 1182 1213 } 1183 1214 } … … 1450 1481 1451 1482 if (_param->_have_port_depth) 1483 { 1452 1484 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1453 1485 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1454 1486 } 1455 1487 SC_START(0); // fct melay 1456 1488 … … 1481 1513 1482 1514 if (_param->_have_port_depth) 1483 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1515 { 1516 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1484 1517 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1518 } 1485 1519 } 1486 1520 } … … 1541 1575 1542 1576 if (_param->_have_port_depth) 1543 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1577 { 1578 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1544 1579 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1580 } 1545 1581 } 1546 1582 } … … 1593 1629 1594 1630 if (_param->_have_port_depth) 1631 { 1595 1632 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1596 1633 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1597 1634 } 1598 1635 SC_START(0); // fct melay 1599 1636 … … 1624 1661 1625 1662 if (_param->_have_port_depth) 1626 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1663 { 1664 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1627 1665 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1666 } 1628 1667 } 1629 1668 } … … 1677 1716 1678 1717 if (_param->_have_port_depth) 1718 { 1679 1719 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1680 1720 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1681 1721 } 1722 1682 1723 SC_START(0); 1683 1724 … … 1711 1752 1712 1753 if (_param->_have_port_depth) 1754 { 1713 1755 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1714 1756 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1757 } 1715 1758 } 1716 1759 } … … 1738 1781 1739 1782 if (_param->_have_port_depth) 1783 { 1740 1784 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1741 1785 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1742 1786 } 1743 1787 SC_START(0); 1744 1788 … … 1772 1816 1773 1817 if (_param->_have_port_depth) 1818 { 1774 1819 TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]); 1775 1820 TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]); 1821 } 1776 1822 } 1777 1823 } … … 2176 2222 2177 2223 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2224 delete [] out_DEPTH_VAL; 2178 2225 delete [] out_DEPTH_CURRENT; 2179 2226 delete [] out_DEPTH_MIN; 2180 2227 delete [] out_DEPTH_MAX; 2228 delete [] out_DEPTH_FULL; 2181 2229 2182 2230 #endif -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h
r95 r101 26 26 EVENT_STATE_FLUSH_UPT , // in commit stage, detect a miss, context is stop and ufpt is flush, update RAS 27 27 EVENT_STATE_UPDATE_CONTEXT , // prediction unit is update, send signal to context manager 28 EVENT_STATE_WAIT_END_EVENT // prediction unit is ok, wait the end of e nvent (send by Context State)28 EVENT_STATE_WAIT_END_EVENT // prediction unit is ok, wait the end of event (send by Context State) 29 29 } event_state_t; 30 30 … … 45 45 UPDATE_PREDICTION_STATE_EVENT , // previous branch is a miss prediction 46 46 UPDATE_PREDICTION_STATE_END_OK , // branch is updated, update pointer 47 UPDATE_PREDICTION_STATE_END_KO_WAIT_END , // branch is updated, don't update pointer 47 48 UPDATE_PREDICTION_STATE_END_KO // branch is updated, don't update pointer 48 49 } upt_state_t; … … 147 148 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT : return "event" ; break; 148 149 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END_OK : return "end_ok" ; break; 150 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END_KO_WAIT_END: return "end_ko_wait_end" ; break; 149 151 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END_KO : return "end_ko" ; break; 150 152 default : return "" ; break; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h
r98 r101 148 148 149 149 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 150 public : SC_OUT(Tcontrol_t ) ** out_DEPTH_VAL ; //[nb_context] 150 151 public : SC_OUT(Tdepth_t ) ** out_DEPTH_CURRENT ; //[nb_context] 151 152 public : SC_OUT(Tdepth_t ) ** out_DEPTH_MIN ; //[nb_context] 152 153 public : SC_OUT(Tdepth_t ) ** out_DEPTH_MAX ; //[nb_context] 154 public : SC_OUT(Tcontrol_t ) ** out_DEPTH_FULL ; //[nb_context] 153 155 // If DEPTH_CURRENT : 154 156 // equal at DEPTH_MIN -> not speculative … … 172 174 private : uint32_t * reg_UPT_TOP_EVENT ; //[nb_context] 173 175 private : uint32_t * reg_UPT_UPDATE ; //[nb_context] 176 private : bool * reg_UPT_EMPTY ; //[nb_context] 174 177 175 178 private : bool * reg_IS_ACCURATE ; //[nb_context] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
r98 r101 160 160 { 161 161 ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context); 162 ALLOC1_SIGNAL_OUT(out_DEPTH_CURRENT,"CURRENT",Tdepth_t,_param->_size_depth); 163 ALLOC1_SIGNAL_OUT(out_DEPTH_MIN ,"MIN" ,Tdepth_t,_param->_size_depth); 164 ALLOC1_SIGNAL_OUT(out_DEPTH_MAX ,"MAX" ,Tdepth_t,_param->_size_depth+1); 162 ALLOC1_SIGNAL_OUT(out_DEPTH_VAL ,"VAL" ,Tcontrol_t,1); 163 ALLOC1_SIGNAL_OUT(out_DEPTH_CURRENT,"CURRENT",Tdepth_t ,_param->_size_depth); 164 ALLOC1_SIGNAL_OUT(out_DEPTH_MIN ,"MIN" ,Tdepth_t ,_param->_size_depth); 165 ALLOC1_SIGNAL_OUT(out_DEPTH_MAX ,"MAX" ,Tdepth_t ,_param->_size_depth); 166 ALLOC1_SIGNAL_OUT(out_DEPTH_FULL ,"FULL" ,Tcontrol_t,1); 165 167 } 166 168 … … 201 203 ALLOC1(reg_UPT_TOP_EVENT ,uint32_t ,_param->_nb_context); 202 204 ALLOC1(reg_UPT_UPDATE ,uint32_t ,_param->_nb_context); 205 ALLOC1(reg_UPT_EMPTY ,bool ,_param->_nb_context); 203 206 204 207 ALLOC1(reg_EVENT_STATE ,event_state_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
r98 r101 117 117 118 118 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 119 DELETE1_SIGNAL(out_DEPTH_VAL ,_param->_nb_context,1); 119 120 DELETE1_SIGNAL(out_DEPTH_CURRENT ,_param->_nb_context,_param->_size_depth); 120 121 DELETE1_SIGNAL(out_DEPTH_MIN ,_param->_nb_context,_param->_size_depth); 121 DELETE1_SIGNAL(out_DEPTH_MAX ,_param->_nb_context,_param->_size_depth+1); 122 DELETE1_SIGNAL(out_DEPTH_MAX ,_param->_nb_context,_param->_size_depth); 123 DELETE1_SIGNAL(out_DEPTH_FULL ,_param->_nb_context,1); 122 124 123 125 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 154 156 DELETE1(reg_UPT_TOP_EVENT ,_param->_nb_context); 155 157 DELETE1(reg_UPT_UPDATE ,_param->_nb_context); 158 DELETE1(reg_UPT_EMPTY ,_param->_nb_context); 156 159 157 160 DELETE1(reg_EVENT_STATE ,_param->_nb_context); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp
r98 r101 34 34 for (uint32_t i=0; i<_param->_nb_context; i++) 35 35 { 36 // is a valid instruction ? 37 // If DEPTH_CURRENT : 38 // equal at DEPTH_MIN -> not speculative 39 // not include ]DEPTH_MIN:DEPTH_MAX] -> previous branch miss 40 // include ]DEPTH_MIN:DEPTH_MAX] -> speculative 41 42 PORT_WRITE(out_DEPTH_VAL [i],(reg_UPDATE_PREDICTION_TABLE [i][reg_UPT_TOP [i]]._state == UPDATE_PREDICTION_STATE_EMPTY)); 36 43 if (_param->_have_port_depth) 37 44 { 38 45 PORT_WRITE(out_DEPTH_CURRENT [i], reg_UPT_TOP [i]); 39 46 PORT_WRITE(out_DEPTH_MIN [i], reg_UPT_BOTTOM [i]); 40 }41 47 PORT_WRITE(out_DEPTH_MAX [i], reg_UPT_TOP [i]); 48 } 49 PORT_WRITE(out_DEPTH_FULL [i], not reg_UPT_EMPTY [i] and (reg_UPT_TOP [i] == reg_UPT_BOTTOM [i])); 50 51 // bool empty = reg_UPT_EMPTY [i]; 52 // PORT_WRITE(out_DEPTH_MAX [i], ((empty)?reg_UPT_BOTTOM [i]:((reg_UPT_TOP [i]==0)?(_param->_size_upt_queue[i]-1):(reg_UPT_TOP [i]-1)))); 42 53 } 43 54 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
r98 r101 46 46 reg_UPT_TOP_EVENT [i] = 0; 47 47 reg_UPT_UPDATE [i] = 0; 48 reg_UPT_EMPTY [i] = true; 48 49 49 50 reg_IS_ACCURATE [i] = true; … … 87 88 // UPDATE_PREDICTION_TABLE 88 89 { 89 uint32_t bottom = reg_UPT_BOTTOM [i]; 90 bool end_ok = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_OK); 91 bool end_ko = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_KO); 90 uint32_t bottom = reg_UPT_BOTTOM [i]; 91 bool end_ok = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_OK); 92 bool end_ko = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_KO); 93 // event_state_t event_state = reg_EVENT_STATE [i]; 92 94 93 95 // Test if state is end 96 // if ((end_ok or end_ko) and 97 // ((event_state != EVENT_STATE_UPDATE_CONTEXT) and 98 // (event_state != EVENT_STATE_WAIT_END_EVENT))) 94 99 if (end_ok or end_ko) 95 100 { … … 102 107 // Update pointer 103 108 reg_UPT_BOTTOM [i] = (bottom+1)%_param->_size_upt_queue[i]; 109 110 if (reg_UPT_BOTTOM [i] == reg_UPT_TOP [i]) 111 reg_UPT_EMPTY [i] = true; // free a slot 112 104 113 // if (bottom = reg_UPT_UPDATE [i]) 105 114 // reg_UPT_UPDATE [i] = reg_UPT_BOTTOM [i]; … … 108 117 reg_UPT_TOP [i] = reg_UPT_TOP_EVENT [i]; 109 118 reg_UPT_UPDATE [i] = reg_UPT_TOP_EVENT [i]; 119 120 if (reg_UPT_BOTTOM [i] != reg_UPT_TOP [i]) 121 reg_UPT_EMPTY [i] = false; 110 122 } 111 123 } … … 290 302 // Update pointer 291 303 reg_UPT_TOP [context] = (upt_ptr_write+1)%_param->_size_upt_queue [context]; 304 reg_UPT_EMPTY [context] = false; 292 305 // reg_UPT_UPDATE [context] = reg_UPT_TOP [context]; 293 306 } … … 338 351 reg_UPT_TOP_EVENT [context] = top; 339 352 353 if (reg_UPT_BOTTOM [context] == reg_UPT_TOP [context]) 354 reg_UPT_EMPTY [i] = true; 355 340 356 #ifdef DEBUG_TEST 341 357 if (reg_UPDATE_PREDICTION_TABLE [context][depth]._state != UPDATE_PREDICTION_STATE_WAIT_END) … … 483 499 if (ko) 484 500 { 501 // Ko : wait end of all instruction 502 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO_WAIT_END (update)",context,depth); 503 504 // reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_KO_WAIT_END; 505 485 506 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO (update)",context,depth); 486 507 … … 535 556 536 557 // Free the branch with no accurate ? 537 if ( reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false)558 if ( (reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false) and not ko) 538 559 reg_IS_ACCURATE [context] = true; 539 560 } … … 587 608 // Tdepth_t depth = PORT_READ(in_EVENT_DEPTH [i]); 588 609 589 // Test if end of miss 610 // Test if end of miss -> all previous branch is complete 611 // -> all next branch is finish 590 612 if (event_type == EVENT_TYPE_MISS_SPECULATION) 591 613 { … … 602 624 603 625 reg_EVENT_STATE [i] = EVENT_STATE_OK; 626 reg_IS_ACCURATE [i] = true; 627 628 // Tdepth_t depth = reg_UPT_TOP [i]; 629 630 #ifdef DEBUG_TEST 631 // if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END_KO_WAIT_END) 632 // throw ERRORMORPHEO(FUNCTION,_("Event : invalid upt event state.")); 633 // if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END_KO) 634 // throw ERRORMORPHEO(FUNCTION,_("Event : invalid upt event state.")); 635 #endif 636 637 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO (update)",i,depth); 638 639 // reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_END_KO; 640 604 641 } 605 642 } … … 699 736 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPT_TOP_EVENT : %d",reg_UPT_TOP_EVENT [i]); 700 737 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPT_UPDATE : %d",reg_UPT_UPDATE [i]); 738 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPT_EMPTY : %d",reg_UPT_EMPTY [i]); 701 739 for (uint32_t j=0; j<_param->_size_upt_queue[i]; j++) 702 740 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %.4d, %.8x %.8x, %.1d %.1d %.1d, %.8d %.8x %.4d - %s",
Note: See TracChangeset
for help on using the changeset viewer.