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

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