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

Last change on this file since 136 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.