source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/include/Types.h @ 131

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

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

  • Property svn:keywords set to Id
File size: 5.2 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 128 2009-06-26 08:43:23Z 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         _has_immediat;
55    Tgeneral_data_t    _immediat    ;
56    Tgeneral_data_t    _data_ra     ;
57    Tgeneral_data_t    _data_rb     ;
58    Tspecial_data_t    _data_rc     ;
59    Tgeneral_data_t    _data_rd     ;
60    Tspecial_data_t    _data_re     ;
61
62    Tcontrol_t         _write_rd  ;
63    Tgeneral_address_t _num_reg_rd;
64    Tcontrol_t         _write_re  ;
65    Tspecial_address_t _num_reg_re;
66
67    Texception_t       _exception   ;
68    Tcontrol_t         _no_sequence ;
69    Taddress_t         _address     ;
70  } execute_operation_t;
71
72  class execute_param_t
73  {
74  public : const uint32_t            _size_data;
75  public : const Tgeneral_data_t     _mask_data;
76  public : const Tgeneral_data_t     _mask_shift;
77  public :       execute_timing_t ** _timing;
78
79  public : execute_param_t (const uint32_t      size_data,
80                            execute_timing_t ** timing):
81    _size_data (size_data),
82    _mask_data (gen_mask<Tgeneral_data_t> (size_data)),
83    _mask_shift(gen_mask<Tgeneral_data_t> (log2(size_data)))
84    {
85      _timing = timing;
86    };
87  public : ~execute_param_t (void)
88    {
89    };
90  } ;
91
92  class execute_register_t
93  {
94    // information to custom group :
95    //  * perhalps a custom group start an operation after a access at a internal's group register
96  public : bool               _i_read_spr;
97  public : bool               _i_write_spr;
98  public : uint32_t           _access_num_group;
99  public : uint32_t           _access_num_register;
100  public : Tgeneral_data_t    _spr_old;
101  public : Tgeneral_data_t ** _spr;
102  public : SPR_access_mode  * _spr_access_mode;
103   
104  public : execute_register_t (void)
105    {
106      _spr               = new Tgeneral_data_t * [NB_GROUP];
107      _spr_access_mode   = new SPR_access_mode;
108 
109      for (uint32_t i=0; i<NB_GROUP; i++)
110        {
111          _spr [i] = NULL;
112        }
113    }
114
115  public : ~execute_register_t (void)
116    {
117      for (uint32_t x=0; x<NB_GROUP; x++)
118        if (_spr[x] != NULL)
119          delete [] _spr[x];
120      delete [] _spr;
121      delete    _spr_access_mode;
122    }
123
124  public : void implement_group (uint32_t num_group, uint32_t nb_reg)
125    {
126      if ((num_group > NB_GROUP) or (_spr[num_group] != NULL))
127        throw ERRORMORPHEO("execute_register_t::implement_group", "Invalid group number or this group is already implemented.");
128
129      if (nb_reg > 0)
130        {
131          _spr [num_group] = new Tgeneral_data_t [nb_reg];
132
133          if (num_group >= GROUP_CUSTOM_1)
134            _spr_access_mode ->implement_group(num_group, nb_reg);
135        }
136    }
137
138  public : void implement_group (uint32_t num_group)
139    {
140      if ((num_group > NB_GROUP) or (_spr[num_group] != NULL))
141        throw ERRORMORPHEO("execute_register_t::implement_group", "Invalid group number or this group is already implemented.");
142
143      uint32_t nb_reg = _spr_access_mode ->implement_group(num_group);
144
145      if (nb_reg > 0)
146        _spr [num_group] = new Tgeneral_data_t [nb_reg];
147    }
148  };
149 
150  typedef void function_execute_t 
151  (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_operation_t *, 
152   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  *,
153   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     *);
154 
155  typedef void function_execute_end_cycle_t 
156  (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  *,
157   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     *);
158
159 
160}; // end namespace functionnal_unit
161}; // end namespace execute_unit
162}; // end namespace multi_execute_unit
163}; // end namespace execute_loop
164}; // end namespace multi_execute_loop
165}; // end namespace core
166}; // end namespace behavioural
167}; // end namespace morpheo             
168#endif
Note: See TracBrowser for help on using the repository browser.