Changeset 112 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp
- Timestamp:
- Mar 18, 2009, 11:36:26 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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.