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

Last change on this file since 146 was 146, checked in by rosiere, 13 years ago

1) Integration of RegisterFile_Internal_Banked in RegisterFile?
2) Erase "read_write" interface in RegisterFile_Monolithic component
3) Add smith predictor parameters in Load_store_pointer_unit.
4) Fix not statistics flags

  • 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 146 2011-02-01 20:57:54Z 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 {
37namespace core {
38namespace multi_front_end {
39namespace front_end {
40namespace prediction_unit {
41namespace branch_target_buffer {
42
43  class Branch_Target_Buffer
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 : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_VAL           ; //[nb_inst_predict]
69  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_ACK           ; //[nb_inst_predict]
70  public    : SC_IN (Tcontext_t         )  **  in_PREDICT_CONTEXT_ID    ; //[nb_inst_predict]
71  public    : SC_IN (Tgeneral_data_t    )  **  in_PREDICT_ADDRESS       ; //[nb_inst_predict]
72  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_HIT           ; //[nb_inst_predict]
73  public    : SC_OUT(Tgeneral_data_t    )  ** out_PREDICT_ADDRESS_SRC   ; //[nb_inst_predict]
74  public    : SC_OUT(Tgeneral_data_t    )  ** out_PREDICT_ADDRESS_DEST  ; //[nb_inst_predict]
75  public    : SC_OUT(Tbranch_condition_t)  ** out_PREDICT_CONDITION     ; //[nb_inst_predict]
76  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_LAST_TAKE     ; //[nb_inst_predict]
77  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_IS_ACCURATE   ; //[nb_inst_predict]
78
79    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
80  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_VAL             ; //[nb_inst_decod]
81  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_ACK             ; //[nb_inst_decod]
82//public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_HIT             ; //[nb_inst_decod]
83//public    : SC_IN (Tptr_t             )  **  in_DECOD_VICTIM          ; //[nb_inst_decod]
84  public    : SC_IN (Tcontext_t         )  **  in_DECOD_CONTEXT_ID      ; //[nb_inst_decod]
85  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_ADDRESS_SRC     ; //[nb_inst_decod]
86  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_ADDRESS_DEST    ; //[nb_inst_decod]
87  public    : SC_IN (Tbranch_condition_t)  **  in_DECOD_CONDITION       ; //[nb_inst_decod]
88  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_LAST_TAKE       ; //[nb_inst_decod]
89  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_PREDICTION ; //[nb_inst_decod]
90  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IS_ACCURATE     ; //[nb_inst_decod]
91
92    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
93  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_VAL            ; //[nb_inst_update]
94  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_ACK            ; //[nb_inst_update]
95//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_HIT            ; //[nb_inst_update]
96//public    : SC_IN (Tptr_t             )  **  in_UPDATE_VICTIM         ; //[nb_inst_update]
97  public    : SC_IN (Tcontext_t         )  **  in_UPDATE_CONTEXT_ID     ; //[nb_inst_update]
98  public    : SC_IN (Tgeneral_data_t    )  **  in_UPDATE_ADDRESS_SRC    ; //[nb_inst_update]
99  public    : SC_IN (Tgeneral_data_t    )  **  in_UPDATE_ADDRESS_DEST   ; //[nb_inst_update]
100  public    : SC_IN (Tbranch_condition_t)  **  in_UPDATE_CONDITION      ; //[nb_inst_update]
101  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_LAST_TAKE      ; //[nb_inst_update]
102  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_MISS_PREDICTION; //[nb_inst_update]
103
104    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
105  public : morpheo::behavioural::generic::sort::Sort    ** _component_sort;
106  public : morpheo::behavioural::generic::victim::Victim * _component_victim;
107  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;
108  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;
109
110    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
111
112    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
113#endif
114
115    // -----[ Methods ]---------------------------------------------------
116
117#ifdef SYSTEMC
118    SC_HAS_PROCESS (Branch_Target_Buffer);
119#endif
120  public  :          Branch_Target_Buffer             
121  (
122#ifdef SYSTEMC
123   sc_module_name                                name,
124#else                                         
125   std::string                                   name,
126#endif                                         
127#ifdef STATISTICS
128   morpheo::behavioural::Parameters_Statistics * param_statistics,
129#endif
130   Parameters                                  * param,
131   morpheo::behavioural::Tusage_t                usage
132   );
133  public  :          ~Branch_Target_Buffer             (void);
134                                               
135  private : void        allocation                (
136#ifdef STATISTICS
137                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
138#else
139                                                   void
140#endif
141                                                   );
142  private : void        deallocation              (void);
143                                               
144#ifdef SYSTEMC                                 
145# if defined(STATISTICS) or defined(VHDL_TESTBENCH)
146  public  : void        transition                (void);
147# endif                                       
148#endif                                         
149
150#if VHDL                                       
151  public  : void        vhdl                      (void);
152#endif                                         
153
154#ifdef STATISTICS
155  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
156  public  : void        statistics_deallocation   (void);
157#endif
158#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
159  private : void        end_cycle                 (void);
160#endif
161  };
162
163}; // end namespace branch_target_buffer
164}; // end namespace prediction_unit
165}; // end namespace front_end
166}; // end namespace multi_front_end
167}; // end namespace core
168
169}; // end namespace behavioural
170}; // end namespace morpheo             
171
172#endif
Note: See TracBrowser for help on using the repository browser.