下冰雹 · 6 天前

使用国产 FPGA 实现开源 10Gbps NIC Corundum

前言

由于需要全国产网卡方案,挑选了如下图所示的板卡,其中使用的是复旦微 JFM7VX690T36 芯片。本文旨在介绍如何使用此板卡实现 10G 网卡。板卡图片如下,最多可支持 4 路 10G 网口。一路 PCIe 通过 COME 连接器连接板载 COMe,另一路通过 PCIe 金手指引出。除此之外该板卡上还放置了 DDR3 接口,板贴 QDRII+颗粒,以及 SATA 接口等。

image.png

开源 Corundum 工程介绍

简介

Corundum 是一个基于 FPGA 的开源高性能网络接口卡(NIC)项目,旨在提供一个灵活且高效的平台,用于开发和测试高速网络接口。以下是 Corundum 的一些关键特点和功能:

  1. 高性能数据路径:Corundum 平台具备高线速操作的核心功能,能够支持高达 100Gbps 及以上的网络接口开发。
  2. 10G/25G/100G 以太网 MAC:平台内置了 10G/25G/100G 以太网 MAC,用于实现高速网络通信。
  3. PCI Express 第 3 代:支持 PCI Express 第 3 代协议,确保与现代计算机系统兼容。
  4. 自定义 PCIe DMA 引擎:提供可定制的 PCIe DMA 引擎,用于优化数据传输效率。
  5. IEEE 1588 PTP 时间戳:平台包含本机高精确的 IEEE 1588 PTP 时间戳功能,用于同步网络设备的时间。
  6. 可扩展队列管理:支持超过 10,000 个队列以及可扩展的传输调度程序,可以对包传输进行细粒度的硬件控制。这些队列与接口相关联,每个接口可以有多个端口,每个端口都有独立的传输调度器。
  7. 事件驱动的传输调度:结合多个网络接口、每个接口多个端口以及每个端口事件驱动的传输调度,这些功能可实现高级网络接口、体系结构和协议的开发。
  8. 软件接口:硬件功能的软件接口是 Linux 网络协议栈的高性能驱动程序,确保了与操作系统的良好兼容性和性能。
  9. 仿真框架:提供一个全面的、基于 Python 的开源仿真框架,促进了开发和调试。该框架涵盖了从驱动程序和 PCI Express 接口的仿真模型到以太网接口的整个系统。

Corundum 设计框架

image.png

兼容性

由于 Corundum 支持 xilinx v7-690T 系列。而 JFM7VX690T36 与 v7-690T 可兼容,所以可基于 Corundum 做网卡开发。

FPGA 编译环境

编译需要 linux 版本机,推荐使用 ubuntu 22.04。需要 vivado 工具

内核镜像链接

Index of /ubuntu-releases/22.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/

Vivado 下载链接

https://www.xilinx.com/support/download.html

安装 EDA 工具

FPGA BIT 综合

下载开源工程

使用如下命令下载 corundum 工程

git clone https://gitcode.com/gh_mirrors/co/corundum.git

打开开源工程

可以看到如下目录

image.png

配置环境变量

取环境变量

使用

source $(此处为 Vivado 安装目录)/settings64.sh

或者

bash $(此处为 Vivado 安装目录)/settings64.sh

修改板卡信息

进入到如下目录

image.png

可以看到当前目录下有以下文件。此处应根据板卡信息修改 xdc 文件

image.png

配置 FPGA 设计

进入如下目录

image.png

可以看待此处有一个 config.tcl 文件。用户可根据需求进行灵活配置

image.png

默认只用了单网口,此处我需要使用四网口,对 config.tcl 文件进行如下修改

image.png

编译 FPGA 工程

  1. 在当前目录下输入 make
  2. 等待编译完成
    a) 等待过程中可以查看 log 确认编译进度
    b) 等待过程中可以打开 gui 界面确认进度,打开 gui 界面:
    i. 新建窗口并切换到如下目录

image.png

ii. 取 vivado 环境变量

iii. 输入 vivado fpga.xpr &

  1. 将生成的 BIT 下载到 FPGA 中

image.png

设备驱动

编译驱动

切换到此目录下

image.png

输入 make,编译通过后出现 mqnic.ko

加载驱动

输入如下命令

insmod mqnic.ko

根据 PCIe 号确认网口号,下图示例 PCIe 号为 01:00.0

ls -l /sys/class/net/

image.png

软件测试

环境配置

配置本机网口 IP 与对端网口 IP,确保相互之间可以 ping 通。网口号为上图中根据 PCIe 号确认的网口号。

image.png

硬件环境

image.png

TCP 测试命令

Server 端

iperf -s -B <Server 端 IP>

Client 端

iperf -c <Server 端 IP> -B <Client 端 IP> -t 30 -i 1

修改 MTU

ifconfig <网口> mtu <mtu 值>

测试结果:

测试汇总

接收速率:网卡作为服务器端接收数据的速率

image.png

发送速率:网卡作为客户端发送速率速率

image.png

MTU1500 单网口测试结果

image.png

MTU1500 四网口测试结果

image.png

可扩展性

此板卡配备了一路标准的 COMe 连接器,可实现板载 COMe 功能,并支持与单独供电接口配合使用。此外,板卡厂商在所提供的 corundum 工程中,还提供了 COMe 的 FPGA 版本。不过,在本次项目中并未涉及 COMe 的使用,因此此处仅作简要介绍。

image.png

使用感受总结

性能表现

  • 传输速率:该板卡支持四路 10G 网口,能够满足高速网络数据传输的需求,在多网口同时工作时,也能保障每个网口都有较高的数据传输速率,适用于对网络带宽要求较高的应用场景,如大数据中心内部的数据交互、企业级网络等。
  • 数据处理能力:基于 Corundum 开源工程的高性能数据路径和可扩展队列管理等特性,该板卡在处理大量网络数据包时表现出色,能够实现高效的传输调度和细粒度的硬件控制,有效提升了网络数据的处理效率。

开发体验

  • 便捷性良好:板卡厂商提供了适配好的 corundum 工程,可以直接投入使用。为后续开发应用节省调试时间。
  • 开发资源丰富:Corundum 工程提供了全面的、基于 Python 的开源仿真框架,涵盖了从驱动程序和 PCI Express 接口的仿真模型到以太网接口的整个系统,这为开发人员在开发和调试过程中提供了有力的支持,能够更高效地进行网卡功能的开发和优化。

稳定性与可靠性

  • 稳定运行:在长时间的网络数据传输过程中,该板卡能够保持稳定的工作状态,不会因为数据流量的波动或长时间的运行而出现性能下降或故障等问题,确保了网络通信的连续性和可靠性。
  • 散热设计合理:板卡上配备了合理的散热设计,能够有效散发 FPGA 芯片等关键部件在高速运行时产生的热量,避免因过热导致的性能不稳定或损坏,延长了板卡的使用寿命。

总体评价

管芯微的这款板卡在性能、开发体验以及稳定性与可靠性方面均表现出色,能够满足国产 10G 网卡方案的需求,为基于复旦微芯片的国产网卡开发和应用提供了良好的硬件平台,具有较高的实用价值。基于之前使用国产器件的经验,此次开发的顺利程度是超出预期的。预祝我们国产化的道路越走越顺利,开发者使用起来越来越便捷。

如需相关源码或做进一步技术探讨,可通过添加微信(微信号:15009552627)获取与该板卡适配好的 Corundum 工程及驱动源码。

END

原文:OpenFPGA

相关文章推荐

更多 FPGA 干货请关注FPGA 的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
10654
内容数
613
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息