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

Subversion Repositories i2c

[/] [i2c/] [trunk/] [bench/] [verilog/] [tst_bench_top.v] - Diff between revs 25 and 45

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

Rev 25 Rev 45
Line 35... Line 35...
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
 
 
//  CVS Log
//  CVS Log
//
//
//  $Id: tst_bench_top.v,v 1.3 2002-10-30 18:11:06 rherveille Exp $
//  $Id: tst_bench_top.v,v 1.4 2003-12-05 11:04:38 rherveille Exp $
//
//
//  $Date: 2002-10-30 18:11:06 $
//  $Date: 2003-12-05 11:04:38 $
//  $Revision: 1.3 $
//  $Revision: 1.4 $
//  $Author: rherveille $
//  $Author: rherveille $
//  $Locker:  $
//  $Locker:  $
//  $State: Exp $
//  $State: Exp $
//
//
// Change History:
// Change History:
//               $Log: not supported by cvs2svn $
//               $Log: not supported by cvs2svn $
 
//               Revision 1.3  2002/10/30 18:11:06  rherveille
 
//               Added timing tests to i2c_model.
 
//               Updated testbench.
 
//
//               Revision 1.2  2002/03/17 10:26:38  rherveille
//               Revision 1.2  2002/03/17 10:26:38  rherveille
//               Fixed some race conditions in the i2c-slave model.
//               Fixed some race conditions in the i2c-slave model.
//               Added debug information.
//               Added debug information.
//               Added headers.
//               Added headers.
//
//
Line 73... Line 77...
 
 
        reg [7:0] q, qq;
        reg [7:0] q, qq;
 
 
        wire scl, scl_o, scl_oen;
        wire scl, scl_o, scl_oen;
        wire sda, sda_o, sda_oen;
        wire sda, sda_o, sda_oen;
 
        reg rscl, rsda;
 
 
        parameter PRER_LO = 3'b000;
        parameter PRER_LO = 3'b000;
        parameter PRER_HI = 3'b001;
        parameter PRER_HI = 3'b001;
        parameter CTR     = 3'b010;
        parameter CTR     = 3'b010;
        parameter RXR     = 3'b011;
        parameter RXR     = 3'b011;
Line 85... Line 90...
        parameter SR      = 3'b100;
        parameter SR      = 3'b100;
 
 
        parameter TXR_R   = 3'b101; // undocumented / reserved output
        parameter TXR_R   = 3'b101; // undocumented / reserved output
        parameter CR_R    = 3'b110; // undocumented / reserved output
        parameter CR_R    = 3'b110; // undocumented / reserved output
 
 
 
        parameter RD      = 1'b1;
 
        parameter WR      = 1'b0;
 
        parameter SADR    = 7'b0010_000;
 
 
        //
        //
        // Module body
        // Module body
        //
        //
 
 
        // generate clock
        // generate clock
Line 134... Line 143...
                .sda_pad_o(sda_o),
                .sda_pad_o(sda_o),
                .sda_padoen_o(sda_oen)
                .sda_padoen_o(sda_oen)
        );
        );
 
 
        // hookup i2c slave model
        // hookup i2c slave model
        i2c_slave_model #(7'b1010_000) i2c_slave (
        i2c_slave_model #(SADR) i2c_slave (
                .scl(scl),
                .scl(scl),
                .sda(sda)
                .sda(sda)
        );
        );
 
 
        // create i2c lines
        // create i2c lines
        assign scl = scl_oen ? 1'bz : scl_o; // create tri-state buffer for i2c_master scl line
        always rscl = #600 scl_oen ? 1'bz : scl_o; // create tri-state buffer for i2c_master scl line
        assign sda = sda_oen ? 1'bz : sda_o; // create tri-state buffer for i2c_master sda line
        always rsda = #600 sda_oen ? 1'bz : sda_o; // create tri-state buffer for i2c_master sda line
 
 
 
        assign scl = rscl;
 
        assign sda = rsda;
 
 
        pullup p1(scl); // pullup scl line
        pullup p1(scl); // pullup scl line
        pullup p2(sda); // pullup sda line
        pullup p2(sda); // pullup sda line
 
 
        initial
        initial
