[FPGA基础] IIC篇

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:

  1. 使用 Vivado IP 核:通过 AXI IIC IP 快速实现主/从模式。
  2. 自定义 HDL 设计:用 Verilog/VHDL 编写 IIC 控制器,适合特定需求。
  3. 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
  1. 打开 Vivado,进入 IP Catalog
  2. 搜索并选择 AXI IIC
  3. 配置参数:
    • IIC 频率:选择标准模式 (100 kHz) 或快速模式 (400 kHz)。
      • 实际 SCL 频率由输入时钟和分频比决定,公式为:
        [
        \text{SCL 频率} = \frac{\text{输入时钟频率}}{\text{分频比}}
        ]
    • 接口:AXI4-Lite(默认)。
    • 寻址模式:7 位或 10 位地址。
    • 主/从模式:选择主模式、从模式或两者。
    • 从地址:若启用从模式,设置 FPGA 的 IIC 从地址。
    • 中断:可选,启用后可通过中断处理数据收发。
    • 上拉电阻:确认 FPGA 开发板是否内置上拉电阻,否则需外部添加。
  4. 生成 IP 核,获取 Verilog/VHDL 文件。
  5. 将 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) 配置:

  1. 打开 Vivado 的 Block Design
  2. 添加 Zynq Processing System IP。
  3. 双击 Zynq IP,进入配置界面。
  4. MIO Configuration 中启用 IIC0 或 IIC1。
  5. 配置 IIC 参数:
    • 频率:100 kHz 或 400 kHz。
    • 上拉电阻:确认 MIO 引脚是否启用内部上拉。
  6. 将 IIC 引脚分配到 MIO 引脚(无需 PL 逻辑)。
  7. 生成位流并导出到 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烧写
    • 下载器无限扩展
    • 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值