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