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

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

Modif mineur : ajout d'info de débug

Release non stable

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