3. Versal调试基础设施

Versal ACAP 的调试体系与上一代 Zynq/UltraScale 有本质区别:它不再只有 PL 侧的 ILA,而是把 PS、NoC、AI Engine、DDRMC、收发器等异构资源统一纳入一条可配置的调试访问链路。理解这条链路,是后续做时序性能验证和跨域联合调试的前提。本节先讲清“调试请求从主机到目标内部”的完整通路,再落到实际连接与工具操作。

一、Versal 调试访问的物理与逻辑通路

主机上的 Vivado Hardware Manager 并不直接“看到”芯片内部信号,它通过一条分层链路抵达目标:

  • 主机侧:Vivado Hardware Manager(或 Vitis 调试器)作为客户端,通过 hw_server 与目标通信。
  • 物理连接:JTAG 电缆(如 Xilinx Platform Cable USB II、Digilent HS2/HS3)接到板卡 JTAG 排针,或通过 USB-JTAG 桥接芯片接入。
  • 片内 TAP:JTAG 信号进入 Versal 的 TAP 控制器,经 Debug Bridge 转换为片内调试总线访问。
  • Debug Bridge:这是 Versal 调试基础设施的核心枢纽,把 JTAG 的串行访问翻译成对 PL、PS、NoC、AI Engine 等域内调试资源的并行访问。
  • 调试资源:ChipScope ILA/VIO、PS 的 CoreSight 组件、AI Engine 调试接口、NoC 性能监视器等,最终被访问。

关键点在于:Debug Bridge 是“必经之路”。无论你调试的是 PL 逻辑还是 AI Engine,请求都要经过它。因此 Debug Bridge 的配置(时钟、复位、访问权限)直接决定调试能否建立。

主机侧 Vivado Hardware Manager Vitis Debugger hw_server(本地/远程) JTAG 电缆 Platform Cable USB II / HS3 TCK / TMS / TDI / TDO USB / TCP Versal ACAP 芯片 TAP 控制器 JTAG 状态机 Debug Bridge 串行→并行转换 时钟/复位/权限 PL 域 ChipScope ILA / VIO PS 域 CoreSight / APU / RPU AI Engine 域 AIE 调试接口 / 事件 NoC / DDRMC 性能监视器 / 计数器 所有调试请求必须经 Debug Bridge 转发,其时钟与复位配置决定链路能否建立 物理层

二、Debug Bridge 的配置要点

Debug Bridge 在硬件设计中由 IP 形式例化,通常随 Debug Hub 一起出现。它需要两个关键输入:调试时钟和调试复位。如果这两个信号没有正确连接或频率不匹配,Hardware Manager 会报“无法检测到调试集线器”或“Debug Bridge 未就绪”。

实际工程中常见的做法是:调试时钟使用与 JTAG 无关的独立时钟(如 100 MHz 板级时钟),复位保持有效直到时钟稳定。在 Versal 中,Debug Bridge 还涉及访问权限配置——默认情况下,PS 和 PL 的调试访问可能被安全策略限制,需要在 CIPS 或 PMC 配置中开放对应通道。

经验提示:如果 Hardware Manager 能识别到器件但看不到 ILA 核,优先检查 Debug Bridge 的时钟是否已稳定、复位是否已释放,而不是反复重装电缆驱动。

三、JTAG 连接与 Vivado Hardware Manager 操作

连接流程可以概括为“打开硬件管理器 → 连接电缆 → 识别器件 → 加载调试探针”。具体操作如下:

  1. 在 Vivado 中打开 Open Hardware Manager,点击 Open Target → Auto Connect。若自动连接失败,选择 Open New Target 手动指定电缆。
  2. 连接成功后,Hardware Manager 会显示器件链。Versal 通常显示为 xcvc1902 等具体型号,并列出可用的调试核。
  3. 若设计中包含 ILA,需在 Hardware 窗口中右键器件,选择 Refresh Device,让工具重新扫描调试核。
  4. 对于 AI Engine 调试,需要额外通过 Vitis 的 AI Engine Debug 视图连接,底层仍走同一条 JTAG/Debug Bridge 通路。

JTAG 链上如果挂有多个器件(如 Versal + 外部 FPGA),需要正确设置 IR 长度和链顺序,否则 Hardware Manager 只能识别到第一个器件。链顺序可在 Hardware Manager → JTAG Settings 中手动指定。

四、ChipScope 在 Versal 中的使用方式

ChipScope 在 Versal 中主要以 ILA(Integrated Logic Analyzer)和 VIO(Virtual Input/Output)核的形式存在。与旧器件不同的是,Versal 的 ILA 核通过 Debug Bridge 统一管理,不再需要单独的 BSCAN 原语。

一个典型的 ILA 配置示例:

create_debug_core u_ila_0 ila
set_property C_DATA_DEPTH 4096 [get_debug_cores u_ila_0]
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
set_property C_NUM_OF_PROBES 3 [get_debug_cores u_ila_0]
set_property C_PROBE0_WIDTH 32 [get_debug_cores u_ila_0]
set_property C_PROBE1_WIDTH 16 [get_debug_cores u_ila_0]
set_property C_PROBE2_WIDTH 8  [get_debug_cores u_ila_0]
connect_debug_port u_ila_0/clk [get_nets clk_100m]
connect_debug_port u_ila_0/probe0 [get_nets {data_valid data_payload}]

这段约束把 ILA 的采样深度设为 4096,探针 0 为 32 位,探针 1 为 16 位,探针 2 为 8 位,采样时钟为 100 MHz。触发条件在 Hardware Manager 中设置,例如“probe0 的 bit[5] 为 1 且 probe1 大于 0x00FF”。

需要特别注意:ILA 的采样时钟必须与 Debug Bridge 的调试时钟同源或保持确定相位关系,否则跨时钟域采样会出现不确定的触发偏移。在 Versal 中,推荐把 ILA 时钟和 Debug Bridge 时钟都接到同一个 MMCM 输出的不同分频端口。

五、调试连接状态与常见问题判断

调试连接是否健康,可以通过几个明确的状态来判断:

现象 可能原因 检查方向
Hardware Manager 无法识别器件 JTAG 链顺序错误、电缆未供电、IR 长度不匹配 检查 JTAG Settings 中的链配置和电缆指示灯
识别到器件但无调试核 Debug Bridge 时钟未稳定、复位未释放 用示波器测调试时钟,确认复位极性
ILA 触发不上 采样时钟与调试时钟不同源、触发条件过严 先放宽触发条件,再检查时钟关系
AI Engine 调试无法连接 AIE 调试通道未在 PMC 中开放 检查 CIPS 配置中的调试访问权限
注意:Versal 的调试访问权限受 PMC 安全配置控制。如果设计启用了安全启动或调试禁用位,JTAG 可能只能识别器件而无法访问内部调试资源。此时需要重新生成包含调试使能的启动镜像。

把上述链路和状态判断串起来,就能形成一条可操作的调试连接检查路径:先确认物理 JTAG 连通,再确认 Debug Bridge 就绪,然后确认调试核被正确枚举,最后才进入触发与采样分析。这条路径的每一步都有明确的观察点和判断依据,而不是靠反复重试。