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

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 8.5 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 136 2009-10-20 18:52:15Z 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 (Tcontrol_t        )    *  in_EXECUTE_IN_CANCEL         ;
87  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_STORE_QUEUE_PTR_WRITE;
88  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_STORE_QUEUE_PTR_READ ;
89  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_STORE_QUEUE_EMPTY    ;
90  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_LOAD_QUEUE_PTR_WRITE;
91  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_HAS_IMMEDIAT   ;
92  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_IMMEDIAT       ;
93  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RA        ;
94  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RB        ;
95  public    : SC_IN (Tspecial_data_t   )    *  in_EXECUTE_IN_DATA_RC        ;
96  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RD       ;
97  public    : SC_IN (Tgeneral_address_t)    *  in_EXECUTE_IN_NUM_REG_RD     ;
98  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RE       ;
99  public    : SC_IN (Tspecial_address_t)    *  in_EXECUTE_IN_NUM_REG_RE     ;
100
101    // ~~~~~[ Interface "execute_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
102  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_VAL            ;
103  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_OUT_ACK            ;
104  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_CONTEXT_ID     ;
105  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_FRONT_END_ID   ;
106  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_OOO_ENGINE_ID  ;
107  public    : SC_OUT(Tpacket_t         )    * out_EXECUTE_OUT_PACKET_ID      ;
108//public    : SC_OUT(Toperation_t      )    * out_EXECUTE_OUT_OPERATION      ;
109//public    : SC_OUT(Ttype_t           )    * out_EXECUTE_OUT_TYPE           ;
110  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_CANCEL         ;
111  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RD       ;
112  public    : SC_OUT(Tgeneral_address_t)    * out_EXECUTE_OUT_NUM_REG_RD     ;
113  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_OUT_DATA_RD        ;
114  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RE       ;
115  public    : SC_OUT(Tspecial_address_t)    * out_EXECUTE_OUT_NUM_REG_RE     ;
116  public    : SC_OUT(Tspecial_data_t   )    * out_EXECUTE_OUT_DATA_RE        ;
117  public    : SC_OUT(Texception_t      )    * out_EXECUTE_OUT_EXCEPTION      ;
118  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_NO_SEQUENCE    ;
119  public    : SC_OUT(Taddress_t        )    * out_EXECUTE_OUT_ADDRESS        ;
120
121    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
122
123    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
124
125    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
126  private   : Tcontrol_t                      internal_EXECUTE_IN_ACK;
127  private   : Tcontrol_t                      internal_EXECUTE_OUT_VAL;
128  private   : bool                            reg_BUSY_IN ;
129  private   : bool                            reg_BUSY_OUT;
130
131  private   : execute_operation_t           * _execute_operation_in ;
132  private   : execute_operation_t           * _execute_operation_out;
133  private   : execute_register_t         **** _execute_register;
134  private   : execute_param_t               * _execute_param;
135  private   : function_execute_t          *** _function_execute;
136#endif
137
138    // -----[ Methods ]---------------------------------------------------
139
140#ifdef SYSTEMC
141    SC_HAS_PROCESS (Functionnal_unit);
142#endif
143  public  :          Functionnal_unit             
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  :             ~Functionnal_unit         (void);
157                                               
158  private : void        allocation                (void);
159  private : void        deallocation              (void);
160                                               
161#ifdef SYSTEMC
162  public  : void        transition                (void);
163  public  : void        genMoore                  (void);
164  public  : void        genMealy                  (void);
165
166#endif                                         
167#ifdef STATISTICS
168  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
169#endif
170                                               
171#if VHDL                                       
172  public  : void        vhdl                      (void);
173  private : void        vhdl_declaration          (Vhdl * & vhdl);
174  private : void        vhdl_body                 (Vhdl * & vhdl);
175#endif                                         
176                                               
177#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
178  private : void        end_cycle                 (void);
179#endif
180
181  };
182
183  void operation_unimplemented   (execute_operation_t * op,
184                                  execute_register_t  * reg);
185
186}; // end namespace functionnal_unit
187}; // end namespace execute_unit
188}; // end namespace multi_execute_unit
189}; // end namespace execute_loop
190}; // end namespace multi_execute_loop
191}; // end namespace core
192}; // end namespace behavioural
193}; // end namespace morpheo             
194
195#endif
Note: See TracBrowser for help on using the repository browser.