Changeset 138 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit
- Timestamp:
- May 12, 2010, 7:34:01 PM (14 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Load_Store_pointer_unit.h
r131 r138 134 134 morpheo::behavioural::Tusage_t usage 135 135 ); 136 public : ~Load_Store_pointer_unit(void);137 136 public : ~Load_Store_pointer_unit (void); 137 138 138 private : void allocation ( 139 139 #ifdef STATISTICS … … 146 146 147 147 #ifdef SYSTEMC 148 public : void constant (void);148 public : void constant (void); 149 149 public : void transition (void); 150 150 public : void genMealy_insert (void); 151 151 public : void genMealy_retire (void); 152 #endif 152 #endif 153 153 154 #if VHDL 154 #if VHDL 155 155 public : void vhdl (void); 156 156 private : void vhdl_declaration (Vhdl * & vhdl); 157 157 private : void vhdl_body (Vhdl * & vhdl); 158 #endif 158 #endif 159 159 160 160 #ifdef STATISTICS -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_genMealy_insert.cpp
r123 r138 54 54 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * INSERT [%d]",i); 55 55 56 Tcontrol_t ack = false; 56 Tcontrol_t ack = false; 57 bool find = false; 57 58 58 if ((PORT_READ(in_INSERT_VAL [i]) == true ) and 59 (PORT_READ(in_INSERT_TYPE [i]) == TYPE_MEMORY)) 60 { 61 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * type is memory"); 62 63 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_INSERT_FRONT_END_ID [i]):0; 64 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_INSERT_CONTEXT_ID [i]):0; 65 uint32_t lsq = _param->_link_load_store_unit_with_thread[front_end_id][context_id]; 66 59 if (PORT_READ(in_INSERT_VAL [i]) == true) 60 { 61 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_INSERT_FRONT_END_ID [i]):0; 62 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_INSERT_CONTEXT_ID [i]):0; 63 uint32_t lsq = _param->_link_load_store_unit_with_thread[front_end_id][context_id]; 64 67 65 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * front_end_id : %d",front_end_id); 68 66 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * context_id : %d",context_id ); 69 67 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * lsq : %d",lsq ); 68 69 PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_WRITE [i], STORE_QUEUE_PTR_WRITE [lsq]); 70 // PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_READ [i], ((reg_STORE_QUEUE_PTR_READ [front_end_id][context_id]+1)%_param->_size_load_queue[lsq])); 71 PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_READ [i], reg_STORE_QUEUE_PTR_READ [front_end_id][context_id]); 72 PORT_WRITE(out_INSERT_STORE_QUEUE_EMPTY [i], reg_STORE_QUEUE_EMPTY [front_end_id][context_id]); 73 if (_param->_have_port_load_queue_ptr) 74 PORT_WRITE(out_INSERT_LOAD_QUEUE_PTR_WRITE [i], LOAD_QUEUE_PTR_WRITE [lsq]); 70 75 71 // Test if a previous instruction use the same lsq 72 // Authorize once memory access by load store unit 73 if (nb_use_lsq [lsq] > 0) 74 { 75 nb_use_lsq [lsq] --; 76 if (PORT_READ(in_INSERT_TYPE [i]) == TYPE_MEMORY) 77 { 78 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * type is memory"); 79 80 find = true; 81 82 // Test if a previous instruction use the same lsq 83 // Authorize once memory access by load store unit 84 if (nb_use_lsq [lsq] > 0) 85 { 86 nb_use_lsq [lsq] --; 87 88 uint32_t ptr; 89 90 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * sq_ptr_write : %d",STORE_QUEUE_PTR_WRITE [lsq]); 91 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * lq_ptr_write : %d",LOAD_QUEUE_PTR_WRITE [lsq]); 92 93 // operation became of decod_stage. Also operation is != store_head_ok and store_head_ko 94 if (is_operation_memory_store(PORT_READ(in_INSERT_OPERATION [i]))) 95 { 96 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * USE_STORE_QUEUE"); 97 98 internal_INSERT_OPERATION_USE [i] = OPERATION_USE_STORE_QUEUE; 99 100 ptr = STORE_QUEUE_PTR_WRITE [lsq]; 101 ack = not STORE_QUEUE_USE [lsq][ptr] and (static_cast<uint32_t>(STORE_QUEUE_NB_USE [lsq]+1) < _param->_size_store_queue[lsq]); 102 103 if (ack) 104 { 105 STORE_QUEUE_PTR_WRITE [lsq] = (ptr+1)%_param->_size_store_queue[lsq]; 106 STORE_QUEUE_NB_USE [lsq] ++; 107 STORE_QUEUE_USE [lsq][ptr] = true; 108 } 109 } 110 else 111 { 112 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * USE_LOAD_QUEUE"); 113 114 internal_INSERT_OPERATION_USE [i] = OPERATION_USE_LOAD_QUEUE; 115 116 ptr = LOAD_QUEUE_PTR_WRITE [lsq]; 117 ack = (not LOAD_QUEUE_USE [lsq][ptr]); 118 119 if (ack) 120 { 121 LOAD_QUEUE_PTR_WRITE [lsq] = (ptr+1)%_param->_size_load_queue[lsq]; 122 LOAD_QUEUE_USE [lsq][ptr] = true; 123 } 124 } 125 126 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * ptr : %d",ptr ); 127 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * ack : %d",ack ); 128 129 internal_INSERT_LSQ [i] = lsq; 130 internal_INSERT_PTR [i] = ptr; 131 } 132 } 133 } 76 134 77 uint32_t ptr; 135 if (not find) 136 { 137 ack = true; 138 139 internal_INSERT_OPERATION_USE [i] = OPERATION_USE_NONE; 140 } 78 141 79 PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_WRITE [i], STORE_QUEUE_PTR_WRITE [lsq]);80 // PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_READ [i], ((reg_STORE_QUEUE_PTR_READ [front_end_id][context_id]+1)%_param->_size_load_queue[lsq]));81 PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_READ [i], reg_STORE_QUEUE_PTR_READ [front_end_id][context_id]);82 PORT_WRITE(out_INSERT_STORE_QUEUE_EMPTY [i], reg_STORE_QUEUE_EMPTY [front_end_id][context_id]);83 if (_param->_have_port_load_queue_ptr)84 PORT_WRITE(out_INSERT_LOAD_QUEUE_PTR_WRITE [i], LOAD_QUEUE_PTR_WRITE [lsq]);85 86 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * sq_ptr_write : %d",STORE_QUEUE_PTR_WRITE [lsq]);87 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * lq_ptr_write : %d",LOAD_QUEUE_PTR_WRITE [lsq]);88 89 // operation became of decod_stage. Also operation is != store_head_ok and store_head_ko90 if (is_operation_memory_store(PORT_READ(in_INSERT_OPERATION [i])))91 {92 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * USE_STORE_QUEUE");93 94 internal_INSERT_OPERATION_USE [i] = OPERATION_USE_STORE_QUEUE;95 96 ptr = STORE_QUEUE_PTR_WRITE [lsq];97 ack = not STORE_QUEUE_USE [lsq][ptr] and (static_cast<uint32_t>(STORE_QUEUE_NB_USE [lsq]+1) < _param->_size_store_queue[lsq]);98 99 if (ack)100 {101 STORE_QUEUE_PTR_WRITE [lsq] = (ptr+1)%_param->_size_store_queue[lsq];102 STORE_QUEUE_NB_USE [lsq] ++;103 STORE_QUEUE_USE [lsq][ptr] = true;104 }105 }106 else107 {108 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * USE_LOAD_QUEUE");109 110 internal_INSERT_OPERATION_USE [i] = OPERATION_USE_LOAD_QUEUE;111 112 ptr = LOAD_QUEUE_PTR_WRITE [lsq];113 ack = (not LOAD_QUEUE_USE [lsq][ptr]);114 115 if (ack)116 {117 LOAD_QUEUE_PTR_WRITE [lsq] = (ptr+1)%_param->_size_load_queue[lsq];118 LOAD_QUEUE_USE [lsq][ptr] = true;119 }120 }121 122 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * ptr : %d",ptr );123 log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * ack : %d",ack );124 125 internal_INSERT_LSQ [i] = lsq;126 internal_INSERT_PTR [i] = ptr;127 }128 }129 else130 {131 ack = true;132 133 internal_INSERT_OPERATION_USE [i] = OPERATION_USE_NONE;134 }135 142 136 143 // Write output … … 142 149 for (uint32_t i=0; i<_param->_nb_inst_insert; i++) 143 150 internal_INSERT_ACK [i] = 0; 144 145 151 } 146 152
Note: See TracChangeset
for help on using the changeset viewer.