source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h @ 62

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

Modification en profondeur de Component-port_map.
Compilation ok pour Register_unit ... a tester (systemC et vhdl)

File size: 10.2 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_load_store_unit_Load_store_unit_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_load_store_unit_Load_store_unit_h
3
4/*
5 * $Id$
6 *
7 * [ Description ]
8 *
9 * Ce composant peut être amélioré en placant deux ptr de lecture au lieu d'un : un pour l'accès au cache et un pour le commit
10 */
11
12#ifdef SYSTEMC
13#include "systemc.h"
14#endif
15
16#include <iostream>
17#include "Common/include/ToString.h"
18#include "Common/include/Debug.h"
19
20#include "Behavioural/Generic/Queue_Control/include/Queue_Control.h"
21
22#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Types.h"
23#include "Behavioural/Generic/Queue_Control/include/Queue_Control.h"
24#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Parameters.h"
25#ifdef STATISTICS
26#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Statistics.h"
27#endif
28#include "Behavioural/include/Component.h"
29#ifdef VHDL
30#include "Behavioural/include/Vhdl.h"
31#endif
32
33using namespace std;
34using namespace morpheo::behavioural::generic::queue_control;
35
36namespace morpheo {
37namespace behavioural {
38namespace core {
39namespace multi_execute_loop {
40namespace execute_loop {
41namespace multi_execute_unit {
42namespace execute_unit {
43namespace load_store_unit {
44
45
46  class Load_store_unit
47#if SYSTEMC
48    : public sc_module
49#endif
50  {
51    // -----[ fields ]----------------------------------------------------
52    // Parameters
53  protected : const string       _name;
54
55  protected : const Parameters * _param;
56//#ifdef STATISTICS
57//  protected : const morpheo::behavioural::Parameters_Statistics * _param_statistics;
58//#endif
59
60#ifdef STATISTICS
61  private   : Statistics                     * _stat;
62#endif
63
64  public    : Component                      * _component;
65  private   : Interfaces                     * _interfaces;
66
67#ifdef SYSTEMC
68    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69    // Interface
70  public    : SC_CLOCK                      *  in_CLOCK        ;
71  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
72
73    // ~~~~~[ Interface "memory_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74  public    : SC_IN (Tcontrol_t        )    *  in_MEMORY_IN_VAL         ;
75  public    : SC_OUT(Tcontrol_t        )    * out_MEMORY_IN_ACK         ;
76  public    : SC_IN (Tcontext_t        )    *  in_MEMORY_IN_CONTEXT_ID  ;
77  public    : SC_IN (Tpacket_t         )    *  in_MEMORY_IN_PACKET_ID   ;
78  public    : SC_IN (Toperation_t      )    *  in_MEMORY_IN_OPERATION   ;
79  public    : SC_IN (Tlsq_ptr_t        )    *  in_MEMORY_IN_STORE_QUEUE_PTR_WRITE;
80  public    : SC_IN (Tlsq_ptr_t        )    *  in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE;
81//public    : SC_IN (Tcontrol_t        )    *  in_MEMORY_IN_HAS_IMMEDIAT;
82  public    : SC_IN (Tgeneral_data_t   )    *  in_MEMORY_IN_IMMEDIAT    ; // memory address
83  public    : SC_IN (Tgeneral_data_t   )    *  in_MEMORY_IN_DATA_RA     ; // memory address
84  public    : SC_IN (Tgeneral_data_t   )    *  in_MEMORY_IN_DATA_RB     ; // data        (store)
85//public    : SC_IN (Tspecial_data_t   )    *  in_MEMORY_IN_DATA_RC     ;
86  public    : SC_IN (Tcontrol_t        )    *  in_MEMORY_IN_WRITE_RD    ; // = (operation==load)
87  public    : SC_IN (Tgeneral_address_t)    *  in_MEMORY_IN_NUM_REG_RD  ; // destination (load)
88//public    : SC_IN (Tcontrol_t        )    *  in_MEMORY_IN_WRITE_RE    ;
89//public    : SC_IN (Tspecial_address_t)    *  in_MEMORY_IN_NUM_REG_RE  ;
90
91    // ~~~~~[ Interface "memory_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92  public    : SC_OUT(Tcontrol_t        )    * out_MEMORY_OUT_VAL       ;
93  public    : SC_IN (Tcontrol_t        )    *  in_MEMORY_OUT_ACK       ;
94  public    : SC_OUT(Tcontext_t        )    * out_MEMORY_OUT_CONTEXT_ID;
95  public    : SC_OUT(Tpacket_t         )    * out_MEMORY_OUT_PACKET_ID ;
96  public    : SC_OUT(Tcontrol_t        )    * out_MEMORY_OUT_WRITE_RD  ; // = (operation==load)
97  public    : SC_OUT(Tgeneral_address_t)    * out_MEMORY_OUT_NUM_REG_RD; // destination (load)
98  public    : SC_OUT(Tgeneral_data_t   )    * out_MEMORY_OUT_DATA_RD   ; // data        (load)
99//public    : SC_OUT(Tcontrol_t        )    * out_MEMORY_OUT_WRITE_RE  ;
100//public    : SC_OUT(Tspecial_address_t)    * out_MEMORY_OUT_NUM_REG_RE;
101//public    : SC_OUT(Tspecial_data_t   )    * out_MEMORY_OUT_DATA_RE   ;
102  public    : SC_OUT(Texception_t      )    * out_MEMORY_OUT_EXCEPTION ;
103
104    // ~~~~~[ Interface "dcache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105  public    : SC_OUT(Tcontrol_t        )    * out_DCACHE_REQ_VAL       ;
106  public    : SC_IN (Tcontrol_t        )    *  in_DCACHE_REQ_ACK       ;
107  public    : SC_OUT(Tcontext_t        )    * out_DCACHE_REQ_CONTEXT_ID;
108  public    : SC_OUT(Tpacket_t         )    * out_DCACHE_REQ_PACKET_ID ;
109  public    : SC_OUT(Tdcache_address_t )    * out_DCACHE_REQ_ADDRESS   ;
110  public    : SC_OUT(Tdcache_type_t    )    * out_DCACHE_REQ_TYPE      ;
111  public    : SC_OUT(Tcontrol_t        )    * out_DCACHE_REQ_UNCACHED  ;
112  public    : SC_OUT(Tdcache_data_t    )    * out_DCACHE_REQ_WDATA     ;
113
114    // ~~~~~[ Interface "dcache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
115  public    : SC_IN (Tcontrol_t        )    *  in_DCACHE_RSP_VAL       ;
116  public    : SC_OUT(Tcontrol_t        )    * out_DCACHE_RSP_ACK       ;
117  public    : SC_IN (Tcontext_t        )    *  in_DCACHE_RSP_CONTEXT_ID;
118  public    : SC_IN (Tpacket_t         )    *  in_DCACHE_RSP_PACKET_ID ;
119  public    : SC_IN (Tdcache_data_t    )    *  in_DCACHE_RSP_RDATA     ;
120  public    : SC_IN (Tdcache_error_t   )    *  in_DCACHE_RSP_ERROR     ;
121
122    // ~~~~~[ Interface "bypass_memory" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123  public    : SC_OUT(Tcontrol_t        )   ** out_BYPASS_MEMORY_VAL       ;
124  public    : SC_OUT(Tcontext_t        )   ** out_BYPASS_MEMORY_CONTEXT_ID;
125  public    : SC_OUT(Tgeneral_address_t)   ** out_BYPASS_MEMORY_NUM_REG   ;
126  public    : SC_OUT(Tgeneral_data_t   )   ** out_BYPASS_MEMORY_DATA      ;
127
128    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
129  protected : Tstore_queue_entry_t                                        * _store_queue;
130  protected : Tload_queue_entry_t                                         * _load_queue;
131  protected : Tspeculative_access_queue_entry_t                           * _speculative_access_queue;
132  protected : morpheo::behavioural::generic::queue_control::Queue_Control * _speculative_access_queue_control;
133
134    // function pointer
135  public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::*function_transition     ) (void);
136  public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::*function_genMoore       ) (void);
137  public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::*function_genMealy_dcache) (void);
138  public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::*function_genMealy_insert) (void);
139  public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::*function_genMealy_retire) (void);
140
141    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
142
143    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
144
145    // Registers
146  public    : Tlsq_ptr_t                      internal_MEMORY_STORE_QUEUE_PTR_READ;
147  public    : Tlsq_ptr_t                      internal_MEMORY_LOAD_QUEUE_PTR_READ ;
148
149    // signal
150  private   : Tcontrol_t                      internal_MEMORY_IN_ACK;
151  private   : Tcontrol_t                      internal_MEMORY_OUT_VAL;
152  private   : Tselect_queue_t                 internal_MEMORY_OUT_SELECT_QUEUE;
153
154  private   : Tcontrol_t                      internal_DCACHE_REQ_VAL;
155  private   : Tselect_queue_t                 internal_DCACHE_REQ_SELECT_QUEUE;
156#endif
157
158    // -----[ methods ]---------------------------------------------------
159
160#ifdef SYSTEMC
161    SC_HAS_PROCESS (Load_store_unit);
162#endif
163  public  :          Load_store_unit             
164  (
165#ifdef SYSTEMC
166   sc_module_name                                name,
167#else                                         
168   string                                        name,
169#endif                                         
170#ifdef STATISTICS
171   morpheo::behavioural::Parameters_Statistics * param_statistics,
172#endif
173   Parameters                                  * param );
174  public  :          ~Load_store_unit             (void);
175                                               
176#ifdef SYSTEMC                                 
177  private : void     allocation                (void);
178  private : void     deallocation              (void);
179
180  public  : void     transition                (void);
181  public  : void     genMoore                  (void);
182  public  : void     genMealy_dcache           (void);
183  public  : void     genMealy_insert           (void);
184  public  : void     genMealy_retire           (void);
185   
186  public  : void     function_speculative_load_commit_transition      (void);
187  public  : void     function_speculative_load_commit_genMoore        (void);
188  public  : void     function_speculative_load_commit_genMealy_dcache (void);
189  public  : void     function_speculative_load_commit_genMealy_insert (void);
190  public  : void     function_speculative_load_commit_genMealy_retire (void);
191#endif                                         
192#ifdef STATISTICS
193  public  : string   statistics                (uint32_t depth);
194#endif
195                                               
196#if VHDL                                       
197  public  : void     vhdl                      (void);
198  private : void     vhdl_declaration          (Vhdl * & vhdl);
199  private : void     vhdl_body                 (Vhdl * & vhdl);
200#endif                                         
201                                               
202#ifdef VHDL_TESTBENCH                         
203  private : void     vhdl_testbench_transition (void);
204#endif
205  };
206
207}; // end namespace load_store_unit
208}; // end namespace execute_unit
209}; // end namespace multi_execute_unit
210}; // end namespace execute_loop
211}; // end namespace multi_execute_loop
212}; // end namespace core
213
214}; // end namespace behavioural
215}; // end namespace morpheo             
216
217#endif
Note: See TracBrowser for help on using the repository browser.