source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/include/Front_end.h @ 101

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

1) Add soc test
2) fix bug (Pc management, Decod and execute, Update prediction ...)

  • Property svn:keywords set to Id
File size: 12.7 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_Front_end_h
2#define morpheo_behavioural_core_multi_front_end_front_end_Front_end_h
3
4/*
5 * $Id: Front_end.h 101 2009-01-15 17:19:08Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#ifdef SYSTEMC
12#include "systemc.h"
13#endif
14
15#include "Behavioural/Core/Multi_Front_end/Front_end/include/Parameters.h"
16#include "Behavioural/include/Types.h"
17
18#ifdef STATISTICS
19#include "Behavioural/include/Stat.h"
20#endif
21#include "Behavioural/include/Component.h"
22#ifdef VHDL
23#include "Behavioural/include/Vhdl.h"
24#endif
25#include "Behavioural/include/Usage.h"
26
27#include "Common/include/ToString.h"
28#include "Common/include/Debug.h"
29
30#include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/include/Ifetch_unit.h"
31#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h"
32#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/include/Decod_unit.h"
33#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h"
34#include "Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/include/Front_end_Glue.h"
35
36#include <iostream>
37
38namespace morpheo {
39namespace behavioural {
40
41namespace core {
42namespace multi_front_end {
43namespace front_end {
44
45
46  class Front_end
47#if SYSTEMC
48    : public sc_module
49#endif
50  {
51    // -----[ fields ]----------------------------------------------------
52    // Parameters
53  protected : const std::string  _name;
54  protected : const Parameters * _param;
55  private   : const Tusage_t     _usage;
56
57#ifdef STATISTICS
58  public    : Stat                           * _stat;
59#endif
60
61  public    : Component                      * _component;
62  private   : Interfaces                     * _interfaces;
63
64#ifdef SYSTEMC
65    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66
67    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68  public    : SC_CLOCK                       *  in_CLOCK        ;
69  public    : SC_IN (Tcontrol_t )            *  in_NRESET       ;
70
71    // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
72  public    : SC_OUT(Tcontrol_t           ) ** out_ICACHE_REQ_VAL                   ;//[nb_context]
73  public    : SC_IN (Tcontrol_t           ) **  in_ICACHE_REQ_ACK                   ;//[nb_context]
74//public    : SC_OUT(Tcontext_t           ) ** out_ICACHE_REQ_THREAD_ID             ;//[nb_context]
75  public    : SC_OUT(Tpacket_t            ) ** out_ICACHE_REQ_PACKET_ID             ;//[nb_context]
76  public    : SC_OUT(Ticache_instruction_t) ** out_ICACHE_REQ_ADDRESS               ;//[nb_context]
77  public    : SC_OUT(Ticache_type_t       ) ** out_ICACHE_REQ_TYPE                  ;//[nb_context]
78
79    // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
80  public    : SC_IN (Tcontrol_t           ) **  in_ICACHE_RSP_VAL                   ;//[nb_context]
81  public    : SC_OUT(Tcontrol_t           ) ** out_ICACHE_RSP_ACK                   ;//[nb_context]
82//public    : SC_IN (Tcontext_t           ) **  in_ICACHE_RSP_THREAD_ID             ;//[nb_context]
83  public    : SC_IN (Tpacket_t            ) **  in_ICACHE_RSP_PACKET_ID             ;//[nb_context]
84  public    : SC_IN (Ticache_instruction_t)***  in_ICACHE_RSP_INSTRUCTION           ;//[nb_context][nb_inst_fetch]
85  public    : SC_IN (Ticache_error_t      ) **  in_ICACHE_RSP_ERROR                 ;//[nb_context]
86
87    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_VAL                       ;//[sum_inst_decod]
89  public    : SC_IN (Tcontrol_t           ) **  in_DECOD_ACK                       ;//[sum_inst_decod]
90  public    : SC_OUT(Tcontext_t           ) ** out_DECOD_CONTEXT_ID                ;//[sum_inst_decod]
91  public    : SC_OUT(Tdepth_t             ) ** out_DECOD_DEPTH                     ;//[sum_inst_decod]
92  public    : SC_OUT(Ttype_t              ) ** out_DECOD_TYPE                      ;//[sum_inst_decod]
93  public    : SC_OUT(Toperation_t         ) ** out_DECOD_OPERATION                 ;//[sum_inst_decod]
94  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_NO_EXECUTE                ;//[sum_inst_decod]
95  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_IS_DELAY_SLOT             ;//[sum_inst_decod]
96  public    : SC_OUT(Tgeneral_data_t      ) ** out_DECOD_ADDRESS                   ;//[sum_inst_decod]
97  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_HAS_IMMEDIAT              ;//[sum_inst_decod]
98  public    : SC_OUT(Tgeneral_data_t      ) ** out_DECOD_IMMEDIAT                  ;//[sum_inst_decod]
99  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_READ_RA                   ;//[sum_inst_decod]
100  public    : SC_OUT(Tgeneral_address_t   ) ** out_DECOD_NUM_REG_RA                ;//[sum_inst_decod]
101  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_READ_RB                   ;//[sum_inst_decod]
102  public    : SC_OUT(Tgeneral_address_t   ) ** out_DECOD_NUM_REG_RB                ;//[sum_inst_decod]
103  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_READ_RC                   ;//[sum_inst_decod]
104  public    : SC_OUT(Tspecial_address_t   ) ** out_DECOD_NUM_REG_RC                ;//[sum_inst_decod]
105  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_WRITE_RD                  ;//[sum_inst_decod]
106  public    : SC_OUT(Tgeneral_address_t   ) ** out_DECOD_NUM_REG_RD                ;//[sum_inst_decod]
107  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_WRITE_RE                  ;//[sum_inst_decod]
108  public    : SC_OUT(Tspecial_address_t   ) ** out_DECOD_NUM_REG_RE                ;//[sum_inst_decod]
109  public    : SC_OUT(Texception_t         ) ** out_DECOD_EXCEPTION_USE             ;//[sum_inst_decod]
110  public    : SC_OUT(Texception_t         ) ** out_DECOD_EXCEPTION                 ;//[sum_inst_decod]
111
112    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
113  public    : SC_IN (Tcontrol_t           ) **  in_BRANCH_COMPLETE_VAL              ;//[nb_inst_branch_complete]
114  public    : SC_OUT(Tcontrol_t           ) ** out_BRANCH_COMPLETE_ACK              ;//[nb_inst_branch_complete]
115  public    : SC_IN (Tcontext_t           ) **  in_BRANCH_COMPLETE_CONTEXT_ID       ;//[nb_inst_branch_complete]
116  public    : SC_IN (Tdepth_t             ) **  in_BRANCH_COMPLETE_DEPTH            ;//[nb_inst_branch_complete]
117  public    : SC_IN (Taddress_t           ) **  in_BRANCH_COMPLETE_ADDRESS          ;//[nb_inst_branch_complete]
118  public    : SC_IN (Tcontrol_t           ) **  in_BRANCH_COMPLETE_NO_SEQUENCE      ;//[nb_inst_branch_complete]
119  public    : SC_OUT(Tcontrol_t           ) ** out_BRANCH_COMPLETE_MISS_PREDICTION  ;//[nb_inst_branch_complete]
120                                                                                   
121    // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122  public    : SC_IN (Tcontrol_t           )  *  in_COMMIT_EVENT_VAL                 ;
123  public    : SC_OUT(Tcontrol_t           )  * out_COMMIT_EVENT_ACK                 ;
124  public    : SC_IN (Tcontext_t           )  *  in_COMMIT_EVENT_CONTEXT_ID          ;
125  public    : SC_IN (Tdepth_t             )  *  in_COMMIT_EVENT_DEPTH               ;
126  public    : SC_IN (Tevent_type_t        )  *  in_COMMIT_EVENT_TYPE                ;
127  public    : SC_IN (Tcontrol_t           )  *  in_COMMIT_EVENT_IS_DELAY_SLOT       ;
128  public    : SC_IN (Taddress_t           )  *  in_COMMIT_EVENT_ADDRESS             ;
129  public    : SC_IN (Taddress_t           )  *  in_COMMIT_EVENT_ADDRESS_EPCR        ;
130  public    : SC_IN (Tcontrol_t           )  *  in_COMMIT_EVENT_ADDRESS_EEAR_VAL    ;
131  public    : SC_IN (Taddress_t           )  *  in_COMMIT_EVENT_ADDRESS_EEAR        ;
132
133    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
134  public    : SC_OUT(Tcontrol_t           ) ** out_EVENT_VAL                        ;//[nb_context]
135  public    : SC_IN (Tcontrol_t           ) **  in_EVENT_ACK                        ;//[nb_context]
136  public    : SC_OUT(Taddress_t           ) ** out_EVENT_ADDRESS                    ;//[nb_context]
137  public    : SC_OUT(Taddress_t           ) ** out_EVENT_ADDRESS_NEXT               ;//[nb_context]
138  public    : SC_OUT(Tcontrol_t           ) ** out_EVENT_ADDRESS_NEXT_VAL           ;//[nb_context]
139  public    : SC_OUT(Tcontrol_t           ) ** out_EVENT_IS_DS_TAKE                 ;//[nb_context]
140
141    // ~~~~~[ Interface "spr_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
142  public    : SC_OUT(Tcontrol_t           ) ** out_SPR_EVENT_VAL                    ;//[nb_context]
143  public    : SC_IN (Tcontrol_t           ) **  in_SPR_EVENT_ACK                    ;//[nb_context]
144  public    : SC_OUT(Tspr_t               ) ** out_SPR_EVENT_EPCR                   ;//[nb_context]
145  public    : SC_OUT(Tcontrol_t           ) ** out_SPR_EVENT_EEAR_WEN               ;//[nb_context]
146  public    : SC_OUT(Tspr_t               ) ** out_SPR_EVENT_EEAR                   ;//[nb_context]
147  public    : SC_OUT(Tcontrol_t           ) ** out_SPR_EVENT_SR_DSX                 ;//[nb_context]
148  public    : SC_OUT(Tcontrol_t           ) ** out_SPR_EVENT_SR_TO_ESR              ;//[nb_context]
149                                                                                   
150    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
151  public    : SC_IN (Tcounter_t           ) **  in_NB_INST_COMMIT_ALL               ;//[nb_context]
152  public    : SC_IN (Tcounter_t           ) **  in_NB_INST_COMMIT_MEM               ;//[nb_context]
153                                                                                   
154    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
155  public    : SC_OUT(Tdepth_t             ) ** out_DEPTH_MIN                        ;//[nb_context]
156  public    : SC_OUT(Tdepth_t             ) ** out_DEPTH_MAX                        ;//[nb_context]
157  public    : SC_OUT(Tcontrol_t           ) ** out_DEPTH_FULL                       ;//[nb_context]
158
159    // ~~~~~[ Interface : "spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
160  public    : SC_IN (Tcontrol_t           ) **  in_SPR_SR_IEE                       ;//[nb_context] - Interrupt Exception Enabled
161  public    : SC_IN (Tcontrol_t           ) **  in_SPR_SR_EPH                       ;//[nb_context] - Exception Prefix High
162
163    // ~~~~~[ Interface : "interrupt" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
164  public    : SC_IN (Tcontrol_t           ) **  in_INTERRUPT_ENABLE                 ;//[nb_context] - Interrupt Exception
165
166    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
167  public    : behavioural::core::multi_front_end::front_end::ifetch_unit    ::Ifetch_unit     ** _component_ifetch_unit    ;
168  public    : behavioural::core::multi_front_end::front_end::prediction_unit::Prediction_unit  * _component_prediction_unit;
169  public    : behavioural::core::multi_front_end::front_end::decod_unit     ::Decod_unit      ** _component_decod_unit     ;
170  public    : behavioural::core::multi_front_end::front_end::context_state  ::Context_State    * _component_context_state  ;
171  public    : behavioural::core::multi_front_end::front_end::front_end_glue ::Front_end_Glue   * _component_glue           ;
172
173    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
174
175    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176#endif
177
178    // -----[ Methods ]---------------------------------------------------
179
180#ifdef SYSTEMC
181    SC_HAS_PROCESS (Front_end);
182#endif
183  public  :          Front_end             
184  (
185#ifdef SYSTEMC
186   sc_module_name                                name,
187#else                                         
188   std::string                                   name,
189#endif                                         
190#ifdef STATISTICS
191   morpheo::behavioural::Parameters_Statistics * param_statistics,
192#endif
193   Parameters                                  * param,
194   morpheo::behavioural::Tusage_t                usage
195   );
196  public  :          ~Front_end             (void);
197                                               
198  private : void        allocation                (
199#ifdef STATISTICS
200                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
201#else
202                                                   void
203#endif
204                                                   );
205  private : void        deallocation              (void);
206                                               
207#ifdef SYSTEMC                                 
208# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
209  public  : void        transition                (void);
210# endif                                       
211#endif                                         
212
213#if VHDL                                       
214  public  : void        vhdl                      (void);
215#endif                                         
216
217#ifdef STATISTICS
218  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
219  public  : void        statistics_deallocation   (void);
220#endif
221#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
222  private : void        end_cycle                 (void);
223#endif
224  };
225
226}; // end namespace front_end
227}; // end namespace multi_front_end
228}; // end namespace core
229
230}; // end namespace behavioural
231}; // end namespace morpheo             
232
233#endif
Note: See TracBrowser for help on using the repository browser.