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

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

Almost complete design
with Test and test platform

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