Rev 120 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 120 | Rev 121 | ||
---|---|---|---|
Line 94... | Line 94... | ||
94 | wire mp3_dat; |
94 | wire mp3_dat; |
95 | wire mp3_sync; |
95 | wire mp3_sync; |
96 | 96 | ||
97 | wire led; |
97 | wire led; |
98 | 98 | ||
- | 99 | int autoinc_ena = 0; |
|
- | 100 | ||
99 | 101 | ||
100 | tri1 [7:0] zxd; |
102 | tri1 [7:0] zxd; |
101 | 103 | ||
102 | wire [7:0] zxin; |
104 | wire [7:0] zxin; |
103 | reg [7:0] zxout; |
105 | reg [7:0] zxout; |
Line 382... | Line 384... | ||
382 | endtask |
384 | endtask |
383 | 385 | ||
384 | 386 | ||
385 | task rom_check; |
387 | task rom_check; |
386 | 388 | ||
387 | int addr; |
389 | int addr = 0; |
388 | int wrdata; |
390 | int wrdata; |
389 | int rddata; |
391 | int rddata; |
390 | reg [7:0] tmp; |
392 | reg [7:0] tmp; |
391 | int rnd; |
393 | int rnd; |
392 | 394 | ||
- | 395 | int read_nwrite; |
|
- | 396 | int addr_init_num = (-1); |
|
- | 397 | int autoinc; |
|
- | 398 | int old_autoinc = 0; |
|
- | 399 | int access_num; |
|
- | 400 | ||
- | 401 | int i; |
|
393 | 402 | ||
394 | 403 | ||
395 | forever |
404 | forever |
396 | begin |
405 | begin |
397 | addr = $random; |
- | |
398 | rnd = $random; |
406 | // get some random numbers and decide what to do |
399 | 407 | ||
- | 408 | read_nwrite = $random>>31; |
|
- | 409 | ||
400 | if( rnd[31] ) |
410 | if( addr_init_num<0 ) |
401 | begin : write |
411 | addr_init_num = 3; |
- | 412 | else |
|
402 | wrdata = $random>>24; |
413 | addr_init_num = $random>>30; |
403 | 414 | ||
404 | iowr(.addr(8'hB3),.data(addr>>16)); |
- | |
405 | iowr(.addr(8'hB3),.data(addr>>8)); |
415 | autoinc = $random>>31; |
406 | iowr(.addr(8'hB3),.data(addr)); |
- | |
407 | 416 | ||
- | 417 | access_num = 1 + ($random>>28); // 1..16 |
|
- | 418 | ||
- | 419 | ||
- | 420 | // start doing that |
|
408 | iowr(.addr(8'hBB),.data(wrdata)); |
421 | if( autoinc!=old_autoinc ) |
- | 422 | begin |
|
409 | iowr(.addr(8'hBB),.data(wrdata)); |
423 | iowr( .addr(8'h33), .data( autoinc ? 8'h20 : 8'h00 ) ); |
- | 424 | old_autoinc = autoinc; |
|
410 | end |
425 | end |
411 | else |
- | |
412 | begin : read |
- | |
413 | iowr(.addr(8'hB3),.data(addr>>16)); |
- | |
414 | iowr(.addr(8'hB3),.data(addr>>8)); |
- | |
415 | iowr(.addr(8'hB3),.data(addr)); |
- | |
416 | 426 | ||
- | 427 | for(i=0;i<addr_init_num;i=i+1) |
|
- | 428 | begin |
|
- | 429 | rnd = $random>>24; |
|
- | 430 | ||
- | 431 | addr[i*8 +: 8] = rnd[7:0]; |
|
417 | iord(.addr(8'hBB),.data(tmp)); |
432 | iowr( .addr(8'hB3), .data( rnd[7:0] ) ); |
- | 433 | end |
|
- | 434 | ||
- | 435 | if( read_nwrite ) |
|
- | 436 | begin : read |
|
- | 437 | for(i=0;i<access_num;i=i+1) |
|
418 | iord(.addr(8'hBB),.data(tmp)); |
438 | iord( .addr(8'hBB), .data(tmp) ); |
419 | end |
439 | end |
- | 440 | else |
|
- | 441 | begin : write |
|
- | 442 | for(i=0;i<access_num;i=i+1) |
|
- | 443 | iowr( .addr(8'hBB), .data($random>>24) ); |
|
- | 444 | end |
|
420 | end |
445 | end |
421 | 446 | ||
422 | endtask |
447 | endtask |
423 | 448 | ||
424 | 449 | ||
Line 498... | Line 523... | ||
498 | else |
523 | else |
499 | begin |
524 | begin |
500 | very_first_read = 0; |
525 | very_first_read = 0; |
501 | end |
526 | end |
502 | 527 | ||
503 | rom_addr++; |
528 | if( autoinc_ena ) rom_addr++; |
504 | end |
529 | end |
505 | end |
530 | end |
506 | 531 | ||
507 | endtask |
532 | endtask |
508 | // |
533 | // |
Line 511... | Line 536... | ||
511 | input [7:0] addr; |
536 | input [7:0] addr; |
512 | input [7:0] data; |
537 | input [7:0] data; |
513 | 538 | ||
514 | begin |
539 | begin |
515 | 540 | ||
- | 541 | if( addr==8'h33 ) |
|
- | 542 | begin |
|
- | 543 | autoinc_ena = data[5]; |
|
- | 544 | end |
|
- | 545 | ||
516 | if( addr==8'hB3 ) |
546 | if( addr==8'hB3 ) |
517 | begin |
547 | begin |
518 | rom_addr[rom_phase*8 +: 8] = data[7:0]; |
548 | rom_addr[rom_phase*8 +: 8] = data[7:0]; |
519 | rom_phase = (rom_phase>=2) ? 0 : (rom_phase+1); |
549 | rom_phase = (rom_phase>=2) ? 0 : (rom_phase+1); |
520 | end |
550 | end |
Line 525... | Line 555... | ||
525 | end |
555 | end |
526 | 556 | ||
527 | if( addr==8'hBB ) |
557 | if( addr==8'hBB ) |
528 | begin |
558 | begin |
529 | wr_queue.push_back((rom_addr<<8)|data[7:0]); |
559 | wr_queue.push_back((rom_addr<<8)|data[7:0]); |
530 | rom_addr++; |
560 | if( autoinc_ena ) rom_addr++; |
531 | end |
561 | end |
532 | 562 | ||
533 | 563 | ||
534 | @(posedge clk_zx); |
564 | @(posedge clk_zx); |
535 | 565 |