这一篇在干嘛?
你在 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 的整体框图放在这里,后面讲电气参数时你可以回来对照:

IOL 输入侧:信号进门的四种姿势
IOL 里的输入寄存器专门用来处理高速接口——先把高速数据在引脚附近”接住”,降频成内部核心逻辑能处理的速率。输入寄存器里都带可配置延时单元辅助数据采样,还增强了对通用双边沿数据(GDDR)的支持。具体分几种模式:
普通输入模式
最直白的一种:信号从引脚进来,直接进 FPGA 内部逻辑,中间不打拍。低速信号这么用完全没问题。

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

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 速度的一半。

怎么选模式?
记一条主线就行:速率低 → 普通;速率高但单边沿 → SDR;双边沿 → DDR 系(x1 简单但对不齐,需要就用 Pipelined;要吃满速度上 x2,代价是内部逻辑要按 4:1 降速处理数据)。
输入延时单元
每个 IOL 逻辑单元里还藏着一个可编程输入延时单元:支持 32 级调节,最大延时 3.8ns,采用静态控制延迟的方式。做源同步接口时,用它微调数据相对时钟的相位非常好用。
IOL 输出侧:对称的一套
输出寄存器负责内部核心逻辑到高速 I/O 接口的时序,结构与输入侧基本镜像:

- 普通输出模式:信号直接从 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 速度的一半。

- 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 | 左/右 | Yes | No | Yes | No |
| LVDS | 上/下/左/右 | Yes | Yes | Yes | 3 电阻 |
| RSDS | 左/右 | Yes | No | Yes | No |
| RSDS | 上/下/左/右 | Yes | Yes | Yes | 3 电阻 |
| BLVDS | 上/下/左/右 | Yes | Yes | Yes | Yes |
| LVPECL | 左/右 | Yes | No | - | - |
| LVPECL | 上/下/左/右 | Yes | Yes | Yes | 3 电阻 |
看这张表能读出一个规律:左/右边的 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 的推荐电阻值和对应信号幅值如下(数据基于驱动能力设定为 8mA;接收端的 100Ω 端接电阻可以是片上电阻也可以是片外电阻):
| Rs(欧姆) | Rp(欧姆) | LVDSE25 幅值(毫伏) | LVDSE33 幅值(毫伏) |
|---|---|---|---|
| 300 | 118 | 195 | 256 |
| 210 | 127 | 270 | 355 |
| 150 | 140 | 365 | 483 |
| 115 | 160 | 460 | 610 |
耦合方式怎么选
接收端有直流耦合和交流耦合两种推荐电路:


LVDS 两条硬规矩
- 如果接收端 PAD 上的差分摆幅大于 500mV,只能使用片外 100Ω 差分匹配电阻。
- 交流耦合时,若发送器内部没有 100Ω 匹配电阻,需要在片外补一个 100Ω 匹配电阻。
LVPECL 的输入输出限制
LVPECL 这边规则更细:
- EG4 的 IOB 支持 LVPECL33 输入。对端器件是 2.5V 的可以直接输入;对端是 3.3V 的,共模电压要往下拉 2V,建议使用外接匹配电阻网络,不要使用内部电阻。
- IOB 管脚不支持 True LVPECL33 输出,只支持 LVPECL33_E 输出。
LVPECL 输入建议外接如下耦合电路:


布线提醒
差分走线要注意等长和阻抗匹配,这是所有差分标准通用的铁律,LVPECL 尤其不能省。
I/O 分组:Bank 是怎么回事
EAGLE 器件有 8 个 I/O 组(Bank):每个边有两个用户 I/O 组;组 1 位于靠近配置逻辑(config)的下方,包含专用/共享配置接口。
另外两个要点:
- 每一个 I/O 组包含两个参考电压输入。
- 每一个 I/O 组由对应的 VCCIO 供电。

VCCIO 决定了这一组的电平
同一个 Bank 里的引脚共享一个 VCCIO,所以规划电平标准时按 Bank 划分:3.3V 的信号和 2.5V 的信号不要混在同一个 Bank 里。
5V 信号怎么接:兼容 5V 输入
先说结论:EAGLE I/O 的工作电压范围是 1.8V–3.3V,不能直接接收 5V 输入。
但老系统里 5V 信号又确实存在,怎么办?官方给的办法是”外串电阻 + 打开片内 PCI 箝位二极管”:
- 在软件中打开 Eagle I/O 内部的 PCI 箝位二极管,把输入端口接收到的电压降到器件安全范围内;
- 外部串接电阻 R 限流,R 的取值取决于 PCI 箝位二极管的电流特性。


PCI 箝位二极管的电流特性(压降越大、电流猛增):
| VD(V) | Imax | 单位 |
|---|---|---|
| 0.0 | 0.92 | uA |
| 0.1 | 9.2 | uA |
| 0.2 | 20 | uA |
| 0.3 | 30.4 | uA |
| 0.4 | 43.3 | uA |
| 0.5 | 76.5 | uA |
| 0.6 | 0.15 | mA |
| 0.7 | 0.36 | mA |
| 0.8 | 2.85 | mA |
| 0.9 | 9.42 | mA |
串阻怎么算
为支持 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 软件的用户指南,比如前文贴出的”箝位二极管开关设置”就是软件里的一个配置页。
自测
- 你的设计要在上下边的 Bank 用 LVDS 发送数据,速率为 300MHz。可以吗?需要什么外部器件?如果换成左边 Bank 呢? (答案:可以。Emulated LVDS 输出最大频率 166MHz,300MHz 超了,必须确认走的是 True LVDS(最大 400MHz/800Mbps)才能跑;上下边 LVDS 发送需要外接 3 电阻网络,左/右边则无需外部电阻。)
- 对端芯片输出 5V 电平到 EG4S20,VCCIO = 2.5V。请估算最小串接电阻,并说明上电瞬间要注意什么。 (答案:VI = 3.3V 时二极管压降 0.8V,对应电流 2.85mA,R ≈ (5 − 3.3)/2.85mA ≈ 596Ω;内部 PCI Clamp 要等芯片启动后才打开,上电前若 5V 已存在,必须在外部加一个二极管。)