Xilinx高级调试方法--远程调试


本文主要介绍Xilinx的一些高级调试方法,以及如何使用Xilinx的相关IP。

1 虚拟电缆调试

在传统的调试方法中,调试是通过JTAG接口进行监测信号的传输。赛灵思虚拟电缆 (Xilinx Virtual Cable, XVC) 允许 Vivado通过非JTAG接口连接到FPGA调试核。XVC通过PCIe链路而不是标准JTAG调试接口来执行调试。此过程称为XVC-over-PCIe,支持Vivado ILA波形捕获、VIO调试控制以及使用 PCIe 链路作为信道与其它赛灵思调试核进行交互。

使用XVC进行调试的系统架构如下图所示,主要包括几个部分:

  • XVC-over-PCIe FPGA设计
    传统上,Vivado调试是通过JTAG来执行的。默认情况下,Vivado工具可将赛灵思调试核连接到FPGA中的JTAG BSCAN资源以执行调试。为执行XVC-over-PCIe调试,此信息必须通过PCIe链路而不是JTAG电缆接口来传输。赛灵思Debug Bridge IP支持将调试网络通过PCIe扩展配置接口(PCIe-XVC-VSEC)或通过 PCIe BAR 的AXI4-Lite内存映射接口(AXI-XVC)连接到 PCIe。
    Debug Bridge IP 配置为“From PCIe to BSCAN”或“From AXI to BSCAN”之后即可为分别源于PCIe扩展功能或AXI4-Lite 接口的赛灵思调试网络提供连接点。Vivado工具自动化可将此Debug Bridge实例连接到设计中找到的赛灵思调试核,而不是将其连接到JTAG BSCAN接口。在判定将Debug Bridge连接到PCIe扩展配置空间还是AXI4-Lite之间,设计需权衡利弊。
  • PCIe-XVC驱动
    XVC-over-PCIe驱动可提供与连接到主机PC并启用PCIe的FPGA硬件资源的连接。因此,此驱动作为Linux内核模式驱动提供,用于访问位于以下位置的PCIe硬件器件。该驱动位于<Vivado_Installation_Path>/data/xicom/driver/pcie/xvc_pcie.zip。此驱动的必要组件必须添加到为特定FPGA平台创建的驱动中。此驱动用于实现 XVC-Server应用通过PCIe与FPGA进行通信所需的基本功能。
  • XVC-Server
    使用调试功能时,hw_server应用由Vivado Design Suite启动。您可通过Vivado IDE将hw_server连接到本地或远程FPGA目标。此接口同样可用于连接到本地或远程PCIe-XVC目标。主机PCIe XVC-Server应用使用TCP/IP套接字连接到赛灵思hw_server。这样即可允许Vivado(使用hw_server)和 XVC-Server 应用在同一台PC上运行或者在通过以太网连接的不同PC上运行。XVC-Server应用需在直接连接到FPGA硬件资源的PC上运行。在此情况下,FPGA硬件通过PCIe连接到主机PC。XVC-Server应用通过同样在主机PC上运行的PCIe-XVC驱动来连接到 FPGA硬件器件。
  • Vivado Design Suite
    Vivado软件启动Hardware Manager监测调试信号。

在这里插入图片描述

2 FPGA设计

