Versal System Monitor偶发性电压最大值和最小值采集错误的调试与解决

作者:Zhang Cheng,AMD工程师;来源:AMD开发者社区

偶发性错误是电子工程师在调试过程中最棘手的问题之一,这类错误通常不会在每次测试中稳定出现,具有复现周期长、复现难度大、定位复杂、受环境因素影响大等典型特征。它们可能只在特定的温度、电压、时序边界、器件老化状态或特定的信号交互条件下触发。在实际项目中,偶发性错误常常导致系统不稳定、信号异常或功能失效,进而影响产品的可靠性与交付进度。为了准确识别根因,工程师需要全面的测试策略、软硬件协同验证工具、数据记录机制以及深入的逻辑分析,才能逐步缩小问题范围,最终定位错误源头。

本文将以 Versal 系列 System Monitor(以下简称SYSMON) 出现的偶发性错误为案例,探讨在面对此类难以复现问题时,工程师应如何构建有效的调试方案,为解决偶发性问题提供一种思路。

1. 问题描述

在 Versal 器件的使用过程中, SYSMON在启动完成后,所采集到的电压最大值与最小值偶尔会出现异常。例如,当 SYSMON 被配置为监测 VCC_SOC(0.8V,对应 SUPPLY_1)以及 VCCAUX(1.5V,对应 SUPPLY_3)时,在进行长时间、重复性的上电/断电测试过程中,可能在某一次上电后,SUPPLY_1 和 SUPPLY_3 所报告的最大值和最小值会出现错误。

理论上,SUPPLY_1 的最大值与最小值应始终保持在 0.8V 附近,但在异常情况下,实际读取到的最大值可能高达 1.5V。同样地,SUPPLY_3 的最小值也可能异常偏低,降至 0.8V 附近。

该现象为偶发性问题,难以稳定复现,如同幽灵般存在于系统中。然而除了以上的最大值电压采集异常之外,器件工作正常,没有发生损坏的现象。如下图所示为 SYSMON 的相关配置供参考:

SYSMON 的相关配置供参考.png

2. 缩小问题范围

1)  排除电源干扰

首先,需要确认电源是否存在异常抖动。通过示波器对关键电源轨进行监控,发现其电压值和纹波等特性均满足器件Spec要求。同时从现象上看,每次观察到 SYSMON最大值和最小值寄存器异常时,读取到的电压数值始终非常接近 1.5V 或 0.8V,且重复性较高。

如果问题源自外部电源干扰,一般来说其波动具有较强的随机性,不太可能多次稳定地上升或下降到同一固定电压。因此可以基本排除外部电源异常为问题根因。

2)  简化工程设计

Versal 器件是一个高度复杂且高度集成的异构计算平台,内部包含了多个关键模块。这些模块通过复杂的连接关系协同工作,使得整个系统功能强大,但同时也增加了调试的难度。当面对一个复杂工程中出现的异常问题,简化设计成为一种高效的诊断手段。通过剥离与问题无关的模块,仅保留核心逻辑或可能相关的路径,可以显著降低问题排查的复杂度。在这个问题的调试过程中,在移除全部RTL逻辑以及GTM、DCMAC和NOC等硬核的情况下,用一个仅保留CIPS的工程测试,依然会发生相同的问题。

3) 加载模式差异

这个现象最初是在使用 SelectMap 模式加载 PDI 文件的过程中被发现的。为了简化问题的复现流程,并排除与加载方式相关的干扰因素,随后尝试通过 JTAG 接口下载 PDI 文件并读取 SYSMON的相关寄存器。测试结果显示,即使在 JTAG 模式下,该现象依然会偶发性地出现,说明该问题并非由 SelectMap 或 JTAG 这类特定的加载方式引起。这一观察有助于更有针对性地将调试重点放在器件内部的电源监控逻辑(如 SYSMON)、寄存器初始化过程或早期配置状态上,为后续精确定位问题根因提供了重要线索。

4) 板卡间对比测试

在调试偶发性问题的过程中,进行板卡间的横向对比测试也是一种行之有效的方法。通过对不同板卡在相同设计、相同测试环境下的表现进行比对,可以帮助判断问题是设计性问题还是个别板卡的局部问题。在这个问题中,SYSMON在长时间反复上电后,其最大值和最小值寄存器中出现电压异常的现象在多款不同的板卡中都可以被成功复现。因此可以得出结论,这个问题与器件相关,与硬件设计无关。

3. 分析与复现

1) 使用TCL脚本复现

