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

Subversion Repositories ac97

[/] [ac97/] [trunk/] [bench/] [verilog/] [tests.v] - Diff between revs 17 and 20

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 17 Rev 20
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
////                                                             ////
////                                                             ////
////  Tests                                                      ////
////  Tests                                                      ////
////                                                             ////
////                                                             ////
////                                                             ////
////                                                             ////
////  Author: Rudolf Usselmann                                   ////
////  Author: Rudolf Usselmann                                   ////
////          rudi@asics.ws                                      ////
////          rudi@asics.ws                                      ////
////                                                             ////
////                                                             ////
////                                                             ////
////                                                             ////
////  Downloaded from: http://www.opencores.org/cores/ac97_ctrl/ ////
////  Downloaded from: http://www.opencores.org/cores/ac97_ctrl/ ////
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
////                                                             ////
////                                                             ////
//// Copyright (C) 2000-2002 Rudolf Usselmann                    ////
//// Copyright (C) 2000-2002 Rudolf Usselmann                    ////
////                         www.asics.ws                        ////
////                         www.asics.ws                        ////
////                         rudi@asics.ws                       ////
////                         rudi@asics.ws                       ////
////                                                             ////
////                                                             ////
//// This source file may be used and distributed without        ////
//// This source file may be used and distributed without        ////
//// restriction provided that this copyright statement is not   ////
//// restriction provided that this copyright statement is not   ////
//// removed from the file and that any derivative work contains ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer.////
//// the original copyright notice and the associated disclaimer.////
////                                                             ////
////                                                             ////
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
 
 
//  CVS Log
//  CVS Log
//
//
//  $Id: tests.v,v 1.5 2002-09-19 06:36:19 rudi Exp $
//  $Id: tests.v,v 1.5 2002-09-19 06:36:19 rudi Exp $
//
//
//  $Date: 2002-09-19 06:36:19 $
//  $Date: 2002-09-19 06:36:19 $
//  $Revision: 1.5 $
//  $Revision: 1.5 $
//  $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.4  2002/03/11 03:21:12  rudi
//               Revision 1.4  2002/03/11 03:21:12  rudi
//
//
//               - Added defines to select fifo depth between 4, 8 and 16 entries.
//               - Added defines to select fifo depth between 4, 8 and 16 entries.
//
//
//               Revision 1.3  2002/03/05 04:54:08  rudi
//               Revision 1.3  2002/03/05 04:54:08  rudi
//
//
//               - fixed spelling
//               - fixed spelling
//
//
//               Revision 1.2  2002/03/05 04:44:04  rudi
//               Revision 1.2  2002/03/05 04:44:04  rudi
//
//
//               - Fixed the order of the thrash hold bits to match the spec.
//               - Fixed the order of the thrash hold bits to match the spec.
//               - Many minor synthesis cleanup items ...
//               - Many minor synthesis cleanup items ...
//
//
//               Revision 1.1  2002/02/13 08:22:32  rudi
//               Revision 1.1  2002/02/13 08:22:32  rudi
//
//
//               Added test bench for public release
//               Added test bench for public release
//
//
//
//
//
//
//                        
//                        
 
 
 
 
task show_errors;
task show_errors;
 
 
begin
begin
 
 
$display("\n");
$display("\n");
$display("     +--------------------+");
$display("     +--------------------+");
$display("     |  Total ERRORS: %0d   |", error_cnt);
$display("     |  Total ERRORS: %0d   |", error_cnt);
$display("     +--------------------+");
$display("     +--------------------+");
 
 
end
end
endtask
endtask
 
 
 
 
task basic1;
task basic1;
 
 
reg     [31:0]   data;
reg     [31:0]   data;
reg     [31:0]   data1;
reg     [31:0]   data1;
reg     [31:0]   data2;
reg     [31:0]   data2;
integer         size, frames, m;
integer         size, frames, m;
 
 
begin
begin
$display("\n\n");
$display("\n\n");
$display("*****************************************************");
$display("*****************************************************");
$display("*** Basic AC97 I/O Test & Reg Wr ...              ***");
$display("*** Basic AC97 I/O Test & Reg Wr ...              ***");
$display("*****************************************************\n");
$display("*****************************************************\n");
 
 
 
 
        wb_busy = 1;
        wb_busy = 1;
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
        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;
        oc5_dma_en = 1;
        oc5_dma_en = 1;
        ic0_dma_en = 1;
        ic0_dma_en = 1;
        ic1_dma_en = 1;
        ic1_dma_en = 1;
        ic2_dma_en = 1;
        ic2_dma_en = 1;
 
 
        for(n=0;n<256;n=n+1)
        for(n=0;n<256;n=n+1)
           begin
           begin
                oc0_mem[n] = $random;
                oc0_mem[n] = $random;
                oc1_mem[n] = $random;
                oc1_mem[n] = $random;
                oc2_mem[n] = $random;
                oc2_mem[n] = $random;
                oc3_mem[n] = $random;
                oc3_mem[n] = $random;
                oc4_mem[n] = $random;
                oc4_mem[n] = $random;
                oc5_mem[n] = $random;
                oc5_mem[n] = $random;
                ic0_mem[n] = $random;
                ic0_mem[n] = $random;
                ic1_mem[n] = $random;
                ic1_mem[n] = $random;
                ic2_mem[n] = $random;
                ic2_mem[n] = $random;
           end
           end
 
 
        u1.init(0);
        u1.init(0);
        frames = 139;
        frames = 139;
 
 
