Changes in trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/SelfTest/src/test.cpp [23:15]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/SelfTest/src/test.cpp
r23 r15 9 9 #define NB_ITERATION 16 10 10 11 #define TEXT(str) do {cout << "<" << name << "> : " << str << endl;} while (0)12 11 #define LABEL(str) do {cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; _RegisterFile_Multi_Banked_Glue->vhdl_testbench_label(str);} while (0) 13 12 … … 19 18 morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters _param) 20 19 { 21 TEXT("Simulation SystemC");20 cout << "<" << name << "> : Simulation SystemC" << endl; 22 21 23 22 RegisterFile_Multi_Banked_Glue * _RegisterFile_Multi_Banked_Glue = new RegisterFile_Multi_Banked_Glue (name.c_str(), … … 193 192 ********************************************************/ 194 193 195 TEXT("Instanciation of _RegisterFile_Multi_Banked_Glue");194 cout << "<" << name << "> Instanciation of _RegisterFile_Multi_Banked_Glue" << endl; 196 195 197 196 (*(_RegisterFile_Multi_Banked_Glue->in_CLOCK)) (*(CLOCK)); … … 248 247 249 248 250 TEXT("Start Simulation ............");249 cout << "<" << name << "> Start Simulation ............" << endl; 251 250 252 251 /******************************************************** … … 266 265 267 266 uint32_t read_in_num_bank [_param._nb_port_read]; // Number of bank 268 Tcontrol_t read_is_busy [_param._nb_port_read]; 269 bool read_out_find [_param._nb_bank][_param._nb_port_read_by_bank]; 270 uint32_t read_out_port [_param._nb_bank][_param._nb_port_read_by_bank]; 271 267 //Tcontrol_t read_in_valid [_param._nb_port_read]; 272 268 Tcontrol_t read_in_ack [_param._nb_port_read]; // to test 273 269 Tdata_t read_in_data [_param._nb_port_read]; // to test 274 270 Tcontrol_t read_out_val [_param._nb_bank][_param._nb_port_read_by_bank]; 271 Tcontrol_t read_out_ack [_param._nb_bank][_param._nb_port_read_by_bank]; 275 272 Taddress_t read_out_address [_param._nb_bank][_param._nb_port_read_by_bank]; 276 Tcontrol_t read_select_val [_param._nb_bank][_param._nb_port_read_by_bank][_param._nb_port_read]; 273 Tcontrol_t read_is_busy [_param._nb_port_read]; 274 Tcontrol_t read_select_val [_param._nb_bank][_param._nb_port_read ]; 275 Tcontrol_t read_select_ack [_param._nb_bank][_param._nb_port_read ]; 277 276 278 277 LABEL("Loop of Test"); … … 282 281 LABEL("Iteration "+toString(iteration)); 283 282 284 //LABEL("Test read_in");283 LABEL("Test read_in"); 285 284 286 285 // Write in interface "read_in" … … 288 287 { 289 288 read_in_num_bank [i] = rand() % _param._nb_bank; 290 Tcontrol_t read_in_val = (rand() % 2) != 0;289 Tcontrol_t read_in_valid = (rand() % 2) != 0; 291 290 292 291 Taddress_t address = (read_in_num_bank[i] << _param._shift_address) | (gen_mask<Taddress_t>(_param._size_address-_param._shift_address) & i); 293 292 294 read_is_busy [i] = (read_in_val == 0); // invalid = busy 295 read_in_ack [i] = 0; // init 296 read_in_data [i] = 0; // init 297 READ_IN_VAL [i]->write(read_in_val); // write signal 298 READ_IN_ADDRESS [i]->write(address); // write signal 293 read_is_busy [i] = (read_in_valid == 0); 294 read_in_ack [i] = 0; 295 read_in_data [i] = 0; 296 READ_IN_VAL [i]->write(read_in_valid); 297 READ_IN_ADDRESS [i]->write(address); 298 299 for (uint32_t j=0; j<_param._nb_bank; j++) 300 read_select_ack [j][i] = 0; 299 301 } 300 302 303 for (uint32_t i=0; i<_param._nb_bank; i++) 304 for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++) 305 { 306 read_out_ack [i][j] = (rand() % 2) != 0; 307 READ_OUT_ACK [i][j]->write(read_out_ack [i][j]); 308 READ_OUT_DATA [i][j]->write((j<<1)|1); // (j<<1)|1 afin de n'avoir jamais 0 309 } 310 301 311 // compute the good read_select 302 312 for (uint32_t i=0; i<_param._nb_bank; i++) 303 313 for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++) 304 314 { 305 Tcontrol_t read_out_ack = (rand() % 2) != 0;306 READ_OUT_ACK [i][j]->write(read_out_ack);307 READ_OUT_DATA [i][j]->write((j<<1)|1); // (j<<1)|1 afin de n'avoir jamais 0308 309 read_out_find [i][j] = false;310 read_out_port [i][j] = 0;311 312 read_out_val [i][j] = 0;313 read_out_address [i][j] = 0;314 315 315 bool find = false; // have find a port_in to link with this port_out 316 316 for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++) 317 317 { 318 318 319 uint32_t num_port; // number of port 319 320 … … 322 323 num_port = k; 323 324 else 324 num_port = k*_param._nb_port_read_by_bank+j;325 326 read_select_val [i][ j][k] = read_out_ack and not read_is_busy [num_port] and (read_in_num_bank[num_port] == i); // select val if port is not busy and out accept a data327 Tcontrol_t read_select_ack = 0;328 329 // test a previousfind330 if (not ((read_out_ack == 0) || find))325 num_port = _param._link_port_read [i]; 326 327 read_select_val [i][num_port] = read_out_ack [i][j] && not read_is_busy [num_port]; 328 329 if ((read_out_ack [i][j] == 0) || find) 330 read_select_ack [i][num_port] = 0; // read_out is busy or already find 331 else 331 332 { 332 333 // find a busy port? 333 find = read_select_val;334 read_is_busy [num_port]|= find; // port became busy if find335 read_select_ack = find; // ack if find334 find = not read_is_busy [num_port]; 335 read_is_busy [num_port]|= find; 336 read_select_ack [i][num_port] = find; 336 337 337 338 if (find) 338 339 { 339 read_out_find [i][j] = true;340 read_out_port [i][j] = num_port;341 342 // know the good output343 340 read_in_ack [num_port] = 1; 344 341 read_in_data [num_port] = ((j<<1)|1); 345 342 read_out_val [i][j] = 1; 346 read_out_address [i][j] = ( i << _param._shift_address) | (gen_mask<Taddress_t>(_param._size_address-_param._shift_address) & num_port);343 read_out_address [i][j] = (read_in_num_bank[i] << _param._shift_address) | (gen_mask<Taddress_t>(_param._size_address-_param._shift_address) & i); 347 344 } 348 345 } 349 346 350 READ_SELECT_ACK [i][j][k]->write(read_select_ack );347 READ_SELECT_ACK [i][j][k]->write(read_select_ack [i][num_port]); 351 348 } 352 349 } … … 355 352 sc_start(1); 356 353 357 // test output 358 359 TEXT ("===== Test Output ====="); 360 for (uint32_t i=0; i<_param._nb_port_read; i++) 361 { 362 TEXT ("Read_in [" << i << "] : " 363 << READ_IN_VAL [i]->read() << "," 364 << read_in_ack [i] << " - " 365 << "Reg[" << READ_IN_ADDRESS [i]->read() << "] -> " 366 << read_in_data [i] << " " 367 << "{bank : " << read_in_num_bank[i] << "}" 368 ); 369 370 TEST (Tcontrol_t, read_in_ack [i], READ_IN_ACK [i]->read()); 371 if (READ_IN_VAL [i]->read() and READ_IN_ACK [i]->read()) 372 TEST (Tdata_t , read_in_data [i], READ_IN_DATA [i]->read()); 373 } 374 375 cout << endl; 376 for (uint32_t i=0; i<_param._nb_bank; i++) 377 for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++) 378 { 379 TEXT ("Read_out [" << i << "][" << j << "] : " 380 << read_out_val [i][j] << "," 381 << READ_OUT_ACK [i][j]->read() << " - " 382 << "Reg[" << read_out_address [i][j] << "] -> " 383 << READ_OUT_DATA [i][j]->read() << " - " 384 << "[" << read_out_find [i][j]<< " , " 385 << read_out_port [i][j] << "]" 386 ); 387 388 TEST (Tcontrol_t, read_out_val [i][j], READ_OUT_VAL [i][j]->read()); 389 if (READ_OUT_VAL [i][j]->read() and READ_OUT_ACK [i][j]->read()) 390 TEST (Taddress_t, read_out_address [i][j], READ_OUT_ADDRESS [i][j]->read()); 391 392 for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++) 393 { 394 uint32_t num_port; // number of port 395 396 // compute the good number of port 397 if (_param._crossbar == FULL_CROSSBAR) 398 num_port = k; 399 else 400 num_port = k*_param._nb_port_read_by_bank+j; 401 402 TEXT (" * Read_select [" << i << "][" << j << "][" << k << "] : " 403 << read_select_val [i][j][k] << "," 404 << READ_SELECT_ACK [i][j][k]->read() << " - " 405 << "link with read_in[" << num_port << "]" 406 ); 407 408 TEST (Tcontrol_t, read_select_val [i][j][k], READ_SELECT_VAL [i][j][k]->read()); 409 } 410 411 412 413 } 414 415 } 416 417 sc_start(0); 354 // // lot of test 355 // public : SC_OUT(Tcontrol_t) ** out_READ_IN_ACK ; 356 // public : SC_OUT(Tdata_t ) ** out_READ_IN_DATA ; 357 358 // public : SC_OUT(Tcontrol_t) **** out_READ_SELECT_VAL ; 359 360 // public : SC_OUT(Tcontrol_t) *** out_READ_OUT_VAL ; 361 // public : SC_OUT(Taddress_t) *** out_READ_OUT_ADDRESS ; 362 363 } 418 364 419 365 /******************************************************** … … 421 367 ********************************************************/ 422 368 423 TEXT("............ Stop Simulation");369 cout << "<" << name << "> ............ Stop Simulation" << endl; 424 370 425 371 delete CLOCK; 426 372 427 TEXT("delete read_in");428 373 for (uint32_t i=0; i<_param._nb_port_read; i++) 429 374 { 430 // TEXT("1, i " << i);431 375 delete READ_IN_VAL [i]; 432 // TEXT("2");433 376 delete READ_IN_ACK [i]; 434 // TEXT("3");435 377 delete READ_IN_ADDRESS [i]; 436 // TEXT("4");437 378 delete READ_IN_DATA [i]; 438 // TEXT("5");439 379 } 440 380 … … 444 384 delete READ_IN_DATA ; 445 385 446 TEXT("delete read_select");447 386 for (uint32_t i=0; i<_param._nb_bank; i++) 448 387 { … … 463 402 delete READ_SELECT_ACK; 464 403 465 TEXT("delete read_out");466 404 for (uint32_t i=0; i<_param._nb_bank; i++) 467 405 { … … 485 423 delete READ_OUT_DATA ; 486 424 487 TEXT("delete write_in");488 425 for (uint32_t i=0; i<_param._nb_port_write; i++) 489 426 { … … 499 436 delete WRITE_IN_DATA ; 500 437 501 TEXT("delete write_select");502 438 for (uint32_t i=0; i<_param._nb_bank; i++) 503 439 { … … 518 454 delete WRITE_SELECT_ACK; 519 455 520 TEXT("delete write_out");521 456 for (uint32_t i=0; i<_param._nb_bank; i++) 522 457 { … … 542 477 #endif 543 478 544 545 479 delete _RegisterFile_Multi_Banked_Glue; 546 480 }
Note: See TracChangeset
for help on using the changeset viewer.