source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_allocation.cpp @ 145

Last change on this file since 145 was 145, checked in by rosiere, 14 years ago

1) add test with SPECINT2K
2) new config of Selftest
3) modif RAT to support multiple depth_save ... but not finish (need fix Update Prediction Table)
4) add Function_pointer but need fix

  • Property svn:keywords set to Id
File size: 49.8 KB
Line 
1/*
2 * $Id: Register_translation_unit_allocation.cpp 145 2010-10-13 18:15:51Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h"
9#include "Behavioural/include/Allocation.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace rename_unit {
17namespace register_translation_unit {
18
19
20
21#undef  FUNCTION
22#define FUNCTION "Register_translation_unit::allocation"
23  void Register_translation_unit::allocation (
24#ifdef STATISTICS
25                               morpheo::behavioural::Parameters_Statistics * param_statistics
26#else
27                               void
28#endif
29                               )
30  {
31    log_printf(FUNC,Register_translation_unit,FUNCTION,"Begin");
32
33    _component   = new Component (_usage);
34
35    Entity * entity = _component->set_entity (_name       
36                                              ,"Register_translation_unit"
37#ifdef POSITION
38                                              ,COMBINATORY
39#endif
40                                              );
41
42    _interfaces = entity->set_interfaces();
43
44    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45    {
46      Interface * interface = _interfaces->set_interface(""
47#ifdef POSITION
48                                                         ,IN
49                                                         ,SOUTH,
50                                                         "Generalist interface"
51#endif
52                                                         );
53     
54      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
55      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
56    }
57
58    // ~~~~~[ Interface "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59    {
60      ALLOC1_INTERFACE_BEGIN("rename", IN, EAST, _("Instruction with logical register"), _param->_nb_inst_insert);
61
62      ALLOC1_VALACK_IN      ( in_RENAME_VAL           ,VAL);
63      ALLOC1_VALACK_OUT     (out_RENAME_ACK           ,ACK);
64      ALLOC1_SIGNAL_IN      ( in_RENAME_FRONT_END_ID  ,"front_end_id"  ,Tcontext_t        ,_param->_size_front_end_id          );
65      ALLOC1_SIGNAL_IN      ( in_RENAME_CONTEXT_ID    ,"context_id"    ,Tcontext_t        ,_param->_size_context_id            );
66      ALLOC1_SIGNAL_IN_COND ( in_RENAME_DEPTH         ,"depth"         ,Tdepth_t          ,_param->_size_depth                 ,_param->_rat_scheme == RAT_DEPTH_SAVE);
67      ALLOC1_SIGNAL_IN      ( in_RENAME_SAVE_RAT      ,"save_rat"      ,Tcontrol_t        ,1                                   );
68      ALLOC1_SIGNAL_IN      ( in_RENAME_READ_RA       ,"read_ra"       ,Tcontrol_t        ,1                                   );
69      ALLOC1_SIGNAL_IN      ( in_RENAME_NUM_REG_RA_LOG,"num_reg_ra_log",Tgeneral_address_t,_param->_size_general_register_logic);
70      ALLOC1_SIGNAL_IN      ( in_RENAME_READ_RB       ,"read_rb"       ,Tcontrol_t        ,1                                   );
71      ALLOC1_SIGNAL_IN      ( in_RENAME_NUM_REG_RB_LOG,"num_reg_rb_log",Tgeneral_address_t,_param->_size_general_register_logic);
72      ALLOC1_SIGNAL_IN      ( in_RENAME_READ_RC       ,"read_rc"       ,Tcontrol_t        ,1                                   );
73      ALLOC1_SIGNAL_IN      ( in_RENAME_NUM_REG_RC_LOG,"num_reg_rc_log",Tspecial_address_t,_param->_size_special_register_logic);
74      ALLOC1_SIGNAL_IN      ( in_RENAME_WRITE_RD      ,"write_rd"      ,Tcontrol_t        ,1                                   );
75      ALLOC1_SIGNAL_IN      ( in_RENAME_NUM_REG_RD_LOG,"num_reg_rd_log",Tgeneral_address_t,_param->_size_general_register_logic);
76      ALLOC1_SIGNAL_IN      ( in_RENAME_WRITE_RE      ,"write_re"      ,Tcontrol_t        ,1                                   );
77      ALLOC1_SIGNAL_IN      ( in_RENAME_NUM_REG_RE_LOG,"num_reg_re_log",Tspecial_address_t,_param->_size_special_register_logic);
78
79      ALLOC1_INTERFACE_END(_param->_nb_inst_insert);
80    }
81
82    // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83    {
84      ALLOC1_INTERFACE_BEGIN("insert",OUT,WEST , _("Instruction with physical register"), _param->_nb_inst_insert);
85     
86      ALLOC1_VALACK_OUT(out_INSERT_VAL               ,VAL);
87      ALLOC1_VALACK_IN ( in_INSERT_ACK               ,ACK);
88//    ALLOC1_SIGNAL_OUT(out_INSERT_FRONT_END_ID      ,"front_end_id"      ,Tcontext_t        ,_param->_size_front_end_id          );
89//    ALLOC1_SIGNAL_OUT(out_INSERT_CONTEXT_ID        ,"context_id"        ,Tcontext_t        ,_param->_size_context_id            );
90      ALLOC1_SIGNAL_OUT(out_INSERT_READ_RA           ,"read_ra"           ,Tcontrol_t        ,1                                   );
91#ifdef DEBUG
92      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RA_LOG    ,"num_reg_ra_log"    ,Tgeneral_address_t,_param->_size_general_register_logic);
93#endif
94      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RA_PHY    ,"num_reg_ra_phy"    ,Tgeneral_address_t,_param->_size_general_register      );
95      ALLOC1_SIGNAL_OUT(out_INSERT_READ_RB           ,"read_rb"           ,Tcontrol_t        ,1                                   );
96#ifdef DEBUG
97      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RB_LOG    ,"num_reg_rb_log"    ,Tgeneral_address_t,_param->_size_general_register_logic);
98#endif
99      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RB_PHY    ,"num_reg_rb_phy"    ,Tgeneral_address_t,_param->_size_general_register      );
100      ALLOC1_SIGNAL_OUT(out_INSERT_READ_RC           ,"read_rc"           ,Tcontrol_t        ,1                                   );
101#ifdef DEBUG
102      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RC_LOG    ,"num_reg_rc_log"    ,Tspecial_address_t,_param->_size_special_register_logic);
103#endif
104      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RC_PHY    ,"num_reg_rc_phy"    ,Tspecial_address_t,_param->_size_special_register      );
105      ALLOC1_SIGNAL_OUT(out_INSERT_WRITE_RD          ,"write_rd"          ,Tcontrol_t        ,1                                   );
106      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RD_LOG    ,"num_reg_rd_log"    ,Tgeneral_address_t,_param->_size_general_register_logic);
107      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RD_PHY_OLD,"num_reg_rd_phy_old",Tgeneral_address_t,_param->_size_general_register      );
108      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RD_PHY_NEW,"num_reg_rd_phy_new",Tgeneral_address_t,_param->_size_general_register      );
109      ALLOC1_SIGNAL_OUT(out_INSERT_WRITE_RE          ,"write_re"          ,Tcontrol_t        ,1                                   );
110      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RE_LOG    ,"num_reg_re_log"    ,Tspecial_address_t,_param->_size_special_register_logic);
111      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RE_PHY_OLD,"num_reg_re_phy_old",Tspecial_address_t,_param->_size_special_register      );
112      ALLOC1_SIGNAL_OUT(out_INSERT_NUM_REG_RE_PHY_NEW,"num_reg_re_phy_new",Tspecial_address_t,_param->_size_special_register      );
113
114      ALLOC1_INTERFACE_END(_param->_nb_inst_insert);
115    }
116
117    // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118    {
119      ALLOC1_INTERFACE_BEGIN("retire",IN ,NORTH, _("Retire instruction, update renaming structure."), _param->_nb_inst_retire);
120
121      ALLOC1_VALACK_IN ( in_RETIRE_VAL               ,VAL);
122      ALLOC1_VALACK_OUT(out_RETIRE_ACK               ,ACK);
123      ALLOC1_SIGNAL_IN ( in_RETIRE_FRONT_END_ID      ,"front_end_id"      ,Tcontext_t        ,_param->_size_front_end_id          );
124      ALLOC1_SIGNAL_IN ( in_RETIRE_CONTEXT_ID        ,"context_id"        ,Tcontext_t        ,_param->_size_context_id            );
125//    ALLOC1_SIGNAL_IN ( in_RETIRE_READ_RA           ,"read_ra"           ,Tcontrol_t        ,1                                   );
126//    ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RA_PHY    ,"num_reg_ra_phy"    ,Tgeneral_address_t,_param->_size_general_register      );
127//    ALLOC1_SIGNAL_IN ( in_RETIRE_READ_RB           ,"read_rb"           ,Tcontrol_t        ,1                                   );
128//    ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RB_PHY    ,"num_reg_rb_phy"    ,Tgeneral_address_t,_param->_size_general_register      );
129//    ALLOC1_SIGNAL_IN ( in_RETIRE_READ_RC           ,"read_rc"           ,Tcontrol_t        ,1                                   );
130//    ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RC_PHY    ,"num_reg_rc_phy"    ,Tspecial_address_t,_param->_size_special_register      );
131      ALLOC1_SIGNAL_IN ( in_RETIRE_WRITE_RD          ,"write_rd"          ,Tcontrol_t        ,1                                   );
132      ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RD_LOG    ,"num_reg_rd_log"    ,Tgeneral_address_t,_param->_size_general_register_logic);
133      ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RD_PHY_OLD,"num_reg_rd_phy_old",Tgeneral_address_t,_param->_size_general_register      );
134      ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RD_PHY_NEW,"num_reg_rd_phy_new",Tgeneral_address_t,_param->_size_general_register      );
135      ALLOC1_SIGNAL_IN ( in_RETIRE_WRITE_RE          ,"write_re"          ,Tcontrol_t        ,1                                   );
136      ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RE_LOG    ,"num_reg_re_log"    ,Tspecial_address_t,_param->_size_special_register_logic);
137      ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RE_PHY_OLD,"num_reg_re_phy_old",Tspecial_address_t,_param->_size_special_register      );
138      ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RE_PHY_NEW,"num_reg_re_phy_new",Tspecial_address_t,_param->_size_special_register      );
139      ALLOC1_SIGNAL_IN ( in_RETIRE_RESTORE           ,"restore"           ,Tcontrol_t        ,1                                   );
140      ALLOC1_SIGNAL_IN ( in_RETIRE_RESTORE_RD_PHY_OLD,"restore_rd_phy_old",Tcontrol_t        ,1                                   );
141      ALLOC1_SIGNAL_IN ( in_RETIRE_RESTORE_RE_PHY_OLD,"restore_re_phy_old",Tcontrol_t        ,1                                   );
142
143      ALLOC1_INTERFACE_END(_param->_nb_inst_retire);
144    }
145
146    // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
147    {
148      ALLOC2_INTERFACE_BEGIN("retire_event", IN,NORTH, _("Retire event"), _param->_nb_front_end, _param->_nb_context[it1]);
149
150      _ALLOC2_VALACK_IN      ( in_RETIRE_EVENT_VAL           ,VAL,_param->_nb_front_end, _param->_nb_context[it1]);
151      _ALLOC2_VALACK_OUT     (out_RETIRE_EVENT_ACK           ,ACK,_param->_nb_front_end, _param->_nb_context[it1]);
152      _ALLOC2_SIGNAL_IN      ( in_RETIRE_EVENT_STATE      ,"state"             ,Tevent_state_t    ,_param->_size_event_state, _param->_nb_front_end, _param->_nb_context[it1]);
153      _ALLOC2_SIGNAL_IN_COND ( in_RETIRE_EVENT_TYPE       ,"type"              ,Tevent_type_t     ,_param->_size_event_type , _param->_nb_front_end, _param->_nb_context[it1],_param->_rat_scheme == RAT_DEPTH_SAVE);
154      _ALLOC2_SIGNAL_IN_COND ( in_RETIRE_EVENT_DEPTH      ,"depth"             ,Tdepth_t          ,_param->_size_depth      , _param->_nb_front_end, _param->_nb_context[it1],_param->_rat_scheme == RAT_DEPTH_SAVE);
155
156      ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]);
157    }
158
159    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
160    {
161      ALLOC2_INTERFACE_BEGIN("depth",IN,WEST,_("Interface with Prediction unit."),_param->_nb_front_end, _param->_nb_context[it1]);
162
163      _ALLOC2_SIGNAL_IN ( in_DEPTH_MIN                        ,"MIN"                        ,Tdepth_t         ,_param->_size_depth                  ,_param->_nb_front_end, _param->_nb_context[it1]);
164      _ALLOC2_SIGNAL_IN ( in_DEPTH_MAX                        ,"MAX"                        ,Tdepth_t         ,_param->_size_depth                  ,_param->_nb_front_end, _param->_nb_context[it1]); 
165      _ALLOC2_SIGNAL_IN ( in_DEPTH_FULL                       ,"FULL"                       ,Tcontrol_t       ,1                                    ,_param->_nb_front_end, _param->_nb_context[it1]); 
166
167      ALLOC2_INTERFACE_END(_param->_nb_front_end,_param->_nb_context[it1]);
168    }
169
170    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
171#ifdef DEBUG_TEST
172     {
173       ALLOC0_INTERFACE_BEGIN("info",IN, NORTH, _("Information"));
174
175       ALLOC0_SIGNAL_IN ( in_INFO_ROB_EMPTY  ,"rob_empty"  ,bool    ,1);
176
177       ALLOC0_INTERFACE_END();
178     }
179#endif
180
181    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
182    std::string name;
183     {
184       name = _name+"_dependency_checking_unit";
185       log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
186
187       _component_dependency_checking_unit = new morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::dependency_checking_unit::Dependency_checking_unit
188         (name.c_str()
189#ifdef STATISTICS
190          ,param_statistics
191#endif
192          ,_param->_param_dependency_checking_unit
193          ,_usage);
194       
195       _component->set_component (_component_dependency_checking_unit->_component
196#ifdef POSITION
197                                  , 50, 50, 10, 10
198#endif
199                                  );
200     }
201
202     {
203       name = _name+"_free_list_unit";
204       log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
205       
206       _component_free_list_unit = new morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::free_list_unit::Free_List_unit
207         (name.c_str()
208#ifdef STATISTICS
209          ,param_statistics
210#endif
211          ,_param->_param_free_list_unit
212          ,_usage);
213       
214       _component->set_component (_component_free_list_unit->_component
215#ifdef POSITION
216                                  , 50, 50, 10, 10
217#endif
218                                  );
219     }
220
221     {
222       name = _name+"_register_address_translation_unit";
223       log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
224       
225       _component_register_address_translation_unit = new morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Register_Address_Translation_unit
226         (name.c_str()
227#ifdef STATISTICS
228          ,param_statistics
229#endif
230          ,_param->_param_register_address_translation_unit
231          ,_usage);
232       
233       _component->set_component (_component_register_address_translation_unit->_component
234#ifdef POSITION
235                                  , 50, 50, 10, 10
236#endif
237                                  );
238     }
239
240     {
241       name = _name+"_stat_list_unit";
242       log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
243       
244       _component_stat_list_unit = new morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::stat_list_unit::Stat_List_unit
245         (name.c_str()
246#ifdef STATISTICS
247          ,param_statistics
248#endif
249          ,_param->_param_stat_list_unit
250          ,_usage);
251       
252       _component->set_component (_component_stat_list_unit->_component
253#ifdef POSITION
254                                  , 50, 50, 10, 10
255#endif
256                                  );
257     }
258
259     {
260       name = _name+"_register_translation_unit_glue";
261       log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
262       
263       _component_register_translation_unit_glue = new morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_translation_unit_glue::Register_translation_unit_Glue
264         (name.c_str()
265#ifdef STATISTICS
266          ,param_statistics
267#endif
268          ,_param->_param_register_translation_unit_glue
269          ,_usage);
270       
271       _component->set_component (_component_register_translation_unit_glue->_component
272#ifdef POSITION
273                                  , 50, 50, 10, 10
274#endif
275                                  );
276     }
277
278    // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
279    std::string src,dest;
280
281    // ===================================================================
282    // =====[ register_address_translation_unit ]=========================
283    // ===================================================================
284    {
285      src = _name+"_register_address_translation_unit";
286      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
287           
288      {
289        dest = _name;
290#ifdef POSITION
291        _component->interface_map (src ,"",
292                                   dest,"");
293#endif
294        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
295        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
296      }
297
298      // ~~~~~[ Interface "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
299      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
300        {
301          dest = _name;
302#ifdef POSITION
303          _component->interface_map (src ,"rename_"+toString(i)
304                                     dest,"rename_"+toString(i));
305#endif
306         
307          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_VAL"               ,
308                              dest, "in_RENAME_"+toString(i)+"_VAL"               );
309          if (_param->_have_port_front_end_id)
310          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_FRONT_END_ID"      ,
311                              dest, "in_RENAME_"+toString(i)+"_FRONT_END_ID"      );
312          if (_param->_have_port_context_id)
313          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_CONTEXT_ID"        ,
314                              dest, "in_RENAME_"+toString(i)+"_CONTEXT_ID"        );
315          if (_param->_have_port_depth and (_param->_rat_scheme == RAT_DEPTH_SAVE))
316          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_DEPTH"             ,
317                              dest, "in_RENAME_"+toString(i)+"_DEPTH"             );
318          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_SAVE_RAT"          ,
319                              dest, "in_RENAME_"+toString(i)+"_SAVE_RAT"          );
320          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_NUM_REG_RA_LOG"    ,
321                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RA_LOG"    );
322          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_NUM_REG_RB_LOG"    ,
323                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RB_LOG"    );
324          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_NUM_REG_RC_LOG"    ,
325                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RC_LOG"    );
326          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_NUM_REG_RD_LOG"    ,
327                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RD_LOG"    );
328          PORT_MAP(_component,src , "in_RENAME_"+toString(i)+"_NUM_REG_RE_LOG"    ,
329                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RE_LOG"    );
330
331          dest = _name+"_register_translation_unit_glue";
332          COMPONENT_MAP(_component,src ,"out_RENAME_"+toString(i)+"_ACK",
333                                   dest, "in_INSERT_"+toString(i)+"_RAT_RENAME_ACK");
334         
335          dest = _name+"_dependency_checking_unit";
336          COMPONENT_MAP(_component,src ,"out_RENAME_"+toString(i)+"_NUM_REG_RA_PHY"    ,
337                                   dest, "in_RENAME_IN_"+toString(i)+"_NUM_REG_RA_PHY"    );
338          COMPONENT_MAP(_component,src ,"out_RENAME_"+toString(i)+"_NUM_REG_RB_PHY"    ,
339                                   dest, "in_RENAME_IN_"+toString(i)+"_NUM_REG_RB_PHY"    );
340          COMPONENT_MAP(_component,src ,"out_RENAME_"+toString(i)+"_NUM_REG_RC_PHY"    ,
341                                   dest, "in_RENAME_IN_"+toString(i)+"_NUM_REG_RC_PHY"    );
342          COMPONENT_MAP(_component,src ,"out_RENAME_"+toString(i)+"_NUM_REG_RD_PHY_OLD",
343                                   dest, "in_RENAME_IN_"+toString(i)+"_NUM_REG_RD_PHY_OLD");
344          COMPONENT_MAP(_component,src ,"out_RENAME_"+toString(i)+"_NUM_REG_RE_PHY_OLD",
345                                   dest, "in_RENAME_IN_"+toString(i)+"_NUM_REG_RE_PHY_OLD");
346        }
347
348      // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
349      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
350        {
351          dest = _name+"_register_translation_unit_glue";
352#ifdef POSITION
353          _component->interface_map (src ,"rename_"+toString(i)
354                                     dest,"rename_in_"+toString(i));
355#endif
356          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_VAL",
357                                   dest,"out_INSERT_"+toString(i)+"_RAT_INSERT_VAL");
358          COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_ACK",
359                                   dest, "in_INSERT_"+toString(i)+"_RAT_INSERT_ACK");
360          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_WRITE_RD"      ,
361                                   dest,"out_INSERT_"+toString(i)+"_RAT_WRITE_RD"      );
362          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_WRITE_RE"      ,
363                                   dest,"out_INSERT_"+toString(i)+"_RAT_WRITE_RE"      );
364          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RD_LOG",
365                                   dest,"out_INSERT_"+toString(i)+"_RAT_NUM_REG_RD_LOG");
366          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RE_LOG",
367                                   dest,"out_INSERT_"+toString(i)+"_RAT_NUM_REG_RE_LOG");
368          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RD_PHY",
369                                   dest,"out_INSERT_"+toString(i)+"_RAT_NUM_REG_RD_PHY_NEW");
370          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RE_PHY",
371                                   dest,"out_INSERT_"+toString(i)+"_RAT_NUM_REG_RE_PHY_NEW");
372        }
373
374      // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
375      for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
376        {
377          dest = _name;
378#ifdef POSITION
379          _component->interface_map (src ,"retire_"+toString(i)
380                                     dest,"retire_"+toString(i));
381#endif
382
383          if (_param->_have_port_front_end_id)
384          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_FRONT_END_ID"      ,
385                              dest, "in_RETIRE_"+toString(i)+"_FRONT_END_ID"      );
386          if (_param->_have_port_context_id)
387          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_CONTEXT_ID"        ,
388                              dest, "in_RETIRE_"+toString(i)+"_CONTEXT_ID"        );
389          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_WRITE_RD"          ,
390                              dest, "in_RETIRE_"+toString(i)+"_WRITE_RD"          );
391          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_WRITE_RE"          ,
392                              dest, "in_RETIRE_"+toString(i)+"_WRITE_RE"          );
393          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RD_LOG"    ,
394                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RD_LOG"    );
395          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RE_LOG"    ,
396                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RE_LOG"    );
397          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RD_PHY_NEW",
398                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RD_PHY_NEW");
399          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RE_PHY_NEW",
400                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RE_PHY_NEW");
401          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_RESTORE"           ,
402                              dest, "in_RETIRE_"+toString(i)+"_RESTORE"           );
403
404          dest = _name+"_register_translation_unit_glue";
405          COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_VAL"          ,
406                                   dest,"out_RETIRE_"+toString(i)+"_RAT_VAL"      );
407          COMPONENT_MAP(_component,src ,"out_RETIRE_"+toString(i)+"_ACK"          ,
408                                   dest, "in_RETIRE_"+toString(i)+"_RAT_ACK"      );
409
410          // dest = _name+"_stat_list_unit";
411          // COMPONENT_MAP(_component,src ,"out_RETIRE_"+toString(i)+"_RESTORE_RD_PHY_OLD",
412          //                          dest, "in_RETIRE_"+toString(i)+"_RESTORE_RD_PHY_OLD");
413          // COMPONENT_MAP(_component,src ,"out_RETIRE_"+toString(i)+"_RESTORE_RE_PHY_OLD",
414          //                          dest, "in_RETIRE_"+toString(i)+"_RESTORE_RE_PHY_OLD");
415          // COMPONENT_MAP(_component,src ,"out_RETIRE_"+toString(i)+"_RESTORE"           ,
416          //                          dest, "in_RETIRE_"+toString(i)+"_RESTORE"           );
417        }
418
419      for (uint32_t i=0; i<_param->_nb_front_end; i++)
420        for (uint32_t j=0; j<_param->_nb_context[i]; j++)
421          {
422            dest = _name;
423           
424#ifdef POSITION
425            _component->interface_map (src ,"retire_event_"+toString(i)+"_"+toString(j),
426                                       dest,"retire_event_"+toString(i)+"_"+toString(j));
427#endif     
428            PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_VAL"  ,
429                                dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_VAL"  );
430            PORT_MAP(_component,src ,"out_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_ACK"  ,
431                                dest,"out_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_ACK"  );
432            PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE",
433                                dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE");
434            if (_param->_rat_scheme == RAT_DEPTH_SAVE)
435              {
436            PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_TYPE" ,
437                                dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_TYPE" );
438            if (_param->_have_port_depth)
439            PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_DEPTH",
440                                dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_DEPTH");
441              }
442          }
443
444      for (uint32_t i=0; i<_param->_nb_front_end; i++)
445        for (uint32_t j=0; j<_param->_nb_context[i]; j++)
446          {
447            dest = _name;
448           
449#ifdef POSITION
450            _component->interface_map (src ,"depth_"+toString(i)+"_"+toString(j),
451                                       dest,"depth_"+toString(i)+"_"+toString(j));
452#endif     
453            if (_param->_have_port_depth)
454              {
455            PORT_MAP(_component,src , "in_DEPTH_"+toString(i)+"_"+toString(j)+"_MIN" ,
456                                dest, "in_DEPTH_"+toString(i)+"_"+toString(j)+"_MIN" );
457            PORT_MAP(_component,src , "in_DEPTH_"+toString(i)+"_"+toString(j)+"_MAX" ,
458                                dest, "in_DEPTH_"+toString(i)+"_"+toString(j)+"_MAX" );
459              }
460            PORT_MAP(_component,src , "in_DEPTH_"+toString(i)+"_"+toString(j)+"_FULL",
461                                dest, "in_DEPTH_"+toString(i)+"_"+toString(j)+"_FULL");
462          }
463    }
464   
465    // ===================================================================
466    // =====[ free_list_unit ]============================================
467    // ===================================================================
468    {
469      src = _name+"_free_list_unit";
470      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
471           
472      {
473        dest = _name;
474#ifdef POSITION
475        _component->interface_map (src ,"",
476                                   dest,"");
477#endif
478        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
479        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
480      }
481
482      // ~~~~~[ interface : "pop" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
483      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
484        {
485          dest = _name;
486#ifdef POSITION
487          _component->interface_map (src ,"pop_"+toString(i)
488                                     dest,"rename_"+toString(i));
489#endif
490         
491          dest = _name+"_register_translation_unit_glue";
492          COMPONENT_MAP(_component,src , "in_POP_"+toString(i)+"_VAL" ,
493                                   dest,"out_INSERT_"+toString(i)+"_FREE_LIST_VAL" );
494          COMPONENT_MAP(_component,src ,"out_POP_"+toString(i)+"_ACK" ,
495                                   dest, "in_INSERT_"+toString(i)+"_FREE_LIST_ACK" );
496          COMPONENT_MAP(_component,src , "in_POP_"+toString(i)+"_GPR_VAL"    ,
497                                   dest,"out_INSERT_"+toString(i)+"_FREE_LIST_GPR_VAL");
498          COMPONENT_MAP(_component,src , "in_POP_"+toString(i)+"_SPR_VAL"    ,
499                                   dest,"out_INSERT_"+toString(i)+"_FREE_LIST_SPR_VAL");
500
501          dest = _name+"_dependency_checking_unit";
502
503          COMPONENT_MAP(_component,src ,"out_POP_"+toString(i)+"_GPR_NUM_REG",
504                                   dest, "in_RENAME_IN_"+toString(i)+"_NUM_REG_RD_PHY_NEW");
505          COMPONENT_MAP(_component,src ,"out_POP_"+toString(i)+"_SPR_NUM_REG",
506                                   dest, "in_RENAME_IN_"+toString(i)+"_NUM_REG_RE_PHY_NEW");
507        }
508
509      // ~~~~~[ interface : "push_gpr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
510      // ~~~~~[ interface : "push_spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
511      for (uint32_t i=0; i<_param->_nb_reg_free; i++)
512        {
513          dest = _name+"_stat_list_unit";
514#ifdef POSITION
515          _component->interface_map (src ,"push_gpr_"+toString(i)
516                                     dest,"push_gpr_"+toString(i));
517#endif
518
519          COMPONENT_MAP(_component,src , "in_PUSH_GPR_"+toString(i)+"_VAL"    ,
520                                   dest,"out_PUSH_GPR_"+toString(i)+"_VAL"    );
521          COMPONENT_MAP(_component,src ,"out_PUSH_GPR_"+toString(i)+"_ACK"    ,
522                                   dest, "in_PUSH_GPR_"+toString(i)+"_ACK"    );
523          COMPONENT_MAP(_component,src , "in_PUSH_GPR_"+toString(i)+"_NUM_REG",
524                                   dest,"out_PUSH_GPR_"+toString(i)+"_NUM_REG");
525
526#ifdef POSITION
527          _component->interface_map (src ,"push_spr_"+toString(i)
528                                     dest,"push_spr_"+toString(i));
529#endif
530
531          COMPONENT_MAP(_component,src , "in_PUSH_SPR_"+toString(i)+"_VAL"    ,
532                                   dest,"out_PUSH_SPR_"+toString(i)+"_VAL"    );
533          COMPONENT_MAP(_component,src ,"out_PUSH_SPR_"+toString(i)+"_ACK"    ,
534                                   dest, "in_PUSH_SPR_"+toString(i)+"_ACK"    );
535          COMPONENT_MAP(_component,src , "in_PUSH_SPR_"+toString(i)+"_NUM_REG",
536                                   dest,"out_PUSH_SPR_"+toString(i)+"_NUM_REG");
537        }
538
539    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
540#ifdef DEBUG_TEST
541      {
542        dest = _name+"_stat_list_unit";
543#ifdef POSITION
544        _component->interface_map (src ,"info"
545                                   dest,"info");
546#endif
547       
548        COMPONENT_MAP(_component,src ,"out_INFO_NB_GPR_FREE",
549                                 dest, "in_INFO_NB_GPR_FREE");
550        COMPONENT_MAP(_component,src ,"out_INFO_NB_SPR_FREE",
551                                 dest, "in_INFO_NB_SPR_FREE");
552      }
553#endif
554    }
555
556    // ===================================================================
557    // =====[ dependency_checking_unit ]==================================
558    // ===================================================================
559    {
560      src = _name+"_dependency_checking_unit";
561      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
562           
563      {
564        dest = _name;
565#ifdef POSITION
566        _component->interface_map (src ,"",
567                                   dest,"");
568#endif
569        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
570        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
571      }
572 
573      // ~~~~~[ Interface "rename_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
574      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
575        {
576          dest = _name;
577#ifdef POSITION
578          _component->interface_map (src ,"rename_in_"+toString(i)
579                                     dest,"rename_"+toString(i));
580#endif
581
582// //     PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_VAL"               ,dest,);
583// //     PORT_MAP(_component,src ,"out_RENAME_IN_"+toString(i)+"_ACK"               ,dest,);
584          if (_param->_have_port_front_end_id)
585          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_FRONT_END_ID"      ,
586                              dest, "in_RENAME_"+toString(i)+"_FRONT_END_ID"      );
587          if (_param->_have_port_context_id)
588          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_CONTEXT_ID"        ,
589                              dest, "in_RENAME_"+toString(i)+"_CONTEXT_ID"        );
590          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_READ_RA"           ,
591                              dest, "in_RENAME_"+toString(i)+"_READ_RA"           );
592          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_NUM_REG_RA_LOG"    ,
593                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RA_LOG"    );
594          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_READ_RB"           ,
595                              dest, "in_RENAME_"+toString(i)+"_READ_RB"           );
596          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_NUM_REG_RB_LOG"    ,
597                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RB_LOG"    );
598          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_READ_RC"           ,
599                              dest, "in_RENAME_"+toString(i)+"_READ_RC"           );
600          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_NUM_REG_RC_LOG"    ,
601                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RC_LOG"    );
602          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_WRITE_RD"          ,
603                              dest, "in_RENAME_"+toString(i)+"_WRITE_RD"          );
604          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_NUM_REG_RD_LOG"    ,
605                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RD_LOG"    );
606          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_WRITE_RE"          ,
607                              dest, "in_RENAME_"+toString(i)+"_WRITE_RE"          );
608          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_NUM_REG_RE_LOG"    ,
609                              dest, "in_RENAME_"+toString(i)+"_NUM_REG_RE_LOG"    );
610         
611          // in_RENAME_IN_NUM_REG_RA_PHY     - register_address_translation_unit
612          // in_RENAME_IN_NUM_REG_RB_PHY     - register_address_translation_unit
613          // in_RENAME_IN_NUM_REG_RC_PHY     - register_address_translation_unit
614          // in_RENAME_IN_NUM_REG_RD_PHY_OLD - register_address_translation_unit
615          // in_RENAME_IN_NUM_REG_RE_PHY_OLD - register_address_translation_unit
616         
617          // in_RENAME_IN_NUM_REG_RD_PHY_NEW - free_list_unit
618          // in_RENAME_IN_NUM_REG_RE_PHY_NEW - free_list_unit
619        }
620
621      // ~~~~~[ Interface "rename_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
622      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
623        {
624          dest = _name;
625#ifdef POSITION
626          _component->interface_map (src ,"rename_out_"+toString(i),
627                                     dest,"insert_"+toString(i));
628#endif
629
630//        if (_param->_have_port_front_end_id)
631//        PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_FRONT_END_ID"      ,
632//                            dest,"out_INSERT_"+toString(i)+"_FRONT_END_ID"      );
633//        if (_param->_have_port_context_id)
634//        PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_CONTEXT_ID"        ,
635//                            dest,"out_INSERT_"+toString(i)+"_CONTEXT_ID"        );
636#ifdef DEBUG
637          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RA_LOG"    ,
638                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RA_LOG"    );
639          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RB_LOG"    ,
640                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RB_LOG"    );
641          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RC_LOG"    ,
642                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RC_LOG"    );
643#endif
644
645//        PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_VAL"               ,
646//                            dest,"out_INSERT_"+toString(i)+"_VAL"               );
647//        PORT_MAP(_component,src , "in_RENAME_OUT_"+toString(i)+"_ACK"               ,
648//                            dest, "in_INSERT_"+toString(i)+"_ACK"               );
649
650          dest = _name+"_register_translation_unit_glue";
651
652          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_READ_RA"           ,
653                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_READ_RA"           );
654          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RA_PHY"    ,
655                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RA_PHY"    );
656          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_READ_RB"           ,
657                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_READ_RB"           );
658          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RB_PHY"    ,
659                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RB_PHY"    );
660          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_READ_RC"           ,
661                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_READ_RC"           );
662          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RC_PHY"    ,
663                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RC_PHY"    );
664          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_WRITE_RD"          ,
665                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_WRITE_RD"          );
666          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RD_LOG"    ,
667                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RD_LOG"    );
668          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RD_PHY_OLD",
669                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RD_PHY_OLD");
670          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RD_PHY_NEW",
671                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RD_PHY_NEW");
672          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_WRITE_RE"          ,
673                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_WRITE_RE"          );
674          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RE_LOG"    ,
675                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RE_LOG"    );
676          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RE_PHY_OLD",
677                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RE_PHY_OLD");
678          COMPONENT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_NUM_REG_RE_PHY_NEW",
679                                   dest, "in_INSERT_"+toString(i)+"_DEPENDENCY_CHECKING_NUM_REG_RE_PHY_NEW");
680        }
681    }
682
683    // ===================================================================
684    // =====[ stat_list_unit ]============================================
685    // ===================================================================
686    {
687      src = _name+"_stat_list_unit";
688      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
689           
690      {
691        dest = _name;
692#ifdef POSITION
693        _component->interface_map (src ,"",
694                                   dest,"");
695#endif
696        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
697        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
698      }
699
700      // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
701      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
702        {
703          dest = _name+"_register_translation_unit_glue";
704#ifdef POSITION
705          _component->interface_map (src ,"insert_"+toString(i)
706                                     dest,"insert_stat_list_"+toString(i));
707#endif
708
709          COMPONENT_MAP(_component,src ,  "in_INSERT_"+toString(i)+"_VAL" ,
710                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_VAL");
711          COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_ACK" ,
712                                   dest, "in_INSERT_"+toString(i)+"_STAT_LIST_ACK" );
713          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_READ_RA"           ,
714                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_READ_RA"           );
715          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RA_PHY"    ,
716                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_NUM_REG_RA_PHY"    );
717          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_READ_RB"           ,
718                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_READ_RB"           );
719          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RB_PHY"    ,
720                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_NUM_REG_RB_PHY"    );
721          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_READ_RC"           ,
722                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_READ_RC"           );
723          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RC_PHY"    ,
724                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_NUM_REG_RC_PHY"    );
725          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_WRITE_RD"          ,
726                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_WRITE_RD"          );
727          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RD_PHY_OLD",
728                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_NUM_REG_RD_PHY_OLD");
729          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RD_PHY_NEW",
730                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_NUM_REG_RD_PHY_NEW");
731          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_WRITE_RE"          ,
732                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_WRITE_RE"          );
733          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RE_PHY_OLD",
734                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_NUM_REG_RE_PHY_OLD");
735          COMPONENT_MAP(_component,src , "in_INSERT_"+toString(i)+"_NUM_REG_RE_PHY_NEW",
736                                   dest,"out_INSERT_"+toString(i)+"_STAT_LIST_NUM_REG_RE_PHY_NEW");
737        }
738
739      // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
740      for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
741        {
742          dest = _name;
743#ifdef POSITION
744          _component->interface_map (src ,"retire_"+toString(i)
745                                     dest,"retire_"+toString(i));
746#endif
747
748//        PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_READ_RA"           ,
749//                            dest, "in_RETIRE_"+toString(i)+"_READ_RA"           );
750//        PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RA_PHY"    ,
751//                            dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RA_PHY"    );
752//        PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_READ_RB"           ,
753//                            dest, "in_RETIRE_"+toString(i)+"_READ_RB"           );
754//        PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RB_PHY"    ,
755//                            dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RB_PHY"    );
756//        PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_READ_RC"           ,
757//                            dest, "in_RETIRE_"+toString(i)+"_READ_RC"           );
758//        PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RC_PHY"    ,
759//                            dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RC_PHY"    );
760          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_WRITE_RD"          ,
761                              dest, "in_RETIRE_"+toString(i)+"_WRITE_RD"          );
762          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RD_PHY_OLD",
763                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RD_PHY_OLD");
764          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RD_PHY_NEW",
765                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RD_PHY_NEW");
766          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_WRITE_RE"          ,
767                              dest, "in_RETIRE_"+toString(i)+"_WRITE_RE"          );
768          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RE_PHY_OLD",
769                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RE_PHY_OLD");
770          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_NUM_REG_RE_PHY_NEW",
771                              dest, "in_RETIRE_"+toString(i)+"_NUM_REG_RE_PHY_NEW");
772          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_RESTORE",
773                              dest, "in_RETIRE_"+toString(i)+"_RESTORE");
774          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_RESTORE_RD_PHY_OLD",
775                              dest, "in_RETIRE_"+toString(i)+"_RESTORE_RD_PHY_OLD");
776          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_RESTORE_RE_PHY_OLD",
777                              dest, "in_RETIRE_"+toString(i)+"_RESTORE_RE_PHY_OLD");
778
779          dest = _name+"_register_translation_unit_glue";
780          COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_VAL",
781                                   dest,"out_RETIRE_"+toString(i)+"_STAT_LIST_VAL");
782          COMPONENT_MAP(_component,src ,"out_RETIRE_"+toString(i)+"_ACK",
783                                   dest, "in_RETIRE_"+toString(i)+"_STAT_LIST_ACK");
784        }
785
786      // ~~~~~[ interface : "push_gpr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
787      // ~~~~~[ interface : "push_spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
788      for (uint32_t i=0; i<_param->_nb_reg_free; i++)
789        {
790          dest = _name+"_free_list_unit";
791#ifdef POSITION
792          _component->interface_map (src ,"push_gpr_"+toString(i)
793                                     dest,"push_gpr_"+toString(i));
794#endif
795
796          //out_PUSH_GPR_VAL     - free_list_unit
797          // in_PUSH_GPR_ACK     - free_list_unit
798          //out_PUSH_GPR_NUM_REG - free_list_unit
799
800#ifdef POSITION
801          _component->interface_map (src ,"push_spr_"+toString(i)
802                                     dest,"push_spr_"+toString(i));
803#endif
804
805          //out_PUSH_SPR_VAL     - free_list_unit
806          // in_PUSH_SPR_ACK     - free_list_unit
807          //out_PUSH_SPR_NUM_REG - free_list_unit
808        }
809
810#ifdef DEBUG_TEST
811      {
812        dest = _name;
813#ifdef POSITION
814        _component->interface_map (src ,"info"
815                                   dest,"info");
816#endif
817       
818        PORT_MAP(_component,src , "in_INFO_ROB_EMPTY",
819                            dest, "in_INFO_ROB_EMPTY");
820      }
821#endif
822
823    }
824
825    // ===================================================================
826    // =====[ register_translation_unit_glue ]============================
827    // ===================================================================
828    {
829      src = _name+"_register_translation_unit_glue";
830      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
831           
832      {
833        dest = _name;
834#ifdef POSITION
835        _component->interface_map (src ,"",
836                                   dest,"");
837#endif
838        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
839        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
840      }
841
842      // ~~~~~[ Interface : "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
843      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
844        {
845          dest = _name;
846#ifdef POSITION
847          _component->interface_map (src ,"insert_"+toString(i),
848                                     dest,"insert_"+toString(i));
849#endif
850
851          PORT_MAP(_component,src , "in_INSERT_"+toString(i)+"_RENAME_VAL"    ,
852                              dest, "in_RENAME_"+toString(i)+"_VAL"    );
853          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_RENAME_ACK"    ,
854                              dest,"out_RENAME_"+toString(i)+"_ACK"    );
855          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_INSERT_VAL"    ,
856                              dest,"out_INSERT_"+toString(i)+"_VAL"    );
857          PORT_MAP(_component,src , "in_INSERT_"+toString(i)+"_INSERT_ACK"    ,
858                              dest, "in_INSERT_"+toString(i)+"_ACK"    );
859
860          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_READ_RA"           ,
861                              dest,"out_INSERT_"+toString(i)+"_READ_RA"           );
862          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RA_PHY"    ,
863                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RA_PHY"    );
864          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_READ_RB"           ,
865                              dest,"out_INSERT_"+toString(i)+"_READ_RB"           );
866          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RB_PHY"    ,
867                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RB_PHY"    );
868          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_READ_RC"           ,
869                              dest,"out_INSERT_"+toString(i)+"_READ_RC"           );
870          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RC_PHY"    ,
871                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RC_PHY"    );
872          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_WRITE_RD"          ,
873                              dest,"out_INSERT_"+toString(i)+"_WRITE_RD"          );
874          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RD_LOG"    ,
875                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RD_LOG"    );
876          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RD_PHY_OLD",
877                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RD_PHY_OLD");
878          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RD_PHY_NEW",
879                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RD_PHY_NEW");
880          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_WRITE_RE"          ,
881                              dest,"out_INSERT_"+toString(i)+"_WRITE_RE"          );
882          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RE_LOG"    ,
883                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RE_LOG"    );
884          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RE_PHY_OLD",
885                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RE_PHY_OLD");
886          PORT_MAP(_component,src ,"out_INSERT_"+toString(i)+"_NUM_REG_RE_PHY_NEW",
887                              dest,"out_INSERT_"+toString(i)+"_NUM_REG_RE_PHY_NEW");
888
889          // out_INSERT_RAT_INSERT_VAL - register_address_translation_unit
890          //  in_INSERT_RAT_RENAME_ACK - register_address_translation_unit
891          //  in_INSERT_RAT_INSERT_ACK - register_address_translation_unit
892          // out_INSERT_FREE_LIST_VAL  - free_list_unit
893          //  in_INSERT_FREE_LIST_ACK  - free_list_unit
894          // out_INSERT_STAT_LIST_VAL  - stat_list_unit
895          //  in_INSERT_STAT_LIST_ACK  - stat_list_unit
896
897          //  in_INSERT_DEPENDENCY_CHECKING_READ_RA            - dependency_checking_unit
898          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RA_PHY     - dependency_checking_unit
899          //  in_INSERT_DEPENDENCY_CHECKING_READ_RB            - dependency_checking_unit
900          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RB_PHY     - dependency_checking_unit
901          //  in_INSERT_DEPENDENCY_CHECKING_READ_RC            - dependency_checking_unit
902          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RC_PHY     - dependency_checking_unit
903          //  in_INSERT_DEPENDENCY_CHECKING_WRITE_RD           - dependency_checking_unit
904          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RD_LOG     - dependency_checking_unit
905          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RD_PHY_OLD - dependency_checking_unit
906          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RD_PHY_NEW - dependency_checking_unit
907          //  in_INSERT_DEPENDENCY_CHECKING_WRITE_RE           - dependency_checking_unit
908          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RE_LOG     - dependency_checking_unit
909          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RE_PHY_OLD - dependency_checking_unit
910          //  in_INSERT_DEPENDENCY_CHECKING_NUM_REG_RE_PHY_NEW - dependency_checking_unit
911
912          // out_INSERT_STAT_LIST_READ_RA                      - stat_list_unit
913          // out_INSERT_STAT_LIST_NUM_REG_RA_PHY               - stat_list_unit
914          // out_INSERT_STAT_LIST_READ_RB                      - stat_list_unit
915          // out_INSERT_STAT_LIST_NUM_REG_RB_PHY               - stat_list_unit
916          // out_INSERT_STAT_LIST_READ_RC                      - stat_list_unit
917          // out_INSERT_STAT_LIST_NUM_REG_RC_PHY               - stat_list_unit
918          // out_INSERT_STAT_LIST_WRITE_RD                     - stat_list_unit
919          // out_INSERT_STAT_LIST_NUM_REG_RD_PHY_NEW           - stat_list_unit
920          // out_INSERT_STAT_LIST_WRITE_RE                     - stat_list_unit
921          // out_INSERT_STAT_LIST_NUM_REG_RE_PHY_NEW           - stat_list_unit
922
923          // out_INSERT_RAT_WRITE_RD                           - register_address_translation_unit
924          // out_INSERT_RAT_NUM_REG_RD_LOG                     - register_address_translation_unit
925          // out_INSERT_RAT_NUM_REG_RD_PHY_NEW                 - register_address_translation_unit
926          // out_INSERT_RAT_WRITE_RE                           - register_address_translation_unit
927          // out_INSERT_RAT_NUM_REG_RE_LOG                     - register_address_translation_unit
928          // out_INSERT_RAT_NUM_REG_RE_PHY_NEW                 - register_address_translation_unit
929        }
930
931      // ~~~~~[ Interface : "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
932      for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
933        {
934          dest = _name;
935#ifdef POSITION
936          _component->interface_map (src ,"retire",
937                                     dest,"retire");
938#endif
939
940          PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_VAL"          ,
941                              dest, "in_RETIRE_"+toString(i)+"_VAL"          );
942          PORT_MAP(_component,src ,"out_RETIRE_"+toString(i)+"_ACK"          ,
943                              dest,"out_RETIRE_"+toString(i)+"_ACK"          );
944
945          // out_RETIRE_RAT_VAL       - register_address_translation_unit
946          //  in_RETIRE_RAT_ACK       - register_address_translation_unit
947          // out_RETIRE_STAT_LIST_VAL - stat_list_unit
948          //  in_RETIRE_STAT_LIST_ACK - stat_list_unit
949        }
950     }
951
952
953    // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
954#if (DEBUG_Register_translation_unit == true)
955    _component->test_map();
956#endif
957
958#ifdef POSITION
959    if (usage_is_set(_usage,USE_POSITION))
960      _component->generate_file();
961#endif
962
963    log_printf(FUNC,Register_translation_unit,FUNCTION,"End");
964  };
965
966}; // end namespace register_translation_unit
967}; // end namespace rename_unit
968}; // end namespace ooo_engine
969}; // end namespace multi_ooo_engine
970}; // end namespace core
971
972}; // end namespace behavioural
973}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.