fork
fork
        u1.tx1( frames,                                 // Number of frames to process
        u1.tx1( frames,                                 // Number of frames to process
                0,                                       // How many frames before codec is ready
                0,                                       // How many frames before codec is ready
                10'b1111_1111_11,                        // Output slots valid bits
                10'b1111_1111_11,                        // Output slots valid bits
                10'b1111_1111_11,                        // Input slots valid bits
                10'b1111_1111_11,                        // 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,       // Output Slots intervals
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
                );
                );
 
 
        begin   // Do a register Write
        begin   // Do a register Write
                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(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;
                        m0.wb_wr1(`CRAC,4'hf, {9'h0, n[6:0], 16'h1234 + n[7:0]} );
                        m0.wb_wr1(`CRAC,4'hf, {9'h0, n[6:0], 16'h1234 + n[7:0]} );
                        wb_busy = 0;
                        wb_busy = 0;
 
 
                        while(!int)     @(posedge clk);
                        while(!int)     @(posedge clk);
                   end
                   end
        end
        end
join
join
 
 
repeat(300)     @(posedge bit_clk);
repeat(300)     @(posedge bit_clk);
 
 
        for(n=0;n<75;n=n+1)
        for(n=0;n<75;n=n+1)
           begin
           begin
                        data2 = {9'h0, n[6:0], 16'h1234 + n[7:0]};
                        data2 = {9'h0, n[6:0], 16'h1234 + n[7:0]};
                        tmp = u1.rs2_mem[n];
                        tmp = u1.rs2_mem[n];
                        data1[15:0] = tmp[19:4];
                        data1[15:0] = tmp[19:4];
 
 
                        tmp = u1.rs1_mem[n];
                        tmp = u1.rs1_mem[n];
                        data1[31:16] = {9'h0, tmp[18:12]};
                        data1[31:16] = {9'h0, tmp[18:12]};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Register Write Data %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Register Write Data %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
 
 
           end
           end
 
 
        size = frames - 12;
        size = frames - 12;
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs3_mem[n];
                data1 = u1.rs3_mem[n];
                data = oc0_mem[n[8:1]];
                data = oc0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs4_mem[n];
                data1 = u1.rs4_mem[n];
                data = oc1_mem[n[8:1]];
                data = oc1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs6_mem[n];
                data1 = u1.rs6_mem[n];
                data = oc2_mem[n[8:1]];
                data = oc2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs7_mem[n];
                data1 = u1.rs7_mem[n];
                data = oc3_mem[n[8:1]];
                data = oc3_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs8_mem[n];
                data1 = u1.rs8_mem[n];
                data = oc4_mem[n[8:1]];
                data = oc4_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs9_mem[n];
                data1 = u1.rs9_mem[n];
                data = oc5_mem[n[8:1]];
                data = oc5_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is3_mem[n];
                data1 = u1.is3_mem[n];
                data = ic0_mem[n[8:1]];
                data = ic0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is4_mem[n];
                data1 = u1.is4_mem[n];
                data = ic1_mem[n[8:1]];
                data = ic1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is6_mem[n];
                data1 = u1.is6_mem[n];
                data = ic2_mem[n[8:1]];
                data = ic2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
repeat(10)      @(posedge clk);
repeat(10)      @(posedge clk);
 
 
show_errors;
show_errors;
$display("*****************************************************");
$display("*****************************************************");
$display("*** Test DONE ...                                 ***");
$display("*** Test DONE ...                                 ***");
$display("*****************************************************\n\n");
$display("*****************************************************\n\n");
 
 
end
end
endtask
endtask
 
 
 
 
 
 
task basic2;
task basic2;
 
 
reg     [31:0]   data;
reg     [31:0]   data;
reg     [31:0]   data1;
reg     [31:0]   data1;
reg     [31:0]   data2;
reg     [31:0]   data2;
integer         size, frames, m;
integer         size, frames, m;
 
 
begin
begin
$display("\n\n");
$display("\n\n");
$display("*****************************************************");
$display("*****************************************************");
$display("*** Basic AC97 I/O Test & Reg Rd ...              ***");
$display("*** Basic AC97 I/O Test & Reg Rd ...              ***");
$display("*****************************************************\n");
$display("*****************************************************\n");
 
 
        wb_busy = 1;
        wb_busy = 1;
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
        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;
        oc5_dma_en = 1;
        oc5_dma_en = 1;
        ic0_dma_en = 1;
        ic0_dma_en = 1;
        ic1_dma_en = 1;
        ic1_dma_en = 1;
        ic2_dma_en = 1;
        ic2_dma_en = 1;
 
 
        for(n=0;n<256;n=n+1)
        for(n=0;n<256;n=n+1)
           begin
           begin
                oc0_mem[n] = $random;
                oc0_mem[n] = $random;
                oc1_mem[n] = $random;
                oc1_mem[n] = $random;
                oc2_mem[n] = $random;
                oc2_mem[n] = $random;
                oc3_mem[n] = $random;
                oc3_mem[n] = $random;
                oc4_mem[n] = $random;
                oc4_mem[n] = $random;
                oc5_mem[n] = $random;
                oc5_mem[n] = $random;
                ic0_mem[n] = $random;
                ic0_mem[n] = $random;
                ic1_mem[n] = $random;
                ic1_mem[n] = $random;
                ic2_mem[n] = $random;
                ic2_mem[n] = $random;
           end
           end
 
 
        u1.init(0);
        u1.init(0);
        frames = 139;
        frames = 139;
 
 
fork
fork
        u1.tx1( frames,                                 // Number of frames to process
        u1.tx1( frames,                                 // Number of frames to process
                0,                                       // How many frames before codec is ready
                0,                                       // How many frames before codec is ready
                10'b1111_1111_11,                        // Output slots valid bits
                10'b1111_1111_11,                        // Output slots valid bits
                10'b1111_1111_11,                        // Input slots valid bits
                10'b1111_1111_11,                        // 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,       // Output Slots intervals
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
                );
                );
 
 
        begin   // Do a register Write
        begin   // Do a register Write
                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(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;
                        m0.wb_wr1(`CRAC,4'hf, {1'b1, 8'h0, n[6:0], 16'h1234 + n[7:0]} );
                        m0.wb_wr1(`CRAC,4'hf, {1'b1, 8'h0, n[6:0], 16'h1234 + n[7:0]} );
                        wb_busy = 0;
                        wb_busy = 0;
 
 
                        while(!int)     @(posedge clk);
                        while(!int)     @(posedge clk);
 
 
                        while(wb_busy)  @(posedge clk);
                        while(wb_busy)  @(posedge clk);
                        wb_busy = 1;
                        wb_busy = 1;
                        m0.wb_rd1(`CRAC,4'hf, reg_mem[n] );
                        m0.wb_rd1(`CRAC,4'hf, reg_mem[n] );
                        wb_busy = 0;
                        wb_busy = 0;
 
 
                   end
                   end
        end
        end
join
join
 
 
repeat(300)     @(posedge bit_clk);
repeat(300)     @(posedge bit_clk);
 
 
        for(n=0;n<75;n=n+1)
        for(n=0;n<75;n=n+1)
           begin
           begin
 
 
                        tmp = u1.is2_mem[n];
                        tmp = u1.is2_mem[n];
                        data2 = {16'h0, tmp[19:4]};
                        data2 = {16'h0, tmp[19:4]};
                        tmp = reg_mem[n];
                        tmp = reg_mem[n];
                        data1 = {16'h0, tmp[15:0]};
                        data1 = {16'h0, tmp[15:0]};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Register Read Data %0d Mismatch Expected: %h Got: %h",
                        $display("ERROR: Register Read Data %0d Mismatch Expected: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
 
 
           end
           end
 
 
        size = frames - 4;
        size = frames - 4;
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs3_mem[n];
                data1 = u1.rs3_mem[n];
                data = oc0_mem[n[8:1]];
                data = oc0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs4_mem[n];
                data1 = u1.rs4_mem[n];
                data = oc1_mem[n[8:1]];
                data = oc1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs6_mem[n];
                data1 = u1.rs6_mem[n];
                data = oc2_mem[n[8:1]];
                data = oc2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs7_mem[n];
                data1 = u1.rs7_mem[n];
                data = oc3_mem[n[8:1]];
                data = oc3_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs8_mem[n];
                data1 = u1.rs8_mem[n];
                data = oc4_mem[n[8:1]];
                data = oc4_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs9_mem[n];
                data1 = u1.rs9_mem[n];
                data = oc5_mem[n[8:1]];
                data = oc5_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is3_mem[n];
                data1 = u1.is3_mem[n];
                data = ic0_mem[n[8:1]];
                data = ic0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is4_mem[n];
                data1 = u1.is4_mem[n];
                data = ic1_mem[n[8:1]];
                data = ic1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is6_mem[n];
                data1 = u1.is6_mem[n];
                data = ic2_mem[n[8:1]];
                data = ic2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
show_errors;
show_errors;
$display("*****************************************************");
$display("*****************************************************");
$display("*** Test DONE ...                                 ***");
$display("*** Test DONE ...                                 ***");
$display("*****************************************************\n\n");
$display("*****************************************************\n\n");
 
 
end
end
endtask
endtask
 
 
 
 
 
 
task vsr1;
task vsr1;
 
 
reg     [31:0]   data;
reg     [31:0]   data;
reg     [31:0]   data1;
reg     [31:0]   data1;
reg     [31:0]   data2;
reg     [31:0]   data2;
integer         size, frames, m;
integer         size, frames, m;
 
 
begin
begin
$display("\n\n");
$display("\n\n");
$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(`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;
        oc5_dma_en = 1;
        oc5_dma_en = 1;
        ic0_dma_en = 1;
        ic0_dma_en = 1;
        ic1_dma_en = 1;
        ic1_dma_en = 1;
        ic2_dma_en = 1;
        ic2_dma_en = 1;
 
 
        for(n=0;n<256;n=n+1)
        for(n=0;n<256;n=n+1)
           begin
           begin
                oc0_mem[n] = $random;
                oc0_mem[n] = $random;
                oc1_mem[n] = $random;
                oc1_mem[n] = $random;
                oc2_mem[n] = $random;
                oc2_mem[n] = $random;
                oc3_mem[n] = $random;
                oc3_mem[n] = $random;
                oc4_mem[n] = $random;
                oc4_mem[n] = $random;
                oc5_mem[n] = $random;
                oc5_mem[n] = $random;
                ic0_mem[n] = $random;
                ic0_mem[n] = $random;
                ic1_mem[n] = $random;
                ic1_mem[n] = $random;
                ic2_mem[n] = $random;
                ic2_mem[n] = $random;
           end
           end
 
 
        u1.init(0);
        u1.init(0);
 
 
        frames = 132;
        frames = 132;
 
 
        u1.tx1( frames,                                 // Number of frames to process
        u1.tx1( frames,                                 // Number of frames to process
                0,                                       // How many frames before codec is ready
                0,                                       // How many frames before codec is ready
                10'b1101_1110_00,                        // Output slots valid bits
                10'b1101_1110_00,                        // Output slots valid bits
                10'b1101_0000_00,                        // Input slots valid bits
                10'b1101_0000_00,                        // Input slots valid bits
                20'b01_01_00_01_01_01_01_00_00_00,       // Output Slots intervals
                20'b01_01_00_01_01_01_01_00_00_00,       // Output Slots intervals
                20'b01_01_00_01_00_00_00_00_00_00        // Input Slots intervals
                20'b01_01_00_01_00_00_00_00_00_00        // Input Slots intervals
                );
                );
 
 
        size = (frames - 4)/2;
        size = (frames - 4)/2;
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs3_mem[n];
                data1 = u1.rs3_mem[n];
                data = oc0_mem[n[8:1]];
                data = oc0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs4_mem[n];
                data1 = u1.rs4_mem[n];
                data = oc1_mem[n[8:1]];
                data = oc1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs6_mem[n];
                data1 = u1.rs6_mem[n];
                data = oc2_mem[n[8:1]];
                data = oc2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs7_mem[n];
                data1 = u1.rs7_mem[n];
                data = oc3_mem[n[8:1]];
                data = oc3_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs8_mem[n];
                data1 = u1.rs8_mem[n];
                data = oc4_mem[n[8:1]];
                data = oc4_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs9_mem[n];
                data1 = u1.rs9_mem[n];
                data = oc5_mem[n[8:1]];
                data = oc5_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is3_mem[n];
                data1 = u1.is3_mem[n];
                data = ic0_mem[n[8:1]];
                data = ic0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is4_mem[n];
                data1 = u1.is4_mem[n];
                data = ic1_mem[n[8:1]];
                data = ic1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is6_mem[n];
                data1 = u1.is6_mem[n];
                data = ic2_mem[n[8:1]];
                data = ic2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
repeat(10)      @(posedge clk);
repeat(10)      @(posedge clk);
 
 
show_errors;
show_errors;
$display("*****************************************************");
$display("*****************************************************");
$display("*** Test DONE ...                                 ***");
$display("*** Test DONE ...                                 ***");
$display("*****************************************************\n\n");
$display("*****************************************************\n\n");
 
 
end
end
endtask
endtask
 
 
 
 
 
 
task vsr_int;
task vsr_int;
 
 
reg     [31:0]   data;
reg     [31:0]   data;
reg     [31:0]   data1;
reg     [31:0]   data1;
reg     [31:0]   data2;
reg     [31:0]   data2;
integer         size, frames, m, th, smpl;
integer         size, frames, m, th, smpl;
 
 
begin
begin
$display("\n\n");
$display("\n\n");
$display("*****************************************************");
$display("*****************************************************");
$display("*** VSR AC97 I/O Test (INT ctrl) ...              ***");
$display("*** VSR AC97 I/O Test (INT ctrl) ...              ***");
$display("*****************************************************\n");
$display("*****************************************************\n");
 
 
for(smpl=0;smpl<4;smpl=smpl+1)
for(smpl=0;smpl<4;smpl=smpl+1)
begin
begin
$display("Sampling selection: %0d",smpl);
$display("Sampling selection: %0d",smpl);
for(th=0;th<4;th=th+1)
for(th=0;th<4;th=th+1)
   begin
   begin
        do_rst;
        do_rst;
 
 
        while(wb_busy)  @(posedge clk);
        while(wb_busy)  @(posedge clk);
 
 
        wb_busy = 1;
        wb_busy = 1;
 
 
        m0.wb_wr1(`INTM,4'hf, 32'hffff_fffc);
        m0.wb_wr1(`INTM,4'hf, 32'hffff_fffc);
 
 
        case(th)
        case(th)
        0:
        0:
        begin
        begin
        $display("Interrupt threshold: 100%");
        $display("Interrupt threshold: 100%");
        oc0_th = 4;     // 100% (4/4) Full Empty
        oc0_th = 4;     // 100% (4/4) Full Empty
        oc1_th = 4;
        oc1_th = 4;
        oc2_th = 4;
        oc2_th = 4;
        oc3_th = 4;
        oc3_th = 4;
        oc4_th = 4;
        oc4_th = 4;
        oc5_th = 4;
        oc5_th = 4;
        ic0_th = 4;
        ic0_th = 4;
        ic1_th = 4;
        ic1_th = 4;
        ic2_th = 4;
        ic2_th = 4;
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h3333_3333);
        m0.wb_wr1(`OCC0,4'hf, 32'h3333_3333);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_3333);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_3333);
        m0.wb_wr1(`ICC,4'hf, 32'h0033_3333);
        m0.wb_wr1(`ICC,4'hf, 32'h0033_3333);
        end
        end
 
 
        1:
        1:
        begin
        begin
        $display("Interrupt threshold: 75%");
        $display("Interrupt threshold: 75%");
        oc0_th = 3;     // 75% (3/4) Full Empty
        oc0_th = 3;     // 75% (3/4) Full Empty
        oc1_th = 3;
        oc1_th = 3;
        oc2_th = 3;
        oc2_th = 3;
        oc3_th = 3;
        oc3_th = 3;
        oc4_th = 3;
        oc4_th = 3;
        oc5_th = 3;
        oc5_th = 3;
        ic0_th = 3;
        ic0_th = 3;
        ic1_th = 3;
        ic1_th = 3;
        ic2_th = 3;
        ic2_th = 3;
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h2323_2323);
        m0.wb_wr1(`OCC0,4'hf, 32'h2323_2323);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_2323);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_2323);
        m0.wb_wr1(`ICC,4'hf, 32'h0023_2323);
        m0.wb_wr1(`ICC,4'hf, 32'h0023_2323);
        end
        end
 
 
        2:
        2:
        begin
        begin
        $display("Interrupt threshold: 50%");
        $display("Interrupt threshold: 50%");
        oc0_th = 2;     // 50% (1/2) Full/Empty
        oc0_th = 2;     // 50% (1/2) Full/Empty
        oc1_th = 2;
        oc1_th = 2;
        oc2_th = 2;
        oc2_th = 2;
        oc3_th = 2;
        oc3_th = 2;
        oc4_th = 2;
        oc4_th = 2;
        oc5_th = 2;
        oc5_th = 2;
        ic0_th = 2;
        ic0_th = 2;
        ic1_th = 2;
        ic1_th = 2;
        ic2_th = 2;
        ic2_th = 2;
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h1313_1313);
        m0.wb_wr1(`OCC0,4'hf, 32'h1313_1313);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_1313);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_1313);
        m0.wb_wr1(`ICC,4'hf, 32'h0013_1313);
        m0.wb_wr1(`ICC,4'hf, 32'h0013_1313);
        end
        end
 
 
        3:
        3:
        begin
        begin
        $display("Interrupt threshold: 25%");
        $display("Interrupt threshold: 25%");
        oc0_th = 1;     // 25% (1/4) Full/Empty
        oc0_th = 1;     // 25% (1/4) Full/Empty
        oc1_th = 1;
        oc1_th = 1;
        oc2_th = 1;
        oc2_th = 1;
        oc3_th = 1;
        oc3_th = 1;
        oc4_th = 1;
        oc4_th = 1;
        oc5_th = 1;
        oc5_th = 1;
        ic0_th = 1;
        ic0_th = 1;
        ic1_th = 1;
        ic1_th = 1;
        ic2_th = 1;
        ic2_th = 1;
 
 
        m0.wb_wr1(`OCC0,4'hf, 32'h0303_0303);
        m0.wb_wr1(`OCC0,4'hf, 32'h0303_0303);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_0303);
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_0303);
        m0.wb_wr1(`ICC,4'hf, 32'h0003_0303);
        m0.wb_wr1(`ICC,4'hf, 32'h0003_0303);
        end
        end
        endcase
        endcase
 
 
 
 
`ifdef AC97_OUT_FIFO_DEPTH_8
`ifdef AC97_OUT_FIFO_DEPTH_8
        oc0_th = oc0_th * 2;
        oc0_th = oc0_th * 2;
        oc1_th = oc1_th * 2;
        oc1_th = oc1_th * 2;
        oc2_th = oc2_th * 2;
        oc2_th = oc2_th * 2;
        oc3_th = oc3_th * 2;
        oc3_th = oc3_th * 2;
        oc4_th = oc4_th * 2;
        oc4_th = oc4_th * 2;
        oc5_th = oc5_th * 2;
        oc5_th = oc5_th * 2;
`endif
`endif
 
 
`ifdef AC97_OUT_FIFO_DEPTH_16
`ifdef AC97_OUT_FIFO_DEPTH_16
        oc0_th = oc0_th * 4;
        oc0_th = oc0_th * 4;
        oc1_th = oc1_th * 4;
        oc1_th = oc1_th * 4;
        oc2_th = oc2_th * 4;
        oc2_th = oc2_th * 4;
        oc3_th = oc3_th * 4;
        oc3_th = oc3_th * 4;
        oc4_th = oc4_th * 4;
        oc4_th = oc4_th * 4;
        oc5_th = oc5_th * 4;
        oc5_th = oc5_th * 4;
`endif
`endif
 
 
 
 
 
 
`ifdef AC97_IN_FIFO_DEPTH_8
`ifdef AC97_IN_FIFO_DEPTH_8
        ic0_th = ic0_th * 2;
        ic0_th = ic0_th * 2;
        ic1_th = ic1_th * 2;
        ic1_th = ic1_th * 2;
        ic2_th = ic2_th * 2;
        ic2_th = ic2_th * 2;
`endif
`endif
 
 
`ifdef AC97_IN_FIFO_DEPTH_16
`ifdef AC97_IN_FIFO_DEPTH_16
        ic0_th = ic0_th * 4;
        ic0_th = ic0_th * 4;
        ic1_th = ic1_th * 4;
        ic1_th = ic1_th * 4;
        ic2_th = ic2_th * 4;
        ic2_th = ic2_th * 4;
`endif
`endif
 
 
        wb_busy = 0;
        wb_busy = 0;
 
 
        oc0_dma_en = 0;
        oc0_dma_en = 0;
        oc1_dma_en = 0;
        oc1_dma_en = 0;
        oc2_dma_en = 0;
        oc2_dma_en = 0;
        oc3_dma_en = 0;
        oc3_dma_en = 0;
        oc4_dma_en = 0;
        oc4_dma_en = 0;
        oc5_dma_en = 0;
        oc5_dma_en = 0;
        ic0_dma_en = 0;
        ic0_dma_en = 0;
        ic1_dma_en = 0;
        ic1_dma_en = 0;
        ic2_dma_en = 0;
        ic2_dma_en = 0;
        int_chk_en = 0;
        int_chk_en = 0;
        int_ctrl_en = 1;
        int_ctrl_en = 1;
 
 
        for(n=0;n<256;n=n+1)
        for(n=0;n<256;n=n+1)
           begin
           begin
                oc0_mem[n] = $random;
                oc0_mem[n] = $random;
                oc1_mem[n] = $random;
                oc1_mem[n] = $random;
                oc2_mem[n] = $random;
                oc2_mem[n] = $random;
                oc3_mem[n] = $random;
                oc3_mem[n] = $random;
                oc4_mem[n] = $random;
                oc4_mem[n] = $random;
                oc5_mem[n] = $random;
                oc5_mem[n] = $random;
                ic0_mem[n] = $random;
                ic0_mem[n] = $random;
                ic1_mem[n] = $random;
                ic1_mem[n] = $random;
                ic2_mem[n] = $random;
                ic2_mem[n] = $random;
           end
           end
 
 
        u1.init(0);
        u1.init(0);
        frames = 132;
        frames = 132;
        frames = 132 + 132 + 132;
        frames = 132 + 132 + 132;
 
 
 
 
        case(smpl)
        case(smpl)
           0:    // All FULL Speed (48 Khz per channel)
           0:    // All FULL Speed (48 Khz per channel)
                u1.tx1( frames,                 // Number of frames to process
                u1.tx1( frames,                 // Number of frames to process
                        0,                       // How many frames before codec is ready
                        0,                       // How many frames before codec is ready
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_0000_00,        // Input 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,  // Output Slots intervals
                        20'b00_00_00_00_00_00_00_00_00_00  // Input 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)
           1:   // All 1/4 Speed (12 Khz per channel)
                u1.tx1( frames,                 // Number of frames to process
                u1.tx1( frames,                 // Number of frames to process
                        0,                       // How many frames before codec is ready
                        0,                       // How many frames before codec is ready
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_0000_00,        // Input 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_11_11_11_00_00_00,  // Output Slots intervals
                        20'b11_11_00_11_00_00_00_00_00_00  // Input Slots intervals
                        20'b11_11_00_11_00_00_00_00_00_00  // Input Slots intervals
                        );
                        );
           2:   // Mix 1
           2:   // Mix 1
                u1.tx1( frames,                 // Number of frames to process
                u1.tx1( frames,                 // Number of frames to process
                        0,                       // How many frames before codec is ready
                        0,                       // How many frames before codec is ready
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_0000_00,        // Input 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'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
                        20'b11_10_00_01_00_00_00_00_00_00  // Input Slots intervals
                        );
                        );
           3:   // Mix 2
           3:   // Mix 2
                u1.tx1( frames,                 // Number of frames to process
                u1.tx1( frames,                 // Number of frames to process
                        0,                       // How many frames before codec is ready
                        0,                       // How many frames before codec is ready
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_1110_00,        // Output slots valid bits
                        10'b1101_0000_00,        // Input 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_01_01_10_10_00_00_00,  // Output Slots intervals
                        20'b00_00_00_10_00_00_00_00_00_00  // Input Slots intervals
                        20'b00_00_00_10_00_00_00_00_00_00  // Input Slots intervals
                        );
                        );
        endcase
        endcase
 
 
 
 
        size = (frames - 4)/2;
        size = (frames - 4)/2;
        size = (frames - 4)/3;
        size = (frames - 4)/3;
        size = size - 36;
        size = size - 36;
 
 
        repeat(100)     @(posedge clk);
        repeat(100)     @(posedge clk);
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs3_mem[n];
                data1 = u1.rs3_mem[n];
                data = oc0_mem[n[8:1]];
                data = oc0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs4_mem[n];
                data1 = u1.rs4_mem[n];
                data = oc1_mem[n[8:1]];
                data = oc1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs6_mem[n];
                data1 = u1.rs6_mem[n];
                data = oc2_mem[n[8:1]];
                data = oc2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs7_mem[n];
                data1 = u1.rs7_mem[n];
                data = oc3_mem[n[8:1]];
                data = oc3_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs8_mem[n];
                data1 = u1.rs8_mem[n];
                data = oc4_mem[n[8:1]];
                data = oc4_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.rs9_mem[n];
                data1 = u1.rs9_mem[n];
                data = oc5_mem[n[8:1]];
                data = oc5_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is3_mem[n];
                data1 = u1.is3_mem[n];
                data = ic0_mem[n[8:1]];
                data = ic0_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is4_mem[n];
                data1 = u1.is4_mem[n];
                data = ic1_mem[n[8:1]];
                data = ic1_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
        for(n=0;n<size;n=n+1)
        for(n=0;n<size;n=n+1)
           begin
           begin
                data1 = u1.is6_mem[n];
                data1 = u1.is6_mem[n];
                data = ic2_mem[n[8:1]];
                data = ic2_mem[n[8:1]];
 
 
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
                else            data2 = {12'h0, data[31:16], 4'h0};
 
 
                if(     (data1 !== data2) |
                if(     (data1 !== data2) |
                        (^data1 === 1'hx) |
                        (^data1 === 1'hx) |
                        (^data2 === 1'hx)
                        (^data2 === 1'hx)
                        )
                        )
                   begin
                   begin
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
                        n, data2, data1);
                        n, data2, data1);
                        error_cnt = error_cnt + 1;
                        error_cnt = error_cnt + 1;
                   end
                   end
           end
           end
 
 
repeat(10)      @(posedge clk);
repeat(10)      @(posedge clk);
end
end
end
end
 
 
$display("Processed %0d samples per channel for each test",size);
$display("Processed %0d samples per channel for each test",size);
 
 
show_errors;
show_errors;
$display("*****************************************************");
$display("*****************************************************");
$display("*** Test DONE ...                                 ***");
$display("*** Test DONE ...                                 ***");
$display("*****************************************************\n\n");
$display("*****************************************************\n\n");
 
 
end
end
endtask
endtask
 
 
 
 
 
 
 
 

powered by: WebSVN 2.1.0

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