Xilinx高级调试方法--远程调试
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硬件器件。该驱动位于/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/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 不同主机
- ./bin/xvc_pcie -s TCP::10200,启动 XVC-Server 应用,必须在root用户下执行,不然会出现”ERROR: Failed to Open Device“的错误
- 编译应用(root用户)
- 修改xvc_pcie_user_config.h文件
- Debug Modes
- PCIe ID
- XDMA
- XVC-over-PCIe FPGA设计
相关阅读:
1、在 Linux 虚拟机中查看 IP 地址可以通过以下几种方法,具体步骤取决于你使用的网络配置和发行版,如何在Linux虚拟机中快速查看IP地址?,如何在Linux虚拟机中3秒内查到IP地址?
2、Linux命令机制,从用户输入到系统执行的完整解析,Linux命令背后隐藏着什么?从输入到执行的秘密全揭秘!,Linux命令背后隐藏着什么?从输入到执行的秘密全揭秘!
3、使用第三方主题工具,独家揭秘,如何用第三方主题工具一键打造爆款内容?,独家揭秘,如何用第三方主题工具一键生成百万爆款内容?
4、Linux调整分区大小,详细操作指南与宝塔面板安装,如何在Linux中安全调整分区大小并安装宝塔面板?,如何在Linux中无损调整分区大小并一键安装宝塔面板?