Changeset 122 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_transition.cpp
- Timestamp:
- Jun 3, 2009, 10:15:51 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_transition.cpp
r110 r122 38 38 reg_LOAD_QUEUE_USE [i][j] = false; 39 39 } 40 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 41 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 42 { 43 reg_STORE_QUEUE_PTR_READ [i][j] = 0; 44 reg_STORE_QUEUE_EMPTY [i][j] = true; 45 } 40 46 } 41 47 else … … 56 62 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * use STORE_QUEUE"); 57 63 64 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_INSERT_FRONT_END_ID [i]):0; 65 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_INSERT_CONTEXT_ID [i]):0; 58 66 uint32_t lsq = internal_INSERT_LSQ [i]; 59 67 Tlsq_ptr_t ptr = internal_INSERT_PTR [i]; … … 62 70 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * ptr : %d",ptr); 63 71 72 reg_STORE_QUEUE_EMPTY [front_end_id][context_id] = false; // new element 64 73 reg_STORE_QUEUE_PTR_WRITE [lsq] = (ptr+1)%_param->_size_store_queue[lsq]; 65 74 reg_STORE_QUEUE_NB_USE [lsq] ++; … … 109 118 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * lsq : %d",lsq); 110 119 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * ptr : %d",ptr); 111 120 121 // TODO : if ROB retire ooo context, can retire store ooo. 122 112 123 // reg_STORE_QUEUE_PTR_WRITE [lsq] = ((ptr==0)?_param->_size_store_queue[lsq]:ptr)-1; 113 124 reg_STORE_QUEUE_NB_USE [lsq] --; … … 137 148 } 138 149 } 150 151 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 152 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 153 { 154 uint32_t lsq = _param->_link_load_store_unit_with_thread[i][j]; 155 156 if (PORT_READ(in_RETIRE_EVENT_STATE [i][j]) == EVENT_STATE_NO_EVENT) 157 { 158 uint32_t ptr_old = reg_STORE_QUEUE_PTR_READ[i][j]; 159 uint32_t ptr_new = (reg_STORE_QUEUE_PTR_READ[i][j]+1)%_param->_size_store_queue[lsq]; 160 161 if ((reg_STORE_QUEUE_USE [lsq][ptr_old] == false) and 162 (reg_STORE_QUEUE_EMPTY [i][j] == false)) 163 { 164 reg_STORE_QUEUE_PTR_READ [i][j] = ptr_new; 165 if (ptr_new == reg_STORE_QUEUE_PTR_WRITE [lsq]) 166 reg_STORE_QUEUE_EMPTY [i][j] = true; 167 } 168 } 169 170 if (PORT_READ(in_RETIRE_EVENT_VAL[i][j]) and internal_RETIRE_EVENT_ACK [i][j]) 171 if (PORT_READ(in_RETIRE_EVENT_STATE [i][j]) == EVENT_STATE_EVENT) 172 { 173 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * EVENT [%d][%d]",i,j); 174 175 // reset ptr_read 176 reg_STORE_QUEUE_PTR_READ [i][j] = reg_STORE_QUEUE_PTR_WRITE [lsq]; 177 reg_STORE_QUEUE_EMPTY [i][j] = true; 178 } 179 } 139 180 } 140 181 141 182 // =================================================================== 142 183 // =====[ OTHER ]===================================================== … … 150 191 { 151 192 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * Load_Store_unit [%d]",i); 193 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_LOAD_QUEUE_PTR_WRITE : %d", reg_LOAD_QUEUE_PTR_WRITE [i]); 194 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_LOAD_QUEUE_USE :"); 195 for (uint32_t j=0; j<_param->_size_load_queue [i]; ++j) 196 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," [%d] %d",j,reg_LOAD_QUEUE_USE [i][j]); 152 197 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_STORE_QUEUE_NB_USE : %d", reg_STORE_QUEUE_NB_USE [i]); 153 198 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_STORE_QUEUE_PTR_WRITE : %d", reg_STORE_QUEUE_PTR_WRITE[i]); … … 155 200 for (uint32_t j=0; j<_param->_size_store_queue [i]; ++j) 156 201 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," [%d] %d",j,reg_STORE_QUEUE_USE [i][j]); 157 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_LOAD_QUEUE_PTR_WRITE : %d", reg_LOAD_QUEUE_PTR_WRITE [i]);158 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_LOAD_QUEUE_USE :");159 for (uint32_t j=0; j<_param->_size_load_queue [i]; ++j)160 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," [%d] %d",j,reg_LOAD_QUEUE_USE [i][j]);161 202 } 203 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 204 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 205 { 206 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_STORE_QUEUE_PTR_READ [%d][%d] : %d",i,j,reg_STORE_QUEUE_PTR_READ [i][j]); 207 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * reg_STORE_QUEUE_EMPTY [%d][%d] : %d",i,j,reg_STORE_QUEUE_EMPTY [i][j]); 208 } 162 209 } 163 210 #endif
Note: See TracChangeset
for help on using the changeset viewer.