source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp

Last change on this file was 139, checked in by rosiere, 14 years ago
  • Add test for all configuration
  • RAT : add rat scheme (depth_save)
  • Property svn:keywords set to Id
File size: 10.7 KB
Line 
1/*
2 * $Id: Decod_queue_allocation.cpp 139 2010-07-30 14:47:27Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
9#include "Behavioural/include/Allocation.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace decod_unit {
17namespace decod_queue {
18
19#undef  FUNCTION
20#define FUNCTION "Decod_queue::allocation"
21  void Decod_queue::allocation
22  (
23#ifdef STATISTICS
24   morpheo::behavioural::Parameters_Statistics * param_statistics
25#else
26   void
27#endif
28   )
29  {
30    log_begin(Decod_queue,FUNCTION);
31
32    _component   = new Component (_usage);
33
34    Entity * entity = _component->set_entity (_name       
35                                              ,"Decod_queue"
36#ifdef POSITION
37                                              ,COMBINATORY
38#endif
39                                              );
40
41    _interfaces = entity->set_interfaces();
42
43    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44    {
45      Interface * interface = _interfaces->set_interface(""
46#ifdef POSITION
47                                                         ,IN
48                                                         ,SOUTH,
49                                                         _("Generalist interface")
50#endif
51                                                         );
52     
53      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
54      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
55    }
56
57    // ~~~~~[ Interface : "decod_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58    {
59      ALLOC1_INTERFACE_BEGIN("decod_in",IN ,WEST,_("Input of decod_queue"), _param->_nb_inst_decod);
60
61      ALLOC1_VALACK_IN ( in_DECOD_IN_VAL            ,VAL);
62      ALLOC1_VALACK_OUT(out_DECOD_IN_ACK            ,ACK);
63      ALLOC1_SIGNAL_IN ( in_DECOD_IN_CONTEXT_ID     ,"context_id"   ,Tcontext_t         ,_param->_size_context_id            );
64      ALLOC1_SIGNAL_IN ( in_DECOD_IN_DEPTH          ,"depth"        ,Tdepth_t           ,_param->_size_depth                 );
65#ifdef STATISTICS
66      ALLOC1_SIGNAL_IN ( in_DECOD_IN_INSTRUCTION    ,"instruction"  ,uint32_t           ,32                                  );
67#endif
68      ALLOC1_SIGNAL_IN ( in_DECOD_IN_TYPE           ,"type"         ,Ttype_t            ,_param->_size_type                  );
69      ALLOC1_SIGNAL_IN ( in_DECOD_IN_OPERATION      ,"operation"    ,Toperation_t       ,_param->_size_operation             );
70      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NO_EXECUTE     ,"no_execute"   ,Tcontrol_t         ,1                                   );
71      ALLOC1_SIGNAL_IN ( in_DECOD_IN_IS_DELAY_SLOT  ,"is_delay_slot",Tcontrol_t         ,1                                   );
72      ALLOC1_SIGNAL_IN ( in_DECOD_IN_SAVE_RAT       ,"save_rat"     ,Tcontrol_t         ,1                                   );
73#ifdef DEBUG
74      ALLOC1_SIGNAL_IN ( in_DECOD_IN_ADDRESS        ,"address"      ,Tgeneral_data_t    ,_param->_size_instruction_address   );
75#endif
76      ALLOC1_SIGNAL_IN ( in_DECOD_IN_ADDRESS_NEXT   ,"address_next" ,Tgeneral_data_t    ,_param->_size_instruction_address   );
77      ALLOC1_SIGNAL_IN ( in_DECOD_IN_HAS_IMMEDIAT   ,"has_immediat" ,Tcontrol_t         ,1                                   );
78      ALLOC1_SIGNAL_IN ( in_DECOD_IN_IMMEDIAT       ,"immediat"     ,Tgeneral_data_t    ,_param->_size_general_data          );
79      ALLOC1_SIGNAL_IN ( in_DECOD_IN_READ_RA        ,"read_ra"      ,Tcontrol_t         ,1                                   );
80      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RA     ,"num_reg_ra"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
81      ALLOC1_SIGNAL_IN ( in_DECOD_IN_READ_RB        ,"read_rb"      ,Tcontrol_t         ,1                                   );
82      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RB     ,"num_reg_rb"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
83      ALLOC1_SIGNAL_IN ( in_DECOD_IN_READ_RC        ,"read_rc"      ,Tcontrol_t         ,1                                   );
84      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RC     ,"num_reg_rc"   ,Tspecial_address_t ,_param->_size_special_register_logic);
85      ALLOC1_SIGNAL_IN ( in_DECOD_IN_WRITE_RD       ,"write_rd"     ,Tcontrol_t         ,1                                   );
86      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RD     ,"num_reg_rd"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
87      ALLOC1_SIGNAL_IN ( in_DECOD_IN_WRITE_RE       ,"write_re"     ,Tcontrol_t         ,1                                   );
88      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RE     ,"num_reg_re"   ,Tspecial_address_t ,_param->_size_special_register_logic);
89      ALLOC1_SIGNAL_IN ( in_DECOD_IN_EXCEPTION_USE  ,"exception_use",Texception_t       ,_param->_size_exception_use         );
90      ALLOC1_SIGNAL_IN ( in_DECOD_IN_EXCEPTION      ,"exception"    ,Texception_t       ,_param->_size_exception_decod       );
91
92      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
93    }
94
95    // ~~~~~[ Interface : "decod_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
96    {
97      ALLOC1_INTERFACE_BEGIN("decod_out",OUT,EAST,_("Output of decod_queue"), _param->_nb_inst_decod);
98
99      ALLOC1_VALACK_OUT(out_DECOD_OUT_VAL            ,VAL);
100      ALLOC1_VALACK_IN ( in_DECOD_OUT_ACK            ,ACK);
101      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_CONTEXT_ID     ,"context_id"   ,Tcontext_t         ,_param->_size_context_id            );
102      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_DEPTH          ,"depth"        ,Tdepth_t           ,_param->_size_depth                 );
103#ifdef STATISTICS
104      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_INSTRUCTION    ,"instruction"  ,uint32_t           ,32                                  );
105#endif
106      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_TYPE           ,"type"         ,Ttype_t            ,_param->_size_type                  );
107      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_OPERATION      ,"operation"    ,Toperation_t       ,_param->_size_operation             );
108      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NO_EXECUTE     ,"no_execute"   ,Tcontrol_t         ,1                                   );
109//    ALLOC1_SIGNAL_OUT(out_DECOD_OUT_HAVE_EVENT     ,"have_event"   ,Tcontrol_t         ,1                                   );
110      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_LAST_EVENT     ,"last_event"   ,Tcontrol_t         ,1                                   );
111      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_IS_DELAY_SLOT  ,"is_delay_slot",Tcontrol_t         ,1                                   );
112      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_SAVE_RAT       ,"save_rat"     ,Tcontrol_t         ,1                                   );
113#ifdef DEBUG
114      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_ADDRESS        ,"address"      ,Tgeneral_data_t    ,_param->_size_instruction_address   );
115#endif
116      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_ADDRESS_NEXT   ,"address_next" ,Tgeneral_data_t    ,_param->_size_instruction_address   );
117      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_HAS_IMMEDIAT   ,"has_immediat" ,Tcontrol_t         ,1                                   );
118      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_IMMEDIAT       ,"immediat"     ,Tgeneral_data_t    ,_param->_size_general_data          );
119      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_READ_RA        ,"read_ra"      ,Tcontrol_t         ,1                                   );
120      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RA     ,"num_reg_ra"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
121      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_READ_RB        ,"read_rb"      ,Tcontrol_t         ,1                                   );
122      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RB     ,"num_reg_rb"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
123      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_READ_RC        ,"read_rc"      ,Tcontrol_t         ,1                                   );
124      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RC     ,"num_reg_rc"   ,Tspecial_address_t ,_param->_size_special_register_logic);
125      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_WRITE_RD       ,"write_rd"     ,Tcontrol_t         ,1                                   );
126      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RD     ,"num_reg_rd"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
127      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_WRITE_RE       ,"write_re"     ,Tcontrol_t         ,1                                   );
128      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RE     ,"num_reg_re"   ,Tspecial_address_t ,_param->_size_special_register_logic);
129      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_EXCEPTION_USE  ,"exception_use",Texception_t       ,_param->_size_exception_use         );
130      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_EXCEPTION      ,"exception"    ,Texception_t       ,_param->_size_exception_decod       );
131
132      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
133    }
134
135    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
136    {
137      ALLOC1_INTERFACE_BEGIN("depth",IN ,NORTH,_("Depth"), _param->_nb_context);
138
139      ALLOC1_SIGNAL_IN ( in_DEPTH_MIN      ,"min"      ,Tdepth_t           ,_param->_size_depth);
140      ALLOC1_SIGNAL_IN ( in_DEPTH_MAX      ,"max"      ,Tdepth_t           ,_param->_size_depth);
141      ALLOC1_SIGNAL_IN ( in_DEPTH_FULL     ,"full"     ,Tcontrol_t         ,1);
142
143      ALLOC1_INTERFACE_END(_param->_nb_context);
144    }
145
146    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
147    {
148      ALLOC1_INTERFACE_BEGIN("nb_inst",OUT,NORTH,_("Instruction's number"), _param->_nb_context);
149
150      ALLOC1_SIGNAL_OUT(out_NB_INST_ALL    ,"all"      ,Tcounter_t         ,_param->_size_nb_inst_decod);
151
152      ALLOC1_INTERFACE_END(_param->_nb_context);
153    }
154
155    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
156    {
157      ALLOC1_INTERFACE_BEGIN("context",IN ,NORTH,_("Context"), _param->_nb_context);
158
159      ALLOC1_SIGNAL_IN ( in_CONTEXT_EVENT  ,"event"    ,Tcontrol_t         ,1);
160
161      ALLOC1_INTERFACE_END(_param->_nb_context);
162    }
163
164    if (usage_is_set(_usage,USE_SYSTEMC))
165      {
166    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
167    switch (_param->_queue_scheme)
168      {
169      case DECOD_QUEUE_SCHEME_ONE_FIFO   : ALLOC0(reg_QUEUE,std::list<decod_queue_entry_t*>); break;
170      case DECOD_QUEUE_SCHEME_MULTI_FIFO : ALLOC1(reg_QUEUE,std::list<decod_queue_entry_t*>,_param->_nb_bank); break;
171      }
172
173    ALLOC1(reg_NB_INST           ,uint32_t,_param->_nb_context);
174    ALLOC1(reg_NB_INST_EVENT     ,uint32_t,_param->_nb_context);
175
176    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
177    ALLOC1(internal_DECOD_IN_ACK ,Tcontrol_t,_param->_nb_inst_decod);
178    ALLOC1(internal_DECOD_OUT_VAL,Tcontrol_t,_param->_nb_inst_decod);
179    ALLOC1(internal_DECOD_OUT_ACK,Tcontrol_t,_param->_nb_inst_decod);
180      }
181   
182    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
183
184#ifdef POSITION
185    if (usage_is_set(_usage,USE_POSITION))
186      _component->generate_file();
187#endif
188
189    log_end(Decod_queue,FUNCTION);
190  };
191
192}; // end namespace decod_queue
193}; // end namespace decod_unit
194}; // end namespace front_end
195}; // end namespace multi_front_end
196}; // end namespace core
197
198}; // end namespace behavioural
199}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.