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)
);
是不是这样例化一个三态输出,作为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的把,我只知道上啦电阻的会影响波形的上升沿,对异步采样会有点影响
