【ALINX 教程】FPGA 10G 以太网实现——基于 Zynq US+ Z7-P 开发板+FH1223 子卡 电子说
教程目的
本教程基于 ALINX Zynq US+ MPSoC开发板 Z7-P+万兆以太网FMC子卡 FH1223,在 Xilinx 2020.1/PetaLinux 2020.1 开发环境下,完整演示如何在 Linux 系统中实现万兆以太网(10GbE)接口,并对其进行速率测试与处理器负载测试。
开发环境
硬件环境
开发板:ALINX Z7-P
产品链接:https://www.alinx.com/detail/593
Z7-P 是基于 AMD Zynq UltraScale+ MPSoC 系统级开发平台,支持 Xilinx Vitis-AI DPU 和 PCle3.0x8,集成 H.264/H.265 视频编解码器,可用于 4K 视频图像处理;配备一个 FMC HPC 接口,可自由扩展开发。
(ALINX基于Zynq UltraScale+ MPSoC开发板Z7-P)
FMC子卡:ALINX FH1223
产品链接:https://www.alinx.com/detail/315
4 路 SFP+ 光纤FMC 子卡 FH1223 通过标准 FMC 接口与 Z7-P 相连,提供完整的 10GbE 硬件支持。
(ALINX 4路SFP+光纤FMC子卡 FH1223)
Z7-P + FH1223 的模块化组合,能够显著简化您的开发流程,缩短验证周期,亦能提升产品复用性,降低开发成本。
软件环境
vivado2020.1
petalinux2020.1
相关资料
https://pan.baidu.com/s/1NnG9ULlE4ojY3FtcrXeQiw提取码: dt15
Vivado 工程
请参考我们提供的 Vivado 工程
整体框图如图所示

主要 IP 配置如下




注意时钟连线以及对应数据流传输的关系,读写数据主要通过 dma 实现。
Petalinux工程
使用 vivado 工程导出的包含 bit 流的 xsa 文件,搭建基础的 petalinux 工程。(该部分可参考 Z7-P 的《course_s3_ALINX_ZYNQ_MPSoC开发平台Linux基础教程》第一章 使用 Petalinux 定制 Linux 系统。)

修改petalinux工程project-spec/meta-user/recipes-bsp/device-tree/files路径下的设备树文件system-user.dtsi,指定SFP1和SFP2接口的mac地址,修改后内容如下

/include/ "system-conf.dtsi"/ {};
&sdhci1 { disable-wp; no-1-8-v;};
&xxv_ethernet_0 { local-mac-address = [000a 3566668d]; xlnx,rxmem = < 0x2400 >;};
&xxv_ethernet_0_1 { local-mac-address = [000a 3566669d]; xlnx,rxmem = < 0x2400 >;};
输入命令,进入 rootfs 配置界面
etalinux-config -c rootfs


使能Petalinux Package Groups --->packagegroup-petalinux-benchmarks --->[*] packagegroup-petalinux-benchmarks

使能Petalinux Package Groups --->packagegroup-petalinux-utils --->[*] packagegroup-petalinux-utils

保存配置并退出
编译petalinux工程,生成BOOT.BIN文件
petalinux-build petalinux-package --boot --u-boot --fsbl --fpga --force


将生成的系统镜像文件BOOT.BIN、boot.scr、image.ub拷贝到sd卡

速率测试
硬件环境:
主机(cpu: i5-14600k 主板: tuf b760m-plus wifi d4)
Intel E810-2SFP28 万兆网卡

10G光纤模块

软件环境:
主机:windows10系统
开发板:petalinux2020.1系统
测速软件:iperf3.7
硬件准备:
sd卡插入Z7_P,拨码调整为sd启动模式
FH1223接到Z7_P FMC接口上
Z7_P PS_UART接口连接到主机USB接口
10g光纤模块连接FH1223的SFP1接口和主机万兆网卡的光纤接口


软件准备:
板卡上电启动后,在其串口终端中输入如下命令,配置SFP1对应的网口ip地址和mtu值,并关闭其余网口
ifconfig eth1 mtu 9000 ifconfig eth1 192.168.8.100 ifconfig eth1 up ifconfig eth0 down
输入ifconfig命令查看当前网口配置

在windows主机中,点击左下角“开始”菜单,进入设置界面,选择“网络和Internet”


选择”Windows防火墙“,关闭所有的防火墙(此时可以选择将主机其余网口的网线拔出,仅保留万兆网卡连接的光纤模块)


选择“更改适配器选项”,然后双击选择万兆网卡接口对应的设备(此处为“以太网7”)


确认网卡速率协商到的是10Gbps,点击“属性”

点击”配置“,选择”高级“,开启巨帧数据包,值为9014,然后点击”确定“

点击”属性“,双击”Internet 协议版本 4(TCP/IPv4)“

设置网卡的ip地址,修改如下图所示,修改完成后点击”确定“

最后在适配器设备界面点击”确定“,使所有配置生效

将iperf3的windows可执行程序拷贝到windows主机中(注意,路径无中文)

在当前界面上方地址栏中输入cmd 并回车,就能快速打开一个当前路径的命令行终端


