source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/src/test.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: 6.3 KB
Line 
1/*
2 * $Id: test.cpp 88 2008-12-10 18:31:39Z 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  Tusage_t _usage = USE_ALL;
41
42//   _usage = usage_unset(_usage,USE_SYSTEMC              );
43//   _usage = usage_unset(_usage,USE_VHDL                 );
44//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH       );
45//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT);
46//   _usage = usage_unset(_usage,USE_POSITION             );
47//   _usage = usage_unset(_usage,USE_STATISTICS           );
48//   _usage = usage_unset(_usage,USE_INFORMATION          );
49
50  Victim_Pseudo_LRU * _Victim_Pseudo_LRU = new Victim_Pseudo_LRU
51    (name.c_str(),
52#ifdef STATISTICS
53     param_stat,
54#endif
55     &param,
56     _usage);
57 
58#ifdef SYSTEMC
59  /*********************************************************************
60   * Déclarations des signaux
61   *********************************************************************/
62  sc_clock                                 CLOCK  ("clock", 1.0, 0.5);
63  sc_signal<Tcontrol_t>                    NRESET ("NRESET");
64
65  sc_signal<Tcontrol_t>                    ACCESS_VAL     [param._nb_access];
66  sc_signal<Tcontrol_t>                    ACCESS_ACK     [param._nb_access];
67  sc_signal<Taddress_t>                    ACCESS_ADDRESS [param._nb_access];
68  sc_signal<Tcontrol_t>                    ACCESS_HIT     [param._nb_access];
69  sc_signal<Tentity_t >                    ACCESS_ENTITY  [param._nb_access];
70  sc_signal<Tentity_t >                    ACCESS_VICTIM  [param._nb_access];
71 
72  /********************************************************
73   * Instanciation
74   ********************************************************/
75 
76  cout << "<" << name << "> Instanciation of _Victim_Pseudo_LRU" << endl;
77 
78  (*(_Victim_Pseudo_LRU->in_CLOCK))        (CLOCK);
79  (*(_Victim_Pseudo_LRU->in_NRESET))       (NRESET);
80
81    for (uint32_t i=0; i<param._nb_access; i++)
82      {
83        (*(_Victim_Pseudo_LRU-> in_ACCESS_VAL     [i])) (ACCESS_VAL     [i]);
84        (*(_Victim_Pseudo_LRU->out_ACCESS_ACK     [i])) (ACCESS_ACK     [i]);
85        if (param._size_address>1)
86        (*(_Victim_Pseudo_LRU-> in_ACCESS_ADDRESS [i])) (ACCESS_ADDRESS [i]);
87        (*(_Victim_Pseudo_LRU-> in_ACCESS_HIT     [i])) (ACCESS_HIT     [i]);
88        (*(_Victim_Pseudo_LRU-> in_ACCESS_ENTITY  [i])) (ACCESS_ENTITY  [i]);
89        (*(_Victim_Pseudo_LRU->out_ACCESS_VICTIM  [i])) (ACCESS_VICTIM  [i]);
90      }
91
92  /********************************************************
93   * Simulation - Begin
94   ********************************************************/
95
96  cout << "<" << name << "> Start Simulation ............" << endl;
97  // Initialisation
98
99  sc_start(0);
100
101  bool array [param._nb_access][param._nb_entity];
102
103  for (uint32_t i=0; i<param._nb_access; i++)
104    {
105      ACCESS_VAL[i].write(0);
106    }
107
108  sc_start(5);
109  cout << "-----[ Test Update ]------------------------------" << endl;
110  for (uint32_t i=0; i<param._nb_access; i++)
111    {
112      ACCESS_VAL[i].write(1);
113      ACCESS_HIT[i].write(1);
114    }
115 
116  for (uint32_t j=0; j<param._size_table; j+=param._nb_access)
117    for (uint32_t k=0; k<param._nb_entity; k++)
118      {
119        cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
120        for (uint32_t i=0; i<param._nb_access; i++)
121          {
122           
123            Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
124            Taddress_t addr;
125            if (param._size_table>1)
126              addr = static_cast<Taddress_t>((j+i)%param._size_table);
127            else
128              addr = 0;
129            Tentity_t  entity  = (k+1)%param._nb_entity;
130            ACCESS_VAL     [i].write(val );
131            if (param._size_address>1)
132              ACCESS_ADDRESS [i].write(addr);
133            ACCESS_ENTITY  [i].write(entity);
134           
135            sc_start(0);
136            cout << "\t[" << i << "] " << val << " - " << ACCESS_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
137          }
138        sc_start(1);
139      }
140                   
141
142  for (uint32_t i=0; i<param._nb_access; i++)
143    {
144      ACCESS_VAL[i].write(0);
145    }
146
147  sc_start(5);
148
149  cout << "-----[ Test Access ]------------------------------" << endl;
150
151  for (uint32_t i=0; i<param._nb_access; i++)
152    {
153      ACCESS_HIT[i].write(0);
154    }
155 
156 
157  for (uint32_t j=0; j<param._size_table; j+=param._nb_access)
158    {
159      // init
160      memset(static_cast<void*>(array),0,param._nb_access*param._nb_entity*sizeof(bool));
161     
162      for (uint32_t k=0; k<param._nb_entity; k++)
163        {
164         
165          cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
166          for (uint32_t i=0; i<param._nb_access; i++)
167            {
168              Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
169              Taddress_t addr    ;
170              if (param._size_table>1)
171                addr = static_cast<Taddress_t>((j+i)%param._size_table);
172              else
173                addr = 0;
174              ACCESS_VAL     [i].write(val );
175              if (param._size_address>1)
176                ACCESS_ADDRESS [i].write(addr);
177             
178              sc_start(0);
179             
180              Tentity_t  entity  = ACCESS_VICTIM [i].read();
181             
182              cout << "\t[" << i << "] " << val << " - " << ACCESS_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
183             
184              TEST(bool,false,((val == true) && (array[i][entity] == true)));
185
186//            if ((val == true) && (array[i][entity] == true))
187//              {
188//                cout << "Test KO : Have already give this way" << endl;
189//                exit (1);
190//              }
191//            else
192                array[i][entity] = true;
193            }
194         
195          sc_start(1);
196         
197        }
198    }
199
200  for (uint32_t i=0; i<param._nb_access; i++)
201    {
202      ACCESS_VAL[i].write(0);
203    }
204
205  sc_start(0);
206
207  /********************************************************
208   * Simulation - End
209   ********************************************************/
210
211  cout << "<" << name << "> ............ Stop Simulation" << endl;
212
213#endif
214
215  delete _Victim_Pseudo_LRU;
216
217#ifdef STATISTICS
218  delete param_stat;
219#endif
220
221}
Note: See TracBrowser for help on using the repository browser.