Ignore:
Timestamp:
Feb 11, 2009, 12:03:25 AM (15 years ago)
Author:
rosiere
Message:

1) Fix test in Direction_Glue for Conditionnal Branch
2) Fix Instruction Address Compute

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue.cpp

    r88 r107  
    9292                PORT_WRITE(out_PREDICT_ACK [i], 1);
    9393               
    94                 // constant direction : never / always
     94                // constant direction : never / always
    9595                switch (_param->_predictor_scheme)
    9696                  {
     
    166166
    167167#  ifdef SYSTEMCASS_SPECIFIC
    168             // List dependency information
    169             for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    170               {
    171 
    172                 switch (_param->_predictor_scheme)
    173                   {
    174                   case PREDICTOR_STATIC      :
    175                     {
    176                       (*(out_PREDICT_DIRECTION             [i])) (*(in_PREDICT_STATIC               [i]));
    177 
    178                       break;
    179                     }
    180                   case PREDICTOR_LAST_TAKE   :
    181                     {
    182                       (*(out_PREDICT_DIRECTION             [i])) (*(in_PREDICT_LAST_TAKE            [i]));
    183 
    184                       break;
    185                     }
    186                   case PREDICTOR_COUNTER     :
    187                   case PREDICTOR_LOCAL       :
    188                   case PREDICTOR_GLOBAL      :
    189                   case PREDICTOR_META        :
    190                   case PREDICTOR_CUSTOM      :
    191                     {
    192                       (*(out_PREDICT_ACK                   [i])) (*(in_PREDICT_PREDICTOR_ACK        [i]));
    193                       (*(out_PREDICT_HISTORY               [i])) (*(in_PREDICT_PREDICTOR_HISTORY    [i]));
    194                       (*(out_PREDICT_DIRECTION             [i])) (*(in_PREDICT_PREDICTOR_DIRECTION  [i]));
    195                       (*(out_PREDICT_PREDICTOR_VAL         [i])) (*(in_PREDICT_VAL                  [i]));
    196                       (*(out_PREDICT_PREDICTOR_ADDRESS_SRC [i])) (*(in_PREDICT_ADDRESS_SRC          [i]));
    197 
    198                       break;
    199                     }
    200                   default :
    201                     {
    202                       break;
    203                     }
    204                   }
    205               }
     168//          // List dependency information
     169//          for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
     170//            {
     171
     172//              switch (_param->_predictor_scheme)
     173//                {
     174//                case PREDICTOR_STATIC      :
     175//                  {
     176//                    (*(out_PREDICT_DIRECTION             [i])) (*(in_PREDICT_STATIC               [i]));
     177
     178//                    break;
     179//                  }
     180//                case PREDICTOR_LAST_TAKE   :
     181//                  {
     182//                    (*(out_PREDICT_DIRECTION             [i])) (*(in_PREDICT_LAST_TAKE            [i]));
     183
     184//                    break;
     185//                  }
     186//                case PREDICTOR_COUNTER     :
     187//                case PREDICTOR_LOCAL       :
     188//                case PREDICTOR_GLOBAL      :
     189//                case PREDICTOR_META        :
     190//                case PREDICTOR_CUSTOM      :
     191//                  {
     192//                    (*(out_PREDICT_ACK                   [i])) (*(in_PREDICT_PREDICTOR_ACK        [i]));
     193//                    (*(out_PREDICT_HISTORY               [i])) (*(in_PREDICT_PREDICTOR_HISTORY    [i]));
     194//                    (*(out_PREDICT_DIRECTION             [i])) (*(in_PREDICT_PREDICTOR_DIRECTION  [i]));
     195//                    (*(out_PREDICT_PREDICTOR_VAL         [i])) (*(in_PREDICT_VAL                  [i]));
     196//                    (*(out_PREDICT_PREDICTOR_ADDRESS_SRC [i])) (*(in_PREDICT_ADDRESS_SRC          [i]));
     197
     198//                    break;
     199//                  }
     200//                default :
     201//                  {
     202//                    break;
     203//                  }
     204//                }
     205//            }
    206206#  endif   
    207207          }
     
    222222
    223223#  ifdef SYSTEMCASS_SPECIFIC
    224             // List dependency information
    225             for (uint32_t i=0; i<_param->_nb_inst_update; i++)
    226               {
    227                 (*(out_UPDATE_PREDICTOR_VAL       [i])) (*(in_UPDATE_VAL           [i]));
    228                 (*(out_UPDATE_ACK                 [i])) (*(in_UPDATE_PREDICTOR_ACK [i]));
    229                 (*(out_UPDATE_PREDICTOR_ADDRESS   [i])) (*(in_UPDATE_ADDRESS       [i]));
    230                 (*(out_UPDATE_PREDICTOR_HISTORY   [i])) (*(in_UPDATE_HISTORY       [i]));
    231                 (*(out_UPDATE_PREDICTOR_DIRECTION [i])) (*(in_UPDATE_DIRECTION     [i]));
    232               }
     224//          // List dependency information
     225//          for (uint32_t i=0; i<_param->_nb_inst_update; i++)
     226//            {
     227//              (*(out_UPDATE_PREDICTOR_VAL       [i])) (*(in_UPDATE_VAL           [i]));
     228//              (*(out_UPDATE_ACK                 [i])) (*(in_UPDATE_PREDICTOR_ACK [i]));
     229//              (*(out_UPDATE_PREDICTOR_ADDRESS   [i])) (*(in_UPDATE_ADDRESS       [i]));
     230//              (*(out_UPDATE_PREDICTOR_HISTORY   [i])) (*(in_UPDATE_HISTORY       [i]));
     231//              (*(out_UPDATE_PREDICTOR_DIRECTION [i])) (*(in_UPDATE_DIRECTION     [i]));
     232//            }
    233233#  endif   
    234234          }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_genMealy_predict.cpp

    r81 r107  
    2323  void Direction_Glue::genMealy_predict (void)
    2424  {
    25     log_printf(FUNC,Direction_Glue,FUNCTION,"Begin");
     25    log_begin(Direction_Glue,FUNCTION);
     26    log_function(Direction_Glue,FUNCTION,_name.c_str());
    2627
    2728    // constant direction : never / always
    28     switch (_param->_predictor_scheme)
     29    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    2930      {
    30       case PREDICTOR_STATIC    :
    31         {
    32           for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    33             PORT_WRITE(out_PREDICT_DIRECTION   [i], PORT_READ(in_PREDICT_STATIC    [i]));
    34          
    35           break;
    36         }
    37       case PREDICTOR_LAST_TAKE :
    38         {
    39           for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    40             PORT_WRITE(out_PREDICT_DIRECTION   [i], PORT_READ(in_PREDICT_LAST_TAKE [i]));
     31        log_printf(TRACE,Direction_Glue,FUNCTION,"  * PREDICT [%d]",i);
    4132
    42           break;
    43         }
    44       case PREDICTOR_COUNTER   :
    45       case PREDICTOR_LOCAL     :
    46       case PREDICTOR_GLOBAL    :
    47       case PREDICTOR_META      :
    48       case PREDICTOR_CUSTOM    :
    49         {
    50           for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    51             {
    52               // not use :
    53               // in_PREDICT_LAST_TAKE       
    54               // in_PREDICT_STATIC
     33        Tcontrol_t direction;
     34
     35        switch (_param->_predictor_scheme)
     36          {
     37            // defined as constant in Direction_Glue.cpp
     38//           case PREDICTOR_NEVER_TAKE  :
     39//             {
     40//               direction = 0;
     41//               break;
     42//             }
     43//           case PREDICTOR_ALWAYS_TAKE :
     44//             {
     45//               direction = 1;
     46//               break;
     47//             }
     48          case PREDICTOR_STATIC    :
     49            {
     50              direction = PORT_READ(in_PREDICT_STATIC [i]);
     51              break;
     52            }
     53          case PREDICTOR_LAST_TAKE :
     54            {
     55              direction = PORT_READ(in_PREDICT_LAST_TAKE [i]);
     56              break;
     57            }
     58          case PREDICTOR_COUNTER   :
     59          case PREDICTOR_LOCAL     :
     60          case PREDICTOR_GLOBAL    :
     61          case PREDICTOR_META      :
     62          case PREDICTOR_CUSTOM    :
     63            {
     64              // not use :
     65              // in_PREDICT_LAST_TAKE       
     66              // in_PREDICT_STATIC
     67             
     68              direction = PORT_READ(in_PREDICT_PREDICTOR_DIRECTION [i]);
    5569
    5670              PORT_WRITE(out_PREDICT_PREDICTOR_VAL         [i], PORT_READ(in_PREDICT_VAL                 [i]));
     
    5872              PORT_WRITE(out_PREDICT_PREDICTOR_ADDRESS_SRC [i], PORT_READ(in_PREDICT_ADDRESS_SRC         [i]));
    5973              PORT_WRITE(out_PREDICT_HISTORY               [i], PORT_READ(in_PREDICT_PREDICTOR_HISTORY   [i]));
    60               PORT_WRITE(out_PREDICT_DIRECTION             [i], PORT_READ(in_PREDICT_PREDICTOR_DIRECTION [i]));
    61             }
     74             
     75              break;
     76            }
     77          default :
     78            {
     79              ERRORMORPHEO(FUNCTION,"No valid predictor scheme");
     80              break;
     81            }
     82          }
     83     
     84        log_printf(TRACE,Direction_Glue,FUNCTION,"    * direction     : %d",direction);
    6285
    63           break;
    64         }
    65       default :
    66         {
    67           ERRORMORPHEO(FUNCTION,"No valid predictor scheme");
    68           break;
    69         }
     86        PORT_WRITE(out_PREDICT_DIRECTION   [i], direction);
    7087      }
    7188
    72 
    73    
    74     log_printf(FUNC,Direction_Glue,FUNCTION,"End");
     89    log_end(Direction_Glue,FUNCTION);
    7590  };
    7691
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_genMealy_update.cpp

    r81 r107  
    2323  void Direction_Glue::genMealy_update (void)
    2424  {
    25     log_printf(FUNC,Direction_Glue,FUNCTION,"Begin");
     25    log_begin(Direction_Glue,FUNCTION);
     26    log_function(Direction_Glue,FUNCTION,_name.c_str());
    2627
    2728    for (uint32_t i=0; i<_param->_nb_inst_update; i++)
     
    3435      }
    3536   
    36     log_printf(FUNC,Direction_Glue,FUNCTION,"End");
     37    log_end(Direction_Glue,FUNCTION);
    3738  };
    3839
Note: See TracChangeset for help on using the changeset viewer.