source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/src/main.cpp @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 19.4 KB
Line 
1/*
2 * $Id: main.cpp 88 2008-12-10 18:31:39Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/include/test.h"
9
10#define NB_PARAMS 22
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_rename_unit                                                          (uint32_t         )\n"));
19  err (_(" * nb_execute_loop                                                         (uint32_t         )\n"));
20  err (_(" * nb_inst_decod                     [nb_front_end]                        (uint32_t         )\n"));
21  err (_(" * nb_inst_insert                    [nb_rename_unit]                      (uint32_t         )\n"));
22  err (_(" * nb_inst_retire                    [nb_rename_unit]                      (uint32_t         )\n"));
23  err (_(" * nb_inst_issue                                                           (uint32_t         )\n"));
24  err (_(" * nb_inst_execute                   [nb_execute_loop]                     (uint32_t         )\n"));
25  err (_(" * nb_inst_reexecute                                                       (uint32_t         )\n"));
26  err (_(" * nb_inst_commit                                                          (uint32_t         )\n"));
27  err (_(" * nb_inst_branch_complete                                                 (uint32_t         )\n"));
28  err (_(" * nb_branch_speculated              [nb_front_end][nb_context]            (uint32_t         )\n"));
29  err (_(" * nb_rename_unit_select                                                   (uint32_t         )\n"));
30  err (_(" * nb_execute_loop_select                                                  (uint32_t         )\n"));
31  err (_(" * size_general_data                                                       (uint32_t         )\n"));
32  err (_(" * size_special_data                                                       (uint32_t         )\n"));
33  err (_(" * link_rename_unit_with_front_end   [nb_front_end]                        (uint32_t         )\n"));
34  err (_(" * size_re_order_buffer                                                    (uint32_t         )\n"));
35  err (_(" * nb_re_order_buffer_bank                                                 (uint32_t         )\n"));
36  err (_(" * commit_priority                                                         (Tpriority_t      )\n"));
37  err (_(" * commit_load_balancing                                                   (Tload_balancing_t)\n"));
38  err (_(" * size_issue_queue                                                        (uint32_t         )\n"));
39  err (_(" * nb_issue_queue_bank                                                     (uint32_t         )\n"));
40  err (_(" * issue_priority                                                          (Tpriority_t      )\n"));
41  err (_(" * issue_load_balancing                                                    (Tload_balancing_t)\n"));
42  err (_(" * table_routing                     [nb_rename_unit][nb_inst_issue]       (bool             )\n"));
43  err (_(" * table_issue_type                  [nb_inst_issue][nb_type]              (bool             )\n"));
44  err (_("   * TYPE_ALU    \n"));
45  err (_("   * TYPE_SHIFT  \n"));
46  err (_("   * TYPE_MOVE   \n"));
47  err (_("   * TYPE_TEST   \n"));
48  err (_("   * TYPE_MUL    \n"));
49  err (_("   * TYPE_DIV    \n"));
50  err (_("   * TYPE_EXTEND \n"));
51  err (_("   * TYPE_FIND   \n"));
52  err (_("   * TYPE_SPECIAL\n"));
53  err (_("   * TYPE_CUSTOM \n"));
54  err (_("   * TYPE_BRANCH \n"));
55  err (_("   * TYPE_MEMORY \n"));
56  err (_(" * size_reexecute_queue                                                    (uint32_t         )\n"));
57  err (_(" * reexecute_priority                                                      (Tpriority_t      )\n"));
58  err (_(" * reexecute_load_balancing                                                (Tload_balancing_t)\n"));
59  err (_(" * rename_select_priority            [nb_rename_unit]                      (Tpriority_t      )\n"));
60  err (_(" * rename_select_load_balancing      [nb_rename_unit]                      (Tload_balancing_t)\n"));
61  err (_(" * rename_select_nb_front_end_select [nb_rename_unit]                      (uint32_t         )\n"));
62  err (_(" * nb_general_register               [nb_rename_unit]                      (uint32_t         )\n"));
63  err (_(" * nb_special_register               [nb_rename_unit]                      (uint32_t         )\n"));
64  err (_(" * nb_reg_free                       [nb_rename_unit]                      (uint32_t         )\n"));
65  err (_(" * nb_rename_unit_bank               [nb_rename_unit]                      (uint32_t         )\n"));
66  err (_(" * size_read_counter                 [nb_rename_unit]                      (uint32_t         )\n"));
67  err (_(" * nb_load_store_queue               [nb_rename_unit]                      (uint32_t         )\n"));
68  err (_(" * size_store_queue                  [nb_rename_unit][nb_load_store_queue] (uint32_t         )\n"));
69  err (_(" * size_load_queue                   [nb_rename_unit][nb_load_store_queue] (uint32_t         )\n"));
70  err (_(" * link_load_store_unit_with_thread  [nb_front_end][nb_context]            (uint32_t         )\n"));
71
72  exit (1);
73}
74
75#ifndef SYSTEMC
76int main    (int argc, char * argv[])
77#else
78int sc_main (int argc, char * argv[])
79#endif
80{
81  if (argc <= static_cast<int>(2+NB_PARAMS))
82    usage (argc, argv);
83
84  uint32_t _sum_nb_context          = 0;
85  uint32_t _sum_nb_load_store_queue = 0;
86
87  uint32_t x = 1;
88
89  string name = argv[x++];
90
91  uint32_t              _nb_front_end                      = fromString<uint32_t         >(argv[x++]);
92
93  if (argc <= static_cast<int>(2+NB_PARAMS+3*_nb_front_end))
94    usage (argc, argv);
95
96  uint32_t            * _nb_context                        = new uint32_t [_nb_front_end];
97  for (uint32_t i=0; i<_nb_front_end; i++)
98    {
99      _nb_context [i] = fromString<uint32_t>(argv[x++]);
100      _sum_nb_context += _nb_context [i];
101    }
102  uint32_t              _nb_rename_unit                    = fromString<uint32_t         >(argv[x++]);
103  uint32_t              _nb_execute_loop                   = fromString<uint32_t         >(argv[x++]);
104  uint32_t            * _nb_inst_decod                     = new uint32_t [_nb_front_end];
105  for (uint32_t i=0; i<_nb_front_end; i++)
106    _nb_inst_decod [i] = fromString<uint32_t>(argv[x++]);
107
108  if (argc <= static_cast<int>(2+NB_PARAMS+3*_nb_front_end+2*_sum_nb_context+12*_nb_rename_unit+_nb_execute_loop))
109    usage (argc, argv);
110
111  uint32_t            * _nb_inst_insert                    = new uint32_t [_nb_rename_unit];
112  uint32_t            * _nb_inst_retire                    = new uint32_t [_nb_rename_unit];
113  for (uint32_t i=0; i<_nb_rename_unit; i++)
114    _nb_inst_insert [i] = fromString<uint32_t>(argv[x++]);
115  for (uint32_t i=0; i<_nb_rename_unit; i++)
116    _nb_inst_retire [i] = fromString<uint32_t>(argv[x++]);
117
118  uint32_t              _nb_inst_issue                     = fromString<uint32_t         >(argv[x++]);
119  uint32_t            * _nb_inst_execute                   = new uint32_t [_nb_execute_loop];
120  for (uint32_t i=0; i<_nb_execute_loop; i++)
121    _nb_inst_execute [i] = fromString<uint32_t>(argv[x++]);
122  uint32_t              _nb_inst_reexecute                 = fromString<uint32_t         >(argv[x++]);
123  uint32_t              _nb_inst_commit                    = fromString<uint32_t         >(argv[x++]);
124  uint32_t              _nb_inst_branch_complete           = fromString<uint32_t         >(argv[x++]);
125  uint32_t           ** _nb_branch_speculated              = new uint32_t * [_nb_front_end];
126  for (uint32_t i=0; i<_nb_front_end; i++)
127    {
128      _nb_branch_speculated [i] = new uint32_t [_nb_context[i]];
129      for (uint32_t j=0; j<_nb_context[i]; j++)
130        _nb_branch_speculated [i][j] = fromString<uint32_t>(argv[x++]);
131    }
132  uint32_t              _nb_rename_unit_select             = fromString<uint32_t         >(argv[x++]);
133  uint32_t              _nb_execute_loop_select            = fromString<uint32_t         >(argv[x++]);
134  uint32_t              _size_general_data                 = fromString<uint32_t         >(argv[x++]);
135  uint32_t              _size_special_data                 = fromString<uint32_t         >(argv[x++]);
136  uint32_t            * _link_rename_unit_with_front_end   = new uint32_t [_nb_front_end];
137  for (uint32_t i=0; i<_nb_front_end; i++)
138    _link_rename_unit_with_front_end [i] = fromString<uint32_t>(argv[x++]);
139  uint32_t              _size_re_order_buffer              = fromString<uint32_t         >(argv[x++]);
140  uint32_t              _nb_re_order_buffer_bank           = fromString<uint32_t         >(argv[x++]);
141  Tpriority_t           _commit_priority                   = fromString<Tpriority_t      >(argv[x++]);
142  Tload_balancing_t     _commit_load_balancing             = fromString<Tload_balancing_t>(argv[x++]);
143  uint32_t              _size_issue_queue                  = fromString<uint32_t         >(argv[x++]);
144  uint32_t              _nb_issue_queue_bank               = fromString<uint32_t         >(argv[x++]);
145  Tpriority_t           _issue_priority                    = fromString<Tpriority_t      >(argv[x++]);
146  Tload_balancing_t     _issue_load_balancing              = fromString<Tload_balancing_t>(argv[x++]);
147  bool               ** _table_routing                     = new bool * [_nb_rename_unit];
148  for (uint32_t i=0; i<_nb_rename_unit; i++)
149    {
150      _table_routing [i] = new bool [_nb_inst_issue];
151      for (uint32_t j=0; j<_nb_inst_issue; j++)
152        _table_routing [i][j] = fromString<bool>(argv[x++]);
153    }
154
155  if (argc <= static_cast<int>(2+NB_PARAMS+3*_nb_front_end+2*_sum_nb_context+11*_nb_rename_unit+_nb_execute_loop+_nb_rename_unit*_nb_inst_issue+12*_nb_inst_issue))
156    usage (argc, argv);
157 
158  bool               ** _table_issue_type                  = new bool * [_nb_inst_issue];
159  for (uint32_t i=0; i<_nb_inst_issue; i++)   
160    {
161      _table_issue_type [i] = new bool [MAX_TYPE];
162      for (uint32_t j=0; j<MAX_TYPE; j++)
163        _table_issue_type [i][j] = false;
164
165      _table_issue_type [i][TYPE_ALU    ] = fromString<bool>(argv[x++]);
166      _table_issue_type [i][TYPE_SHIFT  ] = fromString<bool>(argv[x++]);
167      _table_issue_type [i][TYPE_MOVE   ] = fromString<bool>(argv[x++]);
168      _table_issue_type [i][TYPE_TEST   ] = fromString<bool>(argv[x++]);
169      _table_issue_type [i][TYPE_MUL    ] = fromString<bool>(argv[x++]);
170      _table_issue_type [i][TYPE_DIV    ] = fromString<bool>(argv[x++]);
171      _table_issue_type [i][TYPE_EXTEND ] = fromString<bool>(argv[x++]);
172      _table_issue_type [i][TYPE_FIND   ] = fromString<bool>(argv[x++]);
173      _table_issue_type [i][TYPE_SPECIAL] = fromString<bool>(argv[x++]);
174      _table_issue_type [i][TYPE_CUSTOM ] = fromString<bool>(argv[x++]);
175      _table_issue_type [i][TYPE_BRANCH ] = fromString<bool>(argv[x++]);
176      _table_issue_type [i][TYPE_MEMORY ] = fromString<bool>(argv[x++]);
177    }
178 
179  uint32_t              _size_reexecute_queue              = fromString<uint32_t         >(argv[x++]);
180  Tpriority_t           _reexecute_priority                = fromString<Tpriority_t      >(argv[x++]);
181  Tload_balancing_t     _reexecute_load_balancing          = fromString<Tload_balancing_t>(argv[x++]);
182
183  Tpriority_t         * _rename_select_priority            = new Tpriority_t       [_nb_rename_unit];
184  Tload_balancing_t   * _rename_select_load_balancing      = new Tload_balancing_t [_nb_rename_unit];
185  uint32_t            * _rename_select_nb_front_end_select = new uint32_t          [_nb_rename_unit];
186  uint32_t            * _nb_general_register               = new uint32_t          [_nb_rename_unit];
187  uint32_t            * _nb_special_register               = new uint32_t          [_nb_rename_unit];
188  uint32_t            * _nb_reg_free                       = new uint32_t          [_nb_rename_unit];
189  uint32_t            * _nb_rename_unit_bank               = new uint32_t          [_nb_rename_unit];
190  uint32_t            * _size_read_counter                 = new uint32_t          [_nb_rename_unit];
191  uint32_t            * _nb_load_store_queue               = new uint32_t          [_nb_rename_unit];
192
193  for (uint32_t i=0; i<_nb_rename_unit; i++)
194    _rename_select_priority            [i] = fromString<Tpriority_t      >(argv[x++]);
195  for (uint32_t i=0; i<_nb_rename_unit; i++)
196    _rename_select_load_balancing      [i] = fromString<Tload_balancing_t>(argv[x++]);
197  for (uint32_t i=0; i<_nb_rename_unit; i++)
198    _rename_select_nb_front_end_select [i] = fromString<uint32_t         >(argv[x++]);
199  for (uint32_t i=0; i<_nb_rename_unit; i++)
200    _nb_general_register               [i] = fromString<uint32_t         >(argv[x++]);
201  for (uint32_t i=0; i<_nb_rename_unit; i++)
202    _nb_special_register               [i] = fromString<uint32_t         >(argv[x++]);
203  for (uint32_t i=0; i<_nb_rename_unit; i++)
204    _nb_reg_free                       [i] = fromString<uint32_t         >(argv[x++]);
205  for (uint32_t i=0; i<_nb_rename_unit; i++)
206    _nb_rename_unit_bank               [i] = fromString<uint32_t         >(argv[x++]);
207  for (uint32_t i=0; i<_nb_rename_unit; i++)
208    _size_read_counter                 [i] = fromString<uint32_t         >(argv[x++]);
209  for (uint32_t i=0; i<_nb_rename_unit; i++)
210    {
211    _nb_load_store_queue               [i] = fromString<uint32_t         >(argv[x++]);
212    _sum_nb_load_store_queue += _nb_load_store_queue [i];
213    }
214
215  if (argc != static_cast<int>(2+NB_PARAMS+3*_nb_front_end+2*_sum_nb_context+11*_nb_rename_unit+_nb_execute_loop+_nb_rename_unit*_nb_inst_issue+12*_nb_inst_issue+2*_sum_nb_load_store_queue))
216    usage (argc, argv);
217
218
219  uint32_t           ** _size_store_queue                  = new uint32_t * [_nb_rename_unit];
220  for (uint32_t i=0; i<_nb_rename_unit; i++)
221    {
222      _size_store_queue [i] = new uint32_t [_nb_load_store_queue[i]];
223      for (uint32_t j=0; j<_nb_load_store_queue[i]; j++)
224        _size_store_queue [i][j] = fromString<uint32_t>(argv[x++]);
225    }
226
227  uint32_t           ** _size_load_queue                  = new uint32_t * [_nb_rename_unit];
228  for (uint32_t i=0; i<_nb_rename_unit; i++)
229    {
230      _size_load_queue [i] = new uint32_t [_nb_load_store_queue[i]];
231      for (uint32_t j=0; j<_nb_load_store_queue[i]; j++)
232        _size_load_queue [i][j] = fromString<uint32_t>(argv[x++]);
233    }
234
235  uint32_t           ** _link_load_store_unit_with_thread  = new uint32_t * [_nb_front_end];
236  for (uint32_t i=0; i<_nb_front_end; i++)
237    {
238      _link_load_store_unit_with_thread [i] = new uint32_t [_nb_context[i]];
239      for (uint32_t j=0; j<_nb_context[i]; j++)
240        _link_load_store_unit_with_thread [i][j] = fromString<uint32_t>(argv[x++]);
241    }
242
243  bool     *** _implement_group       = new bool ** [_nb_front_end];
244  for (uint32_t i=0; i<_nb_front_end; i++)
245    {
246      _implement_group [i] = new bool * [_nb_context[i]];
247      for (uint32_t j=0; j<_nb_context[i]; j++)
248        {
249          _implement_group [i][j] = new bool [NB_GROUP];
250
251          for (uint32_t k=0; k<NB_GROUP; k++)
252            _implement_group [i][j][k] = false;
253
254          _implement_group [i][j][GROUP_SYSTEM_AND_CONTROL] = true;
255          _implement_group [i][j][GROUP_DCACHE            ] = true;
256        }
257    }
258
259  int _return = EXIT_SUCCESS;
260  try 
261    {
262      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::Parameters * param = new morpheo::behavioural::core::multi_ooo_engine::ooo_engine::Parameters
263        (
264         _nb_front_end                     ,
265         _nb_context                       ,
266         _nb_rename_unit                   ,
267         _nb_execute_loop                  ,
268         _nb_inst_decod                    ,
269         _nb_inst_insert                   ,
270         _nb_inst_retire                   ,
271         _nb_inst_issue                    ,
272         _nb_inst_execute                  ,
273         _nb_inst_reexecute                ,
274         _nb_inst_commit                   ,
275         _nb_inst_branch_complete          ,
276         _nb_branch_speculated             ,
277         _nb_rename_unit_select            ,
278         _nb_execute_loop_select           ,
279         _size_general_data                ,
280         _size_special_data                ,
281         _link_rename_unit_with_front_end  ,
282         _size_re_order_buffer             ,
283         _nb_re_order_buffer_bank          ,
284         _commit_priority                  ,
285         _commit_load_balancing            ,
286         _size_issue_queue                 ,
287         _nb_issue_queue_bank              ,
288         _issue_priority                   ,
289         _issue_load_balancing             ,
290         _table_routing                    ,
291         _table_issue_type                 ,
292         _size_reexecute_queue             ,
293         _reexecute_priority               ,
294         _reexecute_load_balancing         ,
295         _rename_select_priority           ,
296         _rename_select_load_balancing     ,
297         _rename_select_nb_front_end_select,
298         _nb_general_register              ,
299         _nb_special_register              ,
300         _nb_reg_free                      ,
301         _nb_rename_unit_bank              ,
302         _size_read_counter                ,
303         _nb_load_store_queue              ,
304         _size_store_queue                 ,
305         _size_load_queue                  ,
306         _link_load_store_unit_with_thread ,
307         _implement_group                  ,
308         true //is_toplevel
309         );
310     
311      msg(_("%s"),param->print(0).c_str());
312     
313      test (name,param);
314
315      delete param;
316    }
317  catch (morpheo::ErrorMorpheo & error)
318    {
319      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
320      _return = EXIT_FAILURE;
321    }
322
323  try 
324    {
325      if (_return == EXIT_SUCCESS)
326        TEST_OK("OOO_Engine : no error");
327      else
328        TEST_KO("OOO_Engine : a lot of error");
329    }
330  catch (morpheo::ErrorMorpheo & error)
331    {
332//       msg (_("<%s> :\n%s"),name.c_str(), error.what ());
333      _return = EXIT_FAILURE;
334    }
335
336  for (uint32_t i=0; i<_nb_front_end; i++)
337    {
338      for (uint32_t j=0; j<_nb_context[i]; j++)
339        delete [] _implement_group [i][j];
340      delete [] _implement_group [i];
341    }
342  delete [] _implement_group;
343
344  for (uint32_t i=0; i<_nb_front_end; i++)
345    delete [] _link_load_store_unit_with_thread [i];
346  delete [] _link_load_store_unit_with_thread;
347
348  for (uint32_t i=0; i<_nb_rename_unit; i++)
349    delete [] _size_load_queue [i];
350  delete [] _size_load_queue;
351
352  for (uint32_t i=0; i<_nb_rename_unit; i++)
353    delete []_size_store_queue [i];
354  delete []_size_store_queue;
355
356  delete [] _nb_load_store_queue               ;
357  delete [] _size_read_counter                 ;
358  delete [] _nb_rename_unit_bank               ;
359  delete [] _nb_reg_free                       ;
360  delete [] _nb_special_register               ;
361  delete [] _nb_general_register               ;
362  delete [] _rename_select_nb_front_end_select ;
363  delete [] _rename_select_load_balancing      ;
364  delete [] _rename_select_priority            ;
365
366  for (uint32_t i=0; i<_nb_inst_issue; i++)   
367    delete [] _table_issue_type [i];
368  delete [] _table_issue_type; 
369
370  for (uint32_t i=0; i<_nb_rename_unit; i++)
371    delete [] _table_routing [i];
372  delete [] _table_routing;
373
374  delete [] _link_rename_unit_with_front_end;
375
376  for (uint32_t i=0; i<_nb_front_end; i++)
377    delete [] _nb_branch_speculated [i];
378  delete [] _nb_branch_speculated;
379 
380  delete [] _nb_inst_execute;
381  delete [] _nb_inst_retire ;
382  delete [] _nb_inst_insert ;
383  delete [] _nb_inst_decod  ;
384  delete [] _nb_context     ;
385
386  return (_return);
387}
Note: See TracBrowser for help on using the repository browser.