source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/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: 15.6 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/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/include/test.h"
10#include "Common/include/Test.h"
11#include "Behavioural/include/Allocation.h"
12
13#define NB_ITERATION  1
14#define CYCLE_MAX     (128*NB_ITERATION)
15
16#define LABEL(str...)                                                   \
17  {                                                                     \
18    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));       \
19    msg (str);                                                          \
20    msg (_("\n"));                                                      \
21  } while(0)
22
23#define SC_START(cycle_offset)                                                       \
24  do                                                                                 \
25    {                                                                                \
26      /*cout << "SC_START (begin)" << endl;*/                                        \
27                                                                                     \
28      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
29      if (cycle_offset != 0)                                                         \
30        {                                                                            \
31          cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
32        }                                                                            \
33                                                                                     \
34      if (cycle_current > CYCLE_MAX)                                                 \
35        {                                                                            \
36          TEST_KO("Maximal cycles Reached");                                         \
37        }                                                                            \
38                                                                                     \
39      sc_start(cycle_offset);                                                        \
40                                                                                     \
41      /*cout << "SC_START (end  )" << endl;*/                                        \
42    } while(0)
43
44void test (string name,
45           morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_glue::Parameters * _param)
46{
47  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
48
49#ifdef STATISTICS
50  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
51#endif
52
53  Branch_Target_Buffer_Glue * _Branch_Target_Buffer_Glue = new Branch_Target_Buffer_Glue (name.c_str(),
54#ifdef STATISTICS
55                                             _parameters_statistics,
56#endif
57                                             _param);
58 
59#ifdef SYSTEMC
60  /*********************************************************************
61   * Déclarations des signaux
62   *********************************************************************/
63  string rename;
64
65  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
66  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
67
68  ALLOC1_SC_SIGNAL( in_PREDICT_VAL                  ," in_PREDICT_VAL                  ",Tcontrol_t         ,_param->_nb_inst_predict);
69  ALLOC1_SC_SIGNAL(out_PREDICT_ACK                  ,"out_PREDICT_ACK                  ",Tcontrol_t         ,_param->_nb_inst_predict);
70  ALLOC1_SC_SIGNAL(out_PREDICT_HIT                  ,"out_PREDICT_HIT                  ",Tcontrol_t         ,_param->_nb_inst_predict);
71  ALLOC1_SC_SIGNAL(out_PREDICT_ADDRESS_SRC          ,"out_PREDICT_ADDRESS_SRC          ",Tgeneral_data_t    ,_param->_nb_inst_predict);
72  ALLOC1_SC_SIGNAL(out_PREDICT_ADDRESS_DEST         ,"out_PREDICT_ADDRESS_DEST         ",Tgeneral_data_t    ,_param->_nb_inst_predict);
73  ALLOC1_SC_SIGNAL(out_PREDICT_CONDITION            ,"out_PREDICT_CONDITION            ",Tbranch_condition_t,_param->_nb_inst_predict);
74  ALLOC1_SC_SIGNAL(out_PREDICT_LAST_TAKE            ,"out_PREDICT_LAST_TAKE            ",Tcontrol_t         ,_param->_nb_inst_predict);
75  ALLOC1_SC_SIGNAL(out_PREDICT_IS_ACCURATE          ,"out_PREDICT_IS_ACCURATE          ",Tcontrol_t         ,_param->_nb_inst_predict);
76  ALLOC1_SC_SIGNAL(out_PREDICT_REGISTER_VAL         ,"out_PREDICT_REGISTER_VAL         ",Tcontrol_t         ,_param->_nb_inst_predict);
77  ALLOC1_SC_SIGNAL( in_PREDICT_REGISTER_ACK         ," in_PREDICT_REGISTER_ACK         ",Tcontrol_t         ,_param->_nb_inst_predict);
78  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_HIT         ," in_PREDICT_REGISTER_HIT         ",Tcontrol_t         ,_param->_nb_inst_predict,_param->_associativity);
79  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_ADDRESS_SRC ," in_PREDICT_REGISTER_ADDRESS_SRC ",Tgeneral_data_t    ,_param->_nb_inst_predict,_param->_associativity);
80  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_ADDRESS_DEST," in_PREDICT_REGISTER_ADDRESS_DEST",Tgeneral_data_t    ,_param->_nb_inst_predict,_param->_associativity);
81  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_CONDITION   ," in_PREDICT_REGISTER_CONDITION   ",Tbranch_condition_t,_param->_nb_inst_predict,_param->_associativity);
82  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_LAST_TAKE   ," in_PREDICT_REGISTER_LAST_TAKE   ",Tcontrol_t         ,_param->_nb_inst_predict,_param->_associativity);
83  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_IS_ACCURATE ," in_PREDICT_REGISTER_IS_ACCURATE ",Tcontrol_t         ,_param->_nb_inst_predict,_param->_associativity);
84  ALLOC1_SC_SIGNAL( in_PREDICT_SORT_VAL             ," in_PREDICT_SORT_VAL             ",Tptr_t             ,_param->_nb_inst_predict);
85  ALLOC1_SC_SIGNAL( in_PREDICT_SORT_INDEX           ," in_PREDICT_SORT_INDEX           ",Tptr_t             ,_param->_nb_inst_predict);
86  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_VAL           ,"out_PREDICT_VICTIM_VAL           ",Tcontrol_t         ,_param->_nb_inst_predict);
87  ALLOC1_SC_SIGNAL( in_PREDICT_VICTIM_ACK           ," in_PREDICT_VICTIM_ACK           ",Tcontrol_t         ,_param->_nb_inst_predict);
88  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_HIT           ,"out_PREDICT_VICTIM_HIT           ",Tcontrol_t         ,_param->_nb_inst_predict);
89  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_ADDRESS       ,"out_PREDICT_VICTIM_ADDRESS       ",Tgeneral_data_t    ,_param->_nb_inst_predict);
90  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_INDEX         ,"out_PREDICT_VICTIM_INDEX         ",Tptr_t             ,_param->_nb_inst_predict);
91  ALLOC1_SC_SIGNAL( in_PREDICT_VICTIM_VICTIM        ,"out_PREDICT_VICTIM_VICTIM        ",Tptr_t             ,_param->_nb_inst_predict);
92  ALLOC1_SC_SIGNAL( in_DECOD_VAL                    ," in_DECOD_VAL                    ",Tcontrol_t         ,_param->_nb_inst_decod);
93  ALLOC1_SC_SIGNAL(out_DECOD_ACK                    ,"out_DECOD_ACK                    ",Tcontrol_t         ,_param->_nb_inst_decod);
94  ALLOC1_SC_SIGNAL( in_DECOD_ADDRESS_SRC            ," in_DECOD_ADDRESS_SRC            ",Tgeneral_data_t    ,_param->_nb_inst_decod);
95  ALLOC1_SC_SIGNAL(out_DECOD_REGISTER_VAL           ,"out_DECOD_REGISTER_VAL           ",Tcontrol_t         ,_param->_nb_inst_decod);
96  ALLOC1_SC_SIGNAL( in_DECOD_REGISTER_ACK           ," in_DECOD_REGISTER_ACK           ",Tcontrol_t         ,_param->_nb_inst_decod);
97  ALLOC1_SC_SIGNAL(out_DECOD_VICTIM_VAL             ,"out_DECOD_VICTIM_VAL             ",Tcontrol_t         ,_param->_nb_inst_decod);
98  ALLOC1_SC_SIGNAL( in_DECOD_VICTIM_ACK             ," in_DECOD_VICTIM_ACK             ",Tcontrol_t         ,_param->_nb_inst_decod);
99  ALLOC1_SC_SIGNAL(out_DECOD_VICTIM_ADDRESS         ,"out_DECOD_VICTIM_ADDRESS         ",Tgeneral_data_t    ,_param->_nb_inst_decod);
100  ALLOC1_SC_SIGNAL( in_UPDATE_VAL                   ," in_UPDATE_VAL                   ",Tcontrol_t         ,_param->_nb_inst_update);
101  ALLOC1_SC_SIGNAL(out_UPDATE_ACK                   ,"out_UPDATE_ACK                   ",Tcontrol_t         ,_param->_nb_inst_update);
102  ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS_SRC           ," in_UPDATE_ADDRESS_SRC           ",Tgeneral_data_t    ,_param->_nb_inst_update);
103  ALLOC1_SC_SIGNAL(out_UPDATE_REGISTER_VAL          ,"out_UPDATE_REGISTER_VAL          ",Tcontrol_t         ,_param->_nb_inst_update);
104  ALLOC1_SC_SIGNAL( in_UPDATE_REGISTER_ACK          ," in_UPDATE_REGISTER_ACK          ",Tcontrol_t         ,_param->_nb_inst_update);
105  ALLOC1_SC_SIGNAL(out_UPDATE_VICTIM_VAL            ,"out_UPDATE_VICTIM_VAL            ",Tcontrol_t         ,_param->_nb_inst_update);
106  ALLOC1_SC_SIGNAL( in_UPDATE_VICTIM_ACK            ," in_UPDATE_VICTIM_ACK            ",Tcontrol_t         ,_param->_nb_inst_update);
107  ALLOC1_SC_SIGNAL(out_UPDATE_VICTIM_ADDRESS        ,"out_UPDATE_VICTIM_ADDRESS        ",Tgeneral_data_t    ,_param->_nb_inst_update);
108 
109  /********************************************************
110   * Instanciation
111   ********************************************************/
112 
113  msg(_("<%s> : Instanciation of _Branch_Target_Buffer_Glue.\n"),name.c_str());
114
115  (*(_Branch_Target_Buffer_Glue->in_CLOCK))        (*(in_CLOCK));
116  (*(_Branch_Target_Buffer_Glue->in_NRESET))       (*(in_NRESET));
117 
118  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_VAL                  ,_param->_nb_inst_predict);
119  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_ACK                  ,_param->_nb_inst_predict);
120  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_HIT                  ,_param->_nb_inst_predict);
121  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_ADDRESS_SRC          ,_param->_nb_inst_predict);
122  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_ADDRESS_DEST         ,_param->_nb_inst_predict);
123  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_CONDITION            ,_param->_nb_inst_predict);
124  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_LAST_TAKE            ,_param->_nb_inst_predict);
125  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_IS_ACCURATE          ,_param->_nb_inst_predict);
126  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_REGISTER_VAL         ,_param->_nb_inst_predict);
127  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_ACK         ,_param->_nb_inst_predict);
128  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_HIT         ,_param->_nb_inst_predict,_param->_associativity);
129  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_ADDRESS_SRC ,_param->_nb_inst_predict,_param->_associativity);
130  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_ADDRESS_DEST,_param->_nb_inst_predict,_param->_associativity);
131  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_CONDITION   ,_param->_nb_inst_predict,_param->_associativity);
132  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_LAST_TAKE   ,_param->_nb_inst_predict,_param->_associativity);
133  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_IS_ACCURATE ,_param->_nb_inst_predict,_param->_associativity);
134  if (_param->_have_port_victim)
135    {
136  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_SORT_VAL             ,_param->_nb_inst_predict);
137  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_SORT_INDEX           ,_param->_nb_inst_predict);
138  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_VAL           ,_param->_nb_inst_predict);
139  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_VICTIM_ACK           ,_param->_nb_inst_predict);
140  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_HIT           ,_param->_nb_inst_predict);
141  if (not _param->_is_full_associative)
142  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_ADDRESS       ,_param->_nb_inst_predict);
143  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_INDEX         ,_param->_nb_inst_predict);
144  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_VICTIM_VICTIM        ,_param->_nb_inst_predict);
145    }
146  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_VAL                    ,_param->_nb_inst_decod);
147  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_ACK                    ,_param->_nb_inst_decod);
148  if (not _param->_is_full_associative)
149  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_ADDRESS_SRC            ,_param->_nb_inst_decod);
150  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_REGISTER_VAL           ,_param->_nb_inst_decod);
151  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_REGISTER_ACK           ,_param->_nb_inst_decod);
152  if (_param->_have_port_victim)
153    {
154  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_VICTIM_VAL             ,_param->_nb_inst_decod);
155  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_VICTIM_ACK             ,_param->_nb_inst_decod);
156  if (not _param->_is_full_associative)
157  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_VICTIM_ADDRESS         ,_param->_nb_inst_decod);
158    }
159  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_VAL                   ,_param->_nb_inst_update);
160  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_ACK                   ,_param->_nb_inst_update);
161  if (not _param->_is_full_associative)
162  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_ADDRESS_SRC           ,_param->_nb_inst_update);
163  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_REGISTER_VAL          ,_param->_nb_inst_update);
164  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_REGISTER_ACK          ,_param->_nb_inst_update);
165  if (_param->_have_port_victim)
166    {
167  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_VICTIM_VAL            ,_param->_nb_inst_update);
168  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_VICTIM_ACK            ,_param->_nb_inst_update);
169  if (not _param->_is_full_associative)
170  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_VICTIM_ADDRESS        ,_param->_nb_inst_update);
171    }
172  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
173   
174  Time * _time = new Time();
175
176  /********************************************************
177   * Simulation - Begin
178   ********************************************************/
179
180  // Initialisation
181
182  const uint32_t seed = 0;
183//const uint32_t seed = static_cast<uint32_t>(time(NULL));
184
185  srand(seed);
186
187  SC_START(0);
188  LABEL("Initialisation");
189
190  LABEL("Reset");
191  in_NRESET->write(0);
192  SC_START(5);
193  in_NRESET->write(1); 
194
195  LABEL("Loop of Test");
196
197  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
198    {
199      LABEL("Iteration %d",iteration);
200
201      SC_START(1);
202    }
203
204  /********************************************************
205   * Simulation - End
206   ********************************************************/
207
208  TEST_OK ("End of Simulation");
209  delete _time;
210
211  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
212
213  delete in_CLOCK;
214  delete in_NRESET;
215
216  delete []  in_PREDICT_VAL                  ;
217  delete [] out_PREDICT_ACK                  ;
218  delete [] out_PREDICT_HIT                  ;
219  delete [] out_PREDICT_ADDRESS_SRC          ;
220  delete [] out_PREDICT_ADDRESS_DEST         ;
221  delete [] out_PREDICT_CONDITION            ;
222  delete [] out_PREDICT_LAST_TAKE            ;
223  delete [] out_PREDICT_IS_ACCURATE          ;
224  delete [] out_PREDICT_REGISTER_VAL         ;
225  delete []  in_PREDICT_REGISTER_ACK         ;
226  delete []  in_PREDICT_REGISTER_HIT         ;
227  delete []  in_PREDICT_REGISTER_ADDRESS_SRC ;
228  delete []  in_PREDICT_REGISTER_ADDRESS_DEST;
229  delete []  in_PREDICT_REGISTER_CONDITION   ;
230  delete []  in_PREDICT_REGISTER_LAST_TAKE   ;
231  delete []  in_PREDICT_REGISTER_IS_ACCURATE ;
232  delete []  in_PREDICT_SORT_VAL             ;
233  delete []  in_PREDICT_SORT_INDEX           ;
234  delete [] out_PREDICT_VICTIM_VAL           ;
235  delete []  in_PREDICT_VICTIM_ACK           ;
236  delete [] out_PREDICT_VICTIM_HIT           ;
237  delete [] out_PREDICT_VICTIM_ADDRESS       ;
238  delete [] out_PREDICT_VICTIM_INDEX         ;
239  delete []  in_PREDICT_VICTIM_VICTIM        ;
240  delete []  in_DECOD_VAL                    ;
241  delete [] out_DECOD_ACK                    ;
242  delete []  in_DECOD_ADDRESS_SRC            ;
243  delete [] out_DECOD_REGISTER_VAL           ;
244  delete []  in_DECOD_REGISTER_ACK           ;
245  delete [] out_DECOD_VICTIM_VAL             ;
246  delete []  in_DECOD_VICTIM_ACK             ;
247  delete [] out_DECOD_VICTIM_ADDRESS         ;
248  delete []  in_UPDATE_VAL                   ;
249  delete [] out_UPDATE_ACK                   ;
250  delete []  in_UPDATE_ADDRESS_SRC           ;
251  delete [] out_UPDATE_REGISTER_VAL          ;
252  delete []  in_UPDATE_REGISTER_ACK          ;
253  delete [] out_UPDATE_VICTIM_VAL            ;
254  delete []  in_UPDATE_VICTIM_ACK            ;
255  delete [] out_UPDATE_VICTIM_ADDRESS        ;
256
257#endif
258
259  delete _Branch_Target_Buffer_Glue;
260#ifdef STATISTICS
261  delete _parameters_statistics;
262#endif
263}
Note: See TracBrowser for help on using the repository browser.