source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 36.5 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  8
10#define CYCLE_MAX     (128*NB_ITERATION)
11
12#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/include/test.h"
13#include "Common/include/Test.h"
14#include "Behavioural/include/Allocation.h"
15
16typedef struct
17{
18  uint32_t            ufpt_ptr    ;
19  uint32_t            upt_ptr     ;
20
21  Tcontext_t          context     ;
22  Taddress_t          address_src ;
23  Taddress_t          address_dest;
24  Taddress_t          address_good;
25  Tbranch_condition_t condition   ;
26  Tcontrol_t          take        ;
27  Tcontrol_t          take_good   ;
28  Tcontrol_t          flag        ;
29  Tcontrol_t          is_accurate ;
30  Thistory_t          history     ;
31  Taddress_t          ras_address ;
32  Tptr_t              ras_index   ;
33  Tcontrol_t          miss_ifetch ;
34  Tcontrol_t          miss_decod  ;
35  Tcontrol_t          miss_commit ;
36} request_t;
37
38void test (string name,
39           morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Parameters * _param)
40{
41  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
42
43#ifdef STATISTICS
44  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
45#endif
46
47  Tusage_t _usage = USE_ALL;
48
49//   _usage = usage_unset(_usage,USE_SYSTEMC              );
50//   _usage = usage_unset(_usage,USE_VHDL                 );
51//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH       );
52//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT);
53//   _usage = usage_unset(_usage,USE_POSITION             );
54//   _usage = usage_unset(_usage,USE_STATISTICS           );
55//   _usage = usage_unset(_usage,USE_INFORMATION          );
56   
57  Update_Prediction_Table * _Update_Prediction_Table = new Update_Prediction_Table
58    (name.c_str(),
59#ifdef STATISTICS
60     _parameters_statistics,
61#endif
62     _param,
63     _usage);
64 
65#ifdef SYSTEMC
66  /*********************************************************************
67   * Déclarations des signaux
68   *********************************************************************/
69  string rename;
70
71  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
72  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
73
74  ALLOC1_SC_SIGNAL( in_PREDICT_VAL                    ," in_PREDICT_VAL                    ",Tcontrol_t         ,_param->_nb_inst_predict);
75  ALLOC1_SC_SIGNAL(out_PREDICT_ACK                    ,"out_PREDICT_ACK                    ",Tcontrol_t         ,_param->_nb_inst_predict);
76  ALLOC1_SC_SIGNAL( in_PREDICT_CONTEXT_ID             ," in_PREDICT_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_predict);
77  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC        ," in_PREDICT_BTB_ADDRESS_SRC        ",Taddress_t         ,_param->_nb_inst_predict);
78  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST       ," in_PREDICT_BTB_ADDRESS_DEST       ",Taddress_t         ,_param->_nb_inst_predict);
79  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_CONDITION          ," in_PREDICT_BTB_CONDITION          ",Tbranch_condition_t,_param->_nb_inst_predict);
80  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE          ," in_PREDICT_BTB_LAST_TAKE          ",Tcontrol_t         ,_param->_nb_inst_predict);
81  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE        ," in_PREDICT_BTB_IS_ACCURATE        ",Tcontrol_t         ,_param->_nb_inst_predict);
82  ALLOC1_SC_SIGNAL( in_PREDICT_DIR_HISTORY            ," in_PREDICT_DIR_HISTORY            ",Thistory_t         ,_param->_nb_inst_predict);
83  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS            ," in_PREDICT_RAS_ADDRESS            ",Taddress_t         ,_param->_nb_inst_predict);
84  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_INDEX              ," in_PREDICT_RAS_INDEX              ",Tptr_t             ,_param->_nb_inst_predict);
85  ALLOC1_SC_SIGNAL(out_PREDICT_UPDATE_PREDICTION_ID   ,"out_PREDICT_UPDATE_PREDICTION_ID   ",Tprediction_ptr_t  ,_param->_nb_inst_predict);
86  ALLOC1_SC_SIGNAL( in_DECOD_VAL                      ," in_DECOD_VAL                      ",Tcontrol_t         ,_param->_nb_inst_decod);
87  ALLOC1_SC_SIGNAL(out_DECOD_ACK                      ,"out_DECOD_ACK                      ",Tcontrol_t         ,_param->_nb_inst_decod);
88  ALLOC1_SC_SIGNAL( in_DECOD_CONTEXT_ID               ," in_DECOD_CONTEXT_ID               ",Tcontext_t         ,_param->_nb_inst_decod);
89  ALLOC1_SC_SIGNAL( in_DECOD_BTB_ADDRESS_SRC          ," in_DECOD_BTB_ADDRESS_SRC          ",Taddress_t         ,_param->_nb_inst_decod);
90  ALLOC1_SC_SIGNAL( in_DECOD_BTB_ADDRESS_DEST         ," in_DECOD_BTB_ADDRESS_DEST         ",Taddress_t         ,_param->_nb_inst_decod);
91  ALLOC1_SC_SIGNAL( in_DECOD_BTB_CONDITION            ," in_DECOD_BTB_CONDITION            ",Tbranch_condition_t,_param->_nb_inst_decod);
92  ALLOC1_SC_SIGNAL( in_DECOD_BTB_LAST_TAKE            ," in_DECOD_BTB_LAST_TAKE            ",Tcontrol_t         ,_param->_nb_inst_decod);
93  ALLOC1_SC_SIGNAL( in_DECOD_RAS_ADDRESS              ," in_DECOD_RAS_ADDRESS              ",Taddress_t         ,_param->_nb_inst_decod);
94  ALLOC1_SC_SIGNAL( in_DECOD_RAS_INDEX                ," in_DECOD_RAS_INDEX                ",Tptr_t             ,_param->_nb_inst_decod);
95  ALLOC1_SC_SIGNAL( in_DECOD_MISS_IFETCH              ," in_DECOD_MISS_IFETCH              ",Tcontrol_t         ,_param->_nb_inst_decod);
96  ALLOC1_SC_SIGNAL( in_DECOD_MISS_DECOD               ," in_DECOD_MISS_DECOD               ",Tcontrol_t         ,_param->_nb_inst_decod);
97  ALLOC1_SC_SIGNAL( in_DECOD_UPDATE_PREDICTION_ID     ," in_DECOD_UPDATE_PREDICTION_ID     ",Tprediction_ptr_t  ,_param->_nb_inst_decod);
98//ALLOC1_SC_SIGNAL(out_DECOD_DEPTH                    ,"out_DECOD_DEPTH                    ",Tdepth_t           ,_param->_nb_inst_decod);
99  ALLOC1_SC_SIGNAL( in_DECOD_IS_ACCURATE              ," in_DECOD_IS_ACCURATE              ",Tcontrol_t         ,_param->_nb_inst_decod);
100
101  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL            ," in_BRANCH_COMPLETE_VAL            ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
102  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK            ,"out_BRANCH_COMPLETE_ACK            ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
103  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_CONTEXT_ID     ," in_BRANCH_COMPLETE_CONTEXT_ID     ",Tcontext_t         ,_param->_nb_inst_branch_complete);
104  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_DEPTH          ," in_BRANCH_COMPLETE_DEPTH          ",Tdepth_t           ,_param->_nb_inst_branch_complete);
105  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_ADDRESS        ," in_BRANCH_COMPLETE_ADDRESS        ",Taddress_t         ,_param->_nb_inst_branch_complete);
106  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_FLAG           ," in_BRANCH_COMPLETE_FLAG           ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
107  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION,"out_BRANCH_COMPLETE_MISS_PREDICTION",Tcontrol_t         ,_param->_nb_inst_branch_complete);
108  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_TAKE           ,"out_BRANCH_COMPLETE_TAKE           ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
109  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC    ,"out_BRANCH_COMPLETE_ADDRESS_SRC    ",Taddress_t         ,_param->_nb_inst_branch_complete);
110  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST   ,"out_BRANCH_COMPLETE_ADDRESS_DEST   ",Taddress_t         ,_param->_nb_inst_branch_complete);
111
112  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL            ,"out_BRANCH_EVENT_VAL            ",Tcontrol_t         ,_param->_nb_context);
113  ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK            ," in_BRANCH_EVENT_ACK            ",Tcontrol_t         ,_param->_nb_context);
114//   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_CONTEXT_ID     ," in_BRANCH_EVENT_CONTEXT_ID     ",Tcontext_t         ,_param->_nb_context);
115//   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_DEPTH          ," in_BRANCH_EVENT_DEPTH          ",Tdepth_t           ,_param->_nb_context);
116//   ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,"out_BRANCH_EVENT_MISS_PREDICTION",Tcontrol_t         ,_param->_nb_context);
117  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC    ,"out_BRANCH_EVENT_ADDRESS_SRC    ",Taddress_t         ,_param->_nb_context);
118  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST   ,"out_BRANCH_EVENT_ADDRESS_DEST   ",Taddress_t         ,_param->_nb_context);
119
120  ALLOC1_SC_SIGNAL(out_UPDATE_VAL                     ,"out_UPDATE_VAL                     ",Tcontrol_t         ,_param->_nb_inst_update);
121  ALLOC1_SC_SIGNAL( in_UPDATE_ACK                     ," in_UPDATE_ACK                     ",Tcontrol_t         ,_param->_nb_inst_update);
122  ALLOC1_SC_SIGNAL(out_UPDATE_CONTEXT_ID              ,"out_UPDATE_CONTEXT_ID              ",Tcontext_t         ,_param->_nb_inst_update);
123  ALLOC1_SC_SIGNAL(out_UPDATE_MISS_PREDICTION         ,"out_UPDATE_MISS_PREDICTION         ",Tcontrol_t         ,_param->_nb_inst_update);
124  ALLOC1_SC_SIGNAL(out_UPDATE_DIRECTION_GOOD          ,"out_UPDATE_DIRECTION_GOOD          ",Tcontrol_t         ,_param->_nb_inst_update);
125  ALLOC1_SC_SIGNAL(out_UPDATE_BTB_VAL                 ,"out_UPDATE_BTB_VAL                 ",Tcontrol_t         ,_param->_nb_inst_update);
126  ALLOC1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC         ,"out_UPDATE_BTB_ADDRESS_SRC         ",Taddress_t         ,_param->_nb_inst_update);
127  ALLOC1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST        ,"out_UPDATE_BTB_ADDRESS_DEST        ",Taddress_t         ,_param->_nb_inst_update);
128  ALLOC1_SC_SIGNAL(out_UPDATE_BTB_CONDITION           ,"out_UPDATE_BTB_CONDITION           ",Tbranch_condition_t,_param->_nb_inst_update);
129  ALLOC1_SC_SIGNAL(out_UPDATE_DIR_VAL                 ,"out_UPDATE_DIR_VAL                 ",Tcontrol_t         ,_param->_nb_inst_update);
130  ALLOC1_SC_SIGNAL(out_UPDATE_DIR_HISTORY             ,"out_UPDATE_DIR_HISTORY             ",Thistory_t         ,_param->_nb_inst_update);
131  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_VAL                 ,"out_UPDATE_RAS_VAL                 ",Tcontrol_t         ,_param->_nb_inst_update);
132  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PUSH                ,"out_UPDATE_RAS_PUSH                ",Tcontrol_t         ,_param->_nb_inst_update);
133  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS             ,"out_UPDATE_RAS_ADDRESS             ",Taddress_t         ,_param->_nb_inst_update);
134  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_INDEX               ,"out_UPDATE_RAS_INDEX               ",Tptr_t             ,_param->_nb_inst_update);
135  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH   ,"out_UPDATE_RAS_PREDICTION_IFETCH   ",Tcontrol_t         ,_param->_nb_inst_update);
136  ALLOC1_SC_SIGNAL(out_DEPTH_CURRENT                  ,"out_DEPTH_CURRENT                  ",Tdepth_t           ,_param->_nb_context);
137  ALLOC1_SC_SIGNAL(out_DEPTH_MIN                      ,"out_DEPTH_MIN                      ",Tdepth_t           ,_param->_nb_context);
138  ALLOC1_SC_SIGNAL(out_DEPTH_MAX                      ,"out_DEPTH_MAX                      ",Tdepth_t           ,_param->_nb_context);
139 
140  /********************************************************
141   * Instanciation
142   ********************************************************/
143 
144  msg(_("<%s> : Instanciation of _Update_Prediction_Table.\n"),name.c_str());
145
146  (*(_Update_Prediction_Table->in_CLOCK))        (*(in_CLOCK));
147  (*(_Update_Prediction_Table->in_NRESET))       (*(in_NRESET));
148
149  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_VAL                    ,_param->_nb_inst_predict);
150  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_PREDICT_ACK                    ,_param->_nb_inst_predict);
151  if (_param->_have_port_context_id)
152  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_CONTEXT_ID             ,_param->_nb_inst_predict);
153  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_BTB_ADDRESS_SRC        ,_param->_nb_inst_predict);
154  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_BTB_ADDRESS_DEST       ,_param->_nb_inst_predict);
155  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_BTB_CONDITION          ,_param->_nb_inst_predict);
156  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_BTB_LAST_TAKE          ,_param->_nb_inst_predict);
157  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_BTB_IS_ACCURATE        ,_param->_nb_inst_predict);
158  if (_param->_have_port_history)
159  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_DIR_HISTORY            ,_param->_nb_inst_predict);
160  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_RAS_ADDRESS            ,_param->_nb_inst_predict);
161  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_PREDICT_RAS_INDEX              ,_param->_nb_inst_predict);
162  if (_param->_have_port_depth)
163  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_PREDICT_UPDATE_PREDICTION_ID   ,_param->_nb_inst_predict);
164  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_VAL                      ,_param->_nb_inst_decod);
165  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DECOD_ACK                      ,_param->_nb_inst_decod);
166  if (_param->_have_port_context_id)
167  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_CONTEXT_ID               ,_param->_nb_inst_decod);
168  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_BTB_ADDRESS_SRC          ,_param->_nb_inst_decod);
169  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_BTB_ADDRESS_DEST         ,_param->_nb_inst_decod);
170  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_BTB_CONDITION            ,_param->_nb_inst_decod);
171  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_BTB_LAST_TAKE            ,_param->_nb_inst_decod);
172  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_ADDRESS              ,_param->_nb_inst_decod);
173  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_INDEX                ,_param->_nb_inst_decod);
174  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_IFETCH              ,_param->_nb_inst_decod);
175  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_DECOD               ,_param->_nb_inst_decod);
176  if (_param->_have_port_depth)
177  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_UPDATE_PREDICTION_ID     ,_param->_nb_inst_decod);
178//if (_param->_have_port_depth)
179//INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DECOD_DEPTH                    ,_param->_nb_inst_decod);
180  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_IS_ACCURATE              ,_param->_nb_inst_decod);
181  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_VAL            ,_param->_nb_inst_branch_complete);
182  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ACK            ,_param->_nb_inst_branch_complete);
183  if (_param->_have_port_context_id)
184  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_CONTEXT_ID     ,_param->_nb_inst_branch_complete);
185  if (_param->_have_port_depth)
186  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_DEPTH          ,_param->_nb_inst_branch_complete);
187  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_ADDRESS        ,_param->_nb_inst_branch_complete);
188  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_FLAG           ,_param->_nb_inst_branch_complete);
189  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete);
190  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_TAKE           ,_param->_nb_inst_branch_complete);
191  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_SRC    ,_param->_nb_inst_branch_complete);
192  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_DEST   ,_param->_nb_inst_branch_complete);
193
194  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_VAL            ,_param->_nb_context);
195  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ACK            ,_param->_nb_context);
196//   if (_param->_have_port_context_id)
197//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_CONTEXT_ID     ,_param->_nb_context);
198//   if (_param->_have_port_depth)
199//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_DEPTH          ,_param->_nb_context);
200//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ADDRESS        ,_param->_nb_context);
201//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context);
202  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_SRC    ,_param->_nb_context);
203  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_DEST   ,_param->_nb_context);
204
205  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_VAL                     ,_param->_nb_inst_update);
206  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_UPDATE_ACK                     ,_param->_nb_inst_update);
207  if (_param->_have_port_context_id)
208  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_CONTEXT_ID              ,_param->_nb_inst_update);
209  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_MISS_PREDICTION         ,_param->_nb_inst_update);
210  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIRECTION_GOOD          ,_param->_nb_inst_update);
211  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_BTB_VAL                 ,_param->_nb_inst_update);
212  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_BTB_ADDRESS_SRC         ,_param->_nb_inst_update);
213  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_BTB_ADDRESS_DEST        ,_param->_nb_inst_update);
214  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_BTB_CONDITION           ,_param->_nb_inst_update);
215  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIR_VAL                 ,_param->_nb_inst_update);
216  if (_param->_have_port_history)
217  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIR_HISTORY             ,_param->_nb_inst_update);
218  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_VAL                 ,_param->_nb_inst_update);
219  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PUSH                ,_param->_nb_inst_update);
220  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_ADDRESS             ,_param->_nb_inst_update);
221  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_INDEX               ,_param->_nb_inst_update);
222  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PREDICTION_IFETCH   ,_param->_nb_inst_update);
223  if (_param->_have_port_depth)
224    {
225  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_CURRENT                  ,_param->_nb_context);
226  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_MIN                      ,_param->_nb_context);
227    }
228  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_MAX                      ,_param->_nb_context);
229
230  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
231   
232  Time * _time = new Time();
233
234  /********************************************************
235   * Simulation - Begin
236   ********************************************************/
237
238  // Initialisation
239
240  const uint32_t seed = 0;
241//const uint32_t seed = static_cast<uint32_t>(time(NULL));
242
243  srand(seed);
244
245  const  int32_t percent_transaction_predict         = 75;
246  const  int32_t percent_transaction_decod           = 75;
247  const  int32_t percent_transaction_branch_complete = 75;
248  const  int32_t percent_transaction_update          = 75;
249
250
251
252  std::list<request_t> ufpt;
253  std::list<request_t> upt;
254
255  SC_START(0);
256  LABEL("Initialisation");
257
258  LABEL("Reset");
259  in_NRESET->write(0);
260  SC_START(5);
261  in_NRESET->write(1); 
262
263  Tdepth_t ufpt_bottom [_param->_nb_context];
264  Tdepth_t ufpt_top    [_param->_nb_context];
265
266  Tdepth_t upt_bottom  [_param->_nb_context];
267  Tdepth_t upt_top     [_param->_nb_context];
268
269  for (uint32_t i=0; i<_param->_nb_context; ++i)
270    {
271      ufpt_bottom [i] = 0;
272      ufpt_top    [i] = 0;
273      upt_bottom  [i] = 0;
274      upt_top     [i] = 0;
275    }
276
277  for (uint32_t i=0; i<_param->_nb_context; ++i)
278    {
279      TEST(Tdepth_t,out_DEPTH_CURRENT [i]->read(),upt_top    [i]);
280      TEST(Tdepth_t,out_DEPTH_MIN     [i]->read(),upt_bottom [i]);
281      TEST(Tdepth_t,out_DEPTH_MAX     [i]->read(),upt_top    [i]);
282    }
283
284  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
285    {
286      LABEL("Iteration %d",iteration);
287
288      for (uint32_t i=0; i<_param->_nb_inst_predict; ++i)
289        in_PREDICT_VAL         [i]->write(0);
290      for (uint32_t i=0; i<_param->_nb_inst_decod; ++i)
291        in_DECOD_VAL           [i]->write(0);
292      for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
293        in_BRANCH_COMPLETE_VAL [i]->write(0);
294      for (uint32_t i=0; i<_param->_nb_context; ++i)
295        in_BRANCH_EVENT_ACK    [i]->write(0);
296      for (uint32_t i=0; i<_param->_nb_inst_update; ++i)
297        in_UPDATE_ACK          [i]->write(0);
298
299      //---------------------------------------------------------------------
300      //---------------------------------------------------------------------
301      // COMMON CASE
302      //---------------------------------------------------------------------
303      //---------------------------------------------------------------------
304      if (1)
305      {
306        uint32_t context = rand() % _param->_nb_context;
307
308        {
309          LABEL("PREDICT - fill the queue");
310          uint32_t port = rand() % _param->_nb_inst_predict;
311
312          LABEL("  * context : %d",context);
313          LABEL("  * port    : %d",port);
314         
315          for (uint32_t i=0; i<_param->_size_ufpt_queue[context]; i++)
316            {
317              request_t request;
318              request.context          = context;
319              request.address_src      = 0xdeadbeef+i;
320              request.address_dest     = 0x21071981+i;                                   
321              request.address_good     = request.address_dest;
322              request.condition        = BRANCH_CONDITION_FLAG_SET;                     
323              request.take             = 1;                                             
324              request.take_good        = 1;                                             
325              request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
326              request.is_accurate      = true;
327              request.miss_ifetch      = false;
328              request.miss_decod       = false;
329              request.miss_commit      = false;
330              request.history          = i;                                             
331              request.ras_address      = 0xdeaddead+i;                                   
332              request.ras_index        = (0x12345678+i)%_param->_size_ras_index[context];
333              request.ufpt_ptr         = ufpt_top [context];
334//            request.upt_ptr;
335
336              bool have_transaction = false;
337              do
338                {
339                  in_PREDICT_VAL              [port]->write((rand()%100)<percent_transaction_predict);
340                  in_PREDICT_CONTEXT_ID       [port]->write(request.context     );
341                  in_PREDICT_BTB_ADDRESS_SRC  [port]->write(request.address_src );
342                  in_PREDICT_BTB_ADDRESS_DEST [port]->write(request.address_dest);
343                  in_PREDICT_BTB_CONDITION    [port]->write(request.condition   );
344                  in_PREDICT_BTB_LAST_TAKE    [port]->write(request.take        );
345                  in_PREDICT_BTB_IS_ACCURATE  [port]->write(request.is_accurate );
346                  in_PREDICT_DIR_HISTORY      [port]->write(request.history     );
347                  in_PREDICT_RAS_ADDRESS      [port]->write(request.ras_address );
348                  in_PREDICT_RAS_INDEX        [port]->write(request.ras_index   );
349                 
350                  if (_param->_have_port_depth)
351                  TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]);
352                  TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]);
353                     
354                  SC_START(0); // fct melay
355                 
356                  LABEL("PREDICT         [%d] %d - %d (accurate : %d).",
357                        port,
358                         in_PREDICT_VAL [port]->read(),
359                        out_PREDICT_ACK [port]->read(),
360                         in_PREDICT_BTB_IS_ACCURATE [port]->read());
361                 
362                  if (in_PREDICT_VAL [port]->read() and out_PREDICT_ACK [port]->read())
363                    {
364                      LABEL("PREDICT         [%d] - Transaction accepted",port);
365                      have_transaction = true;
366
367                      if (_param->_have_port_depth)
368                      TEST(Tprediction_ptr_t,out_PREDICT_UPDATE_PREDICTION_ID [port]->read(),ufpt_top [context]);
369                     
370                      ufpt_top [context] = (ufpt_top [context]+1)%_param->_size_ufpt_queue[context];
371                    }
372                 
373                  SC_START(1); // transition
374                 
375                } while (not have_transaction);
376
377              ufpt.push_back(request);
378
379              in_PREDICT_VAL [port]->write(0);
380           
381              if (_param->_have_port_depth)
382              TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]);
383              TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]);
384            }
385        }
386       
387        {
388          LABEL("DECOD");
389          uint32_t port = rand() % _param->_nb_inst_decod;
390
391          LABEL("  * context : %d",context);
392          LABEL("  * port    : %d",port);
393         
394          for (uint32_t i=0; i<_param->_size_ufpt_queue[context]; i++)
395            {
396              request_t request = ufpt.front();
397
398              bool have_transaction = false;
399              do
400                {
401                  in_DECOD_VAL                  [port]->write((rand()%100)<percent_transaction_decod);
402                  in_DECOD_CONTEXT_ID           [port]->write(request.context     );
403                  in_DECOD_BTB_ADDRESS_SRC      [port]->write(request.address_src );
404                  in_DECOD_BTB_ADDRESS_DEST     [port]->write(request.address_dest);
405                  in_DECOD_BTB_CONDITION        [port]->write(request.condition   );
406                  in_DECOD_BTB_LAST_TAKE        [port]->write(request.take        );
407                  in_DECOD_RAS_ADDRESS          [port]->write(request.ras_address );
408                  in_DECOD_RAS_INDEX            [port]->write(request.ras_index   );
409                  in_DECOD_UPDATE_PREDICTION_ID [port]->write(request.ufpt_ptr    );
410                  in_DECOD_MISS_IFETCH          [port]->write(request.miss_ifetch );
411                  in_DECOD_MISS_DECOD           [port]->write(request.miss_decod  );
412                  in_DECOD_IS_ACCURATE          [port]->write(request.is_accurate );
413
414                  SC_START(0); // fct melay
415                 
416                  LABEL("DECOD           [%d] %d - %d",
417                        port,
418                         in_PREDICT_VAL [port]->read(),
419                        out_PREDICT_ACK [port]->read());
420                 
421                  if (in_DECOD_VAL [port]->read() and out_DECOD_ACK [port]->read())
422                    {
423                      LABEL("DECOD          [%d] - Transaction accepted",port);
424                      have_transaction = true;
425
426                      request.upt_ptr = upt_top [context];
427                      upt.push_back(request);
428                      ufpt.pop_front();
429
430                      upt_top [context] = (upt_top [context]+1)%_param->_size_upt_queue[context];
431                    }
432
433                  SC_START(1); // transition
434
435                } while (not have_transaction);
436
437              in_DECOD_VAL              [port]->write(0);
438             
439              if (_param->_have_port_depth)
440              TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]);
441              TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]);
442            }
443        }
444
445        {
446          LABEL("BRANCH_COMPLETE - hit ifetch");
447       
448          uint32_t port = rand() % _param->_nb_inst_branch_complete;
449       
450          LABEL("  * port    : %d",port);
451 
452          std::list<request_t>::iterator it_upt = upt.begin();
453
454//        for (uint32_t i=0; i<_param->_size_ufpt_queue[context]; i++)
455          for (uint32_t i=0; i<upt.size(); i++)
456            {
457              bool have_transaction = false;
458
459              do
460                {
461                  in_BRANCH_COMPLETE_VAL        [port]->write((rand()%100)<percent_transaction_branch_complete);
462                  in_BRANCH_COMPLETE_CONTEXT_ID [port]->write(it_upt->context     );
463                  in_BRANCH_COMPLETE_DEPTH      [port]->write(it_upt->upt_ptr     );
464                  in_BRANCH_COMPLETE_ADDRESS    [port]->write(it_upt->address_good);
465                  in_BRANCH_COMPLETE_FLAG       [port]->write(it_upt->flag        );
466
467                  if (_param->_have_port_depth)
468                  TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]);
469                  TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]);
470                 
471                  SC_START(0);
472                 
473                  LABEL("BRANCH_COMPLETE [%d] %d - %d.",port,in_BRANCH_COMPLETE_VAL [port]->read(),out_BRANCH_COMPLETE_ACK [port]->read());
474                 
475                  if (in_BRANCH_COMPLETE_VAL [port]->read() and out_BRANCH_COMPLETE_ACK [port]->read())
476                    {
477                      LABEL("BRANCH_COMPLETE [%d] - Transaction accepted",port);
478                      have_transaction = true;
479                     
480                      TEST(Tcontrol_t,out_BRANCH_COMPLETE_MISS_PREDICTION[port]->read(),it_upt->miss_commit );
481                      TEST(Tcontrol_t,out_BRANCH_COMPLETE_TAKE           [port]->read(),it_upt->take_good   );
482                      TEST(Taddress_t,out_BRANCH_COMPLETE_ADDRESS_SRC    [port]->read(),it_upt->address_src );
483                      TEST(Taddress_t,out_BRANCH_COMPLETE_ADDRESS_DEST   [port]->read(),it_upt->address_good);
484
485                      it_upt ++;
486                    }
487                 
488                  SC_START(1);
489                } while (not have_transaction);
490
491              in_BRANCH_COMPLETE_VAL [port]->write(0);
492             
493              if (_param->_have_port_depth)
494              TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]);
495              TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]);
496            }
497        }
498
499        {
500          LABEL("UPDATE - hit ifetch");
501       
502          uint32_t port = 0;
503       
504          LABEL("  * port    : %d",port);
505          std::list<request_t>::iterator it_upt = upt.begin();
506 
507//        for (uint32_t i=0; i<_param->_size_ufpt_queue[context]; i++)
508          for (uint32_t i=0; i<upt.size(); i++)
509            {
510              LABEL("Address_src (-1): %.8x (%d)",out_UPDATE_BTB_ADDRESS_SRC [i]->read(),upt.size());
511
512              bool have_transaction = false;
513
514              do
515                {
516                  LABEL("Address_src (0) : %.8x",out_UPDATE_BTB_ADDRESS_SRC [i]->read());
517
518                  in_UPDATE_ACK [port]->write((rand()%100)<percent_transaction_update);
519
520//                   if (_param->_have_port_depth)
521//                   TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]);
522//                   TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]);
523                 
524                  LABEL("Address_src (1) : %.8x",out_UPDATE_BTB_ADDRESS_SRC [i]->read());
525                  SC_START(0);
526                  LABEL("Address_src (2) : %.8x",out_UPDATE_BTB_ADDRESS_SRC [i]->read());
527                 
528                  LABEL("UPDATE [%d] %d - %d.",port,out_UPDATE_VAL [port]->read(),in_UPDATE_ACK [port]->read());
529                 
530                  if (out_UPDATE_VAL [port]->read() and in_UPDATE_ACK [port]->read())
531                    {
532                      LABEL("UPDATE [%d] - Transaction accepted",port);
533                      have_transaction = true;
534                 
535                      if (_param->_have_port_context_id)
536                      TEST(Tcontext_t         ,out_UPDATE_CONTEXT_ID            [i]->read(),it_upt->context);
537                      TEST(Tcontrol_t         ,out_UPDATE_MISS_PREDICTION       [i]->read(),it_upt->miss_commit);
538                      TEST(Tcontrol_t         ,out_UPDATE_DIRECTION_GOOD        [i]->read(),it_upt->flag);
539                      TEST(Tcontrol_t         ,out_UPDATE_BTB_VAL               [i]->read(),update_btb(it_upt->condition));
540                      if (update_btb(it_upt->condition))
541                        {
542                      TEST(Taddress_t         ,out_UPDATE_BTB_ADDRESS_SRC       [i]->read(),it_upt->address_src);
543                      TEST(Taddress_t         ,out_UPDATE_BTB_ADDRESS_DEST      [i]->read(),it_upt->address_dest);
544                      TEST(Tbranch_condition_t,out_UPDATE_BTB_CONDITION         [i]->read(),it_upt->condition);
545                        }
546                      TEST(Tcontrol_t         ,out_UPDATE_DIR_VAL               [i]->read(),update_dir(it_upt->condition));
547                      if (update_dir(it_upt->condition))
548                      if (_param->_have_port_history)
549                      TEST(Thistory_t         ,out_UPDATE_DIR_HISTORY           [i]->read(),it_upt->history);
550                      TEST(Tcontrol_t         ,out_UPDATE_RAS_VAL               [i]->read(),update_ras(it_upt->condition));
551                      if (update_ras(it_upt->condition))
552                        {
553                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PUSH              [i]->read(),push_ras  (it_upt->condition));
554                      TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [i]->read(),it_upt->ras_address);
555                      TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [i]->read(),it_upt->ras_index);
556                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [i]->read(),not it_upt->miss_ifetch);
557                        }
558                      ++ it_upt;
559                    }
560
561                  SC_START(1);
562                  LABEL("Address_src (3) : %.8x",out_UPDATE_BTB_ADDRESS_SRC [i]->read());
563                 
564                } while (not have_transaction);
565
566              LABEL("Address_src (4) : %.8x",out_UPDATE_BTB_ADDRESS_SRC [i]->read());
567              in_UPDATE_ACK [port]->write(0);
568              LABEL("Address_src (5) : %.8x",out_UPDATE_BTB_ADDRESS_SRC [i]->read());
569//               if (_param->_have_port_depth)
570//               TEST(Tdepth_t,out_DEPTH_MIN [context]->read(), upt_bottom [context]);
571//               TEST(Tdepth_t,out_DEPTH_MAX [context]->read(), upt_top [context]);
572            }
573          upt.clear();
574        }
575
576        // Wait Garbage Collector
577        {
578          upt_bottom [context] = (upt_bottom [context]+_param->_size_ufpt_queue[context])%_param->_size_upt_queue[context];
579//        upt_top    [context] = (upt_top    [context]);
580
581          while ((upt_bottom [context] != out_DEPTH_MIN [context]->read()) or
582                 (upt_top    [context] != out_DEPTH_MAX [context]->read()))
583            SC_START(1);
584
585        }
586      }
587
588    }// ITERATION
589
590  /********************************************************
591   * Simulation - End
592   ********************************************************/
593
594  TEST_OK ("End of Simulation");
595  delete _time;
596
597  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
598
599  delete in_CLOCK;
600  delete in_NRESET;
601
602  // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
603  delete []  in_PREDICT_VAL                 ;
604  delete [] out_PREDICT_ACK                 ;
605  delete []  in_PREDICT_CONTEXT_ID          ;
606  delete []  in_PREDICT_BTB_ADDRESS_SRC     ;
607  delete []  in_PREDICT_BTB_ADDRESS_DEST    ;
608  delete []  in_PREDICT_BTB_CONDITION       ;
609  delete []  in_PREDICT_BTB_LAST_TAKE       ;
610  delete []  in_PREDICT_BTB_IS_ACCURATE     ;
611  delete []  in_PREDICT_DIR_HISTORY         ;
612  delete []  in_PREDICT_RAS_ADDRESS         ;
613  delete []  in_PREDICT_RAS_INDEX           ;
614  delete [] out_PREDICT_UPDATE_PREDICTION_ID;
615 
616  // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
617  delete []  in_DECOD_VAL                   ;
618  delete [] out_DECOD_ACK                   ;
619  delete []  in_DECOD_CONTEXT_ID            ;
620  delete []  in_DECOD_BTB_ADDRESS_SRC       ;
621  delete []  in_DECOD_BTB_ADDRESS_DEST      ;
622  delete []  in_DECOD_BTB_CONDITION         ;
623  delete []  in_DECOD_BTB_LAST_TAKE         ;
624  delete []  in_DECOD_RAS_ADDRESS           ;
625  delete []  in_DECOD_RAS_INDEX             ;
626  delete []  in_DECOD_MISS_IFETCH           ;
627  delete []  in_DECOD_MISS_DECOD            ;
628  delete []  in_DECOD_UPDATE_PREDICTION_ID  ;
629//delete [] out_DECOD_DEPTH                 ;
630  delete []  in_DECOD_IS_ACCURATE           ;
631 
632  // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
633  delete []  in_BRANCH_COMPLETE_VAL            ;
634  delete [] out_BRANCH_COMPLETE_ACK            ;
635  delete []  in_BRANCH_COMPLETE_CONTEXT_ID     ;
636  delete []  in_BRANCH_COMPLETE_DEPTH          ;
637  delete []  in_BRANCH_COMPLETE_ADDRESS        ;
638  delete []  in_BRANCH_COMPLETE_FLAG           ;
639  delete [] out_BRANCH_COMPLETE_MISS_PREDICTION;
640  delete [] out_BRANCH_COMPLETE_TAKE           ;
641  delete [] out_BRANCH_COMPLETE_ADDRESS_SRC    ;
642  delete [] out_BRANCH_COMPLETE_ADDRESS_DEST   ;
643
644  // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
645  delete [] out_BRANCH_EVENT_VAL            ;
646  delete []  in_BRANCH_EVENT_ACK            ;
647//   delete []  in_BRANCH_EVENT_CONTEXT_ID     ;
648//   delete []  in_BRANCH_EVENT_DEPTH          ;
649//   delete [] out_BRANCH_EVENT_MISS_PREDICTION;
650  delete [] out_BRANCH_EVENT_ADDRESS_SRC    ;
651  delete [] out_BRANCH_EVENT_ADDRESS_DEST   ;
652 
653  // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
654  delete [] out_UPDATE_VAL                  ;
655  delete []  in_UPDATE_ACK                  ;
656  delete [] out_UPDATE_CONTEXT_ID           ;
657  delete [] out_UPDATE_MISS_PREDICTION      ;
658  delete [] out_UPDATE_DIRECTION_GOOD       ;
659  delete [] out_UPDATE_BTB_VAL              ;
660  delete [] out_UPDATE_BTB_ADDRESS_SRC      ;
661  delete [] out_UPDATE_BTB_ADDRESS_DEST     ;
662  delete [] out_UPDATE_BTB_CONDITION        ;
663  delete [] out_UPDATE_DIR_VAL              ;
664  delete [] out_UPDATE_DIR_HISTORY          ;
665  delete [] out_UPDATE_RAS_VAL              ;
666  delete [] out_UPDATE_RAS_PUSH             ;
667  delete [] out_UPDATE_RAS_ADDRESS          ;
668  delete [] out_UPDATE_RAS_INDEX            ;
669  delete [] out_UPDATE_RAS_PREDICTION_IFETCH;
670
671  // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
672  delete [] out_DEPTH_CURRENT;
673  delete [] out_DEPTH_MIN;
674  delete [] out_DEPTH_MAX;
675
676#endif
677
678  delete _Update_Prediction_Table;
679#ifdef STATISTICS
680  delete _parameters_statistics;
681#endif
682}
Note: See TracBrowser for help on using the repository browser.