在PCIe扩展配置接口(PCIe-XVC-VSEC)的模式下,FPGA设计中与XVC相关的设计连接如下图所示。各IP设置如下:

  • XDMA
    • PCIe ID
      • Vendor ID:1BD4
      • Device ID:903F
    • PCIe : MSIC
      • 勾选Configuration Extended Interface,使能pcie_cfg_ext
      • 勾选Add the PCIe XVC-VSEC to the Example Design,这样Open IP Example Design时在示例工程中便会有XVC-VSEC的相关逻辑。本设计也是参考示例工程的设计,其中xdma_v4_1_10_vsec_null_v1_0便是实例工程中的文件。
  • Debug Bridge
    • Debug Modes
      • Bridge Type:From PCIE to BSCAN
    • BSCAN Options
      • JTAG Fallback Mode:Internal BSCAN Primitive,JTAG通过Debug Bridge连接到调试核,如果DISABLE这一项,在JTAG无法连接调试核,下载Bit文件后,会提示”The Debug hub core was not detected“,无法通过JTAG进行调试。但是不影响通过XVC的方式进行调试。
      • User Scan Chain:1
      • BSCAN Master Count:1
    • PCIe Options
      • PCIe XVC VSEC Base Address:0xEA0
      • PCIe XVC VSEC Length:0x020
      • PCIe XVC VSEC Next Pointer:0x000
      • PCIe XVC VSEC ID:0x0008
      • PCIe XVC VSEC Rev ID:0x0
  • judge:三目运算符:data = valid ? data1 : data2
    在这里插入图片描述

2.1 扩展配置接口

在实现外部实现的配置寄存器时,“配置扩展 (Configuration Extend)”接口允许核随用户应用一起传输配置信息。下表定义了核的配置扩展接口中的端口。

端口 方向 宽度 描述
cfg_ext_read_received output 1 已接收配置扩展读取
cfg_ext_write_received output 1 已接收配置扩展写入
cfg_ext_register_number output 10 配置扩展寄存器编号
cfg_ext_function_number output 8 配置扩展功能编号
cfg_ext_write_data output 32 配置扩展写入数据
cfg_ext_write_byte_enable output 4 配置扩展写入字节使能
cfg_ext_read_data input 32 配置扩展读取数据
cfg_ext_read_data_valid input 1 配置扩展读取数据有效

如果扩展配置的不对,在对驱动进行测试时,会出现下图错误。
在这里插入图片描述

3 PCIe-XVC驱动

解压驱动压缩包,解压出文件夹driver_v0.4和xvcserver文件夹,driver_v0.4是生成驱动的文件夹,xvcserver是生成server应用的文件夹。

3.1 PCIe-XVC驱动

  • 修改xvc_pcie_user_config.h文件
    • 64行PCIE_VENDOR_ID:设置为XDMA IP中设置的Vendor ID 0x1BD4
    • 65行PCIE_DEVICE_ID:设置为XDMA IP中设置的Device ID
    • 77行Config_space:允许选择使用 PCIe-XVC-VSEC 或 AXI-XVC 外设。默认值AUTO会首先尝试发现PCIe-XVCVSEC,如果未找到 PCIe-XVC-VSEC,则会尝试连接至 AXI-XVC外设。
    • 79行config_vsec_id: 当“桥接类型 (Bridge Type)”配置为“从PCIE 到 BSCAN (From PCIE to BSCAN)”时,该值为在“Debug Bridge IP”中定义的 PCIe XVC VSEC ID (默认值 0x0008) 。该值仅用于检测PCIe-XVCVSEC。
    • 80行config_vsec_rev: 当“桥接类型 (Bridge Type)”配置为“从PCIe 到 BSCAN (From PCIe to BSCAN)”时,该值为在“Debug Bridge IP”中定义的 PCIe XVC VSEC Rev ID (默认值 0x0)。该值仅用于检测PCIe-XVCVSEC。
    • 83行bar_index:PCIe BAR索引,当“桥接类型”配置为“从AXI到BSCAN (From AXI to BSCAN)”时,应使用此索引值来访问“Debug Bridge IP”。此BAR索引指定为PCIe IP自定义与系统设计中可寻址的AXI外设的组合。该值仅用于检测AXI-XVC外设。
    • 84行bar_offset:PCIe BAR偏移,当“桥接类型”配置为“从AXI到BSCAN (From AXI to BSCAN)”时,应使用此偏移值来访问“Debug Bridge IP”。此BAR偏移指定为PCIe IP自定义与系统设计中可寻址的AXI外设的组合。该值仅用于检测AXI-XVC外设。
  • 编译驱动(root用户)
    • cd /driver_0.4
    • make install,驱动安装在/lib/modules/<kernel_version>/kernel/drivers/pci/pcie/xilinx/xilinx_xvc_pcie_driver.ko目录下
  • 加载驱动(root用户)
    • depmod -a,运行 depmod 命令以选择新安装的内核模块,不然后面执行modprobe命令找不到驱动
    • modprobe -r xilinx_xvc_pcie_driver,确保未加载任何旧版本的驱动
    • rmmod xdma,卸载系统中的xdma驱动,如果存在xdma驱动,加载xvc的驱动后,字符文件/dev/xil_xvc/cfg_ioc0不会出现
    • modprobe xilinx_xvc_pcie_driver,加载驱动
    • ls /dev/xil_xvc,字符文件/dev/xil_xvc/cfg_ioc0
  • 测试驱动(root用户)
    • make test,为驱动构建简单的测试程序
    • ./driver_test/verify_xil_xvc_driver,运行测试程序
      在这里插入图片描述
      在这里插入图片描述

