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

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 8.3 KB
Line 
1/*
2 * $Id: Read_queue.cpp 123 2009-06-08 20:43:30Z 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_pos << *(in_CLOCK);
77
78    log_printf(INFO,Read_queue,"Read_queue","Method - genMoore");
79
80    SC_METHOD (genMoore);
81    dont_initialize ();
82    sensitive_neg << *(in_CLOCK);
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_neg << *(in_CLOCK);
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_neg << *(in_CLOCK);
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_neg << *(in_CLOCK);
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.