这一篇在干嘛?

你在 Verilog 里写一句 assign led = key;,信号是怎么从芯片引脚走到内部逻辑的?中间其实隔着两层硬件:IOB(输入输出缓冲器)和 IOL(输入输出逻辑单元)。这一篇按官方 IO 用户指南的脉络,把这两层的结构、能配的参数、支持的电平标准全部过一遍,最后再解决两个实战问题:5V 信号怎么接、Bank 电压和信号电压不一致怎么办。

先认识两个主角:IOL 和 IOB

EAGLE(安路 EAGLE 系列,EG4S20 就属于这一家子)的 IO 相关资源分两块:

  • IOL(Input & Output Logic,输入输出逻辑单元):离内部逻辑近,负责”打拍”——用寄存器把高速信号降速、对齐,让内核电路跟得上。
  • IOB(Input & Output Buffer,输入输出缓冲器):贴着芯片引脚,负责”物理层”——驱动、接收、电平标准、驱动强度、斜率这些电气参数都归它管。

每个 IOB 都包含输入、输出和三态驱动器,可以按各种 I/O 标准配置;差分 I/O 会用掉同一模块里的两个 IOB(一个管 P、一个管 N)。各 IOB 直接连接 IOL 组成”输入输出逻辑对”,既走数据也走三态控制。

先把 IOB 的整体框图放在这里,后面讲电气参数时你可以回来对照:

基本 IOB 框图:展示 IOB 内部输入、输出、三态驱动器与内部逻辑及焊盘的连接关系

IOL 输入侧:信号进门的四种姿势

IOL 里的输入寄存器专门用来处理高速接口——先把高速数据在引脚附近”接住”,降频成内部核心逻辑能处理的速率。输入寄存器里都带可配置延时单元辅助数据采样,还增强了对通用双边沿数据(GDDR)的支持。具体分几种模式:

普通输入模式

最直白的一种:信号从引脚进来,直接进 FPGA 内部逻辑,中间不打拍。低速信号这么用完全没问题。

普通输入模式框图:信号不经过寄存器直接进入 FPGA 内部逻辑

SDR 输入模式

比普通模式多用了 IOL 寄存器打一拍,可以有效改善 IO 的时序性能。信号速率上来了、时序开始紧张时,就该切到 SDR。

SDR 输入模式框图:信号经 IOL 寄存器采样后进入内部逻辑

DDR 输入模式(iDDRx1 / iDDRx2)

IOL 里有专用寄存器支持 iDDRx1 和 iDDRx2 两种双边沿模式。

iDDRx1 同沿输入模式:DFF5 和 DFF6 分别在时钟下降沿、上升沿采样输入数据,再用 DFF8 把数据同步到上升沿。注意代价——由于 DFF8 的引入,这路数据相对另一路要晚一个时钟周期

iDDRx1 同沿 Pipelined 输入模式:为了补偿上面那个”晚一拍”,再引入一级 DFF10 做流水,把两边对齐。

iDDRx2 输入模式:想跑更高速率就用它。此时 PAD 与 FPGA 内部逻辑的速率比是 4:1——第一级采样 DFF 用高速串行时钟 SCLK 触发,完成高速数据采样和 1:2 分离;第二级 DFF 用 FPGA 系统时钟 PCLK 触发,把数据同步到内核频率。PCLK 是 SCLK 速度的一半

iDDRx2 输入模式框图:SCLK 第一级采样分离,PCLK 第二级同步到内核

怎么选模式?

记一条主线就行:速率低 → 普通;速率高但单边沿 → SDR;双边沿 → DDR 系(x1 简单但对不齐,需要就用 Pipelined;要吃满速度上 x2,代价是内部逻辑要按 4:1 降速处理数据)。

输入延时单元

每个 IOL 逻辑单元里还藏着一个可编程输入延时单元:支持 32 级调节,最大延时 3.8ns,采用静态控制延迟的方式。做源同步接口时,用它微调数据相对时钟的相位非常好用。

IOL 输出侧:对称的一套

输出寄存器负责内部核心逻辑到高速 I/O 接口的时序,结构与输入侧基本镜像:

输出寄存器框图:内部逻辑经 IOL 输出寄存器到达焊盘

  • 普通输出模式:信号直接从 FPGA 内部逻辑输出到 PAD,不打拍。
  • SDR 输出模式:用 IOL 寄存器打一拍,改善 IO 时序性能。
  • oDDRx1 输出模式:数据 DO0、DO1 被 SCLK 同沿采样进 DFF7、DFF8,再分别在时钟上升沿、下降沿输出到 Opad。
  • oDDRx2 输出模式:支持更高 IO 速度,PAD 与内部逻辑速率比同样是 4:1——第一部分 DFF 由 PCLK 触发,完成数据采样和 2:1 并串转换;第二部分 DFF 由高速 SCLK 触发,完成高速串行输出。PCLK 为 SCLK 速度的一半。