Line 170... Line 182...
 
 
              // reset system
              // reset system
              rstn = 1'b1; // negate reset
              rstn = 1'b1; // negate reset
              #2;
              #2;
              rstn = 1'b0; // assert reset
              rstn = 1'b0; // assert reset
              repeat(20) @(posedge clk);
              repeat(1) @(posedge clk);
              rstn = 1'b1; // negate reset
              rstn = 1'b1; // negate reset
 
 
              $display("status: %t done reset", $time);
              $display("status: %t done reset", $time);
 
 
              @(posedge clk);
              @(posedge clk);
Line 182... Line 194...
              //
              //
              // program core
              // program core
              //
              //
 
 
              // program internal registers
              // program internal registers
//            u0.wb_write(1, PRER_LO, 8'hfa); // load prescaler lo-byte
              u0.wb_write(1, PRER_LO, 8'hfa); // load prescaler lo-byte
              u0.wb_write(1, PRER_LO, 8'hc8); // load prescaler lo-byte
              u0.wb_write(1, PRER_LO, 8'hc8); // load prescaler lo-byte
              u0.wb_write(1, PRER_HI, 8'h00); // load prescaler hi-byte
              u0.wb_write(1, PRER_HI, 8'h00); // load prescaler hi-byte
              $display("status: %t programmed registers", $time);
              $display("status: %t programmed registers", $time);
 
 
              u0.wb_cmp(0, PRER_LO, 8'hc8); // verify prescaler lo-byte
              u0.wb_cmp(0, PRER_LO, 8'hc8); // verify prescaler lo-byte
Line 199... Line 211...
              //
              //
              // access slave (write)
              // access slave (write)
              //
              //
 
 
              // drive slave address
              // drive slave address
              u0.wb_write(1, TXR,     8'ha0); // present slave address, set write-bit (== !read)
              u0.wb_write(1, TXR, {SADR,WR} ); // present slave address, set write-bit
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              $display("status: %t generate 'start', write cmd a0 (slave address+write)", $time);
              $display("status: %t generate 'start', write cmd %0h (slave address+write)", $time, {SADR,WR} );
 
 
              // check tip bit
              // check tip bit
              u0.wb_read(1, SR, q);
              u0.wb_read(1, SR, q);
              while(q[1])
              while(q[1])
                   u0.wb_read(0, SR, q); // poll it until it is zero
                   u0.wb_read(0, SR, q); // poll it until it is zero
Line 253... Line 265...
              //
              //
              // access slave (read)
              // access slave (read)
              //
              //
 
 
              // drive slave address
              // drive slave address
              u0.wb_write(1, TXR,     8'ha0); // present slave address, set write-bit (== !read)
              u0.wb_write(1, TXR,{SADR,WR} ); // present slave address, set write-bit
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              $display("status: %t generate 'start', write cmd a0 (slave address+write)", $time);
              $display("status: %t generate 'start', write cmd %0h (slave address+write)", $time, {SADR,WR} );
 
 
              // check tip bit
              // check tip bit
              u0.wb_read(1, SR, q);
              u0.wb_read(1, SR, q);
              while(q[1])
              while(q[1])
                   u0.wb_read(1, SR, q); // poll it until it is zero
                   u0.wb_read(1, SR, q); // poll it until it is zero
Line 275... Line 287...
              while(q[1])
              while(q[1])
                   u0.wb_read(1, SR, q); // poll it until it is zero
                   u0.wb_read(1, SR, q); // poll it until it is zero
              $display("status: %t tip==0", $time);
              $display("status: %t tip==0", $time);
 
 
              // drive slave address
              // drive slave address
              u0.wb_write(1, TXR,     8'ha1); // present slave's address, set read-bit
              u0.wb_write(1, TXR, {SADR,RD} ); // present slave's address, set read-bit
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              $display("status: %t generate 'repeated start', write cmd a1 (slave address+read)", $time);
              $display("status: %t generate 'repeated start', write cmd %0h (slave address+read)", $time, {SADR,RD} );
 
 
              // check tip bit
              // check tip bit
              u0.wb_read(1, SR, q);
              u0.wb_read(1, SR, q);
              while(q[1])
              while(q[1])
                   u0.wb_read(1, SR, q); // poll it until it is zero
                   u0.wb_read(1, SR, q); // poll it until it is zero
Line 299... Line 311...
 
 
              // check data just received
              // check data just received
              u0.wb_read(1, RXR, qq);
              u0.wb_read(1, RXR, qq);
              if(qq !== 8'ha5)
              if(qq !== 8'ha5)
                $display("\nERROR: Expected a5, received %x at time %t", qq, $time);
                $display("\nERROR: Expected a5, received %x at time %t", qq, $time);
 
              else
 
                $display("status: %t received %x", $time, qq);
 
 
              // read data from slave
              // read data from slave
              u0.wb_write(1, CR,      8'h20); // set command (read, ack_read)
              u0.wb_write(1, CR,      8'h20); // set command (read, ack_read)
              $display("status: %t read + ack", $time);
              $display("status: %t read + ack", $time);
 
 
Line 314... Line 328...
 
 
              // check data just received
              // check data just received
              u0.wb_read(1, RXR, qq);
              u0.wb_read(1, RXR, qq);
              if(qq !== 8'h5a)
              if(qq !== 8'h5a)
                $display("\nERROR: Expected 5a, received %x at time %t", qq, $time);
                $display("\nERROR: Expected 5a, received %x at time %t", qq, $time);
 
              else
 
                $display("status: %t received %x", $time, qq);
 
 
              // read data from slave
              // read data from slave
              u0.wb_write(1, CR,      8'h20); // set command (read, ack_read)
              u0.wb_write(1, CR,      8'h20); // set command (read, ack_read)
              $display("status: %t read + ack", $time);
              $display("status: %t read + ack", $time);
 
 
Line 348... Line 364...
              //
              //
              // check invalid slave memory address
              // check invalid slave memory address
              //
              //
 
 
              // drive slave address
              // drive slave address
              u0.wb_write(1, TXR,     8'ha0); // present slave address, set write-bit (== !read)
              u0.wb_write(1, TXR, {SADR,WR} ); // present slave address, set write-bit
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              u0.wb_write(0, CR,      8'h90); // set command (start, write)
              $display("status: %t generate 'start', write cmd a0 (slave address+write). Check invalid address", $time);
              $display("status: %t generate 'start', write cmd %0h (slave address+write). Check invalid address", $time, {SADR,WR} );
 
 
              // check tip bit
              // check tip bit
              u0.wb_read(1, SR, q);
              u0.wb_read(1, SR, q);
              while(q[1])
              while(q[1])
                   u0.wb_read(1, SR, q); // poll it until it is zero
                   u0.wb_read(1, SR, q); // poll it until it is zero
Line 384... Line 400...
              u0.wb_read(1, SR, q);
              u0.wb_read(1, SR, q);
              while(q[1])
              while(q[1])
              u0.wb_read(1, SR, q); // poll it until it is zero
              u0.wb_read(1, SR, q); // poll it until it is zero
              $display("status: %t tip==0", $time);
              $display("status: %t tip==0", $time);
 
 
              #25000; // wait 25us
              #250000; // wait 250us
              $display("\n\nstatus: %t Testbench done", $time);
              $display("\n\nstatus: %t Testbench done", $time);
              $finish;
              $finish;
          end
          end
 
 
endmodule
endmodule
 
 
 
 
 
 
 No newline at end of file
 No newline at end of file
 
 
 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.