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

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

1) Add test and configuration
2) Fix Bug
3) Add log file in load store unit
4) Fix Bug in environment

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