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

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

1) Add soc test
2) fix bug (Pc management, Decod and execute, Update prediction ...)

  • Property svn:keywords set to Id
File size: 6.3 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 101 2009-01-15 17:19:08Z 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/Parameters.h"
21#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_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_write_unit {
37namespace write_unit {
38namespace execute_queue {
39
40  class Execute_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
54  private   : counter_t                      * _stat_use_queue;
55  private   : counter_t                      * _stat_average_use_queue;
56  private   : counter_t                      * _stat_percent_use_queue;
57#endif
58
59  public    : Component                      * _component;
60  private   : Interfaces                     * _interfaces;
61
62#ifdef SYSTEMC
63    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64    // Interface
65  public    : SC_CLOCK                      *  in_CLOCK        ;
66  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
67
68    // -----[ Interface "Execute_queue_in" ]------------------------------
69  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_QUEUE_IN_VAL           ;
70  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_QUEUE_IN_ACK           ;
71  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_QUEUE_IN_CONTEXT_ID    ;
72  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_QUEUE_IN_FRONT_END_ID  ;
73  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID ;
74  public    : SC_IN (Tpacket_t         )    *  in_EXECUTE_QUEUE_IN_PACKET_ID     ;
75//public    : SC_IN (Toperation_t      )    *  in_EXECUTE_QUEUE_IN_OPERATION     ;
76//public    : SC_IN (Ttype_t           )    *  in_EXECUTE_QUEUE_IN_TYPE          ;
77  public    : SC_IN (Tspecial_data_t   )    *  in_EXECUTE_QUEUE_IN_FLAGS         ;
78  public    : SC_IN (Texception_t      )    *  in_EXECUTE_QUEUE_IN_EXCEPTION     ;
79  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_QUEUE_IN_NO_SEQUENCE   ;
80  public    : SC_IN (Taddress_t        )    *  in_EXECUTE_QUEUE_IN_ADDRESS       ;
81  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_QUEUE_IN_DATA          ;
82
83    // -----[ Interface "Execute_queue_out" ]-----------------------------
84  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_QUEUE_OUT_VAL          ;
85  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_QUEUE_OUT_ACK          ;
86  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_QUEUE_OUT_CONTEXT_ID   ;
87  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_QUEUE_OUT_FRONT_END_ID ;
88  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID;
89  public    : SC_OUT(Tpacket_t         )    * out_EXECUTE_QUEUE_OUT_PACKET_ID    ;
90//public    : SC_OUT(Toperation_t      )    * out_EXECUTE_QUEUE_OUT_OPERATION    ;
91//public    : SC_OUT(Ttype_t           )    * out_EXECUTE_QUEUE_OUT_TYPE         ;
92  public    : SC_OUT(Tspecial_data_t   )    * out_EXECUTE_QUEUE_OUT_FLAGS        ;
93  public    : SC_OUT(Texception_t      )    * out_EXECUTE_QUEUE_OUT_EXCEPTION    ;
94  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_QUEUE_OUT_NO_SEQUENCE  ;
95  public    : SC_OUT(Taddress_t        )    * out_EXECUTE_QUEUE_OUT_ADDRESS      ;
96  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_QUEUE_OUT_DATA         ;
97
98    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
99   
100    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
101  private   : std::list<execute_queue_entry_t *> * _queue;
102    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
103  private   : Tcontrol_t                       internal_EXECUTE_QUEUE_IN_ACK ;
104  private   : Tcontrol_t                       internal_EXECUTE_QUEUE_OUT_VAL;
105#endif
106
107    // -----[ Methods ]---------------------------------------------------
108
109#ifdef SYSTEMC
110    SC_HAS_PROCESS (Execute_queue);
111#endif
112  public  :          Execute_queue             
113  (
114#ifdef SYSTEMC
115   sc_module_name                                name,
116#else                                         
117   std::string                                   name,
118#endif                                         
119#ifdef STATISTICS
120   morpheo::behavioural::Parameters_Statistics * param_statistics,
121#endif
122   Parameters                                  * param,
123   morpheo::behavioural::Tusage_t                usage
124   );
125  public  :          ~Execute_queue             (void);
126                                               
127  private : void     allocation                (void);
128  private : void     deallocation              (void);
129                                               
130#ifdef SYSTEMC                                 
131  public  : void     transition                (void);
132  public  : void     genMoore                  (void);
133#endif                                         
134#ifdef STATISTICS
135  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
136#endif
137                                               
138#if VHDL                                       
139  public  : void     vhdl                      (void);
140  private : void     vhdl_declaration          (Vhdl * & vhdl);
141  private : void     vhdl_body                 (Vhdl * & vhdl);
142#endif                                         
143                                               
144#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
145  private : void     end_cycle                 (void);
146#endif
147  };
148
149}; // end namespace execute_queue
150}; // end namespace write_unit
151}; // end namespace multi_write_unit
152}; // end namespace execute_loop
153}; // end namespace multi_execute_loop
154}; // end namespace core
155
156}; // end namespace behavioural
157}; // end namespace morpheo             
158
159#endif
Note: See TracBrowser for help on using the repository browser.