很多初学 FPGA 的人以为 IO 资源就是管脚分配和驱动电流配置。其实远不止这些。FPGA 的 IO 是连接外部世界与内部逻辑的完整链路,从电气特性的处理到高速信号的逻辑转换,都包含在内。像 IBUFDS、OBUFDS、IDDR、ODDR 这些常用的原语,本质上都是 IO 资源的一部分。信号从物理管脚进到内部逻辑,到底经历了哪些处理?下面结合几家主流厂商的架构,拆开来看。
IOB 与 IOL 的划分
像 Xilinx 的 SelectIO 结构,普遍分成两块:IO BUFFER(IOB)和 IO LOGIC(IOL)。其他厂商叫法可能不同,但框架很类似。
- IOB:主要负责底层的电气特性。比如差分信号和单端信号之间的转换,不同电平标准(LVCMOS、LVDS等)的适配,还有压摆率、上下拉电阻、片内终端电阻这些配置。说白了,它是信号刚进芯片时,或要送出芯片时,在物理层上的处理。
- IOL:主要负责数字逻辑。包括串并/并串转换(ISERDES/OSERDES)、SDR/DDR 转换(像 IDDR/ODDR 原语)、延时调节、输入输出寄存器等。这些都是处理时序和位宽的逻辑资源。
Xilinx 把 ISERDES 和 OSERDES 称为'高级 SelectIO 逻辑资源',但其他厂商更多直接把它们归入 IOL。从概念上,归入 IOL 更干净,避免把纯逻辑功能和物理接口混在一起。
下面几家的结构图可以直观看出这种划分:
厂商的命名略有差异:Xilinx 称 IOB 与 SelectIO Logic Resources,紫光称 IO BUFFER 与 IO LOGIC,安路和高云则沿用 IOB 与 IOL 或类似叫法。
IOB 的电气处理
IOB 要处理物理层的事情。举个例子,FPGA 内部大部分走的是单端信号,如果外部输入是 LVDS 差分对,IOB 里的差分转单端电路就开始工作;反过来输出时,内部单端信号要转成差分送出,也靠 IOB。电平标准转换也一样,外部可能是 LVCMOS33,内部核心电压可能是 1.0V 或 1.2V,IOB 里会有电平转换电路。
此外,IOB 还控制驱动强度、压摆率、片内终端电阻(比如 DDR 接口需要的 ODT)等。像安路 DR1 系列的 IOB 结构图里,能清楚看到可编程上拉/下拉、三态控制、LVDS 支持这些功能。Xilinx 的 HR Bank IOB 原理图相对更抽象,但背后的机制类似。
IOL 的逻辑职责
IOL 这块更容易理解,就是一套可配置的逻辑链。主要做几件事:
- 串并转换:从外部进来的高速串行数据,通过 ISERDES 串转并,变成宽的并行数据给内部逻辑用;发送时,再通过 OSERDES 并转串打出去。
- 双沿采样:比如 IDDR 原语,用一个时钟的两个沿分别捕获数据,把 DDR 信号转成两个 SDR 流,带宽利用率翻倍。
- 时序调整:里面有 IDELAY 这样的模块,可以精确调整输入信号的延迟,对高速接口做时序对齐很有用。
高云的 IOL 原理图里把这些模块都画出来了,包括输入侧的 IDELAY、IREG、IDES,输出侧的 ODELAY、OREG、ODES 等。不管是输入还是输出路径,都有可配置的延时和寄存器链,这让设计者在调高速接口时有更多手段。
实际怎么用
在实际工程里,IOB 的功能主要通过管脚约束文件来配。比如下面这段 Tcl 约束,把一个 led 信号挂到 L16 引脚,电平选 LVCMOS33,驱动电流 16mA,关掉上下拉电阻,摆率选慢速:

