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

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 8.5 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 88 2008-12-10 18:31:39Z 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  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS_NEXT                  ;
94  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_ADDRESS_NEXT_VAL              ;
95  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_IS_DS_TAKE                    ;
96
97    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
98
99    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
100  private   : Tcontrol_t                      reg_PC_CURRENT_VAL                          ;
101  private   : Tgeneral_address_t              reg_PC_CURRENT                              ;
102  private   : Tcontrol_t                      reg_PC_CURRENT_IS_DS_TAKE                   ;
103  private   : Tcontrol_t                    * reg_PC_CURRENT_INSTRUCTION_ENABLE           ; //[nb_instruction]
104  private   : Tinst_ifetch_ptr_t              reg_PC_CURRENT_INST_IFETCH_PTR              ;
105  private   : Tbranch_state_t                 reg_PC_CURRENT_BRANCH_STATE                 ;
106  private   : Tprediction_ptr_t               reg_PC_CURRENT_BRANCH_UPDATE_PREDICTION_ID  ;
107
108  private   : Tcontrol_t                      reg_PC_NEXT_VAL                             ;
109  private   : Tgeneral_address_t              reg_PC_NEXT                                 ;
110  private   : Tcontrol_t                      reg_PC_NEXT_IS_DS_TAKE                      ;
111  private   : Tcontrol_t                    * reg_PC_NEXT_INSTRUCTION_ENABLE              ; //[nb_instruction]
112  private   : Tinst_ifetch_ptr_t              reg_PC_NEXT_INST_IFETCH_PTR                 ;
113  private   : Tbranch_state_t                 reg_PC_NEXT_BRANCH_STATE                    ;
114  private   : Tprediction_ptr_t               reg_PC_NEXT_BRANCH_UPDATE_PREDICTION_ID     ;
115
116  private   : Tcontrol_t                      reg_PC_NEXT_NEXT_VAL                        ;
117  private   : Tgeneral_address_t              reg_PC_NEXT_NEXT                            ;
118  private   : Tcontrol_t                      reg_PC_NEXT_NEXT_IS_DS_TAKE                 ;
119//private   : Tcontrol_t                    * reg_PC_NEXT_NEXT_INSTRUCTION_ENABLE         ; //[nb_instruction]
120//private   : Tinst_ifetch_ptr_t              reg_PC_NEXT_NEXT_INST_IFETCH_PTR            ;
121//private   : Tbranch_state_t                 reg_PC_NEXT_NEXT_BRANCH_STATE               ;
122//private   : Tprediction_ptr_t               reg_PC_NEXT_NEXT_BRANCH_UPDATE_PREDICTION_ID;
123
124    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125  private   : Tcontrol_t                      internal_ADDRESS_VAL;
126  private   : Tcontrol_t                      internal_PREDICT_VAL;
127  private   : Tcontrol_t                      internal_EVENT_ACK  ;
128#endif
129
130    // -----[ Methods ]---------------------------------------------------
131
132#ifdef SYSTEMC
133    SC_HAS_PROCESS (Address_management);
134#endif
135  public  :          Address_management             
136  (
137#ifdef SYSTEMC
138   sc_module_name                                name,
139#else                                         
140   std::string                                   name,
141#endif                                         
142#ifdef STATISTICS
143   morpheo::behavioural::Parameters_Statistics * param_statistics,
144#endif
145   Parameters                                  * param,
146   morpheo::behavioural::Tusage_t                usage
147   );
148  public  :          ~Address_management             (void);
149                                               
150  private : void        allocation                (
151#ifdef STATISTICS
152                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
153#else
154                                                   void
155#endif
156                                                   );
157  private : void        deallocation              (void);
158                                               
159#ifdef SYSTEMC                                 
160  public  : void        transition                (void);
161  public  : void        genMoore                  (void);
162#endif                                         
163
164#if VHDL                                       
165  public  : void        vhdl                      (void);
166  private : void        vhdl_declaration          (Vhdl * & vhdl);
167  private : void        vhdl_body                 (Vhdl * & vhdl);
168#endif                                         
169
170#ifdef STATISTICS
171  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
172  public  : void        statistics_deallocation   (void);
173#endif
174#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
175  private : void        end_cycle                 (void);
176#endif
177  };
178
179}; // end namespace address_management
180}; // end namespace ifetch_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.