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