oDDRx2 输出模式框图:PCLK 完成并串转换,SCLK 完成高速串行输出

  • oDDRx2L 输出模式:oDDRx2 的省资源版——直接用内部 SCLK 的 2 分频当 PCLK,省掉 1 个 CLK,代价是数据输出比 oDDRx2 模式晚一个 SCLK 时钟周期

输出延时单元

每个 IOL 逻辑单元内也有一个可编程输出延时单元:总共 4 级调节,每级延时 100ps,同样支持静态控制。

IOB:电平标准与可配置项

到了电气层,IOB 支持的接口标准分两大类:

  • 单端 I/O 标准:LVCMOS、LVTTL、PCI
  • 差分 I/O 标准:LVDS、LVPECL、BLVDS

在支持这些电平标准的同时,IOB 还提供五个可配置项,都是做硬件设计时天天打交道的旋钮:

配置项干嘛用的
输出驱动能力调节控制输出电流强度,影响信号完整性和功耗
输出 Slew Rate 调节控制边沿斜率,斜率太快容易振铃、太慢时序吃紧
弱上拉/下拉电阻选择引脚悬空时给个默认电平,防止输入乱跳
PCI Clamp 使能输入箝位二极管,接 5V 信号时救命的(后面细讲)
Bus Hold 功能使能总线保持,无驱动时锁住最后一个电平

差分要占两个 IOB

再强调一次:差分 I/O 使用同一模块中的两个 IOB。规划引脚时别按单端数量算余量,不然差分对一多,IO 就不够用了。

高速差分接口:LVDS 怎么用

差分是高速传输的主力。EG4S20 支持的差分标准按所在 Bank 位置(左/右,还是上/下/左/右)能力不一样,收发和是否需要外部电阻都有差别:

差分标准I/O Location接收支持接收外部电阻发送支持发送外部电阻
LVDS左/右YesNoYesNo
LVDS上/下/左/右YesYesYes3 电阻
RSDS左/右YesNoYesNo
RSDS上/下/左/右YesYesYes3 电阻
BLVDS上/下/左/右YesYesYesYes
LVPECL左/右YesNo--
LVPECL上/下/左/右YesYesYes3 电阻

看这张表能读出一个规律:左/右边的 Bank 差分能力更强(收发都不用外部电阻),上/下边就要外挂电阻。布局约束时把高速差分往左右两边放,能省不少外围器件。

True LVDS vs Emulated LVDS

作为 LVDS25 标准输入时,True LVDS 和 Emulated LVDS 都能用,最大输入频率 400MHz(即 800Mbps)

  • True LVDS 输出:采用 LVDS25 标准直接输出 LVDS 电平,无需外部匹配电阻,最大输出频率 400MHz(800Mbps)
  • Emulated LVDS 输出:采用 LVDS25E 标准,最大输出频率只有 166MHz,且必须外接 3R 电阻网络对输出电压摆幅进行衰减,才能满足 LVDS 标准。想降低功耗或改善噪声容限,可以通过改变电阻网络值来实现。

Emulated LVDS 输出:通过 3R 电阻网络衰减输出摆幅

Emulated LVDS 的推荐电阻值和对应信号幅值如下(数据基于驱动能力设定为 8mA;接收端的 100Ω 端接电阻可以是片上电阻也可以是片外电阻):

Rs(欧姆)Rp(欧姆)LVDSE25 幅值(毫伏)LVDSE33 幅值(毫伏)
300118195256
210127270355
150140365483
115160460610

耦合方式怎么选

接收端有直流耦合和交流耦合两种推荐电路:

LVDS 直流耦合推荐电路

LVDS 交流耦合推荐电路

LVDS 两条硬规矩

  1. 如果接收端 PAD 上的差分摆幅大于 500mV,只能使用片外 100Ω 差分匹配电阻。
  2. 交流耦合时,若发送器内部没有 100Ω 匹配电阻,需要在片外补一个 100Ω 匹配电阻。

LVPECL 的输入输出限制

LVPECL 这边规则更细:

  • EG4 的 IOB 支持 LVPECL33 输入。对端器件是 2.5V 的可以直接输入;对端是 3.3V 的,共模电压要往下拉 2V,建议使用外接匹配电阻网络,不要使用内部电阻
  • IOB 管脚不支持 True LVPECL33 输出,只支持 LVPECL33_E 输出

LVPECL 输入建议外接如下耦合电路:

LVPECL 直流耦合推荐电路

LVPECL 交流耦合推荐电路

