source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.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: 8.9 KB
Line 
1 #ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_register_translation_unit_stat_list_unit_Stat_List_unit_h
2#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_register_translation_unit_stat_list_unit_Stat_List_unit_h
3
4/*
5 * $Id: Stat_List_unit.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#include <iostream>
16#include "Common/include/ToString.h"
17#include "Common/include/Debug.h"
18#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Types.h"
19#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Parameters.h"
20#ifdef STATISTICS
21#include "Behavioural/include/Stat.h"
22#endif
23#include "Behavioural/include/Component.h"
24#ifdef VHDL
25#include "Behavioural/include/Vhdl.h"
26#endif
27#include "Behavioural/include/Usage.h"
28
29namespace morpheo {
30namespace behavioural {
31
32namespace core {
33namespace multi_ooo_engine {
34namespace ooo_engine {
35namespace rename_unit {
36namespace register_translation_unit {
37namespace stat_list_unit {
38
39
40  class Stat_List_unit
41#if SYSTEMC
42    : public sc_module
43#endif
44  {
45    // -----[ fields ]----------------------------------------------------
46    // Parameters
47  protected : const std::string  _name;
48  protected : const Parameters * _param;
49  private   : const Tusage_t     _usage;
50
51#ifdef STATISTICS
52  public    : Stat                           * _stat;
53#endif
54
55  public    : Component                      * _component;
56  private   : Interfaces                     * _interfaces;
57
58#ifdef SYSTEMC
59    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60    // Interface
61  public    : SC_CLOCK                      *  in_CLOCK ;
62  public    : SC_IN (Tcontrol_t)            *  in_NRESET;
63
64    // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_VAL               ;//[nb_inst_insert]
66  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_ACK               ;//[nb_inst_insert]
67  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_READ_RA           ;//[nb_inst_insert]
68  public    : SC_IN (Tgeneral_address_t)   **  in_INSERT_NUM_REG_RA_PHY    ;//[nb_inst_insert]
69  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_READ_RB           ;//[nb_inst_insert]
70  public    : SC_IN (Tgeneral_address_t)   **  in_INSERT_NUM_REG_RB_PHY    ;//[nb_inst_insert]
71  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_READ_RC           ;//[nb_inst_insert]
72  public    : SC_IN (Tspecial_address_t)   **  in_INSERT_NUM_REG_RC_PHY    ;//[nb_inst_insert]
73  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_WRITE_RD          ;//[nb_inst_insert]
74  public    : SC_IN (Tgeneral_address_t)   **  in_INSERT_NUM_REG_RD_PHY_OLD;//[nb_inst_insert]
75  public    : SC_IN (Tgeneral_address_t)   **  in_INSERT_NUM_REG_RD_PHY_NEW;//[nb_inst_insert]
76  public    : SC_IN (Tcontrol_t        )   **  in_INSERT_WRITE_RE          ;//[nb_inst_insert]
77  public    : SC_IN (Tspecial_address_t)   **  in_INSERT_NUM_REG_RE_PHY_OLD;//[nb_inst_insert]
78  public    : SC_IN (Tspecial_address_t)   **  in_INSERT_NUM_REG_RE_PHY_NEW;//[nb_inst_insert]
79 
80    // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_VAL               ;//[nb_inst_retire]
82  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_ACK               ;//[nb_inst_retire]
83  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE           ;//[nb_inst_retire]
84//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RA           ;//[nb_inst_retire]
85//public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RA_PHY    ;//[nb_inst_retire]
86//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RB           ;//[nb_inst_retire]
87//public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RB_PHY    ;//[nb_inst_retire]
88//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RC           ;//[nb_inst_retire]
89//public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RC_PHY    ;//[nb_inst_retire]
90  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_WRITE_RD          ;//[nb_inst_retire]
91  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE_RD_PHY_OLD;//[nb_inst_retire]
92  public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RD_PHY_OLD;//[nb_inst_retire]
93  public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RD_PHY_NEW;//[nb_inst_retire]
94  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_WRITE_RE          ;//[nb_inst_retire]
95  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE_RE_PHY_OLD;//[nb_inst_retire]
96  public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RE_PHY_OLD;//[nb_inst_retire]
97  public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RE_PHY_NEW;//[nb_inst_retire]
98
99    // ~~~~~[ interface : "push_gpr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100  public    : SC_OUT(Tcontrol_t)           ** out_PUSH_GPR_VAL             ;//[nb_reg_free]
101  public    : SC_IN (Tcontrol_t)           **  in_PUSH_GPR_ACK             ;//[nb_reg_free]
102  public    : SC_OUT(Tgeneral_address_t)   ** out_PUSH_GPR_NUM_REG         ;//[nb_reg_free]
103
104    // ~~~~~[ interface : "push_spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105  public    : SC_OUT(Tcontrol_t)           ** out_PUSH_SPR_VAL             ;//[nb_reg_free]
106  public    : SC_IN (Tcontrol_t)           **  in_PUSH_SPR_ACK             ;//[nb_reg_free]
107  public    : SC_OUT(Tspecial_address_t)   ** out_PUSH_SPR_NUM_REG         ;//[nb_reg_free]
108
109    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
110#ifdef DEBUG_TEST
111  public    : SC_IN (bool      )            *  in_INFO_ROB_EMPTY  ;
112  public    : SC_IN (uint32_t  )            *  in_INFO_NB_GPR_FREE;
113  public    : SC_IN (uint32_t  )            *  in_INFO_NB_SPR_FREE;
114#endif
115
116    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
117
118    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
119  private   : stat_list_entry_t            ** gpr_stat_list; //[nb_bank][nb_general_register_by_bank]
120  private   : stat_list_entry_t            ** spr_stat_list; //[nb_bank][nb_general_register_by_bank]
121
122  private   : uint32_t                        reg_GPR_PTR_FREE;
123  private   : uint32_t                        reg_SPR_PTR_FREE;
124
125    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
126  private   : Tcontrol_t                    * internal_INSERT_ACK       ;//[nb_inst_insert]
127  private   : Tcontrol_t                    * internal_RETIRE_ACK       ;//[nb_inst_retire]
128  private   : Tcontrol_t                    * internal_PUSH_GPR_VAL     ;//[nb_reg_free]
129  private   : uint32_t                      * internal_PUSH_GPR_NUM_BANK;//[nb_reg_free]
130  private   : uint32_t                      * internal_PUSH_GPR_NUM_REG ;//[nb_reg_free]
131  private   : Tcontrol_t                    * internal_PUSH_SPR_VAL     ;//[nb_reg_free]
132  private   : uint32_t                      * internal_PUSH_SPR_NUM_BANK;//[nb_reg_free]
133  private   : uint32_t                      * internal_PUSH_SPR_NUM_REG ;//[nb_reg_free]
134#endif
135
136    // -----[ Methods ]---------------------------------------------------
137
138#ifdef SYSTEMC
139    SC_HAS_PROCESS (Stat_List_unit);
140#endif
141  public  :          Stat_List_unit             
142  (
143#ifdef SYSTEMC
144   sc_module_name                                name,
145#else                                         
146   std::string                                   name,
147#endif                                         
148#ifdef STATISTICS
149   morpheo::behavioural::Parameters_Statistics * param_statistics,
150#endif
151   Parameters                                  * param,
152   morpheo::behavioural::Tusage_t                usage
153   );
154  public  :          ~Stat_List_unit             (void);
155                                               
156  private : void        allocation                (
157#ifdef STATISTICS
158                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
159#else
160                                                   void
161#endif
162                                                   );
163  private : void        deallocation              (void);
164                                               
165#ifdef SYSTEMC                                 
166  public  : void        transition                (void);
167  public  : void        genMoore                  (void);
168//public  : void        genMealy                  (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_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
179#endif
180#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
181  private : void        end_cycle                 (void);
182#endif
183  };
184
185}; // end namespace stat_list_unit
186}; // end namespace register_translation_unit
187}; // end namespace rename_unit
188}; // end namespace ooo_engine
189}; // end namespace multi_ooo_engine
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.