FPGA 片上 XADC 监控:不挂外挂芯片采温度与电压
温度和供电是 FPGA 板级问题的两大主角,却往往也是最缺证据的两个量。其实 Xilinx/AMD FPGA 内部就藏着一个多通道 ADC:7 系列叫 XADC,UltraScale 起改名 SYSMON。本文讲清 FPGA 片上 XADC 监控的通道结构、读取路径与工程用法。相关基础见 FPGA 供电与散热、FPGA 上电时序,外部独立 ADC 的用法见 SPI ADC 入门。
本文要回答的问题
- 不做片上监控,板子出问题时会丢失哪些关键证据?
- XADC 和 UltraScale 器件里的 SYSMON 是什么关系?片上传感器到底有哪几路?
- VP/VN 专用模拟脚和双功能 ADx 脚能采什么、不能采什么?
- DRP 和 JTAG 两条读取路径各自的时序、占用和适用场景是什么?
- 过温告警(OT)怎么接到关断保护?它和电源芯片的 PG 信号如何分工?
- 工程上怎么把它用上:上电体检、边沿过温、供电跌落定位分别怎么做?
下面这张漏斗先给一张全景:现场异常进来,沿着「现象 → 选通道 → 读寄存器 → 阈值判定 → 处置」逐级收窄,每一步对应的都是后文要展开的机制。
读这张漏斗要注意:它不是排查清单,而是数据的收敛方向。越往下信息越确定——入口是「板子不对劲」这类无法复现的描述,出口则是「VCCINT 在某时刻跌到某数值」这种可以直接行动的证据。
一、不要会怎样:三种「盲飞」现场
先看没有片上监控时工程师面对的局面。FPGA 片上 XADC 监控的价值,正是在这些场景里才看得出来。
第一种:跑半小时才崩,崩完现场全没了。 高负载运行一段时间后随机出错、重配甚至掉线,等你接上 JTAG 芯片已经凉了,温度曲线、电压跌落都没留下。外挂万用表是「现在值」,而故障在「刚才那一拍」。
第二种:供电问题被误判成时序问题。 重载瞬间核心轨被拉垮,现象是时序裕量不足式的随机错,于是反复调约束、降频率却治不好。没有轨级电压记录,就无法把「供电异常」从「逻辑错误」里分离出来(供电与负载的关系见 供电与散热)。
第三种:现场退回的板子无法归因。 客户现场散热堵塞、风扇停转、环境超温,退回实验室后一切复测正常。没有板上自采的历史峰值,责任在设计、使用还是环境,谁也说不清。
这三种局面的共同点是:缺的不是测量仪器,而是一个跟着芯片走、按 FPGA 自己的节拍连续记录、且不占用户 IO 的观测通道。 片上 ADC 就是填这个空的。
二、XADC 是什么:从 7 系列 XADC 到 UltraScale SYSMON
XADC 是 Xilinx 在 7 系列(Artix/Kintex/Virtex-7 及 Zynq-7000)中集成的片上模拟模块:一个 12 位、采样率在 1 MSPS 量级的逐次逼近型 ADC(SAR ADC),前面挂多路复用器,后接片上传感器和若干外部模拟输入,转换结果写进状态寄存器,再通过 DRP 或 JTAG 两条路径送出。
到了 UltraScale 与 UltraScale+ 代际,这个模块改名为 SYSMON(System Monitor),寄存器布局、IP 核名称和部分通道编排都有调整,但「片上 ADC + 片上传感器 + 阈值告警」的基本模型不变。因此工程对话里常听到的「读一下 XADC」,在 UltraScale 板上实际读的是 SYSMON——这是同一条技术线的代际更名,不是两套东西。具体到某一型号的通道编号、寄存器地址和位宽,必须以该器件的数据手册与 SYSMON/XADC 用户指南为准,不同系列之间不要照抄地址。
顺带一提,Intel/Altera 器件也有片上温度传感器及配套监控 IP,思路对等但寄存器接口完全不同;本文只讲 Xilinx/AMD 口径。
三、通道结构:片上传感器 + 外部模拟输入
理解 XADC 的关键,是分清它的三类输入源——它们的物理位置、用途和代价完全不同。
| 输入源 | 采什么 | 要不要外部接线 | 典型用途 |
|---|---|---|---|
| 片上温度传感器 | 芯片结温 | 不需要 | 过温保护、散热验证 |
| 片上电源传感器 | VCCINT、VCCAUX、VCCBRAM 等内部电源轨 | 不需要 | 供电跌落、纹波趋势观测 |
| 外部模拟输入 | VP/VN 专用差分对、双功能 ADx 脚 | 需要,接到板上模拟信号 | 板级电压、NTC、电流检测放大器 |
片上传感器是「出厂自带的探头」:温度传感器埋在片内反映结温,电源通道通过内部分压网络接核心、辅助等电源轨,这些通道不占用任何用户 IO,也不要求用户做模拟设计。外部通道才需要动原理图。
读这张图抓住三条线:蓝色的片上探头零成本可用,灰色的外部脚要在原理图上把信号接进来,紫色定序器(sequencer)决定哪些通道被轮询、多久扫一遍。所有通道共用同一只 ADC,靠多路复用排队,所以通道数越多、每通道的有效更新率越低。
外部输入有两种脚位,区别要分清:
- VP/VN 是专用模拟差分对:不做数字 IO,专门留给 XADC,性能和抗扰最好;
- ADx 脚是双功能脚:在特定 IO bank 上可由软件配置成模拟输入(辅助差分通道),不用时仍是普通 IO。自研板若要测板上电压、NTC 温度或电流检测放大器的输出,就通过这些脚进来,前端电阻分压、滤波和驱动按 XADC 用户指南设计。
此外还有几个工程概念:参考电压可用片内基准或外部高精度基准;转换支持多次采样平均(averaging)以压噪声;定序器支持单通道、连续、自动扫描等模式;工厂校准数据在器件出厂时烧好,也支持用户校准。12 位、约 1 MSPS 是 7 系列 XADC 的量级口径,SYSMON 各代参数有调整,查手册确认,不要跨系列背数字。
四、两条读取路径:DRP 与 JTAG
转换结果落在寄存器后,怎么读出来?XADC 给了两条气质完全不同的路。
| 维度 | DRP(动态重配置端口) | JTAG 路径 |
|---|---|---|
| 谁来读 | 用户自己的 RTL 逻辑(或 Zynq 里的 PS) | 电脑上的 Vivado 硬件管理器 |
| 时钟 | 用户给的 dclk,与设计同步 | JTAG TCK,不依赖用户时钟 |
| 占用 | 消耗少量布线/逻辑资源,要写接口时序 | 不占用户逻辑、不占用户 IO |
| 配置前可读 | 否,设计要先跑起来 | 可以,下载位流前就能采 |
| 自动化 | 可接中断、可连续记录、可做闭环 | 主要是人工查看 |
| 典型场景 | 产品化监控、量产自检、在线保护 | Bring-up、实验室体检、现场抢修 |
分工直觉是:JTAG 是医生的听诊器,DRP 是设备自己的仪表盘。 Bring-up 阶段线还没调通、设计还没跑全时,先用硬件管理器走 JTAG 看一眼温压,几乎零成本(上板调试方法里的第一步就可以加这一项);产品里要做无人值守的过温保护、历史峰值记录,则必须走 DRP 让 RTL 直接拿到数据。两条路也能同时用,互不冲突。
五、读一次数据:DRP 接口与时序
DRP 是一套同步寄存器接口:dclk 为时钟,daddr 给寄存器/通道地址,den 是读使能,dwe 区分读写,di/do 是写/读数据总线,drdy 是就绪应答。一次读的握手节拍如下图所示——这是机制示意,具体建立保持时间以用户指南参数表为准。
读这张波形:dwe 保持低表示读操作;第 2 拍 den 拉高一个 dclk 周期、同时地址有效,发起一次读;ADC 转换与寄存器访问有若干拍延迟,第 6 拍 drdy 给出一个周期高脉冲,此刻 do 上的数据才有效,RTL 锁存即可。写操作(配置定序器、写阈值)则把 dwe 拉高、数据放 di,握手形状相同。工程上几乎不手撸这层时序——XADC Wizard / SYSMON Wizard IP 核已经把 DRP 封成「温度输出总线 + 告警脉冲」式的简易端口,例化即用,和使用其他 Vivado IP 核的流程没有区别。
寄存器层面有三类内容值得记住:状态寄存器放最新转换结果与告警标志,阈值寄存器放各通道的上下限(可由用户改写),配置寄存器决定通道使能、平均系数与定序模式。温度和电源轨各有自动比较器,越限时置起对应的告警标志并可输出到用户逻辑;其中过温还有一个器件级的 OT 状态,阈值属于器件保护口径,不随用户阈值改变。
六、告警、OT 与关断保护:和 PG 信号分工
XADC 能产出两类告警:用户阈值告警(ALM,通道与门限可配置)和器件级过温(OT,温度越过器件硬线)。它们只是 FPGA 给出的信号,真正断电源需要板级电路配合——FPGA 不能也不应该自己掐自己的电。典型接线如下图。
读图注意红色节点是「问题源头」:告警从 XADC 出发,蓝色用户逻辑先做去抖(ADC 有噪声,单拍越限不该直接断电),橙色系统控制器拍板关断,绿色电源轨执行。灰色 JTAG 是旁路,只负责看、不参与保护闭环。简单板卡没有 MCU 时,常见做法是 OT 经电平与延迟设计后参与 PMIC/DC-DC 的使能逻辑;板级怎么接必须照官方板设计指南做。
一个高频混淆是 XADC 告警与电源芯片 PG(power-good) 的分工,二者看的是完全不同的时间段:
| XADC / SYSMON 告警 | 电源芯片 PG | |
|---|---|---|
| 监测对象 | 上电之后的温度与电压「运行质量」 | 电源轨「有没有爬进门限」 |
| 时间窗 | 运行全程 | 上电爬升那几十毫秒 |
| 能发现 | 重载跌落、散热失效、环境超温、老化漂移 | 没上电、爬升失败、电压卡死 |
| 典型用途 | 降载、关断、记录峰值 | 上电顺序级联、复位释放 |
| 谁产生 | FPGA 内部 | 每路 DC-DC/PMIC |
PG 管「出生」,XADC 管「一生」。二者配合上电顺序电路(见 FPGA 上电时序)才构成完整的电源健康网:PG 链路保证各轨按序起来,XADC 保证起来之后不出事。
七、工程上的四个典型用法
1. 上电体检。 配置前先用 JTAG 读 XADC,确认结温和各轨静态值正常再下载位流;配置后由 RTL 走 DRP 周期性检查,体检不过就不启动业务逻辑。Zynq 一类器件还可以让 PS 在启动流程里先读监控数据再加载应用。

