source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue.cpp @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 8.8 KB
Line 
1/*
2 * $Id: OOO_Engine_Glue.cpp 88 2008-12-10 18:31:39Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/include/OOO_Engine_Glue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace core {
13namespace multi_ooo_engine {
14namespace ooo_engine {
15namespace ooo_engine_glue {
16
17
18#undef  FUNCTION
19#define FUNCTION "OOO_Engine_Glue::OOO_Engine_Glue"
20  OOO_Engine_Glue::OOO_Engine_Glue
21  (
22#ifdef SYSTEMC
23   sc_module_name name,
24#else
25   string name,
26#endif
27#ifdef STATISTICS
28   morpheo::behavioural::Parameters_Statistics * param_statistics,
29#endif
30   morpheo::behavioural::core::multi_ooo_engine::ooo_engine::ooo_engine_glue::Parameters * param,
31   morpheo::behavioural::Tusage_t usage
32   ):
33    _name              (name)
34    ,_param            (param)
35    ,_usage            (usage)
36  {
37    log_begin(OOO_Engine_Glue,FUNCTION);
38
39    usage_environment(_usage);
40
41#if DEBUG_OOO_Engine_Glue == true
42    log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
43
44    std::cout << *param << std::endl;
45#endif   
46
47    log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
48
49    allocation (
50#ifdef STATISTICS
51                param_statistics
52#endif
53                );
54
55#ifdef STATISTICS
56    if (usage_is_set(_usage,USE_STATISTICS))
57      { 
58        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Allocation of statistics"),_name.c_str());
59
60        statistics_allocation(param_statistics);
61      }
62#endif
63
64#ifdef VHDL
65    if (usage_is_set(_usage,USE_VHDL))
66      {
67        // generate the vhdl
68        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Generate the vhdl"),_name.c_str());
69       
70        vhdl();
71      }
72#endif
73
74#ifdef SYSTEMC
75    if (usage_is_set(_usage,USE_SYSTEMC))
76      {
77        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - transition"),_name.c_str());
78
79        SC_METHOD (transition);
80        dont_initialize ();
81        sensitive << (*(in_CLOCK)).pos();
82       
83# ifdef SYSTEMCASS_SPECIFIC
84        // List dependency information
85# endif   
86
87//      log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
88
89//      SC_METHOD (genMoore);
90//      dont_initialize ();
91//      sensitive << (*(in_CLOCK)).neg(); // need internal register
92       
93// # ifdef SYSTEMCASS_SPECIFIC
94//      // List dependency information
95// # endif   
96
97        if (_param->_have_port_front_end_id)
98          {
99        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_rename"),_name.c_str());
100
101        SC_METHOD (genMealy_rename);
102        dont_initialize ();
103        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
104        for (uint32_t i=0; i<_param->_nb_front_end; ++i)
105          for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j)
106            sensitive << (*(in_RENAME_FRONT_END_ID [i][j]));
107
108# ifdef SYSTEMCASS_SPECIFIC
109        // List dependency information
110# endif   
111          }
112
113        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_insert_valack"),_name.c_str());
114
115        SC_METHOD (genMealy_insert_valack);
116        dont_initialize ();
117        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
118        {
119          uint32_t x=0;
120          for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
121            for (uint32_t j=0; j<_param->_nb_inst_insert[i]; ++j)
122              sensitive << (*(in_INSERT_ACK                    [x++] ))
123                        << (*(in_INSERT_RENAME_UNIT_VAL        [i][j]))
124                        << (*(in_INSERT_RENAME_UNIT_NO_EXECUTE [i][j]))
125                        << (*(in_INSERT_COMMIT_UNIT_ACK        [i][j]))
126                        << (*(in_INSERT_ISSUE_QUEUE_ACK        [i][j]));
127        }
128
129# ifdef SYSTEMCASS_SPECIFIC
130        // List dependency information
131# endif   
132
133        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_insert"),_name.c_str());
134
135        SC_METHOD (genMealy_insert);
136        dont_initialize ();
137        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
138
139        for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
140          for (uint32_t j=0; j<_param->_nb_inst_insert[i];++j)
141            {
142              if (_param->_have_port_front_end_id)
143              sensitive << (*(in_INSERT_RENAME_UNIT_FRONT_END_ID          [i][j]));
144              if (_param->_have_port_context_id)
145              sensitive << (*(in_INSERT_RENAME_UNIT_CONTEXT_ID            [i][j]));
146              if (_param->_have_port_load_queue_ptr)
147              sensitive << (*(in_INSERT_RENAME_UNIT_LOAD_QUEUE_PTR_WRITE  [i][j]));
148              sensitive << (*(in_INSERT_RENAME_UNIT_TYPE                  [i][j]))
149                        << (*(in_INSERT_RENAME_UNIT_OPERATION             [i][j]))
150                        << (*(in_INSERT_RENAME_UNIT_NO_EXECUTE            [i][j]))
151                        << (*(in_INSERT_RENAME_UNIT_HAS_IMMEDIAT          [i][j]))
152                        << (*(in_INSERT_RENAME_UNIT_IMMEDIAT              [i][j]))
153                        << (*(in_INSERT_RENAME_UNIT_STORE_QUEUE_PTR_WRITE [i][j]))
154                        << (*(in_INSERT_RENAME_UNIT_READ_RA               [i][j]))
155                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RA_PHY        [i][j]))
156                        << (*(in_INSERT_RENAME_UNIT_READ_RB               [i][j]))
157                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RB_PHY        [i][j]))
158                        << (*(in_INSERT_RENAME_UNIT_READ_RC               [i][j]))
159                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RC_PHY        [i][j]))
160                        << (*(in_INSERT_RENAME_UNIT_WRITE_RD              [i][j]))
161                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RD_PHY_OLD    [i][j]))
162                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RD_PHY_NEW    [i][j]))
163                        << (*(in_INSERT_RENAME_UNIT_WRITE_RE              [i][j]))
164                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RE_PHY_OLD    [i][j]))
165                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RE_PHY_NEW    [i][j]));
166            }
167
168# ifdef SYSTEMCASS_SPECIFIC
169        // List dependency information
170# endif   
171
172//      log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_retire_valack"),_name.c_str());
173
174//      SC_METHOD (genMealy_retire_valack);
175//      dont_initialize ();
176//      //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
177//         {
178//           uint32_t x=0;
179//           for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
180//             for (uint32_t j=0; j<_param->_nb_inst_retire[i]; ++j)
181//               sensitive
182//              << (*(in_RETIRE_ACK             [x++])) 
183//                 << (*(in_RETIRE_RENAME_UNIT_ACK [i][j]))
184//                 << (*(in_RETIRE_COMMIT_UNIT_VAL [i][j]));
185//         }
186
187// # ifdef SYSTEMCASS_SPECIFIC
188//      // List dependency information
189// # endif   
190
191//      log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_retire"),_name.c_str());
192
193//      SC_METHOD (genMealy_retire);
194//      dont_initialize ();
195//      //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
196//         for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
197//           for (uint32_t j=0; j<_param->_nb_inst_retire[i]; ++j)
198//             {
199//               if (_param->_have_port_front_end_id)
200//               sensitive << (*( in_RETIRE_COMMIT_UNIT_FRONT_END_ID       [i][j]));
201//               sensitive << (*( in_RETIRE_COMMIT_UNIT_WRITE_RD           [i][j]))
202//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RD_PHY_OLD [i][j]))
203//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RD_PHY_NEW [i][j]))
204//                         << (*( in_RETIRE_COMMIT_UNIT_WRITE_RE           [i][j]))
205//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RE_PHY_OLD [i][j]))
206//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RE_PHY_NEW [i][j]))
207//                         << (*( in_RETIRE_COMMIT_UNIT_EVENT_STATE        [i][j]));
208//             }
209
210
211# ifdef SYSTEMCASS_SPECIFIC
212        // List dependency information
213# endif   
214
215        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_spr"),_name.c_str());
216
217        SC_METHOD (genMealy_spr);
218        dont_initialize ();
219        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
220        for (uint32_t i=0; i<_param->_nb_front_end; ++i)
221          for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
222            sensitive << (*(in_SPR_SPECIAL_REGISTER_UNIT_SR [i][j]));
223
224# ifdef SYSTEMCASS_SPECIFIC
225        // List dependency information
226# endif   
227
228       
229#endif
230      }
231    log_end(OOO_Engine_Glue,FUNCTION);
232  };
233   
234#undef  FUNCTION
235#define FUNCTION "OOO_Engine_Glue::~OOO_Engine_Glue"
236  OOO_Engine_Glue::~OOO_Engine_Glue (void)
237  {
238    log_begin(OOO_Engine_Glue,FUNCTION);
239
240#ifdef STATISTICS
241    if (usage_is_set(_usage,USE_STATISTICS))
242      {
243        statistics_deallocation();
244      }
245#endif
246
247    log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Deallocation"),_name.c_str());
248    deallocation ();
249
250    log_end(OOO_Engine_Glue,FUNCTION);
251  };
252
253}; // end namespace ooo_engine_glue
254}; // end namespace ooo_engine
255}; // end namespace multi_ooo_engine
256}; // end namespace core
257
258}; // end namespace behavioural
259}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.