source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters_msg_error.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: 17.2 KB
Line 
1/*
2 * $Id: Parameters_msg_error.cpp 128 2009-06-26 08:43:23Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/include/Types.h"
9#include "Behavioural/Core/include/Parameters.h"
10#include "Common/include/Max.h"
11#include <sstream>
12
13namespace morpheo                    {
14namespace behavioural {
15namespace core {
16
17
18#undef  FUNCTION
19#define FUNCTION "Core::msg_error"
20  Parameters_test Parameters::msg_error(void)
21  {
22    log_begin(Core,FUNCTION);
23
24    Parameters_test test ("Core");
25
26    // TESTER SI LES VALEURS NE DEPASSE PAS DE L'INTERVALLE AUTORISE
27
28    {
29      // initialisation
30      uint32_t nb_link_context [_nb_front_end][max<uint32_t>(_nb_context,_nb_front_end)];
31     
32      for (uint32_t i=0; i<_nb_front_end; ++i)
33        for (uint32_t j=0; j<_nb_context[i];++j)
34          nb_link_context [i][j] = 0;
35     
36      // set link
37      for (uint32_t i=0; i<_nb_thread; ++i)
38        nb_link_context[_link_context_with_thread[i].first][_link_context_with_thread[i].second] ++;
39
40      // test
41      for (uint32_t i=0; i<_nb_front_end; ++i)
42        for (uint32_t j=0; j<_nb_context[i];++j)
43          {
44            if (nb_link_context[i][j] == 0)
45              test.error(toString(_("Context [%d][%d] is not link with a thread.\n"),i,j));
46            if (nb_link_context[i][j]  > 1)
47              test.error(toString(_("Context [%d][%d] is linked with 2 or more threads.\n"),i,j));
48          }
49    }
50
51    {
52      // initialisation
53      uint32_t nb_link_decod_unit [_nb_front_end][max<uint32_t>(_nb_decod_unit,_nb_front_end)];
54     
55      for (uint32_t i=0; i<_nb_front_end; ++i)
56        for (uint32_t j=0; j<_nb_decod_unit[i];++j)
57          nb_link_decod_unit [i][j] = 0;
58     
59      // set link
60      for (uint32_t i=0; i<_nb_decod_bloc; ++i)
61        {
62          uint32_t num_front_end  = _link_decod_unit_with_decod_bloc[i].first;
63          uint32_t num_decod_unit = _link_decod_unit_with_decod_bloc[i].second;
64
65          bool error = false;
66
67          if (num_front_end >= _nb_front_end)
68            {
69              error = true;
70              test.error(toString(_("Decod_bloc [%d] is connected with an invalid front_end (%d).\n"),i,num_front_end));
71            }
72
73          if (num_decod_unit >= _nb_decod_unit[num_front_end])
74            {
75              error = true;
76              test.error(toString(_("Decod_bloc [%d] is connected with an invalid decod_unit (%d.%d).\n"),i,num_front_end,num_decod_unit));
77            }
78
79          if (not error)
80            nb_link_decod_unit[num_front_end][num_decod_unit] ++;
81        }
82      // test
83      for (uint32_t i=0; i<_nb_front_end; ++i)
84        for (uint32_t j=0; j<_nb_decod_unit[i];++j)
85          {
86            if (nb_link_decod_unit[i][j] == 0)
87              test.error(toString(_("Decod_Unit [%d][%d] is not link with a decod_bloc.\n"),i,j));
88            if (nb_link_decod_unit[i][j]  > 1)
89              test.error(toString(_("Decod_Unit [%d][%d] is linked with 2 or more decod_bloc.\n"),i,j));
90          }
91    }
92
93    {
94      // initialisation
95      uint32_t nb_link_rename_unit [_nb_ooo_engine][max<uint32_t>(_nb_rename_unit,_nb_ooo_engine)];
96     
97      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
98        for (uint32_t j=0; j<_nb_rename_unit[i];++j)
99          nb_link_rename_unit [i][j] = 0;
100     
101      // set link
102      for (uint32_t i=0; i<_nb_rename_bloc; ++i)
103        nb_link_rename_unit[_link_rename_unit_with_rename_bloc[i].first][_link_rename_unit_with_rename_bloc[i].second] ++;
104
105      // test
106      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
107        for (uint32_t j=0; j<_nb_rename_unit[i];++j)
108          {
109            if (nb_link_rename_unit[i][j] == 0)
110              test.error(toString(_("Rename_Unit [%d][%d] is not link with a rename_bloc.\n"),i,j));
111            if (nb_link_rename_unit[i][j]  > 1)
112              test.error(toString(_("Rename_Unit [%d][%d] is linked with 2 or more rename_bloc.\n"),i,j));
113          }
114    }
115
116    {
117      // initialisation
118      uint32_t nb_link_read_unit [_nb_execute_loop][max<uint32_t>(_nb_read_unit,_nb_execute_loop)];
119     
120      for (uint32_t i=0; i<_nb_execute_loop; ++i)
121        for (uint32_t j=0; j<_nb_read_unit[i];++j)
122          nb_link_read_unit [i][j] = 0;
123     
124      // set link
125      for (uint32_t i=0; i<_nb_read_bloc; ++i)
126        nb_link_read_unit[_link_read_unit_with_read_bloc[i].first][_link_read_unit_with_read_bloc[i].second] ++;
127
128      // test
129      for (uint32_t i=0; i<_nb_execute_loop; ++i)
130        for (uint32_t j=0; j<_nb_read_unit[i];++j)
131          {
132            if (nb_link_read_unit[i][j] == 0)
133              test.error(toString(_("Read_Unit [%d][%d] is not link with a read_bloc.\n"),i,j));
134            if (nb_link_read_unit[i][j]  > 1)
135              test.error(toString(_("Read_Unit [%d][%d] is linked with 2 or more read_bloc.\n"),i,j));
136          }
137    }
138
139    {
140      // initialisation
141      uint32_t nb_link_write_unit [_nb_execute_loop][max<uint32_t>(_nb_write_unit,_nb_execute_loop)];
142     
143      for (uint32_t i=0; i<_nb_execute_loop; ++i)
144        for (uint32_t j=0; j<_nb_write_unit[i];++j)
145          nb_link_write_unit [i][j] = 0;
146     
147      // set link
148      for (uint32_t i=0; i<_nb_write_bloc; ++i)
149        nb_link_write_unit[_link_write_unit_with_write_bloc[i].first][_link_write_unit_with_write_bloc[i].second] ++;
150
151      // test
152      for (uint32_t i=0; i<_nb_execute_loop; ++i)
153        for (uint32_t j=0; j<_nb_write_unit[i];++j)
154          {
155            if (nb_link_write_unit[i][j] == 0)
156              test.error(toString(_("Write_Unit [%d][%d] is not link with a write_bloc.\n"),i,j));
157            if (nb_link_write_unit[i][j]  > 1)
158              test.error(toString(_("Write_Unit [%d][%d] is linked with 2 or more write_bloc.\n"),i,j));
159          }
160    }
161
162    {
163      // initialisation
164      uint32_t nb_link_execute_unit [_nb_execute_loop][max<uint32_t>(_nb_execute_unit,_nb_execute_loop)];
165//       uint32_t nb_functionnal_unit  [_nb_functionnal_unit];
166//       uint32_t nb_load_store_unit   [_nb_load_store_unit];
167
168//       for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
169//         nb_functionnal_unit [i] = 0;
170     
171//       for (uint32_t i=0; i<_nb_load_store_unit; ++i)
172//         nb_load_store_unit  [i] = 0;
173     
174      for (uint32_t i=0; i<_nb_execute_loop; ++i)
175        for (uint32_t j=0; j<_nb_execute_unit[i];++j)
176          nb_link_execute_unit [i][j] = 0;
177
178      // set link
179      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
180        {
181          uint32_t num_execute_loop = _link_execute_unit_with_functionnal_unit [i].first;
182          uint32_t num_execute_unit = _link_execute_unit_with_functionnal_unit [i].second;
183
184          log_printf(TRACE,Core,FUNCTION,"  * _link_execute_unit_with_functionnal_unit [%d] = %d.%d",i,num_execute_loop,num_execute_unit);
185
186          nb_link_execute_unit [num_execute_loop][num_execute_unit] ++;
187//           nb_functionnal_unit  [i] ++;
188        }
189      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
190        {
191          uint32_t num_execute_loop = _link_execute_unit_with_load_store_unit [i].first;
192          uint32_t num_execute_unit = _link_execute_unit_with_load_store_unit [i].second;
193
194          nb_link_execute_unit [num_execute_loop][num_execute_unit] ++;
195//           nb_load_store_unit   [i] ++;
196        }
197
198      // test
199      for (uint32_t i=0; i<_nb_execute_loop; ++i)
200        for (uint32_t j=0; j<_nb_execute_unit[i];++j)
201          {
202            if (nb_link_execute_unit[i][j] == 0)
203              test.error(toString(_("Execute_Unit [%d][%d] is not link with a load_store_unit or functionnal_unit.\n"),i,j));
204            if (nb_link_execute_unit[i][j]  > 1)
205              test.error(toString(_("Execute_Unit [%d][%d] is linked with 2 or more time.\n"),i,j));
206          }
207
208//       for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
209//         {
210//           if (nb_functionnal_unit[i] == 0)
211//             test.error(toString(_("Functionnal_Unit [%d] is not instanced.\n"),i));
212//           if (nb_functionnal_unit[i]  > 1)
213//             test.error(toString(_("Functionnal_Unit [%d] is linked with 2 or more time.\n"),i));
214//         }
215
216//       for (uint32_t i=0; i<_nb_load_store_unit; ++i)
217//         {
218//           if (nb_load_store_unit[i] == 0)
219//             test.error(toString(_("Load_Store_Unit [%d] is not instanced.\n"),i));
220//           if (nb_load_store_unit[i]  > 1)
221//             test.error(toString(_("Load_Store_Unit [%d] is linked with 2 or more time.\n"),i));
222//         }
223    }
224   
225    {
226      // initialisation
227      uint32_t nb_link_slot      [_nb_ooo_engine][max<uint32_t>(_nb_inst_issue_slot,_nb_ooo_engine)];
228      uint32_t nb_link_read_bloc [_nb_read_bloc];
229 
230      // initialisation
231      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
232        for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
233          nb_link_slot [i][j] = 0;
234      for (uint32_t i=0; i<_nb_read_bloc; ++i)
235        nb_link_read_bloc [i] = 0;
236
237      // set link
238      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
239        for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
240          for (uint32_t k=0; k<_nb_read_bloc; ++k)
241            if (_table_dispatch [i][j][k])
242              {
243                nb_link_slot      [i][j] ++;
244                nb_link_read_bloc [k] ++;
245              }
246     
247      // test
248      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
249        for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
250          if (nb_link_slot [i][j] == 0)
251            test.error(toString(_("In Out Of Order Engine [%d], the slot issue [%d] is not link with a read_bloc.\n"),i,j));
252      for (uint32_t i=0; i<_nb_read_bloc; ++i)
253        if (nb_link_read_bloc [i] == 0)
254          test.error(toString(_("Read_bloc [%d] is not link with a issue's slot.\n"),i));
255    }
256
257    {
258      uint32_t nb_link_read_bloc        [_nb_read_bloc];
259      uint32_t nb_link_load_store_unit  [_nb_load_store_unit];
260      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
261
262      for (uint32_t i=0; i<_nb_read_bloc; ++i)
263        nb_link_read_bloc [i] = 0;
264      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
265        nb_link_load_store_unit [i] = 0;
266      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
267        nb_link_functionnal_unit [i] = 0;
268
269      for (uint32_t i=0; i<_nb_read_bloc; ++i)
270        {
271          for (uint32_t j=0; j<_nb_load_store_unit; ++j)
272            if (_link_read_bloc_and_load_store_unit [i][j])
273              {
274                nb_link_read_bloc        [i] ++;
275                nb_link_load_store_unit  [j] ++;
276              }
277          for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
278            if (_link_read_bloc_and_functionnal_unit [i][j])
279              {
280                nb_link_read_bloc        [i] ++;
281                nb_link_functionnal_unit [j] ++;
282              }
283        }
284
285      for (uint32_t i=0; i<_nb_read_bloc; ++i)
286        if (nb_link_read_bloc [i] == 0)
287          test.error(toString(_("Read_bloc [%d] is not link with an execute_unit.\n"),i));
288      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
289        if (nb_link_load_store_unit [i] == 0)
290          test.error(toString(_("load_store_unit [%d] is not link with a read_bloc.\n"),i));
291      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
292        if (nb_link_functionnal_unit [i] == 0)
293          test.error(toString(_("functionnal_unit [%d] is not link with a read_bloc.\n"),i));
294    }
295
296    {
297      uint32_t nb_link_write_bloc       [_nb_write_bloc];
298      uint32_t nb_link_load_store_unit  [_nb_load_store_unit];
299      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
300
301      for (uint32_t i=0; i<_nb_write_bloc; ++i)
302        nb_link_write_bloc [i] = 0;
303      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
304        nb_link_load_store_unit [i] = 0;
305      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
306        nb_link_functionnal_unit [i] = 0;
307
308      for (uint32_t i=0; i<_nb_write_bloc; ++i)
309        {
310          for (uint32_t j=0; j<_nb_load_store_unit; ++j)
311            if (_link_write_bloc_and_load_store_unit [i][j])
312              {
313                nb_link_write_bloc       [i] ++;
314                nb_link_load_store_unit  [j] ++;
315              }
316          for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
317            if (_link_write_bloc_and_functionnal_unit [i][j])
318              {
319                nb_link_write_bloc       [i] ++;
320                nb_link_functionnal_unit [j] ++;
321              }
322        }
323
324      for (uint32_t i=0; i<_nb_write_bloc; ++i)
325        if (nb_link_write_bloc [i] == 0)
326          test.error(toString(_("Write_bloc [%d] is not link with an execute_unit.\n"),i));
327      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
328        if (nb_link_load_store_unit [i] == 0)
329          test.error(toString(_("load_store_unit [%d] is not link with a write_bloc.\n"),i));
330      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
331        if (nb_link_functionnal_unit [i] == 0)
332          test.error(toString(_("functionnal_unit [%d] is not link with a write_bloc.\n"),i));
333    }
334
335    {
336      uint32_t nb_link_thread           [_nb_thread];
337      uint32_t nb_link_load_store_unit  [_nb_load_store_unit];
338      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
339
340      for (uint32_t i=0; i<_nb_thread; ++i)
341        nb_link_thread [i] = 0;
342      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
343        nb_link_load_store_unit [i] = 0;
344      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
345        nb_link_functionnal_unit [i] = 0;
346     
347      for (uint32_t i=0; i<_nb_thread; ++i)
348        {
349          {
350            uint32_t num_load_store_unit = _link_load_store_unit_with_thread [i];
351           
352            nb_link_thread           [i] ++;
353            nb_link_load_store_unit  [num_load_store_unit] ++;
354          }
355
356          for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
357            if (_link_thread_and_functionnal_unit [i][j])
358              {
359                nb_link_thread           [i] ++;
360                nb_link_functionnal_unit [j] ++;
361              }
362        }
363
364      for (uint32_t i=0; i<_nb_thread; ++i)
365        if (nb_link_thread [i] < 2)
366          test.error(toString(_("Thread [%d] is not link with a load_store_unit and a functionnal_unit.\n"),i));
367      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
368        if (nb_link_load_store_unit [i] == 0)
369          test.error(toString(_("Load_store_unit [%d] is not link with a thread.\n"),i));
370      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
371        if (nb_link_functionnal_unit [i] == 0)
372          test.error(toString(_("Functionnal_unit [%d] is not link with a thread.\n"),i));
373    }
374   
375    {
376      uint32_t nb_link_icache_port [_nb_icache_port];
377
378      for (uint32_t i=0; i<_nb_icache_port; ++i)
379        nb_link_icache_port [i] = 0;
380
381      for (uint32_t i=0; i<_nb_thread; ++i)
382        nb_link_icache_port [_link_icache_port_with_thread [i]] ++;
383     
384      for (uint32_t i=0; i<_nb_icache_port; ++i)
385        if (nb_link_icache_port [i] == 0)
386          test.error(toString(_("Icache port [%d] is not link with a thread.\n"),i));
387    }
388
389    {
390      uint32_t nb_link_dcache_port [_nb_dcache_port];
391
392      for (uint32_t i=0; i<_nb_dcache_port; ++i)
393        nb_link_dcache_port [i] = 0;
394         
395      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
396        for (uint32_t j=0; j<_nb_cache_port[i]; ++j)
397        nb_link_dcache_port [_link_dcache_port_with_load_store_unit[i][j]] ++;
398     
399      for (uint32_t i=0; i<_nb_dcache_port; ++i)
400        if (nb_link_dcache_port [i] == 0)
401          test.error(toString(_("Dcache port [%d] is not link with a port of load store unit.\n"),i));
402    }
403
404
405//   public : pair_dual             * _link_context_with_thread                      ;//[nb_thread]
406//   public : pair_dual             * _link_decod_unit_with_decod_bloc               ;//[nb_decod_bloc]
407//   public : pair_dual             * _link_rename_unit_with_rename_bloc             ;//[nb_rename_bloc]
408//   public : pair_dual             * _link_read_unit_with_read_bloc                 ;//[nb_read_bloc]
409//   public : pair_dual             * _link_write_unit_with_write_bloc               ;//[nb_write_bloc]
410//   public : pair_dual             * _link_execute_unit_with_functionnal_unit       ;//[nb_functionnal_unit]
411//   public : pair_dual             * _link_execute_unit_with_load_store_unit        ;//[nb_load_store_unit]
412//   public : uint32_t              * _link_decod_bloc_with_thread                   ;//[nb_thread]
413//   public : uint32_t              * _link_rename_bloc_with_front_end               ;//[nb_front_end]
414//   public : bool                *** _table_dispatch                                ;//[nb_ooo_engine][nb_inst_issue][nb_read_bloc]
415//   public : bool                 ** _link_read_bloc_and_load_store_unit            ;//[nb_read_bloc][nb_load_store_unit]
416//   public : bool                 ** _link_read_bloc_and_functionnal_unit           ;//[nb_read_bloc][nb_functionnal_unit]
417//   public : bool                 ** _link_write_bloc_and_load_store_unit           ;//[nb_write_bloc][nb_load_store_unit]
418//   public : bool                 ** _link_write_bloc_and_functionnal_unit          ;//[nb_write_bloc][nb_functionnal_unit]
419//   public : uint32_t              * _link_load_store_unit_with_thread              ;//[nb_thread]
420//   public : bool                 ** _link_thread_and_functionnal_unit              ;//[nb_thread][nb_functionnal_unit]
421//   public : uint32_t              * _link_icache_port_with_thread                  ;//[nb_thread]
422//   public : uint32_t             ** _link_dcache_port_with_load_store_unit         ;//[nb_load_store_unit][nb_cache_port]
423
424    log_end(Core,FUNCTION);
425
426    return test;
427  };
428
429}; // end namespace core
430}; // end namespace behavioural
431}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.