news 2026/4/22 21:46:05

从网络接口到 DMA,一套面向工程师的 FPGA 网络开发框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从网络接口到 DMA,一套面向工程师的 FPGA 网络开发框架

在高性能网络、数据中心和智能网卡加速领域,硬件与软件协同设计已成为提升网络处理效率的关键。Liberouter 提供的 Network Development Kit(NDK) 就是这样一套专门用来快速开发 FPGA 加速网络应用的开源框架,是连接高速网络接口、FPGA 逻辑与主机处理器的工程级利器。

🧩 什么是 Liberouter NDK?

NDK 全称 Network Development Kit,是由 Liberouter 研究团队开发的一套框架,用于在 FPGA 加速卡上快速实现高性能网络应用。它并不是一个简单的示例或库,而是一个 可直接用来推进复杂网络硬件开发的平台。

这个套件支持包括 10 GbE、100 GbE 和 400 GbE 在内的高速以太网标准,同时提供了配套的 Linux 驱动、用户态库、示例程序等工具,大幅降低了网络加速 FPGA 设计的门槛。

🚀 核心功能和特点

  • 基于标准以太网硬IP的网络模块,支持10 GbE、100 GbE、400 GbE等速度。

  • 基于 PCIe Gen5 x16 或 2x PCIe Gen4 x16 接口的超高速 DMA 模块,吞吐量达 400 Gbps。

  • 易于使用的内存接口,可对卡进行单独的读取/写入操作。

  • 用于完整设计综合的自动化脚本。只需运行一条 make 命令即可创建整个 FPGA 比特流。

  • Linux 内核驱动程序、DPDK 支持、用户空间库和配置工具。

  • 通过用户友好的 API 轻松创建自定义应用程序,实现组件访问和 DMA 传输。

用户应用程序

NDK 专为创建具有深度流水线式高速数据包处理的新型网络应用而设计。应用核心是 FPGA 芯片上专用于用户应用的区域,它可以利用 NDK 从网络接口捕获数据包,并通过超高速 DMA 传输将数据发送到主机 CPU。网络模块(NDK 的一部分)负责网络数据包的接收和发送。网络模块通过数据流总线(兼容 AXI4-Stream/Avalon-ST)将接收到的数据包发送到应用核心。然后,同一数据总线用于将数据传输到主机 CPU。整个 NDK 的可扩展性从数十 Gbps 到数百 Gbps 不等。它的设计目标是在每个时钟周期内发送和处理多个数据包。NDK 的标准数据总线经过优化,可以同时传输大量数据包,从而进一步提高吞吐量。上述数据总线包括 MFB (多帧总线)和MVB(多值总线)。就吞吐量而言,几乎唯一的限制是可用的 FPGA 资源。

许多网络应用需要大型数据结构或缓冲区。因此,NDK 提供了一个易于使用的接口,用于与外部存储器(通常是 DRAM)通信。用户可以使用该接口快速开发连接跟踪表、流缓存或数据缓冲区。

在FPGA中实现的用户应用程序可以通过对指定地址范围的读/写请求进行控制。这些请求通过与Intel Avalon-MM兼容的CSR总线从软件传输到应用程序核心。软件用户应用程序可以通过简单的软件API生成这些读/写请求。

超高速DMA传输(DMA Medusa IP)

提供与厂商无关的FPGA架构和开源Linux驱动程序,用于采用逐包方式的高速DMA传输。该DMA设计吞吐量为400 Gbps,并采用多通道架构以支持CPU内核间的数据分发。该架构具有高度灵活性,支持各种高端FPGA系列和PCIe总线配置(最高可达PCIe Gen5 x16)。DMA IP可以利用更多PCI端点模块,将吞吐量扩展到100、200和400 Gbps。

已在 Intel Stratix 10 DX 开发套件上演示了 DMA 架构的 400 Gb 吞吐量。然而,同样的 DMA 引擎也能为 Xilinx UltraScale+ 和 Intel Agilex 器件提供极高的吞吐量。NDK Linux 驱动程序允许单独控制所有 DMA 通道。它还提供了一个用户友好的 API,可将应用程序内核直接连接到 DMA IP。此外,还可以通过 DPDK 驱动程序处理 DMA 传输。

示例设计

