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

Last change on this file since 138 was 136, checked in by rosiere, 15 years ago

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 13.9 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_Execute_loop_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_Execute_loop_h
3
4/*
5 * $Id: Execute_loop.h 136 2009-10-20 18:52:15Z 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/Identification.h"
19
20#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Types.h"
21#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h"
22#ifdef STATISTICS
23#include "Behavioural/include/Stat.h"
24#endif
25#include "Behavioural/include/Component.h"
26#ifdef VHDL
27#include "Behavioural/include/Vhdl.h"
28#endif
29#include "Behavioural/include/Usage.h"
30
31#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/include/Execute_loop_Glue.h"
32#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/include/Read_unit.h"
33#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
34#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h"
35#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/include/Write_unit.h"
36#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
37#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Read_unit_to_Execution_unit.h"
38#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Execution_unit_to_Write_unit.h"
39
40
41namespace morpheo {
42namespace behavioural {
43
44namespace core {
45namespace multi_execute_loop {
46namespace execute_loop {
47
48
49  class Execute_loop
50#if SYSTEMC
51    : public sc_module
52#endif
53  {
54    // -----[ fields ]----------------------------------------------------
55    // Parameters
56  protected : const std::string  _name;
57  protected : const Parameters * _param;
58  private   : const Tusage_t     _usage;
59
60#ifdef STATISTICS
61  public    : Stat                           * _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 "execute_loop_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_VAL                  ;//[nb_read_unit]
75  public    : SC_OUT(Tcontrol_t        )   ** out_EXECUTE_LOOP_IN_ACK                  ;//[nb_read_unit]
76  public    : SC_IN (Tcontext_t        )   **  in_EXECUTE_LOOP_IN_CONTEXT_ID           ;//[nb_read_unit]
77  public    : SC_IN (Tcontext_t        )   **  in_EXECUTE_LOOP_IN_FRONT_END_ID         ;//[nb_read_unit]
78  public    : SC_IN (Tcontext_t        )   **  in_EXECUTE_LOOP_IN_OOO_ENGINE_ID        ;//[nb_read_unit]
79  public    : SC_IN (Tpacket_t         )   **  in_EXECUTE_LOOP_IN_PACKET_ID            ;//[nb_read_unit]
80  public    : SC_IN (Toperation_t      )   **  in_EXECUTE_LOOP_IN_OPERATION            ;//[nb_read_unit]
81  public    : SC_IN (Ttype_t           )   **  in_EXECUTE_LOOP_IN_TYPE                 ;//[nb_read_unit]
82  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_CANCEL               ;//[nb_read_unit]
83  public    : SC_IN (Tlsq_ptr_t        )   **  in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_WRITE;//[nb_read_unit]
84  public    : SC_IN (Tlsq_ptr_t        )   **  in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_READ ;//[nb_read_unit]
85  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_STORE_QUEUE_EMPTY    ;//[nb_read_unit]
86  public    : SC_IN (Tlsq_ptr_t        )   **  in_EXECUTE_LOOP_IN_LOAD_QUEUE_PTR_WRITE ;//[nb_read_unit]
87  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_HAS_IMMEDIAT         ;//[nb_read_unit]
88  public    : SC_IN (Tgeneral_data_t   )   **  in_EXECUTE_LOOP_IN_IMMEDIAT             ;//[nb_read_unit]
89  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_READ_RA              ;//[nb_read_unit]
90  public    : SC_IN (Tgeneral_address_t)   **  in_EXECUTE_LOOP_IN_NUM_REG_RA           ;//[nb_read_unit]
91  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_READ_RB              ;//[nb_read_unit]
92  public    : SC_IN (Tgeneral_address_t)   **  in_EXECUTE_LOOP_IN_NUM_REG_RB           ;//[nb_read_unit]
93  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_READ_RC              ;//[nb_read_unit]
94  public    : SC_IN (Tspecial_address_t)   **  in_EXECUTE_LOOP_IN_NUM_REG_RC           ;//[nb_read_unit]
95  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_WRITE_RD             ;//[nb_read_unit]
96  public    : SC_IN (Tgeneral_address_t)   **  in_EXECUTE_LOOP_IN_NUM_REG_RD           ;//[nb_read_unit]
97  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_WRITE_RE             ;//[nb_read_unit]
98  public    : SC_IN (Tspecial_address_t)   **  in_EXECUTE_LOOP_IN_NUM_REG_RE           ;//[nb_read_unit]
99
100    // ~~~~~[ Interface "execute_loop_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
101  public    : SC_OUT(Tcontrol_t        )   ** out_EXECUTE_LOOP_OUT_VAL                 ;//[nb_write_unit]
102  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_OUT_ACK                 ;//[nb_write_unit]
103  public    : SC_OUT(Tcontext_t        )   ** out_EXECUTE_LOOP_OUT_CONTEXT_ID          ;//[nb_write_unit]
104  public    : SC_OUT(Tcontext_t        )   ** out_EXECUTE_LOOP_OUT_FRONT_END_ID        ;//[nb_write_unit]
105  public    : SC_OUT(Tcontext_t        )   ** out_EXECUTE_LOOP_OUT_OOO_ENGINE_ID       ;//[nb_write_unit]
106  public    : SC_OUT(Tpacket_t         )   ** out_EXECUTE_LOOP_OUT_PACKET_ID           ;//[nb_write_unit]
107//public    : SC_OUT(Toperation_t      )   ** out_EXECUTE_LOOP_OUT_OPERATION           ;//[nb_write_unit]
108//public    : SC_OUT(Ttype_t           )   ** out_EXECUTE_LOOP_OUT_TYPE                ;//[nb_write_unit]
109  public    : SC_OUT(Tcontrol_t        )   ** out_EXECUTE_LOOP_OUT_CANCEL              ;//[nb_write_unit]
110  public    : SC_OUT(Tspecial_data_t   )   ** out_EXECUTE_LOOP_OUT_FLAGS               ;//[nb_write_unit]
111  public    : SC_OUT(Texception_t      )   ** out_EXECUTE_LOOP_OUT_EXCEPTION           ;//[nb_write_unit]
112  public    : SC_OUT(Tcontrol_t        )   ** out_EXECUTE_LOOP_OUT_NO_SEQUENCE         ;//[nb_write_unit]
113  public    : SC_OUT(Taddress_t        )   ** out_EXECUTE_LOOP_OUT_ADDRESS             ;//[nb_write_unit]
114  public    : SC_OUT(Tgeneral_data_t   )   ** out_EXECUTE_LOOP_OUT_DATA                ;//[nb_write_unit]
115
116    // ~~~~~[ Interface "dcache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
117  public    : SC_OUT(Tcontrol_t        )  *** out_DCACHE_REQ_VAL                       ;//[nb_load_store_queue][nb_cache_port]
118  public    : SC_IN (Tcontrol_t        )  ***  in_DCACHE_REQ_ACK                       ;//[nb_load_store_queue][nb_cache_port]
119  public    : SC_OUT(Tcontext_t        )  *** out_DCACHE_REQ_CONTEXT_ID                ;//[nb_load_store_queue][nb_cache_port]
120  public    : SC_OUT(Tpacket_t         )  *** out_DCACHE_REQ_PACKET_ID                 ;//[nb_load_store_queue][nb_cache_port]
121  public    : SC_OUT(Tdcache_address_t )  *** out_DCACHE_REQ_ADDRESS                   ;//[nb_load_store_queue][nb_cache_port]
122  public    : SC_OUT(Tdcache_type_t    )  *** out_DCACHE_REQ_TYPE                      ;//[nb_load_store_queue][nb_cache_port]
123  public    : SC_OUT(Tdcache_data_t    )  *** out_DCACHE_REQ_WDATA                     ;//[nb_load_store_queue][nb_cache_port]
124
125    // ~~~~~[ Interface "dcache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
126  public    : SC_IN (Tcontrol_t        )  ***  in_DCACHE_RSP_VAL                       ;//[nb_load_store_queue][nb_cache_port]
127  public    : SC_OUT(Tcontrol_t        )  *** out_DCACHE_RSP_ACK                       ;//[nb_load_store_queue][nb_cache_port]
128  public    : SC_IN (Tcontext_t        )  ***  in_DCACHE_RSP_CONTEXT_ID                ;//[nb_load_store_queue][nb_cache_port]
129  public    : SC_IN (Tpacket_t         )  ***  in_DCACHE_RSP_PACKET_ID                 ;//[nb_load_store_queue][nb_cache_port]
130  public    : SC_IN (Tdcache_data_t    )  ***  in_DCACHE_RSP_RDATA                     ;//[nb_load_store_queue][nb_cache_port]
131  public    : SC_IN (Tdcache_error_t   )  ***  in_DCACHE_RSP_ERROR                     ;//[nb_load_store_queue][nb_cache_port]
132   
133//     // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
134//   public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_VAL                       ;//[nb_ooo_engine][nb_inst_insert_rob]
135//   public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_ACK                       ;//[nb_ooo_engine][nb_inst_insert_rob]
136//   public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RD_USE                    ;//[nb_ooo_engine][nb_inst_insert_rob]
137//   public    : SC_IN (Tgeneral_address_t)  ***  in_INSERT_ROB_RD_NUM_REG                ;//[nb_ooo_engine][nb_inst_insert_rob]
138//   public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RE_USE                    ;//[nb_ooo_engine][nb_inst_insert_rob]
139//   public    : SC_IN (Tspecial_address_t)  ***  in_INSERT_ROB_RE_NUM_REG                ;//[nb_ooo_engine][nb_inst_insert_rob]
140
141//     // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
142//   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_VAL                       ;//[nb_ooo_engine][nb_inst_retire_rob]
143//   public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_ACK                       ;//[nb_ooo_engine][nb_inst_retire_rob]
144//   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_OLD_USE                ;//[nb_ooo_engine][nb_inst_retire_rob]
145//   public    : SC_IN (Tgeneral_address_t)  ***  in_RETIRE_ROB_RD_OLD_NUM_REG            ;//[nb_ooo_engine][nb_inst_retire_rob]
146//   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_NEW_USE                ;//[nb_ooo_engine][nb_inst_retire_rob]
147//   public    : SC_IN (Tgeneral_address_t)  ***  in_RETIRE_ROB_RD_NEW_NUM_REG            ;//[nb_ooo_engine][nb_inst_retire_rob]
148//   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_OLD_USE                ;//[nb_ooo_engine][nb_inst_retire_rob]
149//   public    : SC_IN (Tspecial_address_t)  ***  in_RETIRE_ROB_RE_OLD_NUM_REG            ;//[nb_ooo_engine][nb_inst_retire_rob]
150//   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_NEW_USE                ;//[nb_ooo_engine][nb_inst_retire_rob]
151//   public    : SC_IN (Tspecial_address_t)  ***  in_RETIRE_ROB_RE_NEW_NUM_REG            ;//[nb_ooo_engine][nb_inst_retire_rob]
152
153    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
154
155  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::execute_loop_glue::                                 Execute_loop_Glue             * _component_glue                        ;
156  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::                        Read_unit                    ** _component_read_unit                   ;
157  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Functionnal_unit             ** _component_functionnal_unit            ;
158  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit:: Load_store_unit              ** _component_load_store_unit             ;
159  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::                      Write_unit                   ** _component_write_unit                  ;
160  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::network::read_unit_to_execution_unit::              Read_unit_to_Execution_unit   * _component_read_unit_to_execution_unit ;
161  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::network::execution_unit_to_write_unit::             Execution_unit_to_Write_unit  * _component_execution_unit_to_write_unit;
162  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::                                     Register_unit                 * _component_register_unit               ;
163
164    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
165
166    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
167#endif
168
169    // -----[ Methods ]---------------------------------------------------
170
171#ifdef SYSTEMC
172    SC_HAS_PROCESS (Execute_loop);
173#endif
174  public  :          Execute_loop             
175  (
176#ifdef SYSTEMC
177   sc_module_name                                name,
178#else                                         
179   std::string                                   name,
180#endif                                         
181#ifdef STATISTICS
182   morpheo::behavioural::Parameters_Statistics * param_statistics,
183#endif
184   Parameters                                  * param,
185   morpheo::behavioural::Tusage_t                usage
186   );
187  public  :          ~Execute_loop             (void);
188                                               
189  private : void        allocation                (
190#ifdef STATISTICS
191                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
192#else
193                                                   void
194#endif
195                                                   );
196  private : void        deallocation              (void);
197                                               
198#ifdef SYSTEMC                                 
199# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
200  public  : void        transition                (void);
201# endif                                       
202#endif                                         
203
204#if VHDL                                       
205  public  : void        vhdl                      (void);
206#endif                                         
207
208#ifdef STATISTICS
209  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
210#endif
211#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
212  private : void        end_cycle                 (void);
213#endif
214  };
215
216};//end namespace execute_loop
217};//end namespace multi_execute_loop
218};//end namespace core
219
220};//end namespace behavioural
221};//end namespace morpheo             
222
223#endif
Note: See TracBrowser for help on using the repository browser.