source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Types.h @ 139

Last change on this file since 139 was 139, checked in by rosiere, 14 years ago
  • Add test for all configuration
  • RAT : add rat scheme (depth_save)
  • Property svn:keywords set to Id
File size: 12.3 KB
Line 
1#ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_commit_unit_Types_h
2#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_commit_unit_Types_h
3
4/*
5 * $Id: Types.h 139 2010-07-30 14:47:27Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#include "Behavioural/include/Types.h"
12
13namespace morpheo {
14namespace behavioural {
15namespace core {
16namespace multi_ooo_engine {
17namespace ooo_engine {
18namespace commit_unit {
19
20  typedef enum
21    {
22      RETIRE_IN_ORDER       ,
23      RETIRE_OOO_RENAME_UNIT,
24      RETIRE_OOO_CONTEXT
25    } Tretire_ooo_scheme_t;
26
27  typedef enum
28    {
29      ROB_EMPTY                      , //
30
31      ROB_BRANCH_WAIT_END            , //
32      ROB_BRANCH_COMPLETE            , //
33
34      ROB_STORE_WAIT_END_OK          , //
35      ROB_STORE_WAIT_END_KO          , //
36      ROB_STORE_OK                   , //
37      ROB_STORE_KO                   , //
38      ROB_STORE_OK_WAIT_END          , //
39      ROB_STORE_KO_WAIT_END          , //
40      ROB_STORE_EVENT                , //
41
42      ROB_OTHER_WAIT_END             , //
43
44      ROB_EVENT_WAIT_END             , //
45
46      ROB_END_OK_SPECULATIVE         , //
47      ROB_END_OK                     , //
48      ROB_END_KO_SPECULATIVE         , //
49      ROB_END_KO                     , //
50      ROB_END_BRANCH_MISS_SPECULATIVE, //
51      ROB_END_BRANCH_MISS            , //
52      ROB_END_LOAD_MISS_SPECULATIVE  , //
53      ROB_END_LOAD_MISS_UPDATE       , //
54      ROB_END_LOAD_MISS              , //
55      ROB_END_MISS                   , //
56      ROB_END_EXCEPTION_WAIT_HEAD    , //
57      ROB_END_EXCEPTION_UPDATE       , //
58      ROB_END_EXCEPTION              , //
59      ROB_END
60    } rob_state_t;
61
62  typedef enum
63    {
64      COMMIT_EVENT_STATE_NO_EVENT     ,
65      COMMIT_EVENT_STATE_NOT_YET_EVENT,
66      COMMIT_EVENT_STATE_EVENT        ,
67//    COMMIT_EVENT_STATE_WAIT_DECOD   ,
68      COMMIT_EVENT_STATE_WAIT_END     ,
69//    COMMIT_EVENT_STATE_END         
70    } Tcommit_event_state_t;
71
72#define commit_event_state_to_event_state(x) ((x==COMMIT_EVENT_STATE_EVENT)?EVENT_STATE_EVENT:((x==COMMIT_EVENT_STATE_WAIT_END)?EVENT_STATE_WAITEND:EVENT_STATE_NO_EVENT))
73#define rob_state_to_event_type(x) ((x==ROB_END_BRANCH_MISS)?EVENT_TYPE_BRANCH_MISS_SPECULATION:((x==ROB_END_LOAD_MISS)?EVENT_TYPE_LOAD_MISS_SPECULATION:((x==ROB_END_EXCEPTION)?EVENT_TYPE_EXCEPTION:EVENT_TYPE_NONE)))
74
75// #define commit_event_state_to_event_state(x) ((x==COMMIT_EVENT_STATE_EVENT)?EVENT_STATE_EVENT:((x==COMMIT_EVENT_STATE_WAIT_END)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_END)?EVENT_STATE_END:EVENT_STATE_NO_EVENT)))
76// #define commit_event_state_to_event_state(x) ((x==COMMIT_EVENT_STATE_EVENT)?EVENT_STATE_EVENT:((x==COMMIT_EVENT_STATE_WAIT_DECOD)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_WAIT_END)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_END)?EVENT_STATE_END:EVENT_STATE_NO_EVENT))))
77
78
79  class entry_t
80  {
81  public  : rob_state_t        state                   ;
82  public  : rob_state_t        state_old               ;
83  public  : uint32_t           ptr                     ;
84  public  : Tcontext_t         front_end_id            ;
85  public  : Tcontext_t         context_id              ;
86  public  : uint32_t           rename_unit_id          ;
87  public  : Tdepth_t           depth                   ;
88#ifdef STATISTICS
89  public  : uint32_t           instruction             ;
90#endif
91  public  : Ttype_t            type                    ;
92  public  : Toperation_t       operation               ;
93  public  : Tcontrol_t         is_delay_slot           ;
94//public  : Tgeneral_data_t    address                 ;
95  public  : Tcontrol_t         use_store_queue         ;
96  public  : Tcontrol_t         use_load_queue          ;
97  public  : Tlsq_ptr_t         store_queue_ptr_write   ;
98  public  : Tlsq_ptr_t         load_queue_ptr_write    ;
99#ifdef DEBUG
100  public  : Tcontrol_t         read_ra                 ;
101  public  : Tgeneral_address_t num_reg_ra_log          ;
102  public  : Tgeneral_address_t num_reg_ra_phy          ;
103#endif
104  public  : Tcontrol_t         read_rb                 ;
105#ifdef DEBUG
106  public  : Tgeneral_address_t num_reg_rb_log          ;
107  public  : Tgeneral_address_t num_reg_rb_phy          ;
108  public  : Tcontrol_t         read_rc                 ;
109  public  : Tspecial_address_t num_reg_rc_log          ;
110  public  : Tspecial_address_t num_reg_rc_phy          ;
111#endif
112  public  : Tcontrol_t         write_rd                ;
113  public  : Tgeneral_address_t num_reg_rd_log          ;
114  public  : Tgeneral_address_t num_reg_rd_phy_old      ;
115  public  : Tgeneral_address_t num_reg_rd_phy_new      ;
116  public  : Tcontrol_t         write_re                ;
117  public  : Tspecial_address_t num_reg_re_log          ;
118  public  : Tspecial_address_t num_reg_re_phy_old      ;
119  public  : Tspecial_address_t num_reg_re_phy_new      ;
120
121  public  : Texception_t       exception               ;
122  public  : Texception_t       exception_use           ;
123
124  public  : Tspecial_data_t    flags                   ;
125  public  : Tcontrol_t         no_sequence             ;
126//public  : Tcontrol_t         speculative             ;
127//public  : Tgeneral_data_t    data_commit             ; // branch's destination
128#ifdef DEBUG
129  public  : Tgeneral_data_t    load_data               ;
130  public  : Taddress_t         address                 ;
131#endif
132  public  : Taddress_t         address_next            ;
133#ifdef DEBUG
134  public  : double             cycle_rob_in            ;
135  public  : double             cycle_commit            ;
136#endif   
137
138  };
139
140}; // end namespace commit_unit
141}; // end namespace ooo_engine
142}; // end namespace multi_ooo_engine
143}; // end namespace core
144}; // end namespace behavioural
145
146  template<> inline std::string toString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::Tretire_ooo_scheme_t>(const morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::Tretire_ooo_scheme_t& x)
147  {
148    switch (x)
149      {
150      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_IN_ORDER        : return "retire_in_order"       ; break;
151      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_RENAME_UNIT : return "retire_ooo_rename_unit"; break;
152      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_CONTEXT     : return "retire_ooo_context"    ; break;
153      default    : return ""      ; break;
154      }
155  };
156
157  template<> inline morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::Tretire_ooo_scheme_t fromString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::Tretire_ooo_scheme_t>(const std::string& x)
158  {
159    if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_IN_ORDER       ))) == 0) or
160        (x.compare(toString(                      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_IN_ORDER        )) == 0))
161      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_IN_ORDER;
162
163    if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_RENAME_UNIT))) == 0) or
164        (x.compare(toString(                      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_RENAME_UNIT )) == 0))
165      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_RENAME_UNIT;
166
167    if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_CONTEXT    ))) == 0) or
168        (x.compare(toString(                      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_CONTEXT     )) == 0))
169      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::RETIRE_OOO_CONTEXT;
170
171    throw (ERRORMORPHEO ("fromString","Unknow string : \""+x+"\""));
172  };
173
174 template<> inline std::string toString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::rob_state_t>(const morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::rob_state_t& x)
175  {
176    switch (x)
177      {
178      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_EMPTY                      : return "ROB_EMPTY"                       ; break;
179      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_BRANCH_WAIT_END            : return "ROB_BRANCH_WAIT_END"             ; break;
180      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_BRANCH_COMPLETE            : return "ROB_BRANCH_COMPLETE"             ; break;
181      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_WAIT_END_OK          : return "ROB_STORE_WAIT_END_OK"           ; break;
182      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_WAIT_END_KO          : return "ROB_STORE_WAIT_END_KO"           ; break;
183      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_OK                   : return "ROB_STORE_OK"                    ; break;
184      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_KO                   : return "ROB_STORE_KO"                    ; break;
185      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_OK_WAIT_END          : return "ROB_STORE_OK_WAIT_END"           ; break;
186      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_KO_WAIT_END          : return "ROB_STORE_KO_WAIT_END"           ; break;
187      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_EVENT                : return "ROB_STORE_EVENT"                 ; break;
188      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_OTHER_WAIT_END             : return "ROB_OTHER_WAIT_END"              ; break;
189      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_EVENT_WAIT_END             : return "ROB_EVENT_WAIT_END"              ; break;
190      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_OK_SPECULATIVE         : return "ROB_END_OK_SPECULATIVE"          ; break;
191      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_OK                     : return "ROB_END_OK"                      ; break;
192      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_KO_SPECULATIVE         : return "ROB_END_KO_SPECULATIVE"          ; break;
193      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_KO                     : return "ROB_END_KO"                      ; break;
194      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_BRANCH_MISS_SPECULATIVE: return "ROB_END_BRANCH_MISS_SPECULATIVE" ; break;
195      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_BRANCH_MISS            : return "ROB_END_BRANCH_MISS"             ; break;
196      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_LOAD_MISS_SPECULATIVE  : return "ROB_END_LOAD_MISS_SPECULATIVE"   ; break;
197      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_LOAD_MISS_UPDATE       : return "ROB_END_LOAD_MISS_UPDATE"        ; break;
198      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_LOAD_MISS              : return "ROB_END_LOAD_MISS"               ; break;
199      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_MISS                   : return "ROB_END_MISS"                    ; break;
200      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_EXCEPTION_WAIT_HEAD    : return "ROB_END_EXCEPTION_WAIT_HEAD"     ; break;
201      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_EXCEPTION_UPDATE       : return "ROB_END_EXCEPTION_UPDATE"        ; break;
202      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_EXCEPTION              : return "ROB_END_EXCEPTION"               ; break;
203      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END                        : return "ROB_END"                         ; break;
204
205      default    : return ""      ; break;
206      }
207  };
208
209}; // end namespace morpheo             
210
211#endif
Note: See TracBrowser for help on using the repository browser.