source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h @ 75

Last change on this file since 75 was 75, checked in by rosiere, 16 years ago

Update all component (except front_end) to :

  • new statistics model
  • no namespace std
File size: 7.8 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Functionnal_unit_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Functionnal_unit_h
3
4/*
5 * $Id$
6 *
7 * [ Description ]
8 *
9 * This functionnal unit can treat an only request. also delay_global = max(latence, delay)
10 */
11
12#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Operation.h"
13
14#ifdef SYSTEMC
15#include "systemc.h"
16#endif
17
18#include <iostream>
19#include "Common/include/ToString.h"
20#include "Common/include/Debug.h"
21#include "Behavioural/include/Types.h"
22
23#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h"
24#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Types.h"
25#ifdef STATISTICS
26#include "Behavioural/include/Stat.h"
27#endif
28#include "Behavioural/include/Component.h"
29#ifdef VHDL
30#include "Behavioural/include/Vhdl.h"
31#endif
32#include "Behavioural/include/Usage.h"
33
34namespace morpheo {
35namespace behavioural {
36
37namespace core {
38namespace multi_execute_loop {
39namespace execute_loop {
40namespace multi_execute_unit {
41namespace execute_unit {
42namespace functionnal_unit {
43
44
45  class Functionnal_unit
46#if SYSTEMC
47    : public sc_module
48#endif
49  {
50    // -----[ fields ]----------------------------------------------------
51    // Parameters
52  protected : const std::string  _name;
53  protected : const Parameters * _param;
54  private   : const Tusage_t     _usage;
55
56#ifdef STATISTICS
57  public    : Stat                           * _stat;
58
59  private   : counter_t                      * _stat_use_functionnal_unit;
60  private   : counter_t                      * _stat_average_use_functionnal_unit;
61  private   : counter_t                      * _stat_percent_use_functionnal_unit;
62
63  private   : counter_t                      * _stat_sum_delay;
64  private   : counter_t                      * _stat_average_delay;
65
66  private   : counter_t                      * _stat_sum_latence;
67  private   : counter_t                      * _stat_average_latence;
68#endif
69
70  public    : Component                      * _component;
71  private   : Interfaces                     * _interfaces;
72
73#ifdef SYSTEMC
74    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
75    // Interface
76  public    : SC_CLOCK                      *  in_CLOCK        ;
77  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
78
79    // ~~~~~[ Interface "execute_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
80  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_VAL            ;
81  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_IN_ACK            ;
82  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_CONTEXT_ID     ;
83  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_FRONT_END_ID   ;
84  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_OOO_ENGINE_ID  ;
85  public    : SC_IN (Tpacket_t         )    *  in_EXECUTE_IN_PACKET_ID      ;
86  public    : SC_IN (Toperation_t      )    *  in_EXECUTE_IN_OPERATION      ;
87  public    : SC_IN (Ttype_t           )    *  in_EXECUTE_IN_TYPE           ;
88  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_HAS_IMMEDIAT   ;
89  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_IMMEDIAT       ;
90  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RA        ;
91  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RB        ;
92  public    : SC_IN (Tspecial_data_t   )    *  in_EXECUTE_IN_DATA_RC        ;
93  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RD       ;
94  public    : SC_IN (Tgeneral_address_t)    *  in_EXECUTE_IN_NUM_REG_RD     ;
95  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RE       ;
96  public    : SC_IN (Tspecial_address_t)    *  in_EXECUTE_IN_NUM_REG_RE     ;
97
98    // ~~~~~[ Interface "execute_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
99  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_VAL            ;
100  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_OUT_ACK            ;
101  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_CONTEXT_ID     ;
102  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_FRONT_END_ID   ;
103  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_OOO_ENGINE_ID  ;
104  public    : SC_OUT(Tpacket_t         )    * out_EXECUTE_OUT_PACKET_ID      ;
105//public    : SC_OUT(Toperation_t      )    * out_EXECUTE_OUT_OPERATION      ;
106//public    : SC_OUT(Ttype_t           )    * out_EXECUTE_OUT_TYPE           ;
107  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RD       ;
108  public    : SC_OUT(Tgeneral_address_t)    * out_EXECUTE_OUT_NUM_REG_RD     ;
109  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_OUT_DATA_RD        ;
110  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RE       ;
111  public    : SC_OUT(Tspecial_address_t)    * out_EXECUTE_OUT_NUM_REG_RE     ;
112  public    : SC_OUT(Tspecial_data_t   )    * out_EXECUTE_OUT_DATA_RE        ;
113  public    : SC_OUT(Texception_t      )    * out_EXECUTE_OUT_EXCEPTION      ;
114  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_NO_SEQUENCE    ;
115  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_OUT_ADDRESS        ;
116
117    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
118
119    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
120
121    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122  private   : Tcontrol_t                      internal_EXECUTE_IN_ACK;
123  private   : Tcontrol_t                      internal_EXECUTE_OUT_VAL;
124  private   : bool                            reg_BUSY;
125
126  private   : execute_operation_t           * _execute_operation;
127  private   : execute_register_t         **** _execute_register;
128  private   : execute_param_t               * _execute_param;
129  private   : function_execute_t           ** _function_execute;
130#endif
131
132    // -----[ Methods ]---------------------------------------------------
133
134#ifdef SYSTEMC
135    SC_HAS_PROCESS (Functionnal_unit);
136#endif
137  public  :          Functionnal_unit             
138  (
139#ifdef SYSTEMC
140   sc_module_name                                name,
141#else                                         
142   std::string                                   name,
143#endif                                         
144#ifdef STATISTICS
145   morpheo::behavioural::Parameters_Statistics * param_statistics,
146#endif
147   Parameters                                  * param,
148   morpheo::behavioural::Tusage_t                usage=USE_ALL
149   );
150  public  :             ~Functionnal_unit         (void);
151                                               
152  private : void        allocation                (void);
153  private : void        deallocation              (void);
154                                               
155#ifdef SYSTEMC
156  public  : void        transition                (void);
157  public  : void        genMoore                  (void);
158  public  : void        genMealy                  (void);
159
160
161#endif                                         
162#ifdef STATISTICS
163  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
164#endif
165                                               
166#if VHDL                                       
167  public  : void        vhdl                      (void);
168  private : void        vhdl_declaration          (Vhdl * & vhdl);
169  private : void        vhdl_body                 (Vhdl * & vhdl);
170#endif                                         
171                                               
172#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
173  private : void        end_cycle                 (void);
174#endif
175
176  };
177
178  void operation_unimplemented   (execute_operation_t * op,
179                                  execute_register_t  * reg);
180
181}; // end namespace functionnal_unit
182}; // end namespace execute_unit
183}; // end namespace multi_execute_unit
184}; // end namespace execute_loop
185}; // end namespace multi_execute_loop
186}; // end namespace core
187}; // end namespace behavioural
188}; // end namespace morpheo             
189
190#endif
Note: See TracBrowser for help on using the repository browser.