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

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 8.8 KB
Line 
1/*
2 * $Id: Read_queue.cpp 136 2009-10-20 18:52:15Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace core {
13namespace multi_execute_loop {
14namespace execute_loop {
15namespace multi_read_unit {
16namespace read_unit {
17namespace read_queue {
18
19
20#undef  FUNCTION
21#define FUNCTION "Read_queue::Read_queue"
22  Read_queue::Read_queue
23  (
24#ifdef SYSTEMC
25   sc_module_name name,
26#else
27   std::string name,
28#endif
29#ifdef STATISTICS
30   morpheo::behavioural::Parameters_Statistics            * param_statistics,
31#endif
32   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Parameters * param,
33   morpheo::behavioural::Tusage_t usage ):
34    _name              (name)
35    ,_param            (param)
36    ,_usage (usage)
37  {
38    log_printf(FUNC,Read_queue,FUNCTION,_("<%s> Begin"),_name.c_str());
39
40// #if DEBUG_Read_queue == true
41//     log_printf(INFO,Read_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
42
43//     std::cout << *param << std::endl;
44// #endif   
45
46#ifdef SYSTEMC
47    log_printf(INFO,Read_queue,FUNCTION,_("<%s> Allocation"),_name.c_str());
48
49    allocation ();
50#endif
51
52#ifdef STATISTICS
53    if (usage_is_set(_usage,USE_STATISTICS))
54      { 
55        log_printf(INFO,Read_queue,FUNCTION,_("<%s> Allocation of statistics"),_name.c_str());
56       
57        statistics_declaration(param_statistics);
58      }
59#endif
60
61#ifdef VHDL
62    if (usage_is_set(_usage,USE_VHDL))
63      { 
64        // generate the vhdl
65        log_printf(INFO,Read_queue,FUNCTION,_("<%s> Generate the vhdl"),_name.c_str());
66       
67        vhdl();
68      }
69#endif
70
71#ifdef SYSTEMC
72    if (usage_is_set(_usage,USE_SYSTEMC))
73      { 
74    log_printf(INFO,Read_queue,FUNCTION,_("<%s> Method - transition"),_name.c_str());
75
76    SC_METHOD (transition);
77    dont_initialize ();
78    sensitive << (*(in_CLOCK)).pos();
79
80    log_printf(INFO,Read_queue,FUNCTION,_("<%s> Method - genMoore"),_name.c_str());
81
82    SC_METHOD (genMoore);
83    dont_initialize ();
84    sensitive << (*(in_CLOCK)).neg();
85
86    log_printf(INFO,Read_queue,FUNCTION,_("<%s> Method - genMealy_read_queue_out_val"),_name.c_str());
87
88    SC_METHOD (genMealy_read_queue_out_val);
89    dont_initialize ();
90    sensitive << (*(in_CLOCK)).neg()
91              << (*(in_NRESET));
92    for (uint32_t i=0; i<_param->_nb_gpr_read ; i++)
93      sensitive << *(in_GPR_READ_ACK      [i]);
94    for (uint32_t i=0; i<_param->_nb_spr_read ; i++)
95      sensitive << *(in_SPR_READ_ACK      [i]);
96    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
97      {
98        if (_param->_have_port_ooo_engine_id)
99          sensitive << *(in_GPR_WRITE_OOO_ENGINE_ID [i]);
100
101        sensitive << *(in_GPR_WRITE_VAL        [i])
102                  << *(in_GPR_WRITE_NUM_REG    [i]);
103      }
104    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
105      {
106        if (_param->_have_port_ooo_engine_id)
107          sensitive << *(in_SPR_WRITE_OOO_ENGINE_ID [i]);
108        sensitive << *(in_SPR_WRITE_VAL        [i])
109                 
110                  << *(in_SPR_WRITE_NUM_REG    [i]);
111      }
112#ifdef SYSTEMCASS_SPECIFIC
113    // List dependency information
114
115    (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_READ_ACK                [0]));
116    (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_READ_ACK                [0]));
117   
118    for (uint32_t i=0; i<_param->_nb_gpr_write ; i++)
119      {
120        (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_WRITE_VAL        [i]));
121        if (_param->_have_port_ooo_engine_id)
122        (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
123        (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_WRITE_NUM_REG    [i]));
124      }
125    for (uint32_t i=0; i<_param->_nb_spr_write ; i++)
126      {
127        (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_WRITE_VAL        [i]));
128        if (_param->_have_port_ooo_engine_id)
129        (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_WRITE_OOO_ENGINE_ID [i]));
130        (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_WRITE_NUM_REG    [i]));
131      }
132#endif   
133   
134    log_printf(INFO,Read_queue,FUNCTION,_("<%s> Method - genMealy_read_queue_out_gpr"),_name.c_str());
135
136    SC_METHOD (genMealy_read_queue_out_gpr);
137    dont_initialize ();
138    sensitive << (*(in_CLOCK)).neg()
139              << (*(in_NRESET));
140    for (uint32_t i=0; i<_param->_nb_gpr_read ; i++)
141      sensitive << *(in_GPR_READ_ACK      [i])
142                << *(in_GPR_READ_DATA     [i])
143                << *(in_GPR_READ_DATA_VAL [i]);
144    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
145      {
146        if (_param->_have_port_ooo_engine_id)
147          sensitive << *(in_GPR_WRITE_OOO_ENGINE_ID [i]);
148        sensitive << *(in_GPR_WRITE_VAL        [i])
149                  << *(in_GPR_WRITE_NUM_REG    [i])
150                  << *(in_GPR_WRITE_DATA       [i]);
151      }
152#ifdef SYSTEMCASS_SPECIFIC
153    // List dependency information
154
155    (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_READ_ACK                [0]));
156    (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_READ_DATA_VAL           [0]));
157    (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_READ_ACK                [1]));
158    (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_READ_DATA_VAL           [1]));
159   
160    (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_READ_DATA               [0]));
161    (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_READ_DATA               [1]));
162   
163    for (uint32_t i=0; i<_param->_nb_gpr_write ; i++)
164      {
165        (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_WRITE_VAL        [i]));
166        if (_param->_have_port_ooo_engine_id)
167          (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
168        (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_WRITE_NUM_REG    [i]));
169        (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_WRITE_VAL        [i]));
170        if (_param->_have_port_ooo_engine_id)
171          (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
172        (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_WRITE_NUM_REG    [i]));
173
174        (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_VAL        [i]));
175        if (_param->_have_port_ooo_engine_id)
176          (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
177        (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_NUM_REG    [i]));
178        (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_DATA       [i]));
179        (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_VAL        [i]));
180        if (_param->_have_port_ooo_engine_id)
181          (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
182        (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_NUM_REG    [i]));
183        (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_DATA       [i]));
184      }
185#endif   
186
187    log_printf(INFO,Read_queue,FUNCTION,_("<%s> Method - genMealy_read_queue_out_spr"),_name.c_str());
188
189    SC_METHOD (genMealy_read_queue_out_spr);
190    dont_initialize ();
191    sensitive << (*(in_CLOCK)).neg()
192              << (*(in_NRESET));
193    for (uint32_t i=0; i<_param->_nb_spr_read ; i++)
194      sensitive << *(in_SPR_READ_ACK      [i])
195                << *(in_SPR_READ_DATA     [i])
196                << *(in_SPR_READ_DATA_VAL [i]);
197    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
198      {
199        if (_param->_have_port_ooo_engine_id)
200          sensitive << *(in_SPR_WRITE_OOO_ENGINE_ID [i]);
201        sensitive << *(in_SPR_WRITE_VAL        [i])
202                  << *(in_SPR_WRITE_NUM_REG    [i])
203                  << *(in_SPR_WRITE_DATA       [i]);
204      }
205#ifdef SYSTEMCASS_SPECIFIC
206    // List dependency information
207
208    (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_READ_ACK                [0]));
209    (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_READ_DATA_VAL           [0]));
210   
211    (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_READ_DATA               [0]));
212   
213    for (uint32_t i=0; i<_param->_nb_spr_write ; i++)
214      {
215        (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_WRITE_VAL        [i]));
216        if (_param->_have_port_ooo_engine_id)
217          (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_WRITE_OOO_ENGINE_ID [i]));
218        (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_WRITE_NUM_REG    [i]));
219
220        (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_VAL        [i]));
221        if (_param->_have_port_ooo_engine_id)
222          (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_OOO_ENGINE_ID [i]));
223        (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_NUM_REG    [i]));
224        (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_DATA       [i]));
225      }
226#endif   
227      }
228#endif
229    log_printf(FUNC,Read_queue,FUNCTION,_("<%s> End"),_name.c_str());
230  };
231
232#undef  FUNCTION
233#define FUNCTION "Read_queue::~Read_queue"
234  Read_queue::~Read_queue (void)
235  {
236    log_printf(FUNC,Read_queue,FUNCTION,_("<%s> Begin"),_name.c_str());
237
238#ifdef STATISTICS
239    if (usage_is_set(_usage,USE_STATISTICS))
240      { 
241        log_printf(INFO,Read_queue,FUNCTION,_("<%s> Generate Statistics file"),_name.c_str());
242       
243        delete _stat;
244      }
245#endif
246
247#ifdef SYSTEMC
248    log_printf(INFO,Read_queue,FUNCTION,_("<%s> Deallocation"),_name.c_str());
249
250    deallocation ();
251#endif
252
253    log_printf(FUNC,Read_queue,FUNCTION,_("<%s> End"),_name.c_str());
254  };
255
256}; // end namespace read_queue
257}; // end namespace read_unit
258}; // end namespace multi_read_unit
259}; // end namespace execute_loop
260}; // end namespace multi_execute_loop
261}; // end namespace core
262
263}; // end namespace behavioural
264}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.