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

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

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

  • Property svn:keywords set to Id
File size: 8.4 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_branch_target_buffer_branch_target_buffer_glue_Branch_Target_Buffer_Glue_h
2#define morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_branch_target_buffer_branch_target_buffer_glue_Branch_Target_Buffer_Glue_h
3
4/*
5 * $Id: Branch_Target_Buffer_Glue.h 128 2009-06-26 08:43:23Z 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
19#include "Behavioural/include/Types.h"
20#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/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
30namespace morpheo {
31namespace behavioural {
32
33namespace core {
34namespace multi_front_end {
35namespace front_end {
36namespace prediction_unit {
37namespace branch_target_buffer {
38namespace branch_target_buffer_glue {
39
40
41  class Branch_Target_Buffer_Glue
42#if SYSTEMC
43    : public sc_module
44#endif
45  {
46    // -----[ fields ]----------------------------------------------------
47    // Parameters
48  protected : const std::string  _name;
49  protected : const Parameters * _param;
50  private   : const Tusage_t     _usage;
51
52#ifdef STATISTICS
53  public    : Stat                           * _stat;
54#endif
55
56  public    : Component                      * _component;
57  private   : Interfaces                     * _interfaces;
58
59#ifdef SYSTEMC
60    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62  public    : SC_CLOCK                      *  in_CLOCK        ;
63  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
64
65    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_VAL                    ; //[nb_inst_predict]
67  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_ACK                    ; //[nb_inst_predict]
68  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_HIT                    ; //[nb_inst_predict]
69  public    : SC_OUT(Tgeneral_data_t    )  ** out_PREDICT_ADDRESS_SRC            ; //[nb_inst_predict]
70  public    : SC_OUT(Tgeneral_data_t    )  ** out_PREDICT_ADDRESS_DEST           ; //[nb_inst_predict]
71  public    : SC_OUT(Tbranch_condition_t)  ** out_PREDICT_CONDITION              ; //[nb_inst_predict]
72  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_LAST_TAKE              ; //[nb_inst_predict]
73  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_IS_ACCURATE            ; //[nb_inst_predict]
74
75  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_REGISTER_VAL           ; //[nb_inst_predict]
76  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_REGISTER_ACK           ; //[nb_inst_predict]
77  public    : SC_IN (Tcontrol_t         ) ***  in_PREDICT_REGISTER_HIT           ; //[nb_inst_predict][associativity]
78  public    : SC_IN (Tgeneral_data_t    ) ***  in_PREDICT_REGISTER_ADDRESS_SRC   ; //[nb_inst_predict][associativity]
79  public    : SC_IN (Tgeneral_data_t    ) ***  in_PREDICT_REGISTER_ADDRESS_DEST  ; //[nb_inst_predict][associativity]
80  public    : SC_IN (Tbranch_condition_t) ***  in_PREDICT_REGISTER_CONDITION     ; //[nb_inst_predict][associativity]
81  public    : SC_IN (Tcontrol_t         ) ***  in_PREDICT_REGISTER_LAST_TAKE     ; //[nb_inst_predict][associativity]
82  public    : SC_IN (Tcontrol_t         ) ***  in_PREDICT_REGISTER_IS_ACCURATE   ; //[nb_inst_predict][associativity]
83
84  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_SORT_VAL               ; //[nb_inst_predict]
85  public    : SC_IN (Tptr_t             )  **  in_PREDICT_SORT_INDEX             ; //[nb_inst_predict]
86
87  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_VICTIM_VAL             ; //[nb_inst_predict]
88  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_VICTIM_ACK             ; //[nb_inst_predict]
89  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_VICTIM_HIT             ; //[nb_inst_predict]
90  public    : SC_OUT(Tgeneral_data_t    )  ** out_PREDICT_VICTIM_ADDRESS         ; //[nb_inst_predict]
91  public    : SC_OUT(Tptr_t             )  ** out_PREDICT_VICTIM_INDEX           ; //[nb_inst_predict]
92  public    : SC_IN (Tptr_t             )  **  in_PREDICT_VICTIM_VICTIM          ; //[nb_inst_predict]
93
94    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_VAL                      ; //[nb_inst_decod]
96  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_ACK                      ; //[nb_inst_decod]
97  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_ADDRESS_SRC              ; //[nb_inst_decod]
98
99  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_REGISTER_VAL             ; //[nb_inst_decod]
100  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_REGISTER_ACK             ; //[nb_inst_decod]
101
102  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_VICTIM_VAL               ; //[nb_inst_decod]
103  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_VICTIM_ACK               ; //[nb_inst_decod]
104  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_VICTIM_ADDRESS           ; //[nb_inst_decod]
105
106    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_VAL                     ; //[nb_inst_update]
108  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_ACK                     ; //[nb_inst_update]
109  public    : SC_IN (Tgeneral_data_t    )  **  in_UPDATE_ADDRESS_SRC             ; //[nb_inst_update]
110
111  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_REGISTER_VAL            ; //[nb_inst_update]
112  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_REGISTER_ACK            ; //[nb_inst_update]
113
114  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_VICTIM_VAL              ; //[nb_inst_update]
115  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_VICTIM_ACK              ; //[nb_inst_update]
116  public    : SC_OUT(Tgeneral_data_t    )  ** out_UPDATE_VICTIM_ADDRESS          ; //[nb_inst_update]
117
118    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
119
120    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
121
122    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123#endif
124
125    // -----[ Methods ]---------------------------------------------------
126
127#ifdef SYSTEMC
128    SC_HAS_PROCESS (Branch_Target_Buffer_Glue);
129#endif
130  public  :          Branch_Target_Buffer_Glue             
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  :          ~Branch_Target_Buffer_Glue             (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  public  : void        genMealy_predict          (void);
159  public  : void        genMealy_decod            (void);
160  public  : void        genMealy_update           (void);
161#endif                                         
162
163#if VHDL                                       
164  public  : void        vhdl                      (void);
165  private : void        vhdl_declaration          (Vhdl * & vhdl);
166  private : void        vhdl_body                 (Vhdl * & vhdl);
167#endif                                         
168
169#ifdef STATISTICS
170  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
171  public  : void        statistics_deallocation   (void);
172#endif
173#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
174  private : void        end_cycle                 (void);
175#endif
176  };
177
178}; // end namespace branch_target_buffer_glue
179}; // end namespace branch_target_buffer
180}; // end namespace prediction_unit
181}; // end namespace front_end
182}; // end namespace multi_front_end
183}; // end namespace core
184
185}; // end namespace behavioural
186}; // end namespace morpheo             
187
188#endif
Note: See TracBrowser for help on using the repository browser.