source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Dcache_Access/SelfTest/src/main.cpp @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

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