基于网口实现纯 FPGA 架构的多通道数据采集就是这么容易

不需要 CPU,不需要 SoC,不需要 Linux——一块 FPGA + 一根网线,搞定 8 通道高速数据采集


你是不是也遇到过这些问题?

做数据采集的朋友大概都有过类似的经历:

  • 想采 8 路 ADC 数据,但 FPGA 的 IO 不够用,得分好几片芯片级联
  • 数据要回传上位机,USB 距离太短、WiFi 不稳定、串口太慢
  • 想加个 DDR 缓存,但 DDR 控制器调不通,时序约束搞到头秃
  • 好不容易数据采到了,上位机软件又得从头写……

每一个单独拿出来都是坑。把它们组合在一起?那就是一部血泪史。

今天介绍一个方案,让你一次性绕开所有这些坑。


方案概览

整个系统只有两个东西:

┌──────────────┐         ┌──────────────┐
│  FPGA 采集器  │ ──网线──▶ │  上位机 PC   │
│  (纯硬件逻辑) │  千兆    │  (波形显示)   │
│              │  以太网   │              │
└──────────────┘         └──────────────┘
  • 设备端:一块安路 PH1 FPGA + 8 通道 ADC + DDR3 + RJ45 网口
  • 上位机:Qt 桌面软件,实时显示波形、导出数据
  • 通信协议:标准 UDP/IP,任何支持以太网的设备都能对接

核心卖点:全链路纯 FPGA 硬件逻辑,没有 CPU、没有操作系统、没有协议栈软件。


为什么说"就是这么容易"?

1. 以太网——最被低估的采集接口

提到数据采集通信接口,很多人的第一反应是 USB、SPI、LVDS。但你可能忽略了以太网的优势:

优势具体表现
组网便利交换机即插即用,想接几台接几台
传输距离单段 100 米,加光纤转换器轻松上公里
天生电气隔离网线是铜线非共地,采集端和 PC 端天然隔离
成本低RJ45 连接器 + PHY 芯片,BOM 不到 10 块钱
带宽够用千兆网 125MB/s,8 通道 × 100kSPS × 16bit ≈ 16MB/s,绰绰有余

对于分布式采集场景,以太网就是最优解。 只是很多人觉得"以太网协议栈好难",所以不敢碰。

2. 协议栈不用你写

这是本方案最大的价值——以太网桥接 IP 已经封装好了。

你不需要理解 TCP 三次握手,不需要写 UDP 校验和,不需要处理 ARP 表。你只需要知道:

  • 把数据往 AXI 总线上一放
  • IP 核自动帮你打包成以太网帧发出去

就这么简单。就像你用 UART 不需要关心物理层编码一样,现在你用以太网也不需要关心协议栈。

3. 参考设计全开源

整个 FPGA 端工程已经开源在 Gitee 上:

仓库地址:https://gitee.com/mstar_ypc/mstar-collect-fpga

你拿到的不是一个"概念验证",而是一套经过实际硬件验证的完整系统:

tand_udp/
├── hdl/
│   ├── mstar_udp_top.v          ← 顶层,一眼看懂系统架构
│   ├── ad_driver/               ← ADC 驱动(CM2268,8通道16位)
│   ├── collect/                 ← 采集控制 + 触发 + DMA
│   ├── axi_dma/                 ← AXI DMA 读写引擎
│   ├── axi_io/                  ← AXI Lite 寄存器接口
│   ├── udpip/                   ← 以太网桥接 IP(加密网表)
│   ├── sync/                    ← 跨时钟域同步
│   └── constraint/              ← 引脚约束 + 时序约束
├── al_ip/                       ← DDR控制器、AXI矩阵、FIFO、PLL
└── README.md

打开工程 → 综合 → 下板 → 就能跑。 不需要从零搭积木。

4. 上位机也给你准备好了

配套的上位机软件同样开源:

仓库地址:https://gitee.com/mstar_ypc/mstar-oscilloscope

功能包括:

  • 多设备同时连接
  • 4 种采集模式(瞬时 / 单次触发 / 连续触发 / 连续采集)
  • 8 通道波形实时显示
  • 触发参数配置(电平 / 边沿 / 预触发)
  • CSV 数据导出
  • 文件回放

上位机是 Qt + C++ 写的,源码全部开放。 你可以直接改,也可以参考它自己写一套。


系统架构拆解

让我们看看数据是怎么从 ADC 一路跑到 PC 屏幕上的:

CM2268 ADC (8ch × 16bit)
    │
    ▼
ad_driver (采样时钟分频、芯片配置)
    │
    ▼
collect (触发判断、数据缓存)
    │
    ├── 触发模式:电平 / 上升沿 / 下降沿 / 不触发
    ├── 触发前缓存:保留触发前的数据
    └── 外部触发:支持多板同步
    │
    ▼
DMA Engine (AXI4 Full, 128-bit 突发写入)
    │
    ▼
DDR3 SDRAM (最大 64M 样本深度)
    │
    ▼
