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

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

1) Decod_queue : multi implementation (one_fifo, multi_fifo)
2) Issue_queue : multi implementation (in_order, out_of_order)
3) Direction : Add Meta predictor
4) Context_State : re add Branch_complete, More priority to Load miss (is not speculative)
5) Return_Address_Stack : update reg_PREDICT pointer on decod miss prediction
6) UPT : Fix bug in multi event
7) Prediction_glue : in read_stack case, insert in UPT pc_next
8) Rename select : when rob have an event (need flush), read_r{a,b,c} and write_r{d,e} is set at 0

  • Property svn:keywords set to Id
File size: 5.9 KB
Line 
1#ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_issue_queue_Types_h
2#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_issue_queue_Types_h
3
4/*
5 * $Id: Types.h 111 2009-02-27 18:37:40Z 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 issue_queue {
19
20  typedef enum 
21    {
22       ISSUE_QUEUE_SCHEME_IN_ORDER        // Each instruction is issue in of order
23//       ,ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER // Each bundle is issue in order. In bundle, an instruction is issue out of order
24      ,ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    // Each instruction is issue out of order
25    } Tissue_queue_scheme_t;
26
27  class entry_t
28  {
29  public : Tcontext_t         _context_id            ;
30  public : Tcontext_t         _front_end_id          ;
31  public : Tpacket_t          _packet_id             ;
32  public : Toperation_t       _operation             ;
33  public : Ttype_t            _type                  ;
34  public : Tlsq_ptr_t         _store_queue_ptr_write ;
35  public : Tlsq_ptr_t         _load_queue_ptr_write  ;
36  public : Tcontrol_t         _has_immediat          ;
37  public : Tgeneral_data_t    _immediat              ;
38  public : Tcontrol_t         _read_ra               ;
39  public : Tgeneral_address_t _num_reg_ra            ;
40  public : Tcontrol_t         _read_rb               ;
41  public : Tgeneral_address_t _num_reg_rb            ;
42  public : Tcontrol_t         _read_rc               ;
43  public : Tspecial_address_t _num_reg_rc            ;
44  public : Tcontrol_t         _write_rd              ;
45  public : Tgeneral_address_t _num_reg_rd            ;
46  public : Tcontrol_t         _write_re              ;
47  public : Tspecial_address_t _num_reg_re            ;
48   
49  public : entry_t (Tcontext_t         context_id            ,
50                    Tcontext_t         front_end_id          ,
51                    Tpacket_t          packet_id             ,
52                    Toperation_t       operation             ,
53                    Ttype_t            type                  ,
54                    Tlsq_ptr_t         store_queue_ptr_write ,
55                    Tlsq_ptr_t         load_queue_ptr_write  ,
56                    Tcontrol_t         has_immediat          ,
57                    Tgeneral_data_t    immediat              ,
58                    Tcontrol_t         read_ra               ,
59                    Tgeneral_address_t num_reg_ra            ,
60                    Tcontrol_t         read_rb               ,
61                    Tgeneral_address_t num_reg_rb            ,
62                    Tcontrol_t         read_rc               ,
63                    Tspecial_address_t num_reg_rc            ,
64                    Tcontrol_t         write_rd              ,
65                    Tgeneral_address_t num_reg_rd            ,
66                    Tcontrol_t         write_re              ,
67                    Tspecial_address_t num_reg_re            )
68    {
69      _context_id            = context_id           ;
70      _front_end_id          = front_end_id         ;
71      _packet_id             = packet_id            ;
72      _operation             = operation            ;
73      _type                  = type                 ;
74      _store_queue_ptr_write = store_queue_ptr_write;
75      _load_queue_ptr_write  = load_queue_ptr_write ;
76      _has_immediat          = has_immediat         ;
77      _immediat              = immediat             ;
78      _read_ra               = read_ra              ;
79      _num_reg_ra            = num_reg_ra           ;
80      _read_rb               = read_rb              ;
81      _num_reg_rb            = num_reg_rb           ;
82      _read_rc               = read_rc              ;
83      _num_reg_rc            = num_reg_rc           ;
84      _write_rd              = write_rd             ;
85      _num_reg_rd            = num_reg_rd           ;
86      _write_re              = write_re             ;
87      _num_reg_re            = num_reg_re           ;
88    }
89  };
90
91}; // end namespace issue_queue
92}; // end namespace ooo_engine
93}; // end namespace multi_ooo_engine
94}; // end namespace core
95}; // end namespace behavioural
96
97  template<> inline std::string toString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t& x)
98  {
99    switch (x)
100      {
101      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER        : return "in_order"       ; break;
102//       case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER : return "in_bundle_order"; break;
103      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    : return "out_of_order"   ; break;
104      default : return ""; break;
105      }
106  };
107
108  template<> inline morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t fromString<morpheo::behavioural::core::multi_ooo_engine
109::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const std::string& x)
110  {
111    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER))) == 0) or
112         (x.compare("in_order")        == 0))
113      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER;
114//     if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER))) == 0) or
115//          (x.compare("in_bundle_order") == 0))
116//       return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER;
117    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER))) == 0) or
118         (x.compare("out_of_order")    == 0))
119      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER;
120   
121    throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\""));
122  };
123
124}; // end namespace morpheo             
125
126#endif
Note: See TracBrowser for help on using the repository browser.