返回

Linux环境下FPGA远程JTAG调试配置指南

在 Linux 服务器上运行 Xilinx hw_server,通过局域网让工作电脑远程连接 JTAG 下载器,实现 FPGA 远程调试。包含 USB 权限(udev)、端口监听、Vivado Hardware Manager 连接与常见问题排查。

Linux环境下FPGA远程JTAG调试配置指南

环境说明

硬件配置

  • Linux调试服务器:Ubuntu 20.04(物理机或虚拟机均可)
  • FPGA板卡:通过PCIe金手指插在物理主板上(暂无PCIE固件)
  • JTAG下载器:FT232H (USB接口,ID: 0403:6014)

软件环境

  • 调试服务器:Ubuntu 20.04 + Xilinx Vivado Lab 2018.3
  • 工作电脑:Windows/Linux + Vivado

需求分析

目标:在工作电脑上通过局域网远程调试Linux服务器上的FPGA板卡

实现方案

hw_server网络桥接方案

  • 适用场景:通过JTAG接口调试,板卡无需PCIE固件
  • 优点:配置简单灵活,工作电脑操作体验好,支持跨网络调试
  • 实现思路
    1. JTAG下载器通过USB连接到Linux服务器
    2. Linux服务器运行hw_server监听网络端口
    3. 工作电脑Vivado通过网络连接hw_server进行调试

架构示意

1
工作电脑(Vivado) <---网络---> Linux服务器(hw_server) <---USB---> JTAG下载器 <---JTAG---> FPGA板卡

配置步骤

一、确认JTAG下载器连接

1. 查看USB设备

1
lsusb

找到JTAG下载器设备(示例输出):

1
Bus 001 Device 002: ID 0403:6014 Future Technology Devices International, Ltd FT232H

记下设备ID:0403:6014

二、安装Vivado Lab

1. 运行安装程序

1
2
3
4
5
# 普通用户安装到家目录(推荐)
./xsetup

# 或使用root权限安装到系统目录
sudo -E ./xsetup

建议安装路径:~/Xilinx/Vivado_Lab/2018.3

2. 解决依赖问题

Ubuntu 20.04缺少旧版本库,需创建软链接:

1
2
3
4
5
6
7
8
# 先查看现有库版本
ls -l /lib/x86_64-linux-gnu/libtinfo.so*

# 创建libtinfo.so.5软链接
sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5

# 创建libncurses.so.5软链接
sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.5

3. 验证安装

1
2
cd ~/Xilinx/Vivado_Lab/2018.3/bin
./vivado_lab

能正常启动GUI即成功。

三、配置USB设备权限

原因分析:hw_server需要访问USB设备,默认普通用户没有权限。

1. 创建udev规则

1
sudo vim /etc/udev/rules.d/52-xilinx-ftdi-usb.rules

写入以下内容:

1
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="0666", GROUP="plugdev"

2. 重载规则

1
2
sudo udevadm control --reload-rules
sudo udevadm trigger

四、启动hw_server

1. 检查端口占用

1
sudo netstat -tulnp | grep 3121

如果3121被占用,换用其他端口(如3122)。

2. 启动hw_server

1
2
cd ~/Xilinx/Vivado_Lab/2018.3/bin
./hw_server -s TCP:*:3121

看到以下输出即成功:

1
2
3
****** Xilinx hw_server v2018.3
INFO: hw_server application started
INFO: Use Ctrl-C to exit hw_server application

3. 验证监听状态

另开终端执行:

1
netstat -tuln | grep 3121

应该能看到 0.0.0.0:3121 在LISTEN状态。

五、工作电脑远程连接

1. 打开Vivado Hardware Manager

在工作电脑的Vivado中:

  • 菜单:FlowOpen Hardware Manager
  • 或点击左侧 Flow NavigatorOpen Hardware Manager

2. 添加远程硬件目标

  • 点击 Open targetOpen New Target

  • 选择 Remote server

  • 配置连接参数:

    • Host name: Linux服务器的IP地址(如:192.168.1.100)
    • Port: 3121(或hw_server实际监听端口)
  • 点击 NextFinish

3. 验证连接

成功后应能在Hardware窗口看到JTAG链路和FPGA芯片。

连接成功界面

连接成功界面

常见问题排查

1. hw_server提示"Socket bind error. 地址已在使用"

原因:端口被占用
解决

