服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-22 简米科技 3,753 字 9 分钟阅读

如何在虚拟机里成功连接并使用FPGA设备?虚拟机连FPGA难吗

导读在虚拟机里连接FPGA设备,核心动作只有两步:先把USB下载器或JTAG线直通给虚拟机,再让驱动和权限把这条链路认全;剩下的稳定性问题,基本取决于你选USB直通还是网络调试,虚拟机跑FPGA开发环境,好处是工具链干净、快照可回滚、换项目不用重装系统,麻烦的地方在于,USB设备默认被宿主机抢走,虚拟机的Vivad……

在虚拟机里连接FPGA设备,核心动作只有两步:先把USB下载器或JTAG线直通给虚拟机,再让驱动和权限把这条链路认全;剩下的稳定性问题,基本取决于你选USB直通还是网络调试。

虚拟机跑FPGA开发环境,好处是工具链干净、快照可回滚、换项目不用重装系统,麻烦的地方在于,USB设备默认被宿主机抢走,虚拟机的Vivado或Quartus打开Hardware Manager时经常一片空白,把这条链路打通,比反复重装工具链有效得多。

先确认虚拟机和FPGA之间到底卡在哪一层

FPGA开发板和电脑之间通常不是"一根线"那么简单,中间夹着下载器芯片、USB控制器、宿主操作系统、虚拟化层四道关,哪一道没放行,工具都会报"no cable found"。

USB直通是主流路线,也是多数坑的来源

多数开发板走USB-JTAG,板载FTDI芯片(如FT2232H)或外接Digilent HS2、Xilinx Platform Cable,这类设备在宿主机上枚举成功,虚拟机里却看不到,原因集中在三处:

  • 虚拟机软件的USB控制器没启用,或兼容性版本设成了1.1;
  • 宿主机把设备占用后没有"释放",虚拟机拿不到句柄;
  • Linux宿主缺少udev规则,设备节点权限是root-only。

一份够用的前置清单

动手前先对一遍,能省掉大半折腾:

  • 宿主机开启VT-x/AMD-V,KVM路线还要开IOMMU(Intel用intel_iommu=on,AMD用amd_iommu=on);
  • 虚拟机软件版本不要太旧,VMware Workstation 16以上对USB 3.x支持更完整;
  • 虚拟机内装好厂商工具链,Vivado、Quartus、Gowin EDA按官方系统要求选版本;
  • 预留足够内存,综合布线阶段8GB是底线,16GB更从容;
  • 板子供电独立,别指望虚拟机USB口带起大功耗核心板。

虚拟机如何直通USB连接FPGA开发板

这个问题问的人最多,三条主流路线各有各的路径。

VMware Workstation里调试Xilinx FPGA的配置步骤

这是最常见的场景:Windows宿主、Ubuntu虚拟机、Vivado加一块Artix-7或Zynq开发板。

  1. 关机状态下打开虚拟机设置,找到"USB控制器",勾选"启用USB控制器",兼容性选USB 3.1;
  2. 启动虚拟机,插好开发板,等宿主机识别出下载器;
  3. 点虚拟机菜单"虚拟机"→"可移动设备",找到类似Future Technology Devices International或Digilent USB Device的条目;
  4. 选择"连接(断开与主机的连接)",设备会从宿主消失、在虚拟机里出现;
  5. 虚拟机内执行lsusb,确认能看到0403:6014这类VID:PID;
  6. 打开Vivado,Hardware Manager里点Open Target→Auto Connect,能刷出器件即通。

一个细节容易被忽略:如果板子重新插拔,直通关系会断,需要在同一菜单里重新连接一次,长期调试建议把设备固定到某个USB端口,减少枚举漂移。

VirtualBox的差异点

VirtualBox默认只给USB 1.1,必须装Oracle VM VirtualBox Extension Pack才能跑到USB 2.0/3.0,设置路径是"设置"→"USB"→勾选"启用USB控制器",再点右侧加号添加设备筛选器,把下载器的VID/PID填进去,好处是插上就自动直通,不用每次手动点连接。

Linux宿主走KVM/QEMU的直通写法

服务器或开发机上用KVM,配置更偏命令行,但一次写好很省心:

