ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

USB转FIFO评估板实战:从SuperSpeed到FPGA高速数据采集

USB转FIFO评估板实战:从SuperSpeed到FPGA高速数据采集 做高速数据采集和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/sUSB 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描述符是决定设备“叫什么”的关键部位。3
返回列表