source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/include/Ifetch_unit.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: 7.9 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 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 <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(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  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS_NEXT                  ;
112  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_ADDRESS_NEXT_VAL              ;
113  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_IS_DS_TAKE                    ;
114   
115    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
116  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::address_management::Address_management * _component_address_management;
117  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::      Ifetch_queue       * _component_ifetch_queue;
118  private   : morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_unit_glue::  Ifetch_unit_Glue   * _component_ifetch_unit_glue;
119
120    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
121
122    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123#endif
124
125    // -----[ Methods ]---------------------------------------------------
126
127#ifdef SYSTEMC
128    SC_HAS_PROCESS (Ifetch_unit);
129#endif
130  public  :          Ifetch_unit             
131  (
132#ifdef SYSTEMC
133   sc_module_name                                name,
134#else                                         
135   std::string                                   name,
136#endif                                         
137#ifdef STATISTICS
138   morpheo::behavioural::Parameters_Statistics * param_statistics,
139#endif
140   Parameters                                  * param,
141   morpheo::behavioural::Tusage_t                usage
142   );
143  public  :          ~Ifetch_unit             (void);
144                                               
145  private : void        allocation                (
146#ifdef STATISTICS
147                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
148#else
149                                                   void
150#endif
151                                                   );
152  private : void        deallocation              (void);
153                                               
154#ifdef SYSTEMC                                 
155# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
156  public  : void        transition                (void);
157# endif                                       
158#endif                                         
159
160#if VHDL                                       
161  public  : void        vhdl                      (void);
162#endif                                         
163
164#ifdef STATISTICS
165  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
166  public  : void        statistics_deallocation   (void);
167#endif
168#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
169  private : void        end_cycle                 (void);
170#endif
171  };
172
173}; // end namespace ifetch_unit
174}; // end namespace front_end
175}; // end namespace multi_front_end
176}; // end namespace core
177
178}; // end namespace behavioural
179}; // end namespace morpheo             
180
181#endif
Note: See TracBrowser for help on using the repository browser.