Ignore:
Timestamp:
May 25, 2009, 7:40:26 PM (15 years ago)
Author:
rosiere
Message:

1) Prediction unit : static prediction not blocking

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

    r117 r119  
    328328                  else
    329329                    {
    330                       reg_STATE                  [i] =  CONTEXT_STATE_KO_MISS_BRANCH_WAITEND; //@@@ TODO : make MISS fast (miss decod)
    331 
    332                       Tcontrol_t dest_val = PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST_VAL[i]);
    333                       reg_EVENT_ADDRESS          [i] =  PORT_READ(in_BRANCH_EVENT_ADDRESS_SRC  [i])+1; // address delay slot
    334                       reg_EVENT_ADDRESS_EPCR     [i] =  PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST [i]);   // address_next
    335                       reg_EVENT_ADDRESS_EPCR_VAL [i] =  dest_val;
    336                     //reg_EVENT_ADDRESS_EEAR     [i] =  0;
    337                       reg_EVENT_ADDRESS_EEAR_VAL [i] =  0;
    338                       reg_EVENT_IS_DELAY_SLOT    [i] =  1;
    339                       reg_EVENT_IS_DS_TAKE       [i] =  dest_val;
    340                       reg_EVENT_DEPTH            [i] =  depth;
     330                      Tcontrol_t can_continue = PORT_READ(in_BRANCH_EVENT_CAN_CONTINUE    [i]);
     331                      Tcontrol_t dest_val     = PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST_VAL[i]);
     332
     333                      log_printf(TRACE,Context_State,FUNCTION,"  * dest_val    : %d",dest_val    );
     334                      log_printf(TRACE,Context_State,FUNCTION,"  * can_continue: %d",can_continue);
     335
     336                      if (can_continue)
     337                        reg_STATE                [i] =  CONTEXT_STATE_KO_MISS_BRANCH_ADDR;
     338                      else
     339                        reg_STATE                [i] =  CONTEXT_STATE_KO_MISS_BRANCH_WAITEND;
     340
     341                      reg_EVENT_ADDRESS          [i] = PORT_READ(in_BRANCH_EVENT_ADDRESS_SRC  [i])+1; // address delay slot
     342                      reg_EVENT_ADDRESS_EPCR     [i] = PORT_READ(in_BRANCH_EVENT_ADDRESS_DEST [i]);   // address_next
     343                      reg_EVENT_ADDRESS_EPCR_VAL [i] = dest_val;
     344                    //reg_EVENT_ADDRESS_EEAR     [i] = 0;
     345                      reg_EVENT_ADDRESS_EEAR_VAL [i] = 0;
     346                      reg_EVENT_IS_DELAY_SLOT    [i] = 1;
     347                      reg_EVENT_IS_DS_TAKE       [i] = dest_val;
     348                      reg_EVENT_DEPTH            [i] = depth;
     349                      reg_EVENT_FLUSH_ONLY       [i] = can_continue;
    341350                    }
    342351                }
     
    363372              Tdepth_t   depth0     = (depth_cur>=depth_min)?(depth_cur-depth_min):((depth_cur+depth_max-depth_min));
    364373              Tdepth_t   depth1     = (depth    >=depth_min)?(depth    -depth_min):((depth    +depth_max-depth_min));
    365 //               Tdepth_t   depth0     = (depth_cur>=depth_min)?(depth_cur):((depth_cur+depth_max));
    366 //               Tdepth_t   depth1     = (depth    >=depth_min)?(depth    ):((depth    +depth_max));
     374//            Tdepth_t   depth0     = (depth_cur>=depth_min)?(depth_cur):((depth_cur+depth_max));
     375//            Tdepth_t   depth1     = (depth    >=depth_min)?(depth    ):((depth    +depth_max));
    367376
    368377              // priority : miss_load > miss_branch > excep > spr/sync
     
    390399              if (is_valid)
    391400                {
    392 //                reg_STATE                  [context_id] =  CONTEXT_STATE_KO_MISS_BRANCH_ADDR;
    393                   reg_STATE                  [context_id] =  CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE;
    394                   reg_EVENT_DEPTH            [context_id] =  depth;
     401//                reg_STATE                  [context_id] = CONTEXT_STATE_KO_MISS_BRANCH_ADDR;
     402                  reg_STATE                  [context_id] = CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE;
     403                  reg_EVENT_DEPTH            [context_id] = depth;
     404                  reg_EVENT_FLUSH_ONLY       [context_id] = false;
    395405                }
    396406            }
     
    524534                //reg_EVENT_IS_DS_TAKE       [context] = 0;
    525535                  reg_EVENT_DEPTH            [context] = depth;
     536                  reg_EVENT_FLUSH_ONLY       [context] = false;
    526537                }
    527538            }
     
    635646                reg_EVENT_IS_DS_TAKE       [context] = 0;
    636647                reg_EVENT_DEPTH            [context] = depth;
     648                reg_EVENT_FLUSH_ONLY       [context] = false;
    637649              }
    638650          }
     
    679691        log_printf(TRACE,Context_State,FUNCTION,"    * reg_EVENT_IS_DS_TAKE       : %d"         ,reg_EVENT_IS_DS_TAKE       [i]);
    680692        log_printf(TRACE,Context_State,FUNCTION,"    * reg_EVENT_DEPTH            : %d"         ,reg_EVENT_DEPTH            [i]);
     693        log_printf(TRACE,Context_State,FUNCTION,"    * reg_EVENT_FLUSH_ONLY       : %d"         ,reg_EVENT_FLUSH_ONLY       [i]);
    681694      }
    682695#endif
Note: See TracChangeset for help on using the changeset viewer.