微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教xilinx V6如何I2C输出?

请教xilinx V6如何I2C输出?

时间:10-02 整理:3721RD 点击:
请教大家,xilinx V6如何I2C输出?写一个I2C模块烧到FPGA里,然后输出的两条线SCL SDA怎么定义到Pin上,SCL和SDA是三态门吧?

IIC Bus
The ML605 implements four IIC bus interfaces at the FPGA.
The "MAIN" IIC bus hosts four items:
• FPGA U1 Bank 34 "MAIN" IIC interface
• 8Kb NV Memory U6
• FMC HPC connector J64
• DDR3 SODIMM Socket J1
The "DVI" IIC bus hosts two items:
• FPGA U1 Bank 34 "DVI" IIC interface
• DVI codec U38 and DVI connector J63
The "LPC" IIC bus hosts two items:
• FPGA U1 Bank 33 "LPC" IIC interface
• FMC LPC connector J63
The "SFP" IIC bus hosts two items:
• FPGA U1 Bank 13 "SFP" IIC interface
• SFP module connector P4
其中FMC的IIC是提供给我们的端口么?怎么指定过去呢?SDA和SCL用的是三态门

是不是这样例化一个三态输出
IOBUF IOBUF_INST(
.O(out),
.I(in),
.EN(enable)
);
PULLIP PULLUP_INST(
.O(out)
);

PULLUP PULLUP_INST(
.O(out)
);
打错了,文档上说是week pull-up,为什么是弱上拉?I2C的SDA和SCL用弱上拉可以吧?

IOBUF KIO_0 (.O(KIO_I[0]), .IO(KIO[0]), .I(KIO_O[0]), .T(!we));
PULLDOWN pdIO0(.O(KIO[0]));
哦,应该是加个IOBUF就可以了吧

scl是output
sda是inout,具体要靠程序来控制

SCL是普通输出信号
SDA是双向信号,要使用一个三态输出

按协议SDA/SCL都是双向信号,有些芯片的I2C是标准协议的简化版,SCL可能是单向的。
assign sda = ~sda_out ? 1'b0 : 1'bz ;
assign scl = ~scl_out ? 1'b0 : 1'bz ;
assign sda_in = sda ;
assign scl_in = scl ;
当然也可以用其它描述方式,逻辑等效就可以了。
如果器件支持漏极开路输出就选择漏极开路输出,没有的话普通三态输出也可以,就是漏电流稍大。
上啦电阻是必须的,否则无法正常工作。



   (一)方式一
是不是这样例化一个三态输出,作为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)
);

谢谢



   请教,使用普通的三态门,上拉电阻阻值有要求么?

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

网站地图

Top