source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters_msg_error.cpp @ 109

Last change on this file since 109 was 109, checked in by rosiere, 15 years ago

1) Configuration : instance configuration file : regroup similar instance
2) Configuration : timing default = 0
3) Debug/Commit_unit : Add watch dog timer
4) Issue_queue : Test parameters : add test if type is optionnal
5) Cor_glue : Fix insert index
6) Free_list : remove bank_by_pop (else deadlock)
7) Update Free List : add register to source event

  • Property svn:keywords set to Id
File size: 16.5 KB
Line 
1/*
2 * $Id: Parameters_msg_error.cpp 109 2009-02-16 20:28:31Z 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        nb_link_decod_unit[_link_decod_unit_with_decod_bloc[i].first][_link_decod_unit_with_decod_bloc[i].second] ++;
62
63      // test
64      for (uint32_t i=0; i<_nb_front_end; ++i)
65        for (uint32_t j=0; j<_nb_decod_unit[i];++j)
66          {
67            if (nb_link_decod_unit[i][j] == 0)
68              test.error(toString(_("Decod_Unit [%d][%d] is not link with a decod_bloc.\n"),i,j));
69            if (nb_link_decod_unit[i][j]  > 1)
70              test.error(toString(_("Decod_Unit [%d][%d] is linked with 2 or more decod_bloc.\n"),i,j));
71          }
72    }
73
74    {
75      // initialisation
76      uint32_t nb_link_rename_unit [_nb_ooo_engine][max<uint32_t>(_nb_rename_unit,_nb_ooo_engine)];
77     
78      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
79        for (uint32_t j=0; j<_nb_rename_unit[i];++j)
80          nb_link_rename_unit [i][j] = 0;
81     
82      // set link
83      for (uint32_t i=0; i<_nb_rename_bloc; ++i)
84        nb_link_rename_unit[_link_rename_unit_with_rename_bloc[i].first][_link_rename_unit_with_rename_bloc[i].second] ++;
85
86      // test
87      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
88        for (uint32_t j=0; j<_nb_rename_unit[i];++j)
89          {
90            if (nb_link_rename_unit[i][j] == 0)
91              test.error(toString(_("Rename_Unit [%d][%d] is not link with a rename_bloc.\n"),i,j));
92            if (nb_link_rename_unit[i][j]  > 1)
93              test.error(toString(_("Rename_Unit [%d][%d] is linked with 2 or more rename_bloc.\n"),i,j));
94          }
95    }
96
97    {
98      // initialisation
99      uint32_t nb_link_read_unit [_nb_execute_loop][max<uint32_t>(_nb_read_unit,_nb_execute_loop)];
100     
101      for (uint32_t i=0; i<_nb_execute_loop; ++i)
102        for (uint32_t j=0; j<_nb_read_unit[i];++j)
103          nb_link_read_unit [i][j] = 0;
104     
105      // set link
106      for (uint32_t i=0; i<_nb_read_bloc; ++i)
107        nb_link_read_unit[_link_read_unit_with_read_bloc[i].first][_link_read_unit_with_read_bloc[i].second] ++;
108
109      // test
110      for (uint32_t i=0; i<_nb_execute_loop; ++i)
111        for (uint32_t j=0; j<_nb_read_unit[i];++j)
112          {
113            if (nb_link_read_unit[i][j] == 0)
114              test.error(toString(_("Read_Unit [%d][%d] is not link with a read_bloc.\n"),i,j));
115            if (nb_link_read_unit[i][j]  > 1)
116              test.error(toString(_("Read_Unit [%d][%d] is linked with 2 or more read_bloc.\n"),i,j));
117          }
118    }
119
120    {
121      // initialisation
122      uint32_t nb_link_write_unit [_nb_execute_loop][max<uint32_t>(_nb_write_unit,_nb_execute_loop)];
123     
124      for (uint32_t i=0; i<_nb_execute_loop; ++i)
125        for (uint32_t j=0; j<_nb_write_unit[i];++j)
126          nb_link_write_unit [i][j] = 0;
127     
128      // set link
129      for (uint32_t i=0; i<_nb_write_bloc; ++i)
130        nb_link_write_unit[_link_write_unit_with_write_bloc[i].first][_link_write_unit_with_write_bloc[i].second] ++;
131
132      // test
133      for (uint32_t i=0; i<_nb_execute_loop; ++i)
134        for (uint32_t j=0; j<_nb_write_unit[i];++j)
135          {
136            if (nb_link_write_unit[i][j] == 0)
137              test.error(toString(_("Write_Unit [%d][%d] is not link with a write_bloc.\n"),i,j));
138            if (nb_link_write_unit[i][j]  > 1)
139              test.error(toString(_("Write_Unit [%d][%d] is linked with 2 or more write_bloc.\n"),i,j));
140          }
141    }
142
143    {
144      // initialisation
145      uint32_t nb_link_execute_unit [_nb_execute_loop][max<uint32_t>(_nb_execute_unit,_nb_execute_loop)];
146//       uint32_t nb_functionnal_unit  [_nb_functionnal_unit];
147//       uint32_t nb_load_store_unit   [_nb_load_store_unit];
148
149//       for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
150//         nb_functionnal_unit [i] = 0;
151     
152//       for (uint32_t i=0; i<_nb_load_store_unit; ++i)
153//         nb_load_store_unit  [i] = 0;
154     
155      for (uint32_t i=0; i<_nb_execute_loop; ++i)
156        for (uint32_t j=0; j<_nb_execute_unit[i];++j)
157          nb_link_execute_unit [i][j] = 0;
158
159      // set link
160      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
161        {
162          uint32_t num_execute_loop = _link_execute_unit_with_functionnal_unit [i].first;
163          uint32_t num_execute_unit = _link_execute_unit_with_functionnal_unit [i].second;
164
165          log_printf(TRACE,Core,FUNCTION,"  * _link_execute_unit_with_functionnal_unit [%d] = %d.%d",i,num_execute_loop,num_execute_unit);
166
167          nb_link_execute_unit [num_execute_loop][num_execute_unit] ++;
168//           nb_functionnal_unit  [i] ++;
169        }
170      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
171        {
172          uint32_t num_execute_loop = _link_execute_unit_with_load_store_unit [i].first;
173          uint32_t num_execute_unit = _link_execute_unit_with_load_store_unit [i].second;
174
175          nb_link_execute_unit [num_execute_loop][num_execute_unit] ++;
176//           nb_load_store_unit   [i] ++;
177        }
178
179      // test
180      for (uint32_t i=0; i<_nb_execute_loop; ++i)
181        for (uint32_t j=0; j<_nb_execute_unit[i];++j)
182          {
183            if (nb_link_execute_unit[i][j] == 0)
184              test.error(toString(_("Execute_Unit [%d][%d] is not link with a load_store_unit or functionnal_unit.\n"),i,j));
185            if (nb_link_execute_unit[i][j]  > 1)
186              test.error(toString(_("Execute_Unit [%d][%d] is linked with 2 or more time.\n"),i,j));
187          }
188
189//       for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
190//         {
191//           if (nb_functionnal_unit[i] == 0)
192//             test.error(toString(_("Functionnal_Unit [%d] is not instanced.\n"),i));
193//           if (nb_functionnal_unit[i]  > 1)
194//             test.error(toString(_("Functionnal_Unit [%d] is linked with 2 or more time.\n"),i));
195//         }
196
197//       for (uint32_t i=0; i<_nb_load_store_unit; ++i)
198//         {
199//           if (nb_load_store_unit[i] == 0)
200//             test.error(toString(_("Load_Store_Unit [%d] is not instanced.\n"),i));
201//           if (nb_load_store_unit[i]  > 1)
202//             test.error(toString(_("Load_Store_Unit [%d] is linked with 2 or more time.\n"),i));
203//         }
204    }
205   
206    {
207      // initialisation
208      uint32_t nb_link_slot      [_nb_ooo_engine][max<uint32_t>(_nb_inst_issue,_nb_ooo_engine)];
209      uint32_t nb_link_read_bloc [_nb_read_bloc];
210 
211      // initialisation
212      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
213        for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
214          nb_link_slot [i][j] = 0;
215      for (uint32_t i=0; i<_nb_read_bloc; ++i)
216        nb_link_read_bloc [i] = 0;
217
218      // set link
219      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
220        for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
221          for (uint32_t k=0; k<_nb_read_bloc; ++k)
222            if (_table_dispatch [i][j][k])
223              {
224                nb_link_slot      [i][j] ++;
225                nb_link_read_bloc [k] ++;
226              }
227     
228      // test
229      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
230        for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
231          if (nb_link_slot [i][j] == 0)
232            test.error(toString(_("In Out Of Order Engine [%d], the slot issue [%d] is not link with a read_bloc.\n"),i,j));
233      for (uint32_t i=0; i<_nb_read_bloc; ++i)
234        if (nb_link_read_bloc [i] == 0)
235          test.error(toString(_("Read_bloc [%d] is not link with a issue's slot.\n"),i));
236    }
237
238    {
239      uint32_t nb_link_read_bloc        [_nb_read_bloc];
240      uint32_t nb_link_load_store_unit  [_nb_load_store_unit];
241      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
242
243      for (uint32_t i=0; i<_nb_read_bloc; ++i)
244        nb_link_read_bloc [i] = 0;
245      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
246        nb_link_load_store_unit [i] = 0;
247      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
248        nb_link_functionnal_unit [i] = 0;
249
250      for (uint32_t i=0; i<_nb_read_bloc; ++i)
251        {
252          for (uint32_t j=0; j<_nb_load_store_unit; ++j)
253            if (_link_read_bloc_and_load_store_unit [i][j])
254              {
255                nb_link_read_bloc        [i] ++;
256                nb_link_load_store_unit  [j] ++;
257              }
258          for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
259            if (_link_read_bloc_and_functionnal_unit [i][j])
260              {
261                nb_link_read_bloc        [i] ++;
262                nb_link_functionnal_unit [j] ++;
263              }
264        }
265
266      for (uint32_t i=0; i<_nb_read_bloc; ++i)
267        if (nb_link_read_bloc [i] == 0)
268          test.error(toString(_("Read_bloc [%d] is not link with an execute_unit.\n"),i));
269      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
270        if (nb_link_load_store_unit [i] == 0)
271          test.error(toString(_("load_store_unit [%d] is not link with a read_bloc.\n"),i));
272      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
273        if (nb_link_functionnal_unit [i] == 0)
274          test.error(toString(_("functionnal_unit [%d] is not link with a read_bloc.\n"),i));
275    }
276
277    {
278      uint32_t nb_link_write_bloc       [_nb_write_bloc];
279      uint32_t nb_link_load_store_unit  [_nb_load_store_unit];
280      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
281
282      for (uint32_t i=0; i<_nb_write_bloc; ++i)
283        nb_link_write_bloc [i] = 0;
284      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
285        nb_link_load_store_unit [i] = 0;
286      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
287        nb_link_functionnal_unit [i] = 0;
288
289      for (uint32_t i=0; i<_nb_write_bloc; ++i)
290        {
291          for (uint32_t j=0; j<_nb_load_store_unit; ++j)
292            if (_link_write_bloc_and_load_store_unit [i][j])
293              {
294                nb_link_write_bloc       [i] ++;
295                nb_link_load_store_unit  [j] ++;
296              }
297          for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
298            if (_link_write_bloc_and_functionnal_unit [i][j])
299              {
300                nb_link_write_bloc       [i] ++;
301                nb_link_functionnal_unit [j] ++;
302              }
303        }
304
305      for (uint32_t i=0; i<_nb_write_bloc; ++i)
306        if (nb_link_write_bloc [i] == 0)
307          test.error(toString(_("Write_bloc [%d] is not link with an execute_unit.\n"),i));
308      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
309        if (nb_link_load_store_unit [i] == 0)
310          test.error(toString(_("load_store_unit [%d] is not link with a write_bloc.\n"),i));
311      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
312        if (nb_link_functionnal_unit [i] == 0)
313          test.error(toString(_("functionnal_unit [%d] is not link with a write_bloc.\n"),i));
314    }
315
316    {
317      uint32_t nb_link_thread           [_nb_thread];
318      uint32_t nb_link_load_store_unit  [_nb_load_store_unit];
319      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
320
321      for (uint32_t i=0; i<_nb_thread; ++i)
322        nb_link_thread [i] = 0;
323      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
324        nb_link_load_store_unit [i] = 0;
325      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
326        nb_link_functionnal_unit [i] = 0;
327     
328      for (uint32_t i=0; i<_nb_thread; ++i)
329        {
330          {
331            uint32_t num_load_store_unit = _link_load_store_unit_with_thread [i];
332           
333            nb_link_thread           [i] ++;
334            nb_link_load_store_unit  [num_load_store_unit] ++;
335          }
336
337          for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
338            if (_link_thread_and_functionnal_unit [i][j])
339              {
340                nb_link_thread           [i] ++;
341                nb_link_functionnal_unit [j] ++;
342              }
343        }
344
345      for (uint32_t i=0; i<_nb_thread; ++i)
346        if (nb_link_thread [i] < 2)
347          test.error(toString(_("Thread [%d] is not link with a load_store_unit and a functionnal_unit.\n"),i));
348      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
349        if (nb_link_load_store_unit [i] == 0)
350          test.error(toString(_("Load_store_unit [%d] is not link with a thread.\n"),i));
351      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
352        if (nb_link_functionnal_unit [i] == 0)
353          test.error(toString(_("Functionnal_unit [%d] is not link with a thread.\n"),i));
354    }
355   
356    {
357      uint32_t nb_link_icache_port [_nb_icache_port];
358
359      for (uint32_t i=0; i<_nb_icache_port; ++i)
360        nb_link_icache_port [i] = 0;
361
362      for (uint32_t i=0; i<_nb_thread; ++i)
363        nb_link_icache_port [_link_icache_port_with_thread [i]] ++;
364     
365      for (uint32_t i=0; i<_nb_icache_port; ++i)
366        if (nb_link_icache_port [i] == 0)
367          test.error(toString(_("Icache port [%d] is not link with a thread.\n"),i));
368    }
369
370    {
371      uint32_t nb_link_dcache_port [_nb_dcache_port];
372
373      for (uint32_t i=0; i<_nb_dcache_port; ++i)
374        nb_link_dcache_port [i] = 0;
375         
376      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
377        for (uint32_t j=0; j<_nb_cache_port[i]; ++j)
378        nb_link_dcache_port [_link_dcache_port_with_load_store_unit[i][j]] ++;
379     
380      for (uint32_t i=0; i<_nb_dcache_port; ++i)
381        if (nb_link_dcache_port [i] == 0)
382          test.error(toString(_("Dcache port [%d] is not link with a port of load store unit.\n"),i));
383    }
384
385
386//   public : pair_dual             * _link_context_with_thread                      ;//[nb_thread]
387//   public : pair_dual             * _link_decod_unit_with_decod_bloc               ;//[nb_decod_bloc]
388//   public : pair_dual             * _link_rename_unit_with_rename_bloc             ;//[nb_rename_bloc]
389//   public : pair_dual             * _link_read_unit_with_read_bloc                 ;//[nb_read_bloc]
390//   public : pair_dual             * _link_write_unit_with_write_bloc               ;//[nb_write_bloc]
391//   public : pair_dual             * _link_execute_unit_with_functionnal_unit       ;//[nb_functionnal_unit]
392//   public : pair_dual             * _link_execute_unit_with_load_store_unit        ;//[nb_load_store_unit]
393//   public : uint32_t              * _link_decod_bloc_with_thread                   ;//[nb_thread]
394//   public : uint32_t              * _link_rename_bloc_with_front_end               ;//[nb_front_end]
395//   public : bool                *** _table_dispatch                                ;//[nb_ooo_engine][nb_inst_issue][nb_read_bloc]
396//   public : bool                 ** _link_read_bloc_and_load_store_unit            ;//[nb_read_bloc][nb_load_store_unit]
397//   public : bool                 ** _link_read_bloc_and_functionnal_unit           ;//[nb_read_bloc][nb_functionnal_unit]
398//   public : bool                 ** _link_write_bloc_and_load_store_unit           ;//[nb_write_bloc][nb_load_store_unit]
399//   public : bool                 ** _link_write_bloc_and_functionnal_unit          ;//[nb_write_bloc][nb_functionnal_unit]
400//   public : uint32_t              * _link_load_store_unit_with_thread              ;//[nb_thread]
401//   public : bool                 ** _link_thread_and_functionnal_unit              ;//[nb_thread][nb_functionnal_unit]
402//   public : uint32_t              * _link_icache_port_with_thread                  ;//[nb_thread]
403//   public : uint32_t             ** _link_dcache_port_with_load_store_unit         ;//[nb_load_store_unit][nb_cache_port]
404
405    log_end(Core,FUNCTION);
406
407    return test;
408  };
409
410}; // end namespace core
411}; // end namespace behavioural
412}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.