做高速数据采集和FPGA数据交互的工程师,这两年很难绕开SuperSpeed USB这个词。USB 2.0时代大家普遍被卡在40MB/s左右的有效吞吐上,ADC想跑满、图像传感器要连续传输、逻辑分析仪要实时上传波形,几乎每一类设备都在跟带宽较劲。USB 3.0普及之后,把USB-to-FIFO桥接芯片放到评估板上,成为快速验证这类方案最直接的入口。
这块板子到底解决了什么问题?一句话说,它把USB协议栈、PHY、电源、时钟、参考电路全部处理好了,你需要做的只是把它插到电脑上,然后操作FIFO侧的那几十根引脚,就能在FPGA和PC之间建起一条几百MB/s的通道。对想评估SuperSpeed桥接芯片、又不想上来就啃几百页手册的人来说,评估板是最合适的起手式。
下面的内容按我的实际踩坑经验,从方案选型、硬件拆解、点板实操到自研量产,把评估板背后的门道一次性说清楚。适合FPGA工程师、嵌入式开发者、以及正在做高速数据采集设备选型的硬件负责人参考。
1. 为什么我把「USB转FIFO」列入高速传输方案的第一梯队
1.1 带宽账先算清楚:USB 2.0时代卡脖子的地方
做硬件的人都知道,USB 2.0标称480Mbps,但那是物理层速率。真正走Bulk批量传输时,受协议包开销、主机控制器调度、操作系统驱动栈的影响,实测连续吞吐能稳定跑在35到42MB/s已经属于优秀水平。这个数字对HID类小数据量设备绰绰有余,可一旦进入高速数据采集就完全不够看了。比如一个12位100MSPS的ADC,裸数据就是200MB/s,USB 2.0连零头都喂不饱。
到USB 3.0的SuperSpeed,链路速率变成5Gbps,编码方式换成了8b/10b,物理层有效带宽约500MB/s。刨掉协议开销后,单端点连续Bulk读理论上能做到350到400MB/s。也正是这个数量级的跨越,让“PC端实时接收FPGA里灌出来的高速数据”从工程难题变成了常规操作。
1.2 桥接芯片 vs 自带USB控制器 vs FPGA直接实现
有朋友会问:现在很多ARM或FPGA本身带USB 3.0,为什么还要外挂一颗桥接芯片?
带USB 3.0的ARM处理器确实存在,但你要把协议栈跑起来、把DMA链路打通、把CPU中断压到可控范围,等于同时调软件和硬件两个栈。FPGA里做USB 3.0更不现实,PHY硬核不是谁都能集成,协议层逻辑复杂到足以让项目延期。这里不是能力问题,是投入产出比问题。
USB-to-FIFO桥接芯片把USB协议和PHY全部固化在芯片里,对外只暴露一个并行FIFO接口。FPGA工程师只要按简单的读写时序打信号,剩下的USB枚举、流控、重传都由芯片自己处理。PC端用官方驱动或libusb,数据就能以几百MB/s的速率流进FPGA。评估板的价值,正是把这颗桥接芯片的所有外围按官方最优解搭好,让你跳过最容易被坑的电源和高速布线环节。
1.3 FIFO接口的门槛,比你想象的友好
一听到“FIFO接口”,新手容易觉得很高深。其实它就是一组并行总线:数据线(16位或32位)、写使能、读使能、片选、时钟,外加几个标志位。标志位的作用是告诉对端“我的缓冲区快满了/空了”,这和平时用的异步FIFO芯片在概念上是相通的。
比如FX3的GPIF II从模式,FPGA这边看到的是SLWR、SLRD、SLCS这些控制脚,以及FLAGA到FLAGD的状态脚。你只需要保证数据在写使能有效时保持建立时间,在标志位指示“可写”时再发起写入,整个链路就跑通了。FT60x的引脚命名不同,但概念完全一样,都是时钟、读写、标志位这一套。比起PCIe要配置TLP、BAR、MSI中断,这套东西对FPGA工程师友好得多。评估板通常还会把FIFO信号引到排针或板载FPGA连接器上,拿来当参考时序非常方便。
2. SuperSpeed带来的吞吐红利:链路速率到真实带宽之间隔了什么
2.1 5Gbps链路下的有效带宽拆解
先说结论:5Gbps链路不等于你能拿到500MB/s。链路层的8b/10b编码意味着每传输10位才携带8位payload,直接砍到500MB/s;再叠加USB协议层的包结构,设备每次传输要附带包头、CRC、链路管理等字节;主机端还要通过xHCI控制器调度,CPU和PCIe路径也会参与,所以对普通台式机或笔记本来说,单端点连续Bulk读能跑到380MB/s已经属于调得比较好的状态。
评估板厂商标称的“最大吞吐”指的是桥接芯片内部到USB PHY的能力,不代表你拿到手就一定能复现。我实测过同一颗桥接芯片在不同主板上单插和经过扩展卡时成绩可以差15%以上,这个差异主要来自主机端,不是芯片本身。
2.2 Bulk端点在SuperSpeed里的传输机制
USB 3.0对Bulk传输做了一个非常重要的增强:突发(Burst)。在USB 2.0里,Bulk端点的最大包只有512字节,而且每次事务完成都要等主机再次轮询。USB 3.0的Bulk端点最大包提升到1024字节,还允许一个突发内连续发送最多16个包,相当于一次事务最多可以搬16KB数据。这个特性直接决定了为什么USB 3.0的Bulk吞吐能接近链路极限。
对PC端程序来说,如果你想榨干带宽,最好用异步I/O、每次提交1MB以上的传输缓冲,并且让驱动把多个URB排成队列。高频次的小块请求会让主机控制器每传一包就停下来等MMIO和中断,吞吐直接掉一个数量级。
2.3 评估板上的SuperSpeed信号完整性不容忽视
USB 3.0的TX/RX是5Gbps差分对,PCB上走线差分阻抗要求90欧姆,对内等长通常控制在5mil以内,还要保证参考层连续。很多自制板失败,不是芯片不会用,而是高速信号没走好,眼图质量差导致枚举不稳、掉速、断连。
这也是我建议先用评估板的原因之一:原厂的板子Layout经过充分验证,你照着它抄,已经把80%的信号完整性风险规避掉了。评估板里最值得学习的地方,恰恰是那些看起来“平平无奇”的差分走线和过孔旁路。
3. 评估板硬件拆解:每一颗料出现在那都是有原因的
3.1 电源树:从VBUS取电到多路低压轨
评估板首先要解决供电。USB连接器的VBUS提供5V,但桥接芯片通常需要多组电压,比如内核电压、IO电压、PHY模拟电压、甚至独立的DP/DN端子上拉电源。板上一般用一颗LDO或小封装DCDC把5V降到合适电压,再配合多颗磁珠和电容分开滤波。
这里有一个容易被忽略的点:FIFO接口的IO电平。FX3的GPIO电压域可以在1.8V到3.3V之间选择,如果你的FPGA是1.8V电平而板子默认接3.3V,轻则逻辑不识别,重则损坏芯片。评估板通常用跳线或排针让你自己做电平选择,自己设计时一定要把电平匹配考虑进去。
3.2 时钟与EEPROM:芯片上电瞬间在忙什么
桥接芯片需要一个基准时钟,通常由外部晶振或晶体提供。这个时钟必须稳定,否则USB 3.0的收发器无法产生合格的参考频率,枚举会失败。评估板上常见的做法是放一个高精度晶振加滤波电路,并把时钟输出引到一旁供示波器探测。
另一个容易被忽略的是EEPROM。FX3这类可编程芯片在启动时会根据引脚配置决定从哪加载固件:一种是从I2C EEPROM加载,另一种是USB启动(由PC端工具下发固件到RAM执行)。评估板空片时一般处于USB启动模式,设备管理器中会出现一个需要用驱动绑定的未知设备,等固件下载后才变成真正的桥接设备。这块EEPROM还存放VID/PID、厂家字符串等USB描述符,是决定设备“叫什么”的关键部位。