source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select.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: 9.0 KB
Line 
1/*
2 * $Id: Rename_select.cpp 123 2009-06-08 20:43:30Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Rename_select.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace core {
13namespace multi_ooo_engine {
14namespace ooo_engine {
15namespace rename_unit {
16namespace rename_select {
17
18
19#undef  FUNCTION
20#define FUNCTION "Rename_select::Rename_select"
21  Rename_select::Rename_select
22  (
23#ifdef SYSTEMC
24   sc_module_name name,
25#else
26   string name,
27#endif
28#ifdef STATISTICS
29   morpheo::behavioural::Parameters_Statistics * param_statistics,
30#endif
31   morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::rename_select::Parameters * param,
32   morpheo::behavioural::Tusage_t usage
33   ):
34    _name              (name)
35    ,_param            (param)
36    ,_usage            (usage)
37  {
38    log_printf(FUNC,Rename_select,FUNCTION,"Begin");
39
40// #if DEBUG_Core == true
41//     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
42
43//     std::cout << *param << std::endl;
44// #endif   
45
46    log_printf(INFO,Rename_select,FUNCTION,"Allocation");
47
48    allocation (
49#ifdef STATISTICS
50                param_statistics
51#endif
52                );
53
54#ifdef STATISTICS
55    if (usage_is_set(_usage,USE_STATISTICS))
56      { 
57        log_printf(INFO,Rename_select,FUNCTION,"Allocation of statistics");
58
59        statistics_declaration(param_statistics);
60      }
61#endif
62
63#ifdef VHDL
64    if (usage_is_set(_usage,USE_VHDL))
65      {
66        // generate the vhdl
67        log_printf(INFO,Rename_select,FUNCTION,"Generate the vhdl");
68       
69        vhdl();
70      }
71#endif
72
73#ifdef SYSTEMC
74    if (usage_is_set(_usage,USE_SYSTEMC))
75      {
76        log_printf(INFO,Rename_select,FUNCTION,"Method - transition");
77
78        SC_METHOD (transition);
79        dont_initialize ();
80        sensitive << (*(in_CLOCK)).pos();
81       
82# ifdef SYSTEMCASS_SPECIFIC
83        // List dependency information
84# endif   
85
86        log_printf(INFO,Rename_select,FUNCTION,"Method - genMealy");
87
88        SC_METHOD (genMealy);
89        dont_initialize ();
90        sensitive << (*(in_CLOCK)).neg();
91        for (uint32_t i=0; i<_param->_nb_front_end; i++)
92          for (uint32_t j=0; j<_param->_nb_inst_decod [i]; j++)
93            {
94              sensitive << (*(in_RENAME_IN_VAL           [i][j]))
95                        << (*(in_RENAME_IN_TYPE          [i][j]))
96                        << (*(in_RENAME_IN_OPERATION     [i][j]))
97                        << (*(in_RENAME_IN_NO_EXECUTE    [i][j]))
98//                      << (*(in_RENAME_IN_HAVE_EVENT    [i][j]))
99                        << (*(in_RENAME_IN_LAST_EVENT    [i][j]))
100                        << (*(in_RENAME_IN_IS_DELAY_SLOT [i][j]))
101#ifdef DEBUG
102                        << (*(in_RENAME_IN_ADDRESS       [i][j]))
103#endif
104                        << (*(in_RENAME_IN_ADDRESS_NEXT  [i][j]))
105                        << (*(in_RENAME_IN_HAS_IMMEDIAT  [i][j]))
106                        << (*(in_RENAME_IN_IMMEDIAT      [i][j]))
107                        << (*(in_RENAME_IN_READ_RA       [i][j]))
108                        << (*(in_RENAME_IN_NUM_REG_RA    [i][j]))
109                        << (*(in_RENAME_IN_READ_RB       [i][j]))
110                        << (*(in_RENAME_IN_NUM_REG_RB    [i][j]))
111                        << (*(in_RENAME_IN_READ_RC       [i][j]))
112                        << (*(in_RENAME_IN_NUM_REG_RC    [i][j]))
113                        << (*(in_RENAME_IN_WRITE_RD      [i][j]))
114                        << (*(in_RENAME_IN_NUM_REG_RD    [i][j]))
115                        << (*(in_RENAME_IN_WRITE_RE      [i][j]))
116                        << (*(in_RENAME_IN_NUM_REG_RE    [i][j]))
117                        << (*(in_RENAME_IN_EXCEPTION_USE [i][j]))
118                        << (*(in_RENAME_IN_EXCEPTION     [i][j]));
119              if (_param->_have_port_front_end_id)
120              sensitive << (*(in_RENAME_IN_FRONT_END_ID  [i][j]));
121              if (_param->_have_port_context_id)
122              sensitive << (*(in_RENAME_IN_CONTEXT_ID    [i][j]));
123              if (_param->_have_port_depth)
124              sensitive << (*(in_RENAME_IN_DEPTH         [i][j]));
125            }
126
127        for (uint32_t i=0; i<_param->_nb_front_end; i++)
128          for (uint32_t j=0; j<_param->_nb_context [i]; j++)
129            sensitive // << (*(in_RETIRE_EVENT_FLUSH [i][j]))
130                      << (*(in_RETIRE_EVENT_STOP  [i][j]));
131
132        for (uint32_t i=0; i<_param->_nb_inst_rename; i++)
133          sensitive << (*(in_RENAME_OUT_ACK          [i]));
134       
135# ifdef SYSTEMCASS_SPECIFIC
136        // List dependency information
137       
138        for (uint32_t i=0; i<_param->_nb_front_end; i++)
139          for (uint32_t j=0; j<_param->_nb_inst_decod [i]; j++)
140            for (uint32_t x=0; x<_param->_nb_inst_rename; x++)
141              {
142                (*(out_RENAME_IN_ACK            [i][j])) (*(in_RENAME_IN_VAL           [i][j]));
143                (*(out_RENAME_IN_ACK            [i][j])) (*(in_RENAME_OUT_ACK          [x]   ));
144              }
145
146        for (uint32_t x=0; x<_param->_nb_inst_rename; x++)
147          {
148            for (uint32_t i=0; i<_param->_nb_front_end; i++)
149              for (uint32_t j=0; j<_param->_nb_inst_decod [i]; j++)
150                {
151                  (*(out_RENAME_OUT_VAL           [x])) (*(in_RENAME_IN_VAL           [i][j]));
152
153                  if (_param->_have_port_front_end_id)
154                    {
155                  (*(out_RENAME_OUT_FRONT_END_ID  [x])) (*(in_RENAME_IN_VAL           [i][j]));
156                  (*(out_RENAME_OUT_FRONT_END_ID  [x])) (*(in_RENAME_IN_FRONT_END_ID  [i][j]));
157                    }
158                  if (_param->_have_port_context_id)
159                    {
160                  (*(out_RENAME_OUT_CONTEXT_ID    [x])) (*(in_RENAME_IN_VAL           [i][j]));
161                  (*(out_RENAME_OUT_CONTEXT_ID    [x])) (*(in_RENAME_IN_CONTEXT_ID    [i][j]));
162                    }
163                  if (_param->_have_port_depth)
164                    {
165                  (*(out_RENAME_OUT_DEPTH         [x])) (*(in_RENAME_IN_VAL           [i][j]));
166                  (*(out_RENAME_OUT_DEPTH         [x])) (*(in_RENAME_IN_DEPTH         [i][j]));
167                    }
168                  (*(out_RENAME_OUT_TYPE          [x])) (*(in_RENAME_IN_VAL           [i][j]));
169                  (*(out_RENAME_OUT_TYPE          [x])) (*(in_RENAME_IN_TYPE          [i][j]));
170                  (*(out_RENAME_OUT_OPERATION     [x])) (*(in_RENAME_IN_VAL           [i][j]));
171                  (*(out_RENAME_OUT_OPERATION     [x])) (*(in_RENAME_IN_OPERATION     [i][j]));
172                  (*(out_RENAME_OUT_NO_EXECUTE    [x])) (*(in_RENAME_IN_VAL           [i][j]));
173                  (*(out_RENAME_OUT_NO_EXECUTE    [x])) (*(in_RENAME_IN_NO_EXECUTE    [i][j]));
174                  (*(out_RENAME_OUT_IS_DELAY_SLOT [x])) (*(in_RENAME_IN_VAL           [i][j]));
175                  (*(out_RENAME_OUT_IS_DELAY_SLOT [x])) (*(in_RENAME_IN_IS_DELAY_SLOT [i][j]));
176#ifdef DEBUG
177                  (*(out_RENAME_OUT_ADDRESS       [x])) (*(in_RENAME_IN_VAL           [i][j]));
178                  (*(out_RENAME_OUT_ADDRESS       [x])) (*(in_RENAME_IN_ADDRESS       [i][j]));
179#endif
180                  (*(out_RENAME_OUT_ADDRESS_NEXT  [x])) (*(in_RENAME_IN_VAL           [i][j]));
181                  (*(out_RENAME_OUT_ADDRESS_NEXT  [x])) (*(in_RENAME_IN_ADDRESS_NEXT  [i][j]));
182                  (*(out_RENAME_OUT_HAS_IMMEDIAT  [x])) (*(in_RENAME_IN_VAL           [i][j]));
183                  (*(out_RENAME_OUT_HAS_IMMEDIAT  [x])) (*(in_RENAME_IN_HAS_IMMEDIAT  [i][j]));
184                  (*(out_RENAME_OUT_IMMEDIAT      [x])) (*(in_RENAME_IN_VAL           [i][j]));
185                  (*(out_RENAME_OUT_IMMEDIAT      [x])) (*(in_RENAME_IN_IMMEDIAT      [i][j]));
186                  (*(out_RENAME_OUT_READ_RA       [x])) (*(in_RENAME_IN_VAL           [i][j]));
187                  (*(out_RENAME_OUT_READ_RA       [x])) (*(in_RENAME_IN_READ_RA       [i][j]));
188                  (*(out_RENAME_OUT_NUM_REG_RA    [x])) (*(in_RENAME_IN_VAL           [i][j]));
189                  (*(out_RENAME_OUT_NUM_REG_RA    [x])) (*(in_RENAME_IN_NUM_REG_RA    [i][j]));
190                  (*(out_RENAME_OUT_READ_RB       [x])) (*(in_RENAME_IN_VAL           [i][j]));
191                  (*(out_RENAME_OUT_READ_RB       [x])) (*(in_RENAME_IN_READ_RB       [i][j]));
192                  (*(out_RENAME_OUT_NUM_REG_RB    [x])) (*(in_RENAME_IN_VAL           [i][j]));
193                  (*(out_RENAME_OUT_NUM_REG_RB    [x])) (*(in_RENAME_IN_NUM_REG_RB    [i][j]));
194                  (*(out_RENAME_OUT_READ_RC       [x])) (*(in_RENAME_IN_VAL           [i][j]));
195                  (*(out_RENAME_OUT_READ_RC       [x])) (*(in_RENAME_IN_READ_RC       [i][j]));
196                  (*(out_RENAME_OUT_NUM_REG_RC    [x])) (*(in_RENAME_IN_VAL           [i][j]));
197                  (*(out_RENAME_OUT_NUM_REG_RC    [x])) (*(in_RENAME_IN_NUM_REG_RC    [i][j]));
198                  (*(out_RENAME_OUT_WRITE_RD      [x])) (*(in_RENAME_IN_VAL           [i][j]));
199                  (*(out_RENAME_OUT_WRITE_RD      [x])) (*(in_RENAME_IN_WRITE_RD      [i][j]));
200                  (*(out_RENAME_OUT_NUM_REG_RD    [x])) (*(in_RENAME_IN_VAL           [i][j]));
201                  (*(out_RENAME_OUT_NUM_REG_RD    [x])) (*(in_RENAME_IN_NUM_REG_RD    [i][j]));
202                  (*(out_RENAME_OUT_WRITE_RE      [x])) (*(in_RENAME_IN_VAL           [i][j]));
203                  (*(out_RENAME_OUT_WRITE_RE      [x])) (*(in_RENAME_IN_WRITE_RE      [i][j]));
204                  (*(out_RENAME_OUT_NUM_REG_RE    [x])) (*(in_RENAME_IN_VAL           [i][j]));
205                  (*(out_RENAME_OUT_NUM_REG_RE    [x])) (*(in_RENAME_IN_NUM_REG_RE    [i][j]));
206                  (*(out_RENAME_OUT_EXCEPTION_USE [x])) (*(in_RENAME_IN_VAL           [i][j]));
207                  (*(out_RENAME_OUT_EXCEPTION_USE [x])) (*(in_RENAME_IN_EXCEPTION_USE [i][j]));
208                  (*(out_RENAME_OUT_EXCEPTION     [x])) (*(in_RENAME_IN_VAL           [i][j]));
209                  (*(out_RENAME_OUT_EXCEPTION     [x])) (*(in_RENAME_IN_EXCEPTION     [i][j]));
210                }
211          }
212# endif   
213       
214#endif
215      }
216    log_printf(FUNC,Rename_select,FUNCTION,"End");
217  };
218   
219#undef  FUNCTION
220#define FUNCTION "Rename_select::~Rename_select"
221  Rename_select::~Rename_select (void)
222  {
223    log_printf(FUNC,Rename_select,FUNCTION,"Begin");
224
225#ifdef STATISTICS
226    if (usage_is_set(_usage,USE_STATISTICS))
227      {
228        log_printf(INFO,Rename_select,FUNCTION,"Generate Statistics file");
229       
230        delete _stat;
231      }
232#endif
233
234    log_printf(INFO,Rename_select,FUNCTION,"Deallocation");
235    deallocation ();
236
237    log_printf(FUNC,Rename_select,FUNCTION,"End");
238  };
239
240}; // end namespace rename_select
241}; // end namespace rename_unit
242}; // end namespace ooo_engine
243}; // end namespace multi_ooo_engine
244}; // end namespace core
245
246}; // end namespace behavioural
247}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.