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

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

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

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