lsusb
# Bus 001 Device 005: ID 0403:6014 Future Technology Devices International, Ltd FT2232H

写一个hostdev片段:

<hostdev mode='subsystem' type='usb' managed='yes'>
  <source>
    <vendor id='0x0403'/>
    <product id='0x6014'/>
  </source>
</hostdev>

然后virsh attach-device 虚拟机名 usb.xml --live,虚拟机内部再补一条udev规则,避免每次sudo:

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0666", GROUP="plugdev"' \
  | sudo tee /etc/udev/rules.d/99-fpga-jtag.rules
sudo udevadm control --reload-rules && sudo udevadm trigger

USB直通和网络共享,哪种方式连接FPGA更稳定

两条路线不是替代关系,适用场景差得挺远,业内专家指出,远程调试需求增长后,JTAG over TCP的做法在实验室和云平台上越来越普遍。

对比维度 USB直通 网络调试(JTAG over TCP)
延迟表现 低,适合交互式下载 略高,对时序调试不敏感
配置复杂度 中等,靠点菜单或写XML 初期稍高,之后可复用
多台机器共享 不支持,设备被独占 支持,多客户端连同一hw_server
断线恢复 重新插拔后需再直通 服务不重启,重连即可
典型场景 单人本地开发、板卡调试 实验室共享、远程办公、CI流水线

网络方式的落地操作

在接着板子的那台机器上启动硬件服务器:

hw_server -d -s tcp::3121

另一端在Vivado Hardware Manager里选Open Target→Open New Target→Remote Server,主机填宿主机IP或localhost,端口3121,如果板子本身带以太网,部分厂商也支持把调试通道走网口,省掉USB占用的麻烦。

选哪个更合适

单人开发、板子就在手边,USB直通最直接;多人共用一块板、或者虚拟机跑在远端服务器上,网络方式省事得多,行业共识认为,调试链路越短越不容易出玄学问题,能本地就本地,跨机器时优先保证网络稳定。

预算有限怎么在虚拟机里连接国产FPGA开发板

千元级国产板卡在学习和中小项目里很常见,高云、安路、紫光同创都有对应产品线,它们在虚拟机里的连接逻辑和进口板一致,差别主要在驱动和工具链。

驱动要手动装的情形

部分国产下载器在Linux下没有开箱即用的驱动,需要按厂商提供的源码编译,典型流程是进驱动目录执行make,再sudo make install,重启udev服务,Windows侧一般提供签名驱动包,装完设备管理器里能看到对应的USB Cable节点。

报权限错误的快速定位

如果工具提示打不开设备,先跑ls -l /dev/bus/usb/00X/00Y看权限位,若是crw-rw-r--且属主是root,说明udev规则没生效,把VID换成实际值重新写一条即可,另一类报错是工具版本与器件不匹配,升级到厂商文档标注的版本通常能解决。

打通之后,这些习惯决定你少踩多少坑

  • 给虚拟机拍快照,工具链和驱动状态可回滚;
  • 把调试用USB端口固定在宿主机后置口,避开前面板集线器;
  • 关闭宿主机对下载器的自动挂载服务,减少抢占;
  • 虚拟磁盘放在SSD上,综合布线阶段I/O压力不小;
  • 多人环境统一hw_server端口,写进文档而非口口相传。

虚拟机连接FPGA设备常见问题

虚拟机里lsusb看不到下载器,先查什么?

先确认虚拟机的USB控制器已启用、兼容性不低于2.0,再看菜单里设备是否处于"连接"状态,宿主侧设备管理器或lsusb能识别、虚拟机侧没有,基本就是直通开关没打开。

直通成功但Vivado扫描不到器件怎么办?

区分是链路问题还是权限问题。lsusb能看到设备而Hardware Manager空白,多数是udev权限或工具版本问题;把当前用户加入plugdev组、重载规则后重启Vivado,通常能恢复,若设备都看不到,回到直通那一步重连。

同一块FPGA板能让多台虚拟机共用吗?

物理上不行,USB设备同一时刻只能被一个主机或虚拟机持有,需要共享时改用hw_server方案,把板子接在一台机器上,其他机器通过3121端口远程连接,这样并发访问由服务端排队处理。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