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

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

1) add constant method - compatibility with SystemC
2) add Script to test sensitive list
3) fix bug in sensitive list

  • Property svn:keywords set to Id
File size: 9.1 KB
Line 
1/*
2 * $Id: OOO_Engine_Glue.cpp 132 2009-07-11 16:39:35Z 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        sensitive << (*(in_NRESET));
105        for (uint32_t i=0; i<_param->_nb_front_end; ++i)
106          for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j)
107            sensitive << (*(in_RENAME_FRONT_END_ID [i][j]));
108
109# ifdef SYSTEMCASS_SPECIFIC
110        // List dependency information
111# endif   
112          }
113
114        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_insert_valack"),_name.c_str());
115
116        SC_METHOD (genMealy_insert_valack);
117        dont_initialize ();
118        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
119        sensitive << (*(in_NRESET));
120        {
121          uint32_t x=0;
122          for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
123            for (uint32_t j=0; j<_param->_nb_inst_insert[i]; ++j)
124              sensitive << (*(in_INSERT_ACK                    [x++] ))
125                        << (*(in_INSERT_RENAME_UNIT_VAL        [i][j]))
126                        << (*(in_INSERT_RENAME_UNIT_NO_EXECUTE [i][j]))
127                        << (*(in_INSERT_COMMIT_UNIT_ACK        [i][j]))
128                        << (*(in_INSERT_ISSUE_QUEUE_ACK        [i][j]));
129        }
130
131# ifdef SYSTEMCASS_SPECIFIC
132        // List dependency information
133# endif   
134
135        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_insert"),_name.c_str());
136
137        SC_METHOD (genMealy_insert);
138        dont_initialize ();
139        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
140        sensitive << (*(in_NRESET));
141
142        for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
143          for (uint32_t j=0; j<_param->_nb_inst_insert[i];++j)
144            {
145              if (_param->_have_port_front_end_id)
146              sensitive << (*(in_INSERT_RENAME_UNIT_FRONT_END_ID          [i][j]));
147              if (_param->_have_port_context_id)
148              sensitive << (*(in_INSERT_RENAME_UNIT_CONTEXT_ID            [i][j]));
149              if (_param->_have_port_load_queue_ptr)
150              sensitive << (*(in_INSERT_RENAME_UNIT_LOAD_QUEUE_PTR_WRITE  [i][j]));
151              sensitive << (*(in_INSERT_RENAME_UNIT_TYPE                  [i][j]))
152                        << (*(in_INSERT_RENAME_UNIT_OPERATION             [i][j]))
153                        << (*(in_INSERT_RENAME_UNIT_NO_EXECUTE            [i][j]))
154                        << (*(in_INSERT_RENAME_UNIT_HAS_IMMEDIAT          [i][j]))
155                        << (*(in_INSERT_RENAME_UNIT_IMMEDIAT              [i][j]))
156                        << (*(in_INSERT_RENAME_UNIT_STORE_QUEUE_PTR_WRITE [i][j]))
157                        << (*(in_INSERT_RENAME_UNIT_STORE_QUEUE_PTR_READ  [i][j]))
158                        << (*(in_INSERT_RENAME_UNIT_STORE_QUEUE_EMPTY     [i][j]))
159                        << (*(in_INSERT_RENAME_UNIT_READ_RA               [i][j]))
160                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RA_PHY        [i][j]))
161                        << (*(in_INSERT_RENAME_UNIT_READ_RB               [i][j]))
162                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RB_PHY        [i][j]))
163                        << (*(in_INSERT_RENAME_UNIT_READ_RC               [i][j]))
164                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RC_PHY        [i][j]))
165                        << (*(in_INSERT_RENAME_UNIT_WRITE_RD              [i][j]))
166                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RD_PHY_OLD    [i][j]))
167                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RD_PHY_NEW    [i][j]))
168                        << (*(in_INSERT_RENAME_UNIT_WRITE_RE              [i][j]))
169                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RE_PHY_OLD    [i][j]))
170                        << (*(in_INSERT_RENAME_UNIT_NUM_REG_RE_PHY_NEW    [i][j]));
171            }
172
173# ifdef SYSTEMCASS_SPECIFIC
174        // List dependency information
175# endif   
176
177//      log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_retire_valack"),_name.c_str());
178
179//      SC_METHOD (genMealy_retire_valack);
180//      dont_initialize ();
181//      //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
182//         {
183//           uint32_t x=0;
184//           for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
185//             for (uint32_t j=0; j<_param->_nb_inst_retire[i]; ++j)
186//               sensitive
187//              << (*(in_RETIRE_ACK             [x++])) 
188//                 << (*(in_RETIRE_RENAME_UNIT_ACK [i][j]))
189//                 << (*(in_RETIRE_COMMIT_UNIT_VAL [i][j]));
190//         }
191
192// # ifdef SYSTEMCASS_SPECIFIC
193//      // List dependency information
194// # endif   
195
196//      log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_retire"),_name.c_str());
197
198//      SC_METHOD (genMealy_retire);
199//      dont_initialize ();
200//      //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
201//         for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
202//           for (uint32_t j=0; j<_param->_nb_inst_retire[i]; ++j)
203//             {
204//               if (_param->_have_port_front_end_id)
205//               sensitive << (*( in_RETIRE_COMMIT_UNIT_FRONT_END_ID       [i][j]));
206//               sensitive << (*( in_RETIRE_COMMIT_UNIT_WRITE_RD           [i][j]))
207//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RD_PHY_OLD [i][j]))
208//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RD_PHY_NEW [i][j]))
209//                         << (*( in_RETIRE_COMMIT_UNIT_WRITE_RE           [i][j]))
210//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RE_PHY_OLD [i][j]))
211//                         << (*( in_RETIRE_COMMIT_UNIT_NUM_REG_RE_PHY_NEW [i][j]))
212//                         << (*( in_RETIRE_COMMIT_UNIT_EVENT_STATE        [i][j]));
213//             }
214
215
216# ifdef SYSTEMCASS_SPECIFIC
217        // List dependency information
218# endif   
219
220        log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Method - genMealy_spr"),_name.c_str());
221
222        SC_METHOD (genMealy_spr);
223        dont_initialize ();
224        //sensitive << (*(in_CLOCK)).neg(); // don't need internal register
225        sensitive << (*(in_NRESET));
226        for (uint32_t i=0; i<_param->_nb_front_end; ++i)
227          for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
228            sensitive << (*(in_SPR_SPECIAL_REGISTER_UNIT_SR [i][j]));
229
230# ifdef SYSTEMCASS_SPECIFIC
231        // List dependency information
232# endif   
233
234       
235#endif
236      }
237    log_end(OOO_Engine_Glue,FUNCTION);
238  };
239   
240#undef  FUNCTION
241#define FUNCTION "OOO_Engine_Glue::~OOO_Engine_Glue"
242  OOO_Engine_Glue::~OOO_Engine_Glue (void)
243  {
244    log_begin(OOO_Engine_Glue,FUNCTION);
245
246#ifdef STATISTICS
247    if (usage_is_set(_usage,USE_STATISTICS))
248      {
249        statistics_deallocation();
250      }
251#endif
252
253    log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Deallocation"),_name.c_str());
254    deallocation ();
255
256    log_end(OOO_Engine_Glue,FUNCTION);
257  };
258
259}; // end namespace ooo_engine_glue
260}; // end namespace ooo_engine
261}; // end namespace multi_ooo_engine
262}; // end namespace core
263
264}; // end namespace behavioural
265}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.