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

Last change on this file since 138 was 138, checked in by rosiere, 14 years ago

1) add counters_t type for interface
2) fix in check load in load_store_unit
3) add parameters (but not yet implemented)
4) change environment and add script (distcc_env.sh ...)
5) add warning if an unser change rename flag with l.mtspr instruction
6) ...

  • Property svn:keywords set to Id
File size: 15.1 KB
Line 
1/*
2 * $Id: Parameters_msg_error.cpp 138 2010-05-12 17:34:01Z 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    // Test if value is valid
27    {
28      // initialisation
29      uint32_t nb_link_context [_nb_front_end][max<uint32_t>(_nb_context,_nb_front_end)];
30     
31      for (uint32_t i=0; i<_nb_front_end; ++i)
32        for (uint32_t j=0; j<_nb_context[i];++j)
33          nb_link_context [i][j] = 0;
34     
35      // set link
36      for (uint32_t i=0; i<_nb_thread; ++i)
37        nb_link_context[_link_context_with_thread[i].first][_link_context_with_thread[i].second] ++;
38
39      // test
40      for (uint32_t i=0; i<_nb_front_end; ++i)
41        for (uint32_t j=0; j<_nb_context[i];++j)
42          {
43            if (nb_link_context[i][j] == 0)
44              test.error(toString(_("Context [%d][%d] is not link with a thread.\n"),i,j));
45            if (nb_link_context[i][j]  > 1)
46              test.error(toString(_("Context [%d][%d] is linked with 2 or more threads.\n"),i,j));
47          }
48    }
49
50    {
51      // initialisation
52      uint32_t nb_link_decod_unit [_nb_front_end][max<uint32_t>(_nb_decod_unit,_nb_front_end)];
53     
54      for (uint32_t i=0; i<_nb_front_end; ++i)
55        for (uint32_t j=0; j<_nb_decod_unit[i];++j)
56          nb_link_decod_unit [i][j] = 0;
57     
58      // set link
59      for (uint32_t i=0; i<_nb_decod_bloc; ++i)
60        {
61          uint32_t num_front_end  = _link_decod_unit_with_decod_bloc[i].first;
62          uint32_t num_decod_unit = _link_decod_unit_with_decod_bloc[i].second;
63
64          bool error = false;
65
66          if (num_front_end >= _nb_front_end)
67            {
68              error = true;
69              test.error(toString(_("Decod_bloc [%d] is connected with an invalid front_end (%d).\n"),i,num_front_end));
70            }
71
72          if (num_decod_unit >= _nb_decod_unit[num_front_end])
73            {
74              error = true;
75              test.error(toString(_("Decod_bloc [%d] is connected with an invalid decod_unit (%d.%d).\n"),i,num_front_end,num_decod_unit));
76            }
77
78          if (not error)
79            nb_link_decod_unit[num_front_end][num_decod_unit] ++;
80        }
81      // test
82      for (uint32_t i=0; i<_nb_front_end; ++i)
83        for (uint32_t j=0; j<_nb_decod_unit[i];++j)
84          {
85            if (nb_link_decod_unit[i][j] == 0)
86              test.error(toString(_("Decod_Unit [%d][%d] is not link with a decod_bloc.\n"),i,j));
87            if (nb_link_decod_unit[i][j]  > 1)
88              test.error(toString(_("Decod_Unit [%d][%d] is linked with 2 or more decod_bloc.\n"),i,j));
89          }
90    }
91
92    {
93      // initialisation
94      uint32_t nb_link_rename_unit [_nb_ooo_engine][max<uint32_t>(_nb_rename_unit,_nb_ooo_engine)];
95     
96      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
97        for (uint32_t j=0; j<_nb_rename_unit[i];++j)
98          nb_link_rename_unit [i][j] = 0;
99     
100      // set link
101      for (uint32_t i=0; i<_nb_rename_bloc; ++i)
102        nb_link_rename_unit[_link_rename_unit_with_rename_bloc[i].first][_link_rename_unit_with_rename_bloc[i].second] ++;
103
104      // test
105      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
106        for (uint32_t j=0; j<_nb_rename_unit[i];++j)
107          {
108            if (nb_link_rename_unit[i][j] == 0)
109              test.error(toString(_("Rename_Unit [%d][%d] is not link with a rename_bloc.\n"),i,j));
110            if (nb_link_rename_unit[i][j]  > 1)
111              test.error(toString(_("Rename_Unit [%d][%d] is linked with 2 or more rename_bloc.\n"),i,j));
112          }
113    }
114
115    {
116      // initialisation
117      uint32_t nb_link_read_unit [_nb_execute_loop][max<uint32_t>(_nb_read_unit,_nb_execute_loop)];
118     
119      for (uint32_t i=0; i<_nb_execute_loop; ++i)
120        for (uint32_t j=0; j<_nb_read_unit[i];++j)
121          nb_link_read_unit [i][j] = 0;
122     
123      // set link
124      for (uint32_t i=0; i<_nb_read_bloc; ++i)
125        nb_link_read_unit[_link_read_unit_with_read_bloc[i].first][_link_read_unit_with_read_bloc[i].second] ++;
126
127      // test
128      for (uint32_t i=0; i<_nb_execute_loop; ++i)
129        for (uint32_t j=0; j<_nb_read_unit[i];++j)
130          {
131            if (nb_link_read_unit[i][j] == 0)
132              test.error(toString(_("Read_Unit [%d][%d] is not link with a read_bloc.\n"),i,j));
133            if (nb_link_read_unit[i][j]  > 1)
134              test.error(toString(_("Read_Unit [%d][%d] is linked with 2 or more read_bloc.\n"),i,j));
135          }
136    }
137
138    {
139      // initialisation
140      uint32_t nb_link_write_unit [_nb_execute_loop][max<uint32_t>(_nb_write_unit,_nb_execute_loop)];
141     
142      for (uint32_t i=0; i<_nb_execute_loop; ++i)
143        for (uint32_t j=0; j<_nb_write_unit[i];++j)
144          nb_link_write_unit [i][j] = 0;
145     
146      // set link
147      for (uint32_t i=0; i<_nb_write_bloc; ++i)
148        nb_link_write_unit[_link_write_unit_with_write_bloc[i].first][_link_write_unit_with_write_bloc[i].second] ++;
149
150      // test
151      for (uint32_t i=0; i<_nb_execute_loop; ++i)
152        for (uint32_t j=0; j<_nb_write_unit[i];++j)
153          {
154            if (nb_link_write_unit[i][j] == 0)
155              test.error(toString(_("Write_Unit [%d][%d] is not link with a write_bloc.\n"),i,j));
156            if (nb_link_write_unit[i][j]  > 1)
157              test.error(toString(_("Write_Unit [%d][%d] is linked with 2 or more write_bloc.\n"),i,j));
158          }
159    }
160
161    {
162      // initialisation
163      uint32_t nb_link_execute_unit [_nb_execute_loop][max<uint32_t>(_nb_execute_unit,_nb_execute_loop)];
164//       uint32_t nb_functionnal_unit  [_nb_functionnal_unit];
165//       uint32_t nb_load_store_unit   [_nb_load_store_unit];
166
167//       for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
168//         nb_functionnal_unit [i] = 0;
169     
170//       for (uint32_t i=0; i<_nb_load_store_unit; ++i)
171//         nb_load_store_unit  [i] = 0;
172     
173      for (uint32_t i=0; i<_nb_execute_loop; ++i)
174        for (uint32_t j=0; j<_nb_execute_unit[i];++j)
175          nb_link_execute_unit [i][j] = 0;
176
177      // set link
178      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
179        {
180          uint32_t num_execute_loop = _link_execute_unit_with_functionnal_unit [i].first;
181          uint32_t num_execute_unit = _link_execute_unit_with_functionnal_unit [i].second;
182
183          log_printf(TRACE,Core,FUNCTION,"  * _link_execute_unit_with_functionnal_unit [%d] = %d.%d",i,num_execute_loop,num_execute_unit);
184
185          nb_link_execute_unit [num_execute_loop][num_execute_unit] ++;
186//           nb_functionnal_unit  [i] ++;
187        }
188      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
189        {
190          uint32_t num_execute_loop = _link_execute_unit_with_load_store_unit [i].first;
191          uint32_t num_execute_unit = _link_execute_unit_with_load_store_unit [i].second;
192
193          log_printf(TRACE,Core,FUNCTION,"  * _link_execute_unit_with_load_store_unit  [%d] = %d.%d",i,num_execute_loop,num_execute_unit);
194
195          nb_link_execute_unit [num_execute_loop][num_execute_unit] ++;
196//           nb_load_store_unit   [i] ++;
197        }
198
199      // test
200      for (uint32_t i=0; i<_nb_execute_loop; ++i)
201        for (uint32_t j=0; j<_nb_execute_unit[i];++j)
202          {
203            if (nb_link_execute_unit[i][j] == 0)
204              test.error(toString(_("Execute_Unit [%d][%d] is not link with a load_store_unit or functionnal_unit.\n"),i,j));
205            if (nb_link_execute_unit[i][j]  > 1)
206              test.error(toString(_("Execute_Unit [%d][%d] is linked with 2 or more time.\n"),i,j));
207          }
208
209//       for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
210//         {
211//           if (nb_functionnal_unit[i] == 0)
212//             test.error(toString(_("Functionnal_Unit [%d] is not instanced.\n"),i));
213//           if (nb_functionnal_unit[i]  > 1)
214//             test.error(toString(_("Functionnal_Unit [%d] is linked with 2 or more time.\n"),i));
215//         }
216
217//       for (uint32_t i=0; i<_nb_load_store_unit; ++i)
218//         {
219//           if (nb_load_store_unit[i] == 0)
220//             test.error(toString(_("Load_Store_Unit [%d] is not instanced.\n"),i));
221//           if (nb_load_store_unit[i]  > 1)
222//             test.error(toString(_("Load_Store_Unit [%d] is linked with 2 or more time.\n"),i));
223//         }
224    }
225   
226    {
227      bool     read_bloc_link_with_load_store_unit  [_nb_read_bloc];
228      bool     read_bloc_link_with_functionnal_unit [_nb_read_bloc];
229      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
230     
231      for (uint32_t i=0; i<_nb_read_bloc; ++i)
232        {
233          read_bloc_link_with_load_store_unit  [i] = false;
234          read_bloc_link_with_functionnal_unit [i] = false;
235        }
236      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
237        nb_link_functionnal_unit [i] = 0;
238     
239      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
240        read_bloc_link_with_load_store_unit [_link_read_bloc_with_load_store_unit[i]] = true;
241     
242      for (uint32_t i=0; i<_nb_read_bloc; ++i)
243        for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
244          if (_link_read_bloc_and_functionnal_unit [i][j])
245            {
246              nb_link_functionnal_unit [j] ++;
247              read_bloc_link_with_functionnal_unit [i] = true;
248            }
249
250      for (uint32_t i=0; i<_nb_read_bloc; ++i)
251        {
252          if (not read_bloc_link_with_load_store_unit  [i] and
253              not read_bloc_link_with_functionnal_unit [i])
254            test.error(toString(_("Read_bloc [%d] is not link with an execute_unit.\n"),i));
255          if (    read_bloc_link_with_load_store_unit  [i] and
256                  read_bloc_link_with_functionnal_unit [i])
257            test.error(toString(_("Read_bloc [%d] is linked with an load store unit and functionnal unit.\n"),i));
258        }
259      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
260        if (nb_link_functionnal_unit [i] == 0)
261          test.error(toString(_("functionnal_unit [%d] is not link with a read_bloc.\n"),i));
262    }
263
264    {
265      uint32_t nb_link_write_bloc       [_nb_write_bloc];
266      uint32_t nb_link_functionnal_unit [_nb_functionnal_unit];
267
268      for (uint32_t i=0; i<_nb_write_bloc; ++i)
269        nb_link_write_bloc [i] = 0;
270      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
271        nb_link_functionnal_unit [i] = 0;
272
273      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
274        nb_link_write_bloc [_link_write_bloc_with_load_store_unit[i]] = true;
275
276      for (uint32_t i=0; i<_nb_write_bloc; ++i)
277        for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
278          if (_link_write_bloc_and_functionnal_unit [i][j])
279            {
280              nb_link_write_bloc       [i] ++;
281              nb_link_functionnal_unit [j] ++;
282            }
283
284      for (uint32_t i=0; i<_nb_write_bloc; ++i)
285        if (nb_link_write_bloc [i] == 0)
286          test.error(toString(_("Write_bloc [%d] is not link with an execute_unit.\n"),i));
287      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
288        if (nb_link_functionnal_unit [i] == 0)
289          test.error(toString(_("functionnal_unit [%d] is not link with a write_bloc.\n"),i));
290    }
291
292    {
293      uint32_t nb_link_thread                      [_nb_thread];
294      uint32_t nb_link_load_store_unit             [_nb_load_store_unit];
295      uint32_t nb_link_functionnal_unit            [_nb_functionnal_unit];
296      bool     link_front_end_with_execute_loop    [_nb_front_end][_nb_execute_loop];
297      uint32_t nb_link_front_end_with_execute_loop [_nb_front_end];
298
299      for (uint32_t i=0; i<_nb_thread; ++i)
300        nb_link_thread [i] = 0;
301      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
302        nb_link_load_store_unit [i] = 0;
303      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
304        nb_link_functionnal_unit [i] = 0;
305      for (uint32_t i=0; i<_nb_front_end; ++i)
306        {
307          nb_link_front_end_with_execute_loop [i] = 0;
308          for (uint32_t j=0; j<_nb_execute_loop; ++j)
309            link_front_end_with_execute_loop [i][j] = false;
310        }
311
312      for (uint32_t i=0; i<_nb_thread; ++i)
313        {
314          uint32_t num_front_end = _link_context_with_thread [i].first;
315
316          {
317            uint32_t num_load_store_unit = _link_load_store_unit_with_thread [i];
318            uint32_t num_execute_loop    = _link_execute_unit_with_load_store_unit [i].first;
319           
320            nb_link_thread           [i] ++;
321            nb_link_load_store_unit  [num_load_store_unit] ++;
322
323            if (not link_front_end_with_execute_loop [num_front_end][num_execute_loop])
324              nb_link_front_end_with_execute_loop [num_front_end] ++;
325            link_front_end_with_execute_loop [num_front_end][num_execute_loop] = true;
326          }
327
328          for (uint32_t j=0; j<_nb_functionnal_unit; ++j)
329            if (_link_thread_and_functionnal_unit [i][j])
330              {
331                uint32_t num_execute_loop = _link_execute_unit_with_functionnal_unit [i].first;
332
333                nb_link_thread           [i] ++;
334                nb_link_functionnal_unit [j] ++;
335               
336                if (not link_front_end_with_execute_loop [num_front_end][num_execute_loop])
337                  nb_link_front_end_with_execute_loop [num_front_end] ++;
338                link_front_end_with_execute_loop [num_front_end][num_execute_loop] = true;
339              }
340        }
341
342      for (uint32_t i=0; i<_nb_thread; ++i)
343        if (nb_link_thread [i] < 2)
344          test.error(toString(_("Thread [%d] is not link with a load_store_unit and a functionnal_unit.\n"),i));
345      for (uint32_t i=0; i<_nb_load_store_unit; ++i)
346        if (nb_link_load_store_unit [i] == 0)
347          test.error(toString(_("Load_store_unit [%d] is not link with a thread.\n"),i));
348      for (uint32_t i=0; i<_nb_functionnal_unit; ++i)
349        if (nb_link_functionnal_unit [i] == 0)
350          test.error(toString(_("Functionnal_unit [%d] is not link with a thread.\n"),i));
351      for (uint32_t i=0; i<_nb_front_end; ++i)
352        if (nb_link_front_end_with_execute_loop [i] != 1)
353          test.error(toString(_("Front end [%d] is link with many execute_loop.\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    log_end(Core,FUNCTION);
386
387    return test;
388  };
389
390}; // end namespace core
391}; // end namespace behavioural
392}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.