一、SelectIO 的基础用法
基础用法目标:
实现简单的输入/输出控制,满足GPIO 控制、LED 显示、按键检测等一般接口或低速通信需求
支持的功能:
| 功能 |
描述 |
| 单端输入/输出 |
使用 IOBUF 实现双向 I/O 缓冲器 |
| 输出驱动能力调节 |
可设置为 2mA, 4mA, 8mA, 12mA 等 |
| 上拉/下拉电阻 |
可配置内部上拉或下拉电阻 |
| 输入同步寄存器 |
防止亚稳态,提高稳定性 |
| LVCMOS/LVTTL 接口标准 |
最常见的数字电平接口 |
常见应用场景:
- 控制 LED、按键、开关等简单外设
- UART、SPI、I2C 等低速串行接口
- ADC数据采集
- 分频时钟输出
示例代码:使用 IOBUF 实现双向 I/O
IOBUF io_inst (
.O (data_in), // 输入信号
.IO(data_pin), // FPGA 引脚
.I (data_out), // 输出信号
.T (output_en) // 三态控制,0=输出,1=输入
);
Vivado 中的配置方法:
- 在 I/O Planning 视图中分配引脚
- 配置驱动强度、上下拉等属性
- XDC 约束
二、SelectIO 的进阶用法
进阶用法目标:
实现高速接口、DDR 模式、差分信号传输、延迟校准等功能,满足高性能通信或存储器接口需求。
支持的功能:
| 功能 |
描述 |
| DDR 模式支持 |
使用 ODDR/IDDR 实现在一个时钟周期内传输两个数据位 |
| 差分接口 |
支持 LVDS、RSDS、Mini-LVDS 等差分信号标准 |
| IDELAY / ODELAY 延迟单元 |
调整输入/输出信号的延时以对齐时序 |
| ISERDES / OSERDES 原语 |
实现高速串并转换,用于千兆级接口 |
| 数据眼图对齐 |
对高速源同步接口进行精确采样点调整 |
| 特定接口协议支持 |
DDR3 SDRAM、HDMI、LVDS Camera、RGMII 等 |
常见应用场景:
- DDR3/DDR4 存储器接口
- HDMI 发送端(TMDS 编码)
- 千兆以太网接口(RGMII、SGMII)
- 工业相机图像采集(Camera Link、LVDS 视频流)
- 高速 ADC/DAC 接口
示例代码:使用 ODDR 实现 DDR 输出模式
ODDR #(
.DDR_CLK_EDGE("OPPOSITE_EDGE"), // 上升沿和下降沿分别采样 D1 和 D2
.INIT(1'b0),
.SRTYPE("SYNC")
) ODDR_inst (
.Q (data_out), // 输出信号
.C (clk), // 时钟
.CE(1'b1), // 使能始终打开
.D1(data_even), // 第一个数据
.D2(data_odd), // 第二个数据
.R(1'b0), // 复位
.S(1'b0) // 置位
);
三、用法对比
| 特性 |
基础用法 |
进阶用法 |
| 目标 |
简单 I/O 控制 |
高速接口、DDR、差分通信 |
| 数据率 |
< 100 Mbps |
> 200 Mbps,可达 Gbps |
| 常用原语 |
IOBUF、BUFG、FDCE |
ODDR、IDDR、ISERDESE2、OSERDESE2、ODELAYE2 |
| 典型接口 |
UART、GPIO、I2C |
DDR3、LVDS、RGMII、HDMI |
| XDC 约束 |
IO约束 |
时序约束 |
| 是否需要 PLL/MMCM |
否 |
通常需要 |
| 开发工具支持 |
Vivado GUI + HDL |
Vivado IP Integrator + 原语 + 时序分析 |
四、如何选择基础 or 进阶用法?
| 设计需求 |
推荐用法 |
| 控制 LED、读取按键、GPIO 扩展 |
基础用法 |
| UART、I2C、SPI |
基础用法 |
| DDR3/DDR4 |
进阶用法 |
| LVDS 视频传输、摄像头接口 |
进阶用法 |
| 高速以太网接口(RGMII、SGMII) |
进阶用法 |
| HDMI 发送/接收 |
进阶用法 |
| MIG 核 |
进阶用法 |
建议
- 入门学习推荐先掌握基础用法,熟悉引脚配置、IOBUF 使用、XDC 文件编写。
- 当涉及高速接口或 DDR 操作时,再深入学习进阶用法,包括 ODDR、ISERDES、IDELAY 等模块的使用。