source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_allocation.cpp @ 132

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

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

  • Property svn:keywords set to Id
File size: 29.8 KB
Line 
1/*
2 * $Id: Core_Glue_allocation.cpp 128 2009-06-26 08:43:23Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Core_Glue/include/Core_Glue.h"
9#include "Behavioural/include/Allocation.h"
10#include "Common/include/Max.h"
11
12namespace morpheo {
13namespace behavioural {
14namespace core {
15namespace core_glue {
16
17#undef  FUNCTION
18#define FUNCTION "Core_Glue::allocation"
19  void Core_Glue::allocation (
20#ifdef STATISTICS
21                               morpheo::behavioural::Parameters_Statistics * param_statistics
22#else
23                               void
24#endif
25                               )
26  {
27    log_begin(Core_Glue,FUNCTION);
28
29    _component   = new Component (_usage);
30
31    Entity * entity = _component->set_entity (_name       
32                                              ,"Core_Glue"
33#ifdef POSITION
34                                              ,COMBINATORY
35#endif
36                                              );
37
38    _interfaces = entity->set_interfaces();
39
40    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41    {
42      Interface * interface = _interfaces->set_interface(""
43#ifdef POSITION
44                                                         ,IN
45                                                         ,SOUTH,
46                                                         _("Generalist interface")
47#endif
48                                                         );
49     
50      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
51      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
52    }
53
54    // ~~~~~[ Interface : "rename" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
55    {
56      ALLOC2_INTERFACE_BEGIN("rename",SOUTH,OUT,_("Request between the decod unit and the rename unit"),_param->_nb_front_end,_param->_nb_inst_decod[it1]);
57
58      _ALLOC2_SIGNAL_OUT(out_RENAME_FRONT_END_ID                       ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
59
60      ALLOC2_INTERFACE_END(_param->_nb_front_end,_param->_nb_inst_decod[it1]);
61    }
62
63    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64    {
65      ALLOC2_INTERFACE_BEGIN("branch_complete_front_end",SOUTH,OUT,_("Branch complete : request between commit unit and prediction unit"),_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
66   
67      _ALLOC2_SIGNAL_OUT(out_BRANCH_COMPLETE_FRONT_END_VAL             ,"VAL"                  ,Tcontrol_t        ,1                                ,_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
68      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_FRONT_END_ACK             ,"ACK"                  ,Tcontrol_t        ,1                                ,_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
69      _ALLOC2_SIGNAL_OUT(out_BRANCH_COMPLETE_FRONT_END_CONTEXT_ID      ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id         ,_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
70      _ALLOC2_SIGNAL_OUT(out_BRANCH_COMPLETE_FRONT_END_DEPTH           ,"DEPTH"                ,Tdepth_t          ,_param->_size_depth              ,_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
71      _ALLOC2_SIGNAL_OUT(out_BRANCH_COMPLETE_FRONT_END_ADDRESS         ,"ADDRESS"              ,Taddress_t        ,_param->_size_instruction_address,_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
72      _ALLOC2_SIGNAL_OUT(out_BRANCH_COMPLETE_FRONT_END_NO_SEQUENCE     ,"NO_SEQUENCE"          ,Tcontrol_t        ,1                                ,_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
73      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_FRONT_END_MISS_PREDICTION ,"MISS_PREDICTION"      ,Tcontrol_t        ,1                                ,_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
74
75      ALLOC2_INTERFACE_END(_param->_nb_front_end,_param->_front_end_nb_inst_branch_complete[it1]);
76
77    }
78    {
79      ALLOC2_INTERFACE_BEGIN("branch_complete_ooo_engine",SOUTH,IN ,_("Branch complete : request between commit unit and prediction unit"),_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
80
81      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_OOO_ENGINE_VAL            ,"VAL"                  ,Tcontrol_t        ,1                                ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
82      _ALLOC2_SIGNAL_OUT(out_BRANCH_COMPLETE_OOO_ENGINE_ACK            ,"ACK"                  ,Tcontrol_t        ,1                                ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
83      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_OOO_ENGINE_FRONT_END_ID   ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id       ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
84      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_OOO_ENGINE_CONTEXT_ID     ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id         ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
85      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_OOO_ENGINE_DEPTH          ,"DEPTH"                ,Tdepth_t          ,_param->_size_depth              ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
86      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_OOO_ENGINE_ADDRESS        ,"ADDRESS"              ,Taddress_t        ,_param->_size_instruction_address,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
87      _ALLOC2_SIGNAL_IN ( in_BRANCH_COMPLETE_OOO_ENGINE_NO_SEQUENCE    ,"NO_SEQUENCE"          ,Tcontrol_t        ,1                                ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
88      _ALLOC2_SIGNAL_OUT(out_BRANCH_COMPLETE_OOO_ENGINE_MISS_PREDICTION,"MISS_PREDICTION"      ,Tcontrol_t        ,1                                ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
89   
90      ALLOC2_INTERFACE_END(_param->_nb_ooo_engine,_param->_ooo_engine_nb_inst_branch_complete[it1]);
91}
92
93    // ~~~~~[ Interface : "commit_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94    {
95      ALLOC1_INTERFACE_BEGIN("commit_event_front_end",SOUTH,OUT,_("Commit event : request between commit unit and context state"),_param->_nb_front_end);
96
97      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_VAL                ,"VAL"                  ,Tcontrol_t        ,1);
98      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_FRONT_END_ACK                ,"ACK"                  ,Tcontrol_t        ,1);
99      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_CONTEXT_ID         ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id);
100      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_DEPTH              ,"DEPTH"                ,Tdepth_t          ,_param->_size_depth);
101      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_TYPE               ,"TYPE"                 ,Tevent_type_t     ,_param->_size_event_type);
102      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_IS_DELAY_SLOT      ,"IS_DELAY_SLOT"        ,Tcontrol_t        ,1);
103      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_ADDRESS            ,"ADDRESS"              ,Taddress_t        ,_param->_size_instruction_address);
104      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR_VAL   ,"ADDRESS_EPCR_VAL"     ,Tcontrol_t        ,1);
105      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR       ,"ADDRESS_EPCR"         ,Taddress_t        ,_param->_size_instruction_address);
106      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR_VAL   ,"ADDRESS_EEAR_VAL"     ,Tcontrol_t        ,1);
107      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR       ,"ADDRESS_EEAR"         ,Tgeneral_data_t   ,_param->_size_general_data);
108
109      ALLOC1_INTERFACE_END(_param->_nb_front_end);
110    }
111
112    {
113      ALLOC1_INTERFACE_BEGIN("commit_event_ooo_engine",SOUTH,IN ,_("Commit event : request between commit unit and context state"),_param->_nb_ooo_engine);
114
115      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_VAL               ,"VAL"                  ,Tcontrol_t        ,1);
116      ALLOC1_SIGNAL_OUT(out_COMMIT_EVENT_OOO_ENGINE_ACK               ,"ACK"                  ,Tcontrol_t        ,1);
117      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_FRONT_END_ID      ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id);
118      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_CONTEXT_ID        ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id);
119      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_DEPTH             ,"DEPTH"                ,Tdepth_t          ,_param->_size_depth);
120      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_TYPE              ,"TYPE"                 ,Tevent_type_t     ,_param->_size_event_type);
121      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_IS_DELAY_SLOT     ,"IS_DELAY_SLOT"        ,Tcontrol_t        ,1);
122      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS           ,"ADDRESS"              ,Taddress_t        ,_param->_size_instruction_address);
123      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR_VAL  ,"ADDRESS_EPCR_VAL"     ,Tcontrol_t        ,1);
124      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR      ,"ADDRESS_EPCR"         ,Taddress_t        ,_param->_size_instruction_address);
125      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL  ,"ADDRESS_EEAR_VAL"     ,Tcontrol_t        ,1);
126      ALLOC1_SIGNAL_IN ( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR      ,"ADDRESS_EEAR"         ,Tgeneral_data_t   ,_param->_size_general_data);
127
128      ALLOC1_INTERFACE_END(_param->_nb_ooo_engine);
129    }
130
131    // ~~~~~[ Interface : "issue" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
132    {
133      ALLOC2_INTERFACE_BEGIN("issue_ooo_engine",SOUTH,IN ,_("Issue : request between rename unit and execute loop"),_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
134
135      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_VAL                      ,"VAL"                  ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
136      _ALLOC2_SIGNAL_OUT(out_ISSUE_OOO_ENGINE_ACK                      ,"ACK"                  ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
137      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id    ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
138      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
139      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_PACKET_ID                ,"PACKET_ID"            ,Tpacket_t         ,_param->_size_rob_ptr         ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
140      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_TYPE                     ,"TYPE"                 ,Ttype_t           ,_param->_size_type            ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
141      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_OPERATION                ,"OPERATION"            ,Toperation_t      ,_param->_size_operation       ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
142      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
143      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_READ     ,"STORE_QUEUE_PTR_READ" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
144      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_STORE_QUEUE_EMPTY        ,"STORE_QUEUE_EMPTY"    ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
145      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
146      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,"HAS_IMMEDIAT"         ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
147      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,"IMMEDIAT"             ,Tgeneral_data_t   ,_param->_size_general_data    ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
148      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RA                  ,"READ_RA"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
149      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,"NUM_REG_RA"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
150      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RB                  ,"READ_RB"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
151      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,"NUM_REG_RB"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
152      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RC                  ,"READ_RC"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
153      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,"NUM_REG_RC"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
154      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RD                 ,"WRITE_RD"             ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
155      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,"NUM_REG_RD"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
156      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RE                 ,"WRITE_RE"             ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
157      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,"NUM_REG_RE"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
158
159      ALLOC2_INTERFACE_END(_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
160    }
161
162    {
163      ALLOC2_INTERFACE_BEGIN("issue_execute_loop",SOUTH,OUT,_("Issue : request between rename unit and execute loop"),_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
164
165      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_VAL                    ,"VAL"                  ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
166      _ALLOC2_SIGNAL_IN ( in_ISSUE_EXECUTE_LOOP_ACK                    ,"ACK"                  ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
167      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID             ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id      ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
168      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID           ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id    ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
169      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID          ,"OOO_ENGINE_ID"        ,Tcontext_t        ,_param->_size_ooo_engine_id   ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
170      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_PACKET_ID              ,"PACKET_ID"            ,Tpacket_t         ,_param->_size_rob_ptr         ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
171      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_OPERATION              ,"OPERATION"            ,Toperation_t      ,_param->_size_operation       ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
172      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_TYPE                   ,"TYPE"                 ,Ttype_t           ,_param->_size_type            ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
173      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE  ,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue_ptr ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
174      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_READ   ,"STORE_QUEUE_PTR_READ" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
175      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_EMPTY      ,"STORE_QUEUE_EMPTY"    ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
176      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE   ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr  ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
177      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT           ,"HAS_IMMEDIAT"         ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
178      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_IMMEDIAT               ,"IMMEDIAT"             ,Tgeneral_data_t   ,_param->_size_general_data    ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
179      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_READ_RA                ,"READ_RA"              ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
180      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA             ,"NUM_REG_RA"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
181      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_READ_RB                ,"READ_RB"              ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
182      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB             ,"NUM_REG_RB"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
183      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_READ_RC                ,"READ_RC"              ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
184      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC             ,"NUM_REG_RC"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
185      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_WRITE_RD               ,"WRITE_RD"             ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
186      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD             ,"NUM_REG_RD"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
187      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_WRITE_RE               ,"WRITE_RE"             ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
188      _ALLOC2_SIGNAL_OUT(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE             ,"NUM_REG_RE"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
189
190      ALLOC2_INTERFACE_END(_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
191    }
192
193    // ~~~~~[ Interface "execute_loop" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
194    {
195      ALLOC3_INTERFACE_BEGIN("execute_ooo_engine",SOUTH,OUT,_("Execute : request between execute loop and commit unit"),_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
196
197      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_VAL                    ,"VAL"                  ,Tcontrol_t        ,1                         ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
198      _ALLOC3_SIGNAL_IN ( in_EXECUTE_OOO_ENGINE_ACK                    ,"ACK"                  ,Tcontrol_t        ,1                         ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
199      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_FRONT_END_ID           ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
200      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_CONTEXT_ID             ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id  ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
201      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_PACKET_ID              ,"PACKET_ID"            ,Tpacket_t         ,_param->_size_rob_ptr     ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
202//    _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_TYPE                   ,"TYPE"                 ,Ttype_t           ,_param->_size_type        ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
203//    _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_OPERATION              ,"OPERATION"            ,Toperation_t      ,_param->_size_operation   ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
204      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_FLAGS                  ,"FLAGS"                ,Tspecial_data_t   ,_param->_size_special_data,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
205      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_EXCEPTION              ,"EXCEPTION"            ,Texception_t      ,_param->_size_exception   ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
206      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_NO_SEQUENCE            ,"NO_SEQUENCE"          ,Tcontrol_t        ,1                         ,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
207      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_ADDRESS                ,"ADDRESS"              ,Taddress_t        ,_param->_size_instruction_address,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
208      _ALLOC3_SIGNAL_OUT(out_EXECUTE_OOO_ENGINE_DATA                   ,"DATA"                 ,Tgeneral_data_t   ,_param->_size_general_data,_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
209
210      ALLOC3_INTERFACE_END(_param->_nb_ooo_engine,_param->_ooo_engine_nb_execute_loop[it1],_param->_nb_inst_execute[it1][it2]);
211    }
212
213    {
214      ALLOC2_INTERFACE_BEGIN("execute_execute_loop",SOUTH,IN ,_("Execute : request between execute loop and commit unit"),_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
215
216      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_VAL                  ,"VAL"                  ,Tcontrol_t        ,1                          ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
217      _ALLOC2_SIGNAL_OUT(out_EXECUTE_EXECUTE_LOOP_ACK                  ,"ACK"                  ,Tcontrol_t        ,1                          ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
218      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_CONTEXT_ID           ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id   ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
219      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_FRONT_END_ID         ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
220      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_OOO_ENGINE_ID        ,"OOO_ENGINE_ID"        ,Tcontext_t        ,_param->_size_ooo_engine_id,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
221      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_PACKET_ID            ,"PACKET_ID"            ,Tpacket_t         ,_param->_size_rob_ptr      ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
222//    _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_TYPE                 ,"TYPE"                 ,Ttype_t           ,_param->_size_type         ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
223//    _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_OPERATION            ,"OPERATION"            ,Toperation_t      ,_param->_size_operation    ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
224      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_FLAGS                ,"FLAGS"                ,Tspecial_data_t   ,_param->_size_special_data ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
225      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_EXCEPTION            ,"EXCEPTION"            ,Texception_t      ,_param->_size_exception    ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
226      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_NO_SEQUENCE          ,"NO_SEQUENCE"          ,Tcontrol_t        ,1                          ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
227      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_ADDRESS              ,"ADDRESS"              ,Taddress_t        ,_param->_size_instruction_address,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
228      _ALLOC2_SIGNAL_IN ( in_EXECUTE_EXECUTE_LOOP_DATA                 ,"DATA"                 ,Tgeneral_data_t   ,_param->_size_general_data ,_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
229   
230      ALLOC2_INTERFACE_END(_param->_nb_execute_loop,_param->_nb_write_unit[it1]);
231    }
232
233    // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
234    {
235      ALLOC2_INTERFACE_BEGIN("insert_ooo_engine",SOUTH,IN ,_("Insert"),_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
236     
237      _ALLOC2_SIGNAL_IN ( in_INSERT_OOO_ENGINE_VAL       ,"VAL"       ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
238      _ALLOC2_SIGNAL_OUT(out_INSERT_OOO_ENGINE_ACK       ,"ACK"       ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
239      _ALLOC2_SIGNAL_IN ( in_INSERT_OOO_ENGINE_RD_USE    ,"RD_USE"    ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
240      _ALLOC2_SIGNAL_IN ( in_INSERT_OOO_ENGINE_RD_NUM_REG,"RD_NUM_REG",Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
241      _ALLOC2_SIGNAL_IN ( in_INSERT_OOO_ENGINE_RE_USE    ,"RE_USE"    ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
242      _ALLOC2_SIGNAL_IN ( in_INSERT_OOO_ENGINE_RE_NUM_REG,"RE_NUM_REG",Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
243
244      ALLOC2_INTERFACE_END(_param->_nb_ooo_engine,_param->_nb_inst_insert[it1]);
245    }
246   
247    {
248      ALLOC3_INTERFACE_BEGIN("insert_execute_loop",SOUTH,IN ,_("Insert"),_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
249     
250      _ALLOC3_SIGNAL_OUT(out_INSERT_EXECUTE_LOOP_VAL       ,"VAL"       ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
251      _ALLOC3_SIGNAL_IN ( in_INSERT_EXECUTE_LOOP_ACK       ,"ACK"       ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
252      _ALLOC3_SIGNAL_OUT(out_INSERT_EXECUTE_LOOP_RD_USE    ,"RD_USE"    ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
253      _ALLOC3_SIGNAL_OUT(out_INSERT_EXECUTE_LOOP_RD_NUM_REG,"RD_NUM_REG",Tgeneral_address_t,_param->_size_general_register,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
254      _ALLOC3_SIGNAL_OUT(out_INSERT_EXECUTE_LOOP_RE_USE    ,"RE_USE"    ,Tcontrol_t        ,1                             ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
255      _ALLOC3_SIGNAL_OUT(out_INSERT_EXECUTE_LOOP_RE_NUM_REG,"RE_NUM_REG",Tspecial_address_t,_param->_size_special_register,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
256
257      ALLOC3_INTERFACE_END(_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
258    }
259
260    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
261    _priority_ooo_engine = new generic::priority::Priority (_name+"_priority_ooo_engine",
262                                                            _param->_dispatch_priority      ,
263//                                                          _param->_dispatch_load_balancing,
264                                                            _param->_nb_ooo_engine          ,
265//                                                          _param->_nb_inst_issue_slot     ,
266                                                            _param->_nb_ooo_engine         
267                                                            );
268
269    _priority_read_unit   = new generic::priority::Priority * [_param->_nb_execute_loop];
270    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
271        _priority_read_unit  [i] = new generic::priority::Priority (_name+"_priority_read_unit_"+toString(i),
272                                                                    // PRIORITY_STATIC,
273                                                                    PRIORITY_ROUND_ROBIN,
274                                                                    _param->_nb_read_unit [i],
275                                                                    _param->_nb_read_unit [i]
276                                                                    );
277
278#ifdef POSITION
279    if (usage_is_set(_usage,USE_POSITION))
280        _component->generate_file();
281#endif
282
283    log_end(Core_Glue,FUNCTION);
284  };
285
286}; // end namespace core_glue
287}; // end namespace core
288
289}; // end namespace behavioural
290}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.