source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/include/Parameters.h @ 146

Last change on this file since 146 was 146, checked in by rosiere, 13 years ago

1) Integration of RegisterFile_Internal_Banked in RegisterFile?
2) Erase "read_write" interface in RegisterFile_Monolithic component
3) Add smith predictor parameters in Load_store_pointer_unit.
4) Fix not statistics flags

  • Property svn:keywords set to Id
File size: 46.2 KB
Line 
1#ifndef morpheo_behavioural_core_Parameters_h
2#define morpheo_behavioural_core_Parameters_h
3
4/*
5 * $Id: Parameters.h 146 2011-02-01 20:57:54Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#include "Behavioural/Core/Multi_Front_end/Front_end/include/Parameters.h"
12#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/include/Parameters.h"
13#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h"
14#include "Behavioural/Core/Icache_Access/include/Parameters.h"
15#include "Behavioural/Core/Dcache_Access/include/Parameters.h"
16#include "Behavioural/Core/Core_Glue/include/Parameters.h"
17
18#include "Behavioural/include/Parameters.h"
19#include "Common/include/Debug.h"
20
21#include <list>
22#include <vector>
23
24namespace morpheo {
25namespace behavioural {
26
27  typedef std::pair<uint32_t,uint32_t> pair_dual;
28
29namespace core {
30
31  class Parameters : public morpheo::behavioural::Parameters
32  {
33    //-----[ fields ]------------------------------------------------------------
34
35  // Common
36//public : uint32_t                _size_general_data                             ;
37//public : uint32_t                _size_special_data                             ;
38  public : morpheo::behavioural::custom::custom_information_t (*_get_custom_information) (void);
39   
40  // Thread
41  public : uint32_t                _nb_thread                                     ;
42  public : uint32_t              * _size_ifetch_queue                             ;//[nb_thread]
43  public : multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t
44                                 * _ifetch_queue_scheme                           ;//[nb_thread]
45  public : uint32_t              * _nb_inst_fetch                                 ;//[nb_thread]
46  public : bool                 ** _implement_group                               ;//[nb_thread][NB_GROUP]
47  public : uint32_t              * _ras_size_queue                                ;//[nb_thread]
48  public : uint32_t              * _upt_size_queue                                ;//[nb_thread]
49  public : uint32_t              * _ufpt_size_queue                               ;//[nb_thread]
50
51  // Decod bloc
52  public : uint32_t                _nb_decod_bloc                                 ;//
53  public : uint32_t              * _size_decod_queue                              ;//[nb_decod_bloc]
54  public : multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t
55                                 * _decod_queue_scheme                            ;//[nb_decod_bloc]
56  public : uint32_t              * _nb_inst_decod                                 ;//[nb_decod_bloc]
57  public : uint32_t              * _nb_context_select                             ;//[nb_decod_bloc]
58  public : Tpriority_t           * _context_select_priority                       ;//[nb_decod_bloc]
59  public : Tload_balancing_t     * _context_select_load_balancing                 ;//[nb_decod_bloc]
60
61  // Rename bloc
62  public : uint32_t                _nb_rename_bloc                                ;
63  public : uint32_t              * _nb_inst_insert                                ;//[nb_rename_bloc]
64  public : uint32_t              * _nb_inst_retire                                ;//[nb_rename_bloc]
65  public : Tpriority_t           * _rename_select_priority                        ;//[nb_rename_bloc]
66  public : Tload_balancing_t     * _rename_select_load_balancing                  ;//[nb_rename_bloc]
67  public : uint32_t              * _rename_select_nb_front_end_select             ;//[nb_rename_bloc]
68  public : uint32_t              * _nb_general_register                           ;//[nb_rename_bloc]
69  public : uint32_t              * _nb_special_register                           ;//[nb_rename_bloc]
70  public : Trat_scheme_t         * _rat_scheme                                    ;//[nb_rename_bloc]
71  public : uint32_t              * _nb_reg_free                                   ;//[nb_rename_bloc]
72  public : uint32_t              * _nb_rename_unit_bank                           ;//[nb_rename_bloc]
73//public : uint32_t              * _size_read_counter                             ;//[nb_rename_bloc]
74
75  // Read bloc
76  public : uint32_t                _nb_read_bloc                                  ;//
77  public : uint32_t              * _nb_inst_read                                  ;//[nb_read_bloc]
78  public : uint32_t              * _size_read_queue                               ;//[nb_read_bloc]
79  public : uint32_t              * _size_reservation_station                      ;//[nb_read_bloc]
80  public : uint32_t              * _nb_inst_retire_reservation_station            ;//[nb_read_bloc]
81
82  // Write bloc
83  public : uint32_t                _nb_write_bloc                                 ;//
84  public : uint32_t              * _nb_inst_write                                 ;//[nb_write_bloc]
85  public : uint32_t              * _size_write_queue                              ;//[nb_write_bloc]
86  public : uint32_t              * _size_execute_queue                            ;//[nb_write_bloc]
87  public : uint32_t              * _nb_bypass_write                               ;//[nb_write_bloc]
88  public : multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t * _write_queue_scheme; //[nb_write_bloc]
89
90  // Load_store_unit
91  public : uint32_t                _nb_load_store_unit                            ;
92  public : uint32_t              * _size_store_queue                              ;//[nb_load_store_unit]
93  public : uint32_t              * _size_load_queue                               ;//[nb_load_store_unit]
94  public : uint32_t              * _size_speculative_access_queue                 ;//[nb_load_store_unit]
95  public : uint32_t              * _nb_store_queue_bank                           ;//[nb_load_store_unit]
96  public : uint32_t              * _nb_load_queue_bank                            ;//[nb_load_store_unit]
97  public : uint32_t              * _nb_port_check                                 ;//[nb_load_store_unit]
98  public : multi_execute_loop::execute_loop::Tspeculative_load_t 
99                                 * _speculative_load                              ;//[nb_load_store_unit]
100  public : Tpredictor_t          * _speculative_commit_predictor_scheme           ;//[nb_load_store_unit]
101  public : uint32_t             ** _lsu_pht_size_counter                          ;//[nb_load_store_unit][1]
102  public : uint32_t             ** _lsu_pht_nb_counter                            ;//[nb_load_store_unit][1]
103  public : Tpht_scheme_t        ** _lsu_pht_scheme                                ;//[nb_load_store_unit][1]
104  public : uint32_t              * _nb_bypass_memory                              ;//[nb_load_store_unit]
105  public : uint32_t              * _nb_cache_port                                 ;//[nb_load_store_unit]
106  public : uint32_t              * _nb_inst_memory                                ;//[nb_load_store_unit]
107
108  // Functionnal_unit
109  public : uint32_t                _nb_functionnal_unit                           ;
110  public : uint32_t              * _nb_inst_functionnal_unit                      ;//[nb_functionnal_unit]
111  public : multi_execute_loop::execute_loop::execute_timing_t
112                               *** _timing                                        ;//[nb_functionnal_unit][nb_type][nb_operation]
113
114  // Icache_Access
115  public : uint32_t                _nb_icache_port                                ;
116  public : Tpriority_t             _icache_port_priority                          ;
117  public : Tload_balancing_t       _icache_port_load_balancing                    ;
118
119  // Dcache_Access
120  public : uint32_t                _nb_dcache_port                                ;
121  public : Tpriority_t             _dcache_port_priority                          ;
122  public : Tload_balancing_t       _dcache_port_load_balancing                    ;
123
124  // Front_end
125  public : uint32_t                _nb_front_end                                  ;
126  public : uint32_t              * _nb_context                                    ;//[nb_front_end]
127  public : uint32_t              * _nb_decod_unit                                 ;//[nb_front_end]
128  public : uint32_t              * _nb_inst_branch_predict                        ;//[nb_front_end]
129  public : uint32_t              * _nb_inst_branch_decod                          ;//[nb_front_end]
130  public : uint32_t              * _nb_inst_branch_update                         ;//[nb_front_end]
131  public : uint32_t              * _btb_size_queue                                ;//[nb_front_end]
132  public : uint32_t              * _btb_associativity                             ;//[nb_front_end]
133  public : uint32_t              * _btb_size_counter                              ;//[nb_front_end]
134  public : Tvictim_t             * _btb_victim_scheme                             ;//[nb_front_end]
135  public : Tpredictor_t          * _dir_predictor_scheme                          ;//[nb_front_end]
136  public : bool                 ** _dir_have_bht                                  ;//[nb_front_end][3]
137  public : uint32_t             ** _dir_bht_size_shifter                          ;//[nb_front_end][3]
138  public : uint32_t             ** _dir_bht_nb_shifter                            ;//[nb_front_end][3]
139  public : bool                 ** _dir_have_pht                                  ;//[nb_front_end][3]
140  public : uint32_t             ** _dir_pht_size_counter                          ;//[nb_front_end][3]
141  public : uint32_t             ** _dir_pht_nb_counter                            ;//[nb_front_end][3]
142  public : uint32_t             ** _dir_pht_size_address_share                    ;//[nb_front_end][3]
143  public : Tpht_scheme_t        ** _dir_pht_scheme                                ;//[nb_front_end][3]
144
145  // OOO_Engine
146  public : uint32_t                _nb_ooo_engine                                 ;
147  public : uint32_t              * _nb_rename_unit                                ;//[nb_ooo_engine]
148  public : uint32_t              * _nb_inst_issue_queue                           ;//[nb_ooo_engine]
149//public : uint32_t              * _nb_inst_issue_slot                            ;//[nb_ooo_engine]
150  public : uint32_t              * _nb_inst_reexecute                             ;//[nb_ooo_engine]
151  public : uint32_t              * _nb_inst_commit                                ;//[nb_ooo_engine]
152  public : uint32_t              * _nb_inst_branch_complete                       ;//[nb_ooo_engine]
153  public : uint32_t              * _nb_rename_unit_select                         ;//[nb_ooo_engine]
154  public : uint32_t              * _nb_execute_loop_select                        ;//[nb_ooo_engine]
155  public : uint32_t              * _size_re_order_buffer                          ;//[nb_ooo_engine]
156  public : uint32_t              * _nb_re_order_buffer_bank                       ;//[nb_ooo_engine]
157  public : multi_ooo_engine::ooo_engine::commit_unit::Tretire_ooo_scheme_t
158                                 * _retire_ooo_scheme                             ;//[nb_ooo_engine]
159  public : Tpriority_t           * _commit_priority                               ;//[nb_ooo_engine]
160  public : Tload_balancing_t     * _commit_load_balancing                         ;//[nb_ooo_engine]
161  public : uint32_t              * _size_issue_queue                              ;//[nb_ooo_engine]
162  public : multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t
163                                 * _issue_queue_scheme                            ;//[nb_ooo_engine]
164  public : bool                  * _issue_queue_in_order                          ;//[nb_ooo_engine]
165  public : uint32_t              * _nb_issue_queue_bank                           ;//[nb_ooo_engine]
166  public : Tpriority_t           * _issue_priority                                ;//[nb_ooo_engine]
167  public : Tload_balancing_t     * _issue_load_balancing                          ;//[nb_ooo_engine]
168  public : uint32_t              * _size_reexecute_queue                          ;//[nb_ooo_engine]
169
170  //Execute_loop
171  public : uint32_t                _nb_execute_loop                               ;
172  public : uint32_t              * _nb_read_unit                                  ;//[nb_execute_loop]
173  public : uint32_t              * _nb_execute_unit                               ;//[nb_execute_loop]
174  public : uint32_t              * _nb_write_unit                                 ;//[nb_execute_loop]
175  public : uint32_t              * _nb_gpr_bank                                   ;//[nb_execute_loop]
176  public : uint32_t              * _nb_gpr_port_read_by_bank                      ;//[nb_execute_loop]
177  public : uint32_t              * _nb_gpr_port_write_by_bank                     ;//[nb_execute_loop]
178  public : uint32_t              * _nb_spr_bank                                   ;//[nb_execute_loop]
179  public : uint32_t              * _nb_spr_port_read_by_bank                      ;//[nb_execute_loop]
180  public : uint32_t              * _nb_spr_port_write_by_bank                     ;//[nb_execute_loop]
181  public : Tpriority_t           * _execution_unit_to_write_unit_priority         ;//[nb_execute_loop]
182  public : Tpriority_t           * _read_unit_to_execution_unit_priority          ;//[nb_execute_loop]
183
184  // Link
185  public : pair_dual             * _link_context_with_thread                      ;//[nb_thread]
186  public : pair_dual             * _link_decod_unit_with_decod_bloc               ;//[nb_decod_bloc]
187  public : pair_dual             * _link_rename_unit_with_rename_bloc             ;//[nb_rename_bloc]
188  public : pair_dual             * _link_read_unit_with_read_bloc                 ;//[nb_read_bloc]
189  public : pair_dual             * _link_write_unit_with_write_bloc               ;//[nb_write_bloc]
190  public : pair_dual             * _link_execute_unit_with_functionnal_unit       ;//[nb_functionnal_unit]
191  public : pair_dual             * _link_execute_unit_with_load_store_unit        ;//[nb_load_store_unit]
192  public : uint32_t              * _link_decod_bloc_with_thread                   ;//[nb_thread]
193  public : uint32_t              * _link_rename_bloc_with_front_end               ;//[nb_front_end]
194//public : bool                *** _table_dispatch                                ;//[nb_ooo_engine][nb_inst_issue_slot][nb_read_bloc]
195  public : uint32_t              * _link_read_bloc_with_load_store_unit           ;//[nb_load_store_unit]
196  public : bool                 ** _link_read_bloc_and_functionnal_unit           ;//[nb_read_bloc][nb_functionnal_unit]
197  public : uint32_t              * _link_write_bloc_with_load_store_unit          ;//[nb_load_store_unit]
198  public : bool                 ** _link_write_bloc_and_functionnal_unit          ;//[nb_write_bloc][nb_functionnal_unit]
199  public : uint32_t              * _link_load_store_unit_with_thread              ;//[nb_thread]
200  public : bool                 ** _link_thread_and_functionnal_unit              ;//[nb_thread][nb_functionnal_unit]
201  public : uint32_t              * _link_icache_port_with_thread                  ;//[nb_thread]
202  public : uint32_t             ** _link_dcache_port_with_load_store_unit         ;//[nb_load_store_unit][nb_cache_port]
203
204  public : Tpriority_t             _dispatch_priority                             ;
205  public : Tload_balancing_t       _dispatch_load_balancing                       ;
206
207    //----------------------------------------------------------------------------
208    //----------------------------------------------------------------------------
209    //----------------------------------------------------------------------------
210
211  // inverse link
212  public : uint32_t             ** _link_thread_with_context                      ;//[nb_front_end][nb_context]
213  public : uint32_t             ** _link_decod_bloc_with_decod_unit               ;//[nb_front_end][nb_decod_unit]
214  public : uint32_t             ** _link_rename_bloc_with_rename_unit             ;//[nb_ooo_engine][nb_rename_unit]
215  public : uint32_t             ** _link_read_bloc_with_read_unit                 ;//[nb_execute_loop][nb_read_unit]
216  public : uint32_t             ** _link_write_bloc_with_write_unit               ;//[nb_execute_loop][nb_write_unit]
217  public : uint32_t             ** _link_functionnal_unit_with_execute_unit       ;//[nb_execute_loop][nb_execute_unit]
218  public : uint32_t             ** _link_load_store_unit_with_execute_unit        ;//[nb_execute_loop][nb_execute_unit]
219//public : std::vector<uint32_t> * _list_thread_with_decod_bloc                   ;//[nb_decod_bloc]
220//public : std::vector<uint32_t> * _list_front_end_with_rename_bloc               ;//[nb_rename_bloc]
221  public : std::vector<uint32_t>** _list_functionnal_unit_with_rename_unit        ;//[nb_ooo_engine][nb_rename_unit]{nb_ooo_engine_nb_functionnal_unit}
222  public : std::vector<uint32_t>** _list_load_store_unit_with_rename_unit         ;//[nb_ooo_engine][nb_rename_unit]{nb_ooo_engine_nb_load_store_unit}
223  public : std::vector<uint32_t> * _list_functionnal_unit_with_execute_unit       ;//[nb_execute_loop]{execute_loop_nb_functionnal_unit}
224  public : std::vector<uint32_t> * _list_load_store_unit_with_execute_unit        ;//[nb_execute_loop]{execute_loop_nb_load_store_unit}
225  public : std::vector<uint32_t> * _list_ooo_engine_with_execute_loop             ;//[nb_execute_loop]{execute_loop_nb_ooo_engine}
226  public : std::vector<uint32_t> * _list_front_end_with_execute_loop              ;//[nb_execute_loop]{execute_loop_nb_front_end}
227
228  // translate for front_end
229  public : uint32_t             ** _front_end_size_ifetch_queue                   ;//[nb_front_end][nb_context]
230  public : multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t
231                                ** _front_end_ifetch_queue_scheme                 ;//[nb_front_end][nb_context]
232  public : uint32_t             ** _front_end_nb_inst_fetch                       ;//[nb_front_end][nb_context]
233  public : bool                *** _front_end_instruction_implemeted              ;//[nb_front_end][nb_context][nb_instruction]
234  public : uint32_t             ** _front_end_link_decod_unit_with_context        ;//[nb_front_end][nb_context]
235  public : uint32_t              * _front_end_nb_inst_branch_complete             ;//[nb_front_end]
236  public : uint32_t             ** _front_end_size_decod_queue                    ;//[nb_front_end][nb_decod_unit]
237  public : multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t
238                                ** _front_end_decod_queue_scheme                  ;//[nb_front_end][nb_decod_unit]
239
240  public : uint32_t             ** _front_end_nb_inst_decod                       ;//[nb_front_end][nb_decod_unit]
241  public : uint32_t              * _front_end_sum_inst_decod                      ;//[nb_front_end]
242  public : uint32_t             ** _front_end_nb_context_select                   ;//[nb_front_end][nb_decod_unit]
243  public : Tpriority_t          ** _front_end_context_select_priority             ;//[nb_front_end][nb_decod_unit]
244  public : Tload_balancing_t    ** _front_end_context_select_load_balancing       ;//[nb_front_end][nb_decod_unit]
245  public : uint32_t             ** _front_end_ras_size_queue                      ;//[nb_front_end][nb_context]
246  public : uint32_t             ** _front_end_upt_size_queue                      ;//[nb_front_end][nb_context]
247  public : uint32_t             ** _front_end_ufpt_size_queue                     ;//[nb_front_end][nb_context]
248//public : uint32_t             ** _front_end_translate_num_context_to_num_thread ;//[nb_front_end][nb_context]
249
250  // translate for ooo_engine
251  public : uint32_t              * _ooo_engine_nb_front_end                       ;//[nb_ooo_engine]
252  public : uint32_t             ** _ooo_engine_nb_context                         ;//[nb_ooo_engine][ooo_engine_nb_front_end]   
253  public : uint32_t              * _ooo_engine_nb_execute_loop                    ;//[nb_ooo_engine]
254  public : uint32_t             ** _ooo_engine_nb_inst_decod                      ;//[nb_ooo_engine][ooo_engine_nb_front_end]
255  public : uint32_t             ** _ooo_engine_nb_inst_insert                     ;//[nb_ooo_engine][ooo_engine_nb_rename_unit]
256//public : uint32_t              * _ooo_engine_nb_inst_insert_rob                 ;//[nb_ooo_engine][ooo_engine_nb_rename_unit]
257  public : uint32_t             ** _ooo_engine_nb_inst_retire                     ;//[nb_ooo_engine][ooo_engine_nb_rename_unit]
258  public : uint32_t             ** _ooo_engine_nb_inst_execute                    ;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
259  public : uint32_t            *** _ooo_engine_nb_branch_speculated               ;//[nb_ooo_engine][ooo_engine_nb_front_end][ooo_engine_nb_context]
260  public : uint32_t             ** _ooo_engine_link_rename_unit_with_front_end    ;//[nb_ooo_engine][ooo_engine_nb_front_end]
261  public : Tpriority_t          ** _ooo_engine_rename_select_priority             ;//[nb_ooo_engine][nb_rename_unit]
262  public : Tload_balancing_t    ** _ooo_engine_rename_select_load_balancing       ;//[nb_ooo_engine][nb_rename_unit]
263  public : uint32_t             ** _ooo_engine_rename_select_nb_front_end_select  ;//[nb_ooo_engine][nb_rename_unit]
264  public : uint32_t             ** _ooo_engine_nb_general_register                ;//[nb_ooo_engine][nb_rename_unit]
265  public : uint32_t             ** _ooo_engine_nb_special_register                ;//[nb_ooo_engine][nb_rename_unit]
266  public : Trat_scheme_t        ** _ooo_engine_rat_scheme                         ;//[nb_ooo_engine][nb_rename_unit]
267  public : uint32_t             ** _ooo_engine_nb_reg_free                        ;//[nb_ooo_engine][nb_rename_unit]
268  public : uint32_t             ** _ooo_engine_nb_rename_unit_bank                ;//[nb_ooo_engine][nb_rename_unit]
269//public : uint32_t             ** _ooo_engine_size_read_counter                  ;//[nb_ooo_engine][nb_rename_unit]
270//public : bool                *** _ooo_engine_table_routing                      ;//[nb_ooo_engine][nb_rename_unit][nb_inst_issue_slot]
271//public : bool                *** _ooo_engine_table_issue_type                   ;//[nb_ooo_engine][nb_inst_issue_slot][nb_type]
272  public : uint32_t             ** _ooo_engine_nb_load_store_unit                 ;//[nb_ooo_engine][nb_rename_unit]
273  public : uint32_t            *** _ooo_engine_size_store_queue                   ;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit]
274  public : uint32_t            *** _ooo_engine_size_load_queue                    ;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit]
275  public : Tpredictor_t        *** _ooo_engine_speculative_commit_predictor_scheme;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit]
276  public : uint32_t           **** _ooo_engine_lsu_pht_size_counter               ;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit][1]
277  public : uint32_t           **** _ooo_engine_lsu_pht_nb_counter                 ;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit][1]
278  public : Tpht_scheme_t      **** _ooo_engine_lsu_pht_scheme                     ;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit][1]
279  public : uint32_t            *** _ooo_engine_nb_inst_memory                     ;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit]
280  public : uint32_t            *** _ooo_engine_link_load_store_unit_with_context  ;//[nb_ooo_engine][ooo_engine_nb_front_end][nb_context]
281  public : bool               **** _ooo_engine_implement_group                    ;//[nb_ooo_engine][ooo_engine_nb_front_end][nb_context][NB_GROUP]
282  public : uint32_t            *** _ooo_engine_translate_num_context_to_num_thread;//[nb_ooo_engine][ooo_engine_nb_front_end][nb_context]
283
284  // translate for execute_loop
285  public : uint32_t              * _execute_loop_nb_functionnal_unit                       ;//[nb_execute_loop]
286  public : uint32_t              * _execute_loop_nb_load_store_unit                        ;//[nb_execute_loop]
287  public : uint32_t              * _execute_loop_nb_context                                ;//[nb_execute_loop]
288  public : uint32_t              * _execute_loop_nb_front_end                              ;//[nb_execute_loop]
289  public : uint32_t              * _execute_loop_nb_ooo_engine                             ;//[nb_execute_loop]
290  public : uint32_t              * _execute_loop_nb_thread                                 ;//[nb_execute_loop]
291  public : uint32_t              * _execute_loop_nb_packet                                 ;//[nb_execute_loop]
292  public : uint32_t             ** _execute_loop_nb_inst_read                              ;//[nb_execute_loop][nb_read_unit]
293  public : uint32_t             ** _execute_loop_size_read_queue                           ;//[nb_execute_loop][nb_read_unit]
294  public : uint32_t             ** _execute_loop_size_reservation_station                  ;//[nb_execute_loop][nb_read_unit]
295  public : uint32_t             ** _execute_loop_nb_inst_retire                            ;//[nb_execute_loop][nb_read_unit]
296  public : uint32_t             ** _execute_loop_nb_inst_functionnal_unit                  ;//[nb_execute_loop][execute_loop_nb_functionnal_unit]
297  public : multi_execute_loop::execute_loop::execute_timing_t
298                              **** _execute_loop_timing                                    ;//[nb_execute_loop][nb_execute_unit_nb_functionnal_unit][nb_type][nb_operation]
299  public : uint32_t             ** _execute_loop_size_store_queue                          ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
300  public : uint32_t             ** _execute_loop_size_load_queue                           ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
301  public : uint32_t             ** _execute_loop_size_speculative_access_queue             ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
302  public : uint32_t             ** _execute_loop_nb_store_queue_bank                       ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
303  public : uint32_t             ** _execute_loop_nb_load_queue_bank                        ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
304  public : uint32_t             ** _execute_loop_nb_port_check                             ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
305  public : multi_execute_loop::execute_loop::Tspeculative_load_t
306                                ** _execute_loop_speculative_load                          ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
307  public : Tpredictor_t         ** _execute_loop_speculative_commit_predictor_scheme       ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
308  /* public : uint32_t            *** _execute_loop_lsu_pht_size_counter                      ;//[nb_execute_loop][execute_loop_nb_load_store_unit][1] */
309  /* public : uint32_t            *** _execute_loop_lsu_pht_nb_counter                        ;//[nb_execute_loop][execute_loop_nb_load_store_unit][1] */
310  public : uint32_t             ** _execute_loop_nb_bypass_memory                          ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
311  public : uint32_t             ** _execute_loop_nb_cache_port                             ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
312  public : uint32_t             ** _execute_loop_nb_inst_memory                            ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
313  public : uint32_t             ** _execute_loop_nb_inst_write                             ;//[nb_execute_loop][nb_write_unit]
314  public : uint32_t             ** _execute_loop_size_write_queue                          ;//[nb_execute_loop][nb_write_unit]
315  public : uint32_t             ** _execute_loop_size_execute_queue                        ;//[nb_execute_loop][nb_write_unit]
316  public : uint32_t             ** _execute_loop_nb_bypass_write                           ;//[nb_execute_loop][nb_write_unit]
317  public : multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t ** _execute_loop_write_queue_scheme; //[nb_execute_loop][nb_write_unit]
318
319  public : uint32_t             ** _execute_loop_nb_general_register                       ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
320  public : uint32_t             ** _execute_loop_nb_special_register                       ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
321//public : uint32_t             ** _execute_loop_nb_inst_insert_rob                        ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
322  public : uint32_t             ** _execute_loop_nb_inst_retire_rob                        ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
323  public : uint32_t             ** _execute_loop_nb_execute_unit_port                      ;//[nb_execute_loop][nb_execute_unit]
324  public : bool               **** _execute_loop_execution_unit_to_write_unit_table_routing;//[nb_execute_loop][nb_execute_unit][execute_loop_nb_execute_unit_port][nb_write_unit]
325  public : bool                *** _execute_loop_execution_unit_to_write_unit_table_thread ;//[nb_execute_loop][nb_write_unit][execute_loop_nb_thread]
326  public : bool               **** _execute_loop_read_unit_to_execution_unit_table_routing ;//[nb_execute_loop][nb_read_unit][nb_execute_unit][execute_loop_nb_execute_unit_port]
327  public : bool                *** _execute_loop_read_unit_to_execution_unit_table_thread  ;//[nb_execute_loop][nb_execute_unit][execute_loop_nb_thread]
328  public : bool                 ** _execute_loop_is_load_store_unit                        ;//[nb_execute_loop][nb_execute_unit]
329  public : uint32_t             ** _execute_loop_translate_num_execute_unit                ;//[nb_execute_loop][nb_execute_unit]
330  public : bool                 ** _execute_loop_num_thread_valid                          ;//[nb_execute_loop][execute_loop_nb_thread]
331
332  // translate for icache_access
333  public : uint32_t             ** _icache_access_table_routing                   ;//[nb_front_end][nb_context]
334  public : uint32_t              * _icache_nb_instruction                         ;//[nb_icache_port]
335  public : uint32_t             ** _icache_access_size_packet_id                  ;//[nb_front_end][nb_context]
336
337  public : uint32_t                _size_icache_thread_id                         ;
338  public : uint32_t                _size_icache_packet_id                         ;
339  public : uint32_t                _size_icache_address                           ;
340
341  public : bool                    _have_port_icache_thread_id                    ;
342  public : bool                    _have_port_icache_packet_id                    ;
343
344  // translate for dcache_access
345  public : uint32_t             ** _dcache_access_size_thread_id                  ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
346  public : uint32_t             ** _dcache_access_size_packet_id                  ;//[nb_execute_loop][execute_loop_nb_load_store_unit]
347  public : uint32_t            *** _dcache_access_table_routing                   ;//[nb_execute_loop][execute_loop_nb_load_store_unit][execute_loop_nb_cache_port]
348  public : uint32_t              * _dcache_access_nb_context                      ;//[nb_execute_loop]
349  public : uint32_t            *** _dcache_access_translate_load_store_unit_to_thread;//[nb_execute_loop][execute_loop_nb_load_store_unit][dcache_access_nb_context]
350
351
352  public : uint32_t                _size_dcache_thread_id                         ;
353  public : uint32_t                _size_dcache_packet_id                         ;
354  public : uint32_t                _size_dcache_address                           ;
355  public : uint32_t                _size_dcache_data                              ;
356
357  public : bool                    _have_port_dcache_thread_id                    ;
358  public : bool                    _have_port_dcache_packet_id                    ;
359
360
361//public : bool               **** _network_table_dispatch                        ;//[nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]
362  public : bool                *** _network_table_issue_type                      ;//                                   [nb_execute_loop][nb_read_unit][nb_type]
363  public : bool                *** _network_table_issue_thread                    ;//                                   [nb_execute_loop][nb_read_unit][nb_thread]
364
365  // Translate
366  public : uint32_t             ** _translate_ooo_engine_num_front_end            ;//[nb_ooo_engine][ooo_engine_nb_front_end]
367  public : uint32_t             ** _translate_ooo_engine_num_execute_loop         ;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
368//public : uint32_t            *** _translate_rename_unit_num_load_store_unit     ;//[nb_ooo_engine][nb_rename_unit][ooo_engine_nb_load_store_unit]
369  public : uint32_t             ** _translate_execute_loop_num_ooo_engine         ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
370
371  public : core::multi_front_end::front_end::      Parameters ** _param_front_end;
372  public : core::multi_ooo_engine::ooo_engine::    Parameters ** _param_ooo_engine;
373  public : core::multi_execute_loop::execute_loop::Parameters ** _param_execute_loop;
374  public : core::icache_access::                   Parameters *  _param_icache_access;
375  public : core::dcache_access::                   Parameters *  _param_dcache_access;
376  public : core::core_glue::                       Parameters *  _param_glue;
377
378    //-----[ methods ]-----------------------------------------------------------
379  public : Parameters  (
380  // Common
381  uint32_t                size_general_data                             ,
382  uint32_t                size_special_data                             ,
383  morpheo::behavioural::custom::custom_information_t (*get_custom_information) (void),
384   
385  // Thread
386  uint32_t                nb_thread                                     ,
387  uint32_t              * size_ifetch_queue                             ,//[nb_thread]
388  multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t
389                        * ifetch_queue_scheme                           ,//[nb_thread]
390  uint32_t              * nb_inst_fetch                                 ,//[nb_thread]
391  bool                 ** implement_group                               ,//[nb_thread][NB_GROUP]
392  uint32_t              * ras_size_queue                                ,//[nb_thread]
393  uint32_t              * upt_size_queue                                ,//[nb_thread]
394  uint32_t              * ufpt_size_queue                               ,//[nb_thread]
395
396  // Decod bloc
397  uint32_t                nb_decod_bloc                                 ,
398  uint32_t              * size_decod_queue                              ,//[nb_decod_bloc]
399  multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t
400                        * decod_queue_scheme                            ,//[nb_decod_bloc]
401  uint32_t              * nb_inst_decod                                 ,//[nb_decod_bloc]
402  uint32_t              * nb_context_select                             ,//[nb_decod_bloc]
403  Tpriority_t           * context_select_priority                       ,//[nb_decod_bloc]
404  Tload_balancing_t     * context_select_load_balancing                 ,//[nb_decod_bloc]
405
406  // Rename bloc
407  uint32_t                nb_rename_bloc                                ,
408  uint32_t              * nb_inst_insert                                ,//[nb_rename_bloc]
409  uint32_t              * nb_inst_retire                                ,//[nb_rename_bloc]
410  Tpriority_t           * rename_select_priority                        ,//[nb_rename_bloc]
411  Tload_balancing_t     * rename_select_load_balancing                  ,//[nb_rename_bloc]
412  uint32_t              * rename_select_nb_front_end_select             ,//[nb_rename_bloc]
413  uint32_t              * nb_general_register                           ,//[nb_rename_bloc]
414  uint32_t              * nb_special_register                           ,//[nb_rename_bloc]
415  Trat_scheme_t         * rat_scheme                                    ,//[nb_rename_bloc]
416  uint32_t              * nb_reg_free                                   ,//[nb_rename_bloc]
417  uint32_t              * nb_rename_unit_bank                           ,//[nb_rename_bloc]
418//uint32_t              * size_read_counter                             ,//[nb_rename_bloc]
419
420  // Read bloc
421  uint32_t                nb_read_bloc                                  ,//
422  uint32_t              * nb_inst_read                                  ,//[nb_read_bloc]
423  uint32_t              * size_read_queue                               ,//[nb_read_bloc]
424  uint32_t              * size_reservation_station                      ,//[nb_read_bloc]
425  uint32_t              * nb_inst_retire_reservation_station            ,//[nb_read_bloc]
426
427  // Write bloc
428  uint32_t                nb_write_bloc                                 ,//
429  uint32_t              * nb_inst_write                                 ,//[nb_write_bloc]
430  uint32_t              * size_write_queue                              ,//[nb_write_bloc]
431  uint32_t              * size_execute_queue                            ,//[nb_write_bloc]
432  uint32_t              * nb_bypass_write                               ,//[nb_write_bloc]
433  multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t * write_queue_scheme,//[nb_write_bloc]
434
435  // Load_store_unit
436  uint32_t                nb_load_store_unit                            ,
437  uint32_t              * size_store_queue                              ,//[nb_load_store_unit]
438  uint32_t              * size_load_queue                               ,//[nb_load_store_unit]
439  uint32_t              * size_speculative_access_queue                 ,//[nb_load_store_unit]
440  uint32_t              * nb_store_queue_bank                           ,//[nb_load_store_unit]
441  uint32_t              * nb_load_queue_bank                            ,//[nb_load_store_unit]
442  uint32_t              * nb_port_check                                 ,//[nb_load_store_unit]
443  multi_execute_loop::execute_loop::Tspeculative_load_t 
444                        * speculative_load                              ,//[nb_load_store_unit]
445  Tpredictor_t          * speculative_commit_predictor_scheme           ,//[nb_load_store_unit]
446  uint32_t             ** lsu_pht_size_counter                          ,//[nb_load_store_unit][1]
447  uint32_t             ** lsu_pht_nb_counter                            ,//[nb_load_store_unit][1]
448  Tpht_scheme_t        ** lsu_pht_scheme                                ,//[nb_load_store_unit][1]
449  uint32_t              * nb_bypass_memory                              ,//[nb_load_store_unit]
450  uint32_t              * nb_cache_port                                 ,//[nb_load_store_unit]
451  uint32_t              * nb_inst_memory                                ,//[nb_load_store_unit]
452
453  // Functionnal_unit
454  uint32_t                nb_functionnal_unit                           ,
455  uint32_t              * nb_inst_functionnal_unit                      ,//[nb_functionnal_unit]
456  multi_execute_loop::execute_loop::execute_timing_t
457                      *** timing                                        ,//[nb_functionnal_unit][nb_type][nb_operation]
458
459  // Icache_Access
460  uint32_t                nb_icache_port                                ,
461  Tpriority_t             icache_port_priority                          ,
462  Tload_balancing_t       icache_port_load_balancing                    ,
463
464  // Dcache_Access
465  uint32_t                nb_dcache_port                                ,
466  Tpriority_t             dcache_port_priority                          ,
467  Tload_balancing_t       dcache_port_load_balancing                    ,
468
469  // Front_end
470  uint32_t                nb_front_end                                  ,
471  uint32_t              * nb_context                                    ,//[nb_front_end]
472  uint32_t              * nb_decod_unit                                 ,//[nb_front_end]
473  uint32_t              * nb_inst_branch_predict                        ,//[nb_front_end]
474  uint32_t              * nb_inst_branch_decod                          ,//[nb_front_end]
475  uint32_t              * nb_inst_branch_update                         ,//[nb_front_end]
476  uint32_t              * btb_size_queue                                ,//[nb_front_end]
477  uint32_t              * btb_associativity                             ,//[nb_front_end]
478  uint32_t              * btb_size_counter                              ,//[nb_front_end]
479  Tvictim_t             * btb_victim_scheme                             ,//[nb_front_end]
480  Tpredictor_t          * dir_predictor_scheme                          ,//[nb_front_end]
481  bool                 ** dir_have_bht                                  ,//[nb_front_end][3]
482  uint32_t             ** dir_bht_size_shifter                          ,//[nb_front_end][3]
483  uint32_t             ** dir_bht_nb_shifter                            ,//[nb_front_end][3]
484  bool                 ** dir_have_pht                                  ,//[nb_front_end][3]
485  uint32_t             ** dir_pht_size_counter                          ,//[nb_front_end][3]
486  uint32_t             ** dir_pht_nb_counter                            ,//[nb_front_end][3]
487  uint32_t             ** dir_pht_size_address_share                    ,//[nb_front_end][3]
488  Tpht_scheme_t        ** dir_pht_scheme                                ,//[nb_front_end][3]
489
490  // OOO_Engine
491  uint32_t                nb_ooo_engine                                 ,
492  uint32_t              * nb_rename_unit                                ,//[nb_ooo_engine]
493//uint32_t              * nb_inst_issue_slot                            ,//[nb_ooo_engine]
494  uint32_t              * nb_inst_reexecute                             ,//[nb_ooo_engine]
495  uint32_t              * nb_inst_commit                                ,//[nb_ooo_engine]
496  uint32_t              * nb_inst_branch_complete                       ,//[nb_ooo_engine]
497  uint32_t              * nb_rename_unit_select                         ,//[nb_ooo_engine]
498  uint32_t              * nb_execute_loop_select                        ,//[nb_ooo_engine]
499  uint32_t              * size_re_order_buffer                          ,//[nb_ooo_engine]
500  uint32_t              * nb_re_order_buffer_bank                       ,//[nb_ooo_engine]
501  multi_ooo_engine::ooo_engine::commit_unit::Tretire_ooo_scheme_t
502                        * retire_ooo_scheme                             ,//[nb_ooo_engine]
503  Tpriority_t           * commit_priority                               ,//[nb_ooo_engine]
504  Tload_balancing_t     * commit_load_balancing                         ,//[nb_ooo_engine]
505  uint32_t              * size_issue_queue                              ,//[nb_ooo_engine]
506  multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t
507                        * issue_queue_scheme                            ,//[nb_ooo_engine]
508  uint32_t              * nb_issue_queue_bank                           ,//[nb_ooo_engine]
509  Tpriority_t           * issue_priority                                ,//[nb_ooo_engine]
510  Tload_balancing_t     * issue_load_balancing                          ,//[nb_ooo_engine]
511  uint32_t              * size_reexecute_queue                          ,//[nb_ooo_engine]
512
513  //Execute_loop
514  uint32_t                nb_execute_loop                               ,
515  uint32_t              * nb_read_unit                                  ,//[nb_execute_loop]
516  uint32_t              * nb_execute_unit                               ,//[nb_execute_loop]
517  uint32_t              * nb_write_unit                                 ,//[nb_execute_loop]
518  uint32_t              * nb_gpr_bank                                   ,//[nb_execute_loop]
519  uint32_t              * nb_gpr_port_read_by_bank                      ,//[nb_execute_loop]
520  uint32_t              * nb_gpr_port_write_by_bank                     ,//[nb_execute_loop]
521  uint32_t              * nb_spr_bank                                   ,//[nb_execute_loop]
522  uint32_t              * nb_spr_port_read_by_bank                      ,//[nb_execute_loop]
523  uint32_t              * nb_spr_port_write_by_bank                     ,//[nb_execute_loop]
524  Tpriority_t           * execution_unit_to_write_unit_priority         ,//[nb_execute_loop]
525  Tpriority_t           * read_unit_to_execution_unit_priority          ,//[nb_execute_loop]
526
527  // Link
528  pair_dual             * link_context_with_thread                      ,//[nb_thread]
529  pair_dual             * link_decod_unit_with_decod_bloc               ,//[nb_decod_bloc]
530  pair_dual             * link_rename_unit_with_rename_bloc             ,//[nb_rename_bloc]
531  pair_dual             * link_read_unit_with_read_bloc                 ,//[nb_read_bloc]
532  pair_dual             * link_write_unit_with_write_bloc               ,//[nb_write_bloc]
533  pair_dual             * link_execute_unit_with_functionnal_unit       ,//[nb_functionnal_unit]
534  pair_dual             * link_execute_unit_with_load_store_unit        ,//[nb_load_store_unit]
535  uint32_t              * link_decod_bloc_with_thread                   ,//[nb_thread]
536  uint32_t              * link_rename_bloc_with_front_end               ,//[nb_front_end]
537//bool                *** table_dispatch                                ,//[nb_ooo_engine][nb_inst_issue_slot][nb_read_bloc]
538  uint32_t              * link_read_bloc_with_load_store_unit           ,//[nb_load_store_unit]
539  bool                 ** link_read_bloc_and_functionnal_unit           ,//[nb_read_bloc][nb_functionnal_unit]
540  uint32_t              * link_write_bloc_with_load_store_unit          ,//[nb_load_store_unit]
541  bool                 ** link_write_bloc_and_functionnal_unit          ,//[nb_write_bloc][nb_functionnal_unit]
542  uint32_t              * link_load_store_unit_with_thread              ,//[nb_thread]
543  bool                 ** link_thread_and_functionnal_unit              ,//[nb_thread][nb_functionnal_unit]
544  uint32_t              * link_icache_port_with_thread                  ,//[nb_thread]
545  uint32_t             ** link_dcache_port_with_load_store_unit         ,//[nb_load_store_unit][nb_cache_port]
546
547  Tpriority_t             dispatch_priority                             ,
548  Tload_balancing_t       dispatch_load_balancing                       ,
549  bool                    is_toplevel=false
550                        );
551//   public : Parameters  (Parameters & param) ;
552  public : ~Parameters () ;
553
554  public :        void            copy       (void);
555
556  public :        Parameters_test msg_error  (void);
557
558  private:        Tcontext_t      execute_loop_get_num_thread (uint32_t num_execute_loop,
559                                                               uint32_t num_thread);
560
561  public :        std::string     print      (uint32_t depth);
562  public : friend std::ostream&   operator<< (std::ostream& output_stream,
563                                            morpheo::behavioural::core::Parameters & x);
564  };
565
566}; // end namespace core
567}; // end namespace behavioural
568}; // end namespace morpheo             
569
570#endif
Note: See TracBrowser for help on using the repository browser.