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

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

1) Add soc test
2) fix bug (Pc management, Decod and execute, Update prediction ...)

  • Property svn:keywords set to Id
File size: 9.2 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 101 2009-01-15 17:19: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        transition                (void);
170  public  : void        genMoore                  (void);
171#endif                                         
172
173#if VHDL                                       
174  public  : void        vhdl                      (void);
175  private : void        vhdl_declaration          (Vhdl * & vhdl);
176  private : void        vhdl_body                 (Vhdl * & vhdl);
177#endif                                         
178
179#ifdef STATISTICS
180  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
181  public  : void        statistics_deallocation   (void);
182#endif
183#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
184  private : void        end_cycle                 (void);
185#endif
186  };
187
188}; // end namespace address_management
189}; // end namespace ifetch_unit
190}; // end namespace front_end
191}; // end namespace multi_front_end
192}; // end namespace core
193
194}; // end namespace behavioural
195}; // end namespace morpheo             
196
197#endif
Note: See TracBrowser for help on using the repository browser.