在该命令行终端中输入如下命令,进行主机ping开发板测试
ping 192.168.8.100

在开发板的串口终端输入如下命令,进行开发板ping主机测试,按ctrl+c停止
ping 192.168.8.130

UDP RX
为了便于查看处理器负载,在开发板的串口终端中输入如下命令,将iperf3服务端线程绑定到指定的cpu核上(Z7_P ps端有4个cpu核,此处绑定到cpu核2),并指定端口号5301
taskset -c 2 iperf3 -s -p 5301 -i 60 &

在串口终端中输入如下命令,每秒打印一次cpu所有核心的使用情况,共计打印60次
mpstat -P ALL 1 60

在windows主机,iperf3测试程序路径下打开的命令行终端中,输入如下命令,开始iperf3 udp传输60s测试
iperf3 -c 192.168.8.100 -u -T s1 -p 5301 -t 60 -i 60 -b 10G -l 8960

在udp传输测试过程中,板卡串口终端mpstat程序每秒打印的cpu核心负载情况,由此可知cpu核2基本保持满负载运行

当60s传输测试完成后,主机命令行终端中会打印出测试结果,由下图可知板卡万兆网口 UDP RX 速率为4.37Gbits/sec

在板卡的串口终端中输入如下命令,终止测试时设置的后台iperf3服务端线程
killall iperf3

UDP TX
在主机的命令行终端中,输入如下命令,设置4个后台执行的iperf3服务端线程
start /B iperf3 -s -p 5301 start /B iperf3 -s -p 5302 start /B iperf3 -s -p 5303 start /B iperf3 -s -p 5304

在板卡串口终端中输入如下命令,开启4个iperf3客户端线程,并将其绑定到cpu核0~3
taskset -c 0 iperf3 -c 192.168.8.130 -u -T s1 -p 5301 -t 60 -i 60 -b 10G -l 8960& taskset -c 1 iperf3 -c 192.168.8.130 -u -T s2 -p 5302 -t 60 -i 60 -b 10G -l 8960& taskset -c 2 iperf3 -c 192.168.8.130 -u -T s3 -p 5303 -t 60 -i 60 -b 10G -l 8960& taskset -c 3 iperf3 -c 192.168.8.130 -u -T s4 -p 5304 -t 60 -i 60 -b 10G -l 8960&

在串口终端中输入命令,使用mpstat监测处理器负载
mpstat -P ALL 1 60
在udp传输测试过程中,板卡串口终端mpstat程序每秒打印的cpu核心负载情况如图所示,处理器总负载为75%左右

当60s传输测试完成后,主机命令行终端中会打印出测试结果,此时主机作为服务端,也就是接收方,所以板卡的 UDP TX 速率合计为 6.94 Gbits/sec

在主机的命令行终端中输入命令,终止测试时设置的后台iperf3服务端线程
taskkill /im iperf3.exe /f

TCP RX
在开发板的串口终端中输入命令,启动iperf3服务端线程,并绑到cpu核2上
taskset -c 2 iperf3 -s -p 5301 -i 60 &

在串口终端中输入命令,监测处理器负载
mpstat -P ALL 1 60
在主机的命令行终端输入命令,启动iperf3测试
start /B iperf3 -c 192.168.8.100 -T s1 -p 5301 -t 60 -i 60

在tcp传输测试过程中,板卡串口终端mpstat程序每秒打印的cpu核心负载情况如图所示,虽然cpu核2的负载并未跑满,但此时cpu核0因为软中断处理已经处于满载状态

当60s传输测试完成后,主机命令行终端中会打印出测试结果,如图所示,板卡的 TCP RX 速率为2.63Gbits/sec

在开发板的串口终端中输入如下命令,终止后台的iperf3服务端线程
killall iperf3

TCP TX
在主机的命令行终端中,输入如下命令,设置4个后台执行的iperf3服务端线程
start /B iperf3 -s -p 5301 start /B iperf3 -s -p 5302 start /B iperf3 -s -p 5303 start /B iperf3 -s -p 5304

在板卡串口终端中输入如下命令,开启4个iperf3客户端线程,并将其绑定到cpu核0~3
taskset -c 0 iperf3 -c 192.168.8.130 -T s1 -p 5301 -t 60 -i 60 -b 2560M & taskset -c 1 iperf3 -c 192.168.8.130 -T s2 -p 5302 -t 60 -i 60 -b 2560M & taskset -c 2 iperf3 -c 192.168.8.130 -T s3 -p 5303 -t 60 -i 60 -b 2560M & taskset -c 3 iperf3 -c 192.168.8.130 -T s4 -p 5304 -t 60 -i 60 -b 2560M &

在串口终端中输入命令,使用mpstat监测处理器负载
mpstat -P ALL 1 60
在tcp传输测试过程中,板卡串口终端mpstat程序每秒打印的cpu核心负载情况如图所示,处理器总负载约为41%

当60s传输测试完成后,主机命令行终端中会打印出测试结果,如图所示,板卡的 TCP TX 速率合计约为3.83Gbits/sec

测试总结

审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !