source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.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: 7.1 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_execute_queue_Execute_queue_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_execute_queue_Execute_queue_h
3
4/*
5 * $Id: Execute_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/Execute_queue/include/Wrapper_Execute_queue.h"
21#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Parameters.h"
22#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Types.h"
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#include "Behavioural/include/Simulation.h"
32
33#include "Behavioural/Generic/Queue/include/Queue.h"
34
35namespace morpheo {
36namespace behavioural {
37namespace core {
38namespace multi_execute_loop {
39namespace execute_loop {
40namespace multi_write_unit {
41namespace write_unit {
42namespace execute_queue {
43
44  class Execute_queue
45#if SYSTEMC
46    : public sc_module
47#endif
48  {
49    // -----[ fields ]----------------------------------------------------
50    // Parameters
51  protected : const std::string  _name;
52  protected : const Parameters * _param;
53  public    :       Tusage_t     _usage;
54
55#ifdef STATISTICS
56  public    : Stat                           * _stat;
57
58  private   : counter_t                      * _stat_use_queue;
59  private   : counter_t                      * _stat_average_use_queue;
60  private   : counter_t                      * _stat_percent_use_queue;
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 "Execute_queue_in" ]------------------------------
73  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_QUEUE_IN_VAL           ;
74  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_QUEUE_IN_ACK           ;
75  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_QUEUE_IN_CONTEXT_ID    ;
76  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_QUEUE_IN_FRONT_END_ID  ;
77  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID ;
78  public    : SC_IN (Tpacket_t         )    *  in_EXECUTE_QUEUE_IN_PACKET_ID     ;
79//public    : SC_IN (Toperation_t      )    *  in_EXECUTE_QUEUE_IN_OPERATION     ;
80//public    : SC_IN (Ttype_t           )    *  in_EXECUTE_QUEUE_IN_TYPE          ;
81  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_QUEUE_IN_CANCEL        ;
82  public    : SC_IN (Tspecial_data_t   )    *  in_EXECUTE_QUEUE_IN_FLAGS         ;
83  public    : SC_IN (Texception_t      )    *  in_EXECUTE_QUEUE_IN_EXCEPTION     ;
84  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_QUEUE_IN_NO_SEQUENCE   ;
85  public    : SC_IN (Taddress_t        )    *  in_EXECUTE_QUEUE_IN_ADDRESS       ;
86  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_QUEUE_IN_DATA          ;
87
88    // -----[ Interface "Execute_queue_out" ]-----------------------------
89  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_QUEUE_OUT_VAL          ;
90  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_QUEUE_OUT_ACK          ;
91  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_QUEUE_OUT_CONTEXT_ID   ;
92  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_QUEUE_OUT_FRONT_END_ID ;
93  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID;
94  public    : SC_OUT(Tpacket_t         )    * out_EXECUTE_QUEUE_OUT_PACKET_ID    ;
95//public    : SC_OUT(Toperation_t      )    * out_EXECUTE_QUEUE_OUT_OPERATION    ;
96//public    : SC_OUT(Ttype_t           )    * out_EXECUTE_QUEUE_OUT_TYPE         ;
97  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_QUEUE_OUT_CANCEL       ;
98  public    : SC_OUT(Tspecial_data_t   )    * out_EXECUTE_QUEUE_OUT_FLAGS        ;
99  public    : SC_OUT(Texception_t      )    * out_EXECUTE_QUEUE_OUT_EXCEPTION    ;
100  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_QUEUE_OUT_NO_SEQUENCE  ;
101  public    : SC_OUT(Taddress_t        )    * out_EXECUTE_QUEUE_OUT_ADDRESS      ;
102  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_QUEUE_OUT_DATA         ;
103   
104    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
105  private   : std::list<execute_queue_entry_t *> * _queue;
106    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107  private   : Tcontrol_t                       internal_EXECUTE_QUEUE_IN_ACK ;
108  private   : Tcontrol_t                       internal_EXECUTE_QUEUE_OUT_VAL;
109
110    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
111# ifdef VHDL
112  private   : morpheo::behavioural::generic::queue::Parameters * _param_queue;
113  private   : morpheo::behavioural::generic::queue::Queue      * _component_queue;
114# endif
115#endif
116
117#ifdef MODELSIM_COSIMULATION
118    // ~~~~~[ Wrapper ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
119  private   : Wrapper_Execute_queue * _wrapper;
120#endif
121
122    // -----[ Methods ]---------------------------------------------------
123
124#ifdef SYSTEMC
125    SC_HAS_PROCESS (Execute_queue);
126#endif
127  public  :          Execute_queue             
128  (
129#ifdef SYSTEMC
130   sc_module_name                                name,
131#else                                         
132   std::string                                   name,
133#endif                                         
134#ifdef STATISTICS
135   morpheo::behavioural::Parameters_Statistics * param_statistics,
136#endif
137   Parameters                                  * param,
138   morpheo::behavioural::Tusage_t                usage
139   );
140  public  :          ~Execute_queue             (void);
141                                               
142  private : void     allocation                (void);
143  private : void     deallocation              (void);
144                                               
145#ifdef SYSTEMC                                 
146  public  : void     transition                (void);
147  public  : void     genMoore                  (void);
148#endif                                         
149#ifdef STATISTICS
150  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
151#endif
152                                               
153#if VHDL                                       
154  public  : void     vhdl                      (void);
155  private : void     vhdl_declaration          (Vhdl * & vhdl);
156  private : void     vhdl_body                 (Vhdl * & vhdl);
157#endif                                         
158                                               
159#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
160  private : void     end_cycle                 (void);
161#endif
162  };
163
164}; // end namespace execute_queue
165}; // end namespace write_unit
166}; // end namespace multi_write_unit
167}; // end namespace execute_loop
168}; // end namespace multi_execute_loop
169}; // end namespace core
170
171}; // end namespace behavioural
172}; // end namespace morpheo             
173
174#endif
Note: See TracBrowser for help on using the repository browser.