source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/src/Front_end_allocation.cpp @ 108

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

1) decod_queue : add reg_LAST_SLOT.
2) Commit : insert on event -> to pop decod_queue. Head test : add information (speculative or not)
3) Context State / UPT : Branch miss and Load miss in same cycle.
4) Free List : Bank is on LSB not MSB.
5) Platforms : move data

  • Property svn:keywords set to Id
File size: 67.1 KB
Line 
1/*
2 * $Id: Front_end_allocation.cpp 108 2009-02-12 11:55:06Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Front_end/Front_end/include/Front_end.h"
9#include "Behavioural/include/Allocation.h"
10#include "Common/include/Max.h"
11
12namespace morpheo                    {
13namespace behavioural {
14namespace core {
15namespace multi_front_end {
16namespace front_end {
17
18
19
20#undef  FUNCTION
21#define FUNCTION "Front_end::allocation"
22  void Front_end::allocation
23  (
24#ifdef STATISTICS
25   morpheo::behavioural::Parameters_Statistics * param_statistics
26#else
27   void
28#endif
29   )
30  {
31    log_begin(Front_end,FUNCTION);
32
33    _component   = new Component (_usage);
34
35    Entity * entity = _component->set_entity (_name       
36                                              ,"Front_end"
37#ifdef POSITION
38                                              ,COMBINATORY
39#endif
40                                              );
41
42    _interfaces = entity->set_interfaces();
43   
44    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45    {
46      Interface * interface = _interfaces->set_interface(""
47#ifdef POSITION
48                                                         ,IN
49                                                         ,SOUTH,
50                                                         "Generalist interface"
51#endif
52                                                         );
53     
54      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
55      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
56    }
57
58    // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59    {
60      ALLOC1_INTERFACE("icache_req",OUT, WEST, _("Instruction cache request."),_param->_nb_context);
61
62      ALLOC1_VALACK_OUT (out_ICACHE_REQ_VAL                   ,VAL);
63      ALLOC1_VALACK_IN  ( in_ICACHE_REQ_ACK                   ,ACK);
64//    ALLOC1_SIGNAL_OUT (out_ICACHE_REQ_THREAD_ID             ,"thread_id"        ,Tcontext_t           ,_param->_size_context_id           );
65      ALLOC1_SIGNAL_OUT (out_ICACHE_REQ_PACKET_ID             ,"packet_id"        ,Tpacket_t            ,_param->_size_ifetch_queue_ptr     );
66      ALLOC1_SIGNAL_OUT (out_ICACHE_REQ_ADDRESS               ,"address"          ,Ticache_instruction_t,_param->_size_instruction_address              );
67      ALLOC1_SIGNAL_OUT (out_ICACHE_REQ_TYPE                  ,"type"             ,Ticache_type_t       ,_param->_size_icache_type          );
68    }
69
70    // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71    {
72      ALLOC1_INTERFACE("icache_rsp",IN , WEST, _("Instruction cache respons."),_param->_nb_context);
73
74      ALLOC1_VALACK_IN  ( in_ICACHE_RSP_VAL                   ,VAL);
75      ALLOC1_VALACK_OUT (out_ICACHE_RSP_ACK                   ,ACK);
76//    ALLOC1_SIGNAL_IN  ( in_ICACHE_RSP_THREAD_ID             ,"thread_id"        ,Tcontext_t           ,_param->_size_context_id           );
77      ALLOC1_SIGNAL_IN  ( in_ICACHE_RSP_PACKET_ID             ,"packet_id"        ,Tpacket_t            ,_param->_size_ifetch_queue_ptr     );
78      ALLOC1_SIGNAL_IN  ( in_ICACHE_RSP_ERROR                 ,"error"            ,Ticache_error_t      ,_param->_size_icache_error         );
79    }
80    {
81      ALLOC2_INTERFACE("icache_rsp",IN , WEST, "Instruction cache respons.",_param->_nb_context,_param->_nb_inst_fetch[it1]);
82
83      _ALLOC2_SIGNAL_IN ( in_ICACHE_RSP_INSTRUCTION           ,"instruction"      ,Ticache_instruction_t,_param->_size_instruction ,_param->_nb_context,_param->_nb_inst_fetch[it1]);
84    }
85
86
87    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88    {
89      ALLOC1_INTERFACE("decod",OUT,EAST,_("Decoded instruction, send to ooo_engine"),_param->_sum_inst_decod);
90
91      ALLOC1_VALACK_OUT (out_DECOD_VAL                        , VAL);
92      ALLOC1_VALACK_IN  ( in_DECOD_ACK                        , ACK);
93      ALLOC1_SIGNAL_OUT (out_DECOD_CONTEXT_ID                 ,"CONTEXT_ID"       ,Tcontext_t           ,_param->_size_context_id            );
94      ALLOC1_SIGNAL_OUT (out_DECOD_DEPTH                      ,"DEPTH"            ,Tdepth_t             ,_param->_size_depth                 );
95      ALLOC1_SIGNAL_OUT (out_DECOD_TYPE                       ,"TYPE"             ,Ttype_t              ,_param->_size_type                  );
96      ALLOC1_SIGNAL_OUT (out_DECOD_OPERATION                  ,"OPERATION"        ,Toperation_t         ,_param->_size_operation             );
97      ALLOC1_SIGNAL_OUT (out_DECOD_NO_EXECUTE                 ,"NO_EXECUTE"       ,Tcontrol_t           ,1                                   );
98      ALLOC1_SIGNAL_OUT (out_DECOD_IS_DELAY_SLOT              ,"IS_DELAY_SLOT"    ,Tcontrol_t           ,1                                   );
99#ifdef DEBUG
100      ALLOC1_SIGNAL_OUT (out_DECOD_ADDRESS                    ,"ADDRESS"          ,Tgeneral_data_t      ,_param->_size_instruction_address   );
101#endif
102      ALLOC1_SIGNAL_OUT (out_DECOD_ADDRESS_NEXT               ,"ADDRESS_NEXT"     ,Tgeneral_data_t      ,_param->_size_instruction_address   );
103      ALLOC1_SIGNAL_OUT (out_DECOD_HAS_IMMEDIAT               ,"HAS_IMMEDIAT"     ,Tcontrol_t           ,1                                   );
104      ALLOC1_SIGNAL_OUT (out_DECOD_IMMEDIAT                   ,"IMMEDIAT"         ,Tgeneral_data_t      ,_param->_size_general_data          );
105      ALLOC1_SIGNAL_OUT (out_DECOD_READ_RA                    ,"READ_RA"          ,Tcontrol_t           ,1                                   );
106      ALLOC1_SIGNAL_OUT (out_DECOD_NUM_REG_RA                 ,"NUM_REG_RA"       ,Tgeneral_address_t   ,_param->_size_general_register_logic);
107      ALLOC1_SIGNAL_OUT (out_DECOD_READ_RB                    ,"READ_RB"          ,Tcontrol_t           ,1                                   );
108      ALLOC1_SIGNAL_OUT (out_DECOD_NUM_REG_RB                 ,"NUM_REG_RB"       ,Tgeneral_address_t   ,_param->_size_general_register_logic);
109      ALLOC1_SIGNAL_OUT (out_DECOD_READ_RC                    ,"READ_RC"          ,Tcontrol_t           ,1                                   );
110      ALLOC1_SIGNAL_OUT (out_DECOD_NUM_REG_RC                 ,"NUM_REG_RC"       ,Tspecial_address_t   ,_param->_size_special_register_logic);
111      ALLOC1_SIGNAL_OUT (out_DECOD_WRITE_RD                   ,"WRITE_RD"         ,Tcontrol_t           ,1                                   );
112      ALLOC1_SIGNAL_OUT (out_DECOD_NUM_REG_RD                 ,"NUM_REG_RD"       ,Tgeneral_address_t   ,_param->_size_general_register_logic);
113      ALLOC1_SIGNAL_OUT (out_DECOD_WRITE_RE                   ,"WRITE_RE"         ,Tcontrol_t           ,1                                   );
114      ALLOC1_SIGNAL_OUT (out_DECOD_NUM_REG_RE                 ,"NUM_REG_RE"       ,Tspecial_address_t   ,_param->_size_special_register_logic);
115      ALLOC1_SIGNAL_OUT (out_DECOD_EXCEPTION_USE              ,"EXCEPTION_USE"    ,Texception_t         ,_param->_size_exception_use         );
116      ALLOC1_SIGNAL_OUT (out_DECOD_EXCEPTION                  ,"EXCEPTION"        ,Texception_t         ,_param->_size_exception             );
117    }
118   
119    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120    {
121      ALLOC1_INTERFACE("branch_complete",IN,EAST,_("Branch commit"),_param->_nb_inst_branch_complete);
122
123      ALLOC1_VALACK_IN  ( in_BRANCH_COMPLETE_VAL              , VAL);
124      ALLOC1_VALACK_OUT (out_BRANCH_COMPLETE_ACK              , ACK);
125      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_CONTEXT_ID       ,"CONTEXT_ID"       ,Tcontext_t           ,_param->_size_context_id);
126      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_DEPTH            ,"DEPTH"            ,Tdepth_t             ,_param->_size_depth     );
127      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_ADDRESS          ,"ADDRESS"          ,Taddress_t           ,_param->_size_instruction_address);
128      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_NO_SEQUENCE      ,"NO_SEQUENCE"      ,Tcontrol_t           ,1                       );
129      ALLOC1_SIGNAL_OUT (out_BRANCH_COMPLETE_MISS_PREDICTION  ,"MISS_PREDICTION"  ,Tcontrol_t           ,1                       );
130    }
131
132   // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
133    {
134      ALLOC_INTERFACE("commit_event",IN,EAST,_("Out Of Order engine have an event"));
135
136      ALLOC_VALACK_IN   ( in_COMMIT_EVENT_VAL                 , VAL);
137      ALLOC_VALACK_OUT  (out_COMMIT_EVENT_ACK                 , ACK);
138      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_CONTEXT_ID          ,"CONTEXT_ID"       ,Tcontext_t           ,_param->_size_context_id);
139      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_DEPTH               ,"DEPTH"            ,Tdepth_t             ,_param->_size_depth     );
140      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_TYPE                ,"TYPE"             ,Tevent_type_t        ,_param->_size_event_type);
141      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_IS_DELAY_SLOT       ,"IS_DELAY_SLOT"    ,Tcontrol_t           ,1                       );
142      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_ADDRESS             ,"ADDRESS"          ,Taddress_t           ,_param->_size_instruction_address   );
143      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_ADDRESS_EPCR_VAL    ,"ADDRESS_EPCR_VAL" ,Tcontrol_t           ,1                       );
144      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_ADDRESS_EPCR        ,"ADDRESS_EPCR"     ,Taddress_t           ,_param->_size_instruction_address   );
145      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_ADDRESS_EEAR_VAL    ,"ADDRESS_EEAR_VAL" ,Tcontrol_t           ,1                       );
146      ALLOC_SIGNAL_IN   ( in_COMMIT_EVENT_ADDRESS_EEAR        ,"ADDRESS_EEAR"     ,Tgeneral_data_t      ,_param->_size_general_data          );
147    }
148
149    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
150    {
151      ALLOC1_INTERFACE("event",OUT,EAST,_("Event interface"),_param->_nb_context);
152
153      ALLOC1_VALACK_OUT (out_EVENT_VAL                        , VAL);
154      ALLOC1_VALACK_IN  ( in_EVENT_ACK                        , ACK);
155      ALLOC1_SIGNAL_OUT (out_EVENT_ADDRESS                    ,"ADDRESS"          ,Taddress_t           ,_param->_size_instruction_address);
156      ALLOC1_SIGNAL_OUT (out_EVENT_ADDRESS_NEXT               ,"ADDRESS_NEXT"     ,Taddress_t           ,_param->_size_instruction_address); 
157      ALLOC1_SIGNAL_OUT (out_EVENT_ADDRESS_NEXT_VAL           ,"ADDRESS_NEXT_VAL" ,Tcontrol_t           ,1                    );
158      ALLOC1_SIGNAL_OUT (out_EVENT_IS_DS_TAKE                 ,"IS_DS_TAKE"       ,Tcontrol_t           ,1                    );
159    }
160
161    // ~~~~~[ Interface "spr_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
162    {
163      ALLOC1_INTERFACE("spr_event",OUT,EAST,_("Event interface with the special registerFile"),_param->_nb_context);
164
165      ALLOC1_VALACK_OUT (out_SPR_EVENT_VAL                    , VAL);
166      ALLOC1_VALACK_IN  ( in_SPR_EVENT_ACK                    , ACK);
167      ALLOC1_SIGNAL_OUT (out_SPR_EVENT_EPCR                   ,"EPCR"             ,Tspr_t               ,_param->_size_spr);
168      ALLOC1_SIGNAL_OUT (out_SPR_EVENT_EEAR_WEN               ,"EEAR_WEN"         ,Tcontrol_t           ,1                );
169      ALLOC1_SIGNAL_OUT (out_SPR_EVENT_EEAR                   ,"EEAR"             ,Tspr_t               ,_param->_size_spr);
170      ALLOC1_SIGNAL_OUT (out_SPR_EVENT_SR_DSX                 ,"SR_DSX"           ,Tcontrol_t           ,1                );
171      ALLOC1_SIGNAL_OUT (out_SPR_EVENT_SR_TO_ESR              ,"SR_TO_ESR"        ,Tcontrol_t           ,1                );
172    }                                                                                   
173
174    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
175    {
176      ALLOC1_INTERFACE("nb_inst",IN,EAST,_("Instruction number"),_param->_nb_context);
177
178      ALLOC1_SIGNAL_IN  ( in_NB_INST_COMMIT_ALL               ,"COMMIT_ALL"       ,Tcounter_t           ,_param->_size_nb_inst_commit);
179      ALLOC1_SIGNAL_IN  ( in_NB_INST_COMMIT_MEM               ,"COMMIT_MEM"       ,Tcounter_t           ,_param->_size_nb_inst_commit);
180      ALLOC1_SIGNAL_OUT (out_NB_INST_DECOD_ALL                ,"DECOD_ALL"        ,Tcounter_t           ,_param->_size_nb_inst_decod );
181    }
182
183    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
184    {
185      ALLOC1_INTERFACE("depth",OUT,EAST,_("Interface depth"),_param->_nb_context);
186
187      ALLOC1_SIGNAL_OUT (out_DEPTH_MIN                        ,"MIN"              ,Tdepth_t             ,_param->_size_depth);
188      ALLOC1_SIGNAL_OUT (out_DEPTH_MAX                        ,"MAX"              ,Tdepth_t             ,_param->_size_depth);
189      ALLOC1_SIGNAL_OUT (out_DEPTH_FULL                       ,"FULL"             ,Tcontrol_t           ,1);
190    }
191
192    // ~~~~~[ Interface : "spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
193    {
194      ALLOC1_INTERFACE("spr",IN,EAST,_("Interface with the special registerFile"),_param->_nb_context);
195     
196      ALLOC1_SIGNAL_IN  ( in_SPR_SR_IEE                       ,"SR_IEE"           ,Tcontrol_t           ,1);
197      ALLOC1_SIGNAL_IN  ( in_SPR_SR_EPH                       ,"SR_EPH"           ,Tcontrol_t           ,1);
198    }
199
200    // ~~~~~[ Interface : "interrupt" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
201    {
202      ALLOC1_INTERFACE("interrupt",IN,NORTH,_("Interrupt Exception"),_param->_nb_context);
203
204      ALLOC1_SIGNAL_IN  ( in_INTERRUPT_ENABLE                 ,"ENABLE"           ,Tcontrol_t           ,1);
205    }
206
207    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
208    std::string name;
209
210    _component_ifetch_unit = new morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::Ifetch_unit * [_param->_nb_context];
211   
212    for (uint32_t i=0; i<_param->_nb_context; ++i)
213    {
214      name = _name+"_ifetch_unit_"+toString(i);
215      log_printf(TRACE,Front_end,FUNCTION,_("Create   : %s"),name.c_str());
216     
217      _component_ifetch_unit [i] = new morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::Ifetch_unit
218        (name.c_str()
219#ifdef STATISTICS
220         ,param_statistics
221#endif
222         ,_param->_param_ifetch_unit [i]
223         ,_usage);
224     
225      _component->set_component (_component_ifetch_unit [i]->_component
226#ifdef POSITION
227                                 , 50, 50, 10, 10
228#endif
229                                 );
230    }
231
232    {
233      name = _name+"_prediction_unit";
234      log_printf(TRACE,Front_end,FUNCTION,_("Create   : %s"),name.c_str());
235     
236      _component_prediction_unit = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::Prediction_unit
237        (name.c_str()
238#ifdef STATISTICS
239         ,param_statistics
240#endif
241         ,_param->_param_prediction_unit
242         ,_usage);
243     
244      _component->set_component (_component_prediction_unit->_component
245#ifdef POSITION
246                                 , 50, 50, 10, 10
247#endif
248                                 );
249    }
250
251    _component_decod_unit = new morpheo::behavioural::core::multi_front_end::front_end::decod_unit::Decod_unit * [_param->_nb_decod_unit];
252   
253    for (uint32_t i=0; i<_param->_nb_decod_unit; ++i)
254    {
255      name = _name+"_decod_unit_"+toString(i);
256      log_printf(TRACE,Front_end,FUNCTION,_("Create   : %s"),name.c_str());
257     
258      _component_decod_unit [i] = new morpheo::behavioural::core::multi_front_end::front_end::decod_unit::Decod_unit
259        (name.c_str()
260#ifdef STATISTICS
261         ,param_statistics
262#endif
263         ,_param->_param_decod_unit [i]
264         ,_usage);
265     
266      _component->set_component (_component_decod_unit [i]->_component
267#ifdef POSITION
268                                 , 50, 50, 10, 10
269#endif
270                                 );
271    }
272
273    {
274      name = _name+"_context_state";
275      log_printf(TRACE,Front_end,FUNCTION,_("Create   : %s"),name.c_str());
276     
277      _component_context_state = new morpheo::behavioural::core::multi_front_end::front_end::context_state::Context_State
278        (name.c_str()
279#ifdef STATISTICS
280         ,param_statistics
281#endif
282         ,_param->_param_context_state
283         ,_usage);
284     
285      _component->set_component (_component_context_state->_component
286#ifdef POSITION
287                                 , 50, 50, 10, 10
288#endif
289                                 );
290    }
291
292    {
293      name = _name+"_glue";
294      log_printf(TRACE,Front_end,FUNCTION,_("Create   : %s"),name.c_str());
295     
296      _component_glue = new morpheo::behavioural::core::multi_front_end::front_end::front_end_glue::Front_end_Glue
297        (name.c_str()
298#ifdef STATISTICS
299         ,param_statistics
300#endif
301         ,_param->_param_glue
302         ,_usage);
303     
304      _component->set_component (_component_glue->_component
305#ifdef POSITION
306                                 , 50, 50, 10, 10
307#endif
308                                 );
309    }
310
311   
312    // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
313    std::string src,dest;
314
315    // ===================================================================
316    // =====[ ifetch_unit ]===============================================
317    // ===================================================================
318    for (uint32_t i=0; i<_param->_nb_context; ++i)
319    {
320      src = _name+"_ifetch_unit_"+toString(i);
321      log_printf(TRACE,Front_end,FUNCTION,_("Instance : %s"),src.c_str());
322           
323      {
324        dest = _name;
325#ifdef POSITION
326        _component->interface_map (src ,"",
327                                   dest,"");
328#endif
329        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
330        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
331      }
332
333      // ~~~~~[ Interface "icache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
334      {
335        dest = _name;
336#ifdef POSITION
337        _component->interface_map (src ,"icache_req",
338                                   dest,"icache_req_"+toString(i));
339#endif
340
341        PORT_MAP(_component,src ,"out_ICACHE_REQ_VAL"      ,dest,"out_ICACHE_REQ_"+toString(i)+"_VAL"      );
342        PORT_MAP(_component,src , "in_ICACHE_REQ_ACK"      ,dest, "in_ICACHE_REQ_"+toString(i)+"_ACK"      );
343      //PORT_MAP(_component,src ,"out_ICACHE_REQ_THREAD_ID",dest,"out_ICACHE_REQ_"+toString(i)+"_THREAD_ID");
344        if (_param->_have_port_ifetch_queue_ptr)
345        PORT_MAP(_component,src ,"out_ICACHE_REQ_PACKET_ID",dest,"out_ICACHE_REQ_"+toString(i)+"_PACKET_ID");
346        PORT_MAP(_component,src ,"out_ICACHE_REQ_ADDRESS"  ,dest,"out_ICACHE_REQ_"+toString(i)+"_ADDRESS"  );
347        PORT_MAP(_component,src ,"out_ICACHE_REQ_TYPE"     ,dest,"out_ICACHE_REQ_"+toString(i)+"_TYPE"     );
348      }
349
350      // ~~~~~[ Interface "icache_rsp" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
351      {
352        dest = _name;
353#ifdef POSITION
354        _component->interface_map (src ,"icache_rsp",
355                                   dest,"icache_rsp_"+toString(i));
356#endif
357
358        PORT_MAP(_component,src , "in_ICACHE_RSP_VAL"        ,dest, "in_ICACHE_RSP_"+toString(i)+"_VAL"        );
359        PORT_MAP(_component,src ,"out_ICACHE_RSP_ACK"        ,dest,"out_ICACHE_RSP_"+toString(i)+"_ACK"        );
360//      PORT_MAP(_component,src , "in_ICACHE_RSP_THREAD_ID"  ,dest, "in_ICACHE_RSP_"+toString(i)+"_THREAD_ID"  );
361        if (_param->_have_port_ifetch_queue_ptr)
362        PORT_MAP(_component,src , "in_ICACHE_RSP_PACKET_ID"  ,dest, "in_ICACHE_RSP_"+toString(i)+"_PACKET_ID"  );
363        PORT_MAP(_component,src , "in_ICACHE_RSP_ERROR"      ,dest, "in_ICACHE_RSP_"+toString(i)+"_ERROR"      );
364
365        for (uint32_t j=0; j<_param->_nb_inst_fetch [i]; ++j)
366          {
367#ifdef POSITION
368            _component->interface_map (src ,"icache_rsp_"+toString(j),
369                                       dest,"icache_rsp_"+toString(i)+"_"+toString(j));
370#endif
371           
372            PORT_MAP(_component,src , "in_ICACHE_RSP_"+toString(j)+"_INSTRUCTION",dest, "in_ICACHE_RSP_"+toString(i)+"_"+toString(j)+"_INSTRUCTION");
373          }
374      }
375
376      // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
377      {
378        dest = _name+"_prediction_unit";
379#ifdef POSITION
380        _component->interface_map (src ,"predict"
381                                   dest,"predict_"+toString(i));
382#endif
383       
384        COMPONENT_MAP(_component,src ,"out_PREDICT_VAL"                        ,dest, "in_PREDICT_"+toString(i)+"_VAL"                        );
385        COMPONENT_MAP(_component,src , "in_PREDICT_ACK"                        ,dest,"out_PREDICT_"+toString(i)+"_ACK"                        );
386        COMPONENT_MAP(_component,src ,"out_PREDICT_PC_PREVIOUS"                ,dest, "in_PREDICT_"+toString(i)+"_PC_PREVIOUS"                );
387        COMPONENT_MAP(_component,src ,"out_PREDICT_PC_CURRENT"                 ,dest, "in_PREDICT_"+toString(i)+"_PC_CURRENT"                 );
388        COMPONENT_MAP(_component,src ,"out_PREDICT_PC_CURRENT_IS_DS_TAKE"      ,dest, "in_PREDICT_"+toString(i)+"_PC_CURRENT_IS_DS_TAKE"      );
389        COMPONENT_MAP(_component,src , "in_PREDICT_PC_NEXT"                    ,dest,"out_PREDICT_"+toString(i)+"_PC_NEXT"                    );
390        COMPONENT_MAP(_component,src , "in_PREDICT_PC_NEXT_IS_DS_TAKE"         ,dest,"out_PREDICT_"+toString(i)+"_PC_NEXT_IS_DS_TAKE"         );
391        if (_param->_have_port_inst_ifetch_ptr)
392        COMPONENT_MAP(_component,src , "in_PREDICT_INST_IFETCH_PTR"            ,dest,"out_PREDICT_"+toString(i)+"_INST_IFETCH_PTR"            );
393        COMPONENT_MAP(_component,src , "in_PREDICT_BRANCH_STATE"               ,dest,"out_PREDICT_"+toString(i)+"_BRANCH_STATE"               );
394        if (_param->_have_port_depth)
395        COMPONENT_MAP(_component,src , "in_PREDICT_BRANCH_UPDATE_PREDICTION_ID",dest,"out_PREDICT_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID");
396       
397        for (uint32_t j=0; j<_param->_nb_inst_fetch[i]; ++j)
398          {
399#ifdef POSITION
400            _component->interface_map (src ,"predict_"+toString(j)
401                                       dest,"predict_"+toString(i)+"_"+toString(j));
402#endif
403           
404            COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(j)+                "_INSTRUCTION_ENABLE",
405                                     dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_INSTRUCTION_ENABLE");
406          }
407      }
408
409      // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
410      {
411        uint32_t num_decod_unit = _param->_link_context_to_decod_unit[i];
412        uint32_t num_context;
413
414        for (num_context=0; num_context<_param->_decod_unit_nb_context[num_decod_unit]; num_context ++)
415          if (_param->_translate_context_id_from_decod_unit [num_decod_unit][num_context] == i)
416            break;
417
418        dest = _name+"_decod_unit_"+toString(num_decod_unit);
419#ifdef POSITION
420        _component->interface_map (src ,"decod"
421                                   dest,"ifetch_"+toString(num_context));
422#endif
423       
424        ////out_DECOD_CONTEXT_ID
425
426        COMPONENT_MAP(_component,src ,"out_DECOD_ADDRESS"                    ,dest, "in_IFETCH_"+toString(num_context)+"_ADDRESS"                    );
427        if (_param->_have_port_inst_ifetch_ptr)
428        COMPONENT_MAP(_component,src ,"out_DECOD_INST_IFETCH_PTR"            ,dest, "in_IFETCH_"+toString(num_context)+"_INST_IFETCH_PTR"            );
429        COMPONENT_MAP(_component,src ,"out_DECOD_BRANCH_STATE"               ,dest, "in_IFETCH_"+toString(num_context)+"_BRANCH_STATE"               );
430        if (_param->_have_port_depth)
431        COMPONENT_MAP(_component,src ,"out_DECOD_BRANCH_UPDATE_PREDICTION_ID",dest, "in_IFETCH_"+toString(num_context)+"_BRANCH_UPDATE_PREDICTION_ID");
432        COMPONENT_MAP(_component,src ,"out_DECOD_EXCEPTION"                  ,dest, "in_IFETCH_"+toString(num_context)+"_EXCEPTION"                  );
433
434        for (uint32_t j=0; j<_param->_nb_inst_fetch [i];++j)
435          {
436            dest = _name+"_decod_unit_"+toString(num_decod_unit);
437#ifdef POSITION
438            _component->interface_map (src ,"decod_"+toString(j)
439                                       dest,"ifetch_"+toString(num_context)+"_"+toString(j));
440#endif
441       
442            COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(j)+                          "_VAL"        ,
443                                     dest, "in_IFETCH_"+toString(num_context)+"_"+toString(j)+"_VAL"        );
444            COMPONENT_MAP(_component,src , "in_DECOD_" +toString(j)+                          "_ACK"        ,
445                                     dest,"out_IFETCH_"+toString(num_context)+"_"+toString(j)+"_ACK"        );
446            COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(j)+                          "_INSTRUCTION",
447                                     dest, "in_IFETCH_"+toString(num_context)+"_"+toString(j)+"_INSTRUCTION");
448          }
449      }
450
451      // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
452      {
453        dest = _name+"_glue";
454#ifdef POSITION
455        _component->interface_map (src ,"event",
456                                   dest,"event_"+toString(i));
457#endif
458
459        COMPONENT_MAP(_component,src , "in_EVENT_VAL"             ,
460                                 dest,"out_EVENT_"+toString(i)+"_IFETCH_UNIT_VAL"             );
461        COMPONENT_MAP(_component,src ,"out_EVENT_ACK"             ,
462                                 dest, "in_EVENT_"+toString(i)+"_IFETCH_UNIT_ACK"             );
463        COMPONENT_MAP(_component,src , "in_EVENT_ADDRESS"         ,
464                                 dest,"out_EVENT_"+toString(i)+"_IFETCH_UNIT_ADDRESS"         );
465        COMPONENT_MAP(_component,src , "in_EVENT_ADDRESS_NEXT"    ,
466                                 dest,"out_EVENT_"+toString(i)+"_IFETCH_UNIT_ADDRESS_NEXT"    );
467        COMPONENT_MAP(_component,src , "in_EVENT_ADDRESS_NEXT_VAL",
468                                 dest,"out_EVENT_"+toString(i)+"_IFETCH_UNIT_ADDRESS_NEXT_VAL");
469        COMPONENT_MAP(_component,src , "in_EVENT_IS_DS_TAKE"      ,
470                                 dest,"out_EVENT_"+toString(i)+"_IFETCH_UNIT_IS_DS_TAKE"      );
471      }
472    }
473
474    // ===================================================================
475    // =====[ prediction_unit ]===========================================
476    // ===================================================================
477    {
478      src = _name+"_prediction_unit";
479      log_printf(TRACE,Front_end,FUNCTION,_("Instance : %s"),src.c_str());
480           
481      {
482        dest = _name;
483#ifdef POSITION
484        _component->interface_map (src ,"",
485                                   dest,"");
486#endif
487        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
488        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
489      }
490
491      // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
492      //   in_PREDICT_VAL                         - component_ifetch_unit
493      //  out_PREDICT_ACK                         - component_ifetch_unit
494      //   in_PREDICT_PC_PREVIOUS                 - component_ifetch_unit
495      //   in_PREDICT_PC_CURRENT                  - component_ifetch_unit
496      //   in_PREDICT_PC_CURRENT_IS_DS_TAKE       - component_ifetch_unit
497      //  out_PREDICT_PC_NEXT                     - component_ifetch_unit
498      //  out_PREDICT_PC_NEXT_IS_DS_TAKE          - component_ifetch_unit
499      //  out_PREDICT_INSTRUCTION_ENABLE          - component_ifetch_unit
500      //  out_PREDICT_INST_IFETCH_PTR             - component_ifetch_unit
501      //  out_PREDICT_BRANCH_STATE                - component_ifetch_unit
502      //  out_PREDICT_BRANCH_UPDATE_PREDICTION_ID - component_ifetch_unit
503
504      // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
505      //   in_DECOD_VAL                           - component_decod_unit
506      //  out_DECOD_ACK                           - component_decod_unit
507      //   in_DECOD_CONTEXT_ID                    - component_decod_unit
508      //   in_DECOD_MATCH_INST_IFETCH_PTR         - component_decod_unit
509      //   in_DECOD_BRANCH_STATE                  - component_decod_unit
510      //   in_DECOD_BRANCH_UPDATE_PREDICTION_ID   - component_decod_unit
511      //   in_DECOD_BRANCH_CONDITION              - component_decod_unit
512      //   in_DECOD_BRANCH_DIRECTION              - component_decod_unit
513      //   in_DECOD_ADDRESS_SRC                   - component_decod_unit
514      //   in_DECOD_ADDRESS_DEST                  - component_decod_unit
515
516      // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
517      for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
518        {
519          dest = _name+"_glue";
520#ifdef POSITION
521          _component->interface_map (src ,"branch_complete_"+toString(i),
522                                     dest,"branch_complete_"+toString(i));
523#endif
524
525          COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+                "_VAL"            ,
526                                   dest,"out_BRANCH_COMPLETE_"+toString(i)+"_PREDICTION_UNIT_VAL"            );
527          COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+                "_ACK"            ,
528                                   dest, "in_BRANCH_COMPLETE_"+toString(i)+"_PREDICTION_UNIT_ACK"            );
529          COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+                "_MISS_PREDICTION",
530                                   dest, "in_BRANCH_COMPLETE_"+toString(i)+"_PREDICTION_UNIT_MISS_PREDICTION");
531
532          dest = _name;
533#ifdef POSITION
534          _component->interface_map (src ,"branch_complete_"+toString(i),
535                                     dest,"branch_complete_"+toString(i));
536#endif
537
538          if (_param->_have_port_context_id)
539          PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID",
540                              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID");
541          if (_param->_have_port_depth)
542          PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH"     ,
543                              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH"     );
544          PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"   ,
545                              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"   );
546          PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_NO_SEQUENCE",
547                              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_NO_SEQUENCE");
548
549          dest = _name+"_context_state";
550#ifdef POSITION
551          _component->interface_map (src ,"branch_complete_"+toString(i),
552                                     dest,"branch_complete_"+toString(i));
553#endif
554
555          COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_TAKE"        ,
556                                   dest, "in_BRANCH_COMPLETE_"+toString(i)+"_TAKE"        );
557          COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_SRC" ,
558                                   dest, "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_SRC" );
559          COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_DEST",
560                                   dest, "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_DEST");
561        }
562
563      // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
564      for (uint32_t i=0; i<_param->_nb_context; ++i)
565        {
566          dest = _name+"_context_state";
567#ifdef POSITION
568          _component->interface_map (src ,"branch_event_"+toString(i),
569                                     dest,"branch_event_"+toString(i));
570#endif
571
572          COMPONENT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_VAL"             ,
573                                   dest, "in_BRANCH_EVENT_"+toString(i)+"_VAL"             );
574          COMPONENT_MAP(_component,src , "in_BRANCH_EVENT_"+toString(i)+"_ACK"             ,
575                                   dest,"out_BRANCH_EVENT_"+toString(i)+"_ACK"             );
576//        COMPONENT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_CONTEXT_ID"      ,
577//                                 dest, "in_BRANCH_EVENT_"+toString(i)+"_CONTEXT_ID"      );
578          if (_param->_have_port_depth)
579          COMPONENT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_DEPTH"           ,
580                                   dest, "in_BRANCH_EVENT_"+toString(i)+"_DEPTH"           );
581//        COMPONENT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_MISS_PREDICTION" ,
582//                                 dest, "in_BRANCH_EVENT_"+toString(i)+"_MISS_PREDICTION" );
583          COMPONENT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_SRC"     ,
584                                   dest, "in_BRANCH_EVENT_"+toString(i)+"_ADDRESS_SRC"     );
585          COMPONENT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST_VAL",
586                                   dest, "in_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST_VAL");
587          COMPONENT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST"    ,
588                                   dest, "in_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST"    );
589        }
590
591      // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
592      for (uint32_t i=0; i<_param->_nb_context; ++i)
593        {
594          dest = _name+"_glue";
595#ifdef POSITION
596          _component->interface_map (src ,"event_"+toString(i),
597                                     dest,"event_"+toString(i));
598#endif
599          COMPONENT_MAP(_component,src , "in_EVENT_"+toString(i)+                "_VAL"  ,
600                                   dest,"out_EVENT_"+toString(i)+"_PREDICTION_UNIT_VAL"  );
601          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+                "_ACK"  ,
602                                   dest, "in_EVENT_"+toString(i)+"_PREDICTION_UNIT_ACK"  );
603          COMPONENT_MAP(_component,src , "in_EVENT_"+toString(i)+                "_TYPE" ,
604                                   dest,"out_EVENT_"+toString(i)+"_PREDICTION_UNIT_TYPE" );
605          if (_param->_have_port_depth)
606          COMPONENT_MAP(_component,src , "in_EVENT_"+toString(i)+                "_DEPTH",
607                                   dest,"out_EVENT_"+toString(i)+"_PREDICTION_UNIT_DEPTH");
608        }
609
610      // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
611      for (uint32_t i=0; i<_param->_nb_context; ++i)
612        {
613          dest = _name+"_glue";
614#ifdef POSITION
615          _component->interface_map (src ,"depth_"+toString(i),
616                                     dest,"depth_"+toString(i));
617#endif
618
619          COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+                "_VAL",
620                                   dest, "in_DEPTH_"+toString(i)+"_PREDICTION_UNIT_VAL");
621          if (_param->_have_port_depth)
622            {
623          COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+                "_CURRENT",
624                                   dest, "in_DEPTH_"+toString(i)+"_PREDICTION_UNIT_CURRENT");
625          COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+                "_MIN"    ,
626                                   dest, "in_DEPTH_"+toString(i)+"_PREDICTION_UNIT_MIN"    );
627          COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+                "_MAX"    ,
628                                   dest, "in_DEPTH_"+toString(i)+"_PREDICTION_UNIT_MAX"    );
629            }
630          COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+                "_FULL"   ,
631                                   dest, "in_DEPTH_"+toString(i)+"_PREDICTION_UNIT_FULL"   );
632        }
633    }
634
635    // ===================================================================
636    // =====[ decod_unit ]================================================
637    // ===================================================================
638    {
639      uint32_t x=0;
640    for (uint32_t i=0; i<_param->_nb_decod_unit; ++i)
641    {
642      src = _name+"_decod_unit_"+toString(i);
643      log_printf(TRACE,Front_end,FUNCTION,_("Instance : %s"),src.c_str());
644           
645      {
646        dest = _name;
647#ifdef POSITION
648        _component->interface_map (src ,"",
649                                   dest,"");
650#endif
651        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
652        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
653      }
654
655      // ~~~~~[ Interface : "ifetch" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
656      //   in_IFETCH_VAL                         - component_ifetch_unit
657      //  out_IFETCH_ACK                         - component_ifetch_unit
658      //   in_IFETCH_INSTRUCTION                 - component_ifetch_unit
659      //   in_IFETCH_CONTEXT_ID                  - component_ifetch_unit
660      //   in_IFETCH_ADDRESS                     - component_ifetch_unit
661      //// in_IFETCH_ADDRESS_NEXT                - component_ifetch_unit
662      //   in_IFETCH_INST_IFETCH_PTR             - component_ifetch_unit
663      //   in_IFETCH_BRANCH_STATE                - component_ifetch_unit
664      //   in_IFETCH_BRANCH_UPDATE_PREDICTION_ID - component_ifetch_unit
665      //   in_IFETCH_EXCEPTION                   - component_ifetch_unit
666
667      for (uint32_t j=0; j<_param->_decod_unit_nb_context[i]; ++j)
668        {
669          dest = _name+"_glue";
670#ifdef POSITION
671          _component->interface_map (src ,"ifetch_"+toString(j),
672                                     dest,"ifetch_"+toString(i)+"_"+toString(j));
673#endif
674     
675          if (_param->_have_port_context_id)
676          COMPONENT_MAP(_component,src , "in_IFETCH_"+toString(j)                           +"_CONTEXT_ID",
677                                   dest,"out_IFETCH_"+toString(i)+"_"+toString(j)+"_DECOD_UNIT_CONTEXT_ID");
678        }
679
680      // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
681      for (uint32_t j=0; j<_param->_nb_inst_decod [i]; ++j)
682        {
683          dest = _name;
684#ifdef POSITION
685          _component->interface_map (src ,"decod_"+toString(j),
686                                     dest,"decod_"+toString(x));
687#endif
688
689         
690          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_VAL"          ,
691                              dest,"out_DECOD_"+toString(x)+"_VAL"          );
692          PORT_MAP(_component,src , "in_DECOD_"+toString(j)+"_ACK"          ,
693                              dest, "in_DECOD_"+toString(x)+"_ACK"          );
694          if (_param->_have_port_depth)
695          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_DEPTH"        ,
696                              dest,"out_DECOD_"+toString(x)+"_DEPTH"        );
697          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_TYPE"         ,
698                              dest,"out_DECOD_"+toString(x)+"_TYPE"         );
699          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_OPERATION"    ,
700                              dest,"out_DECOD_"+toString(x)+"_OPERATION"    );
701          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_NO_EXECUTE"   ,
702                              dest,"out_DECOD_"+toString(x)+"_NO_EXECUTE"   );
703          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_IS_DELAY_SLOT",
704                              dest,"out_DECOD_"+toString(x)+"_IS_DELAY_SLOT");
705#ifdef DEBUG
706          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_ADDRESS"      ,
707                              dest,"out_DECOD_"+toString(x)+"_ADDRESS"      );
708#endif
709          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_ADDRESS_NEXT" ,
710                              dest,"out_DECOD_"+toString(x)+"_ADDRESS_NEXT" );
711          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_HAS_IMMEDIAT" ,
712                              dest,"out_DECOD_"+toString(x)+"_HAS_IMMEDIAT" );
713          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_IMMEDIAT"     ,
714                              dest,"out_DECOD_"+toString(x)+"_IMMEDIAT"     );
715          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_READ_RA"      ,
716                              dest,"out_DECOD_"+toString(x)+"_READ_RA"      );
717          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_NUM_REG_RA"   ,
718                              dest,"out_DECOD_"+toString(x)+"_NUM_REG_RA"   );
719          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_READ_RB"      ,
720                              dest,"out_DECOD_"+toString(x)+"_READ_RB"      );
721          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_NUM_REG_RB"   ,
722                              dest,"out_DECOD_"+toString(x)+"_NUM_REG_RB"   );
723          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_READ_RC"      ,
724                              dest,"out_DECOD_"+toString(x)+"_READ_RC"      );
725          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_NUM_REG_RC"   ,
726                              dest,"out_DECOD_"+toString(x)+"_NUM_REG_RC"   );
727          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_WRITE_RD"     ,
728                              dest,"out_DECOD_"+toString(x)+"_WRITE_RD"     );
729          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_NUM_REG_RD"   ,
730                              dest,"out_DECOD_"+toString(x)+"_NUM_REG_RD"   );
731          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_WRITE_RE"     ,
732                              dest,"out_DECOD_"+toString(x)+"_WRITE_RE"     );
733          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_NUM_REG_RE"   ,
734                              dest,"out_DECOD_"+toString(x)+"_NUM_REG_RE"   );
735          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_EXCEPTION_USE",
736                              dest,"out_DECOD_"+toString(x)+"_EXCEPTION_USE");
737          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_EXCEPTION"    ,
738                              dest,"out_DECOD_"+toString(x)+"_EXCEPTION"    );
739
740          dest = _name+"_glue";
741#ifdef POSITION
742          _component->interface_map (src ,"decod_"+toString(j),
743                                     dest,"decod_"+toString(i)+"_"+toString(j));
744#endif
745
746          if (_param->_have_port_context_id)
747          COMPONENT_MAP(_component,src ,"out_DECOD_"+toString(j)+                           "_CONTEXT_ID"   ,
748                                   dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_DECOD_UNIT_CONTEXT_ID"   );
749
750          x++;
751        }
752     
753      // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
754      for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j)
755        {
756          dest = _name+"_prediction_unit";
757#ifdef POSITION
758          _component->interface_map (src ,"predict_"+toString(j),
759                                     dest,"decod_"+toString(i)+"_"+toString(j));
760#endif
761
762          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_VAL"                        ,
763                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_VAL"                        );
764          COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(j)+                "_ACK"                        ,
765                                   dest,"out_DECOD_"  +toString(i)+"_"+toString(j)+"_ACK"                        );
766          if (_param->_have_port_context_id)
767          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_CONTEXT_ID"                 ,
768                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_CONTEXT_ID"                 );
769          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_MATCH_INST_IFETCH_PTR"      ,
770                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_MATCH_INST_IFETCH_PTR"      );
771          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_BRANCH_STATE"               ,
772                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_BRANCH_STATE"               );
773          if (_param->_have_port_depth)
774          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_BRANCH_UPDATE_PREDICTION_ID",
775                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_BRANCH_UPDATE_PREDICTION_ID");
776          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_BRANCH_CONDITION"           ,
777                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_BRANCH_CONDITION"           );
778          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_BRANCH_DIRECTION"           ,
779                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_BRANCH_DIRECTION"           );
780//        COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_BRANCH_STACK_WRITE"         ,
781//                                 dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_BRANCH_STACK_WRITE"         );
782          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_ADDRESS_SRC"                ,
783                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_ADDRESS_SRC"                );
784          COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(j)+                "_ADDRESS_DEST"               ,
785                                   dest, "in_DECOD_"  +toString(i)+"_"+toString(j)+"_ADDRESS_DEST"               );
786//        COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(j)+                "_CAN_CONTINUE"               ,
787//                                 dest,"out_DECOD_"  +toString(i)+"_"+toString(j)+"_CAN_CONTINUE"               );
788
789        }
790
791      // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
792      for (uint32_t j=0; j<_param->_decod_unit_nb_context[i]; ++j)
793        {
794 //           uint32_t y=(_param->_translate_context_id_from_decod_unit[i])[j];
795
796          dest = _name+"_glue";
797#ifdef POSITION
798          _component->interface_map (src ,"depth_"+toString(j),
799                                     dest,"depth_"+toString(j));
800#endif
801
802          if (_param->_have_port_depth)
803            {
804          COMPONENT_MAP(_component,src , "in_DEPTH_"+toString(j)+                           "_MIN",
805                                   dest,"out_DEPTH_"+toString(i)+"_"+toString(j)+"_DECOD_UNIT_MIN");
806          COMPONENT_MAP(_component,src , "in_DEPTH_"+toString(j)+                           "_MAX",
807                                   dest,"out_DEPTH_"+toString(i)+"_"+toString(j)+"_DECOD_UNIT_MAX");
808            } 
809          COMPONENT_MAP(_component,src , "in_DEPTH_"+toString(j)+                           "_FULL",
810                                   dest,"out_DEPTH_"+toString(i)+"_"+toString(j)+"_DECOD_UNIT_FULL");
811         
812        }
813
814      // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
815      for (uint32_t j=0; j<_param->_decod_unit_nb_context[i]; ++j)
816        {
817          uint32_t y=(_param->_translate_context_id_from_decod_unit[i])[j];
818
819          dest = _name+"_glue";
820#ifdef POSITION
821          _component->interface_map (src ,"nb_inst_"+toString(j),
822                                     dest,"nb_inst_"+toString(y));
823#endif
824
825          COMPONENT_MAP(_component,src ,"out_NB_INST_"+toString(j)+           "_DECOD_ALL",
826                                   dest, "in_NB_INST_"+toString(y)+"_DECOD_UNIT_DECOD_ALL");
827        }
828
829      // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
830      for (uint32_t j=0; j<_param->_decod_unit_nb_context[i]; ++j)
831        {
832          uint32_t y=(_param->_translate_context_id_from_decod_unit[i])[j];
833         
834          dest = _name+"_context_state";
835#ifdef POSITION
836          _component->interface_map (src ,"context_"+toString(j),
837                                     dest,"context_"+toString(y));
838#endif
839
840          COMPONENT_MAP(_component,src , "in_CONTEXT_"+toString(j)+"_DECOD_ENABLE",
841                                   dest,"out_CONTEXT_"+toString(y)+"_DECOD_ENABLE");
842
843          dest = _name+"_glue";
844#ifdef POSITION
845          _component->interface_map (src ,"context_"+toString(j),
846                                     dest,"context_"+toString(i)+"_"+toString(j));
847#endif
848
849          COMPONENT_MAP(_component,src , "in_CONTEXT_"+toString(j)+                           "_DEPTH_VAL",
850                                   dest,"out_CONTEXT_"+toString(i)+"_"+toString(j)+"_DECOD_UNIT_DEPTH_VAL");
851          if (_param->_have_port_depth)
852          COMPONENT_MAP(_component,src , "in_CONTEXT_"+toString(j)+                           "_DEPTH",
853                                   dest,"out_CONTEXT_"+toString(i)+"_"+toString(j)+"_DECOD_UNIT_DEPTH");
854        }
855
856                                                                                     
857      // ~~~~~[ Interface : "context_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
858      {
859        dest = _name+"_context_state";
860#ifdef POSITION
861        _component->interface_map (src ,"context_event",
862                                   dest,"decod_event_"+toString(i));
863#endif
864     
865        COMPONENT_MAP(_component,src ,"out_CONTEXT_EVENT_VAL"          ,dest, "in_DECOD_EVENT_"+toString(i)+"_VAL"          );
866        COMPONENT_MAP(_component,src , "in_CONTEXT_EVENT_ACK"          ,dest,"out_DECOD_EVENT_"+toString(i)+"_ACK"          );
867        if (_param->_have_port_context_id)
868        COMPONENT_MAP(_component,src ,"out_CONTEXT_EVENT_CONTEXT_ID"   ,dest, "in_DECOD_EVENT_"+toString(i)+"_CONTEXT_ID"   );
869        if (_param->_have_port_depth)
870        COMPONENT_MAP(_component,src ,"out_CONTEXT_EVENT_DEPTH"        ,dest, "in_DECOD_EVENT_"+toString(i)+"_DEPTH"        );
871        COMPONENT_MAP(_component,src ,"out_CONTEXT_EVENT_TYPE"         ,dest, "in_DECOD_EVENT_"+toString(i)+"_TYPE"         );
872        COMPONENT_MAP(_component,src ,"out_CONTEXT_EVENT_IS_DELAY_SLOT",dest, "in_DECOD_EVENT_"+toString(i)+"_IS_DELAY_SLOT");
873        COMPONENT_MAP(_component,src ,"out_CONTEXT_EVENT_ADDRESS"      ,dest, "in_DECOD_EVENT_"+toString(i)+"_ADDRESS"      );
874        COMPONENT_MAP(_component,src ,"out_CONTEXT_EVENT_ADDRESS_EPCR" ,dest, "in_DECOD_EVENT_"+toString(i)+"_ADDRESS_EPCR" );
875      }
876    }
877    }
878
879    // ===================================================================
880    // =====[ context_state ]=============================================
881    // ===================================================================
882    {
883      src = _name+"_context_state";
884      log_printf(TRACE,Front_end,FUNCTION,_("Instance : %s"),src.c_str());
885           
886      {
887        dest = _name;
888#ifdef POSITION
889        _component->interface_map (src ,"",
890                                   dest,"");
891#endif
892        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
893        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
894      }
895
896    // ~~~~~[ Interface : "decod_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
897      //   in_DECOD_EVENT_VAL                    - component_decod_unit
898      //  out_DECOD_EVENT_ACK                    - component_decod_unit
899      //   in_DECOD_EVENT_CONTEXT_ID             - component_decod_unit
900      //   in_DECOD_EVENT_DEPTH                  - component_decod_unit
901      //   in_DECOD_EVENT_TYPE                   - component_decod_unit
902      //   in_DECOD_EVENT_IS_DELAY_SLOT          - component_decod_unit
903      //   in_DECOD_EVENT_ADDRESS                - component_decod_unit
904      //   in_DECOD_EVENT_ADDRESS_EPCR           - component_decod_unit
905
906      // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
907      {
908        dest = _name;
909#ifdef POSITION
910        _component->interface_map (src ,"commit_event",
911                                   dest,"commit_event");
912#endif
913       
914        PORT_MAP(_component,src , "in_COMMIT_EVENT_VAL"             ,
915                            dest, "in_COMMIT_EVENT_VAL"             );
916        PORT_MAP(_component,src ,"out_COMMIT_EVENT_ACK"             ,
917                            dest,"out_COMMIT_EVENT_ACK"             );
918        if (_param->_have_port_context_id)
919        PORT_MAP(_component,src , "in_COMMIT_EVENT_CONTEXT_ID"      ,
920                            dest, "in_COMMIT_EVENT_CONTEXT_ID"      );
921        if (_param->_have_port_depth)
922        PORT_MAP(_component,src , "in_COMMIT_EVENT_DEPTH"           ,
923                            dest, "in_COMMIT_EVENT_DEPTH"           );
924        PORT_MAP(_component,src , "in_COMMIT_EVENT_TYPE"            ,
925                            dest, "in_COMMIT_EVENT_TYPE"            );
926        PORT_MAP(_component,src , "in_COMMIT_EVENT_IS_DELAY_SLOT"   ,
927                            dest, "in_COMMIT_EVENT_IS_DELAY_SLOT"   );
928        PORT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS"         ,
929                            dest, "in_COMMIT_EVENT_ADDRESS"         );
930        PORT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EPCR_VAL",
931                            dest, "in_COMMIT_EVENT_ADDRESS_EPCR_VAL");
932        PORT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EPCR"    ,
933                            dest, "in_COMMIT_EVENT_ADDRESS_EPCR"    );
934        PORT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EEAR_VAL",
935                            dest, "in_COMMIT_EVENT_ADDRESS_EEAR_VAL");
936        PORT_MAP(_component,src , "in_COMMIT_EVENT_ADDRESS_EEAR"    ,
937                            dest, "in_COMMIT_EVENT_ADDRESS_EEAR"    );
938      }
939
940      // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
941      for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
942        {
943          dest = _name+"_glue";
944#ifdef POSITION
945          _component->interface_map (src ,"branch_complete_"+toString(i),
946                                     dest,"branch_complete_"+toString(i));
947#endif
948
949          COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+              "_VAL"            ,
950                                   dest,"out_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_STATE_VAL"            );
951          COMPONENT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+              "_ACK"            ,
952                                   dest, "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_STATE_ACK"            );
953          COMPONENT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+              "_MISS_PREDICTION",
954                                   dest,"out_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_STATE_MISS_PREDICTION");
955
956          dest = _name;
957#ifdef POSITION
958          _component->interface_map (src ,"branch_complete_"+toString(i),
959                                     dest,"branch_complete_"+toString(i));
960#endif
961
962          if (_param->_have_port_context_id)
963          PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID",
964                              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID");
965          if (_param->_have_port_depth)
966          PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH"     ,
967                              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH"     );
968
969          //   in_BRANCH_COMPLETE_TAKE               - component_prediction_unit
970          //   in_BRANCH_COMPLETE_ADDRESS_SRC        - component_prediction_unit
971          //   in_BRANCH_COMPLETE_ADDRESS_DEST       - component_prediction_unit
972      }
973
974      // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
975      for (uint32_t i=0; i<_param->_nb_context; ++i)
976        {
977          dest = _name;
978#ifdef POSITION
979          _component->interface_map (src ,"nb_inst_"+toString(i),
980                                     dest,"nb_inst_"+toString(i));
981#endif
982         
983          PORT_MAP(_component,src , "in_NB_INST_"+toString(i)+"_COMMIT_ALL",
984                              dest, "in_NB_INST_"+toString(i)+"_COMMIT_ALL");
985          PORT_MAP(_component,src , "in_NB_INST_"+toString(i)+"_COMMIT_MEM",
986                              dest, "in_NB_INST_"+toString(i)+"_COMMIT_MEM");
987
988          dest = _name+"_glue";
989#ifdef POSITION
990          _component->interface_map (src ,"nb_inst_"+toString(i),
991                                     dest,"nb_inst_"+toString(i));
992#endif
993         
994          COMPONENT_MAP(_component,src , "in_NB_INST_"+toString(i)+              "_DECOD_ALL",
995                                   dest,"out_NB_INST_"+toString(i)+"_CONTEXT_STATE_DECOD_ALL");
996      }
997
998      // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
999      for (uint32_t i=0; i<_param->_nb_context; ++i)
1000        {
1001          dest = _name+"_glue";
1002#ifdef POSITION
1003          _component->interface_map (src ,"event_"+toString(i),
1004                                     dest,"event_"+toString(i));
1005#endif
1006
1007          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+              "_VAL"    ,
1008                                   dest, "in_EVENT_"+toString(i)+"_CONTEXT_STATE_VAL"    );
1009          COMPONENT_MAP(_component,src , "in_EVENT_"+toString(i)+              "_ACK"    ,
1010                                   dest,"out_EVENT_"+toString(i)+"_CONTEXT_STATE_ACK"    );
1011          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+              "_ADDRESS",
1012                                   dest, "in_EVENT_"+toString(i)+"_CONTEXT_STATE_ADDRESS");
1013          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+              "_ADDRESS_NEXT"    ,
1014                                   dest, "in_EVENT_"+toString(i)+"_CONTEXT_STATE_ADDRESS_NEXT"    ); 
1015          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+              "_ADDRESS_NEXT_VAL",
1016                                   dest, "in_EVENT_"+toString(i)+"_CONTEXT_STATE_ADDRESS_NEXT_VAL");
1017          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+              "_IS_DS_TAKE"      ,
1018                                   dest, "in_EVENT_"+toString(i)+"_CONTEXT_STATE_IS_DS_TAKE"      );
1019          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+              "_TYPE"            ,
1020                                   dest, "in_EVENT_"+toString(i)+"_CONTEXT_STATE_TYPE"            );
1021          if (_param->_have_port_depth)
1022          COMPONENT_MAP(_component,src ,"out_EVENT_"+toString(i)+              "_DEPTH"           ,
1023                                   dest, "in_EVENT_"+toString(i)+"_CONTEXT_STATE_DEPTH"           );
1024        }
1025
1026      // ~~~~~[ Interface "spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1027      for (uint32_t i=0; i<_param->_nb_context; ++i)
1028        {
1029          dest = _name;
1030#ifdef POSITION
1031          _component->interface_map (src ,"spr_event_"+toString(i),
1032                                     dest,"spr_event_"+toString(i));
1033#endif
1034
1035          PORT_MAP(_component,src ,"out_SPR_EVENT_"+toString(i)+"_VAL"      ,
1036                              dest,"out_SPR_EVENT_"+toString(i)+"_VAL"      );
1037          PORT_MAP(_component,src , "in_SPR_EVENT_"+toString(i)+"_ACK"      ,
1038                              dest, "in_SPR_EVENT_"+toString(i)+"_ACK"      );
1039          PORT_MAP(_component,src ,"out_SPR_EVENT_"+toString(i)+"_EPCR"     ,
1040                              dest,"out_SPR_EVENT_"+toString(i)+"_EPCR"     );
1041          PORT_MAP(_component,src ,"out_SPR_EVENT_"+toString(i)+"_EEAR"     ,
1042                              dest,"out_SPR_EVENT_"+toString(i)+"_EEAR"     );
1043          PORT_MAP(_component,src ,"out_SPR_EVENT_"+toString(i)+"_EEAR_WEN" ,
1044                              dest,"out_SPR_EVENT_"+toString(i)+"_EEAR_WEN" );
1045          PORT_MAP(_component,src ,"out_SPR_EVENT_"+toString(i)+"_SR_DSX"   ,
1046                              dest,"out_SPR_EVENT_"+toString(i)+"_SR_DSX"   );
1047          PORT_MAP(_component,src ,"out_SPR_EVENT_"+toString(i)+"_SR_TO_ESR",
1048                              dest,"out_SPR_EVENT_"+toString(i)+"_SR_TO_ESR");
1049        }
1050
1051      // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1052      //  out_CONTEXT_DECOD_ENABLE               - component_decod_unit
1053
1054      // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1055      for (uint32_t i=0; i<_param->_nb_context; ++i)
1056        {
1057          dest = _name+"_glue";
1058#ifdef POSITION
1059          _component->interface_map (src ,"depth_"+toString(i),
1060                                     dest,"depth_"+toString(i));
1061#endif
1062
1063          if (_param->_have_port_depth)
1064          COMPONENT_MAP(_component,src , "in_DEPTH_"+toString(i)+              "_MIN",
1065                                   dest,"out_DEPTH_"+toString(i)+"_CONTEXT_STATE_MIN");
1066        }
1067
1068      // ~~~~~[ Interface : "spr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1069      for (uint32_t i=0; i<_param->_nb_context; ++i)
1070        {
1071          dest = _name;
1072#ifdef POSITION
1073          _component->interface_map (src ,"spr_"+toString(i),
1074                                     dest,"spr_"+toString(i));
1075#endif
1076         
1077          PORT_MAP(_component,src , "in_SPR_"+toString(i)+"_SR_IEE",
1078                              dest, "in_SPR_"+toString(i)+"_SR_IEE");
1079          PORT_MAP(_component,src , "in_SPR_"+toString(i)+"_SR_EPH",
1080                              dest, "in_SPR_"+toString(i)+"_SR_EPH");
1081        }
1082
1083      // ~~~~~[ Interface : "interrupt" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1084      for (uint32_t i=0; i<_param->_nb_context; ++i)
1085        {
1086          dest = _name;
1087#ifdef POSITION
1088          _component->interface_map (src ,"interrupt_"+toString(i),
1089                                     dest,"interrupt_"+toString(i));
1090#endif
1091         
1092          PORT_MAP(_component,src , "in_INTERRUPT_"+toString(i)+"_ENABLE",
1093                              dest, "in_INTERRUPT_"+toString(i)+"_ENABLE");
1094        }
1095
1096    }
1097   
1098    // ===================================================================
1099    // =====[ glue ]======================================================
1100    // ===================================================================
1101    {
1102      src = _name+"_glue";
1103      log_printf(TRACE,Front_end,FUNCTION,_("Instance : %s"),src.c_str());
1104           
1105      {
1106        dest = _name;
1107#ifdef POSITION
1108        _component->interface_map (src ,"",
1109                                   dest,"");
1110#endif
1111        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
1112        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
1113      }
1114     
1115      // ~~~~~[ Interface : "ifetch" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1116      // out_IFETCH_DECOD_UNIT_CONTEXT_ID                       - component_decod_unit
1117     
1118      // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1119      uint32_t x=0;
1120      for (uint32_t i=0; i<_param->_nb_decod_unit; ++i)
1121        for (uint32_t j=0; j<_param->_nb_inst_decod[i];++j)
1122          {
1123            dest = _name;
1124#ifdef POSITION
1125            _component->interface_map (src ,"decod_"+toString(i)+"_"+toString(j),
1126                                       dest,"decod_"+toString(x));
1127#endif
1128           
1129            if (_param->_have_port_context_id)
1130            PORT_MAP(_component,src ,"out_DECOD_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID",
1131                                dest,"out_DECOD_"+toString(x)+                "_CONTEXT_ID");
1132            x++;
1133          }
1134      //  in_DECOD_DECOD_UNIT_CONTEXT_ID                        - component_decod_unit
1135   
1136      // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1137      for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
1138        {
1139          dest = _name;
1140#ifdef POSITION
1141          _component->interface_map (src ,"branch_complete_"+toString(i),
1142                                     dest,"branch_complete_"+toString(i));
1143#endif
1144
1145          PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"            ,
1146                              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"            );
1147          PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK"            ,
1148                              dest,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK"            );
1149          PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_MISS_PREDICTION",
1150                              dest,"out_BRANCH_COMPLETE_"+toString(i)+"_MISS_PREDICTION");
1151        }
1152     
1153      //  out_BRANCH_COMPLETE_PREDICTION_UNIT_VAL               - component_prediction_unit
1154      //   in_BRANCH_COMPLETE_PREDICTION_UNIT_ACK               - component_prediction_unit
1155      //   in_BRANCH_COMPLETE_PREDICTION_UNIT_MISS_PREDICTION   - component_prediction_unit
1156      //  out_BRANCH_COMPLETE_CONTEXT_STATE_VAL                 - component_context_state
1157      //   in_BRANCH_COMPLETE_CONTEXT_STATE_ACK                 - component_context_state
1158      //  out_BRANCH_COMPLETE_CONTEXT_STATE_MISS_PREDICTION     - component_context_state
1159
1160      // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1161      for (uint32_t i=0; i<_param->_nb_context; ++i)
1162        {
1163          dest = _name;
1164#ifdef POSITION
1165          _component->interface_map (src ,"event_"+toString(i),
1166                                     dest,"event_"+toString(i));
1167#endif
1168
1169          PORT_MAP(_component,src ,"out_EVENT_"+toString(i)+"_VAL"             ,
1170                              dest,"out_EVENT_"+toString(i)+"_VAL"             );
1171          PORT_MAP(_component,src , "in_EVENT_"+toString(i)+"_ACK"             ,
1172                              dest, "in_EVENT_"+toString(i)+"_ACK"             );
1173          PORT_MAP(_component,src ,"out_EVENT_"+toString(i)+"_ADDRESS"         ,
1174                              dest,"out_EVENT_"+toString(i)+"_ADDRESS"         );
1175          PORT_MAP(_component,src ,"out_EVENT_"+toString(i)+"_ADDRESS_NEXT"    ,
1176                              dest,"out_EVENT_"+toString(i)+"_ADDRESS_NEXT"    );
1177          PORT_MAP(_component,src ,"out_EVENT_"+toString(i)+"_ADDRESS_NEXT_VAL",
1178                              dest,"out_EVENT_"+toString(i)+"_ADDRESS_NEXT_VAL");
1179          PORT_MAP(_component,src ,"out_EVENT_"+toString(i)+"_IS_DS_TAKE"      ,
1180                              dest,"out_EVENT_"+toString(i)+"_IS_DS_TAKE"      );
1181        }
1182
1183      //  out_EVENT_IFETCH_UNIT_VAL                             - component_ifetch_unit
1184      //   in_EVENT_IFETCH_UNIT_ACK                             - component_ifetch_unit
1185      //  out_EVENT_IFETCH_UNIT_ADDRESS                         - component_ifetch_unit
1186      //  out_EVENT_IFETCH_UNIT_ADDRESS_NEXT                    - component_ifetch_unit
1187      //  out_EVENT_IFETCH_UNIT_ADDRESS_NEXT_VAL                - component_ifetch_unit
1188      //   in_EVENT_IFETCH_UNIT_IS_DS_TAKE                      - component_ifetch_unit
1189      //  out_EVENT_PREDICTION_UNIT_VAL                         - component_prediction_unit
1190      //   in_EVENT_PREDICTION_UNIT_ACK                         - component_prediction_unit
1191      //  out_EVENT_PREDICTION_UNIT_TYPE                        - component_prediction_unit
1192      //  out_EVENT_PREDICTION_UNIT_DEPTH                       - component_prediction_unit
1193      //   in_EVENT_CONTEXT_STATE_VAL                           - component_context_state
1194      //  out_EVENT_CONTEXT_STATE_ACK                           - component_context_state
1195      //   in_EVENT_CONTEXT_STATE_ADDRESS                       - component_context_state
1196      //   in_EVENT_CONTEXT_STATE_ADDRESS_NEXT                  - component_context_state
1197      //   in_EVENT_CONTEXT_STATE_ADDRESS_NEXT_VAL              - component_context_state
1198      //   in_EVENT_CONTEXT_STATE_IS_DS_TAKE                    - component_context_state
1199      //   in_EVENT_CONTEXT_STATE_TYPE                          - component_context_state
1200      //   in_EVENT_CONTEXT_STATE_DEPTH                         - component_context_state
1201
1202      // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
1203      for (uint32_t i=0; i<_param->_nb_context; ++i)
1204        {
1205          dest = _name;
1206#ifdef POSITION
1207          _component->interface_map (src ,"depth_"+toString(i),
1208                                     dest,"depth_"+toString(i));
1209#endif
1210
1211          if (_param->_have_port_depth)
1212            {
1213          PORT_MAP(_component,src ,"out_DEPTH_"+toString(i)+"_MIN",
1214                              dest,"out_DEPTH_"+toString(i)+"_MIN");
1215          PORT_MAP(_component,src ,"out_DEPTH_"+toString(i)+"_MAX",
1216                              dest,"out_DEPTH_"+toString(i)+"_MAX");
1217            }
1218          PORT_MAP(_component,src ,"out_DEPTH_"+toString(i)+"_FULL",
1219                              dest,"out_DEPTH_"+toString(i)+"_FULL");
1220        }
1221     
1222      //   in_DEPTH_PREDICTION_UNIT_VAL                         - component_prediction_unit
1223      //   in_DEPTH_PREDICTION_UNIT_CURRENT                     - component_prediction_unit
1224      //   in_DEPTH_PREDICTION_UNIT_MIN                         - component_prediction_unit
1225      //   in_DEPTH_PREDICTION_UNIT_MAX                         - component_prediction_unit
1226      //   in_DEPTH_PREDICTION_UNIT_FULL                        - component_prediction_unit
1227      //  out_DEPTH_DECOD_UNIT_MIN                              - component_decod_unit
1228      //  out_DEPTH_DECOD_UNIT_MAX                              - component_decod_unit
1229      //  out_DEPTH_DECOD_UNIT_FULL                             - component_decod_unit
1230      //  out_DEPTH_CONTEXT_STATE_MIN                           - component_context_state
1231     
1232      // ~~~~~[ Interface : "context"" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1233      //  out_CONTEXT_DECOD_UNIT_DEPTH_VAL                      - component_decod_unit
1234      //  out_CONTEXT_DECOD_UNIT_DEPTH                          - component_decod_unit
1235
1236      // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1237      for (uint32_t i=0; i<_param->_nb_context; ++i)
1238        {
1239          dest = _name;
1240#ifdef POSITION
1241          _component->interface_map (src ,"nb_inst_"+toString(i),
1242                                     dest,"nb_inst_"+toString(i));
1243#endif
1244         
1245          PORT_MAP(_component,src ,"out_NB_INST_"+toString(i)+"_DECOD_ALL",
1246                              dest,"out_NB_INST_"+toString(i)+"_DECOD_ALL");
1247
1248      //   in_NB_INST_DECOD_UNIT_DECOD_ALL                      - component_decod_unit
1249      //  out_NB_INST_CONTEXT_STATE_DECOD_ALL                   - component_context_state
1250        }
1251    }
1252   
1253    // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1254#if DEBUG_Front_end == true
1255    _component->test_map(false);
1256#endif
1257
1258#ifdef POSITION
1259     if (usage_is_set(_usage,USE_POSITION))
1260       _component->generate_file();
1261#endif
1262
1263     log_end(Front_end,FUNCTION);
1264  };
1265
1266}; // end namespace front_end
1267}; // end namespace multi_front_end
1268}; // end namespace core
1269
1270}; // end namespace behavioural
1271}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.