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

Last change on this file since 136 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: 10.9 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_Read_unit_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_Read_unit_h
3
4/*
5 * $Id: Read_unit.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/Types.h"
19
20#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_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
30#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h"
31#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Reservation_station.h"
32
33namespace morpheo {
34namespace behavioural {
35namespace core {
36namespace multi_execute_loop {
37namespace execute_loop {
38namespace multi_read_unit {
39namespace read_unit {
40
41
42  class Read_unit
43#if SYSTEMC
44    : public sc_module
45#endif
46  {
47    // -----[ fields ]----------------------------------------------------
48    // Parameters
49  protected : const std::string  _name;
50  protected : const Parameters * _param;
51  private   : const Tusage_t     _usage;
52
53#ifdef STATISTICS
54  public    : Stat                           * _stat;
55#endif
56
57  public    : Component                      * _component;
58  private   : Interfaces                     * _interfaces;
59
60#ifdef SYSTEMC
61    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62    // Interface
63  public    : SC_CLOCK                      *  in_CLOCK        ;
64  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
65
66    // ~~~~~[ Interface "read_unit_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_VAL                  ;
68  public    : SC_OUT(Tcontrol_t        )    * out_READ_UNIT_IN_ACK                  ;
69  public    : SC_IN (Tcontext_t        )    *  in_READ_UNIT_IN_CONTEXT_ID           ;
70  public    : SC_IN (Tcontext_t        )    *  in_READ_UNIT_IN_FRONT_END_ID         ;
71  public    : SC_IN (Tcontext_t        )    *  in_READ_UNIT_IN_OOO_ENGINE_ID        ;
72  public    : SC_IN (Tpacket_t         )    *  in_READ_UNIT_IN_PACKET_ID            ;
73  public    : SC_IN (Toperation_t      )    *  in_READ_UNIT_IN_OPERATION            ;
74  public    : SC_IN (Ttype_t           )    *  in_READ_UNIT_IN_TYPE                 ;
75  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_CANCEL               ;
76  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_UNIT_IN_STORE_QUEUE_PTR_WRITE;
77  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_UNIT_IN_STORE_QUEUE_PTR_READ ;
78  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_STORE_QUEUE_EMPTY    ;
79  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_UNIT_IN_LOAD_QUEUE_PTR_WRITE ;
80  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_HAS_IMMEDIAT         ;
81  public    : SC_IN (Tgeneral_data_t   )    *  in_READ_UNIT_IN_IMMEDIAT             ;
82  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_READ_RA              ;
83  public    : SC_IN (Tgeneral_address_t)    *  in_READ_UNIT_IN_NUM_REG_RA           ;
84  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_READ_RB              ;
85  public    : SC_IN (Tgeneral_address_t)    *  in_READ_UNIT_IN_NUM_REG_RB           ;
86  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_READ_RC              ;
87  public    : SC_IN (Tspecial_address_t)    *  in_READ_UNIT_IN_NUM_REG_RC           ;
88  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_WRITE_RD             ;
89  public    : SC_IN (Tgeneral_address_t)    *  in_READ_UNIT_IN_NUM_REG_RD           ;
90  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_WRITE_RE             ;
91  public    : SC_IN (Tspecial_address_t)    *  in_READ_UNIT_IN_NUM_REG_RE           ;
92
93    // ~~~~~[ Interface "read_unit_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_VAL                  ;
95  public    : SC_IN (Tcontrol_t        )   **  in_READ_UNIT_OUT_ACK                  ;
96  public    : SC_OUT(Tcontext_t        )   ** out_READ_UNIT_OUT_CONTEXT_ID           ;
97  public    : SC_OUT(Tcontext_t        )   ** out_READ_UNIT_OUT_FRONT_END_ID         ;
98  public    : SC_OUT(Tcontext_t        )   ** out_READ_UNIT_OUT_OOO_ENGINE_ID        ;
99  public    : SC_OUT(Tpacket_t         )   ** out_READ_UNIT_OUT_PACKET_ID            ;
100  public    : SC_OUT(Toperation_t      )   ** out_READ_UNIT_OUT_OPERATION            ;
101  public    : SC_OUT(Ttype_t           )   ** out_READ_UNIT_OUT_TYPE                 ;
102  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_CANCEL               ;
103  public    : SC_OUT(Tlsq_ptr_t        )   ** out_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE;
104  public    : SC_OUT(Tlsq_ptr_t        )   ** out_READ_UNIT_OUT_STORE_QUEUE_PTR_READ ;
105  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_STORE_QUEUE_EMPTY    ;
106  public    : SC_OUT(Tlsq_ptr_t        )   ** out_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE ;
107  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_HAS_IMMEDIAT         ;
108  public    : SC_OUT(Tgeneral_data_t   )   ** out_READ_UNIT_OUT_IMMEDIAT             ;
109  public    : SC_OUT(Tgeneral_data_t   )   ** out_READ_UNIT_OUT_DATA_RA              ;
110  public    : SC_OUT(Tgeneral_data_t   )   ** out_READ_UNIT_OUT_DATA_RB              ;
111  public    : SC_OUT(Tspecial_data_t   )   ** out_READ_UNIT_OUT_DATA_RC              ;
112  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_WRITE_RD             ;
113  public    : SC_OUT(Tgeneral_address_t)   ** out_READ_UNIT_OUT_NUM_REG_RD           ;
114  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_WRITE_RE             ;
115  public    : SC_OUT(Tspecial_address_t)   ** out_READ_UNIT_OUT_NUM_REG_RE           ;
116
117    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_VAL          ;
119  public    : SC_IN (Tcontrol_t        )   **  in_GPR_READ_ACK          ;
120  public    : SC_OUT(Tcontext_t        )   ** out_GPR_READ_OOO_ENGINE_ID;
121  public    : SC_OUT(Tgeneral_address_t)   ** out_GPR_READ_NUM_REG      ;
122  public    : SC_IN (Tgeneral_data_t   )   **  in_GPR_READ_DATA         ;
123  public    : SC_IN (Tcontrol_t        )   **  in_GPR_READ_DATA_VAL     ;
124
125    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
126  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_VAL          ;
127  public    : SC_IN (Tcontrol_t        )   **  in_SPR_READ_ACK          ;
128  public    : SC_OUT(Tcontext_t        )   ** out_SPR_READ_OOO_ENGINE_ID;
129  public    : SC_OUT(Tspecial_address_t)   ** out_SPR_READ_NUM_REG      ;
130  public    : SC_IN (Tspecial_data_t   )   **  in_SPR_READ_DATA         ;
131  public    : SC_IN (Tcontrol_t        )   **  in_SPR_READ_DATA_VAL     ;
132
133    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
134  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_VAL          ;
135  public    : SC_IN (Tcontext_t        )   **  in_GPR_WRITE_OOO_ENGINE_ID;
136  public    : SC_IN (Tgeneral_address_t)   **  in_GPR_WRITE_NUM_REG      ;
137  public    : SC_IN (Tgeneral_data_t   )   **  in_GPR_WRITE_DATA         ;
138
139    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_VAL          ;
141  public    : SC_IN (Tcontext_t        )   **  in_SPR_WRITE_OOO_ENGINE_ID;
142  public    : SC_IN (Tspecial_address_t)   **  in_SPR_WRITE_NUM_REG      ;
143  public    : SC_IN (Tspecial_data_t   )   **  in_SPR_WRITE_DATA         ;
144
145    // ~~~~~[ Interface "bypass_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
146  public    : SC_IN (Tcontext_t        )   **  in_BYPASS_WRITE_OOO_ENGINE_ID ;
147  public    : SC_IN (Tcontrol_t        )   **  in_BYPASS_WRITE_GPR_VAL       ;
148  public    : SC_IN (Tgeneral_address_t)   **  in_BYPASS_WRITE_GPR_NUM_REG   ;
149  public    : SC_IN (Tgeneral_data_t   )   **  in_BYPASS_WRITE_GPR_DATA      ;
150  public    : SC_IN (Tcontrol_t        )   **  in_BYPASS_WRITE_SPR_VAL       ;
151  public    : SC_IN (Tspecial_address_t)   **  in_BYPASS_WRITE_SPR_NUM_REG   ;
152  public    : SC_IN (Tspecial_data_t   )   **  in_BYPASS_WRITE_SPR_DATA      ;
153
154    // ~~~~~[ Interface "bypass_memory" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
155  public    : SC_IN (Tcontrol_t        )   **  in_BYPASS_MEMORY_VAL          ;
156  public    : SC_IN (Tcontext_t        )   **  in_BYPASS_MEMORY_OOO_ENGINE_ID;
157  public    : SC_IN (Tgeneral_address_t)   **  in_BYPASS_MEMORY_NUM_REG      ;
158  public    : SC_IN (Tgeneral_data_t   )   **  in_BYPASS_MEMORY_DATA         ;
159
160    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
161
162  private   : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue         ::Read_queue          * _component_read_queue;
163  private   : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Reservation_station * _component_reservation_station;
164
165    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
166
167    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
168#endif
169
170    // -----[ Methods ]---------------------------------------------------
171
172#ifdef SYSTEMC
173    SC_HAS_PROCESS (Read_unit);
174#endif
175  public  :          Read_unit             
176  (
177#ifdef SYSTEMC
178   sc_module_name                                name,
179#else                                         
180   std::string                                   name,
181#endif                                         
182#ifdef STATISTICS
183   morpheo::behavioural::Parameters_Statistics * param_statistics,
184#endif
185   Parameters                                  * param,
186   morpheo::behavioural::Tusage_t                usage
187   );
188  public  :          ~Read_unit             (void);
189                                               
190  private : void        allocation                (
191#ifdef STATISTICS
192                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
193#else
194                                                   void
195#endif
196                                                   );
197  private : void        deallocation              (void);
198                                               
199#ifdef SYSTEMC                                 
200# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
201  public  : void        transition                (void);
202# endif
203#endif                                         
204
205#if VHDL                                       
206  public  : void        vhdl                      (void);
207#endif                                         
208
209#ifdef STATISTICS
210  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
211#endif
212#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
213  private : void        end_cycle                 (void);
214#endif
215  };
216
217}; // end namespace read_unit
218}; // end namespace multi_read_unit
219}; // end namespace execute_loop
220}; // end namespace multi_execute_loop
221}; // end namespace core
222
223}; // end namespace behavioural
224}; // end namespace morpheo             
225
226#endif
Note: See TracBrowser for help on using the repository browser.