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 | |
---|
12 | void 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 |
---|
64 | int main (int argc, char * argv[]) |
---|
65 | #else |
---|
66 | int 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 | } |
---|