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

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

1) add constant method
2) test with systemc 2.2.0

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