FPGA 片内可控阻抗 DCI 与终端:高速 IO 为什么要把电阻做进芯片
低速时代,FPGA 引脚和外设之间只要一根走线连通即可;时钟一旦上到一两百兆赫、边沿一旦压到一两纳秒以内,同样那根走线就开始"兴风作浪":信号在接收端反弹回来和自己叠加,波形出现振铃、过冲,采样窗口被吃掉。板级工程师的传统答案是在引脚周围密密麻麻地焊端接电阻,而现代 FPGA 给出的答案是——把这些电阻做进芯片,并用一套校准机制保证它们在不同芯片、不同温度下都足够准。这就是 FPGA 片内可控阻抗 DCI 与终端(Digitally Controlled Impedance,数控阻抗)。
本篇在 FPGA 入门体系里属于"芯片物理结构 → 管脚与板级设计 → 高速接口"的延伸位置:前置阅读是 FPGA IO bank 与 VCCO(DCI 与 bank 供电深度绑定),端接方案最终要靠 FPGA IBIS 模型仿真 验证,低速电平的来龙去脉见 LVCMOS 电平标准,器件选型时 HP/HR bank 比例的考量见 FPGA 选型方法。
本文要回答的问题
- 为什么信号一快,板子上的端接电阻就"不可省"?反射和振铃在直觉上是怎么发生的?
- 板外电阻端接有什么工程代价?为什么还需要 FPGA 片内可控阻抗 DCI 与终端?
- VRN、VRP 两只外部参考电阻起什么作用?DCI 校准周期里芯片内部发生了什么?
- LVDCI、
IN_TERM、DCI_CASCADE、INTERNAL_VREF这些属性分别用在什么场合? - 用 DCI 要遵守哪些 bank 规则?什么情况下反而是外置电阻更划算?
先看一张封面卡,把全篇的判断框架立住:端接是高速物理现象逼出来的刚需,DCI 则是用"片内电阻网络 + 参考电阻校准 + bank 内共享"三件套替代板上密密麻麻的外部电阻。
这张卡分四组阅读:第一组是物理动因,第二组是 DCI 的校准机制,第三组是省板级器件的两个延伸能力,第四组是使用边界。全篇就按这个顺序展开。
一、信号一快,走线就不再是一根导线
低频低速时,一根 PCB 走线可以理想化为短路:驱动器输出高,走线上所有点在"同一时刻"都是高。这个近似成立的前提是信号沿走线传播的时间可以忽略。信号在 FR4 走线上的传播速度大约是每 15–17 cm 一纳秒,而现代 FPGA 的边沿速率普遍在 1 ns 上下——沿还没走完一根 10 cm 走线,驱动端可能已经开始下一个动作了。经验判据是:当走线时延达到边沿时间的约五分之一,或走线长度达到边沿对应电长度的几分之一时,就必须把走线当成传输线对待;具体到板子上,边沿 1–2 ns、走线几厘米这个量级就该认真考虑端接,最终以仿真为准。
传输线有自己的特性阻抗(PCB 常用设计目标约 50 Ω,差分线约 100 Ω)。信号沿走线推进时,每一段都按这个阻抗"看见"前方。只要源端输出阻抗、走线特性阻抗、负载输入阻抗三者相等,信号走到头就被平稳吸收;任何一处不连续——最典型的是接收端输入阻抗高达几千欧甚至更高,近乎开路——电流无处可去,能量只能反射回驱动端,反射波回到低阻的源端再次反弹,如此往返,直到被损耗耗尽。入射波和反射波在线上叠加,接收端看到的就是过冲、回勾和振铃。
读图抓住红色与绿色两条归宿:没有端接时,信号在高阻负载处无处泄放,反弹能量只能在线上振荡(红色节点);绿色节点是匹配电阻,阻值等于走线特性阻抗时,末端对信号而言"看起来就是走线的继续",反射在第一次到达即被吸收,波形只剩干净的一次跳变。存储接口里常用的 SSTL、POD 这类标准本质上就是为此定义的端接总线标准,Stub Series Terminated(分支串联端接)的直觉也是同一个:让任何一段 stub(分支短线)看到的阻抗都连续,反射就无处产生。这里不做数学推导,记住"不连续产生反射,反射产生振铃,振铃吃掉时序和噪声裕量"即可。
振铃的危害有三层:过冲可能超过接收端的绝对最大额定电压,反复冲击损伤器件;回勾可能跌回判决门限附近,被当成多个跳变触发;边沿处的振铃让建立/保持时间窗口实际变窄,时序分析里的裕量被静默侵蚀。DDR 这类几百兆到千兆每秒的并行总线之所以对端接锱铢必较,原因正在这里。
二、板外电阻端接的三个工程代价
既然端接就是加电阻,全焊在板子上似乎最直观。早年 FPGA 设计确实如此,但当一片 FPGA 外挂两三片 DDR、几十位并行总线时,板外方案的代价迅速放大。
| 代价 | 具体表现 | 后果 |
|---|---|---|
| 占面积、加层数 | 每位数据线 1 只端拉电阻,64 位总线加地址/命令就是上百只 0402/0201 器件,还要走等长、绕线 | BGA 扇出区拥塞,PCB 层数增加,物料与贴片成本上升 |
| 阻容容差与温漂 | 普通电阻 ±5% 起步,温度变化还会再漂;分压端接需要两只电阻加去耦电容 | 实际阻抗偏离目标,端接效果打折扣,批量一致性差 |
| 管不了芯片内部 | 端接校准的是走线与负载,驱动端自身的输出阻抗随晶圆工艺角、结温、电压波动 | 源端失配依然存在,高速下入射波形本身就歪 |
第三点尤其关键:端接匹配是等式两边的事,板上电阻能匹配走线和接收端,却匹配不了 FPGA 自己的输出驱动。芯片出厂时工艺有快慢角,工作中结温从室温升到八十多度,PMOS/NMOS 的导通电阻随之变化,输出阻抗可能偏离标称值两成以上。要让源端阻抗也精确可控,电阻必须做在驱动管旁边、并且能随工艺温度实时调整——这正是 DCI 的切入点。顺带一提,Intel(Altera)器件的同类机制叫 OCT(On-Chip Termination,片上端接),也用一只外接精密参考电阻(常标 RZQ)做校准,概念与 DCI 一一对应,属性名和校准流程以各家手册为准。
DCI 把端接电阻移入芯片后,板上每位一只的电阻阵列缩减为每个校准域两只参考电阻,BGA 扇出区立刻清爽;而片内阻抗通过校准主动追踪工艺与温度,出厂离散性和温漂在每次校准时被一次性抵消。代价是内部终端挂在 VCCO 与地之间持续耗电,这笔功耗账放到第五节再算。
三、DCI 原理:可编程驱动腿、参考电阻与校准周期
DCI 的物理实现分两半:一半在每个 I/O 引脚的 IOB 内,一半是每个 bank(或校准域)共享的校准控制器。
先看引脚内。输出驱动级不是一只固定尺寸的管子,而是由多条可独立开关的驱动腿并联而成。开几条腿,并联后的导通电阻就是多少档——腿数越多,可拼出的阻抗档位越细。输入终端侧同理,内部用阻性网络搭出等效的终端电阻(对 SSTL/HSTL 类标准,等效为到 VCCO/2 的戴维南分压;LVDCI 类只控制驱动输出阻抗)。所有档位的开关控制字不是出厂写死的,而是校准出来的。
校准的片外基准就是每个启用 DCI 的 bank 必须接的两只专用引脚:VRN 经一只参考电阻接 VCCO,VRP 经一只参考电阻接地。校准期间,内部电路让片内的参考驱动腿与这两只外部电阻形成比较回路,逐步调整开关组合,直到片内阻抗与外部电阻匹配,此时得到的一组阻抗码就是该工艺角、该温度、该 VCCO 下的"标准答案",随后分发给本 bank 所有 IOB。参考电阻要求精度 1%(温漂指标同样要查手册),因为全 bank 的阻抗精度都由它溯源——它是整套机制里唯一的外部实物基准。
图中绿色是唯一的外部基准,蓝色是校准动作,橙色是校准产物(阻抗码),灰色是共享结果的各 IOB,紫色是最终呈现给信号的终端网络。读这张图要理解"一次校准、全 bank 复用":阻抗码是按 bank 的 VCCO 和工艺温度得出的,所以同一个校准结果只能在供电相同的 bank 间共享——这就是后文 DCI 级联要求 VCCO 一致的直接原因,与 FPGA IO bank 与 VCCO 讲的供电边界是同一条物理约束。
校准发生在什么时候?7 系列在配置加载末段的 DCI 匹配周期自动完成一次:比特流把各 bank 的端接配置和级联关系装好,启动序列中校准器工作,完成后 I/O 才正式使能。配置完成后阻抗码通常保持锁存;器件还支持通过控制接口在温度大幅变化后请求重新校准,DDR 控制器 IP 在必要时会利用这一能力。主 bank 校准、相邻从 bank 共享结果的交互时序如下。

