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

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

1) add constant method
2) test with systemc 2.2.0

  • Property svn:keywords set to Id
File size: 9.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 131 2009-07-08 18:40:08Z 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 (Tcontrol_t         )   *  in_PREDICT_BRANCH_IS_CURRENT           ;
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  public    : SC_IN (Tinst_ifetch_ptr_t )   *  in_PREDICT_INST_IFETCH_PTR             ;
89
90    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
91  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_VAL                           ;
92  public    : SC_OUT(Tcontrol_t        )    * out_EVENT_ACK                           ;
93  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS                       ;
94  public    : SC_IN (Tgeneral_address_t)    *  in_EVENT_ADDRESS_NEXT                  ;
95  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_ADDRESS_NEXT_VAL              ;
96  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_IS_DS_TAKE                    ;
97
98    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
99
100    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
101  private   : Tcontrol_t                      reg_PC_ACCESS_VAL                           ;
102  private   : Tgeneral_address_t              reg_PC_ACCESS                               ;
103  private   : Tcontrol_t                      reg_PC_ACCESS_IS_DS_TAKE                    ;
104  private   : Tcontrol_t                    * reg_PC_ACCESS_INSTRUCTION_ENABLE            ; //[nb_instruction]
105  private   : Tinst_ifetch_ptr_t              reg_PC_ACCESS_INST_IFETCH_PTR               ;
106  private   : Tbranch_state_t                 reg_PC_ACCESS_BRANCH_STATE                  ;
107  private   : Tprediction_ptr_t               reg_PC_ACCESS_BRANCH_UPDATE_PREDICTION_ID   ;
108
109  private   : Tcontrol_t                      reg_PC_CURRENT_VAL                          ;
110  private   : Tgeneral_address_t              reg_PC_CURRENT                              ;
111  private   : Tcontrol_t                      reg_PC_CURRENT_IS_DS_TAKE                   ;
112  private   : Tcontrol_t                    * reg_PC_CURRENT_INSTRUCTION_ENABLE           ; //[nb_instruction]
113  private   : Tinst_ifetch_ptr_t              reg_PC_CURRENT_INST_IFETCH_PTR              ;
114  private   : Tbranch_state_t                 reg_PC_CURRENT_BRANCH_STATE                 ;
115  private   : Tprediction_ptr_t               reg_PC_CURRENT_BRANCH_UPDATE_PREDICTION_ID  ;
116
117  private   : Tcontrol_t                      reg_PC_NEXT_VAL                             ;
118  private   : Tgeneral_address_t              reg_PC_NEXT                                 ;
119  private   : Tcontrol_t                      reg_PC_NEXT_IS_DS_TAKE                      ;
120  private   : Tcontrol_t                    * reg_PC_NEXT_INSTRUCTION_ENABLE              ; //[nb_instruction]
121  private   : Tinst_ifetch_ptr_t              reg_PC_NEXT_INST_IFETCH_PTR                 ;
122  private   : Tbranch_state_t                 reg_PC_NEXT_BRANCH_STATE                    ;
123  private   : Tprediction_ptr_t               reg_PC_NEXT_BRANCH_UPDATE_PREDICTION_ID     ;
124
125  private   : Tcontrol_t                      reg_PC_NEXT_NEXT_VAL                        ;
126  private   : Tgeneral_address_t              reg_PC_NEXT_NEXT                            ;
127  private   : Tcontrol_t                      reg_PC_NEXT_NEXT_IS_DS_TAKE                 ;
128//private   : Tcontrol_t                    * reg_PC_NEXT_NEXT_INSTRUCTION_ENABLE         ; //[nb_instruction]
129//private   : Tinst_ifetch_ptr_t              reg_PC_NEXT_NEXT_INST_IFETCH_PTR            ;
130//private   : Tbranch_state_t                 reg_PC_NEXT_NEXT_BRANCH_STATE               ;
131//private   : Tprediction_ptr_t               reg_PC_NEXT_NEXT_BRANCH_UPDATE_PREDICTION_ID;
132
133    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
134  private   : Tcontrol_t                      internal_ADDRESS_VAL;
135  private   : Tcontrol_t                      internal_PREDICT_VAL;
136  private   : Tcontrol_t                      internal_EVENT_ACK  ;
137#endif
138
139    // -----[ Methods ]---------------------------------------------------
140
141#ifdef SYSTEMC
142    SC_HAS_PROCESS (Address_management);
143#endif
144  public  :          Address_management             
145  (
146#ifdef SYSTEMC
147   sc_module_name                                name,
148#else                                         
149   std::string                                   name,
150#endif                                         
151#ifdef STATISTICS
152   morpheo::behavioural::Parameters_Statistics * param_statistics,
153#endif
154   Parameters                                  * param,
155   morpheo::behavioural::Tusage_t                usage
156   );
157  public  :          ~Address_management             (void);
158                                               
159  private : void        allocation                (
160#ifdef STATISTICS
161                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
162#else
163                                                   void
164#endif
165                                                   );
166  private : void        deallocation              (void);
167                                               
168#ifdef SYSTEMC                                 
169  public  : void        constant                  (void);
170  public  : void        transition                (void);
171  public  : void        genMoore                  (void);
172#endif                                         
173
174#if VHDL                                       
175  public  : void        vhdl                      (void);
176  private : void        vhdl_declaration          (Vhdl * & vhdl);
177  private : void        vhdl_body                 (Vhdl * & vhdl);
178#endif                                         
179
180#ifdef STATISTICS
181  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
182  public  : void        statistics_deallocation   (void);
183#endif
184#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
185  private : void        end_cycle                 (void);
186#endif
187  };
188
189}; // end namespace address_management
190}; // end namespace ifetch_unit
191}; // end namespace front_end
192}; // end namespace multi_front_end
193}; // end namespace core
194
195}; // end namespace behavioural
196}; // end namespace morpheo             
197
198#endif
Note: See TracBrowser for help on using the repository browser.