[资料贡献] I2C

[复制链接]
查看1051 | 回复2 | 2015-12-28 21:38:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

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

    reg    scl;
    inout sda;
    reg    sda_out;
    wire    sda_in;
    reg    [7:0]    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[7];
                #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 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则