OpenCores
URL https://opencores.org/ocsvn/ac97/ac97/trunk

Subversion Repositories ac97

[/] [ac97/] [trunk/] [bench/] [verilog/] [tests.v] - Diff between revs 7 and 10

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 7 Rev 10
Line 35... Line 35...
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
 
 
//  CVS Log
//  CVS Log
//
//
//  $Id: tests.v,v 1.1 2002-02-13 08:22:32 rudi Exp $
//  $Id: tests.v,v 1.2 2002-03-05 04:44:04 rudi Exp $
//
//
//  $Date: 2002-02-13 08:22:32 $
//  $Date: 2002-03-05 04:44:04 $
//  $Revision: 1.1 $
//  $Revision: 1.2 $
//  $Author: rudi $
//  $Author: rudi $
//  $Locker:  $
//  $Locker:  $
//  $State: Exp $
//  $State: Exp $
//
//
// Change History:
// Change History:
//               $Log: not supported by cvs2svn $
//               $Log: not supported by cvs2svn $
 
//               Revision 1.1  2002/02/13 08:22:32  rudi
 
//
 
//               Added test bench for public release
 
//
//
//
//
//
//                        
//                        
 
 
 
 
Line 125... Line 129...
                repeat(2)       @(posedge sync);
                repeat(2)       @(posedge sync);
 
 
                for(n=0;n<75;n=n+1)
                for(n=0;n<75;n=n+1)
                   begin
                   begin
                        @(negedge sync);
                        @(negedge sync);
                        repeat(230)     @(posedge bit_clk);
                        //repeat(230)   @(posedge bit_clk);
 
                        repeat(130)     @(posedge bit_clk);
 
 
                        repeat(n)       @(posedge bit_clk);
                        repeat(n)       @(posedge bit_clk);
 
 
                        while(wb_busy)  @(posedge clk);
                        while(wb_busy)  @(posedge clk);
                        wb_busy = 1;
                        wb_busy = 1;
Line 408... Line 413...
                repeat(2)       @(posedge sync);
                repeat(2)       @(posedge sync);
 
 
                for(n=0;n<75;n=n+1)
                for(n=0;n<75;n=n+1)
                   begin
                   begin
                        @(negedge sync);
                        @(negedge sync);
                        repeat(230)     @(posedge bit_clk);
                        //repeat(230)   @(posedge bit_clk);
 
                        repeat(130)     @(posedge bit_clk);
 
 
                        repeat(n)       @(posedge bit_clk);
                        repeat(n)       @(posedge bit_clk);
 
 
                        while(wb_busy)  @(posedge clk);
                        while(wb_busy)  @(posedge clk);
                        wb_busy = 1;
                        wb_busy = 1;