布线提醒

差分走线要注意等长和阻抗匹配,这是所有差分标准通用的铁律,LVPECL 尤其不能省。

I/O 分组:Bank 是怎么回事

EAGLE 器件有 8 个 I/O 组(Bank):每个边有两个用户 I/O 组;组 1 位于靠近配置逻辑(config)的下方,包含专用/共享配置接口。

另外两个要点:

  • 每一个 I/O 组包含两个参考电压输入
  • 每一个 I/O 组由对应的 VCCIO 供电。

I/O 组示意图:芯片四边各分布两个用户 I/O 组,组 1 靠近配置逻辑

VCCIO 决定了这一组的电平

同一个 Bank 里的引脚共享一个 VCCIO,所以规划电平标准时按 Bank 划分:3.3V 的信号和 2.5V 的信号不要混在同一个 Bank 里。

5V 信号怎么接:兼容 5V 输入

先说结论:EAGLE I/O 的工作电压范围是 1.8V–3.3V,不能直接接收 5V 输入

但老系统里 5V 信号又确实存在,怎么办?官方给的办法是”外串电阻 + 打开片内 PCI 箝位二极管”:

  1. 在软件中打开 Eagle I/O 内部的 PCI 箝位二极管,把输入端口接收到的电压降到器件安全范围内;
  2. 外部串接电阻 R 限流,R 的取值取决于 PCI 箝位二极管的电流特性。

箝位二极管开关设置界面

5V 输入驱动 Eagle 器件的连接方式:串电阻并使能箝位二极管

PCI 箝位二极管的电流特性(压降越大、电流猛增):

VD(V)Imax单位
0.00.92uA
0.19.2uA
0.220uA
0.330.4uA
0.443.3uA
0.576.5uA
0.60.15mA
0.70.36mA
0.82.85mA
0.99.42mA

串阻怎么算

为支持 5V 输入,建议 VCCIO 工作在 2.5–3.0V 范围,否则 IO 电压会超过安全电压,长期使用会降低器件寿命。I/O 器件最大容限绝对电压 VIMAX = 3.7V

官方给的算例:设 VCCIO = 2.5V,分压后 IO 输入端接收到的电压 VI = 3.3V,则二极管上的压降 VDIO = VI − VCCIO = 3.3 − 2.5 = 0.8V。查表得 IDIO@0.8V = 2.85mA,于是 R = (5 − 3.3)V / 2.85mA ≈ 596Ω

串不同电阻的实测代价

串了电阻,边沿会变缓。官方实测:

  • R = 330Ω:上升时间 7.8ns,下降时间 12ns;
  • R = 600Ω:上升时间 12ns,下降时间 21ns。

电阻是双刃剑

电阻越大,箝位电流越小越安全,但边沿越慢。5V 兼容输入只适合低速控制信号——你在 5V 总线上跑几十 MHz 试试,波形就糊了。

Vpad 不等于 VCCIO 时,IO 属性怎么设

最后是中文手册里很实用的一节。Vpad 指 pad 上的电压,VCCIO 指 Bank IO 电压,两者不匹配时有推荐的属性设置:

Property输入:兼容 5V输入:3.63 > Vpad > VCCIO输出:3.63 > Vpad > VCCIO
PCI Clamp开启 + 电阻分压关闭关闭
Pull Up关闭关闭关闭

最容易踩的坑:上电时序

兼容 5V 模式场景下,内部 PCI Clamp 只有在芯片启动后才打开。如果芯片启动前就有 5V 输入,必须在外部增加一个二极管。也就是说,“软件里使能了箝位”不等于”上电全程都受保护”。

手册里没细说的事

这份 IO 用户指南聚焦在 IOL/IOB 结构、电平标准与电气应用上。有几样你在别的资料里会见到、但这份手册没有展开的内容,这里提前打个招呼,免得你翻来翻去找不着:

  • SSTL、HSTL 等更多电平标准的详细参数:本手册列出的单端标准是 LVCMOS/LVTTL/PCI,差分是 LVDS/RSDS/BLVDS/LVPECL,SSTL/HSTL 的电压与速率参数要去数据手册里查 I/O 直流电学特性(手册注释也说明”输入电平判决遵守数据手册中关于 I/O 直流电学特性描述”)。
  • 未用 IO 的处理方式、IO 上电默认状态:本手册未涉及,建议查阅器件数据手册或 TD 软件用户指南。
  • TD 工具里这些属性(驱动强度、Slew、上下拉、PCI Clamp、Bus Hold)具体在哪个界面勾选:手册只给出了功能与设置原则,具体操作路径看 TD 软件的用户指南,比如前文贴出的”箝位二极管开关设置”就是软件里的一个配置页。