Back to Blog

【国产NI替代】基于FPGA+AI的2通道电压 80M采样(16bts)PCIE终端采集板卡,支持飞腾/龙芯主控

#fpga开发#arm开发#边缘计算#人工智能

引言

本文聚焦于一款基于 FPGA + AI2 通道电压 80 MHz 采样(16 bit)PCIe 终端采集板卡,并说明它在国产工业计算平台(飞腾、龙芯)上的使用方式。阅读后,您将了解该板卡的硬件架构、关键技术参数、PCIe 数据通路实现细节、通道扩展思路以及在实际开发调试过程中的注意事项。

1. 背景与应用场景

在工业自动化、过程控制以及边缘计算等领域,常需要将模拟信号(如电压、电流)实时数字化后送往上位主机进行进一步分析或 AI 推理。对 采样率分辨率成本 的要求往往呈现以下特征:

  • 采样率:多数传感器的带宽在几 MHz 到数十 MHz 之间,80 MHz 的采样率足以满足 Nyquist 要求,避免信号失真。
  • 分辨率:16 bit 能提供约 0.0015 % 的量化精度,已能满足大多数工业测量需求。
  • 成本敏感:相较于高端 24 bit、500 MS/s 的示波器,成本更低的方案更适合批量部署。

因此,一块 高速 PCIe 采集卡,能够直接插入工业 PC(IPC)或通用服务器的 PCIe 插槽,将原始数据高速搬运到 CPU,便于在上位软件层进行实时处理或 AI 推理。

2. 硬件概览

2.1 板卡外观

2.2 关键芯片

  • FPGA:采用 XC7A100T-2FGG484I 型号的 FPGA。该器件属于 Xilinx Artix‑7 系列,拥有 101 k 逻辑单元、4.8 Mb Block RAM 以及 240 个 DSP48E1 单元,能够满足高速采样、数据缓存与简单 DSP 预处理的需求。
  • ADC:内部集成 2 路 80 MS/s、16 bit 电压模数转换器(型号在原文中未列出),直接与 FPGA 的高速 I/O 接口相连。
  • PCIe:实现 Gen2 x4(或 x8)接口,提供最高 2 GB/s 的单向传输带宽,足以支撑 80 MS/s × 2 × 2 Byte = 320 MB/s 的原始数据流。

2.3 功能定位

采用XC7A100T-2FGG484I型号的FPGA,是专门针对工控主机设计的一块高速PCIE采集卡,最高采样率能到80M,属于一种附属板卡,可以插在工控主机的PCIE卡槽中,通过PCIE接口将采集的数据传输到CPU,应用层软件可以直接在CPU上进行开发,主要应用在需要和工控主机或者电脑主机相组合,对采样位数要求不高,成本相对敏感的场合。

3. FPGA 选型与资源利用

Artix‑7 系列在功耗、成本与资源之间取得了平衡。针对本卡的设计要点如下:

资源用途备注
Logic Cells实现采样时钟分频、数据打包、PCIe DMA 控制器逻辑利用率约 30%
Block RAM采样缓存(FIFO)以及 DMA 描述符采用双口 RAM 实现读写分离
DSP48E1简单滤波或校准系数乘法预留 8~16 个 DSP 单元供后续 AI 前置处理使用
IO连接 ADC 的 LVDS/CMOS 接口、PCIe PHY采用 IBUFDS/OBUFDS 进行信号完整性处理

在实际布局时,建议将 ADC 接口与 FPGA 的高速 I/O 放在同一侧,以最小化走线长度,降低抖动。

4. PCIe 数据通路实现

4.1 DMA 机制

板卡内部采用 PCIe DMA 引擎,将 FPGA 中的采样缓存直接搬运到主机内存。DMA 传输分为两类:

  • 环形缓冲 DMA:适用于连续采样场景,主机只需轮询写指针即可获取最新数据。
  • 一次性 DMA:在触发采样后一次性传输固定长度数据,适合离散测量或触发式采集。

