微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > I2C的FPGA连接

I2C的FPGA连接

时间:10-02 整理:3721RD 点击:
(一)方式一
是不是这样例化一个三态输出,作为I2C的sda输出?
IOBUF IOBUF_inst (
      .O(1'b0),     // Buffer output
      .IO(sda),   // Buffer inout port (connect directly to top-level port)
      .I(sda_in),     // Buffer input
      .T(~en)      // 3-state enable input, high=input, low=output
   );

(二)方式二
assign sda = (~en) ? 1'b0 : 1'bz ;
assign sda_in = sda ;


请教两种实现有什么区别?而且是否需要用下面的原语,pullup。
PULLUP PULLUP_INST(
.O(sda)
);

请教,用FPGA实现需要上拉么?上拉电阻一般选多少?

作为三态门,方式二是对的,但还差输入信号呀



   输入信号是en额

(二)方式二
assign sda = (~en) ? 1'b0 : 1'bz ;
assign sda_in = sda ;
第一句话有问题,1'b0应该改为输出端口信号!



   我这是带上拉的I2C接口,非常确认逻辑上没有错误

1,2都可以,i2c是 open drain。一般拉上啦都是在FPGA外加的,内部FPGA上啦没试过,你也可以试一下。



asic设计,我们可以在器件库里选择i2c是 open drain吧。在FPGA里如何指定为open drain呢,只能用普通的三态?


SDA要输出1如何输出?因为看写法是只能输出0(当en=0),因为当为输出时en必须为0,en为1时表示SDA是输入,看你的这个写法。


open drawn的意思是开漏输出,指的是ic只驱动low。你那两种写法都是驱动low的啊,你输出0的时候就oe为1,输出1就oe为0(其实不是输出1,是外部上啦1)。asic就选一般的pad,只是你把i端接0,oe或者是oen为你i2c的数据输出啊

pad也有自带上啦的,看你们用的什么pad了,这种PAD选型我不懂,会不会漏电什么,需不需要带斯密特触发,这些你们综合考虑吧

上拉电阻要多少啊,我也不知道,我做数字的,刚毕业1年,对有些东西还是不是很懂。一般几K的把,我只知道上啦电阻的会影响波形的上升沿,对异步采样会有点影响

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top