这张时序图的重点在分叉前那几轮循环读:放行决策依据的是连续采样而不是上电瞬间的单拍值,和 ILA 在线调试先触发、后判定的思路一致。
2. 边沿过温记录。 散热堵塞、风扇停转往往是缓变过程,但出错发生在越过阈值的那一刻。RTL 维护历史最高温、越限次数和时间戳,存进片内 RAM 或上报给处理器,板子退回后这些记录就是归因证据。热设计的裕量怎么定,可参照 FPGA 热设计深文。
3. 供电异常定位。 让负载阶跃与 VCCINT 采样在同一时间轴上对齐:大设计启动、DSP 阵列翻转时若轨电压同步下探并伴随随机错,就把问题从「时序」重新归类为「供电能力不足」。功耗侧的预估对照见 FPGA 功耗估算。注意 XADC 电源通道适合看趋势和跌落事件,量纹波还得靠示波器交流档,二者不互相替代。
4. 板级慢速模拟量。 通过 VP/VN 或 ADx 脚外接分压后的板上 12V/5V 轨、NTC 热敏电阻、电流检测放大器输出,就把板上「电源、温度、电流」一并纳入同一个寄存器地图。毫秒级以下的快速信号请用专用 ADC(接口做法见 SPI ADC 入门),片上通道服务的是慢速健康监测。
八、IP 核用法要点与常见误区
使用上记住五点:一是优先用 XADC Wizard(UltraScale 下为 SYSMON Wizard)IP 核配置通道、平均与告警,不要从裸寄存器起步;二是 DRP 的 dclk 频率有合法范围,通常从较低频率时钟引过去并做好约束;三是外部模拟通道要在原理图与管脚规划阶段预留,VP/VN、ADx 的 bank 电压与模拟前端按指南设计,模拟走线远离开关电源与高速数字信号;四是告警阈值按数据手册的推荐工作区间留工程裕量,别贴着绝对最大值设线;五是量产中可把 DRP 读数经 I2C/SPI/UART 送到板上管理 MCU,形成整机健康台账。
常见误区也列一张表。
| 误区 | 实际情况 |
|---|---|
| 有 XADC 就不用示波器了 | 片上通道看趋势和直流值,纹波、瞬态尖峰仍需示波器 |
| 读 XADC 要占用户 IO | 片上温度/电源通道零 IO;只有外部模拟输入才占专用脚 |
| OT 告警能直接断电 | 只输出信号,关断要靠板级使能逻辑或控制器执行 |
| 7 系列的地址能照搬到 UltraScale | 更名 SYSMON 后通道编排与寄存器有调整,以手册为准 |
| 双功能 ADx 脚随时能当模拟脚 | 需按指南配置,且所在 bank 的用法与前端电路要匹配 |
这一篇在知识体系里的位置
本文属于 FPGA 板级工程中的「可观测性」支线。上游基础是供电与热的物理盘:FPGA 供电与散热讲多电源轨、上电顺序与热阻,FPGA 上电时序讲配置过程中的电源节拍;下游是调试与深水区:上板调试方法与 ILA/VIO 联合调试解决逻辑侧观测,FPGA 功耗估算给电源设计提供预算,热设计深文展开散热工程。需要片外高速或高精度采集时,走 SPI ADC 入门这条外挂路线;XADC 本身的集成方式则归入 Vivado IP 核使用。
总结
XADC 是 7 系列 FPGA 片上自带的多通道 12 位 ADC(UltraScale 起更名 SYSMON):片上温度与电源传感器零 IO 即用,VP/VN 与双功能 ADx 脚扩展板级模拟量;JTAG 路径负责配置前后的人工体检,DRP 路径让 RTL 在运行中连续读数、接中断、做闭环;用户阈值告警与器件级 OT 只负责「喊」,真正的过温关断要经用户逻辑去抖后由板级控制器动作,它与电源芯片 PG 是「运行质量」和「上电成功」的分工。把 FPGA 片上 XADC 监控纳入设计,随机过热、重载跌落与现场退板这三类旧账,就第一次有了板载证据。