source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/include/Rename_unit_Glue.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: 10.3 KB
Line 
1#ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_rename_unit_glue_Rename_unit_Glue_h
2#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_rename_unit_glue_Rename_unit_Glue_h
3
4/*
5 * $Id: Rename_unit_Glue.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 "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/include/Parameters.h"
16#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/include/Types.h"
17#ifdef STATISTICS
18#include "Behavioural/include/Stat.h"
19#endif
20#include "Behavioural/include/Component.h"
21#ifdef VHDL
22#include "Behavioural/include/Vhdl.h"
23#endif
24#include "Behavioural/include/Usage.h"
25
26#include "Common/include/ToString.h"
27#include "Common/include/Debug.h"
28
29#include <iostream>
30
31namespace morpheo {
32namespace behavioural {
33
34namespace core {
35namespace multi_ooo_engine {
36namespace ooo_engine {
37namespace rename_unit {
38namespace rename_unit_glue {
39
40
41  class Rename_unit_Glue
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 : "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66//public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_VAL                                    ;//[nb_inst_insert]
67//public    : SC_IN (Tcontrol_t        )   **  in_INSERT_ACK                                    ;//[nb_inst_insert]
68  public    : SC_OUT(Tcontext_t        )   ** out_INSERT_FRONT_END_ID                           ;//[nb_inst_insert]
69  public    : SC_OUT(Tcontext_t        )   ** out_INSERT_CONTEXT_ID                             ;//[nb_inst_insert]
70  public    : SC_OUT(Tdepth_t          )   ** out_INSERT_DEPTH                                  ;//[nb_inst_insert]
71  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_SAVE_RAT                               ;//[nb_inst_insert]
72  public    : SC_OUT(Ttype_t           )   ** out_INSERT_TYPE                                   ;//[nb_inst_insert]
73  public    : SC_OUT(Toperation_t      )   ** out_INSERT_OPERATION                              ;//[nb_inst_insert]
74  public    : SC_OUT(Tgeneral_data_t   )   ** out_INSERT_IMMEDIAT                               ;//[nb_inst_insert]
75  public    : SC_OUT(Texception_t      )   ** out_INSERT_EXCEPTION_USE                          ;//[nb_inst_insert]
76  public    : SC_OUT(Texception_t      )   ** out_INSERT_EXCEPTION                              ;//[nb_inst_insert]
77  public    : SC_OUT(Tspecial_address_t)   ** out_INSERT_NUM_REG_RE_PHY_NEW                     ;//[nb_inst_insert]
78  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_NO_EXECUTE                             ;//[nb_inst_insert]
79                                                                                               
80  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_RENAME_SELECT_VAL                      ;//[nb_inst_insert]
81  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_RENAME_SELECT_ACK                      ;//[nb_inst_insert]
82  public    : SC_IN (Tcontext_t        )   **  in_INSERT_RENAME_SELECT_FRONT_END_ID             ;//[nb_inst_insert]
83  public    : SC_IN (Tcontext_t        )   **  in_INSERT_RENAME_SELECT_CONTEXT_ID               ;//[nb_inst_insert]
84  public    : SC_IN (Tdepth_t          )   **  in_INSERT_RENAME_SELECT_DEPTH                    ;//[nb_inst_insert]
85  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_RENAME_SELECT_SAVE_RAT                 ;//[nb_inst_insert]
86  public    : SC_IN (Ttype_t           )   **  in_INSERT_RENAME_SELECT_TYPE                     ;//[nb_inst_insert]
87  public    : SC_IN (Toperation_t      )   **  in_INSERT_RENAME_SELECT_OPERATION                ;//[nb_inst_insert]
88  public    : SC_IN (Tgeneral_data_t   )   **  in_INSERT_RENAME_SELECT_IMMEDIAT                 ;//[nb_inst_insert]
89  public    : SC_IN (Texception_t      )   **  in_INSERT_RENAME_SELECT_EXCEPTION_USE            ;//[nb_inst_insert]
90  public    : SC_IN (Texception_t      )   **  in_INSERT_RENAME_SELECT_EXCEPTION                ;//[nb_inst_insert]
91  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_RENAME_SELECT_NO_EXECUTE               ;//[nb_inst_insert]
92                                                                                               
93  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_REGISTER_TRANSLATION_VAL               ;//[nb_inst_insert]
94  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_REGISTER_TRANSLATION_ACK               ;//[nb_inst_insert]
95  public    : SC_OUT(Tcontext_t        )   ** out_INSERT_REGISTER_TRANSLATION_FRONT_END_ID      ;//[nb_inst_insert]
96  public    : SC_OUT(Tcontext_t        )   ** out_INSERT_REGISTER_TRANSLATION_CONTEXT_ID        ;//[nb_inst_insert]
97  public    : SC_OUT(Tdepth_t          )   ** out_INSERT_REGISTER_TRANSLATION_DEPTH             ;//[nb_inst_insert]
98  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_REGISTER_TRANSLATION_SAVE_RAT          ;//[nb_inst_insert]
99  public    : SC_IN (Tspecial_address_t)   **  in_INSERT_REGISTER_TRANSLATION_NUM_REG_RE_PHY_NEW;//[nb_inst_insert]
100
101  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_LOAD_STORE_QUEUE_POINTER_VAL           ;//[nb_inst_insert]
102  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_LOAD_STORE_QUEUE_POINTER_ACK           ;//[nb_inst_insert]
103  public    : SC_OUT(Tcontext_t        )   ** out_INSERT_LOAD_STORE_QUEUE_POINTER_FRONT_END_ID  ;//[nb_inst_insert]
104  public    : SC_OUT(Tcontext_t        )   ** out_INSERT_LOAD_STORE_QUEUE_POINTER_CONTEXT_ID    ;//[nb_inst_insert]
105  public    : SC_OUT(Ttype_t           )   ** out_INSERT_LOAD_STORE_QUEUE_POINTER_TYPE          ;//[nb_inst_insert]
106  public    : SC_OUT(Toperation_t      )   ** out_INSERT_LOAD_STORE_QUEUE_POINTER_OPERATION     ;//[nb_inst_insert]
107                                                                                               
108    // ~~~~~[ Interface : "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                     
109  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_VAL                                    ;//[nb_inst_retire]
110  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_ACK                                    ;//[nb_inst_retire]
111                                                                                               
112  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_LOAD_STORE_QUEUE_POINTER_VAL           ;//[nb_inst_retire]
113  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_LOAD_STORE_QUEUE_POINTER_ACK           ;//[nb_inst_retire]
114                                                                                               
115  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_REGISTER_TRANSLATION_VAL               ;//[nb_inst_retire]
116  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_REGISTER_TRANSLATION_ACK               ;//[nb_inst_retire]
117
118    // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_VAL                              ;//[nb_front_end][nb_context]
120  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_EVENT_ACK                              ;//[nb_front_end][nb_context]
121                                                                                               
122  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_EVENT_LOAD_STORE_QUEUE_POINTER_VAL     ;//[nb_front_end][nb_context]
123  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_LOAD_STORE_QUEUE_POINTER_ACK     ;//[nb_front_end][nb_context]
124                                                                                               
125  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_EVENT_REGISTER_TRANSLATION_VAL         ;//[nb_front_end][nb_context]
126  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_REGISTER_TRANSLATION_ACK         ;//[nb_front_end][nb_context]
127
128    // ~~~~~[ Interface : "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                     
129  public    : SC_IN (Tspr_t            )  ***  in_SPR_READ_SR                                   ;//[nb_front_end][nb_context]
130
131    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
132
133    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
134
135    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
136#endif
137
138    // -----[ Methods ]---------------------------------------------------
139
140#ifdef SYSTEMC
141    SC_HAS_PROCESS (Rename_unit_Glue);
142#endif
143  public  :          Rename_unit_Glue             
144  (
145#ifdef SYSTEMC
146   sc_module_name                                name,
147#else                                         
148   std::string                                   name,
149#endif                                         
150#ifdef STATISTICS
151   morpheo::behavioural::Parameters_Statistics * param_statistics,
152#endif
153   Parameters                                  * param,
154   morpheo::behavioural::Tusage_t                usage
155   );
156  public  :          ~Rename_unit_Glue             (void);
157                                               
158  private : void        allocation                (
159#ifdef STATISTICS
160                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
161#else
162                                                   void
163#endif
164                                                   );
165  private : void        deallocation              (void);
166                                               
167#ifdef SYSTEMC                                 
168  public  : void        transition                   (void);
169//public  : void        genMoore                     (void);
170  public  : void        genMealy_insert_valack       (void);
171  public  : void        genMealy_retire_valack       (void);
172  public  : void        genMealy_retire_event_valack (void);
173  public  : void        genMealy_insert              (void);
174#endif                                         
175
176#if VHDL                                       
177  public  : void        vhdl                      (void);
178  private : void        vhdl_declaration          (Vhdl * & vhdl);
179  private : void        vhdl_body                 (Vhdl * & vhdl);
180#endif                                         
181
182#ifdef STATISTICS
183  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
184  public  : void        statistics_deallocation   (void);
185#endif
186#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
187  private : void        end_cycle                 (void);
188#endif
189  };
190
191}; // end namespace rename_unit_glue
192}; // end namespace rename_unit
193}; // end namespace ooo_engine
194}; // end namespace multi_ooo_engine
195}; // end namespace core
196
197}; // end namespace behavioural
198}; // end namespace morpheo             
199
200#endif
Note: See TracBrowser for help on using the repository browser.