source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue.cpp @ 123

Last change on this file since 123 was 123, checked in by rosiere, 15 years ago

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 6.7 KB
Line 
1/*
2 * $Id: Front_end_Glue.cpp 123 2009-06-08 20:43:30Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/include/Front_end_Glue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace core {
13namespace multi_front_end {
14namespace front_end {
15namespace front_end_glue {
16
17
18#undef  FUNCTION
19#define FUNCTION "Front_end_Glue::Front_end_Glue"
20  Front_end_Glue::Front_end_Glue
21  (
22#ifdef SYSTEMC
23   sc_module_name name,
24#else
25   string name,
26#endif
27#ifdef STATISTICS
28   morpheo::behavioural::Parameters_Statistics * param_statistics,
29#endif
30   morpheo::behavioural::core::multi_front_end::front_end::front_end_glue::Parameters * param,
31   morpheo::behavioural::Tusage_t usage
32   ):
33    _name              (name)
34    ,_param            (param)
35    ,_usage            (usage)
36  {
37    log_begin(Front_end_Glue,FUNCTION);
38
39    usage_environment(_usage);
40
41// #if DEBUG_Front_end_Glue == true
42//     log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
43
44//     std::cout << *param << std::endl;
45// #endif   
46
47    log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
48
49    allocation (
50#ifdef STATISTICS
51                param_statistics
52#endif
53                );
54
55#ifdef STATISTICS
56    if (usage_is_set(_usage,USE_STATISTICS))
57      { 
58        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Allocation of statistics"),_name.c_str());
59
60        statistics_allocation(param_statistics);
61      }
62#endif
63
64#ifdef VHDL
65    if (usage_is_set(_usage,USE_VHDL))
66      {
67        // generate the vhdl
68        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Generate the vhdl"),_name.c_str());
69       
70        vhdl();
71      }
72#endif
73
74#ifdef SYSTEMC
75    if (usage_is_set(_usage,USE_SYSTEMC))
76      {
77        // Constant
78        if (_param->_have_port_context_id)
79          for (uint32_t i=0; i<_param->_nb_decod_unit; ++i)
80            for (uint32_t j=0; j<_param->_decod_unit_nb_context[i]; ++j)
81              PORT_WRITE(out_IFETCH_DECOD_UNIT_CONTEXT_ID [i][j],j);
82       
83        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - transition"),_name.c_str());
84
85        SC_METHOD (transition);
86        dont_initialize ();
87        sensitive << (*(in_CLOCK)).pos();
88       
89# ifdef SYSTEMCASS_SPECIFIC
90        // List dependency information
91# endif   
92
93//      log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
94
95//      SC_METHOD (genMoore);
96//      dont_initialize ();
97//      sensitive << (*(in_CLOCK)).neg(); // need internal register
98       
99// # ifdef SYSTEMCASS_SPECIFIC
100//      // List dependency information
101// # endif   
102
103        if (_param->_have_port_context_id)
104          {
105        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - genMealy_decod"),_name.c_str());
106
107        SC_METHOD (genMealy_decod);
108        dont_initialize ();
109//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
110        for (uint32_t i=0; i<_param->_nb_decod_unit; ++i)
111          for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j)
112            sensitive << (*( in_DECOD_DECOD_UNIT_CONTEXT_ID [i][j]));
113
114# ifdef SYSTEMCASS_SPECIFIC
115        // List dependency information
116# endif   
117          }
118
119        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - genMealy_branch_complete"),_name.c_str());
120
121        SC_METHOD (genMealy_branch_complete);
122        dont_initialize ();
123//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
124        for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
125          sensitive << (*( in_BRANCH_COMPLETE_VAL                             [i]))
126                    << (*( in_BRANCH_COMPLETE_PREDICTION_UNIT_ACK             [i]))
127                    << (*( in_BRANCH_COMPLETE_PREDICTION_UNIT_MISS_PREDICTION [i]))
128                    << (*( in_BRANCH_COMPLETE_CONTEXT_STATE_ACK               [i]));
129
130# ifdef SYSTEMCASS_SPECIFIC
131        // List dependency information
132# endif   
133
134        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - genMealy_event"),_name.c_str());
135
136        SC_METHOD (genMealy_event);
137        dont_initialize ();
138//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
139        for (uint32_t i=0; i<_param->_nb_context; ++i)
140          {
141            sensitive << (*( in_EVENT_ACK                            [i]))
142                      << (*( in_EVENT_IFETCH_UNIT_ACK                [i]))
143                      << (*( in_EVENT_PREDICTION_UNIT_ACK            [i]))
144                      << (*( in_EVENT_CONTEXT_STATE_VAL              [i]))
145                      << (*( in_EVENT_CONTEXT_STATE_ADDRESS          [i]))
146                      << (*( in_EVENT_CONTEXT_STATE_ADDRESS_NEXT     [i]))
147                      << (*( in_EVENT_CONTEXT_STATE_ADDRESS_NEXT_VAL [i]))
148                      << (*( in_EVENT_CONTEXT_STATE_IS_DS_TAKE       [i]))
149                      << (*( in_EVENT_CONTEXT_STATE_TYPE             [i]))
150                      << (*( in_EVENT_CONTEXT_STATE_FLUSH_ONLY       [i]))
151              ;
152            if (_param->_have_port_depth)
153            sensitive << (*( in_EVENT_CONTEXT_STATE_DEPTH            [i]));
154          }
155
156# ifdef SYSTEMCASS_SPECIFIC
157        // List dependency information
158# endif     
159
160        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - genMealy_depth"),_name.c_str());
161
162        SC_METHOD (genMealy_depth);
163        dont_initialize ();
164//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
165        for (uint32_t i=0; i<_param->_nb_context; ++i)
166          {
167            if (_param->_have_port_depth)
168            sensitive << (*( in_DEPTH_PREDICTION_UNIT_CURRENT [i]))
169                      << (*( in_DEPTH_PREDICTION_UNIT_MIN     [i])) 
170                      << (*( in_DEPTH_PREDICTION_UNIT_MAX     [i]));
171
172            sensitive << (*( in_DEPTH_PREDICTION_UNIT_VAL     [i]))
173                      << (*( in_DEPTH_PREDICTION_UNIT_FULL    [i]));
174          }
175
176# ifdef SYSTEMCASS_SPECIFIC
177        // List dependency information
178# endif     
179     
180        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - genMealy_nb_inst"),_name.c_str());
181
182        SC_METHOD (genMealy_nb_inst);
183        dont_initialize ();
184//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
185        for (uint32_t i=0; i<_param->_nb_context; ++i)
186            sensitive << (*( in_NB_INST_DECOD_UNIT_DECOD_ALL [i]));
187
188# ifdef SYSTEMCASS_SPECIFIC
189        // List dependency information
190# endif   
191       
192#endif
193      }
194    log_end(Front_end_Glue,FUNCTION);
195  };
196   
197#undef  FUNCTION
198#define FUNCTION "Front_end_Glue::~Front_end_Glue"
199  Front_end_Glue::~Front_end_Glue (void)
200  {
201    log_begin(Front_end_Glue,FUNCTION);
202
203#ifdef STATISTICS
204    if (usage_is_set(_usage,USE_STATISTICS))
205      {
206        statistics_deallocation();
207      }
208#endif
209
210    log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Deallocation"),_name.c_str());
211    deallocation ();
212
213    log_end(Front_end_Glue,FUNCTION);
214  };
215
216}; // end namespace front_end_glue
217}; // end namespace front_end
218}; // end namespace multi_front_end
219}; // end namespace core
220
221}; // end namespace behavioural
222}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.