source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Configuration/src/Instance_fromInternalStructure.cpp @ 109

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

1) Configuration : instance configuration file : regroup similar instance
2) Configuration : timing default = 0
3) Debug/Commit_unit : Add watch dog timer
4) Issue_queue : Test parameters : add test if type is optionnal
5) Cor_glue : Fix insert index
6) Free_list : remove bank_by_pop (else deadlock)
7) Update Free List : add register to source event

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