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

Last change on this file since 145 was 145, checked in by rosiere, 14 years ago

1) add test with SPECINT2K
2) new config of Selftest
3) modif RAT to support multiple depth_save ... but not finish (need fix Update Prediction Table)
4) add Function_pointer but need fix

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