这张时序图的关键是主从分工:级联域里只有主 bank 需要接两只参考电阻并真正执行测量,从 bank 直接采用结果,省掉的是参考电阻引脚和校准电路的重复。最后那条 note 是硬约束——如果从 bank 的 VCCO 与主 bank 不同,同一个阻抗码在不同电压下呈现的实际阻抗不同,校准等于失效,工具在 DRC 阶段就会拒绝这样的级联组合。
四、常用属性:LVDCI、IN_TERM、DCI_CASCADE、INTERNAL_VREF
XDC 里和 DCI 相关的配置散落在几个属性上,初学者容易混淆。它们其实分属三个层次:选电平标准、补终端、组织校准域。
| 属性 / 标准形式 | 作用层次 | 典型用法 | 备注 |
|---|---|---|---|
LVDCI_15 等 LVDCI 类电平 | 电平标准(输出阻抗受控) | 点对点低压接口,驱动阻抗精确等于走线阻抗 | 源端串行端接做进驱动级,不需外部串阻 |
SSTL15_DCI、HSTL_*_DCI 等带 _DCI 后缀 | 电平标准(含内部终端) | DDR 等端接总线的接收端 | 片内戴维南等效终端,持续消耗静态电流 |
IN_TERM(如 IN_TERM 50) | 引脚级补充属性 | bank 已做 DCI 校准,个别引脚用普通电平标准但要内部终端 | 终端阻值按手册可选档,终端接在引脚处 |
DCI_CASCADE | bank 级校准域组织 | 一个主 bank 带若干 VCCO 相同的从 bank | 从 bank 省 VRN/VRP 引脚,级联组合须为手册允许的拓扑 |
INTERNAL_VREF(如 0.750) | bank 级参考电压 | SSTL/HSTL 类参考电压片内生成 | 省外部分压电阻与去耦电容,按 bank 设置电压值 |
DCI_VERSION | 全局/校准版本 | 选择校准实现版本 | 一般保持工具默认与 IP 要求,跨工程移植时勿随意改 |
INTERNAL_VREF 值得多解释一句:SSTL、HSTL 这类参考电压型标准,接收端需要一个约等于供电电压一半的判决基准,老式做法是板上两只分压电阻加每只引脚的去耦电容,布线在 BGA 扇出区非常拥挤;片内 VREF 用内部基准电路直接生成,bank 上一行约束给值即可。代价是片内 VREF 的驱动与抗噪能力弱于精心设计的外部网络,像 DDR 这种 MIG IP 主导的场合到底用不用内部 VREF,跟随存储器 IP 的配置与板级设计指南,不要自行其是。典型约束写法如下。
# 数据字节组使用带内部终端的 SSTL15
set_property IOSTANDARD SSTL15_DCI [get_ports {dq[*]}]
# bank 33 作为主校准 bank,bank 34/35 级联共享
set_property DCI_CASCADE {34 35} [get_iobanks 33]
# 某普通电平引脚需要 50 Ω 内部终端
set_property IN_TERM 50 [get_ports addr_sample]
# bank 34 使用片内 0.75 V 参考电压
set_property INTERNAL_VREF 0.750 [get_iobanks 34]注意上面是 XDC 属性示例,具体到某个设计时,允许的 IOSTANDARD 与 IN_TERM 阻值档位、哪些 bank 能互相级联,必须查所用器件的 SelectIO 资源手册和封装引脚表,不能跨系列照搬。
五、bank 规则、功耗账与什么时候别用 DCI
把机制落成设计清单,启用 DCI 的 bank 要过五道检查。
| 检查项 | 规则 | 违反后果 |
|---|---|---|
| VRN/VRP 引脚 | 只能用封装上对应的专用脚,各接一只 1% 参考电阻到 VCCO/GND;级联从 bank 不接 | DRC 报错或校准无基准 |
| VCCO 一致 | 同一校准/级联域内各 bank 供电相同,且与所选电平标准匹配 | DCI DRC 拒绝;即使放过,阻抗也失准 |
| bank 类型 | 完整 DCI 能力集中在 HP bank;HR bank 支持的标准与终端形式较少 | 选型阶段就要核对,约束阶段无法补救 |
| 参考电阻取值 | 标称值由目标阻抗和标准决定(常见设计取目标阻抗的两倍),以手册表格为准 | 全 bank 阻抗成比例偏移 |
| 校准版本 | DCI_VERSION 跟随工具与 IP 要求,多片/多工程保持一致 | 校准行为差异导致端口对不上 |
另外要算功耗账:内部终端在信号翻转和不翻转时都挂在电源轨上,戴维南等效终端的直流电流经分压网络持续流入地。总线条数多、终端全开时,这部分静态电流在 VCCO 电源预算里不是小数目——DDR 接口的 VCCO 电流估算必须把 DCI 终端电流计入,供电芯片选型和 FPGA 供电与散热 的热预算都受它影响。也正因为如此,DCI 并非"用了就先进":
- 按键、LED、慢速配置口、几十兆赫以下且边沿不快的 GPIO:走线电长度远小于边沿时间,反射本来就不构成问题,开内部终端纯属白耗电,外置电阻或完全不端接反而简单可靠;
- 3.3V 传统外设集中的 HR/HD bank:很多低速单端标准既不需要终端,bank 也未必提供完整 DCI 支持;
- 追求极简 BOM 的超低速板卡:DCI 仍要两只精密参考电阻,而信号根本不需要端接时,这两只也可以全省。
反过来,DDR、高速并行总线、百兆赫以上时钟、边沿在一两纳秒的接口,端接省不掉,DCI 在面积、精度、可校准性上的收益远大于功耗代价——这类接口通常也只放在 HP bank,选型时对照 FPGA 选型方法 确认 HP bank 数量。端接方案对不对,不能只靠经验拍板:布局布线后用器件厂商提供的 FPGA IBIS 模型仿真 把实际走线阻抗、DCI 阻抗档位和驱动器 V/I 曲线放进仿真器,看接收端波形的过冲和眼图是否留足裕量;与电平标准本身的配合关系(VCCO、VREF、判决阈值)在 LVCMOS 电平标准 里有完整铺垫,而更高速率的并行/串行接口实战则汇入 高速接口总览。
这一篇在知识体系里的位置
- bank 与供电(最直接的上游):FPGA IO bank 与 VCCO 讲清了 DCI 全部 bank 规则的根源——校准域按供电边界划分;FPGA 供电与散热 承接 DCI 终端电流的电源与热预算。
- 电平与标准:LVCMOS 电平标准 讲 VCCO、阈值与 VREF 的基础概念;SSTL/HSTL/POD 等端接总线标准在高速场景与本篇直接配套。
- 仿真与选型:FPGA IBIS 模型仿真 是验证端接取值的手段;FPGA 选型方法 帮助在选型阶段保证 HP bank 数量;高速接口 LVDS/SERDES/DDR 是这些机制的实战场景。
总结
FPGA 片内可控阻抗 DCI 与终端回答的是同一个物理问题的工程解:边沿快到 1–2 ns、走线达到几厘米量级后,走线成为传输线,阻抗不连续造成的反射与振铃逼着每一位高速信号做匹配端接;板外电阻阵列在面积、容差和源端阻抗漂移上代价高昂,DCI 于是把阻性网络做进每个 IOB,用 VRN/VRP 两只 1% 外部参考电阻在校准周期里测出当前工艺、温度、VCCO 下的阻抗码并广播给全 bank,LVDCI/_DCI 电平标准、IN_TERM、DCI_CASCADE、INTERNAL_VREF 分别解决输出阻抗、引脚终端、校准域共享和参考电压生成四件事。使用时记住三条边界:校准域内 VCCO 必须一致、VRN/VRP 只能落在专用脚且参考电阻按手册取值、HP bank 才提供完整能力;低速 GPIO 与 3.3V 传统接口反射本不构成问题,内部终端只增功耗,外置电阻或不加端接更划算;高速总线则必须端接并用 IBIS 仿真核验波形裕量——要不要 DCI,最终由速率、走线长度和功耗预算三方共同决定。