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

Last change on this file since 136 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: 9.1 KB
Line 
1/*
2 * $Id: OOO_Engine_Glue.cpp 136 2009-10-20 18:52:15Z 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.