Changeset 88 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp
- Timestamp:
- Dec 10, 2008, 7:31:39 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp
r82 r88 7 7 */ 8 8 9 #define NB_ITERATION 110 #define CYCLE_MAX (128*NB_ITERATION)11 12 9 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/include/test.h" 13 #include "Common/include/Test.h"14 10 #include "Common/include/BitManipulation.h" 15 11 #include "Behavioural/include/Allocation.h" … … 78 74 #endif 79 75 76 Tusage_t _usage = USE_ALL; 77 78 // _usage = usage_unset(_usage,USE_SYSTEMC ); 79 // _usage = usage_unset(_usage,USE_VHDL ); 80 // _usage = usage_unset(_usage,USE_VHDL_TESTBENCH ); 81 // _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT); 82 // _usage = usage_unset(_usage,USE_POSITION ); 83 _usage = usage_unset(_usage,USE_STATISTICS ); 84 // _usage = usage_unset(_usage,USE_INFORMATION ); 85 80 86 Execution_unit_to_Write_unit * _Execution_unit_to_Write_unit = new Execution_unit_to_Write_unit 81 87 (name.c_str(), … … 84 90 #endif 85 91 _param, 86 USE_ALL);92 _usage); 87 93 88 94 #ifdef SYSTEMC … … 95 101 sc_signal<Tcontrol_t> * in_NRESET = new sc_signal<Tcontrol_t> ("NRESET"); 96 102 97 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_VAL ," in_EXECUTE_UNIT_OUT_VAL ",Tcontrol_t ,_param->_nb_execute_unit); 98 ALLOC1_SC_SIGNAL(out_EXECUTE_UNIT_OUT_ACK ,"out_EXECUTE_UNIT_OUT_ACK ",Tcontrol_t ,_param->_nb_execute_unit); 99 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_CONTEXT_ID ," in_EXECUTE_UNIT_OUT_CONTEXT_ID ",Tcontext_t ,_param->_nb_execute_unit); 100 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_FRONT_END_ID ," in_EXECUTE_UNIT_OUT_FRONT_END_ID ",Tcontext_t ,_param->_nb_execute_unit); 101 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID," in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID",Tcontext_t ,_param->_nb_execute_unit); 102 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_PACKET_ID ," in_EXECUTE_UNIT_OUT_PACKET_ID ",Tpacket_t ,_param->_nb_execute_unit); 103 //ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OPERATION ," in_EXECUTE_UNIT_OUT_OPERATION ",Toperation_t ,_param->_nb_execute_unit); 104 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_TYPE ," in_EXECUTE_UNIT_OUT_TYPE ",Ttype_t ,_param->_nb_execute_unit); 105 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RD ," in_EXECUTE_UNIT_OUT_WRITE_RD ",Tcontrol_t ,_param->_nb_execute_unit); 106 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RD ," in_EXECUTE_UNIT_OUT_NUM_REG_RD ",Tgeneral_address_t,_param->_nb_execute_unit); 107 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RD ," in_EXECUTE_UNIT_OUT_DATA_RD ",Tgeneral_data_t ,_param->_nb_execute_unit); 108 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RE ," in_EXECUTE_UNIT_OUT_WRITE_RE ",Tcontrol_t ,_param->_nb_execute_unit); 109 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RE ," in_EXECUTE_UNIT_OUT_NUM_REG_RE ",Tspecial_address_t,_param->_nb_execute_unit); 110 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RE ," in_EXECUTE_UNIT_OUT_DATA_RE ",Tspecial_data_t ,_param->_nb_execute_unit); 111 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_EXCEPTION ," in_EXECUTE_UNIT_OUT_EXCEPTION ",Texception_t ,_param->_nb_execute_unit); 112 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NO_SEQUENCE ," in_EXECUTE_UNIT_OUT_NO_SEQUENCE ",Tcontrol_t ,_param->_nb_execute_unit); 113 ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_ADDRESS ," in_EXECUTE_UNIT_OUT_ADDRESS ",Tgeneral_data_t ,_param->_nb_execute_unit); 103 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_VAL ," in_EXECUTE_UNIT_OUT_VAL ",Tcontrol_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 104 ALLOC2_SC_SIGNAL(out_EXECUTE_UNIT_OUT_ACK ,"out_EXECUTE_UNIT_OUT_ACK ",Tcontrol_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 105 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_CONTEXT_ID ," in_EXECUTE_UNIT_OUT_CONTEXT_ID ",Tcontext_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 106 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_FRONT_END_ID ," in_EXECUTE_UNIT_OUT_FRONT_END_ID ",Tcontext_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 107 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID," in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID",Tcontext_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 108 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_PACKET_ID ," in_EXECUTE_UNIT_OUT_PACKET_ID ",Tpacket_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 109 //ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OPERATION ," in_EXECUTE_UNIT_OUT_OPERATION ",Toperation_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 110 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_TYPE ," in_EXECUTE_UNIT_OUT_TYPE ",Ttype_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 111 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RD ," in_EXECUTE_UNIT_OUT_WRITE_RD ",Tcontrol_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 112 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RD ," in_EXECUTE_UNIT_OUT_NUM_REG_RD ",Tgeneral_address_t,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 113 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RD ," in_EXECUTE_UNIT_OUT_DATA_RD ",Tgeneral_data_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 114 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RE ," in_EXECUTE_UNIT_OUT_WRITE_RE ",Tcontrol_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 115 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RE ," in_EXECUTE_UNIT_OUT_NUM_REG_RE ",Tspecial_address_t,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 116 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RE ," in_EXECUTE_UNIT_OUT_DATA_RE ",Tspecial_data_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 117 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_EXCEPTION ," in_EXECUTE_UNIT_OUT_EXCEPTION ",Texception_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 118 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NO_SEQUENCE ," in_EXECUTE_UNIT_OUT_NO_SEQUENCE ",Tcontrol_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 119 ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_ADDRESS ," in_EXECUTE_UNIT_OUT_ADDRESS ",Tgeneral_data_t ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 120 114 121 ALLOC1_SC_SIGNAL(out_WRITE_UNIT_IN_VAL ,"out_WRITE_UNIT_IN_VAL ",Tcontrol_t ,_param->_nb_write_unit ); 115 122 ALLOC1_SC_SIGNAL( in_WRITE_UNIT_IN_ACK ," in_WRITE_UNIT_IN_ACK ",Tcontrol_t ,_param->_nb_write_unit ); … … 139 146 (*(_Execution_unit_to_Write_unit->in_NRESET)) (*(in_NRESET)); 140 147 141 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_VAL ,_param->_nb_execute_unit);142 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_EXECUTE_UNIT_OUT_ACK ,_param->_nb_execute_unit);148 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_VAL ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 149 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit,out_EXECUTE_UNIT_OUT_ACK ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 143 150 if (_param->_have_port_context_id) 144 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_CONTEXT_ID ,_param->_nb_execute_unit);151 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_CONTEXT_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 145 152 if (_param->_have_port_front_end_id) 146 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_FRONT_END_ID ,_param->_nb_execute_unit);153 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_FRONT_END_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 147 154 if (_param->_have_port_ooo_engine_id) 148 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID,_param->_nb_execute_unit);149 if (_param->_have_port_ packet_id)150 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_PACKET_ID ,_param->_nb_execute_unit);151 //INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OPERATION ,_param->_nb_execute_unit);152 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_TYPE ,_param->_nb_execute_unit);153 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RD ,_param->_nb_execute_unit);154 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RD ,_param->_nb_execute_unit);155 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RD ,_param->_nb_execute_unit);156 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RE ,_param->_nb_execute_unit);157 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RE ,_param->_nb_execute_unit);158 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RE ,_param->_nb_execute_unit);159 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_EXCEPTION ,_param->_nb_execute_unit);160 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NO_SEQUENCE ,_param->_nb_execute_unit);161 INSTANCE 1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_ADDRESS ,_param->_nb_execute_unit);155 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 156 if (_param->_have_port_rob_ptr ) 157 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_PACKET_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 158 //INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OPERATION ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 159 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_TYPE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 160 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RD ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 161 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RD ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 162 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RD ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 163 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 164 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 165 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 166 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_EXCEPTION ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 167 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NO_SEQUENCE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 168 INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_ADDRESS ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 162 169 163 170 INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_VAL ,_param->_nb_write_unit ); … … 169 176 if (_param->_have_port_ooo_engine_id) 170 177 INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_OOO_ENGINE_ID ,_param->_nb_write_unit ); 171 if (_param->_have_port_ packet_id)178 if (_param->_have_port_rob_ptr ) 172 179 INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_PACKET_ID ,_param->_nb_write_unit ); 173 180 //INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_OPERATION ,_param->_nb_write_unit ); … … 201 208 const int32_t percent_transaction_out = 75; 202 209 203 set<Tcontext_t> execute_unit_thread [_param->_nb_execute_unit] ;210 set<Tcontext_t> execute_unit_thread [_param->_nb_execute_unit][_param->_max_nb_execute_unit_port]; 204 211 205 212 for (uint32_t i=0; i<_param->_nb_execute_unit; i++) 206 for (uint32_t j=0; j<_param->_nb_write_unit; j++) 207 if (_param->_table_routing[i][j]) 208 for (uint32_t k=0; k<_param->_nb_thread; k++) 209 if (_param->_table_thread[j][k]) 210 { 211 execute_unit_thread [i].insert(k); 212 } 213 for (uint32_t ii=0; ii<_param->_nb_execute_unit_port[i]; ii++) 214 for (uint32_t j=0; j<_param->_nb_write_unit; j++) 215 if (_param->_table_routing[i][ii][j]) 216 for (uint32_t k=0; k<_param->_nb_thread; k++) 217 if (_param->_table_thread[j][k]) 218 { 219 execute_unit_thread [i][ii].insert(k); 220 } 221 213 222 SC_START(0); 214 223 LABEL("Initialisation"); … … 225 234 LABEL("Iteration %d",iteration); 226 235 227 list<entry_t> request [_param->_nb_execute_unit] ;236 list<entry_t> request [_param->_nb_execute_unit][_param->_max_nb_execute_unit_port]; 228 237 229 238 uint32_t nb_request_in; 230 239 for (nb_request_in=0; nb_request_in < _param->_nb_packet; ) 231 240 for (uint32_t i=0; i<_param->_nb_execute_unit; i++) 232 { 233 if (nb_request_in >= _param->_nb_packet) 234 break; 235 236 Tcontext_t context_id ; 237 Tcontext_t front_end_id ; 238 Tcontext_t ooo_engine_id; 239 Tcontext_t num_thread ; 240 241 // Find compatible thread 242 do 243 { 244 context_id = range<Tcontext_t> (rand(), _param->_size_context_id ); 245 front_end_id = range<Tcontext_t> (rand(), _param->_size_front_end_id ); 246 ooo_engine_id = range<Tcontext_t> (rand(), _param->_size_ooo_engine_id); 247 num_thread = get_num_thread (context_id , _param->_size_context_id , 248 front_end_id , _param->_size_front_end_id , 249 ooo_engine_id, _param->_size_ooo_engine_id); 250 } 251 while (execute_unit_thread[i].find(num_thread) == execute_unit_thread[i].end()); 252 253 request[i].push_back(entry_t (context_id , 254 front_end_id , 255 ooo_engine_id, 256 nb_request_in, 257 //range<Toperation_t > (rand(), _param->_size_operation ), 258 range<Ttype_t > (rand(), _param->_size_type ), 259 range<Tcontrol_t > (rand(), 2 ), 260 range<Tgeneral_address_t> (rand(), _param->_size_general_register), 261 range<Tgeneral_data_t > (rand(), _param->_size_general_data ), 262 range<Tcontrol_t > (rand(), 2 ), 263 range<Tspecial_address_t> (rand(), _param->_size_special_register), 264 range<Tspecial_data_t > (rand(), _param->_size_special_data ), 265 range<Texception_t > (rand(), _param->_size_exception ), 266 range<Tcontrol_t > (rand(), 2 ), 267 range<Tgeneral_data_t > (rand(), _param->_size_general_data ) 268 )); 269 270 nb_request_in++; 271 } 241 for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++) 242 { 243 if (nb_request_in >= _param->_nb_packet) 244 break; 245 246 Tcontext_t context_id ; 247 Tcontext_t front_end_id ; 248 Tcontext_t ooo_engine_id; 249 Tcontext_t num_thread ; 250 251 // Find compatible thread 252 do 253 { 254 context_id = range<Tcontext_t> (rand(), _param->_size_context_id ); 255 front_end_id = range<Tcontext_t> (rand(), _param->_size_front_end_id ); 256 ooo_engine_id = range<Tcontext_t> (rand(), _param->_size_ooo_engine_id); 257 num_thread = get_num_thread (context_id , _param->_size_context_id , 258 front_end_id , _param->_size_front_end_id , 259 ooo_engine_id, _param->_size_ooo_engine_id); 260 } 261 while (execute_unit_thread[i][j].find(num_thread) == execute_unit_thread[i][j].end()); 262 263 request[i][j].push_back(entry_t (context_id , 264 front_end_id , 265 ooo_engine_id, 266 nb_request_in, 267 //range<Toperation_t > (rand(), _param->_size_operation ), 268 range<Ttype_t > (rand(), _param->_size_type ), 269 range<Tcontrol_t > (rand(), 2 ), 270 range<Tgeneral_address_t> (rand(), _param->_size_general_register), 271 range<Tgeneral_data_t > (rand(), _param->_size_general_data ), 272 range<Tcontrol_t > (rand(), 2 ), 273 range<Tspecial_address_t> (rand(), _param->_size_special_register), 274 range<Tspecial_data_t > (rand(), _param->_size_special_data ), 275 range<Texception_t > (rand(), _param->_size_exception ), 276 range<Tcontrol_t > (rand(), 2 ), 277 range<Tgeneral_data_t > (rand(), _param->_size_general_data ) 278 )); 279 280 nb_request_in++; 281 } 272 282 273 283 uint32_t nb_request_out = 0; … … 276 286 { 277 287 for (uint32_t i=0; i<_param->_nb_execute_unit; i++) 278 { 279 bool val = not request[i].empty() and ((rand()%100) < percent_transaction_in); 288 for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++) 289 { 290 bool val = not request[i][j].empty() and ((rand()%100) < percent_transaction_in); 280 291 281 in_EXECUTE_UNIT_OUT_VAL [i]->write(val);282 283 284 {285 in_EXECUTE_UNIT_OUT_CONTEXT_ID [i] ->write(request[i].front()._context_id );286 in_EXECUTE_UNIT_OUT_FRONT_END_ID [i] ->write(request[i].front()._front_end_id );287 in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [i] ->write(request[i].front()._ooo_engine_id );288 in_EXECUTE_UNIT_OUT_PACKET_ID [i] ->write(request[i].front()._packet_id );289 // in_EXECUTE_UNIT_OUT_OPERATION [i] ->write(request[i].front()._operation );290 in_EXECUTE_UNIT_OUT_TYPE [i] ->write(request[i].front()._type );291 in_EXECUTE_UNIT_OUT_WRITE_RD [i] ->write(request[i].front()._write_rd );292 in_EXECUTE_UNIT_OUT_NUM_REG_RD [i] ->write(request[i].front()._num_reg_rd );293 in_EXECUTE_UNIT_OUT_DATA_RD [i] ->write(request[i].front()._data_rd );294 in_EXECUTE_UNIT_OUT_WRITE_RE [i] ->write(request[i].front()._write_re );295 in_EXECUTE_UNIT_OUT_NUM_REG_RE [i] ->write(request[i].front()._num_reg_re );296 in_EXECUTE_UNIT_OUT_DATA_RE [i] ->write(request[i].front()._data_re );297 in_EXECUTE_UNIT_OUT_EXCEPTION [i] ->write(request[i].front()._exception );298 in_EXECUTE_UNIT_OUT_NO_SEQUENCE [i] ->write(request[i].front()._no_sequence );299 in_EXECUTE_UNIT_OUT_ADDRESS [i] ->write(request[i].front()._address );300 }301 }292 in_EXECUTE_UNIT_OUT_VAL [i][j]->write(val); 293 294 if (val) 295 { 296 in_EXECUTE_UNIT_OUT_CONTEXT_ID [i][j] ->write(request[i][j].front()._context_id ); 297 in_EXECUTE_UNIT_OUT_FRONT_END_ID [i][j] ->write(request[i][j].front()._front_end_id ); 298 in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [i][j] ->write(request[i][j].front()._ooo_engine_id ); 299 in_EXECUTE_UNIT_OUT_PACKET_ID [i][j] ->write(request[i][j].front()._packet_id ); 300 // in_EXECUTE_UNIT_OUT_OPERATION [i][j] ->write(request[i][j].front()._operation ); 301 in_EXECUTE_UNIT_OUT_TYPE [i][j] ->write(request[i][j].front()._type ); 302 in_EXECUTE_UNIT_OUT_WRITE_RD [i][j] ->write(request[i][j].front()._write_rd ); 303 in_EXECUTE_UNIT_OUT_NUM_REG_RD [i][j] ->write(request[i][j].front()._num_reg_rd ); 304 in_EXECUTE_UNIT_OUT_DATA_RD [i][j] ->write(request[i][j].front()._data_rd ); 305 in_EXECUTE_UNIT_OUT_WRITE_RE [i][j] ->write(request[i][j].front()._write_re ); 306 in_EXECUTE_UNIT_OUT_NUM_REG_RE [i][j] ->write(request[i][j].front()._num_reg_re ); 307 in_EXECUTE_UNIT_OUT_DATA_RE [i][j] ->write(request[i][j].front()._data_re ); 308 in_EXECUTE_UNIT_OUT_EXCEPTION [i][j] ->write(request[i][j].front()._exception ); 309 in_EXECUTE_UNIT_OUT_NO_SEQUENCE [i][j] ->write(request[i][j].front()._no_sequence ); 310 in_EXECUTE_UNIT_OUT_ADDRESS [i][j] ->write(request[i][j].front()._address ); 311 } 312 } 302 313 303 314 for (uint32_t i=0; i<_param->_nb_write_unit; i++) … … 307 318 308 319 for (uint32_t i=0; i<_param->_nb_execute_unit; i++) 309 if (in_EXECUTE_UNIT_OUT_VAL [i]->read() and out_EXECUTE_UNIT_OUT_ACK [i]->read()) 310 { 311 LABEL("EXECUTE_UNIT_OUT [%d] - Transaction accepted",i); 312 } 313 320 for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++) 321 if (in_EXECUTE_UNIT_OUT_VAL [i][j]->read() and out_EXECUTE_UNIT_OUT_ACK [i][j]->read()) 322 { 323 LABEL("EXECUTE_UNIT_OUT [%d][%d] - Transaction accepted",i,j); 324 } 325 314 326 for (uint32_t i=0; i<_param->_nb_write_unit; i++) 315 327 if (out_WRITE_UNIT_IN_VAL [i]->read() and in_WRITE_UNIT_IN_ACK [i]->read()) … … 318 330 nb_request_out ++; 319 331 320 Tpacket_t packet = (_param->_have_port_packet_id)?out_WRITE_UNIT_IN_PACKET_ID[i]->read():0; 321 LABEL(" * packet : %d",packet); 322 uint32_t execute_unit; 332 Tpacket_t packet = (_param->_have_port_rob_ptr )?out_WRITE_UNIT_IN_PACKET_ID[i]->read():0; 333 LABEL(" * packet : %d",packet); 323 334 324 335 // find execute_unit 325 for (execute_unit=0; execute_unit<_param->_nb_execute_unit; execute_unit++) 326 if (packet == ((_param->_have_port_packet_id)?request[execute_unit].front()._packet_id:0)) 327 break; 328 329 LABEL(" * execute_unit source : %d",execute_unit); 330 331 if (_param->_have_port_packet_id) 332 TEST(Tcontext_t ,out_WRITE_UNIT_IN_PACKET_ID [i]->read(), request[execute_unit].front()._packet_id ); 336 uint32_t x = 0; 337 uint32_t y = 0; 338 bool find = false; 339 for (x=0; x<_param->_nb_execute_unit; x++) 340 { 341 for (y=0; y<_param->_nb_execute_unit_port[x]; y++) 342 if (packet == ((_param->_have_port_rob_ptr )?request[x][y].front()._packet_id:0)) 343 { 344 find = true; 345 break; 346 } 347 if (find) 348 break; 349 } 350 351 LABEL(" * execute_unit source : %d",x); 352 LABEL(" * execute_unit port : %d",y); 353 TEST(bool,x<_param->_nb_execute_unit, true); 354 TEST(bool,y<_param->_nb_execute_unit_port[x],true); 355 356 if (_param->_have_port_rob_ptr ) 357 TEST(Tpacket_t ,packet , request[x][y].front()._packet_id ); 333 358 334 359 // Authorised link ? execute_unit -> write_unit 335 TEST(bool, _param->_table_routing[ execute_unit][i], true);360 TEST(bool, _param->_table_routing[x][y][i], true); 336 361 337 362 if (_param->_have_port_context_id) 338 TEST(Tcontext_t ,out_WRITE_UNIT_IN_CONTEXT_ID [i]->read(), request[ execute_unit].front()._context_id );363 TEST(Tcontext_t ,out_WRITE_UNIT_IN_CONTEXT_ID [i]->read(), request[x][y].front()._context_id ); 339 364 if (_param->_have_port_front_end_id) 340 TEST(Tcontext_t ,out_WRITE_UNIT_IN_FRONT_END_ID [i]->read(), request[ execute_unit].front()._front_end_id );365 TEST(Tcontext_t ,out_WRITE_UNIT_IN_FRONT_END_ID [i]->read(), request[x][y].front()._front_end_id ); 341 366 if (_param->_have_port_ooo_engine_id) 342 TEST(Tcontext_t ,out_WRITE_UNIT_IN_OOO_ENGINE_ID [i]->read(), request[ execute_unit].front()._ooo_engine_id );343 // TEST(Toperation_t ,out_WRITE_UNIT_IN_OPERATION [i]->read(), request[ execute_unit].front()._operation );344 TEST(Ttype_t ,out_WRITE_UNIT_IN_TYPE [i]->read(), request[ execute_unit].front()._type );345 TEST(Tcontrol_t ,out_WRITE_UNIT_IN_WRITE_RD [i]->read(), request[ execute_unit].front()._write_rd );346 TEST(Tgeneral_address_t,out_WRITE_UNIT_IN_NUM_REG_RD [i]->read(), request[ execute_unit].front()._num_reg_rd );347 TEST(Tgeneral_data_t ,out_WRITE_UNIT_IN_DATA_RD [i]->read(), request[ execute_unit].front()._data_rd );348 TEST(Tcontrol_t ,out_WRITE_UNIT_IN_WRITE_RE [i]->read(), request[ execute_unit].front()._write_re );349 TEST(Tspecial_address_t,out_WRITE_UNIT_IN_NUM_REG_RE [i]->read(), request[ execute_unit].front()._num_reg_re );350 TEST(Tspecial_data_t ,out_WRITE_UNIT_IN_DATA_RE [i]->read(), request[ execute_unit].front()._data_re );351 TEST(Texception_t ,out_WRITE_UNIT_IN_EXCEPTION [i]->read(), request[ execute_unit].front()._exception );352 TEST(Tcontrol_t ,out_WRITE_UNIT_IN_NO_SEQUENCE [i]->read(), request[ execute_unit].front()._no_sequence );353 TEST(Tgeneral_data_t ,out_WRITE_UNIT_IN_ADDRESS [i]->read(), request[ execute_unit].front()._address );367 TEST(Tcontext_t ,out_WRITE_UNIT_IN_OOO_ENGINE_ID [i]->read(), request[x][y].front()._ooo_engine_id ); 368 // TEST(Toperation_t ,out_WRITE_UNIT_IN_OPERATION [i]->read(), request[x][y].front()._operation ); 369 TEST(Ttype_t ,out_WRITE_UNIT_IN_TYPE [i]->read(), request[x][y].front()._type ); 370 TEST(Tcontrol_t ,out_WRITE_UNIT_IN_WRITE_RD [i]->read(), request[x][y].front()._write_rd ); 371 TEST(Tgeneral_address_t,out_WRITE_UNIT_IN_NUM_REG_RD [i]->read(), request[x][y].front()._num_reg_rd ); 372 TEST(Tgeneral_data_t ,out_WRITE_UNIT_IN_DATA_RD [i]->read(), request[x][y].front()._data_rd ); 373 TEST(Tcontrol_t ,out_WRITE_UNIT_IN_WRITE_RE [i]->read(), request[x][y].front()._write_re ); 374 TEST(Tspecial_address_t,out_WRITE_UNIT_IN_NUM_REG_RE [i]->read(), request[x][y].front()._num_reg_re ); 375 TEST(Tspecial_data_t ,out_WRITE_UNIT_IN_DATA_RE [i]->read(), request[x][y].front()._data_re ); 376 TEST(Texception_t ,out_WRITE_UNIT_IN_EXCEPTION [i]->read(), request[x][y].front()._exception ); 377 TEST(Tcontrol_t ,out_WRITE_UNIT_IN_NO_SEQUENCE [i]->read(), request[x][y].front()._no_sequence ); 378 TEST(Tgeneral_data_t ,out_WRITE_UNIT_IN_ADDRESS [i]->read(), request[x][y].front()._address ); 354 379 355 request[ execute_unit].pop_front();380 request[x][y].pop_front(); 356 381 } 357 382 SC_START(1); … … 372 397 delete in_NRESET; 373 398 374 delete [] in_EXECUTE_UNIT_OUT_VAL;375 delete [] out_EXECUTE_UNIT_OUT_ACK;376 delete [] in_EXECUTE_UNIT_OUT_CONTEXT_ID;377 delete [] in_EXECUTE_UNIT_OUT_FRONT_END_ID;378 delete [] in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID;379 delete [] in_EXECUTE_UNIT_OUT_PACKET_ID;380 // delete [] in_EXECUTE_UNIT_OUT_OPERATION;381 delete [] in_EXECUTE_UNIT_OUT_TYPE;382 delete [] in_EXECUTE_UNIT_OUT_WRITE_RD;383 delete [] in_EXECUTE_UNIT_OUT_NUM_REG_RD;384 delete [] in_EXECUTE_UNIT_OUT_DATA_RD;385 delete [] in_EXECUTE_UNIT_OUT_WRITE_RE;386 delete [] in_EXECUTE_UNIT_OUT_NUM_REG_RE;387 delete [] in_EXECUTE_UNIT_OUT_DATA_RE;388 delete [] in_EXECUTE_UNIT_OUT_EXCEPTION;389 delete [] in_EXECUTE_UNIT_OUT_NO_SEQUENCE;390 delete [] in_EXECUTE_UNIT_OUT_ADDRESS;391 392 delete [] out_WRITE_UNIT_IN_VAL;393 delete [] in_WRITE_UNIT_IN_ACK;394 delete [] out_WRITE_UNIT_IN_CONTEXT_ID;395 delete [] out_WRITE_UNIT_IN_FRONT_END_ID;396 delete [] out_WRITE_UNIT_IN_OOO_ENGINE_ID;397 delete [] out_WRITE_UNIT_IN_PACKET_ID;398 // delete [] out_WRITE_UNIT_IN_OPERATION;399 delete [] out_WRITE_UNIT_IN_TYPE;400 delete [] out_WRITE_UNIT_IN_WRITE_RD;401 delete [] out_WRITE_UNIT_IN_NUM_REG_RD;402 delete [] out_WRITE_UNIT_IN_DATA_RD;403 delete [] out_WRITE_UNIT_IN_WRITE_RE;404 delete [] out_WRITE_UNIT_IN_NUM_REG_RE;405 delete [] out_WRITE_UNIT_IN_DATA_RE;406 delete [] out_WRITE_UNIT_IN_EXCEPTION;407 delete [] out_WRITE_UNIT_IN_NO_SEQUENCE;408 delete [] out_WRITE_UNIT_IN_ADDRESS;399 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_VAL ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 400 DELETE2_SC_SIGNAL(out_EXECUTE_UNIT_OUT_ACK ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 401 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_CONTEXT_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 402 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_FRONT_END_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 403 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 404 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_PACKET_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 405 //DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OPERATION ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 406 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_TYPE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 407 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RD ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 408 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RD ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 409 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RD ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 410 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 411 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 412 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 413 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_EXCEPTION ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 414 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NO_SEQUENCE ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 415 DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_ADDRESS ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]); 416 417 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_VAL ,_param->_nb_write_unit ); 418 DELETE1_SC_SIGNAL( in_WRITE_UNIT_IN_ACK ,_param->_nb_write_unit ); 419 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_CONTEXT_ID ,_param->_nb_write_unit ); 420 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_FRONT_END_ID ,_param->_nb_write_unit ); 421 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_OOO_ENGINE_ID ,_param->_nb_write_unit ); 422 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_PACKET_ID ,_param->_nb_write_unit ); 423 //DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_OPERATION ,_param->_nb_write_unit ); 424 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_TYPE ,_param->_nb_write_unit ); 425 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_WRITE_RD ,_param->_nb_write_unit ); 426 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_NUM_REG_RD ,_param->_nb_write_unit ); 427 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_DATA_RD ,_param->_nb_write_unit ); 428 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_WRITE_RE ,_param->_nb_write_unit ); 429 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_NUM_REG_RE ,_param->_nb_write_unit ); 430 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_DATA_RE ,_param->_nb_write_unit ); 431 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_EXCEPTION ,_param->_nb_write_unit ); 432 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_NO_SEQUENCE ,_param->_nb_write_unit ); 433 DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_ADDRESS ,_param->_nb_write_unit ); 409 434 #endif 410 435
Note: See TracChangeset
for help on using the changeset viewer.