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

Last change on this file since 84 was 84, checked in by rosiere, 16 years ago

Change Address_manager :

  • before : pc_previous, pc_current, pc_next
  • now : pc_current, pc_next, pc_next_next.

pc_next is send at the prediction_unit, it return the instruction_enable and pc_next_next

  • Property svn:keywords set to Id
File size: 8.3 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_address_management_Address_management_h
2#define morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_address_management_Address_management_h
3
4/*
5 * $Id: Address_management.h 84 2008-05-13 18:04:50Z 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/Address_management/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 {
32namespace core {
33namespace multi_front_end {
34namespace front_end {
35namespace ifetch_unit {
36namespace address_management {
37
38
39  class Address_management
40#if SYSTEMC
41    : public sc_module
42#endif
43  {
44    // -----[ fields ]----------------------------------------------------
45    // Parameters
46  protected : const std::string  _name;
47  protected : const Parameters * _param;
48  private   : const Tusage_t     _usage;
49
50#ifdef STATISTICS
51  public    : Stat                           * _stat;
52  public    : counter_t                      * _stat_nb_transaction_address;
53  public    : counter_t                      * _stat_nb_transaction_predict;
54  public    : counter_t                      * _stat_nb_transaction_event  ;
55  public    : counter_t                      * _stat_sum_packet_size       ;
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 : "address" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68  public    : SC_OUT(Tcontrol_t         )   * out_ADDRESS_VAL                         ;
69  public    : SC_IN (Tcontrol_t         )   *  in_ADDRESS_ACK                         ; //icache_req_ack and ifetch_queue_ack
70  public    : SC_OUT(Tgeneral_address_t )   * out_ADDRESS_INSTRUCTION_ADDRESS         ;
71  public    : SC_OUT(Tcontrol_t         )  ** out_ADDRESS_INSTRUCTION_ENABLE          ; //[nb_instruction]
72  public    : SC_OUT(Tinst_ifetch_ptr_t )   * out_ADDRESS_INST_IFETCH_PTR             ;
73  public    : SC_OUT(Tbranch_state_t    )   * out_ADDRESS_BRANCH_STATE                ;
74  public    : SC_OUT(Tprediction_ptr_t  )   * out_ADDRESS_BRANCH_UPDATE_PREDICTION_ID ;
75
76    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
77  public    : SC_OUT(Tcontrol_t         )   * out_PREDICT_VAL                         ;
78  public    : SC_IN (Tcontrol_t         )   *  in_PREDICT_ACK                         ;
79  public    : SC_OUT(Tgeneral_address_t )   * out_PREDICT_PC_PREVIOUS                 ;
80  public    : SC_OUT(Tgeneral_address_t )   * out_PREDICT_PC_CURRENT                  ;
81  public    : SC_OUT(Tcontrol_t         )   * out_PREDICT_PC_CURRENT_IS_DS_TAKE       ;
82  public    : SC_IN (Tgeneral_address_t )   *  in_PREDICT_PC_NEXT                     ;
83  public    : SC_IN (Tcontrol_t         )   *  in_PREDICT_PC_NEXT_IS_DS_TAKE          ;
84  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_INSTRUCTION_ENABLE          ; //[nb_instruction]
85  public    : SC_IN (Tinst_ifetch_ptr_t )   *  in_PREDICT_INST_IFETCH_PTR             ;
86  public    : SC_IN (Tbranch_state_t    )   *  in_PREDICT_BRANCH_STATE                ;
87  public    : SC_IN (Tprediction_ptr_t  )   *  in_PREDICT_BRANCH_UPDATE_PREDICTION_ID ;
88
89    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_VAL                           ;
91  public    : SC_OUT(Tcontrol_t        )    * out_EVENT_ACK                           ;
92  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS                       ;
93
94    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
95
96    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
97  private   : Tcontrol_t                      reg_PC_CURRENT_VAL                          ;
98  private   : Tgeneral_address_t              reg_PC_CURRENT                              ;
99  private   : Tcontrol_t                      reg_PC_CURRENT_IS_DS_TAKE                   ;
100  private   : Tcontrol_t                    * reg_PC_CURRENT_INSTRUCTION_ENABLE           ; //[nb_instruction]
101  private   : Tinst_ifetch_ptr_t              reg_PC_CURRENT_INST_IFETCH_PTR              ;
102  private   : Tbranch_state_t                 reg_PC_CURRENT_BRANCH_STATE                 ;
103  private   : Tprediction_ptr_t               reg_PC_CURRENT_BRANCH_UPDATE_PREDICTION_ID  ;
104
105  private   : Tcontrol_t                      reg_PC_NEXT_VAL                             ;
106  private   : Tgeneral_address_t              reg_PC_NEXT                                 ;
107  private   : Tcontrol_t                      reg_PC_NEXT_IS_DS_TAKE                      ;
108  private   : Tcontrol_t                    * reg_PC_NEXT_INSTRUCTION_ENABLE              ; //[nb_instruction]
109  private   : Tinst_ifetch_ptr_t              reg_PC_NEXT_INST_IFETCH_PTR                 ;
110  private   : Tbranch_state_t                 reg_PC_NEXT_BRANCH_STATE                    ;
111  private   : Tprediction_ptr_t               reg_PC_NEXT_BRANCH_UPDATE_PREDICTION_ID     ;
112
113  private   : Tcontrol_t                      reg_PC_NEXT_NEXT_VAL                        ;
114  private   : Tgeneral_address_t              reg_PC_NEXT_NEXT                            ;
115  private   : Tcontrol_t                      reg_PC_NEXT_NEXT_IS_DS_TAKE                 ;
116//private   : Tcontrol_t                    * reg_PC_NEXT_NEXT_INSTRUCTION_ENABLE         ; //[nb_instruction]
117//private   : Tinst_ifetch_ptr_t              reg_PC_NEXT_NEXT_INST_IFETCH_PTR            ;
118//private   : Tbranch_state_t                 reg_PC_NEXT_NEXT_BRANCH_STATE               ;
119//private   : Tprediction_ptr_t               reg_PC_NEXT_NEXT_BRANCH_UPDATE_PREDICTION_ID;
120
121    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122  private   : Tcontrol_t                      internal_ADDRESS_VAL;
123  private   : Tcontrol_t                      internal_PREDICT_VAL;
124  private   : Tcontrol_t                      internal_EVENT_ACK  ;
125#endif
126
127    // -----[ Methods ]---------------------------------------------------
128
129#ifdef SYSTEMC
130    SC_HAS_PROCESS (Address_management);
131#endif
132  public  :          Address_management             
133  (
134#ifdef SYSTEMC
135   sc_module_name                                name,
136#else                                         
137   std::string                                   name,
138#endif                                         
139#ifdef STATISTICS
140   morpheo::behavioural::Parameters_Statistics * param_statistics,
141#endif
142   Parameters                                  * param,
143   morpheo::behavioural::Tusage_t                usage
144   );
145  public  :          ~Address_management             (void);
146                                               
147  private : void        allocation                (
148#ifdef STATISTICS
149                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
150#else
151                                                   void
152#endif
153                                                   );
154  private : void        deallocation              (void);
155                                               
156#ifdef SYSTEMC                                 
157  public  : void        transition                (void);
158  public  : void        genMoore                  (void);
159#endif                                         
160
161#if VHDL                                       
162  public  : void        vhdl                      (void);
163  private : void        vhdl_declaration          (Vhdl * & vhdl);
164  private : void        vhdl_body                 (Vhdl * & vhdl);
165#endif                                         
166
167#ifdef STATISTICS
168  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
169  public  : void        statistics_deallocation   (void);
170#endif
171#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
172  private : void        end_cycle                 (void);
173#endif
174  };
175
176}; // end namespace address_management
177}; // end namespace ifetch_unit
178}; // end namespace front_end
179}; // end namespace multi_front_end
180}; // end namespace core
181
182}; // end namespace behavioural
183}; // end namespace morpheo             
184
185#endif
Note: See TracBrowser for help on using the repository browser.