source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_allocation.cpp @ 42

Last change on this file since 42 was 42, checked in by rosiere, 17 years ago

Modification des classes d'encapsulation des interfaces :

  • gère les signaux à écrire dans le vhdl
  • les traces pour le testbench
  • la génération des vhdl structurelles

-> test sur la Pattern History Table

File size: 29.5 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id$
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/include/Two_Level_Branch_Predictor.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace stage_1_ifetch {
14namespace predictor {
15namespace meta_predictor {
16namespace two_level_branch_predictor {
17
18  void Two_Level_Branch_Predictor::allocation (void)
19  {
20    string rename;
21
22    log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","Begin");
23
24    _component   = new Component ();
25
26    Entity * entity = _component->set_entity (_name                 
27                                             ,"Two_Level_Branch_Predictor"
28#ifdef POSITION
29                                             ,MIXTE
30#endif
31                                              );
32   
33    _interfaces = entity->set_interfaces();
34
35    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36    {
37      Interface * interface = _interfaces->set_interface(""
38#ifdef POSITION
39                                                         , IN 
40                                                         , SOUTH
41                                                         , "Generalist interface"
42#endif
43                                                         );
44     
45      in_CLOCK              = interface->set_signal_clk              ("clock" ,1);
46      in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_YES);
47    }
48   
49    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50
51     in_PREDICT_VAL                 = new SC_IN (Tcontrol_t)     * [_param._nb_prediction     ];
52    out_PREDICT_ACK                 = new SC_OUT(Tcontrol_t)     * [_param._nb_prediction     ];
53     in_PREDICT_ADDRESS             = new SC_IN (Taddress_t)     * [_param._nb_prediction     ];
54    if (_param._have_bht)
55    out_PREDICT_BHT_HISTORY         = new SC_OUT(Tbht_history_t) * [_param._nb_prediction     ];
56    if (_param._have_pht)
57    out_PREDICT_PHT_HISTORY         = new SC_OUT(Tpht_history_t) * [_param._nb_prediction     ];
58
59    for (uint32_t i=0; i<_param._nb_prediction; i++)
60      {
61        Interface_fifo * interface = _interfaces->set_interface("predict_"+toString(i)
62#ifdef POSITION
63                                                                , IN 
64                                                                , WEST
65                                                                , "Interface Predict"
66#endif
67                                                                );
68
69         in_PREDICT_VAL                 [i] = interface->set_signal_valack_in            ("val"    , VAL);
70        out_PREDICT_ACK                 [i] = interface->set_signal_valack_out           ("ack"    , ACK);
71         in_PREDICT_ADDRESS             [i] = interface->set_signal_in  <Taddress_t>     ("address", _param._size_address);
72        if (_param._have_bht)
73        out_PREDICT_BHT_HISTORY         [i] = interface->set_signal_out <Tbht_history_t> ("bht_history", _param._bht_size_shifter);
74        if (_param._have_pht)
75        out_PREDICT_PHT_HISTORY         [i] = interface->set_signal_out <Tpht_history_t> ("pht_history", _param._pht_size_counter);
76      }
77
78    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79
80     in_BRANCH_COMPLETE_VAL         = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
81    out_BRANCH_COMPLETE_ACK         = new SC_OUT(Tcontrol_t)     * [_param._nb_branch_complete];
82     in_BRANCH_COMPLETE_ADDRESS     = new SC_IN (Taddress_t)     * [_param._nb_branch_complete];
83    if (_param._have_bht)
84     in_BRANCH_COMPLETE_BHT_HISTORY = new SC_IN (Tbht_history_t) * [_param._nb_branch_complete];
85    if (_param._have_pht)
86     in_BRANCH_COMPLETE_PHT_HISTORY = new SC_IN (Tpht_history_t) * [_param._nb_branch_complete];
87     in_BRANCH_COMPLETE_DIRECTION   = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
88
89    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
90      {
91         in_BRANCH_COMPLETE_VAL         [i] = new interface->set_signal_valack_in            ("val"        , VAL);                 
92        out_BRANCH_COMPLETE_ACK         [i] = new interface->set_signal_valack_out           ("ack"        , ACK);                 
93         in_BRANCH_COMPLETE_ADDRESS     [i] = new interface->set_signal_in  <Taddress_t    > ("address"    , _param._size_address);
94        if (_param._have_bht)
95         in_BRANCH_COMPLETE_BHT_HISTORY [i] = new interface->set_signal_in  <Tbht_history_t> ("bht_history", _param._bht_size_shifter);
96        if (_param._have_pht)
97         in_BRANCH_COMPLETE_PHT_HISTORY [i] = new interface->set_signal_in  <Tpht_history_t> ("pht_history", _param._pht_size_counter);
98         in_BRANCH_COMPLETE_DIRECTION   [i] = new interface->set_signal_in  <Tcontrol_t    > ("direction"  , 1);
99      }
100
101    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
102    string name_component;
103
104    // =====[ component_Branch_History_Table ]============================   
105    if (_param._have_bht)
106      {
107        name_component = _name+"_Branch_History_Table";
108       
109        component_Branch_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::branch_history_table ::Branch_History_Table (name_component.c_str()
110#ifdef STATISTICS
111                                                                                                                                                                                       ,_param_statistics
112#endif
113                                                                                                                                                                                       ,*(_param._param_counter));
114       
115        _component->set_component (component_Branch_History_Table->_component
116#ifdef POSITION
117                                   , 75
118                                   , 25
119                                   , 10
120                                   , 10
121#endif
122                                   );
123      }
124   
125    // =====[ component_Pattern_History_Table ]===========================   
126    if (_param._have_pht)
127      {
128        name_component = _name+"_Pattern_History_Table";
129       
130        component_Pattern_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::pattern_history_table ::Pattern_History_Table (name_component.c_str()
131#ifdef STATISTICS
132                                                                                                                                                                                          ,_param_statistics
133#endif
134                                                                                                                                                                                          ,*(_param._param_counter));
135       
136        _component->set_component (component_Pattern_History_Table->_component
137#ifdef POSITION
138                                   , 75
139                                   , 75
140                                   , 10
141                                   , 10
142#endif
143                                   );
144      }
145
146    // =====[ component_Two_Level_Branch_Predictor_Glue ]=================
147
148    name_component = _name+"_Two_Level_Branch_Predictor_Glue";
149
150    component_Two_Level_Branch_Predictor_Glue = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::two_level_branch_predictor_glue::Two_Level_Branch_Predictor_Glue (name_component.c_str()
151#ifdef STATISTICS
152                                                                                                                                                                                                                   ,_param_statistics
153#endif
154                                                                                                                                                                                                                   ,*(_param._param_counter));
155   
156    _component->set_component (component_Pattern_History_Table->_component
157#ifdef POSITION
158                               , 50
159                               , 75
160                               , 10
161                               , 10
162#endif
163                               );
164   
165    // ~~~~~[ Component - Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
166   
167    // =====[ component_Branch_History_Table - Instanciation ]============
168    if (_param._have_bht)
169      {
170#ifdef POSITION
171        _component->interface_map (_name+"_Branch_History_Table","",
172                                   _name                        ,"");
173#endif
174       
175        _component->port_map(_name+"_Branch_History_Table", "in_CLOCK" , _name,"in_CLOCK" );
176        _component->port_map(_name+"_Branch_History_Table", "in_NRESET", _name,"in_NRESET");
177
178        for (uint32_t i=0; i<_param._nb_prediction; i++)
179          {
180#ifdef POSITION
181            _component->interface_map (_name+"_Branch_History_Table","predict_"+toString(i),
182                                       _name                        ,"predict_"+toString(i));
183#endif
184            _component->port_map(_name+"_Branch_History_Table", "in_PREDICT_"+toString(i)+"_VAL"    , _name                                   , "in_PREDICT_"+toString(i)+"_VAL"        );
185            _component->port_map(_name+"_Branch_History_Table","out_PREDICT_"+toString(i)+"_ACK"    , _name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_BHT_ACK"    );
186            _component->port_map(_name+"_Branch_History_Table", "in_PREDICT_"+toString(i)+"_ADDRESS", _name+"_Two_Level_Branch_Predictor_Glue","out_PREDICT_"+toString(i)+"_BHT_ADDRESS");
187            _component->port_map(_name+"_Branch_History_Table","out_PREDICT_"+toString(i)+"_HISTORY", _name                                   ,"out_PREDICT_"+toString(i)+"_BHT_HISTORY");
188          }
189       
190        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
191          {
192#ifdef POSITION
193            _component->interface_map (_name+"_Branch_History_Table","branch_complete_"+toString(i),
194                                       _name                        ,"branch_complete_"+toString(i));
195#endif
196            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"      , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"          );
197            _component->port_map(_name+"_Branch_History_Table","out_BRANCH_COMPLETE_"+toString(i)+"_ACK"      , _name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_ACK"      );
198            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"  , _name+"_Two_Level_Branch_Predictor_Glue","out_BRANCH_COMPLETE_"+toString(i)+"_BHT_ADDRESS"  );
199            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_HISTORY"  , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY"  );
200            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION", _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION"    );
201          }
202      }
203   
204    // =====[ component_Pattern_History_Table - Instanciation ]===========
205    if (_param._have_pht)
206      {
207#ifdef POSITION
208        _component->interface_map (_name+"_Pattern_History_Table","",
209                                   _name                         ,"");
210#endif
211       
212        _component->port_map(_name+"_Pattern_History_Table", "in_CLOCK" , _name,"in_CLOCK" );
213        _component->port_map(_name+"_Pattern_History_Table", "in_NRESET", _name,"in_NRESET");
214
215        for (uint32_t i=0; i<_param._nb_prediction; i++)
216          {
217#ifdef POSITION
218            _component->interface_map (_name+"_Pattern_History_Table","predict_"+toString(i),
219                                       _name                         ,"predict_"+toString(i));
220#endif
221            _component->port_map(_name+"_Pattern_History_Table", "in_PREDICT_"+toString(i)+"_VAL"    , _name                                   , "in_PREDICT_"+toString(i)+"_VAL"        );
222            _component->port_map(_name+"_Pattern_History_Table","out_PREDICT_"+toString(i)+"_ACK"    , _name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_PHT_ACK"    );
223            _component->port_map(_name+"_Pattern_History_Table", "in_PREDICT_"+toString(i)+"_ADDRESS", _name+"_Two_Level_Branch_Predictor_Glue","out_PREDICT_"+toString(i)+"_PHT_ADDRESS");
224            _component->port_map(_name+"_Pattern_History_Table","out_PREDICT_"+toString(i)+"_HISTORY", _name                                   ,"out_PREDICT_"+toString(i)+"_PHT_HISTORY");
225          }
226       
227        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
228          {
229#ifdef POSITION
230            _component->interface_map (_name+"_Pattern_History_Table","branch_complete_"+toString(i),
231                                       _name                        ,"branch_complete_"+toString(i));
232#endif
233            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"      , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"          );
234            _component->port_map(_name+"_Pattern_History_Table","out_BRANCH_COMPLETE_"+toString(i)+"_ACK"      , _name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_ACK"      );
235            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"  , _name+"_Two_Level_Branch_Predictor_Glue","out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS"  );
236            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_HISTORY"  , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_HISTORY"  );
237            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION", _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION"    );
238          }
239      }
240
241    // =====[ component_Two_Level_Branch_Predictor_Glue - Instanciation ]=
242#ifdef POSITION
243        _component->interface_map (_name+"_Two_Level_Branch_Predictor_Glue","",
244                                   _name                                   ,"");
245#endif
246        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_CLOCK" , _name,"in_CLOCK" );
247        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_NRESET", _name,"in_NRESET");
248
249        for (uint32_t i=0; i<_param._nb_prediction; i++)
250          {
251        if (_param._have_bht)
252          {
253        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_PREDICT_"+toString(i)+"_BHT_ACK"    , _name+"_Branch_History_Table" , "out_PREDICT_"+toString(i)+"_BHT_ACK"    );
254        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_PREDICT_"+toString(i)+"_BHT_ADDRESS", _name+"_Branch_History_Table" ,  "in_PREDICT_"+toString(i)+"_BHT_ADDRESS");
255          }
256        if (_param._have_pht)
257          {
258        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_PREDICT_"+toString(i)+"_PHT_ACK"    , _name+"_Pattern_History_Table", "out_PREDICT_"+toString(i)+"_PHT_ACK"    );
259        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_PREDICT_"+toString(i)+"_PHT_ADDRESS", _name+"_Pattern_History_Table",  "in_PREDICT_"+toString(i)+"_PHT_ADDRESS");
260          }
261        if (_param._have_bht and _param._have_pht)
262        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_BHT_HISTORY" , _name                         , "in_PREDICT_"+toString(i)+"_BHT_HISTORY");
263        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue","out_PREDICT_"+toString(i)+"_ACK"         , _name                         ,"out_PREDICT_"+toString(i)+"_ACK");
264        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_ADDRESS"     , _name                         , "in_PREDICT_"+toString(i)+"_ADDRESS");
265          }
266   
267    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
268      {
269        if (_param._have_bht)
270          {
271        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_ACK"    , _name+"_Branch_History_Table" , "out_BRANCH_COMPLETE_"+toString(i)+"_BHT_ACK"    );
272        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_BRANCH_COMPLETE_"+toString(i)+"_BHT_ADDRESS", _name+"_Branch_History_Table" ,  "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_ADDRESS");
273          }
274        if (_param._have_pht)
275          {
276        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_ACK"    , _name+"_Pattern_History_Table", "out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ACK"    );
277        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS", _name+"_Pattern_History_Table",  "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS");
278          }
279        if (_param._have_bht and _param._have_pht)
280        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY" , _name                         , "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY");
281        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue","out_BRANCH_COMPLETE_"+toString(i)+"_ACK"         , _name                         ,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK");
282        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"     , _name                         , "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS");
283      }
284 
285#ifdef POSITION
286    _component->generate_file();
287#endif
288
289    log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","End");
290  };
291
292
293
294
295
296
297
298//   void Two_Level_Branch_Predictor::allocation (void)
299//   {
300//     string rename;
301
302//     log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","Begin");
303
304//     _component   = new Component ();
305
306//     Entity * entity = _component->set_entity (_name                 
307// #ifdef POSITION
308//                                           ,"Two_Level_Branch_Predictor"
309//                                           ,MIXTE
310// #endif
311//                                            );
312   
313//     _interfaces = entity->set_interfaces();
314
315//     // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
316//     {
317//       Interface * interface = _interfaces->set_interface(""
318// #ifdef POSITION
319//                                                       , IN 
320//                                                       , SOUTH
321//                                                       , "Generalist interface"
322// #endif
323//                                                       );
324     
325//       in_CLOCK              = interface->set_signal_clk              ("clock" ,1);
326//       in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_YES);
327//     }
328   
329//     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
330
331//      in_PREDICT_VAL                 = new SC_IN (Tcontrol_t)     * [_param._nb_prediction     ];
332//     out_PREDICT_ACK                 = new SC_OUT(Tcontrol_t)     * [_param._nb_prediction     ];
333//      in_PREDICT_ADDRESS             = new SC_IN (Taddress_t)     * [_param._nb_prediction     ];
334//     if (_param._have_bht)
335//     out_PREDICT_BHT_HISTORY         = new SC_OUT(Tbht_history_t) * [_param._nb_prediction     ];
336//     if (_param._have_pht)
337//     out_PREDICT_PHT_HISTORY         = new SC_OUT(Tpht_history_t) * [_param._nb_prediction     ];
338// //     if (_param._have_bht)
339// //       {
340// //     signal_PREDICT_BHT_ACK          = new SC_SIGNAL(Tcontrol_t)     * [_param._nb_prediction];
341// //     signal_PREDICT_BHT_ADDRESS      = new SC_SIGNAL(Taddress_t)     * [_param._nb_prediction];
342// //       }
343// //     if (_param._have_pht)
344// //       {
345// //     signal_PREDICT_PHT_ACK          = new SC_SIGNAL(Tcontrol_t)     * [_param._nb_prediction];
346// //     signal_PREDICT_PHT_ADDRESS      = new SC_SIGNAL(Taddress_t)     * [_param._nb_prediction];
347// //       }
348
349//     for (uint32_t i=0; i<_param._nb_prediction; i++)
350//       {
351//      rename = "in_PREDICT_VAL_"         +toString(i);
352//       in_PREDICT_VAL                 [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
353
354//      rename = "out_PREDICT_ACK_"        +toString(i);
355//      out_PREDICT_ACK                 [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
356
357//      rename = "in_PREDICT_ADDRESS_"     +toString(i);
358//       in_PREDICT_ADDRESS             [i] = new SC_IN (Taddress_t)     (rename.c_str());
359
360//      if (_param._have_bht)
361//        {
362//      rename = "out_PREDICT_BHT_HISTORY_"+toString(i);
363//      out_PREDICT_BHT_HISTORY         [i] = new SC_OUT(Tbht_history_t) (rename.c_str());
364//        }
365
366//      if (_param._have_pht)
367//        {
368//      rename = "out_PREDICT_PHT_HISTORY_"+toString(i);
369//      out_PREDICT_PHT_HISTORY         [i] = new SC_OUT(Tpht_history_t) (rename.c_str());
370//        }
371
372// //   if (_param._have_bht)
373// //     {
374// //   rename = "signal_PREDICT_BHT_ACK_"    +toString(i);
375// //   signal_PREDICT_BHT_ACK          [i] = new SC_SIGNAL(Tcontrol_t)     (rename.c_str());
376
377// //   rename = "signal_PREDICT_BHT_ADDRESS_"+toString(i);
378// //   signal_PREDICT_BHT_ADDRESS      [i] = new SC_SIGNAL(Taddress_t)     (rename.c_str());
379// //     }
380
381// //   if (_param._have_pht)
382// //     {
383// //   rename = "signal_PREDICT_PHT_ACK_"    +toString(i);
384// //   signal_PREDICT_PHT_ACK          [i] = new SC_SIGNAL(Tcontrol_t)     (rename.c_str());
385
386// //   rename = "signal_PREDICT_PHT_ADDRESS_"+toString(i);
387// //   signal_PREDICT_PHT_ADDRESS      [i] = new SC_SIGNAL(Taddress_t)     (rename.c_str());
388// //     }
389//       }
390
391//      in_BRANCH_COMPLETE_VAL         = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
392//     out_BRANCH_COMPLETE_ACK         = new SC_OUT(Tcontrol_t)     * [_param._nb_branch_complete];
393//      in_BRANCH_COMPLETE_ADDRESS     = new SC_IN (Taddress_t)     * [_param._nb_branch_complete];
394//     if (_param._have_bht)
395//      in_BRANCH_COMPLETE_BHT_HISTORY = new SC_IN (Tbht_history_t) * [_param._nb_branch_complete];
396//     if (_param._have_pht)
397//      in_BRANCH_COMPLETE_PHT_HISTORY = new SC_IN (Tpht_history_t) * [_param._nb_branch_complete];
398//      in_BRANCH_COMPLETE_DIRECTION   = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
399// //     if (_param._have_bht)
400// //       {
401// //     signal_BRANCH_COMPLETE_BHT_ACK     = new SC_SIGNAL(Tcontrol_t) * [_param._nb_branch_complete];
402// //     signal_BRANCH_COMPLETE_BHT_ADDRESS = new SC_SIGNAL(Taddress_t) * [_param._nb_branch_complete];
403// //       }
404// //     if (_param._have_pht)
405// //       {
406// //     signal_BRANCH_COMPLETE_PHT_ACK     = new SC_SIGNAL(Tcontrol_t) * [_param._nb_branch_complete];
407// //     signal_BRANCH_COMPLETE_PHT_ADDRESS = new SC_SIGNAL(Taddress_t) * [_param._nb_branch_complete];
408// //       }
409
410//     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
411//       {
412//      rename = "in_BRANCH_COMPLETE_VAL_"         +toString(i);
413//       in_BRANCH_COMPLETE_VAL         [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
414
415//      rename = "out_BRANCH_COMPLETE_ACK_"        +toString(i);
416//      out_BRANCH_COMPLETE_ACK         [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
417
418//      rename = "in_BRANCH_COMPLETE_ADDRESS_"     +toString(i);
419//       in_BRANCH_COMPLETE_ADDRESS     [i] = new SC_IN (Taddress_t)     (rename.c_str());
420
421//      if (_param._have_bht)
422//        {
423//      rename = "in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i);
424//       in_BRANCH_COMPLETE_BHT_HISTORY [i] = new SC_IN (Tbht_history_t) (rename.c_str());
425//        }
426//      if (_param._have_pht)
427//        {
428//      rename = "in_BRANCH_COMPLETE_PHT_HISTORY_"+toString(i);
429//       in_BRANCH_COMPLETE_PHT_HISTORY [i] = new SC_IN (Tpht_history_t) (rename.c_str());
430//        }
431//      rename = "in_BRANCH_COMPLETE_DIRECTION_"  +toString(i);
432//       in_BRANCH_COMPLETE_DIRECTION   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
433// //   if (_param._have_bht)
434// //     {
435// //   rename = "signal_BRANCH_COMPLETE_BHT_ACK_"    +toString(i);
436// //   signal_BRANCH_COMPLETE_BHT_ACK     [i] = new SC_SIGNAL(Tcontrol_t) (rename.c_str());
437
438// //   rename = "signal_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i);
439// //   signal_BRANCH_COMPLETE_BHT_ADDRESS [i] = new SC_SIGNAL(Taddress_t) (rename.c_str());
440// //     }
441// //   if (_param._have_pht)
442// //     {
443// //   rename = "signal_BRANCH_COMPLETE_PHT_ACK_"    +toString(i);
444// //   signal_BRANCH_COMPLETE_PHT_ACK     [i] = new SC_SIGNAL(Tcontrol_t) (rename.c_str());
445
446// //   rename = "signal_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i);
447// //   signal_BRANCH_COMPLETE_PHT_ADDRESS [i] = new SC_SIGNAL(Taddress_t) (rename.c_str());
448// //     }
449//       }
450
451//     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
452//     string name_component;
453
454//     // =====[ component_Branch_History_Table ]============================   
455//     if (_param._have_bht)
456//       {
457//      name_component = _name+"_Branch_History_Table";
458
459//      log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
460       
461//      component_Branch_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::branch_history_table ::Branch_History_Table (name_component.c_str()               ,
462// #ifdef STATISTICS
463//                                                                                                                                                                                     _param_statistics                    ,
464// #endif
465//                                                                                                                                                                                     *(_param._param_branch_history_table));
466       
467//      // Instantiation
468//      (*(component_Branch_History_Table->in_CLOCK ))        (*(in_CLOCK ));
469//      (*(component_Branch_History_Table->in_NRESET))        (*(in_NRESET));
470
471//      for (uint32_t i=0; i<_param._nb_prediction; i++)
472//        {
473//          (*(component_Branch_History_Table-> in_PREDICT_VAL             [i]))    (*(    in_PREDICT_VAL          [i]));
474//          (*(component_Branch_History_Table->out_PREDICT_ACK             [i]))    (*(signal_PREDICT_BHT_ACK      [i]));
475//          (*(component_Branch_History_Table-> in_PREDICT_ADDRESS         [i]))    (*(signal_PREDICT_BHT_ADDRESS  [i]));
476//          (*(component_Branch_History_Table->out_PREDICT_HISTORY         [i]))    (*(   out_PREDICT_BHT_HISTORY  [i]));
477//        }
478       
479//      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
480//        {
481//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_VAL       [i]))    (*(    in_BRANCH_COMPLETE_VAL         [i]));
482//          (*(component_Branch_History_Table->out_BRANCH_COMPLETE_ACK       [i]))    (*(signal_BRANCH_COMPLETE_BHT_ACK     [i]));
483//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_ADDRESS   [i]))    (*(signal_BRANCH_COMPLETE_BHT_ADDRESS [i]));
484//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_HISTORY   [i]))    (*(    in_BRANCH_COMPLETE_BHT_HISTORY [i]));
485//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_DIRECTION [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION   [i]));
486//        }
487//       }
488
489//     // =====[ component_Pattern_History_Table ]===========================   
490//     if (_param._have_pht)
491//       {
492//      name_component = _name+"_Pattern_History_Table";
493       
494//      log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
495       
496//      component_Pattern_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::pattern_history_table::Pattern_History_Table (name_component.c_str()               ,
497// #ifdef STATISTICS
498//                                                                                                                                                                                       _param_statistics                    ,
499// #endif
500//                                                                                                                                                                                       *(_param._param_pattern_history_table));
501       
502//      // Instantiation
503//      (*(component_Pattern_History_Table->in_CLOCK))        (*(in_CLOCK));
504//      (*(component_Pattern_History_Table->in_NRESET))       (*(in_NRESET));
505       
506//      for (uint32_t i=0; i<_param._nb_prediction; i++)
507//        {
508//          (*(component_Pattern_History_Table-> in_PREDICT_VAL             [i]))    (*(    in_PREDICT_VAL          [i]));
509//          (*(component_Pattern_History_Table->out_PREDICT_ACK             [i]))    (*(signal_PREDICT_PHT_ACK      [i]));
510//          (*(component_Pattern_History_Table-> in_PREDICT_ADDRESS         [i]))    (*(signal_PREDICT_PHT_ADDRESS  [i]));
511//          (*(component_Pattern_History_Table->out_PREDICT_HISTORY         [i]))    (*(   out_PREDICT_PHT_HISTORY  [i]));
512//        }
513       
514//      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
515//        {
516//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_VAL       [i]))    (*(    in_BRANCH_COMPLETE_VAL         [i]));
517//          (*(component_Pattern_History_Table->out_BRANCH_COMPLETE_ACK       [i]))    (*(signal_BRANCH_COMPLETE_PHT_ACK     [i]));
518//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_ADDRESS   [i]))    (*(signal_BRANCH_COMPLETE_PHT_ADDRESS [i]));
519//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_HISTORY   [i]))    (*(    in_BRANCH_COMPLETE_PHT_HISTORY [i]));
520//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_DIRECTION [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION   [i]));
521//        }
522//       }
523
524//     // =====[ component_Two_Level_Branch_Predictor_Glue ]===========================   
525//     name_component = _name+"_Two_Level_Branch_Predictor_Glue";
526   
527//     log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
528   
529//     component_Two_Level_Branch_Predictor_Glue = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::two_level_branch_predictor_glue::Two_Level_Branch_Predictor_Glue (name_component.c_str()               ,
530// #ifdef STATISTICS
531//                                                                                                                                                                                                                 _param_statistics                    ,
532// #endif
533//                                                                                                                                                                                                                 *(_param._param_two_level_branch_predictor_glue));
534   
535//     // Instantiation
536// #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
537//     (*(component_Two_Level_Branch_Predictor_Glue->in_CLOCK))        (*(in_CLOCK));
538// #endif       
539//     for (uint32_t i=0; i<_param._nb_prediction; i++)
540//       {
541//      if (_param._have_bht)
542//        {
543//          (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_BHT_ACK             [i])) (*(signal_PREDICT_BHT_ACK              [i]));
544//          (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_BHT_ADDRESS         [i])) (*(signal_PREDICT_BHT_ADDRESS          [i]));
545//        }                                                                                                                                                                       
546//      if (_param._have_pht)                                                                                                                     
547//        {                                                                                                                                                                       
548//          (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_PHT_ACK             [i])) (*(signal_PREDICT_PHT_ACK              [i]));
549//          (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_PHT_ADDRESS         [i])) (*(signal_PREDICT_PHT_ADDRESS          [i]));
550//        }                                                                                                                                                                       
551//      if (_param._have_bht and _param._have_pht)                                                                                       
552//        {                                                                                                                                                                       
553//          (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_BHT_HISTORY         [i])) (*(   out_PREDICT_BHT_HISTORY          [i]));
554//        }                                                                                                                                                                       
555//      (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_ACK                 [i])) (*(   out_PREDICT_ACK                  [i]));
556//      (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_ADDRESS             [i])) (*(    in_PREDICT_ADDRESS              [i]));
557//       }
558   
559//     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
560//       {
561//      if (_param._have_bht)
562//        {
563//          (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_BHT_ACK     [i])) (*(signal_BRANCH_COMPLETE_BHT_ACK      [i]));
564//          (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_BHT_ADDRESS [i])) (*(signal_BRANCH_COMPLETE_BHT_ADDRESS  [i]));
565//        }                                                                                                                                                       
566//      if (_param._have_pht)                                                                                                     
567//        {                                                                                                                                                       
568//          (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_PHT_ACK     [i])) (*(signal_BRANCH_COMPLETE_PHT_ACK      [i]));
569//          (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_PHT_ADDRESS [i])) (*(signal_BRANCH_COMPLETE_PHT_ADDRESS  [i]));
570//        }                                                                                                                                                       
571//      if (_param._have_bht and _param._have_pht)                                                                               
572//        {                                                                                                                                                       
573//          (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_BHT_HISTORY [i])) (*(    in_BRANCH_COMPLETE_BHT_HISTORY  [i]));
574//        }                                                                                                                                                       
575//      (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_ACK         [i])) (*(   out_BRANCH_COMPLETE_ACK          [i]));
576//      (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_ADDRESS     [i])) (*(    in_BRANCH_COMPLETE_ADDRESS      [i]));
577//       }
578 
579//     log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","End");
580//   };
581 
582}; // end namespace two_level_branch_predictor
583}; // end namespace meta_predictor
584}; // end namespace predictor
585}; // end namespace stage_1_ifetch
586}; // end namespace behavioural
587}; // end namespace morpheo             
588#endif
Note: See TracBrowser for help on using the repository browser.