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 | |
---|
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 [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 |
---|
50 | int main (int argc, char * argv[]) |
---|
51 | #else |
---|
52 | int 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 | } |
---|