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

Last change on this file since 23 was 3, checked in by kane, 17 years ago

1) Ajout d'un "printer" XML pour la configuration de paramètres

2) Fin du composant "Two_Level_Branch_Predictor"

validation * systemc

  • vhdl
File size: 6.1 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/include/Two_Level_Branch_Predictor_Glue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace stage_1_ifetch {
13namespace predictor {
14namespace meta_predictor {
15namespace two_level_branch_predictor {
16namespace two_level_branch_predictor_glue {
17
18
19#ifdef SYSTEMC
20  Two_Level_Branch_Predictor_Glue::Two_Level_Branch_Predictor_Glue (sc_module_name name,
21#else
22  Two_Level_Branch_Predictor_Glue::Two_Level_Branch_Predictor_Glue (string name,
23#endif
24#ifdef STATISTICS
25                                                                    morpheo::behavioural::Parameters_Statistics             param_statistics,
26#endif
27                                                                    morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::two_level_branch_predictor_glue::Parameters param ):
28                                                                    _name              (name)
29                                                                    ,_param            (param)
30// #ifdef STATISTICS
31//                                                                  ,_param_statistics (param_statistics)
32// #endif
33  {
34    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"Two_Level_Branch_Predictor_Glue","Begin");
35
36#ifdef STATISTICS
37    // Allocation of statistics
38    _stat = new Statistics (static_cast<string>(_name),
39                            param_statistics          ,
40                            param);
41#endif
42
43#ifdef VHDL_TESTBENCH
44    // Creation of a testbench
45    //  -> port
46    //  -> clock's signals
47    _vhdl_testbench = new Vhdl_Testbench (_name);
48    vhdl_testbench_port           ();
49    _vhdl_testbench->set_clock    ("in_CLOCK",false);
50#endif
51
52#ifdef VHDL
53    // generate the vhdl
54    vhdl();
55#endif
56
57#ifdef SYSTEMC
58    allocation ();
59
60#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
61    SC_METHOD (transition);
62    dont_initialize ();
63    sensitive_pos << *(in_CLOCK);
64#endif
65
66    SC_METHOD (genMealy_predict_ack);
67    dont_initialize ();
68    sensitive_neg << *(in_CLOCK);
69    for (uint32_t i=0; i<_param._nb_prediction; i++)
70      {
71        if (_param._have_bht)
72        sensitive << (*(in_PREDICT_BHT_ACK     [i]));
73        if (_param._have_pht)
74        sensitive << (*(in_PREDICT_PHT_ACK     [i]));
75      }
76
77#ifdef SYSTEMCASS_SPECIFIC
78    // List dependency information
79    for (uint32_t i=0; i<_param._nb_prediction; i++)
80      {
81        if (_param._have_bht)
82          (*(out_PREDICT_ACK         [i])) (*(in_PREDICT_BHT_ACK     [i]));
83        if (_param._have_pht)
84          (*(out_PREDICT_ACK         [i])) (*(in_PREDICT_PHT_ACK     [i]));
85      }
86#endif
87   
88    if (_param._have_bht)
89      {
90        SC_METHOD (genMealy_predict_bht_address);
91        dont_initialize ();
92        sensitive_neg << *(in_CLOCK);
93        for (uint32_t i=0; i<_param._nb_prediction; i++)
94          sensitive << (*(in_PREDICT_ADDRESS     [i]));
95       
96#ifdef SYSTEMCASS_SPECIFIC
97        // List dependency information
98        for (uint32_t i=0; i<_param._nb_prediction; i++)
99          (*(out_PREDICT_BHT_ADDRESS [i])) (*(in_PREDICT_ADDRESS     [i]));
100#endif
101      }
102
103    if (_param._have_pht)
104      {
105        SC_METHOD (genMealy_predict_pht_address);
106        dont_initialize ();
107        sensitive_neg << *(in_CLOCK);
108        for (uint32_t i=0; i<_param._nb_prediction; i++)
109          {
110            if (_param._have_bht)
111              sensitive << (*(in_PREDICT_BHT_HISTORY [i]));
112            sensitive << (*(in_PREDICT_ADDRESS     [i]));
113          }
114       
115#ifdef SYSTEMCASS_SPECIFIC
116        // List dependency information
117        for (uint32_t i=0; i<_param._nb_prediction; i++)
118          {
119            (*(out_PREDICT_PHT_ADDRESS [i])) (*(in_PREDICT_ADDRESS     [i]));
120            if (_param._have_bht)
121              (*(out_PREDICT_PHT_ADDRESS [i])) (*(in_PREDICT_BHT_HISTORY [i]));
122          }
123#endif
124      }
125
126    SC_METHOD (genMealy_branch_complete_ack);
127    dont_initialize ();
128    sensitive_neg << *(in_CLOCK);
129    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
130      {
131        if (_param._have_bht)
132        sensitive << (*(in_BRANCH_COMPLETE_BHT_ACK     [i]));
133        if (_param._have_pht)
134        sensitive << (*(in_BRANCH_COMPLETE_PHT_ACK     [i]));
135      }
136
137#ifdef SYSTEMCASS_SPECIFIC
138    // List dependency information
139    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
140      {
141        if (_param._have_bht)
142          (*(out_BRANCH_COMPLETE_ACK         [i])) (*(in_BRANCH_COMPLETE_BHT_ACK     [i]));
143        if (_param._have_pht)
144          (*(out_BRANCH_COMPLETE_ACK         [i])) (*(in_BRANCH_COMPLETE_PHT_ACK     [i]));
145      }
146#endif
147   
148    if (_param._have_bht)
149      {
150        SC_METHOD (genMealy_branch_complete_bht_address);
151        dont_initialize ();
152        sensitive_neg << *(in_CLOCK);
153        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
154          sensitive << (*(in_BRANCH_COMPLETE_ADDRESS     [i]));
155       
156#ifdef SYSTEMCASS_SPECIFIC
157        // List dependency information
158        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
159          (*(out_BRANCH_COMPLETE_BHT_ADDRESS [i])) (*(in_BRANCH_COMPLETE_ADDRESS     [i]));
160#endif
161      }
162
163    if (_param._have_pht)
164      {
165        SC_METHOD (genMealy_branch_complete_pht_address);
166        dont_initialize ();
167        sensitive_neg << *(in_CLOCK);
168        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
169          {
170            if (_param._have_bht)
171              sensitive << (*(in_BRANCH_COMPLETE_BHT_HISTORY [i]));
172            sensitive << (*(in_BRANCH_COMPLETE_ADDRESS     [i]));
173          }
174       
175#ifdef SYSTEMCASS_SPECIFIC
176        // List dependency information
177        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
178          {
179            (*(out_BRANCH_COMPLETE_PHT_ADDRESS [i])) (*(in_BRANCH_COMPLETE_ADDRESS     [i]));
180            if (_param._have_bht)
181              (*(out_BRANCH_COMPLETE_PHT_ADDRESS [i])) (*(in_BRANCH_COMPLETE_BHT_HISTORY [i]));
182          }
183#endif
184      }
185
186#endif
187    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"Two_Level_Branch_Predictor_Glue","End");
188  };
189 
190  Two_Level_Branch_Predictor_Glue::~Two_Level_Branch_Predictor_Glue (void)
191  {
192    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"~Two_Level_Branch_Predictor_Glue","Begin");
193
194#ifdef VHDL_TESTBENCH
195    // generate the test bench
196    _vhdl_testbench->generate_file();
197    delete _vhdl_testbench;
198#endif
199
200#ifdef STATISTICS
201    _stat->generate_file(statistics(0));
202   
203    delete _stat;
204#endif
205
206#ifdef SYSTEMC
207    deallocation ();
208#endif
209
210    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"~Two_Level_Branch_Predictor_Glue","End");
211  };
212
213}; // end namespace two_level_branch_predictor_glue
214}; // end namespace two_level_branch_predictor
215}; // end namespace meta_predictor
216}; // end namespace predictor
217}; // end namespace stage_1_ifetch
218
219}; // end namespace behavioural
220}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.