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

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 9.0 KB
Line 
1/*
2 * $Id: OOO_Engine_Glue.cpp 123 2009-06-08 20:43:30Z 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_STORE_QUEUE_PTR_READ  [i][j]))
155                        << (*(in_INSERT_RENAME_UNIT_STORE_QUEUE_EMPTY     [i][j]))
156                        << (*(in_INSERT_RENAME_UNIT_READ_RA               [i][j]))
157                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RA_PHY        [i][j]))
158                        << (*(in_INSERT_RENAME_UNIT_READ_RB               [i][j]))
159                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RB_PHY        [i][j]))
160                        << (*(in_INSERT_RENAME_UNIT_READ_RC               [i][j]))
161                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RC_PHY        [i][j]))
162                        << (*(in_INSERT_RENAME_UNIT_WRITE_RD              [i][j]))
163                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RD_PHY_OLD    [i][j]))
164                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RD_PHY_NEW    [i][j]))
165                        << (*(in_INSERT_RENAME_UNIT_WRITE_RE              [i][j]))
166                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RE_PHY_OLD    [i][j]))
167                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RE_PHY_NEW    [i][j]));
168            }
169
170# ifdef SYSTEMCASS_SPECIFIC
171        // List dependency information
172# endif   
173
174//      log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_retire_valack"),_name.c_str());
175
176//      SC_METHOD (genMealy_retire_valack);
177//      dont_initialize ();
178//      //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
179//         {
180//           uint32_t x=0;
181//           for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
182//             for (uint32_t j=0; j<_param->_nb_inst_retire[i]; ++j)
183//               sensitive
184//              << (*(in_RETIRE_ACK             [x++])) 
185//                 << (*(in_RETIRE_RENAME_UNIT_ACK [i][j]))
186//                 << (*(in_RETIRE_COMMIT_UNIT_VAL [i][j]));
187//         }
188
189// # ifdef SYSTEMCASS_SPECIFIC
190//      // List dependency information
191// # endif   
192
193//      log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_retire"),_name.c_str());
194
195//      SC_METHOD (genMealy_retire);
196//      dont_initialize ();
197//      //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
198//         for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
199//           for (uint32_t j=0; j<_param->_nb_inst_retire[i]; ++j)
200//             {
201//               if (_param->_have_port_front_end_id)
202//               sensitive << (*( in_RETIRE_COMMIT_UNIT_FRONT_END_ID       [i][j]));
203//               sensitive << (*( in_RETIRE_COMMIT_UNIT_WRITE_RD           [i][j]))
204//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RD_PHY_OLD [i][j]))
205//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RD_PHY_NEW [i][j]))
206//                         << (*( in_RETIRE_COMMIT_UNIT_WRITE_RE           [i][j]))
207//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RE_PHY_OLD [i][j]))
208//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RE_PHY_NEW [i][j]))
209//                         << (*( in_RETIRE_COMMIT_UNIT_EVENT_STATE        [i][j]));
210//             }
211
212
213# ifdef SYSTEMCASS_SPECIFIC
214        // List dependency information
215# endif   
216
217        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_spr"),_name.c_str());
218
219        SC_METHOD (genMealy_spr);
220        dont_initialize ();
221        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
222        for (uint32_t i=0; i<_param->_nb_front_end; ++i)
223          for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
224            sensitive << (*(in_SPR_SPECIAL_REGISTER_UNIT_SR [i][j]));
225
226# ifdef SYSTEMCASS_SPECIFIC
227        // List dependency information
228# endif   
229
230       
231#endif
232      }
233    log_end(OOO_Engine_Glue,FUNCTION);
234  };
235   
236#undef  FUNCTION
237#define FUNCTION "OOO_Engine_Glue::~OOO_Engine_Glue"
238  OOO_Engine_Glue::~OOO_Engine_Glue (void)
239  {
240    log_begin(OOO_Engine_Glue,FUNCTION);
241
242#ifdef STATISTICS
243    if (usage_is_set(_usage,USE_STATISTICS))
244      {
245        statistics_deallocation();
246      }
247#endif
248
249    log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Deallocation"),_name.c_str());
250    deallocation ();
251
252    log_end(OOO_Engine_Glue,FUNCTION);
253  };
254
255}; // end namespace ooo_engine_glue
256}; // end namespace ooo_engine
257}; // end namespace multi_ooo_engine
258}; // end namespace core
259
260}; // end namespace behavioural
261}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.