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