source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_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: 6.1 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Types_h
2#define morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_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_front_end {
17namespace front_end {
18namespace decod_unit {
19namespace decod_queue {
20
21  typedef enum 
22    {
23       DECOD_QUEUE_SCHEME_ONE_FIFO   // One fifo with a instruction bundle per slot (   internal fragmentation)
24      ,DECOD_QUEUE_SCHEME_MULTI_FIFO // One fifo per instruction. Rename in order   (no internal fragmentation)
25    } Tdecod_queue_scheme_t;
26
27  class decod_queue_entry_t
28  {
29  private: const uint32_t       _nb_inst        ;
30
31  public : Tcontrol_t         * _val            ;
32  public : Tcontext_t         * _context_id     ;
33  public : Tdepth_t           * _depth          ;
34  public : Ttype_t            * _type           ;
35  public : Toperation_t       * _operation      ;
36  public : Tcontrol_t         * _no_execute     ;
37  public : Tcontrol_t         * _is_delay_slot  ;
38#ifdef DEBUG
39  public : Tgeneral_data_t    * _address        ;
40#endif
41  public : Tgeneral_data_t    * _address_next   ;
42  public : Tcontrol_t         * _has_immediat   ;
43  public : Tgeneral_data_t    * _immediat       ;
44  public : Tcontrol_t         * _read_ra        ;
45  public : Tgeneral_address_t * _num_reg_ra     ;
46  public : Tcontrol_t         * _read_rb        ;
47  public : Tgeneral_address_t * _num_reg_rb     ;
48  public : Tcontrol_t         * _read_rc        ;
49  public : Tspecial_address_t * _num_reg_rc     ;
50  public : Tcontrol_t         * _write_rd       ;
51  public : Tgeneral_address_t * _num_reg_rd     ;
52  public : Tcontrol_t         * _write_re       ;
53  public : Tspecial_address_t * _num_reg_re     ;
54  public : Texception_t       * _exception_use  ;
55  public : Texception_t       * _exception      ;
56
57  public :  decod_queue_entry_t (uint32_t nb_inst):
58    _nb_inst (nb_inst)
59    {
60      _val            = new Tcontrol_t         [_nb_inst];
61      _context_id     = new Tcontext_t         [_nb_inst];
62      _depth          = new Tdepth_t           [_nb_inst];
63      _type           = new Ttype_t            [_nb_inst];
64      _operation      = new Toperation_t       [_nb_inst];
65      _no_execute     = new Tcontrol_t         [_nb_inst];
66      _is_delay_slot  = new Tcontrol_t         [_nb_inst];
67#ifdef DEBUG
68      _address        = new Tgeneral_data_t    [_nb_inst];
69#endif
70      _address_next   = new Tgeneral_data_t    [_nb_inst];
71      _has_immediat   = new Tcontrol_t         [_nb_inst];
72      _immediat       = new Tgeneral_data_t    [_nb_inst];
73      _read_ra        = new Tcontrol_t         [_nb_inst];
74      _num_reg_ra     = new Tgeneral_address_t [_nb_inst];
75      _read_rb        = new Tcontrol_t         [_nb_inst];
76      _num_reg_rb     = new Tgeneral_address_t [_nb_inst];
77      _read_rc        = new Tcontrol_t         [_nb_inst];
78      _num_reg_rc     = new Tspecial_address_t [_nb_inst];
79      _write_rd       = new Tcontrol_t         [_nb_inst];
80      _num_reg_rd     = new Tgeneral_address_t [_nb_inst];
81      _write_re       = new Tcontrol_t         [_nb_inst];
82      _num_reg_re     = new Tspecial_address_t [_nb_inst];
83      _exception_use  = new Texception_t       [_nb_inst];
84      _exception      = new Texception_t       [_nb_inst];
85
86      for (uint32_t i=0; i<_nb_inst; i++)
87        _val [i]=0; // default : not valid
88    }
89
90  public : ~decod_queue_entry_t (void)
91    {
92      delete [] _val            ;
93      delete [] _context_id     ;
94      delete [] _depth          ;
95      delete [] _type           ;
96      delete [] _operation      ;
97      delete [] _no_execute     ;
98      delete [] _is_delay_slot  ;
99#ifdef DEBUG
100      delete [] _address        ;
101#endif
102      delete [] _address_next   ;
103      delete [] _has_immediat   ;
104      delete [] _immediat       ;
105      delete [] _read_ra        ;
106      delete [] _num_reg_ra     ;
107      delete [] _read_rb        ;
108      delete [] _num_reg_rb     ;
109      delete [] _read_rc        ;
110      delete [] _num_reg_rc     ;
111      delete [] _write_rd       ;
112      delete [] _num_reg_rd     ;
113      delete [] _write_re       ;
114      delete [] _num_reg_re     ;
115      delete [] _exception_use  ;
116      delete [] _exception      ;
117    }
118  };
119
120}; // end namespace decod_queue
121}; // end namespace decod_unit
122}; // end namespace front_end
123}; // end namespace multi_front_end
124}; // end namespace core
125}; // end namespace behavioural
126
127  template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t>(const morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t& x)
128  {
129    switch (x)
130      {
131      case morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::DECOD_QUEUE_SCHEME_ONE_FIFO   : return "one_fifo"  ; break;
132      case morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::DECOD_QUEUE_SCHEME_MULTI_FIFO : return "multi_fifo"; break;
133      default : return ""; break;
134      }
135  };
136
137  template<> inline morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t fromString<morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t>(const std::string& x)
138  {
139    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::DECOD_QUEUE_SCHEME_ONE_FIFO  ))) == 0) or
140         (x.compare("one_fifo")   == 0))
141      return morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::DECOD_QUEUE_SCHEME_ONE_FIFO;
142    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::DECOD_QUEUE_SCHEME_MULTI_FIFO))) == 0) or
143         (x.compare("multi_fifo") == 0))
144      return morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::DECOD_QUEUE_SCHEME_MULTI_FIFO;
145   
146    throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\""));
147  };
148
149
150}; // end namespace morpheo             
151
152#endif
Note: See TracBrowser for help on using the repository browser.