source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Parameters.cpp @ 120

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

1) Context_state : Add statistics
2) Add configuration with multi front_end
3) Add optionnal pid at log filename

  • Property svn:keywords set to Id
File size: 11.5 KB
Line 
1/*
2 * $Id: Parameters.cpp 120 2009-05-26 19:01:47Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Core_Glue/include/Parameters.h"
9#include "Behavioural/include/Allocation.h"
10#include "Common/include/Max.h"
11
12namespace morpheo {
13namespace behavioural {
14namespace core {
15namespace core_glue {
16
17
18#undef  FUNCTION
19#define FUNCTION "Core_Glue::Parameters"
20  Parameters::Parameters
21  (uint32_t                nb_front_end                         ,
22   uint32_t              * nb_context                           ,//[nb_front_end]
23   uint32_t                nb_ooo_engine                        ,
24   uint32_t                nb_execute_loop                      ,
25   uint32_t              * ooo_engine_nb_front_end              ,//[nb_ooo_engine]
26   uint32_t              * ooo_engine_nb_execute_loop           ,//[nb_ooo_engine]
27   uint32_t              * execute_loop_nb_ooo_engine           ,//[nb_execute_loop]
28   uint32_t              * nb_inst_decod                        ,//[nb_front_end] -> [sum_inst_decod]
29   uint32_t              * front_end_nb_inst_branch_complete    ,//[nb_front_end]
30   uint32_t              * ooo_engine_nb_inst_branch_complete   ,//[nb_ooo_engine]
31   uint32_t              * nb_inst_insert                       ,//[nb_ooo_engine]
32   uint32_t              * nb_inst_reexecute                    ,//[nb_ooo_engine]
33   uint32_t              * nb_inst_issue_queue                  ,//[nb_ooo_engine]
34   uint32_t              * nb_inst_issue_slot                   ,//[nb_ooo_engine]
35   uint32_t             ** nb_inst_execute                      ,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
36   bool                  * issue_queue_in_order                 ,//[nb_ooo_engine]
37   uint32_t              * nb_read_unit                         ,//[nb_execute_loop]
38   uint32_t              * nb_write_unit                        ,//[nb_execute_loop]
39   uint32_t                size_depth                           ,
40   uint32_t                size_rob_ptr                         ,
41   uint32_t                size_load_queue_ptr                  ,
42   uint32_t                size_store_queue_ptr                 ,
43   uint32_t                size_general_data                    ,
44   uint32_t                size_special_data                    ,
45   uint32_t                size_general_register                ,
46   uint32_t                size_special_register                ,
47   Tpriority_t             dispatch_priority                    ,
48   Tload_balancing_t       dispatch_load_balancing              ,
49   bool               **** table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
50   bool                *** table_issue_type                     ,//                                   [execute_loop][nb_read_unit][nb_type]
51   uint32_t             ** translate_ooo_engine_num_front_end   ,//[nb_ooo_engine][ooo_engine_nb_front_end]
52   uint32_t             ** translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
53   uint32_t             ** translate_execute_loop_num_ooo_engine,//[nb_execute_loop][execute_loop_nb_ooo_engine]
54   bool                    is_toplevel)
55  {
56    log_begin(Core_Glue,FUNCTION);
57
58    _nb_front_end                          = nb_front_end                         ;
59    _nb_context                            = nb_context                           ;
60    _nb_ooo_engine                         = nb_ooo_engine                        ;
61    _nb_execute_loop                       = nb_execute_loop                      ;
62    _ooo_engine_nb_front_end               = ooo_engine_nb_front_end              ;
63    _ooo_engine_nb_execute_loop            = ooo_engine_nb_execute_loop           ;
64    _execute_loop_nb_ooo_engine            = execute_loop_nb_ooo_engine           ;
65    _nb_inst_decod                         = nb_inst_decod                        ;
66    _front_end_nb_inst_branch_complete     = front_end_nb_inst_branch_complete    ;
67    _ooo_engine_nb_inst_branch_complete    = ooo_engine_nb_inst_branch_complete   ;
68    _nb_inst_insert                        = nb_inst_insert                       ;
69    _nb_inst_reexecute                     = nb_inst_reexecute                    ;
70    _nb_inst_issue_queue                   = nb_inst_issue_queue                  ;
71    _nb_inst_issue_slot                    = nb_inst_issue_slot                   ;
72    _nb_inst_execute                       = nb_inst_execute                      ;
73    _issue_queue_in_order                  = issue_queue_in_order                 ;
74    _nb_read_unit                          = nb_read_unit                         ;
75    _nb_write_unit                         = nb_write_unit                        ;
76    _dispatch_priority                     = dispatch_priority                    ;
77    _dispatch_load_balancing               = dispatch_load_balancing              ;
78    _table_dispatch                        = table_dispatch                       ;
79    _table_issue_type                      = table_issue_type                     ;
80    _translate_ooo_engine_num_front_end    = translate_ooo_engine_num_front_end   ;
81    _translate_ooo_engine_num_execute_loop = translate_ooo_engine_num_execute_loop;
82    _translate_execute_loop_num_ooo_engine = translate_execute_loop_num_ooo_engine;
83
84    test();
85
86    ALLOC1(_link_ooo_engine_with_front_end,uint32_t,_nb_front_end);
87    ALLOC1(_translate_num_front_end_to_ooo_engine_front_end_id,uint32_t,_nb_front_end);
88    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
89      for (uint32_t j=0; j<_ooo_engine_nb_front_end[i]; ++j)
90        {
91          uint32_t num_front_end = _translate_ooo_engine_num_front_end [i][j];
92         
93          _link_ooo_engine_with_front_end                     [num_front_end] = i;
94          _translate_num_front_end_to_ooo_engine_front_end_id [num_front_end] = j;
95        }
96
97    ALLOC2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id,uint32_t  ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
98    ALLOC2(_translate_num_ooo_engine_to_execute_loop_ooo_engine_id  ,Tcontext_t,_nb_ooo_engine,_nb_execute_loop);
99
100    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
101      for (uint32_t j=0; j<_nb_execute_loop; ++j)
102        _translate_num_ooo_engine_to_execute_loop_ooo_engine_id [i][j] = _nb_ooo_engine;
103
104    for (uint32_t i=0; i<_nb_execute_loop; ++i)
105      for (uint32_t j=0; j<_execute_loop_nb_ooo_engine[i]; ++j)
106        {
107          uint32_t num_ooo_engine  = _translate_execute_loop_num_ooo_engine [i][j];
108
109          _translate_num_ooo_engine_to_execute_loop_ooo_engine_id [num_ooo_engine][i] = j;
110
111          uint32_t execute_loop_id;
112          for (execute_loop_id = 0; execute_loop_id<_ooo_engine_nb_execute_loop[num_ooo_engine]; ++execute_loop_id)
113            if (_translate_ooo_engine_num_execute_loop [num_ooo_engine][execute_loop_id] == i)
114              break;
115         
116          _translate_num_execute_loop_to_ooo_engine_execute_loop_id [i][j] = execute_loop_id;
117        }
118
119    ALLOC2(_execute_loop_nb_inst_insert,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
120    ALLOC2(_execute_loop_nb_inst_issue_slot ,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
121
122    for (uint32_t i=0; i<_nb_execute_loop; ++i)
123      for (uint32_t j=0; j<_execute_loop_nb_ooo_engine[i]; ++j)
124        {
125          uint32_t num_ooo_engine = _translate_execute_loop_num_ooo_engine [i][j];
126          _execute_loop_nb_inst_issue_slot [i][j] = _nb_inst_issue_slot [num_ooo_engine];
127          _execute_loop_nb_inst_insert     [i][j] = _nb_inst_insert     [num_ooo_engine];
128        }
129
130    _max_ooo_engine_nb_inst_branch_complete = max<uint32_t>(_ooo_engine_nb_inst_branch_complete,_nb_ooo_engine);
131    _max_front_end_nb_inst_branch_complete  = max<uint32_t>(_front_end_nb_inst_branch_complete,_nb_front_end);
132    _max_ooo_engine_nb_execute_loop         = max<uint32_t>(_ooo_engine_nb_execute_loop,_nb_ooo_engine);
133    _max_nb_inst_execute                    = max<uint32_t>(_nb_inst_execute           ,_nb_ooo_engine, _ooo_engine_nb_execute_loop);
134    _max_nb_write_unit                      = max<uint32_t>(_nb_write_unit             ,_nb_execute_loop);
135    _max_nb_inst_insert                     = max<uint32_t>(_nb_inst_insert            ,_nb_ooo_engine);
136    _max_nb_inst_issue_queue                = max<uint32_t>(_nb_inst_issue_queue       ,_nb_ooo_engine);
137    _max_nb_inst_issue_slot                 = max<uint32_t>(_nb_inst_issue_slot        ,_nb_ooo_engine);
138    _max_nb_read_unit                       = max<uint32_t>(_nb_read_unit              ,_nb_execute_loop);
139
140    if (is_toplevel)
141      {
142    _size_context_id                       = log2(max<uint32_t>(nb_context,nb_front_end));
143    _size_front_end_id                     = log2(nb_front_end );
144    _size_ooo_engine_id                    = log2(nb_ooo_engine);
145    _size_instruction_address              = size_general_data-2  ;
146    _size_data_address                     = size_general_data    ;
147    _size_general_data                     = size_general_data    ;
148    _size_special_data                     = size_special_data    ;
149    _size_general_register                 = size_general_register;
150    _size_special_register                 = size_special_register;
151    _size_depth                            = size_depth           ;
152    _size_rob_ptr                          = size_rob_ptr         ;
153    _size_load_queue_ptr                   = size_load_queue_ptr  ;
154    _size_store_queue_ptr                  = size_store_queue_ptr ;
155//  _size_nb_inst_decod                    = size_nb_inst_decod   ;
156//  _size_nb_inst_commit                   = size_nb_inst_commit  ;
157//  _size_ifetch_queue_ptr                 = size_ifetch_queue_ptr;
158//  _size_inst_ifetch_ptr                  = size_inst_ifetch_ptr ;
159                                           
160    _have_port_context_id                  = _size_context_id       > 0;
161    _have_port_front_end_id                = _size_front_end_id     > 0;
162    _have_port_ooo_engine_id               = _size_ooo_engine_id    > 0;
163    _have_port_depth                       = _size_depth            > 0;
164    _have_port_rob_ptr                     = _size_rob_ptr          > 0;
165    _have_port_load_queue_ptr              = _size_load_queue_ptr   > 0;
166//  _have_port_ifetch_queue_ptr            = _size_ifetch_queue_ptr > 0;
167//  _have_port_inst_ifetch_ptr             = _size_inst_ifetch_ptr  > 0;
168
169        copy();
170      }
171
172    log_end(Core_Glue,FUNCTION);
173  };
174 
175// #undef  FUNCTION
176// #define FUNCTION "Core_Glue::Parameters (copy)"
177//   Parameters::Parameters (Parameters & param)
178//   {
179//     log_begin(Core_Glue,FUNCTION);
180//     test();
181//     log_end(Core_Glue,FUNCTION);
182//   };
183
184#undef  FUNCTION
185#define FUNCTION "Core_Glue::~Parameters"
186  Parameters::~Parameters (void) 
187  {
188    log_begin(Core_Glue,FUNCTION);
189
190    DELETE2(_execute_loop_nb_inst_issue_slot                         ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
191    DELETE2(_execute_loop_nb_inst_insert                             ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
192    DELETE2(_translate_num_ooo_engine_to_execute_loop_ooo_engine_id  ,_nb_ooo_engine,_nb_execute_loop);
193    DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
194    DELETE1(_translate_num_front_end_to_ooo_engine_front_end_id      ,_nb_front_end);
195    DELETE1(_link_ooo_engine_with_front_end                          ,_nb_front_end);
196
197    log_end(Core_Glue,FUNCTION);
198  };
199
200#undef  FUNCTION
201#define FUNCTION "Core_Glue::copy"
202  void Parameters::copy (void) 
203  {
204    log_begin(Core_Glue,FUNCTION);
205    log_end(Core_Glue,FUNCTION);
206  };
207
208}; // end namespace core_glue
209}; // end namespace core
210
211}; // end namespace behavioural
212}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.