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

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

1) Add soc test
2) fix bug (Pc management, Decod and execute, Update prediction ...)

  • Property svn:keywords set to Id
File size: 6.2 KB
Line 
1/*
2 * $Id: Front_end_Glue.cpp 101 2009-01-15 17:19:08Z 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            if (_param->_have_port_depth)
151            sensitive << (*( in_EVENT_CONTEXT_STATE_DEPTH            [i]));
152          }
153
154# ifdef SYSTEMCASS_SPECIFIC
155        // List dependency information
156# endif     
157
158        log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Method - genMealy_depth"),_name.c_str());
159
160        SC_METHOD (genMealy_depth);
161        dont_initialize ();
162//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
163        for (uint32_t i=0; i<_param->_nb_context; ++i)
164          {
165            if (_param->_have_port_depth)
166            sensitive << (*( in_DEPTH_PREDICTION_UNIT_CURRENT [i]))
167                      << (*( in_DEPTH_PREDICTION_UNIT_MIN     [i])) 
168                      << (*( in_DEPTH_PREDICTION_UNIT_MAX     [i]));
169
170            sensitive << (*( in_DEPTH_PREDICTION_UNIT_VAL     [i]))
171                      << (*( in_DEPTH_PREDICTION_UNIT_FULL    [i]));
172          }
173
174# ifdef SYSTEMCASS_SPECIFIC
175        // List dependency information
176# endif     
177     
178       
179#endif
180      }
181    log_end(Front_end_Glue,FUNCTION);
182  };
183   
184#undef  FUNCTION
185#define FUNCTION "Front_end_Glue::~Front_end_Glue"
186  Front_end_Glue::~Front_end_Glue (void)
187  {
188    log_begin(Front_end_Glue,FUNCTION);
189
190#ifdef STATISTICS
191    if (usage_is_set(_usage,USE_STATISTICS))
192      {
193        statistics_deallocation();
194      }
195#endif
196
197    log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Deallocation"),_name.c_str());
198    deallocation ();
199
200    log_end(Front_end_Glue,FUNCTION);
201  };
202
203}; // end namespace front_end_glue
204}; // end namespace front_end
205}; // end namespace multi_front_end
206}; // end namespace core
207
208}; // end namespace behavioural
209}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.