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

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

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

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