Subversion Repositories ngs

Rev

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