source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Dcache_Access/SelfTest/src/main.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: 7.6 KB
Line 
1/*
2 * $Id: main.cpp 128 2009-06-26 08:43:23Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Dcache_Access/SelfTest/include/test.h"
9#include "Common/include/Max.h"
10
11#define NB_PARAMS 6
12
13void usage (int argc, char * argv[])
14{
15  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
16  err (_("list_params is :\n"));
17//err (_(" * nb_thread                                                                 (uint32_t         )\n"));
18  err (_(" * nb_execute_loop                                                           (uint32_t         )\n"));
19  err (_(" * nb_load_store_unit [nb_execute_loop]                                      (uint32_t         )\n"));
20  err (_(" * nb_cache_access    [nb_execute_loop][nb_load_store_unit]                  (uint32_t         )\n"));
21  err (_(" * nb_dcache_port                                                            (uint32_t         )\n"));
22  err (_(" * size_address                                                              (uint32_t         )\n"));
23  err (_(" * size_data                                                                 (uint32_t         )\n"));
24  err (_(" * size_thread_id     [nb_execute_loop][nb_load_store_unit]                  (uint32_t         )\n"));
25  err (_(" * size_packet_id     [nb_execute_loop][nb_load_store_unit]                  (uint32_t         )\n"));
26  err (_(" * table_routing      [nb_execute_loop][nb_load_store_unit][nb_cache_access] (uint32_t         )\n"));
27  err (_(" * priority                                                                  (Tpriority_t      )\n"));
28  err (_(" * load_balancing                                                            (Tload_balancing_t)\n"));
29
30  exit (1);
31}
32
33#ifndef SYSTEMC
34int main    (int argc, char * argv[])
35#else
36int sc_main (int argc, char * argv[])
37#endif
38{
39  for (int32_t i=0; i<argc; ++i)
40    msg("%s ",argv[i]);
41  msg("\n");
42
43  if (argc <= static_cast<int>(2+NB_PARAMS))
44    usage (argc, argv);
45
46  uint32_t sum_load_store_unit = 0;
47  uint32_t sum_nb_cache_access = 0;
48
49  uint32_t x = 1;
50
51  string name = argv[x++];
52
53  uint32_t             _nb_execute_loop        = fromString<uint32_t         >(argv[x++]);
54
55  if (argc <= static_cast<int>(2+NB_PARAMS+_nb_execute_loop))
56    usage (argc, argv);
57
58  uint32_t           * _nb_load_store_unit     = new uint32_t [_nb_execute_loop];
59  for (uint32_t i=0; i<_nb_execute_loop; ++i)
60    {
61      _nb_load_store_unit [i] = fromString<uint32_t>(argv[x++]);
62      sum_load_store_unit += _nb_load_store_unit [i];
63    }
64 
65  if (argc <= static_cast<int>(2+NB_PARAMS+_nb_execute_loop+3*sum_load_store_unit))
66    usage (argc, argv);
67
68  uint32_t          ** _nb_cache_access        = new uint32_t * [_nb_execute_loop];
69  for (uint32_t i=0; i<_nb_execute_loop; ++i)
70    {
71      _nb_cache_access [i] = new uint32_t [_nb_load_store_unit[i]];
72      for (uint32_t j=0; j<_nb_load_store_unit[i]; ++j)
73        {
74          _nb_cache_access [i][j] = fromString<uint32_t>(argv[x++]);
75          sum_nb_cache_access += _nb_cache_access [i][j];
76        }
77    }
78
79  if (argc != static_cast<int>(2+NB_PARAMS+_nb_execute_loop+3*sum_load_store_unit+sum_nb_cache_access))
80    usage (argc, argv);
81
82  uint32_t             _nb_dcache_port         = fromString<uint32_t         >(argv[x++]);
83  uint32_t             _size_address           = fromString<uint32_t         >(argv[x++]);
84  uint32_t             _size_data              = fromString<uint32_t         >(argv[x++]);
85
86 
87  uint32_t          ** _size_thread_id         = new uint32_t *  [_nb_execute_loop];
88  uint32_t          ** _size_packet_id         = new uint32_t *  [_nb_execute_loop];
89  uint32_t         *** _table_routing          = new uint32_t ** [_nb_execute_loop];
90  for (uint32_t i=0; i<_nb_execute_loop; i++)
91    {
92      _size_thread_id [i] = new uint32_t   [_nb_load_store_unit [i]];
93      _size_packet_id [i] = new uint32_t   [_nb_load_store_unit [i]];
94      _table_routing  [i] = new uint32_t * [_nb_load_store_unit [i]];
95
96      for (uint32_t j=0; j<_nb_load_store_unit [i]; ++j)
97        _table_routing  [i][j] = new uint32_t [_nb_cache_access [i][j]];
98    }
99
100  for (uint32_t i=0; i<_nb_execute_loop; i++)
101    for (uint32_t j=0; j<_nb_load_store_unit [i]; ++j)
102      _size_thread_id [i][j] = fromString<uint32_t>(argv[x++]);
103
104  for (uint32_t i=0; i<_nb_execute_loop; i++)
105    for (uint32_t j=0; j<_nb_load_store_unit [i]; ++j)
106      _size_packet_id [i][j] = fromString<uint32_t>(argv[x++]);
107
108  for (uint32_t i=0; i<_nb_execute_loop; i++)
109    for (uint32_t j=0; j<_nb_load_store_unit [i]; ++j)
110      for (uint32_t k=0; k<_nb_cache_access [i][j]; ++k)
111        _table_routing [i][j][k] = fromString<uint32_t>(argv[x++]);
112
113  Tpriority_t          _priority               = fromString<Tpriority_t      >(argv[x++]);
114  Tload_balancing_t    _load_balancing         = fromString<Tload_balancing_t>(argv[x++]);
115
116  uint32_t           * _nb_context             = new uint32_t [_nb_execute_loop];
117  for (uint32_t i=0; i<_nb_execute_loop; ++i)
118    _nb_context [i] = 1<<max<uint32_t>(_size_thread_id[i],_nb_load_store_unit[i]);
119
120  uint32_t             _nb_thread               = 0;
121  uint32_t         *** _translate_load_store_unit_to_thread = new uint32_t ** [_nb_execute_loop];
122
123  for (uint32_t i=0; i<_nb_execute_loop; ++i)
124    {
125      _translate_load_store_unit_to_thread[i] = new uint32_t * [_nb_load_store_unit[i]];
126      for (uint32_t j=0; j<_nb_load_store_unit [i]; ++j)
127        {
128          _translate_load_store_unit_to_thread[i][j] = new uint32_t [_nb_context[i]];
129          for (uint32_t k=0; k<_nb_context[i]; ++k)
130            _translate_load_store_unit_to_thread[i][j][k] = _nb_thread ++;
131        }
132    }
133
134  uint32_t _size_dcache_thread_id  = log2(_nb_thread);
135  uint32_t _size_dcache_packet_id  = (log2(max<uint32_t>(_nb_cache_access,_nb_execute_loop,_nb_load_store_unit)) +
136                                      max<uint32_t>(_size_packet_id,_nb_execute_loop,_nb_load_store_unit));
137 
138  int _return = EXIT_SUCCESS;
139  try 
140    {
141      morpheo::behavioural::core::dcache_access::Parameters * param = new morpheo::behavioural::core::dcache_access::Parameters
142        (_nb_thread              ,
143         _nb_execute_loop        ,
144         _nb_load_store_unit     ,
145         _nb_context             ,
146         _nb_cache_access        ,
147         _nb_dcache_port         ,
148         _size_address           ,
149         _size_data              ,
150         _size_dcache_thread_id  ,
151         _size_dcache_packet_id  ,
152         _size_thread_id         ,
153         _size_packet_id         ,
154         _table_routing          ,
155         _priority               ,
156         _load_balancing         ,
157         _translate_load_store_unit_to_thread
158         );
159     
160      test (name,param);
161
162      delete param;
163    }
164  catch (morpheo::ErrorMorpheo & error)
165    {
166      msg (_("%s\n"), error.what ());
167      _return = EXIT_FAILURE;
168    }
169 
170  try 
171    {
172      if (_return == EXIT_SUCCESS)
173        TEST_OK("Dcache_Access : no error");
174      else
175        TEST_KO("Dcache_Access : a lot of error");
176    }
177  catch (morpheo::ErrorMorpheo & error)
178    {
179//       msg (_("<%s> :\n%s"),name.c_str(), error.what ());
180      _return = EXIT_FAILURE;
181    }
182
183  delete [] _nb_context;
184
185  for (uint32_t i=0; i<_nb_execute_loop; ++i)
186    {
187      for (uint32_t j=0; j<_nb_load_store_unit [i]; ++j)
188        delete [] _translate_load_store_unit_to_thread[i][j];
189      delete [] _translate_load_store_unit_to_thread[i];
190    }
191  delete [] _translate_load_store_unit_to_thread;
192
193  for (uint32_t i=0; i<_nb_execute_loop; i++)
194    {
195      for (uint32_t j=0; j<_nb_load_store_unit [i]; ++j)
196        delete [] _table_routing  [i][j];
197
198      delete [] _size_thread_id [i];
199      delete [] _size_packet_id [i];
200      delete [] _table_routing  [i];
201    }
202  delete [] _size_thread_id;
203  delete [] _size_packet_id;
204  delete [] _table_routing ;
205
206  for (uint32_t i=0; i<_nb_execute_loop; ++i)
207    delete [] _nb_cache_access [i];
208  delete [] _nb_cache_access;
209
210  delete [] _nb_load_store_unit;
211
212  return (_return);
213}
Note: See TracBrowser for help on using the repository browser.