source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Write_queue.h @ 145

Last change on this file since 145 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: 9.1 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_write_queue_Write_queue_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_write_queue_Write_queue_h
3
4/*
5 * $Id: Write_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_Write_unit/Write_unit/Write_queue/include/Parameters.h"
21#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Types.h"
22
23#ifdef STATISTICS
24#include "Behavioural/include/Stat.h"
25#endif
26#include "Behavioural/include/Component.h"
27#ifdef VHDL
28#include "Behavioural/include/Vhdl.h"
29#endif
30#include "Behavioural/include/Usage.h"
31
32#include "Behavioural/Generic/Queue/include/Queue.h"
33
34namespace morpheo {
35namespace behavioural {
36namespace core {
37namespace multi_execute_loop {
38namespace execute_loop {
39namespace multi_write_unit {
40namespace write_unit {
41namespace write_queue {
42
43  class Write_queue
44#if SYSTEMC
45    : public sc_module
46#endif
47  {
48    // -----[ fields ]----------------------------------------------------
49    // Parameters
50  protected : const std::string  _name;
51  protected : const Parameters * _param;
52  public    :       Tusage_t     _usage;
53
54#ifdef STATISTICS
55  public    : Stat                           * _stat;
56
57  private   : counter_t                      * _stat_use_queue;
58  private   : counter_t                      * _stat_average_use_queue;
59  private   : counter_t                      * _stat_percent_use_queue;
60
61#endif
62
63  public    : Component                      * _component;
64  private   : Interfaces                     * _interfaces;
65
66#ifdef SYSTEMC
67    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68    // Interface
69  public    : SC_CLOCK                      *  in_CLOCK        ;
70  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
71
72    // -----[ Interface "Write_queue_in" ]--------------------------------   
73  public    : SC_IN (Tcontrol_t        )    *  in_WRITE_QUEUE_IN_VAL          ;
74  public    : SC_OUT(Tcontrol_t        )    * out_WRITE_QUEUE_IN_ACK          ;
75  public    : SC_IN (Tcontext_t        )    *  in_WRITE_QUEUE_IN_CONTEXT_ID   ;
76  public    : SC_IN (Tcontext_t        )    *  in_WRITE_QUEUE_IN_FRONT_END_ID ;
77  public    : SC_IN (Tcontext_t        )    *  in_WRITE_QUEUE_IN_OOO_ENGINE_ID;
78  public    : SC_IN (Tpacket_t         )    *  in_WRITE_QUEUE_IN_PACKET_ID    ;
79//public    : SC_IN (Toperation_t      )    *  in_WRITE_QUEUE_IN_OPERATION    ;
80//public    : SC_IN (Ttype_t           )    *  in_WRITE_QUEUE_IN_TYPE         ;
81  public    : SC_IN (Tcontrol_t        )    *  in_WRITE_QUEUE_IN_CANCEL       ;
82  public    : SC_IN (Tcontrol_t        )    *  in_WRITE_QUEUE_IN_WRITE_RD     ;
83  public    : SC_IN (Tgeneral_address_t)    *  in_WRITE_QUEUE_IN_NUM_REG_RD   ;
84  public    : SC_IN (Tgeneral_data_t   )    *  in_WRITE_QUEUE_IN_DATA_RD      ;
85  public    : SC_IN (Tcontrol_t        )    *  in_WRITE_QUEUE_IN_WRITE_RE     ;
86  public    : SC_IN (Tspecial_address_t)    *  in_WRITE_QUEUE_IN_NUM_REG_RE   ;
87  public    : SC_IN (Tspecial_data_t   )    *  in_WRITE_QUEUE_IN_DATA_RE      ;
88  public    : SC_IN (Texception_t      )    *  in_WRITE_QUEUE_IN_EXCEPTION    ;
89  public    : SC_IN (Tcontrol_t        )    *  in_WRITE_QUEUE_IN_NO_SEQUENCE  ;
90  public    : SC_IN (Taddress_t        )    *  in_WRITE_QUEUE_IN_ADDRESS      ;
91
92    // -----[ Interface "Write_queue_out" ]-------------------------------   
93  public    : SC_OUT(Tcontrol_t        )    * out_WRITE_QUEUE_OUT_VAL          ;
94  public    : SC_IN (Tcontrol_t        )    *  in_WRITE_QUEUE_OUT_ACK          ;
95  public    : SC_OUT(Tcontext_t        )    * out_WRITE_QUEUE_OUT_CONTEXT_ID   ;
96  public    : SC_OUT(Tcontext_t        )    * out_WRITE_QUEUE_OUT_FRONT_END_ID ;
97  public    : SC_OUT(Tcontext_t        )    * out_WRITE_QUEUE_OUT_OOO_ENGINE_ID;
98  public    : SC_OUT(Tpacket_t         )    * out_WRITE_QUEUE_OUT_PACKET_ID    ;
99//public    : SC_OUT(Toperation_t      )    * out_WRITE_QUEUE_OUT_OPERATION    ;
100//public    : SC_OUT(Ttype_t           )    * out_WRITE_QUEUE_OUT_TYPE         ;
101  public    : SC_OUT(Tcontrol_t        )    * out_WRITE_QUEUE_OUT_CANCEL       ;
102  public    : SC_OUT(Tspecial_data_t   )    * out_WRITE_QUEUE_OUT_FLAGS        ;
103  public    : SC_OUT(Texception_t      )    * out_WRITE_QUEUE_OUT_EXCEPTION    ;
104  public    : SC_OUT(Tcontrol_t        )    * out_WRITE_QUEUE_OUT_NO_SEQUENCE  ;
105  public    : SC_OUT(Taddress_t        )    * out_WRITE_QUEUE_OUT_ADDRESS      ;
106  public    : SC_OUT(Tgeneral_data_t   )    * out_WRITE_QUEUE_OUT_DATA         ;
107
108    // -----[ Interface "gpr_write" ]-------------------------------------
109  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_WRITE_VAL               ;
110  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_ACK               ;
111  public    : SC_OUT(Tcontext_t        )   ** out_GPR_WRITE_OOO_ENGINE_ID     ;
112  public    : SC_OUT(Tgeneral_address_t)   ** out_GPR_WRITE_NUM_REG           ;
113  public    : SC_OUT(Tgeneral_data_t   )   ** out_GPR_WRITE_DATA              ;
114   
115    // -----[ Interface "spr_write" ]-------------------------------------
116  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_WRITE_VAL               ;
117  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_ACK               ;
118  public    : SC_OUT(Tcontext_t        )   ** out_SPR_WRITE_OOO_ENGINE_ID     ;
119  public    : SC_OUT(Tspecial_address_t)   ** out_SPR_WRITE_NUM_REG           ;
120  public    : SC_OUT(Tspecial_data_t   )   ** out_SPR_WRITE_DATA              ;
121
122    // -----[ Interface "bypass_write" ]----------------------------------
123  public    : SC_OUT(Tcontext_t        )   ** out_BYPASS_WRITE_OOO_ENGINE_ID ;
124  public    : SC_OUT(Tcontrol_t        )   ** out_BYPASS_WRITE_GPR_VAL       ;
125  public    : SC_OUT(Tgeneral_address_t)   ** out_BYPASS_WRITE_GPR_NUM_REG   ; // RD
126  public    : SC_OUT(Tgeneral_data_t   )   ** out_BYPASS_WRITE_GPR_DATA      ;
127  public    : SC_OUT(Tcontrol_t        )   ** out_BYPASS_WRITE_SPR_VAL       ;
128  public    : SC_OUT(Tspecial_address_t)   ** out_BYPASS_WRITE_SPR_NUM_REG   ; // RE
129  public    : SC_OUT(Tspecial_data_t   )   ** out_BYPASS_WRITE_SPR_DATA      ;
130
131    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
132  private   : morpheo::behavioural::generic::queue::Parameters * _param_queue;
133  private   : morpheo::behavioural::generic::queue::Queue      * _component_queue;
134
135    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
136  protected : std::list<write_queue_entry_t *> * _queue;
137
138    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
139    Tcontrol_t     internal_WRITE_QUEUE_IN_ACK;
140    Tcontrol_t     internal_WRITE_QUEUE_OUT_VAL;
141    Tcontrol_t     internal_GPR_WRITE_VAL;
142    Tcontrol_t     internal_SPR_WRITE_VAL;
143
144    // function pointer
145//   public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Write_queue::*function_transition) (void);
146//   public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Write_queue::*function_genMoore  ) (void);
147//   public    : void (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Write_queue::*function_genMealy  ) (void);
148#endif
149
150    // -----[ Methods ]---------------------------------------------------
151
152#ifdef SYSTEMC
153    SC_HAS_PROCESS (Write_queue);
154#endif
155  public  :          Write_queue             
156  (
157#ifdef SYSTEMC
158   sc_module_name                                name,
159#else                                         
160   std::string                                   name,
161#endif                                         
162#ifdef STATISTICS
163   morpheo::behavioural::Parameters_Statistics * param_statistics,
164#endif
165   Parameters                                  * param,
166   morpheo::behavioural::Tusage_t                usage
167   );
168  public  :          ~Write_queue             (void);
169                                               
170  private : void     allocation                (void);
171  private : void     deallocation              (void);
172                                               
173#ifdef SYSTEMC                                 
174  public  : void     transition                (void);
175  public  : void     genMoore                  (void);
176  public  : void     genMealy_write            (void);
177  public  : void     genMealy_bypass           (void);
178#endif                                         
179#ifdef STATISTICS
180  public  : void     statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
181#endif
182                                               
183#if VHDL                                       
184  public  : void     vhdl                      (void);
185  private : void     vhdl_declaration          (Vhdl * & vhdl);
186  private : void     vhdl_body                 (Vhdl * & vhdl);
187#endif                                         
188                                               
189#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
190  private : void     end_cycle                 (void);
191#endif
192  };
193
194}; // end namespace write_queue
195}; // end namespace write_unit
196}; // end namespace multi_write_unit
197}; // end namespace execute_loop
198}; // end namespace multi_execute_loop
199}; // end namespace core
200
201}; // end namespace behavioural
202}; // end namespace morpheo             
203
204#endif
Note: See TracBrowser for help on using the repository browser.