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

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

1) Update Prediction Table : statistics
2) Size instruction address on 30 bits
3) Change Log File
4) Add debug_level in simulation configuration file

  • Property svn:keywords set to Id
File size: 8.0 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 97 2008-12-19 15:34:00Z rosiere $
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/Types.h"
20#include "Behavioural/include/Identification.h"
21
22#include "Behavioural/include/Types.h"
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/Operation/include/Operation.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 (Tlsq_ptr_t        )    *  in_EXECUTE_IN_STORE_QUEUE_PTR_WRITE;
89  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_LOAD_QUEUE_PTR_WRITE;
90  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_HAS_IMMEDIAT   ;
91  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_IMMEDIAT       ;
92  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RA        ;
93  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RB        ;
94  public    : SC_IN (Tspecial_data_t   )    *  in_EXECUTE_IN_DATA_RC        ;
95  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RD       ;
96  public    : SC_IN (Tgeneral_address_t)    *  in_EXECUTE_IN_NUM_REG_RD     ;
97  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RE       ;
98  public    : SC_IN (Tspecial_address_t)    *  in_EXECUTE_IN_NUM_REG_RE     ;
99
100    // ~~~~~[ Interface "execute_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
101  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_VAL            ;
102  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_OUT_ACK            ;
103  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_CONTEXT_ID     ;
104  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_FRONT_END_ID   ;
105  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_OOO_ENGINE_ID  ;
106  public    : SC_OUT(Tpacket_t         )    * out_EXECUTE_OUT_PACKET_ID      ;
107//public    : SC_OUT(Toperation_t      )    * out_EXECUTE_OUT_OPERATION      ;
108//public    : SC_OUT(Ttype_t           )    * out_EXECUTE_OUT_TYPE           ;
109  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RD       ;
110  public    : SC_OUT(Tgeneral_address_t)    * out_EXECUTE_OUT_NUM_REG_RD     ;
111  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_OUT_DATA_RD        ;
112  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RE       ;
113  public    : SC_OUT(Tspecial_address_t)    * out_EXECUTE_OUT_NUM_REG_RE     ;
114  public    : SC_OUT(Tspecial_data_t   )    * out_EXECUTE_OUT_DATA_RE        ;
115  public    : SC_OUT(Texception_t      )    * out_EXECUTE_OUT_EXCEPTION      ;
116  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_NO_SEQUENCE    ;
117  public    : SC_OUT(Taddress_t        )    * out_EXECUTE_OUT_ADDRESS        ;
118
119    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
120
121    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
122
123    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
124  private   : Tcontrol_t                      internal_EXECUTE_IN_ACK;
125  private   : Tcontrol_t                      internal_EXECUTE_OUT_VAL;
126  private   : bool                            reg_BUSY_IN ;
127  private   : bool                            reg_BUSY_OUT;
128
129  private   : execute_operation_t           * _execute_operation_in ;
130  private   : execute_operation_t           * _execute_operation_out;
131  private   : execute_register_t         **** _execute_register;
132  private   : execute_param_t               * _execute_param;
133  private   : function_execute_t          *** _function_execute;
134#endif
135
136    // -----[ Methods ]---------------------------------------------------
137
138#ifdef SYSTEMC
139    SC_HAS_PROCESS (Functionnal_unit);
140#endif
141  public  :          Functionnal_unit             
142  (
143#ifdef SYSTEMC
144   sc_module_name                                name,
145#else                                         
146   std::string                                   name,
147#endif                                         
148#ifdef STATISTICS
149   morpheo::behavioural::Parameters_Statistics * param_statistics,
150#endif
151   Parameters                                  * param,
152   morpheo::behavioural::Tusage_t                usage
153   );
154  public  :             ~Functionnal_unit         (void);
155                                               
156  private : void        allocation                (void);
157  private : void        deallocation              (void);
158                                               
159#ifdef SYSTEMC
160  public  : void        transition                (void);
161  public  : void        genMoore                  (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.