source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/src/Decod_unit_allocation.cpp @ 123

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

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

  • Property svn:keywords set to Id
File size: 30.1 KB
Line 
1/*
2 * $Id: Decod_unit_allocation.cpp 123 2009-06-08 20:43:30Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/include/Decod_unit.h"
9#include "Behavioural/include/Allocation.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace decod_unit {
17
18
19
20#undef  FUNCTION
21#define FUNCTION "Decod_unit::allocation"
22  void Decod_unit::allocation
23  (
24#ifdef STATISTICS
25   morpheo::behavioural::Parameters_Statistics * param_statistics
26#else
27   void
28#endif
29   )
30  {
31    log_begin(Decod_unit,FUNCTION);
32
33    _component   = new Component (_usage);
34
35    Entity * entity = _component->set_entity (_name       
36                                              ,"Decod_unit"
37#ifdef POSITION
38                                              ,COMBINATORY
39#endif
40                                              );
41
42    _interfaces = entity->set_interfaces();
43   
44    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45    {
46      Interface * interface = _interfaces->set_interface(""
47#ifdef POSITION
48                                                         ,IN
49                                                         ,SOUTH,
50                                                         "Generalist interface"
51#endif
52                                                         );
53     
54      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
55      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
56    }
57
58    // ~~~~~[ Interface : "ifetch" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59    {
60      ALLOC2_INTERFACE_BEGIN("ifetch", IN, WEST, _("Instruction's bundle"), _param->_nb_context, _param->_nb_inst_fetch[it1]);
61     
62      _ALLOC2_VALACK_IN ( in_IFETCH_VAL        ,VAL, _param->_nb_context, _param->_nb_inst_fetch[it1]);
63      _ALLOC2_VALACK_OUT(out_IFETCH_ACK        ,ACK, _param->_nb_context, _param->_nb_inst_fetch[it1]);
64      _ALLOC2_SIGNAL_IN ( in_IFETCH_INSTRUCTION,"instruction", Tinstruction_t, _param->_size_instruction,_param->_nb_context, _param->_nb_inst_fetch[it1]);
65
66      ALLOC2_INTERFACE_END(_param->_nb_context, _param->_nb_inst_fetch[it1]);
67    }
68    {
69      ALLOC1_INTERFACE_BEGIN("ifetch", IN, WEST, _("Instruction's bundle"), _param->_nb_context);
70     
71      ALLOC1_SIGNAL_IN (in_IFETCH_CONTEXT_ID                 ,"context_id"                 ,Tcontext_t         ,_param->_size_context_id      );
72      ALLOC1_SIGNAL_IN (in_IFETCH_ADDRESS                    ,"address"                    ,Tgeneral_address_t ,_param->_size_instruction_address    );
73//    ALLOC1_SIGNAL_IN (in_IFETCH_ADDRESS_NEXT               ,"address_next"               ,Tgeneral_address_t ,_param->_size_instruction_address    );
74      ALLOC1_SIGNAL_IN (in_IFETCH_INST_IFETCH_PTR            ,"inst_ifetch_ptr"            ,Tinst_ifetch_ptr_t ,_param->_size_inst_ifetch_ptr );
75      ALLOC1_SIGNAL_IN (in_IFETCH_BRANCH_STATE               ,"branch_state"               ,Tbranch_state_t    ,_param->_size_branch_state    );
76      ALLOC1_SIGNAL_IN (in_IFETCH_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t  ,_param->_size_depth           );
77      ALLOC1_SIGNAL_IN (in_IFETCH_EXCEPTION                  ,"exception"                  ,Texception_t       ,_param->_size_exception_ifetch);
78
79      ALLOC1_INTERFACE_END(_param->_nb_context);
80    }
81
82    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
83    {
84      ALLOC1_INTERFACE_BEGIN("decod", OUT, EAST, _("Instruction decoded"), _param->_nb_inst_decod);
85
86      ALLOC1_VALACK_OUT(out_DECOD_VAL          ,VAL);
87      ALLOC1_VALACK_IN ( in_DECOD_ACK          ,ACK);
88      ALLOC1_SIGNAL_OUT(out_DECOD_CONTEXT_ID   ,"context_id"   ,Tcontext_t        ,_param->_size_context_id            );
89      ALLOC1_SIGNAL_OUT(out_DECOD_DEPTH        ,"depth"        ,Tdepth_t          ,_param->_size_depth                 );
90      ALLOC1_SIGNAL_OUT(out_DECOD_TYPE         ,"type"         ,Ttype_t           ,_param->_size_type                  );
91      ALLOC1_SIGNAL_OUT(out_DECOD_OPERATION    ,"operation"    ,Toperation_t      ,_param->_size_operation             );
92      ALLOC1_SIGNAL_OUT(out_DECOD_NO_EXECUTE   ,"no_execute"   ,Tcontrol_t        ,1                                   );
93//    ALLOC1_SIGNAL_OUT(out_DECOD_HAVE_EVENT   ,"have_event"   ,Tcontrol_t        ,1                                   );
94      ALLOC1_SIGNAL_OUT(out_DECOD_LAST_EVENT   ,"last_event"   ,Tcontrol_t        ,1                                   );
95      ALLOC1_SIGNAL_OUT(out_DECOD_IS_DELAY_SLOT,"is_delay_slot",Tcontrol_t        ,1                                   );
96#ifdef DEBUG
97      ALLOC1_SIGNAL_OUT(out_DECOD_ADDRESS      ,"address"      ,Tgeneral_data_t   ,_param->_size_instruction_address   );
98#endif
99      ALLOC1_SIGNAL_OUT(out_DECOD_ADDRESS_NEXT ,"address_next" ,Tgeneral_data_t   ,_param->_size_instruction_address   );
100      ALLOC1_SIGNAL_OUT(out_DECOD_HAS_IMMEDIAT ,"has_immediat" ,Tcontrol_t        ,1                                   );
101      ALLOC1_SIGNAL_OUT(out_DECOD_IMMEDIAT     ,"immediat"     ,Tgeneral_data_t   ,_param->_size_general_data          );
102      ALLOC1_SIGNAL_OUT(out_DECOD_READ_RA      ,"read_ra"      ,Tcontrol_t        ,1                                   );
103      ALLOC1_SIGNAL_OUT(out_DECOD_NUM_REG_RA   ,"num_reg_ra"   ,Tgeneral_address_t,_param->_size_general_register_logic);
104      ALLOC1_SIGNAL_OUT(out_DECOD_READ_RB      ,"read_rb"      ,Tcontrol_t        ,1                                   );
105      ALLOC1_SIGNAL_OUT(out_DECOD_NUM_REG_RB   ,"num_reg_rb"   ,Tgeneral_address_t,_param->_size_general_register_logic);
106      ALLOC1_SIGNAL_OUT(out_DECOD_READ_RC      ,"read_rc"      ,Tcontrol_t        ,1                                   );
107      ALLOC1_SIGNAL_OUT(out_DECOD_NUM_REG_RC   ,"num_reg_rc"   ,Tspecial_address_t,_param->_size_special_register_logic);
108      ALLOC1_SIGNAL_OUT(out_DECOD_WRITE_RD     ,"write_rd"     ,Tcontrol_t        ,1                                   );
109      ALLOC1_SIGNAL_OUT(out_DECOD_NUM_REG_RD   ,"num_reg_rd"   ,Tgeneral_address_t,_param->_size_general_register_logic);
110      ALLOC1_SIGNAL_OUT(out_DECOD_WRITE_RE     ,"write_re"     ,Tcontrol_t        ,1                                   );
111      ALLOC1_SIGNAL_OUT(out_DECOD_NUM_REG_RE   ,"num_reg_re"   ,Tspecial_address_t,_param->_size_special_register_logic);
112      ALLOC1_SIGNAL_OUT(out_DECOD_EXCEPTION_USE,"exception_use",Texception_t      ,_param->_size_exception_use         );
113      ALLOC1_SIGNAL_OUT(out_DECOD_EXCEPTION    ,"exception"    ,Texception_t      ,_param->_size_exception_decod       );
114   
115      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
116    }
117
118    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119    {
120      ALLOC1_INTERFACE_BEGIN("predict",OUT,NORTH,_("Decod a branch -> inform the branch predictor."),_param->_nb_inst_decod);
121
122      ALLOC1_VALACK_OUT(out_PREDICT_VAL                        ,VAL);
123      ALLOC1_VALACK_IN ( in_PREDICT_ACK                        ,ACK);
124      ALLOC1_SIGNAL_OUT(out_PREDICT_CONTEXT_ID                 ,"context_id"                 ,Tcontext_t         ,_param->_size_context_id      );
125      ALLOC1_SIGNAL_OUT(out_PREDICT_MATCH_INST_IFETCH_PTR      ,"match_inst_ifetch_ptr"      ,Tcontrol_t         ,1                             );
126      ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_STATE               ,"branch_state"               ,Tbranch_state_t    ,_param->_size_branch_state    );
127      ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t  ,_param->_size_depth           );
128      ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_CONDITION           ,"branch_condition"           ,Tbranch_condition_t,_param->_size_branch_condition);
129//    ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_STACK_WRITE         ,"branch_stack_write"         ,Tcontrol_t         ,1                             );
130      ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_DIRECTION           ,"branch_direction"           ,Tcontrol_t         ,1                             );
131      ALLOC1_SIGNAL_OUT(out_PREDICT_ADDRESS_SRC                ,"address_src"                ,Tgeneral_data_t    ,_param->_size_instruction_address    );
132      ALLOC1_SIGNAL_OUT(out_PREDICT_ADDRESS_DEST               ,"address_dest"               ,Tgeneral_data_t    ,_param->_size_instruction_address    );
133      ALLOC1_SIGNAL_IN ( in_PREDICT_CAN_CONTINUE               ,"can_continue"               ,Tcontrol_t         ,1                             );
134   
135      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
136    }
137   
138    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
139    {
140      ALLOC1_INTERFACE_BEGIN("depth",IN ,NORTH,_("Depth"), _param->_nb_context);
141
142      ALLOC1_SIGNAL_IN ( in_DEPTH_MIN      ,"min"      ,Tdepth_t           ,_param->_size_depth);
143      ALLOC1_SIGNAL_IN ( in_DEPTH_MAX      ,"max"      ,Tdepth_t           ,_param->_size_depth);
144      ALLOC1_SIGNAL_IN ( in_DEPTH_FULL     ,"full"     ,Tcontrol_t         ,1);
145
146      ALLOC1_INTERFACE_END(_param->_nb_context);
147    }
148
149    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
150    {
151      ALLOC1_INTERFACE_BEGIN("nb_inst",OUT,NORTH,_("Instruction's number"), _param->_nb_context);
152
153      ALLOC1_SIGNAL_OUT(out_NB_INST_DECOD_ALL  ,"decod_all"   ,Tcounter_t         ,_param->_size_nb_inst_decod);
154
155      ALLOC1_INTERFACE_END(_param->_nb_context);
156    }
157   
158    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
159    {
160      ALLOC1_INTERFACE_BEGIN("context", IN, NORTH, _("context's information"), _param->_nb_context);
161
162      ALLOC1_SIGNAL_IN (in_CONTEXT_DECOD_ENABLE,"decod_enable",Tcontrol_t,1);
163      ALLOC1_SIGNAL_IN (in_CONTEXT_EVENT       ,"event"       ,Tcontrol_t,1);
164      ALLOC1_SIGNAL_IN (in_CONTEXT_DEPTH_VAL   ,"depth_val"   ,Tcontrol_t,1);
165      ALLOC1_SIGNAL_IN (in_CONTEXT_DEPTH       ,"depth"       ,Tdepth_t  ,_param->_size_depth);
166
167      ALLOC1_INTERFACE_END(_param->_nb_context);
168    }
169
170    // ~~~~~[ Interface : "context_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
171    {
172      ALLOC0_INTERFACE_BEGIN("context_event", OUT, NORTH, _("context's evenement"));
173
174      ALLOC0_VALACK_OUT(out_CONTEXT_EVENT_VAL          ,VAL);
175      ALLOC0_VALACK_IN ( in_CONTEXT_EVENT_ACK          ,ACK);
176      ALLOC0_SIGNAL_OUT(out_CONTEXT_EVENT_CONTEXT_ID   ,"context_id"   ,Tcontext_t     ,_param->_size_context_id  );
177      ALLOC0_SIGNAL_OUT(out_CONTEXT_EVENT_DEPTH        ,"depth"        ,Tdepth_t       ,_param->_size_depth       );
178      ALLOC0_SIGNAL_OUT(out_CONTEXT_EVENT_TYPE         ,"type"         ,Tevent_type_t  ,_param->_size_event_type  );
179      ALLOC0_SIGNAL_OUT(out_CONTEXT_EVENT_IS_DELAY_SLOT,"is_delay_slot",Tcontrol_t     ,1                         );
180      ALLOC0_SIGNAL_OUT(out_CONTEXT_EVENT_ADDRESS      ,"address"      ,Tgeneral_data_t,_param->_size_instruction_address);
181      ALLOC0_SIGNAL_OUT(out_CONTEXT_EVENT_ADDRESS_EPCR ,"address_epcr" ,Tgeneral_data_t,_param->_size_instruction_address);
182
183      ALLOC0_INTERFACE_END();
184    }
185   
186    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
187    std::string src,dest;
188   
189    {
190      src = _name+"_decod";
191      log_printf(INFO,Decod_unit,FUNCTION,_("Create   : %s"),src.c_str());
192     
193      _component_decod = new morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod::Decod
194        (src.c_str()
195#ifdef STATISTICS
196         ,param_statistics
197#endif
198         ,_param->_param_decod
199         ,_usage);
200     
201      _component->set_component (_component_decod->_component
202#ifdef POSITION
203                                 , 50, 50, 10, 10
204#endif
205                                 );
206    }
207   
208    {
209      src = _name+"_decod_queue";
210      log_printf(INFO,Decod_unit,FUNCTION,_("Create   : %s"),src.c_str());
211     
212      _component_decod_queue = new morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Decod_queue
213        (src.c_str()
214#ifdef STATISTICS
215         ,param_statistics
216#endif
217         ,_param->_param_decod_queue
218         ,_usage);
219     
220      _component->set_component (_component_decod_queue->_component
221#ifdef POSITION
222                                 , 50, 50, 10, 10
223#endif
224                                 );
225    }
226   
227    // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
228
229    // ===================================================================
230    // =====[ decod ]=====================================================
231    // ===================================================================
232    {
233      src = _name+"_decod";
234      log_printf(INFO,Decod_unit,FUNCTION,_("Instance : %s"),src.c_str());
235           
236      {
237        dest = _name;
238#ifdef POSITION
239        _component->interface_map (src ,"",
240                                   dest,"");
241#endif
242        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
243        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
244      }
245
246      for (uint32_t i=0; i<_param->_nb_context; i++)
247        {
248          dest = _name;
249       
250          for (uint32_t j=0; j<_param->_nb_inst_fetch [i]; j++)
251            {
252#ifdef POSITION
253              _component->interface_map (src ,"ifetch_"+toString(i)+"_"+toString(j),
254                                         dest,"ifetch_"+toString(i)+"_"+toString(j));
255#endif
256             
257              PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_"+toString(j)+"_VAL"        ,
258                                  dest, "in_IFETCH_"+toString(i)+"_"+toString(j)+"_VAL"        );
259              PORT_MAP(_component,src ,"out_IFETCH_"+toString(i)+"_"+toString(j)+"_ACK"        ,
260                                  dest,"out_IFETCH_"+toString(i)+"_"+toString(j)+"_ACK"        );
261              PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_"+toString(j)+"_INSTRUCTION",
262                                  dest, "in_IFETCH_"+toString(i)+"_"+toString(j)+"_INSTRUCTION");
263            }
264         
265#ifdef POSITION
266          _component->interface_map (src ,"ifetch_"+toString(i),
267                                     dest,"ifetch_"+toString(i));
268#endif
269
270          if (_param->_have_port_context_id)
271          PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_CONTEXT_ID"                 ,
272                              dest, "in_IFETCH_"+toString(i)+"_CONTEXT_ID"                 );
273          PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_ADDRESS"                    ,
274                              dest, "in_IFETCH_"+toString(i)+"_ADDRESS"                    );
275//        PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_ADDRESS_NEXT"               ,
276//                            dest, "in_IFETCH_"+toString(i)+"_ADDRESS_NEXT"               );
277          if (_param->_have_port_inst_ifetch_ptr)
278          PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_INST_IFETCH_PTR"            ,
279                              dest, "in_IFETCH_"+toString(i)+"_INST_IFETCH_PTR"            );
280          PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_BRANCH_STATE"               ,
281                              dest, "in_IFETCH_"+toString(i)+"_BRANCH_STATE"               );
282          if (_param->_have_port_depth)
283          PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID",
284                              dest, "in_IFETCH_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID");
285          PORT_MAP(_component,src , "in_IFETCH_"+toString(i)+"_EXCEPTION"                  ,
286                              dest, "in_IFETCH_"+toString(i)+"_EXCEPTION"                  );
287        }
288       
289      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
290        {
291          dest = _name+"_decod_queue";
292
293#ifdef POSITION
294          _component->interface_map (src ,"decod_"   +toString(i),
295                                     dest,"decod_in_"+toString(i));
296#endif
297
298          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_VAL"          ,
299                                   dest, "in_DECOD_IN_"+toString(i)+"_VAL"          );
300          COMPONENT_MAP(_component,src , "in_DECOD_"   +toString(i)+"_ACK"          ,
301                                   dest,"out_DECOD_IN_"+toString(i)+"_ACK"          );
302          if (_param->_have_port_context_id)
303          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_CONTEXT_ID"   ,
304                                   dest, "in_DECOD_IN_"+toString(i)+"_CONTEXT_ID"   );
305          if (_param->_have_port_depth)
306          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_DEPTH"        ,
307                                   dest, "in_DECOD_IN_"+toString(i)+"_DEPTH"        );
308          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_TYPE"         ,
309                                   dest, "in_DECOD_IN_"+toString(i)+"_TYPE"         );
310          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_OPERATION"    ,
311                                   dest, "in_DECOD_IN_"+toString(i)+"_OPERATION"    );
312          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_NO_EXECUTE"   ,
313                                   dest, "in_DECOD_IN_"+toString(i)+"_NO_EXECUTE"   );
314          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_IS_DELAY_SLOT",
315                                   dest, "in_DECOD_IN_"+toString(i)+"_IS_DELAY_SLOT");
316#ifdef DEBUG
317          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_ADDRESS"      ,
318                                   dest, "in_DECOD_IN_"+toString(i)+"_ADDRESS"      );
319#endif
320          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_ADDRESS_NEXT" ,
321                                   dest, "in_DECOD_IN_"+toString(i)+"_ADDRESS_NEXT" );
322          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_HAS_IMMEDIAT" ,
323                                   dest, "in_DECOD_IN_"+toString(i)+"_HAS_IMMEDIAT" );
324          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_IMMEDIAT"     ,
325                                   dest, "in_DECOD_IN_"+toString(i)+"_IMMEDIAT"     );
326          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_READ_RA"      ,
327                                   dest, "in_DECOD_IN_"+toString(i)+"_READ_RA"      );
328          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_NUM_REG_RA"   ,
329                                   dest, "in_DECOD_IN_"+toString(i)+"_NUM_REG_RA"   );
330          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_READ_RB"      ,
331                                   dest, "in_DECOD_IN_"+toString(i)+"_READ_RB"      );
332          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_NUM_REG_RB"   ,
333                                   dest, "in_DECOD_IN_"+toString(i)+"_NUM_REG_RB"   );
334          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_READ_RC"      ,
335                                   dest, "in_DECOD_IN_"+toString(i)+"_READ_RC"      );
336          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_NUM_REG_RC"   ,
337                                   dest, "in_DECOD_IN_"+toString(i)+"_NUM_REG_RC"   );
338          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_WRITE_RD"     ,
339                                   dest, "in_DECOD_IN_"+toString(i)+"_WRITE_RD"     );
340          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_NUM_REG_RD"   ,
341                                   dest, "in_DECOD_IN_"+toString(i)+"_NUM_REG_RD"   );
342          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_WRITE_RE"     ,
343                                   dest, "in_DECOD_IN_"+toString(i)+"_WRITE_RE"     );
344          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_NUM_REG_RE"   ,
345                                   dest, "in_DECOD_IN_"+toString(i)+"_NUM_REG_RE"   );
346          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_EXCEPTION_USE",
347                                   dest, "in_DECOD_IN_"+toString(i)+"_EXCEPTION_USE");
348          COMPONENT_MAP(_component,src ,"out_DECOD_"   +toString(i)+"_EXCEPTION"    ,
349                                   dest, "in_DECOD_IN_"+toString(i)+"_EXCEPTION"    );
350        }
351
352      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
353        {
354          dest = _name;
355
356#ifdef POSITION
357          _component->interface_map (src ,"predict"+toString(i),
358                                     dest,"predict"+toString(i));
359#endif
360
361          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_VAL"                        ,
362                              dest,"out_PREDICT_"+toString(i)+"_VAL"                        );
363          PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_ACK"                        ,
364                              dest, "in_PREDICT_"+toString(i)+"_ACK"                        );
365          if (_param->_have_port_context_id)
366          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_CONTEXT_ID"                 ,
367                              dest,"out_PREDICT_"+toString(i)+"_CONTEXT_ID"                 );
368          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_MATCH_INST_IFETCH_PTR"      ,
369                              dest,"out_PREDICT_"+toString(i)+"_MATCH_INST_IFETCH_PTR"      );
370          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_STATE"               ,
371                              dest,"out_PREDICT_"+toString(i)+"_BRANCH_STATE"               );
372          if (_param->_have_port_depth)
373          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID",
374                              dest,"out_PREDICT_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID");
375          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_CONDITION"           ,
376                              dest,"out_PREDICT_"+toString(i)+"_BRANCH_CONDITION"           );
377//        PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_STACK_WRITE"         ,
378//                            dest,"out_PREDICT_"+toString(i)+"_BRANCH_STACK_WRITE"         );
379          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_DIRECTION"           ,
380                              dest,"out_PREDICT_"+toString(i)+"_BRANCH_DIRECTION"           );
381          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_ADDRESS_SRC"                ,
382                              dest,"out_PREDICT_"+toString(i)+"_ADDRESS_SRC"                );
383          PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_ADDRESS_DEST"               ,
384                              dest,"out_PREDICT_"+toString(i)+"_ADDRESS_DEST"               );
385          PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_CAN_CONTINUE"               ,
386                              dest, "in_PREDICT_"+toString(i)+"_CAN_CONTINUE"               );
387        }
388
389      for (uint32_t i=0; i<_param->_nb_context; i++)
390        {
391          dest = _name;
392
393#ifdef POSITION
394          _component->interface_map (src ,"context_"+toString(i),
395                                     dest,"context_"+toString(i));
396#endif
397         
398          PORT_MAP(_component,src , "in_CONTEXT_"+toString(i)+"_DECOD_ENABLE",
399                              dest, "in_CONTEXT_"+toString(i)+"_DECOD_ENABLE");
400          PORT_MAP(_component,src , "in_CONTEXT_"+toString(i)+"_DEPTH_VAL"   ,
401                              dest, "in_CONTEXT_"+toString(i)+"_DEPTH_VAL"   );
402          if (_param->_have_port_depth)
403          PORT_MAP(_component,src , "in_CONTEXT_"+toString(i)+"_DEPTH"       ,
404                              dest, "in_CONTEXT_"+toString(i)+"_DEPTH"       );
405        }
406
407      {
408        dest = _name;
409       
410#ifdef POSITION
411        _component->interface_map (src ,"context_event",
412                                   dest,"context_event");
413#endif
414
415        PORT_MAP(_component,src ,"out_CONTEXT_EVENT_VAL"          ,
416                            dest,"out_CONTEXT_EVENT_VAL"          );
417        PORT_MAP(_component,src , "in_CONTEXT_EVENT_ACK"          ,
418                            dest, "in_CONTEXT_EVENT_ACK"          );
419        if (_param->_have_port_context_id)
420        PORT_MAP(_component,src ,"out_CONTEXT_EVENT_CONTEXT_ID"   ,
421                            dest,"out_CONTEXT_EVENT_CONTEXT_ID"   );
422        if (_param->_have_port_depth)
423        PORT_MAP(_component,src ,"out_CONTEXT_EVENT_DEPTH"        ,
424                            dest,"out_CONTEXT_EVENT_DEPTH"        );
425        PORT_MAP(_component,src ,"out_CONTEXT_EVENT_TYPE"         ,
426                            dest,"out_CONTEXT_EVENT_TYPE"         );
427        PORT_MAP(_component,src ,"out_CONTEXT_EVENT_IS_DELAY_SLOT",
428                            dest,"out_CONTEXT_EVENT_IS_DELAY_SLOT");
429        PORT_MAP(_component,src ,"out_CONTEXT_EVENT_ADDRESS"      ,
430                            dest,"out_CONTEXT_EVENT_ADDRESS"      );
431        PORT_MAP(_component,src ,"out_CONTEXT_EVENT_ADDRESS_EPCR" ,
432                            dest,"out_CONTEXT_EVENT_ADDRESS_EPCR" );
433
434      }
435    }
436
437    // ===================================================================
438    // =====[ decod_queue ]===============================================
439    // ===================================================================
440    {
441      src = _name+"_decod_queue";
442      log_printf(INFO,Decod_unit,FUNCTION,_("Instance : %s"),src.c_str());
443           
444      {
445        dest = _name;
446#ifdef POSITION
447        _component->interface_map (src ,"",
448                                   dest,"");
449#endif
450        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
451        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
452      }
453
454      // in_DECOD_IN_VAL            - component decod
455      //out_DECOD_IN_ACK            - component decod
456      // in_DECOD_IN_CONTEXT_ID     - component decod
457      // in_DECOD_IN_DEPTH          - component decod
458      // in_DECOD_IN_TYPE           - component decod
459      // in_DECOD_IN_OPERATION      - component decod
460      // in_DECOD_IN_NO_EXECUTE     - component decod
461      // in_DECOD_IN_IS_DELAY_SLOT  - component decod
462      // in_DECOD_IN_ADDRESS        - component decod
463      // in_DECOD_IN_ADDRESS_NEXT   - component decod
464      // in_DECOD_IN_HAS_IMMEDIAT   - component decod
465      // in_DECOD_IN_IMMEDIAT       - component decod
466      // in_DECOD_IN_READ_RA        - component decod
467      // in_DECOD_IN_NUM_REG_RA     - component decod
468      // in_DECOD_IN_READ_RB        - component decod
469      // in_DECOD_IN_NUM_REG_RB     - component decod
470      // in_DECOD_IN_READ_RC        - component decod
471      // in_DECOD_IN_NUM_REG_RC     - component decod
472      // in_DECOD_IN_WRITE_RD       - component decod
473      // in_DECOD_IN_NUM_REG_RD     - component decod
474      // in_DECOD_IN_WRITE_RE       - component decod
475      // in_DECOD_IN_NUM_REG_RE     - component decod
476      // in_DECOD_IN_EXCEPTION_USE  - component decod
477      // in_DECOD_IN_EXCEPTION      - component decod
478
479      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
480        {
481          dest = _name;
482
483#ifdef POSITION
484          _component->interface_map (src ,"decod_out_"+toString(i),
485                                     dest,"decod"     +toString(i));
486#endif
487
488          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_VAL"          ,
489                              dest,"out_DECOD_"    +toString(i)+"_VAL"          );
490          PORT_MAP(_component,src , "in_DECOD_OUT_"+toString(i)+"_ACK"          ,
491                              dest, "in_DECOD_"    +toString(i)+"_ACK"          );
492          if (_param->_have_port_context_id)
493          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_CONTEXT_ID"   ,
494                              dest,"out_DECOD_"    +toString(i)+"_CONTEXT_ID"   );
495          if (_param->_have_port_depth)
496          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_DEPTH"        ,
497                              dest,"out_DECOD_"    +toString(i)+"_DEPTH"        );
498          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_TYPE"         ,
499                              dest,"out_DECOD_"    +toString(i)+"_TYPE"         );
500          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_OPERATION"    ,
501                              dest,"out_DECOD_"    +toString(i)+"_OPERATION"    );
502          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_NO_EXECUTE"   ,
503                              dest,"out_DECOD_"    +toString(i)+"_NO_EXECUTE"   );
504//        PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_HAVE_EVENT"   ,
505//                            dest,"out_DECOD_"    +toString(i)+"_HAVE_EVENT"   );
506          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_LAST_EVENT"   ,
507                              dest,"out_DECOD_"    +toString(i)+"_LAST_EVENT"   );
508          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_IS_DELAY_SLOT",
509                              dest,"out_DECOD_"    +toString(i)+"_IS_DELAY_SLOT");
510#ifdef DEBUG
511          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_ADDRESS"      ,
512                              dest,"out_DECOD_"    +toString(i)+"_ADDRESS"      );
513#endif
514          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_ADDRESS_NEXT" ,
515                              dest,"out_DECOD_"    +toString(i)+"_ADDRESS_NEXT" );
516          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_HAS_IMMEDIAT" ,
517                              dest,"out_DECOD_"    +toString(i)+"_HAS_IMMEDIAT" );
518          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_IMMEDIAT"     ,
519                              dest,"out_DECOD_"    +toString(i)+"_IMMEDIAT"     );
520          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_READ_RA"      ,
521                              dest,"out_DECOD_"    +toString(i)+"_READ_RA"      );
522          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RA"   ,
523                              dest,"out_DECOD_"    +toString(i)+"_NUM_REG_RA"   );
524          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_READ_RB"      ,
525                              dest,"out_DECOD_"    +toString(i)+"_READ_RB"      );
526          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RB"   ,
527                              dest,"out_DECOD_"    +toString(i)+"_NUM_REG_RB"   );
528          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_READ_RC"      ,
529                              dest,"out_DECOD_"    +toString(i)+"_READ_RC"      );
530          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RC"   ,
531                              dest,"out_DECOD_"    +toString(i)+"_NUM_REG_RC"   );
532          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_WRITE_RD"     ,
533                              dest,"out_DECOD_"    +toString(i)+"_WRITE_RD"     );
534          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RD"   ,
535                              dest,"out_DECOD_"    +toString(i)+"_NUM_REG_RD"   );
536          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_WRITE_RE"     ,
537                              dest,"out_DECOD_"    +toString(i)+"_WRITE_RE"     );
538          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RE"   ,
539                              dest,"out_DECOD_"    +toString(i)+"_NUM_REG_RE"   );
540          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_EXCEPTION_USE",
541                              dest,"out_DECOD_"    +toString(i)+"_EXCEPTION_USE");
542          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_EXCEPTION"    ,
543                              dest,"out_DECOD_"    +toString(i)+"_EXCEPTION"    );
544        }
545
546      for (uint32_t i=0; i<_param->_nb_context; i++)
547        {
548          dest = _name;
549
550#ifdef POSITION
551          _component->interface_map (src ,"depth"+toString(i),
552                                     dest,"depth"+toString(i));
553#endif
554
555          if (_param->_have_port_depth)
556            {
557          PORT_MAP(_component,src , "in_DEPTH_"+toString(i)+"_MIN",
558                              dest, "in_DEPTH_"+toString(i)+"_MIN");
559          PORT_MAP(_component,src , "in_DEPTH_"+toString(i)+"_MAX",
560                              dest, "in_DEPTH_"+toString(i)+"_MAX");
561            }
562          PORT_MAP(_component,src , "in_DEPTH_"+toString(i)+"_FULL",
563                              dest, "in_DEPTH_"+toString(i)+"_FULL");
564        }
565
566      for (uint32_t i=0; i<_param->_nb_context; i++)
567        {
568          dest = _name;
569
570#ifdef POSITION
571          _component->interface_map (src ,"nb_inst"+toString(i),
572                                     dest,"nb_inst"+toString(i));
573#endif
574
575          PORT_MAP(_component,src ,"out_NB_INST_"+toString(i)+      "_ALL",
576                              dest,"out_NB_INST_"+toString(i)+"_DECOD_ALL");
577        }
578
579
580
581      for (uint32_t i=0; i<_param->_nb_context; i++)
582        {
583          dest = _name;
584
585#ifdef POSITION
586          _component->interface_map (src ,"context_"+toString(i),
587                                     dest,"context_"+toString(i));
588#endif
589         
590          PORT_MAP(_component,src , "in_CONTEXT_"+toString(i)+"_EVENT"       ,
591                              dest, "in_CONTEXT_"+toString(i)+"_EVENT"       );
592
593        }
594    }
595    // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
596#if DEBUG_Decod_unit == true
597      _component->test_map();
598#endif
599
600#ifdef POSITION
601    if (usage_is_set(_usage,USE_POSITION))
602      _component->generate_file();
603#endif
604   
605    log_end(Decod_unit,FUNCTION);
606  };
607
608}; // end namespace decod_unit
609}; // end namespace front_end
610}; // end namespace multi_front_end
611}; // end namespace core
612
613}; // end namespace behavioural
614}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.