source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h @ 145

Last change on this file since 145 was 145, checked in by rosiere, 14 years ago

1) add test with SPECINT2K
2) new config of Selftest
3) modif RAT to support multiple depth_save ... but not finish (need fix Update Prediction Table)
4) add Function_pointer but need fix

  • Property svn:keywords set to Id
File size: 12.1 KB
Line 
1#ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_register_translation_unit_Register_translation_unit_h
2#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_register_translation_unit_Register_translation_unit_h
3
4/*
5 * $Id: Register_translation_unit.h 145 2010-10-13 18:15:51Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#ifdef SYSTEMC
12#include "systemc.h"
13#endif
14
15#include <iostream>
16#include "Common/include/ToString.h"
17#include "Common/include/Debug.h"
18#include "Behavioural/include/Types.h"
19
20#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Parameters.h"
21#ifdef STATISTICS
22#include "Behavioural/include/Stat.h"
23#endif
24#include "Behavioural/include/Component.h"
25#ifdef VHDL
26#include "Behavioural/include/Vhdl.h"
27#endif
28#include "Behavioural/include/Usage.h"
29
30#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/include/Dependency_checking_unit.h"
31#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h"
32#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_Translation_unit.h"
33#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h"
34#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Register_translation_unit_Glue.h"
35
36namespace morpheo {
37namespace behavioural {
38namespace core {
39namespace multi_ooo_engine {
40namespace ooo_engine {
41namespace rename_unit {
42namespace register_translation_unit {
43
44
45  class Register_translation_unit
46#if SYSTEMC
47    : public sc_module
48#endif
49  {
50    // -----[ fields ]----------------------------------------------------
51    // Parameters
52  protected : const std::string  _name;
53  protected : const Parameters * _param;
54  private   : const Tusage_t     _usage;
55
56#ifdef STATISTICS
57  public    : Stat                           * _stat;
58#endif
59
60  public    : Component                      * _component;
61  private   : Interfaces                     * _interfaces;
62
63#ifdef SYSTEMC
64    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65    // Interface
66  public    : SC_CLOCK                      *  in_CLOCK        ;
67  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
68
69    // ~~~~~[ Interface "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_VAL               ;//[nb_inst_insert]
71  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_ACK               ;//[nb_inst_insert]
72  public    : SC_IN (Tcontext_t        )   **  in_RENAME_FRONT_END_ID      ;//[nb_inst_insert]
73  public    : SC_IN (Tcontext_t        )   **  in_RENAME_CONTEXT_ID        ;//[nb_inst_insert]
74  public    : SC_IN (Tdepth_t          )   **  in_RENAME_DEPTH             ;//[nb_inst_insert]
75  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_SAVE_RAT          ;//[nb_inst_insert]
76  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_READ_RA           ;//[nb_inst_insert]
77  public    : SC_IN (Tgeneral_address_t)   **  in_RENAME_NUM_REG_RA_LOG    ;//[nb_inst_insert]
78  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_READ_RB           ;//[nb_inst_insert]
79  public    : SC_IN (Tgeneral_address_t)   **  in_RENAME_NUM_REG_RB_LOG    ;//[nb_inst_insert]
80  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_READ_RC           ;//[nb_inst_insert]
81  public    : SC_IN (Tspecial_address_t)   **  in_RENAME_NUM_REG_RC_LOG    ;//[nb_inst_insert]
82  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_WRITE_RD          ;//[nb_inst_insert]
83  public    : SC_IN (Tgeneral_address_t)   **  in_RENAME_NUM_REG_RD_LOG    ;//[nb_inst_insert]
84  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_WRITE_RE          ;//[nb_inst_insert]
85  public    : SC_IN (Tspecial_address_t)   **  in_RENAME_NUM_REG_RE_LOG    ;//[nb_inst_insert]
86
87    // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_VAL               ;//[nb_inst_insert]
89  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_ACK               ;//[nb_inst_insert]
90//public    : SC_OUT(Tcontext_t        )   ** out_INSERT_FRONT_END_ID      ;//[nb_inst_insert]
91//public    : SC_OUT(Tcontext_t        )   ** out_INSERT_CONTEXT_ID        ;//[nb_inst_insert]
92  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_READ_RA           ;//[nb_inst_insert]
93#ifdef DEBUG
94  public    : SC_OUT(Tgeneral_address_t)   ** out_INSERT_NUM_REG_RA_LOG    ;//[nb_inst_insert]
95#endif
96  public    : SC_OUT(Tgeneral_address_t)   ** out_INSERT_NUM_REG_RA_PHY    ;//[nb_inst_insert]
97  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_READ_RB           ;//[nb_inst_insert]
98#ifdef DEBUG
99  public    : SC_OUT(Tgeneral_address_t)   ** out_INSERT_NUM_REG_RB_LOG    ;//[nb_inst_insert]
100#endif
101  public    : SC_OUT(Tgeneral_address_t)   ** out_INSERT_NUM_REG_RB_PHY    ;//[nb_inst_insert]
102  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_READ_RC           ;//[nb_inst_insert]
103#ifdef DEBUG
104  public    : SC_OUT(Tspecial_address_t)   ** out_INSERT_NUM_REG_RC_LOG    ;//[nb_inst_insert]
105#endif
106  public    : SC_OUT(Tspecial_address_t)   ** out_INSERT_NUM_REG_RC_PHY    ;//[nb_inst_insert]
107  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_WRITE_RD          ;//[nb_inst_insert]
108  public    : SC_OUT(Tgeneral_address_t)   ** out_INSERT_NUM_REG_RD_LOG    ;//[nb_inst_insert]
109  public    : SC_OUT(Tgeneral_address_t)   ** out_INSERT_NUM_REG_RD_PHY_OLD;//[nb_inst_insert]
110  public    : SC_OUT(Tgeneral_address_t)   ** out_INSERT_NUM_REG_RD_PHY_NEW;//[nb_inst_insert]
111  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_WRITE_RE          ;//[nb_inst_insert]
112  public    : SC_OUT(Tspecial_address_t)   ** out_INSERT_NUM_REG_RE_LOG    ;//[nb_inst_insert]
113  public    : SC_OUT(Tspecial_address_t)   ** out_INSERT_NUM_REG_RE_PHY_OLD;//[nb_inst_insert]
114  public    : SC_OUT(Tspecial_address_t)   ** out_INSERT_NUM_REG_RE_PHY_NEW;//[nb_inst_insert]
115
116    // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
117  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_VAL               ;//[nb_inst_retire]
118  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_ACK               ;//[nb_inst_retire]
119  public    : SC_IN (Tcontext_t        )   **  in_RETIRE_FRONT_END_ID      ;//[nb_inst_retire]
120  public    : SC_IN (Tcontext_t        )   **  in_RETIRE_CONTEXT_ID        ;//[nb_inst_retire]
121//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RA           ;//[nb_inst_retire]
122//public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RA_PHY    ;//[nb_inst_retire]
123//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RB           ;//[nb_inst_retire]
124//public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RB_PHY    ;//[nb_inst_retire]
125//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RC           ;//[nb_inst_retire]
126//public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RC_PHY    ;//[nb_inst_retire]
127  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_WRITE_RD          ;//[nb_inst_retire]
128  public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RD_LOG    ;//[nb_inst_retire]
129  public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RD_PHY_OLD;//[nb_inst_retire]
130  public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RD_PHY_NEW;//[nb_inst_retire]
131  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_WRITE_RE          ;//[nb_inst_retire]
132  public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RE_LOG    ;//[nb_inst_retire]
133  public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RE_PHY_OLD;//[nb_inst_retire]
134  public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RE_PHY_NEW;//[nb_inst_retire]
135  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE           ;//[nb_inst_retire]
136  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE_RD_PHY_OLD;//[nb_inst_retire]
137  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE_RE_PHY_OLD;//[nb_inst_retire]
138
139    // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_VAL         ;//[nb_front_end][nb_context]
141  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_EVENT_ACK         ;//[nb_front_end][nb_context]
142  public    : SC_IN (Tevent_state_t    )  ***  in_RETIRE_EVENT_STATE       ;//[nb_front_end][nb_context]
143  public    : SC_IN (Tevent_type_t     )  ***  in_RETIRE_EVENT_TYPE        ;//[nb_front_end][nb_context]
144  public    : SC_IN (Tdepth_t          )  ***  in_RETIRE_EVENT_DEPTH       ;//[nb_front_end][nb_context]
145
146    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
147  public    : SC_IN (Tdepth_t          )  ***  in_DEPTH_MIN                ;//[nb_front_end][nb_context]
148  public    : SC_IN (Tdepth_t          )  ***  in_DEPTH_MAX                ;//[nb_front_end][nb_context]
149  public    : SC_IN (Tcontrol_t        )  ***  in_DEPTH_FULL               ;//[nb_front_end][nb_context]
150
151    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
152#ifdef DEBUG_TEST
153  public    : SC_IN (bool      )            *  in_INFO_ROB_EMPTY  ;
154#endif
155
156    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
157  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::dependency_checking_unit::Dependency_checking_unit                   * _component_dependency_checking_unit;
158  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::free_list_unit::Free_List_unit                                       * _component_free_list_unit;
159  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Register_Address_Translation_unit * _component_register_address_translation_unit;
160  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::stat_list_unit::Stat_List_unit                                       * _component_stat_list_unit;
161  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_translation_unit_glue::Register_translation_unit_Glue       * _component_register_translation_unit_glue;
162
163    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
164
165    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
166#endif
167
168    // -----[ Methods ]---------------------------------------------------
169
170#ifdef SYSTEMC
171    SC_HAS_PROCESS (Register_translation_unit);
172#endif
173  public  :          Register_translation_unit             
174  (
175#ifdef SYSTEMC
176   sc_module_name                                name,
177#else                                         
178   std::string                                   name,
179#endif                                         
180#ifdef STATISTICS
181   morpheo::behavioural::Parameters_Statistics * param_statistics,
182#endif
183   Parameters                                  * param,
184   morpheo::behavioural::Tusage_t                usage
185   );
186  public  :          ~Register_translation_unit             (void);
187                                               
188  private : void        allocation                (
189#ifdef STATISTICS
190                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
191#else
192                                                   void
193#endif
194                                                   );
195  private : void        deallocation              (void);
196                                               
197#ifdef SYSTEMC                                 
198# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
199  public  : void        transition                (void);
200# endif                                       
201#endif                                         
202
203#if VHDL                                       
204  public  : void        vhdl                      (void);
205#endif                                         
206
207#ifdef STATISTICS
208  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
209#endif
210#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
211  private : void        end_cycle                 (void);
212#endif
213  };
214
215}; // end namespace register_translation_unit
216}; // end namespace rename_unit
217}; // end namespace ooo_engine
218}; // end namespace multi_ooo_engine
219}; // end namespace core
220
221}; // end namespace behavioural
222}; // end namespace morpheo             
223
224#endif
Note: See TracBrowser for help on using the repository browser.