source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/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: 14.8 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/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                         [nb_ooo_engine]                                            (uint32_t         )\n"));
28  err (_(" * nb_inst_execute                       [nb_ooo_engine][ooo_engine_nb_execute_loop]                (uint32_t         )\n"));
29  err (_(" * nb_read_unit                          [nb_execute_loop]                                          (uint32_t         )\n"));
30  err (_(" * nb_write_unit                         [nb_execute_loop]                                          (uint32_t         )\n"));
31  err (_(" * size_depth                                                                                       (uint32_t         )\n"));
32  err (_(" * size_rob_ptr                                                                                     (uint32_t         )\n"));
33  err (_(" * size_load_queue_ptr                                                                              (uint32_t         )\n"));
34  err (_(" * size_store_queue_ptr                                                                             (uint32_t         )\n"));
35  err (_(" * size_general_data                                                                                (uint32_t         )\n"));
36  err (_(" * size_special_data                                                                                (uint32_t         )\n"));
37  err (_(" * size_general_register                                                                            (uint32_t         )\n"));
38  err (_(" * size_special_register                                                                            (uint32_t         )\n"));
39  err (_(" * dispatch_priority                                                                                (Tpriority_t      )\n"));
40  err (_(" * dispatch_load_balancing                                                                          (Tload_balancing_t)\n"));
41  err (_(" * table_dispatch                        [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] (bool             )\n"));
42  err (_(" * translate_ooo_engine_num_front_end    [nb_ooo_engine][ooo_engine_nb_front_end]                   (uint32_t         )\n"));
43  err (_(" * translate_ooo_engine_num_execute_loop [nb_ooo_engine][ooo_engine_nb_execute_loop]                (uint32_t         )\n"));
44  err (_(" * translate_execute_loop_num_ooo_engine [nb_execute_loop][execute_loop_nb_ooo_engine]              (uint32_t         )\n"));
45
46  exit (1);
47}
48
49#ifndef SYSTEMC
50int main    (int argc, char * argv[])
51#else
52int sc_main (int argc, char * argv[])
53#endif
54{
55  int nb_params;
56
57  nb_params =  static_cast<int> (2+NB_PARAMS);
58  if (argc < nb_params)
59    usage (argc, argv);
60
61  uint32_t x = 1;
62
63  uint32_t                nb_front_end                         ;
64  uint32_t              * nb_context                           ;//[nb_front_end]
65  uint32_t                nb_ooo_engine                        ;
66  uint32_t                nb_execute_loop                      ;
67  uint32_t              * ooo_engine_nb_front_end              ;//[nb_ooo_engine]
68  uint32_t              * ooo_engine_nb_execute_loop           ;//[nb_ooo_engine]
69  uint32_t              * execute_loop_nb_ooo_engine           ;//[nb_execute_loop]
70  uint32_t              * nb_inst_decod                        ;//[nb_front_end] -> [sum_inst_decod]
71  uint32_t              * front_end_nb_inst_branch_complete    ;//[nb_front_end]
72  uint32_t              * ooo_engine_nb_inst_branch_complete   ;//[nb_ooo_engine]
73  uint32_t              * nb_inst_insert                       ;//[nb_ooo_engine]
74  uint32_t              * nb_inst_issue                        ;//[nb_ooo_engine]
75  uint32_t             ** nb_inst_execute                      ;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
76  uint32_t              * nb_read_unit                         ;//[nb_execute_loop]
77  uint32_t              * nb_write_unit                        ;//[nb_execute_loop]
78  uint32_t                size_depth                           ;
79  uint32_t                size_rob_ptr                         ;
80  uint32_t                size_load_queue_ptr                  ;
81  uint32_t                size_store_queue_ptr                 ;
82  uint32_t                size_general_data                    ;
83  uint32_t                size_special_data                    ;
84  uint32_t                size_general_register                ;
85  uint32_t                size_special_register                ;
86  Tpriority_t             dispatch_priority                    ;
87  Tload_balancing_t       dispatch_load_balancing              ;
88  bool               **** table_dispatch                       ;//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
89  uint32_t             ** translate_ooo_engine_num_front_end   ;//[nb_ooo_engine][ooo_engine_nb_front_end]
90  uint32_t             ** translate_ooo_engine_num_execute_loop;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
91  uint32_t             ** translate_execute_loop_num_ooo_engine;//[nb_execute_loop][execute_loop_nb_ooo_engine]
92
93  string name = argv[x++];
94
95  SELFTEST0(nb_front_end                         ,uint32_t         ,argv,x);
96
97  nb_params =  static_cast<int> (2+NB_PARAMS+
98                                 1*nb_front_end);
99  if (argc < nb_params)
100    usage (argc, argv);
101
102  SELFTEST1(nb_context                           ,uint32_t         ,argv,x,nb_front_end);
103  SELFTEST0(nb_ooo_engine                        ,uint32_t         ,argv,x);
104  SELFTEST0(nb_execute_loop                      ,uint32_t         ,argv,x);
105
106  nb_params = static_cast<int> (2+NB_PARAMS+
107                                3*nb_front_end+
108                                5*nb_ooo_engine+
109                                3*nb_execute_loop
110                                );
111  if (argc < nb_params)
112    usage (argc, argv);
113
114  SELFTEST1(ooo_engine_nb_front_end              ,uint32_t         ,argv,x,nb_ooo_engine);
115  SELFTEST1(ooo_engine_nb_execute_loop           ,uint32_t         ,argv,x,nb_ooo_engine);
116  SELFTEST1(execute_loop_nb_ooo_engine           ,uint32_t         ,argv,x,nb_execute_loop);
117  SELFTEST1(nb_inst_decod                        ,uint32_t         ,argv,x,nb_front_end);
118  SELFTEST1(front_end_nb_inst_branch_complete    ,uint32_t         ,argv,x,nb_front_end);
119  SELFTEST1(ooo_engine_nb_inst_branch_complete   ,uint32_t         ,argv,x,nb_ooo_engine);
120  SELFTEST1(nb_inst_insert                       ,uint32_t         ,argv,x,nb_ooo_engine);
121  SELFTEST1(nb_inst_issue                        ,uint32_t         ,argv,x,nb_ooo_engine);
122
123  uint32_t sum_ooo_engine_nb_front_end    = 0;
124  uint32_t sum_ooo_engine_nb_execute_loop = 0;
125  uint32_t sum_nb_inst_issue              = 0;
126
127  for (uint32_t i=0; i<nb_ooo_engine; ++i)
128    {
129      sum_ooo_engine_nb_front_end    += ooo_engine_nb_front_end    [i];
130      sum_ooo_engine_nb_execute_loop += ooo_engine_nb_execute_loop [i];
131      sum_nb_inst_issue              += nb_inst_issue              [i];
132    }
133
134  nb_params = static_cast<int> (2+NB_PARAMS+
135                                3*nb_front_end+
136                                5*nb_ooo_engine+
137                                3*nb_execute_loop+
138                                1*sum_ooo_engine_nb_execute_loop
139                                );
140  if (argc < nb_params)
141    usage (argc, argv);
142
143  SELFTEST2(nb_inst_execute                      ,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
144  SELFTEST1(nb_read_unit                         ,uint32_t         ,argv,x,nb_execute_loop);
145  SELFTEST1(nb_write_unit                        ,uint32_t         ,argv,x,nb_execute_loop);
146  SELFTEST0(size_depth                           ,uint32_t         ,argv,x);
147  SELFTEST0(size_rob_ptr                         ,uint32_t         ,argv,x);
148  SELFTEST0(size_load_queue_ptr                  ,uint32_t         ,argv,x);
149  SELFTEST0(size_store_queue_ptr                 ,uint32_t         ,argv,x);
150  SELFTEST0(size_general_data                    ,uint32_t         ,argv,x);
151  SELFTEST0(size_special_data                    ,uint32_t         ,argv,x);
152  SELFTEST0(size_general_register                ,uint32_t         ,argv,x);
153  SELFTEST0(size_special_register                ,uint32_t         ,argv,x);
154
155  uint32_t sum_execute_loop_nb_ooo_engine = 0;
156  uint32_t sum_nb_read_unit               = 0;
157
158  for (uint32_t i=0; i<nb_execute_loop; ++i)
159    {
160      sum_execute_loop_nb_ooo_engine += execute_loop_nb_ooo_engine [i];
161      sum_nb_read_unit               += nb_read_unit               [i];
162    }
163
164  nb_params = static_cast<int> (2+NB_PARAMS+
165                                3*nb_front_end+
166                                5*nb_ooo_engine+
167                                3*nb_execute_loop+
168                                sum_nb_inst_issue*sum_nb_read_unit+
169                                sum_ooo_engine_nb_front_end+
170                                2*sum_ooo_engine_nb_execute_loop+
171                                sum_execute_loop_nb_ooo_engine
172                                );
173  if (argc != nb_params)
174    usage (argc, argv);
175
176  SELFTEST0(dispatch_priority                    ,Tpriority_t      ,argv,x);
177  SELFTEST0(dispatch_load_balancing              ,Tload_balancing_t,argv,x);
178
179  SELFTEST4(table_dispatch                       ,bool             ,argv,x,nb_ooo_engine,nb_inst_issue[it1],nb_execute_loop,nb_read_unit[it3]);
180  SELFTEST2(translate_ooo_engine_num_front_end   ,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_front_end[it1]);
181  SELFTEST2(translate_ooo_engine_num_execute_loop,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
182  SELFTEST2(translate_execute_loop_num_ooo_engine,uint32_t         ,argv,x,nb_execute_loop,execute_loop_nb_ooo_engine[it1]);
183
184  int _return = EXIT_SUCCESS;
185  try 
186    {
187      morpheo::behavioural::core::core_glue::Parameters * param = new morpheo::behavioural::core::core_glue::Parameters
188        (
189         nb_front_end                         ,
190         nb_context                           ,//[nb_front_end]
191         nb_ooo_engine                        ,
192         nb_execute_loop                      ,
193         ooo_engine_nb_front_end              ,//[nb_ooo_engine]
194         ooo_engine_nb_execute_loop           ,//[nb_ooo_engine]
195         execute_loop_nb_ooo_engine           ,//[nb_execute_loop]
196         nb_inst_decod                        ,//[nb_front_end]
197         front_end_nb_inst_branch_complete    ,//[nb_front_end]
198         ooo_engine_nb_inst_branch_complete   ,//[nb_ooo_engine]
199         nb_inst_insert                       ,//[nb_ooo_engine]
200         nb_inst_issue                        ,//[nb_ooo_engine]
201         nb_inst_execute                      ,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
202         nb_read_unit                         ,//[nb_execute_loop]
203         nb_write_unit                        ,//[nb_execute_loop]
204         size_depth                           ,
205         size_rob_ptr                         ,
206         size_load_queue_ptr                  ,
207         size_store_queue_ptr                 ,
208         size_general_data                    ,
209         size_special_data                    ,
210         size_general_register                ,
211         size_special_register                ,
212         dispatch_priority                    ,
213         dispatch_load_balancing              ,
214         table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
215         translate_ooo_engine_num_front_end   ,//[nb_ooo_engine][ooo_engine_nb_front_end]
216         translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
217         translate_execute_loop_num_ooo_engine,//[nb_execute_loop][execute_loop_nb_ooo_engine]
218         true //is_toplevel
219        );
220     
221      msg(_("%s"),param->print(0).c_str());
222     
223      test (name,param);
224    }
225  catch (morpheo::ErrorMorpheo & error)
226    {
227      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
228      _return = EXIT_FAILURE;
229    }
230 
231  try 
232    {
233      if (_return == EXIT_SUCCESS)
234        TEST_OK("Core_Glue : no error");
235      else
236        TEST_KO("Core_Glue : a lot of error");
237    }
238  catch (morpheo::ErrorMorpheo & error)
239    {
240//       msg (_("<%s> :\n%s"),name.c_str(), error.what ());
241      _return = EXIT_FAILURE;
242    }
243
244  DELETE2(translate_execute_loop_num_ooo_engine,nb_execute_loop,execute_loop_nb_ooo_engine[it1]);
245  DELETE2(translate_ooo_engine_num_execute_loop,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
246  DELETE2(translate_ooo_engine_num_front_end   ,nb_ooo_engine,ooo_engine_nb_front_end[it1]);
247  DELETE4(table_dispatch                       ,nb_ooo_engine,nb_inst_issue[it1],nb_execute_loop,nb_read_unit[it2]);
248  DELETE1(nb_write_unit                        ,nb_execute_loop);
249  DELETE1(nb_read_unit                         ,nb_execute_loop);
250  DELETE2(nb_inst_execute                      ,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
251  DELETE1(nb_inst_issue                        ,nb_ooo_engine);
252  DELETE1(ooo_engine_nb_inst_branch_complete   ,nb_ooo_engine);
253  DELETE1(front_end_nb_inst_branch_complete    ,nb_front_end);
254  DELETE1(nb_inst_decod                        ,nb_front_end);
255  DELETE1(execute_loop_nb_ooo_engine           ,nb_execute_loop);
256  DELETE1(ooo_engine_nb_execute_loop           ,nb_ooo_engine);
257  DELETE1(ooo_engine_nb_front_end              ,nb_ooo_engine);
258  DELETE1(nb_context                           ,nb_front_end);
259
260  return (_return);
261}
Note: See TracBrowser for help on using the repository browser.