Changeset 70 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_genMoore.cpp
- Timestamp:
- Dec 19, 2007, 7:08:24 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_genMoore.cpp
r69 r70 39 39 // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~ 40 40 41 uint32_t nb_slot_find = 0; 42 for (uint32_t i=0; ( 43 #ifdef SYSTEMC_VHDL_COMPATIBILITY 44 (i<_param->_size_queue) 45 #else 46 (i<_queue_control->nb_elt()) 47 #endif 48 and (nb_slot_find < _param->_nb_inst_retire) 49 50 ) 51 ; i++) 52 { 53 uint32_t index; 54 #ifdef SYSTEMC_VHDL_COMPATIBILITY 55 index = i; 56 #else 57 index = (*_queue_control)[i]; 58 #endif 59 bool val = 60 ( 61 #ifdef SYSTEMC_VHDL_COMPATIBILITY 62 _queue_valid [i] and 63 #endif 64 _queue[index]._data_ra_val and 65 _queue[index]._data_rb_val and 66 _queue[index]._data_rc_val); 67 68 if (val == true) 69 { 70 internal_RETIRE_SLOT [nb_slot_find] = i; 71 nb_slot_find ++; 72 } 73 } 41 uint32_t index_queue=0; 42 const uint32_t nb_slot_scan = _param->_size_queue-_param->_nb_inst_retire+1; 74 43 75 44 for (uint32_t i=0; i<_param->_nb_inst_retire; i++) 76 45 { 77 bool val = i<nb_slot_find; 46 bool val = false; 47 uint32_t index_find = 0;; 48 49 for (; ( 50 #ifndef SYSTEMC_VHDL_COMPATIBILITY 51 (index_queue<_queue_control->nb_elt()) and 52 #endif 53 (index_queue>=i) and 54 (index_queue<nb_slot_scan+i) and 55 (val==false)); 56 index_queue++) 57 { 58 #ifdef SYSTEMC_VHDL_COMPATIBILITY 59 index_find = index_queue; 60 #else 61 index_find = (*_queue_control)[index_queue]; 62 #endif 63 internal_RETIRE_SLOT [i] = index_queue; 64 65 val = 66 ( 67 #ifdef SYSTEMC_VHDL_COMPATIBILITY 68 _queue_valid [index_queue] and 69 #endif 70 _queue[index_find]._data_ra_val and 71 _queue[index_find]._data_rb_val and 72 _queue[index_find]._data_rc_val 73 ); 74 75 // cout << "========== Moore : " << endl 76 // << " * i : " << i << endl 77 // << " * val : " << val << endl 78 // << " * index_queue : " << index_queue << endl 79 // << " * index_find : " << index_find << endl; 80 } 81 78 82 internal_RETIRE_VAL [i] = val; 79 80 83 PORT_WRITE(out_RETIRE_VAL [i], val); 81 84 82 85 if (val) 83 86 { 84 uint32_t index; 85 #ifdef SYSTEMC_VHDL_COMPATIBILITY86 index= internal_RETIRE_SLOT [i];87 #else88 index= (*_queue_control)[internal_RETIRE_SLOT [i]];89 #endif87 88 // #ifdef SYSTEMC_VHDL_COMPATIBILITY 89 // index_find = internal_RETIRE_SLOT [i]; 90 // #else 91 // index_find = (*_queue_control)[internal_RETIRE_SLOT [i]]; 92 // #endif 90 93 if (_param->_have_port_context_id) 91 PORT_WRITE(out_RETIRE_CONTEXT_ID [i],_queue[index ]._context_id);94 PORT_WRITE(out_RETIRE_CONTEXT_ID [i],_queue[index_find]._context_id); 92 95 if (_param->_have_port_front_end_id) 93 PORT_WRITE(out_RETIRE_FRONT_END_ID [i],_queue[index ]._front_end_id);96 PORT_WRITE(out_RETIRE_FRONT_END_ID [i],_queue[index_find]._front_end_id); 94 97 if (_param->_have_port_ooo_engine_id) 95 PORT_WRITE(out_RETIRE_OOO_ENGINE_ID [i],_queue[index ]._ooo_engine_id);98 PORT_WRITE(out_RETIRE_OOO_ENGINE_ID [i],_queue[index_find]._ooo_engine_id); 96 99 if (_param->_have_port_rob_id) 97 PORT_WRITE(out_RETIRE_ROB_ID [i],_queue[index ]._rob_id);98 PORT_WRITE(out_RETIRE_OPERATION [i],_queue[index ]._operation);99 PORT_WRITE(out_RETIRE_TYPE [i],_queue[index ]._type);100 PORT_WRITE(out_RETIRE_HAS_IMMEDIAT [i],_queue[index ]._has_immediat);101 PORT_WRITE(out_RETIRE_IMMEDIAT [i],_queue[index ]._immediat);102 PORT_WRITE(out_RETIRE_DATA_RA [i],_queue[index ]._data_ra);103 PORT_WRITE(out_RETIRE_DATA_RB [i],_queue[index ]._data_rb);104 PORT_WRITE(out_RETIRE_DATA_RC [i],_queue[index ]._data_rc);105 PORT_WRITE(out_RETIRE_WRITE_RD [i],_queue[index ]._write_rd);106 PORT_WRITE(out_RETIRE_NUM_REG_RD [i],_queue[index ]._num_reg_rd);107 PORT_WRITE(out_RETIRE_WRITE_RE [i],_queue[index ]._write_re);108 PORT_WRITE(out_RETIRE_NUM_REG_RE [i],_queue[index ]._num_reg_re);100 PORT_WRITE(out_RETIRE_ROB_ID [i],_queue[index_find]._rob_id); 101 PORT_WRITE(out_RETIRE_OPERATION [i],_queue[index_find]._operation); 102 PORT_WRITE(out_RETIRE_TYPE [i],_queue[index_find]._type); 103 PORT_WRITE(out_RETIRE_HAS_IMMEDIAT [i],_queue[index_find]._has_immediat); 104 PORT_WRITE(out_RETIRE_IMMEDIAT [i],_queue[index_find]._immediat); 105 PORT_WRITE(out_RETIRE_DATA_RA [i],_queue[index_find]._data_ra); 106 PORT_WRITE(out_RETIRE_DATA_RB [i],_queue[index_find]._data_rb); 107 PORT_WRITE(out_RETIRE_DATA_RC [i],_queue[index_find]._data_rc); 108 PORT_WRITE(out_RETIRE_WRITE_RD [i],_queue[index_find]._write_rd); 109 PORT_WRITE(out_RETIRE_NUM_REG_RD [i],_queue[index_find]._num_reg_rd); 110 PORT_WRITE(out_RETIRE_WRITE_RE [i],_queue[index_find]._write_re); 111 PORT_WRITE(out_RETIRE_NUM_REG_RE [i],_queue[index_find]._num_reg_re); 109 112 } 110 113 }
Note: See TracChangeset
for help on using the changeset viewer.