cquyy 发表于 2015-12-28 21:38:41

I2C

`timescale 1ns / 1ps
module test(
sda
);

    reg    scl;
    inout sda;
    reg    sda_out;
    wire    sda_in;
    reg        data;
   
    reg start_flag, stop_flag;
   
    assign sda = sda_out ? 1'bz : 1'b0;
    assign sda_in = sda;
    pullup( sda );
   
   
    I2CTEST testmine(.SDA(sda), .SCL(scl));

    initial
      begin
         scl = 0;
            sda_out = 0;
            data = 8'h27;
            start_flag = 0;
            #160000;
            start ( );
      end
   
    always
    begin
       #50000 scl = ~scl;
   end
      
    always @ (posedge start_flag)
    begin
       repeat (8)
          begin
             wait ( scl == 0 );
                #20000;
                sda_out = data;
                #40000;
                data = data << 1;
            end
            wait (~ scl);
            #20000;
            sda_out = 1;
            #160000;
            stop ( );
    end
   
    always @ ( posedge stop_flag)
    begin
//       sda_out = 0;
//       #50000;
       sda_out = 1;
    end   

   
    task start;   
    begin
      wait (scl == 0);
      #20000;
      sda_out = 1;
      wait ( scl == 1 );
      #20000;
      sda_out = 0;
      start_flag = 1;
    end
    endtask
      
    task stop;
    begin
      wait ( scl == 0 );
      #20000;
      sda_out = 0;
      wait ( scl ==1 );
      #20000;
      sda_out = 1;
      stop_flag = 1;
      end
    endtask
      
endmodule</span>

nikola 发表于 2015-12-29 08:49:28

谢谢分享~~~~~~

khw123456 发表于 2015-12-29 13:48:38

页: [1]
查看完整版本: I2C