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

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 5.2 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/Icache_Access/SelfTest/include/test.h"
9#include "Common/include/Max.h"
10
11#define NB_PARAMS 5
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_front_end                              (uint32_t         )\n"));
18  err (_(" * nb_context     [nb_front_end]             (uint32_t         )\n"));
19  err (_(" * nb_icache_port                            (uint32_t         )\n"));
20  err (_(" * size_address                              (uint32_t         )\n"));
21  err (_(" * nb_instruction [nb_front_end][nb_context] (uint32_t         )\n"));
22  err (_(" * size_packet_id [nb_front_end][nb_context] (uint32_t         )\n"));
23  err (_(" * table_routing  [nb_front_end][nb_context] (uint32_t         )\n"));
24  err (_(" * priority                                  (Tpriority_t      )\n"));
25  err (_(" * load_balancing                            (Tload_balancing_t)\n"));
26
27  exit (1);
28}
29
30#ifndef SYSTEMC
31int main    (int argc, char * argv[])
32#else
33int sc_main (int argc, char * argv[])
34#endif
35{
36  if (argc <= static_cast<int>(2+NB_PARAMS))
37    usage (argc, argv);
38
39  uint32_t x = 1;
40
41  string name = argv[x++];
42
43  uint32_t             _nb_front_end           = fromString<uint32_t         >(argv[x++]);
44
45  if (argc <= static_cast<int>(2+NB_PARAMS+_nb_front_end))
46    usage (argc, argv);
47
48  uint32_t             _sum_nb_context         = 0;
49  uint32_t           * _nb_context             = new uint32_t [_nb_front_end];
50  for (uint32_t i=0; i<_nb_front_end; i++)
51    {
52      _nb_context [i] = fromString<uint32_t>(argv[x++]);
53      _sum_nb_context += _nb_context [i];
54    }
55
56  if (argc != static_cast<int>(2+NB_PARAMS+_nb_front_end+3*_sum_nb_context))
57    usage (argc, argv);
58     
59  uint32_t             _nb_icache_port         = fromString<uint32_t         >(argv[x++]);
60  uint32_t             _size_address           = fromString<uint32_t         >(argv[x++]);
61
62  uint32_t          ** _nb_instruction         = new uint32_t * [_nb_front_end];
63  uint32_t          ** _size_packet_id         = new uint32_t * [_nb_front_end];
64  uint32_t          ** _table_routing          = new uint32_t * [_nb_front_end];
65
66  for (uint32_t i=0; i<_nb_front_end; i++)
67    {
68      _nb_instruction [i] = new uint32_t [_nb_context[i]];
69      _size_packet_id [i] = new uint32_t [_nb_context[i]];
70      _table_routing  [i] = new uint32_t [_nb_context[i]];
71    }
72
73  for (uint32_t i=0; i<_nb_front_end; i++)
74    for (uint32_t j=0; j<_nb_context [i]; j++)
75      _nb_instruction [i][j] = fromString<uint32_t>(argv[x++]);
76
77  for (uint32_t i=0; i<_nb_front_end; i++)
78    for (uint32_t j=0; j<_nb_context [i]; j++)
79      _size_packet_id [i][j] = fromString<uint32_t>(argv[x++]);
80 
81  for (uint32_t i=0; i<_nb_front_end; i++)
82    for (uint32_t j=0; j<_nb_context [i]; j++)
83      _table_routing  [i][j] = fromString<uint32_t>(argv[x++]);
84 
85  Tpriority_t          _priority               = fromString<Tpriority_t      >(argv[x++]);
86  Tload_balancing_t    _load_balancing         = fromString<Tload_balancing_t>(argv[x++]);
87
88  uint32_t             _size_icache_thread_id  = log2(_nb_front_end) + log2(max<uint32_t>(_nb_context,_nb_front_end));;
89  uint32_t             _size_icache_packet_id  = max<uint32_t>(_size_packet_id,_nb_front_end, _nb_context);
90
91  uint32_t             _nb_thread              = 0;
92  uint32_t          ** _translate_context_to_thread = new uint32_t * [_nb_front_end];
93
94  for (uint32_t i=0; i<_nb_front_end; i++)
95    {
96      _translate_context_to_thread [i] = new uint32_t [_nb_context[i]];
97      for (uint32_t j=0; j<_nb_context[i]; ++j)
98        _translate_context_to_thread [i][j] = _nb_thread ++;
99    }
100
101  int _return = EXIT_SUCCESS;
102  try 
103    {
104      morpheo::behavioural::core::icache_access::Parameters * param = new morpheo::behavioural::core::icache_access::Parameters
105        (_nb_thread                  ,
106         _nb_front_end               ,
107         _nb_context                 ,
108         _nb_icache_port             ,
109         _size_address               ,
110         _size_icache_thread_id      ,
111         _size_icache_packet_id      ,
112         _nb_instruction             ,
113         _size_packet_id             ,
114         _table_routing              ,
115         _priority                   ,
116         _load_balancing             ,
117         _translate_context_to_thread
118         );
119     
120      msg(_("%s"),param->print(0).c_str());
121     
122      test (name,param);
123    }
124  catch (morpheo::ErrorMorpheo & error)
125    {
126      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
127      _return = EXIT_FAILURE;
128    }
129 
130  try 
131    {
132      if (_return == EXIT_SUCCESS)
133        TEST_OK("Icache_Access : no error");
134      else
135        TEST_KO("Icache_Access : a lot of error");
136    }
137  catch (morpheo::ErrorMorpheo & error)
138    {
139//       msg (_("<%s> :\n%s"),name.c_str(), error.what ());
140      _return = EXIT_FAILURE;
141    }
142
143  delete [] _nb_context;
144  for (uint32_t i=0; i<_nb_front_end; i++)
145    {
146      delete [] _nb_instruction [i];
147      delete [] _size_packet_id [i];
148      delete [] _table_routing  [i];
149      delete [] _translate_context_to_thread [i];
150    }
151  delete [] _nb_instruction;
152  delete [] _size_packet_id;
153  delete [] _table_routing ;
154  delete [] _translate_context_to_thread;
155
156  return (_return);
157}
Note: See TracBrowser for help on using the repository browser.