Changeset 82 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
- Timestamp:
- May 1, 2008, 6:48:45 PM (16 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
- Files:
-
- 1 added
- 13 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
r81 r82 71 71 ALLOC1_SC_SIGNAL( in_DECOD_RAS_ADDRESS ," in_DECOD_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_decod); 72 72 ALLOC1_SC_SIGNAL( in_DECOD_RAS_INDEX ," in_DECOD_RAS_INDEX ",Tptr_t ,_param->_nb_inst_decod); 73 ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_decod); 73 ALLOC1_SC_SIGNAL( in_DECOD_MISS_IFETCH ," in_DECOD_MISS_IFETCH ",Tcontrol_t ,_param->_nb_inst_decod); 74 ALLOC1_SC_SIGNAL( in_DECOD_MISS_DECOD ," in_DECOD_MISS_DECOD ",Tcontrol_t ,_param->_nb_inst_decod); 74 75 ALLOC1_SC_SIGNAL( in_DECOD_UPDATE_PREDICTION_ID ," in_DECOD_UPDATE_PREDICTION_ID ",Tprediction_ptr_t ,_param->_nb_inst_decod); 75 76 //ALLOC1_SC_SIGNAL(out_DECOD_DEPTH ,"out_DECOD_DEPTH ",Tdepth_t ,_param->_nb_inst_decod); 77 76 78 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL ," in_BRANCH_COMPLETE_VAL ",Tcontrol_t ,_param->_nb_inst_branch_complete); 77 79 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK ,"out_BRANCH_COMPLETE_ACK ",Tcontrol_t ,_param->_nb_inst_branch_complete); … … 84 86 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC ,"out_BRANCH_COMPLETE_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_complete); 85 87 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST ,"out_BRANCH_COMPLETE_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_complete); 88 89 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL ,"out_BRANCH_EVENT_VAL ",Tcontrol_t ,_param->_nb_context); 90 ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK ," in_BRANCH_EVENT_ACK ",Tcontrol_t ,_param->_nb_context); 91 // ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_CONTEXT_ID ," in_BRANCH_EVENT_CONTEXT_ID ",Tcontext_t ,_param->_nb_context); 92 // ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_DEPTH ," in_BRANCH_EVENT_DEPTH ",Tdepth_t ,_param->_nb_context); 93 // ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,"out_BRANCH_EVENT_MISS_PREDICTION",Tcontrol_t ,_param->_nb_context); 94 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC ,"out_BRANCH_EVENT_ADDRESS_SRC ",Taddress_t ,_param->_nb_context); 95 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST ,"out_BRANCH_EVENT_ADDRESS_DEST ",Taddress_t ,_param->_nb_context); 96 86 97 ALLOC1_SC_SIGNAL(out_UPDATE_VAL ,"out_UPDATE_VAL ",Tcontrol_t ,_param->_nb_inst_update); 87 98 ALLOC1_SC_SIGNAL( in_UPDATE_ACK ," in_UPDATE_ACK ",Tcontrol_t ,_param->_nb_inst_update); … … 96 107 ALLOC1_SC_SIGNAL(out_UPDATE_DIR_HISTORY ,"out_UPDATE_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_update); 97 108 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_VAL ,"out_UPDATE_RAS_VAL ",Tcontrol_t ,_param->_nb_inst_update); 109 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PUSH ,"out_UPDATE_RAS_PUSH ",Tcontrol_t ,_param->_nb_inst_update); 98 110 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS ,"out_UPDATE_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_update); 99 111 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_INDEX ,"out_UPDATE_RAS_INDEX ",Tptr_t ,_param->_nb_inst_update); … … 136 148 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_ADDRESS ,_param->_nb_inst_decod); 137 149 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_INDEX ,_param->_nb_inst_decod); 138 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod); 139 if (_param->_have_port_depth) 150 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_IFETCH ,_param->_nb_inst_decod); 151 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_DECOD ,_param->_nb_inst_decod); 152 if (_param->_have_port_max_depth) 140 153 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_UPDATE_PREDICTION_ID ,_param->_nb_inst_decod); 141 154 //if (_param->_have_port_depth) … … 145 158 if (_param->_have_port_context_id) 146 159 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_CONTEXT_ID ,_param->_nb_inst_branch_complete); 147 if (_param->_have_port_ depth)160 if (_param->_have_port_max_depth) 148 161 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_DEPTH ,_param->_nb_inst_branch_complete); 149 162 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_ADDRESS ,_param->_nb_inst_branch_complete); … … 153 166 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_SRC ,_param->_nb_inst_branch_complete); 154 167 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_DEST ,_param->_nb_inst_branch_complete); 168 169 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_VAL ,_param->_nb_context); 170 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ACK ,_param->_nb_context); 171 // if (_param->_have_port_context_id) 172 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_CONTEXT_ID ,_param->_nb_context); 173 // if (_param->_have_port_max_depth) 174 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_DEPTH ,_param->_nb_context); 175 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ADDRESS ,_param->_nb_context); 176 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context); 177 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_SRC ,_param->_nb_context); 178 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context); 179 155 180 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_VAL ,_param->_nb_inst_update); 156 181 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_UPDATE_ACK ,_param->_nb_inst_update); … … 167 192 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIR_HISTORY ,_param->_nb_inst_update); 168 193 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_VAL ,_param->_nb_inst_update); 194 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PUSH ,_param->_nb_inst_update); 169 195 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_ADDRESS ,_param->_nb_inst_update); 170 196 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_INDEX ,_param->_nb_inst_update); 171 197 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PREDICTION_IFETCH ,_param->_nb_inst_update); 172 if (_param->_have_port_depth) 173 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH ,_param->_nb_context); 174 if (_param->_have_port_depth) 175 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL ,_param->_nb_context); 198 for (uint32_t i=0; i<_param->_nb_context; i++) 199 { 200 if (_param->_have_port_depth[i]) 201 { 202 INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL [i]); 203 } 204 INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH [i]); 205 } 176 206 177 207 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 202 232 SC_START(5); 203 233 in_NRESET->write(1); 234 235 for (uint32_t i=0; i<_param->_nb_context; i++) 236 { 237 PORT_WRITE(in_BRANCH_EVENT_ACK [i],1); 238 } 204 239 205 240 LABEL("Loop of Test"); … … 236 271 in_PREDICT_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 237 272 238 if (_param->_have_port_depth )273 if (_param->_have_port_depth[context]) 239 274 { 240 275 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 276 } 241 277 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i); 242 }278 243 279 SC_START(0); 244 280 … … 256 292 in_PREDICT_VAL [port]->write(0); 257 293 258 if (_param->_have_port_depth )294 if (_param->_have_port_depth[context]) 259 295 { 260 296 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 297 } 261 298 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1); 262 } 299 263 300 } 264 301 } … … 283 320 in_DECOD_RAS_ADDRESS [port]->write(0xdeaddead+i); 284 321 in_DECOD_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 285 in_DECOD_MISS_PREDICTION [port]->write(false); 322 in_DECOD_MISS_IFETCH [port]->write(false); 323 in_DECOD_MISS_DECOD [port]->write(false); 286 324 in_DECOD_UPDATE_PREDICTION_ID [port]->write(i); 287 325 288 if (_param->_have_port_depth )326 if (_param->_have_port_depth[context]) 289 327 { 290 328 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 329 } 291 330 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 292 }293 331 294 332 SC_START(0); … … 307 345 in_DECOD_VAL [port]->write(0); 308 346 309 if (_param->_have_port_depth )347 if (_param->_have_port_depth[context]) 310 348 { 311 349 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 350 } 312 351 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 313 }314 352 } 315 353 } … … 331 369 in_BRANCH_COMPLETE_FLAG [port]->write(1); 332 370 333 if (_param->_have_port_depth )371 if (_param->_have_port_depth[context]) 334 372 { 335 373 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 374 } 336 375 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 337 }338 376 339 377 SC_START(0); … … 357 395 in_BRANCH_COMPLETE_VAL [port]->write(0); 358 396 359 if (_param->_have_port_depth )397 if (_param->_have_port_depth[context]) 360 398 { 361 399 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 400 } 362 401 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 363 }364 402 } 365 403 } … … 396 434 TEST(Thistory_t ,out_UPDATE_DIR_HISTORY [port]->read(), i); 397 435 TEST(Tcontrol_t ,out_UPDATE_RAS_VAL [port]->read(), 0); 436 TEST(Tcontrol_t ,out_UPDATE_RAS_PUSH [port]->read(), 0); 398 437 TEST(Taddress_t ,out_UPDATE_RAS_ADDRESS [port]->read(), 0xdeaddead+i); 399 438 TEST(Tptr_t ,out_UPDATE_RAS_INDEX [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]); … … 411 450 412 451 // wait the garbage collector 413 if (_param->_have_port_depth) 414 while ((out_DEPTH_TAIL [context]->read() != 0) and 415 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 416 { 417 LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read()); 418 SC_START(1); 419 } 452 while ((not (_param->_have_port_depth[context]) or (out_DEPTH_TAIL [context]->read() != 0)) and 453 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 454 { 455 LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read()); 456 SC_START(1); 457 } 420 458 } 421 459 } … … 448 486 in_PREDICT_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 449 487 450 if (_param->_have_port_depth )488 if (_param->_have_port_depth[context]) 451 489 { 452 490 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 491 } 453 492 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i); 454 } 493 455 494 SC_START(0); 456 495 … … 468 507 in_PREDICT_VAL [port]->write(0); 469 508 470 if (_param->_have_port_depth )509 if (_param->_have_port_depth[context]) 471 510 { 472 511 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 512 } 473 513 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1); 474 }475 514 } 476 515 } … … 495 534 in_DECOD_RAS_ADDRESS [port]->write(0xdeaddead+i); 496 535 in_DECOD_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 497 in_DECOD_MISS_PREDICTION [port]->write(false); 536 in_DECOD_MISS_IFETCH [port]->write(false); 537 in_DECOD_MISS_DECOD [port]->write(false); 498 538 in_DECOD_UPDATE_PREDICTION_ID [port]->write(i); 499 539 500 if (_param->_have_port_depth )540 if (_param->_have_port_depth[context]) 501 541 { 502 542 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 543 } 503 544 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 504 }505 545 506 546 SC_START(0); … … 519 559 in_DECOD_VAL [port]->write(0); 520 560 521 if (_param->_have_port_depth )561 if (_param->_have_port_depth[context]) 522 562 { 523 563 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 564 } 524 565 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 525 }526 566 } 527 567 } … … 543 583 in_BRANCH_COMPLETE_FLAG [port]->write(0); 544 584 545 if (_param->_have_port_depth )585 if (_param->_have_port_depth[context]) 546 586 { 547 587 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 588 } 548 589 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 549 }550 590 551 591 SC_START(0); … … 604 644 TEST(Thistory_t ,out_UPDATE_DIR_HISTORY [port]->read(), i); 605 645 TEST(Tcontrol_t ,out_UPDATE_RAS_VAL [port]->read(), 0); 646 TEST(Tcontrol_t ,out_UPDATE_RAS_PUSH [port]->read(), 0); 606 647 TEST(Taddress_t ,out_UPDATE_RAS_ADDRESS [port]->read(), 0xdeaddead+i); 607 648 TEST(Tptr_t ,out_UPDATE_RAS_INDEX [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]); … … 619 660 620 661 // wait the garbage collector 621 if (_param->_have_port_depth) 622 while ((out_DEPTH_TAIL [context]->read() != 0) and 623 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 662 while (((not (_param->_have_port_depth[context])) or (out_DEPTH_TAIL [context]->read() != 0)) and 663 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 624 664 { 625 665 LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read()); … … 671 711 delete [] in_DECOD_RAS_ADDRESS ; 672 712 delete [] in_DECOD_RAS_INDEX ; 673 delete [] in_DECOD_MISS_PREDICTION ; 713 delete [] in_DECOD_MISS_IFETCH ; 714 delete [] in_DECOD_MISS_DECOD ; 674 715 delete [] in_DECOD_UPDATE_PREDICTION_ID ; 675 716 //delete [] out_DECOD_DEPTH ; … … 686 727 delete [] out_BRANCH_COMPLETE_ADDRESS_SRC ; 687 728 delete [] out_BRANCH_COMPLETE_ADDRESS_DEST ; 729 730 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 731 delete [] out_BRANCH_EVENT_VAL ; 732 delete [] in_BRANCH_EVENT_ACK ; 733 // delete [] in_BRANCH_EVENT_CONTEXT_ID ; 734 // delete [] in_BRANCH_EVENT_DEPTH ; 735 // delete [] out_BRANCH_EVENT_MISS_PREDICTION; 736 delete [] out_BRANCH_EVENT_ADDRESS_SRC ; 737 delete [] out_BRANCH_EVENT_ADDRESS_DEST ; 688 738 689 739 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 700 750 delete [] out_UPDATE_DIR_HISTORY ; 701 751 delete [] out_UPDATE_RAS_VAL ; 752 delete [] out_UPDATE_RAS_PUSH ; 702 753 delete [] out_UPDATE_RAS_ADDRESS ; 703 754 delete [] out_UPDATE_RAS_INDEX ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h
r81 r82 35 35 36 36 public : uint32_t _size_context_id ; 37 public : uint32_t _size_depth ; 37 public : uint32_t * _size_depth ; // [nb_context] 38 public : uint32_t _max_size_depth ; 38 39 public : uint32_t _max_size_ras_index ; 39 40 40 41 public : bool _have_port_context_id ; 41 public : bool _have_port_depth ; 42 public : bool * _have_port_depth ; // [nb_context] 43 public : bool _have_port_max_depth ; 42 44 public : bool _have_port_history ; 43 45 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h
r81 r82 24 24 UPDATE_PREDICTION_STATE_WAIT_DECOD , // Fetch have access at the predictor 25 25 UPDATE_PREDICTION_STATE_WAITEND , // Have make a prediction, wait branch_complete 26 UPDATE_PREDICTION_STATE_EVENT , // have a event - must signal at the context_unit 26 27 UPDATE_PREDICTION_STATE_OK , // branch is complete and can update predictor 27 28 UPDATE_PREDICTION_STATE_KO , // have a event - must update predictor unit … … 58 59 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break; 59 60 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAITEND : return "waitend" ; break; 61 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT : return "event" ; break; 60 62 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_OK : return "ok" ; break; 61 63 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_KO : return "ko" ; break; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h
r81 r82 88 88 public : SC_IN (Taddress_t ) ** in_DECOD_RAS_ADDRESS ; //[nb_inst_decod] 89 89 public : SC_IN (Tptr_t ) ** in_DECOD_RAS_INDEX ; //[nb_inst_decod] 90 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_PREDICTION ; //[nb_inst_decod] // ifetch is a miss pred 90 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_IFETCH ; //[nb_inst_decod] 91 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_DECOD ; //[nb_inst_decod] 91 92 public : SC_IN (Tprediction_ptr_t ) ** in_DECOD_UPDATE_PREDICTION_ID ; //[nb_inst_decod] 92 93 //public : SC_OUT(Tdepth_t ) ** out_DECOD_DEPTH ; //[nb_inst_decod] … … 103 104 public : SC_OUT(Taddress_t ) ** out_BRANCH_COMPLETE_ADDRESS_SRC ; //[nb_inst_branch_complete] 104 105 public : SC_OUT(Taddress_t ) ** out_BRANCH_COMPLETE_ADDRESS_DEST ; //[nb_inst_branch_complete] 106 107 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_VAL ; //[nb_context] 109 public : SC_IN (Tcontrol_t ) ** in_BRANCH_EVENT_ACK ; //[nb_context] 110 //public : SC_OUT(Tcontext_t ) ** out_BRANCH_EVENT_CONTEXT_ID ; //[nb_context] 111 //public : SC_OUT(Tdepth_t ) ** out_BRANCH_EVENT_DEPTH ; //[nb_context] 112 //public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_MISS_PREDICTION; //[nb_context] is always miss prediction 113 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_SRC ; //[nb_context] 114 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_DEST ; //[nb_context] 105 115 106 116 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 117 127 public : SC_OUT(Thistory_t ) ** out_UPDATE_DIR_HISTORY ; //[nb_inst_update] 118 128 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_VAL ; //[nb_inst_update] 129 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PUSH ; //[nb_inst_update] 119 130 public : SC_OUT(Taddress_t ) ** out_UPDATE_RAS_ADDRESS ; //[nb_inst_update] 120 131 public : SC_OUT(Tptr_t ) ** out_UPDATE_RAS_INDEX ; //[nb_inst_update] … … 131 142 private : uint32_t * reg_BOTTOM ; //[nb_context] 132 143 private : uint32_t * reg_NB_ELT ; //[nb_context] 144 private : uint32_t * reg_NB_ELT_UPDATE ; //[nb_context] 133 145 private : uint32_t * reg_NB_ELT_NEED_UPDATE ; //[nb_context] 134 146 private : entry_t ** reg_UPDATE_PREDICTION_TABLE; //[nb_context][size_queue] … … 142 154 private : Tcontrol_t * internal_BRANCH_COMPLETE_TAKE ; //[nb_inst_branch_complete] 143 155 private : Taddress_t * internal_BRANCH_COMPLETE_ADDRESS_DEST ; //[nb_inst_branch_complete] 156 private : Tcontrol_t * internal_BRANCH_EVENT_VAL ; //[nb_context] 157 private : Tdepth_t * internal_BRANCH_EVENT_DEPTH ; //[nb_context] 144 158 private : Tcontrol_t * internal_UPDATE_VAL ; //[nb_inst_update] 145 159 private : Tcontext_t * internal_UPDATE_CONTEXT_ID ; //[nb_inst_update] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp
r81 r82 43 43 44 44 _size_context_id = log2(nb_context); 45 _size_depth = log2(max<uint32_t>(size_queue,nb_context)); 45 _size_depth = new uint32_t[_nb_context]; 46 _have_port_depth = new bool [_nb_context]; 47 for (uint32_t i=0; i<_nb_context; i++) 48 { 49 _size_depth [i] = log2(_size_queue[i]); 50 _have_port_depth [i] = (_size_depth [i] > 0); 51 } 52 _max_size_depth = max<uint32_t>(_size_depth,_nb_context); 46 53 _max_size_ras_index = max<uint32_t>(_size_ras_index,nb_context); 47 54 48 55 _have_port_context_id = _size_context_id> 0; 49 _have_port_ depth = _size_depth> 0;56 _have_port_max_depth = _max_size_depth > 0; 50 57 _have_port_history = _size_history > 0; 51 58 … … 68 75 { 69 76 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin"); 77 delete [] _size_depth ; 78 delete [] _have_port_depth; 70 79 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End"); 71 80 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters_msg_error.cpp
r81 r82 27 27 Parameters_test test ("Update_Prediction_Table"); 28 28 29 if (morpheo::behavioural::test<Tdepth_t>(_ size_depth) == false)29 if (morpheo::behavioural::test<Tdepth_t>(_max_size_depth) == false) 30 30 test.error("type \"Tdepth_t\" is too small."); 31 31 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp
r81 r82 128 128 if (_param->_have_port_context_id) 129 129 sensitive << (*(in_DECOD_CONTEXT_ID [i])); 130 sensitive << (*(in_DECOD_MISS_PREDICTION [i])); 130 sensitive << (*(in_DECOD_MISS_IFETCH [i])) 131 << (*(in_DECOD_MISS_DECOD [i])); 131 132 } 132 133 … … 135 136 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 136 137 { 137 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_PREDICTION [i])); 138 if (_param->_have_port_context_id) 139 (*(out_DECOD_ACK [i])) (*(in_DECOD_CONTEXT_ID [i])); 138 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_IFETCH [i])); 139 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_DECOD [i])); 140 if (_param->_have_port_context_id) 141 (*(out_DECOD_ACK [i])) (*(in_DECOD_CONTEXT_ID [i])); 140 142 } 141 143 # endif … … 150 152 if (_param->_have_port_context_id) 151 153 sensitive << (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 152 if (_param->_have_port_ depth)154 if (_param->_have_port_max_depth) 153 155 sensitive << (*(in_BRANCH_COMPLETE_DEPTH [i])); 154 156 sensitive << (*(in_BRANCH_COMPLETE_FLAG [i])) … … 162 164 if (_param->_have_port_context_id) 163 165 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 164 if (_param->_have_port_ depth)166 if (_param->_have_port_max_depth) 165 167 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 166 168 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_FLAG [i])); … … 169 171 if (_param->_have_port_context_id) 170 172 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 171 if (_param->_have_port_ depth)173 if (_param->_have_port_max_depth) 172 174 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 173 175 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_FLAG [i])); … … 175 177 if (_param->_have_port_context_id) 176 178 (*(out_BRANCH_COMPLETE_ADDRESS_SRC [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 177 if (_param->_have_port_ depth)179 if (_param->_have_port_max_depth) 178 180 (*(out_BRANCH_COMPLETE_ADDRESS_SRC [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 179 181 180 182 if (_param->_have_port_context_id) 181 183 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 182 if (_param->_have_port_ depth)184 if (_param->_have_port_max_depth) 183 185 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 184 186 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_ADDRESS [i])); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
r81 r82 76 76 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 77 77 { 78 ALLOC1_INTERFACE(" predict", IN,SOUTH, "predict", _param->_nb_inst_predict);78 ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_predict); 79 79 80 80 ALLOC1_VALACK_IN ( in_DECOD_VAL ,VAL); … … 87 87 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 88 88 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); 89 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION ,"miss_prediction" ,Tcontrol_t ,1); 90 ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_size_depth); 89 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_IFETCH ,"miss_ifetch" ,Tcontrol_t ,1); 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 92 // ALLOC1_SIGNAL_OUT(out_DECOD_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth); 92 93 } … … 95 96 { 96 97 ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete); 97 98 98 99 99 ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL ,VAL); 100 100 ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK ,ACK); 101 101 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->_ size_depth);102 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH ,"depth" ,Tdepth_t ,_param->_max_size_depth); 103 103 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS ,"address" ,Taddress_t,_param->_size_address); 104 104 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG ,"flag" ,Tcontrol_t,1); … … 107 107 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_address); 108 108 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_address); 109 } 110 111 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 112 { 113 ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context); 114 115 ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL ,VAL); 116 ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK ,ACK); 117 // 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_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); 109 122 } 110 123 … … 125 138 ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_HISTORY ,"dir_history" ,Thistory_t ,_param->_size_history); 126 139 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_VAL ,"ras_val" ,Tcontrol_t ,1); 140 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH ,"ras_push" ,Tcontrol_t ,1); 127 141 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 128 142 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); … … 134 148 ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context); 135 149 136 ALLOC1_SIGNAL_OUT(out_DEPTH_ NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth);137 ALLOC1_SIGNAL_OUT(out_DEPTH_ TAIL,"TAIL",Tdepth_t,_param->_size_depth);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); 138 152 } 139 153 … … 145 159 internal_BRANCH_COMPLETE_TAKE = new Tcontrol_t [_param->_nb_inst_branch_complete]; 146 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]; 147 163 internal_UPDATE_VAL = new Tcontrol_t [_param->_nb_inst_update]; 148 164 internal_UPDATE_CONTEXT_ID = new Tcontext_t [_param->_nb_inst_update]; … … 153 169 reg_BOTTOM = new uint32_t [_param->_nb_context]; 154 170 reg_NB_ELT = new uint32_t [_param->_nb_context]; 171 reg_NB_ELT_UPDATE = new uint32_t [_param->_nb_context]; 155 172 reg_NB_ELT_NEED_UPDATE = new uint32_t [_param->_nb_context]; 156 173 reg_UPDATE_PREDICTION_TABLE = new entry_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
r81 r82 56 56 delete [] in_DECOD_RAS_ADDRESS ; 57 57 delete [] in_DECOD_RAS_INDEX ; 58 delete [] in_DECOD_MISS_PREDICTION ; 59 if (_param->_have_port_depth) 58 delete [] in_DECOD_MISS_IFETCH ; 59 delete [] in_DECOD_MISS_DECOD ; 60 if (_param->_have_port_max_depth) 60 61 delete [] in_DECOD_UPDATE_PREDICTION_ID ; 61 62 // if (_param->_have_port_depth) … … 67 68 if (_param->_have_port_context_id) 68 69 delete [] in_BRANCH_COMPLETE_CONTEXT_ID ; 69 if (_param->_have_port_ depth)70 if (_param->_have_port_max_depth) 70 71 delete [] in_BRANCH_COMPLETE_DEPTH ; 71 72 delete [] in_BRANCH_COMPLETE_ADDRESS ; … … 75 76 delete [] out_BRANCH_COMPLETE_ADDRESS_SRC ; 76 77 delete [] out_BRANCH_COMPLETE_ADDRESS_DEST ; 78 79 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 80 delete [] out_BRANCH_EVENT_VAL ; 81 delete [] in_BRANCH_EVENT_ACK ; 82 // if (_param->_have_port_context_id) 83 // delete [] in_BRANCH_EVENT_CONTEXT_ID ; 84 // if (_param->_have_port_max_depth) 85 // delete [] in_BRANCH_EVENT_DEPTH ; 86 // delete [] out_BRANCH_EVENT_MISS_PREDICTION; 87 delete [] out_BRANCH_EVENT_ADDRESS_SRC ; 88 delete [] out_BRANCH_EVENT_ADDRESS_DEST ; 77 89 78 90 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 91 103 delete [] out_UPDATE_DIR_HISTORY ; 92 104 delete [] out_UPDATE_RAS_VAL ; 105 delete [] out_UPDATE_RAS_PUSH ; 93 106 delete [] out_UPDATE_RAS_ADDRESS ; 94 107 delete [] out_UPDATE_RAS_INDEX ; … … 96 109 97 110 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 98 if (_param->_have_port_ depth)111 if (_param->_have_port_max_depth) 99 112 { 100 113 delete [] out_DEPTH_NB_BRANCH; … … 110 123 delete [] internal_BRANCH_COMPLETE_TAKE ; 111 124 delete [] internal_BRANCH_COMPLETE_ADDRESS_DEST ; 125 delete [] internal_BRANCH_EVENT_VAL ; 126 delete [] internal_BRANCH_EVENT_DEPTH ; 112 127 delete [] internal_UPDATE_VAL ; 113 128 delete [] internal_UPDATE_CONTEXT_ID ; … … 118 133 delete [] reg_BOTTOM; 119 134 delete [] reg_NB_ELT; 135 delete [] reg_NB_ELT_UPDATE; 120 136 delete [] reg_NB_ELT_NEED_UPDATE; 121 137 for (uint32_t i=0; i<_param->_nb_context; i++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp
r81 r82 27 27 { 28 28 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0; 29 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0;29 Tdepth_t depth = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0; 30 30 Tcontrol_t miss = false; 31 31 Tcontrol_t take = reg_UPDATE_PREDICTION_TABLE [context][depth]._last_take ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp
r81 r82 26 26 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 27 27 { 28 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_ PREDICTION[i]);28 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_DECOD [i]); 29 29 30 30 if (miss) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp
r81 r82 28 28 // =================================================================== 29 29 30 if (_param->_have_port_depth) 31 for (uint32_t i=0; i<_param->_nb_context; i++) 32 { 33 PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]); 34 PORT_WRITE(out_DEPTH_TAIL [i], reg_BOTTOM [i]); 35 } 36 30 for (uint32_t i=0; i<_param->_nb_context; i++) 31 { 32 if (_param->_have_port_depth [i]) 33 { 34 PORT_WRITE(out_DEPTH_TAIL [i], reg_BOTTOM [i]); 35 } 36 PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]); 37 } 37 38 // =================================================================== 38 39 // =====[ UPDATE ]==================================================== … … 72 73 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or 73 74 (cond == BRANCH_CONDITION_READ_STACK)); 74 75 76 Tcontrol_t push = ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK) or 77 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK)); 78 75 79 if (_param->_have_port_context_id) 76 80 PORT_WRITE(out_UPDATE_CONTEXT_ID [i],context); … … 85 89 PORT_WRITE(out_UPDATE_DIR_HISTORY [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._history ); 86 90 PORT_WRITE(out_UPDATE_RAS_VAL [i],ras_val); 91 PORT_WRITE(out_UPDATE_RAS_PUSH [i],push); 87 92 PORT_WRITE(out_UPDATE_RAS_ADDRESS [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras ); 88 93 PORT_WRITE(out_UPDATE_RAS_INDEX [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._index_ras ); … … 99 104 } 100 105 106 // =================================================================== 107 // =====[ BRANCH_EVENT ]============================================== 108 // =================================================================== 109 for (uint32_t i=0; i<_param->_nb_context; i++) 110 { 111 Tdepth_t depth = (reg_BOTTOM [i] + reg_NB_ELT_UPDATE [i])%_param->_size_queue [i]; 112 state_t state = reg_UPDATE_PREDICTION_TABLE [i][depth]._state; 113 114 Tcontrol_t val = (state == UPDATE_PREDICTION_STATE_EVENT); 115 116 if (val) 117 { 118 PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_src ); 119 PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_dest); 120 internal_BRANCH_EVENT_DEPTH [i] = depth; 121 } 122 123 internal_BRANCH_EVENT_VAL [i] = val; 124 PORT_WRITE(out_BRANCH_EVENT_VAL [i], internal_BRANCH_EVENT_VAL [i]); 125 } 101 126 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End"); 102 127 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
r81 r82 31 31 reg_BOTTOM [i] = 0; 32 32 reg_NB_ELT [i] = 0; 33 reg_NB_ELT_UPDATE [i] = 0; 33 34 reg_NB_ELT_NEED_UPDATE [i] = 0; 34 35 for (uint32_t j=0; j<_param->_size_queue[i]; j++) … … 74 75 if (PORT_READ(in_DECOD_VAL[i]) and internal_DECOD_ACK [i]) 75 76 { 76 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 77 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_PREDICTION [i]); 77 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 78 Tcontrol_t miss_ifetch = PORT_READ(in_DECOD_MISS_IFETCH [i]); 79 Tcontrol_t miss_decod = PORT_READ(in_DECOD_MISS_DECOD [i]); 78 80 79 81 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"DECOD[%d] - Accepted",i); 80 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 81 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss : %d",miss); 82 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt : %d",reg_NB_ELT[context]); 82 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 83 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_ifetch : %d",miss_ifetch); 84 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_decod : %d",miss_decod); 85 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt : %d",reg_NB_ELT[context]); 83 86 84 87 // Test if miss ifetch 85 88 // miss ifetch = decod a branch and the predict unit have not predict this branch ... gloup :P 86 if (miss )89 if (miss_ifetch or miss_decod) 87 90 { 88 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;91 Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0; 89 92 Tdepth_t top = reg_TOP [context]; 90 93 … … 127 130 } 128 131 } 132 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; // rewrite 129 133 130 134 reg_TOP [context] = (depth+1)%_param->_size_queue [context]; … … 135 139 { 136 140 // Normal case : branch is previous predicated, change state of branch 137 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;141 Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0; 138 142 139 143 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_WAITEND; … … 148 152 { 149 153 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0; 150 Tdepth_t depth = (_param->_have_port_ depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0;154 Tdepth_t depth = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0; 151 155 152 156 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"BRANCH_COMPLETE[%d] - Accepted",i); … … 158 162 { 159 163 // Miss case 160 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_ KO;164 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; 161 165 162 166 // Another prediction (prediction with depth higer) … … 231 235 232 236 // =================================================================== 237 // =====[ BRANCH_EVENT ]============================================== 238 // =================================================================== 239 for (uint32_t i=0; i<_param->_nb_context; i++) 240 if (internal_BRANCH_EVENT_VAL [i] and PORT_READ(in_BRANCH_EVENT_ACK [i])) 241 { 242 Tdepth_t depth = internal_BRANCH_EVENT_DEPTH [i]; 243 244 reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_KO; 245 } 246 247 // =================================================================== 233 248 // =====[ GARBAGE COLLECTOR ]========================================= 234 249 // =================================================================== … … 253 268 } 254 269 255 //#if (DEBUG >= DEBUG_TRACE)270 #if (DEBUG >= DEBUG_TRACE) 256 271 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"Dump Update_Prediction_Table"); 257 272 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPDATE_PRIORITY : %d",reg_UPDATE_PRIORITY); 258 273 for (uint32_t i=0; i<_param->_nb_context; i++) 259 274 { 260 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * Update_Prediction_Table [%d]",i);275 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * Update_Prediction_Table [%d]",i); 261 276 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_TOP : %d",reg_TOP [i]); 262 277 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_BOTTOM : %d",reg_BOTTOM [i]); … … 266 281 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %s %x",j,toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str(),reg_UPDATE_PREDICTION_TABLE [i][j]._address_src); 267 282 } 268 //#endif283 #endif 269 284 270 285
Note: See TracChangeset
for help on using the changeset viewer.