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

Last change on this file since 82 was 82, checked in by rosiere, 16 years ago
  • support locale (now must "just" translate)
  • update all component with new test format
  • update all component with usage
  • New component : decod queue and prediction_unit
  • Property svn:keywords set to Id
File size: 7.6 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_branch_target_buffer_Branch_Target_Buffer_h
2#define morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_branch_target_buffer_Branch_Target_Buffer_h
3
4/*
5 * $Id: Branch_Target_Buffer.h 82 2008-05-01 16:48:45Z 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/Prediction_unit/Branch_Target_Buffer/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/Generic/Sort/include/Sort.h"
31#include "Behavioural/Generic/Victim/include/Victim.h"
32#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h"
33#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/include/Branch_Target_Buffer_Register.h"
34
35namespace morpheo {
36namespace behavioural {
37
38namespace core {
39namespace multi_front_end {
40namespace front_end {
41namespace prediction_unit {
42namespace branch_target_buffer {
43
44
45  class Branch_Target_Buffer
46#if SYSTEMC
47    : public sc_module
48#endif
49  {
50    // -----[ fields ]----------------------------------------------------
51    // Parameters
52  protected : const std::string  _name;
53  protected : const Parameters * _param;
54  private   : const Tusage_t     _usage;
55
56#ifdef STATISTICS
57  public    : Stat                           * _stat;
58#endif
59
60  public    : Component                      * _component;
61  private   : Interfaces                     * _interfaces;
62
63#ifdef SYSTEMC
64    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66  public    : SC_CLOCK                      *  in_CLOCK        ;
67  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
68
69    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_VAL           ; //[nb_inst_predict]
71  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_ACK           ; //[nb_inst_predict]
72  public    : SC_IN (Tcontext_t         )  **  in_PREDICT_CONTEXT_ID    ; //[nb_inst_predict]
73  public    : SC_IN (Tgeneral_data_t    )  **  in_PREDICT_ADDRESS       ; //[nb_inst_predict]
74  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_HIT           ; //[nb_inst_predict]
75  public    : SC_OUT(Tgeneral_data_t    )  ** out_PREDICT_ADDRESS_SRC   ; //[nb_inst_predict]
76  public    : SC_OUT(Tgeneral_data_t    )  ** out_PREDICT_ADDRESS_DEST  ; //[nb_inst_predict]
77  public    : SC_OUT(Tbranch_condition_t)  ** out_PREDICT_CONDITION     ; //[nb_inst_predict]
78  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_LAST_TAKE     ; //[nb_inst_predict]
79  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_IS_ACCURATE   ; //[nb_inst_predict]
80
81    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
82  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_VAL             ; //[nb_inst_decod]
83  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_ACK             ; //[nb_inst_decod]
84//public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_HIT             ; //[nb_inst_decod]
85//public    : SC_IN (Tptr_t             )  **  in_DECOD_VICTIM          ; //[nb_inst_decod]
86  public    : SC_IN (Tcontext_t         )  **  in_DECOD_CONTEXT_ID      ; //[nb_inst_decod]
87  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_ADDRESS_SRC     ; //[nb_inst_decod]
88  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_ADDRESS_DEST    ; //[nb_inst_decod]
89  public    : SC_IN (Tbranch_condition_t)  **  in_DECOD_CONDITION       ; //[nb_inst_decod]
90  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_LAST_TAKE       ; //[nb_inst_decod]
91  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_PREDICTION ; //[nb_inst_decod]
92  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IS_ACCURATE     ; //[nb_inst_decod]
93
94    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_VAL            ; //[nb_inst_update]
96  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_ACK            ; //[nb_inst_update]
97//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_HIT            ; //[nb_inst_update]
98//public    : SC_IN (Tptr_t             )  **  in_UPDATE_VICTIM         ; //[nb_inst_update]
99  public    : SC_IN (Tcontext_t         )  **  in_UPDATE_CONTEXT_ID     ; //[nb_inst_update]
100  public    : SC_IN (Tgeneral_data_t    )  **  in_UPDATE_ADDRESS_SRC    ; //[nb_inst_update]
101  public    : SC_IN (Tgeneral_data_t    )  **  in_UPDATE_ADDRESS_DEST   ; //[nb_inst_update]
102  public    : SC_IN (Tbranch_condition_t)  **  in_UPDATE_CONDITION      ; //[nb_inst_update]
103  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_LAST_TAKE      ; //[nb_inst_update]
104  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_MISS_PREDICTION; //[nb_inst_update]
105
106    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
107  public : morpheo::behavioural::generic::sort::Sort    ** _component_sort;
108  public : morpheo::behavioural::generic::victim::Victim * _component_victim;
109  public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_glue::Branch_Target_Buffer_Glue         * _component_branch_target_buffer_glue;
110  public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_register::Branch_Target_Buffer_Register * _component_branch_target_buffer_register;
111
112    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
113
114    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
115#endif
116
117    // -----[ Methods ]---------------------------------------------------
118
119#ifdef SYSTEMC
120    SC_HAS_PROCESS (Branch_Target_Buffer);
121#endif
122  public  :          Branch_Target_Buffer             
123  (
124#ifdef SYSTEMC
125   sc_module_name                                name,
126#else                                         
127   std::string                                   name,
128#endif                                         
129#ifdef STATISTICS
130   morpheo::behavioural::Parameters_Statistics * param_statistics,
131#endif
132   Parameters                                  * param,
133   morpheo::behavioural::Tusage_t                usage
134   );
135  public  :          ~Branch_Target_Buffer             (void);
136                                               
137  private : void        allocation                (
138#ifdef STATISTICS
139                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
140#else
141                                                   void
142#endif
143                                                   );
144  private : void        deallocation              (void);
145                                               
146#ifdef SYSTEMC                                 
147# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
148  public  : void        transition                (void);
149# endif                                       
150#endif                                         
151
152#if VHDL                                       
153  public  : void        vhdl                      (void);
154#endif                                         
155
156#ifdef STATISTICS
157  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
158  public  : void        statistics_deallocation   (void);
159#endif
160#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
161  private : void        end_cycle                 (void);
162#endif
163  };
164
165}; // end namespace branch_target_buffer
166}; // end namespace prediction_unit
167}; // end namespace front_end
168}; // end namespace multi_front_end
169}; // end namespace core
170
171}; // end namespace behavioural
172}; // end namespace morpheo             
173
174#endif
Note: See TracBrowser for help on using the repository browser.