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

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

1) Bug fix (Operation, Instruction)
2) Modif Return Address Stack
3) Add Soft Test
4) Add Soc Test

  • Property svn:keywords set to Id
File size: 7.7 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_return_address_stack_Return_Address_Stack_h
2#define morpheo_behavioural_core_multi_front_end_front_end_prediction_unit_return_address_stack_Return_Address_Stack_h
3
4/*
5 * $Id: Return_Address_Stack.h 100 2009-01-08 13:06:27Z 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/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Types.h"
20#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/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 return_address_stack {
38
39
40  class Return_Address_Stack
41#if SYSTEMC
42    : public sc_module
43#endif
44  {
45    // -----[ fields ]----------------------------------------------------
46    // Parameters
47  protected : const std::string  _name;
48  protected : const Parameters * _param;
49  private   : const Tusage_t     _usage;
50
51#ifdef STATISTICS
52  public    : Stat                           * _stat;
53#endif
54
55  public    : Component                      * _component;
56  private   : Interfaces                     * _interfaces;
57
58#ifdef SYSTEMC
59    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61  public    : SC_CLOCK                      *  in_CLOCK        ;
62  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
63             
64    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_VAL           ; //[nb_inst_predict]
66  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_ACK           ; //[nb_inst_predict]
67  public    : SC_IN (Tcontext_t)           **  in_PREDICT_CONTEXT_ID    ; //[nb_inst_predict]
68  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_HIT           ; //[nb_inst_predict]
69  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_PUSH          ; //[nb_inst_predict] 1 = push, else pop
70  public    : SC_IN (Taddress_t)           **  in_PREDICT_ADDRESS_PUSH  ; //[nb_inst_predict]
71  public    : SC_OUT(Taddress_t)           ** out_PREDICT_ADDRESS_POP   ; //[nb_inst_predict] if pop:addr_top else addr_old
72  public    : SC_OUT(Tptr_t    )           ** out_PREDICT_INDEX         ; //[nb_inst_predict]
73
74    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
75  public    : SC_IN (Tcontrol_t)           **  in_DECOD_VAL             ; //[nb_inst_decod]
76  public    : SC_OUT(Tcontrol_t)           ** out_DECOD_ACK             ; //[nb_inst_decod]
77  public    : SC_IN (Tcontext_t)           **  in_DECOD_CONTEXT_ID      ; //[nb_inst_decod]
78  public    : SC_OUT(Tcontrol_t)           ** out_DECOD_HIT             ; //[nb_inst_decod]
79  public    : SC_IN (Tcontrol_t)           **  in_DECOD_PUSH            ; //[nb_inst_decod]   1 = push, else pop
80  public    : SC_IN (Taddress_t)           **  in_DECOD_ADDRESS_PUSH    ; //[nb_inst_decod]
81  public    : SC_OUT(Taddress_t)           ** out_DECOD_ADDRESS_POP     ; //[nb_inst_decod]   if pop:addr_top else addr_old
82  public    : SC_OUT(Tptr_t    )           ** out_DECOD_INDEX           ; //[nb_inst_decod]
83  public    : SC_IN (Tcontrol_t)           **  in_DECOD_MISS_PREDICTION ; //[nb_inst_decod]   predict at stage 1 is a miss
84
85    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
86  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_VAL              ; //[nb_inst_update]
87  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_ACK              ; //[nb_inst_update]
88  public    : SC_IN (Tcontext_t)           **  in_UPDATE_CONTEXT_ID       ; //[nb_inst_update]
89  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_PUSH             ; //[nb_inst_update]  1 = push, else pop
90  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_FLUSH            ; //[nb_inst_update]
91  public    : SC_IN (Taddress_t)           **  in_UPDATE_ADDRESS          ; //[nb_inst_update]
92  public    : SC_IN (Tptr_t    )           **  in_UPDATE_INDEX            ; //[nb_inst_update]
93  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_MISS_PREDICTION  ; //[nb_inst_update]
94  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_PREDICTION_IFETCH; //[nb_inst_update] // prediction only ifetch
95
96    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97
98    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
99  private   : ras_entry_t                  ** reg_stack         ; //[nb_context][size_queue]
100  private   : Tptr_t                        * reg_TOP           ; //[nb_context]
101//private   : Tptr_t                        * reg_BOTTOM        ; //[nb_context]
102  private   : Tptr_t                        * reg_NB_ELT        ; //[nb_context]
103  private   : Tptr_t                        * reg_PREDICT_TOP   ; //[nb_context]
104//private   : Tptr_t                        * reg_PREDICT_BOTTOM; //[nb_context]
105  private   : Tptr_t                        * reg_PREDICT_NB_ELT; //[nb_context]
106
107    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
108  public    : Tcontrol_t                    * internal_PREDICT_ACK; //[nb_inst_predict]
109  public    : Tcontrol_t                    * internal_PREDICT_HIT; //[nb_inst_predict]
110  public    : Tcontrol_t                    * internal_DECOD_ACK  ; //[nb_inst_decod  ]
111  public    : Tcontrol_t                    * internal_DECOD_HIT  ; //[nb_inst_decod  ]
112  public    : Tcontrol_t                    * internal_UPDATE_ACK ; //[nb_inst_update ]
113#endif
114
115    // -----[ Methods ]---------------------------------------------------
116
117#ifdef SYSTEMC
118    SC_HAS_PROCESS (Return_Address_Stack);
119#endif
120  public  :          Return_Address_Stack             
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  :          ~Return_Address_Stack             (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  public  : void        transition                (void);
146  public  : void        genMealy_predict          (void);
147  public  : void        genMealy_decod            (void);
148//   public  : void        genMealy_update           (void);
149#endif                                         
150
151#if VHDL                                       
152  public  : void        vhdl                      (void);
153  private : void        vhdl_declaration          (Vhdl * & vhdl);
154  private : void        vhdl_body                 (Vhdl * & vhdl);
155#endif                                         
156
157#ifdef STATISTICS
158  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
159  public  : void        statistics_deallocation   (void);
160#endif
161#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
162  private : void        end_cycle                 (void);
163#endif
164  };
165
166}; // end namespace return_address_stack
167}; // end namespace prediction_unit
168}; // end namespace front_end
169}; // end namespace multi_front_end
170}; // end namespace core
171
172}; // end namespace behavioural
173}; // end namespace morpheo             
174
175#endif
Note: See TracBrowser for help on using the repository browser.