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

Last change on this file since 136 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: 7.8 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 136 2009-10-20 18:52:15Z 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 (Tbranch_state_t    )   *  in_PREDICT_BRANCH_STATE                ;
93  public    : SC_IN (Tprediction_ptr_t  )   *  in_PREDICT_BRANCH_UPDATE_PREDICTION_ID ;
94  public    : SC_IN (Tinst_ifetch_ptr_t )   *  in_PREDICT_INST_IFETCH_PTR             ;
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(Tbranch_state_t    )  ** out_DECOD_BRANCH_STATE                  ;
103  public    : SC_OUT(Tprediction_ptr_t  )  ** out_DECOD_BRANCH_UPDATE_PREDICTION_ID   ;
104  public    : SC_OUT(Texception_t       )  ** out_DECOD_EXCEPTION                     ;
105
106    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_VAL                           ;
108  public    : SC_OUT(Tcontrol_t        )    * out_EVENT_ACK                           ;
109  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS                       ;
110  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS_NEXT                  ;
111  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_ADDRESS_NEXT_VAL              ;
112  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_IS_DS_TAKE                    ;
113   
114    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
115  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::address_management::Address_management * _component_address_management;
116  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::      Ifetch_queue       * _component_ifetch_queue;
117  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_unit_glue::  Ifetch_unit_Glue   * _component_ifetch_unit_glue;
118
119    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
120
121    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122#endif
123
124    // -----[ Methods ]---------------------------------------------------
125
126#ifdef SYSTEMC
127    SC_HAS_PROCESS (Ifetch_unit);
128#endif
129  public  :          Ifetch_unit             
130  (
131#ifdef SYSTEMC
132   sc_module_name                                name,
133#else                                         
134   std::string                                   name,
135#endif                                         
136#ifdef STATISTICS
137   morpheo::behavioural::Parameters_Statistics * param_statistics,
138#endif
139   Parameters                                  * param,
140   morpheo::behavioural::Tusage_t                usage
141   );
142  public  :          ~Ifetch_unit             (void);
143                                               
144  private : void        allocation                (
145#ifdef STATISTICS
146                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
147#else
148                                                   void
149#endif
150                                                   );
151  private : void        deallocation              (void);
152                                               
153#ifdef SYSTEMC                                 
154# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
155  public  : void        transition                (void);
156# endif                                       
157#endif                                         
158
159#if VHDL                                       
160  public  : void        vhdl                      (void);
161#endif                                         
162
163#ifdef STATISTICS
164  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
165  public  : void        statistics_deallocation   (void);
166#endif
167#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
168  private : void        end_cycle                 (void);
169#endif
170  };
171
172}; // end namespace ifetch_unit
173}; // end namespace front_end
174}; // end namespace multi_front_end
175}; // end namespace core
176
177}; // end namespace behavioural
178}; // end namespace morpheo             
179
180#endif
Note: See TracBrowser for help on using the repository browser.