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

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

1) add constant method - compatibility with SystemC
2) add Script to test sensitive list
3) fix bug in sensitive list

  • Property svn:keywords set to Id
File size: 8.4 KB
Line 
1/*
2 * $Id: Read_queue.cpp 132 2009-07-11 16:39:35Z 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              << (*(in_NRESET));
90    for (uint32_t i=0; i<_param->_nb_gpr_read ; i++)
91      sensitive << *(in_GPR_READ_ACK      [i]);
92    for (uint32_t i=0; i<_param->_nb_spr_read ; i++)
93      sensitive << *(in_SPR_READ_ACK      [i]);
94    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
95      {
96        if (_param->_have_port_ooo_engine_id)
97          sensitive << *(in_GPR_WRITE_OOO_ENGINE_ID [i]);
98
99        sensitive << *(in_GPR_WRITE_VAL        [i])
100                  << *(in_GPR_WRITE_NUM_REG    [i]);
101      }
102    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
103      {
104        if (_param->_have_port_ooo_engine_id)
105          sensitive << *(in_SPR_WRITE_OOO_ENGINE_ID [i]);
106        sensitive << *(in_SPR_WRITE_VAL        [i])
107                 
108                  << *(in_SPR_WRITE_NUM_REG    [i]);
109      }
110#ifdef SYSTEMCASS_SPECIFIC
111    // List dependency information
112
113    (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_READ_ACK                [0]));
114    (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_READ_ACK                [0]));
115   
116    for (uint32_t i=0; i<_param->_nb_gpr_write ; i++)
117      {
118        (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_WRITE_VAL        [i]));
119        if (_param->_have_port_ooo_engine_id)
120        (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
121        (*(out_READ_QUEUE_OUT_VAL)) (*(in_GPR_WRITE_NUM_REG    [i]));
122      }
123    for (uint32_t i=0; i<_param->_nb_spr_write ; i++)
124      {
125        (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_WRITE_VAL        [i]));
126        if (_param->_have_port_ooo_engine_id)
127        (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_WRITE_OOO_ENGINE_ID [i]));
128        (*(out_READ_QUEUE_OUT_VAL)) (*(in_SPR_WRITE_NUM_REG    [i]));
129      }
130#endif   
131   
132    log_printf(INFO,Read_queue,"Read_queue","Method - genMealy_read_queue_out_gpr");
133
134    SC_METHOD (genMealy_read_queue_out_gpr);
135    dont_initialize ();
136    sensitive << (*(in_CLOCK)).neg()
137              << (*(in_NRESET));
138    for (uint32_t i=0; i<_param->_nb_gpr_read ; i++)
139      sensitive << *(in_GPR_READ_ACK      [i])
140                << *(in_GPR_READ_DATA     [i])
141                << *(in_GPR_READ_DATA_VAL [i]);
142    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
143      {
144        if (_param->_have_port_ooo_engine_id)
145          sensitive << *(in_GPR_WRITE_OOO_ENGINE_ID [i]);
146        sensitive << *(in_GPR_WRITE_VAL        [i])
147                  << *(in_GPR_WRITE_NUM_REG    [i])
148                  << *(in_GPR_WRITE_DATA       [i]);
149      }
150#ifdef SYSTEMCASS_SPECIFIC
151    // List dependency information
152
153    (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_READ_ACK                [0]));
154    (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_READ_DATA_VAL           [0]));
155    (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_READ_ACK                [1]));
156    (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_READ_DATA_VAL           [1]));
157   
158    (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_READ_DATA               [0]));
159    (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_READ_DATA               [1]));
160   
161    for (uint32_t i=0; i<_param->_nb_gpr_write ; i++)
162      {
163        (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_WRITE_VAL        [i]));
164        if (_param->_have_port_ooo_engine_id)
165          (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
166        (*(out_READ_QUEUE_OUT_DATA_RA_VAL)) (*(in_GPR_WRITE_NUM_REG    [i]));
167        (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_WRITE_VAL        [i]));
168        if (_param->_have_port_ooo_engine_id)
169          (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
170        (*(out_READ_QUEUE_OUT_DATA_RB_VAL)) (*(in_GPR_WRITE_NUM_REG    [i]));
171
172        (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_VAL        [i]));
173        if (_param->_have_port_ooo_engine_id)
174          (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
175        (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_NUM_REG    [i]));
176        (*(out_READ_QUEUE_OUT_DATA_RA    )) (*(in_GPR_WRITE_DATA       [i]));
177        (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_VAL        [i]));
178        if (_param->_have_port_ooo_engine_id)
179          (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_OOO_ENGINE_ID [i]));
180        (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_NUM_REG    [i]));
181        (*(out_READ_QUEUE_OUT_DATA_RB    )) (*(in_GPR_WRITE_DATA       [i]));
182      }
183#endif   
184
185    log_printf(INFO,Read_queue,"Read_queue","Method - genMealy_read_queue_out_spr");
186
187    SC_METHOD (genMealy_read_queue_out_spr);
188    dont_initialize ();
189    sensitive << (*(in_CLOCK)).neg()
190              << (*(in_NRESET));
191    for (uint32_t i=0; i<_param->_nb_spr_read ; i++)
192      sensitive << *(in_SPR_READ_ACK      [i])
193                << *(in_SPR_READ_DATA     [i])
194                << *(in_SPR_READ_DATA_VAL [i]);
195    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
196      {
197        if (_param->_have_port_ooo_engine_id)
198          sensitive << *(in_SPR_WRITE_OOO_ENGINE_ID [i]);
199        sensitive << *(in_SPR_WRITE_VAL        [i])
200                  << *(in_SPR_WRITE_NUM_REG    [i])
201                  << *(in_SPR_WRITE_DATA       [i]);
202      }
203#ifdef SYSTEMCASS_SPECIFIC
204    // List dependency information
205
206    (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_READ_ACK                [0]));
207    (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_READ_DATA_VAL           [0]));
208   
209    (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_READ_DATA               [0]));
210   
211    for (uint32_t i=0; i<_param->_nb_spr_write ; i++)
212      {
213        (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_WRITE_VAL        [i]));
214        if (_param->_have_port_ooo_engine_id)
215          (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_WRITE_OOO_ENGINE_ID [i]));
216        (*(out_READ_QUEUE_OUT_DATA_RC_VAL)) (*(in_SPR_WRITE_NUM_REG    [i]));
217
218        (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_VAL        [i]));
219        if (_param->_have_port_ooo_engine_id)
220          (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_OOO_ENGINE_ID [i]));
221        (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_NUM_REG    [i]));
222        (*(out_READ_QUEUE_OUT_DATA_RC    )) (*(in_SPR_WRITE_DATA       [i]));
223      }
224#endif   
225      }
226#endif
227    log_printf(FUNC,Read_queue,"Read_queue","End");
228  };
229 
230  Read_queue::~Read_queue (void)
231  {
232    log_printf(FUNC,Read_queue,"~Read_queue","Begin");
233
234#ifdef STATISTICS
235    if (usage_is_set(_usage,USE_STATISTICS))
236      { 
237        log_printf(INFO,Read_queue,"~Read_queue","Generate Statistics file");
238       
239        delete _stat;
240      }
241#endif
242
243#ifdef SYSTEMC
244    log_printf(INFO,Read_queue,"~Read_queue","Deallocation");
245
246    deallocation ();
247#endif
248
249    log_printf(FUNC,Read_queue,"~Read_queue","End");
250  };
251
252}; // end namespace read_queue
253}; // end namespace read_unit
254}; // end namespace multi_read_unit
255}; // end namespace execute_loop
256}; // end namespace multi_execute_loop
257}; // end namespace core
258
259}; // end namespace behavioural
260}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.