4. Zynq IO缓冲器结构与IBIS模型
Zynq 器件的 IO 资源分布在两个彼此独立的供电与配置域中:PS(Processing System)侧由 MIO/EMIO 控制器管理,PL(Programmable Logic)侧由 IOB(I/O Block)与 SelectIO 逻辑管理。两者虽然都遵循数字 IO 的基本电气规律,但在缓冲器类型、可配置参数、端接手段和建模方式上差异明显。理解这些差异,是后续做信号完整性仿真、约束编写和板级匹配的前提。
PS 侧 IO:MIO 与 EMIO 的缓冲器特征
PS 的 MIO 引脚数量固定(Zynq-7000 通常为 54 个),每个引脚的功能由 MIO 复用表决定,其 IO 缓冲器类型在芯片设计阶段就已固化。例如 MIO Bank0/1 通常为 1.8V 供电的 LVCMOS 缓冲器,部分引脚支持 3.3V;而涉及高速外设(如 QSPI、SD、USB、以太网)的引脚,其驱动能力、上下拉和端接选项由 PS 配置寄存器(如 MIO_PIN_xx 寄存器)设定,而不是由用户逻辑动态控制。
EMIO 则是把 PS 外设信号引出到 PL 引脚,此时信号经过 PL 的 IOB 输出,因此 EMIO 的电气特性实际由 PL 侧 IO 标准决定。这一点在设计中容易被忽略:一个从 PS 引出的 UART 信号,如果走 EMIO,其驱动强度和压摆率就变成了 PL IOB 的参数,而不是 PS MIO 的参数。
PL 侧 IO:IOB 结构与可配置参数
PL 的每个 IOB 由输入缓冲器、输出缓冲器、三态控制、上拉/下拉电阻、以及可选的 DCI 端接网络组成。输出缓冲器本质上是一组并联的 CMOS 驱动管,通过选择并联数量来改变驱动强度。以 7 系列为例,LVCMOS 输出驱动强度可配置为 4mA、8mA、12mA、16mA、24mA 等档位;压摆率(Slew Rate)可配置为 Slow 或 Fast。驱动强度决定输出阻抗和边沿电流能力,压摆率决定边沿上升/下降时间,两者共同影响过冲、振铃和 EMI。
输入侧则涉及 IBUF、IBUFDS、IBUFG 等原语,差分输入还需要考虑内部差分端接(DIFF_TERM)。对于需要精确匹配的接口,PL 还提供 DCI 功能,用内部参考电阻和外部精密电阻来校准输出阻抗或实现并行端接。
驱动强度与压摆率的实际影响
驱动强度越大,输出阻抗越低,边沿越陡,但回流电流和过冲也越大。压摆率设为 Fast 时,边沿时间短,适合高速信号;设为 Slow 时,边沿变缓,能降低串扰和 EMI,但会增加时序延迟。实际选择时,需要结合走线长度、负载电容和接收端阈值来判断。
一个常见的教学示例:某 LVCMOS33 输出驱动 50Ω 传输线,负载为 10pF。若驱动强度设为 8mA,输出阻抗约 30Ω,与 50Ω 线不完全匹配,会在接收端产生约 20% 的反射;若提高到 16mA,输出阻抗降到约 15Ω,反射更明显。此时更合理的做法不是继续加大驱动,而是启用 DCI 或串联端接电阻,使源端阻抗接近 50Ω。
片上端接 DCI 的原理
DCI(Digitally Controlled Impedance)的核心思想是:用芯片内部的参考电阻和外部精密电阻构成一个校准环路,自动调整 IO 缓冲器的输出阻抗或端接电阻,使其不受 PVT(工艺、电压、温度)漂移影响。7 系列中常见的 DCI 形式包括:
- 输出阻抗匹配(Output Impedance):使输出缓冲器阻抗等于传输线特征阻抗,实现源端端接。
- 并行端接(Parallel Termination):在接收端提供对 Vcco 或 GND 的端接电阻,吸收反射。
- 差分端接(Differential Termination):用于差分对,在差分对之间提供 100Ω 等端接。
DCI 需要外部参考电阻(通常为 100Ω 或 200Ω,精度 1%),连接到 VRN/VRP 引脚。FPGA 内部通过比较参考支路和复制支路的电流,动态调整端接网络中的晶体管导通数量,使等效电阻逼近目标值。配置时需要在约束中指定 DCI_CASCADE 或通过 IO 标准自动启用,并确保 VRN/VRP 引脚所在 Bank 的供电和参考电阻正确连接。
IBIS 模型:从结构到仿真
IBIS(Input/Output Buffer Information Specification)模型不包含芯片内部晶体管级电路,而是用 V-I 曲线和 V-t 曲线描述缓冲器的外部行为。一个典型的 IBIS 模型包含:
- Pullup / Pulldown:输出高/低时的 I-V 特性。
- Power Clamp / GND Clamp:ESD 二极管和钳位特性。
- Ramp:上升/下降沿的 dV/dt 信息。
- Package:封装寄生 RLC。
在 Zynq 设计中,IBIS 模型通常由厂商提供,按 Bank 电压、驱动强度、压摆率等条件分成多个 Model Selector。仿真时,需要根据实际配置选择对应的模型分支,否则得到的波形会与实测偏差较大。例如,驱动强度 8mA 与 16mA 对应不同的 Pullup/Pulldown 曲线,压摆率 Fast 与 Slow 对应不同的 Ramp 数据。
配置与验证要点
在 Vivado 中配置 PL IO 时,驱动强度和压摆率通过 IOSTANDARD 与 DRIVE、SLEW 属性指定,例如:
set_property IOSTANDARD LVCMOS33 [get_ports {data_out[*]}]
set_property DRIVE 8 [get_ports {data_out[*]}]
set_property SLEW SLOW [get_ports {data_out[*]}]
set_property DCI_CASCADE 34 [get_ports {data_out[*]}]
DCI 的参考电阻必须放在指定 Bank 的 VRN/VRP 引脚上,且该 Bank 的 VCCO 要与 IO 标准一致。若使用 DCI_CASCADE,则一个主 Bank 的校准结果可以级联到相邻从 Bank,减少外部电阻数量,但要求这些 Bank 的 VCCO 相同。
验证时,可以先在 Vivado 中生成 IBIS 模型文件,确认所选 Model Selector 与设计配置一致;再用 HyperLynx 或 ADS 等工具做通道仿真,观察接收端眼图和过冲。若发现振铃过大,优先检查驱动强度是否过高、压摆率是否设为 Fast、以及端接是否缺失。对于长走线或高负载,启用 DCI 并行端接通常比单纯降低驱动强度更有效。
总结来看,PS 与 PL 的 IO 缓冲器在可配置性上差异显著:PS 侧以固定功能和寄存器配置为主,PL 侧则提供驱动强度、压摆率、DCI 端接等完整控制手段。IBIS 模型是连接配置与仿真的桥梁,只有按实际配置选择正确的模型分支,仿真结果才具有参考价值。掌握这些关系后,才能在板级设计中合理选择 IO 标准、端接方式和驱动参数,为后续的信号完整性分析打下基础。