Xilinx FPGA IIC 硬件接口使用指南
1. 引言
IIC (Inter-Integrated Circuit),也称为 I2C,是一种由 Philips 开发的两线串行通信协议,广泛用于 FPGA 与低速外设(如传感器、EEPROM、显示模块等)之间的通信。IIC 以其简单性和多主多从架构成为 Xilinx FPGA 设计中的常见硬件接口。本文档基于 Xilinx Vivado 工具,详细介绍在 Xilinx FPGA 中实现和使用 IIC 接口的方法,重点介绍相关 IP 核的配置与使用,涵盖 Spartan、Artix、Kintex、Virtex 等系列。
2. IIC 基础
2.1 定义
IIC 是一种半双工、同步串行通信协议,使用两条信号线:
- SDA (Serial Data):数据线,用于传输数据。
- SCL (Serial Clock):时钟线,由主设备生成,用于同步通信。
IIC 支持多主多从架构,每个从设备具有唯一地址。
2.2 主要特性
- 通信模式:
- 标准模式:最高 100 kbps。
- 快速模式:最高 400 kbps。
- 高速模式:最高 3.4 Mbps(部分设备支持)。
- 数据帧格式:
- 起始条件:SDA 从高到低跳变,SCL 保持高电平。
- 地址帧:7 位或 10 位从设备地址 + 读/写位。
- 数据帧:8 位数据 + 1 位应答 (ACK/NACK)。
- 停止条件:SDA 从低到高跳变,SCL 保持高电平。
- 开漏驱动:SDA 和 SCL 需上拉电阻(通常 4.7 kΩ 或 10 kΩ)。
- 多主支持:支持总线仲裁和冲突检测。
- 从设备寻址:每个从设备有唯一地址,支持广播。
2.3 应用场景
- 与 IIC 传感器通信(如温度传感器、加速度计)。
- 配置外设(如音频编解码器、显示驱动芯片)。
- 读写 EEPROM 或其他存储设备。
- 低速、短距离的设备间通信。
3. Xilinx FPGA 中的 IIC 实现
Xilinx FPGA 支持通过以下方式实现 IIC:
- 使用 Vivado IP 核:通过 AXI IIC IP 快速实现主/从模式。
- 自定义 HDL 设计:用 Verilog/VHDL 编写 IIC 控制器,适合特定需求。
- Zynq PS IIC:Zynq 芯片的处理系统 (PS) 提供内置 IIC 控制器。
本节重点介绍使用 Vivado IP 核实现 IIC 的方法。
3.1 相关 IP 核
Xilinx Vivado 提供以下 IIC 相关 IP 核:
- AXI IIC:
- 支持 IIC 主模式和从模式。
- 兼容标准模式(100 kbps)和快速模式(400 kbps)。
- 支持 AXI4-Lite 接口,易于与 MicroBlaze 或自定义逻辑集成。
- 支持 7 位和 10 位寻址、动态地址配置。
- 包含中断支持,适合复杂系统。
- Zynq PS IIC(仅限 Zynq 系列):
- Zynq 处理系统 (PS) 提供两个内置 IIC 控制器。
- 通过 PS 配置,无需 PL 逻辑,适合 Zynq 设计。
3.2 AXI IIC 配置步骤
以下以 AXI IIC 为例,介绍 IP 配置和使用流程。
3.2.1 配置 IP
- 打开 Vivado,进入 IP Catalog。
- 搜索并选择 AXI IIC。
- 配置参数:
- IIC 频率:选择标准模式 (100 kHz) 或快速模式 (400 kHz)。
- 实际 SCL 频率由输入时钟和分频比决定,公式为:
[
\text{SCL 频率} = \frac{\text{输入时钟频率}}{\text{分频比}}
]
- 实际 SCL 频率由输入时钟和分频比决定,公式为:
- 接口:AXI4-Lite(默认)。
- 寻址模式:7 位或 10 位地址。
- 主/从模式:选择主模式、从模式或两者。
- 从地址:若启用从模式,设置 FPGA 的 IIC 从地址。
- 中断:可选,启用后可通过中断处理数据收发。
- 上拉电阻:确认 FPGA 开发板是否内置上拉电阻,否则需外部添加。
- IIC 频率:选择标准模式 (100 kHz) 或快速模式 (400 kHz)。
- 生成 IP 核,获取 Verilog/VHDL 文件。
- 将 IP 添加到设计中,通常与 AXI 互连模块和处理器(如 MicroBlaze)连接。
3.2.2 端口说明
以下是 AXI IIC 的主要外部端口:
端口名 | 方向 | 描述 |
---|---|---|
s_axi_aclk | 输入 | AXI 时钟 |
s_axi_aresetn | 输入 | AXI 复位(低有效) |
scl_i | 输入 | SCL 输入(用于检测外部 SCL 信号) |
scl_o | 输出 | SCL 输出(主模式生成 SCL 信号) |
scl_t | 输出 | SCL 三态控制(开漏驱动) |
sda_i | 输入 | SDA 输入(接收数据) |
sda_o | 输出 | SDA 输出(发送数据) |
sda_t | 输出 | SDA 三态控制(开漏驱动) |
iic2intc_irpt | 输出 | 中断信号(可选) |
AXI 接口:通过 AXI4-Lite 总线与处理器或控制逻辑通信,包含地址、数据和控制信号。
3.2.3 例化示例
以下是一个简单的 AXI IIC 例化(Verilog):
module iic_example (
input wire clk,
input wire resetn,
inout wire scl,
inout wire sda,
output wire interrupt
);
wire scl_i, scl_o, scl_t;
wire sda_i, sda_o, sda_t;
// 三态缓冲器处理开漏信号
assign scl = scl_t ? 1'bz : scl_o;
assign sda = sda_t ? 1'bz : sda_o;
assign scl_i = scl;
assign sda_i = sda;
axi_iic_0 u_iic (
.s_axi_aclk(clk), // AXI 时钟
.s_axi_aresetn(resetn), // AXI 复位
.scl_i(scl_i), // SCL 输入
.scl_o(scl_o), // SCL 输出
.scl_t(scl_t), // SCL 三态
.sda_i(sda_i), // SDA 输入
.sda_o(sda_o), // SDA 输出
.sda_t(sda_t), // SDA 三态
.iic2intc_irpt(interrupt) // 中断
);
endmodule
说明:axi_iic_0
为 Vivado 生成的 IP 模块名,需根据实际配置调整。SCL 和 SDA 使用三态缓冲器实现开漏驱动。
3.3 Zynq PS IIC 配置
对于 Zynq 系列,IIC 可通过处理系统 (PS) 配置:
- 打开 Vivado 的 Block Design。
- 添加 Zynq Processing System IP。
- 双击 Zynq IP,进入配置界面。
- 在 MIO Configuration 中启用 IIC0 或 IIC1。
- 配置 IIC 参数:
- 频率:100 kHz 或 400 kHz。
- 上拉电阻:确认 MIO 引脚是否启用内部上拉。
- 将 IIC 引脚分配到 MIO 引脚(无需 PL 逻辑)。
- 生成位流并导出到 SDK/Vitis 进行软件开发。
4. 设计注意事项
4.1 上拉电阻
- IIC 总线要求 SDA 和 SCL 接上拉电阻(通常 4.7 kΩ 或 10 kΩ)。
- 检查 FPGA 开发板是否内置上拉电阻,若无,需外部添加。
- 电阻值需根据总线电容和频率调整,过大可能导致信号上升时间过长。
4.2 时钟频率
- 确保 SCL 频率与从设备兼容(参考从设备数据手册)。
- 输入时钟频率需支持目标 SCL 频率。例如,50 MHz 时钟可通过分频实现 100 kHz 或 400 kHz。
4.3 总线仲裁
- 在多主模式下,启用 AXI IIC 的仲裁功能,防止总线冲突。
- 监控总线状态寄存器,检测冲突或错误。
4.4 电平兼容
- FPGA 的 IIC 引脚通常为 3.3V 或 1.8V 逻辑电平。
- 若从设备使用 5V 电平,需使用电平转换器(如 PCA9306)。
- 确保所有设备电平匹配,避免损坏器件。
4.5 仿真与验证
- 使用 Vivado 仿真器测试 AXI IIC IP。
- 测试场景:
- 主模式:发送/接收数据到从设备。
- 从模式:响应主设备寻址和数据请求。
- 起始/停止条件生成。
- 中断触发和错误处理。
- 使用逻辑分析仪或 IIC 调试工具(如 Saleae Logic 或 Beagle I2C 分析仪)验证硬件行为。
5. 常见问题与解决
问题 | 可能原因 | 解决方法 |
---|---|---|
无 IIC 通信 | 上拉电阻缺失或引脚未正确连接 | 检查上拉电阻和引脚分配 |
数据错误 | SCL 频率过高或从设备地址错误 | 降低频率,检查从设备地址 |
总线卡死 | 缺少停止条件或从设备未应答 | 重启 IIC 控制器,检查从设备状态 |
中断未触发 | 中断未启用或配置错误 | 检查 IP 配置和中断控制器连接 |
时序违例 | AXI 时钟频率过高或约束不足 | 添加时序约束,降低时钟频率 |
6. 设计工具推荐
- SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!