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

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

Modif for performance :
1) Load Store Unit : store send request to valid exeception
2) Commit_unit : retire can bypass store
3) Commit_unit : add stat to manage store instruction
4) Load Store Unit and Load Store Pointer Manager : add store_queue_ptr_read
5) Fix lot of bug

  • Property svn:keywords set to Id
File size: 8.3 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 122 2009-06-03 08:15:51Z 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/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  class Functionnal_unit
44#if SYSTEMC
45    : public sc_module
46#endif
47  {
48    // -----[ fields ]----------------------------------------------------
49    // Parameters
50  protected : const std::string  _name;
51  protected : const Parameters * _param;
52  private   : const Tusage_t     _usage;
53
54#ifdef STATISTICS
55  public    : Stat                           * _stat;
56
57  private   : counter_t                      * _stat_use_functionnal_unit;
58  private   : counter_t                      * _stat_average_use_functionnal_unit;
59  private   : counter_t                      * _stat_percent_use_functionnal_unit;
60
61  private   : counter_t                      * _stat_sum_delay;
62  private   : counter_t                      * _stat_average_delay;
63
64  private   : counter_t                      * _stat_sum_latence;
65  private   : counter_t                      * _stat_average_latence;
66#endif
67
68  public    : Component                      * _component;
69  private   : Interfaces                     * _interfaces;
70
71#ifdef SYSTEMC
72    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73    // Interface
74  public    : SC_CLOCK                      *  in_CLOCK        ;
75  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
76
77    // ~~~~~[ Interface "execute_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_VAL            ;
79  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_IN_ACK            ;
80  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_CONTEXT_ID     ;
81  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_FRONT_END_ID   ;
82  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_OOO_ENGINE_ID  ;
83  public    : SC_IN (Tpacket_t         )    *  in_EXECUTE_IN_PACKET_ID      ;
84  public    : SC_IN (Toperation_t      )    *  in_EXECUTE_IN_OPERATION      ;
85  public    : SC_IN (Ttype_t           )    *  in_EXECUTE_IN_TYPE           ;
86  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_STORE_QUEUE_PTR_WRITE;
87  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_STORE_QUEUE_PTR_READ ;
88  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_STORE_QUEUE_EMPTY    ;
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  public  : void        genMealy                  (void);
163
164#endif                                         
165#ifdef STATISTICS
166  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
167#endif
168                                               
169#if VHDL                                       
170  public  : void        vhdl                      (void);
171  private : void        vhdl_declaration          (Vhdl * & vhdl);
172  private : void        vhdl_body                 (Vhdl * & vhdl);
173#endif                                         
174                                               
175#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
176  private : void        end_cycle                 (void);
177#endif
178
179  };
180
181  void operation_unimplemented   (execute_operation_t * op,
182                                  execute_register_t  * reg);
183
184}; // end namespace functionnal_unit
185}; // end namespace execute_unit
186}; // end namespace multi_execute_unit
187}; // end namespace execute_loop
188}; // end namespace multi_execute_loop
189}; // end namespace core
190}; // end namespace behavioural
191}; // end namespace morpheo             
192
193#endif
Note: See TracBrowser for help on using the repository browser.