source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Configuration/src/Instance_fromInternalStructure.cpp @ 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: 38.4 KB
Line 
1/*
2 * $Id: Instance_fromInternalStructure.cpp 136 2009-10-20 18:52:15Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Configuration/include/Instance.h"
9#include "Behavioural/include/Allocation.h"
10#include "Common/include/FromString.h"
11
12namespace morpheo {
13namespace behavioural {
14namespace configuration {
15
16#undef  FUNCTION
17#define FUNCTION "Instance::fromInternalStructure"
18  void Instance::fromInternalStructure (void)
19  {
20    //-----------------------------------------------------
21    // Common
22    //-----------------------------------------------------
23  //log_printf(INFO,Configuration,FUNCTION,_("COMMON"));
24
25    _param->_size_general_data   = fromString<uint32_t>(getParam("size_data"          , ""));
26    _param->_size_special_data   = SIZE_SPECIAL_DATA; // Constant
27
28    _param->_nb_thread           = fromString<uint32_t>(getParam("nb_thread"          , ""));
29    _param->_nb_decod_bloc       = fromString<uint32_t>(getParam("nb_decod_bloc"      , ""));
30    _param->_nb_rename_bloc      = fromString<uint32_t>(getParam("nb_rename_bloc"     , ""));
31    _param->_nb_read_bloc        = fromString<uint32_t>(getParam("nb_read_bloc"       , ""));
32    _param->_nb_write_bloc       = fromString<uint32_t>(getParam("nb_write_bloc"      , ""));
33    _param->_nb_load_store_unit  = fromString<uint32_t>(getParam("nb_load_store_unit" , ""));
34    _param->_nb_functionnal_unit = fromString<uint32_t>(getParam("nb_functionnal_unit", ""));
35    _param->_nb_front_end        = fromString<uint32_t>(getParam("nb_front_end"       , ""));
36    _param->_nb_ooo_engine       = fromString<uint32_t>(getParam("nb_ooo_engine"      , ""));
37    _param->_nb_execute_loop     = fromString<uint32_t>(getParam("nb_execute_loop"    , ""));
38
39    //-----------------------------------------------------
40    // Thread
41    //-----------------------------------------------------
42
43    ALLOC1(_param->_size_ifetch_queue,uint32_t,_param->_nb_thread);
44    ALLOC1(_param->_ifetch_queue_scheme           ,morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t
45                                              ,_param->_nb_thread);
46    ALLOC1(_param->_nb_inst_fetch    ,uint32_t,_param->_nb_thread);
47    ALLOC2(_param->_implement_group  ,bool    ,_param->_nb_thread,NB_GROUP);
48    ALLOC1(_param->_ras_size_queue   ,uint32_t,_param->_nb_thread);
49    ALLOC1(_param->_upt_size_queue   ,uint32_t,_param->_nb_thread);
50    ALLOC1(_param->_ufpt_size_queue  ,uint32_t,_param->_nb_thread);
51   
52    for (uint32_t i=0; i<_param->_nb_thread; ++i)
53      {
54      //log_printf(INFO,Configuration,FUNCTION,_("THREAD [%d]"),i);
55
56        _param->_size_ifetch_queue   [i] = fromString<uint32_t>(getParam("size_ifetch_queue"  , "thread",toString(i).c_str(),""));
57        _param->_ifetch_queue_scheme [i] = fromString<morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t> 
58                                                               (getParam("ifetch_queue_scheme", "thread",toString(i).c_str(),""));
59        _param->_nb_inst_fetch       [i] = fromString<uint32_t>(getParam("nb_inst_fetch"      , "thread",toString(i).c_str(),""));
60        _param->_ras_size_queue      [i] = fromString<uint32_t>(getParam("ras_size_queue"     , "thread",toString(i).c_str(),""));
61        _param->_upt_size_queue      [i] = fromString<uint32_t>(getParam("upt_size_queue"     , "thread",toString(i).c_str(),""));
62        _param->_ufpt_size_queue     [i] = fromString<uint32_t>(getParam("ufpt_size_queue"    , "thread",toString(i).c_str(),""));
63
64        // just read !!!
65        try
66          {
67            getParam("nb_group","thread",toString(i).c_str(), "");
68          }
69        catch (morpheo::ErrorMorpheo & error)
70          {
71          }
72
73        for (uint32_t j=0; j<NB_GROUP; ++j)
74          {
75            _param->_implement_group [i][j] = fromString<bool>(getParam("implement_group", 
76                                                                       "thread",toString(i).c_str(),
77                                                                       "group" ,toString(j).c_str(),""));
78          }
79      }
80
81    //-----------------------------------------------------
82    // Decod_bloc
83    //-----------------------------------------------------
84
85    ALLOC1(_param->_size_decod_queue             ,uint32_t         ,_param->_nb_decod_bloc);
86    ALLOC1(_param->_decod_queue_scheme           ,morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t
87                                                                   ,_param->_nb_decod_bloc);
88    ALLOC1(_param->_nb_inst_decod                ,uint32_t         ,_param->_nb_decod_bloc);
89    ALLOC1(_param->_nb_context_select            ,uint32_t         ,_param->_nb_decod_bloc);
90    ALLOC1(_param->_context_select_priority      ,Tpriority_t      ,_param->_nb_decod_bloc);
91    ALLOC1(_param->_context_select_load_balancing,Tload_balancing_t,_param->_nb_decod_bloc);
92
93    for (uint32_t i=0; i<_param->_nb_decod_bloc; ++i)
94      {
95      //log_printf(INFO,Configuration,FUNCTION,_("DECOD_BLOC [%d]"),i);
96
97        _param->_size_decod_queue              [i] = fromString<uint32_t         > (getParam("size_decod_queue"             , "decod_bloc",toString(i).c_str(),""));
98        _param->_decod_queue_scheme            [i] = fromString<morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Tdecod_queue_scheme_t> 
99                                                                                   (getParam("decod_queue_scheme"           , "decod_bloc",toString(i).c_str(),""));
100        _param->_nb_inst_decod                 [i] = fromString<uint32_t         > (getParam("nb_inst_decod"                , "decod_bloc",toString(i).c_str(),""));
101        _param->_nb_context_select             [i] = fromString<uint32_t         > (getParam("nb_context_select"            , "decod_bloc",toString(i).c_str(),""));
102        _param->_context_select_priority       [i] = fromString<Tpriority_t      > (getParam("context_select_priority"      , "decod_bloc",toString(i).c_str(),""));
103        _param->_context_select_load_balancing [i] = fromString<Tload_balancing_t> (getParam("context_select_load_balancing", "decod_bloc",toString(i).c_str(),""));
104      }
105
106    //-----------------------------------------------------
107    // Rename_bloc
108    //-----------------------------------------------------
109
110    ALLOC1(_param->_nb_inst_insert                   ,uint32_t         ,_param->_nb_rename_bloc);
111    ALLOC1(_param->_nb_inst_retire                   ,uint32_t         ,_param->_nb_rename_bloc);
112    ALLOC1(_param->_rename_select_priority           ,Tpriority_t      ,_param->_nb_rename_bloc);
113    ALLOC1(_param->_rename_select_load_balancing     ,Tload_balancing_t,_param->_nb_rename_bloc);
114    ALLOC1(_param->_rename_select_nb_front_end_select,uint32_t         ,_param->_nb_rename_bloc);
115    ALLOC1(_param->_nb_general_register              ,uint32_t         ,_param->_nb_rename_bloc);
116    ALLOC1(_param->_nb_special_register              ,uint32_t         ,_param->_nb_rename_bloc);
117    ALLOC1(_param->_nb_reg_free                      ,uint32_t         ,_param->_nb_rename_bloc);
118    ALLOC1(_param->_nb_rename_unit_bank              ,uint32_t         ,_param->_nb_rename_bloc);
119//     ALLOC1(_param->_size_read_counter                ,uint32_t         ,_param->_nb_rename_bloc);
120
121    for (uint32_t i=0; i<_param->_nb_rename_bloc; ++i)
122      {
123      //log_printf(INFO,Configuration,FUNCTION,_("RENAME_BLOC [%d]"),i);
124
125        _param->_nb_inst_insert                    [i] = fromString<uint32_t         > (getParam("nb_inst_insert"                   , "rename_bloc",toString(i).c_str(),""));
126        _param->_nb_inst_retire                    [i] = fromString<uint32_t         > (getParam("nb_inst_retire"                   , "rename_bloc",toString(i).c_str(),""));
127        _param->_rename_select_priority            [i] = fromString<Tpriority_t      > (getParam("rename_select_priority"           , "rename_bloc",toString(i).c_str(),""));
128        _param->_rename_select_load_balancing      [i] = fromString<Tload_balancing_t> (getParam("rename_select_load_balancing"     , "rename_bloc",toString(i).c_str(),""));
129        _param->_rename_select_nb_front_end_select [i] = fromString<uint32_t         > (getParam("rename_select_nb_front_end_select", "rename_bloc",toString(i).c_str(),""));
130        _param->_nb_general_register               [i] = fromString<uint32_t         > (getParam("nb_general_register"              , "rename_bloc",toString(i).c_str(),""));
131        _param->_nb_special_register               [i] = fromString<uint32_t         > (getParam("nb_special_register"              , "rename_bloc",toString(i).c_str(),""));
132        _param->_nb_reg_free                       [i] = fromString<uint32_t         > (getParam("nb_reg_free"                      , "rename_bloc",toString(i).c_str(),""));
133        _param->_nb_rename_unit_bank               [i] = fromString<uint32_t         > (getParam("nb_rename_unit_bank"              , "rename_bloc",toString(i).c_str(),""));
134//         _param->_size_read_counter                 [i] = fromString<uint32_t         > (getParam("size_read_counter"                , "rename_bloc",toString(i).c_str(),""));
135      }   
136
137    //-----------------------------------------------------
138    // Read_bloc
139    //-----------------------------------------------------
140    ALLOC1(_param->_size_read_queue                   ,uint32_t,_param->_nb_read_bloc);
141    ALLOC1(_param->_size_reservation_station          ,uint32_t,_param->_nb_read_bloc);
142    ALLOC1(_param->_nb_inst_retire_reservation_station,uint32_t,_param->_nb_read_bloc);
143
144    for (uint32_t i=0; i<_param->_nb_read_bloc; ++i)
145      {
146      //log_printf(INFO,Configuration,FUNCTION,_("READ_BLOC [%d]"),i);
147
148        _param->_size_read_queue                    [i] = fromString<uint32_t> (getParam("size_read_queue"                   ,"read_bloc",toString(i).c_str(),""));
149        _param->_size_reservation_station           [i] = fromString<uint32_t> (getParam("size_reservation_station"          ,"read_bloc",toString(i).c_str(),""));
150        _param->_nb_inst_retire_reservation_station [i] = fromString<uint32_t> (getParam("nb_inst_retire_reservation_station","read_bloc",toString(i).c_str(),""));
151      }   
152
153    //-----------------------------------------------------
154    // Write_bloc
155    //-----------------------------------------------------
156    ALLOC1(_param->_size_write_queue  ,uint32_t,_param->_nb_write_bloc);
157    ALLOC1(_param->_size_execute_queue,uint32_t,_param->_nb_write_bloc);
158    ALLOC1(_param->_nb_bypass_write   ,uint32_t,_param->_nb_write_bloc);
159    ALLOC1(_param->_write_queue_scheme,core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t,_param->_nb_write_bloc);
160
161    for (uint32_t i=0; i<_param->_nb_write_bloc; ++i)
162      {
163      //log_printf(INFO,Configuration,FUNCTION,_("WRITE_BLOC [%d]"),i);
164
165        _param->_size_write_queue   [i] = fromString<uint32_t> (getParam("size_write_queue"  ,"write_bloc",toString(i).c_str(),""));
166        _param->_size_execute_queue [i] = fromString<uint32_t> (getParam("size_execute_queue","write_bloc",toString(i).c_str(),""));
167        _param->_nb_bypass_write    [i] = fromString<uint32_t> (getParam("nb_bypass_write"   ,"write_bloc",toString(i).c_str(),""));
168        _param->_write_queue_scheme [i] = fromString<core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Twrite_queue_scheme_t> (getParam("write_queue_scheme","write_bloc",toString(i).c_str(),""));
169      }   
170
171    //-----------------------------------------------------
172    // load_store_unit
173    //-----------------------------------------------------
174    ALLOC1(_param->_size_store_queue             ,uint32_t,_param->_nb_load_store_unit);
175    ALLOC1(_param->_size_load_queue              ,uint32_t,_param->_nb_load_store_unit);
176    ALLOC1(_param->_size_speculative_access_queue,uint32_t,_param->_nb_load_store_unit);
177    ALLOC1(_param->_nb_port_check                ,uint32_t,_param->_nb_load_store_unit);
178    ALLOC1(_param->_nb_bypass_memory             ,uint32_t,_param->_nb_load_store_unit);
179    ALLOC1(_param->_nb_cache_port                ,uint32_t,_param->_nb_load_store_unit);
180    ALLOC1(_param->_nb_inst_memory               ,uint32_t,_param->_nb_load_store_unit);
181    ALLOC1(_param->_speculative_load             ,core::multi_execute_loop::execute_loop::Tspeculative_load_t,_param->_nb_load_store_unit);
182
183    for (uint32_t i=0; i<_param->_nb_load_store_unit; ++i)
184      {
185      //log_printf(INFO,Configuration,FUNCTION,_("LOAD_STORE_UNIT [%d]"),i);
186
187        _param->_size_store_queue              [i] = fromString<uint32_t> (getParam("size_store_queue"             ,"load_store_unit",toString(i).c_str(),""));
188        _param->_size_load_queue               [i] = fromString<uint32_t> (getParam("size_load_queue"              ,"load_store_unit",toString(i).c_str(),""));
189        _param->_size_speculative_access_queue [i] = fromString<uint32_t> (getParam("size_speculative_access_queue","load_store_unit",toString(i).c_str(),""));
190        _param->_nb_port_check                 [i] = fromString<uint32_t> (getParam("nb_port_check"                ,"load_store_unit",toString(i).c_str(),""));
191        _param->_nb_bypass_memory              [i] = fromString<uint32_t> (getParam("nb_bypass_memory"             ,"load_store_unit",toString(i).c_str(),""));
192        _param->_nb_cache_port                 [i] = fromString<uint32_t> (getParam("nb_cache_port"                ,"load_store_unit",toString(i).c_str(),""));
193        _param->_nb_inst_memory                [i] = fromString<uint32_t> (getParam("nb_inst_memory"               ,"load_store_unit",toString(i).c_str(),""));
194
195        _param->_speculative_load [i] = fromString<core::multi_execute_loop::execute_loop::Tspeculative_load_t> (getParam("speculative_load","load_store_unit",toString(i).c_str(),""));
196      }   
197
198    //-----------------------------------------------------
199    // functionnal_unit
200    //-----------------------------------------------------
201    ALLOC1(_param->_nb_inst_functionnal_unit,uint32_t,_param->_nb_functionnal_unit);
202    ALLOC3(_param->_timing,core::multi_execute_loop::execute_loop::execute_timing_t,_param->_nb_functionnal_unit,MAX_TYPE,MAX_OPERATION);
203
204    for (uint32_t i=0; i<_param->_nb_functionnal_unit; ++i)
205      {
206      //log_printf(INFO,Configuration,FUNCTION,_("FUNCTIONNAL_UNIT [%d]"),i);
207
208        _param->_nb_inst_functionnal_unit [i] = fromString<uint32_t> (getParam("nb_inst_functionnal_unit","functionnal_unit",toString(i).c_str(),""));
209
210        // just read !!!
211        try
212          {
213            getParam("nb_type","functionnal_unit",toString(i).c_str(), "");
214          }
215        catch (morpheo::ErrorMorpheo & error)
216          {
217          }
218
219        for (uint32_t j=0; j<MAX_TYPE; ++j)
220          {
221            // just read !!!
222            try
223              {
224                getParam("nb_operation","functionnal_unit",toString(i).c_str(),"type",toString(j).c_str(), "");
225              }
226            catch (morpheo::ErrorMorpheo & error)
227              {
228              }
229           
230           
231            for (uint32_t k=0; k<MAX_OPERATION; ++k)
232              {
233                if (is_type_valid(j) and (j != TYPE_MEMORY))// A functional unit can't execute memory instruction
234                  {
235                    _param->_timing [i][j][k]._latence = fromString<uint32_t> (getParam("latence",
236                                                                                        "functionnal_unit",toString(i).c_str(),
237                                                                                        "type"            ,toString(j).c_str(),
238                                                                                        "operation"       ,toString(k).c_str(),
239                                                                                        ""));
240                    _param->_timing [i][j][k]._delay   = fromString<uint32_t> (getParam("delay",
241                                                                                        "functionnal_unit",toString(i).c_str(),
242                                                                                        "type"            ,toString(j).c_str(),
243                                                                                        "operation"       ,toString(k).c_str(),
244                                                                                        ""));
245                  }
246                else
247                  {
248                    _param->_timing [i][j][k]._latence = 0;
249                    _param->_timing [i][j][k]._delay   = 0;
250                  }
251              }
252          }
253      }
254
255    //-----------------------------------------------------
256    // icache_port
257    //-----------------------------------------------------
258
259  //log_printf(INFO,Configuration,FUNCTION,_("ICACHE_PORT"));
260
261    _param->_nb_icache_port             = fromString<uint32_t           >(getParam("nb_icache_port"            , ""));
262    _param->_icache_port_priority       = fromString<Tpriority_t        >(getParam("icache_port_priority"      , ""));
263    _param->_icache_port_load_balancing = fromString<Tload_balancing_t  >(getParam("icache_port_load_balancing", ""));
264
265    //-----------------------------------------------------
266    // dcache_port
267    //-----------------------------------------------------
268  //log_printf(INFO,Configuration,FUNCTION,_("DCACHE_PORT"));
269
270    _param->_nb_dcache_port               = fromString<uint32_t         >(getParam("nb_dcache_port"            , ""));
271    _param->_dcache_port_priority       = fromString<Tpriority_t        >(getParam("dcache_port_priority"      , ""));
272    _param->_dcache_port_load_balancing = fromString<Tload_balancing_t  >(getParam("dcache_port_load_balancing", ""));
273
274
275    //-----------------------------------------------------
276    // front_end
277    //-----------------------------------------------------
278    ALLOC1(_param->_nb_context                    ,uint32_t    ,_param->_nb_front_end);
279    ALLOC1(_param->_nb_decod_unit                 ,uint32_t    ,_param->_nb_front_end);
280    ALLOC1(_param->_nb_inst_branch_predict        ,uint32_t    ,_param->_nb_front_end);
281    ALLOC1(_param->_nb_inst_branch_decod          ,uint32_t    ,_param->_nb_front_end);
282    ALLOC1(_param->_nb_inst_branch_update         ,uint32_t    ,_param->_nb_front_end);
283    ALLOC1(_param->_btb_size_queue                ,uint32_t    ,_param->_nb_front_end);
284    ALLOC1(_param->_btb_associativity             ,uint32_t    ,_param->_nb_front_end);
285    ALLOC1(_param->_btb_size_counter              ,uint32_t    ,_param->_nb_front_end);
286    ALLOC1(_param->_btb_victim_scheme             ,Tvictim_t   ,_param->_nb_front_end);
287    ALLOC1(_param->_dir_predictor_scheme          ,Tpredictor_t,_param->_nb_front_end);
288    ALLOC2(_param->_dir_have_bht                  ,bool        ,_param->_nb_front_end,3);
289    ALLOC2(_param->_dir_bht_size_shifter          ,uint32_t    ,_param->_nb_front_end,3);
290    ALLOC2(_param->_dir_bht_nb_shifter            ,uint32_t    ,_param->_nb_front_end,3);
291    ALLOC2(_param->_dir_have_pht                  ,bool        ,_param->_nb_front_end,3);
292    ALLOC2(_param->_dir_pht_size_counter          ,uint32_t    ,_param->_nb_front_end,3);
293    ALLOC2(_param->_dir_pht_nb_counter            ,uint32_t    ,_param->_nb_front_end,3);
294    ALLOC2(_param->_dir_pht_size_address_share    ,uint32_t    ,_param->_nb_front_end,3);
295
296    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
297      {
298      //log_printf(INFO,Configuration,FUNCTION,_("FRONT_END [%d]"),i);
299
300        _param->_nb_context                    [i] = fromString<uint32_t    >(getParam("nb_context"                ,"front_end",toString(i).c_str(), ""));
301        _param->_nb_decod_unit                 [i] = fromString<uint32_t    >(getParam("nb_decod_unit"             ,"front_end",toString(i).c_str(), ""));
302        _param->_nb_inst_branch_predict        [i] = fromString<uint32_t    >(getParam("nb_inst_branch_predict"    ,"front_end",toString(i).c_str(), ""));
303        _param->_nb_inst_branch_decod          [i] = fromString<uint32_t    >(getParam("nb_inst_branch_decod"      ,"front_end",toString(i).c_str(), ""));
304        _param->_nb_inst_branch_update         [i] = fromString<uint32_t    >(getParam("nb_inst_branch_update"     ,"front_end",toString(i).c_str(), ""));
305        _param->_btb_size_queue                [i] = fromString<uint32_t    >(getParam("btb_size_queue"            ,"front_end",toString(i).c_str(), ""));
306        _param->_btb_associativity             [i] = fromString<uint32_t    >(getParam("btb_associativity"         ,"front_end",toString(i).c_str(), ""));
307        _param->_btb_size_counter              [i] = fromString<uint32_t    >(getParam("btb_size_counter"          ,"front_end",toString(i).c_str(), ""));
308        _param->_btb_victim_scheme             [i] = fromString<Tvictim_t   >(getParam("btb_victim_scheme"         ,"front_end",toString(i).c_str(), ""));
309        _param->_dir_predictor_scheme          [i] = fromString<Tpredictor_t>(getParam("dir_predictor_scheme"      ,"front_end",toString(i).c_str(), ""));
310
311        // just read !!!
312        try
313          {
314            getParam("nb_predictor","front_end",toString(i).c_str(), "");
315          }
316        catch (morpheo::ErrorMorpheo & error)
317          {
318          }
319
320        for (uint32_t j=0; j<3; ++j)
321          {
322          //log_printf(INFO,Configuration,FUNCTION,_("PREDICTOR [%d][%d]"),i,j);
323
324        _param->_dir_have_bht               [i][j] = fromString<bool        >(getParam("dir_have_bht"              ,"front_end",toString(i).c_str(),"predictor",toString(j).c_str(), ""));
325        _param->_dir_bht_size_shifter       [i][j] = fromString<uint32_t    >(getParam("dir_bht_size_shifter"      ,"front_end",toString(i).c_str(),"predictor",toString(j).c_str(), ""));
326        _param->_dir_bht_nb_shifter         [i][j] = fromString<uint32_t    >(getParam("dir_bht_nb_shifter"        ,"front_end",toString(i).c_str(),"predictor",toString(j).c_str(), ""));
327        _param->_dir_have_pht               [i][j] = fromString<bool        >(getParam("dir_have_pht"              ,"front_end",toString(i).c_str(),"predictor",toString(j).c_str(), ""));
328        _param->_dir_pht_size_counter       [i][j] = fromString<uint32_t    >(getParam("dir_pht_size_counter"      ,"front_end",toString(i).c_str(),"predictor",toString(j).c_str(), ""));
329        _param->_dir_pht_nb_counter         [i][j] = fromString<uint32_t    >(getParam("dir_pht_nb_counter"        ,"front_end",toString(i).c_str(),"predictor",toString(j).c_str(), ""));
330        _param->_dir_pht_size_address_share [i][j] = fromString<uint32_t    >(getParam("dir_pht_size_address_share","front_end",toString(i).c_str(),"predictor",toString(j).c_str(), ""));
331          }
332      }   
333
334    //-----------------------------------------------------
335    // ooo_engine
336    //-----------------------------------------------------
337
338    ALLOC1(_param->_nb_rename_unit          ,uint32_t         ,_param->_nb_ooo_engine);
339    ALLOC1(_param->_nb_inst_issue           ,uint32_t         ,_param->_nb_ooo_engine);
340    ALLOC1(_param->_nb_inst_reexecute       ,uint32_t         ,_param->_nb_ooo_engine);
341    ALLOC1(_param->_nb_inst_commit          ,uint32_t         ,_param->_nb_ooo_engine);
342    ALLOC1(_param->_nb_inst_branch_complete ,uint32_t         ,_param->_nb_ooo_engine);
343    ALLOC1(_param->_nb_rename_unit_select   ,uint32_t         ,_param->_nb_ooo_engine);
344    ALLOC1(_param->_nb_execute_loop_select  ,uint32_t         ,_param->_nb_ooo_engine);
345    ALLOC1(_param->_size_re_order_buffer    ,uint32_t         ,_param->_nb_ooo_engine);
346    ALLOC1(_param->_nb_re_order_buffer_bank ,uint32_t         ,_param->_nb_ooo_engine);
347    ALLOC1(_param->_commit_priority         ,Tpriority_t      ,_param->_nb_ooo_engine);
348    ALLOC1(_param->_commit_load_balancing   ,Tload_balancing_t,_param->_nb_ooo_engine);
349    ALLOC1(_param->_size_issue_queue        ,uint32_t         ,_param->_nb_ooo_engine);
350    ALLOC1(_param->_issue_queue_scheme      ,morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t
351                                                              ,_param->_nb_ooo_engine);
352    ALLOC1(_param->_nb_issue_queue_bank     ,uint32_t         ,_param->_nb_ooo_engine);
353    ALLOC1(_param->_issue_priority          ,Tpriority_t      ,_param->_nb_ooo_engine);
354    ALLOC1(_param->_issue_load_balancing    ,Tload_balancing_t,_param->_nb_ooo_engine);
355    ALLOC1(_param->_size_reexecute_queue    ,uint32_t         ,_param->_nb_ooo_engine);
356    ALLOC1(_param->_reexecute_priority      ,Tpriority_t      ,_param->_nb_ooo_engine);
357    ALLOC1(_param->_reexecute_load_balancing,Tload_balancing_t,_param->_nb_ooo_engine);
358
359    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
360      {
361      //log_printf(INFO,Configuration,FUNCTION,_("OOO_ENGINE [%d]"),i);
362
363        _param->_nb_rename_unit          [i] = fromString<uint32_t         >(getParam("nb_rename_unit"          ,"ooo_engine",toString(i).c_str(), ""));
364        _param->_nb_inst_issue           [i] = fromString<uint32_t         >(getParam("nb_inst_issue"           ,"ooo_engine",toString(i).c_str(), ""));
365        _param->_nb_inst_reexecute       [i] = fromString<uint32_t         >(getParam("nb_inst_reexecute"       ,"ooo_engine",toString(i).c_str(), ""));
366        _param->_nb_inst_commit          [i] = fromString<uint32_t         >(getParam("nb_inst_commit"          ,"ooo_engine",toString(i).c_str(), ""));
367        _param->_nb_inst_branch_complete [i] = fromString<uint32_t         >(getParam("nb_inst_branch_complete" ,"ooo_engine",toString(i).c_str(), ""));
368        _param->_nb_rename_unit_select   [i] = fromString<uint32_t         >(getParam("nb_rename_unit_select"   ,"ooo_engine",toString(i).c_str(), ""));
369        _param->_nb_execute_loop_select  [i] = fromString<uint32_t         >(getParam("nb_execute_loop_select"  ,"ooo_engine",toString(i).c_str(), ""));
370        _param->_size_re_order_buffer    [i] = fromString<uint32_t         >(getParam("size_re_order_buffer"    ,"ooo_engine",toString(i).c_str(), ""));
371        _param->_nb_re_order_buffer_bank [i] = fromString<uint32_t         >(getParam("nb_re_order_buffer_bank" ,"ooo_engine",toString(i).c_str(), ""));
372        _param->_commit_priority         [i] = fromString<Tpriority_t      >(getParam("commit_priority"         ,"ooo_engine",toString(i).c_str(), ""));
373        _param->_commit_load_balancing   [i] = fromString<Tload_balancing_t>(getParam("commit_load_balancing"   ,"ooo_engine",toString(i).c_str(), ""));
374        _param->_size_issue_queue        [i] = fromString<uint32_t         >(getParam("size_issue_queue"        ,"ooo_engine",toString(i).c_str(), ""));
375        _param->_issue_queue_scheme      [i] = fromString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t>
376                                                                            (getParam("issue_queue_scheme"      ,"ooo_engine",toString(i).c_str(), ""));
377        _param->_nb_issue_queue_bank     [i] = fromString<uint32_t         >(getParam("nb_issue_queue_bank"     ,"ooo_engine",toString(i).c_str(), ""));
378        _param->_issue_priority          [i] = fromString<Tpriority_t      >(getParam("issue_priority"          ,"ooo_engine",toString(i).c_str(), ""));
379        _param->_issue_load_balancing    [i] = fromString<Tload_balancing_t>(getParam("issue_load_balancing"    ,"ooo_engine",toString(i).c_str(), ""));
380        _param->_size_reexecute_queue    [i] = fromString<uint32_t         >(getParam("size_reexecute_queue"    ,"ooo_engine",toString(i).c_str(), ""));
381        _param->_reexecute_priority      [i] = fromString<Tpriority_t      >(getParam("reexecute_priority"      ,"ooo_engine",toString(i).c_str(), ""));
382        _param->_reexecute_load_balancing[i] = fromString<Tload_balancing_t>(getParam("reexecute_load_balancing","ooo_engine",toString(i).c_str(), ""));
383      }   
384
385    //-----------------------------------------------------
386    // execute_loop
387    //-----------------------------------------------------
388   
389    ALLOC1(_param->_nb_read_unit                         ,uint32_t   ,_param->_nb_execute_loop);
390    ALLOC1(_param->_nb_execute_unit                      ,uint32_t   ,_param->_nb_execute_loop);
391    ALLOC1(_param->_nb_write_unit                        ,uint32_t   ,_param->_nb_execute_loop);
392    ALLOC1(_param->_nb_gpr_bank                          ,uint32_t   ,_param->_nb_execute_loop);
393    ALLOC1(_param->_nb_gpr_port_read_by_bank             ,uint32_t   ,_param->_nb_execute_loop);
394    ALLOC1(_param->_nb_gpr_port_write_by_bank            ,uint32_t   ,_param->_nb_execute_loop);
395    ALLOC1(_param->_nb_spr_bank                          ,uint32_t   ,_param->_nb_execute_loop);
396    ALLOC1(_param->_nb_spr_port_read_by_bank             ,uint32_t   ,_param->_nb_execute_loop);
397    ALLOC1(_param->_nb_spr_port_write_by_bank            ,uint32_t   ,_param->_nb_execute_loop);
398    ALLOC1(_param->_execution_unit_to_write_unit_priority,Tpriority_t,_param->_nb_execute_loop);
399    ALLOC1(_param->_read_unit_to_execution_unit_priority ,Tpriority_t,_param->_nb_execute_loop);
400
401    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
402      {
403      //log_printf(INFO,Configuration,FUNCTION,_("EXECUTE_LOOP [%d]"),i);
404
405        _param->_nb_read_unit                         [i] = fromString<uint32_t   >(getParam("nb_read_unit"                         ,"execute_loop",toString(i).c_str(), ""));
406        _param->_nb_execute_unit                      [i] = fromString<uint32_t   >(getParam("nb_execute_unit"                      ,"execute_loop",toString(i).c_str(), ""));
407        _param->_nb_write_unit                        [i] = fromString<uint32_t   >(getParam("nb_write_unit"                        ,"execute_loop",toString(i).c_str(), ""));
408        _param->_nb_gpr_bank                          [i] = fromString<uint32_t   >(getParam("nb_gpr_bank"                          ,"execute_loop",toString(i).c_str(), ""));
409        _param->_nb_gpr_port_read_by_bank             [i] = fromString<uint32_t   >(getParam("nb_gpr_port_read_by_bank"             ,"execute_loop",toString(i).c_str(), ""));
410        _param->_nb_gpr_port_write_by_bank            [i] = fromString<uint32_t   >(getParam("nb_gpr_port_write_by_bank"            ,"execute_loop",toString(i).c_str(), ""));
411        _param->_nb_spr_bank                          [i] = fromString<uint32_t   >(getParam("nb_spr_bank"                          ,"execute_loop",toString(i).c_str(), ""));
412        _param->_nb_spr_port_read_by_bank             [i] = fromString<uint32_t   >(getParam("nb_spr_port_read_by_bank"             ,"execute_loop",toString(i).c_str(), ""));
413        _param->_nb_spr_port_write_by_bank            [i] = fromString<uint32_t   >(getParam("nb_spr_port_write_by_bank"            ,"execute_loop",toString(i).c_str(), ""));
414        _param->_execution_unit_to_write_unit_priority[i] = fromString<Tpriority_t>(getParam("execution_unit_to_write_unit_priority","execute_loop",toString(i).c_str(), ""));
415        _param->_read_unit_to_execution_unit_priority [i] = fromString<Tpriority_t>(getParam("read_unit_to_execution_unit_priority" ,"execute_loop",toString(i).c_str(), ""));
416      }   
417
418    //-----------------------------------------------------
419    // Link
420    //-----------------------------------------------------
421
422  //log_printf(INFO,Configuration,FUNCTION,_("LINK"));
423
424    _param->_dispatch_priority       = fromString<Tpriority_t      >(getParam("dispatch_priority"      , ""));
425    _param->_dispatch_load_balancing = fromString<Tload_balancing_t>(getParam("dispatch_load_balancing", ""));
426
427    ALLOC1(_param->_link_context_with_thread               ,pair_dual,_param->_nb_thread);
428    ALLOC1(_param->_link_decod_unit_with_decod_bloc        ,pair_dual,_param->_nb_decod_bloc);
429    ALLOC1(_param->_link_rename_unit_with_rename_bloc      ,pair_dual,_param->_nb_rename_bloc);
430    ALLOC1(_param->_link_read_unit_with_read_bloc          ,pair_dual,_param->_nb_read_bloc);
431    ALLOC1(_param->_link_write_unit_with_write_bloc        ,pair_dual,_param->_nb_write_bloc);
432    ALLOC1(_param->_link_execute_unit_with_functionnal_unit,pair_dual,_param->_nb_functionnal_unit);
433    ALLOC1(_param->_link_execute_unit_with_load_store_unit ,pair_dual,_param->_nb_load_store_unit);
434    ALLOC1(_param->_link_decod_bloc_with_thread            ,uint32_t ,_param->_nb_thread);
435    ALLOC1(_param->_link_rename_bloc_with_front_end        ,uint32_t ,_param->_nb_front_end);
436    ALLOC3(_param->_table_dispatch                         ,bool     ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_nb_read_bloc);
437    ALLOC2(_param->_link_read_bloc_and_load_store_unit     ,bool     ,_param->_nb_read_bloc,_param->_nb_load_store_unit);
438    ALLOC2(_param->_link_read_bloc_and_functionnal_unit    ,bool     ,_param->_nb_read_bloc,_param->_nb_functionnal_unit);
439    ALLOC2(_param->_link_write_bloc_and_load_store_unit    ,bool     ,_param->_nb_write_bloc,_param->_nb_load_store_unit);
440    ALLOC2(_param->_link_write_bloc_and_functionnal_unit   ,bool     ,_param->_nb_write_bloc,_param->_nb_functionnal_unit);
441    ALLOC1(_param->_link_load_store_unit_with_thread       ,uint32_t ,_param->_nb_thread);
442    ALLOC2(_param->_link_thread_and_functionnal_unit       ,bool     ,_param->_nb_thread,_param->_nb_functionnal_unit);
443    ALLOC1(_param->_link_icache_port_with_thread           ,uint32_t ,_param->_nb_thread);
444    ALLOC2(_param->_link_dcache_port_with_load_store_unit  ,uint32_t ,_param->_nb_load_store_unit,_param->_nb_cache_port[it1]);
445
446    std::vector<std::string> dest;
447
448#define getLink_n(x,nb_dest,src...) {dest = getLink(x, src); test(x,dest,nb_dest);}
449#define getLink_2(x,src...) {getLink_n(x,2,src);}
450#define getLink_1(x,src...) {getLink_n(x,1,src);}
451
452    for (uint32_t i=0; i<_param->_nb_thread; ++i)
453      {
454        getLink_2("link_context_with_thread",toString(i).c_str(), "");
455        _param->_link_context_with_thread [i] = pair_dual(fromString<uint32_t>(dest[0]),
456                                                          fromString<uint32_t>(dest[1]));
457       
458        getLink_1("link_decod_bloc_with_thread",toString(i).c_str(), "");
459        _param->_link_decod_bloc_with_thread [i] = fromString<uint32_t>(dest[0]);
460       
461        getLink_1("link_load_store_unit_with_thread",toString(i).c_str(), "");
462        _param->_link_load_store_unit_with_thread [i] = fromString<uint32_t>(dest[0]);
463
464        getLink_1("link_icache_port_with_thread",toString(i).c_str(), "");
465        _param->_link_icache_port_with_thread [i] = fromString<uint32_t>(dest[0]);
466
467        for (uint32_t j=0; j<_param->_nb_functionnal_unit; ++j)
468          {
469            getLink_1("link_thread_and_functionnal_unit",toString(i).c_str(),toString(j).c_str(), "");
470            _param->_link_thread_and_functionnal_unit [i][j] = fromString<bool>(dest[0]);
471          }
472      }
473   
474    for (uint32_t i=0; i<_param->_nb_decod_bloc; ++i)
475      {
476        getLink_2("link_decod_unit_with_decod_bloc",toString(i).c_str(), "");
477        _param->_link_decod_unit_with_decod_bloc [i] = pair_dual(fromString<uint32_t>(dest[0]),
478                                                                fromString<uint32_t>(dest[1]));
479      }
480
481    for (uint32_t i=0; i<_param->_nb_rename_bloc; ++i)
482      {
483        getLink_2("link_rename_unit_with_rename_bloc",toString(i).c_str(), "");
484        _param->_link_rename_unit_with_rename_bloc [i] = pair_dual(fromString<uint32_t>(dest[0]),
485                                                                  fromString<uint32_t>(dest[1]));
486      }
487
488    for (uint32_t i=0; i<_param->_nb_read_bloc; ++i)
489      {
490        getLink_2("link_read_unit_with_read_bloc",toString(i).c_str(), "");
491        _param->_link_read_unit_with_read_bloc [i] = pair_dual(fromString<uint32_t>(dest[0]),
492                                                              fromString<uint32_t>(dest[1]));
493
494        for (uint32_t j=0; j<_param->_nb_functionnal_unit; ++j)
495          {
496            getLink_1("link_read_bloc_and_functionnal_unit",toString(i).c_str(),toString(j).c_str(), "");
497            _param->_link_read_bloc_and_functionnal_unit [i][j] = fromString<bool>(dest[0]);
498          }
499
500        for (uint32_t j=0; j<_param->_nb_load_store_unit; ++j)
501          {
502            getLink_1("link_read_bloc_and_load_store_unit",toString(i).c_str(),toString(j).c_str(), "");
503            _param->_link_read_bloc_and_load_store_unit [i][j] = fromString<bool>(dest[0]);
504          }
505      }
506
507    for (uint32_t i=0; i<_param->_nb_write_bloc; ++i)
508      {
509        getLink_2("link_write_unit_with_write_bloc",toString(i).c_str(), "");
510        _param->_link_write_unit_with_write_bloc [i] = pair_dual(fromString<uint32_t>(dest[0]),
511                                                                fromString<uint32_t>(dest[1]));
512
513        for (uint32_t j=0; j<_param->_nb_functionnal_unit; ++j)
514          {
515            getLink_1("link_write_bloc_and_functionnal_unit",toString(i).c_str(),toString(j).c_str(), "");
516            _param->_link_write_bloc_and_functionnal_unit [i][j] = fromString<bool>(dest[0]);
517          }
518
519        for (uint32_t j=0; j<_param->_nb_load_store_unit; ++j)
520          {
521            getLink_1("link_write_bloc_and_load_store_unit",toString(i).c_str(),toString(j).c_str(), "");
522            _param->_link_write_bloc_and_load_store_unit [i][j] = fromString<bool>(dest[0]);
523          }
524      }
525
526    for (uint32_t i=0; i<_param->_nb_functionnal_unit; ++i)
527      {
528        getLink_2("link_execute_unit_with_functionnal_unit",toString(i).c_str(), "");
529        _param->_link_execute_unit_with_functionnal_unit [i] = pair_dual(fromString<uint32_t>(dest[0]),
530                                                                         fromString<uint32_t>(dest[1]));
531      }
532
533    for (uint32_t i=0; i<_param->_nb_load_store_unit; ++i)
534      {
535        getLink_2("link_execute_unit_with_load_store_unit",toString(i).c_str(), "");
536        _param->_link_execute_unit_with_load_store_unit [i] = pair_dual(fromString<uint32_t>(dest[0]),
537                                                                        fromString<uint32_t>(dest[1]));
538
539        for (uint32_t j=0; j<_param->_nb_cache_port[i]; ++j)
540          {
541            getLink_1("link_dcache_port_with_load_store_unit",toString(i).c_str(),toString(j).c_str(), "");
542            _param->_link_dcache_port_with_load_store_unit [i][j] = fromString<uint32_t>(dest[0]);
543          }
544      }
545
546    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
547      {
548        getLink_1("link_rename_bloc_with_front_end",toString(i).c_str(), "");
549        _param->_link_rename_bloc_with_front_end [i] = fromString<uint32_t>(dest[0]);
550      }
551
552    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
553      for (uint32_t j=0; j<_param->_nb_inst_issue[i]; ++j)
554        for (uint32_t k=0; k<_param->_nb_read_bloc; ++k)
555          {
556            getLink_1("table_dispatch",toString(i).c_str(),toString(j).c_str(),toString(k).c_str(),"");
557            _param->_table_dispatch [i][j][k] = fromString<bool>(dest[0]);
558          }
559
560    test_use ();
561  };
562
563}; // end namespace configuration
564}; // end namespace behavioural
565}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.