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

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

1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme

  • Property svn:keywords set to Id
File size: 10.9 KB
Line 
1/*
2 * $Id: Parameters.cpp 117 2009-05-16 14:42: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_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    for (uint32_t i=0; i<_nb_execute_loop; ++i)
99      for (uint32_t j=0; j<_execute_loop_nb_ooo_engine[i]; ++j)
100        {
101          uint32_t num_ooo_engine  = _translate_execute_loop_num_ooo_engine [i][j];
102          uint32_t execute_loop_id;
103          for (execute_loop_id = 0; execute_loop_id<_ooo_engine_nb_execute_loop[num_ooo_engine]; ++execute_loop_id)
104            if (_translate_ooo_engine_num_execute_loop [num_ooo_engine][execute_loop_id] == i)
105              break;
106         
107          _translate_num_execute_loop_to_ooo_engine_execute_loop_id [i][j] = execute_loop_id;
108        }
109
110    ALLOC2(_execute_loop_nb_inst_insert,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
111    ALLOC2(_execute_loop_nb_inst_issue_slot ,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
112
113    for (uint32_t i=0; i<_nb_execute_loop; ++i)
114      for (uint32_t j=0; j<_execute_loop_nb_ooo_engine[i]; ++j)
115        {
116          uint32_t num_ooo_engine = _translate_execute_loop_num_ooo_engine [i][j];
117          _execute_loop_nb_inst_issue_slot [i][j] = _nb_inst_issue_slot [num_ooo_engine];
118          _execute_loop_nb_inst_insert     [i][j] = _nb_inst_insert     [num_ooo_engine];
119        }
120
121    _max_ooo_engine_nb_inst_branch_complete = max<uint32_t>(_ooo_engine_nb_inst_branch_complete,_nb_ooo_engine);
122    _max_front_end_nb_inst_branch_complete  = max<uint32_t>(_front_end_nb_inst_branch_complete,_nb_front_end);
123    _max_ooo_engine_nb_execute_loop         = max<uint32_t>(_ooo_engine_nb_execute_loop,_nb_ooo_engine);
124    _max_nb_inst_execute                    = max<uint32_t>(_nb_inst_execute           ,_nb_ooo_engine, _ooo_engine_nb_execute_loop);
125    _max_nb_write_unit                      = max<uint32_t>(_nb_write_unit             ,_nb_execute_loop);
126    _max_nb_inst_insert                     = max<uint32_t>(_nb_inst_insert            ,_nb_ooo_engine);
127    _max_nb_inst_issue_queue                = max<uint32_t>(_nb_inst_issue_queue       ,_nb_ooo_engine);
128    _max_nb_inst_issue_slot                 = max<uint32_t>(_nb_inst_issue_slot        ,_nb_ooo_engine);
129    _max_nb_read_unit                       = max<uint32_t>(_nb_read_unit              ,_nb_execute_loop);
130
131    if (is_toplevel)
132      {
133    _size_context_id                       = log2(max<uint32_t>(nb_context,nb_front_end));
134    _size_front_end_id                     = log2(nb_front_end );
135    _size_ooo_engine_id                    = log2(nb_ooo_engine);
136    _size_instruction_address              = size_general_data-2  ;
137    _size_data_address                     = size_general_data    ;
138    _size_general_data                     = size_general_data    ;
139    _size_special_data                     = size_special_data    ;
140    _size_general_register                 = size_general_register;
141    _size_special_register                 = size_special_register;
142    _size_depth                            = size_depth           ;
143    _size_rob_ptr                          = size_rob_ptr         ;
144    _size_load_queue_ptr                   = size_load_queue_ptr  ;
145    _size_store_queue_ptr                  = size_store_queue_ptr ;
146//  _size_nb_inst_decod                    = size_nb_inst_decod   ;
147//  _size_nb_inst_commit                   = size_nb_inst_commit  ;
148//  _size_ifetch_queue_ptr                 = size_ifetch_queue_ptr;
149//  _size_inst_ifetch_ptr                  = size_inst_ifetch_ptr ;
150                                           
151    _have_port_context_id                  = _size_context_id       > 0;
152    _have_port_front_end_id                = _size_front_end_id     > 0;
153    _have_port_ooo_engine_id               = _size_ooo_engine_id    > 0;
154    _have_port_depth                       = _size_depth            > 0;
155    _have_port_rob_ptr                     = _size_rob_ptr          > 0;
156    _have_port_load_queue_ptr              = _size_load_queue_ptr   > 0;
157//  _have_port_ifetch_queue_ptr            = _size_ifetch_queue_ptr > 0;
158//  _have_port_inst_ifetch_ptr             = _size_inst_ifetch_ptr  > 0;
159
160        copy();
161      }
162
163    log_end(Core_Glue,FUNCTION);
164  };
165 
166// #undef  FUNCTION
167// #define FUNCTION "Core_Glue::Parameters (copy)"
168//   Parameters::Parameters (Parameters & param)
169//   {
170//     log_begin(Core_Glue,FUNCTION);
171//     test();
172//     log_end(Core_Glue,FUNCTION);
173//   };
174
175#undef  FUNCTION
176#define FUNCTION "Core_Glue::~Parameters"
177  Parameters::~Parameters (void) 
178  {
179    log_begin(Core_Glue,FUNCTION);
180
181    DELETE2(_execute_loop_nb_inst_issue_slot,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
182    DELETE2(_execute_loop_nb_inst_insert,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
183    DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id, _nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
184    DELETE1(_translate_num_front_end_to_ooo_engine_front_end_id,_nb_front_end);
185    DELETE1(_link_ooo_engine_with_front_end,_nb_front_end);
186
187    log_end(Core_Glue,FUNCTION);
188  };
189
190#undef  FUNCTION
191#define FUNCTION "Core_Glue::copy"
192  void Parameters::copy (void) 
193  {
194    log_begin(Core_Glue,FUNCTION);
195    log_end(Core_Glue,FUNCTION);
196  };
197
198}; // end namespace core_glue
199}; // end namespace core
200
201}; // end namespace behavioural
202}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.