4.2 驱动层

在 Linux(或国产 OS)上,提供 cdevUIO 接口供上层应用调用。驱动代码中主要实现:

// 伪代码示例
int pcie_dma_start(struct pcie_dev *dev, dma_addr_t host_addr, size_t len)
{
    // 配置 DMA 描述符
    dev->desc.src = dev->fpga_fifo_addr;
    dev->desc.dst = host_addr;
    dev->desc.len = len;
    // 启动 DMA
    writel(DMA_START, dev->regs + DMA_CTRL);
    return 0;
}

代码块保持原样,仅作说明用途,实际实现请参考官方驱动模板。

4.3 与飞腾/龙芯主控的兼容性

国产飞腾(FT2000/5000)和龙芯(Loongson)处理器均支持 PCIe 2.0/3.0 标准,驱动层只需确保 PCIe 设备 ID 与系统的 PCIe 子系统 匹配即可。若使用 U-Boot 启动,可在 bootargs 中加入 pci=pcie_bus 参数,以确保系统正确枚举该卡。

5. 采样率、分辨率与通道扩展

一块采集卡集成了16个通道,后续的通道扩展和工控主机或者电脑主机可扩展的PCIE卡槽有关,总通道数 = PCIE卡槽*16。

当前板卡提供 2 通道,每通道最高 80 MS/s16 bit。若系统中有多个 PCIe 插槽,可通过增加相同型号的采集卡实现线性扩展:

  • 单卡:2 通道 → 320 MB/s 数据流
  • 双卡(2×PCIe 插槽):4 通道 → 640 MB/s
  • N 卡N × 2 通道,理论上可达 N × 320 MB/s 的总带宽(受限于主板 PCIe 带宽上限)

在实际部署时,需要关注 PCIe 总线负载CPU DMA 通道数,防止出现瓶颈。

6. 开发与调试建议

  1. 时钟约束:确保 FPGA 的采样时钟(80 MHz)与 ADC 时钟相匹配,使用 Xilinx Vivado 的时序约束文件(.xdc)进行严格约束。
  2. 信号完整性:对高速 LVDS/CMOS 线进行差分阻抗匹配(约 100 Ω),使用示波器检查抖动与噪声。
  3. PCIe 链路验证:在 Linux 中使用 lspci -vvv 查看链路速度、宽度以及错误计数。
  4. DMA 性能测试:通过 dd 或自编写的 DMA 测试程序,测量实际传输速率,确保不低于 300 MB/s。
  5. 软件层面:推荐使用 Zero-Copy 技术(如 mmap)将用户空间缓冲区直接映射到 DMA 缓冲区,降低 CPU 复制开销。
  6. AI 前置:若后续需要在 FPGA 上进行简单的 AI 前置(如卷积或阈值检测),可利用 DSP48E1 单元实现固定点运算,减少 CPU 负载。

7. 典型应用案例

  • 过程监控:在化工生产线上,实时采集电压信号并通过边缘 AI 检测异常波形。
  • 电网检测:利用 80 MHz 采样率捕获瞬态电压冲击,随后在 CPU 上进行 FFT 分析。
  • 机器视觉前置:在视觉系统前端对模拟传感器输出进行快速数字化,供后续深度学习模型使用。

8. 结论

这款基于 XC7A100T FPGA 的 2 通道 80 MHz、16 bit PCIe 采集卡,以 高采样率 + 低成本 的组合,为工业 PC 与国产主控(飞腾、龙芯)提供了灵活的数据采集方案。通过 PCIe DMA 机制,能够实现高速、零拷贝的数据搬运;而通过模块化的通道设计,支持在多 PCIe 插槽环境下线性扩展,满足更大规模的测量需求。开发者在使用时,只需关注时钟约束、PCIe 链路以及 DMA 性能,即可快速构建可靠的边缘计算采集系统。