source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_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: 9.1 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 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 "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#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 : "decod_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_VAL            ;//[nb_inst_decod]
70  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_IN_ACK            ;//[nb_inst_decod]
71  public    : SC_IN (Tcontext_t         )  **  in_DECOD_IN_CONTEXT_ID     ;//[nb_inst_decod]
72  public    : SC_IN (Tdepth_t           )  **  in_DECOD_IN_DEPTH          ;//[nb_inst_decod]
73  public    : SC_IN (Ttype_t            )  **  in_DECOD_IN_TYPE           ;//[nb_inst_decod]
74  public    : SC_IN (Toperation_t       )  **  in_DECOD_IN_OPERATION      ;//[nb_inst_decod]
75  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_NO_EXECUTE     ;//[nb_inst_decod]
76  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_IS_DELAY_SLOT  ;//[nb_inst_decod]
77  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_IN_ADDRESS        ;//[nb_inst_decod]
78  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_HAS_IMMEDIAT   ;//[nb_inst_decod]
79  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_IN_IMMEDIAT       ;//[nb_inst_decod]
80  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RA        ;//[nb_inst_decod]
81  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RA     ;//[nb_inst_decod]
82  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RB        ;//[nb_inst_decod]
83  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RB     ;//[nb_inst_decod]
84  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RC        ;//[nb_inst_decod]
85  public    : SC_IN (Tspecial_address_t )  **  in_DECOD_IN_NUM_REG_RC     ;//[nb_inst_decod]
86  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_WRITE_RD       ;//[nb_inst_decod]
87  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RD     ;//[nb_inst_decod]
88  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_WRITE_RE       ;//[nb_inst_decod]
89  public    : SC_IN (Tspecial_address_t )  **  in_DECOD_IN_NUM_REG_RE     ;//[nb_inst_decod]
90  public    : SC_IN (Texception_t       )  **  in_DECOD_IN_EXCEPTION_USE  ;//[nb_inst_decod]
91  public    : SC_IN (Texception_t       )  **  in_DECOD_IN_EXCEPTION      ;//[nb_inst_decod]
92
93    // ~~~~~[ Interface : "decod_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_VAL           ;//[nb_inst_decod]
95  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_OUT_ACK           ;//[nb_inst_decod]
96  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_OUT_CONTEXT_ID    ;//[nb_inst_decod]
97  public    : SC_OUT(Tdepth_t           )  ** out_DECOD_OUT_DEPTH         ;//[nb_inst_decod]
98  public    : SC_OUT(Ttype_t            )  ** out_DECOD_OUT_TYPE          ;//[nb_inst_decod]
99  public    : SC_OUT(Toperation_t       )  ** out_DECOD_OUT_OPERATION     ;//[nb_inst_decod]
100  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_NO_EXECUTE    ;//[nb_inst_decod]
101  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_IS_DELAY_SLOT ;//[nb_inst_decod]
102  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_OUT_ADDRESS       ;//[nb_inst_decod]
103  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_HAS_IMMEDIAT  ;//[nb_inst_decod]
104  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_OUT_IMMEDIAT      ;//[nb_inst_decod]
105  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RA       ;//[nb_inst_decod]
106  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RA    ;//[nb_inst_decod]
107  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RB       ;//[nb_inst_decod]
108  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RB    ;//[nb_inst_decod]
109  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RC       ;//[nb_inst_decod]
110  public    : SC_OUT(Tspecial_address_t )  ** out_DECOD_OUT_NUM_REG_RC    ;//[nb_inst_decod]
111  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_WRITE_RD      ;//[nb_inst_decod]
112  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RD    ;//[nb_inst_decod]
113  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_WRITE_RE      ;//[nb_inst_decod]
114  public    : SC_OUT(Tspecial_address_t )  ** out_DECOD_OUT_NUM_REG_RE    ;//[nb_inst_decod]
115  public    : SC_OUT(Texception_t       )  ** out_DECOD_OUT_EXCEPTION_USE ;//[nb_inst_decod]
116  public    : SC_OUT(Texception_t       )  ** out_DECOD_OUT_EXCEPTION     ;//[nb_inst_decod]
117
118    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119  public    : SC_IN (Tdepth_t           )  **  in_DEPTH_MIN               ;//[nb_context]
120  public    : SC_IN (Tdepth_t           )  **  in_DEPTH_MAX               ;//[nb_context]
121  public    : SC_IN (Tcontrol_t         )  **  in_DEPTH_FULL              ;//[nb_context]
122
123    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
124  public    : SC_OUT(Tcounter_t         )  ** out_NB_INST_ALL             ;//[nb_context]
125
126    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
127
128    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
129  private   : std::list<decod_queue_entry_t*>* reg_QUEUE                  ;
130  private   : uint32_t                       * reg_NB_INST                ;//[nb_context]
131   
132    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
133  private   : Tcontrol_t                     * internal_DECOD_IN_ACK      ;//[nb_inst_decod]
134  private   : Tcontrol_t                     * internal_DECOD_OUT_VAL     ;//[nb_inst_decod]
135  private   : Tcontrol_t                     * internal_DECOD_OUT_ACK     ;//[nb_inst_decod]
136#endif
137
138    // -----[ Methods ]---------------------------------------------------
139
140#ifdef SYSTEMC
141    SC_HAS_PROCESS (Decod_queue);
142#endif
143  public  :          Decod_queue             
144  (
145#ifdef SYSTEMC
146   sc_module_name                                name,
147#else                                         
148   std::string                                   name,
149#endif                                         
150#ifdef STATISTICS
151   morpheo::behavioural::Parameters_Statistics * param_statistics,
152#endif
153   Parameters                                  * param,
154   morpheo::behavioural::Tusage_t                usage
155   );
156  public  :          ~Decod_queue             (void);
157                                               
158  private : void        allocation                (
159#ifdef STATISTICS
160                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
161#else
162                                                   void
163#endif
164                                                   );
165  private : void        deallocation              (void);
166                                               
167#ifdef SYSTEMC                                 
168  public  : void        transition                (void);
169  public  : void        genMoore                  (void);
170  public  : void        genMealy_decod_out        (void);
171#endif                                         
172
173#if VHDL                                       
174  public  : void        vhdl                      (void);
175  private : void        vhdl_declaration          (Vhdl * & vhdl);
176  private : void        vhdl_body                 (Vhdl * & vhdl);
177#endif                                         
178
179#ifdef STATISTICS
180  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
181  public  : void        statistics_deallocation   (void);
182#endif
183#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
184  private : void        end_cycle                 (void);
185#endif
186  };
187
188}; // end namespace decod_queue
189}; // end namespace decod_unit
190}; // end namespace front_end
191}; // end namespace multi_front_end
192}; // end namespace core
193
194}; // end namespace behavioural
195}; // end namespace morpheo             
196
197#endif
Note: See TracBrowser for help on using the repository browser.