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

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 8.3 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_ifetch_queue_Ifetch_queue_h
2#define morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_ifetch_queue_Ifetch_queue_h
3
4/*
5 * $Id: Ifetch_queue.h 136 2009-10-20 18:52:15Z 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/Ifetch_unit/Ifetch_queue/include/Types.h"
20#include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/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 ifetch_unit {
37namespace ifetch_queue {
38
39  class Ifetch_queue
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  private   : counter_t                      * _sum_use_queue  ;
53  private   : counter_t                      * _sum_use_queue_wait_rsp;
54  private   : counter_t                      * _sum_use_queue_have_rsp;
55  private   : counter_t                      * _sum_use_queue_error_wait_rsp;
56
57  private   : counter_t                      * _sum_inst_enable;
58  private   : counter_t                      * _sum_transaction_address;
59
60  private   : counter_t                      * _average_occupation_bundle;
61#endif
62
63  public    : Component                      * _component;
64  private   : Interfaces                     * _interfaces;
65
66#ifdef SYSTEMC
67    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69  public    : SC_CLOCK                      *  in_CLOCK        ;
70  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
71
72    // ~~~~~[ Interface : "address" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73  public    : SC_IN (Tcontrol_t         )   *  in_ADDRESS_VAL                         ;
74  public    : SC_OUT(Tcontrol_t         )   * out_ADDRESS_ACK                         ;
75  public    : SC_OUT(Tifetch_queue_ptr_t)   * out_ADDRESS_IFETCH_QUEUE_ID             ;
76  public    : SC_IN (Tcontrol_t         )  **  in_ADDRESS_INSTRUCTION_ENABLE          ;//[nb_instruction]
77  public    : SC_IN (Tgeneral_address_t )   *  in_ADDRESS_INSTRUCTION_ADDRESS         ;
78  public    : SC_IN (Tinst_ifetch_ptr_t )   *  in_ADDRESS_INST_IFETCH_PTR             ;
79  public    : SC_IN (Tbranch_state_t    )   *  in_ADDRESS_BRANCH_STATE                ;
80  public    : SC_IN (Tprediction_ptr_t  )   *  in_ADDRESS_BRANCH_UPDATE_PREDICTION_ID ;
81
82    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_VAL                           ;//[nb_instruction]
84  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_ACK                           ;//[nb_instruction]
85  public    : SC_OUT(Tinstruction_t     )  ** out_DECOD_INSTRUCTION                   ;//[nb_instruction]
86  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_ADDRESS                       ;
87  public    : SC_OUT(Tbranch_state_t    )  ** out_DECOD_BRANCH_STATE                  ;
88  public    : SC_OUT(Tprediction_ptr_t  )  ** out_DECOD_BRANCH_UPDATE_PREDICTION_ID   ;
89  public    : SC_OUT(Texception_t       )  ** out_DECOD_EXCEPTION                     ;
90//public    : SC_OUT(Tgeneral_address_t )   * out_DECOD_ADDRESS                       ;
91//public    : SC_OUT(Tinst_ifetch_ptr_t )   * out_DECOD_INST_IFETCH_PTR               ;
92//public    : SC_OUT(Tbranch_state_t    )   * out_DECOD_BRANCH_STATE                  ;
93//public    : SC_OUT(Tprediction_ptr_t  )   * out_DECOD_BRANCH_UPDATE_PREDICTION_ID   ;
94//public    : SC_OUT(Texception_t       )   * out_DECOD_EXCEPTION                     ;
95
96    // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97  public    : SC_IN (Tcontrol_t        )    *  in_ICACHE_RSP_VAL                      ;
98  public    : SC_OUT(Tcontrol_t        )    * out_ICACHE_RSP_ACK                      ;
99  public    : SC_IN (Tpacket_t         )    *  in_ICACHE_RSP_PACKET_ID                ;
100  public    : SC_IN (Ticache_instruction_t)**  in_ICACHE_RSP_INSTRUCTION              ;//[nb_instruction]
101  public    : SC_IN (Ticache_error_t   )    *  in_ICACHE_RSP_ERROR                    ;
102   
103    // ~~~~~[ Interface "event_reset" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104  public    : SC_IN (Tcontrol_t        )    *  in_EVENT_RESET_VAL                     ;// val if : miss_speculation, exception, synchronization
105  public    : SC_OUT(Tcontrol_t        )    * out_EVENT_RESET_ACK                     ;
106   
107    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
108
109    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
110  private   : uint32_t                        reg_PTR_READ ;
111  private   : uint32_t                        reg_PTR_WRITE;
112  private   : ifetch_queue_entry_t         ** _queue; // ifetch_queue
113
114    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
115  private   : Tcontrol_t                      internal_ADDRESS_ACK    ;
116  private   : Tcontrol_t                    * internal_DECOD_VAL      ;//[nb_instruction]
117  private   : uint32_t                      * internal_DECOD_PTR      ;//[nb_instruction] Only queue_scheme == full_assoc
118  private   : uint32_t                      * internal_DECOD_SLOT     ;//[nb_instruction] Only queue_scheme == full_assoc
119  private   : Tcontrol_t                      internal_ICACHE_RSP_ACK ;
120  private   : Tcontrol_t                      internal_EVENT_RESET_ACK;
121
122   
123
124    // function pointer
125  public    : void (morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Ifetch_queue::*function_transition        ) (void);
126  public    : void (morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Ifetch_queue::*function_genMoore          ) (void);
127#endif
128
129    // -----[ Methods ]---------------------------------------------------
130
131#ifdef SYSTEMC
132    SC_HAS_PROCESS (Ifetch_queue);
133#endif
134  public  :          Ifetch_queue             
135  (
136#ifdef SYSTEMC
137   sc_module_name                                name,
138#else                                         
139   std::string                                   name,
140#endif                                         
141#ifdef STATISTICS
142   morpheo::behavioural::Parameters_Statistics * param_statistics,
143#endif
144   Parameters                                  * param,
145   morpheo::behavioural::Tusage_t                usage
146   );
147  public  :          ~Ifetch_queue             (void);
148                                               
149  private : void        allocation                (
150#ifdef STATISTICS
151                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
152#else
153                                                   void
154#endif
155                                                   );
156  private : void        deallocation              (void);
157                                               
158#ifdef SYSTEMC                                 
159  public  : void        constant                  (void);
160
161  public  : void        transition                     (void);
162  public  : void        genMoore                       (void);
163
164  public  : void        function_no_assoc_transition   (void);
165  public  : void        function_no_assoc_genMoore     (void);
166
167  public  : void        function_full_assoc_transition (void);
168  public  : void        function_full_assoc_genMoore   (void);
169#endif                                         
170
171#if VHDL                                       
172  public  : void        vhdl                      (void);
173  private : void        vhdl_declaration          (Vhdl * & vhdl);
174  private : void        vhdl_body                 (Vhdl * & vhdl);
175#endif                                         
176
177#ifdef STATISTICS
178  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
179  public  : void        statistics_deallocation   (void);
180#endif
181#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
182  private : void        end_cycle                 (void);
183#endif
184  };
185
186}; // end namespace ifetch_queue
187}; // end namespace ifetch_unit
188}; // end namespace front_end
189}; // end namespace multi_front_end
190}; // end namespace core
191
192}; // end namespace behavioural
193}; // end namespace morpheo             
194
195#endif
Note: See TracBrowser for help on using the repository browser.