做高速信号处理、雷达系统、或者大规模 LED 显示屏的朋友,应该都遇到过同一个问题:一个 FPGA 算力不够,得上两个、四个甚至更多。但多片 FPGA 连在一起之后,麻烦就来了------时钟怎么对齐?数据怎么不丢不重?动不动就出现采样错位、数据乱序,调试起来头都大了。
,不堆理论,直接说工程上怎么做的、哪些坑最常见、以及什么方案最稳。
一、同步问题:所有通信的基础
多 FPGA 协作,同步是第一道坎。如果时钟不同步,采样的数据就是错的,再好的通信协议也没用。
1. 同源时钟 + 全局布线
最理想的情况:把所有 FPGA 放在同一块板子上,用同一个高精度晶振产生参考时钟,再通过时钟 buffer(比如 Si5338)扇出到每个 FPGA。这样所有芯片的时钟边缘是确定的,相位差可测可控。
难点在于 PCB 走线等长。如果时钟线长度不一致,到达各个 FPGA 的时间就有偏差。高速下(比如 200MHz+),几毫米的差异就能导致采样错误。解决办法是 等长走线 + 动态相位调整:每个 FPGA 内部用 IDELAY 或 PLL 细调时钟相位,配合训练序列对齐。
2. 分布式同步:没条件就上协议
如果多 FPGA 分布在不同的板卡上(比如通过背板或线缆连接),无法保证同源时钟,那就得用 同步协议 了。
-
触发式同步:主机发一个广播同步脉冲,所有从机收到后对齐本地时间计数器。类似于 TDC 或 PPS 秒脉冲的做法。
-
IEEE 1588:网络环境下的精确时间协议,可以在以太网上实现亚微秒级同步,适合分布式采集系统。
实际工程中,很多团队会偷懒------直接用同步时钟 + 数据使能线。比如主机给出一路同步时钟和一路帧同步信号,所有从机都在帧同步的上升沿开始数据采集或发送。简单粗暴,但很有效。
二、通信方式:不同场景选不同接口
同步解决了"什么时候干活",通信解决"数据怎么传"。多 FPGA 之间常用下面几种方式。
1. LVDS 并行总线 ------ 简单、低成本
几个 FPGA 之间用一组 LVDS 差分对传数据,比如 8 位数据 + 1 位时钟 + 1 位帧同步。速率能做到几百 Mbps,协议可以自己定。
优点:几乎所有 FPGA 都支持,不占用高速收发器。缺点:线多,PCB 布线痛苦,速率上不去 Gbps 级别。
适合:短距离、数据量不大、成本敏感的项目。
2. SerDes / GT 收发器 ------ 高速王道
Xilinx 叫 GT(GTP、GTX、GTH),Intel 叫 transceiver。一根差分线能跑到 6.25Gbps 甚至更高,配上 Aurora 或 SRIO 协议,非常方便。
-
Aurora:Xilinx 自家的轻量协议,很简单就能点对点传数据,支持流模式和帧模式。我们之前做一个多 FPGA 雷达信号处理,四个片子之间就用 Aurora 光纤环网,稳定跑了两年。
-
SRIO:更复杂,支持多对多、DMA、消息传递,适合 DSP+FPGA 异构系统。
需要注意的是,高速串行接口要做好链路训练和误码率测试。很多新手以为连上就能通,实际经常遇到链路不稳定、偶尔丢包,最后发现是参考时钟质量差或者线缆太长。
3. PCIe 桥接 ------ 适合背板架构
如果是插在工控机或者服务器上的多 FPGA 板卡,可以通过 PCIe 交换芯片(如 PEX8748)把所有 FPGA 挂到一个 PCIe 树上。主机 CPU 看到多个设备,FPGA 之间也可以通过 DMA 或 Peer-to-Peer 直接传数据。
这种方式上位机驱动写起来比较麻烦,但一旦调通,带宽巨大(x8 Gen3 有 8GB/s),延迟也低。
4. 以太网 / UDP ------ 灵活但效率稍低
有些场景不想折腾专用接口,直接每个 FPGA 带一个千兆或万兆网口,通过交换机互联。用 UDP 或者自定义 MAC 帧传输数据。
优点是布线简单、距离远、容易扩展。缺点是协议栈开销大,延迟不确定,以及需要处理丢包重传。不过对于实时性要求不那么严格的数据采集汇总,完全够用。
三、实际工程中常见的三个坑
坑一:忽略数据对齐
多路并行数据传到另一个 FPGA 时,由于走线延迟差异,每条线的数据到达时间可能差几个纳秒。解决方法是用源同步时钟 + 每个 bit 独立 IDELAY 校准,或者用 FIFO 加帧同步信号重对齐。
坑二:多 FPGA 同时访问同一资源造成冲突
比如两个 FPGA 都要往同一个 DDR 写数据,如果没有仲裁机制,数据就会打架。要么设计中避免共享资源,要么做集中式仲裁或分时复用。
坑三:复位不同步
多个 FPGA 上电或复位完成的时刻不一样,可能导致一方已经发数据,另一方还在复位中。解决方法是设计全局复位信号,并且每个 FPGA 复位释放后先进行链路握手,确认双方就绪再开始正常工作。
多 FPGA 同步与通信,说到底是 时钟、数据、控制 三个维度的协作。方案没有绝对的好坏,取决于你的带宽要求、距离、成本以及团队熟悉的技术栈。有些人嫌 Aurora 麻烦,用 LVDS 也能跑得很稳;有些人追求极致性能,直接上芯片间 28G 光互连。
我们 由你创科技 的主营业务覆盖两块:上位机软件开发 和 FPGA 开发。也就是说,从最底层的 FPGA 逻辑、多芯片同步通信,到上层的驱动、数据处理、用户界面,我们都能从头做到尾。
这些年我们帮客户做过不少这类系统------比如多 FPGA 并行做高速 AD 采集,数据汇总后通过 PCIe 或万兆网上抛到上位机,上位机再实时显示、存盘、分析;也有多 FPGA 协同控制大阵列 LED,上位机做内容下发和状态监控。这种项目最大的痛点是:FPGA 之间好不容易调通了,上位机一跑起来又掉链子------卡顿、丢数、界面假死。我们正好把两头都吃透了,所以能一次性把整个链路跑顺。
如果你正在搞多 FPGA 协同,或者需要一款不拖后腿的上位机软件来配合你的硬件,欢迎来聊聊。FPGA 的事、上位机的事,我们都能接住。