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

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

1) Update Prediction Table - New architecture (systemC) done (and tested) -> need change interface in top level
2) Change documentation on VHDL generation
3) Change VHDL constant (case std_logic and std_logic_vector)

  • Property svn:keywords set to Id
File size: 6.4 KB
Line 
1/*
2 * $Id: test.cpp 95 2008-12-16 16:24:26Z 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  Time * _time = new Time();
93
94  /********************************************************
95   * Simulation - Begin
96   ********************************************************/
97
98  cout << "<" << name << "> Start Simulation ............" << endl;
99  // Initialisation
100
101  sc_start(0);
102
103  bool array [param._nb_access][param._nb_entity];
104
105  for (uint32_t i=0; i<param._nb_access; i++)
106    {
107      ACCESS_VAL[i].write(0);
108    }
109
110  sc_start(5);
111  cout << "-----[ Test Update ]------------------------------" << endl;
112  for (uint32_t i=0; i<param._nb_access; i++)
113    {
114      ACCESS_VAL[i].write(1);
115      ACCESS_HIT[i].write(1);
116    }
117 
118  for (uint32_t j=0; j<param._size_table; j+=param._nb_access)
119    for (uint32_t k=0; k<param._nb_entity; k++)
120      {
121        cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
122        for (uint32_t i=0; i<param._nb_access; i++)
123          {
124           
125            Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
126            Taddress_t addr;
127            if (param._size_table>1)
128              addr = static_cast<Taddress_t>((j+i)%param._size_table);
129            else
130              addr = 0;
131            Tentity_t  entity  = (k+1)%param._nb_entity;
132            ACCESS_VAL     [i].write(val );
133            if (param._size_address>1)
134              ACCESS_ADDRESS [i].write(addr);
135            ACCESS_ENTITY  [i].write(entity);
136           
137            sc_start(0);
138            cout << "\t[" << i << "] " << val << " - " << ACCESS_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
139          }
140        sc_start(1);
141      }
142                   
143
144  for (uint32_t i=0; i<param._nb_access; i++)
145    {
146      ACCESS_VAL[i].write(0);
147    }
148
149  sc_start(5);
150
151  cout << "-----[ Test Access ]------------------------------" << endl;
152
153  for (uint32_t i=0; i<param._nb_access; i++)
154    {
155      ACCESS_HIT[i].write(0);
156    }
157 
158 
159  for (uint32_t j=0; j<param._size_table; j+=param._nb_access)
160    {
161      // init
162      memset(static_cast<void*>(array),0,param._nb_access*param._nb_entity*sizeof(bool));
163     
164      for (uint32_t k=0; k<param._nb_entity; k++)
165        {
166         
167          cout << "time : " << static_cast<uint32_t>(sc_simulation_time()) << endl;
168          for (uint32_t i=0; i<param._nb_access; i++)
169            {
170              Tcontrol_t val     = static_cast<Tcontrol_t>((j+i)<param._size_table);
171              Taddress_t addr    ;
172              if (param._size_table>1)
173                addr = static_cast<Taddress_t>((j+i)%param._size_table);
174              else
175                addr = 0;
176              ACCESS_VAL     [i].write(val );
177              if (param._size_address>1)
178                ACCESS_ADDRESS [i].write(addr);
179             
180              sc_start(0);
181             
182              Tentity_t  entity  = ACCESS_VICTIM [i].read();
183             
184              cout << "\t[" << i << "] " << val << " - " << ACCESS_ACK[i].read() << " addr : " << addr << " -> " << entity << endl;
185             
186              TEST(bool,false,((val == true) && (array[i][entity] == true)));
187
188//            if ((val == true) && (array[i][entity] == true))
189//              {
190//                cout << "Test KO : Have already give this way" << endl;
191//                exit (1);
192//              }
193//            else
194                array[i][entity] = true;
195            }
196         
197          sc_start(1);
198         
199        }
200    }
201
202  for (uint32_t i=0; i<param._nb_access; i++)
203    {
204      ACCESS_VAL[i].write(0);
205    }
206
207  sc_start(0);
208
209  /********************************************************
210   * Simulation - End
211   ********************************************************/
212
213  cout << "<" << name << "> ............ Stop Simulation" << endl;
214  delete _time;
215
216#endif
217
218  delete _Victim_Pseudo_LRU;
219
220#ifdef STATISTICS
221  delete param_stat;
222#endif
223
224}
Note: See TracBrowser for help on using the repository browser.