Ignore:
Timestamp:
Dec 10, 2008, 7:31:39 PM (16 years ago)
Author:
rosiere
Message:

Almost complete design
with Test and test platform

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h

    r82 r88  
    2424  {
    2525    //-----[ fields ]------------------------------------------------------------
    26   public : uint32_t   _nb_context             ;
    27   public : uint32_t * _size_queue             ; // [nb_context]
    28   public : uint32_t   _size_address           ;
    29   public : uint32_t   _nb_inst_predict        ;
    30   public : uint32_t   _nb_inst_decod          ;
    31   public : uint32_t   _nb_inst_branch_complete;
    32   public : uint32_t   _nb_inst_update         ;
    33   public : uint32_t   _size_history           ;
    34   public : uint32_t * _size_ras_index         ; // [nb_context]
     26  public : uint32_t   _nb_context                ;
     27  public : uint32_t * _size_upt_queue            ; // [nb_context]
     28  public : uint32_t * _size_ufpt_queue           ; // [nb_context]
     29//public : uint32_t   _size_address              ;
     30  public : uint32_t   _nb_inst_predict           ;
     31  public : uint32_t   _nb_inst_decod             ;
     32  public : uint32_t   _nb_inst_branch_complete   ;
     33  public : uint32_t   _nb_inst_update            ;
     34  public : uint32_t   _size_history              ;
     35  public : uint32_t * _size_ras_index            ; // [nb_context]
     36  public : const bool _not_accurate_block_predict;
    3537
    36   public : uint32_t   _size_context_id        ;
    37   public : uint32_t * _size_depth             ; // [nb_context]
    38   public : uint32_t   _max_size_depth         ;
    39   public : uint32_t   _max_size_ras_index     ;
    40                      
    41   public : bool       _have_port_context_id   ;
    42   public : bool     * _have_port_depth        ; // [nb_context]
    43   public : bool       _have_port_max_depth    ;
    44   public : bool       _have_port_history      ;
     38//public : uint32_t   _size_context_id           ;
     39//public : uint32_t * _size_depth                ; // [nb_context]
     40//public : uint32_t   _max_size_depth            ;
     41  public : uint32_t   _max_size_ras_index        ;
     42                                                 
     43//public : bool       _have_port_context_id      ;
     44//public : bool     * _have_port_depth           ; // [nb_context]
     45//public : bool       _have_port_max_depth       ;
     46  public : bool       _have_port_history         ;
    4547   
    4648    //-----[ methods ]-----------------------------------------------------------
    4749  public : Parameters  (uint32_t   nb_context             ,
    48                         uint32_t * size_queue             ,
     50                        uint32_t * size_upt_queue         ,
     51                        uint32_t * size_ufpt_queue        ,
    4952                        uint32_t   size_address           ,
    5053                        uint32_t   nb_inst_predict        ,
     
    5356                        uint32_t   nb_inst_update         ,
    5457                        uint32_t   size_history           ,
    55                         uint32_t * size_ras_index         );
     58                        uint32_t * size_ras_index         ,
     59                        bool       is_toplevel=false);
    5660//public : Parameters  (Parameters & param) ;
    5761  public : ~Parameters () ;
     62
     63  public :        void            copy       (void);
    5864
    5965  public :        Parameters_test msg_error  (void);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h

    r82 r88  
    2121  typedef enum
    2222    {
    23       UPDATE_PREDICTION_STATE_EMPTY      , // Slot is empty
    24       UPDATE_PREDICTION_STATE_WAIT_DECOD , // Fetch have access at the predictor
    25       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
    27       UPDATE_PREDICTION_STATE_OK         , // branch is complete and can update predictor
    28       UPDATE_PREDICTION_STATE_KO         , // have a event - must update predictor unit
    29       UPDATE_PREDICTION_STATE_END          // branch is updated
    30     } state_t;
     23      EVENT_STATE_OK                 , // Can predict
     24      EVENT_STATE_FLUSH_UFPT         , // in decod  stage, detect a miss, continue to execute but flush ufpt
     25      EVENT_STATE_FLUSH_UFPT_AND_UPT , // in commit stage, detect a miss, stop context and flush ufpt and upt
     26      EVENT_STATE_FLUSH_UPT_RAS      , // in commit stage, detect a miss, context is stop and ufpt is flush, update RAS
     27      EVENT_STATE_FLUSH_UPT          , // in commit stage, detect a miss, context is stop and ufpt is flush
     28      EVENT_STATE_UPDATE_CONTEXT       // prediction unit is update, send signal to context manager
     29    } event_state_t;
    3130
    32   class entry_t
     31  typedef enum
     32    {
     33      UPDATE_FETCH_PREDICTION_STATE_EMPTY       , // Slot is empty
     34      UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD  , // Have make a prediction, wait decod
     35      UPDATE_FETCH_PREDICTION_STATE_EVENT       , // previous branch is a miss prediction
     36      UPDATE_FETCH_PREDICTION_STATE_END           // branch is updated
     37    } ufpt_state_t;
     38
     39  typedef enum
     40    {
     41      UPDATE_PREDICTION_STATE_EMPTY             , // Slot is empty
     42      UPDATE_PREDICTION_STATE_WAIT_END          , // Have make a prediction, wait branch_complete
     43      UPDATE_PREDICTION_STATE_OK                , // this branch is a hit prediction
     44      UPDATE_PREDICTION_STATE_KO                , // this branch is a miss prediction
     45      UPDATE_PREDICTION_STATE_EVENT             , // previous branch is a miss prediction
     46      UPDATE_PREDICTION_STATE_END                 // branch is updated
     47    } upt_state_t;
     48
     49  class ufpt_entry_t
    3350  {
    34   public : state_t             _state;
    35   public : Tcontrol_t          _ifetch_prediction;
    36   public : Tbranch_condition_t _condition;
    37   public : Taddress_t          _address_src;
    38   public : Taddress_t          _address_dest;
    39   public : Tcontrol_t          _last_take;
    40   public : Tcontrol_t          _good_take;
    41   public : Thistory_t          _history;
    42   public : Taddress_t          _address_ras;
    43   public : Tptr_t              _index_ras;
     51  public : ufpt_state_t        _state            ;
     52  public : Tbranch_condition_t _condition        ;
     53  public : Taddress_t          _address_src      ;
     54  public : Taddress_t          _address_dest     ;
     55  public : Tcontrol_t          _last_take        ;
     56//public : Tcontrol_t          _good_take        ;
     57  public : Tcontrol_t          _is_accurate      ;
     58  public : Thistory_t          _history          ;
     59  public : Taddress_t          _address_ras      ;
     60  public : Tptr_t              _index_ras        ;
     61//public : Tcontrol_t          _ifetch_prediction;
    4462  };
     63
     64  class upt_entry_t
     65  {
     66  public : upt_state_t         _state            ;
     67  public : Tbranch_condition_t _condition        ;
     68  public : Taddress_t          _address_src      ;
     69  public : Taddress_t          _address_dest     ;
     70  public : Tcontrol_t          _last_take        ;
     71  public : Tcontrol_t          _good_take        ; // not in ufpt
     72  public : Tcontrol_t          _is_accurate      ;
     73  public : Thistory_t          _history          ;
     74  public : Taddress_t          _address_ras      ;
     75  public : Tptr_t              _index_ras        ;
     76  public : Tcontrol_t          _ifetch_prediction; // not in ufpt
     77  };
     78
     79
     80// BRANCH_CONDITION_NONE_WITHOUT_WRITE_STACK         
     81// BRANCH_CONDITION_NONE_WITH_WRITE_STACK             
     82// BRANCH_CONDITION_FLAG_UNSET                       
     83// BRANCH_CONDITION_FLAG_SET                         
     84// BRANCH_CONDITION_READ_REGISTER_WITHOUT_WRITE_STACK
     85// BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK   
     86// BRANCH_CONDITION_READ_STACK                       
     87
     88
     89#define update_btb(cond)  true
     90
     91#define update_dir(cond)  ((cond == BRANCH_CONDITION_FLAG_UNSET) or \
     92                           (cond == BRANCH_CONDITION_FLAG_SET))
     93
     94#define update_ras(cond)  ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK         ) or \
     95                           (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or \
     96                           (cond == BRANCH_CONDITION_READ_STACK                    ))
     97
     98#define push_ras(cond)    ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK         ) or \
     99                           (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK))
     100
     101#define pop_ras(cond)     ((cond == BRANCH_CONDITION_READ_STACK                    ))
     102
     103#define need_update(cond) update_ras(cond)
    45104
    46105}; // end namespace update_prediction_table
     
    51110}; // end namespace behavioural
    52111 
     112  template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::event_state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::event_state_t& x)
     113  {
     114    switch (x)
     115      {
     116      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_OK                   : return "ok"                  ; break;
     117      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UFPT           : return "flush_ufpt"          ; break;
     118      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UFPT_AND_UPT   : return "flush_ufpt_and_upt"  ; break;
     119      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UPT_RAS        : return "flush_upt_ras"       ; break;
     120      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_FLUSH_UPT            : return "flush_upt"           ; break;
     121      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_UPDATE_CONTEXT       : return "update_context"      ; break;
     122      default    : return ""      ; break;
     123      }
     124  };
    53125
    54   template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::state_t& x)
     126  template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::ufpt_state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::ufpt_state_t& x)
     127  {
     128    switch (x)
     129      {
     130      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_EMPTY      : return "empty"     ; break;
     131      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break;
     132      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_EVENT      : return "event"     ; break;
     133      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_END        : return "end"       ; break;
     134      default    : return ""      ; break;
     135      }
     136  };
     137
     138  template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::upt_state_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::upt_state_t& x)
    55139  {
    56140    switch (x)
    57141      {
    58142      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EMPTY      : return "empty"     ; break;
    59       case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break;
    60       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;
     143      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_END   : return "wait_end"  ; break;
    62144      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_OK         : return "ok"        ; break;
    63145      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_KO         : return "ko"        ; break;
     146      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT      : return "event"     ; break;
    64147      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END        : return "end"       ; break;
    65148      default    : return ""      ; break;
     
    67150  };
    68151
    69 
    70152}; // end namespace morpheo             
    71153
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h

    r82 r88  
    5151#ifdef STATISTICS
    5252  public    : Stat                           * _stat;
     53
     54  private   : counter_t                     ** _stat_nb_branch_hit       ; //[nb_context]
     55  private   : counter_t                     ** _stat_nb_branch_miss      ; //[nb_context]
     56  private   : counter_t                     ** _stat_nb_branch_unused    ; //[nb_context]
     57  private   : counter_t                     ** _stat_queue_nb_cycle_empty; //[nb_context]
     58  private   : counter_t                     ** _stat_queue_nb_cycle_full ; //[nb_context]
     59  private   : counter_t                     ** _stat_queue_nb_elt        ; //[nb_context]
     60
    5361#endif
    5462
     
    5967    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    6068    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    61   public    : SC_CLOCK                      *  in_CLOCK        ;
    62   public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
     69  public    : SC_CLOCK                      *  in_CLOCK                          ;
     70  public    : SC_IN (Tcontrol_t)            *  in_NRESET                         ;
    6371
    6472    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    65   public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_VAL                 ; //[nb_inst_predict]
    66   public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_ACK                 ; //[nb_inst_predict]
    67   public    : SC_IN (Tcontext_t         )  **  in_PREDICT_CONTEXT_ID          ; //[nb_inst_predict]
    68   public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_SRC     ; //[nb_inst_predict]
    69   public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_DEST    ; //[nb_inst_predict]
    70   public    : SC_IN (Tbranch_condition_t)  **  in_PREDICT_BTB_CONDITION       ; //[nb_inst_predict]
    71   public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_LAST_TAKE       ; //[nb_inst_predict]
    72   public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_IS_ACCURATE     ; //[nb_inst_predict]
    73   public    : SC_IN (Thistory_t         )  **  in_PREDICT_DIR_HISTORY         ; //[nb_inst_predict]
    74   public    : SC_IN (Taddress_t         )  **  in_PREDICT_RAS_ADDRESS         ; //[nb_inst_predict]
    75   public    : SC_IN (Tptr_t             )  **  in_PREDICT_RAS_INDEX           ; //[nb_inst_predict]
    76 //public    : SC_OUT(Tprediction_ptr_t  )  ** out_PREDICT_UPDATE_PREDICTION_ID; //[nb_inst_predict]
     73  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_VAL                    ; //[nb_inst_predict]
     74  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_ACK                    ; //[nb_inst_predict]
     75  public    : SC_IN (Tcontext_t         )  **  in_PREDICT_CONTEXT_ID             ; //[nb_inst_predict]
     76  public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_SRC        ; //[nb_inst_predict]
     77  public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_DEST       ; //[nb_inst_predict]
     78  public    : SC_IN (Tbranch_condition_t)  **  in_PREDICT_BTB_CONDITION          ; //[nb_inst_predict]
     79  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_LAST_TAKE          ; //[nb_inst_predict]
     80  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_IS_ACCURATE        ; //[nb_inst_predict]
     81  public    : SC_IN (Thistory_t         )  **  in_PREDICT_DIR_HISTORY            ; //[nb_inst_predict]
     82  public    : SC_IN (Taddress_t         )  **  in_PREDICT_RAS_ADDRESS            ; //[nb_inst_predict]
     83  public    : SC_IN (Tptr_t             )  **  in_PREDICT_RAS_INDEX              ; //[nb_inst_predict]
     84  public    : SC_OUT(Tprediction_ptr_t  )  ** out_PREDICT_UPDATE_PREDICTION_ID   ; //[nb_inst_predict]
    7785
    7886    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    79   public    : SC_IN (Tcontrol_t         )  **  in_DECOD_VAL                   ; //[nb_inst_decod]
    80   public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_ACK                   ; //[nb_inst_decod]
    81   public    : SC_IN (Tcontext_t         )  **  in_DECOD_CONTEXT_ID            ; //[nb_inst_decod]
    82   public    : SC_IN (Taddress_t         )  **  in_DECOD_BTB_ADDRESS_SRC       ; //[nb_inst_decod]
    83   public    : SC_IN (Taddress_t         )  **  in_DECOD_BTB_ADDRESS_DEST      ; //[nb_inst_decod]
    84   public    : SC_IN (Tbranch_condition_t)  **  in_DECOD_BTB_CONDITION         ; //[nb_inst_decod]
    85   public    : SC_IN (Tcontrol_t         )  **  in_DECOD_BTB_LAST_TAKE         ; //[nb_inst_decod]
    86 //public    : SC_IN (Tcontrol_t         )  **  in_DECOD_BTB_IS_ACCURATE       ; //[nb_inst_decod]
    87 //public    : SC_IN (Thistory_t         )  **  in_DECOD_DIR_HISTORY           ; //[nb_inst_decod] // if ifetch prediction is miss -> miss btb -> make a static state
    88   public    : SC_IN (Taddress_t         )  **  in_DECOD_RAS_ADDRESS           ; //[nb_inst_decod]
    89   public    : SC_IN (Tptr_t             )  **  in_DECOD_RAS_INDEX             ; //[nb_inst_decod]
    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]
    92   public    : SC_IN (Tprediction_ptr_t  )  **  in_DECOD_UPDATE_PREDICTION_ID  ; //[nb_inst_decod]
    93 //public    : SC_OUT(Tdepth_t           )  ** out_DECOD_DEPTH                 ; //[nb_inst_decod]
     87  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_VAL                      ; //[nb_inst_decod]
     88  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_ACK                      ; //[nb_inst_decod]
     89  public    : SC_IN (Tcontext_t         )  **  in_DECOD_CONTEXT_ID               ; //[nb_inst_decod]
     90  public    : SC_IN (Taddress_t         )  **  in_DECOD_BTB_ADDRESS_SRC          ; //[nb_inst_decod]
     91  public    : SC_IN (Taddress_t         )  **  in_DECOD_BTB_ADDRESS_DEST         ; //[nb_inst_decod]
     92  public    : SC_IN (Tbranch_condition_t)  **  in_DECOD_BTB_CONDITION            ; //[nb_inst_decod]
     93  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_BTB_LAST_TAKE            ; //[nb_inst_decod]
     94//public    : SC_IN (Thistory_t         )  **  in_DECOD_DIR_HISTORY              ; //[nb_inst_decod] // if ifetch prediction is miss -> miss btb -> make a static state
     95  public    : SC_IN (Taddress_t         )  **  in_DECOD_RAS_ADDRESS              ; //[nb_inst_decod]
     96  public    : SC_IN (Tptr_t             )  **  in_DECOD_RAS_INDEX                ; //[nb_inst_decod]
     97  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_IFETCH              ; //[nb_inst_decod]
     98  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_DECOD               ; //[nb_inst_decod]
     99  public    : SC_IN (Tprediction_ptr_t  )  **  in_DECOD_UPDATE_PREDICTION_ID     ; //[nb_inst_decod]
     100//public    : SC_OUT(Tdepth_t           )  ** out_DECOD_DEPTH                    ; //[nb_inst_decod]
     101  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IS_ACCURATE              ; //[nb_inst_decod]
    94102
    95103    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    106114
    107115    // ~~~~~[ 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]
     116  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_VAL               ; //[nb_context]
     117  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_ACK               ; //[nb_context]
     118//public    : SC_OUT(Tcontext_t         )  ** out_BRANCH_EVENT_CONTEXT_ID        ; //[nb_context]
     119//public    : SC_OUT(Tdepth_t           )  ** out_BRANCH_EVENT_DEPTH             ; //[nb_context]
     120//public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_MISS_PREDICTION   ; //[nb_context] is always miss prediction
     121  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_SRC       ; //[nb_context]
     122  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_DEST      ; //[nb_context]
    115123
    116124    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    117   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_VAL                  ; //[nb_inst_update]
    118   public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_ACK                  ; //[nb_inst_update]
    119   public    : SC_OUT(Tcontext_t         )  ** out_UPDATE_CONTEXT_ID           ; //[nb_inst_update]
    120   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_MISS_PREDICTION      ; //[nb_inst_update]
    121   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_DIRECTION_GOOD       ; //[nb_inst_update]
    122   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_VAL              ; //[nb_inst_update]
    123   public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_SRC      ; //[nb_inst_update]
    124   public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_DEST     ; //[nb_inst_update]
    125   public    : SC_OUT(Tbranch_condition_t)  ** out_UPDATE_BTB_CONDITION        ; //[nb_inst_update]
    126   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_DIR_VAL              ; //[nb_inst_update]
    127   public    : SC_OUT(Thistory_t         )  ** out_UPDATE_DIR_HISTORY          ; //[nb_inst_update]
    128   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]
    130   public    : SC_OUT(Taddress_t         )  ** out_UPDATE_RAS_ADDRESS          ; //[nb_inst_update]
    131   public    : SC_OUT(Tptr_t             )  ** out_UPDATE_RAS_INDEX            ; //[nb_inst_update]
    132   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_PREDICTION_IFETCH; //[nb_inst_update]
     125  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_VAL                     ; //[nb_inst_update]
     126  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_ACK                     ; //[nb_inst_update]
     127  public    : SC_OUT(Tcontext_t         )  ** out_UPDATE_CONTEXT_ID              ; //[nb_inst_update]
     128  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_MISS_PREDICTION         ; //[nb_inst_update]
     129  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_DIRECTION_GOOD          ; //[nb_inst_update]
     130  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_VAL                 ; //[nb_inst_update]
     131  public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_SRC         ; //[nb_inst_update]
     132  public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_DEST        ; //[nb_inst_update]
     133  public    : SC_OUT(Tbranch_condition_t)  ** out_UPDATE_BTB_CONDITION           ; //[nb_inst_update]
     134  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_DIR_VAL                 ; //[nb_inst_update]
     135  public    : SC_OUT(Thistory_t         )  ** out_UPDATE_DIR_HISTORY             ; //[nb_inst_update]
     136  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_VAL                 ; //[nb_inst_update]
     137  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_PUSH                ; //[nb_inst_update]
     138  public    : SC_OUT(Taddress_t         )  ** out_UPDATE_RAS_ADDRESS             ; //[nb_inst_update]
     139  public    : SC_OUT(Tptr_t             )  ** out_UPDATE_RAS_INDEX               ; //[nb_inst_update]
     140  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_PREDICTION_IFETCH   ; //[nb_inst_update]
    133141
    134142    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    135   public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_NB_BRANCH; //[nb_context]
    136   public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_TAIL; //[nb_context]
     143  public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_CURRENT                  ; //[nb_context]
     144  public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_MIN                      ; //[nb_context]
     145  public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_MAX                      ; //[nb_context]
     146    // If DEPTH_CURRENT :
     147    // equal at     DEPTH_MIN            -> not speculative
     148    // not include ]DEPTH_MIN:DEPTH_MAX[ -> previous branch miss
     149    //     include ]DEPTH_MIN:DEPTH_MAX[ -> speculative
    137150
    138151    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    139152
    140153    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    141   private   : uint32_t                      * reg_TOP                    ; //[nb_context]
    142   private   : uint32_t                      * reg_BOTTOM                 ; //[nb_context]
    143   private   : uint32_t                      * reg_NB_ELT                 ; //[nb_context]
    144   private   : uint32_t                      * reg_NB_ELT_UPDATE          ; //[nb_context]
    145   private   : uint32_t                      * reg_NB_ELT_NEED_UPDATE     ; //[nb_context]
    146   private   : entry_t                      ** reg_UPDATE_PREDICTION_TABLE; //[nb_context][size_queue]
    147   private   : uint32_t                        reg_UPDATE_PRIORITY        ;
     154  private   : uint32_t                        reg_UPDATE_PRIORITY                ;
     155                                                                                 
     156  private   : ufpt_entry_t                 ** reg_UPDATE_FETCH_PREDICTION_TABLE  ; //[nb_context][size_ufpt_queue]
     157  private   : uint32_t                      * reg_UFPT_BOTTOM                    ; //[nb_context]
     158  private   : uint32_t                      * reg_UFPT_TOP                       ; //[nb_context]
     159  private   : uint32_t                      * reg_UFPT_UPDATE                    ; //[nb_context]
     160  private   : uint32_t                      * reg_UFPT_NB_NEED_UPDATE            ; //[nb_context]
     161                                                                                             
     162  private   : upt_entry_t                  ** reg_UPDATE_PREDICTION_TABLE        ; //[nb_context][size_upt_queue]
     163  private   : uint32_t                      * reg_UPT_BOTTOM                     ; //[nb_context]
     164  private   : uint32_t                      * reg_UPT_TOP                        ; //[nb_context]
     165  private   : uint32_t                      * reg_UPT_UPDATE                     ; //[nb_context]
     166  private   : uint32_t                      * reg_UPT_NB_NEED_UPDATE             ; //[nb_context]
     167                                                                                             
     168  private   : bool                          * reg_IS_ACCURATE                    ; //[nb_context]
     169
     170  private   : event_state_t                 * reg_EVENT_STATE                    ; //[nb_context]
     171  private   : Tcontrol_t                    * reg_EVENT_RAS_CORRUPTED            ; //[nb_context] // RAS must be flush
     172  private   : Taddress_t                    * reg_EVENT_ADDRESS_SRC              ; //[nb_context] // Address branch
     173  private   : Tcontrol_t                    * reg_EVENT_ADDRESS_SRC_VAL          ; //[nb_context] // if miss ifetch, decod issue branch, dest must be reload
     174  private   : Taddress_t                    * reg_EVENT_ADDRESS_DEST             ; //[nb_context] // Address dest
    148175
    149176    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    150177  private   : Tcontrol_t                    * internal_PREDICT_ACK                    ; //[nb_inst_predict]
     178  private   : Tdepth_t                      * internal_PREDICT_UPDATE_PREDICTION_ID   ; //[nb_inst_predict]
    151179  private   : Tcontrol_t                    * internal_DECOD_ACK                      ; //[nb_inst_decod]
     180  private   : uint32_t                      * internal_DECOD_UPT_PTR_WRITE            ; //[nb_inst_decod]
    152181  private   : Tcontrol_t                    * internal_BRANCH_COMPLETE_ACK            ; //[nb_inst_branch_complete]
    153182  private   : Tcontrol_t                    * internal_BRANCH_COMPLETE_MISS_PREDICTION; //[nb_inst_branch_complete]
     
    157186  private   : Tdepth_t                      * internal_BRANCH_EVENT_DEPTH             ; //[nb_context]
    158187  private   : Tcontrol_t                    * internal_UPDATE_VAL                     ; //[nb_inst_update]
     188  private   : Tcontrol_t                    * internal_UPDATE_VAL_WITHOUT_ACK         ; //[nb_inst_update]
    159189  private   : Tcontext_t                    * internal_UPDATE_CONTEXT_ID              ; //[nb_inst_update]
     190  private   : bool                          * internal_UPDATE_FROM_UFPT               ; //[nb_inst_update]
    160191  private   : Tdepth_t                      * internal_UPDATE_DEPTH                   ; //[nb_inst_update]
     192  private   : bool                          * internal_UPDATE_RAS                     ; //[nb_inst_update]
     193
    161194#endif
    162195
Note: See TracChangeset for help on using the changeset viewer.