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

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

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