source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h @ 112

Last change on this file since 112 was 112, checked in by rosiere, 15 years ago

1) Stat_list : fix retire old and new register bug
2) Stat_list : remove read_counter and valid flag, because validation of destination is in retire step (not in commit step)
3) Model : add class Model (cf Morpheo.sim)
4) Allocation : alloc_interface_begin and alloc_interface_end to delete temporary array.
5) Script : add distexe.sh
6) Add Comparator, Multiplier, Divider. But this component are not implemented
7) Software : add Dhrystone

  • Property svn:keywords set to Id
File size: 11.0 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_update_prediction_table_Types_h
2#define morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_update_prediction_table_Types_h
3
4/*
5 * $Id: Types.h 112 2009-03-18 22:36:26Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#include "Behavioural/include/Types.h"
12
13namespace morpheo {
14namespace behavioural {
15namespace core {
16namespace multi_front_end {
17namespace front_end {
18namespace prediction_unit {
19namespace update_prediction_table {
20
21  typedef enum
22    {
23      EVENT_SOURCE_UFPT,
24      EVENT_SOURCE_UPT
25    } event_source_t;
26
27  typedef enum
28    {
29      EVENT_STATE_OK                      , // Can predict
30      EVENT_STATE_MISS_FLUSH_UFPT         , // in decod  stage, detect a miss  , continue to execute but flush ufpt
31      EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT , // in commit stage, detect a miss  , stop context and flush ufpt and upt
32      EVENT_STATE_MISS_FLUSH_UPT          , // in commit stage, detect a miss  , context is stop and ufpt is flush, update RAS
33      EVENT_STATE_EVENT_FLUSH_UFPT        , // in commit stage, detect an event, continue to execute but flush ufpt
34      EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT, // in commit stage, detect an event, stop context and flush ufpt and upt
35      EVENT_STATE_EVENT_FLUSH_UPT         , // in commit stage, detect an event, context is stop and ufpt is flush, update RAS
36      EVENT_STATE_UPDATE_CONTEXT          , // prediction unit is update, send signal to context manager
37      EVENT_STATE_WAIT_END_EVENT            // prediction unit is ok, wait the end of event (send by Context State)
38    } event_state_t;
39
40  typedef enum
41    {
42      UPDATE_FETCH_PREDICTION_STATE_EMPTY       , // Slot is empty
43      UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD  , // Have make a prediction, wait decod
44      UPDATE_FETCH_PREDICTION_STATE_EVENT       , // previous branch is a miss prediction
45      UPDATE_FETCH_PREDICTION_STATE_END           // branch is updated
46    } ufpt_state_t;
47
48  typedef enum
49    {
50      UPDATE_PREDICTION_STATE_EMPTY             , // Slot is empty
51      UPDATE_PREDICTION_STATE_WAIT_END          , // Have make a prediction, wait branch_complete
52      UPDATE_PREDICTION_STATE_OK                , // this branch is a hit prediction
53      UPDATE_PREDICTION_STATE_KO                , // this branch is a miss prediction
54      UPDATE_PREDICTION_STATE_EVENT             , // previous branch is a miss prediction
55      UPDATE_PREDICTION_STATE_END               , // update pointer
56//    UPDATE_PREDICTION_STATE_END_OK            , // branch is updated,       update pointer
57//    UPDATE_PREDICTION_STATE_END_KO_WAIT_END   , // branch is updated, don't update pointer
58      UPDATE_PREDICTION_STATE_END_KO              // branch is updated, don't update pointer
59    } upt_state_t;
60
61  class ufpt_entry_t
62  {
63  public : ufpt_state_t        _state            ;
64  public : Tbranch_condition_t _condition        ;
65  public : Taddress_t          _address_src      ;
66  public : Taddress_t          _address_dest     ;
67  public : Tcontrol_t          _last_take        ;
68//public : Tcontrol_t          _good_take        ;
69  public : Tcontrol_t          _is_accurate      ;
70  public : Thistory_t          _history          ;
71  public : Taddress_t          _address_ras      ;
72  public : Tptr_t              _index_ras        ;
73//public : Tcontrol_t          _ifetch_prediction;
74  };
75
76  class upt_entry_t
77  {
78  public : upt_state_t         _state            ;
79  public : Tbranch_condition_t _condition        ;
80  public : Taddress_t          _address_src      ;
81  public : Taddress_t          _address_dest     ;
82  public : Tcontrol_t          _last_take        ;
83  public : Tcontrol_t          _good_take        ; // not in ufpt
84  public : Tcontrol_t          _is_accurate      ;
85  public : Thistory_t          _history          ;
86  public : Taddress_t          _address_ras      ;
87  public : Tptr_t              _index_ras        ;
88  public : Tcontrol_t          _ifetch_prediction; // not in ufpt
89
90    // to branchement_log_file
91  public : bool                _retire_ok        ;
92  public : bool                _miss_prediction  ;
93  };
94
95
96// BRANCH_CONDITION_NONE_WITHOUT_WRITE_STACK         
97// BRANCH_CONDITION_NONE_WITH_WRITE_STACK             
98// BRANCH_CONDITION_FLAG_UNSET                       
99// BRANCH_CONDITION_FLAG_SET                         
100// BRANCH_CONDITION_READ_REGISTER_WITHOUT_WRITE_STACK
101// BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK   
102// BRANCH_CONDITION_READ_STACK                       
103
104
105#define update_btb(cond)  true
106
107#define update_dir(cond)  ((cond == BRANCH_CONDITION_FLAG_UNSET) or \
108                           (cond == BRANCH_CONDITION_FLAG_SET))
109
110#define update_ras(cond)  ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK         ) or \
111                           (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or \
112                           (cond == BRANCH_CONDITION_READ_STACK                    ))
113
114#define push_ras(cond)    ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK         ) or \
115                           (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK))
116
117#define pop_ras(cond)     ((cond == BRANCH_CONDITION_READ_STACK                    ))
118
119#define need_update(cond) (update_ras(cond) or update_dir(cond))
120
121}; // end namespace update_prediction_table
122}; // end namespace prediction_unit
123}; // end namespace front_end
124}; // end namespace multi_front_end
125}; // end namespace core
126}; // end namespace behavioural
127
128  template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::event_source_t>(const morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::event_source_t& x)
129  {
130    switch (x)
131      {
132      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_SOURCE_UFPT : return "ufpt"; break;
133      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_SOURCE_UPT  : return "upt" ; break;
134      default    : return ""; break; 
135      }
136  };
137
138
139 
140  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)
141  {
142    switch (x)
143      {
144      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_OK                      : return "ok"                      ; break;
145      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_MISS_FLUSH_UFPT         : return "miss_flush_ufpt"         ; break;
146      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT : return "miss_flush_ufpt_and_upt" ; break;
147      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_MISS_FLUSH_UPT          : return "miss_flush_upt"          ; break;
148      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_EVENT_FLUSH_UPT         : return "event_flush_upt"         ; break;
149      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_EVENT_FLUSH_UFPT        : return "event_flush_ufpt"        ; break;
150      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT: return "event_flush_ufpt_and_upt"; break;
151      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_UPDATE_CONTEXT          : return "update_context"          ; break;
152      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::EVENT_STATE_WAIT_END_EVENT          : return "wait_end_event"          ; break;
153      default    : return ""; break; 
154      }
155  };
156
157  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)
158  {
159    switch (x)
160      {
161      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_EMPTY      : return "empty"     ; break;
162      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break;
163      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_EVENT      : return "event"     ; break;
164      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_FETCH_PREDICTION_STATE_END        : return "end"       ; break;
165      default    : return ""      ; break;
166      }
167  };
168
169  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)
170  {
171    switch (x)
172      {
173      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EMPTY      : return "empty"     ; break;
174      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_END   : return "wait_end"  ; break;
175      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_OK         : return "ok"        ; break;
176      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_KO         : return "ko"        ; break;
177      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT      : return "event"     ; break;
178      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END        : return "end"       ; break;
179//    case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END_OK     : return "end_ok"    ; break;
180//    case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END_KO_WAIT_END: return "end_ko_wait_end"    ; break;
181      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_END_KO     : return "end_ko"    ; break;
182      default    : return ""      ; break;
183      }
184  };
185
186}; // end namespace morpheo             
187
188#endif
Note: See TracBrowser for help on using the repository browser.