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

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

Almost complete design
with Test and test platform

  • 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 88 2008-12-10 18:31:39Z 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  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.