Ignore:
Timestamp:
Feb 12, 2009, 12:55:06 PM (15 years ago)
Author:
rosiere
Message:

1) decod_queue : add reg_LAST_SLOT.
2) Commit : insert on event -> to pop decod_queue. Head test : add information (speculative or not)
3) Context State / UPT : Branch miss and Load miss in same cycle.
4) Free List : Bank is on LSB not MSB.
5) Platforms : move data

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

    r106 r108  
    8282                  break;
    8383                }
     84              case CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND :
     85                {
     86                  // Wait end of all instruction
     87                  if (inst_all == 0)
     88                   
     89//                  state = CONTEXT_STATE_OK; // @@@ TODO : make MISS fast (miss decod)
     90                    state = CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR;
     91                  break;
     92                }
    8493              case CONTEXT_STATE_KO_EXCEP_SPR    :
    8594                {
     
    93102                }
    94103              case CONTEXT_STATE_KO_MISS_LOAD_ADDR    :
     104                {
     105                  // nothing, wait the update of internal register (pc)
     106                  break;
     107                }
     108              case CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR    :
    95109                {
    96110                  // nothing, wait the update of internal register (pc)
     
    209223
    210224              // priority : miss > excep > spr/sync
    211               uint8_t    priority0  = ((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR   ) or
    212                                        (state == CONTEXT_STATE_KO_MISS_LOAD_ADDR     ) or
    213                                        (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND) or
    214                                        (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND  ))?2:((state == EVENT_TYPE_EXCEPTION)?1:0);
     225              uint8_t    priority0  = ((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR            ) or
     226                                       (state == CONTEXT_STATE_KO_MISS_LOAD_ADDR              ) or
     227                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR   ) or
     228                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND         ) or
     229                                       (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND           ) or
     230                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND))?2:((state == EVENT_TYPE_EXCEPTION)?1:0);
    215231              uint8_t    priority1  = 2; // miss
    216232
     
    272288             
    273289              // miss > excep > spr/sync
    274               uint8_t    priority0  = ((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR   ) or
    275                                        (state == CONTEXT_STATE_KO_MISS_LOAD_ADDR     ) or
    276                                        (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND) or
    277                                        (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND  ))?2:((state == CONTEXT_STATE_KO_EXCEP)?1:0);
     290              uint8_t    priority0  = ((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR            ) or
     291                                       (state == CONTEXT_STATE_KO_MISS_LOAD_ADDR              ) or
     292                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR   ) or
     293                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND         ) or
     294                                       (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND           ) or
     295                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND))?2:((state == CONTEXT_STATE_KO_EXCEP)?1:0);
    278296              uint8_t    priority1  = (state == EVENT_TYPE_EXCEPTION)?1:0;
    279297
     
    405423           
    406424            // miss > excep > spr/sync
    407             uint8_t    priority0  = ((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR   ) or
    408                                      (state == CONTEXT_STATE_KO_MISS_LOAD_ADDR     ) or
    409                                      (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND) or
    410                                      (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND  ))?2:((state == CONTEXT_STATE_KO_EXCEP)?1:0);
     425              uint8_t    priority0  = ((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR            ) or
     426                                       (state == CONTEXT_STATE_KO_MISS_LOAD_ADDR              ) or
     427                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR   ) or
     428                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND         ) or
     429                                       (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND           ) or
     430                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND))?2:((state == CONTEXT_STATE_KO_EXCEP)?1:0);
    411431            uint8_t    priority1  = (state == EVENT_TYPE_EXCEPTION)?1:2; // else load_miss_speculation (EVENT_TYPE_MISS_SPECULATION)
    412432
     
    437457                  {
    438458                  case EVENT_TYPE_EXCEPTION               : {state_next = CONTEXT_STATE_KO_EXCEP;             break;}
    439                   case EVENT_TYPE_LOAD_MISS_SPECULATION   : {state_next = CONTEXT_STATE_KO_MISS_LOAD_WAITEND; break;}
     459                  case EVENT_TYPE_LOAD_MISS_SPECULATION   :
     460                    {
     461                      // Test if previous branch occure
     462                      if ((state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR            ) or
     463                          (state == CONTEXT_STATE_KO_MISS_BRANCH_WAITEND         ) or
     464                          (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR   ) or
     465                          (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND))
     466                        state_next = CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND;
     467                      else
     468                        state_next = CONTEXT_STATE_KO_MISS_LOAD_WAITEND;
     469                      break;
     470                    }
    440471                  case EVENT_TYPE_BRANCH_MISS_SPECULATION :
    441472                  case EVENT_TYPE_SPR_ACCESS              :
     
    480511                  }
    481512                case CONTEXT_STATE_KO_MISS_BRANCH_ADDR:
     513
    482514//                   {
    483515//                     reg_STATE [i] = CONTEXT_STATE_KO_MISS_WAITEND; //@@@ TODO : make MISS fast (miss decod)
     
    489521                  {
    490522                    reg_STATE [i] = CONTEXT_STATE_OK;
     523                    break;
     524                  }
     525                case CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR:
     526                  {
     527                    reg_STATE [i] = CONTEXT_STATE_KO_MISS_LOAD_ADDR;
    491528                    break;
    492529                  }
Note: See TracChangeset for help on using the changeset viewer.