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

Last change on this file since 138 was 138, checked in by rosiere, 14 years ago

1) add counters_t type for interface
2) fix in check load in load_store_unit
3) add parameters (but not yet implemented)
4) change environment and add script (distcc_env.sh ...)
5) add warning if an unser change rename flag with l.mtspr instruction
6) ...

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