source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/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: 12.3 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  1024
10#define CYCLE_MAX     (128*NB_ITERATION)
11
12#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/SelfTest/include/test.h"
13#include "Common/include/Test.h"
14#include "Common/include/BitManipulation.h"
15#include "Behavioural/include/Allocation.h"
16
17void test (string name,
18           morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::direction_glue::Parameters * _param)
19{
20  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
21
22#ifdef STATISTICS
23  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
24#endif
25
26  Direction_Glue * _Direction_Glue = new Direction_Glue
27    (name.c_str(),
28#ifdef STATISTICS
29     _parameters_statistics,
30#endif
31     _param,
32     USE_ALL);
33 
34#ifdef SYSTEMC
35  /*********************************************************************
36   * Déclarations des signaux
37   *********************************************************************/
38  string rename;
39
40  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
41  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
42
43  ALLOC1_SC_SIGNAL( in_PREDICT_VAL                  ," in_PREDICT_VAL                  ",Tcontrol_t,_param->_nb_inst_predict);
44  ALLOC1_SC_SIGNAL(out_PREDICT_ACK                  ,"out_PREDICT_ACK                  ",Tcontrol_t,_param->_nb_inst_predict);
45  ALLOC1_SC_SIGNAL( in_PREDICT_ADDRESS_SRC          ," in_PREDICT_ADDRESS_SRC          ",Taddress_t,_param->_nb_inst_predict);
46  ALLOC1_SC_SIGNAL( in_PREDICT_STATIC               ," in_PREDICT_STATIC               ",Tcontrol_t,_param->_nb_inst_predict);
47  ALLOC1_SC_SIGNAL( in_PREDICT_LAST_TAKE            ," in_PREDICT_LAST_TAKE            ",Tcontrol_t,_param->_nb_inst_predict);
48  ALLOC1_SC_SIGNAL(out_PREDICT_HISTORY              ,"out_PREDICT_HISTORY              ",Thistory_t,_param->_nb_inst_predict);
49  ALLOC1_SC_SIGNAL(out_PREDICT_DIRECTION            ,"out_PREDICT_DIRECTION            ",Tcontrol_t,_param->_nb_inst_predict);
50  ALLOC1_SC_SIGNAL(out_PREDICT_PREDICTOR_VAL        ,"out_PREDICT_PREDICTOR_VAL        ",Tcontrol_t,_param->_nb_inst_predict);
51  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_ACK        ," in_PREDICT_PREDICTOR_ACK        ",Tcontrol_t,_param->_nb_inst_predict);
52  ALLOC1_SC_SIGNAL(out_PREDICT_PREDICTOR_ADDRESS_SRC,"out_PREDICT_PREDICTOR_ADDRESS_SRC",Taddress_t,_param->_nb_inst_predict);
53  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_HISTORY    ," in_PREDICT_PREDICTOR_HISTORY    ",Thistory_t,_param->_nb_inst_predict);
54  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_DIRECTION  ," in_PREDICT_PREDICTOR_DIRECTION  ",Tcontrol_t,_param->_nb_inst_predict);
55  ALLOC1_SC_SIGNAL( in_UPDATE_VAL                   ," in_UPDATE_VAL                   ",Tcontrol_t,_param->_nb_inst_update);
56  ALLOC1_SC_SIGNAL(out_UPDATE_ACK                   ,"out_UPDATE_ACK                   ",Tcontrol_t,_param->_nb_inst_update);
57  ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS               ," in_UPDATE_ADDRESS               ",Taddress_t,_param->_nb_inst_update);
58  ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY               ," in_UPDATE_HISTORY               ",Thistory_t,_param->_nb_inst_update);
59  ALLOC1_SC_SIGNAL( in_UPDATE_DIRECTION             ," in_UPDATE_DIRECTION             ",Tcontrol_t,_param->_nb_inst_update);
60  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_VAL         ,"out_UPDATE_PREDICTOR_VAL         ",Tcontrol_t,_param->_nb_inst_update);
61  ALLOC1_SC_SIGNAL( in_UPDATE_PREDICTOR_ACK         ," in_UPDATE_PREDICTOR_ACK         ",Tcontrol_t,_param->_nb_inst_update);
62  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_ADDRESS     ,"out_UPDATE_PREDICTOR_ADDRESS     ",Taddress_t,_param->_nb_inst_update);
63  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_HISTORY     ,"out_UPDATE_PREDICTOR_HISTORY     ",Thistory_t,_param->_nb_inst_update);
64  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_DIRECTION   ,"out_UPDATE_PREDICTOR_DIRECTION   ",Tcontrol_t,_param->_nb_inst_update);
65
66  /********************************************************
67   * Instanciation
68   ********************************************************/
69 
70  msg(_("<%s> : Instanciation of _Direction_Glue.\n"),name.c_str());
71
72  (*(_Direction_Glue->in_CLOCK))        (*(in_CLOCK));
73  (*(_Direction_Glue->in_NRESET))       (*(in_NRESET));
74
75  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_VAL                  ,_param->_nb_inst_predict);
76  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_ACK                  ,_param->_nb_inst_predict);
77  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_ADDRESS_SRC          ,_param->_nb_inst_predict);
78  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_STATIC               ,_param->_nb_inst_predict);
79  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_LAST_TAKE            ,_param->_nb_inst_predict);
80  if (_param->_have_port_history)
81  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_HISTORY              ,_param->_nb_inst_predict);
82  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_DIRECTION            ,_param->_nb_inst_predict);
83  if (_param->_have_component_meta_predictor)
84    {
85  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_PREDICTOR_VAL        ,_param->_nb_inst_predict);
86  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_ACK        ,_param->_nb_inst_predict);
87  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_PREDICTOR_ADDRESS_SRC,_param->_nb_inst_predict);
88  if (_param->_have_port_history)
89  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_HISTORY    ,_param->_nb_inst_predict);
90  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_DIRECTION  ,_param->_nb_inst_predict);
91    }
92
93  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_VAL                   ,_param->_nb_inst_update );
94  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_ACK                   ,_param->_nb_inst_update );
95  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_ADDRESS               ,_param->_nb_inst_update );
96  if (_param->_have_port_history)
97  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_HISTORY               ,_param->_nb_inst_update );
98  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_DIRECTION             ,_param->_nb_inst_update );
99  if (_param->_have_component_meta_predictor)
100    {
101  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_VAL         ,_param->_nb_inst_update );
102  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_PREDICTOR_ACK         ,_param->_nb_inst_update );
103  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_ADDRESS     ,_param->_nb_inst_update );
104  if (_param->_have_port_history)
105  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_HISTORY     ,_param->_nb_inst_update );
106  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_DIRECTION   ,_param->_nb_inst_update );
107    }
108
109  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
110   
111  Time * _time = new Time();
112
113  /********************************************************
114   * Simulation - Begin
115   ********************************************************/
116
117  // Initialisation
118
119  const uint32_t seed = 0;
120//const uint32_t seed = static_cast<uint32_t>(time(NULL));
121
122  srand(seed);
123
124  SC_START(0);
125  LABEL("Initialisation");
126
127  LABEL("Reset");
128  in_NRESET->write(0);
129  SC_START(5);
130  in_NRESET->write(1); 
131
132  LABEL("Loop of Test");
133
134  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
135    {
136      LABEL("Iteration %d",iteration);
137
138      for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
139        {
140          in_PREDICT_VAL                 [i]->write(rand()%2);
141          in_PREDICT_ADDRESS_SRC         [i]->write(range<Taddress_t>(rand(),_param->_size_address));
142          in_PREDICT_STATIC              [i]->write(rand()%2);
143          in_PREDICT_LAST_TAKE           [i]->write(rand()%2);
144          in_PREDICT_PREDICTOR_ACK       [i]->write(rand()%2);
145          in_PREDICT_PREDICTOR_HISTORY   [i]->write(range<Thistory_t>(rand(),_param->_size_history));
146          in_PREDICT_PREDICTOR_DIRECTION [i]->write(rand()%2);
147        }
148
149      for (uint32_t i=0; i<_param->_nb_inst_update; i++)
150        {
151          in_UPDATE_VAL                  [i]->write(rand()%2);
152          in_UPDATE_ADDRESS              [i]->write(range<Taddress_t>(rand(),_param->_size_address));
153          in_UPDATE_HISTORY              [i]->write(range<Thistory_t>(rand(),_param->_size_history));
154          in_UPDATE_DIRECTION            [i]->write(rand()%2);
155          in_UPDATE_PREDICTOR_ACK        [i]->write(rand()%2);
156        }
157
158      SC_START(0);
159
160      for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
161        {
162          switch (_param->_predictor_scheme)
163            {
164            case PREDICTOR_NEVER_TAKE  :
165              {
166                TEST(Tcontrol_t,out_PREDICT_ACK                   [i]->read(), 1);
167                TEST(Tcontrol_t,out_PREDICT_DIRECTION             [i]->read(), 0);
168                break;
169              }
170            case PREDICTOR_ALWAYS_TAKE :
171              {
172                TEST(Tcontrol_t,out_PREDICT_ACK                   [i]->read(), 1);
173                TEST(Tcontrol_t,out_PREDICT_DIRECTION             [i]->read(), 1);
174                break;
175              }
176            case PREDICTOR_STATIC      :
177              {
178                TEST(Tcontrol_t,out_PREDICT_ACK                   [i]->read(), 1);
179                TEST(Tcontrol_t,out_PREDICT_DIRECTION             [i]->read(), in_PREDICT_STATIC               [i]->read());
180                break;
181              }
182            case PREDICTOR_LAST_TAKE   :
183              {
184                TEST(Tcontrol_t,out_PREDICT_DIRECTION             [i]->read(), in_PREDICT_LAST_TAKE            [i]->read());
185                break;
186              }
187            case PREDICTOR_COUNTER     :
188            case PREDICTOR_LOCAL       :
189            case PREDICTOR_GLOBAL      :
190            case PREDICTOR_META        :
191            case PREDICTOR_CUSTOM      :
192              {
193                TEST(Tcontrol_t,out_PREDICT_ACK                   [i]->read(), in_PREDICT_PREDICTOR_ACK        [i]->read());
194                TEST(Thistory_t,out_PREDICT_HISTORY               [i]->read(), in_PREDICT_PREDICTOR_HISTORY    [i]->read());
195                TEST(Tcontrol_t,out_PREDICT_DIRECTION             [i]->read(), in_PREDICT_PREDICTOR_DIRECTION  [i]->read());
196                TEST(Tcontrol_t,out_PREDICT_PREDICTOR_VAL         [i]->read(), in_PREDICT_VAL                  [i]->read());
197                TEST(Taddress_t,out_PREDICT_PREDICTOR_ADDRESS_SRC [i]->read(), in_PREDICT_ADDRESS_SRC          [i]->read());
198               
199                break;
200              }
201            default :
202              {
203                break;
204              }
205            }
206        }
207
208      for (uint32_t i=0; i<_param->_nb_inst_update; i++)
209        {
210
211
212          switch (_param->_predictor_scheme)
213            {
214            case PREDICTOR_COUNTER     :
215            case PREDICTOR_LOCAL       :
216            case PREDICTOR_GLOBAL      :
217            case PREDICTOR_META        :
218            case PREDICTOR_CUSTOM      :
219              {
220                TEST(Tcontrol_t,out_UPDATE_ACK                 [i]->read(), in_UPDATE_PREDICTOR_ACK [i]->read());
221                TEST(Tcontrol_t,out_UPDATE_PREDICTOR_VAL       [i]->read(), in_UPDATE_VAL           [i]->read());
222                TEST(Taddress_t,out_UPDATE_PREDICTOR_ADDRESS   [i]->read(), in_UPDATE_ADDRESS       [i]->read());
223                TEST(Thistory_t,out_UPDATE_PREDICTOR_HISTORY   [i]->read(), in_UPDATE_HISTORY       [i]->read());
224                TEST(Tcontrol_t,out_UPDATE_PREDICTOR_DIRECTION [i]->read(), in_UPDATE_DIRECTION     [i]->read());
225               
226                break;
227              }
228            case PREDICTOR_NEVER_TAKE  :
229            case PREDICTOR_ALWAYS_TAKE :
230            case PREDICTOR_STATIC      :
231            case PREDICTOR_LAST_TAKE   :
232            default :
233              {
234                TEST(Tcontrol_t,out_UPDATE_ACK                 [i]->read(), 1);
235
236                break;
237              }
238            }
239        }
240
241      SC_START(1);
242    }
243
244  /********************************************************
245   * Simulation - End
246   ********************************************************/
247
248  TEST_OK ("End of Simulation");
249  delete _time;
250
251  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
252
253  delete in_CLOCK;
254  delete in_NRESET;
255
256  delete []  in_PREDICT_VAL                  ;
257  delete [] out_PREDICT_ACK                  ;
258  delete []  in_PREDICT_ADDRESS_SRC          ;
259  delete []  in_PREDICT_STATIC               ;
260  delete []  in_PREDICT_LAST_TAKE            ;
261  delete [] out_PREDICT_HISTORY              ;
262  delete [] out_PREDICT_DIRECTION            ;
263  delete [] out_PREDICT_PREDICTOR_VAL        ;
264  delete []  in_PREDICT_PREDICTOR_ACK        ;
265  delete [] out_PREDICT_PREDICTOR_ADDRESS_SRC;
266  delete []  in_PREDICT_PREDICTOR_HISTORY    ;
267  delete []  in_PREDICT_PREDICTOR_DIRECTION  ;
268  delete []  in_UPDATE_VAL                   ;
269  delete [] out_UPDATE_ACK                   ;
270  delete []  in_UPDATE_ADDRESS               ;
271  delete []  in_UPDATE_HISTORY               ;
272  delete []  in_UPDATE_DIRECTION             ;
273  delete [] out_UPDATE_PREDICTOR_VAL         ;
274  delete []  in_UPDATE_PREDICTOR_ACK         ;
275  delete [] out_UPDATE_PREDICTOR_ADDRESS     ;
276  delete [] out_UPDATE_PREDICTOR_HISTORY     ;
277  delete [] out_UPDATE_PREDICTOR_DIRECTION   ;
278#endif
279
280  delete _Direction_Glue;
281#ifdef STATISTICS
282  delete _parameters_statistics;
283#endif
284}
Note: See TracBrowser for help on using the repository browser.