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