source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_allocation.cpp @ 54

Last change on this file since 54 was 54, checked in by rosiere, 17 years ago

Ajout de Read_queue

  • seulement en systemC
  • validé
File size: 14.1 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id$
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_execute_loop {
15namespace execute_loop {
16namespace multi_read_unit {
17namespace read_unit {
18namespace read_queue {
19
20
21  void Read_queue::allocation (void)
22  {
23    string rename;
24
25    log_printf(FUNC,Read_queue,"allocation","Begin");
26
27    _component   = new Component ();
28
29    Entity * entity = _component->set_entity (_name       
30                                              ,"Read_queue"
31#ifdef POSITION
32                                              ,COMBINATORY
33#endif
34                                              );
35
36    _interfaces = entity->set_interfaces();
37
38    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39
40    {
41      Interface * interface = _interfaces->set_interface(""
42#ifdef POSITION
43                                                         ,IN
44                                                         ,SOUTH,
45                                                         "Generalist interface"
46#endif
47                                                         );
48
49     in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
50     in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
51    }
52    // ~~~~~[ Interface : "read_queue_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53    {
54      Interface_fifo * interface = _interfaces->set_interface("read_queue_in"
55#ifdef POSITION
56                                                              ,IN
57                                                              ,EAST
58                                                              ,"Input of read_queue"
59#endif
60                                                              );
61     
62       in_READ_QUEUE_IN_VAL            = interface->set_signal_valack_in        ("val"    , VAL);
63      out_READ_QUEUE_IN_ACK            = interface->set_signal_valack_out       ("ack"    , ACK);
64       in_READ_QUEUE_IN_CONTEXT_ID     = interface->set_signal_in  <Tcontext_t        > ("context_id"  ,_param->_size_context_id       );
65       in_READ_QUEUE_IN_PACKET_ID      = interface->set_signal_in  <Tpacket_t         > ("packet_id"   ,_param->_size_packet_id        );
66       in_READ_QUEUE_IN_OPERATION      = interface->set_signal_in  <Toperation_t      > ("operation"   ,_param->_size_operation        );
67       in_READ_QUEUE_IN_TYPE           = interface->set_signal_in  <Ttype_t           > ("type"        ,_param->_size_type             );
68       in_READ_QUEUE_IN_HAS_IMMEDIAT   = interface->set_signal_in  <Tcontrol_t        > ("has_immediat",1                             );
69       in_READ_QUEUE_IN_IMMEDIAT       = interface->set_signal_in  <Tgeneral_data_t   > ("immediat"    ,_param->_size_general_data     );
70       in_READ_QUEUE_IN_READ_RA        = interface->set_signal_in  <Tcontrol_t        > ("read_ra"     ,1                             );
71       in_READ_QUEUE_IN_NUM_REG_RA     = interface->set_signal_in  <Tgeneral_address_t> ("num_reg_ra"  ,_param->_size_general_register );
72       in_READ_QUEUE_IN_READ_RB        = interface->set_signal_in  <Tcontrol_t        > ("read_rb"     ,1                             );
73       in_READ_QUEUE_IN_NUM_REG_RB     = interface->set_signal_in  <Tgeneral_address_t> ("num_reg_rb"  ,_param->_size_general_register );
74       in_READ_QUEUE_IN_READ_RC        = interface->set_signal_in  <Tcontrol_t        > ("read_rc"     ,1                             );
75       in_READ_QUEUE_IN_NUM_REG_RC     = interface->set_signal_in  <Tspecial_address_t> ("num_reg_rc"  ,_param->_size_special_register );
76       in_READ_QUEUE_IN_WRITE_RD       = interface->set_signal_in  <Tcontrol_t        > ("write_rd"    ,1                             );
77       in_READ_QUEUE_IN_NUM_REG_RD     = interface->set_signal_in  <Tgeneral_address_t> ("num_reg_rd"  ,_param->_size_general_register );
78       in_READ_QUEUE_IN_WRITE_RE       = interface->set_signal_in  <Tcontrol_t        > ("write_re"    ,1                             );
79       in_READ_QUEUE_IN_NUM_REG_RE     = interface->set_signal_in  <Tspecial_address_t> ("num_reg_re"  ,_param->_size_special_register );     
80     }
81
82    // ~~~~~[ Interface : "read_queue_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83    {
84      Interface_fifo * interface = _interfaces->set_interface("read_queue_out"
85#ifdef POSITION
86                                                               ,OUT
87                                                               ,EAST
88                                                               ,"Input of read_queue"
89#endif
90                                                               );
91     
92      out_READ_QUEUE_OUT_VAL            = interface->set_signal_valack_out       ("val"    , VAL);
93       in_READ_QUEUE_OUT_ACK            = interface->set_signal_valack_in        ("ack"    , ACK);
94      out_READ_QUEUE_OUT_CONTEXT_ID     = interface->set_signal_out <Tcontext_t        > ("context_id"  ,_param->_size_context_id       );
95      out_READ_QUEUE_OUT_PACKET_ID      = interface->set_signal_out <Tpacket_t         > ("packet_id"   ,_param->_size_packet_id        );
96      out_READ_QUEUE_OUT_OPERATION      = interface->set_signal_out <Toperation_t      > ("operation"   ,_param->_size_operation        );
97      out_READ_QUEUE_OUT_TYPE           = interface->set_signal_out <Ttype_t           > ("type"        ,_param->_size_type             );
98      out_READ_QUEUE_OUT_HAS_IMMEDIAT   = interface->set_signal_out <Tcontrol_t        > ("has_immediat",1                             );
99      out_READ_QUEUE_OUT_IMMEDIAT       = interface->set_signal_out <Tgeneral_data_t   > ("immediat"    ,_param->_size_general_data     );
100      out_READ_QUEUE_OUT_READ_RA        = interface->set_signal_out <Tcontrol_t        > ("read_ra"     ,1                             );
101      out_READ_QUEUE_OUT_NUM_REG_RA     = interface->set_signal_out <Tgeneral_address_t> ("num_reg_ra"  ,_param->_size_general_register );
102      out_READ_QUEUE_OUT_DATA_RA_VAL    = interface->set_signal_out <Tcontrol_t        > ("data_ra_val" ,1                             );
103      out_READ_QUEUE_OUT_DATA_RA        = interface->set_signal_out <Tgeneral_data_t   > ("data_ra"     ,_param->_size_general_data     );
104      out_READ_QUEUE_OUT_READ_RB        = interface->set_signal_out <Tcontrol_t        > ("read_rb"     ,1                             );
105      out_READ_QUEUE_OUT_NUM_REG_RB     = interface->set_signal_out <Tgeneral_address_t> ("num_reg_rb"  ,_param->_size_general_register );
106      out_READ_QUEUE_OUT_DATA_RB_VAL    = interface->set_signal_out <Tcontrol_t        > ("data_rb_val" ,1                             );
107      out_READ_QUEUE_OUT_DATA_RB        = interface->set_signal_out <Tgeneral_data_t   > ("data_rb"     ,_param->_size_general_data     );
108      out_READ_QUEUE_OUT_READ_RC        = interface->set_signal_out <Tcontrol_t        > ("read_rc"     ,1                             );
109      out_READ_QUEUE_OUT_NUM_REG_RC     = interface->set_signal_out <Tspecial_address_t> ("num_reg_rc"  ,_param->_size_special_register );
110      out_READ_QUEUE_OUT_DATA_RC_VAL    = interface->set_signal_out <Tcontrol_t        > ("data_rc_val" ,1                             );
111      out_READ_QUEUE_OUT_DATA_RC        = interface->set_signal_out <Tspecial_data_t   > ("data_rc"     ,_param->_size_special_data     );
112      out_READ_QUEUE_OUT_WRITE_RD       = interface->set_signal_out <Tcontrol_t        > ("write_rd"    ,1                             );
113      out_READ_QUEUE_OUT_NUM_REG_RD     = interface->set_signal_out <Tgeneral_address_t> ("num_reg_rd"  ,_param->_size_general_register );
114      out_READ_QUEUE_OUT_WRITE_RE       = interface->set_signal_out <Tcontrol_t        > ("write_re"    ,1                             );
115      out_READ_QUEUE_OUT_NUM_REG_RE     = interface->set_signal_out <Tspecial_address_t> ("num_reg_re"  ,_param->_size_special_register );     
116     }
117
118    // ~~~~~[ Interface : "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119   
120    out_GPR_READ_VAL       = new SC_OUT(Tcontrol_t        ) * [_param->_nb_gpr_read];
121     in_GPR_READ_ACK       = new SC_IN (Tcontrol_t        ) * [_param->_nb_gpr_read];
122    out_GPR_READ_CONTEXT_ID= new SC_OUT(Tcontext_t        ) * [_param->_nb_gpr_read];
123    out_GPR_READ_NUM_REG   = new SC_OUT(Tgeneral_address_t) * [_param->_nb_gpr_read];
124     in_GPR_READ_DATA      = new SC_IN (Tgeneral_data_t   ) * [_param->_nb_gpr_read];
125     in_GPR_READ_DATA_VAL  = new SC_IN (Tcontrol_t        ) * [_param->_nb_gpr_read];
126
127    for (uint32_t i=0; i<_param->_nb_gpr_read; i++)
128      {
129        Interface_fifo * interface = _interfaces->set_interface("gpr_read_"+toString(i)
130#ifdef POSITION
131                                                                , IN 
132                                                                ,SOUTH
133                                                                , "Interface with the General RegisterFile."
134#endif
135                                                                );
136
137        out_GPR_READ_VAL        [i] = interface->set_signal_valack_out       ("val"    , VAL);
138         in_GPR_READ_ACK        [i] = interface->set_signal_valack_in        ("ack"    , ACK);
139        out_GPR_READ_CONTEXT_ID [i] = interface->set_signal_out <Tcontext_t        > ("context_id",_param->_size_context_id);
140        out_GPR_READ_NUM_REG    [i] = interface->set_signal_out <Tgeneral_address_t> ("num_reg"  ,_param->_size_general_register);
141         in_GPR_READ_DATA       [i] = interface->set_signal_in  <Tgeneral_data_t   > ("data"     ,_param->_size_general_data);
142         in_GPR_READ_DATA_VAL   [i] = interface->set_signal_in  <Tcontrol_t        > ("data_val" ,1);
143      }
144     
145    // ~~~~~[ Interface : "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
146   
147    out_SPR_READ_VAL       = new SC_OUT(Tcontrol_t        ) * [_param->_nb_spr_read];
148     in_SPR_READ_ACK       = new SC_IN (Tcontrol_t        ) * [_param->_nb_spr_read];
149    out_SPR_READ_CONTEXT_ID= new SC_OUT(Tcontext_t        ) * [_param->_nb_spr_read];
150    out_SPR_READ_NUM_REG   = new SC_OUT(Tspecial_address_t) * [_param->_nb_spr_read];
151     in_SPR_READ_DATA      = new SC_IN (Tspecial_data_t   ) * [_param->_nb_spr_read];
152     in_SPR_READ_DATA_VAL  = new SC_IN (Tcontrol_t        ) * [_param->_nb_spr_read];
153
154    for (uint32_t i=0; i<_param->_nb_spr_read; i++)
155      {
156        Interface_fifo * interface = _interfaces->set_interface("spr_read_"+toString(i)
157#ifdef POSITION
158                                                                , IN 
159                                                                ,SOUTH
160                                                                , "Interface with the Special RegisterFile."
161#endif
162                                                                );
163
164        out_SPR_READ_VAL        [i] = interface->set_signal_valack_out       ("val"    , VAL);
165         in_SPR_READ_ACK        [i] = interface->set_signal_valack_in        ("ack"    , ACK);
166        out_SPR_READ_CONTEXT_ID [i] = interface->set_signal_out <Tcontext_t        > ("context_id",_param->_size_context_id);
167        out_SPR_READ_NUM_REG    [i] = interface->set_signal_out <Tspecial_address_t> ("num_reg"   ,_param->_size_special_register);
168         in_SPR_READ_DATA       [i] = interface->set_signal_in  <Tspecial_data_t   > ("data"      ,_param->_size_special_data);
169         in_SPR_READ_DATA_VAL   [i] = interface->set_signal_in  <Tcontrol_t        > ("data_val"  ,1);
170      }
171
172    // ~~~~~[ Interface : "bypass_gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
173   
174     in_BYPASS_GPR_WRITE_VAL       = new SC_IN (Tcontrol_t        ) * [_param->_nb_gpr_write];
175     in_BYPASS_GPR_WRITE_CONTEXT_ID= new SC_IN (Tcontext_t        ) * [_param->_nb_gpr_write];
176     in_BYPASS_GPR_WRITE_NUM_REG   = new SC_IN (Tgeneral_address_t) * [_param->_nb_gpr_write];
177     in_BYPASS_GPR_WRITE_DATA      = new SC_IN (Tgeneral_data_t   ) * [_param->_nb_gpr_write];
178
179    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
180      {
181        Interface_fifo * interface = _interfaces->set_interface("bypass_gpr_write_"+toString(i)
182#ifdef POSITION
183                                                                , IN 
184                                                                ,SOUTH
185                                                                , "Interface with write queue to bypass the write in the RegisterFile."
186#endif
187                                                                );
188
189         in_BYPASS_GPR_WRITE_VAL        [i] = interface->set_signal_valack_in        ("val"    , VAL);
190         in_BYPASS_GPR_WRITE_CONTEXT_ID [i] = interface->set_signal_in  <Tcontext_t        > ("context_id",_param->_size_context_id);
191         in_BYPASS_GPR_WRITE_NUM_REG    [i] = interface->set_signal_in  <Tgeneral_address_t> ("num_reg"   ,_param->_size_general_register);
192         in_BYPASS_GPR_WRITE_DATA       [i] = interface->set_signal_in  <Tgeneral_data_t   > ("data"      ,_param->_size_general_data);
193      }
194
195    // ~~~~~[ Interface : "bypass_spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
196   
197     in_BYPASS_SPR_WRITE_VAL       = new SC_IN (Tcontrol_t        ) * [_param->_nb_spr_write];
198     in_BYPASS_SPR_WRITE_CONTEXT_ID= new SC_IN (Tcontext_t        ) * [_param->_nb_spr_write];
199     in_BYPASS_SPR_WRITE_NUM_REG   = new SC_IN (Tspecial_address_t) * [_param->_nb_spr_write];
200     in_BYPASS_SPR_WRITE_DATA      = new SC_IN (Tspecial_data_t   ) * [_param->_nb_spr_write];
201
202    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
203      {
204        Interface_fifo * interface = _interfaces->set_interface("bypass_spr_write_"+toString(i)
205#ifdef POSITION
206                                                                , IN 
207                                                                ,SOUTH
208                                                                , "Interface with write queue to bypass the write in the RegisterFile."
209#endif
210                                                                );
211
212         in_BYPASS_SPR_WRITE_VAL        [i] = interface->set_signal_valack_in        ("val"    , VAL);
213         in_BYPASS_SPR_WRITE_CONTEXT_ID [i] = interface->set_signal_in  <Tcontext_t        > ("context_id",_param->_size_context_id);
214         in_BYPASS_SPR_WRITE_NUM_REG    [i] = interface->set_signal_in  <Tspecial_address_t> ("num_reg"   ,_param->_size_special_register);
215         in_BYPASS_SPR_WRITE_DATA       [i] = interface->set_signal_in  <Tspecial_data_t   > ("data"      ,_param->_size_special_data);
216      }
217
218    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
219    _queue      = new queue<Tread_queue_entry_t *>;
220    _queue_head = new Tread_queue_head_entry_t;
221
222#ifdef POSITION
223    _component->generate_file();
224#endif
225
226    log_printf(FUNC,Read_queue,"allocation","End");
227  };
228
229}; // end namespace read_queue
230}; // end namespace read_unit
231}; // end namespace multi_read_unit
232}; // end namespace execute_loop
233}; // end namespace multi_execute_loop
234}; // end namespace core
235
236}; // end namespace behavioural
237}; // end namespace morpheo             
238#endif
Note: See TracBrowser for help on using the repository browser.