由于 AXI 违例导致内核挂起 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文
内核可能因内核与存储器控制器之间的 AXI 传输事务错误而导致挂起。要调试这些问题,必须对内核进行检测。
  1. Vitis 核开发套件提供了 2 个选项,可供要在 v++ 链接 (--link) 期间应用的检测使用。这 2 个选项都会为您的实现添加硬件,并且根据资源使用情况,它可能需要对检测加以限制。
    1. 添加 Lightweight AXI Protocol Checker (lapc)。这些协议检查器是使用 -–debug.protocol 选项来添加的,如 --debug 选项 中所述。所使用的语法如下:
      --debug.protocol <compute_unit_name>:<interface_name>
      一般而言,<interface_name> 是可选项。如果未指定该选项,那么将会对 CU 上的所有端口进行分析。--debug.protocol 选项用于定义要插入的协议检查器。该选项可接受特殊关键字 all,用于 <compute_unit_name> 和/或 <interface_name>
      注释: 在单一命令行或配置文件内可指定多个 --debug.xxx 选项。
    2. 添加 Performance Monitor (am, aim, asm) 可启用详细通信统计数据(计数器)列表。尽管它对于性能分析最为有用,但它在调试暂挂的端口活动中同样可以提供深入见解。这些 Performance Monitor 是使用 --profile 选项来添加的,如 --profile 选项 中所述。--profile 选项的基本语法是:
      --profile.data <krnl_name>|all:<cu_name>|all:<intrfc_name>|all:<counters>|all
      需要 3 个字段用于确定性能监控器要连接到的具体接口。但是,如果资源使用不成问题,关键字 all 支持您通过单一选项即可对所有现有内核、计算单元和接口应用监控。否则,您可以明确指定 kernel_namecu_nameinterface_name 来限制检测。
      最后一个选项 <counters>|all 允许您将信息收集操作范围局限于大型设计的 counters,而 all(默认)则包含收集实际追踪信息。
      注释: 在单一命令行或配置文件内可指定多个 --profile 选项。
      [profile]
      dataernel1:cu1:m_axi_gmem0 
      dataernel1:cu1:m_axi_gmem1 
      dataernel2:cu2:m_axi_gmem
      
  2. 重建应用后,使用含已添加的 AIM IP 和 LAPC IP 的 xclbin 重新运行主机应用。
  3. 当应用挂起时,您可以使用 xbutil examine 来校验任何错误或异常情况。
  4. 检查 AIM 输出:
    • 多次运行以下命令以检查是否有任何计数器正在计数。如果计数器正在计数,则内核处于活动状态。
      xbutil examine -d <bdf> -r debug-ip-status -e aim
      提示: 通过使用命令扩展 xstatus aim 进行 GDB 调试还可以支持测试 AIM 输出。
    • 如果计数器停滞,大于零的未完成计数可能意味着某些 AXI 传输事务已挂起。
  5. 检查 LAPC 输出:
    • 运行以下命令以检查是否存在任何 AXI 违例。
      xbutil examine -d <bdf> -r debug-ip-status -e lapc
      提示: 通过使用命令扩展 xstatus lapc 进行 GDB 调试还可以支持测试 LAPC 输出。
    • 如果存在任何 AXI 违例,则意味着在内核实现中存在问题。