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

Last change on this file since 146 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: 11.5 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_read_queue_Read_queue_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_read_queue_Read_queue_h
3
4/*
5 * $Id: Read_queue.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 <list>
17#include "Common/include/ToString.h"
18#include "Common/include/Debug.h"
19
20#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Parameters.h"
21#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Types.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
31namespace morpheo {
32namespace behavioural {
33namespace core {
34namespace multi_execute_loop {
35namespace execute_loop {
36namespace multi_read_unit {
37namespace read_unit {
38namespace read_queue {
39
40  class Read_queue
41#if SYSTEMC
42    : public sc_module
43#endif
44  {
45    // -----[ fields ]----------------------------------------------------
46    // Parameters
47  protected : const std::string  _name;
48  protected : const Parameters * _param;
49  private   : const Tusage_t     _usage;
50
51#ifdef STATISTICS
52  public    : Stat                           * _stat;
53#endif
54
55  public    : Component                      * _component;
56  private   : Interfaces                     * _interfaces;
57
58#ifdef SYSTEMC
59    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60    // Interface
61  public    : SC_CLOCK                      *  in_CLOCK               ;
62  public    : SC_IN (Tcontrol_t        )    *  in_NRESET              ;
63
64    // ~~~~~[ Interface "read_queue_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65
66  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_VAL                  ;
67  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_IN_ACK                  ;
68  public    : SC_IN (Tcontext_t        )    *  in_READ_QUEUE_IN_CONTEXT_ID           ;
69  public    : SC_IN (Tcontext_t        )    *  in_READ_QUEUE_IN_FRONT_END_ID         ;
70  public    : SC_IN (Tcontext_t        )    *  in_READ_QUEUE_IN_OOO_ENGINE_ID        ;
71  public    : SC_IN (Tpacket_t         )    *  in_READ_QUEUE_IN_ROB_ID               ;
72  public    : SC_IN (Toperation_t      )    *  in_READ_QUEUE_IN_OPERATION            ;
73  public    : SC_IN (Ttype_t           )    *  in_READ_QUEUE_IN_TYPE                 ;
74  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_CANCEL               ;
75  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_QUEUE_IN_STORE_QUEUE_PTR_WRITE;
76  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_QUEUE_IN_STORE_QUEUE_PTR_READ ;
77  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_STORE_QUEUE_EMPTY    ;
78  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_QUEUE_IN_LOAD_QUEUE_PTR_WRITE ;
79  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_HAS_IMMEDIAT         ;
80  public    : SC_IN (Tgeneral_data_t   )    *  in_READ_QUEUE_IN_IMMEDIAT             ;
81  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_READ_RA              ;
82  public    : SC_IN (Tgeneral_address_t)    *  in_READ_QUEUE_IN_NUM_REG_RA           ;
83  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_READ_RB              ;
84  public    : SC_IN (Tgeneral_address_t)    *  in_READ_QUEUE_IN_NUM_REG_RB           ;
85  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_READ_RC              ;
86  public    : SC_IN (Tspecial_address_t)    *  in_READ_QUEUE_IN_NUM_REG_RC           ;
87  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_WRITE_RD             ;
88  public    : SC_IN (Tgeneral_address_t)    *  in_READ_QUEUE_IN_NUM_REG_RD           ;
89  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_WRITE_RE             ;
90  public    : SC_IN (Tspecial_address_t)    *  in_READ_QUEUE_IN_NUM_REG_RE           ;
91
92    // ~~~~~[ Interface "read_queue_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
93
94  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_VAL                  ;
95  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_OUT_ACK                  ;
96  public    : SC_OUT(Tcontext_t        )    * out_READ_QUEUE_OUT_CONTEXT_ID           ;
97  public    : SC_OUT(Tcontext_t        )    * out_READ_QUEUE_OUT_FRONT_END_ID         ;
98  public    : SC_OUT(Tcontext_t        )    * out_READ_QUEUE_OUT_OOO_ENGINE_ID        ;
99  public    : SC_OUT(Tpacket_t         )    * out_READ_QUEUE_OUT_ROB_ID               ;
100  public    : SC_OUT(Toperation_t      )    * out_READ_QUEUE_OUT_OPERATION            ;
101  public    : SC_OUT(Ttype_t           )    * out_READ_QUEUE_OUT_TYPE                 ;
102  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_CANCEL               ;
103  public    : SC_OUT(Tlsq_ptr_t        )    * out_READ_QUEUE_OUT_STORE_QUEUE_PTR_WRITE;
104  public    : SC_OUT(Tlsq_ptr_t        )    * out_READ_QUEUE_OUT_STORE_QUEUE_PTR_READ ;
105  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_STORE_QUEUE_EMPTY    ;
106  public    : SC_OUT(Tlsq_ptr_t        )    * out_READ_QUEUE_OUT_LOAD_QUEUE_PTR_WRITE ;
107  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_HAS_IMMEDIAT         ;
108  public    : SC_OUT(Tgeneral_data_t   )    * out_READ_QUEUE_OUT_IMMEDIAT             ;
109//public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_READ_RA              ;
110  public    : SC_OUT(Tgeneral_address_t)    * out_READ_QUEUE_OUT_NUM_REG_RA           ;
111  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_DATA_RA_VAL          ;
112  public    : SC_OUT(Tgeneral_data_t   )    * out_READ_QUEUE_OUT_DATA_RA              ;
113//public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_READ_RB              ;
114  public    : SC_OUT(Tgeneral_address_t)    * out_READ_QUEUE_OUT_NUM_REG_RB           ;
115  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_DATA_RB_VAL          ;
116  public    : SC_OUT(Tgeneral_data_t   )    * out_READ_QUEUE_OUT_DATA_RB              ;
117//public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_READ_RC              ;
118  public    : SC_OUT(Tspecial_address_t)    * out_READ_QUEUE_OUT_NUM_REG_RC           ;
119  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_DATA_RC_VAL          ;
120  public    : SC_OUT(Tspecial_data_t   )    * out_READ_QUEUE_OUT_DATA_RC              ;
121  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_WRITE_RD             ;
122  public    : SC_OUT(Tgeneral_address_t)    * out_READ_QUEUE_OUT_NUM_REG_RD           ;
123  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_WRITE_RE             ;
124  public    : SC_OUT(Tspecial_address_t)    * out_READ_QUEUE_OUT_NUM_REG_RE           ;
125
126    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
127
128  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_VAL          ;
129  public    : SC_IN (Tcontrol_t        )   **  in_GPR_READ_ACK          ;
130  public    : SC_OUT(Tcontext_t        )   ** out_GPR_READ_OOO_ENGINE_ID;
131  public    : SC_OUT(Tgeneral_address_t)   ** out_GPR_READ_NUM_REG      ;
132  public    : SC_IN (Tgeneral_data_t   )   **  in_GPR_READ_DATA         ;
133  public    : SC_IN (Tcontrol_t        )   **  in_GPR_READ_DATA_VAL     ;
134
135    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
136
137  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_VAL          ;
138  public    : SC_IN (Tcontrol_t        )   **  in_SPR_READ_ACK          ;
139  public    : SC_OUT(Tcontext_t        )   ** out_SPR_READ_OOO_ENGINE_ID;
140  public    : SC_OUT(Tspecial_address_t)   ** out_SPR_READ_NUM_REG      ;
141  public    : SC_IN (Tspecial_data_t   )   **  in_SPR_READ_DATA         ;
142  public    : SC_IN (Tcontrol_t        )   **  in_SPR_READ_DATA_VAL     ;
143
144    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145
146  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_VAL          ;
147  public    : SC_IN (Tcontext_t        )   **  in_GPR_WRITE_OOO_ENGINE_ID;
148  public    : SC_IN (Tgeneral_address_t)   **  in_GPR_WRITE_NUM_REG      ;
149  public    : SC_IN (Tgeneral_data_t   )   **  in_GPR_WRITE_DATA         ;
150
151    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
152
153  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_VAL          ;
154  public    : SC_IN (Tcontext_t        )   **  in_SPR_WRITE_OOO_ENGINE_ID;
155  public    : SC_IN (Tspecial_address_t)   **  in_SPR_WRITE_NUM_REG      ;
156  public    : SC_IN (Tspecial_data_t   )   **  in_SPR_WRITE_DATA         ;
157
158    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
159
160    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
161  protected : Tread_queue_head_entry_t       * _queue_head;
162  protected : std::list<Tread_queue_entry_t *>   * _queue;
163
164    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
165 
166  protected  :Tcontrol_t                       internal_READ_QUEUE_OUT_VAL         ;
167  protected  :Tcontrol_t                       internal_READ_QUEUE_OUT_READ_RA_VAL ;
168  protected  :Tcontrol_t                       internal_READ_QUEUE_OUT_READ_RB_VAL ;
169  protected  :Tcontrol_t                       internal_READ_QUEUE_OUT_READ_RC_VAL ;
170
171  protected  :Tcontrol_t                       internal_READ_QUEUE_OUT_DATA_RA_VAL ;
172  protected  :Tcontrol_t                       internal_READ_QUEUE_OUT_DATA_RB_VAL ;
173  protected  :Tgeneral_data_t                  internal_READ_QUEUE_OUT_DATA_RA     ;
174  protected  :Tgeneral_data_t                  internal_READ_QUEUE_OUT_DATA_RB     ;
175  protected  :Tcontrol_t                       internal_READ_QUEUE_OUT_DATA_RC_VAL ;
176  protected  :Tspecial_data_t                  internal_READ_QUEUE_OUT_DATA_RC     ;
177#endif
178
179    // -----[ methods ]---------------------------------------------------
180
181#ifdef SYSTEMC
182    SC_HAS_PROCESS (Read_queue);
183#endif
184  public  :          Read_queue              (
185#ifdef SYSTEMC
186                                              sc_module_name                              name,
187#else                                         
188                                              std::string                                 name,
189#endif                                         
190#ifdef STATISTICS
191                                              morpheo::behavioural::Parameters_Statistics * param_statistics,
192#endif
193                                              Parameters                                  * param,
194                                              morpheo::behavioural::Tusage_t                usage);
195                                               
196  public  :          Read_queue              (Parameters * param );
197  public  :          ~Read_queue             (void);
198                                               
199#ifdef SYSTEMC                                 
200  private : void     allocation                  (void);
201  private : void     deallocation                (void);
202                                               
203  public  : void     transition                  (void);
204  public  : void     genMoore                    (void);
205  public  : void     genMealy_read_queue_out_val (void); 
206  public  : void     genMealy_read_queue_out_gpr (void);
207  public  : void     genMealy_read_queue_out_spr (void);
208#endif                                         
209#ifdef STATISTICS
210  public  : void     statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
211#endif
212                                               
213#if VHDL                                       
214  public  : void     vhdl                      (void);
215  private : void     vhdl_declaration          (Vhdl * & vhdl);
216  private : void     vhdl_body                 (Vhdl * & vhdl);
217#endif                                         
218                       
219#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
220  private : void     end_cycle                 (void);
221#endif
222  };
223
224}; // end namespace read_queue
225}; // end namespace read_unit
226}; // end namespace multi_read_unit
227}; // end namespace execute_loop
228}; // end namespace multi_execute_loop
229}; // end namespace core
230}; // end namespace behavioural
231}; // end namespace morpheo             
232
233#endif
Note: See TracBrowser for help on using the repository browser.