对于偶发性的问题,使用TCL脚本复现问题是一个非常好的手段。Vivado和Vitis的Tcl Console页面会显示出每次操作对应的TCL命令,对TCL语法不熟悉的同学可以先手动操作一遍再把对应的命令复制出来,加一个循环控制即可完成简单的测试功能。

2) 测试流程

a)         在Vitis中启动xsdb

b)         连接JTAG

connect -url TCP:ip_addr:3121

ip_addr是remote host的地址,如果是本地调试则输入:connect -url TCP:localhost:3121

本地调试则输入.png

c)         选择Versal下载pdi

ta 1

device program /XX/SysMon/SysMon.runs/impl_1/XX.pdi

d)         选择A72 复位

ta 6

rst -proc

e)         读取Max和Min寄存器

set max [mrd -force 0xf1271344]

set min [mrd -force 0xf1271644]

f)          判断是否在预期范围内

scan $max "%x" hexValue

if {$hexValue > 163840} {

            puts "Unexpected ADC Value @0xf1271644"

            puts $a

            exit

} else {

            puts $a

}

g)         重复执行以上操作,等待异常情况出现

3) 复现结果

在反复操作978次后,可以看到异常情况被成功复现。

复现结果.png

4. 根因分析与解决方案

经过反复的对比测试,这个问题最终被定位为 Versal 器件中 SYSMON模块在器件Pre-configuration阶段的内部初始化异常。在该阶段中,SYSMON 的 Supply_0 至 Supply_3 寄存器默认用于监控启动阶段的电源轨。其中,根据硬件默认设置,SUPPLY_1 默认连接至 VCCAUX_PMC,而 SUPPLY_3 对应 VCC_SOC。

然而在后续配置过程中,如果用户将 SUPPLY_1 和 SUPPLY_3 的测量目标重新分配为其他电源轨,例如将 SUPPLY_1 配置为 VCC_SOC、SUPPLY_3 配置为 VCCAUX,则可能会出现问题。Pre-configuration阶段的电压测量值有一定的概率未被正确清除或重置,这就导致在配置完成后读取最大值和最小值寄存器时,仍然显示 pre-configuration 时采集的电压数值。例如,SUPPLY_1 本应测量 0.8V 的 VCC_SOC,却出现高达 1.5V 的错误读数(即Pre-configuration阶段 VCCAUX 的值)。

1) 保持 pre-configuration 与配置后的 Supply 编号一致

为了保证电压通道的采样值一致性,建议在设计中,保持 Supply_0 至 Supply_3 在 pre-configuration 和用户配置阶段指向相同的电源轨,避免重新映射。具体分配如下:

  • Supply_0:VCC_PMC

  • Supply_1:VCCAUX_PMC

  • Supply_2:VCC_PSLP

  • Supply_3:VCC_SOC

这种做法能够确保 pre-configuration 期间采集到的电压值在后续不会被误解为异常跳变,避免错误的最大值/最小值统计。

2) 通过软件清除最大值/最小值寄存器

如果用户有必要重新配置 Supply 通道映射关系(即与 pre-configuration 不一致),也可以通过软件手动方式规避问题。在配置完成后,可通过以下操作清除 pre-configuration 阶段保留的寄存器值:

  • 解锁 Programmable Control and Status Registers;

  • 访问并写入 STATUS_REGISTER 中相关字段;

  • 重置 SYSMON 的最大值与最小值寄存器。

  • 这样可以清除所有早期采样遗留的数据,确保后续采样值的准确性。

配置.png

这个问题的本质是由于 pre-configuration 阶段 SYSMON 已经开始工作并采样电压,因为某些原因在启动完成后没有彻底清除历史数据,导致历史数据干扰后续使用阶段的读数。通过匹配通道映射或主动清除状态寄存器,可有效解决该偶发性错误问题。

 5.  总结

当遇到偶发性错误的时候,一般来说很难快速定位并找到根因。解决问题的思路主要有以下三条,首先,通过“控制变量法”找出影响结果的因素,排除不影响结果的无关项,逐步缩小问题范围,最终定位到一个点上。虽然上述过程大多需要花费大量的时间和精力,但是这也是定位问题的必经之路。其次,在 FPGA 设计与调试中,使用 TCL 脚本 是一种非常高效的调试手段。借助TCL脚本实现自动化复现与测试,可以将偶发问题转化为必先的问题。在本案例中,TCL脚本实现了自动运行测试序列、捕获关键寄存器值、数值判断和结果统计。最后结合ILA和VIO等调试工具,实时观察内部信号变化,进一步确认和验证异常发生的根本原因,为彻底解决问题提供了有力支持和依据。