观察点 - 2022.1 简体中文

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

Document ID
UG1076
Release Date
2022-05-25
Version
2022.1 简体中文

观察点属于一种断点类型。当某处地址上的值发生更改时,观察点可用于停止核的执行。这在判断值发生更改的位置时很有用。例如,可能意外覆盖某个变量值,导致程序流程中断。观察点有助于检测此类情况。

AI 引擎架构支持读/写观察点。这表示根据您的配置,在读取访问和/或写入访问时触发观察点。每个 AI 引擎 tile(拼块)都支持每个存储体各含 2 个观察点。由于每个 AI 引擎核(不包括边界处的拼块)都有权访问相邻拼块内的存储体,因此每个核最多可使用 8 个观察点。但由于共享存储体,因此每个核的可用观察点数量取决于存储体内已用的观察点数量。例如,如果某个核已使用了来自其 4 个相邻存储体的全部 8 个观察点,那么共享这 4 个存储体的其它核则无法使用来自共享的存储体的观察点。调试器会保留从每个存储体分配的观察点的记录,只要当前拼块内无可用观察点,就会抛出错误。

  1. 要在 Vitis IDE 中添加观察点,请单击Breakpoints(断点)视图右上角的三个点,然后选择Add Watchpoint (C/C++)(添加观察点 (C/C++))。

  2. Watchpoint Properties(观察点属性)对话框中,输入感兴趣的存储器地址或变量名。选择读/写模式。如果取消选中Enabled(启用),则无论调试会话期间采用读取模式还是写入模式,都不会启用观察点。这样无需移除观察点配置即可将其保留,并在必要时重新添加即可。

  3. 默认情况下,观察点添加到所有调试核中。要将观察点应用于特定的核,请单击“Watchpoint Properties”观察点属性窗口左侧窗格的Scope(作用域),然后仅选中观察点适用的特定核即可。

  4. Breakpoints(断点)视图中验证观察点。

触发观察点

根据观察点的配置方式,在读取访问和/或写入访问时会触发观察点。已触发的观察点会导致核在访问相应地址的指令处停止。调试器会检测到该核已因观察点而停止,并发出相应报告。

重要:
  • 观察点仅适用于硬件。不支持 AI 引擎 SystemC 模型。
  • 存储体为共享。如有某个核使用了来自某个 bank 的两个观察点,那么就无法在该 bank 内再为任何其它核添加观察点。
  • 对于归入未使用的拼块/存储体的存储器地址,不得设置观察点。将观察点设置到未使用的拼块可能导致 AXI 错误。已用的 AI 引擎和存储器拼块可在 Work/aie/active_cores.json 中找到。
  • 对于位于完整 16 字节对齐地址范围内的存储器访问,可触发观察点。
  • 调试器使用两条广播通道来处理观察点事件。在调试期间启用观察点时,请确保这两条广播通道的使用中不存在任何冲突。

Variables(变量)视图显示了内核变量值。根据变量类型,单击变量可显示其类型、值和变量地址。对于阵列/结构变量,单击变量的箭头即可展开此阵列的阵列/结构内容。

图 1. Variables视图

单击变量即可获取地址信息,然后单击Memory(存储器)视图中的+并输入变量的存储器地址。该变量的值会随其它存储器内容一并显示。单击变量的“value”(值)字段、输入新的值,然后按 Enter 键即可更改该变量的值。

要指定“Memory”(存储器)窗口中显示的数据的格式,请单击New Renderings(新的呈现方式)选项卡,指定要呈现的数据格式,然后单击Add Rendering(s)(添加呈现方式)。

提示: 要导出“Memory”窗口的内容,请从右键单击菜单中选中Copy to Clipboard(复制到剪贴板)命令,以将内容复制粘贴到文本编辑器并保存到文件。
图 2. Registers视图

Registers(寄存器)视图中,值会在调试进程中更新并在 Vitis IDE 中高亮显示。

图 3. Disassembly视图

Disassembly(反汇编)视图可显示机器代码和汇编代码。C/C++ 源码也嵌入在各行之间以供源代码引用。在Explorer(资源管理器)视图中,选中 AI 引擎工程,然后右键单击并选中Open Disassembly View(打开反汇编视图)。这将显示如下窗口,您可在其中选择要查看其反汇编代码的核。

图 4. 选择核

注释:Disassembly(反汇编)视图中,默认跳过 NOP 指令。如需调试器逐步执行 NOP 指令,请单击下图中圈出的Instruction Stepping Mode(指令单步执行模式)图标。
图 5. 单步执行 NOP 指令

图 6. 调试控制

调试控制命令允许您对源代码进行单步跳入/跳出/返回。其它命令允许您在 Vitis IDE 中恢复、停止、终止或断开连接调试器。

Vitis 支持多核调试和多域(PS 和 AI 引擎)调试。根据应用,可能有数百个内核同时进行调试。对每个核以及每个域中的所有核都加以精细控制至关重要。从 Vitis IDE 中选择一个核,然后单击Resume(恢复)图标即可仅恢复执行该核的调试。选择 AI 引擎域中所有核的上一层,然后单击Resume图标即可恢复所有 AI 引擎核的执行。恢复 graph 中所有内核的执行则取决于诸多条件,例如,每个内核是否有数据可用于避免停滞,或者各内核断点的设置。您还必须确保未进行调试的内核均可自由运行。

图 7. 选择恢复多个 AI 引擎调试

图 8. Debug透视图

注释: 对于卷绕内核实现的每个核,AI 引擎编译器都会为其自动创建 main() 函数。Debug(调试)视图可显示完整的源代码(包括已插入的部分)。