source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/SelfTest/src/main.cpp

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

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

  • Property svn:keywords set to Id
File size: 18.5 KB
Line 
1/*
2 * $Id: main.cpp 128 2009-06-26 08:43:23Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Core_Glue/SelfTest/include/test.h"
9
10#define NB_PARAMS 13
11
12void usage (int argc, char * argv[])
13{
14  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
15  err (_("list_params is :\n"));
16  err (_(" * nb_front_end                                                                                     (uint32_t         )\n"));
17  err (_(" * nb_context                            [nb_front_end]                                             (uint32_t         )\n"));
18  err (_(" * nb_ooo_engine                                                                                    (uint32_t         )\n"));
19  err (_(" * nb_execute_loop                                                                                  (uint32_t         )\n"));
20  err (_(" * ooo_engine_nb_front_end               [nb_ooo_engine]                                            (uint32_t         )\n"));
21  err (_(" * ooo_engine_nb_execute_loop            [nb_ooo_engine]                                            (uint32_t         )\n"));
22  err (_(" * execute_loop_nb_ooo_engine            [nb_execute_loop]                                          (uint32_t         )\n"));
23  err (_(" * nb_inst_decod                         [nb_front_end]                                             (uint32_t         )\n"));
24  err (_(" * front_end_nb_inst_branch_complete     [nb_front_end]                                             (uint32_t         )\n"));
25  err (_(" * ooo_engine_nb_inst_branch_complete    [nb_ooo_engine]                                            (uint32_t         )\n"));
26  err (_(" * nb_inst_insert                        [nb_ooo_engine]                                            (uint32_t         )\n"));
27  err (_(" * nb_inst_reexecute                     [nb_ooo_engine]                                            (uint32_t         )\n"));
28//err (_(" * nb_inst_issue_queue                   [nb_ooo_engine]                                            (uint32_t         )\n"));
29  err (_(" * nb_inst_issue_slot                    [nb_ooo_engine]                                            (uint32_t         )\n"));
30  err (_(" * nb_inst_execute                       [nb_ooo_engine][ooo_engine_nb_execute_loop]                (uint32_t         )\n"));
31//err (_(" * issue_queue_in_order                  [nb_ooo_engine]                                            (bool             )\n"));
32  err (_(" * nb_read_unit                          [nb_execute_loop]                                          (uint32_t         )\n"));
33  err (_(" * nb_write_unit                         [nb_execute_loop]                                          (uint32_t         )\n"));
34  err (_(" * size_depth                                                                                       (uint32_t         )\n"));
35  err (_(" * size_rob_ptr                                                                                     (uint32_t         )\n"));
36  err (_(" * size_load_queue_ptr                                                                              (uint32_t         )\n"));
37  err (_(" * size_store_queue_ptr                                                                             (uint32_t         )\n"));
38  err (_(" * size_general_data                                                                                (uint32_t         )\n"));
39  err (_(" * size_special_data                                                                                (uint32_t         )\n"));
40  err (_(" * size_general_register                                                                            (uint32_t         )\n"));
41  err (_(" * size_special_register                                                                            (uint32_t         )\n"));
42  err (_(" * dispatch_priority                                                                                (Tpriority_t      )\n"));
43  err (_(" * dispatch_load_balancing                                                                          (Tload_balancing_t)\n"));
44  err (_(" * table_dispatch                        [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] (bool             )\n"));
45//   err (_(" * table_issue_type                      [execute_loop][nb_read_unit][MAX_TYPE]                      (bool             )\n"));
46//   err (_("   * TYPE_ALU    \n"));
47//   err (_("   * TYPE_SHIFT  \n"));
48//   err (_("   * TYPE_MOVE   \n"));
49//   err (_("   * TYPE_TEST   \n"));
50//   err (_("   * TYPE_MUL    \n"));
51//   err (_("   * TYPE_DIV    \n"));
52//   err (_("   * TYPE_EXTEND \n"));
53//   err (_("   * TYPE_FIND   \n"));
54//   err (_("   * TYPE_SPECIAL\n"));
55//   err (_("   * TYPE_CUSTOM \n"));
56//   err (_("   * TYPE_BRANCH \n"));
57//   err (_("   * TYPE_MEMORY \n"));
58  err (_(" * translate_ooo_engine_num_front_end    [nb_ooo_engine][ooo_engine_nb_front_end]                   (uint32_t         )\n"));
59  err (_(" * translate_ooo_engine_num_execute_loop [nb_ooo_engine][ooo_engine_nb_execute_loop]                (uint32_t         )\n"));
60  err (_(" * translate_execute_loop_num_ooo_engine [nb_execute_loop][execute_loop_nb_ooo_engine]              (uint32_t         )\n"));
61
62  exit (1);
63}
64
65#ifndef SYSTEMC
66int main    (int argc, char * argv[])
67#else
68int sc_main (int argc, char * argv[])
69#endif
70{
71  int nb_params;
72
73  nb_params =  static_cast<int> (2+NB_PARAMS);
74  if (argc < nb_params)
75    usage (argc, argv);
76
77  uint32_t x = 1;
78
79  uint32_t                nb_front_end                         ;
80  uint32_t              * nb_context                           ;//[nb_front_end]
81  uint32_t                nb_ooo_engine                        ;
82  uint32_t                nb_execute_loop                      ;
83  uint32_t              * ooo_engine_nb_front_end              ;//[nb_ooo_engine]
84  uint32_t              * ooo_engine_nb_execute_loop           ;//[nb_ooo_engine]
85  uint32_t              * execute_loop_nb_ooo_engine           ;//[nb_execute_loop]
86  uint32_t              * nb_inst_decod                        ;//[nb_front_end] -> [sum_inst_decod]
87  uint32_t              * front_end_nb_inst_branch_complete    ;//[nb_front_end]
88  uint32_t              * ooo_engine_nb_inst_branch_complete   ;//[nb_ooo_engine]
89  uint32_t              * nb_inst_insert                       ;//[nb_ooo_engine]
90  uint32_t              * nb_inst_reexecute                    ;//[nb_ooo_engine]
91  uint32_t              * nb_inst_issue_slot                   ;//[nb_ooo_engine]
92  uint32_t             ** nb_inst_execute                      ;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
93  bool                  * issue_queue_in_order                 ;//[nb_ooo_engine]
94  uint32_t              * nb_read_unit                         ;//[nb_execute_loop]
95  uint32_t              * nb_write_unit                        ;//[nb_execute_loop]
96  uint32_t                size_depth                           ;
97  uint32_t                size_rob_ptr                         ;
98  uint32_t                size_load_queue_ptr                  ;
99  uint32_t                size_store_queue_ptr                 ;
100  uint32_t                size_general_data                    ;
101  uint32_t                size_special_data                    ;
102  uint32_t                size_general_register                ;
103  uint32_t                size_special_register                ;
104  Tpriority_t             dispatch_priority                    ;
105  Tload_balancing_t       dispatch_load_balancing              ;
106  bool               **** table_dispatch                       ;//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
107  bool                *** table_issue_type                     ;//                                   [execute_loop][nb_read_unit][MAX_TYPE]
108  uint32_t             ** translate_ooo_engine_num_front_end   ;//[nb_ooo_engine][ooo_engine_nb_front_end]
109  uint32_t             ** translate_ooo_engine_num_execute_loop;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
110  uint32_t             ** translate_execute_loop_num_ooo_engine;//[nb_execute_loop][execute_loop_nb_ooo_engine]
111
112  string name = argv[x++];
113
114  SELFTEST0(nb_front_end                         ,uint32_t         ,argv,x);
115
116  nb_params =  static_cast<int> (2+NB_PARAMS+
117                                 1*nb_front_end);
118  if (argc < nb_params)
119    usage (argc, argv);
120
121  SELFTEST1(nb_context                           ,uint32_t         ,argv,x,nb_front_end);
122  SELFTEST0(nb_ooo_engine                        ,uint32_t         ,argv,x);
123  SELFTEST0(nb_execute_loop                      ,uint32_t         ,argv,x);
124
125  nb_params = static_cast<int> (2+NB_PARAMS+
126                                3*nb_front_end+
127                                6*nb_ooo_engine+
128                                3*nb_execute_loop
129                                );
130  if (argc < nb_params)
131    usage (argc, argv);
132
133  SELFTEST1(ooo_engine_nb_front_end              ,uint32_t         ,argv,x,nb_ooo_engine);
134  SELFTEST1(ooo_engine_nb_execute_loop           ,uint32_t         ,argv,x,nb_ooo_engine);
135  SELFTEST1(execute_loop_nb_ooo_engine           ,uint32_t         ,argv,x,nb_execute_loop);
136  SELFTEST1(nb_inst_decod                        ,uint32_t         ,argv,x,nb_front_end);
137  SELFTEST1(front_end_nb_inst_branch_complete    ,uint32_t         ,argv,x,nb_front_end);
138  SELFTEST1(ooo_engine_nb_inst_branch_complete   ,uint32_t         ,argv,x,nb_ooo_engine);
139  SELFTEST1(nb_inst_insert                       ,uint32_t         ,argv,x,nb_ooo_engine);
140  SELFTEST1(nb_inst_reexecute                    ,uint32_t         ,argv,x,nb_ooo_engine);
141  SELFTEST1(nb_inst_issue_slot                   ,uint32_t         ,argv,x,nb_ooo_engine);
142
143  uint32_t sum_ooo_engine_nb_front_end    = 0;
144  uint32_t sum_ooo_engine_nb_execute_loop = 0;
145  uint32_t sum_nb_inst_issue              = 0;
146
147  for (uint32_t i=0; i<nb_ooo_engine; ++i)
148    {
149      sum_ooo_engine_nb_front_end    += ooo_engine_nb_front_end    [i];
150      sum_ooo_engine_nb_execute_loop += ooo_engine_nb_execute_loop [i];
151      sum_nb_inst_issue              += nb_inst_issue_slot         [i];
152    }
153
154  nb_params = static_cast<int> (2+NB_PARAMS+
155                                3*nb_front_end+
156                                6*nb_ooo_engine+
157                                3*nb_execute_loop+
158                                1*sum_ooo_engine_nb_execute_loop
159                                );
160  if (argc < nb_params)
161    usage (argc, argv);
162
163  SELFTEST2(nb_inst_execute                      ,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
164
165  ALLOC1   (issue_queue_in_order                 ,bool                    ,nb_ooo_engine);
166  for (uint32_t i=0; i<nb_ooo_engine; ++i)
167    issue_queue_in_order [i] = true;
168
169  SELFTEST1(nb_read_unit                         ,uint32_t         ,argv,x,nb_execute_loop);
170  SELFTEST1(nb_write_unit                        ,uint32_t         ,argv,x,nb_execute_loop);
171  SELFTEST0(size_depth                           ,uint32_t         ,argv,x);
172  SELFTEST0(size_rob_ptr                         ,uint32_t         ,argv,x);
173  SELFTEST0(size_load_queue_ptr                  ,uint32_t         ,argv,x);
174  SELFTEST0(size_store_queue_ptr                 ,uint32_t         ,argv,x);
175  SELFTEST0(size_general_data                    ,uint32_t         ,argv,x);
176  SELFTEST0(size_special_data                    ,uint32_t         ,argv,x);
177  SELFTEST0(size_general_register                ,uint32_t         ,argv,x);
178  SELFTEST0(size_special_register                ,uint32_t         ,argv,x);
179
180  uint32_t sum_execute_loop_nb_ooo_engine = 0;
181  uint32_t sum_nb_read_unit               = 0;
182
183  for (uint32_t i=0; i<nb_execute_loop; ++i)
184    {
185      sum_execute_loop_nb_ooo_engine += execute_loop_nb_ooo_engine [i];
186      sum_nb_read_unit               += nb_read_unit               [i];
187    }
188
189  nb_params = static_cast<int> (2+NB_PARAMS+
190                                3*nb_front_end+
191                                6*nb_ooo_engine+
192                                3*nb_execute_loop+
193                                sum_nb_inst_issue*sum_nb_read_unit+
194                                sum_ooo_engine_nb_front_end+
195                                2*sum_ooo_engine_nb_execute_loop+
196                                sum_execute_loop_nb_ooo_engine
197                                );
198  if (argc != nb_params)
199    usage (argc, argv);
200
201  SELFTEST0(dispatch_priority                    ,Tpriority_t      ,argv,x);
202  SELFTEST0(dispatch_load_balancing              ,Tload_balancing_t,argv,x);
203
204  SELFTEST4(table_dispatch                       ,bool             ,argv,x,nb_ooo_engine,nb_inst_issue_slot[it1],nb_execute_loop,nb_read_unit[it3]);
205
206  ALLOC3   (table_issue_type                     ,bool                                                     ,nb_execute_loop,nb_read_unit[it1],MAX_TYPE);
207
208  for (uint32_t i=0; i<nb_execute_loop; ++i)
209    for (uint32_t j=0; j<nb_read_unit[i]; ++j)
210      for (uint32_t k=0; k<MAX_TYPE; ++k)
211//         table_issue_type [i][j][k] = false;
212        table_issue_type [i][j][k] = true;
213
214//   for (uint32_t i=0; i<nb_execute_loop; ++i)
215//     for (uint32_t j=0; j<nb_read_unit[i]; ++j)
216//       {
217//         table_issue_type [i][j][TYPE_ALU    ] = fromString<bool>(argv[x++]);
218//         table_issue_type [i][j][TYPE_SHIFT  ] = fromString<bool>(argv[x++]);
219//         table_issue_type [i][j][TYPE_MOVE   ] = fromString<bool>(argv[x++]);
220//         table_issue_type [i][j][TYPE_TEST   ] = fromString<bool>(argv[x++]);
221//         table_issue_type [i][j][TYPE_MUL    ] = fromString<bool>(argv[x++]);
222//         table_issue_type [i][j][TYPE_DIV    ] = fromString<bool>(argv[x++]);
223//         table_issue_type [i][j][TYPE_EXTEND ] = fromString<bool>(argv[x++]);
224//         table_issue_type [i][j][TYPE_FIND   ] = fromString<bool>(argv[x++]);
225//         table_issue_type [i][j][TYPE_SPECIAL] = fromString<bool>(argv[x++]);
226//         table_issue_type [i][j][TYPE_CUSTOM ] = fromString<bool>(argv[x++]);
227//         table_issue_type [i][j][TYPE_BRANCH ] = fromString<bool>(argv[x++]);
228//         table_issue_type [i][j][TYPE_MEMORY ] = fromString<bool>(argv[x++]);
229//       }
230
231  SELFTEST2(translate_ooo_engine_num_front_end   ,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_front_end[it1]);
232  SELFTEST2(translate_ooo_engine_num_execute_loop,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
233  SELFTEST2(translate_execute_loop_num_ooo_engine,uint32_t         ,argv,x,nb_execute_loop,execute_loop_nb_ooo_engine[it1]);
234
235  int _return = EXIT_SUCCESS;
236  try 
237    {
238      morpheo::behavioural::core::core_glue::Parameters * param = new morpheo::behavioural::core::core_glue::Parameters
239        (
240         nb_front_end                         ,
241         nb_context                           ,//[nb_front_end]
242         nb_ooo_engine                        ,
243         nb_execute_loop                      ,
244         ooo_engine_nb_front_end              ,//[nb_ooo_engine]
245         ooo_engine_nb_execute_loop           ,//[nb_ooo_engine]
246         execute_loop_nb_ooo_engine           ,//[nb_execute_loop]
247         nb_inst_decod                        ,//[nb_front_end]
248         front_end_nb_inst_branch_complete    ,//[nb_front_end]
249         ooo_engine_nb_inst_branch_complete   ,//[nb_ooo_engine]
250         nb_inst_insert                       ,//[nb_ooo_engine]
251         nb_inst_reexecute                    ,//[nb_ooo_engine]
252         nb_inst_issue_slot                   ,//[nb_ooo_engine]
253         nb_inst_issue_slot                   ,//[nb_ooo_engine]
254         nb_inst_execute                      ,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
255         issue_queue_in_order                 ,//[nb_ooo_engine]
256         nb_read_unit                         ,//[nb_execute_loop]
257         nb_write_unit                        ,//[nb_execute_loop]
258         size_depth                           ,
259         size_rob_ptr                         ,
260         size_load_queue_ptr                  ,
261         size_store_queue_ptr                 ,
262         size_general_data                    ,
263         size_special_data                    ,
264         size_general_register                ,
265         size_special_register                ,
266         dispatch_priority                    ,
267         dispatch_load_balancing              ,
268         table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
269         table_issue_type                     ,//                                   [execute_loop][nb_read_unit][MAX_TYPE]
270         translate_ooo_engine_num_front_end   ,//[nb_ooo_engine][ooo_engine_nb_front_end]
271         translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
272         translate_execute_loop_num_ooo_engine,//[nb_execute_loop][execute_loop_nb_ooo_engine]
273         true //is_toplevel
274        );
275     
276      msg(_("%s"),param->print(0).c_str());
277     
278      test (name,param);
279
280      delete param;
281    }
282  catch (morpheo::ErrorMorpheo & error)
283    {
284      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
285      _return = EXIT_FAILURE;
286    }
287 
288  try 
289    {
290      if (_return == EXIT_SUCCESS)
291        TEST_OK("Core_Glue : no error");
292      else
293        TEST_KO("Core_Glue : a lot of error");
294    }
295  catch (morpheo::ErrorMorpheo & error)
296    {
297//       msg (_("<%s> :\n%s"),name.c_str(), error.what ());
298      _return = EXIT_FAILURE;
299    }
300
301//DELETE0(size_special_register                );
302//DELETE0(size_general_register                );
303//DELETE0(size_special_data                    );
304//DELETE0(size_general_data                    );
305//DELETE0(size_store_queue_ptr                 );
306//DELETE0(size_load_queue_ptr                  );
307//DELETE0(size_rob_ptr                         );
308//DELETE0(size_depth                           );
309  DELETE1(nb_write_unit                        ,nb_execute_loop);
310  DELETE1(nb_read_unit                         ,nb_execute_loop);
311  DELETE1(issue_queue_in_order                 ,nb_ooo_engine);
312  DELETE2(nb_inst_execute                      ,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
313  DELETE1(nb_inst_issue_slot                   ,nb_ooo_engine);
314  DELETE1(nb_inst_reexecute                    ,nb_ooo_engine);
315  DELETE1(nb_inst_insert                       ,nb_ooo_engine);
316  DELETE1(ooo_engine_nb_inst_branch_complete   ,nb_ooo_engine);
317  DELETE1(front_end_nb_inst_branch_complete    ,nb_front_end);
318  DELETE1(nb_inst_decod                        ,nb_front_end);
319  DELETE1(execute_loop_nb_ooo_engine           ,nb_execute_loop);
320  DELETE1(ooo_engine_nb_execute_loop           ,nb_ooo_engine);
321  DELETE1(ooo_engine_nb_front_end              ,nb_ooo_engine);
322//DELETE0(nb_execute_loop                      );
323//DELETE0(nb_ooo_engine                        );
324  DELETE1(nb_context                           ,nb_front_end);
325//DELETE0(nb_front_end                         );
326
327  return (_return);
328}
Note: See TracBrowser for help on using the repository browser.