source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/SelfTest/src/main.cpp @ 128

Last change on this file since 128 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: 13.2 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/Multi_Front_end/Front_end/SelfTest/include/test.h"
9#include "Behavioural/Custom/include/Custom_example.h"
10
11#define NB_PARAMS 13+7*3
12
13void usage (int argc, char * argv[])
14{
15  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
16  err (_("list_params is :\n"));
17  err (_(" * nb_context                                                 (uint32_t             )\n"));
18  err (_(" * nb_decod_unit                                              (uint32_t             )\n"));
19  err (_(" * size_general_data                                          (uint32_t             )\n"));
20  err (_(" * size_ifetch_queue             [nb_context]                 (uint32_t             )\n"));
21  err (_(" * nb_inst_fetch                 [nb_context]                 (uint32_t             )\n"));
22  err (_(" * link_context_to_decod_unit    [nb_context]                 (uint32_t             )\n"));
23  err (_(" * size_decod_queue              [nb_decod_unit]              (uint32_t             )\n"));
24  err (_(" * decod_queue_scheme            [nb_decod_unit]              (Tdecod_queue_scheme_t)\n"));
25  err (_(" * nb_inst_decod                 [nb_decod_unit]              (uint32_t             )\n"));
26  err (_(" * nb_context_select             [nb_decod_unit]              (uint32_t             )\n"));
27  err (_(" * context_select_priority       [nb_decod_unit]              (Tpriority_t          )\n"));
28  err (_(" * context_select_load_balancing [nb_decod_unit]              (Tload_balancing_t    )\n"));
29  err (_(" * nb_inst_branch_predict                                     (uint32_t             )\n"));
30  err (_(" * nb_inst_branch_decod                                       (uint32_t             )\n"));
31  err (_(" * nb_inst_branch_update                                      (uint32_t             )\n"));
32  err (_(" * nb_inst_branch_complete                                    (uint32_t             )\n"));
33  err (_(" * btb_size_queue                                             (uint32_t             )\n"));
34  err (_(" * btb_associativity                                          (uint32_t             )\n"));
35  err (_(" * btb_size_counter                                           (uint32_t             )\n"));
36  err (_(" * btb_victim_scheme                                          (Tvictim_t            )\n"));
37  err (_(" * dir_predictor_scheme                                       (Tpredictor_t         )\n"));
38  err (_(" * dir_have_bht                  [3]                          (bool                 )\n"));
39  err (_(" * dir_bht_size_shifter          [3]                          (uint32_t             )\n"));
40  err (_(" * dir_bht_nb_shifter            [3]                          (uint32_t             )\n"));
41  err (_(" * dir_have_pht                  [3]                          (bool                 )\n"));
42  err (_(" * dir_pht_size_counter          [3]                          (uint32_t             )\n"));
43  err (_(" * dir_pht_nb_counter            [3]                          (uint32_t             )\n"));
44  err (_(" * dir_pht_size_address_share    [3]                          (uint32_t             )\n"));
45  err (_(" * ras_size_queue                [nb_context]                 (uint32_t             )\n"));
46  err (_(" * upt_size_queue                [nb_context]                 (uint32_t             )\n"));
47  err (_(" * ufpt_size_queue               [nb_context]                 (uint32_t             )\n"));
48  err (_(" * size_inst_commit                                           (uint32_t             )\n"));
49
50  exit (1);
51}
52
53#ifndef SYSTEMC
54int main    (int argc, char * argv[])
55#else
56int sc_main (int argc, char * argv[])
57#endif
58{
59  for (int32_t i=0; i<argc; ++i)
60    msg("%s ",argv[i]);
61  msg("\n");
62
63  if (argc <= static_cast<int>(2+NB_PARAMS))
64    usage (argc, argv);
65 
66  uint32_t x = 1;
67
68  string name = argv[x++];
69 
70  uint32_t             _nb_context                        = fromString<uint32_t         >(argv[x++]);
71  uint32_t             _nb_decod_unit                     = fromString<uint32_t         >(argv[x++]);
72
73  if (argc != static_cast<int>(2+NB_PARAMS+6*_nb_context+6*_nb_decod_unit))
74    {
75      msg("argc                : %d\n",argc);
76      msg("all                 : %d\n",(2+NB_PARAMS+6*_nb_context+5*_nb_decod_unit));
77      msg("_nb_context         : %d\n",_nb_context);
78      msg("_nb_decod_unit      : %d\n",_nb_decod_unit);
79      usage (argc, argv);
80    }
81
82  uint32_t             _size_general_data                 = fromString<uint32_t         >(argv[x++]);
83  uint32_t           * _size_ifetch_queue                 = new uint32_t [_nb_context];
84  for (uint32_t i=0; i<_nb_context; ++i)
85    _size_ifetch_queue [i] = fromString<uint32_t>(argv[x++]);
86
87  uint32_t           * _nb_inst_fetch                     = new uint32_t [_nb_context];
88  for (uint32_t i=0; i<_nb_context; ++i)
89    _nb_inst_fetch [i] = fromString<uint32_t>(argv[x++]);
90
91  bool              ** _instruction_implemeted            = new bool * [_nb_context];
92  for (uint32_t i=0; i<_nb_context; ++i)
93    {
94      _instruction_implemeted [i] = new bool [NB_INSTRUCTION];
95      for (uint32_t j=0; j<NB_INSTRUCTION; ++j)
96        _instruction_implemeted [i][j] = true; //fromString<bool>(argv[x++]);
97    }
98
99  uint32_t           * _link_context_to_decod_unit        = new uint32_t [_nb_context];
100  for (uint32_t i=0; i<_nb_context; ++i)
101    _link_context_to_decod_unit [i] = fromString<uint32_t>(argv[x++]);
102
103  uint32_t           * _size_decod_queue                  = new uint32_t [_nb_decod_unit];
104  for (uint32_t i=0; i<_nb_decod_unit; ++i)
105    _size_decod_queue [i] = fromString<uint32_t>(argv[x++]);
106
107  decod_unit::decod_queue::Tdecod_queue_scheme_t * _decod_queue_scheme = new decod_unit::decod_queue::Tdecod_queue_scheme_t [_nb_decod_unit];
108  for (uint32_t i=0; i<_nb_decod_unit; ++i)
109    _decod_queue_scheme [i] = fromString<decod_unit::decod_queue::Tdecod_queue_scheme_t>(argv[x++]);
110
111  uint32_t           * _nb_inst_decod                     = new uint32_t [_nb_decod_unit];
112  for (uint32_t i=0; i<_nb_decod_unit; ++i)
113    _nb_inst_decod [i] = fromString<uint32_t>(argv[x++]);
114
115  uint32_t           * _nb_context_select                 = new uint32_t [_nb_decod_unit];
116  for (uint32_t i=0; i<_nb_decod_unit; ++i)
117    _nb_context_select [i] = fromString<uint32_t>(argv[x++]);
118
119  Tpriority_t        * _context_select_priority           = new Tpriority_t [_nb_decod_unit];
120  for (uint32_t i=0; i<_nb_decod_unit; ++i)
121    _context_select_priority [i] = fromString<Tpriority_t>(argv[x++]);
122
123  Tload_balancing_t  * _context_select_load_balancing     = new Tload_balancing_t [_nb_decod_unit];
124  for (uint32_t i=0; i<_nb_decod_unit; ++i)
125    _context_select_load_balancing [i] = fromString<Tload_balancing_t>(argv[x++]);
126
127  uint32_t             _nb_inst_branch_predict            = fromString<uint32_t         >(argv[x++]);
128  uint32_t             _nb_inst_branch_decod              = fromString<uint32_t         >(argv[x++]);
129  uint32_t             _nb_inst_branch_update             = fromString<uint32_t         >(argv[x++]);
130  uint32_t             _nb_inst_branch_complete           = fromString<uint32_t         >(argv[x++]);
131  uint32_t             _btb_size_queue                    = fromString<uint32_t         >(argv[x++]);
132  uint32_t             _btb_associativity                 = fromString<uint32_t         >(argv[x++]);
133  uint32_t             _btb_size_counter                  = fromString<uint32_t         >(argv[x++]);
134  Tvictim_t            _btb_victim_scheme                 = fromString<Tvictim_t        >(argv[x++]);
135  Tpredictor_t         _dir_predictor_scheme              = fromString<Tpredictor_t     >(argv[x++]);
136  bool               * _dir_have_bht                      = new bool    [3];
137  uint32_t           * _dir_bht_size_shifter              = new uint32_t[3];
138  uint32_t           * _dir_bht_nb_shifter                = new uint32_t[3];
139  bool               * _dir_have_pht                      = new bool    [3];
140  uint32_t           * _dir_pht_size_counter              = new uint32_t[3];
141  uint32_t           * _dir_pht_nb_counter                = new uint32_t[3];
142  uint32_t           * _dir_pht_size_address_share        = new uint32_t[3];
143
144  for (uint32_t i=0; i<3; i++)
145    _dir_have_bht               [i] = fromString<bool    >(argv[x++]);
146  for (uint32_t i=0; i<3; i++)
147    _dir_bht_size_shifter       [i] = fromString<uint32_t>(argv[x++]);
148  for (uint32_t i=0; i<3; i++)
149    _dir_bht_nb_shifter         [i] = fromString<uint32_t>(argv[x++]);
150  for (uint32_t i=0; i<3; i++)
151    _dir_have_pht               [i] = fromString<bool    >(argv[x++]);
152  for (uint32_t i=0; i<3; i++)
153    _dir_pht_size_counter       [i] = fromString<uint32_t>(argv[x++]);
154  for (uint32_t i=0; i<3; i++)
155    _dir_pht_nb_counter         [i] = fromString<uint32_t>(argv[x++]);
156  for (uint32_t i=0; i<3; i++)
157    _dir_pht_size_address_share [i] = fromString<uint32_t>(argv[x++]);
158
159  uint32_t           * _ras_size_queue                    = new uint32_t [_nb_context];
160  for (uint32_t i=0; i<_nb_context; ++i)
161    _ras_size_queue [i] = fromString<uint32_t>(argv[x++]);
162
163  uint32_t           * _upt_size_queue                    = new uint32_t [_nb_context];
164  for (uint32_t i=0; i<_nb_context; ++i)
165    _upt_size_queue [i] = fromString<uint32_t>(argv[x++]);
166
167  uint32_t           * _ufpt_size_queue                   = new uint32_t [_nb_context];
168  for (uint32_t i=0; i<_nb_context; ++i)
169    _ufpt_size_queue [i] = fromString<uint32_t>(argv[x++]);
170
171  uint32_t             _size_inst_commit                  = fromString<uint32_t>(argv[x++]);
172
173  uint32_t             _nb_thread = _nb_context;
174  uint32_t           * _translate_num_context_to_num_thread = new uint32_t [_nb_context];
175  for (uint32_t i=0; i<_nb_context; ++i)
176    _translate_num_context_to_num_thread [i] = i;
177
178  int _return = EXIT_SUCCESS;
179  try 
180    {
181      morpheo::behavioural::core::multi_front_end::front_end::Parameters * param = new morpheo::behavioural::core::multi_front_end::front_end::Parameters
182        (
183         _nb_context                          ,
184         _nb_decod_unit                       ,
185         _size_general_data                   ,
186         &(morpheo::behavioural::custom::example_get_custom_information),
187         _size_ifetch_queue                   ,
188         _nb_inst_fetch                       ,
189         _instruction_implemeted              ,
190         _link_context_to_decod_unit          ,
191         _size_decod_queue                    ,
192         _decod_queue_scheme                  ,
193         _nb_inst_decod                       ,
194         _nb_context_select                   ,
195         _context_select_priority             ,
196         _context_select_load_balancing       ,
197         _nb_inst_branch_predict              ,
198         _nb_inst_branch_decod                ,
199         _nb_inst_branch_update               ,
200         _nb_inst_branch_complete             ,
201         _btb_size_queue                      ,
202         _btb_associativity                   ,
203         _btb_size_counter                    ,
204         _btb_victim_scheme                   ,
205         _dir_predictor_scheme                ,
206         _dir_have_bht                        ,
207         _dir_bht_size_shifter                ,
208         _dir_bht_nb_shifter                  ,
209         _dir_have_pht                        ,
210         _dir_pht_size_counter                ,
211         _dir_pht_nb_counter                  ,
212         _dir_pht_size_address_share          ,
213         _ras_size_queue                      ,
214         _upt_size_queue                      ,
215         _ufpt_size_queue                     ,
216         _size_inst_commit                    ,
217         _nb_thread                           ,
218         _translate_num_context_to_num_thread ,
219         true // is_toplevel
220         );
221     
222      msg(_("%s"),param->print(0).c_str());
223     
224      test (name,param);
225
226      delete param;
227    }
228  catch (morpheo::ErrorMorpheo & error)
229    {
230      msg (_("%s\n"),error.what());
231      _return = EXIT_FAILURE;
232    }
233
234  try 
235    {
236      if (_return == EXIT_SUCCESS)
237        TEST_OK("Front_end : no error");
238      else
239        TEST_KO("Front_end : a lot of error");
240    }
241  catch (morpheo::ErrorMorpheo & error)
242    {
243//       msg (_("<%s> :\n%s"),name.c_str(), error.what ());
244      _return = EXIT_FAILURE;
245    }
246
247  delete [] _translate_num_context_to_num_thread ;
248  delete [] _dir_have_bht                        ;
249  delete [] _dir_bht_size_shifter                ;
250  delete [] _dir_bht_nb_shifter                  ;
251  delete [] _dir_have_pht                        ;
252  delete [] _dir_pht_size_counter                ;
253  delete [] _dir_pht_nb_counter                  ;
254  delete [] _dir_pht_size_address_share          ;
255  delete [] _ufpt_size_queue                   ;
256  delete [] _upt_size_queue                    ;
257  delete [] _ras_size_queue                    ;
258  delete [] _context_select_load_balancing     ;
259  delete [] _context_select_priority           ;
260  delete [] _nb_context_select                 ;
261  delete [] _nb_inst_decod                     ;
262  delete [] _decod_queue_scheme                ;
263  delete [] _size_decod_queue                  ;
264  delete [] _link_context_to_decod_unit        ;
265  for (uint32_t i=0; i<_nb_context; ++i)
266    delete [] _instruction_implemeted [i];
267  delete [] _instruction_implemeted            ;
268  delete [] _nb_inst_fetch                     ;
269  delete [] _size_ifetch_queue                 ;
270
271  return (_return);
272}
Note: See TracBrowser for help on using the repository browser.