Changeset 124 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src
- Timestamp:
- Jun 17, 2009, 2:11:25 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp
r123 r124 20 20 #define MANAGE_EVENT MANAGE_EVENT_NO_WAIT 21 21 22 #define PRIORITY_MISS_LOAD 3 23 #define PRIORITY_MISS_BRANCH 2 24 #define PRIORITY_EXCEPTION 1 25 #define PRIORITY_NONE 0 26 22 27 #define get_priority(x) \ 23 28 (((state == CONTEXT_STATE_KO_MISS_LOAD_ADDR ) or \ … … 25 30 (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR ) or \ 26 31 (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND ) or \ 27 (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE))? 3: \32 (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE))?PRIORITY_MISS_LOAD: \ 28 33 (((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR ) or \ 29 34 (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND ) or \ 30 (state == CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE ))? 2: \31 ((state == EVENT_TYPE_EXCEPTION)? 1: \35 (state == CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE ))?PRIORITY_MISS_BRANCH: \ 36 ((state == EVENT_TYPE_EXCEPTION)?PRIORITY_EXCEPTION: \ 32 37 0))) 33 38 … … 299 304 // priority : miss_load > miss_branch > excep > spr/sync 300 305 uint8_t priority0 = get_priority(state); 301 uint8_t priority1 = 2; // miss306 uint8_t priority1 = PRIORITY_MISS_BRANCH; // miss 302 307 303 308 // is_valid = can modify local information … … 306 311 bool is_valid = ((state == CONTEXT_STATE_OK) or 307 312 (state == CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE) or 308 313 // (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE) or 309 314 (depth1< depth0) or 310 315 ((depth1==depth0) and (priority1>=priority0))); // >= because another branch can be a miss prediction with same depth 316 317 bool is_invalid = priority0 == PRIORITY_MISS_LOAD; 311 318 312 319 #ifdef DEBUG_TEST … … 327 334 log_printf(TRACE,Context_State,FUNCTION," * is_valid : %d",is_valid ); 328 335 329 if (is_valid )336 if (is_valid and not is_invalid) 330 337 { 331 338 // reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR; … … 333 340 if (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE) 334 341 { 342 // #if (MANAGE_EVENT == MANAGE_EVENT_NO_WAIT) 343 // reg_STATE [i] = CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR; 344 // #else 335 345 reg_STATE [i] = CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND; 346 // #endif 336 347 } 337 348 else … … 346 357 reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR; 347 358 else 348 reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_WAITEND; 359 { 360 // #if (MANAGE_EVENT == MANAGE_EVENT_NO_WAIT) 361 // reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR; 362 // #else 363 reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_WAITEND; 364 // #endif 365 } 349 366 350 367 reg_EVENT_ADDRESS [i] = PORT_READ(in_BRANCH_EVENT_ADDRESS_SRC [i])+1; // address delay slot … … 386 403 // priority : miss_load > miss_branch > excep > spr/sync 387 404 uint8_t priority0 = get_priority(state); 388 uint8_t priority1 = 2; // miss405 uint8_t priority1 = PRIORITY_MISS_BRANCH; // miss 389 406 390 407 // is_valid = can modify local information … … 440 457 // miss_load > miss_branch > excep > spr/sync 441 458 uint8_t priority0 = get_priority(state); 442 uint8_t priority1 = (state == EVENT_TYPE_EXCEPTION)? 1:0;459 uint8_t priority1 = (state == EVENT_TYPE_EXCEPTION)?PRIORITY_EXCEPTION:PRIORITY_NONE; 443 460 444 461 // is_valid = can modify local information … … 623 640 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND : 624 641 { 642 // #if (MANAGE_EVENT == MANAGE_EVENT_NO_WAIT) 643 // state_next = CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR; 644 // #else 625 645 state_next = CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND; 646 // #endif 626 647 break; 627 648 } 628 649 default : 629 650 { 651 // #if (MANAGE_EVENT == MANAGE_EVENT_NO_WAIT) 652 // state_next = CONTEXT_STATE_KO_MISS_LOAD_ADDR; 653 // #else 630 654 state_next = CONTEXT_STATE_KO_MISS_LOAD_WAITEND; 655 // #endif 631 656 break; 632 657 } … … 688 713 throw ERRORMORPHEO(FUNCTION,toString(_("Context[%d], Have an interruption, Not yet supported (Comming Soon).\n"),i)); 689 714 } 715 716 717 #if (MANAGE_EVENT == MANAGE_EVENT_NO_WAIT) 718 for (uint32_t i=0; i<_param->_nb_context; i++) 719 switch (reg_STATE [i]) 720 { 721 case CONTEXT_STATE_KO_MISS_BRANCH_WAITEND : reg_STATE [i] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR ; break; 722 case CONTEXT_STATE_KO_MISS_LOAD_WAITEND : reg_STATE [i] = CONTEXT_STATE_KO_MISS_LOAD_ADDR ; break; 723 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND : reg_STATE [i] = CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR; break; 724 default : break; 725 } 726 #endif 690 727 } 691 728
Note: See TracChangeset
for help on using the changeset viewer.