作为 NDK 的一部分,该项目提供了一个最小化(参考)应用程序的示例设计,该设计可以轻松扩展,为用户应用程序提供硬件加速。该示例设计基于 NDK 框架构建。由于架构设计精良,最小化应用程序核心仅包含连接网络接口和 DMA 模块所需的连接线。此外,最小化示例设计还包含一个用于向 DMA 通道分发数据的单元。

https://cesnet.github.io/ndk-app-minimal/app-minimal.html

实施、验证和运行

示例设计可作为创建目标应用程序的灵感来源。可以轻松地使用加速引擎或其他独特功能扩展应用程序核心。提供NDK Minimal(参考)应用程序的文档,其中包含应用程序接口的详细描述。可以专注于应用程序核心,并利用 NDK 控制网络接口和 PCIe,实现快速 DMA 传输。

所有网络应用都需要进行精确的验证和测试。因此,NDK 提供了一个 UVM 验证环境,用于检查应用的功能是否正常。该验证环境包含一组适用于所有应用接口的总线功能模型 (BFM)。所有 BFM 和整个验证环境的详细描述请参见 NDK Minimal App 文档。成功验证应用核心后,可以通过一条 make 命令生成新的 FPGA 比特流,并在 FPGA 卡上运行该应用。

支持的FPGA卡

NDK 目前支持多种 FPGA 卡,并且可以轻松扩展以支持任何其他带有网络接口和 PCIe 连接器的 FPGA 卡。NDK 中使用的绝大多数组件都已准备好支持各种高端 FPGA,包括 Intel Agilex、Intel Stratix 10、Xilinx UltraScale+ 等。

可用链接

https://www.liberouter.org/ndk/

https://github.com/CESNET/ndk-fpga

🧠 小结

Liberouter 的 NDK 是一套工程级 FPGA 网络加速开发框架,它把底层复杂的高速网络收发、DMA 传输、 FPGA bitstream 生成等通用功能都封装好,开发者可以更专注于业务逻辑和加速算法本身。

对从事 FPGA 网络加速、智能 NIC 设计或高性能系统工程的开发者来说,NDK 提供了一条更快、更可靠、更可复用的硬件加速设计路线。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 0:28:06

React Native + OpenHarmony:FlatList列表项分隔线

React Native OpenHarmony:FlatList列表项分隔线 摘要: 在React Native跨平台开发中,FlatList作为高性能的长列表组件,其列表项之间的视觉分割是提升UI精致度的关键细节。本文基于React Native 0.72.5和OpenHarmony 6.0.0 (API …

作者头像 李华
网站建设 2026/4/17 21:17:57

如何更改CAD标注的精度?

在机械设计与精密制造中,标注的小数点位数直接关联加工与检测精度。默认的两位小数在某些高精度场景下可能不足,或对常规零件显得冗余。通过修改标注样式中的精度配置,您可以一键统一调整所有相关标注的小数位数。接下来,让我们一…

作者头像 李华
网站建设 2026/4/20 2:41:36

PostgreSQL 创建用户表的时候提示 user 错误

[42601] ERROR: syntax error at or near "user"Position: 14问题 就说了用户 (user) 这个字别乱用。 因为 user 在 PostgreSQL 是保留关键字。 直接用于表名或列名会导致语法错误。 解决方法是用双引号将"user"括起来,或者更推荐的做法是改…

作者头像 李华
网站建设 2026/4/21 19:26:12

Multiplatform - 使用 Jetpack 组件(ViewModel、Navigation3)

一、概念二、ViewModel2.1 添加依赖[versions] viewModel "2.9.6"[libraries] jetbrains-viewModel { module "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref "viewModel" } //可选(解决桌面端对…

作者头像 李华
网站建设 2026/4/17 22:59:26

演示下 一个qkv网络逐步趋向出局部加法结构的过程的每个详细的子步骤 -----来自deepseek的回答

演示下 一个qkv网络的内部权重从完全随机 到训练 【【一道小学数学应用题【学校里有2个苹果和3个梨,问学校里一共有几个水果?】这个题和答案5,代入到QKV网络里训练】后 逐步趋向出局部加法结构的过程的每个详细的子步骤 ----来自deepseek…

作者头像 李华
网站建设 2026/4/17 1:31:37

外包干了17天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

作者头像 李华