source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/src/test.cpp @ 44

Last change on this file since 44 was 44, checked in by rosiere, 17 years ago

Modification des classes d'encapsulation des interfaces.
Stable sur tous les composants actuels

File size: 6.1 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#include "Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/include/test.h"
10#include "Common/include/Test.h"
11
12void test (string name,
13           morpheo::behavioural::generic::victim::victim_pseudo_lru::Parameters param)
14{
15  cout << "<" << name << "> : Simulation SystemC" << endl;
16
17  if (param._nb_update < 1)
18    {
19      cerr << "<" << name << "> : To test, need a less one update's port" << endl;
20      exit (EXIT_FAILURE);
21    }
22 
23  try 
24    {
25      cout << param.print(1);
26      param.test();
27    }
28  catch (morpheo::ErrorMorpheo & error)
29    {
30      cout << "<" << name << "> : " <<  error.what ();
31      return;
32    }
33  catch (...)
34    {
35      cerr << "<" << name << "> : This test must generate a error" << endl;
36      exit (EXIT_FAILURE);
37    }
38  Victim_Pseudo_LRU * _Victim_Pseudo_LRU = new Victim_Pseudo_LRU (name.c_str(),
39#ifdef STATISTICS
40                                             morpheo::behavioural::Parameters_Statistics(5,50),
41#endif
42                                             param);
43 
44#ifdef SYSTEMC
45  /*********************************************************************
46   * Déclarations des signaux
47   *********************************************************************/
48  sc_clock                                 CLOCK  ("clock", 1.0, 0.5);
49  sc_signal<Tcontrol_t>                    NRESET ("NRESET");
50
51  sc_signal<Tcontrol_t>                    ACCESS_VAL     [param._nb_access];
52  sc_signal<Tcontrol_t>                    ACCESS_ACK     [param._nb_access];
53  sc_signal<Taddress_t>                    ACCESS_ADDRESS [param._nb_access];
54  sc_signal<Tentity_t >                    ACCESS_ENTITY  [param._nb_access];
55 
56  sc_signal<Tcontrol_t>                    UPDATE_VAL     [param._nb_update];
57  sc_signal<Tcontrol_t>                    UPDATE_ACK     [param._nb_update];
58  sc_signal<Taddress_t>                    UPDATE_ADDRESS [param._nb_update];
59  sc_signal<Tentity_t >                    UPDATE_ENTITY  [param._nb_update];
60 
61  /********************************************************
62   * Instanciation
63   ********************************************************/
64 
65  cout << "<" << name << "> Instanciation of _Victim_Pseudo_LRU" << endl;
66 
67  (*(_Victim_Pseudo_LRU->in_CLOCK))        (CLOCK);
68  (*(_Victim_Pseudo_LRU->in_NRESET))       (NRESET);
69
70    for (uint32_t i=0; i<param._nb_access; i++)
71      {
72        (*(_Victim_Pseudo_LRU-> in_ACCESS_VAL     [i])) (ACCESS_VAL     [i]);
73        (*(_Victim_Pseudo_LRU->out_ACCESS_ACK     [i])) (ACCESS_ACK     [i]);
74        if (param._size_table>1)
75        (*(_Victim_Pseudo_LRU-> in_ACCESS_ADDRESS [i])) (ACCESS_ADDRESS [i]);
76        (*(_Victim_Pseudo_LRU->out_ACCESS_ENTITY  [i])) (ACCESS_ENTITY  [i]);
77      }
78
79    for (uint32_t i=0; i<param._nb_update; i++)
80      {
81        (*(_Victim_Pseudo_LRU-> in_UPDATE_VAL     [i])) (UPDATE_VAL     [i]);
82        (*(_Victim_Pseudo_LRU->out_UPDATE_ACK     [i])) (UPDATE_ACK     [i]);
83        if (param._size_table>1)
84        (*(_Victim_Pseudo_LRU-> in_UPDATE_ADDRESS [i])) (UPDATE_ADDRESS [i]);
85        (*(_Victim_Pseudo_LRU-> in_UPDATE_ENTITY  [i])) (UPDATE_ENTITY  [i]);
86      }
87  /********************************************************
88   * Simulation - Begin
89   ********************************************************/
90
91  cout << "<" << name << "> Start Simulation ............" << endl;
92  // Initialisation
93
94  sc_start(0);
95
96  bool array [param._nb_access][param._nb_entity];
97
98  for (uint32_t i=0; i<param._nb_access; i++)
99    {
100      ACCESS_VAL[i].write(0);
101    }
102  for (uint32_t i=0; i<param._nb_update; i++)
103    {
104      UPDATE_VAL[i].write(0);
105    }
106
107  sc_start(5);
108  cout << "-----[ Test Update ]------------------------------" << endl;
109  for (uint32_t i=0; i<param._nb_update; i++)
110    {
111      UPDATE_VAL[i].write(1);
112    }
113 
114  for (uint32_t j=0; j<param._size_table; j+=param._nb_update)
115    for (uint32_t k=0; k<param._nb_entity; k++)
116      {
117        cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
118        for (uint32_t i=0; i<param._nb_update; i++)
119          {
120           
121            Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
122            Taddress_t addr;
123            if (param._size_table>1)
124              addr = static_cast<Taddress_t>((j+i)%param._size_table);
125            else
126              addr = 0;
127            Tentity_t  entity  = (k+1)%param._nb_entity;
128            UPDATE_VAL     [i].write(val );
129            if (param._size_table>1)
130              UPDATE_ADDRESS [i].write(addr);
131            UPDATE_ENTITY  [i].write(entity);
132           
133            sc_start(0);
134            cout << "\t[" << i << "] " << val << " - " << UPDATE_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
135          }
136        sc_start(1);
137      }
138                   
139
140  for (uint32_t i=0; i<param._nb_update; i++)
141    {
142      UPDATE_VAL[i].write(0);
143    }
144
145  sc_start(5);
146
147  cout << "-----[ Test Access ]------------------------------" << endl;
148 
149 
150  for (uint32_t j=0; j<param._size_table; j+=param._nb_access)
151    {
152      // init
153      memset(static_cast<void*>(array),0,param._nb_access*param._nb_entity*sizeof(bool));
154     
155      for (uint32_t k=0; k<param._nb_entity; k++)
156        {
157         
158          cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
159          for (uint32_t i=0; i<param._nb_access; i++)
160            {
161              Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
162              Taddress_t addr    ;
163              if (param._size_table>1)
164                addr = static_cast<Taddress_t>((j+i)%param._size_table);
165              else
166                addr = 0;
167              ACCESS_VAL     [i].write(val );
168              if (param._size_table>1)
169                ACCESS_ADDRESS [i].write(addr);
170             
171              sc_start(0);
172             
173              Tentity_t  entity  = ACCESS_ENTITY [i].read();
174             
175              cout << "\t[" << i << "] " << val << " - " << ACCESS_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
176             
177              TEST(bool,false,((val == true) && (array[i][entity] == true)));
178
179//            if ((val == true) && (array[i][entity] == true))
180//              {
181//                cout << "Test KO : Have already give this way" << endl;
182//                exit (1);
183//              }
184//            else
185                array[i][entity] = true;
186            }
187         
188          sc_start(1);
189         
190        }
191    }
192
193  for (uint32_t i=0; i<param._nb_access; i++)
194    {
195      ACCESS_VAL[i].write(0);
196    }
197
198  sc_start(0);
199
200  /********************************************************
201   * Simulation - End
202   ********************************************************/
203
204  cout << "<" << name << "> ............ Stop Simulation" << endl;
205
206#endif
207
208  delete _Victim_Pseudo_LRU;
209}
Note: See TracBrowser for help on using the repository browser.