source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/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: 5.3 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_operation_Types_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_operation_Types_h
3
4/*
5 * $Id: Types.h 136 2009-10-20 18:52:15Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#ifdef SYSTEMC
12#include "systemc.h"
13#endif
14
15#include "Common/include/BitManipulation.h"
16#include "Behavioural/include/SPR_access_mode.h"
17#include "Behavioural/include/Types.h"
18#include "Behavioural/include/Parameters.h"
19
20namespace morpheo {
21namespace behavioural {
22namespace core {
23namespace multi_execute_loop {
24namespace execute_loop {
25namespace multi_execute_unit {
26namespace execute_unit {
27namespace functionnal_unit {
28
29  class execute_timing_t
30  {
31    // if delay   > 0, can't accepted a transaction on EXECUTE_IN's  interface.
32  public : uint32_t        _delay  ;
33    // if latence > 0, can't initiate a transaction on EXECUTE_OUT's interface.
34  public : uint32_t        _latence;
35
36  public : execute_timing_t (uint32_t delay=0, uint32_t latence=0)
37    {
38      _delay   = delay;
39      _latence = latence;
40    };
41  };
42
43  typedef struct 
44  {
45    execute_timing_t   _timing      ;
46
47    Tcontext_t         _context_id   ;
48    Tcontext_t         _front_end_id ;
49    Tcontext_t         _ooo_engine_id;
50    Tpacket_t          _packet_id ;
51
52    Toperation_t       _operation   ;
53    Ttype_t            _type        ;
54    Tcontrol_t         _cancel      ;
55    Tcontrol_t         _has_immediat;
56    Tgeneral_data_t    _immediat    ;
57    Tgeneral_data_t    _data_ra     ;
58    Tgeneral_data_t    _data_rb     ;
59    Tspecial_data_t    _data_rc     ;
60    Tgeneral_data_t    _data_rd     ;
61    Tspecial_data_t    _data_re     ;
62
63    Tcontrol_t         _write_rd  ;
64    Tgeneral_address_t _num_reg_rd;
65    Tcontrol_t         _write_re  ;
66    Tspecial_address_t _num_reg_re;
67
68    Texception_t       _exception   ;
69    Tcontrol_t         _no_sequence ;
70    Taddress_t         _address     ;
71  } execute_operation_t;
72
73  class execute_param_t
74  {
75  public : const uint32_t            _size_data;
76  public : const Tgeneral_data_t     _mask_data;
77  public : const Tgeneral_data_t     _mask_shift;
78  public :       execute_timing_t ** _timing;
79
80  public : execute_param_t (const uint32_t      size_data,
81                            execute_timing_t ** timing):
82    _size_data (size_data),
83    _mask_data (gen_mask<Tgeneral_data_t> (size_data)),
84    _mask_shift(gen_mask<Tgeneral_data_t> (log2(size_data)))
85    {
86      _timing = timing;
87    };
88  public : ~execute_param_t (void)
89    {
90    };
91  } ;
92
93  class execute_register_t
94  {
95    // information to custom group :
96    //  * perhalps a custom group start an operation after a access at a internal's group register
97  public : bool               _i_read_spr;
98  public : bool               _i_write_spr;
99  public : uint32_t           _access_num_group;
100  public : uint32_t           _access_num_register;
101  public : Tgeneral_data_t    _spr_old;
102  public : Tgeneral_data_t ** _spr;
103  public : SPR_access_mode  * _spr_access_mode;
104   
105  public : execute_register_t (void)
106    {
107      _spr               = new Tgeneral_data_t * [NB_GROUP];
108      _spr_access_mode   = new SPR_access_mode;
109 
110      for (uint32_t i=0; i<NB_GROUP; i++)
111        {
112          _spr [i] = NULL;
113        }
114    }
115
116  public : ~execute_register_t (void)
117    {
118      for (uint32_t x=0; x<NB_GROUP; x++)
119        if (_spr[x] != NULL)
120          delete [] _spr[x];
121      delete [] _spr;
122      delete    _spr_access_mode;
123    }
124
125  public : void implement_group (uint32_t num_group, uint32_t nb_reg)
126    {
127      if ((num_group > NB_GROUP) or (_spr[num_group] != NULL))
128        throw ERRORMORPHEO("execute_register_t::implement_group", "Invalid group number or this group is already implemented.");
129
130      if (nb_reg > 0)
131        {
132          _spr [num_group] = new Tgeneral_data_t [nb_reg];
133
134          if (num_group >= GROUP_CUSTOM_1)
135            _spr_access_mode ->implement_group(num_group, nb_reg);
136        }
137    }
138
139  public : void implement_group (uint32_t num_group)
140    {
141      if ((num_group > NB_GROUP) or (_spr[num_group] != NULL))
142        throw ERRORMORPHEO("execute_register_t::implement_group", "Invalid group number or this group is already implemented.");
143
144      uint32_t nb_reg = _spr_access_mode ->implement_group(num_group);
145
146      if (nb_reg > 0)
147        _spr [num_group] = new Tgeneral_data_t [nb_reg];
148    }
149  };
150 
151  typedef void function_execute_t 
152  (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_operation_t *, 
153   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  *,
154   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     *);
155 
156  typedef void function_execute_end_cycle_t 
157  (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  *,
158   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     *);
159
160 
161}; // end namespace functionnal_unit
162}; // end namespace execute_unit
163}; // end namespace multi_execute_unit
164}; // end namespace execute_loop
165}; // end namespace multi_execute_loop
166}; // end namespace core
167}; // end namespace behavioural
168}; // end namespace morpheo             
169#endif
Note: See TracBrowser for help on using the repository browser.