1 | #ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_Parameters_h |
---|
2 | #define morpheo_behavioural_core_multi_execute_loop_execute_loop_Parameters_h |
---|
3 | |
---|
4 | /* |
---|
5 | * $Id: Parameters.h 138 2010-05-12 17:34:01Z rosiere $ |
---|
6 | * |
---|
7 | * [ Description ] |
---|
8 | * |
---|
9 | */ |
---|
10 | |
---|
11 | #include "Common/include/Debug.h" |
---|
12 | #include "Behavioural/include/Parameters.h" |
---|
13 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Types.h" |
---|
14 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/include/Parameters.h" |
---|
15 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/include/Parameters.h" |
---|
16 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h" |
---|
17 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Parameters.h" |
---|
18 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/include/Parameters.h" |
---|
19 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h" |
---|
20 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Parameters.h" |
---|
21 | #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Parameters.h" |
---|
22 | #include <set> |
---|
23 | |
---|
24 | namespace morpheo { |
---|
25 | namespace behavioural { |
---|
26 | namespace core { |
---|
27 | namespace multi_execute_loop { |
---|
28 | namespace execute_loop { |
---|
29 | |
---|
30 | |
---|
31 | class Parameters : public morpheo::behavioural::Parameters |
---|
32 | { |
---|
33 | //-----[ fields ]------------------------------------------------------------ |
---|
34 | // unit occurence |
---|
35 | public : uint32_t _nb_read_unit ; |
---|
36 | public : uint32_t _nb_functionnal_unit ; |
---|
37 | public : uint32_t _nb_load_store_unit ; |
---|
38 | public : uint32_t _nb_write_unit ; |
---|
39 | // generic parameters |
---|
40 | public : uint32_t _nb_context ; |
---|
41 | public : uint32_t _nb_front_end ; |
---|
42 | public : uint32_t _nb_ooo_engine ; |
---|
43 | public : uint32_t _nb_packet ; |
---|
44 | //public : uint32_t _size_general_data ; |
---|
45 | //public : uint32_t _size_special_data ; |
---|
46 | // specific parameters |
---|
47 | // * functionnal_unit |
---|
48 | public : uint32_t * _nb_inst_functionnal_unit ; //[nb_functionnal_unit] |
---|
49 | public : execute_timing_t *** _timing ; //[nb_functionnal_unit][nb_type][nb_operation] |
---|
50 | public : morpheo::behavioural::custom::custom_information_t (*_get_custom_information) (void); |
---|
51 | |
---|
52 | // * load_store_unit |
---|
53 | public : uint32_t * _size_store_queue ; //[nb_load_store_unit] |
---|
54 | public : uint32_t * _size_load_queue ; //[nb_load_store_unit] |
---|
55 | public : uint32_t * _size_speculative_access_queue ; //[nb_load_store_unit] |
---|
56 | public : uint32_t * _nb_store_queue_bank ; //[nb_load_store_unit] |
---|
57 | public : uint32_t * _nb_load_queue_bank ; //[nb_load_store_unit] |
---|
58 | public : uint32_t * _nb_port_check ; //[nb_load_store_unit] |
---|
59 | public : Tspeculative_load_t * _speculative_load ; //[nb_load_store_unit] |
---|
60 | public : Tpredictor_t * _speculative_commit_predictor_scheme ; //[nb_load_store_unit] |
---|
61 | public : uint32_t ** _lsu_pht_size_counter ; //[nb_load_store_unit][1] |
---|
62 | public : uint32_t ** _lsu_pht_nb_counter ; //[nb_load_store_unit][1] |
---|
63 | public : uint32_t * _nb_bypass_memory ; //[nb_load_store_unit] |
---|
64 | public : uint32_t * _nb_cache_port ; //[nb_load_store_unit] |
---|
65 | public : uint32_t * _nb_inst_memory ; //[nb_load_store_unit] |
---|
66 | // * read_unit |
---|
67 | public : uint32_t * _nb_inst_read ; //[nb_read_unit] |
---|
68 | public : uint32_t * _size_read_queue ; //[nb_read_unit] |
---|
69 | public : uint32_t * _size_reservation_station ; //[nb_read_unit] |
---|
70 | public : uint32_t * _nb_inst_retire ; //[nb_read_unit] |
---|
71 | public : uint32_t * _read_unit_nb_register_write ; //[nb_read_unit] |
---|
72 | public : uint32_t * _read_unit_nb_bypass_write ; //[nb_read_unit] |
---|
73 | public : uint32_t * _read_unit_nb_bypass_memory ; //[nb_read_unit] |
---|
74 | public : bool *** _link_read_unit_with_load_store_unit ; //[nb_read_unit][nb_load_store_unit][nb_inst_memory] |
---|
75 | public : bool ** _link_read_unit_with_write_unit ; //[nb_read_unit][nb_write_unit] |
---|
76 | public : bool ** _link_read_unit_with_thread ; //[nb_read_unit][nb_thread] |
---|
77 | // * write_unit |
---|
78 | public : uint32_t * _nb_inst_write ; //[nb_write_unit] |
---|
79 | public : uint32_t * _size_write_queue ; //[nb_write_unit] |
---|
80 | public : uint32_t * _size_execute_queue ; //[nb_write_unit] |
---|
81 | public : uint32_t * _nb_bypass_write ; //[nb_write_unit] |
---|
82 | public : multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t * _write_queue_scheme; //[nb_write_unit] |
---|
83 | |
---|
84 | // * register_unit |
---|
85 | public : uint32_t _nb_gpr_read ; |
---|
86 | public : uint32_t _nb_gpr_write ; |
---|
87 | public : uint32_t _nb_gpr_bank ; |
---|
88 | public : uint32_t _nb_gpr_port_read_by_bank ; |
---|
89 | public : uint32_t _nb_gpr_port_write_by_bank ; |
---|
90 | public : uint32_t _nb_spr_read ; |
---|
91 | public : uint32_t _nb_spr_write ; |
---|
92 | public : uint32_t _nb_spr_bank ; |
---|
93 | public : uint32_t _nb_spr_port_read_by_bank ; |
---|
94 | public : uint32_t _nb_spr_port_write_by_bank ; |
---|
95 | public : uint32_t * _nb_general_register ; //[nb_ooo_engine] |
---|
96 | public : uint32_t * _nb_special_register ; //[nb_ooo_engine] |
---|
97 | //public : uint32_t * _nb_inst_insert_rob ; //[nb_ooo_engine] |
---|
98 | //public : uint32_t * _nb_inst_retire_rob ; //[nb_ooo_engine] |
---|
99 | // * network |
---|
100 | public : Tpriority_t _execution_unit_to_write_unit_priority ; |
---|
101 | public : bool *** _execution_unit_to_write_unit_table_routing ; //[nb_execute_unit][nb_execute_unit_port][nb_write_unit] |
---|
102 | public : bool ** _execution_unit_to_write_unit_table_thread ; //[nb_write_unit][nb_thread] |
---|
103 | |
---|
104 | public : Tpriority_t _read_unit_to_execution_unit_priority ; |
---|
105 | public : bool *** _read_unit_to_execution_unit_table_routing ; //[nb_read_unit][nb_execute_unit][nb_execute_unit_port] |
---|
106 | public : bool ** _read_unit_to_execution_unit_table_execute_type; //[nb_execute_unit][nb_type] |
---|
107 | public : bool ** _read_unit_to_execution_unit_table_thread ; //[nb_execute_unit][nb_thread] |
---|
108 | |
---|
109 | public : bool * _is_load_store_unit ; //[nb_execute_unit] |
---|
110 | public : uint32_t * _translate_num_execute_unit ; //[nb_execute_unit] |
---|
111 | |
---|
112 | public : bool * _num_thread_valid ; //[nb_thread] |
---|
113 | |
---|
114 | public : uint32_t _nb_thread ; |
---|
115 | public : uint32_t _nb_execute_unit ; |
---|
116 | public : uint32_t * _nb_execute_unit_port ; |
---|
117 | |
---|
118 | //public : uint32_t _size_context_id ; |
---|
119 | //public : uint32_t _size_front_end_id ; |
---|
120 | //public : uint32_t _size_ooo_engine_id ; |
---|
121 | //public : uint32_t _size_packet_id ; |
---|
122 | //public : bool _have_port_context_id ; |
---|
123 | //public : bool _have_port_front_end_id ; |
---|
124 | //public : bool _have_port_ooo_engine_id ; |
---|
125 | //public : bool _have_port_packet_id ; |
---|
126 | //public : bool _have_port_load_queue_ptr ; |
---|
127 | public : bool _have_port_dcache_context_id ; |
---|
128 | |
---|
129 | public : uint32_t _max_nb_inst_memory ; |
---|
130 | public : uint32_t _max_nb_general_register; |
---|
131 | public : uint32_t _max_nb_special_register; |
---|
132 | public : uint32_t _max_size_store_queue ; |
---|
133 | public : uint32_t _max_size_load_queue ; |
---|
134 | |
---|
135 | //public : uint32_t _size_general_register ; |
---|
136 | //public : uint32_t _size_special_register ; |
---|
137 | |
---|
138 | public : uint32_t _max_size_dcache_context_id; |
---|
139 | public : uint32_t _max_size_dcache_packet_id ; |
---|
140 | |
---|
141 | public : std::set<uint32_t> * _set_read_unit_source_register_write ; //[nb_read_unit] |
---|
142 | public : std::set<uint32_t> * _set_read_unit_source_bypass_write ; //[nb_read_unit] |
---|
143 | public : std::set<uint32_t> * _set_read_unit_source_bypass_memory ; //[nb_read_unit] |
---|
144 | |
---|
145 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::execute_loop_glue:: Parameters * _param_glue; |
---|
146 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit:: Parameters ** _param_read_unit; |
---|
147 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters ** _param_functionnal_unit; |
---|
148 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit:: Parameters ** _param_load_store_unit; |
---|
149 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit:: Parameters ** _param_write_unit; |
---|
150 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::network::read_unit_to_execution_unit:: Parameters * _param_read_unit_to_execution_unit; |
---|
151 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::network::execution_unit_to_write_unit:: Parameters * _param_execution_unit_to_write_unit; |
---|
152 | public : morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit:: Parameters * _param_register_unit; |
---|
153 | |
---|
154 | //-----[ methods ]----------------------------------------------------------- |
---|
155 | public : Parameters (uint32_t nb_read_unit , |
---|
156 | uint32_t nb_functionnal_unit , |
---|
157 | uint32_t nb_load_store_unit , |
---|
158 | uint32_t nb_write_unit , |
---|
159 | |
---|
160 | uint32_t nb_context , |
---|
161 | uint32_t nb_front_end , |
---|
162 | uint32_t nb_ooo_engine , |
---|
163 | uint32_t nb_packet , |
---|
164 | uint32_t size_general_data , |
---|
165 | uint32_t size_special_data , |
---|
166 | |
---|
167 | uint32_t * nb_inst_read ,//[nb_read_unit] |
---|
168 | uint32_t * size_read_queue ,//[nb_read_unit] |
---|
169 | uint32_t * size_reservation_station ,//[nb_read_unit] |
---|
170 | uint32_t * nb_inst_retire ,//[nb_read_unit] |
---|
171 | |
---|
172 | uint32_t * nb_inst_functionnal_unit ,//[nb_functionnal_unit] |
---|
173 | execute_timing_t *** timing ,//[nb_functionnal_unit][nb_type][nb_operation] |
---|
174 | morpheo::behavioural::custom::custom_information_t (*get_custom_information) (void), |
---|
175 | |
---|
176 | uint32_t * size_store_queue ,//[nb_load_store_unit] |
---|
177 | uint32_t * size_load_queue ,//[nb_load_store_unit] |
---|
178 | uint32_t * size_speculative_access_queue ,//[nb_load_store_unit] |
---|
179 | uint32_t * nb_store_queue_bank ,//[nb_load_store_unit] |
---|
180 | uint32_t * nb_load_queue_bank ,//[nb_load_store_unit] |
---|
181 | uint32_t * nb_port_check ,//[nb_load_store_unit] |
---|
182 | Tspeculative_load_t * speculative_load ,//[nb_load_store_unit] |
---|
183 | Tpredictor_t * speculative_commit_predictor_scheme ,//[nb_load_store_unit] |
---|
184 | uint32_t ** lsu_pht_size_counter ,//[nb_load_store_unit][1] |
---|
185 | uint32_t ** lsu_pht_nb_counter ,//[nb_load_store_unit][1] |
---|
186 | uint32_t * nb_bypass_memory ,//[nb_load_store_unit] |
---|
187 | uint32_t * nb_cache_port ,//[nb_load_store_unit] |
---|
188 | uint32_t * nb_inst_memory ,//[nb_load_store_unit] |
---|
189 | |
---|
190 | uint32_t * nb_inst_write ,//[nb_write_unit] |
---|
191 | uint32_t * size_write_queue ,//[nb_write_unit] |
---|
192 | uint32_t * size_execute_queue ,//[nb_write_unit] |
---|
193 | uint32_t * nb_bypass_write ,//[nb_write_unit] |
---|
194 | multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t * write_queue_scheme,//[nb_write_unit] |
---|
195 | |
---|
196 | uint32_t nb_gpr_bank , |
---|
197 | uint32_t nb_gpr_port_read_by_bank , |
---|
198 | uint32_t nb_gpr_port_write_by_bank , |
---|
199 | uint32_t nb_spr_bank , |
---|
200 | uint32_t nb_spr_port_read_by_bank , |
---|
201 | uint32_t nb_spr_port_write_by_bank , |
---|
202 | uint32_t * nb_general_register ,//[nb_ooo_engine] |
---|
203 | uint32_t * nb_special_register ,//[nb_ooo_engine] |
---|
204 | // uint32_t * nb_inst_insert_rob ,//[nb_ooo_engine] |
---|
205 | // uint32_t * nb_inst_retire_rob ,//[nb_ooo_engine] |
---|
206 | |
---|
207 | Tpriority_t execution_unit_to_write_unit_priority , |
---|
208 | bool *** execution_unit_to_write_unit_table_routing ,//[nb_execute_unit][nb_execute_unit_port][nb_write_unit] |
---|
209 | bool ** execution_unit_to_write_unit_table_thread ,//[nb_write_unit][nb_thread] |
---|
210 | |
---|
211 | Tpriority_t read_unit_to_execution_unit_priority , |
---|
212 | bool *** read_unit_to_execution_unit_table_routing ,//[nb_read_unit][nb_execute_unit][nb_execute_unit_port] |
---|
213 | bool ** read_unit_to_execution_unit_table_thread ,//[nb_execute_unit][nb_thread] |
---|
214 | |
---|
215 | bool * is_load_store_unit ,//[nb_execute_unit] |
---|
216 | uint32_t * translate_num_execute_unit ,//[nb_execute_unit] |
---|
217 | |
---|
218 | bool * num_thread_valid ,//[nb_thread] |
---|
219 | |
---|
220 | bool is_toplevel=false |
---|
221 | ); |
---|
222 | // public : Parameters (Parameters & param) ; |
---|
223 | public : ~Parameters (void) ; |
---|
224 | |
---|
225 | public : void copy (void); |
---|
226 | |
---|
227 | public : Parameters_test msg_error (void); |
---|
228 | |
---|
229 | public : std::string print (uint32_t depth); |
---|
230 | public : friend std::ostream& operator<< (std::ostream& output_stream, |
---|
231 | morpheo::behavioural::core::multi_execute_loop::execute_loop::Parameters & x); |
---|
232 | }; |
---|
233 | |
---|
234 | }; // end namespace execute_loop |
---|
235 | }; // end namespace multi_execute_loop |
---|
236 | }; // end namespace core |
---|
237 | |
---|
238 | }; // end namespace behavioural |
---|
239 | }; // end namespace morpheo |
---|
240 | |
---|
241 | #endif |
---|