当Hardware Emulation(硬件仿真)构建完成(包括 AI 引擎 graph、PL 区域内核以及 PS 应用)后,您即可使用以下步骤来调试系统设计。此进程利用 Vitis IDE 从命令行启动调试环境。
- 使用 launch_hw_emu.sh 脚本启动 QEMU 仿真器环境,该脚本是在
--package
进程期间生成的。 - 在独立调试模式下使用
vitis -debug
选项启动 Vitis IDE。 - 配置调试环境以连接至系统内的 PS 和 AI 引擎域。
- 对于 AI 引擎平台,系统仿真所需的文件由
--package
命令来定义,包括仿真脚本。要启动仿真环境,请从构建目录中使用以下命令:./emulation/launch_hw_emu.sh -pid-file emulation.pid -no-reboot \ -add-env ENABLE_RDWR_DEBUG=true -add-env RDWR_DEBUG_PORT=10100 -forward-port 1440 1534
其中:
- ./emulation 是封装进程的输出目录,如 封装 中所述,其中还包含 launch_hw_emu.sh 脚本。
-
-add-env RDWR_DEBUG_PORT=${aie_mem_sock_port}
定义了用于与 AI 引擎域进行通信的端口。在前述示例中,此端口为 10100。 -
-forward-port ${linux_tcf_agent_port} 1534
定义了 Linux TCF 代理的端口。在前述示例中,此端口默认为 1440。
提示: 任何空闲端口均可用于以上命令模板中的aie_mem_sock_port
和linux_tcf_agent_port
。但这些端口都是必需端口,用于分别启用 AI 引擎应用和 Linux 应用调试。此命令可启动仿真器,然后等待至 QEMU 内 Linux 完成启动为止。QEMU shell 会显示 QEMU 启动和 Linux 启动进程的转录文本。当显示
qemu%
提示时,即表示此进程已完成。至此您已准备就绪,可以继续下一步。 - 在第二个终端窗口中,使用以下命令启动 XRT 服务器应用:
xrt_server -I300 -S -s tcp::4352
其中:
-
-I300
定义了空闲超时,如果经此超时后无响应,服务器就会退出。 -
-S
以 JSON 格式指定打印服务器属性为stdout。 -
-s tcp::${xrt_server_port}
定义了监听协议和端口的代理。在前述示例中,此端口为 4352,但可采用任意空闲端口。
-
- 创建名为 aie_app_debug.tcl 的 Tcl 脚本以设置 AI 引擎调试环境:
#Set up the required environment # The aie_mem_socket and xrt_server ports must match what was specified in earlier commands. set aie_work_dir "<AIE_Project>/Work" set aie_mem_sock_port "10100" set xrt_server_port "4352" set app_name "aie_graph" #Echo the environment setup puts "Vitis install: $XILINX_VITIS" puts "Application: $app_name, Work Directory: $aie_work_dir" puts "XRT Server Port: $xrt_server_port, AIE Port: $aie_mem_sock_port" #Set up AIE Debug environment set source_tcl_cmd "source $XILINX_VITIS/scripts/vitis/util/aie_debug_init.tcl" puts "$source_tcl_cmd" eval $source_tcl_cmd ##run the command to connect and display debug targets set aie_debug_cmd "init_aie_debug -work-dir $aie_work_dir -url tcp::$xrt_server_port \ -memsock-url localhost:$aie_mem_sock_port -sim-type memserver -name $app_name -full-program" puts "$aie_debug_cmd" eval $aie_debug_cmd
注释: 此脚本需设置$XILINX_VITIS环境变量。 - 当 QEMU 环境和xrt_server均正常启动并运行后,您可在第三个终端窗口中以独立调试模式启动 Vitis IDE:
vitis -debug -flow embedded_accel -target hw_emu -exe ./ps_app \ -program-args ${xcl_bin_dir}/binary_container_1.xclbin -port 1440
其中:
-
vitis -debug
- 以独立调试模式启动 Vitis IDE。
-
-flow embedded_accel
- 指定嵌入式处理器应用加速流程。
-
-target hw_emu
- 指示要调试的目标构建。
-
-exe ./ps_app
- 指示要运行和调试的 PS 应用。
-
-program-args ${xcl_bin_dir}/binary_container_1.xclbin
- 表示要作为实参加载到可执行文件中的 XCLBIN 文件的位置。
-
-port 1440
- 指定
${linux_tcf_agent_port}
,如前所述。
这样即可打开 Vitis IDE 并显示Debug(调试)透视图,同时加载 PS 应用的调试配置。
-
- 在 Vitis IDE 的Debug透视图中,创建新的目标连接,类型为Hardware Server(硬件服务器),名为
aie_xrt_server
。指定localhost
作为主机,并指定xrt_server_port
作为端口(前述示例中为 4352)。 - 创建新的Debug(调试)配置,类型为Single Application Debug(单应用调试),如下所示。
- Debug Type(调试类型)
-
Attach to running target
- Connection(连接)
-
aie_xrt_server
- Execute Script(执行脚本)
- 指定到步骤 4 中定义的 aie_app_debug.tcl 的路径。
- 按Debug以继续。
这样即可连接到 QEMU 中的 PS 应用及其相应的核上运行的 AI 引擎 graph。此应用会在所有 ELF 文件的
main()
函数处自动中断。
此时,您即可在仿真环境中执行所有调试活动,如单步进入、单步跳过、查看变量或植入断点。如需了解更多信息,请参阅 使用调试环境。