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

Last change on this file since 55 was 55, checked in by rosiere, 17 years ago

Ajout SystemC read_queue et reservation_station
Ajout port au bloc registerfile_monolithic (à ajouter également au bloc registerfile et registerfile_multi_banked)
Modif param : passage de pointeur (attention, tous les composants n'ont pas été tous modifier)

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