3.2 XVC-Server

  • 编译应用(root用户)
    • cd ./xvcserver
    • make,编译应用
  • 启动应用(root用户)
    • ./bin/xvc_pcie -s TCP::10200,启动 XVC-Server 应用,必须在root用户下执行,不然会出现”ERROR: Failed to Open Device“的错误
      在这里插入图片描述

4 Vivado Design Suite

Vivado Design Suite可在运行XVC-Server应用的计算机上运行,或者也可以在通过以太网网络连接的另一台计算机上远程运行。但端口必须可供运行Vivado的机器访问。

4.1 同一台主机

  • 启动Vivado Design Suite
  • 选择Open HW Manager
  • 在硬件管理器(Hardware Manager)中,依次单击“Open target” → “Open New Target” → ”Next
  • 选择“Local server”,然后单击“Next”,这样即可在本地机器上启动hw_server, 随后它会连接到xvcserver应用。
  • 选择“Add Xilinx Virtual Cable (XVC)”,在“添加虚拟电缆 (Add Virtual Cable)”对话框中,输入相应的主机名(Host name)和端口 (Port)以连接到xvcserver应用,单击“OK”。
    在这里插入图片描述
  • 从“硬件目标 (Hardware Targets)”表中选择新添加的 XVC 目标,然后单击“Next”,然后单击“Finish”
    在这里插入图片描述
  • 在“硬件器件属性 (Hardware Device Properties)”面板中, 选择Debug Bridge目标, 并指定相应的探测.ltx文件。
    在这里插入图片描述
    在这里插入图片描述

4.2 不同主机

  • 在添加XVC的时候,输入的主机名(Host name)设置为XVC-Server所在主机的IP地址
    在这里插入图片描述
  • 在“硬件器件属性 (Hardware Device Properties)”面板中, 选择Debug Bridge目标, 并指定相应的探测.ltx文件。
    在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 20:08:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 20:08:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 20:08:05       82 阅读
  4. Python语言-面向对象

    2024-03-10 20:08:05       91 阅读

热门阅读

  1. SOC设计:关于reset的细节

    2024-03-10 20:08:05       41 阅读
  2. 字符集&字符编码

    2024-03-10 20:08:05       43 阅读
  3. 2024年及未来: AI辅助研发的革新之旅

    2024-03-10 20:08:05       40 阅读
  4. 在Linux/Ubuntu/Debian中测试USB驱动器(U盘)的速度

    2024-03-10 20:08:05       42 阅读
  5. C# Dictionary<string, string> 对key做筛选

    2024-03-10 20:08:05       45 阅读
  6. 【C语言】深入理解指针(扩展)

    2024-03-10 20:08:05       43 阅读
  7. Kafka整理-Consumer Group(消费者群组)

    2024-03-10 20:08:05       45 阅读
  8. anaconda, conda, conda-forge

    2024-03-10 20:08:05       43 阅读
  9. R语言及其开发环境简介

    2024-03-10 20:08:05       38 阅读