source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h @ 123

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 13.4 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_context_state_Context_State_h
2#define morpheo_behavioural_core_multi_front_end_front_end_context_state_Context_State_h
3
4/*
5 * $Id: Context_State.h 123 2009-06-08 20:43:30Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#ifdef SYSTEMC
12#include "systemc.h"
13#endif
14
15
16#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Parameters.h"
17#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Types.h"
18#ifdef STATISTICS
19#include "Behavioural/include/Stat.h"
20#endif
21#include "Behavioural/include/Component.h"
22#ifdef VHDL
23#include "Behavioural/include/Vhdl.h"
24#endif
25#include "Behavioural/include/Usage.h"
26
27#include "Common/include/ToString.h"
28#include "Common/include/Debug.h"
29
30#include <iostream>
31
32namespace morpheo {
33namespace behavioural {
34
35namespace core {
36namespace multi_front_end {
37namespace front_end {
38namespace context_state {
39
40
41  class Context_State
42#if SYSTEMC
43    : public sc_module
44#endif
45  {
46    // -----[ fields ]----------------------------------------------------
47    // Parameters
48  protected : const std::string  _name;
49  protected : const Parameters * _param;
50  private   : const Tusage_t     _usage;
51
52#ifdef STATISTICS
53  public    : Stat                           * _stat;
54  private   : counter_t                     ** _stat_nb_cycle_state_ok                     ; //[nb_context]
55  private   : counter_t                     ** _stat_nb_cycle_state_ko_excep               ; //[nb_context]
56  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_branch         ; //[nb_context]
57  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_load           ; //[nb_context]
58  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_load_and_branch; //[nb_context]
59  private   : counter_t                     ** _stat_nb_cycle_state_ko_msync               ; //[nb_context]
60  private   : counter_t                     ** _stat_nb_cycle_state_ko_psync               ; //[nb_context]
61  private   : counter_t                     ** _stat_nb_cycle_state_ko_csync               ; //[nb_context]
62  private   : counter_t                     ** _stat_nb_cycle_state_ko_spr                 ; //[nb_context]
63#endif
64
65  public    : Component                      * _component;
66  private   : Interfaces                     * _interfaces;
67
68#ifdef SYSTEMC
69    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71  public    : SC_CLOCK                      *  in_CLOCK        ;
72  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
73
74    // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
75  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_VAL                   ;//[nb_context]
76  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_ACK                   ;//[nb_context]
77//public    : SC_IN (Tcontext_t         )  **  in_BRANCH_EVENT_CONTEXT_ID            ;//[nb_context]
78  public    : SC_IN (Tdepth_t           )  **  in_BRANCH_EVENT_DEPTH                 ;//[nb_context]
79  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_MISS_PREDICTION       ;//[nb_context]// always
80  public    : SC_IN (Taddress_t         )  **  in_BRANCH_EVENT_ADDRESS_SRC           ;//[nb_context]
81  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_ADDRESS_DEST_VAL      ;//[nb_context]// take or not
82  public    : SC_IN (Taddress_t         )  **  in_BRANCH_EVENT_ADDRESS_DEST          ;//[nb_context]
83  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_CAN_CONTINUE          ;//[nb_context]
84
85    // ~~~~~[ Interface : "decod_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
86  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_EVENT_VAL                    ;//[nb_decod_unit]
87  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_EVENT_ACK                    ;//[nb_decod_unit]
88  public    : SC_IN (Tcontext_t         )  **  in_DECOD_EVENT_CONTEXT_ID             ;//[nb_decod_unit]
89  public    : SC_IN (Tdepth_t           )  **  in_DECOD_EVENT_DEPTH                  ;//[nb_decod_unit]
90  public    : SC_IN (Tevent_type_t      )  **  in_DECOD_EVENT_TYPE                   ;//[nb_decod_unit]
91  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_EVENT_IS_DELAY_SLOT          ;//[nb_decod_unit]
92  public    : SC_IN (Taddress_t         )  **  in_DECOD_EVENT_ADDRESS                ;//[nb_decod_unit]
93  public    : SC_IN (Taddress_t         )  **  in_DECOD_EVENT_ADDRESS_EPCR           ;//[nb_decod_unit]
94
95    // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
96  public    : SC_IN (Tcontrol_t         )   *  in_COMMIT_EVENT_VAL                   ;
97  public    : SC_OUT(Tcontrol_t         )   * out_COMMIT_EVENT_ACK                   ;
98  public    : SC_IN (Tcontext_t         )   *  in_COMMIT_EVENT_CONTEXT_ID            ;
99  public    : SC_IN (Tdepth_t           )   *  in_COMMIT_EVENT_DEPTH                 ;
100  public    : SC_IN (Tevent_type_t      )   *  in_COMMIT_EVENT_TYPE                  ;
101  public    : SC_IN (Tcontrol_t         )   *  in_COMMIT_EVENT_IS_DELAY_SLOT         ;
102  public    : SC_IN (Taddress_t         )   *  in_COMMIT_EVENT_ADDRESS               ;
103  public    : SC_IN (Tcontrol_t         )   *  in_COMMIT_EVENT_ADDRESS_EPCR_VAL      ;
104  public    : SC_IN (Taddress_t         )   *  in_COMMIT_EVENT_ADDRESS_EPCR          ;
105  public    : SC_IN (Tcontrol_t         )   *  in_COMMIT_EVENT_ADDRESS_EEAR_VAL      ;
106  public    : SC_IN (Tgeneral_data_t    )   *  in_COMMIT_EVENT_ADDRESS_EEAR          ;
107
108    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
109  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_COMPLETE_VAL                ;//[nb_inst_branch_complete]
110  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_COMPLETE_ACK                ;//[nb_inst_branch_complete]
111  public    : SC_IN (Tcontext_t         )  **  in_BRANCH_COMPLETE_CONTEXT_ID         ;//[nb_inst_branch_complete]
112  public    : SC_IN (Tdepth_t           )  **  in_BRANCH_COMPLETE_DEPTH              ;//[nb_inst_branch_complete]
113  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_COMPLETE_MISS_PREDICTION    ;//[nb_inst_branch_complete]
114//public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_COMPLETE_TAKE               ;//[nb_inst_branch_complete]
115//public    : SC_IN (Taddress_t         )  **  in_BRANCH_COMPLETE_ADDRESS_SRC        ;//[nb_inst_branch_complete]
116//public    : SC_IN (Taddress_t         )  **  in_BRANCH_COMPLETE_ADDRESS_DEST       ;//[nb_inst_branch_complete]
117
118    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119  public    : SC_IN (Tcounter_t         )  **  in_NB_INST_DECOD_ALL                  ;//[nb_context]
120  public    : SC_IN (Tcounter_t         )  **  in_NB_INST_COMMIT_ALL                 ;//[nb_context]
121  public    : SC_IN (Tcounter_t         )  **  in_NB_INST_COMMIT_MEM                 ;//[nb_context]
122
123    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
124  public    : SC_OUT(Tcontrol_t         )  ** out_EVENT_VAL                          ;//[nb_context]
125  public    : SC_IN (Tcontrol_t         )  **  in_EVENT_ACK                          ;//[nb_context]
126  public    : SC_OUT(Taddress_t         )  ** out_EVENT_ADDRESS                      ;//[nb_context]
127  public    : SC_OUT(Taddress_t         )  ** out_EVENT_ADDRESS_NEXT                 ;//[nb_context]
128  public    : SC_OUT(Tcontrol_t         )  ** out_EVENT_ADDRESS_NEXT_VAL             ;//[nb_context]
129  public    : SC_OUT(Tcontrol_t         )  ** out_EVENT_IS_DS_TAKE                   ;//[nb_context]
130  public    : SC_OUT(Tevent_type_t      )  ** out_EVENT_TYPE                         ;//[nb_context]
131  public    : SC_OUT(Tdepth_t           )  ** out_EVENT_DEPTH                        ;//[nb_context]
132  public    : SC_OUT(Tcontrol_t         )  ** out_EVENT_FLUSH_ONLY                   ;//[nb_context]
133
134    // ~~~~~[ Interface "spr_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
135  public    : SC_OUT(Tcontrol_t         )  ** out_SPR_EVENT_VAL                      ;//[nb_context]
136  public    : SC_IN (Tcontrol_t         )  **  in_SPR_EVENT_ACK                      ;//[nb_context]
137  public    : SC_OUT(Taddress_t         )  ** out_SPR_EVENT_EPCR                     ;//[nb_context]
138  public    : SC_OUT(Taddress_t         )  ** out_SPR_EVENT_EEAR                     ;//[nb_context]
139  public    : SC_OUT(Tcontrol_t         )  ** out_SPR_EVENT_EEAR_WEN                 ;//[nb_context]
140  public    : SC_OUT(Tcontrol_t         )  ** out_SPR_EVENT_SR_DSX                   ;//[nb_context]
141  public    : SC_OUT(Tcontrol_t         )  ** out_SPR_EVENT_SR_TO_ESR                ;//[nb_context]
142
143    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
144  public    : SC_OUT(Tcontrol_t         )  ** out_CONTEXT_DECOD_ENABLE               ;//[nb_context]
145  public    : SC_OUT(Tcontrol_t         )  ** out_CONTEXT_EVENT                      ;//[nb_context]
146
147    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
148  public    : SC_IN (Tdepth_t           )  **  in_DEPTH_MIN                          ;//[nb_context]
149
150    // ~~~~~[ Interface : "spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
151  public    : SC_IN (Tcontrol_t         )  **  in_SPR_SR_IEE                         ;//[nb_context] - Interrupt Exception Enabled
152  public    : SC_IN (Tcontrol_t         )  **  in_SPR_SR_EPH                         ;//[nb_context] - Exception Prefix High
153
154    // ~~~~~[ Interface : "interrupt" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
155  public    : SC_IN (Tcontrol_t         )  **  in_INTERRUPT_ENABLE                   ;//[nb_context] - Interrupt Exception
156                                                                                     
157    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
158
159    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
160  private   : context_state_t               * reg_STATE                              ;//[nb_context]
161  private   : Taddress_t                    * reg_EVENT_ADDRESS                      ;//[nb_context]
162  private   : Taddress_t                    * reg_EVENT_ADDRESS_EPCR                 ;//[nb_context]
163  private   : Tcontrol_t                    * reg_EVENT_ADDRESS_EPCR_VAL             ;//[nb_context]
164  private   : Taddress_t                    * reg_EVENT_ADDRESS_EEAR                 ;//[nb_context]
165  private   : Tcontrol_t                    * reg_EVENT_ADDRESS_EEAR_VAL             ;//[nb_context]
166  private   : Tcontrol_t                    * reg_EVENT_IS_DELAY_SLOT                ;//[nb_context]
167  private   : Tcontrol_t                    * reg_EVENT_IS_DS_TAKE                   ;//[nb_context]
168  private   : Tdepth_t                      * reg_EVENT_DEPTH                        ;//[nb_context]
169  private   : Tcontrol_t                    * reg_EVENT_FLUSH_ONLY                   ;//[nb_context]
170  private   : Tcontrol_t                    * reg_INTERRUPT_ENABLE                   ;//[nb_context]
171
172    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
173  private   : Tcontrol_t                    * internal_BRANCH_EVENT_ACK              ;//[nb_context]
174  private   : Tcontrol_t                    * internal_DECOD_EVENT_ACK               ;//[nb_decod_unit]
175  private   : Tcontrol_t                      internal_COMMIT_EVENT_ACK              ;
176  private   : Tcontrol_t                    * internal_BRANCH_COMPLETE_ACK           ;//[nb_inst_branch_complete]
177  private   : Tcontrol_t                    * internal_EVENT_VAL                     ;//[nb_context]
178  private   : Tcontrol_t                    * internal_SPR_EVENT_VAL                 ;//[nb_context]
179#endif
180
181    // -----[ Methods ]---------------------------------------------------
182
183#ifdef SYSTEMC
184    SC_HAS_PROCESS (Context_State);
185#endif
186  public  :          Context_State             
187  (
188#ifdef SYSTEMC
189   sc_module_name                                name,
190#else                                         
191   std::string                                   name,
192#endif                                         
193#ifdef STATISTICS
194   morpheo::behavioural::Parameters_Statistics * param_statistics,
195#endif
196   Parameters                                  * param,
197   morpheo::behavioural::Tusage_t                usage
198   );
199  public  :          ~Context_State             (void);
200                                               
201  private : void        allocation                (
202#ifdef STATISTICS
203                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
204#else
205                                                   void
206#endif
207                                                   );
208  private : void        deallocation              (void);
209                                               
210#ifdef SYSTEMC                                 
211  public  : void        transition                (void);
212  public  : void        genMoore                  (void);
213  public  : void        genMealy_decod_event      (void);
214  public  : void        genMealy_context_event    (void);
215#endif                                         
216
217#if VHDL                                       
218  public  : void        vhdl                      (void);
219  private : void        vhdl_declaration          (Vhdl * & vhdl);
220  private : void        vhdl_body                 (Vhdl * & vhdl);
221#endif                                         
222
223#ifdef STATISTICS
224  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
225  public  : void        statistics_deallocation   (void);
226#endif
227#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
228  private : void        end_cycle                 (void);
229#endif
230  };
231
232}; // end namespace context_state
233}; // end namespace front_end
234}; // end namespace multi_front_end
235}; // end namespace core
236
237}; // end namespace behavioural
238}; // end namespace morpheo             
239
240#endif
Note: See TracBrowser for help on using the repository browser.