1
2
3
4
5
# 查看占用进程
sudo netstat -tulnp | grep 3121

# 换用其他端口
./hw_server -s TCP:*:3122

2. Hardware Manager显示"No device"

原因:USB权限不足或udev规则未生效
排查步骤

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 1. 确认设备在系统中
lsusb | grep 0403:6014

# 2. 检查当前用户组
groups

# 3. 添加用户到plugdev组(如果不在)
sudo usermod -a -G plugdev $USER

# 4. 注销重新登录后重启hw_server

3. Vivado Lab启动报库文件错误

错误信息

1
couldn't load file "libxxx.so": libtinfo.so.5: cannot open shared object file

解决:创建软链接指向新版本库(见步骤二-2)

4. 工作电脑无法连接hw_server

排查步骤

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1. 测试网络连通性
ping Linux服务器IP

# 2. 测试端口连通性
telnet Linux服务器IP 3121
# 或
nc -zv Linux服务器IP 3121

# 3. 检查防火墙(如有)
sudo ufw status
sudo ufw allow 3121/tcp

5. JTAG通信速度慢或不稳定

可能原因

  • USB线缆质量差或过长
  • USB Hub供电不足
  • USB 2.0/3.0兼容性问题

建议

  • 使用优质短线直连
  • 避免使用USB Hub
  • 尝试不同USB接口

扩展优化

1. hw_server后台运行

使用screen保持hw_server持续运行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 安装screen
sudo apt install screen

# 创建会话
screen -S hwserver

# 启动hw_server
cd ~/Xilinx/Vivado_Lab/2018.3/bin
./hw_server -s TCP:*:3121

# 按 Ctrl+A 然后按 D 分离会话

# 重新连接会话
screen -r hwserver

2. 开机自启动hw_server

创建systemd服务:

1
sudo vim /etc/systemd/system/hw_server.service

写入以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=Xilinx Hardware Server
After=network.target

[Service]
Type=simple
User=你的用户名
ExecStart=/home/你的用户名/Xilinx/Vivado_Lab/2018.3/bin/hw_server -s TCP:*:3121
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用服务:

1
2
3
4
5
6
sudo systemctl daemon-reload
sudo systemctl enable hw_server
sudo systemctl start hw_server

# 查看状态
sudo systemctl status hw_server

3. 多用户并发访问

hw_server支持多个客户端同时连接,但同一时间只能有一个客户端控制JTAG。配置要点:

  • 使用不同的工作电脑连接同一个hw_server
  • 第一个连接的客户端获得控制权
  • 其他客户端只能监控状态

4. SSL加密连接(可选)

对于跨公网的远程调试,可以配置SSH隧道加密:

1
2
3
4
# 在工作电脑上执行
ssh -L 3121:localhost:3121 user@Linux服务器IP

# 然后在Vivado中连接 localhost:3121

调试技巧

1. 调整JTAG时钟频率

如果遇到通信错误,可以降低JTAG频率:

  • Hardware Manager → Properties → TCK Frequency
  • 尝试从 15MHz 降到 1MHz 或更低

2. 查看hw_server日志

hw_server终端会实时显示连接状态和错误信息,调试时保持观察。

3. 多设备JTAG链

如果板卡上有多个FPGA或其他JTAG设备串联,确保在Vivado中选择正确的目标器件。

总结

本方案通过hw_server实现了Linux环境下的FPGA远程JTAG调试,核心思路:

  1. 硬件层:JTAG下载器USB连接到Linux服务器
  2. 软件层:Linux服务器运行hw_server桥接JTAG通信
  3. 网络层:工作电脑通过TCP/IP远程连接hw_server

优点

  • 配置简单,无需板卡PCIE固件
  • 支持局域网/广域网远程调试
  • 工作电脑操作体验与本地调试一致
  • 可多人共享同一套硬件环境

适用场景

  • 实验室/公司共享FPGA开发板
  • 远程办公FPGA开发
  • 自动化测试系统
  • 板卡无PCIE固件的调试场景

测试环境:Ubuntu 20.04 + Vivado Lab 2018.3 + FT232H JTAG
日期:2026年1月

🄯 2025 - 2026 DeerStar的博客· 0Days
共书写了50.5k字·共 14篇文章
本站总访问量 · 访客数

DeerStar的一些笔记
使用 Hugo 构建
主题 Stack ModIce Year 设计
🄯 Licensed Under CC BY-NC-SA 4.0