source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_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: 11.8 KB
Line 
1#ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_register_translation_unit_register_address_translation_unit_Register_Address_Translation_unit_h
2#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_register_translation_unit_register_address_translation_unit_Register_Address_Translation_unit_h
3
4/*
5 * $Id: Register_Address_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/Register_Address_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
30namespace morpheo {
31namespace behavioural {
32
33namespace core {
34namespace multi_ooo_engine {
35namespace ooo_engine {
36namespace rename_unit {
37namespace register_translation_unit {
38namespace register_address_translation_unit {
39
40
41  class Register_Address_Translation_unit
42#if SYSTEMC
43    : public sc_module
44#endif
45  {
46    // -----[ fields ]----------------------------------------------------
47    // Parameters
48  protected : const std::string  _name;
49  protected : const Parameters * _param;
50  private   : const Tusage_t     _usage;
51
52#ifdef STATISTICS
53  public    : Stat                           * _stat;
54#endif
55
56  public    : Component                      * _component;
57  private   : Interfaces                     * _interfaces;
58
59#ifdef SYSTEMC
60    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61    // Interface
62  public    : SC_CLOCK                      *  in_CLOCK        ;
63  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
64
65    // ~~~~~[ Interface "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_VAL               ;//[nb_inst_insert]
67  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_ACK               ;//[nb_inst_insert]
68  public    : SC_IN (Tcontext_t        )   **  in_RENAME_FRONT_END_ID      ;//[nb_inst_insert]
69  public    : SC_IN (Tcontext_t        )   **  in_RENAME_CONTEXT_ID        ;//[nb_inst_insert]
70  public    : SC_IN (Tdepth_t          )   **  in_RENAME_DEPTH             ;//[nb_inst_insert]
71  public    : SC_IN (Tcontrol_t        )   **  in_RENAME_SAVE_RAT          ;//[nb_inst_insert]
72  public    : SC_IN (Tgeneral_address_t)   **  in_RENAME_NUM_REG_RA_LOG    ;//[nb_inst_insert]
73  public    : SC_IN (Tgeneral_address_t)   **  in_RENAME_NUM_REG_RB_LOG    ;//[nb_inst_insert]
74  public    : SC_IN (Tspecial_address_t)   **  in_RENAME_NUM_REG_RC_LOG    ;//[nb_inst_insert]
75  public    : SC_IN (Tgeneral_address_t)   **  in_RENAME_NUM_REG_RD_LOG    ;//[nb_inst_insert]
76  public    : SC_IN (Tspecial_address_t)   **  in_RENAME_NUM_REG_RE_LOG    ;//[nb_inst_insert]
77  public    : SC_OUT(Tgeneral_address_t)   ** out_RENAME_NUM_REG_RA_PHY    ;//[nb_inst_insert]
78  public    : SC_OUT(Tgeneral_address_t)   ** out_RENAME_NUM_REG_RB_PHY    ;//[nb_inst_insert]
79  public    : SC_OUT(Tspecial_address_t)   ** out_RENAME_NUM_REG_RC_PHY    ;//[nb_inst_insert]
80  public    : SC_OUT(Tgeneral_address_t)   ** out_RENAME_NUM_REG_RD_PHY_OLD;//[nb_inst_insert]
81  public    : SC_OUT(Tspecial_address_t)   ** out_RENAME_NUM_REG_RE_PHY_OLD;//[nb_inst_insert]
82
83    // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_VAL               ;//[nb_inst_insert]
85  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_ACK               ;//[nb_inst_insert]
86//public    : SC_IN (Tcontext_t        )   **  in_INSERT_FRONT_END_ID      ;//[nb_inst_insert] = in_rename_front_end_id
87//public    : SC_IN (Tcontext_t        )   **  in_INSERT_CONTEXT_ID        ;//[nb_inst_insert] = in_rename_context_id
88  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_WRITE_RD          ;//[nb_inst_insert]
89  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_WRITE_RE          ;//[nb_inst_insert]
90  public    : SC_IN (Tgeneral_address_t)   **  in_INSERT_NUM_REG_RD_LOG    ;//[nb_inst_insert]
91  public    : SC_IN (Tspecial_address_t)   **  in_INSERT_NUM_REG_RE_LOG    ;//[nb_inst_insert]
92  public    : SC_IN (Tgeneral_address_t)   **  in_INSERT_NUM_REG_RD_PHY    ;//[nb_inst_insert]
93  public    : SC_IN (Tspecial_address_t)   **  in_INSERT_NUM_REG_RE_PHY    ;//[nb_inst_insert]
94
95    // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
96  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_VAL               ;//[nb_inst_retire]
97  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_ACK               ;//[nb_inst_retire]
98  public    : SC_IN (Tcontext_t        )   **  in_RETIRE_FRONT_END_ID      ;//[nb_inst_retire]
99  public    : SC_IN (Tcontext_t        )   **  in_RETIRE_CONTEXT_ID        ;//[nb_inst_retire]
100  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_WRITE_RD          ;//[nb_inst_retire]
101  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_WRITE_RE          ;//[nb_inst_retire]
102  public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RD_LOG    ;//[nb_inst_retire]
103  public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RE_LOG    ;//[nb_inst_retire]
104  public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RD_PHY_NEW;//[nb_inst_retire]
105  public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RE_PHY_NEW;//[nb_inst_retire]
106  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE           ;//[nb_inst_retire]
107
108    // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
109  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_VAL         ;//[nb_front_end][nb_context]
110  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_EVENT_ACK         ;//[nb_front_end][nb_context]
111  public    : SC_IN (Tevent_state_t    )  ***  in_RETIRE_EVENT_STATE       ;//[nb_front_end][nb_context]
112  public    : SC_IN (Tevent_type_t     )  ***  in_RETIRE_EVENT_TYPE        ;//[nb_front_end][nb_context]
113  public    : SC_IN (Tdepth_t          )  ***  in_RETIRE_EVENT_DEPTH       ;//[nb_front_end][nb_context]
114
115    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116  public    : SC_IN (Tdepth_t          )  ***  in_DEPTH_MIN                   ;//[nb_front_end][nb_context]
117  public    : SC_IN (Tdepth_t          )  ***  in_DEPTH_MAX                   ;//[nb_front_end][nb_context]
118  public    : SC_IN (Tcontrol_t        )  ***  in_DEPTH_FULL                  ;//[nb_front_end][nb_context]
119
120    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
121
122    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
123                                                                            //                                                                            NO ONE DEPTH
124  private   : Tgeneral_address_t          *** RAT_GPR_NOT_SPECULATIVE;      //[nb_front_end][nb_context]                      [nb_general_register_logic] X  X   X
125  private   : Tgeneral_address_t         **** RAT_GPR_SPECULATIVE;          //[nb_front_end][nb_context][nb_branch_speculated][nb_general_register_logic]    X   X
126  private   : bool                       **** RAT_GPR_SPECULATIVE_VALID;    //[nb_front_end][nb_context][nb_branch_speculated][nb_general_register_logic]    X   X
127
128  private   : Tspecial_address_t          *** RAT_SPR_NOT_SPECULATIVE;      //[nb_front_end][nb_context]                      [nb_special_register_logic] X  X   X
129  private   : Tspecial_address_t         **** RAT_SPR_SPECULATIVE;          //[nb_front_end][nb_context][nb_branch_speculated][nb_special_register_logic]    X   X
130  private   : bool                       **** RAT_SPR_SPECULATIVE_VALID;    //[nb_front_end][nb_context][nb_branch_speculated][nb_special_register_logic]    X   X
131
132  private   : bool                        *** reg_RAT_USE;                  //[nb_front_end][nb_context][nb_branch_speculated]                                   X
133  private   : bool                         ** reg_SAVE_RAT;                 //[nb_front_end][nb_context]                                                         X
134
135    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
136  private   : Tcontrol_t                    * internal_RENAME_ACK;          //[nb_inst_insert]
137  private   : Tcontrol_t                    * internal_INSERT_ACK;          //[nb_inst_insert]
138  private   : Tcontrol_t                    * internal_RETIRE_ACK;          //[nb_inst_retire]
139  private   : Tcontrol_t                   ** internal_RETIRE_EVENT_ACK    ;//[nb_front_end][nb_context]
140
141    // function pointer
142  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Register_Address_Translation_unit::*function_constant       ) (void);
143  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Register_Address_Translation_unit::*function_transition     ) (void);
144  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Register_Address_Translation_unit::*function_genMealy_rename) (void);
145#endif
146
147    // -----[ Methods ]---------------------------------------------------
148
149#ifdef SYSTEMC
150    SC_HAS_PROCESS (Register_Address_Translation_unit);
151#endif
152  public  :          Register_Address_Translation_unit             
153  (
154#ifdef SYSTEMC
155   sc_module_name                                name,
156#else                                         
157   std::string                                   name,
158#endif                                         
159#ifdef STATISTICS
160   morpheo::behavioural::Parameters_Statistics * param_statistics,
161#endif
162   Parameters                                  * param,
163   morpheo::behavioural::Tusage_t                usage
164   );
165  public  :          ~Register_Address_Translation_unit             (void);
166                                               
167  private : void        allocation                (
168#ifdef STATISTICS
169                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
170#else
171                                                   void
172#endif
173                                                   );
174  private : void        deallocation              (void);
175                                               
176#ifdef SYSTEMC                                 
177  public  : void        constant                            (void);
178  public  : void        transition                          (void);
179  public  : void        genMealy_rename                     (void);
180
181  // public  : void        function_no_save_constant           (void);
182  // public  : void        function_no_save_transition         (void);
183  // public  : void        function_no_save_genMealy_rename    (void);
184
185  public  : void        function_one_save_constant          (void);
186  public  : void        function_one_save_transition        (void);
187  public  : void        function_one_save_genMealy_rename   (void);
188
189  public  : void        function_depth_save_constant        (void);
190  public  : void        function_depth_save_transition      (void);
191  public  : void        function_depth_save_genMealy_rename (void);
192#endif                                         
193
194#if VHDL                                       
195  public  : void        vhdl                      (void);
196  private : void        vhdl_declaration          (Vhdl * & vhdl);
197  private : void        vhdl_body                 (Vhdl * & vhdl);
198#endif                                         
199
200#ifdef STATISTICS
201  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
202#endif
203#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
204  private : void        end_cycle                 (void);
205#endif
206  };
207
208}; // end namespace register_address_translation_unit
209}; // end namespace register_translation_unit
210}; // end namespace rename_unit
211}; // end namespace ooo_engine
212}; // end namespace multi_ooo_engine
213}; // end namespace core
214
215}; // end namespace behavioural
216}; // end namespace morpheo             
217
218#endif
Note: See TracBrowser for help on using the repository browser.