Xilinx高级调试方法--远程调试
- 1 虚拟电缆调试
- 2 FPGA设计
- 2.1 扩展配置接口
- 3 PCIe-XVC驱动
- 3.1 PCIe-XVC驱动
- 3.2 XVC-Server
- 4 Vivado Design Suite
- 4.1 同一台主机
- 4.2 不同主机
本文主要介绍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便是实例工程中的文件。
- PCIe ID
- 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
- Debug Modes
- 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文件。