source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters.cpp @ 146

Last change on this file since 146 was 146, checked in by rosiere, 13 years ago

1) Integration of RegisterFile_Internal_Banked in RegisterFile?
2) Erase "read_write" interface in RegisterFile_Monolithic component
3) Add smith predictor parameters in Load_store_pointer_unit.
4) Fix not statistics flags

  • Property svn:keywords set to Id
File size: 10.3 KB
Line 
1/*
2 * $Id: Parameters.cpp 146 2011-02-01 20:57:54Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h"
9
10namespace morpheo {
11namespace behavioural {
12namespace core {
13namespace multi_execute_loop {
14namespace execute_loop {
15namespace register_unit {
16
17
18#undef  FUNCTION
19#define FUNCTION "Register_unit::Parameters"
20  Parameters::Parameters (uint32_t    nb_ooo_engine            ,
21                          uint32_t    size_general_data        ,
22                          uint32_t    size_special_data        ,
23                          uint32_t    nb_gpr_read              ,
24                          uint32_t    nb_gpr_write             ,
25                          uint32_t    nb_gpr_bank              ,
26                          uint32_t    nb_gpr_port_read_by_bank ,
27                          uint32_t    nb_gpr_port_write_by_bank,
28                          uint32_t    nb_spr_read              ,
29                          uint32_t    nb_spr_write             ,
30                          uint32_t    nb_spr_bank              ,
31                          uint32_t    nb_spr_port_read_by_bank ,
32                          uint32_t    nb_spr_port_write_by_bank,
33                          uint32_t  * nb_general_register      ,
34                          uint32_t  * nb_special_register      ,
35                          uint32_t    nb_inst_issue            ,
36//                        uint32_t  * nb_inst_insert_rob       ,
37//                        uint32_t  * nb_inst_retire_rob       ,
38                          bool        is_toplevel              )
39  {
40    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
41
42
43    _nb_ooo_engine             = nb_ooo_engine            ;
44    _nb_gpr_read               = nb_gpr_read              ;
45    _nb_gpr_write              = nb_gpr_write             ;
46    _nb_gpr_bank               = nb_gpr_bank              ;
47    _nb_gpr_port_read_by_bank  = nb_gpr_port_read_by_bank ;
48    _nb_gpr_port_write_by_bank = nb_gpr_port_write_by_bank;
49    _nb_spr_read               = nb_spr_read              ;
50    _nb_spr_write              = nb_spr_write             ;
51    _nb_spr_bank               = nb_spr_bank              ;
52    _nb_spr_port_read_by_bank  = nb_spr_port_read_by_bank ;
53    _nb_spr_port_write_by_bank = nb_spr_port_write_by_bank;
54    _nb_general_register       = nb_general_register      ;
55    _nb_special_register       = nb_special_register      ;
56    _nb_inst_issue             = nb_inst_issue            ;
57//     _nb_inst_insert_rob        = nb_inst_insert_rob       ;
58//     _nb_inst_retire_rob        = nb_inst_retire_rob       ;
59
60    _size_gpr_address = log2(nb_general_register [0]);
61
62    for (uint32_t i=1; i<nb_ooo_engine; i++)
63      {
64        uint32_t new_size = log2(nb_general_register [i]);
65        if (new_size > _size_gpr_address)
66          _size_gpr_address = new_size;
67      }
68
69    _size_spr_address = log2(nb_special_register [0]);
70
71    for (uint32_t i=1; i<nb_ooo_engine; i++)
72      {
73        uint32_t new_size = log2(nb_special_register [i]);
74        if (new_size > _size_spr_address)
75          _size_spr_address = new_size;
76      }
77
78    _param_gpr         = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
79    _param_gpr_status  = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
80    _param_spr         = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
81    _param_spr_status  = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
82   
83    __param_gpr        = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * [_nb_ooo_engine];
84    __param_gpr_status = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * [_nb_ooo_engine];
85    __param_spr        = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * [_nb_ooo_engine];
86    __param_spr_status = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * [_nb_ooo_engine];
87   
88    for (uint32_t i=0; i<_nb_ooo_engine; i++)
89      {
90        Tcrossbar_t crossbar = PARTIAL_CROSSBAR;
91       
92        __param_gpr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters
93          (_nb_gpr_read              ,
94           _nb_gpr_write             ,
95           _nb_general_register[i]   ,
96            size_general_data        ,
97           _nb_gpr_bank              ,
98           _nb_gpr_port_read_by_bank ,
99           _nb_gpr_port_write_by_bank,
100           crossbar                  );
101       
102        __param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters
103          (_nb_gpr_read ,
104//         _nb_gpr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
105//            _nb_gpr_write+_nb_inst_insert_rob[i],
106           _nb_gpr_write+_nb_inst_issue,
107           nb_general_register[i],
108           1,
109           "1");
110       
111        __param_spr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters
112          (_nb_spr_read              ,
113           _nb_spr_write             ,
114           _nb_special_register[i]   ,
115            size_special_data        ,
116           _nb_spr_bank              ,
117           _nb_spr_port_read_by_bank ,
118           _nb_spr_port_write_by_bank,
119           crossbar                  ,
120           "0" // SPR à la différence du GPR doit être initialisé à 0. (F, CY et OV = 0)
121           );
122       
123        __param_spr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters
124          (_nb_spr_read ,
125//         _nb_spr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
126//         _nb_spr_write+_nb_inst_insert_rob[i],
127           _nb_spr_write+_nb_inst_issue,
128           nb_special_register[i],
129           1,
130           "1");         
131       
132        _param_gpr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr        [i]);
133        _param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr_status [i]);
134        _param_spr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr        [i]);
135        _param_spr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr_status [i]);
136      }
137   
138    _param_glue       = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters 
139      (_nb_ooo_engine        ,
140        size_general_data    ,
141        size_special_data    ,
142       _nb_gpr_read          ,
143       _nb_spr_read          ,   
144       _nb_gpr_write         ,
145       _nb_spr_write         ,
146       _nb_inst_issue
147//        _nb_inst_insert_rob   ,
148//        _nb_inst_retire_rob   
149       );
150   
151    test();
152   
153    if (is_toplevel)
154      {
155        _size_ooo_engine_id        = log2(nb_ooo_engine);
156        _size_general_data         = size_general_data;
157        _size_special_data         = size_special_data;
158       
159        _have_port_ooo_engine_id   = _size_ooo_engine_id > 0;
160
161        copy();
162      }
163   
164   log_printf(FUNC,Register_unit,FUNCTION,"End");
165  };
166 
167// #undef  FUNCTION
168// #define FUNCTION "Register_unit::Parameters (copy)"
169//   Parameters::Parameters (Parameters & param):
170//     _nb_ooo_engine             (param._nb_ooo_engine            ),
171//     _size_general_data         (param._size_general_data        ),
172//     _size_special_data         (param._size_special_data        ),
173//     _nb_gpr_read               (param._nb_gpr_read              ),
174//     _nb_gpr_write              (param._nb_gpr_write             ),
175//     _nb_gpr_bank               (param._nb_gpr_bank              ),
176//     _nb_gpr_port_read_by_bank  (param._nb_gpr_port_read_by_bank ),
177//     _nb_gpr_port_write_by_bank (param._nb_gpr_port_write_by_bank),
178//     _nb_spr_read               (param._nb_spr_read              ),
179//     _nb_spr_write              (param._nb_spr_write             ),
180//     _nb_spr_bank               (param._nb_spr_bank              ),
181//     _nb_spr_port_read_by_bank  (param._nb_spr_port_read_by_bank ),
182//     _nb_spr_port_write_by_bank (param._nb_spr_port_write_by_bank),
183//     _nb_general_register       (param._nb_general_register      ),
184//     _nb_special_register       (param._nb_special_register      ),
185//     _nb_inst_insert_rob        (param._nb_inst_insert_rob       ),
186//     _nb_inst_retire_rob        (param._nb_inst_retire_rob       ),
187//     _have_port_ooo_engine_id   (param._have_port_ooo_engine_id  )
188//   {
189//     log_printf(FUNC,Register_unit,FUNCTION,"Begin");
190
191//     _size_gpr_address = param._size_gpr_address;
192//     _size_spr_address = param._size_spr_address;
193
194//     __param_gpr        = param.__param_gpr       ;
195//     __param_gpr_status = param.__param_gpr_status;
196//     __param_spr        = param.__param_spr       ;
197//     __param_spr_status = param.__param_spr_status;
198//     _param_gpr         = param._param_gpr       ;
199//     _param_gpr_status  = param._param_gpr_status;
200//     _param_spr         = param._param_spr       ;
201//     _param_spr_status  = param._param_spr_status;
202//     _param_glue        = param._param_glue      ;
203
204//     test();
205//     log_printf(FUNC,Register_unit,FUNCTION,"End");
206//   };
207
208#undef  FUNCTION
209#define FUNCTION "Register_unit::~Parameters"
210  Parameters::~Parameters (void) 
211  {
212    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
213
214    for (uint32_t i=0; i<_nb_ooo_engine; i++)
215      {
216        delete _param_gpr         [i];
217        delete _param_gpr_status  [i];
218        delete _param_spr         [i];
219        delete _param_spr_status  [i];
220        delete __param_gpr        [i];
221        delete __param_gpr_status [i];
222        delete __param_spr        [i];
223        delete __param_spr_status [i];
224      }
225    delete [] _param_gpr        ;
226    delete [] _param_gpr_status ;
227    delete [] _param_spr        ;
228    delete [] _param_spr_status ;
229    delete [] __param_gpr       ;
230    delete [] __param_gpr_status;
231    delete [] __param_spr       ;
232    delete [] __param_spr_status;
233    delete    _param_glue;
234   
235    log_printf(FUNC,Register_unit,FUNCTION,"End");
236  };
237
238#undef  FUNCTION
239#define FUNCTION "Register_unit::copy"
240  void Parameters::copy (void) 
241  {
242    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
243
244    for (uint32_t i=0; i<_nb_ooo_engine; i++)
245      {
246        COPY(__param_gpr        [i]);
247        COPY(__param_gpr_status [i]);
248        COPY(__param_spr        [i]);
249        COPY(__param_spr_status [i]);
250      }
251    COPY(_param_glue);
252   
253    log_printf(FUNC,Register_unit,FUNCTION,"End");
254  };
255
256}; // end namespace register_unit
257}; // end namespace execute_loop
258}; // end namespace multi_execute_loop
259}; // end namespace core
260
261}; // end namespace behavioural
262}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.