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

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

1) Update Prediction Table : statistics
2) Size instruction address on 30 bits
3) Change Log File
4) Add debug_level in simulation configuration file

  • 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_Types_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Types_h
3
4/*
5 * $Id: Types.h 97 2008-12-19 15:34:00Z 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.