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

Last change on this file 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.