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

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 93.5 KB
Line 
1/*
2 * $Id: Core_allocation.cpp 123 2009-06-08 20:43:30Z 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)+"_STORE_QUEUE_PTR_WRITE",
733                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_WRITE");
734            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_STORE_QUEUE_PTR_READ" ,
735                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_READ" );
736            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_STORE_QUEUE_EMPTY"    ,
737                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_EMPTY"    );
738            if (_param->_have_port_load_queue_ptr)
739            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_LOAD_QUEUE_PTR_WRITE" ,
740                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_LOAD_QUEUE_PTR_WRITE" );
741            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_HAS_IMMEDIAT"         ,
742                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_HAS_IMMEDIAT"         );
743            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_IMMEDIAT"             ,
744                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_IMMEDIAT"             );
745            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_READ_RA"              ,
746                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_READ_RA"              );
747            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RA"           ,
748                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RA"           );
749            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_READ_RB"              ,
750                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_READ_RB"              );
751            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RB"           ,
752                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RB"           );
753            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_READ_RC"              ,
754                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_READ_RC"              );
755            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RC"           ,
756                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RC"           );
757            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_WRITE_RD"             ,
758                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_WRITE_RD"             );
759            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RD"           ,
760                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RD"           );
761            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_WRITE_RE"             ,
762                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_WRITE_RE"             );
763            COMPONENT_MAP(_component,src ,"out_ISSUE_"                           +toString(j)+"_NUM_REG_RE"           ,
764                                     dest, "in_ISSUE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RE"           );
765          }
766
767        // ~~~~~[ Interface "execute_loop" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
768        for (uint32_t j=0; j<_param->_ooo_engine_nb_execute_loop [i]; ++j)
769          {
770            for (uint32_t k=0; k<_param->_ooo_engine_nb_inst_execute [i][j]; ++k)
771              {
772                dest = _name+"_glue";
773#ifdef POSITION
774                _component->interface_map (src ,"execute_loop_"                      +toString(j)+"_"+toString(k),
775                                           dest,"execute_ooo_engine_"+toString(i)+"_"+toString(j)+"_"+toString(k));
776#endif
777
778                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_VAL"         ,
779                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"         );
780                COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_ACK"         ,
781                                         dest, "in_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"         );
782                if (_param->_have_port_front_end_id)
783                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_FRONT_END_ID",
784                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_FRONT_END_ID");
785                if (_param->_have_port_context_id)
786                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_CONTEXT_ID"  ,
787                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_CONTEXT_ID"  );
788                if (_param->_have_port_rob_ptr)
789                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_PACKET_ID"   ,
790                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_PACKET_ID"   );
791//              COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_TYPE"        ,
792//                                       dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_TYPE"        );
793//              COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_OPERATION"   ,
794//                                       dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_OPERATION"   );
795                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_FLAGS"       ,
796                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_FLAGS"       );
797                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_EXCEPTION"   ,
798                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_EXCEPTION"   );
799                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_NO_SEQUENCE" ,
800                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_NO_SEQUENCE" );
801                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_ADDRESS"     ,
802                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_ADDRESS"     );
803                COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_"                      +toString(j)+"_"+toString(k)+"_DATA"        ,
804                                         dest,"out_EXECUTE_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_DATA"        );
805              }
806          }
807
808        // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
809        for (uint32_t j=0; j<_param->_ooo_engine_nb_inst_insert_rob [i]; ++j)
810          {
811            dest = _name+"_glue";
812#ifdef POSITION
813            _component->interface_map (src ,"insert_"                           +toString(j),
814                                       dest,"insert_ooo_engine_"+toString(i)+"_"+toString(j));
815#endif
816           
817            COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_VAL"       ,
818                                     dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_VAL"       );
819            COMPONENT_MAP(_component,src , "in_INSERT_"                           +toString(j)+"_ACK"       ,
820                                     dest,"out_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_ACK"       );
821            COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RD_USE"    ,
822                                     dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RD_USE"    );
823            COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RD_NUM_REG",
824                                     dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RD_NUM_REG");
825            COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RE_USE"    ,
826                                     dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RE_USE"    );
827            COMPONENT_MAP(_component,src ,"out_INSERT_"                           +toString(j)+"_RE_NUM_REG",
828                                     dest, "in_INSERT_OOO_ENGINE_"+toString(i)+"_"+toString(j)+"_RE_NUM_REG");
829          }
830      }
831
832    // ===================================================================
833    // =====[ execute_loop ]==============================================
834    // ===================================================================
835    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
836      {
837        src = _name+"_execute_loop_"+toString(i);
838        log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
839       
840        // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
841        {
842          dest = _name;
843#ifdef POSITION
844          _component->interface_map (src ,"",
845                                     dest,"");
846#endif
847          PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
848          PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
849        }
850
851        // ~~~~~[ Interface "execute_loop_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~
852        for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
853          {
854            dest = _name+"_glue";
855#ifdef POSITION
856            _component->interface_map (src ,"execute_loop_in_"                   +toString(j),
857                                       dest,"issue_execute_loop_"+toString(i)+"_"+toString(j));
858#endif
859
860            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_VAL"                  ,
861                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_VAL"                  );
862            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_IN_"                   +toString(j)+"_ACK"                  ,
863                                     dest, "in_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_ACK"                  );
864            if (_param->_have_port_front_end_id)
865            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_FRONT_END_ID"         ,
866                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_FRONT_END_ID"         );
867            if (_param->_have_port_context_id)
868            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_CONTEXT_ID"           ,
869                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"           );
870            if (_param->_have_port_ooo_engine_id)
871            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_OOO_ENGINE_ID"        ,
872                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OOO_ENGINE_ID"        );
873            if (_param->_have_port_rob_ptr)
874            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_PACKET_ID"            ,
875                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_PACKET_ID"            );
876            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_OPERATION"            ,
877                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OPERATION"            );
878            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_TYPE"                 ,
879                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_TYPE"                 );
880            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_STORE_QUEUE_PTR_WRITE",
881                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_WRITE");
882            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_STORE_QUEUE_PTR_READ" ,
883                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_READ" );
884            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_STORE_QUEUE_EMPTY"    ,
885                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_EMPTY"    );
886            if (_param->_have_port_load_queue_ptr)
887            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_LOAD_QUEUE_PTR_WRITE" ,
888                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_LOAD_QUEUE_PTR_WRITE" );
889            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_HAS_IMMEDIAT"         ,
890                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_HAS_IMMEDIAT"         );
891            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_IMMEDIAT"             ,
892                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_IMMEDIAT"             );
893            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_READ_RA"              ,
894                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_READ_RA"              );
895            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RA"           ,
896                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RA"           );
897            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_READ_RB"              ,
898                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_READ_RB"              );
899            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RB"           ,
900                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RB"           );
901            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_READ_RC"              ,
902                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_READ_RC"              );
903            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RC"           ,
904                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RC"           );
905            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_WRITE_RD"             ,
906                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_WRITE_RD"             );
907            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RD"           ,
908                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RD"           );
909            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_WRITE_RE"             ,
910                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_WRITE_RE"             );
911            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_IN_"                   +toString(j)+"_NUM_REG_RE"           ,
912                                     dest,"out_ISSUE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NUM_REG_RE"           );
913          }
914
915        // ~~~~~[ Interface "execute_loop_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~
916        for (uint32_t j=0; j<_param->_nb_write_unit[i]; ++j)
917          {
918            dest = _name+"_glue";
919#ifdef POSITION
920            _component->interface_map (src ,"execute_loop_out_"                    +toString(j),
921                                       dest,"execute_execute_loop_"+toString(i)+"_"+toString(j));
922#endif
923
924            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_VAL"          ,
925                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_VAL"          );
926            COMPONENT_MAP(_component,src , "in_EXECUTE_LOOP_OUT_"                    +toString(j)+"_ACK"          ,
927                                     dest,"out_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_ACK"          );
928            if (_param->_have_port_context_id)
929            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_CONTEXT_ID"   ,
930                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"   );
931            if (_param->_have_port_front_end_id)
932            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_FRONT_END_ID" ,
933                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_FRONT_END_ID" );
934            if (_param->_have_port_ooo_engine_id)
935            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_OOO_ENGINE_ID",
936                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OOO_ENGINE_ID");
937            if (_param->_have_port_rob_ptr)
938            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_PACKET_ID"    ,
939                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_PACKET_ID"    );
940//          COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_OPERATION"    ,
941//                                   dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_OPERATION"    );
942//          COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_TYPE"         ,
943//                                   dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_TYPE"         );
944            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_FLAGS"        ,
945                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_FLAGS"        );
946            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_EXCEPTION"    ,
947                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_EXCEPTION"    );
948            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_NO_SEQUENCE"  ,
949                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_NO_SEQUENCE"  );
950            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_ADDRESS"      ,
951                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_ADDRESS"      );
952            COMPONENT_MAP(_component,src ,"out_EXECUTE_LOOP_OUT_"                    +toString(j)+"_DATA"         ,
953                                     dest, "in_EXECUTE_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_DATA"         );
954          }
955
956        // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
957        for (uint32_t j=0; j<_param->_execute_loop_nb_ooo_engine[i]; ++j)
958          for (uint32_t k=0; k<_param->_execute_loop_nb_inst_insert_rob[i][j]; ++k)
959            {
960              dest = _name+"_glue";
961#ifdef POSITION
962              _component->interface_map (src ,"insert_rob_"                         +toString(j)+"_"+toString(k),
963                                         dest,"insert_execute_loop_"+toString(i)+"_"+toString(j)+"_"+toString(k));
964#endif
965
966              COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_VAL"       ,
967                                       dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"       );
968              COMPONENT_MAP(_component,src ,"out_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_ACK"       ,
969                                       dest, "in_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"       );
970              COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RD_USE"    ,
971                                       dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RD_USE"    );
972              COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RD_NUM_REG",
973                                       dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RD_NUM_REG");
974              COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RE_USE"    ,
975                                       dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RE_USE"    );
976              COMPONENT_MAP(_component,src , "in_INSERT_ROB_"                         +toString(j)+"_"+toString(k)+"_RE_NUM_REG",
977                                       dest,"out_INSERT_EXECUTE_LOOP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_RE_NUM_REG");
978            }       
979
980        // ~~~~~[ Interface "dcache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
981        // out_DCACHE_REQ_VAL        - dcache_access. in_LSQ_REQ_VAL       
982        //  in_DCACHE_REQ_ACK        - dcache_access.out_LSQ_REQ_ACK       
983        // out_DCACHE_REQ_CONTEXT_ID - dcache_access. in_LSQ_REQ_CONTEXT_ID
984        // out_DCACHE_REQ_PACKET_ID  - dcache_access. in_LSQ_REQ_PACKET_ID
985        // out_DCACHE_REQ_ADDRESS    - dcache_access. in_LSQ_REQ_ADDRESS   
986        // out_DCACHE_REQ_TYPE       - dcache_access. in_LSQ_REQ_TYPE     
987        // out_DCACHE_REQ_WDATA      - dcache_access. in_LSQ_REQ_WDATA
988
989        // ~~~~~[ Interface "dcache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
990        //  in_DCACHE_RSP_VAL        - dcache_access.out_LSQ_RSP_VAL       
991        // out_DCACHE_RSP_ACK        - dcache_access. in_LSQ_RSP_ACK       
992        //  in_DCACHE_RSP_CONTEXT_ID - dcache_access.out_LSQ_RSP_CONTEXT_ID
993        //  in_DCACHE_RSP_PACKET_ID  - dcache_access.out_LSQ_RSP_PACKET_ID
994        //  in_DCACHE_RSP_RDATA      - dcache_access.out_LSQ_RSP_RDATA     
995        //  in_DCACHE_RSP_ERROR      - dcache_access.out_LSQ_RSP_ERROR
996      }
997
998    // ===================================================================
999    // =====[ icache_access ]=============================================
1000    // ===================================================================
1001    {
1002      src = _name+"_icache_access";
1003      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
1004     
1005      // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1006      {
1007        dest = _name;
1008#ifdef POSITION
1009        _component->interface_map (src ,"",
1010                                   dest,"");
1011#endif
1012        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
1013        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
1014      }
1015
1016    // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1017    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
1018      {
1019        dest = _name;
1020#ifdef POSITION
1021        _component->interface_map (src ,"icache_req_"+toString(i),
1022                                   dest,"icache_req_"+toString(i));
1023#endif
1024       
1025        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_VAL"      ,
1026                            dest,"out_ICACHE_REQ_"+toString(i)+"_VAL"      );
1027        PORT_MAP(_component,src , "in_ICACHE_REQ_"+toString(i)+"_ACK"      ,
1028                            dest, "in_ICACHE_REQ_"+toString(i)+"_ACK"      );
1029        if (_param->_have_port_icache_thread_id)
1030        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_THREAD_ID",
1031                            dest,"out_ICACHE_REQ_"+toString(i)+"_THREAD_ID");
1032        if (_param->_have_port_icache_packet_id)
1033        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_PACKET_ID",
1034                            dest,"out_ICACHE_REQ_"+toString(i)+"_PACKET_ID");
1035        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_ADDRESS"  ,
1036                            dest,"out_ICACHE_REQ_"+toString(i)+"_ADDRESS"  );
1037        PORT_MAP(_component,src ,"out_ICACHE_REQ_"+toString(i)+"_TYPE"     ,
1038                            dest,"out_ICACHE_REQ_"+toString(i)+"_TYPE"     );
1039      }
1040
1041    // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1042    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
1043      {
1044        dest = _name;
1045#ifdef POSITION
1046        _component->interface_map (src ,"icache_rsp_"+toString(i),
1047                                   dest,"icache_rsp_"+toString(i));
1048#endif
1049
1050        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_VAL"        ,
1051                            dest, "in_ICACHE_RSP_"+toString(i)+"_VAL"        );
1052        PORT_MAP(_component,src ,"out_ICACHE_RSP_"+toString(i)+"_ACK"        ,
1053                            dest,"out_ICACHE_RSP_"+toString(i)+"_ACK"        );
1054        if (_param->_have_port_icache_thread_id)
1055        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_THREAD_ID"  ,
1056                            dest, "in_ICACHE_RSP_"+toString(i)+"_THREAD_ID"  );
1057        if (_param->_have_port_icache_packet_id)
1058        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_PACKET_ID"  ,
1059                            dest, "in_ICACHE_RSP_"+toString(i)+"_PACKET_ID"  );
1060        PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_ERROR"      ,
1061                            dest, "in_ICACHE_RSP_"+toString(i)+"_ERROR"      );
1062
1063        for (uint32_t j=0; j<_param->_icache_nb_instruction[i];++j)
1064          {
1065#ifdef POSITION
1066            _component->interface_map (src ,"icache_rsp_"+toString(i)+"_"+toString(j),
1067                                       dest,"icache_rsp_"+toString(i)+"_"+toString(j));
1068#endif
1069
1070                           
1071            PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(i)+"_"+toString(j)+"_INSTRUCTION",
1072                                dest, "in_ICACHE_RSP_"+toString(i)+"_"+toString(j)+"_INSTRUCTION");
1073          }
1074      }
1075
1076    // ~~~~~[ Interface "context_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1077    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
1078      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
1079        {
1080          dest = _name+"_front_end_"+toString(i);
1081#ifdef POSITION
1082          _component->interface_map (src ,"context_req_"+toString(i)+"_"+toString(j),
1083                                     dest,"icache_req_"                 +toString(j));
1084#endif
1085
1086          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_VAL"      ,
1087                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_VAL"      );
1088          COMPONENT_MAP(_component,src ,"out_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_ACK"      ,
1089                                   dest, "in_ICACHE_REQ_"                 +toString(j)+"_ACK"      );
1090//        COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_THREAD_ID",
1091//                                 dest,"out_ICACHE_REQ_"                 +toString(j)+"_THREAD_ID");
1092          if (_param->_have_port_icache_packet_id)
1093          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_PACKET_ID",
1094                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_PACKET_ID");
1095          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_ADDRESS"  ,
1096                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_ADDRESS"  );
1097          COMPONENT_MAP(_component,src , "in_CONTEXT_REQ_"+toString(i)+"_"+toString(j)+"_TYPE"     ,
1098                                   dest,"out_ICACHE_REQ_"                 +toString(j)+"_TYPE"     );
1099        }   
1100   
1101    // ~~~~~[ Interface "context_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1102    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
1103      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
1104        {
1105          dest = _name+"_front_end_"+toString(i);
1106#ifdef POSITION
1107          _component->interface_map (src ,"context_rsp_"+toString(i)+"_"+toString(j),
1108                                     dest,"icache_rsp_"                 +toString(j));
1109#endif
1110
1111          COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_VAL"        ,
1112                                   dest, "in_ICACHE_RSP_"                 +toString(j)+"_VAL"        );
1113          COMPONENT_MAP(_component,src , "in_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_ACK"        ,
1114                                   dest,"out_ICACHE_RSP_"                 +toString(j)+"_ACK"        );
1115//        COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_THREAD_ID"  ,
1116//                                 dest, "in_ICACHE_RSP_"                 +toString(j)+"_THREAD_ID"  );
1117          if (_param->_have_port_icache_packet_id)
1118          COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_PACKET_ID"  ,
1119                                   dest, "in_ICACHE_RSP_"                 +toString(j)+"_PACKET_ID"  );
1120          COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_ERROR"      ,
1121                                   dest, "in_ICACHE_RSP_"                 +toString(j)+"_ERROR"      );
1122
1123          for (uint32_t k=0; k<_param->_front_end_nb_inst_fetch[i][j];++k)
1124            {
1125#ifdef POSITION
1126              _component->interface_map (src ,"context_rsp_"+toString(i)+"_"+toString(j)+"_"+toString(k),
1127                                         dest,"icache_rsp_"                 +toString(j)+"_"+toString(k));
1128#endif
1129             
1130              COMPONENT_MAP(_component,src ,"out_CONTEXT_RSP_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"_INSTRUCTION",
1131                                       dest, "in_ICACHE_RSP_"                 +toString(j)+"_"+toString(k)+"_INSTRUCTION");
1132            }
1133         
1134        }
1135    }
1136
1137    // ===================================================================
1138    // =====[ dcache_access ]=============================================
1139    // ===================================================================
1140    {
1141      src = _name+"_dcache_access";
1142      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
1143     
1144      // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1145      {
1146        dest = _name;
1147#ifdef POSITION
1148        _component->interface_map (src ,"",
1149                                   dest,"");
1150#endif
1151        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
1152        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
1153      }
1154
1155    // ~~~~~[ Interface "dcache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1156    for (uint32_t i=0; i<_param->_nb_dcache_port; ++i)
1157      {
1158        dest = _name;
1159#ifdef POSITION
1160        _component->interface_map (src ,"dcache_req_"+toString(i),
1161                                   dest,"dcache_req_"+toString(i));
1162#endif
1163       
1164        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_VAL"      ,
1165                            dest,"out_DCACHE_REQ_"+toString(i)+"_VAL"      );
1166        PORT_MAP(_component,src , "in_DCACHE_REQ_"+toString(i)+"_ACK"      ,
1167                            dest, "in_DCACHE_REQ_"+toString(i)+"_ACK"      );
1168        if (_param->_have_port_dcache_thread_id)
1169        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_THREAD_ID",
1170                            dest,"out_DCACHE_REQ_"+toString(i)+"_THREAD_ID");
1171        if (_param->_have_port_dcache_packet_id)
1172        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_PACKET_ID",
1173                            dest,"out_DCACHE_REQ_"+toString(i)+"_PACKET_ID");
1174        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_ADDRESS"  ,
1175                            dest,"out_DCACHE_REQ_"+toString(i)+"_ADDRESS"  );
1176        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_WDATA"    ,
1177                            dest,"out_DCACHE_REQ_"+toString(i)+"_WDATA"    );
1178        PORT_MAP(_component,src ,"out_DCACHE_REQ_"+toString(i)+"_TYPE"     ,
1179                            dest,"out_DCACHE_REQ_"+toString(i)+"_TYPE"     );
1180      }
1181
1182    // ~~~~~[ Interface "dcache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1183    for (uint32_t i=0; i<_param->_nb_dcache_port; ++i)
1184      {
1185        dest = _name;
1186#ifdef POSITION
1187        _component->interface_map (src ,"dcache_rsp_"+toString(i),
1188                                   dest,"dcache_rsp_"+toString(i));
1189#endif
1190
1191        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_VAL"        ,
1192                            dest, "in_DCACHE_RSP_"+toString(i)+"_VAL"        );
1193        PORT_MAP(_component,src ,"out_DCACHE_RSP_"+toString(i)+"_ACK"        ,
1194                            dest,"out_DCACHE_RSP_"+toString(i)+"_ACK"        );
1195        if (_param->_have_port_dcache_thread_id)
1196        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_THREAD_ID"  ,
1197                            dest, "in_DCACHE_RSP_"+toString(i)+"_THREAD_ID"  );
1198        if (_param->_have_port_dcache_packet_id)
1199        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_PACKET_ID"  ,
1200                            dest, "in_DCACHE_RSP_"+toString(i)+"_PACKET_ID"  );
1201        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_RDATA"      ,
1202                            dest, "in_DCACHE_RSP_"+toString(i)+"_RDATA"      );
1203        PORT_MAP(_component,src , "in_DCACHE_RSP_"+toString(i)+"_ERROR"      ,
1204                            dest, "in_DCACHE_RSP_"+toString(i)+"_ERROR"      );
1205      }
1206   
1207    // ~~~~~[ Interface "lsq_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1208    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
1209      for (uint32_t j=0; j<_param->_execute_loop_nb_load_store_unit[i]; ++j)
1210        for (uint32_t k=0; k<_param->_execute_loop_nb_cache_port [i][j]; ++k)
1211          {
1212            dest = _name+"_execute_loop_"+toString(i);
1213#ifdef POSITION
1214            _component->interface_map (src ,"lsq_req_"   +toString(i)+"_"+toString(j)+"_"+toString(k),
1215                                       dest,"dcache_req_"                +toString(j)+"_"+toString(k));
1216#endif
1217
1218            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"      ,
1219                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_VAL"      );
1220            COMPONENT_MAP(_component,src ,"out_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"      ,
1221                                     dest, "in_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_ACK"      );
1222            if (_param->_have_port_dcache_thread_id)
1223            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_THREAD_ID",
1224                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_CONTEXT_ID");
1225            if (_param->_have_port_dcache_packet_id)
1226            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_PACKET_ID",
1227                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_PACKET_ID");
1228            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ADDRESS"  ,
1229                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_ADDRESS"  );
1230            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_WDATA"    ,
1231                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_WDATA"    );
1232            COMPONENT_MAP(_component,src , "in_LSQ_REQ_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_TYPE"     ,
1233                                     dest,"out_DCACHE_REQ_"                +toString(j)+"_"+toString(k)+"_TYPE"     );
1234          }
1235
1236    // ~~~~~[ Interface "lsq_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1237    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
1238      for (uint32_t j=0; j<_param->_execute_loop_nb_load_store_unit[i]; ++j)
1239        for (uint32_t k=0; k<_param->_execute_loop_nb_cache_port [i][j]; ++k)
1240          {
1241            dest = _name+"_execute_loop_"+toString(i);
1242#ifdef POSITION
1243            _component->interface_map (src ,"lsq_rsp_"   +toString(i)+"_"+toString(j)+"_"+toString(k),
1244                                       dest,"dcache_rsp_"                +toString(j)+"_"+toString(k));
1245#endif
1246
1247            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_VAL"      ,
1248                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_VAL"      );
1249            COMPONENT_MAP(_component,src , "in_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ACK"      ,
1250                                     dest,"out_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_ACK"      );
1251            if (_param->_have_port_dcache_thread_id)
1252            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_THREAD_ID",
1253                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_CONTEXT_ID");
1254            if (_param->_have_port_dcache_packet_id)
1255            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_PACKET_ID",
1256                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_PACKET_ID");
1257            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_RDATA"    ,
1258                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_RDATA"    );
1259            COMPONENT_MAP(_component,src ,"out_LSQ_RSP_"   +toString(i)+"_"+toString(j)+"_"+toString(k)+"_ERROR"    ,
1260                                     dest, "in_DCACHE_RSP_"                +toString(j)+"_"+toString(k)+"_ERROR"    );
1261          }
1262    }
1263
1264    // ===================================================================
1265    // =====[ glue ]======================================================
1266    // ===================================================================
1267    {
1268      src = _name+"_glue";
1269      log_printf(INFO,Core,FUNCTION,_("Instance : %s"),src.c_str());
1270     
1271      // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1272      {
1273        dest = _name;
1274#ifdef POSITION
1275        _component->interface_map (src ,"",
1276                                   dest,"");
1277#endif
1278        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
1279        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
1280      }
1281
1282      // ~~~~~[ Interface : "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
1283      // out_RENAME_FRONT_END_ID - ooo_engine. in_RENAME_FRONT_END_ID
1284     
1285      // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~
1286      // out_BRANCH_COMPLETE_FRONT_END_VAL             - front_end. in_BRANCH_COMPLETE_VAL           
1287      //  in_BRANCH_COMPLETE_FRONT_END_ACK             - front_end.out_BRANCH_COMPLETE_ACK           
1288      // out_BRANCH_COMPLETE_FRONT_END_CONTEXT_ID      - front_end. in_BRANCH_COMPLETE_CONTEXT_ID     
1289      // out_BRANCH_COMPLETE_FRONT_END_DEPTH           - front_end. in_BRANCH_COMPLETE_DEPTH         
1290      // out_BRANCH_COMPLETE_FRONT_END_ADDRESS         - front_end. in_BRANCH_COMPLETE_ADDRESS       
1291      // out_BRANCH_COMPLETE_FRONT_END_FLAG            - front_end. in_BRANCH_COMPLETE_NO_SEQUENCE   
1292      //  in_BRANCH_COMPLETE_FRONT_END_MISS_PREDICTION - front_end.out_BRANCH_COMPLETE_MISS_PREDICTION
1293     
1294      //  in_BRANCH_COMPLETE_OOO_ENGINE_VAL            - ooo_engine.out_BRANCH_COMPLETE_VAL           
1295      // out_BRANCH_COMPLETE_OOO_ENGINE_ACK            - ooo_engine. in_BRANCH_COMPLETE_ACK           
1296      //  in_BRANCH_COMPLETE_OOO_ENGINE_FRONT_END_ID   - ooo_engine.out_BRANCH_COMPLETE_FRONT_END_ID   
1297      //  in_BRANCH_COMPLETE_OOO_ENGINE_CONTEXT_ID     - ooo_engine.out_BRANCH_COMPLETE_CONTEXT_ID     
1298      //  in_BRANCH_COMPLETE_OOO_ENGINE_DEPTH          - ooo_engine.out_BRANCH_COMPLETE_DEPTH         
1299      //  in_BRANCH_COMPLETE_OOO_ENGINE_ADDRESS        - ooo_engine.out_BRANCH_COMPLETE_ADDRESS       
1300      //  in_BRANCH_COMPLETE_OOO_ENGINE_FLAG           - ooo_engine.out_BRANCH_COMPLETE_NO_SEQUENCE   
1301      // out_BRANCH_COMPLETE_OOO_ENGINE_MISS_PREDICTION- ooo_engine. in_BRANCH_COMPLETE_MISS_PREDICTION
1302     
1303      // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1304      // out_COMMIT_EVENT_FRONT_END_VAL              - front_end. in_COMMIT_EVENT_VAL             
1305      //  in_COMMIT_EVENT_FRONT_END_ACK              - front_end.out_COMMIT_EVENT_ACK             
1306      // out_COMMIT_EVENT_FRONT_END_CONTEXT_ID       - front_end. in_COMMIT_EVENT_CONTEXT_ID     
1307      // out_COMMIT_EVENT_FRONT_END_DEPTH            - front_end. in_COMMIT_EVENT_DEPTH           
1308      // out_COMMIT_EVENT_FRONT_END_TYPE             - front_end. in_COMMIT_EVENT_TYPE           
1309      // out_COMMIT_EVENT_FRONT_END_IS_DELAY_SLOT    - front_end. in_COMMIT_EVENT_IS_DELAY_SLOT   
1310      // out_COMMIT_EVENT_FRONT_END_ADDRESS          - front_end. in_COMMIT_EVENT_ADDRESS         
1311      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR_VAL - front_end. in_COMMIT_EVENT_ADDRESS_EPCR_VAL
1312      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR     - front_end. in_COMMIT_EVENT_ADDRESS_EPCR   
1313      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR_VAL - front_end. in_COMMIT_EVENT_ADDRESS_EEAR_VAL
1314      // out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR     - front_end. in_COMMIT_EVENT_ADDRESS_EEAR   
1315     
1316      //  in_COMMIT_EVENT_OOO_ENGINE_VAL             - ooo_engine.out_COMMIT_EVENT_VAL             
1317      // out_COMMIT_EVENT_OOO_ENGINE_ACK             - ooo_engine. in_COMMIT_EVENT_ACK             
1318      //  in_COMMIT_EVENT_OOO_ENGINE_FRONT_END_ID    - ooo_engine.out_COMMIT_EVENT_FRONT_END_ID   
1319      //  in_COMMIT_EVENT_OOO_ENGINE_CONTEXT_ID      - ooo_engine.out_COMMIT_EVENT_CONTEXT_ID     
1320      //  in_COMMIT_EVENT_OOO_ENGINE_DEPTH           - ooo_engine.out_COMMIT_EVENT_DEPTH           
1321      //  in_COMMIT_EVENT_OOO_ENGINE_TYPE            - ooo_engine.out_COMMIT_EVENT_TYPE           
1322      //  in_COMMIT_EVENT_OOO_ENGINE_IS_DELAY_SLOT   - ooo_engine.out_COMMIT_EVENT_IS_DELAY_SLOT   
1323      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS         - ooo_engine.out_COMMIT_EVENT_ADDRESS         
1324      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR_VAL- ooo_engine.out_COMMIT_EVENT_ADDRESS_EPCR_VAL
1325      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR    - ooo_engine.out_COMMIT_EVENT_ADDRESS_EPCR   
1326      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL- ooo_engine.out_COMMIT_EVENT_ADDRESS_EEAR_VAL
1327      //  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR    - ooo_engine.out_COMMIT_EVENT_ADDRESS_EEAR   
1328     
1329      // ~~~~~[ Interface : "issue" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1330      //  in_ISSUE_OOO_ENGINE_VAL                   - ooo_engine.out_ISSUE_VAL                 
1331      // out_ISSUE_OOO_ENGINE_ACK                   - ooo_engine. in_ISSUE_ACK                 
1332      //  in_ISSUE_OOO_ENGINE_FRONT_END_ID          - ooo_engine.out_ISSUE_FRONT_END_ID         
1333      //  in_ISSUE_OOO_ENGINE_CONTEXT_ID            - ooo_engine.out_ISSUE_CONTEXT_ID           
1334      //  in_ISSUE_OOO_ENGINE_PACKET_ID             - ooo_engine.out_ISSUE_PACKET_ID           
1335      //  in_ISSUE_OOO_ENGINE_TYPE                  - ooo_engine.out_ISSUE_TYPE                 
1336      //  in_ISSUE_OOO_ENGINE_OPERATION             - ooo_engine.out_ISSUE_OPERATION           
1337      //  in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE - ooo_engine.out_ISSUE_STORE_QUEUE_PTR_WRITE
1338      //  in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_READ  - ooo_engine.out_ISSUE_STORE_QUEUE_PTR_READ
1339      //  in_ISSUE_OOO_ENGINE_STORE_QUEUE_EMPTY     - ooo_engine.out_ISSUE_STORE_QUEUE_EMPTY   
1340      //  in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  - ooo_engine.out_ISSUE_LOAD_QUEUE_PTR_WRITE
1341      //  in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          - ooo_engine.out_ISSUE_HAS_IMMEDIAT         
1342      //  in_ISSUE_OOO_ENGINE_IMMEDIAT              - ooo_engine.out_ISSUE_IMMEDIAT             
1343      //  in_ISSUE_OOO_ENGINE_READ_RA               - ooo_engine.out_ISSUE_READ_RA             
1344      //  in_ISSUE_OOO_ENGINE_NUM_REG_RA            - ooo_engine.out_ISSUE_NUM_REG_RA           
1345      //  in_ISSUE_OOO_ENGINE_READ_RB               - ooo_engine.out_ISSUE_READ_RB             
1346      //  in_ISSUE_OOO_ENGINE_NUM_REG_RB            - ooo_engine.out_ISSUE_NUM_REG_RB           
1347      //  in_ISSUE_OOO_ENGINE_READ_RC               - ooo_engine.out_ISSUE_READ_RC             
1348      //  in_ISSUE_OOO_ENGINE_NUM_REG_RC            - ooo_engine.out_ISSUE_NUM_REG_RC           
1349      //  in_ISSUE_OOO_ENGINE_WRITE_RD              - ooo_engine.out_ISSUE_WRITE_RD             
1350      //  in_ISSUE_OOO_ENGINE_NUM_REG_RD            - ooo_engine.out_ISSUE_NUM_REG_RD           
1351      //  in_ISSUE_OOO_ENGINE_WRITE_RE              - ooo_engine.out_ISSUE_WRITE_RE             
1352      //  in_ISSUE_OOO_ENGINE_NUM_REG_RE            - ooo_engine.out_ISSUE_NUM_REG_RE           
1353     
1354      // out_ISSUE_EXECUTE_LOOP_VAL                   - execute_loop. in_EXECUTE_LOOP_IN_VAL                 
1355      //  in_ISSUE_EXECUTE_LOOP_ACK                   - execute_loop. in_EXECUTE_LOOP_IN_ACK                 
1356      // out_ISSUE_EXECUTE_LOOP_CONTEXT_ID            - execute_loop. in_EXECUTE_LOOP_IN_CONTEXT_ID           
1357      // out_ISSUE_EXECUTE_LOOP_FRONT_END_ID          - execute_loop. in_EXECUTE_LOOP_IN_FRONT_END_ID         
1358      // out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID         - execute_loop. in_EXECUTE_LOOP_IN_OOO_ENGINE_ID       
1359      // out_ISSUE_EXECUTE_LOOP_PACKET_ID             - execute_loop. in_EXECUTE_LOOP_IN_PACKET_ID           
1360      // out_ISSUE_EXECUTE_LOOP_OPERATION             - execute_loop. in_EXECUTE_LOOP_IN_OPERATION           
1361      // out_ISSUE_EXECUTE_LOOP_TYPE                  - execute_loop. in_EXECUTE_LOOP_IN_TYPE                 
1362      // out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE - execute_loop. in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_WRITE
1363      // out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_READ  - execute_loop. in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_READ
1364      // out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_EMPTY     - execute_loop. in_EXECUTE_LOOP_IN_STORE_QUEUE_EMPTY   
1365      // out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE  - execute_loop. in_EXECUTE_LOOP_IN_LOAD_QUEUE_PTR_WRITE
1366      // out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT          - execute_loop. in_EXECUTE_LOOP_IN_HAS_IMMEDIAT         
1367      // out_ISSUE_EXECUTE_LOOP_IMMEDIAT              - execute_loop. in_EXECUTE_LOOP_IN_IMMEDIAT             
1368      // out_ISSUE_EXECUTE_LOOP_READ_RA               - execute_loop. in_EXECUTE_LOOP_IN_READ_RA             
1369      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RA            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RA           
1370      // out_ISSUE_EXECUTE_LOOP_READ_RB               - execute_loop. in_EXECUTE_LOOP_IN_READ_RB             
1371      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RB            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RB           
1372      // out_ISSUE_EXECUTE_LOOP_READ_RC               - execute_loop. in_EXECUTE_LOOP_IN_READ_RC             
1373      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RC            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RC           
1374      // out_ISSUE_EXECUTE_LOOP_WRITE_RD              - execute_loop. in_EXECUTE_LOOP_IN_WRITE_RD             
1375      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RD            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RD           
1376      // out_ISSUE_EXECUTE_LOOP_WRITE_RE              - execute_loop. in_EXECUTE_LOOP_IN_WRITE_RE             
1377      // out_ISSUE_EXECUTE_LOOP_NUM_REG_RE            - execute_loop. in_EXECUTE_LOOP_IN_NUM_REG_RE           
1378 
1379 
1380      // ~~~~~[ Interface "execute_loop" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1381      //   out_EXECUTE_OOO_ENGINE_VAL          - ooo_engine. in_EXECUTE_LOOP_VAL         
1382      //    in_EXECUTE_OOO_ENGINE_ACK          - ooo_engine.out_EXECUTE_LOOP_ACK         
1383      //   out_EXECUTE_OOO_ENGINE_FRONT_END_ID - ooo_engine. in_EXECUTE_LOOP_FRONT_END_ID
1384      //   out_EXECUTE_OOO_ENGINE_CONTEXT_ID   - ooo_engine. in_EXECUTE_LOOP_CONTEXT_ID 
1385      //   out_EXECUTE_OOO_ENGINE_PACKET_ID    - ooo_engine. in_EXECUTE_LOOP_PACKET_ID   
1386      //// out_EXECUTE_OOO_ENGINE_TYPE         - ooo_engine. in_EXECUTE_LOOP_TYPE       
1387      //// out_EXECUTE_OOO_ENGINE_OPERATION    - ooo_engine. in_EXECUTE_LOOP_OPERATION   
1388      //   out_EXECUTE_OOO_ENGINE_FLAGS        - ooo_engine. in_EXECUTE_LOOP_FLAGS       
1389      //   out_EXECUTE_OOO_ENGINE_EXCEPTION    - ooo_engine. in_EXECUTE_LOOP_EXCEPTION   
1390      //   out_EXECUTE_OOO_ENGINE_NO_SEQUENCE  - ooo_engine. in_EXECUTE_LOOP_NO_SEQUENCE
1391      //   out_EXECUTE_OOO_ENGINE_ADDRESS      - ooo_engine. in_EXECUTE_LOOP_ADDRESS     
1392      //   out_EXECUTE_OOO_ENGINE_DATA         - ooo_engine. in_EXECUTE_LOOP_DATA       
1393 
1394      //    in_EXECUTE_EXECUTE_LOOP_VAL           - execute_loop.out_EXECUTE_LOOP_OUT_VAL         
1395      //   out_EXECUTE_EXECUTE_LOOP_ACK           - execute_loop.out_EXECUTE_LOOP_OUT_ACK         
1396      //    in_EXECUTE_EXECUTE_LOOP_CONTEXT_ID    - execute_loop.out_EXECUTE_LOOP_OUT_CONTEXT_ID   
1397      //    in_EXECUTE_EXECUTE_LOOP_FRONT_END_ID  - execute_loop.out_EXECUTE_LOOP_OUT_FRONT_END_ID
1398      //    in_EXECUTE_EXECUTE_LOOP_OOO_ENGINE_ID - execute_loop.out_EXECUTE_LOOP_OUT_OOO_ENGINE_ID
1399      //    in_EXECUTE_EXECUTE_LOOP_PACKET_ID     - execute_loop.out_EXECUTE_LOOP_OUT_PACKET_ID   
1400      ////  in_EXECUTE_EXECUTE_LOOP_OPERATION     - execute_loop.out_EXECUTE_LOOP_OUT_OPERATION   
1401      ////  in_EXECUTE_EXECUTE_LOOP_TYPE          - execute_loop.out_EXECUTE_LOOP_OUT_TYPE         
1402      //    in_EXECUTE_EXECUTE_LOOP_FLAGS         - execute_loop.out_EXECUTE_LOOP_OUT_FLAGS       
1403      //    in_EXECUTE_EXECUTE_LOOP_EXCEPTION     - execute_loop.out_EXECUTE_LOOP_OUT_EXCEPTION   
1404      //    in_EXECUTE_EXECUTE_LOOP_NO_SEQUENCE   - execute_loop.out_EXECUTE_LOOP_OUT_NO_SEQUENCE 
1405      //    in_EXECUTE_EXECUTE_LOOP_ADDRESS       - execute_loop.out_EXECUTE_LOOP_OUT_ADDRESS     
1406      //    in_EXECUTE_EXECUTE_LOOP_DATA          - execute_loop.out_EXECUTE_LOOP_OUT_DATA         
1407
1408      // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1409      //  in_INSERT_OOO_ENGINE_VAL        - ooo_engine.out_INSERT_VAL       
1410      // out_INSERT_OOO_ENGINE_ACK        - ooo_engine. in_INSERT_ACK       
1411      //  in_INSERT_OOO_ENGINE_RD_USE     - ooo_engine.out_INSERT_RD_USE   
1412      //  in_INSERT_OOO_ENGINE_RD_NUM_REG - ooo_engine.out_INSERT_RD_NUM_REG
1413      //  in_INSERT_OOO_ENGINE_RE_USE     - ooo_engine.out_INSERT_RE_USE   
1414      //  in_INSERT_OOO_ENGINE_RE_NUM_REG - ooo_engine.out_INSERT_RE_NUM_REG
1415     
1416      // out_INSERT_EXECUTE_LOOP_VAL        - execute_loop. in_INSERT_ROB_VAL       
1417      //  in_INSERT_EXECUTE_LOOP_ACK        - execute_loop.out_INSERT_ROB_ACK       
1418      // out_INSERT_EXECUTE_LOOP_RD_USE     - execute_loop. in_INSERT_ROB_RD_USE   
1419      // out_INSERT_EXECUTE_LOOP_RD_NUM_REG - execute_loop. in_INSERT_ROB_RD_NUM_REG
1420      // out_INSERT_EXECUTE_LOOP_RE_USE     - execute_loop. in_INSERT_ROB_RE_USE   
1421      // out_INSERT_EXECUTE_LOOP_RE_NUM_REG - execute_loop. in_INSERT_ROB_RE_NUM_REG
1422
1423    }
1424
1425    // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1426#if DEBUG_Core == true
1427    _component->test_map(false);
1428#endif
1429
1430#ifdef POSITION
1431     if (usage_is_set(_usage,USE_POSITION))
1432       _component->generate_file();
1433#endif
1434
1435     log_end(Core,FUNCTION);
1436  };
1437
1438}; // end namespace core
1439}; // end namespace behavioural
1440}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.