source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Core_allocation.cpp @ 136

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

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

  • Property svn:keywords set to Id
File size: 94.6 KB
Line 
1/*
2 * $Id: Core_allocation.cpp 136 2009-10-20 18:52:15Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/include/Core.h"
9#include "Behavioural/include/Allocation.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14
15
16
17#undef  FUNCTION
18#define FUNCTION "Core::allocation"
19  void Core::allocation
20  (
21#ifdef STATISTICS
22   morpheo::behavioural::Parameters_Statistics * param_statistics
23#else
24   void
25#endif
26   )
27  {
28    log_begin(Core,FUNCTION);
29
30    _component   = new Component (_usage);
31
32    Entity * entity = _component->set_entity (_name       
33                                              ,"Core"
34#ifdef POSITION
35                                              ,COMBINATORY
36#endif
37                                              );
38
39    _interfaces = entity->set_interfaces();
40   
41    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42    {
43      Interface * interface = _interfaces->set_interface(""
44#ifdef POSITION
45                                                         ,IN
46                                                         ,SOUTH,
47                                                         "Generalist interface"
48#endif
49                                                         );
50     
51      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
52      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
53    }
54
55    // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56    {
57      ALLOC1_INTERFACE_BEGIN("icache_req",WEST,OUT,_("Request to instruction cache"),_param->_nb_icache_port);
58
59      ALLOC1_VALACK_OUT(out_ICACHE_REQ_VAL         ,VAL);
60      ALLOC1_VALACK_IN ( in_ICACHE_REQ_ACK         ,ACK);
61      ALLOC1_SIGNAL_OUT(out_ICACHE_REQ_THREAD_ID   ,"thread_id",Tcontext_t           ,_param->_size_icache_thread_id);
62      ALLOC1_SIGNAL_OUT(out_ICACHE_REQ_PACKET_ID   ,"packet_id",Tpacket_t            ,_param->_size_icache_packet_id);
63      ALLOC1_SIGNAL_OUT(out_ICACHE_REQ_ADDRESS     ,"address"  ,Ticache_address_t    ,_param->_size_icache_address  );
64      ALLOC1_SIGNAL_OUT(out_ICACHE_REQ_TYPE        ,"type"     ,Ticache_type_t       ,_param->_size_icache_type     );
65
66      ALLOC1_INTERFACE_END(_param->_nb_icache_port);
67    }
68                                                                           
69    // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70    {
71      ALLOC1_INTERFACE_BEGIN("icache_rsp",WEST,IN ,_("Respons from instruction cache"),_param->_nb_icache_port);
72     
73      ALLOC1_VALACK_IN ( in_ICACHE_RSP_VAL         ,VAL);
74      ALLOC1_VALACK_OUT(out_ICACHE_RSP_ACK         ,ACK);
75      ALLOC1_SIGNAL_IN ( in_ICACHE_RSP_THREAD_ID   ,"thread_id"  ,Tcontext_t           ,_param->_size_icache_thread_id);
76      ALLOC1_SIGNAL_IN ( in_ICACHE_RSP_PACKET_ID   ,"packet_id"  ,Tpacket_t            ,_param->_size_icache_packet_id);
77      ALLOC1_SIGNAL_IN ( in_ICACHE_RSP_ERROR       ,"error"      ,Ticache_error_t      ,_param->_size_icache_error);
78
79      ALLOC1_INTERFACE_END(_param->_nb_icache_port);
80    }
81    {
82      ALLOC2_INTERFACE_BEGIN("icache_rsp",WEST,IN ,_("Respons from instruction cache"),_param->_nb_icache_port,_param->_icache_nb_instruction[it1]);
83     
84      _ALLOC2_SIGNAL_IN ( in_ICACHE_RSP_INSTRUCTION ,"instruction",Ticache_instruction_t,_param->_size_instruction,_param->_nb_icache_port,_param->_icache_nb_instruction[it1]);
85
86      ALLOC2_INTERFACE_END(_param->_nb_icache_port,_param->_icache_nb_instruction[it1]);
87    }
88
89    // ~~~~~[ Interface "dcache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90    {
91      ALLOC1_INTERFACE_BEGIN("dcache_req", OUT, NORTH, _("Request to data cache"),_param->_nb_dcache_port);
92     
93      ALLOC1_VALACK_OUT(out_DCACHE_REQ_VAL         ,VAL);
94      ALLOC1_VALACK_IN ( in_DCACHE_REQ_ACK         ,ACK);
95      ALLOC1_SIGNAL_OUT(out_DCACHE_REQ_THREAD_ID   ,"thread_id",Tcontext_t           ,_param->_size_dcache_thread_id);
96      ALLOC1_SIGNAL_OUT(out_DCACHE_REQ_PACKET_ID   ,"packet_id",Tpacket_t            ,_param->_size_dcache_packet_id);
97      ALLOC1_SIGNAL_OUT(out_DCACHE_REQ_ADDRESS     ,"address"  ,Tdcache_address_t    ,_param->_size_dcache_address);
98      ALLOC1_SIGNAL_OUT(out_DCACHE_REQ_WDATA       ,"wdata"    ,Tdcache_data_t       ,_param->_size_dcache_data);
99      ALLOC1_SIGNAL_OUT(out_DCACHE_REQ_TYPE        ,"type"     ,Tdcache_type_t       ,_param->_size_dcache_type);
100
101      ALLOC1_INTERFACE_END(_param->_nb_dcache_port);
102    }
103                                                                           
104    // ~~~~~[ Interface "dcache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
105    {
106      ALLOC1_INTERFACE_BEGIN("dcache_rsp", IN , NORTH, _("Respons from data cache"),_param->_nb_dcache_port);
107
108      ALLOC1_VALACK_IN ( in_DCACHE_RSP_VAL         ,VAL);
109      ALLOC1_VALACK_OUT(out_DCACHE_RSP_ACK         ,ACK);
110      ALLOC1_SIGNAL_IN ( in_DCACHE_RSP_THREAD_ID   ,"thread_id",Tcontext_t           ,_param->_size_dcache_thread_id);
111      ALLOC1_SIGNAL_IN ( in_DCACHE_RSP_PACKET_ID   ,"packet_id",Tpacket_t            ,_param->_size_dcache_packet_id);
112      ALLOC1_SIGNAL_IN ( in_DCACHE_RSP_RDATA       ,"rdata"    ,Tdcache_data_t       ,_param->_size_dcache_data);
113      ALLOC1_SIGNAL_IN ( in_DCACHE_RSP_ERROR       ,"error"    ,Tdcache_error_t      ,_param->_size_dcache_error);
114
115      ALLOC1_INTERFACE_END(_param->_nb_dcache_port);
116    }
117
118    // ~~~~~[ Interface : "interrupt" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119    {
120      ALLOC1_INTERFACE_BEGIN("interrupt", IN , NORTH, _("Interruption line"),_param->_nb_thread);
121
122      ALLOC1_SIGNAL_IN ( in_INTERRUPT_ENABLE      ,"enable",Tcontrol_t           ,1);
123
124      ALLOC1_INTERFACE_END(_param->_nb_thread);
125    }
126   
127    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
128
129    std::string name;
130
131    _component_front_end = new core::multi_front_end::front_end::Front_end * [_param->_nb_front_end];
132    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
133      {
134        name = _name+"_front_end_"+toString(i);
135        log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
136     
137        _component_front_end [i] = new core::multi_front_end::front_end::Front_end
138          (name.c_str()
139#ifdef STATISTICS
140           ,param_statistics
141#endif
142           ,_param->_param_front_end [i]
143           ,_usage);
144       
145        _component->set_component (_component_front_end[i]->_component
146#ifdef POSITION
147                                   , 50, 50, 10, 10
148#endif
149                                   );
150      }
151
152    _component_ooo_engine = new core::multi_ooo_engine::ooo_engine::OOO_Engine * [_param->_nb_ooo_engine];
153    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
154      {
155        name = _name+"_ooo_engine_"+toString(i);
156        log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
157     
158        _component_ooo_engine [i] = new core::multi_ooo_engine::ooo_engine::OOO_Engine
159          (name.c_str()
160#ifdef STATISTICS
161           ,param_statistics
162#endif
163           ,_param->_param_ooo_engine [i]
164           ,_usage);
165       
166        _component->set_component (_component_ooo_engine[i]->_component
167#ifdef POSITION
168                                   , 50, 50, 10, 10
169#endif
170                                   );
171      }
172
173    _component_execute_loop = new core::multi_execute_loop::execute_loop::Execute_loop * [_param->_nb_execute_loop];
174    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
175      {
176        name = _name+"_execute_loop_"+toString(i);
177        log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
178     
179        _component_execute_loop [i] = new core::multi_execute_loop::execute_loop::Execute_loop
180          (name.c_str()
181#ifdef STATISTICS
182           ,param_statistics
183#endif
184           ,_param->_param_execute_loop [i]
185           ,_usage);
186       
187        _component->set_component (_component_execute_loop[i]->_component
188#ifdef POSITION
189                                   , 50, 50, 10, 10
190#endif
191                                   );
192      }
193
194    {
195      name = _name+"_icache_access";
196      log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
197     
198      _component_icache_access = new morpheo::behavioural::core::icache_access::Icache_Access
199        (name.c_str()
200#ifdef STATISTICS
201         ,param_statistics
202#endif
203         ,_param->_param_icache_access
204         ,_usage);
205     
206      _component->set_component (_component_icache_access->_component
207#ifdef POSITION
208                                 , 50, 50, 10, 10
209#endif
210                                 );
211    }
212
213    {
214      name = _name+"_dcache_access";
215      log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
216     
217      _component_dcache_access = new morpheo::behavioural::core::dcache_access::Dcache_Access
218        (name.c_str()
219#ifdef STATISTICS
220         ,param_statistics
221#endif
222         ,_param->_param_dcache_access
223         ,_usage);
224     
225      _component->set_component (_component_dcache_access->_component
226#ifdef POSITION
227                                 , 50, 50, 10, 10
228#endif
229                                 );
230    }
231
232
233    {
234      name = _name+"_glue";
235      log_printf(INFO,Core,FUNCTION,_("Create   : %s"),name.c_str());
236     
237      _component_glue = new morpheo::behavioural::core::core_glue::Core_Glue
238        (name.c_str()
239#ifdef STATISTICS
240         ,param_statistics
241#endif
242         ,_param->_param_glue
243         ,_usage);
244     
245      _component->set_component (_component_glue->_component
246#ifdef POSITION
247                                 , 50, 50, 10, 10
248#endif
249                                 );
250    }
251   
252    // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
253    std::string src,dest;
254   
255   
256    // ===================================================================
257    // =====[ front_end ]=================================================
258    // ===================================================================
259    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
260      {
261        src = _name+"_front_end_"+toString(i);
262        log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
263       
264        // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
265        {
266          dest = _name;
267#ifdef POSITION
268          _component->interface_map (src ,"",
269                                     dest,"");
270#endif
271          PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
272          PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
273        }
274
275        // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
276        // out_ICACHE_REQ_VAL       - icache_access. in_CONTEXT_REQ_VAL     
277        //  in_ICACHE_REQ_ACK       - icache_access.out_CONTEXT_REQ_ACK     
278//      // out_ICACHE_REQ_THREAD_ID - icache_access. in_CONTEXT_REQ_THREAD_ID
279        // out_ICACHE_REQ_PACKET_ID - icache_access. in_CONTEXT_REQ_PACKET_ID
280        // out_ICACHE_REQ_ADDRESS   - icache_access. in_CONTEXT_REQ_ADDRESS 
281        // out_ICACHE_REQ_TYPE      - icache_access. in_CONTEXT_REQ_TYPE     
282       
283        // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
284        //  in_ICACHE_RSP_VAL         - icache_access.out_CONTEXT_RSP_VAL       
285        // out_ICACHE_RSP_ACK         - icache_access. in_CONTEXT_RSP_ACK       
286//      //  in_ICACHE_RSP_THREAD_ID   - icache_access.out_CONTEXT_RSP_THREAD_ID 
287        //  in_ICACHE_RSP_PACKET_ID   - icache_access.out_CONTEXT_RSP_PACKET_ID 
288        //  in_ICACHE_RSP_INSTRUCTION - icache_access.out_CONTEXT_RSP_INSTRUCTION
289        //  in_ICACHE_RSP_ERROR       - icache_access.out_CONTEXT_RSP_ERROR     
290
291        // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
292        // out_DECOD_VAL           - ooo_engine. in_RENAME_VAL         
293        //  in_DECOD_ACK           - ooo_engine.out_RENAME_ACK         
294        // out_DECOD_CONTEXT_ID    - ooo_engine. in_RENAME_CONTEXT_ID   
295        // out_DECOD_DEPTH         - ooo_engine. in_RENAME_DEPTH       
296        // out_DECOD_TYPE          - ooo_engine. in_RENAME_TYPE         
297        // out_DECOD_OPERATION     - ooo_engine. in_RENAME_OPERATION   
298        // out_DECOD_NO_EXECUTE    - ooo_engine. in_RENAME_NO_EXECUTE   
299        // out_DECOD_IS_DELAY_SLOT - ooo_engine. in_RENAME_IS_DELAY_SLOT
300        // out_DECOD_ADDRESS       - ooo_engine. in_RENAME_ADDRESS     
301        // out_DECOD_ADDRESS_NEXT  - ooo_engine. in_RENAME_ADDRESS_NEXT
302        // out_DECOD_HAS_IMMEDIAT  - ooo_engine. in_RENAME_HAS_IMMEDIAT
303        // out_DECOD_IMMEDIAT      - ooo_engine. in_RENAME_IMMEDIAT     
304        // out_DECOD_READ_RA       - ooo_engine. in_RENAME_READ_RA     
305        // out_DECOD_NUM_REG_RA    - ooo_engine. in_RENAME_NUM_REG_RA   
306        // out_DECOD_READ_RB       - ooo_engine. in_RENAME_READ_RB     
307        // out_DECOD_NUM_REG_RB    - ooo_engine. in_RENAME_NUM_REG_RB   
308        // out_DECOD_READ_RC       - ooo_engine. in_RENAME_READ_RC     
309        // out_DECOD_NUM_REG_RC    - ooo_engine. in_RENAME_NUM_REG_RC   
310        // out_DECOD_WRITE_RD      - ooo_engine. in_RENAME_WRITE_RD     
311        // out_DECOD_NUM_REG_RD    - ooo_engine. in_RENAME_NUM_REG_RD   
312        // out_DECOD_WRITE_RE      - ooo_engine. in_RENAME_WRITE_RE     
313        // out_DECOD_NUM_REG_RE    - ooo_engine. in_RENAME_NUM_REG_RE   
314        // out_DECOD_EXCEPTION_USE - ooo_engine. in_RENAME_EXCEPTION_USE
315        // out_DECOD_EXCEPTION     - ooo_engine. in_RENAME_EXCEPTION   
316
317        // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~
318        for (uint32_t j=0; j<_param->_front_end_nb_inst_branch_complete[i]; ++j)
319          {
320            dest = _name+"_glue";
321#ifdef POSITION
322            _component->interface_map (src ,"branch_complete_"                          +toString(j),
323                                       dest,"branch_complete_front_end_"+toString(i)+"_"+toString(j));
324#endif
325
326            COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"                          +toString(j)+"_VAL"            ,
327                                     dest,"out_BRANCH_COMPLETE_FRONT_END_"+toString(i)+"_"+toString(j)+"_VAL"            );
328            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                          +toString(j)+"_ACK"            ,
329                                     dest, "in_BRANCH_COMPLETE_FRONT_END_"+toString(i)+"_"+toString(j)+"_ACK"            );
330            if (_param->_have_port_context_id)
331            COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"                          +toString(j)+"_CONTEXT_ID"     ,
332                                     dest,"out_BRANCH_COMPLETE_FRONT_END_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"     );
333            if (_param->_have_port_depth)
334            COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"                          +toString(j)+"_DEPTH"          ,
335                                     dest,"out_BRANCH_COMPLETE_FRONT_END_"+toString(i)+"_"+toString(j)+"_DEPTH"          );
336            COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"                          +toString(j)+"_ADDRESS"        ,
337                                     dest,"out_BRANCH_COMPLETE_FRONT_END_"+toString(i)+"_"+toString(j)+"_ADDRESS"        );
338            COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"                          +toString(j)+"_NO_SEQUENCE"    ,
339                                     dest,"out_BRANCH_COMPLETE_FRONT_END_"+toString(i)+"_"+toString(j)+"_NO_SEQUENCE"    );
340            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                          +toString(j)+"_MISS_PREDICTION",
341                                     dest, "in_BRANCH_COMPLETE_FRONT_END_"+toString(i)+"_"+toString(j)+"_MISS_PREDICTION");
342          }
343
344        // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~
345        {
346          dest = _name+"_glue";
347#ifdef POSITION
348          _component->interface_map (src ,"commit_event"                       ,
349                                     dest,"commit_event_front_end_"+toString(i));
350#endif
351
352          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_VAL"             ,
353                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_VAL"             );
354          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_ACK"             ,
355                                   dest, "in_COMMIT_EVENT_FRONT_END_"+toString(i)+"_ACK"             );
356          if (_param->_have_port_context_id)
357          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_CONTEXT_ID"      ,
358                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_CONTEXT_ID"      );
359          if (_param->_have_port_depth)
360          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_DEPTH"           ,
361                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_DEPTH"           );
362          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_TYPE"            ,
363                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_TYPE"            );
364          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_IS_DELAY_SLOT"   ,
365                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_IS_DELAY_SLOT"   );
366          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS"         ,
367                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_ADDRESS"         );
368          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EPCR_VAL",
369                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_ADDRESS_EPCR_VAL");
370          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EPCR"    ,
371                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_ADDRESS_EPCR"    );
372          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EEAR_VAL",
373                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_ADDRESS_EEAR_VAL");
374          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EEAR"    ,
375                                   dest,"out_COMMIT_EVENT_FRONT_END_"+toString(i)+"_ADDRESS_EEAR"    );
376        }
377
378        // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
379        // out_EVENT_VAL              - ooo_engine. in_EVENT_VAL             
380        //  in_EVENT_ACK              - ooo_engine.out_EVENT_ACK             
381        // out_EVENT_ADDRESS          - ooo_engine. in_EVENT_ADDRESS         
382        // out_EVENT_ADDRESS_NEXT     - ooo_engine. in_EVENT_ADDRESS_NEXT     
383        // out_EVENT_ADDRESS_NEXT_VAL - ooo_engine. in_EVENT_ADDRESS_NEXT_VAL
384        // out_EVENT_IS_DS_TAKE       - ooo_engine. in_EVENT_IS_DS_TAKE     
385
386        // ~~~~~[ Interface "spr_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
387        //out_SPR_EVENT_VAL       - ooo_engine. in_SPR_EVENT_VAL     
388        // in_SPR_EVENT_ACK       - ooo_engine.out_SPR_EVENT_ACK     
389        //out_SPR_EVENT_EPCR      - ooo_engine. in_SPR_EVENT_EPCR     
390        //out_SPR_EVENT_EEAR_WEN  - ooo_engine. in_SPR_EVENT_EEAR_WEN
391        //out_SPR_EVENT_EEAR      - ooo_engine. in_SPR_EVENT_EEAR     
392        //out_SPR_EVENT_SR_DSX    - ooo_engine. in_SPR_EVENT_SR_DSX   
393        //out_SPR_EVENT_SR_TO_ESR - ooo_engine. in_SPR_EVENT_SR_TO_ESR
394       
395        // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
396        // in_NB_INST_COMMIT_ALL - ooo_engine.out_NB_INST_COMMIT_ALL
397        // in_NB_INST_COMMIT_MEM - ooo_engine.out_NB_INST_COMMIT_MEM
398       
399        // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
400        // out_DEPTH_MIN  - ooo_engine. in_DEPTH_MIN     
401        // out_DEPTH_MAX  - ooo_engine. in_DEPTH_MAX
402        // out_DEPTH_FULL - ooo_engine. in_DEPTH_FULL
403       
404        // ~~~~~[ Interface : "spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
405        //  in_SPR_SR_IEE - ooo_engine.out_SPR_SR_IEE
406        //  in_SPR_SR_EPH - ooo_engine.out_SPR_SR_EPH
407       
408        // ~~~~~[ Interface : "interrupt" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
409        for (uint32_t j=0; j<_param->_nb_context [i]; ++j)
410          {
411            uint32_t x = _param->_link_thread_with_context [i][j];
412
413            dest = _name;
414#ifdef POSITION
415            _component->interface_map (src ,"interrupt_"+toString(j),
416                                       dest,"interrupt_"+toString(x));
417#endif
418           
419            PORT_MAP(_component,src , "in_INTERRUPT_"+toString(j)+"_ENABLE",
420                                dest, "in_INTERRUPT_"+toString(x)+"_ENABLE");
421          }
422      }
423   
424    // ===================================================================
425    // =====[ ooo_engine ]================================================
426    // ===================================================================
427    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
428      {
429        src = _name+"_ooo_engine_"+toString(i);
430        log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
431       
432        // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
433        {
434          dest = _name;
435#ifdef POSITION
436          _component->interface_map (src ,"",
437                                     dest,"");
438#endif
439          PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
440          PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
441        }
442
443        // ~~~~~[ Interface : "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
444        for (uint32_t j=0; j<_param->_ooo_engine_nb_front_end [i]; ++j)
445          for (uint32_t k=0; k<_param->_ooo_engine_nb_inst_decod[i][j]; ++k)
446            {
447              uint32_t x = _param->_translate_ooo_engine_num_front_end [i][j];
448              dest = _name+"_front_end_"+toString(x);
449#ifdef POSITION
450              _component->interface_map (src ,"rename_"+toString(j)+"_"+toString(k),
451                                         dest,"decod_"                 +toString(k));
452#endif
453             
454              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_VAL"          ,
455                                       dest,"out_DECOD_"                 +toString(k)+"_VAL"          );
456              COMPONENT_MAP(_component,src ,"out_RENAME_"+toString(j)+"_"+toString(k)+"_ACK"          ,
457                                       dest, "in_DECOD_"                 +toString(k)+"_ACK"          );
458              if (_param->_have_port_context_id)
459              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_CONTEXT_ID"   ,
460                                       dest,"out_DECOD_"                 +toString(k)+"_CONTEXT_ID"   );
461              if (_param->_have_port_depth)
462              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_DEPTH"        ,
463                                       dest,"out_DECOD_"                 +toString(k)+"_DEPTH"        );
464              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_TYPE"         ,
465                                       dest,"out_DECOD_"                 +toString(k)+"_TYPE"         );
466              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_OPERATION"    ,
467                                       dest,"out_DECOD_"                 +toString(k)+"_OPERATION"    );
468              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_NO_EXECUTE"   ,
469                                       dest,"out_DECOD_"                 +toString(k)+"_NO_EXECUTE"   );
470//               COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_HAVE_EVENT"   ,
471//                                        dest,"out_DECOD_"                 +toString(k)+"_HAVE_EVENT"   );
472              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_LAST_EVENT"   ,
473                                       dest,"out_DECOD_"                 +toString(k)+"_LAST_EVENT"   );
474              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_IS_DELAY_SLOT",
475                                       dest,"out_DECOD_"                 +toString(k)+"_IS_DELAY_SLOT");
476#ifdef DEBUG
477              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_ADDRESS"      ,
478                                       dest,"out_DECOD_"                 +toString(k)+"_ADDRESS"      );
479#endif
480              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_ADDRESS_NEXT" ,
481                                       dest,"out_DECOD_"                 +toString(k)+"_ADDRESS_NEXT" );
482              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_HAS_IMMEDIAT" ,
483                                       dest,"out_DECOD_"                 +toString(k)+"_HAS_IMMEDIAT" );
484              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_IMMEDIAT"     ,
485                                       dest,"out_DECOD_"                 +toString(k)+"_IMMEDIAT"     );
486              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_READ_RA"      ,
487                                       dest,"out_DECOD_"                 +toString(k)+"_READ_RA"      );
488              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_NUM_REG_RA"   ,
489                                       dest,"out_DECOD_"                 +toString(k)+"_NUM_REG_RA"   );
490              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_READ_RB"      ,
491                                       dest,"out_DECOD_"                 +toString(k)+"_READ_RB"      );
492              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_NUM_REG_RB"   ,
493                                       dest,"out_DECOD_"                 +toString(k)+"_NUM_REG_RB"   );
494              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_READ_RC"      ,
495                                       dest,"out_DECOD_"                 +toString(k)+"_READ_RC"      );
496              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_NUM_REG_RC"   ,
497                                       dest,"out_DECOD_"                 +toString(k)+"_NUM_REG_RC"   );
498              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_WRITE_RD"     ,
499                                       dest,"out_DECOD_"                 +toString(k)+"_WRITE_RD"     );
500              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_NUM_REG_RD"   ,
501                                       dest,"out_DECOD_"                 +toString(k)+"_NUM_REG_RD"   );
502              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_WRITE_RE"     ,
503                                       dest,"out_DECOD_"                 +toString(k)+"_WRITE_RE"     );
504              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_NUM_REG_RE"   ,
505                                       dest,"out_DECOD_"                 +toString(k)+"_NUM_REG_RE"   );
506              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_EXCEPTION_USE",
507                                       dest,"out_DECOD_"                 +toString(k)+"_EXCEPTION_USE");
508              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_EXCEPTION"    ,
509                                       dest,"out_DECOD_"                 +toString(k)+"_EXCEPTION"    );
510       
511              dest = _name+"_glue";
512#ifdef POSITION
513              _component->interface_map (src ,"rename_"+toString(j)+"_"+toString(k),
514                                         dest,"rename_"+toString(j)+"_"+toString(k));
515#endif
516              if (_param->_have_port_front_end_id)
517              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_FRONT_END_ID" ,
518                                       dest,"out_RENAME_"+toString(j)+"_"+toString(k)+"_FRONT_END_ID" );
519            }
520
521        // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~
522        for (uint32_t j=0; j<_param->_nb_inst_branch_complete[i];++j)
523          {
524            dest = _name+"_glue";
525#ifdef POSITION
526            _component->interface_map (src ,"branch_complete_"                           +toString(j),
527                                       dest,"branch_complete_ooo_engine_"+toString(i)+"_"+toString(j));
528#endif
529
530            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                           +toString(j)+"_VAL"            ,
531                                     dest, "in_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_VAL"            );
532            COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"                           +toString(j)+"_ACK"            ,
533                                     dest,"out_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_ACK"            );
534            if (_param->_have_port_front_end_id)
535            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                           +toString(j)+"_FRONT_END_ID"   ,
536                                     dest, "in_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_FRONT_END_ID"   );
537            if (_param->_have_port_context_id)
538            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                           +toString(j)+"_CONTEXT_ID"     ,
539                                     dest, "in_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"     );
540            if (_param->_have_port_depth)
541            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                           +toString(j)+"_DEPTH"          ,
542                                     dest, "in_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_DEPTH"          );
543            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                           +toString(j)+"_ADDRESS"        ,
544                                     dest, "in_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_ADDRESS"        );
545            COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"                           +toString(j)+"_NO_SEQUENCE"    ,
546                                     dest, "in_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NO_SEQUENCE"    );
547            COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"                           +toString(j)+"_MISS_PREDICTION",
548                                     dest,"out_BRANCH_COMPLETE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_MISS_PREDICTION");
549          }     
550
551        // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~
552        {
553          dest = _name+"_glue";
554#ifdef POSITION
555          _component->interface_map (src ,"commit_event",
556                                     dest,"commit_event_ooo_engine_"+toString(i));
557#endif
558         
559          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_VAL"             ,
560                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_VAL"             );
561          COMPONENT_MAP(_component,src , "in_COMMIT_EVENT_ACK"             ,
562                                   dest,"out_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_ACK"             );
563          if (_param->_have_port_front_end_id)
564          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_FRONT_END_ID"    ,
565                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_FRONT_END_ID"    );
566          if (_param->_have_port_context_id)
567          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_CONTEXT_ID"      ,
568                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_CONTEXT_ID"      );
569          if (_param->_have_port_depth)
570          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_DEPTH"           ,
571                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_DEPTH"           );
572          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_TYPE"            ,
573                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_TYPE"            );
574          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_IS_DELAY_SLOT"   ,
575                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_IS_DELAY_SLOT"   );
576          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_ADDRESS"         ,
577                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_ADDRESS"         );
578          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_ADDRESS_EPCR_VAL",
579                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_ADDRESS_EPCR_VAL");
580          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_ADDRESS_EPCR"    ,
581                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_ADDRESS_EPCR"    );
582          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_ADDRESS_EEAR_VAL",
583                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_ADDRESS_EEAR_VAL");
584          COMPONENT_MAP(_component,src ,"out_COMMIT_EVENT_ADDRESS_EEAR"    ,
585                                   dest, "in_COMMIT_EVENT_OOO_ENGINE_"+toString(i)+"_ADDRESS_EEAR"    );
586        }
587
588        // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
589        for (uint32_t j=0; j<_param->_ooo_engine_nb_front_end [i]; ++j)
590          {
591            uint32_t x = _param->_translate_ooo_engine_num_front_end [i][j];
592            for (uint32_t k=0; k<_param->_nb_context[x]; ++k)
593              {
594                dest = _name+"_front_end_"+toString(x);
595#ifdef POSITION
596                _component->interface_map (src ,"event_"+toString(j)+"_"+toString(k),
597                                           dest,"event_"                +toString(k));
598#endif
599
600                COMPONENT_MAP(_component,src , "in_EVENT_"+toString(j)+"_"+toString(k)+"_VAL"             ,
601                                         dest,"out_EVENT_"                +toString(k)+"_VAL"             );
602                COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(j)+"_"+toString(k)+"_ACK"             ,
603                                         dest, "in_EVENT_"                +toString(k)+"_ACK"             );
604                COMPONENT_MAP(_component,src , "in_EVENT_"+toString(j)+"_"+toString(k)+"_ADDRESS"         ,
605                                         dest,"out_EVENT_"                +toString(k)+"_ADDRESS"         );
606                COMPONENT_MAP(_component,src , "in_EVENT_"+toString(j)+"_"+toString(k)+"_ADDRESS_NEXT"    ,
607                                         dest,"out_EVENT_"                +toString(k)+"_ADDRESS_NEXT"    ); 
608                COMPONENT_MAP(_component,src , "in_EVENT_"+toString(j)+"_"+toString(k)+"_ADDRESS_NEXT_VAL",
609                                         dest,"out_EVENT_"                +toString(k)+"_ADDRESS_NEXT_VAL");
610                COMPONENT_MAP(_component,src , "in_EVENT_"+toString(j)+"_"+toString(k)+"_IS_DS_TAKE"      ,
611                                         dest,"out_EVENT_"                +toString(k)+"_IS_DS_TAKE"      );
612              }
613          }
614
615        // ~~~~~[ Interface "spr_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
616        for (uint32_t j=0; j<_param->_ooo_engine_nb_front_end [i]; ++j)
617          {
618            uint32_t x = _param->_translate_ooo_engine_num_front_end [i][j];
619            for (uint32_t k=0; k<_param->_nb_context[x]; ++k)
620              {
621                dest = _name+"_front_end_"+toString(x);
622#ifdef POSITION
623                _component->interface_map (src ,"spr_event_"+toString(j)+"_"+toString(k),
624                                           dest,"spr_event_"                +toString(k));
625#endif
626                COMPONENT_MAP(_component,src , "in_SPR_EVENT_"+toString(j)+"_"+toString(k)+"_VAL"      ,
627                                         dest,"out_SPR_EVENT_"                +toString(k)+"_VAL"      );
628                COMPONENT_MAP(_component,src ,"out_SPR_EVENT_"+toString(j)+"_"+toString(k)+"_ACK"      ,
629                                         dest, "in_SPR_EVENT_"                +toString(k)+"_ACK"      );
630                COMPONENT_MAP(_component,src , "in_SPR_EVENT_"+toString(j)+"_"+toString(k)+"_EPCR"     ,
631                                         dest,"out_SPR_EVENT_"                +toString(k)+"_EPCR"     );
632                COMPONENT_MAP(_component,src , "in_SPR_EVENT_"+toString(j)+"_"+toString(k)+"_EEAR_WEN" ,
633                                         dest,"out_SPR_EVENT_"                +toString(k)+"_EEAR_WEN" );
634                COMPONENT_MAP(_component,src , "in_SPR_EVENT_"+toString(j)+"_"+toString(k)+"_EEAR"     ,
635                                         dest,"out_SPR_EVENT_"                +toString(k)+"_EEAR"     );
636                COMPONENT_MAP(_component,src , "in_SPR_EVENT_"+toString(j)+"_"+toString(k)+"_SR_DSX"   ,
637                                         dest,"out_SPR_EVENT_"                +toString(k)+"_SR_DSX"   );
638                COMPONENT_MAP(_component,src , "in_SPR_EVENT_"+toString(j)+"_"+toString(k)+"_SR_TO_ESR",
639                                         dest,"out_SPR_EVENT_"                +toString(k)+"_SR_TO_ESR");
640              }
641          }
642
643        // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
644        for (uint32_t j=0; j<_param->_ooo_engine_nb_front_end [i]; ++j)
645          {
646            uint32_t x = _param->_translate_ooo_engine_num_front_end [i][j];
647            for (uint32_t k=0; k<_param->_nb_context[x]; ++k)
648              {
649                dest = _name+"_front_end_"+toString(x);
650#ifdef POSITION
651                _component->interface_map (src ,"nb_inst_"+toString(j)+"_"+toString(k),
652                                           dest,"nb_inst_"                +toString(k));
653#endif
654                COMPONENT_MAP(_component,src ,"out_NB_INST_"+toString(j)+"_"+toString(k)+"_COMMIT_ALL",
655                                         dest, "in_NB_INST_"                +toString(k)+"_COMMIT_ALL");
656                COMPONENT_MAP(_component,src ,"out_NB_INST_"+toString(j)+"_"+toString(k)+"_COMMIT_MEM",
657                                         dest, "in_NB_INST_"                +toString(k)+"_COMMIT_MEM");
658                COMPONENT_MAP(_component,src , "in_NB_INST_"+toString(j)+"_"+toString(k)+"_DECOD_ALL" ,
659                                         dest,"out_NB_INST_"                +toString(k)+"_DECOD_ALL" );
660              }
661          }
662
663        // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
664        for (uint32_t j=0; j<_param->_ooo_engine_nb_front_end [i]; ++j)
665          {
666            uint32_t x = _param->_translate_ooo_engine_num_front_end [i][j];
667            for (uint32_t k=0; k<_param->_nb_context[x]; ++k)
668              {
669                dest = _name+"_front_end_"+toString(x);
670#ifdef POSITION
671                _component->interface_map (src ,"depth_"+toString(j)+"_"+toString(k),
672                                           dest,"depth_"                +toString(k));
673#endif
674
675                if (_param->_have_port_depth)
676                  {
677                COMPONENT_MAP(_component,src , "in_DEPTH_"+toString(j)+"_"+toString(k)+"_MIN",
678                                         dest,"out_DEPTH_"                +toString(k)+"_MIN");
679                COMPONENT_MAP(_component,src , "in_DEPTH_"+toString(j)+"_"+toString(k)+"_MAX",
680                                         dest,"out_DEPTH_"                +toString(k)+"_MAX");
681                  }
682                COMPONENT_MAP(_component,src , "in_DEPTH_"+toString(j)+"_"+toString(k)+"_FULL",
683                                         dest,"out_DEPTH_"                +toString(k)+"_FULL");
684              }
685          }
686
687        // ~~~~~[ Interface : "spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
688        for (uint32_t j=0; j<_param->_ooo_engine_nb_front_end [i]; ++j)
689          {
690            uint32_t x = _param->_translate_ooo_engine_num_front_end [i][j];
691            for (uint32_t k=0; k<_param->_nb_context[x]; ++k)
692              {
693                dest = _name+"_front_end_"+toString(x);
694#ifdef POSITION
695                _component->interface_map (src ,"spr_"+toString(j)+"_"+toString(k),
696                                           dest,"spr_"                +toString(k));
697#endif
698
699                COMPONENT_MAP(_component,src ,"out_SPR_"+toString(j)+"_"+toString(k)+"_SR_IEE",
700                                         dest, "in_SPR_"                +toString(k)+"_SR_IEE");
701                COMPONENT_MAP(_component,src ,"out_SPR_"+toString(j)+"_"+toString(k)+"_SR_EPH",
702                                         dest, "in_SPR_"                +toString(k)+"_SR_EPH");
703              }
704          }
705
706        // ~~~~~[ Interface : "issue" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
707        for (uint32_t j=0; j<_param->_nb_inst_issue_queue [i]; ++j)
708          {
709            dest = _name+"_glue";
710#ifdef POSITION
711            _component->interface_map (src ,"issue_"                           +toString(j),
712                                       dest,"issue_ooo_engine_"+toString(i)+"_"+toString(j));
713#endif
714
715            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_VAL"                  ,
716                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_VAL"                  );
717            COMPONENT_MAP(_component,src , "in_ISSUE_"                           +toString(j)+"_ACK"                  ,
718                                     dest,"out_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_ACK"                  );
719            if (_param->_have_port_front_end_id)
720            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_FRONT_END_ID"         ,
721                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_FRONT_END_ID"         );
722            if (_param->_have_port_context_id)
723            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_CONTEXT_ID"           ,
724                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"           );
725            if (_param->_have_port_rob_ptr)
726            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_PACKET_ID"            ,
727                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_PACKET_ID"            );
728            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_TYPE"                 ,
729                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_TYPE"                 );
730            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_OPERATION"            ,
731                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_OPERATION"            );
732            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_CANCEL"               ,
733                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_CANCEL"               );
734            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_STORE_QUEUE_PTR_WRITE",
735                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_WRITE");
736            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_STORE_QUEUE_PTR_READ" ,
737                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_READ" );
738            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_STORE_QUEUE_EMPTY"    ,
739                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_EMPTY"    );
740            if (_param->_have_port_load_queue_ptr)
741            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_LOAD_QUEUE_PTR_WRITE" ,
742                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_LOAD_QUEUE_PTR_WRITE" );
743            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_HAS_IMMEDIAT"         ,
744                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_HAS_IMMEDIAT"         );
745            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_IMMEDIAT"             ,
746                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_IMMEDIAT"             );
747            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_READ_RA"              ,
748                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_READ_RA"              );
749            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RA"           ,
750                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RA"           );
751            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_READ_RB"              ,
752                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_READ_RB"              );
753            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RB"           ,
754                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RB"           );
755            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_READ_RC"              ,
756                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_READ_RC"              );
757            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RC"           ,
758                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RC"           );
759            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_WRITE_RD"             ,
760                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_WRITE_RD"             );
761            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RD"           ,
762                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RD"           );
763            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_WRITE_RE"             ,
764                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_WRITE_RE"             );
765            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RE"           ,
766                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RE"           );
767          }
768
769        // ~~~~~[ Interface "execute_loop" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
770        for (uint32_t j=0; j<_param->_ooo_engine_nb_execute_loop [i]; ++j)
771          {
772            for (uint32_t k=0; k<_param->_ooo_engine_nb_inst_execute [i][j]; ++k)
773              {
774                dest = _name+"_glue";
775#ifdef POSITION
776                _component->interface_map (src ,"execute_loop_"                      +toString(j)+"_"+toString(k),
777                                           dest,"execute_ooo_engine_"+toString(i)+"_"+toString(j)+"_"+toString(k));
778#endif
779
780                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_VAL"         ,
781                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"         );
782                COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_ACK"         ,
783                                         dest, "in_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"         );
784                if (_param->_have_port_front_end_id)
785                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_FRONT_END_ID",
786                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_FRONT_END_ID");
787                if (_param->_have_port_context_id)
788                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_CONTEXT_ID"  ,
789                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_CONTEXT_ID"  );
790                if (_param->_have_port_rob_ptr)
791                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_PACKET_ID"   ,
792                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_PACKET_ID"   );
793//              COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_TYPE"        ,
794//                                       dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_TYPE"        );
795//              COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_OPERATION"   ,
796//                                       dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_OPERATION"   );
797                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_CANCEL"      ,
798                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_CANCEL"      );
799                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_FLAGS"       ,
800                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_FLAGS"       );
801                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_EXCEPTION"   ,
802                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_EXCEPTION"   );
803                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_NO_SEQUENCE" ,
804                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_NO_SEQUENCE" );
805                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_ADDRESS"     ,
806                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_ADDRESS"     );
807                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_DATA"        ,
808                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_DATA"        );
809              }
810          }
811
812//         // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
813//         for (uint32_t j=0; j<_param->_ooo_engine_nb_inst_insert_rob [i]; ++j)
814//           {
815//             dest = _name+"_glue";
816// #ifdef POSITION
817//             _component->interface_map (src ,"insert_"                           +toString(j),
818//                                        dest,"insert_ooo_engine_"+toString(i)+"_"+toString(j));
819// #endif
820           
821//             COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_VAL"       ,
822//                                      dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_VAL"       );
823//             COMPONENT_MAP(_component,src , "in_INSERT_"                           +toString(j)+"_ACK"       ,
824//                                      dest,"out_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_ACK"       );
825//             COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RD_USE"    ,
826//                                      dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RD_USE"    );
827//             COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RD_NUM_REG",
828//                                      dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RD_NUM_REG");
829//             COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RE_USE"    ,
830//                                      dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RE_USE"    );
831//             COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RE_NUM_REG",
832//                                      dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RE_NUM_REG");
833//           }
834      }
835
836    // ===================================================================
837    // =====[ execute_loop ]==============================================
838    // ===================================================================
839    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
840      {
841        src = _name+"_execute_loop_"+toString(i);
842        log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
843       
844        // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
845        {
846          dest = _name;
847#ifdef POSITION
848          _component->interface_map (src ,"",
849                                     dest,"");
850#endif
851          PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
852          PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
853        }
854
855        // ~~~~~[ Interface "execute_loop_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~
856        for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
857          {
858            dest = _name+"_glue";
859#ifdef POSITION
860            _component->interface_map (src ,"execute_loop_in_"                   +toString(j),
861                                       dest,"issue_execute_loop_"+toString(i)+"_"+toString(j));
862#endif
863
864            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_VAL"                  ,
865                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_VAL"                  );
866            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_IN_"                   +toString(j)+"_ACK"                  ,
867                                     dest, "in_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_ACK"                  );
868            if (_param->_have_port_front_end_id)
869            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_FRONT_END_ID"         ,
870                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_FRONT_END_ID"         );
871            if (_param->_have_port_context_id)
872            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_CONTEXT_ID"           ,
873                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"           );
874            if (_param->_have_port_ooo_engine_id)
875            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_OOO_ENGINE_ID"        ,
876                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OOO_ENGINE_ID"        );
877            if (_param->_have_port_rob_ptr)
878            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_PACKET_ID"            ,
879                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_PACKET_ID"            );
880            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_OPERATION"            ,
881                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OPERATION"            );
882            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_TYPE"                 ,
883                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_TYPE"                 );
884            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_CANCEL"               ,
885                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_CANCEL"               );
886            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_STORE_QUEUE_PTR_WRITE",
887                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_WRITE");
888            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_STORE_QUEUE_PTR_READ" ,
889                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_READ" );
890            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_STORE_QUEUE_EMPTY"    ,
891                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_EMPTY"    );
892            if (_param->_have_port_load_queue_ptr)
893            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_LOAD_QUEUE_PTR_WRITE" ,
894                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_LOAD_QUEUE_PTR_WRITE" );
895            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_HAS_IMMEDIAT"         ,
896                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_HAS_IMMEDIAT"         );
897            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_IMMEDIAT"             ,
898                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_IMMEDIAT"             );
899            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_READ_RA"              ,
900                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_READ_RA"              );
901            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RA"           ,
902                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RA"           );
903            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_READ_RB"              ,
904                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_READ_RB"              );
905            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RB"           ,
906                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RB"           );
907            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_READ_RC"              ,
908                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_READ_RC"              );
909            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RC"           ,
910                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RC"           );
911            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_WRITE_RD"             ,
912                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_WRITE_RD"             );
913            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RD"           ,
914                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RD"           );
915            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_WRITE_RE"             ,
916                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_WRITE_RE"             );
917            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RE"           ,
918                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RE"           );
919          }
920
921        // ~~~~~[ Interface "execute_loop_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~
922        for (uint32_t j=0; j<_param->_nb_write_unit[i]; ++j)
923          {
924            dest = _name+"_glue";
925#ifdef POSITION
926            _component->interface_map (src ,"execute_loop_out_"                    +toString(j),
927                                       dest,"execute_execute_loop_"+toString(i)+"_"+toString(j));
928#endif
929
930            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_VAL"          ,
931                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_VAL"          );
932            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_OUT_"                    +toString(j)+"_ACK"          ,
933                                     dest,"out_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_ACK"          );
934            if (_param->_have_port_context_id)
935            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_CONTEXT_ID"   ,
936                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"   );
937            if (_param->_have_port_front_end_id)
938            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_FRONT_END_ID" ,
939                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_FRONT_END_ID" );
940            if (_param->_have_port_ooo_engine_id)
941            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_OOO_ENGINE_ID",
942                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OOO_ENGINE_ID");
943            if (_param->_have_port_rob_ptr)
944            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_PACKET_ID"    ,
945                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_PACKET_ID"    );
946//          COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_OPERATION"    ,
947//                                   dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OPERATION"    );
948//          COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_TYPE"         ,
949//                                   dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_TYPE"         );
950            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_CANCEL"       ,
951                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_CANCEL"       );
952            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_FLAGS"        ,
953                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_FLAGS"        );
954            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_EXCEPTION"    ,
955                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_EXCEPTION"    );
956            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_NO_SEQUENCE"  ,
957                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NO_SEQUENCE"  );
958            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_ADDRESS"      ,
959                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_ADDRESS"      );
960            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_DATA"         ,
961                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_DATA"         );
962          }
963
964//         // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
965//         for (uint32_t j=0; j<_param->_execute_loop_nb_ooo_engine[i]; ++j)
966//           for (uint32_t k=0; k<_param->_execute_loop_nb_inst_insert_rob[i][j]; ++k)
967//             {
968//               dest = _name+"_glue";
969// #ifdef POSITION
970//               _component->interface_map (src ,"insert_rob_"                         +toString(j)+"_"+toString(k),
971//                                          dest,"insert_execute_loop_"+toString(i)+"_"+toString(j)+"_"+toString(k));
972// #endif
973
974//               COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_VAL"       ,
975//                                        dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"       );
976//               COMPONENT_MAP(_component,src ,"out_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_ACK"       ,
977//                                        dest, "in_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"       );
978//               COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RD_USE"    ,
979//                                        dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RD_USE"    );
980//               COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RD_NUM_REG",
981//                                        dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RD_NUM_REG");
982//               COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RE_USE"    ,
983//                                        dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RE_USE"    );
984//               COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RE_NUM_REG",
985//                                        dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RE_NUM_REG");
986//             }       
987
988        // ~~~~~[ Interface "dcache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
989        // out_DCACHE_REQ_VAL        - dcache_access. in_LSQ_REQ_VAL       
990        //  in_DCACHE_REQ_ACK        - dcache_access.out_LSQ_REQ_ACK       
991        // out_DCACHE_REQ_CONTEXT_ID - dcache_access. in_LSQ_REQ_CONTEXT_ID
992        // out_DCACHE_REQ_PACKET_ID  - dcache_access. in_LSQ_REQ_PACKET_ID
993        // out_DCACHE_REQ_ADDRESS    - dcache_access. in_LSQ_REQ_ADDRESS   
994        // out_DCACHE_REQ_TYPE       - dcache_access. in_LSQ_REQ_TYPE     
995        // out_DCACHE_REQ_WDATA      - dcache_access. in_LSQ_REQ_WDATA
996
997        // ~~~~~[ Interface "dcache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
998        //  in_DCACHE_RSP_VAL        - dcache_access.out_LSQ_RSP_VAL       
999        // out_DCACHE_RSP_ACK        - dcache_access. in_LSQ_RSP_ACK       
1000        //  in_DCACHE_RSP_CONTEXT_ID - dcache_access.out_LSQ_RSP_CONTEXT_ID
1001        //  in_DCACHE_RSP_PACKET_ID  - dcache_access.out_LSQ_RSP_PACKET_ID
1002        //  in_DCACHE_RSP_RDATA      - dcache_access.out_LSQ_RSP_RDATA     
1003        //  in_DCACHE_RSP_ERROR      - dcache_access.out_LSQ_RSP_ERROR
1004      }
1005
1006    // ===================================================================
1007    // =====[ icache_access ]=============================================
1008    // ===================================================================
1009    {
1010      src = _name+"_icache_access";
1011      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
1012     
1013      // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1014      {
1015        dest = _name;
1016#ifdef POSITION
1017        _component->interface_map (src ,"",
1018                                   dest,"");
1019#endif
1020        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
1021        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
1022      }
1023
1024    // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1025    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
1026      {
1027        dest = _name;
1028#ifdef POSITION
1029        _component->interface_map (src ,"icache_req_"+toString(i),
1030                                   dest,"icache_req_"+toString(i));
1031#endif
1032       
1033        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_VAL"      ,
1034                            dest,"out_ICACHE_REQ_"+toString(i)+"_VAL"      );
1035        PORT_MAP(_component,src , "in_ICACHE_REQ_"+toString(i)+"_ACK"      ,
1036                            dest, "in_ICACHE_REQ_"+toString(i)+"_ACK"      );
1037        if (_param->_have_port_icache_thread_id)
1038        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_THREAD_ID",
1039                            dest,"out_ICACHE_REQ_"+toString(i)+"_THREAD_ID");
1040        if (_param->_have_port_icache_packet_id)
1041        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_PACKET_ID",
1042                            dest,"out_ICACHE_REQ_"+toString(i)+"_PACKET_ID");
1043        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_ADDRESS"  ,
1044                            dest,"out_ICACHE_REQ_"+toString(i)+"_ADDRESS"  );
1045        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_TYPE"     ,
1046                            dest,"out_ICACHE_REQ_"+toString(i)+"_TYPE"     );
1047      }
1048
1049    // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1050    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
1051      {
1052        dest = _name;
1053#ifdef POSITION
1054        _component->interface_map (src ,"icache_rsp_"+toString(i),
1055                                   dest,"icache_rsp_"+toString(i));
1056#endif
1057
1058        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_VAL"        ,
1059                            dest, "in_ICACHE_RSP_"+toString(i)+"_VAL"        );
1060        PORT_MAP(_component,src ,"out_ICACHE_RSP_"+toString(i)+"_ACK"        ,
1061                            dest,"out_ICACHE_RSP_"+toString(i)+"_ACK"        );
1062        if (_param->_have_port_icache_thread_id)
1063        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_THREAD_ID"  ,
1064                            dest, "in_ICACHE_RSP_"+toString(i)+"_THREAD_ID"  );
1065        if (_param->_have_port_icache_packet_id)
1066        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_PACKET_ID"  ,
1067                            dest, "in_ICACHE_RSP_"+toString(i)+"_PACKET_ID"  );
1068        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_ERROR"      ,
1069                            dest, "in_ICACHE_RSP_"+toString(i)+"_ERROR"      );
1070
1071        for (uint32_t j=0; j<_param->_icache_nb_instruction[i];++j)
1072          {
1073#ifdef POSITION
1074            _component->interface_map (src ,"icache_rsp_"+toString(i)+"_"+toString(j),
1075                                       dest,"icache_rsp_"+toString(i)+"_"+toString(j));
1076#endif
1077
1078                           
1079            PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_"+toString(j)+"_INSTRUCTION",
1080                                dest, "in_ICACHE_RSP_"+toString(i)+"_"+toString(j)+"_INSTRUCTION");
1081          }
1082      }
1083
1084    // ~~~~~[ Interface "context_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1085    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
1086      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
1087        {
1088          dest = _name+"_front_end_"+toString(i);
1089#ifdef POSITION
1090          _component->interface_map (src ,"context_req_"+toString(i)+"_"+toString(j),
1091                                     dest,"icache_req_"                 +toString(j));
1092#endif
1093
1094          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_VAL"      ,
1095                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_VAL"      );
1096          COMPONENT_MAP(_component,src ,"out_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_ACK"      ,
1097                                   dest, "in_ICACHE_REQ_"                 +toString(j)+"_ACK"      );
1098//        COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_THREAD_ID",
1099//                                 dest,"out_ICACHE_REQ_"                 +toString(j)+"_THREAD_ID");
1100          if (_param->_have_port_icache_packet_id)
1101          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_PACKET_ID",
1102                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_PACKET_ID");
1103          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_ADDRESS"  ,
1104                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_ADDRESS"  );
1105          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_TYPE"     ,
1106                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_TYPE"     );
1107        }   
1108   
1109    // ~~~~~[ Interface "context_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1110    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
1111      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
1112        {
1113          dest = _name+"_front_end_"+toString(i);
1114#ifdef POSITION
1115          _component->interface_map (src ,"context_rsp_"+toString(i)+"_"+toString(j),
1116                                     dest,"icache_rsp_"                 +toString(j));
1117#endif
1118
1119          COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_VAL"        ,
1120                                   dest, "in_ICACHE_RSP_"                 +toString(j)+"_VAL"        );
1121          COMPONENT_MAP(_component,src , "in_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_ACK"        ,
1122                                   dest,"out_ICACHE_RSP_"                 +toString(j)+"_ACK"        );
1123//        COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_THREAD_ID"  ,
1124//                                 dest, "in_ICACHE_RSP_"                 +toString(j)+"_THREAD_ID"  );
1125          if (_param->_have_port_icache_packet_id)
1126          COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_PACKET_ID"  ,
1127                                   dest, "in_ICACHE_RSP_"                 +toString(j)+"_PACKET_ID"  );
1128          COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_ERROR"      ,
1129                                   dest, "in_ICACHE_RSP_"                 +toString(j)+"_ERROR"      );
1130
1131          for (uint32_t k=0; k<_param->_front_end_nb_inst_fetch[i][j];++k)
1132            {
1133#ifdef POSITION
1134              _component->interface_map (src ,"context_rsp_"+toString(i)+"_"+toString(j)+"_"+toString(k),
1135                                         dest,"icache_rsp_"                 +toString(j)+"_"+toString(k));
1136#endif
1137             
1138              COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_INSTRUCTION",
1139                                       dest, "in_ICACHE_RSP_"                 +toString(j)+"_"+toString(k)+"_INSTRUCTION");
1140            }
1141         
1142        }
1143    }
1144
1145    // ===================================================================
1146    // =====[ dcache_access ]=============================================
1147    // ===================================================================
1148    {
1149      src = _name+"_dcache_access";
1150      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
1151     
1152      // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1153      {
1154        dest = _name;
1155#ifdef POSITION
1156        _component->interface_map (src ,"",
1157                                   dest,"");
1158#endif
1159        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
1160        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
1161      }
1162
1163    // ~~~~~[ Interface "dcache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1164    for (uint32_t i=0; i<_param->_nb_dcache_port; ++i)
1165      {
1166        dest = _name;
1167#ifdef POSITION
1168        _component->interface_map (src ,"dcache_req_"+toString(i),
1169                                   dest,"dcache_req_"+toString(i));
1170#endif
1171       
1172        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_VAL"      ,
1173                            dest,"out_DCACHE_REQ_"+toString(i)+"_VAL"      );
1174        PORT_MAP(_component,src , "in_DCACHE_REQ_"+toString(i)+"_ACK"      ,
1175                            dest, "in_DCACHE_REQ_"+toString(i)+"_ACK"      );
1176        if (_param->_have_port_dcache_thread_id)
1177        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_THREAD_ID",
1178                            dest,"out_DCACHE_REQ_"+toString(i)+"_THREAD_ID");
1179        if (_param->_have_port_dcache_packet_id)
1180        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_PACKET_ID",
1181                            dest,"out_DCACHE_REQ_"+toString(i)+"_PACKET_ID");
1182        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_ADDRESS"  ,
1183                            dest,"out_DCACHE_REQ_"+toString(i)+"_ADDRESS"  );
1184        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_WDATA"    ,
1185                            dest,"out_DCACHE_REQ_"+toString(i)+"_WDATA"    );
1186        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_TYPE"     ,
1187                            dest,"out_DCACHE_REQ_"+toString(i)+"_TYPE"     );
1188      }
1189
1190    // ~~~~~[ Interface "dcache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1191    for (uint32_t i=0; i<_param->_nb_dcache_port; ++i)
1192      {
1193        dest = _name;
1194#ifdef POSITION
1195        _component->interface_map (src ,"dcache_rsp_"+toString(i),
1196                                   dest,"dcache_rsp_"+toString(i));
1197#endif
1198
1199        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_VAL"        ,
1200                            dest, "in_DCACHE_RSP_"+toString(i)+"_VAL"        );
1201        PORT_MAP(_component,src ,"out_DCACHE_RSP_"+toString(i)+"_ACK"        ,
1202                            dest,"out_DCACHE_RSP_"+toString(i)+"_ACK"        );
1203        if (_param->_have_port_dcache_thread_id)
1204        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_THREAD_ID"  ,
1205                            dest, "in_DCACHE_RSP_"+toString(i)+"_THREAD_ID"  );
1206        if (_param->_have_port_dcache_packet_id)
1207        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_PACKET_ID"  ,
1208                            dest, "in_DCACHE_RSP_"+toString(i)+"_PACKET_ID"  );
1209        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_RDATA"      ,
1210                            dest, "in_DCACHE_RSP_"+toString(i)+"_RDATA"      );
1211        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_ERROR"      ,
1212                            dest, "in_DCACHE_RSP_"+toString(i)+"_ERROR"      );
1213      }
1214   
1215    // ~~~~~[ Interface "lsq_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1216    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
1217      for (uint32_t j=0; j<_param->_execute_loop_nb_load_store_unit[i]; ++j)
1218        for (uint32_t k=0; k<_param->_execute_loop_nb_cache_port [i][j]; ++k)
1219          {
1220            dest = _name+"_execute_loop_"+toString(i);
1221#ifdef POSITION
1222            _component->interface_map (src ,"lsq_req_"   +toString(i)+"_"+toString(j)+"_"+toString(k),
1223                                       dest,"dcache_req_"                +toString(j)+"_"+toString(k));
1224#endif
1225
1226            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"      ,
1227                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_VAL"      );
1228            COMPONENT_MAP(_component,src ,"out_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"      ,
1229                                     dest, "in_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_ACK"      );
1230            if (_param->_have_port_dcache_thread_id)
1231            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_THREAD_ID",
1232                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_CONTEXT_ID");
1233            if (_param->_have_port_dcache_packet_id)
1234            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_PACKET_ID",
1235                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_PACKET_ID");
1236            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ADDRESS"  ,
1237                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_ADDRESS"  );
1238            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_WDATA"    ,
1239                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_WDATA"    );
1240            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_TYPE"     ,
1241                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_TYPE"     );
1242          }
1243
1244    // ~~~~~[ Interface "lsq_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1245    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
1246      for (uint32_t j=0; j<_param->_execute_loop_nb_load_store_unit[i]; ++j)
1247        for (uint32_t k=0; k<_param->_execute_loop_nb_cache_port [i][j]; ++k)
1248          {
1249            dest = _name+"_execute_loop_"+toString(i);
1250#ifdef POSITION
1251            _component->interface_map (src ,"lsq_rsp_"   +toString(i)+"_"+toString(j)+"_"+toString(k),
1252                                       dest,"dcache_rsp_"                +toString(j)+"_"+toString(k));
1253#endif
1254
1255            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"      ,
1256                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_VAL"      );
1257            COMPONENT_MAP(_component,src , "in_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"      ,
1258                                     dest,"out_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_ACK"      );
1259            if (_param->_have_port_dcache_thread_id)
1260            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_THREAD_ID",
1261                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_CONTEXT_ID");
1262            if (_param->_have_port_dcache_packet_id)
1263            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_PACKET_ID",
1264                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_PACKET_ID");
1265            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_RDATA"    ,
1266                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_RDATA"    );
1267            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ERROR"    ,
1268                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_ERROR"    );
1269          }
1270    }
1271
1272    // ===================================================================
1273    // =====[ glue ]======================================================
1274    // ===================================================================
1275    {
1276      src = _name+"_glue";
1277      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
1278     
1279      // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1280      {
1281        dest = _name;
1282#ifdef POSITION
1283        _component->interface_map (src ,"",
1284                                   dest,"");
1285#endif
1286        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
1287        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
1288      }
1289
1290      // ~~~~~[ Interface : "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
1291      // out_RENAME_FRONT_END_ID - ooo_engine. in_RENAME_FRONT_END_ID
1292     
1293      // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~
1294      // out_BRANCH_COMPLETE_FRONT_END_VAL             - front_end. in_BRANCH_COMPLETE_VAL           
1295      //  in_BRANCH_COMPLETE_FRONT_END_ACK             - front_end.out_BRANCH_COMPLETE_ACK           
1296      // out_BRANCH_COMPLETE_FRONT_END_CONTEXT_ID      - front_end. in_BRANCH_COMPLETE_CONTEXT_ID     
1297      // out_BRANCH_COMPLETE_FRONT_END_DEPTH           - front_end. in_BRANCH_COMPLETE_DEPTH         
1298      // out_BRANCH_COMPLETE_FRONT_END_ADDRESS         - front_end. in_BRANCH_COMPLETE_ADDRESS       
1299      // out_BRANCH_COMPLETE_FRONT_END_FLAG            - front_end. in_BRANCH_COMPLETE_NO_SEQUENCE   
1300      //  in_BRANCH_COMPLETE_FRONT_END_MISS_PREDICTION - front_end.out_BRANCH_COMPLETE_MISS_PREDICTION
1301     
1302      //  in_BRANCH_COMPLETE_OOO_ENGINE_VAL            - ooo_engine.out_BRANCH_COMPLETE_VAL           
1303      // out_BRANCH_COMPLETE_OOO_ENGINE_ACK            - ooo_engine. in_BRANCH_COMPLETE_ACK           
1304      //  in_BRANCH_COMPLETE_OOO_ENGINE_FRONT_END_ID   - ooo_engine.out_BRANCH_COMPLETE_FRONT_END_ID   
1305      //  in_BRANCH_COMPLETE_OOO_ENGINE_CONTEXT_ID     - ooo_engine.out_BRANCH_COMPLETE_CONTEXT_ID     
1306      //  in_BRANCH_COMPLETE_OOO_ENGINE_DEPTH          - ooo_engine.out_BRANCH_COMPLETE_DEPTH         
1307      //  in_BRANCH_COMPLETE_OOO_ENGINE_ADDRESS        - ooo_engine.out_BRANCH_COMPLETE_ADDRESS       
1308      //  in_BRANCH_COMPLETE_OOO_ENGINE_FLAG           - ooo_engine.out_BRANCH_COMPLETE_NO_SEQUENCE   
1309      // out_BRANCH_COMPLETE_OOO_ENGINE_MISS_PREDICTION- ooo_engine. in_BRANCH_COMPLETE_MISS_PREDICTION
1310     
1311      // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1312      // out_COMMIT_EVENT_FRONT_END_VAL              - front_end. in_COMMIT_EVENT_VAL             
1313      //  in_COMMIT_EVENT_FRONT_END_ACK              - front_end.out_COMMIT_EVENT_ACK             
1314      // out_COMMIT_EVENT_FRONT_END_CONTEXT_ID       - front_end. in_COMMIT_EVENT_CONTEXT_ID     
1315      // out_COMMIT_EVENT_FRONT_END_DEPTH            - front_end. in_COMMIT_EVENT_DEPTH           
1316      // out_COMMIT_EVENT_FRONT_END_TYPE             - front_end. in_COMMIT_EVENT_TYPE           
1317      // out_COMMIT_EVENT_FRONT_END_IS_DELAY_SLOT    - front_end. in_COMMIT_EVENT_IS_DELAY_SLOT   
1318      // out_COMMIT_EVENT_FRONT_END_ADDRESS          - front_end. in_COMMIT_EVENT_ADDRESS         
1319      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR_VAL - front_end. in_COMMIT_EVENT_ADDRESS_EPCR_VAL
1320      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR     - front_end. in_COMMIT_EVENT_ADDRESS_EPCR   
1321      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR_VAL - front_end. in_COMMIT_EVENT_ADDRESS_EEAR_VAL
1322      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR     - front_end. in_COMMIT_EVENT_ADDRESS_EEAR   
1323     
1324      //  in_COMMIT_EVENT_OOO_ENGINE_VAL             - ooo_engine.out_COMMIT_EVENT_VAL             
1325      // out_COMMIT_EVENT_OOO_ENGINE_ACK             - ooo_engine. in_COMMIT_EVENT_ACK             
1326      //  in_COMMIT_EVENT_OOO_ENGINE_FRONT_END_ID    - ooo_engine.out_COMMIT_EVENT_FRONT_END_ID   
1327      //  in_COMMIT_EVENT_OOO_ENGINE_CONTEXT_ID      - ooo_engine.out_COMMIT_EVENT_CONTEXT_ID     
1328      //  in_COMMIT_EVENT_OOO_ENGINE_DEPTH           - ooo_engine.out_COMMIT_EVENT_DEPTH           
1329      //  in_COMMIT_EVENT_OOO_ENGINE_TYPE            - ooo_engine.out_COMMIT_EVENT_TYPE           
1330      //  in_COMMIT_EVENT_OOO_ENGINE_IS_DELAY_SLOT   - ooo_engine.out_COMMIT_EVENT_IS_DELAY_SLOT   
1331      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS         - ooo_engine.out_COMMIT_EVENT_ADDRESS         
1332      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR_VAL- ooo_engine.out_COMMIT_EVENT_ADDRESS_EPCR_VAL
1333      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR    - ooo_engine.out_COMMIT_EVENT_ADDRESS_EPCR   
1334      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL- ooo_engine.out_COMMIT_EVENT_ADDRESS_EEAR_VAL
1335      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR    - ooo_engine.out_COMMIT_EVENT_ADDRESS_EEAR   
1336     
1337      // ~~~~~[ Interface : "issue" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1338      //  in_ISSUE_OOO_ENGINE_VAL                   - ooo_engine.out_ISSUE_VAL                 
1339      // out_ISSUE_OOO_ENGINE_ACK                   - ooo_engine. in_ISSUE_ACK                 
1340      //  in_ISSUE_OOO_ENGINE_FRONT_END_ID          - ooo_engine.out_ISSUE_FRONT_END_ID         
1341      //  in_ISSUE_OOO_ENGINE_CONTEXT_ID            - ooo_engine.out_ISSUE_CONTEXT_ID           
1342      //  in_ISSUE_OOO_ENGINE_PACKET_ID             - ooo_engine.out_ISSUE_PACKET_ID           
1343      //  in_ISSUE_OOO_ENGINE_TYPE                  - ooo_engine.out_ISSUE_TYPE                 
1344      //  in_ISSUE_OOO_ENGINE_OPERATION             - ooo_engine.out_ISSUE_OPERATION           
1345      //  in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE - ooo_engine.out_ISSUE_STORE_QUEUE_PTR_WRITE
1346      //  in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_READ  - ooo_engine.out_ISSUE_STORE_QUEUE_PTR_READ
1347      //  in_ISSUE_OOO_ENGINE_STORE_QUEUE_EMPTY     - ooo_engine.out_ISSUE_STORE_QUEUE_EMPTY   
1348      //  in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  - ooo_engine.out_ISSUE_LOAD_QUEUE_PTR_WRITE
1349      //  in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          - ooo_engine.out_ISSUE_HAS_IMMEDIAT         
1350      //  in_ISSUE_OOO_ENGINE_IMMEDIAT              - ooo_engine.out_ISSUE_IMMEDIAT             
1351      //  in_ISSUE_OOO_ENGINE_READ_RA               - ooo_engine.out_ISSUE_READ_RA             
1352      //  in_ISSUE_OOO_ENGINE_NUM_REG_RA            - ooo_engine.out_ISSUE_NUM_REG_RA           
1353      //  in_ISSUE_OOO_ENGINE_READ_RB               - ooo_engine.out_ISSUE_READ_RB             
1354      //  in_ISSUE_OOO_ENGINE_NUM_REG_RB            - ooo_engine.out_ISSUE_NUM_REG_RB           
1355      //  in_ISSUE_OOO_ENGINE_READ_RC               - ooo_engine.out_ISSUE_READ_RC             
1356      //  in_ISSUE_OOO_ENGINE_NUM_REG_RC            - ooo_engine.out_ISSUE_NUM_REG_RC           
1357      //  in_ISSUE_OOO_ENGINE_WRITE_RD              - ooo_engine.out_ISSUE_WRITE_RD             
1358      //  in_ISSUE_OOO_ENGINE_NUM_REG_RD            - ooo_engine.out_ISSUE_NUM_REG_RD           
1359      //  in_ISSUE_OOO_ENGINE_WRITE_RE              - ooo_engine.out_ISSUE_WRITE_RE             
1360      //  in_ISSUE_OOO_ENGINE_NUM_REG_RE            - ooo_engine.out_ISSUE_NUM_REG_RE           
1361     
1362      // out_ISSUE_EXECUTE_LOOP_VAL                   - execute_loop. in_EXECUTE_LOOP_IN_VAL                 
1363      //  in_ISSUE_EXECUTE_LOOP_ACK                   - execute_loop. in_EXECUTE_LOOP_IN_ACK                 
1364      // out_ISSUE_EXECUTE_LOOP_CONTEXT_ID            - execute_loop. in_EXECUTE_LOOP_IN_CONTEXT_ID           
1365      // out_ISSUE_EXECUTE_LOOP_FRONT_END_ID          - execute_loop. in_EXECUTE_LOOP_IN_FRONT_END_ID         
1366      // out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID         - execute_loop. in_EXECUTE_LOOP_IN_OOO_ENGINE_ID       
1367      // out_ISSUE_EXECUTE_LOOP_PACKET_ID             - execute_loop. in_EXECUTE_LOOP_IN_PACKET_ID           
1368      // out_ISSUE_EXECUTE_LOOP_OPERATION             - execute_loop. in_EXECUTE_LOOP_IN_OPERATION           
1369      // out_ISSUE_EXECUTE_LOOP_TYPE                  - execute_loop. in_EXECUTE_LOOP_IN_TYPE                 
1370      // out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE - execute_loop. in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_WRITE
1371      // out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_READ  - execute_loop. in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_READ
1372      // out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_EMPTY     - execute_loop. in_EXECUTE_LOOP_IN_STORE_QUEUE_EMPTY   
1373      // out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE  - execute_loop. in_EXECUTE_LOOP_IN_LOAD_QUEUE_PTR_WRITE
1374      // out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT          - execute_loop. in_EXECUTE_LOOP_IN_HAS_IMMEDIAT         
1375      // out_ISSUE_EXECUTE_LOOP_IMMEDIAT              - execute_loop. in_EXECUTE_LOOP_IN_IMMEDIAT             
1376      // out_ISSUE_EXECUTE_LOOP_READ_RA               - execute_loop. in_EXECUTE_LOOP_IN_READ_RA             
1377      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RA            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RA           
1378      // out_ISSUE_EXECUTE_LOOP_READ_RB               - execute_loop. in_EXECUTE_LOOP_IN_READ_RB             
1379      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RB            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RB           
1380      // out_ISSUE_EXECUTE_LOOP_READ_RC               - execute_loop. in_EXECUTE_LOOP_IN_READ_RC             
1381      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RC            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RC           
1382      // out_ISSUE_EXECUTE_LOOP_WRITE_RD              - execute_loop. in_EXECUTE_LOOP_IN_WRITE_RD             
1383      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RD            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RD           
1384      // out_ISSUE_EXECUTE_LOOP_WRITE_RE              - execute_loop. in_EXECUTE_LOOP_IN_WRITE_RE             
1385      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RE            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RE           
1386 
1387 
1388      // ~~~~~[ Interface "execute_loop" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1389      //   out_EXECUTE_OOO_ENGINE_VAL          - ooo_engine. in_EXECUTE_LOOP_VAL         
1390      //    in_EXECUTE_OOO_ENGINE_ACK          - ooo_engine.out_EXECUTE_LOOP_ACK         
1391      //   out_EXECUTE_OOO_ENGINE_FRONT_END_ID - ooo_engine. in_EXECUTE_LOOP_FRONT_END_ID
1392      //   out_EXECUTE_OOO_ENGINE_CONTEXT_ID   - ooo_engine. in_EXECUTE_LOOP_CONTEXT_ID 
1393      //   out_EXECUTE_OOO_ENGINE_PACKET_ID    - ooo_engine. in_EXECUTE_LOOP_PACKET_ID   
1394      //// out_EXECUTE_OOO_ENGINE_TYPE         - ooo_engine. in_EXECUTE_LOOP_TYPE       
1395      //// out_EXECUTE_OOO_ENGINE_OPERATION    - ooo_engine. in_EXECUTE_LOOP_OPERATION   
1396      //   out_EXECUTE_OOO_ENGINE_FLAGS        - ooo_engine. in_EXECUTE_LOOP_FLAGS       
1397      //   out_EXECUTE_OOO_ENGINE_EXCEPTION    - ooo_engine. in_EXECUTE_LOOP_EXCEPTION   
1398      //   out_EXECUTE_OOO_ENGINE_NO_SEQUENCE  - ooo_engine. in_EXECUTE_LOOP_NO_SEQUENCE
1399      //   out_EXECUTE_OOO_ENGINE_ADDRESS      - ooo_engine. in_EXECUTE_LOOP_ADDRESS     
1400      //   out_EXECUTE_OOO_ENGINE_DATA         - ooo_engine. in_EXECUTE_LOOP_DATA       
1401 
1402      //    in_EXECUTE_EXECUTE_LOOP_VAL           - execute_loop.out_EXECUTE_LOOP_OUT_VAL         
1403      //   out_EXECUTE_EXECUTE_LOOP_ACK           - execute_loop.out_EXECUTE_LOOP_OUT_ACK         
1404      //    in_EXECUTE_EXECUTE_LOOP_CONTEXT_ID    - execute_loop.out_EXECUTE_LOOP_OUT_CONTEXT_ID   
1405      //    in_EXECUTE_EXECUTE_LOOP_FRONT_END_ID  - execute_loop.out_EXECUTE_LOOP_OUT_FRONT_END_ID
1406      //    in_EXECUTE_EXECUTE_LOOP_OOO_ENGINE_ID - execute_loop.out_EXECUTE_LOOP_OUT_OOO_ENGINE_ID
1407      //    in_EXECUTE_EXECUTE_LOOP_PACKET_ID     - execute_loop.out_EXECUTE_LOOP_OUT_PACKET_ID   
1408      ////  in_EXECUTE_EXECUTE_LOOP_OPERATION     - execute_loop.out_EXECUTE_LOOP_OUT_OPERATION   
1409      ////  in_EXECUTE_EXECUTE_LOOP_TYPE          - execute_loop.out_EXECUTE_LOOP_OUT_TYPE         
1410      //    in_EXECUTE_EXECUTE_LOOP_FLAGS         - execute_loop.out_EXECUTE_LOOP_OUT_FLAGS       
1411      //    in_EXECUTE_EXECUTE_LOOP_EXCEPTION     - execute_loop.out_EXECUTE_LOOP_OUT_EXCEPTION   
1412      //    in_EXECUTE_EXECUTE_LOOP_NO_SEQUENCE   - execute_loop.out_EXECUTE_LOOP_OUT_NO_SEQUENCE 
1413      //    in_EXECUTE_EXECUTE_LOOP_ADDRESS       - execute_loop.out_EXECUTE_LOOP_OUT_ADDRESS     
1414      //    in_EXECUTE_EXECUTE_LOOP_DATA          - execute_loop.out_EXECUTE_LOOP_OUT_DATA         
1415
1416      // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1417      //  in_INSERT_OOO_ENGINE_VAL        - ooo_engine.out_INSERT_VAL       
1418      // out_INSERT_OOO_ENGINE_ACK        - ooo_engine. in_INSERT_ACK       
1419      //  in_INSERT_OOO_ENGINE_RD_USE     - ooo_engine.out_INSERT_RD_USE   
1420      //  in_INSERT_OOO_ENGINE_RD_NUM_REG - ooo_engine.out_INSERT_RD_NUM_REG
1421      //  in_INSERT_OOO_ENGINE_RE_USE     - ooo_engine.out_INSERT_RE_USE   
1422      //  in_INSERT_OOO_ENGINE_RE_NUM_REG - ooo_engine.out_INSERT_RE_NUM_REG
1423     
1424      // out_INSERT_EXECUTE_LOOP_VAL        - execute_loop. in_INSERT_ROB_VAL       
1425      //  in_INSERT_EXECUTE_LOOP_ACK        - execute_loop.out_INSERT_ROB_ACK       
1426      // out_INSERT_EXECUTE_LOOP_RD_USE     - execute_loop. in_INSERT_ROB_RD_USE   
1427      // out_INSERT_EXECUTE_LOOP_RD_NUM_REG - execute_loop. in_INSERT_ROB_RD_NUM_REG
1428      // out_INSERT_EXECUTE_LOOP_RE_USE     - execute_loop. in_INSERT_ROB_RE_USE   
1429      // out_INSERT_EXECUTE_LOOP_RE_NUM_REG - execute_loop. in_INSERT_ROB_RE_NUM_REG
1430
1431    }
1432
1433    // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1434#if DEBUG_Core == true
1435    _component->test_map(false);
1436#endif
1437
1438#ifdef POSITION
1439     if (usage_is_set(_usage,USE_POSITION))
1440       _component->generate_file();
1441#endif
1442
1443     log_end(Core,FUNCTION);
1444  };
1445
1446}; // end namespace core
1447}; // end namespace behavioural
1448}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.