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

Last change on this file since 82 was 82, checked in by rosiere, 16 years ago
  • support locale (now must "just" translate)
  • update all component with new test format
  • update all component with usage
  • New component : decod queue and prediction_unit
  • Property svn:keywords set to Id
File size: 5.9 KB
Line 
1/*
2 * $Id: test.cpp 82 2008-05-01 16:48:45Z rosiere $
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#define NB_ITERATION  1
10#define CYCLE_MAX     (128*NB_ITERATION)
11
12#include "Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/include/test.h"
13#include "Common/include/Test.h"
14
15void test (string name,
16           morpheo::behavioural::generic::victim::victim_pseudo_lru::Parameters param)
17{
18  cout << "<" << name << "> : Simulation SystemC" << endl;
19
20  try 
21    {
22      cout << param.print(1);
23      param.test();
24    }
25  catch (morpheo::ErrorMorpheo & error)
26    {
27      cout << "<" << name << "> : " <<  error.what ();
28      return;
29    }
30  catch (...)
31    {
32      cerr << "<" << name << "> : This test must generate a error" << endl;
33      exit (EXIT_FAILURE);
34    }
35
36#ifdef STATISTICS
37  morpheo::behavioural::Parameters_Statistics * param_stat = new morpheo::behavioural::Parameters_Statistics(5,50);
38#endif
39
40  Victim_Pseudo_LRU * _Victim_Pseudo_LRU = new Victim_Pseudo_LRU (name.c_str(),
41#ifdef STATISTICS
42                                                                  param_stat,
43#endif
44                                                                  &param,
45                                                                  USE_ALL);
46 
47#ifdef SYSTEMC
48  /*********************************************************************
49   * Déclarations des signaux
50   *********************************************************************/
51  sc_clock                                 CLOCK  ("clock", 1.0, 0.5);
52  sc_signal<Tcontrol_t>                    NRESET ("NRESET");
53
54  sc_signal<Tcontrol_t>                    ACCESS_VAL     [param._nb_access];
55  sc_signal<Tcontrol_t>                    ACCESS_ACK     [param._nb_access];
56  sc_signal<Taddress_t>                    ACCESS_ADDRESS [param._nb_access];
57  sc_signal<Tcontrol_t>                    ACCESS_HIT     [param._nb_access];
58  sc_signal<Tentity_t >                    ACCESS_ENTITY  [param._nb_access];
59  sc_signal<Tentity_t >                    ACCESS_VICTIM  [param._nb_access];
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_address>1)
75        (*(_Victim_Pseudo_LRU-> in_ACCESS_ADDRESS [i])) (ACCESS_ADDRESS [i]);
76        (*(_Victim_Pseudo_LRU-> in_ACCESS_HIT     [i])) (ACCESS_HIT     [i]);
77        (*(_Victim_Pseudo_LRU-> in_ACCESS_ENTITY  [i])) (ACCESS_ENTITY  [i]);
78        (*(_Victim_Pseudo_LRU->out_ACCESS_VICTIM  [i])) (ACCESS_VICTIM  [i]);
79      }
80
81  /********************************************************
82   * Simulation - Begin
83   ********************************************************/
84
85  cout << "<" << name << "> Start Simulation ............" << endl;
86  // Initialisation
87
88  sc_start(0);
89
90  bool array [param._nb_access][param._nb_entity];
91
92  for (uint32_t i=0; i<param._nb_access; i++)
93    {
94      ACCESS_VAL[i].write(0);
95    }
96
97  sc_start(5);
98  cout << "-----[ Test Update ]------------------------------" << endl;
99  for (uint32_t i=0; i<param._nb_access; i++)
100    {
101      ACCESS_VAL[i].write(1);
102      ACCESS_HIT[i].write(1);
103    }
104 
105  for (uint32_t j=0; j<param._size_table; j+=param._nb_access)
106    for (uint32_t k=0; k<param._nb_entity; k++)
107      {
108        cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
109        for (uint32_t i=0; i<param._nb_access; i++)
110          {
111           
112            Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
113            Taddress_t addr;
114            if (param._size_table>1)
115              addr = static_cast<Taddress_t>((j+i)%param._size_table);
116            else
117              addr = 0;
118            Tentity_t  entity  = (k+1)%param._nb_entity;
119            ACCESS_VAL     [i].write(val );
120            if (param._size_address>1)
121              ACCESS_ADDRESS [i].write(addr);
122            ACCESS_ENTITY  [i].write(entity);
123           
124            sc_start(0);
125            cout << "\t[" << i << "] " << val << " - " << ACCESS_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
126          }
127        sc_start(1);
128      }
129                   
130
131  for (uint32_t i=0; i<param._nb_access; i++)
132    {
133      ACCESS_VAL[i].write(0);
134    }
135
136  sc_start(5);
137
138  cout << "-----[ Test Access ]------------------------------" << endl;
139
140  for (uint32_t i=0; i<param._nb_access; i++)
141    {
142      ACCESS_HIT[i].write(0);
143    }
144 
145 
146  for (uint32_t j=0; j<param._size_table; j+=param._nb_access)
147    {
148      // init
149      memset(static_cast<void*>(array),0,param._nb_access*param._nb_entity*sizeof(bool));
150     
151      for (uint32_t k=0; k<param._nb_entity; k++)
152        {
153         
154          cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
155          for (uint32_t i=0; i<param._nb_access; i++)
156            {
157              Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
158              Taddress_t addr    ;
159              if (param._size_table>1)
160                addr = static_cast<Taddress_t>((j+i)%param._size_table);
161              else
162                addr = 0;
163              ACCESS_VAL     [i].write(val );
164              if (param._size_address>1)
165                ACCESS_ADDRESS [i].write(addr);
166             
167              sc_start(0);
168             
169              Tentity_t  entity  = ACCESS_VICTIM [i].read();
170             
171              cout << "\t[" << i << "] " << val << " - " << ACCESS_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
172             
173              TEST(bool,false,((val == true) && (array[i][entity] == true)));
174
175//            if ((val == true) && (array[i][entity] == true))
176//              {
177//                cout << "Test KO : Have already give this way" << endl;
178//                exit (1);
179//              }
180//            else
181                array[i][entity] = true;
182            }
183         
184          sc_start(1);
185         
186        }
187    }
188
189  for (uint32_t i=0; i<param._nb_access; i++)
190    {
191      ACCESS_VAL[i].write(0);
192    }
193
194  sc_start(0);
195
196  /********************************************************
197   * Simulation - End
198   ********************************************************/
199
200  cout << "<" << name << "> ............ Stop Simulation" << endl;
201
202#endif
203
204  delete _Victim_Pseudo_LRU;
205
206#ifdef STATISTICS
207  delete param_stat;
208#endif
209
210}
Note: See TracBrowser for help on using the repository browser.