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

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

1) Add soc test
2) fix bug (Pc management, Decod and execute, Update prediction ...)

  • Property svn:keywords set to Id
File size: 11.0 KB
Line 
1/*
2 * $Id: Parameters.cpp 101 2009-01-15 17:19:08Z 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           "1");
108       
109        __param_spr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters
110          (_nb_spr_read              ,
111           _nb_spr_write             ,
112           _nb_special_register[i]   ,
113            size_special_data        ,
114           _nb_spr_bank              ,
115           _nb_spr_port_read_by_bank ,
116           _nb_spr_port_write_by_bank,
117           crossbar                  );
118       
119        __param_spr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters
120          (_nb_spr_read ,
121//         _nb_spr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
122           _nb_spr_write+_nb_inst_insert_rob[i],
123           0,
124           nb_special_register[i],
125           1,
126           "1");         
127       
128        _param_gpr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr        [i]);
129        _param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr_status [i]);
130        _param_spr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr        [i]);
131        _param_spr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr_status [i]);
132      }
133   
134    _param_glue       = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters  (_nb_ooo_engine        ,
135                                                                                                                                           size_general_data    ,
136                                                                                                                                           size_special_data    ,
137                                                                                                                                          _nb_gpr_read          ,
138                                                                                                                                          _nb_spr_read          ,   
139                                                                                                                                          _nb_gpr_write         ,
140                                                                                                                                          _nb_spr_write         ,
141                                                                                                                                          _nb_inst_insert_rob   ,
142                                                                                                                                          _nb_inst_retire_rob   );
143   
144    test();
145   
146    if (is_toplevel)
147      {
148        _size_ooo_engine_id        = log2(nb_ooo_engine);
149        _size_general_data         = size_general_data;
150        _size_special_data         = size_special_data;
151       
152        _have_port_ooo_engine_id   = _size_ooo_engine_id > 0;
153
154        copy();
155      }
156   
157   log_printf(FUNC,Register_unit,FUNCTION,"End");
158  };
159 
160// #undef  FUNCTION
161// #define FUNCTION "Register_unit::Parameters (copy)"
162//   Parameters::Parameters (Parameters & param):
163//     _nb_ooo_engine             (param._nb_ooo_engine            ),
164//     _size_general_data         (param._size_general_data        ),
165//     _size_special_data         (param._size_special_data        ),
166//     _nb_gpr_read               (param._nb_gpr_read              ),
167//     _nb_gpr_write              (param._nb_gpr_write             ),
168//     _nb_gpr_bank               (param._nb_gpr_bank              ),
169//     _nb_gpr_port_read_by_bank  (param._nb_gpr_port_read_by_bank ),
170//     _nb_gpr_port_write_by_bank (param._nb_gpr_port_write_by_bank),
171//     _nb_spr_read               (param._nb_spr_read              ),
172//     _nb_spr_write              (param._nb_spr_write             ),
173//     _nb_spr_bank               (param._nb_spr_bank              ),
174//     _nb_spr_port_read_by_bank  (param._nb_spr_port_read_by_bank ),
175//     _nb_spr_port_write_by_bank (param._nb_spr_port_write_by_bank),
176//     _nb_general_register       (param._nb_general_register      ),
177//     _nb_special_register       (param._nb_special_register      ),
178//     _nb_inst_insert_rob        (param._nb_inst_insert_rob       ),
179//     _nb_inst_retire_rob        (param._nb_inst_retire_rob       ),
180//     _have_port_ooo_engine_id   (param._have_port_ooo_engine_id  )
181//   {
182//     log_printf(FUNC,Register_unit,FUNCTION,"Begin");
183
184//     _size_gpr_address = param._size_gpr_address;
185//     _size_spr_address = param._size_spr_address;
186
187//     __param_gpr        = param.__param_gpr       ;
188//     __param_gpr_status = param.__param_gpr_status;
189//     __param_spr        = param.__param_spr       ;
190//     __param_spr_status = param.__param_spr_status;
191//     _param_gpr         = param._param_gpr       ;
192//     _param_gpr_status  = param._param_gpr_status;
193//     _param_spr         = param._param_spr       ;
194//     _param_spr_status  = param._param_spr_status;
195//     _param_glue        = param._param_glue      ;
196
197//     test();
198//     log_printf(FUNC,Register_unit,FUNCTION,"End");
199//   };
200
201#undef  FUNCTION
202#define FUNCTION "Register_unit::~Parameters"
203  Parameters::~Parameters (void) 
204  {
205    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
206
207    for (uint32_t i=0; i<_nb_ooo_engine; i++)
208      {
209        delete _param_gpr         [i];
210        delete _param_gpr_status  [i];
211        delete _param_spr         [i];
212        delete _param_spr_status  [i];
213        delete __param_gpr        [i];
214        delete __param_gpr_status [i];
215        delete __param_spr        [i];
216        delete __param_spr_status [i];
217      }
218    delete [] _param_gpr        ;
219    delete [] _param_gpr_status ;
220    delete [] _param_spr        ;
221    delete [] _param_spr_status ;
222    delete [] __param_gpr       ;
223    delete [] __param_gpr_status;
224    delete [] __param_spr       ;
225    delete [] __param_spr_status;
226    delete    _param_glue;
227   
228    log_printf(FUNC,Register_unit,FUNCTION,"End");
229  };
230
231#undef  FUNCTION
232#define FUNCTION "Register_unit::copy"
233  void Parameters::copy (void) 
234  {
235    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
236
237    for (uint32_t i=0; i<_nb_ooo_engine; i++)
238      {
239        COPY(__param_gpr        [i]);
240        COPY(__param_gpr_status [i]);
241        COPY(__param_spr        [i]);
242        COPY(__param_spr_status [i]);
243      }
244    COPY(_param_glue);
245   
246    log_printf(FUNC,Register_unit,FUNCTION,"End");
247  };
248
249}; // end namespace register_unit
250}; // end namespace execute_loop
251}; // end namespace multi_execute_loop
252}; // end namespace core
253
254}; // end namespace behavioural
255}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.