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

Last change on this file since 81 was 81, checked in by rosiere, 16 years ago
  • Finish Environment (and test)
  • Continue predictor_unit
  • Add external tools
  • svn keyword "Id" set
  • Property svn:keywords set to Id
File size: 7.7 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_Ifetch_unit_h
2#define morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_Ifetch_unit_h
3
4/*
5 * $Id: Ifetch_unit.h 81 2008-04-15 18:40:01Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#ifdef SYSTEMC
12#include "systemc.h"
13#endif
14
15#include <iostream>
16#include "Common/include/ToString.h"
17#include "Common/include/Debug.h"
18#include "Behavioural/include/Types.h"
19
20#include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/include/Parameters.h"
21#ifdef STATISTICS
22#include "Behavioural/include/Stat.h"
23#endif
24#include "Behavioural/include/Component.h"
25#ifdef VHDL
26#include "Behavioural/include/Vhdl.h"
27#endif
28#include "Behavioural/include/Usage.h"
29
30#include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/include/Address_management.h"
31#include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h"
32#include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/include/Ifetch_unit_Glue.h"
33
34namespace morpheo {
35namespace behavioural {
36
37namespace core {
38namespace multi_front_end {
39namespace front_end {
40namespace ifetch_unit {
41
42
43  class Ifetch_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#endif
57
58  public    : Component                      * _component;
59  private   : Interfaces                     * _interfaces;
60
61#ifdef SYSTEMC
62    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64  public    : SC_CLOCK                      *  in_CLOCK        ;
65  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
66
67    // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68  public    : SC_OUT(Tcontrol_t           ) * out_ICACHE_REQ_VAL                      ;
69  public    : SC_IN (Tcontrol_t           ) *  in_ICACHE_REQ_ACK                      ;
70//public    : SC_OUT(Tcontext_t           ) * out_ICACHE_REQ_THREAD_ID                ;
71  public    : SC_OUT(Tpacket_t            ) * out_ICACHE_REQ_PACKET_ID                ;
72  public    : SC_OUT(Ticache_instruction_t) * out_ICACHE_REQ_ADDRESS                  ;
73  public    : SC_OUT(Ticache_type_t       ) * out_ICACHE_REQ_TYPE                     ;
74
75    // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76  public    : SC_IN (Tcontrol_t           ) *  in_ICACHE_RSP_VAL                      ;
77  public    : SC_OUT(Tcontrol_t           ) * out_ICACHE_RSP_ACK                      ;
78//public    : SC_IN (Tcontext_t           ) *  in_ICACHE_RSP_THREAD_ID                ;
79  public    : SC_IN (Tpacket_t            ) *  in_ICACHE_RSP_PACKET_ID                ;
80  public    : SC_IN (Ticache_instruction_t)**  in_ICACHE_RSP_INSTRUCTION              ;//[nb_instruction]
81  public    : SC_IN (Ticache_error_t      ) *  in_ICACHE_RSP_ERROR                    ;
82
83    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84  public    : SC_OUT(Tcontrol_t         )   * out_PREDICT_VAL                         ;
85  public    : SC_IN (Tcontrol_t         )   *  in_PREDICT_ACK                         ;
86  public    : SC_OUT(Tgeneral_address_t )   * out_PREDICT_PC_PREVIOUS                 ;
87  public    : SC_OUT(Tgeneral_address_t )   * out_PREDICT_PC_CURRENT                  ;
88  public    : SC_OUT(Tcontrol_t         )   * out_PREDICT_PC_CURRENT_IS_DS_TAKE       ;
89  public    : SC_IN (Tgeneral_address_t )   *  in_PREDICT_PC_NEXT                     ;
90  public    : SC_IN (Tcontrol_t         )   *  in_PREDICT_PC_NEXT_IS_DS_TAKE          ;
91  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_INSTRUCTION_ENABLE          ; //[nb_instruction]
92  public    : SC_IN (Tinst_ifetch_ptr_t )   *  in_PREDICT_INST_IFETCH_PTR             ;
93  public    : SC_IN (Tbranch_state_t    )   *  in_PREDICT_BRANCH_STATE                ;
94  public    : SC_IN (Tprediction_ptr_t  )   *  in_PREDICT_BRANCH_UPDATE_PREDICTION_ID ;
95
96    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_VAL                           ;//[nb_instruction]
98  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_ACK                           ;//[nb_instruction]
99  public    : SC_OUT(Tinstruction_t     )  ** out_DECOD_INSTRUCTION                   ;//[nb_instruction]
100//public    : SC_OUT(Tcontext_t         )   * out_DECOD_CONTEXT_ID                    ;
101  public    : SC_OUT(Tgeneral_address_t )   * out_DECOD_ADDRESS                       ;
102  public    : SC_OUT(Tinst_ifetch_ptr_t )   * out_DECOD_INST_IFETCH_PTR               ;
103  public    : SC_OUT(Tbranch_state_t    )   * out_DECOD_BRANCH_STATE                  ;
104  public    : SC_OUT(Tprediction_ptr_t  )   * out_DECOD_BRANCH_UPDATE_PREDICTION_ID   ;
105  public    : SC_OUT(Texception_t       )   * out_DECOD_EXCEPTION                     ;
106
107    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
108  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_VAL                           ;
109  public    : SC_OUT(Tcontrol_t        )    * out_EVENT_ACK                           ;
110  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS                       ;
111   
112    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
113  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::address_management::Address_management * _component_address_management;
114  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::      Ifetch_queue       * _component_ifetch_queue;
115  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_unit_glue::  Ifetch_unit_Glue   * _component_ifetch_unit_glue;
116
117    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
118
119    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120#endif
121
122    // -----[ Methods ]---------------------------------------------------
123
124#ifdef SYSTEMC
125    SC_HAS_PROCESS (Ifetch_unit);
126#endif
127  public  :          Ifetch_unit             
128  (
129#ifdef SYSTEMC
130   sc_module_name                                name,
131#else                                         
132   std::string                                   name,
133#endif                                         
134#ifdef STATISTICS
135   morpheo::behavioural::Parameters_Statistics * param_statistics,
136#endif
137   Parameters                                  * param,
138   morpheo::behavioural::Tusage_t                usage=USE_ALL
139   );
140  public  :          ~Ifetch_unit             (void);
141                                               
142  private : void        allocation                (
143#ifdef STATISTICS
144                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
145#else
146                                                   void
147#endif
148                                                   );
149  private : void        deallocation              (void);
150                                               
151#ifdef SYSTEMC                                 
152# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
153  public  : void        transition                (void);
154# endif                                       
155#endif                                         
156
157#if VHDL                                       
158  public  : void        vhdl                      (void);
159#endif                                         
160
161#ifdef STATISTICS
162  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
163  public  : void        statistics_deallocation   (void);
164#endif
165#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
166  private : void        end_cycle                 (void);
167#endif
168  };
169
170}; // end namespace ifetch_unit
171}; // end namespace front_end
172}; // end namespace multi_front_end
173}; // end namespace core
174
175}; // end namespace behavioural
176}; // end namespace morpheo             
177
178#endif
Note: See TracBrowser for help on using the repository browser.