用 FPGA 做高速数据采集卡:为什么 FMC HPC + PCIe x8 是黄金组合
示波器、数字化仪、相控阵雷达、软件无线电、高速振动监测——这些设备的核心都是”高速 ADC 采样 → 数据打包 → 传到主机处理”。为什么这一步必须用 FPGA,而不是 MCU、DSP 或者 CPU 直接采?为什么 FMC HPC 连接器和 PCIe x8 接口成了高速采集卡的黄金组合?这篇文章从一个真实的 250MSPS 采集项目讲起。
一、为什么高速采集必须用 FPGA
先看一组数字。一颗典型的高速 ADC,比如 AD9643:14 bit、250 MSPS、双通道。换算成数据率:
双通道 14-bit @ 250 MSPS
= 2 ch × 14 bit × 250 MS/s
= 7.0 Gbps 原始数据率
= 875 MB/s 持续数据流
这意味着每秒要把 875MB 的采样数据从 ADC 搬到主机内存。任何一个环节跟不上,就会丢点:
- MCU / ARM:SPI /并口最高 50MB/s,差 17 倍,直接丢
- DSP:DMA 端口最高 200MB/s,差 4 倍,buffer 满了就丢
- CPU 直接读 GPIO:操作系统有调度延迟,单次读周期 10μs 级,等于拿水桶接瀑布
FPGA 的价值在于:它是一块并行的、deterministic 的硬件电路。ADC 的 LVDS 数据流进来,FPGA 用 IDDR 原语在每个时钟沿同时收 8 对差分对,做解串、对齐、打上时间戳、做 FIFO 缓冲,再通过 PCIe DMA 批量搬进主机。整个链路没有操作系统调度、没有 cache miss、没有中断延迟,时钟周期是确定性的。
这就是为什么所有工业高速采集卡、示波器、数字化仪的主控都是 FPGA——不是 FPGA 比 CPU 聪明,而是它够快、够确定、够并行。
二、一张高速采集卡的标准架构
把整个数据通路画出来,就是下面这条链:
模拟信号 ───▶ 高速 ADC(FMC 子卡)→ LVDS / JESD204B → FPGA 逻辑(解串 / 对齐 / 触发 / 抽点 / FIFO)→ DDR3 数据缓存(突发采集、漏采缓冲)→ PCIe 2.0 x8 DMA → 主机内存 → 上位机软件
这条链路上有四个关键瓶颈,每一个都决定了采集卡的真实性能:
1. ADC 到 FPGA 的物理通道:FMC HPC
高速 ADC 子卡不是直接焊在主板上的——它们做成标准 FMC(FPGA Mezzanine Card)子卡。FMC HPC 连接器提供:
- 8 对 GTX 高速串行(最高 6.6 Gbps,走 JESD204B)
- 168 个单端/差分 IO(走 LVDS 并行 ADC)
- 专用时钟、触发、GA 信号引脚
- 高电流电源引脚(子卡自己供电)
一块 FMC HPC 插槽,可以插 AD9643(250MSPS ADC)、AD9152(DAC)、AD9361(软件无线电)、FT601(USB3.0)、甚至 FMC 转 40G 光口。这就是为什么我们坚持做 HPC 而不是 LPC——LPC 只有 10 对差分 IO、没有 GTX,根本接不了高速 ADC。
2. FPGA 内部的缓存:DDR3 不能省
ADC 持续吐 875MB/s,PCIe 2.0 x8 理论带宽是 4GB/s——看起来 PCIe 够快。但真实系统里主机端总有突发:操作系统调度、上位机软件处理、磁盘 I/O。如果没有 DDR3 缓冲,这些突发会直接变成丢点。
4GB DDR3 在这条链路上的角色是“弹性水库”:ADC 来多少收多少,先写进 DDR3,PCIe DMA 在主机有空闲时再批量搬走。做一个 1 秒的单次突发采集,875MB 的数据可以完整存在 DDR3 里,不丢一个采样点。如果用 2GB DDR3,连续采集时间砍半。
3. FPGA 到主机的回传:PCIe x8 vs x2 的真实差距
这是最容易被忽略的一个点。很多 FPGA 开发板的 PCIe 只引了 x2,看起来”有 PCIe 就行”,但实际带宽差 4 倍:
| PCIe 配置 | 理论带宽 | 实际可用(8B/10B 编码 + 协议开销) | 能跑的采集速率 |
|---|---|---|---|
| PCIe 2.0 x2 | 1.0 GB/s | 约 700 MB/s | 14-bit 双通道 250MSPS 跑不满,丢点 |
| PCIe 2.0 x4 | 2.0 GB/s | 约 1.5 GB/s | 单通道 250MSPS 勉强够 |
| PCIe 2.0 x8 | 4.0 GB/s | 约 3.0 GB/s | 双通道 250MSPS + 多路触发,裕量充足 |
这就是为什么笃远的 DUK7325T / DUK7410T 都把 PCIe 做到 x8——第三方原版只引了 x2,不是芯片不支持,是设计省了。Kintex-7 的 PCIe block 硬件就是 Gen2 x8,板子上多布 4 对差分线而已。对做采集的客户来说,x2 和 x8 的差别不是”快一点”,是能不能跑满 ADC 采样率。
4. 时钟同步:125MHz 差分晶振的意义
高速采集对时钟抖动极敏感。ADC 采样时钟的 jitter 直接决定信噪比——250MSPS ADC 要求采样时钟 jitter < 1ps。板载 125MHz 差分晶振专门给 GTX 收发器用,200MHz 差分晶振给 FPGA 逻辑用,两个时钟域分开,避免互相污染。做 JESD204B 同步采集时,这个时钟质量直接影响多通道的相位一致性。
三、一个真实案例:用 DUK7410T 做 250MSPS 采集原型
笃远电子近期帮一位客户做的原型:用 DUK7410T + 第三方 FMC-ADC9643 子卡(AD9643,双通道 14-bit 250MSPS)搭一套高速数字化仪原型。
DUK7410T + FMC AD9643 + 上位机
- FPGA:JFM7K410T,406K LC / 1,540 DSP / 28.6 Mb BRAM
- ADC:FMC 子卡 AD9643,双通道 14-bit 250MSPS
- 缓存:板载 4GB DDR3
- 回传:PCIe 2.0 x8 DMA,实际测得 2.6 GB/s
- 触发:FPGA 硬件触发(上升沿/下降沿/窗触发),延迟 < 50ns
实测:双通道连续采集 1 秒,875MB 数据完整写入 DDR3,再通过 PCIe x8 搬到主机,0 丢点。如果用第三方原版 PCIe x2,同样配置下连续采集超过 0.6 秒就开始丢点——这就是 x8 和 x2 的真实差距。
这个原型验证完,客户直接基于 DUK7410T 的核心板(83.8×64.8mm)做自己的载板,把 FMC 插槽换成直接焊在板上的 ADC,把 PCIe 连接器换成金手指,6 个月后变成量产采集卡。
四、笃远三款板卡在采集场景怎么选
不是所有采集项目都需要 Virtex-7。按采样率和通道数选:
| 场景 | DUK7325T ¥7,999 | DUK7410T ¥9,999 | DUF7690T ¥24,999 |
|---|---|---|---|
| ADC 采样率 | ≤ 125 MSPS | ≤ 250 MSPS | ≥ 500 MSPS |
| ADC 通道数 | 2 通道 | 2–4 通道 | 8 通道以上 |
| DSP 需求 | 简单抽点/FIR | 实时 FIR/FFT | 脉冲压缩/MIMO 雷达 |
| 光口同步 | 2×SFP+ | 2×SFP+ | QSFP 40G + 3×FMC |
| 典型应用 | 振动监测、工业采集 | 数字化仪、SDR 原型 | 相控阵雷达、软件无线电 |
选板的原则很简单:先算 ADC 总数据率,再算 PCIe 带宽裕量,最后看 DSP/BRAM 够不够做实时处理。80% 的中低速采集项目,DUK7325T 已经够;要做 250MSPS 双通道或简单实时 FFT,上 DUK7410T;只有雷达、超宽带 SDR、多通道同步这种硬骨头,才需要 DUF7690T 的 36 对 GTH 和 3 个 FMC。
高速采集的本质不是”采得多快”,而是”整条链路上没有任何一个环节掉链子”。ADC 够快、FPGA 够并行、DDR3 够大、PCIe 够宽、时钟够稳——任何一个环节省了,最后都会变成屏幕上的丢点。FMC HPC + PCIe x8 + 4GB DDR3,是这条链路上我们给客户配齐的最小可靠配置。
