source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/SelfTest/src/test.cpp @ 10

Last change on this file since 10 was 10, checked in by rosiere, 17 years ago
File size: 13.4 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#define NB_ITERATION 1
10
11#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/SelfTest/include/test.h"
12#include "Include/Test.h"
13
14void test (string name,
15           morpheo::behavioural::generic::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters _param)
16{
17  cout << "<" << name << "> : Simulation SystemC" << endl;
18
19  RegisterFile_Multi_Banked_Glue * _RegisterFile_Multi_Banked_Glue = new RegisterFile_Multi_Banked_Glue (name.c_str(),
20#ifdef STATISTICS
21                                             morpheo::behavioural::Parameters_Statistics(5,50),
22#endif
23                                             _param);
24 
25#ifdef SYSTEMC
26  /*********************************************************************
27   * Déclarations des signaux
28   *********************************************************************/
29  sc_clock                               * CLOCK;
30
31  sc_signal<Tcontrol_t>                 ** READ_IN_VAL       ;
32  sc_signal<Tcontrol_t>                 ** READ_IN_ACK       ;
33  sc_signal<Taddress_t>                 ** READ_IN_ADDRESS   ;
34  sc_signal<Tdata_t   >                 ** READ_IN_DATA      ;
35  sc_signal<Tcontrol_t>                 ** READ_SELECT_VAL   ;
36  sc_signal<Tcontrol_t>                 ** READ_SELECT_ACK   ;
37  sc_signal<Tcontrol_t>                *** READ_OUT_VAL      ;
38  sc_signal<Tcontrol_t>                *** READ_OUT_ACK      ;
39  sc_signal<Taddress_t>                *** READ_OUT_ADDRESS  ;
40  sc_signal<Tdata_t   >                *** READ_OUT_DATA     ;
41  sc_signal<Tcontrol_t>                 ** WRITE_IN_VAL      ;
42  sc_signal<Tcontrol_t>                 ** WRITE_IN_ACK      ;
43  sc_signal<Tcontrol_t>                 ** WRITE_SELECT_VAL  ;
44  sc_signal<Tcontrol_t>                 ** WRITE_SELECT_ACK  ;
45  sc_signal<Taddress_t>                 ** WRITE_IN_ADDRESS  ;
46  sc_signal<Tdata_t   >                 ** WRITE_IN_DATA     ;
47  sc_signal<Tcontrol_t>                *** WRITE_OUT_VAL     ;
48  sc_signal<Tcontrol_t>                *** WRITE_OUT_ACK     ;
49  sc_signal<Taddress_t>                *** WRITE_OUT_ADDRESS ;
50  sc_signal<Tdata_t   >                *** WRITE_OUT_DATA    ;
51
52  string rename;
53
54  CLOCK                                  = new sc_clock ("clock", 1.0, 0.5);
55
56  READ_IN_VAL       = new sc_signal<Tcontrol_t>           * [_param._nb_port_read];
57  READ_IN_ACK       = new sc_signal<Tcontrol_t>           * [_param._nb_port_read];
58  READ_IN_ADDRESS   = new sc_signal<Taddress_t>           * [_param._nb_port_read];
59  READ_IN_DATA      = new sc_signal<Tdata_t   >           * [_param._nb_port_read];
60  READ_SELECT_VAL   = new sc_signal<Tcontrol_t>           * [_param._nb_port_read];
61  READ_SELECT_ACK   = new sc_signal<Tcontrol_t>           * [_param._nb_port_read];
62
63  for (uint32_t i=0; i<_param._nb_port_read; i++)
64    {
65      rename = "READ_IN_VAL_"+toString(i)+"      ";
66      READ_IN_VAL       [i] = new sc_signal<Tcontrol_t> (rename.c_str());
67      rename = "READ_IN_ACK_"+toString(i)+"      ";
68      READ_IN_ACK       [i] = new sc_signal<Tcontrol_t> (rename.c_str());
69      rename = "READ_IN_ADDRESS_"+toString(i)+"  ";
70      READ_IN_ADDRESS   [i] = new sc_signal<Taddress_t> (rename.c_str());
71      rename = "READ_IN_DATA_"+toString(i)+"     ";
72      READ_IN_DATA      [i] = new sc_signal<Tdata_t   > (rename.c_str());
73      rename = "READ_SELECT_VAL_"+toString(i)+"  ";
74      READ_SELECT_VAL       [i] = new sc_signal<Tcontrol_t> (rename.c_str());
75      rename = "READ_SELECT_ACK_"+toString(i)+"  ";
76      READ_SELECT_ACK       [i] = new sc_signal<Tcontrol_t> (rename.c_str());
77    }
78                                                     
79   READ_OUT_VAL      = new sc_signal<Tcontrol_t>          ** [_param._nb_bank];
80   READ_OUT_ACK      = new sc_signal<Tcontrol_t>          ** [_param._nb_bank];
81   READ_OUT_ADDRESS  = new sc_signal<Taddress_t>          ** [_param._nb_bank];
82   READ_OUT_DATA     = new sc_signal<Tdata_t   >          ** [_param._nb_bank];
83
84   for (uint32_t i=0; i<_param._nb_bank; i++)
85     {
86       READ_OUT_VAL      [i] = new sc_signal<Tcontrol_t>          * [_param._nb_port_read_by_bank];
87       READ_OUT_ACK      [i] = new sc_signal<Tcontrol_t>          * [_param._nb_port_read_by_bank];
88       READ_OUT_ADDRESS  [i] = new sc_signal<Taddress_t>          * [_param._nb_port_read_by_bank];
89       READ_OUT_DATA     [i] = new sc_signal<Tdata_t   >          * [_param._nb_port_read_by_bank];
90       
91       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
92         {
93           rename="READ_OUT_VAL_"+toString(i)+"_"+toString(j)+"      ";
94           READ_OUT_VAL      [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
95           rename="READ_OUT_ACK_"+toString(i)+"_"+toString(j)+"      ";
96           READ_OUT_ACK      [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
97           rename="READ_OUT_ADDRESS_"+toString(i)+"_"+toString(j)+"  ";
98           READ_OUT_ADDRESS  [i][j] = new sc_signal<Taddress_t> (rename.c_str());
99           rename="READ_OUT_DATA_"+toString(i)+"_"+toString(j)+"     ";
100           READ_OUT_DATA     [i][j] = new sc_signal<Tdata_t   > (rename.c_str());
101         }
102     }
103   
104   WRITE_IN_VAL      = new sc_signal<Tcontrol_t>           * [_param._nb_port_write];
105   WRITE_IN_ACK      = new sc_signal<Tcontrol_t>           * [_param._nb_port_write];
106   WRITE_IN_ADDRESS  = new sc_signal<Taddress_t>           * [_param._nb_port_write];
107   WRITE_IN_DATA     = new sc_signal<Tdata_t   >           * [_param._nb_port_write];
108   WRITE_SELECT_VAL  = new sc_signal<Tcontrol_t>           * [_param._nb_port_write];
109   WRITE_SELECT_ACK  = new sc_signal<Tcontrol_t>           * [_param._nb_port_write];
110
111   for (uint32_t i=0; i<_param._nb_port_write; i++)
112     {
113       rename = "WRITE_IN_VAL_"+toString(i)+"     ";
114       WRITE_IN_VAL      [i] = new sc_signal<Tcontrol_t> (rename.c_str());
115       rename = "WRITE_IN_ACK_"+toString(i)+"     ";
116       WRITE_IN_ACK      [i] = new sc_signal<Tcontrol_t> (rename.c_str());
117       rename = "WRITE_IN_ADDRESS_"+toString(i)+" ";
118       WRITE_IN_ADDRESS  [i] = new sc_signal<Taddress_t> (rename.c_str());
119       rename = "WRITE_IN_DATA_"+toString(i)+"    ";
120       WRITE_IN_DATA     [i] = new sc_signal<Tdata_t   > (rename.c_str());
121
122       rename = "WRITE_SELECT_VAL_"+toString(i)+" ";
123       WRITE_SELECT_VAL  [i] = new sc_signal<Tcontrol_t> (rename.c_str());
124       rename = "WRITE_SELECT_ACK_"+toString(i)+" ";
125       WRITE_SELECT_ACK  [i] = new sc_signal<Tcontrol_t> (rename.c_str());
126     }
127     
128   WRITE_OUT_VAL     = new sc_signal<Tcontrol_t>          ** [_param._nb_bank];
129   WRITE_OUT_ACK     = new sc_signal<Tcontrol_t>          ** [_param._nb_bank];
130   WRITE_OUT_ADDRESS = new sc_signal<Taddress_t>          ** [_param._nb_bank];
131   WRITE_OUT_DATA    = new sc_signal<Tdata_t   >          ** [_param._nb_bank];
132   
133   for (uint32_t i=0; i<_param._nb_bank; i++)
134     {
135       WRITE_OUT_VAL     [i] = new sc_signal<Tcontrol_t>          * [_param._nb_port_write_by_bank];
136       WRITE_OUT_ACK     [i] = new sc_signal<Tcontrol_t>          * [_param._nb_port_write_by_bank];
137       WRITE_OUT_ADDRESS [i] = new sc_signal<Taddress_t>          * [_param._nb_port_write_by_bank];
138       WRITE_OUT_DATA    [i] = new sc_signal<Tdata_t   >          * [_param._nb_port_write_by_bank];
139       
140       for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
141         {
142           rename = "WRITE_OUT_VAL_"+toString(i)+"_"+toString(j)+"     ";
143           WRITE_OUT_VAL     [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
144           rename = "WRITE_OUT_ACK_"+toString(i)+"_"+toString(j)+"     ";
145           WRITE_OUT_ACK     [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
146           rename = "WRITE_OUT_ADDRESS_"+toString(i)+"_"+toString(j)+" ";
147           WRITE_OUT_ADDRESS [i][j] = new sc_signal<Taddress_t> (rename.c_str());
148           rename = "WRITE_OUT_DATA_"+toString(i)+"_"+toString(j)+"    ";
149           WRITE_OUT_DATA    [i][j] = new sc_signal<Tdata_t   > (rename.c_str());
150         }
151     }
152 
153  /********************************************************
154   * Instanciation
155   ********************************************************/
156 
157  cout << "<" << name << "> Instanciation of _RegisterFile_Multi_Banked_Glue" << endl;
158 
159  (*(_RegisterFile_Multi_Banked_Glue->in_CLOCK))        (*(CLOCK));
160
161   for (uint32_t i=0; i<_param._nb_port_read; i++)
162     {
163       (*(_RegisterFile_Multi_Banked_Glue-> in_READ_IN_VAL       [i]))       (*(READ_IN_VAL       [i]));
164       (*(_RegisterFile_Multi_Banked_Glue->out_READ_IN_ACK       [i]))       (*(READ_IN_ACK       [i]));
165       (*(_RegisterFile_Multi_Banked_Glue-> in_READ_IN_ADDRESS   [i]))       (*(READ_IN_ADDRESS   [i]));
166       (*(_RegisterFile_Multi_Banked_Glue->out_READ_IN_DATA      [i]))       (*(READ_IN_DATA      [i]));
167       (*(_RegisterFile_Multi_Banked_Glue-> in_READ_SELECT_VAL   [i]))       (*(READ_SELECT_VAL   [i]));
168       (*(_RegisterFile_Multi_Banked_Glue->out_READ_SELECT_ACK   [i]))       (*(READ_SELECT_ACK   [i]));
169     }
170   for (uint32_t i=0; i<_param._nb_bank; i++)
171       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
172         {
173           (*(_RegisterFile_Multi_Banked_Glue->out_READ_OUT_VAL      [i][j]))       (*(READ_OUT_VAL      [i][j]));
174           (*(_RegisterFile_Multi_Banked_Glue-> in_READ_OUT_ACK      [i][j]))       (*(READ_OUT_ACK      [i][j]));
175           (*(_RegisterFile_Multi_Banked_Glue->out_READ_OUT_ADDRESS  [i][j]))       (*(READ_OUT_ADDRESS  [i][j]));
176           (*(_RegisterFile_Multi_Banked_Glue-> in_READ_OUT_DATA     [i][j]))       (*(READ_OUT_DATA     [i][j]));
177         }
178
179   for (uint32_t i=0; i<_param._nb_port_write; i++)
180     {
181       (*(_RegisterFile_Multi_Banked_Glue-> in_WRITE_IN_VAL      [i]))       (*(WRITE_IN_VAL      [i]));
182       (*(_RegisterFile_Multi_Banked_Glue->out_WRITE_IN_ACK      [i]))       (*(WRITE_IN_ACK      [i]));
183       (*(_RegisterFile_Multi_Banked_Glue-> in_WRITE_IN_ADDRESS  [i]))       (*(WRITE_IN_ADDRESS  [i]));
184       (*(_RegisterFile_Multi_Banked_Glue-> in_WRITE_IN_DATA     [i]))       (*(WRITE_IN_DATA     [i]));
185       (*(_RegisterFile_Multi_Banked_Glue-> in_WRITE_SELECT_VAL  [i]))       (*(WRITE_SELECT_VAL  [i]));
186       (*(_RegisterFile_Multi_Banked_Glue->out_WRITE_SELECT_ACK  [i]))       (*(WRITE_SELECT_ACK  [i]));
187     }
188
189   for (uint32_t i=0; i<_param._nb_bank; i++)
190       for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
191         {
192           (*(_RegisterFile_Multi_Banked_Glue->out_WRITE_OUT_VAL     [i][j]))       (*(WRITE_OUT_VAL     [i][j]));
193           (*(_RegisterFile_Multi_Banked_Glue-> in_WRITE_OUT_ACK     [i][j]))       (*(WRITE_OUT_ACK     [i][j]));
194           (*(_RegisterFile_Multi_Banked_Glue->out_WRITE_OUT_ADDRESS [i][j]))       (*(WRITE_OUT_ADDRESS [i][j]));
195           (*(_RegisterFile_Multi_Banked_Glue->out_WRITE_OUT_DATA    [i][j]))       (*(WRITE_OUT_DATA    [i][j]));
196         }
197
198
199  /********************************************************
200   * Simulation - Begin
201   ********************************************************/
202
203  cout << "<" << name << "> Start Simulation ............" << endl;
204  // Initialisation
205
206  const uint32_t seed = 0;
207//const uint32_t seed = static_cast<uint32_t>(time(NULL));
208
209  srand(seed);
210
211  sc_start(0);
212  _RegisterFile_Multi_Banked_Glue->vhdl_testbench_label("Initialisation");
213  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
214
215
216  _RegisterFile_Multi_Banked_Glue->vhdl_testbench_label("Loop of Test");
217  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Loop of Test" << endl;
218
219  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
220    {
221      _RegisterFile_Multi_Banked_Glue->vhdl_testbench_label("Iteration "+toString(iteration));
222
223      sc_start(1);
224    }
225
226  /********************************************************
227   * Simulation - End
228   ********************************************************/
229
230  cout << "<" << name << "> ............ Stop Simulation" << endl;
231
232  delete CLOCK;
233
234  for (uint32_t i=0; i<_param._nb_port_read; i++)
235    {
236      delete READ_IN_VAL       [i];
237      delete READ_IN_ACK       [i];
238      delete READ_IN_ADDRESS   [i];
239      delete READ_IN_DATA      [i];
240      delete READ_SELECT_VAL   [i];
241      delete READ_SELECT_ACK   [i];
242    }
243                                                     
244  delete READ_IN_VAL    ;
245  delete READ_IN_ACK    ;
246  delete READ_IN_ADDRESS;
247  delete READ_IN_DATA   ;
248  delete READ_SELECT_VAL;
249  delete READ_SELECT_ACK;
250
251   for (uint32_t i=0; i<_param._nb_bank; i++)
252     {
253        for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
254          {
255            delete READ_OUT_VAL      [i][j];
256            delete READ_OUT_ACK      [i][j];
257            delete READ_OUT_ADDRESS  [i][j];
258            delete READ_OUT_DATA     [i][j];
259          }
260
261        delete READ_OUT_VAL      [i];
262        delete READ_OUT_ACK      [i];
263        delete READ_OUT_ADDRESS  [i];
264        delete READ_OUT_DATA     [i];
265     }
266
267  delete READ_OUT_VAL    ;
268  delete READ_OUT_ACK    ;
269  delete READ_OUT_ADDRESS;
270  delete READ_OUT_DATA   ;
271
272  for (uint32_t i=0; i<_param._nb_port_write; i++)
273    {
274      delete WRITE_IN_VAL      [i];
275      delete WRITE_IN_ACK      [i];
276      delete WRITE_IN_ADDRESS  [i];
277      delete WRITE_IN_DATA     [i];
278      delete WRITE_SELECT_VAL  [i];
279      delete WRITE_SELECT_ACK  [i];
280    }
281
282  delete WRITE_IN_VAL    ;
283  delete WRITE_IN_ACK    ;
284  delete WRITE_IN_ADDRESS;
285  delete WRITE_IN_DATA   ;
286  delete WRITE_SELECT_VAL;
287  delete WRITE_SELECT_ACK;
288 
289  for (uint32_t i=0; i<_param._nb_bank; i++)
290    {
291      for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
292         {
293           delete WRITE_OUT_VAL     [i][j];
294           delete WRITE_OUT_ACK     [i][j];
295           delete WRITE_OUT_ADDRESS [i][j];
296           delete WRITE_OUT_DATA    [i][j];
297         }
298     
299      delete WRITE_OUT_VAL     [i];
300      delete WRITE_OUT_ACK     [i];
301      delete WRITE_OUT_ADDRESS [i];
302      delete WRITE_OUT_DATA    [i];
303    }
304     
305  delete WRITE_OUT_VAL    ;
306  delete WRITE_OUT_ACK    ;
307  delete WRITE_OUT_ADDRESS;
308  delete WRITE_OUT_DATA   ;
309
310#endif
311
312  delete _RegisterFile_Multi_Banked_Glue;
313}
Note: See TracBrowser for help on using the repository browser.