source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h @ 123

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 11.4 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Decod_queue_h
2#define morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Decod_queue_h
3
4/*
5 * $Id: Decod_queue.h 123 2009-06-08 20:43:30Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#ifdef SYSTEMC
12#include "systemc.h"
13#endif
14
15#include "Common/include/ToString.h"
16#include "Common/include/Debug.h"
17
18#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h"
19#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Types.h"
20#ifdef STATISTICS
21#include "Behavioural/include/Stat.h"
22#endif
23#include "Behavioural/include/Component.h"
24#ifdef VHDL
25#include "Behavioural/include/Vhdl.h"
26#endif
27#include "Behavioural/include/Usage.h"
28
29#include <iostream>
30#include <list>
31
32namespace morpheo {
33namespace behavioural {
34
35namespace core {
36namespace multi_front_end {
37namespace front_end {
38namespace decod_unit {
39namespace decod_queue {
40
41
42  class Decod_queue
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  private   : counter_t                     ** _stat_nb_inst;
56  private   : counter_t                      * _stat_use_queue;
57
58  private   : counter_t                      * _stat_sum_inst_enable;
59  private   : counter_t                      * _stat_sum_transaction_decod_in;
60  private   : counter_t                      * _stat_average_occupation_bundle;
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 : "decod_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_VAL            ;//[nb_inst_decod]
74  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_IN_ACK            ;//[nb_inst_decod]
75  public    : SC_IN (Tcontext_t         )  **  in_DECOD_IN_CONTEXT_ID     ;//[nb_inst_decod]
76  public    : SC_IN (Tdepth_t           )  **  in_DECOD_IN_DEPTH          ;//[nb_inst_decod]
77  public    : SC_IN (Ttype_t            )  **  in_DECOD_IN_TYPE           ;//[nb_inst_decod]
78  public    : SC_IN (Toperation_t       )  **  in_DECOD_IN_OPERATION      ;//[nb_inst_decod]
79  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_NO_EXECUTE     ;//[nb_inst_decod]
80  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_IS_DELAY_SLOT  ;//[nb_inst_decod]
81#ifdef DEBUG
82  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_IN_ADDRESS        ;//[nb_inst_decod]
83#endif
84  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_IN_ADDRESS_NEXT   ;//[nb_inst_decod]
85  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_HAS_IMMEDIAT   ;//[nb_inst_decod]
86  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_IN_IMMEDIAT       ;//[nb_inst_decod]
87  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RA        ;//[nb_inst_decod]
88  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RA     ;//[nb_inst_decod]
89  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RB        ;//[nb_inst_decod]
90  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RB     ;//[nb_inst_decod]
91  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RC        ;//[nb_inst_decod]
92  public    : SC_IN (Tspecial_address_t )  **  in_DECOD_IN_NUM_REG_RC     ;//[nb_inst_decod]
93  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_WRITE_RD       ;//[nb_inst_decod]
94  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RD     ;//[nb_inst_decod]
95  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_WRITE_RE       ;//[nb_inst_decod]
96  public    : SC_IN (Tspecial_address_t )  **  in_DECOD_IN_NUM_REG_RE     ;//[nb_inst_decod]
97  public    : SC_IN (Texception_t       )  **  in_DECOD_IN_EXCEPTION_USE  ;//[nb_inst_decod]
98  public    : SC_IN (Texception_t       )  **  in_DECOD_IN_EXCEPTION      ;//[nb_inst_decod]
99
100    // ~~~~~[ Interface : "decod_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
101  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_VAL           ;//[nb_inst_decod]
102  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_OUT_ACK           ;//[nb_inst_decod]
103  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_OUT_CONTEXT_ID    ;//[nb_inst_decod]
104  public    : SC_OUT(Tdepth_t           )  ** out_DECOD_OUT_DEPTH         ;//[nb_inst_decod]
105  public    : SC_OUT(Ttype_t            )  ** out_DECOD_OUT_TYPE          ;//[nb_inst_decod]
106  public    : SC_OUT(Toperation_t       )  ** out_DECOD_OUT_OPERATION     ;//[nb_inst_decod]
107  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_NO_EXECUTE    ;//[nb_inst_decod]
108//public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_HAVE_EVENT    ;//[nb_inst_decod]
109  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_LAST_EVENT    ;//[nb_inst_decod]
110  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_IS_DELAY_SLOT ;//[nb_inst_decod]
111#ifdef DEBUG
112  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_OUT_ADDRESS       ;//[nb_inst_decod]
113#endif
114  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_OUT_ADDRESS_NEXT  ;//[nb_inst_decod]
115  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_HAS_IMMEDIAT  ;//[nb_inst_decod]
116  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_OUT_IMMEDIAT      ;//[nb_inst_decod]
117  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RA       ;//[nb_inst_decod]
118  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RA    ;//[nb_inst_decod]
119  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RB       ;//[nb_inst_decod]
120  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RB    ;//[nb_inst_decod]
121  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RC       ;//[nb_inst_decod]
122  public    : SC_OUT(Tspecial_address_t )  ** out_DECOD_OUT_NUM_REG_RC    ;//[nb_inst_decod]
123  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_WRITE_RD      ;//[nb_inst_decod]
124  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RD    ;//[nb_inst_decod]
125  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_WRITE_RE      ;//[nb_inst_decod]
126  public    : SC_OUT(Tspecial_address_t )  ** out_DECOD_OUT_NUM_REG_RE    ;//[nb_inst_decod]
127  public    : SC_OUT(Texception_t       )  ** out_DECOD_OUT_EXCEPTION_USE ;//[nb_inst_decod]
128  public    : SC_OUT(Texception_t       )  ** out_DECOD_OUT_EXCEPTION     ;//[nb_inst_decod]
129
130    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
131  public    : SC_IN (Tdepth_t           )  **  in_DEPTH_MIN               ;//[nb_context]
132  public    : SC_IN (Tdepth_t           )  **  in_DEPTH_MAX               ;//[nb_context]
133  public    : SC_IN (Tcontrol_t         )  **  in_DEPTH_FULL              ;//[nb_context]
134
135    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
136  public    : SC_OUT(Tcounter_t         )  ** out_NB_INST_ALL             ;//[nb_context]
137
138    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
139  public    : SC_IN (Tcontrol_t         )  **  in_CONTEXT_EVENT           ;//[nb_context]
140
141    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
142
143    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
144
145    // implementation : common
146  private   : std::list<decod_queue_entry_t*> * reg_QUEUE                  ;
147  private   : uint32_t                        * reg_NB_INST                ;//[nb_context]
148  private   : uint32_t                        * reg_NB_INST_EVENT          ;//[nb_context]
149
150    // implementation : one_fifo only
151  private   : uint32_t                          reg_LAST_SLOT              ;
152    // implementation : multi_fifo only
153  private   : uint32_t                          reg_NUM_BANK_HEAD          ;
154  private   : uint32_t                          reg_NUM_BANK_TAIL          ;
155
156    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
157    // implementation : common
158  private   : Tcontrol_t                     * internal_DECOD_IN_ACK      ;//[nb_inst_decod]
159  private   : Tcontrol_t                     * internal_DECOD_OUT_VAL     ;//[nb_inst_decod]
160  private   : Tcontrol_t                     * internal_DECOD_OUT_ACK     ;//[nb_inst_decod]
161    // implementation : one_fifo only
162    // implementation : multi_fifo only
163
164    // function pointer
165  public    : void (morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Decod_queue::*function_transition        ) (void);
166  public    : void (morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Decod_queue::*function_genMoore          ) (void);
167  public    : void (morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Decod_queue::*function_genMealy_decod_out) (void);
168#endif
169
170    // -----[ Methods ]---------------------------------------------------
171
172#ifdef SYSTEMC
173    SC_HAS_PROCESS (Decod_queue);
174#endif
175  public  :          Decod_queue             
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  :          ~Decod_queue             (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  public  : void        transition                             (void);
201  public  : void        genMoore                               (void);
202  public  : void        genMealy_decod_out                     (void);
203
204  public  : void        function_one_fifo_transition           (void);
205  public  : void        function_one_fifo_genMoore             (void);
206  public  : void        function_one_fifo_genMealy_decod_out   (void);
207
208  public  : void        function_multi_fifo_transition         (void);
209  public  : void        function_multi_fifo_genMoore           (void);
210  public  : void        function_multi_fifo_genMealy_decod_out (void);
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#ifdef STATISTICS
220  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
221  public  : void        statistics_deallocation   (void);
222#endif
223#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
224  private : void        end_cycle                 (void);
225#endif
226  };
227
228}; // end namespace decod_queue
229}; // end namespace decod_unit
230}; // end namespace front_end
231}; // end namespace multi_front_end
232}; // end namespace core
233
234}; // end namespace behavioural
235}; // end namespace morpheo             
236
237#endif
Note: See TracBrowser for help on using the repository browser.