以太网桥接 IP (从 DDR 读取 → 封装 UDP 包)
    │
    ▼
RGMII PHY → RJ45 → 网线 → 交换机 → PC
    │
    ▼
上位机 (UDP 接收 → 解包 → 波形显示 / CSV 保存)

全链路纯硬件,没有一行软件参与数据传输。 这就是纯 FPGA 架构的魅力——确定性延迟在微秒级别,不会像 Linux 系统那样突然卡一下。


适合谁?

如果你是 FPGA 工程师

想给手里的采集板加个网口输出,但不知道从哪下手?这套开源工程就是你的起点。ADC 驱动、DMA、DDR 控制器、以太网接口全都有,你只需要根据自己的 ADC 型号改改驱动参数。

如果你是系统集成商

需要一个可靠的数据采集前端,但不想花几十万买进口设备?这套方案的 BOM 成本非常可控,而且 FPGA 端可以灵活定制——加几路 PWM 输出、加个温度采集、加个本地存储,都在一块芯片里搞定。

如果你是高校/研究所

带学生做实验,需要多通道同步采集但预算有限?开源方案 + 低成本国产 FPGA,一套设备几百块就能做出来。上位机也是开源的,学生可以学习 Qt 开发和 FPGA 架构设计。

如果你是嵌入式开发者

一直想学 FPGA 但觉得门槛高?从这套"看得懂、跑得通"的工程入手,看看 Verilog 是怎么控制 ADC、怎么操作 DDR、怎么跟以太网 PHY 交互的。代码注释完整,模块划分清晰。


快速上手

硬件准备

  • 安路 PH1 FPGA 开发板(或同等国产 FPGA)
  • CM2268 或兼容 ADC 芯片
  • DDR3 SDRAM
  • RGMII PHY + RJ45 网口
  • 50MHz 有源晶振

软件准备

  • Tang Dynasty IDE ≥ 6.2(安路官方开发工具)
  • Qt 6.7+(编译上位机)
  • Visual Studio 2022(编译上位机)

三步走

# 1. 克隆 FPGA 工程
git clone https://gitee.com/mstar_ypc/mstar-collect-fpga.git
# 用 Tang Dynasty 打开 tand_udp.al,综合下板

# 2. 克隆上位机工程
git clone https://gitee.com/mstar_ypc/mstar-oscilloscope.git
# 用 Qt Creator 打开 CMakeLists.txt,编译运行

# 3. 网线一连,开始采集
# 上位机自动扫描网络设备,点击连接即可

一些实际数据

指标值
ADC 通道数8
ADC 分辨率16-bit
采样率范围数十 kSPS ~ 数百 kSPS(可配置)
网络带宽千兆以太网(125 MB/s)
实际数据率~16 MB/s(8ch × 250kSPS × 16bit)
DDR 缓存深度最大 64M 样本
触发延迟< 1μs(纯硬件)
传输延迟< 100μs(端到端)
FPGA 资源占用~60% LUT, ~40% FF (PH1P35)

常见问题

Q:以太网桥接 IP 是开源的吗?
A:以加密网表形式提供,功能接口完全开放,可以正常例化和使用,但不开放内部源码。这是为了保护核心协议栈实现。

Q:能换其他型号的 ADC 吗?
A:可以。ad_driver 模块是独立的,你只需要按照目标 ADC 的时序要求改写驱动。接口信号(数据、时钟、控制)在顶层都有清晰的定义。

Q:能换其他型号的 FPGA 吗?
A:可以,但需要重新适配 DDR 控制器和引脚约束。如果你用的是安路其他型号(如 PH1P25、PH1P50),适配工作量较小。

Q:支持多少台设备同时工作?
A:理论上无限制。上位机支持多设备同时连接,每台设备独立 IP 地址,独立面板显示。

Q:可以做定制开发吗?
A:可以。我们提供从 FPGA 到上位机的全栈定制服务,欢迎联系咨询。


总结

数据采集这件事,过去总是被搞得很复杂——需要 CPU 跑协议栈、需要 Linux 管文件系统、需要各种接口转换芯片。

但如果你用纯 FPGA 架构 + 以太网,事情就变得很简单:

  1. ADC 数据直接进 FPGA
  2. FPGA 内部完成触发、缓存、打包
  3. 以太网桥接 IP 自动处理协议栈
  4. 网线一插,数据就到 PC 了

没有软件,没有驱动,没有配置服务器。 上电就能工作,断电能保数据(DDR 里),坏了能换板子(接口标准化)。

这就是纯 FPGA 架构做数据采集的优势——简单、可靠、快速、便宜。

现在,这一切都开源了。拿去用吧。


项目地址:


作者是一名 FPGA 工程师,这是他用 AI 辅助开发上位机的真实经历。如果你对"AI 如何改变 FPGA 工程师的工作方式"感兴趣,可以看看另一篇博客:《MstarOscilloscope:第一次用 AI 工具编写的波形显示软件》。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