source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue.cpp @ 117

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

1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme

  • Property svn:keywords set to Id
File size: 10.9 KB
Line 
1/*
2 * $Id: Core_Glue.cpp 117 2009-05-16 14:42:39Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Core_Glue/include/Core_Glue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace core {
13namespace core_glue {
14
15
16#undef  FUNCTION
17#define FUNCTION "Core_Glue::Core_Glue"
18  Core_Glue::Core_Glue
19  (
20#ifdef SYSTEMC
21   sc_module_name name,
22#else
23   string name,
24#endif
25#ifdef STATISTICS
26   morpheo::behavioural::Parameters_Statistics * param_statistics,
27#endif
28   morpheo::behavioural::core::core_glue::Parameters * param,
29   morpheo::behavioural::Tusage_t usage
30   ):
31    _name              (name)
32    ,_param            (param)
33    ,_usage            (usage)
34  {
35    log_begin(Core_Glue,FUNCTION);
36
37    usage_environment(_usage);
38
39#if DEBUG_Core_Glue == true
40    log_printf(INFO,Core_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
41
42    std::cout << *param << std::endl;
43#endif   
44
45    log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
46
47    allocation (
48#ifdef STATISTICS
49                param_statistics
50#endif
51                );
52
53#ifdef STATISTICS
54    if (usage_is_set(_usage,USE_STATISTICS))
55      { 
56        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Allocation of statistics"),_name.c_str());
57
58        statistics_allocation(param_statistics);
59      }
60#endif
61
62#ifdef VHDL
63    if (usage_is_set(_usage,USE_VHDL))
64      {
65        // generate the vhdl
66        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Generate the vhdl"),_name.c_str());
67       
68        vhdl();
69      }
70#endif
71
72#ifdef SYSTEMC
73    if (usage_is_set(_usage,USE_SYSTEMC))
74      {
75        // Constant
76        if (_param->_have_port_front_end_id)
77          for (uint32_t i=0; i<_param->_nb_front_end; ++i)
78            for (uint32_t j=0; j<_param->_nb_inst_decod [i]; ++j)
79              PORT_WRITE(out_RENAME_FRONT_END_ID [i][j],_param->_translate_num_front_end_to_ooo_engine_front_end_id[i]);
80       
81        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - transition"),_name.c_str());
82
83        SC_METHOD (transition);
84        dont_initialize ();
85        sensitive << (*(in_CLOCK)).pos();
86       
87# ifdef SYSTEMCASS_SPECIFIC
88        // List dependency information
89# endif   
90
91//      log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
92//      SC_METHOD (genMoore);
93//      dont_initialize ();
94//      sensitive << (*(in_CLOCK)).neg(); // need internal register
95
96// # ifdef SYSTEMCASS_SPECIFIC
97//      // List dependency information
98// # endif   
99
100        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - genMealy_branch_complete"),_name.c_str());
101        SC_METHOD (genMealy_branch_complete);
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->_front_end_nb_inst_branch_complete[i]; ++j)
106            sensitive << (*(in_BRANCH_COMPLETE_FRONT_END_ACK             [i][j]))
107                      << (*(in_BRANCH_COMPLETE_FRONT_END_MISS_PREDICTION [i][j]));
108
109        for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
110          for (uint32_t j=0; j<_param->_ooo_engine_nb_inst_branch_complete[i]; ++j)
111            {
112              sensitive << (*(in_BRANCH_COMPLETE_OOO_ENGINE_VAL            [i][j]))
113                        << (*(in_BRANCH_COMPLETE_OOO_ENGINE_ADDRESS        [i][j]))
114                        << (*(in_BRANCH_COMPLETE_OOO_ENGINE_NO_SEQUENCE    [i][j]));
115              if (_param->_have_port_front_end_id)
116              sensitive << (*(in_BRANCH_COMPLETE_OOO_ENGINE_FRONT_END_ID   [i][j]));
117              if (_param->_have_port_context_id)
118              sensitive << (*(in_BRANCH_COMPLETE_OOO_ENGINE_CONTEXT_ID     [i][j]));
119              if (_param->_have_port_depth)
120              sensitive << (*(in_BRANCH_COMPLETE_OOO_ENGINE_DEPTH          [i][j]));
121            }   
122
123
124# ifdef SYSTEMCASS_SPECIFIC
125        // List dependency information
126# endif   
127
128        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - genMealy_commit_event"),_name.c_str());
129        SC_METHOD (genMealy_commit_event);
130        dont_initialize ();
131//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
132        for (uint32_t i=0; i<_param->_nb_front_end; ++i)
133          sensitive << (*(in_COMMIT_EVENT_FRONT_END_ACK               [i]));
134        for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
135          {
136            sensitive << (*(in_COMMIT_EVENT_OOO_ENGINE_VAL              [i]))
137                      << (*(in_COMMIT_EVENT_OOO_ENGINE_TYPE             [i]))
138                      << (*(in_COMMIT_EVENT_OOO_ENGINE_IS_DELAY_SLOT    [i]))
139                      << (*(in_COMMIT_EVENT_OOO_ENGINE_ADDRESS          [i]))
140                      << (*(in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR_VAL [i]))
141                      << (*(in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR     [i]))
142                      << (*(in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL [i]))
143                      << (*(in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR     [i]));
144            if (_param->_have_port_front_end_id)
145            sensitive << (*(in_COMMIT_EVENT_OOO_ENGINE_FRONT_END_ID     [i]));
146            if (_param->_have_port_context_id)
147            sensitive << (*(in_COMMIT_EVENT_OOO_ENGINE_CONTEXT_ID       [i]));
148            if (_param->_have_port_depth)
149            sensitive << (*(in_COMMIT_EVENT_OOO_ENGINE_DEPTH            [i]));
150          }
151
152# ifdef SYSTEMCASS_SPECIFIC
153        // List dependency information
154# endif   
155
156        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - genMealy_issue"),_name.c_str());
157        SC_METHOD (genMealy_issue);
158        dont_initialize ();
159//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
160
161        for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
162          for (uint32_t j=0; j<_param->_nb_inst_issue_queue [i]; ++j)
163            {
164              sensitive << (*(in_ISSUE_OOO_ENGINE_VAL                   [i][j]))
165                        << (*(in_ISSUE_OOO_ENGINE_TYPE                  [i][j]))
166                        << (*(in_ISSUE_OOO_ENGINE_OPERATION             [i][j]))
167                        << (*(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [i][j]))
168                        << (*(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          [i][j]))
169                        << (*(in_ISSUE_OOO_ENGINE_IMMEDIAT              [i][j]))
170                        << (*(in_ISSUE_OOO_ENGINE_READ_RA               [i][j]))
171                        << (*(in_ISSUE_OOO_ENGINE_NUM_REG_RA            [i][j]))
172                        << (*(in_ISSUE_OOO_ENGINE_READ_RB               [i][j]))
173                        << (*(in_ISSUE_OOO_ENGINE_NUM_REG_RB            [i][j]))
174                        << (*(in_ISSUE_OOO_ENGINE_READ_RC               [i][j]))
175                        << (*(in_ISSUE_OOO_ENGINE_NUM_REG_RC            [i][j]))
176                        << (*(in_ISSUE_OOO_ENGINE_WRITE_RD              [i][j]))
177                        << (*(in_ISSUE_OOO_ENGINE_NUM_REG_RD            [i][j]))
178                        << (*(in_ISSUE_OOO_ENGINE_WRITE_RE              [i][j]))
179                        << (*(in_ISSUE_OOO_ENGINE_NUM_REG_RE            [i][j]));
180              if (_param->_have_port_front_end_id)
181              sensitive << (*(in_ISSUE_OOO_ENGINE_FRONT_END_ID          [i][j]));
182              if (_param->_have_port_context_id)
183              sensitive << (*(in_ISSUE_OOO_ENGINE_CONTEXT_ID            [i][j]));
184              if (_param->_have_port_rob_ptr)
185              sensitive << (*(in_ISSUE_OOO_ENGINE_PACKET_ID             [i][j]));
186              if (_param->_have_port_load_queue_ptr)
187              sensitive << (*(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  [i][j]));
188            }
189
190        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
191          for (uint32_t j=0; j<_param->_nb_read_unit [i]; ++j)
192            sensitive << (*(in_ISSUE_EXECUTE_LOOP_ACK [i][j]));
193
194# ifdef SYSTEMCASS_SPECIFIC
195        // List dependency information
196# endif   
197
198        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - genMealy_execute"),_name.c_str());
199        SC_METHOD (genMealy_execute);
200        dont_initialize ();
201//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
202
203        for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
204          for (uint32_t j=0; j<_param->_ooo_engine_nb_execute_loop[i]; ++j)
205            for (uint32_t k=0; k<_param->_nb_inst_execute[i][j]; ++k)
206              sensitive << (*(in_EXECUTE_OOO_ENGINE_ACK [i][j][k]));
207       
208        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
209          for (uint32_t j=0; j<_param->_nb_write_unit[i]; ++j)
210            {
211              sensitive << (*(in_EXECUTE_EXECUTE_LOOP_VAL           [i][j]))
212//                      << (*(in_EXECUTE_EXECUTE_LOOP_OPERATION     [i][j]))
213//                      << (*(in_EXECUTE_EXECUTE_LOOP_TYPE          [i][j]))
214                        << (*(in_EXECUTE_EXECUTE_LOOP_FLAGS         [i][j]))
215                        << (*(in_EXECUTE_EXECUTE_LOOP_EXCEPTION     [i][j]))
216                        << (*(in_EXECUTE_EXECUTE_LOOP_NO_SEQUENCE   [i][j]))
217                        << (*(in_EXECUTE_EXECUTE_LOOP_ADDRESS       [i][j]))
218                        << (*(in_EXECUTE_EXECUTE_LOOP_DATA          [i][j]));
219              if (_param->_have_port_context_id)
220              sensitive << (*(in_EXECUTE_EXECUTE_LOOP_CONTEXT_ID    [i][j]));
221              if (_param->_have_port_front_end_id)
222              sensitive << (*(in_EXECUTE_EXECUTE_LOOP_FRONT_END_ID  [i][j]));
223              if (_param->_have_port_ooo_engine_id)
224              sensitive << (*(in_EXECUTE_EXECUTE_LOOP_OOO_ENGINE_ID [i][j]));
225              if (_param->_have_port_rob_ptr)
226              sensitive << (*(in_EXECUTE_EXECUTE_LOOP_PACKET_ID     [i][j]));
227            }
228
229# ifdef SYSTEMCASS_SPECIFIC
230        // List dependency information
231# endif   
232
233        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - genMealy_insert"),_name.c_str());
234        SC_METHOD (genMealy_insert);
235        dont_initialize ();
236//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
237
238        for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
239          for (uint32_t j=0; j<_param->_nb_inst_insert[i]; ++j)
240            sensitive << (*(in_INSERT_OOO_ENGINE_VAL        [i][j]))
241                      << (*(in_INSERT_OOO_ENGINE_RD_USE     [i][j]))
242                      << (*(in_INSERT_OOO_ENGINE_RD_NUM_REG [i][j]))
243                      << (*(in_INSERT_OOO_ENGINE_RE_USE     [i][j]))
244                      << (*(in_INSERT_OOO_ENGINE_RE_NUM_REG [i][j]));
245        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
246          for (uint32_t j=0; j<_param->_execute_loop_nb_ooo_engine[i]; ++j)
247            for (uint32_t k=0; k<_param->_execute_loop_nb_inst_insert[i][j]; ++k)
248              sensitive << (*(in_INSERT_EXECUTE_LOOP_ACK [i][j][k]));
249
250# ifdef SYSTEMCASS_SPECIFIC
251        // List dependency information
252# endif   
253       
254#endif
255      }
256    log_end(Core_Glue,FUNCTION);
257  };
258   
259#undef  FUNCTION
260#define FUNCTION "Core_Glue::~Core_Glue"
261  Core_Glue::~Core_Glue (void)
262  {
263    log_begin(Core_Glue,FUNCTION);
264
265#ifdef STATISTICS
266    if (usage_is_set(_usage,USE_STATISTICS))
267      {
268        statistics_deallocation();
269      }
270#endif
271
272    log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Deallocation"),_name.c_str());
273    deallocation ();
274
275    log_end(Core_Glue,FUNCTION);
276  };
277
278}; // end namespace core_glue
279}; // end namespace core
280
281}; // end namespace behavioural
282}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.