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

Last change on this file since 142 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: 5.2 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Read_queue_genMoore.cpp 136 2009-10-20 18:52:15Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_execute_loop {
15namespace execute_loop {
16namespace multi_read_unit {
17namespace read_unit {
18namespace read_queue {
19
20#undef  FUNCTION
21#define FUNCTION "Read_queue::genMoore"
22  void Read_queue::genMoore (void)
23  {
24    log_begin(Read_queue,FUNCTION);
25    log_function(Read_queue,FUNCTION,_name.c_str());
26
27    if (PORT_READ(in_NRESET))
28      {
29    bool not_full  = _queue->size() < _param->_size_queue;
30    bool not_empty = not _queue->empty();
31
32    // ~~~~~[ Interface "read_queue_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33    PORT_WRITE (out_READ_QUEUE_IN_ACK , not_full );
34
35    // ~~~~~[ Interface "read_queue_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36    //  PORT_WRITE (out_READ_QUEUE_OUT_VAL         , not_empty    );              // in genMealy_val
37   
38    if(_param->_have_port_context_id   )
39    PORT_WRITE (out_READ_QUEUE_OUT_CONTEXT_ID   , _queue_head->_context_id  );
40    if(_param->_have_port_front_end_id )
41    PORT_WRITE (out_READ_QUEUE_OUT_FRONT_END_ID , _queue_head->_front_end_id);
42    if(_param->_have_port_ooo_engine_id)
43    PORT_WRITE (out_READ_QUEUE_OUT_OOO_ENGINE_ID, _queue_head->_ooo_engine_id);
44    if(_param->_have_port_rob_ptr      )
45    PORT_WRITE (out_READ_QUEUE_OUT_ROB_ID      , _queue_head->_rob_id      );
46    PORT_WRITE (out_READ_QUEUE_OUT_OPERATION   , _queue_head->_operation   );
47    PORT_WRITE (out_READ_QUEUE_OUT_TYPE        , _queue_head->_type        );
48    PORT_WRITE (out_READ_QUEUE_OUT_CANCEL      , _queue_head->_cancel      );
49    PORT_WRITE (out_READ_QUEUE_OUT_STORE_QUEUE_PTR_WRITE, _queue_head->_store_queue_ptr_write);
50    PORT_WRITE (out_READ_QUEUE_OUT_STORE_QUEUE_PTR_READ , _queue_head->_store_queue_ptr_read );
51    PORT_WRITE (out_READ_QUEUE_OUT_STORE_QUEUE_EMPTY    , _queue_head->_store_queue_empty    );
52    if (_param->_have_port_load_queue_ptr)
53    PORT_WRITE (out_READ_QUEUE_OUT_LOAD_QUEUE_PTR_WRITE , _queue_head->_load_queue_ptr_write );
54    PORT_WRITE (out_READ_QUEUE_OUT_HAS_IMMEDIAT, _queue_head->_has_immediat);
55    PORT_WRITE (out_READ_QUEUE_OUT_IMMEDIAT    , _queue_head->_immediat    );
56//     PORT_WRITE (out_READ_QUEUE_OUT_READ_RA     , _queue_head->_read_ra     );
57    PORT_WRITE (out_READ_QUEUE_OUT_NUM_REG_RA  , _queue_head->_num_reg_ra  );
58//  PORT_WRITE (out_READ_QUEUE_OUT_DATA_RA_VAL , _queue_head->_data_ra_val ); // in genMealy_gpr
59//  PORT_WRITE (out_READ_QUEUE_OUT_DATA_RA     , _queue_head->_data_ra     ); // in genMealy_gpr
60//     PORT_WRITE (out_READ_QUEUE_OUT_READ_RB     , _queue_head->_read_rb     );
61    PORT_WRITE (out_READ_QUEUE_OUT_NUM_REG_RB  , _queue_head->_num_reg_rb  );
62//  PORT_WRITE (out_READ_QUEUE_OUT_DATA_RB_VAL , _queue_head->_data_rb_val ); // in genMealy_gpr
63//  PORT_WRITE (out_READ_QUEUE_OUT_DATA_RB     , _queue_head->_data_rb     ); // in genMealy_gpr
64//     PORT_WRITE (out_READ_QUEUE_OUT_READ_RC     , _queue_head->_read_rc     );
65    PORT_WRITE (out_READ_QUEUE_OUT_NUM_REG_RC  , _queue_head->_num_reg_rc  );
66//  PORT_WRITE (out_READ_QUEUE_OUT_DATA_RC_VAL , _queue_head->_data_rc_val ); // in genMealy_spr
67//  PORT_WRITE (out_READ_QUEUE_OUT_DATA_RC     , _queue_head->_data_rc     ); // in genMealy_spr
68    PORT_WRITE (out_READ_QUEUE_OUT_WRITE_RD    , _queue_head->_write_rd    );
69    PORT_WRITE (out_READ_QUEUE_OUT_NUM_REG_RD  , _queue_head->_num_reg_rd  );
70    PORT_WRITE (out_READ_QUEUE_OUT_WRITE_RE    , _queue_head->_write_re    );
71    PORT_WRITE (out_READ_QUEUE_OUT_NUM_REG_RE  , _queue_head->_num_reg_re  );
72
73    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74    PORT_WRITE (out_GPR_READ_VAL           [0], not_empty and _queue_head->_read_ra_val);
75    PORT_WRITE (out_GPR_READ_VAL           [1], not_empty and _queue_head->_read_rb_val);
76    if(_param->_have_port_ooo_engine_id)
77      {
78        PORT_WRITE (out_GPR_READ_OOO_ENGINE_ID [0],               _queue_head->_ooo_engine_id);
79        PORT_WRITE (out_GPR_READ_OOO_ENGINE_ID [1],               _queue_head->_ooo_engine_id);
80      }
81    PORT_WRITE (out_GPR_READ_NUM_REG       [0],               _queue_head->_num_reg_ra);
82    PORT_WRITE (out_GPR_READ_NUM_REG       [1],               _queue_head->_num_reg_rb);
83
84    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
85    PORT_WRITE (out_SPR_READ_VAL           [0], not_empty and _queue_head->_read_rc_val);
86    if(_param->_have_port_ooo_engine_id)
87    PORT_WRITE (out_SPR_READ_OOO_ENGINE_ID [0],               _queue_head->_ooo_engine_id);
88    PORT_WRITE (out_SPR_READ_NUM_REG       [0],               _queue_head->_num_reg_rc);
89      }
90    else
91      {
92        // Reset
93
94    PORT_WRITE (out_READ_QUEUE_IN_ACK , 0);
95    PORT_WRITE (out_GPR_READ_VAL   [0], 0);
96    PORT_WRITE (out_GPR_READ_VAL   [1], 0);
97    PORT_WRITE (out_SPR_READ_VAL   [0], 0);
98
99      }
100   
101    log_end(Read_queue,FUNCTION);
102  };
103
104}; // end namespace read_queue
105}; // end namespace read_unit
106}; // end namespace multi_read_unit
107}; // end namespace execute_loop
108}; // end namespace multi_execute_loop
109}; // end namespace core
110
111}; // end namespace behavioural
112}; // end namespace morpheo             
113#endif
Note: See TracBrowser for help on using the repository browser.