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

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Types.h

    r105 r108  
    3333      CONTEXT_STATE_KO_MISS_LOAD_ADDR     , // update address manager
    3434      CONTEXT_STATE_KO_MISS_LOAD_WAITEND  , // wait end of event (miss load))
     35      CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR   , // update address manager
     36      CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND, // wait end of event (miss branch)
    3537//    CONTEXT_STATE_KO_MSYNC              , // wait completion of all memory operation
    3638//    CONTEXT_STATE_KO_MSYNC_ISSUE        , // issue msync operation
     
    6466      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_ADDR    : return "context_state_ko_miss_branch_addr"   ; break;
    6567      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_WAITEND : return "context_state_ko_miss_branch_waitend"; break;
     68      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR    : return "context_state_ko_miss_branch_and_load_addr"   ; break;
     69      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_WAITEND : return "context_state_ko_miss_branch_and_load_waitend"; break;
    6670      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_LOAD_ADDR      : return "context_state_ko_miss_load_addr"     ; break;
    6771      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_LOAD_WAITEND   : return "context_state_ko_miss_load_waitend"  ; break;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMoore.cpp

    r105 r108  
    3333        Tcontrol_t val              = ((state == CONTEXT_STATE_KO_EXCEP_ADDR      ) or
    3434                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_ADDR) or
     35                                       (state == CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR) or
    3536                                       (state == CONTEXT_STATE_KO_MISS_LOAD_ADDR  ) or
    3637                                       (state == CONTEXT_STATE_KO_PSYNC_ADDR      ) or
     
    5354          {
    5455          case CONTEXT_STATE_KO_EXCEP_ADDR      : (type = EVENT_TYPE_EXCEPTION              ); break;
     56          case CONTEXT_STATE_KO_MISS_BRANCH_AND_LOAD_ADDR:
    5557          case CONTEXT_STATE_KO_MISS_BRANCH_ADDR: (type = EVENT_TYPE_BRANCH_MISS_SPECULATION); break;
    5658          case CONTEXT_STATE_KO_MISS_LOAD_ADDR  : (type = EVENT_TYPE_LOAD_MISS_SPECULATION  ); break;
  • 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.