source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h @ 61

Last change on this file since 61 was 61, checked in by rosiere, 17 years ago

register_unit_glue : separation des fonctions - evite les cycles dans le graph de dependances des ports i/o

File size: 9.7 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Register_unit_Glue_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Register_unit_Glue_h
3
4/*
5 * $Id$
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_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"
21#ifdef STATISTICS
22#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.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
30using namespace std;
31
32namespace morpheo {
33namespace behavioural {
34
35namespace core {
36namespace multi_execute_loop {
37namespace execute_loop {
38namespace register_unit {
39namespace register_unit_glue {
40
41
42  class Register_unit_Glue
43#if SYSTEMC
44    : public sc_module
45#endif
46  {
47    // -----[ fields ]----------------------------------------------------
48    // Parameters
49  protected : const string       _name;
50  protected : const Parameters * _param;
51  private   : const Tusage_t     _usage;
52
53//#ifdef STATISTICS
54//  protected : const morpheo::behavioural::Parameters_Statistics * _param_statistics;
55//#endif
56
57#ifdef STATISTICS
58  private   : Statistics                     * _stat;
59#endif
60
61  public    : Component                      * _component;
62  private   : Interfaces                     * _interfaces;
63
64#ifdef SYSTEMC
65    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66    // Interface
67  public    : SC_CLOCK                      *  in_CLOCK  ;
68  public    : SC_IN (Tcontrol_t)            *  in_NRESET ;
69  public    : SC_OUT(Tcontrol_t        )    * out_CONST_0;
70  public    : SC_OUT(Tcontrol_t        )    * out_CONST_1;
71
72    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73  public    : SC_IN (Tcontrol_t        )   **  in_GPR_READ_VAL              ;
74  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_ACK              ;
75  public    : SC_IN (Tcontext_t        )   **  in_GPR_READ_OOO_ENGINE_ID    ;
76  public    : SC_OUT(Tgeneral_data_t   )   ** out_GPR_READ_DATA             ;
77  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_DATA_VAL         ;
78
79  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_READ_REGISTERFILE_VAL ;
80  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_READ_REGISTERFILE_ACK ;
81  public    : SC_IN (Tgeneral_data_t   )  ***  in_GPR_READ_REGISTERFILE_DATA;
82
83  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_READ_STATUS_VAL       ;
84  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_READ_STATUS_ACK       ;
85  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_READ_STATUS_DATA_VAL  ;
86
87    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88  public    : SC_IN (Tcontrol_t        )   **  in_SPR_READ_VAL              ;
89  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_ACK              ;
90  public    : SC_IN (Tcontext_t        )   **  in_SPR_READ_OOO_ENGINE_ID    ;
91  public    : SC_OUT(Tspecial_data_t   )   ** out_SPR_READ_DATA             ;
92  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_DATA_VAL         ;
93
94  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_READ_REGISTERFILE_VAL ;
95  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_READ_REGISTERFILE_ACK ;
96  public    : SC_IN (Tspecial_data_t   )  ***  in_SPR_READ_REGISTERFILE_DATA;
97
98  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_READ_STATUS_VAL       ;
99  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_READ_STATUS_ACK       ;
100  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_READ_STATUS_DATA_VAL  ;
101
102    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
103  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_VAL             ;
104  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_WRITE_ACK             ;
105  public    : SC_IN (Tcontext_t        )   **  in_GPR_WRITE_OOO_ENGINE_ID   ;
106
107  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_WRITE_REGISTERFILE_VAL;
108  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_WRITE_REGISTERFILE_ACK;
109
110  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_WRITE_STATUS_VAL      ;
111  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_WRITE_STATUS_ACK      ;
112   
113    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
114  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_VAL             ;
115  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_WRITE_ACK             ;
116  public    : SC_IN (Tcontext_t        )   **  in_SPR_WRITE_OOO_ENGINE_ID   ;
117
118  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_WRITE_REGISTERFILE_VAL;
119  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_WRITE_REGISTERFILE_ACK;
120
121  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_WRITE_STATUS_VAL      ;
122  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_WRITE_STATUS_ACK      ;
123
124    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_VAL                       ;
126  public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_ACK                       ;
127  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RD_USE                    ;
128  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RE_USE                    ;
129
130  public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_GPR_STATUS_VAL            ;
131  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_GPR_STATUS_ACK            ;
132
133  public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_SPR_STATUS_VAL            ;
134  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_SPR_STATUS_ACK            ;
135
136    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
137  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_VAL                       ;
138  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_ACK                       ;
139  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_OLD_USE                ; 
140  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_NEW_USE                ;
141  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_OLD_USE                ; 
142  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_NEW_USE                ;
143
144  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_GPR_STATUS_NEW_VAL        ;
145  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_GPR_STATUS_NEW_ACK        ;
146  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_GPR_STATUS_OLD_VAL        ;
147  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_GPR_STATUS_OLD_ACK        ;
148
149  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_SPR_STATUS_NEW_VAL        ;
150  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_SPR_STATUS_NEW_ACK        ;
151  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_SPR_STATUS_OLD_VAL        ;
152  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_SPR_STATUS_OLD_ACK        ;
153
154    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
155
156    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
157
158    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
159#endif
160
161    // -----[ methods ]---------------------------------------------------
162
163#ifdef SYSTEMC
164    SC_HAS_PROCESS (Register_unit_Glue);
165#endif
166  public  :          Register_unit_Glue             
167  (
168#ifdef SYSTEMC
169   sc_module_name                                name,
170#else                                         
171   string                                        name,
172#endif                                         
173#ifdef STATISTICS
174   morpheo::behavioural::Parameters_Statistics * param_statistics,
175#endif
176   Parameters                                  * param,
177   morpheo::behavioural::Tusage_t                usage=USE_ALL
178   );
179  public  :          ~Register_unit_Glue             (void);
180                                               
181  private : void     allocation                (void);
182  private : void     deallocation              (void);
183                                               
184#ifdef SYSTEMC                                 
185//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
186  public  : void     transition                      (void);
187  public  : void     genMealy_gpr_read               (void);
188  public  : void     genMealy_gpr_read_status        (void);
189  public  : void     genMealy_gpr_read_registerfile  (void);
190  public  : void     genMealy_gpr_write              (void);
191  public  : void     genMealy_gpr_write_status       (void);
192  public  : void     genMealy_gpr_write_registerfile (void);
193  public  : void     genMealy_spr_read               (void);
194  public  : void     genMealy_spr_read_status        (void);
195  public  : void     genMealy_spr_read_registerfile  (void);
196  public  : void     genMealy_spr_write              (void);
197  public  : void     genMealy_spr_write_status       (void);
198  public  : void     genMealy_spr_write_registerfile (void);
199  public  : void     genMealy_insert                 (void);
200  public  : void     genMealy_retire                 (void);
201
202//#endif
203#endif                                         
204#ifdef STATISTICS
205  public  : string   statistics                (uint32_t depth);
206#endif
207                                               
208#if VHDL                                       
209  public  : void     vhdl                      (void);
210  private : void     vhdl_declaration          (Vhdl * & vhdl);
211  private : void     vhdl_body                 (Vhdl * & vhdl);
212#endif                                         
213                                               
214#ifdef VHDL_TESTBENCH                         
215  private : void     vhdl_testbench_transition (void);
216#endif
217  };
218
219}; // end namespace register_unit_glue
220}; // end namespace register_unit
221}; // end namespace execute_loop
222}; // end namespace multi_execute_loop
223}; // end namespace core
224
225}; // end namespace behavioural
226}; // end namespace morpheo             
227
228#endif
Note: See TracBrowser for help on using the repository browser.