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

Last change on this file since 116 was 116, checked in by moulu, 15 years ago

1) added a generic multiplier (systemC isn't working with 8bits)
2) added a partial functionnal unit vhdl.

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