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

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

1) decod_queue : add reg_LAST_SLOT.
2) Commit : insert on event -> to pop decod_queue. Head test : add information (speculative or not)
3) Context State / UPT : Branch miss and Load miss in same cycle.
4) Free List : Bank is on LSB not MSB.
5) Platforms : move data

  • Property svn:keywords set to Id
File size: 11.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 108 2009-02-12 11:55:06Z 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    } retire_ooo_t;
26
27  typedef enum
28    {
29      ROB_EMPTY                      , //
30      ROB_BRANCH_WAIT_END            , //
31      ROB_BRANCH_COMPLETE            , //
32      ROB_STORE_WAIT_HEAD_OK         , //
33//    ROB_STORE_WAIT_HEAD_KO         , //
34      ROB_STORE_HEAD_OK              , //
35      ROB_STORE_HEAD_KO              , //
36      ROB_OTHER_WAIT_END             , //
37      ROB_MISS_WAIT_END              , //
38      ROB_END_OK_SPECULATIVE         , //
39      ROB_END_OK                     , //
40      ROB_END_KO_SPECULATIVE         , //
41      ROB_END_KO                     , //
42      ROB_END_BRANCH_MISS_SPECULATIVE, //
43      ROB_END_BRANCH_MISS            , //
44      ROB_END_LOAD_MISS_SPECULATIVE  , //
45      ROB_END_LOAD_MISS_UPDATE       , //
46      ROB_END_LOAD_MISS              , //
47      ROB_END_MISS                   , //
48      ROB_END_EXCEPTION_WAIT_HEAD    , //
49      ROB_END_EXCEPTION_UPDATE       , //
50      ROB_END_EXCEPTION                //
51    } rob_state_t;
52
53  class entry_t
54  {
55  public  : rob_state_t        state                   ;
56  public  : uint32_t           ptr                     ;
57  public  : Tcontext_t         front_end_id            ;
58  public  : Tcontext_t         context_id              ;
59  public  : uint32_t           rename_unit_id          ;
60  public  : Tdepth_t           depth                   ;
61  public  : Ttype_t            type                    ;
62  public  : Toperation_t       operation               ;
63  public  : Tcontrol_t         is_delay_slot           ;
64//public  : Tgeneral_data_t    address                 ;
65  public  : Tcontrol_t         use_store_queue         ;
66  public  : Tcontrol_t         use_load_queue          ;
67  public  : Tlsq_ptr_t         store_queue_ptr_write   ;
68  public  : Tlsq_ptr_t         load_queue_ptr_write    ;
69  public  : Tcontrol_t         read_ra                 ;
70  public  : Tgeneral_address_t num_reg_ra_log          ;
71  public  : Tgeneral_address_t num_reg_ra_phy          ;
72  public  : Tcontrol_t         read_rb                 ;
73  public  : Tgeneral_address_t num_reg_rb_log          ;
74  public  : Tgeneral_address_t num_reg_rb_phy          ;
75  public  : Tcontrol_t         read_rc                 ;
76  public  : Tspecial_address_t num_reg_rc_log          ;
77  public  : Tspecial_address_t num_reg_rc_phy          ;
78  public  : Tcontrol_t         write_rd                ;
79  public  : Tgeneral_address_t num_reg_rd_log          ;
80  public  : Tgeneral_address_t num_reg_rd_phy_old      ;
81  public  : Tgeneral_address_t num_reg_rd_phy_new      ;
82  public  : Tcontrol_t         write_re                ;
83  public  : Tspecial_address_t num_reg_re_log          ;
84  public  : Tspecial_address_t num_reg_re_phy_old      ;
85  public  : Tspecial_address_t num_reg_re_phy_new      ;
86
87  public  : Texception_t       exception               ;
88  public  : Texception_t       exception_use           ;
89
90  public  : Tspecial_data_t    flags                   ;
91  public  : Tcontrol_t         no_sequence             ;
92  public  : Tcontrol_t         speculative             ;
93//public  : Tgeneral_data_t    data_commit             ; // branch's destination
94#ifdef DEBUG
95  public  : Taddress_t         address                 ;
96#endif
97  public  : Taddress_t         address_next            ;
98
99//   public  : entry_t (uint32_t           ptr                     ,
100//                   Tcontext_t         front_end_id            ,
101//                   Tcontext_t         context_id              ,
102//                   Tcontext_t         rename_unit_id          ,
103//                   Tdepth_t           depth                   ,
104//                   Ttype_t            type                    ,
105//                   Toperation_t       operation               ,
106//                   Tcontrol_t         is_delay_slot           ,
107//                   Tgeneral_data_t    address                 ,
108//                   Texception_t       exception               ,
109//                   Texception_t       exception_use           ,
110//                   Tlsq_ptr_t         store_queue_ptr_write   ,
111//                   Tlsq_ptr_t         load_queue_ptr_write    ,
112//                   Tcontrol_t         read_ra                 ,
113//                   Tgeneral_address_t num_reg_ra_log          ,
114//                   Tgeneral_address_t num_reg_ra_phy          ,
115//                   Tcontrol_t         read_rb                 ,
116//                   Tgeneral_address_t num_reg_rb_log          ,
117//                   Tgeneral_address_t num_reg_rb_phy          ,
118//                   Tcontrol_t         read_rc                 ,
119//                   Tspecial_address_t num_reg_rc_log          ,
120//                   Tspecial_address_t num_reg_rc_phy          ,
121//                   Tcontrol_t         write_rd                ,
122//                   Tgeneral_address_t num_reg_rd_log          ,
123//                   Tgeneral_address_t num_reg_rd_phy_old      ,
124//                   Tgeneral_address_t num_reg_rd_phy_new      ,
125//                   Tcontrol_t         write_re                ,
126//                   Tspecial_address_t num_reg_re_log          ,
127//                   Tspecial_address_t num_reg_re_phy_old      ,
128//                   Tspecial_address_t num_reg_re_phy_new      )
129//     {
130//       this->ptr                     = ptr                   ;
131//       this->front_end_id            = front_end_id          ;
132//       this->context_id              = context_id            ;
133//       this->rename_unit_id          = rename_unit_id        ;
134//       this->depth                   = depth                 ;
135//       this->type                    = type                  ;
136//       this->operation               = operation             ;
137//       this->is_delay_slot           = is_delay_slot         ;
138//       this->address                 = address               ;
139//       this->exception               = exception             ;
140//       this->exception_use           = exception_use         ;
141//       this->store_queue_ptr_write   = store_queue_ptr_write ;
142//       this->load_queue_ptr_write    = load_queue_ptr_write  ;
143//       this->read_ra                 = read_ra               ;
144//       this->num_reg_ra_log          = num_reg_ra_log        ;
145//       this->num_reg_ra_phy          = num_reg_ra_phy        ;
146//       this->read_rb                 = read_rb               ;
147//       this->num_reg_rb_log          = num_reg_rb_log        ;
148//       this->num_reg_rb_phy          = num_reg_rb_phy        ;
149//       this->read_rc                 = read_rc               ;
150//       this->num_reg_rc_log          = num_reg_rc_log        ;
151//       this->num_reg_rc_phy          = num_reg_rc_phy        ;
152//       this->write_rd                = write_rd              ;
153//       this->num_reg_rd_log          = num_reg_rd_log        ;
154//       this->num_reg_rd_phy_old      = num_reg_rd_phy_old    ;
155//       this->num_reg_rd_phy_new      = num_reg_rd_phy_new    ;
156//       this->write_re                = write_re              ;
157//       this->num_reg_re_log          = num_reg_re_log        ;
158//       this->num_reg_re_phy_old      = num_reg_re_phy_old    ;
159//       this->num_reg_re_phy_new      = num_reg_re_phy_new    ;
160//     }
161  };
162
163}; // end namespace commit_unit
164}; // end namespace ooo_engine
165}; // end namespace multi_ooo_engine
166}; // end namespace core
167}; // end namespace behavioural
168
169 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)
170  {
171    switch (x)
172      {
173      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_EMPTY                      : return "ROB_EMPTY"                       ; break;
174      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_BRANCH_WAIT_END            : return "ROB_BRANCH_WAIT_END"             ; break;
175      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_BRANCH_COMPLETE            : return "ROB_BRANCH_COMPLETE"             ; break;
176      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_WAIT_HEAD_OK         : return "ROB_STORE_WAIT_HEAD_OK"          ; break;
177//    case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_WAIT_HEAD_KO         : return "ROB_STORE_WAIT_HEAD_KO"          ; break;
178      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_HEAD_OK              : return "ROB_STORE_HEAD_OK"               ; break;
179      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_HEAD_KO              : return "ROB_STORE_HEAD_KO"               ; break;
180      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_OTHER_WAIT_END             : return "ROB_OTHER_WAIT_END"              ; break;
181      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_MISS_WAIT_END              : return "ROB_MISS_WAIT_END"               ; break;
182      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_OK_SPECULATIVE         : return "ROB_END_OK_SPECULATIVE"          ; break;
183      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_OK                     : return "ROB_END_OK"                      ; break;
184      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_KO_SPECULATIVE         : return "ROB_END_KO_SPECULATIVE"          ; break;
185      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_KO                     : return "ROB_END_KO"                      ; break;
186      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_BRANCH_MISS_SPECULATIVE: return "ROB_END_BRANCH_MISS_SPECULATIVE" ; break;
187      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_BRANCH_MISS            : return "ROB_END_BRANCH_MISS"             ; break;
188      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_LOAD_MISS_SPECULATIVE  : return "ROB_END_LOAD_MISS_SPECULATIVE"   ; break;
189      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_LOAD_MISS_UPDATE       : return "ROB_END_LOAD_MISS_UPDATE"        ; break;
190      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_LOAD_MISS              : return "ROB_END_LOAD_MISS"               ; break;
191      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_MISS                   : return "ROB_END_MISS"                    ; break;
192      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_EXCEPTION_WAIT_HEAD    : return "ROB_END_EXCEPTION_WAIT_HEAD"     ; break;
193      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_EXCEPTION_UPDATE       : return "ROB_END_EXCEPTION_UPDATE"        ; break;
194      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_END_EXCEPTION              : return "ROB_END_EXCEPTION"               ; break;
195
196      default    : return ""      ; break;
197      }
198  };
199
200}; // end namespace morpheo             
201
202#endif
Note: See TracBrowser for help on using the repository browser.