source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Types.h @ 136

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 6.7 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_write_queue_Types_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_write_queue_Types_h
3
4/*
5 * $Id: Types.h 136 2009-10-20 18:52:15Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#include "Behavioural/include/Types.h"
12
13namespace morpheo {
14namespace behavioural {
15namespace core {
16namespace multi_execute_loop {
17namespace execute_loop {
18namespace multi_write_unit {
19namespace write_unit {
20namespace write_queue {
21
22  typedef enum 
23    {
24       WRITE_QUEUE_SCHEME_MOORE // Write register and pop is not in same cycle
25      ,WRITE_QUEUE_SCHEME_MEALY // Write register and pop can be in same cycle
26    } Twrite_queue_scheme_t;
27
28  typedef enum
29    {
30      BYPASS_WRITE_FROM_ALU,
31      BYPASS_WRITE_FROM_QUEUE
32    } Tbypass_write_scheme_t;
33
34  class write_queue_entry_t
35  {
36  public  : Tcontext_t         _context_id   ;
37  public  : Tcontext_t         _front_end_id ;
38  public  : Tcontext_t         _ooo_engine_id;
39  public  : Tpacket_t          _packet_id    ;
40//public  : Toperation_t       _operation    ;
41//public  : Ttype_t            _type         ;
42  public  : Tcontrol_t         _cancel       ;
43  public  : Tcontrol_t         _write_rd     ;
44  public  : Tgeneral_address_t _num_reg_rd   ;
45  public  : Tgeneral_data_t    _data_rd      ;
46  public  : Tcontrol_t         _write_re     ;
47  public  : Tspecial_address_t _num_reg_re   ;
48  public  : Tspecial_data_t    _data_re      ;
49  public  : Texception_t       _exception    ;
50  public  : Tcontrol_t         _no_sequence  ;
51  public  : Tgeneral_data_t    _address      ;
52   
53  public  : write_queue_entry_t (Tcontext_t         context_id   ,
54                                 Tcontext_t         front_end_id ,
55                                 Tcontext_t         ooo_engine_id,
56                                 Tpacket_t          packet_id    ,
57//                               Toperation_t       operation    ,
58//                               Ttype_t            type         ,
59                                 Tcontrol_t         cancel       ,
60                                 Tcontrol_t         write_rd     ,
61                                 Tgeneral_address_t num_reg_rd   ,
62                                 Tgeneral_data_t    data_rd      ,
63                                 Tcontrol_t         write_re     ,
64                                 Tspecial_address_t num_reg_re   ,
65                                 Tspecial_data_t    data_re      ,
66                                 Texception_t       exception    ,
67                                 Tcontrol_t         no_sequence  ,
68                                 Tgeneral_data_t    address      )
69    {
70      _context_id    = context_id   ;
71      _front_end_id  = front_end_id ;
72      _ooo_engine_id = ooo_engine_id;
73      _packet_id     = packet_id    ;
74    //_operation     = operation    ;
75    //_type          = type         ;
76      _cancel        = cancel       ;
77      _write_rd      = write_rd     ;
78      _num_reg_rd    = num_reg_rd   ;
79      _data_rd       = data_rd      ;
80      _write_re      = write_re     ;
81      _num_reg_re    = num_reg_re   ;
82      _data_re       = data_re      ;
83      _exception     = exception    ;
84      _no_sequence   = no_sequence  ;
85      _address       = address      ;
86    };
87  };
88
89}; // end namespace write_queue
90}; // end namespace write_unit
91}; // end namespace multi_write_unit
92}; // end namespace execute_loop
93}; // end namespace multi_execute_loop
94}; // end namespace core
95}; // end namespace behavioural
96
97  template<> inline std::string toString<morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t>(const morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t& x)
98  {
99    switch (x)
100      {
101      case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::WRITE_QUEUE_SCHEME_MOORE : return "moore"; break;
102      case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::WRITE_QUEUE_SCHEME_MEALY : return "mealy"; break;
103      default : return ""; break;
104      }
105  };
106
107  template<> inline morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t fromString<morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t>(const std::string& x)
108  {
109    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::WRITE_QUEUE_SCHEME_MOORE))) == 0) or
110         (x.compare("moore") == 0))
111      return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::WRITE_QUEUE_SCHEME_MOORE;
112    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::WRITE_QUEUE_SCHEME_MEALY))) == 0) or
113         (x.compare("mealy") == 0))
114      return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::WRITE_QUEUE_SCHEME_MEALY;
115   
116    throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\""));
117  };
118
119  template<> inline std::string toString<morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t>(const morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t& x)
120  {
121    switch (x)
122      {
123      case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_ALU   : return "alu"  ; break;
124      case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_QUEUE : return "queue"; break;
125      default : return ""; break;
126      }
127  };
128
129  template<> inline morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t fromString<morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t>(const std::string& x)
130  {
131    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_ALU))) == 0) or
132         (x.compare("alu") == 0))
133      return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_ALU;
134    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_QUEUE))) == 0) or
135         (x.compare("queue") == 0))
136      return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_QUEUE;
137   
138    throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\""));
139  };
140
141}; // end namespace morpheo             
142
143#endif
Note: See TracBrowser for help on using the repository browser.