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

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 42.0 KB
Line 
1/*
2 * $Id: Register_unit_allocation.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/Register_unit.h"
9
10namespace morpheo {
11namespace behavioural {
12namespace core {
13namespace multi_execute_loop {
14namespace execute_loop {
15namespace register_unit {
16
17#undef  FUNCTION
18#define FUNCTION "Register_unit::allocation"
19  void Register_unit::allocation (
20#ifdef STATISTICS
21                                  morpheo::behavioural::Parameters_Statistics * param_statistics
22#else
23                                  void
24#endif
25                                  )
26  {
27    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
28
29    _component   = new Component (_usage);
30
31    Entity * entity = _component->set_entity (_name       
32                                              ,"Register_unit"
33#ifdef POSITION
34                                              ,COMBINATORY
35#endif
36                                              );
37
38    _interfaces = entity->set_interfaces();
39
40    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41
42    Interface * interface = _interfaces->set_interface(""
43#ifdef POSITION
44                                                       ,IN
45                                                       ,SOUTH,
46                                                       "Generalist interface"
47#endif
48                                                       );
49
50    in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
51    in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
52
53    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
54    in_GPR_READ_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_gpr_read];
55    out_GPR_READ_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_read];
56    if (_param->_have_port_ooo_engine_id == true)
57      in_GPR_READ_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_gpr_read];
58    in_GPR_READ_NUM_REG             = new SC_IN (Tgeneral_address_t)   * [_param->_nb_gpr_read];
59    out_GPR_READ_DATA                = new SC_OUT(Tgeneral_data_t   )   * [_param->_nb_gpr_read];
60    out_GPR_READ_DATA_VAL            = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_read];
61     
62    for (uint32_t i=0; i<_param->_nb_gpr_read; i++)
63      {
64        Interface_fifo * interface = _interfaces->set_interface("gpr_read_"+toString(i)
65#ifdef POSITION
66                                                                ,IN
67                                                                ,NORTH
68                                                                ,"Interface to read the register file"
69#endif
70                                                                );
71         
72        in_GPR_READ_VAL           [i]= interface->set_signal_valack_in  (VAL);
73        out_GPR_READ_ACK           [i]= interface->set_signal_valack_out (ACK);
74        if (_param->_have_port_ooo_engine_id == true)
75          in_GPR_READ_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , _param->_size_ooo_engine_id);
76        in_GPR_READ_NUM_REG       [i]= interface->set_signal_in <Tgeneral_address_t> ("num_reg"       , _param->_size_gpr_address);
77        out_GPR_READ_DATA          [i]= interface->set_signal_out<Tgeneral_data_t   > ("data"          , _param->_size_general_data);
78        out_GPR_READ_DATA_VAL      [i]= interface->set_signal_out<Tcontrol_t        > ("data_val"      , 1);
79      }
80
81    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
82    in_GPR_WRITE_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_gpr_write];
83    out_GPR_WRITE_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_write];
84    if (_param->_have_port_ooo_engine_id == true)
85      in_GPR_WRITE_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_gpr_write];
86    in_GPR_WRITE_NUM_REG             = new SC_IN (Tgeneral_address_t)   * [_param->_nb_gpr_write];
87    in_GPR_WRITE_DATA                = new SC_IN (Tgeneral_data_t   )   * [_param->_nb_gpr_write];
88     
89    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
90      {
91        Interface_fifo * interface = _interfaces->set_interface("gpr_write_"+toString(i)
92#ifdef POSITION
93                                                                ,IN
94                                                                ,NORTH,
95                                                                "Interface to write the register file"
96#endif
97                                                                );
98         
99        in_GPR_WRITE_VAL           [i]= interface->set_signal_valack_in  (VAL);
100        out_GPR_WRITE_ACK           [i]= interface->set_signal_valack_out (ACK);
101        if (_param->_have_port_ooo_engine_id == true)
102          in_GPR_WRITE_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , _param->_size_ooo_engine_id);
103        in_GPR_WRITE_NUM_REG       [i]= interface->set_signal_in <Tgeneral_address_t> ("num_reg"       , _param->_size_gpr_address);
104        in_GPR_WRITE_DATA          [i]= interface->set_signal_in <Tgeneral_data_t   > ("data"          , _param->_size_general_data);
105      }
106
107    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
108    in_SPR_READ_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_spr_read];
109    out_SPR_READ_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_read];
110    if (_param->_have_port_ooo_engine_id == true)
111      in_SPR_READ_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_spr_read];
112    in_SPR_READ_NUM_REG             = new SC_IN (Tspecial_address_t)   * [_param->_nb_spr_read];
113    out_SPR_READ_DATA                = new SC_OUT(Tspecial_data_t   )   * [_param->_nb_spr_read];
114    out_SPR_READ_DATA_VAL            = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_read];
115     
116    for (uint32_t i=0; i<_param->_nb_spr_read; i++)
117      {
118        Interface_fifo * interface = _interfaces->set_interface("spr_read_"+toString(i)
119#ifdef POSITION
120                                                                ,IN
121                                                                ,NORTH,
122                                                                "Interface to read the register file"
123#endif
124                                                                );
125         
126        in_SPR_READ_VAL           [i]= interface->set_signal_valack_in  (VAL);
127        out_SPR_READ_ACK           [i]= interface->set_signal_valack_out (ACK);
128        if (_param->_have_port_ooo_engine_id == true)
129          in_SPR_READ_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , _param->_size_ooo_engine_id);
130        in_SPR_READ_NUM_REG       [i]= interface->set_signal_in <Tspecial_address_t> ("num_reg"       , _param->_size_spr_address);
131        out_SPR_READ_DATA          [i]= interface->set_signal_out<Tspecial_data_t   > ("data"          , _param->_size_special_data);
132        out_SPR_READ_DATA_VAL      [i]= interface->set_signal_out<Tcontrol_t        > ("data_val"      , 1);
133      }
134
135    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
136    in_SPR_WRITE_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_spr_write];
137    out_SPR_WRITE_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_write];
138    if (_param->_have_port_ooo_engine_id == true)
139      in_SPR_WRITE_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_spr_write];
140    in_SPR_WRITE_NUM_REG             = new SC_IN (Tspecial_address_t)   * [_param->_nb_spr_write];
141    in_SPR_WRITE_DATA                = new SC_IN (Tspecial_data_t   )   * [_param->_nb_spr_write];
142     
143    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
144      {
145        Interface_fifo * interface = _interfaces->set_interface("spr_write_"+toString(i)
146#ifdef POSITION
147                                                                ,IN
148                                                                ,NORTH,
149                                                                "Interface to write the register file"
150#endif
151                                                                );
152         
153        in_SPR_WRITE_VAL           [i]= interface->set_signal_valack_in  (VAL);
154        out_SPR_WRITE_ACK           [i]= interface->set_signal_valack_out (ACK);
155        if (_param->_have_port_ooo_engine_id == true)
156          in_SPR_WRITE_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , _param->_size_ooo_engine_id);
157        in_SPR_WRITE_NUM_REG       [i]= interface->set_signal_in <Tspecial_address_t> ("num_reg"       , _param->_size_spr_address);
158        in_SPR_WRITE_DATA          [i]= interface->set_signal_in <Tspecial_data_t   > ("data"          , _param->_size_special_data);
159      }
160
161    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
162    in_INSERT_ROB_VAL        = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
163    out_INSERT_ROB_ACK        = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
164    in_INSERT_ROB_RD_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
165    in_INSERT_ROB_RD_NUM_REG = new SC_IN (Tgeneral_address_t)  ** [_param->_nb_ooo_engine];
166    in_INSERT_ROB_RE_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
167    in_INSERT_ROB_RE_NUM_REG = new SC_IN (Tspecial_address_t)  ** [_param->_nb_ooo_engine];
168
169    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
170      {
171        uint32_t x=_param->_nb_inst_insert_rob [i];
172
173        in_INSERT_ROB_VAL        [i] = new SC_IN (Tcontrol_t        )  * [x];
174        out_INSERT_ROB_ACK        [i] = new SC_OUT(Tcontrol_t        )  * [x];
175        in_INSERT_ROB_RD_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
176        in_INSERT_ROB_RD_NUM_REG [i] = new SC_IN (Tgeneral_address_t)  * [x];
177        in_INSERT_ROB_RE_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
178        in_INSERT_ROB_RE_NUM_REG [i] = new SC_IN (Tspecial_address_t)  * [x];
179
180        for (uint32_t j=0; j<x; j++)
181          {
182            Interface_fifo * interface = _interfaces->set_interface("insert_rob_"+toString(i)+"_"+toString(j)
183#ifdef POSITION
184                                                                    ,IN
185                                                                    ,WEST
186                                                                    ,"Interface to update status (insert)"
187#endif
188                                                                    );
189
190
191            in_INSERT_ROB_VAL        [i][j] = interface->set_signal_valack_in  (VAL);
192            out_INSERT_ROB_ACK        [i][j] = interface->set_signal_valack_out (ACK);
193            in_INSERT_ROB_RD_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("rd_use"    , 1);
194            in_INSERT_ROB_RD_NUM_REG [i][j] = interface->set_signal_in <Tgeneral_address_t> ("rd_num_reg", _param->_size_gpr_address);
195            in_INSERT_ROB_RE_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("re_use"    , 1);
196            in_INSERT_ROB_RE_NUM_REG [i][j] = interface->set_signal_in <Tspecial_address_t> ("re_num_reg", _param->_size_spr_address);
197             
198          }
199      }
200
201//     // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
202//     in_RETIRE_ROB_VAL            = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
203//     out_RETIRE_ROB_ACK            = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
204//     in_RETIRE_ROB_RD_OLD_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
205//     in_RETIRE_ROB_RD_OLD_NUM_REG = new SC_IN (Tgeneral_address_t)  ** [_param->_nb_ooo_engine];
206//     in_RETIRE_ROB_RE_OLD_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
207//     in_RETIRE_ROB_RE_OLD_NUM_REG = new SC_IN (Tspecial_address_t)  ** [_param->_nb_ooo_engine];
208//     in_RETIRE_ROB_RD_NEW_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
209//     in_RETIRE_ROB_RD_NEW_NUM_REG = new SC_IN (Tgeneral_address_t)  ** [_param->_nb_ooo_engine];
210//     in_RETIRE_ROB_RE_NEW_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
211//     in_RETIRE_ROB_RE_NEW_NUM_REG = new SC_IN (Tspecial_address_t)  ** [_param->_nb_ooo_engine];
212
213//     for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
214//       {
215//      uint32_t x=_param->_nb_inst_retire_rob [i];
216
217//      in_RETIRE_ROB_VAL            [i] = new SC_IN (Tcontrol_t        )  * [x];
218//      out_RETIRE_ROB_ACK            [i] = new SC_OUT(Tcontrol_t        )  * [x];
219//      in_RETIRE_ROB_RD_OLD_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
220//      in_RETIRE_ROB_RD_OLD_NUM_REG [i] = new SC_IN (Tgeneral_address_t)  * [x];
221//      in_RETIRE_ROB_RE_OLD_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
222//      in_RETIRE_ROB_RE_OLD_NUM_REG [i] = new SC_IN (Tspecial_address_t)  * [x];
223//      in_RETIRE_ROB_RD_NEW_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
224//      in_RETIRE_ROB_RD_NEW_NUM_REG [i] = new SC_IN (Tgeneral_address_t)  * [x];
225//      in_RETIRE_ROB_RE_NEW_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
226//      in_RETIRE_ROB_RE_NEW_NUM_REG [i] = new SC_IN (Tspecial_address_t)  * [x];
227
228//      for (uint32_t j=0; j<x; j++)
229//        {
230//          Interface_fifo * interface = _interfaces->set_interface("retire_rob_"+toString(i)+"_"+toString(j)
231// #ifdef POSITION
232//                                                                  ,IN
233//                                                                  ,WEST
234//                                                                  ,"Interface to update status (retire)"
235// #endif
236//                                                                  );
237
238
239//          in_RETIRE_ROB_VAL            [i][j] = interface->set_signal_valack_in  (VAL);
240//         out_RETIRE_ROB_ACK            [i][j] = interface->set_signal_valack_out (ACK);
241//          in_RETIRE_ROB_RD_OLD_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("rd_old_use"    , 1);
242//          in_RETIRE_ROB_RD_OLD_NUM_REG [i][j] = interface->set_signal_in <Tgeneral_address_t> ("rd_old_num_reg", _param->_size_gpr_address);
243//          in_RETIRE_ROB_RE_OLD_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("re_old_use"    , 1);
244//          in_RETIRE_ROB_RE_OLD_NUM_REG [i][j] = interface->set_signal_in <Tspecial_address_t> ("re_old_num_reg", _param->_size_spr_address);
245//          in_RETIRE_ROB_RD_NEW_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("rd_new_use"    , 1);
246//          in_RETIRE_ROB_RD_NEW_NUM_REG [i][j] = interface->set_signal_in <Tgeneral_address_t> ("rd_new_num_reg", _param->_size_gpr_address);
247//          in_RETIRE_ROB_RE_NEW_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("re_new_use"    , 1);
248//          in_RETIRE_ROB_RE_NEW_NUM_REG [i][j] = interface->set_signal_in <Tspecial_address_t> ("re_new_num_reg", _param->_size_spr_address);
249//        }
250//       }
251
252    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
253
254    std::string name;
255     
256    component_gpr        = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
257    component_gpr_status = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
258    component_spr        = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
259    component_spr_status = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
260     
261    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
262      {
263        name = _name+"_gpr_"+toString(i);
264        log_printf(INFO,Register_unit,FUNCTION,_("Create   : %s"),name.c_str());
265
266        component_gpr        [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile
267          (name.c_str()
268#ifdef STATISTICS
269           ,param_statistics
270#endif
271           ,_param->_param_gpr [i]
272           ,_usage
273           );
274         
275        _component->set_component (component_gpr[i]->_component
276#ifdef POSITION
277                                   , 50
278                                   , 50
279                                   , 10
280                                   , 10
281#endif
282                                   );
283
284
285        name = _name+"_gpr_status_"+toString(i);
286        log_printf(INFO,Register_unit,FUNCTION,_("Create   : %s"),name.c_str());
287
288        component_gpr_status [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile
289          (name.c_str()
290#ifdef STATISTICS
291           ,param_statistics
292#endif
293           ,_param->_param_gpr_status [i]
294           ,_usage
295           );
296
297        _component->set_component (component_gpr_status[i]->_component
298#ifdef POSITION
299                                   , 50
300                                   , 50
301                                   , 10
302                                   , 10
303#endif
304                                   );
305
306
307        name = _name+"_spr_"+toString(i);
308        log_printf(INFO,Register_unit,FUNCTION,_("Create   : %s"),name.c_str());
309         
310        component_spr        [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile
311          (name.c_str()
312#ifdef STATISTICS
313           ,param_statistics
314#endif
315           ,_param->_param_spr [i]
316           ,_usage
317           );
318
319        _component->set_component (component_spr[i]->_component
320#ifdef POSITION
321                                   , 50
322                                   , 50
323                                   , 10
324                                   , 10
325#endif
326                                   );
327
328        name = _name+"_spr_status_"+toString(i);
329        log_printf(INFO,Register_unit,FUNCTION,_("Create   : %s"),name.c_str());
330
331        component_spr_status [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile
332          (name.c_str()
333#ifdef STATISTICS
334           ,param_statistics
335#endif
336           ,_param->_param_spr_status [i]
337           ,_usage
338           );
339
340        _component->set_component (component_spr_status[i]->_component
341#ifdef POSITION
342                                   , 50
343                                   , 50
344                                   , 10
345                                   , 10
346#endif
347                                   );
348      }
349
350
351    name = _name+"_glue";
352    log_printf(INFO,Register_unit,FUNCTION,_("Create   : %s"),name.c_str());
353     
354    component_glue       = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Register_unit_Glue::Register_unit_Glue     
355      (name.c_str()
356#ifdef STATISTICS
357       ,param_statistics
358#endif
359       ,_param->_param_glue
360       ,_usage
361       );
362
363    _component->set_component (component_glue->_component
364#ifdef POSITION
365                               , 50
366                               , 50
367                               , 10
368                               , 10
369#endif
370                               );
371     
372    // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
373    std::string name_component;
374   
375    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
376      {
377        name_component = _name+"_gpr_"+toString(i);
378       
379        log_printf(INFO,Register_unit,FUNCTION,_("Instance : %s"),name_component.c_str());
380       
381#ifdef POSITION
382        _component->interface_map (name_component,"",
383                                   _name         ,"");
384#endif
385       
386        _component->port_map(name_component,"in_CLOCK"   , _name, "in_CLOCK");
387        _component->port_map(name_component,"in_NRESET"  , _name, "in_NRESET");
388
389        for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
390          {
391            _component->port_map(name_component,
392                                 "in_READ_"+toString(j)+"_VAL",
393                                 _name+"_glue",
394                                 "out_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
395            _component->port_map(name_component,
396                                 "out_READ_"+toString(j)+"_ACK",
397                                 _name+"_glue",
398                                 "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
399            _component->port_map(name_component,
400                                 "out_READ_"+toString(j)+"_DATA",
401                                 _name+"_glue",
402                                 "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA");
403            _component->port_map(name_component,
404                                 "in_READ_"+toString(j)+"_ADDRESS",
405                                 _name,
406                                 "in_GPR_READ_"+toString(j)+"_NUM_REG");
407          }
408        for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
409          {
410            _component->port_map(name_component,
411                                 "in_WRITE_"+toString(j)+"_VAL",
412                                 _name+"_glue",
413                                 "out_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
414            _component->port_map(name_component,
415                                 "out_WRITE_"+toString(j)+"_ACK",
416                                 _name+"_glue",
417                                 "in_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
418            _component->port_map(name_component,
419                                 "in_WRITE_"+toString(j)+"_ADDRESS",
420                                 _name,
421                                 "in_GPR_WRITE_"+toString(j)+"_NUM_REG"
422                                 );
423            _component->port_map(name_component,
424                                 "in_WRITE_"+toString(j)+"_DATA",
425                                 _name,
426                                 "in_GPR_WRITE_"+toString(j)+"_DATA");
427          }
428
429      }// gpr
430   
431    {
432      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
433        {
434          name_component = _name+"_gpr_status_"+toString(i);
435         
436          log_printf(INFO,Register_unit,FUNCTION,_("Instance : %s"),name_component.c_str());
437         
438#ifdef POSITION
439          _component->interface_map (name_component,"",
440                                     _name         ,"");
441#endif
442         
443          _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
444          _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
445         
446          for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
447            {
448              _component->port_map(name_component,
449                                   "in_READ_"+toString(j)+"_VAL" ,
450                                   _name+"_glue",
451                                   "out_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        );
452              _component->port_map(name_component,
453                                   "out_READ_"+toString(j)+"_ACK",
454                                   _name+"_glue",
455                                   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
456              _component->port_map(name_component,
457                                   "out_READ_"+toString(j)+"_DATA",
458                                   _name+"_glue",
459                                   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   );
460              _component->port_map(name_component,
461                                   "in_READ_"+toString(j)+"_ADDRESS",
462                                   _name,
463                                   "in_GPR_READ_"+toString(j)+"_NUM_REG");
464            }
465
466          uint32_t x=0;
467          for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
468            {
469              _component->port_map(name_component,
470                                   "in_WRITE_"+toString(x)+"_VAL" ,
471                                   _name+"_glue",
472                                   "out_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
473              _component->port_map(name_component,
474                                   "out_WRITE_"+toString(x)+"_ACK",
475                                   _name+"_glue",
476                                   "in_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
477              _component->port_map(name_component,
478                                   "in_WRITE_"+toString(x)+"_DATA" ,
479                                   _name+"_glue",
480                                   "out_CONST_1");
481
482              _component->port_map(_name+"_glue",
483                                   "out_CONST_1",
484                                   name_component,
485                                   "in_WRITE_"+toString(x)+"_DATA" );
486
487
488              _component->port_map(name_component,
489                                   "in_WRITE_"+toString(x++)+"_ADDRESS",
490                                   _name,
491                                   "in_GPR_WRITE_"+toString(j)+"_NUM_REG");
492            }
493         
494          for (uint32_t j=0; j<_param->_nb_inst_insert_rob [i]; j++)
495            {
496              _component->port_map(name_component,
497                                   "in_WRITE_"+toString(x)+"_VAL" ,
498                                   _name+"_glue",
499                                   "out_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
500              _component->port_map(name_component,
501                                   "out_WRITE_"+toString(x)+"_ACK",
502                                   _name+"_glue",
503                                   "in_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
504
505              _component->port_map(name_component,
506                                   "in_WRITE_"+toString(x)+"_DATA",
507                                    _name+"_glue",
508                                   "out_CONST_0"
509                                   );
510              _component->port_map( _name+"_glue",
511                                    "out_CONST_0",
512                                    name_component,
513                                   "in_WRITE_"+toString(x)+"_DATA");
514
515              _component->port_map(name_component,
516                                   "in_WRITE_"+toString(x++)+"_ADDRESS",
517                                   _name,
518                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RD_NUM_REG");
519
520            }
521
522//        for (uint32_t j=0; j<_param->_nb_inst_retire_rob [i]; j++)
523//          {
524//            _component->port_map(name_component,
525//                                 "in_WRITE_"+toString(x)+"_VAL" ,
526//                                 _name+"_glue",
527//                                 "out_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL");
528//            _component->port_map(name_component,
529//                                 "out_WRITE_"+toString(x)+"_ACK",
530//                                 _name+"_glue",
531//                                 "in_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK" );
532
533//            _component->port_map(name_component,
534//                                 "in_WRITE_"+toString(x)+"_DATA" ,
535//                                 _name+"_glue",
536//                                 "out_CONST_0");
537//            _component->port_map(_name+"_glue",
538//                                 "out_CONST_0",
539//                                 name_component,
540//                                 "in_WRITE_"+toString(x)+"_DATA" );
541
542//            _component->port_map(name_component,
543//                                 "in_WRITE_"+toString(x++)+"_ADDRESS",
544//                                 _name,
545//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_OLD_NUM_REG");
546             
547//            _component->port_map(name_component,
548//                                 "in_WRITE_"+toString(x)+"_VAL" ,
549//                                 _name+"_glue",
550//                                 "out_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL");
551//            _component->port_map(name_component,
552//                                 "out_WRITE_"+toString(x)+"_ACK",
553//                                 _name+"_glue",
554//                                 "in_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK" );
555
556//            _component->port_map(name_component,
557//                                 "in_WRITE_"+toString(x)+"_DATA" ,
558//                                 _name+"_glue",
559//                                 "out_CONST_1"
560//                                 );
561//            _component->port_map(_name+"_glue",
562//                                 "out_CONST_1",
563//                                 name_component,
564//                                 "in_WRITE_"+toString(x)+"_DATA"
565//                                 );
566
567//            _component->port_map(name_component,
568//                                 "in_WRITE_"+toString(x++)+"_ADDRESS",
569//                                 _name,
570//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_NEW_NUM_REG");
571//          }
572
573        }
574    }// gpr_status
575
576    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
577      {
578        name_component = _name+"_spr_"+toString(i);
579       
580        log_printf(INFO,Register_unit,FUNCTION,_("Instance : %s"),name_component.c_str());
581       
582#ifdef POSITION
583        _component->interface_map (name_component,"",
584                                   _name         ,"");
585#endif
586       
587        _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
588        _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
589
590        for (uint32_t j=0; j<_param->_nb_spr_read; j++)
591          {
592            _component->port_map(name_component,
593                                 "in_READ_"+toString(j)+"_VAL",
594                                 _name+"_glue",
595                                 "out_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
596            _component->port_map(name_component,
597                                 "out_READ_"+toString(j)+"_ACK",
598                                 _name+"_glue",
599                                 "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
600            _component->port_map(name_component,
601                                 "out_READ_"+toString(j)+"_DATA",
602                                 _name+"_glue",
603                                 "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA");
604            _component->port_map(name_component,
605                                 "in_READ_"+toString(j)+"_ADDRESS",
606                                 _name,
607                                 "in_SPR_READ_"+toString(j)+"_NUM_REG");
608          }
609        for (uint32_t j=0; j<_param->_nb_spr_write; j++)
610          {
611            _component->port_map(name_component,
612                                 "in_WRITE_"+toString(j)+"_VAL",
613                                 _name+"_glue",
614                                 "out_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
615            _component->port_map(name_component,
616                                 "out_WRITE_"+toString(j)+"_ACK",
617                                 _name+"_glue",
618                                 "in_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
619            _component->port_map(name_component,
620                                 "in_WRITE_"+toString(j)+"_ADDRESS",
621                                 _name,
622                                 "in_SPR_WRITE_"+toString(j)+"_NUM_REG"
623                                 );
624            _component->port_map(name_component,
625                                 "in_WRITE_"+toString(j)+"_DATA",
626                                 _name,
627                                 "in_SPR_WRITE_"+toString(j)+"_DATA");
628          }
629
630      }// spr
631   
632    {
633      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
634        {
635          name_component = _name+"_spr_status_"+toString(i);
636         
637          log_printf(INFO,Register_unit,FUNCTION,_("Instance : %s"),name_component.c_str());   
638 
639#ifdef POSITION
640          _component->interface_map (name_component,"",
641                                     _name         ,"");
642#endif
643         
644          _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
645          _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
646         
647          for (uint32_t j=0; j<_param->_nb_spr_read; j++)
648            {
649              _component->port_map(name_component,
650                                   "in_READ_"+toString(j)+"_VAL" ,
651                                   _name+"_glue",
652                                   "out_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        );
653              _component->port_map(name_component,
654                                   "out_READ_"+toString(j)+"_ACK",
655                                   _name+"_glue",
656                                   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
657              _component->port_map(name_component,
658                                   "out_READ_"+toString(j)+"_DATA",
659                                   _name+"_glue",
660                                   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   );
661              _component->port_map(name_component,
662                                   "in_READ_"+toString(j)+"_ADDRESS",
663                                   _name,
664                                   "in_SPR_READ_"+toString(j)+"_NUM_REG");
665            }
666
667          uint32_t x=0;
668          for (uint32_t j=0; j<_param->_nb_spr_write; j++)
669            {
670              _component->port_map(name_component,
671                                   "in_WRITE_"+toString(x)+"_VAL" ,
672                                   _name+"_glue",
673                                   "out_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
674              _component->port_map(name_component,
675                                   "out_WRITE_"+toString(x)+"_ACK",
676                                   _name+"_glue",
677                                   "in_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
678              _component->port_map(name_component,
679                                   "in_WRITE_"+toString(x)+"_DATA" ,
680                                   _name+"_glue",
681                                   "out_CONST_1");
682              _component->port_map(_name+"_glue",
683                                   "out_CONST_1",
684                                   name_component,
685                                   "in_WRITE_"+toString(x)+"_DATA"
686                                   );
687
688              _component->port_map(name_component,
689                                   "in_WRITE_"+toString(x++)+"_ADDRESS",
690                                   _name,
691                                   "in_SPR_WRITE_"+toString(j)+"_NUM_REG");
692            }
693         
694          for (uint32_t j=0; j<_param->_nb_inst_insert_rob [i]; j++)
695            {
696              _component->port_map(name_component,
697                                   "in_WRITE_"+toString(x)+"_VAL" ,
698                                   _name+"_glue",
699                                   "out_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
700              _component->port_map(name_component,
701                                   "out_WRITE_"+toString(x)+"_ACK",
702                                   _name+"_glue",
703                                   "in_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
704
705              _component->port_map(name_component,
706                                   "in_WRITE_"+toString(x)+"_DATA",
707                                    _name+"_glue",
708                                   "out_CONST_0"
709                                   );
710              _component->port_map( _name+"_glue",
711                                    "out_CONST_0",
712                                   name_component,
713                                   "in_WRITE_"+toString(x)+"_DATA"
714                                   );
715
716              _component->port_map(name_component,
717                                   "in_WRITE_"+toString(x++)+"_ADDRESS",
718                                   _name,
719                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RE_NUM_REG");
720
721            }
722
723//        for (uint32_t j=0; j<_param->_nb_inst_retire_rob [i]; j++)
724//          {
725//            _component->port_map(name_component,
726//                                 "in_WRITE_"+toString(x)+"_VAL" ,
727//                                 _name+"_glue",
728//                                 "out_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL");
729//            _component->port_map(name_component,
730//                                 "out_WRITE_"+toString(x)+"_ACK",
731//                                 _name+"_glue",
732//                                 "in_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK" );
733
734//            _component->port_map(name_component,
735//                                 "in_WRITE_"+toString(x)+"_DATA" ,
736//                                 _name+"_glue",
737//                                 "out_CONST_0");
738//            _component->port_map(_name+"_glue",
739//                                 "out_CONST_0",
740//                                 name_component,
741//                                 "in_WRITE_"+toString(x)+"_DATA"
742//                                 );
743
744//            _component->port_map(name_component,
745//                                 "in_WRITE_"+toString(x++)+"_ADDRESS",
746//                                 _name,
747//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_OLD_NUM_REG");
748             
749//            _component->port_map(name_component,
750//                                 "in_WRITE_"+toString(x)+"_VAL" ,
751//                                 _name+"_glue",
752//                                 "out_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL");
753//            _component->port_map(name_component,
754//                                 "out_WRITE_"+toString(x)+"_ACK",
755//                                 _name+"_glue",
756//                                 "in_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK" );
757
758//            _component->port_map(name_component,
759//                                 "in_WRITE_"+toString(x)+"_DATA" ,
760//                                 _name+"_glue",
761//                                 "out_CONST_1"
762//                                 );
763//            _component->port_map(_name+"_glue",
764//                                 "out_CONST_1",
765//                                 name_component,
766//                                 "in_WRITE_"+toString(x)+"_DATA"
767//                                 );
768
769//            _component->port_map(name_component,
770//                                 "in_WRITE_"+toString(x++)+"_ADDRESS",
771//                                 _name,
772//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_NEW_NUM_REG");
773//          }
774
775        }
776    }// spr_status
777
778    {
779      name_component = _name+"_glue";
780     
781      log_printf(INFO,Register_unit,FUNCTION,_("Instance : %s"),name_component.c_str()); 
782   
783#ifdef POSITION
784      _component->interface_map (name_component,"",
785                                 _name         ,"");
786#endif
787   
788      _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK" );
789      _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
790//       _component->port_map(name_component,"out_CONST_0",_name,"out_CONST_0");
791//       _component->port_map(name_component,"out_CONST_1",_name,"out_CONST_1");
792
793      for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
794        {
795          _component->port_map(name_component,
796                               "in_GPR_READ_"+toString(j)+"_VAL",
797                               _name, 
798                               "in_GPR_READ_"+toString(j)+"_VAL");
799          _component->port_map(name_component,
800                               "out_GPR_READ_"+toString(j)+"_ACK",
801                               _name,
802                               "out_GPR_READ_"+toString(j)+"_ACK"           );
803          if (_param->_have_port_ooo_engine_id == true)
804            _component->port_map(name_component,
805                                 "in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID" , 
806                                 _name,
807                                 "in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID");
808          _component->port_map(name_component,
809                               "out_GPR_READ_"+toString(j)+"_DATA"          , 
810                               _name,
811                               "out_GPR_READ_"+toString(j)+"_DATA");
812          _component->port_map(name_component,
813                               "out_GPR_READ_"+toString(j)+"_DATA_VAL"      , 
814                               _name,
815                               "out_GPR_READ_"+toString(j)+"_DATA_VAL");
816
817          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
818            {
819              _component->port_map(name_component ,
820                                   "out_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL",
821                                   _name+"_gpr_"+toString(i),
822                                   "in_READ_"+toString(j)+"_VAL"  );
823              _component->port_map(name_component,
824                                   "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
825                                   _name+"_gpr_"+toString(i),
826                                   "out_READ_"+toString(j)+"_ACK" );
827              _component->port_map(name_component,
828                                   "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA" ,
829                                   _name+"_gpr_"+toString(i),
830                                   "out_READ_"+toString(j)+"_DATA");
831              _component->port_map(name_component,
832                                   "out_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
833                                   _name+"_gpr_status_"+toString(i),
834                                   "in_READ_"+toString(j)+"_VAL" );
835              _component->port_map(name_component,
836                                   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" ,
837                                   _name+"_gpr_status_"+toString(i),
838                                   "out_READ_"+toString(j)+"_ACK");
839              _component->port_map(name_component,
840                                   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   ,
841                                   _name+"_gpr_status_"+toString(i),
842                                   "out_READ_"+toString(j)+"_DATA");
843            }
844        }
845
846      for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
847        {
848          _component->port_map(name_component,
849                               "in_GPR_WRITE_"+toString(j)+"_VAL",
850                               _name, 
851                               "in_GPR_WRITE_"+toString(j)+"_VAL"           );
852          _component->port_map(name_component,
853                               "out_GPR_WRITE_"+toString(j)+"_ACK", 
854                               _name,
855                               "out_GPR_WRITE_"+toString(j)+"_ACK"           );
856          if (_param->_have_port_ooo_engine_id == true)
857            _component->port_map(name_component,
858                                 "in_GPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID", 
859                                 _name,
860                                 "in_GPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID" );
861         
862          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
863            {
864              _component->port_map(name_component,
865                                   "out_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL"  ,
866                                   _name+"_gpr_"+toString(i),
867                                   "in_WRITE_"+toString(j)+"_VAL" );
868              _component->port_map(name_component,
869                                   "in_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
870                                   _name+"_gpr_"+toString(i),
871                                   "out_WRITE_"+toString(j)+"_ACK" );
872              _component->port_map(name_component,
873                                   "out_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
874                                   _name+"_gpr_status_"+toString(i),
875                                   "in_WRITE_"+toString(j)+"_VAL" );
876              _component->port_map(name_component,
877                                   "in_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK"        ,
878                                   _name+"_gpr_status_"+toString(i),
879                                   "out_WRITE_"+toString(j)+"_ACK" );
880            }
881        }
882     
883      for (uint32_t j=0; j<_param->_nb_spr_read; j++)
884        {
885          _component->port_map(name_component,
886                               "in_SPR_READ_"+toString(j)+"_VAL",
887                               _name, 
888                               "in_SPR_READ_"+toString(j)+"_VAL");
889          _component->port_map(name_component,
890                               "out_SPR_READ_"+toString(j)+"_ACK",
891                               _name,
892                               "out_SPR_READ_"+toString(j)+"_ACK"           );
893          if (_param->_have_port_ooo_engine_id == true)
894            _component->port_map(name_component,
895                                 "in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID" , 
896                                 _name,
897                                 "in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID");
898          _component->port_map(name_component,
899                               "out_SPR_READ_"+toString(j)+"_DATA"          , 
900                               _name,
901                               "out_SPR_READ_"+toString(j)+"_DATA");
902          _component->port_map(name_component,
903                               "out_SPR_READ_"+toString(j)+"_DATA_VAL"      , 
904                               _name,
905                               "out_SPR_READ_"+toString(j)+"_DATA_VAL");
906
907          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
908            {
909              _component->port_map(name_component ,
910                                   "out_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL",
911                                   _name+"_spr_"+toString(i),
912                                   "in_READ_"+toString(j)+"_VAL"  );
913              _component->port_map(name_component,
914                                   "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
915                                   _name+"_spr_"+toString(i),
916                                   "out_READ_"+toString(j)+"_ACK" );
917              _component->port_map(name_component,
918                                   "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA" ,
919                                   _name+"_spr_"+toString(i),
920                                   "out_READ_"+toString(j)+"_DATA");
921              _component->port_map(name_component,
922                                   "out_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
923                                   _name+"_spr_status_"+toString(i),
924                                   "in_READ_"+toString(j)+"_VAL" );
925              _component->port_map(name_component,
926                                   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" ,
927                                   _name+"_spr_status_"+toString(i),
928                                   "out_READ_"+toString(j)+"_ACK");
929              _component->port_map(name_component,
930                                   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   ,
931                                   _name+"_spr_status_"+toString(i),
932                                   "out_READ_"+toString(j)+"_DATA");
933            }
934        }
935
936      for (uint32_t j=0; j<_param->_nb_spr_write; j++)
937        {
938          _component->port_map(name_component,
939                               "in_SPR_WRITE_"+toString(j)+"_VAL",
940                               _name, 
941                               "in_SPR_WRITE_"+toString(j)+"_VAL"           );
942          _component->port_map(name_component,
943                               "out_SPR_WRITE_"+toString(j)+"_ACK", 
944                               _name,
945                               "out_SPR_WRITE_"+toString(j)+"_ACK"           );
946          if (_param->_have_port_ooo_engine_id == true)
947            _component->port_map(name_component,
948                                 "in_SPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID", 
949                                 _name,
950                                 "in_SPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID" );
951         
952          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
953            {
954              _component->port_map(name_component,
955                                   "out_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL"  ,
956                                   _name+"_spr_"+toString(i),
957                                   "in_WRITE_"+toString(j)+"_VAL" );
958              _component->port_map(name_component,
959                                   "in_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
960                                   _name+"_spr_"+toString(i),
961                                   "out_WRITE_"+toString(j)+"_ACK" );
962              _component->port_map(name_component,
963                                   "out_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
964                                   _name+"_spr_status_"+toString(i),
965                                   "in_WRITE_"+toString(j)+"_VAL" );
966              _component->port_map(name_component,
967                                   "in_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK"        ,
968                                   _name+"_spr_status_"+toString(i),
969                                   "out_WRITE_"+toString(j)+"_ACK" );
970            }
971        }
972
973      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
974        {
975          uint32_t x     =_param->_nb_inst_insert_rob [i];
976          uint32_t gpr_j = _param->_nb_gpr_write;
977          uint32_t spr_j = _param->_nb_spr_write;
978
979          for (uint32_t j=0; j<x; j++)
980            {
981              _component->port_map(name_component,
982                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_VAL",
983                                   _name,
984                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_VAL");
985              _component->port_map(name_component,
986                                   "out_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_ACK",
987                                   _name,
988                                   "out_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_ACK");
989              _component->port_map(name_component,
990                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RD_USE",
991                                   _name,
992                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RD_USE");
993              _component->port_map(name_component,
994                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RE_USE",
995                                   _name,
996                                   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RE_USE");
997              _component->port_map(name_component,
998                                   "out_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL",
999                                   _name+"_gpr_status_"+toString(i),
1000                                   "in_WRITE_"+toString(gpr_j)+"_VAL");
1001              _component->port_map(name_component,
1002                                   "in_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK",
1003                                   _name+"_gpr_status_"+toString(i),
1004                                   "out_WRITE_"+toString(gpr_j++)+"_ACK");
1005              _component->port_map(name_component,
1006                                   "out_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL",
1007                                   _name+"_spr_status_"+toString(i),
1008                                   "in_WRITE_"+toString(spr_j)+"_VAL");
1009              _component->port_map(name_component,
1010                                   "in_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK",
1011                                   _name+"_spr_status_"+toString(i),
1012                                   "out_WRITE_"+toString(spr_j++)+"_ACK");
1013            }
1014        }
1015
1016//       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
1017//      {
1018//        uint32_t x     =_param->_nb_inst_retire_rob [i];
1019//        uint32_t gpr_j = _param->_nb_gpr_write + _param->_nb_inst_insert_rob [i];
1020//        uint32_t spr_j = _param->_nb_spr_write + _param->_nb_inst_insert_rob [i];
1021
1022//        for (uint32_t j=0; j<x; j++)
1023//          {
1024//            _component->port_map(name_component,
1025//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL",
1026//                                 _name,
1027//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL");
1028//            _component->port_map(name_component,
1029//                                 "out_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_ACK",
1030//                                 _name,
1031//                                 "out_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_ACK");
1032//            _component->port_map(name_component,
1033//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_OLD_USE",
1034//                                 _name,
1035//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_OLD_USE");
1036//            _component->port_map(name_component,
1037//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_NEW_USE",
1038//                                 _name,
1039//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_NEW_USE");
1040//            _component->port_map(name_component,
1041//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_OLD_USE",
1042//                                 _name,
1043//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_OLD_USE");
1044//            _component->port_map(name_component,
1045//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_NEW_USE",
1046//                                 _name,
1047//                                 "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_NEW_USE");
1048           
1049//            _component->port_map(name_component,
1050//                                 "out_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL",
1051//                                 _name+"_gpr_status_"+toString(i),
1052//                                 "in_WRITE_"+toString(gpr_j)+"_VAL");
1053//            _component->port_map(name_component,
1054//                                 "in_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK",
1055//                                 _name+"_gpr_status_"+toString(i),
1056//                                 "out_WRITE_"+toString(gpr_j++)+"_ACK");
1057//            _component->port_map(name_component,
1058//                                 "out_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL",
1059//                                 _name+"_gpr_status_"+toString(i),
1060//                                 "in_WRITE_"+toString(gpr_j)+"_VAL");
1061//            _component->port_map(name_component,
1062//                                 "in_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK",
1063//                                 _name+"_gpr_status_"+toString(i),
1064//                                 "out_WRITE_"+toString(gpr_j++)+"_ACK");
1065//            _component->port_map(name_component,
1066//                                 "out_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL",
1067//                                 _name+"_spr_status_"+toString(i),
1068//                                 "in_WRITE_"+toString(spr_j)+"_VAL");
1069//            _component->port_map(name_component,
1070//                                 "in_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK",
1071//                                 _name+"_spr_status_"+toString(i),
1072//                                 "out_WRITE_"+toString(spr_j++)+"_ACK");
1073//            _component->port_map(name_component,
1074//                                 "out_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL",
1075//                                 _name+"_spr_status_"+toString(i),
1076//                                 "in_WRITE_"+toString(spr_j)+"_VAL");
1077//            _component->port_map(name_component,
1078//                                 "in_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK",
1079//                                 _name+"_spr_status_"+toString(i),
1080//                                 "out_WRITE_"+toString(spr_j++)+"_ACK");
1081//          }
1082//      }
1083    }// glue
1084
1085#if DEBUG_Register_unit == true
1086    _component->test_map ();
1087#endif
1088
1089#ifdef POSITION
1090    if (usage_is_set(_usage,USE_POSITION))
1091      _component->generate_file();
1092#endif
1093
1094//     std::cout << *_component << std::endl;
1095
1096    log_printf(FUNC,Register_unit,FUNCTION,"End");
1097  };
1098
1099}; // end namespace register_unit
1100}; // end namespace execute_loop
1101}; // end namespace multi_execute_loop
1102}; // end namespace core
1103
1104}; // end namespace behavioural
1105}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.