Line 647... Line 653...
$display("*****************************************************");
$display("*****************************************************");
$display("*** VSR AC97 I/O Test ...                       ***");
$display("*** VSR AC97 I/O Test ...                       ***");
$display("*****************************************************\n");
$display("*****************************************************\n");
 
 
        wb_busy = 1;
        wb_busy = 1;
 
        m0.wb_wr1(`INTM,4'hf, 32'h0492_4924);
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
 
 
        wb_busy = 0;
        wb_busy = 0;
 
 
        oc0_dma_en = 1;
        oc0_dma_en = 1;
        oc1_dma_en = 1;
        oc1_dma_en = 1;
        oc2_dma_en = 1;
        oc2_dma_en = 1;
        oc3_dma_en = 1;
        oc3_dma_en = 1;
        oc4_dma_en = 1;
        oc4_dma_en = 1;
Line 872... Line 881...
end
end
endtask
endtask
 
 
 
 
 
 
 No newline at end of file
 No newline at end of file
 
task vsr_int;
 
 
 
reg     [31:0]   data;
 
reg     [31:0]   data1;
 
reg     [31:0]   data2;
 
integer         size, frames, m, th, smpl;
 
 
 
begin
 
$display("\n\n");
 
$display("*****************************************************");
 
$display("*** VSR AC97 I/O Test (INT ctrl) ...              ***");
 
$display("*****************************************************\n");
 
 
 
for(smpl=0;smpl<4;smpl=smpl+1)
 
begin
 
$display("Sampling selection: %0d",smpl);
 
for(th=0;th<4;th=th+1)
 
   begin
 
        do_rst;
 
 
 
        while(wb_busy)  @(posedge clk);
 
 
 
        wb_busy = 1;
 
 
 
        m0.wb_wr1(`INTM,4'hf, 32'hffff_fffc);
 
 
 
        case(th)
 
        0:
 
        begin
 
        $display("Interrupt thrash hold: 100%");
 
        // Thrash holds
 
        oc0_th = 4;     // 100% (4/4) Full Empty
 
        oc1_th = 4;
 
        oc2_th = 4;
 
        oc3_th = 4;
 
        oc4_th = 4;
 
        oc5_th = 4;
 
        ic0_th = 4;
 
        ic1_th = 4;
 
        ic2_th = 4;
 
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h3333_3333);
 
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_3333);
 
        m0.wb_wr1(`ICC,4'hf, 32'h0033_3333);
 
        end
 
 
 
        1:
 
        begin
 
        $display("Interrupt thrash hold: 75%");
 
        // Thrash holds
 
        oc0_th = 3;     // 75% (3/4) Full Empty
 
        oc1_th = 3;
 
        oc2_th = 3;
 
        oc3_th = 3;
 
        oc4_th = 3;
 
        oc5_th = 3;
 
        ic0_th = 3;
 
        ic1_th = 3;
 
        ic2_th = 3;
 
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h2323_2323);
 
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_2323);
 
        m0.wb_wr1(`ICC,4'hf, 32'h0023_2323);
 
        end
 
 
 
        2:
 
        begin
 
        $display("Interrupt thrash hold: 50%");
 
        // Thrash holds
 
        oc0_th = 2;     // 50% (1/2) Full/Empty
 
        oc1_th = 2;
 
        oc2_th = 2;
 
        oc3_th = 2;
 
        oc4_th = 2;
 
        oc5_th = 2;
 
        ic0_th = 2;
 
        ic1_th = 2;
 
        ic2_th = 2;
 
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h1313_1313);
 
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_1313);
 
        m0.wb_wr1(`ICC,4'hf, 32'h0013_1313);
 
        end
 
 
 
        3:
 
        begin
 
        $display("Interrupt thrash hold: 25%");
 
        // Thrash holds
 
        oc0_th = 1;     // 25% (1/4) Full/Empty
 
        oc1_th = 1;
 
        oc2_th = 1;
 
        oc3_th = 1;
 
        oc4_th = 1;
 
        oc5_th = 1;
 
        ic0_th = 1;
 
        ic1_th = 1;
 
        ic2_th = 1;
 
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h0303_0303);
 
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_0303);
 
        m0.wb_wr1(`ICC,4'hf, 32'h0003_0303);
 
        end
 
 
 
        endcase
 
 
 
        wb_busy = 0;
 
 
 
        oc0_dma_en = 0;
 
        oc1_dma_en = 0;
 
        oc2_dma_en = 0;
 
        oc3_dma_en = 0;
 
        oc4_dma_en = 0;
 
        oc5_dma_en = 0;
 
        ic0_dma_en = 0;
 
        ic1_dma_en = 0;
 
        ic2_dma_en = 0;
 
        int_chk_en = 0;
 
        int_ctrl_en = 1;
 
 
 
        for(n=0;n<256;n=n+1)
 
           begin
 
                oc0_mem[n] = $random;
 
                oc1_mem[n] = $random;
 
                oc2_mem[n] = $random;
 
                oc3_mem[n] = $random;
 
                oc4_mem[n] = $random;
 
                oc5_mem[n] = $random;
 
                ic0_mem[n] = $random;
 
                ic1_mem[n] = $random;
 
                ic2_mem[n] = $random;
 
           end
 
 
 
        u1.init(0);
 
        frames = 132;
 
        frames = 132 + 132 + 132;
 
 
 
 
 
        case(smpl)
 
           0:    // All FULL Speed (48 Khz per channel)
 
                u1.tx1( frames,                 // Number of frames to process
 
                        0,                       // How many frames before codec is ready
 
                        10'b1101_1110_00,        // Output slots valid bits
 
                        10'b1101_0000_00,        // Input slots valid bits
 
                        20'b00_00_00_00_00_00_00_00_00_00,  // Output Slots intervals
 
                        20'b00_00_00_00_00_00_00_00_00_00  // Input Slots intervals
 
                        );
 
           1:   // All 1/4 Speed (12 Khz per channel)
 
                u1.tx1( frames,                 // Number of frames to process
 
                        0,                       // How many frames before codec is ready
 
                        10'b1101_1110_00,        // Output slots valid bits
 
                        10'b1101_0000_00,        // Input slots valid bits
 
                        20'b11_11_00_11_11_11_11_00_00_00,  // Output Slots intervals
 
                        20'b11_11_00_11_00_00_00_00_00_00  // Input Slots intervals
 
                        );
 
           2:   // Mix 1
 
                u1.tx1( frames,                 // Number of frames to process
 
                        0,                       // How many frames before codec is ready
 
                        10'b1101_1110_00,        // Output slots valid bits
 
                        10'b1101_0000_00,        // Input slots valid bits
 
                        20'b00_01_00_10_11_01_10_00_00_00,  // Output Slots intervals
 
                        20'b11_10_00_01_00_00_00_00_00_00  // Input Slots intervals
 
                        );
 
           3:   // Mix 2
 
                u1.tx1( frames,                 // Number of frames to process
 
                        0,                       // How many frames before codec is ready
 
                        10'b1101_1110_00,        // Output slots valid bits
 
                        10'b1101_0000_00,        // Input slots valid bits
 
                        20'b00_00_00_01_01_10_10_00_00_00,  // Output Slots intervals
 
                        20'b00_00_00_10_00_00_00_00_00_00  // Input Slots intervals
 
                        );
 
        endcase
 
 
 
 
 
        size = (frames - 4)/2;
 
        size = (frames - 4)/3;
 
        size = size - 36;
 
 
 
        repeat(100)     @(posedge clk);
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.rs3_mem[n];
 
                data = oc0_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.rs4_mem[n];
 
                data = oc1_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.rs6_mem[n];
 
                data = oc2_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.rs7_mem[n];
 
                data = oc3_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.rs8_mem[n];
 
                data = oc4_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.rs9_mem[n];
 
                data = oc5_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.is3_mem[n];
 
                data = ic0_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.is4_mem[n];
 
                data = ic1_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
        for(n=0;n<size;n=n+1)
 
           begin
 
                data1 = u1.is6_mem[n];
 
                data = ic2_mem[n[8:1]];
 
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
 
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
 
                if(     (data1 !== data2) |
 
                        (^data1 === 1'hx) |
 
                        (^data2 === 1'hx)
 
                        )
 
                   begin
 
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
 
                        n, data2, data1);
 
                        error_cnt = error_cnt + 1;
 
                   end
 
           end
 
 
 
repeat(10)      @(posedge clk);
 
end
 
end
 
 
 
$display("Processed %0d samples per channel for each test",size);
 
 
 
show_errors;
 
$display("*****************************************************");
 
$display("*** Test DONE ...                                 ***");
 
$display("*****************************************************\n\n");
 
 
 
end
 
endtask
 
 
 
 
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.