Ignore:
Timestamp:
May 1, 2008, 6:48:45 PM (16 years ago)
Author:
rosiere
Message:
  • support locale (now must "just" translate)
  • update all component with new test format
  • update all component with usage
  • New component : decod queue and prediction_unit
Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
Files:
1 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp

    r81 r82  
    7171  ALLOC1_SC_SIGNAL( in_DECOD_RAS_ADDRESS              ," in_DECOD_RAS_ADDRESS              ",Taddress_t         ,_param->_nb_inst_decod);
    7272  ALLOC1_SC_SIGNAL( in_DECOD_RAS_INDEX                ," in_DECOD_RAS_INDEX                ",Tptr_t             ,_param->_nb_inst_decod);
    73   ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION          ," in_DECOD_MISS_PREDICTION          ",Tcontrol_t         ,_param->_nb_inst_decod);
     73  ALLOC1_SC_SIGNAL( in_DECOD_MISS_IFETCH              ," in_DECOD_MISS_IFETCH              ",Tcontrol_t         ,_param->_nb_inst_decod);
     74  ALLOC1_SC_SIGNAL( in_DECOD_MISS_DECOD               ," in_DECOD_MISS_DECOD               ",Tcontrol_t         ,_param->_nb_inst_decod);
    7475  ALLOC1_SC_SIGNAL( in_DECOD_UPDATE_PREDICTION_ID     ," in_DECOD_UPDATE_PREDICTION_ID     ",Tprediction_ptr_t  ,_param->_nb_inst_decod);
    7576//ALLOC1_SC_SIGNAL(out_DECOD_DEPTH                    ,"out_DECOD_DEPTH                    ",Tdepth_t           ,_param->_nb_inst_decod);
     77
    7678  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL            ," in_BRANCH_COMPLETE_VAL            ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
    7779  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK            ,"out_BRANCH_COMPLETE_ACK            ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
     
    8486  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC    ,"out_BRANCH_COMPLETE_ADDRESS_SRC    ",Taddress_t         ,_param->_nb_inst_branch_complete);
    8587  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST   ,"out_BRANCH_COMPLETE_ADDRESS_DEST   ",Taddress_t         ,_param->_nb_inst_branch_complete);
     88
     89  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL            ,"out_BRANCH_EVENT_VAL            ",Tcontrol_t         ,_param->_nb_context);
     90  ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK            ," in_BRANCH_EVENT_ACK            ",Tcontrol_t         ,_param->_nb_context);
     91//   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_CONTEXT_ID     ," in_BRANCH_EVENT_CONTEXT_ID     ",Tcontext_t         ,_param->_nb_context);
     92//   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_DEPTH          ," in_BRANCH_EVENT_DEPTH          ",Tdepth_t           ,_param->_nb_context);
     93//   ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,"out_BRANCH_EVENT_MISS_PREDICTION",Tcontrol_t         ,_param->_nb_context);
     94  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC    ,"out_BRANCH_EVENT_ADDRESS_SRC    ",Taddress_t         ,_param->_nb_context);
     95  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST   ,"out_BRANCH_EVENT_ADDRESS_DEST   ",Taddress_t         ,_param->_nb_context);
     96
    8697  ALLOC1_SC_SIGNAL(out_UPDATE_VAL                     ,"out_UPDATE_VAL                     ",Tcontrol_t         ,_param->_nb_inst_update);
    8798  ALLOC1_SC_SIGNAL( in_UPDATE_ACK                     ," in_UPDATE_ACK                     ",Tcontrol_t         ,_param->_nb_inst_update);
     
    96107  ALLOC1_SC_SIGNAL(out_UPDATE_DIR_HISTORY             ,"out_UPDATE_DIR_HISTORY             ",Thistory_t         ,_param->_nb_inst_update);
    97108  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_VAL                 ,"out_UPDATE_RAS_VAL                 ",Tcontrol_t         ,_param->_nb_inst_update);
     109  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PUSH                ,"out_UPDATE_RAS_PUSH                ",Tcontrol_t         ,_param->_nb_inst_update);
    98110  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS             ,"out_UPDATE_RAS_ADDRESS             ",Taddress_t         ,_param->_nb_inst_update);
    99111  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_INDEX               ,"out_UPDATE_RAS_INDEX               ",Tptr_t             ,_param->_nb_inst_update);
     
    136148  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_ADDRESS              ,_param->_nb_inst_decod);
    137149  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_INDEX                ,_param->_nb_inst_decod);
    138   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_PREDICTION          ,_param->_nb_inst_decod);
    139   if (_param->_have_port_depth)
     150  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_IFETCH              ,_param->_nb_inst_decod);
     151  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_DECOD               ,_param->_nb_inst_decod);
     152  if (_param->_have_port_max_depth)
    140153  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_UPDATE_PREDICTION_ID     ,_param->_nb_inst_decod);
    141154//if (_param->_have_port_depth)
     
    145158  if (_param->_have_port_context_id)
    146159  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_CONTEXT_ID     ,_param->_nb_inst_branch_complete);
    147   if (_param->_have_port_depth)
     160  if (_param->_have_port_max_depth)
    148161  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_DEPTH          ,_param->_nb_inst_branch_complete);
    149162  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_ADDRESS        ,_param->_nb_inst_branch_complete);
     
    153166  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_SRC    ,_param->_nb_inst_branch_complete);
    154167  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_DEST   ,_param->_nb_inst_branch_complete);
     168
     169  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_VAL            ,_param->_nb_context);
     170  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ACK            ,_param->_nb_context);
     171//   if (_param->_have_port_context_id)
     172//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_CONTEXT_ID     ,_param->_nb_context);
     173//   if (_param->_have_port_max_depth)
     174//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_DEPTH          ,_param->_nb_context);
     175//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ADDRESS        ,_param->_nb_context);
     176//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context);
     177  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_SRC    ,_param->_nb_context);
     178  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_DEST   ,_param->_nb_context);
     179
    155180  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_VAL                     ,_param->_nb_inst_update);
    156181  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_UPDATE_ACK                     ,_param->_nb_inst_update);
     
    167192  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIR_HISTORY             ,_param->_nb_inst_update);
    168193  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_VAL                 ,_param->_nb_inst_update);
     194  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PUSH                ,_param->_nb_inst_update);
    169195  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_ADDRESS             ,_param->_nb_inst_update);
    170196  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_INDEX               ,_param->_nb_inst_update);
    171197  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PREDICTION_IFETCH   ,_param->_nb_inst_update);
    172   if (_param->_have_port_depth)
    173   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH                ,_param->_nb_context);
    174   if (_param->_have_port_depth)
    175   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL                     ,_param->_nb_context);
     198  for (uint32_t i=0; i<_param->_nb_context; i++)
     199    {
     200      if (_param->_have_port_depth[i])
     201        {
     202          INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL      [i]);
     203        }
     204      INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH [i]);
     205    }
    176206
    177207  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
     
    202232  SC_START(5);
    203233  in_NRESET->write(1); 
     234
     235  for (uint32_t i=0; i<_param->_nb_context; i++)
     236    {
     237      PORT_WRITE(in_BRANCH_EVENT_ACK [i],1);
     238    }
    204239
    205240  LABEL("Loop of Test");
     
    236271                  in_PREDICT_RAS_INDEX        [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
    237272                 
    238                   if (_param->_have_port_depth)
     273                  if (_param->_have_port_depth[context])
    239274                    {
    240275                      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     276                    }
    241277                      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i);
    242                     }
     278                     
    243279                  SC_START(0);
    244280                 
     
    256292              in_PREDICT_VAL              [port]->write(0);
    257293             
    258               if (_param->_have_port_depth)
     294              if (_param->_have_port_depth[context])
    259295                {
    260296                  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     297                }
    261298                  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1);
    262                 }
     299
    263300            }
    264301        }
     
    283320                  in_DECOD_RAS_ADDRESS          [port]->write(0xdeaddead+i);
    284321                  in_DECOD_RAS_INDEX            [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
    285                   in_DECOD_MISS_PREDICTION      [port]->write(false);
     322                  in_DECOD_MISS_IFETCH          [port]->write(false);
     323                  in_DECOD_MISS_DECOD           [port]->write(false);
    286324                  in_DECOD_UPDATE_PREDICTION_ID [port]->write(i);
    287325                 
    288                   if (_param->_have_port_depth)
     326                  if (_param->_have_port_depth[context])
    289327                    {
    290328                      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     329                    }
    291330                      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
    292                     }
    293331                 
    294332                  SC_START(0);
     
    307345              in_DECOD_VAL              [port]->write(0);
    308346             
    309               if (_param->_have_port_depth)
     347              if (_param->_have_port_depth[context])
    310348                {
    311349                  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     350                }
    312351                  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
    313                 }
    314352            }
    315353        }
     
    331369                  in_BRANCH_COMPLETE_FLAG                 [port]->write(1);
    332370                 
    333                   if (_param->_have_port_depth)
     371                  if (_param->_have_port_depth[context])
    334372                    {
    335373                      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     374                    }
    336375                      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
    337                     }
    338376                 
    339377                  SC_START(0);
     
    357395              in_BRANCH_COMPLETE_VAL              [port]->write(0);
    358396             
    359               if (_param->_have_port_depth)
     397              if (_param->_have_port_depth[context])
    360398                {
    361399                  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     400                }
    362401                  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
    363                 }
    364402            }
    365403        }
     
    396434                        TEST(Thistory_t         ,out_UPDATE_DIR_HISTORY           [port]->read(), i);
    397435                      TEST(Tcontrol_t         ,out_UPDATE_RAS_VAL               [port]->read(), 0);
     436                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PUSH              [port]->read(), 0);
    398437                      TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(), 0xdeaddead+i);
    399438                      TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]);
     
    411450 
    412451          // wait the garbage collector
    413           if (_param->_have_port_depth)
    414             while ((out_DEPTH_TAIL     [context]->read() != 0) and
    415                    (out_DEPTH_NB_BRANCH[context]->read() != 0))
    416               {
    417                 LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read());
    418                 SC_START(1);
    419               }
     452          while ((not (_param->_have_port_depth[context]) or (out_DEPTH_TAIL     [context]->read() != 0)) and
     453                 (out_DEPTH_NB_BRANCH[context]->read() != 0))
     454            {
     455              LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read());
     456              SC_START(1);
     457            }
    420458        }
    421459      }
     
    448486                  in_PREDICT_RAS_INDEX        [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
    449487                 
    450                   if (_param->_have_port_depth)
     488                  if (_param->_have_port_depth[context])
    451489                    {
    452490                      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     491                    }
    453492                      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i);
    454                     }
     493
    455494                  SC_START(0);
    456495                 
     
    468507              in_PREDICT_VAL              [port]->write(0);
    469508             
    470               if (_param->_have_port_depth)
     509              if (_param->_have_port_depth[context])
    471510                {
    472511                  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     512                }
    473513                  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1);
    474                 }
    475514            }
    476515        }
     
    495534                  in_DECOD_RAS_ADDRESS          [port]->write(0xdeaddead+i);
    496535                  in_DECOD_RAS_INDEX            [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
    497                   in_DECOD_MISS_PREDICTION      [port]->write(false);
     536                  in_DECOD_MISS_IFETCH          [port]->write(false);
     537                  in_DECOD_MISS_DECOD           [port]->write(false);
    498538                  in_DECOD_UPDATE_PREDICTION_ID [port]->write(i);
    499539                 
    500                   if (_param->_have_port_depth)
     540                  if (_param->_have_port_depth[context])
    501541                    {
    502542                      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     543                    }
    503544                      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
    504                     }
    505545                 
    506546                  SC_START(0);
     
    519559              in_DECOD_VAL              [port]->write(0);
    520560             
    521               if (_param->_have_port_depth)
     561              if (_param->_have_port_depth[context])
    522562                {
    523563                  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     564                }
    524565                  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
    525                 }
    526566            }
    527567        }
     
    543583                  in_BRANCH_COMPLETE_FLAG                 [port]->write(0);
    544584                 
    545                   if (_param->_have_port_depth)
     585                  if (_param->_have_port_depth[context])
    546586                    {
    547587                      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
     588                    }
    548589                      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
    549                     }
    550590                 
    551591                  SC_START(0);
     
    604644                        TEST(Thistory_t         ,out_UPDATE_DIR_HISTORY           [port]->read(), i);
    605645                      TEST(Tcontrol_t         ,out_UPDATE_RAS_VAL               [port]->read(), 0);
     646                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PUSH              [port]->read(), 0);
    606647                      TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(), 0xdeaddead+i);
    607648                      TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]);
     
    619660           
    620661            // wait the garbage collector
    621             if (_param->_have_port_depth)
    622               while ((out_DEPTH_TAIL     [context]->read() != 0) and
    623                      (out_DEPTH_NB_BRANCH[context]->read() != 0))
     662            while (((not (_param->_have_port_depth[context])) or (out_DEPTH_TAIL     [context]->read() != 0)) and
     663                   (out_DEPTH_NB_BRANCH[context]->read() != 0))
    624664                {
    625665                  LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read());
     
    671711  delete []  in_DECOD_RAS_ADDRESS           ;
    672712  delete []  in_DECOD_RAS_INDEX             ;
    673   delete []  in_DECOD_MISS_PREDICTION       ;
     713  delete []  in_DECOD_MISS_IFETCH           ;
     714  delete []  in_DECOD_MISS_DECOD            ;
    674715  delete []  in_DECOD_UPDATE_PREDICTION_ID  ;
    675716//delete [] out_DECOD_DEPTH                 ;
     
    686727  delete [] out_BRANCH_COMPLETE_ADDRESS_SRC    ;
    687728  delete [] out_BRANCH_COMPLETE_ADDRESS_DEST   ;
     729
     730  // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     731  delete [] out_BRANCH_EVENT_VAL            ;
     732  delete []  in_BRANCH_EVENT_ACK            ;
     733//   delete []  in_BRANCH_EVENT_CONTEXT_ID     ;
     734//   delete []  in_BRANCH_EVENT_DEPTH          ;
     735//   delete [] out_BRANCH_EVENT_MISS_PREDICTION;
     736  delete [] out_BRANCH_EVENT_ADDRESS_SRC    ;
     737  delete [] out_BRANCH_EVENT_ADDRESS_DEST   ;
    688738 
    689739  // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    700750  delete [] out_UPDATE_DIR_HISTORY          ;
    701751  delete [] out_UPDATE_RAS_VAL              ;
     752  delete [] out_UPDATE_RAS_PUSH             ;
    702753  delete [] out_UPDATE_RAS_ADDRESS          ;
    703754  delete [] out_UPDATE_RAS_INDEX            ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h

    r81 r82  
    3535
    3636  public : uint32_t   _size_context_id        ;
    37   public : uint32_t   _size_depth             ;
     37  public : uint32_t * _size_depth             ; // [nb_context]
     38  public : uint32_t   _max_size_depth         ;
    3839  public : uint32_t   _max_size_ras_index     ;
    3940                     
    4041  public : bool       _have_port_context_id   ;
    41   public : bool       _have_port_depth        ;
     42  public : bool     * _have_port_depth        ; // [nb_context]
     43  public : bool       _have_port_max_depth    ;
    4244  public : bool       _have_port_history      ;
    4345   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h

    r81 r82  
    2424      UPDATE_PREDICTION_STATE_WAIT_DECOD , // Fetch have access at the predictor
    2525      UPDATE_PREDICTION_STATE_WAITEND    , // Have make a prediction, wait branch_complete
     26      UPDATE_PREDICTION_STATE_EVENT      , // have a event - must signal at the context_unit
    2627      UPDATE_PREDICTION_STATE_OK         , // branch is complete and can update predictor
    2728      UPDATE_PREDICTION_STATE_KO         , // have a event - must update predictor unit
     
    5859      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break;
    5960      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAITEND    : return "waitend"   ; break;
     61      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT      : return "event"     ; break;
    6062      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_OK         : return "ok"        ; break;
    6163      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_KO         : return "ko"        ; break;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h

    r81 r82  
    8888  public    : SC_IN (Taddress_t         )  **  in_DECOD_RAS_ADDRESS           ; //[nb_inst_decod]
    8989  public    : SC_IN (Tptr_t             )  **  in_DECOD_RAS_INDEX             ; //[nb_inst_decod]
    90   public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_PREDICTION       ; //[nb_inst_decod] // ifetch is a miss pred
     90  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_IFETCH           ; //[nb_inst_decod]
     91  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_DECOD            ; //[nb_inst_decod]
    9192  public    : SC_IN (Tprediction_ptr_t  )  **  in_DECOD_UPDATE_PREDICTION_ID  ; //[nb_inst_decod]
    9293//public    : SC_OUT(Tdepth_t           )  ** out_DECOD_DEPTH                 ; //[nb_inst_decod]
     
    103104  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_COMPLETE_ADDRESS_SRC    ; //[nb_inst_branch_complete]
    104105  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_COMPLETE_ADDRESS_DEST   ; //[nb_inst_branch_complete]
     106
     107    // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     108  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_VAL            ; //[nb_context]
     109  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_ACK            ; //[nb_context]
     110//public    : SC_OUT(Tcontext_t         )  ** out_BRANCH_EVENT_CONTEXT_ID     ; //[nb_context]
     111//public    : SC_OUT(Tdepth_t           )  ** out_BRANCH_EVENT_DEPTH          ; //[nb_context]
     112//public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_MISS_PREDICTION; //[nb_context] is always miss prediction
     113  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_SRC    ; //[nb_context]
     114  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_DEST   ; //[nb_context]
    105115
    106116    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    117127  public    : SC_OUT(Thistory_t         )  ** out_UPDATE_DIR_HISTORY          ; //[nb_inst_update]
    118128  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_VAL              ; //[nb_inst_update]
     129  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_PUSH             ; //[nb_inst_update]
    119130  public    : SC_OUT(Taddress_t         )  ** out_UPDATE_RAS_ADDRESS          ; //[nb_inst_update]
    120131  public    : SC_OUT(Tptr_t             )  ** out_UPDATE_RAS_INDEX            ; //[nb_inst_update]
     
    131142  private   : uint32_t                      * reg_BOTTOM                 ; //[nb_context]
    132143  private   : uint32_t                      * reg_NB_ELT                 ; //[nb_context]
     144  private   : uint32_t                      * reg_NB_ELT_UPDATE          ; //[nb_context]
    133145  private   : uint32_t                      * reg_NB_ELT_NEED_UPDATE     ; //[nb_context]
    134146  private   : entry_t                      ** reg_UPDATE_PREDICTION_TABLE; //[nb_context][size_queue]
     
    142154  private   : Tcontrol_t                    * internal_BRANCH_COMPLETE_TAKE           ; //[nb_inst_branch_complete]
    143155  private   : Taddress_t                    * internal_BRANCH_COMPLETE_ADDRESS_DEST   ; //[nb_inst_branch_complete]
     156  private   : Tcontrol_t                    * internal_BRANCH_EVENT_VAL               ; //[nb_context]
     157  private   : Tdepth_t                      * internal_BRANCH_EVENT_DEPTH             ; //[nb_context]
    144158  private   : Tcontrol_t                    * internal_UPDATE_VAL                     ; //[nb_inst_update]
    145159  private   : Tcontext_t                    * internal_UPDATE_CONTEXT_ID              ; //[nb_inst_update]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp

    r81 r82  
    4343   
    4444    _size_context_id         = log2(nb_context);
    45     _size_depth              = log2(max<uint32_t>(size_queue,nb_context));
     45    _size_depth              = new uint32_t[_nb_context];
     46    _have_port_depth         = new bool    [_nb_context];
     47    for (uint32_t i=0; i<_nb_context; i++)
     48      {
     49        _size_depth      [i] = log2(_size_queue[i]);
     50        _have_port_depth [i] = (_size_depth [i] > 0);
     51      }
     52    _max_size_depth          = max<uint32_t>(_size_depth,_nb_context);
    4653    _max_size_ras_index      = max<uint32_t>(_size_ras_index,nb_context);
    4754
    4855    _have_port_context_id    = _size_context_id> 0;
    49     _have_port_depth         = _size_depth    > 0;
     56    _have_port_max_depth     = _max_size_depth > 0;
    5057    _have_port_history       = _size_history   > 0;
    5158   
     
    6875  {
    6976    log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin");
     77    delete [] _size_depth     ;
     78    delete [] _have_port_depth;
    7079    log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End");
    7180  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters_msg_error.cpp

    r81 r82  
    2727    Parameters_test test ("Update_Prediction_Table");
    2828
    29     if (morpheo::behavioural::test<Tdepth_t>(_size_depth) == false)
     29    if (morpheo::behavioural::test<Tdepth_t>(_max_size_depth) == false)
    3030      test.error("type \"Tdepth_t\" is too small.");
    3131
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp

    r81 r82  
    128128            if (_param->_have_port_context_id)
    129129              sensitive << (*(in_DECOD_CONTEXT_ID [i]));
    130             sensitive << (*(in_DECOD_MISS_PREDICTION [i]));
     130            sensitive << (*(in_DECOD_MISS_IFETCH [i]))
     131                      << (*(in_DECOD_MISS_DECOD  [i]));
    131132          }
    132133       
     
    135136        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    136137          {
    137             (*(out_DECOD_ACK                  [i])) (*(in_DECOD_MISS_PREDICTION [i]));
    138             if (_param->_have_port_context_id)
    139             (*(out_DECOD_ACK                  [i])) (*(in_DECOD_CONTEXT_ID      [i]));
     138            (*(out_DECOD_ACK                  [i])) (*(in_DECOD_MISS_IFETCH [i]));
     139            (*(out_DECOD_ACK                  [i])) (*(in_DECOD_MISS_DECOD  [i]));
     140            if (_param->_have_port_context_id)
     141            (*(out_DECOD_ACK                  [i])) (*(in_DECOD_CONTEXT_ID  [i]));
    140142          }
    141143# endif   
     
    150152            if (_param->_have_port_context_id)
    151153            sensitive << (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
    152             if (_param->_have_port_depth)
     154            if (_param->_have_port_max_depth)
    153155            sensitive << (*(in_BRANCH_COMPLETE_DEPTH [i]));
    154156            sensitive << (*(in_BRANCH_COMPLETE_FLAG    [i]))
     
    162164            if (_param->_have_port_context_id)
    163165            (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
    164             if (_param->_have_port_depth)
     166            if (_param->_have_port_max_depth)
    165167            (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
    166168            (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_FLAG       [i]));
     
    169171            if (_param->_have_port_context_id)
    170172            (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
    171             if (_param->_have_port_depth)
     173            if (_param->_have_port_max_depth)
    172174            (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
    173175            (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_FLAG       [i]));
     
    175177            if (_param->_have_port_context_id)
    176178            (*(out_BRANCH_COMPLETE_ADDRESS_SRC     [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
    177             if (_param->_have_port_depth)
     179            if (_param->_have_port_max_depth)
    178180            (*(out_BRANCH_COMPLETE_ADDRESS_SRC     [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
    179181
    180182            if (_param->_have_port_context_id)
    181183            (*(out_BRANCH_COMPLETE_ADDRESS_DEST    [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
    182             if (_param->_have_port_depth)
     184            if (_param->_have_port_max_depth)
    183185            (*(out_BRANCH_COMPLETE_ADDRESS_DEST    [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
    184186            (*(out_BRANCH_COMPLETE_ADDRESS_DEST    [i])) (*(in_BRANCH_COMPLETE_ADDRESS    [i]));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp

    r81 r82  
    7676    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    7777    {
    78       ALLOC1_INTERFACE("predict", IN,SOUTH, "predict", _param->_nb_inst_predict);
     78      ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_predict);
    7979
    8080      ALLOC1_VALACK_IN ( in_DECOD_VAL                 ,VAL);
     
    8787      ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS         ,"ras_address"         ,Taddress_t         ,_param->_size_address);
    8888      ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX           ,"ras_index"           ,Tptr_t             ,_param->_max_size_ras_index);
    89       ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION     ,"miss_prediction"     ,Tcontrol_t         ,1);
    90       ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t  ,_param->_size_depth);
     89      ALLOC1_SIGNAL_IN ( in_DECOD_MISS_IFETCH         ,"miss_ifetch"         ,Tcontrol_t         ,1);
     90      ALLOC1_SIGNAL_IN ( in_DECOD_MISS_DECOD          ,"miss_decod"          ,Tcontrol_t         ,1);
     91      ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t  ,_param->_max_size_depth);
    9192//    ALLOC1_SIGNAL_OUT(out_DECOD_DEPTH               ,"depth"               ,Tdepth_t           ,_param->_size_depth);
    9293    }
     
    9596    {
    9697      ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete);
    97 
    9898     
    9999      ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL            ,VAL);
    100100      ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK            ,ACK);
    101101      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_CONTEXT_ID     ,"context_id"     ,Tcontext_t,_param->_size_context_id);
    102       ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_size_depth);
     102      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_max_size_depth);
    103103      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS        ,"address"        ,Taddress_t,_param->_size_address);
    104104      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG           ,"flag"           ,Tcontrol_t,1);
     
    107107      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC    ,"address_src"    ,Taddress_t,_param->_size_address);
    108108      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST   ,"address_dest"   ,Taddress_t,_param->_size_address);
     109    }
     110
     111    // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     112    {
     113      ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context);
     114     
     115      ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL            ,VAL);
     116      ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK            ,ACK);
     117//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_CONTEXT_ID     ,"context_id"     ,Tcontext_t,_param->_size_context_id);
     118//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_max_size_depth);
     119//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1);
     120      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC    ,"address_src"    ,Taddress_t,_param->_size_address);
     121      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST   ,"address_dest"   ,Taddress_t,_param->_size_address);
    109122    }
    110123
     
    125138      ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_HISTORY          ,"dir_history"          ,Thistory_t         ,_param->_size_history);
    126139      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_VAL              ,"ras_val"              ,Tcontrol_t         ,1);
     140      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH             ,"ras_push"             ,Tcontrol_t         ,1);
    127141      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS          ,"ras_address"          ,Taddress_t         ,_param->_size_address);
    128142      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX            ,"ras_index"            ,Tptr_t             ,_param->_max_size_ras_index);
     
    134148      ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context);
    135149
    136       ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth);
    137       ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL,"TAIL",Tdepth_t,_param->_size_depth);
     150      ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL     ,"TAIL"     ,Tdepth_t,_param->_size_depth[alloc_signal_it1]);
     151      ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth[alloc_signal_it1]+1);
    138152    }
    139153
     
    145159    internal_BRANCH_COMPLETE_TAKE            = new Tcontrol_t [_param->_nb_inst_branch_complete];
    146160    internal_BRANCH_COMPLETE_ADDRESS_DEST    = new Taddress_t [_param->_nb_inst_branch_complete];
     161    internal_BRANCH_EVENT_VAL                = new Tcontrol_t [_param->_nb_context];
     162    internal_BRANCH_EVENT_DEPTH              = new Tdepth_t   [_param->_nb_context];
    147163    internal_UPDATE_VAL                      = new Tcontrol_t [_param->_nb_inst_update];
    148164    internal_UPDATE_CONTEXT_ID               = new Tcontext_t [_param->_nb_inst_update];
     
    153169    reg_BOTTOM                  = new uint32_t  [_param->_nb_context];
    154170    reg_NB_ELT                  = new uint32_t  [_param->_nb_context];
     171    reg_NB_ELT_UPDATE           = new uint32_t  [_param->_nb_context];
    155172    reg_NB_ELT_NEED_UPDATE      = new uint32_t  [_param->_nb_context];
    156173    reg_UPDATE_PREDICTION_TABLE = new entry_t * [_param->_nb_context];
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp

    r81 r82  
    5656        delete []  in_DECOD_RAS_ADDRESS           ;
    5757        delete []  in_DECOD_RAS_INDEX             ;
    58         delete []  in_DECOD_MISS_PREDICTION       ;
    59         if (_param->_have_port_depth)
     58        delete []  in_DECOD_MISS_IFETCH           ;
     59        delete []  in_DECOD_MISS_DECOD            ;
     60        if (_param->_have_port_max_depth)
    6061        delete []  in_DECOD_UPDATE_PREDICTION_ID  ;
    6162//      if (_param->_have_port_depth)
     
    6768        if (_param->_have_port_context_id)
    6869        delete []  in_BRANCH_COMPLETE_CONTEXT_ID     ;
    69         if (_param->_have_port_depth)
     70        if (_param->_have_port_max_depth)
    7071        delete []  in_BRANCH_COMPLETE_DEPTH          ;
    7172        delete []  in_BRANCH_COMPLETE_ADDRESS        ;
     
    7576        delete [] out_BRANCH_COMPLETE_ADDRESS_SRC    ;
    7677        delete [] out_BRANCH_COMPLETE_ADDRESS_DEST   ;
     78
     79        // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     80        delete [] out_BRANCH_EVENT_VAL            ;
     81        delete []  in_BRANCH_EVENT_ACK            ;
     82//      if (_param->_have_port_context_id)
     83//      delete []  in_BRANCH_EVENT_CONTEXT_ID     ;
     84//      if (_param->_have_port_max_depth)
     85//      delete []  in_BRANCH_EVENT_DEPTH          ;
     86//      delete [] out_BRANCH_EVENT_MISS_PREDICTION;
     87        delete [] out_BRANCH_EVENT_ADDRESS_SRC    ;
     88        delete [] out_BRANCH_EVENT_ADDRESS_DEST   ;
    7789       
    7890        // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    91103        delete [] out_UPDATE_DIR_HISTORY          ;
    92104        delete [] out_UPDATE_RAS_VAL              ;
     105        delete [] out_UPDATE_RAS_PUSH             ;
    93106        delete [] out_UPDATE_RAS_ADDRESS          ;
    94107        delete [] out_UPDATE_RAS_INDEX            ;
     
    96109
    97110        // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    98         if (_param->_have_port_depth)
     111        if (_param->_have_port_max_depth)
    99112          {
    100113        delete [] out_DEPTH_NB_BRANCH;
     
    110123    delete [] internal_BRANCH_COMPLETE_TAKE            ;
    111124    delete [] internal_BRANCH_COMPLETE_ADDRESS_DEST    ;
     125    delete [] internal_BRANCH_EVENT_VAL                ;
     126    delete [] internal_BRANCH_EVENT_DEPTH              ;
    112127    delete [] internal_UPDATE_VAL                      ;
    113128    delete [] internal_UPDATE_CONTEXT_ID               ;
     
    118133    delete [] reg_BOTTOM;
    119134    delete [] reg_NB_ELT;
     135    delete [] reg_NB_ELT_UPDATE;
    120136    delete [] reg_NB_ELT_NEED_UPDATE;
    121137    for (uint32_t i=0; i<_param->_nb_context; i++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp

    r81 r82  
    2727      {
    2828        Tcontext_t          context   = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0;
    29         Tdepth_t            depth     = (_param->_have_port_depth    )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
     29        Tdepth_t            depth     = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
    3030        Tcontrol_t          miss      = false;
    3131        Tcontrol_t          take      = reg_UPDATE_PREDICTION_TABLE [context][depth]._last_take   ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp

    r81 r82  
    2626    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    2727      {
    28         Tcontrol_t miss = PORT_READ(in_DECOD_MISS_PREDICTION [i]);
     28        Tcontrol_t miss = PORT_READ(in_DECOD_MISS_DECOD [i]);
    2929
    3030        if (miss)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp

    r81 r82  
    2828    // ===================================================================
    2929
    30     if (_param->_have_port_depth)
    31       for (uint32_t i=0; i<_param->_nb_context; i++)
    32         {
    33           PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]);
    34           PORT_WRITE(out_DEPTH_TAIL      [i], reg_BOTTOM [i]);
    35         }
    36 
     30    for (uint32_t i=0; i<_param->_nb_context; i++)
     31      {
     32        if (_param->_have_port_depth [i])
     33          {
     34            PORT_WRITE(out_DEPTH_TAIL      [i], reg_BOTTOM [i]);
     35          }
     36        PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]);
     37      }
    3738    // ===================================================================
    3839    // =====[ UPDATE ]====================================================
     
    7273                                           (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or
    7374                                           (cond == BRANCH_CONDITION_READ_STACK));
    74              
     75           
     76            Tcontrol_t          push = ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK) or
     77                                        (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK));
     78
    7579            if (_param->_have_port_context_id)
    7680            PORT_WRITE(out_UPDATE_CONTEXT_ID            [i],context);
     
    8589            PORT_WRITE(out_UPDATE_DIR_HISTORY           [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._history     );
    8690            PORT_WRITE(out_UPDATE_RAS_VAL               [i],ras_val);
     91            PORT_WRITE(out_UPDATE_RAS_PUSH              [i],push);
    8792            PORT_WRITE(out_UPDATE_RAS_ADDRESS           [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras );
    8893            PORT_WRITE(out_UPDATE_RAS_INDEX             [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._index_ras   );
     
    99104      }
    100105
     106    // ===================================================================
     107    // =====[ BRANCH_EVENT ]==============================================
     108    // ===================================================================
     109    for (uint32_t i=0; i<_param->_nb_context; i++)
     110      {
     111        Tdepth_t   depth   = (reg_BOTTOM [i] + reg_NB_ELT_UPDATE [i])%_param->_size_queue [i];
     112        state_t    state   = reg_UPDATE_PREDICTION_TABLE [i][depth]._state;
     113       
     114        Tcontrol_t val     = (state == UPDATE_PREDICTION_STATE_EVENT);
     115
     116        if (val)
     117          {
     118            PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC  [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_src );
     119            PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_dest);
     120            internal_BRANCH_EVENT_DEPTH [i] = depth;
     121          }
     122
     123        internal_BRANCH_EVENT_VAL   [i] = val;
     124        PORT_WRITE(out_BRANCH_EVENT_VAL [i], internal_BRANCH_EVENT_VAL [i]);
     125      }
    101126    log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End");
    102127  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp

    r81 r82  
    3131            reg_BOTTOM             [i] = 0;
    3232            reg_NB_ELT             [i] = 0;
     33            reg_NB_ELT_UPDATE      [i] = 0;
    3334            reg_NB_ELT_NEED_UPDATE [i] = 0;
    3435            for (uint32_t j=0; j<_param->_size_queue[i]; j++)
     
    7475          if (PORT_READ(in_DECOD_VAL[i]) and internal_DECOD_ACK [i])
    7576            {
    76               Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
    77               Tcontrol_t miss    = PORT_READ(in_DECOD_MISS_PREDICTION [i]);
     77              Tcontext_t context     = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
     78              Tcontrol_t miss_ifetch = PORT_READ(in_DECOD_MISS_IFETCH [i]);
     79              Tcontrol_t miss_decod  = PORT_READ(in_DECOD_MISS_DECOD  [i]);
    7880
    7981              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"DECOD[%d] - Accepted",i);
    80               log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context);
    81               log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss    : %d",miss);
    82               log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt  : %d",reg_NB_ELT[context]);
     82              log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context     : %d",context);
     83              log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_ifetch : %d",miss_ifetch);
     84              log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_decod  : %d",miss_decod);
     85              log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt      : %d",reg_NB_ELT[context]);
    8386             
    8487              // Test if miss ifetch
    8588              //   miss ifetch = decod a branch and the predict unit have not predict this branch ... gloup :P
    86               if (miss)
     89              if (miss_ifetch or miss_decod)
    8790                {
    88                   Tdepth_t depth = (_param->_have_port_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
     91                  Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
    8992                  Tdepth_t top   = reg_TOP [context];
    9093
     
    127130                        }
    128131                    }
     132                  reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; // rewrite
    129133
    130134                  reg_TOP                [context] = (depth+1)%_param->_size_queue [context];
     
    135139                {
    136140                  // Normal case : branch is previous predicated, change state of branch
    137                   Tdepth_t depth = (_param->_have_port_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
     141                  Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
    138142
    139143                  reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_WAITEND;
     
    148152            {
    149153              Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0;
    150               Tdepth_t   depth   = (_param->_have_port_depth     )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
     154              Tdepth_t   depth   = (_param->_have_port_max_depth     )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
    151155
    152156              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"BRANCH_COMPLETE[%d] - Accepted",i);
     
    158162                {
    159163                  // Miss case
    160                   reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_KO;
     164                  reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT;
    161165
    162166                  // Another prediction (prediction with depth higer)
     
    231235
    232236        // ===================================================================
     237        // =====[ BRANCH_EVENT ]==============================================
     238        // ===================================================================
     239        for (uint32_t i=0; i<_param->_nb_context; i++)
     240          if (internal_BRANCH_EVENT_VAL [i] and PORT_READ(in_BRANCH_EVENT_ACK [i]))
     241          {
     242            Tdepth_t depth = internal_BRANCH_EVENT_DEPTH [i];
     243           
     244            reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_KO;
     245          }
     246
     247        // ===================================================================
    233248        // =====[ GARBAGE COLLECTOR ]=========================================
    234249        // ===================================================================
     
    253268      }
    254269
    255 // #if (DEBUG >= DEBUG_TRACE)
     270#if (DEBUG >= DEBUG_TRACE)
    256271    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"Dump Update_Prediction_Table");
    257272    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * reg_UPDATE_PRIORITY      : %d",reg_UPDATE_PRIORITY);
    258273    for (uint32_t i=0; i<_param->_nb_context; i++)
    259274      {
    260         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * Update_Prediction_Table [%d]",i);
     275        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * Update_Prediction_Table   [%d]",i);
    261276        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_TOP                : %d",reg_TOP                [i]);
    262277        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_BOTTOM             : %d",reg_BOTTOM             [i]);
     
    266281          log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      [%d] %s %x",j,toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str(),reg_UPDATE_PREDICTION_TABLE [i][j]._address_src);
    267282      }
    268 // #endif
     283#endif
    269284
    270285
Note: See TracChangeset for help on using the changeset viewer.