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

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

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