I2C接口信号的处理(SCL、SDA)

I2C有SCL,SDA这2根线,对这2个信号的处理如下:

always@(posedge clk or negedge rstn)begin

    if(!rstn)begin

      rg_sclD1<=1’b1;

      rg_sclD2<=1’b1;

      rg_sclD3<=1’b1;

      rg_sclD4<=1’b1;

      rg_sclD5<=1’b1;

      rg_sclD6<=1’b1;

      rg_sclD7<=1’b1;

      rg_sclD8<=1’b1;

      rg_sdaD1<=1’b1;

      rg_sdaD2<=1’b1;

      rg_sdaD3<=1’b1;

      rg_sdaD4<=1’b1;

      rg_sdaD5<=1’b1;

      rg_sdaD6<=1’b1;

      rg_sdaD7<=1’b1;

      rg_sdaD8<=1’b1;

  end

  else begin

       rg_sclD1<=xi_scl;

       rg_sclD2<= rg_sclD1;

       rg_sclD3<= rg_sclD2;

       rg_sclD4<= rg_sclD3;

       rg_sclD5<= wr_sclD5_nxt;

       rg_sclD6<= rg_sclD5;

       rg_sclD7<= rg_sclD6;

       rg_sclD8<= rg_sclD7;

       rg_sdaD1<=xi_sda;

       rg_sdaD2<= rg_sdaD1;

       rg_sdaD3<= rg_sdaD2;

       rg_sdaD4<= rg_sdaD3;

       rg_sdaD5<= wr_sdaD5_nxt;

       rg_sdaD6<= rg_sdaD5;

       rg_sdaD7<= rg_sdaD6;

       rg_sdaD8<= rg_sdaD7;

      end

end

assign wr_sclD5_nxt=(rg_sclD2==rg_sclD3&& rg_sclD3==rg_sclD4)? rg_sclD4:

rg_sclD5;

assignwr_sdaD5_nxt=(rg_sdaD2==rg_sdaD3&&rg_sdaD3==rg_sdaD4)? rg_sdaD4:rg_sclD5;

wr_sclD5_nxt,wr_sclD5_nxt这2个信号是当连续的三个延迟量相等则对其进行更新,否则不更新

上述代码中xi_scl,xi_sda分别是i2C的接口对外的2个信号

你可能感兴趣的:(I2C接口信号的处理(SCL、SDA))