命令行调试示例 - 2022.1 简体中文

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文
为帮助您熟悉使用命令行进行调试的流程,本示例将为您逐步讲解构建和调试赛灵思 GitHub 上提供的 IDCT 示例的过程。
  1. 在终端内,按 设置 Vitis 环境 中所述设置您的环境。
  2. 请首先克隆 Vitis 示例 GitHub 仓库,以获取所有 Vitis 示例:
    git clone https://github.com/Xilinx/Vitis_Accel_Examples.git

    这样即可创建包含 IDCT 示例的 Vitis_Examples 目录。

  3. 使用 CD 命令转至 IDCT 示例目录:
    cd Vitis_Examples/vision/idct/

    主机代码完全包含在 src/idct.cpp 中,内核代码则包含在 src/krnl_idct.cpp 中。

  4. 构建内核软件用于软件仿真 (software emulation),如 构建器件二进制文件 中所述。
    1. 编译内核对象文件,以便使用 v++ 编译器进行调试,其中 -g 表示编译的代码用于调试:
      v++ -t sw_emu --platform <DEVICE> -g -c -k krnl_idct \
      -o krnl_idct.xo src/krnl_idct.cpp
    2. 链接内核对象文件,并指定 -g
      v++ -g -l -t sw_emu --platform <DEVICE> -config config.cfg \
      -o krnl_idct.xclbin krnl_idct.xo
      --config 选项用于指定配置文件 config.cfg,其中包含构建进程(如 Vitis 编译器配置文件 中所述)的指令。配置文件内容如下:
      kernel_frequency=250
      
      [connectivity]
      nk=krnl_idct:1:krnl_idct_1
      
      sp=krnl_idct_1.m_axi_gmem0:DDR[0]
      sp=krnl_idct_1.m_axi_gmem1:DDR[0]
      sp=krnl_idct_1.m_axi_gmem2:DDR[1]
      
      [advanced]
      prop=solution.hls_pre_tcl='src/hls_config.tcl"
  5. 编译并链接主机代码,以便使用 GNU 编译器链 g++ 进行调试,如 构建主机程序 中所述:
    注释: 对于嵌入式处理器目标平台,请使用 GNU Arm 交叉编译器,如 为 Arm 执行编译和链接 中所述。
    1. 编译主机代码 C++ 文件,以便使用 -g 选项进行调试:
      g++ -c -I${XILINX_XRT}/include -g -o idct.o src/idct.cpp 
    2. 链接对象文件,以便使用 -g 进行调试:
      g++ -g -lOpenCL -lpthread -lrt -lstdc++ -L${XILINX_XRT}/lib/ -o idct idct.o
  6. emconfigutil 实用工具 中所述,使用以下命令准备仿真 (emulation) 环境:
    emconfigutil --platform <device>
    随后,需通过 XCL_EMULATION_MODE 环境变量来设置实际仿真模式(sw_emuhw_emu)。在 C-shell 中,操作如下:
    setenv XCL_EMULATION_MODE sw_emu
  7. xrt.ini 文件 中所述,您必须设置运行时以供调试。在已编译的主机应用所在目录中,创建包含以下内容的 xrt.ini 文件:
    [Debug]
    app_debug=true
    
  8. 在主机和内核代码上运行 GDB。以下步骤用于指引您完成命令行调试进程,此进程需要 3 个独立的命令终端,其设置如 设置 Vitis 环境 中所述。
    1. 在第一个终端内,启动 XRT 调试服务器,用于处理主机与内核代码之间的传输事务:
      ${XILINX_VITIS}/bin/xrt_server --sdx-url
    2. 在第二个终端中,设置仿真模式:
      setenv XCL_EMULATION_MODE sw_emu
      执行以下操作,运行 GDB:
      xgdb –-args idct krnl_idct.xclbin
      出现 gdb 提示时,输入以下内容:
      run
    3. 在第三个终端中,将软件仿真模型连接到 GDB 以单步调试整个设计。启动另一个 xgdb
      xgdb
      • 对于软件仿真中的调试:
        • 出现 gdb 提示时,输入以下内容:
          file <XILINX_VITIS>/data/emulation/unified/cpu_em/generic_pcie/model/genericpciemodel
          注释: 由于 GDB 不会展开环境变量,您必须指定到 Vitis 软件平台安装的路径,此路径以 <XILINX_VITIS> 来表示
      • 连接到内核进程:
        target remote :NUM

        其中 NUMxrt_server 返回的作为 GDB 监听器端口的端口号。

      此时,即可照常使用 GDB 来执行主机与内核代码调试,主机代码和内核代码在两个不同的 GDB 会话内运行。在处理不同进程时,此操作很常见。

      重要: 请注意,应用可能先在某一进程中命中一个断点,然后在另一个进程中命中下一个断点。在此类情况下,其中一个终端内的调试会话会显示为挂起,另一个终端则处于等待输入状态。