source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_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: 7.7 KB
Line 
1/*
2 * $Id: Register_translation_unit_Glue.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/Register_translation_unit/Register_translation_unit_Glue/include/Register_translation_unit_Glue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace core {
13namespace multi_ooo_engine {
14namespace ooo_engine {
15namespace rename_unit {
16namespace register_translation_unit {
17namespace register_translation_unit_glue {
18
19
20#undef  FUNCTION
21#define FUNCTION "Register_translation_unit_Glue::Register_translation_unit_Glue"
22  Register_translation_unit_Glue::Register_translation_unit_Glue
23  (
24#ifdef SYSTEMC
25   sc_module_name name,
26#else
27   string name,
28#endif
29#ifdef STATISTICS
30   morpheo::behavioural::Parameters_Statistics * param_statistics,
31#endif
32   morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_translation_unit_glue::Parameters * param,
33   morpheo::behavioural::Tusage_t usage
34   ):
35    _name              (name)
36    ,_param            (param)
37    ,_usage            (usage)
38  {
39    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"Begin");
40
41// #if DEBUG_Register_translation_unit_Glue == true
42//     log_printf(INFO,Register_translation_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
43
44//     std::cout << *param << std::endl;
45// #endif   
46
47    log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Allocation");
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,Register_translation_unit_Glue,FUNCTION,"Allocation of statistics");
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,Register_translation_unit_Glue,FUNCTION,"Generate the vhdl");
69       
70        vhdl();
71      }
72#endif
73
74#ifdef SYSTEMC
75    if (usage_is_set(_usage,USE_SYSTEMC))
76      {
77        log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Method - transition");
78
79        SC_METHOD (transition);
80        dont_initialize ();
81        sensitive << (*(in_CLOCK)).pos();
82       
83# ifdef SYSTEMCASS_SPECIFIC
84        // List dependency information
85# endif   
86
87        log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Method - genMealy_retire");
88
89        SC_METHOD (genMealy_retire);
90        dont_initialize ();
91//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
92        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
93          sensitive << (*(in_RETIRE_VAL           [i]))
94                    << (*(in_RETIRE_RAT_ACK       [i]))
95                    << (*(in_RETIRE_STAT_LIST_ACK [i]));
96
97# ifdef SYSTEMCASS_SPECIFIC
98        // List dependency information
99        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
100          {
101            (*(out_RETIRE_ACK           [i])) (*(in_RETIRE_RAT_ACK       [i]));
102            (*(out_RETIRE_ACK           [i])) (*(in_RETIRE_STAT_LIST_ACK [i]));
103
104            (*(out_RETIRE_RAT_VAL       [i])) (*(in_RETIRE_VAL           [i]));
105            (*(out_RETIRE_RAT_VAL       [i])) (*(in_RETIRE_STAT_LIST_ACK [i]));
106
107            (*(out_RETIRE_STAT_LIST_VAL [i])) (*(in_RETIRE_VAL           [i]));
108            (*(out_RETIRE_STAT_LIST_VAL [i])) (*(in_RETIRE_RAT_ACK       [i]));
109          }
110# endif   
111
112        log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Method - genMealy_insert_valack");
113
114        SC_METHOD (genMealy_insert_valack);
115        dont_initialize ();
116//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
117        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
118          sensitive << (*(in_INSERT_RENAME_VAL     [i]))
119                    << (*(in_INSERT_INSERT_ACK     [i]))
120                    << (*(in_INSERT_RAT_RENAME_ACK [i]))
121                    << (*(in_INSERT_RAT_INSERT_ACK [i]))
122                    << (*(in_INSERT_FREE_LIST_ACK  [i]))
123                    << (*(in_INSERT_STAT_LIST_ACK  [i]));
124       
125# ifdef SYSTEMCASS_SPECIFIC
126        // List dependency information
127        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
128          {
129            (*(out_INSERT_RENAME_ACK     [i])) (*(in_INSERT_INSERT_ACK     [i]));
130            (*(out_INSERT_RENAME_ACK     [i])) (*(in_INSERT_RAT_RENAME_ACK [i]));
131            (*(out_INSERT_RENAME_ACK     [i])) (*(in_INSERT_RAT_INSERT_ACK [i]));
132            (*(out_INSERT_RENAME_ACK     [i])) (*(in_INSERT_FREE_LIST_ACK  [i]));
133            (*(out_INSERT_RENAME_ACK     [i])) (*(in_INSERT_STAT_LIST_ACK  [i]));
134
135            (*(out_INSERT_INSERT_VAL     [i])) (*(in_INSERT_RENAME_VAL     [i]));
136            (*(out_INSERT_INSERT_VAL     [i])) (*(in_INSERT_RAT_RENAME_ACK [i]));
137            (*(out_INSERT_INSERT_VAL     [i])) (*(in_INSERT_RAT_INSERT_ACK [i]));
138            (*(out_INSERT_INSERT_VAL     [i])) (*(in_INSERT_FREE_LIST_ACK  [i]));
139            (*(out_INSERT_INSERT_VAL     [i])) (*(in_INSERT_STAT_LIST_ACK  [i]));
140
141            (*(out_INSERT_RAT_INSERT_VAL [i])) (*(in_INSERT_RENAME_VAL     [i]));
142            (*(out_INSERT_RAT_INSERT_VAL [i])) (*(in_INSERT_INSERT_ACK     [i]));
143            (*(out_INSERT_RAT_INSERT_VAL [i])) (*(in_INSERT_RAT_RENAME_ACK [i]));
144            (*(out_INSERT_RAT_INSERT_VAL [i])) (*(in_INSERT_FREE_LIST_ACK  [i]));
145            (*(out_INSERT_RAT_INSERT_VAL [i])) (*(in_INSERT_STAT_LIST_ACK  [i]));
146
147            (*(out_INSERT_FREE_LIST_VAL  [i])) (*(in_INSERT_RENAME_VAL     [i]));
148            (*(out_INSERT_FREE_LIST_VAL  [i])) (*(in_INSERT_INSERT_ACK     [i]));
149            (*(out_INSERT_FREE_LIST_VAL  [i])) (*(in_INSERT_RAT_RENAME_ACK [i]));
150            (*(out_INSERT_FREE_LIST_VAL  [i])) (*(in_INSERT_RAT_INSERT_ACK [i]));
151            (*(out_INSERT_FREE_LIST_VAL  [i])) (*(in_INSERT_STAT_LIST_ACK  [i]));
152
153            (*(out_INSERT_STAT_LIST_VAL  [i])) (*(in_INSERT_RENAME_VAL     [i]));
154            (*(out_INSERT_STAT_LIST_VAL  [i])) (*(in_INSERT_INSERT_ACK     [i]));
155            (*(out_INSERT_STAT_LIST_VAL  [i])) (*(in_INSERT_RAT_RENAME_ACK [i]));
156            (*(out_INSERT_STAT_LIST_VAL  [i])) (*(in_INSERT_RAT_INSERT_ACK [i]));
157            (*(out_INSERT_STAT_LIST_VAL  [i])) (*(in_INSERT_FREE_LIST_ACK  [i]));
158          }
159# endif   
160
161        log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Method - genMealy_insert");
162
163        SC_METHOD (genMealy_insert);
164        dont_initialize ();
165//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
166        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
167          sensitive << (*(in_INSERT_DEPENDENCY_CHECKING_READ_RA            [i]))
168                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RA_PHY     [i]))
169                    << (*(in_INSERT_DEPENDENCY_CHECKING_READ_RB            [i]))
170                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RB_PHY     [i]))
171                    << (*(in_INSERT_DEPENDENCY_CHECKING_READ_RC            [i]))
172                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RC_PHY     [i]))
173                    << (*(in_INSERT_DEPENDENCY_CHECKING_WRITE_RD           [i]))
174                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RD_LOG     [i]))
175                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RD_PHY_OLD [i]))
176                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RD_PHY_NEW [i]))
177                    << (*(in_INSERT_DEPENDENCY_CHECKING_WRITE_RE           [i]))
178                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RE_LOG     [i]))
179                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RE_PHY_OLD [i]))
180                    << (*(in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RE_PHY_NEW [i]));
181       
182# ifdef SYSTEMCASS_SPECIFIC
183        // List dependency information
184# endif   
185
186
187       
188#endif
189      }
190    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"End");
191  };
192   
193#undef  FUNCTION
194#define FUNCTION "Register_translation_unit_Glue::~Register_translation_unit_Glue"
195  Register_translation_unit_Glue::~Register_translation_unit_Glue (void)
196  {
197    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"Begin");
198
199#ifdef STATISTICS
200    if (usage_is_set(_usage,USE_STATISTICS))
201      statistics_deallocation ();
202#endif
203
204    log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Deallocation");
205    deallocation ();
206
207    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"End");
208  };
209
210}; // end namespace register_translation_unit_glue
211}; // end namespace register_translation_unit
212}; // end namespace rename_unit
213}; // end namespace ooo_engine
214}; // end namespace multi_ooo_engine
215}; // end namespace core
216
217}; // end namespace behavioural
218}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.