【ALINX 教程】FPGA 10G 以太网实现——基于 Zynq US+ Z7-P 开发板+FH1223 子卡

电子说

1.4w人已加入

描述

教程目的
 

本教程基于 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 接口,可自由扩展开发。

MPSoC(ALINX基于Zynq UltraScale+ MPSoC开发板Z7-P)

FMC子卡:ALINX FH1223

产品链接:https://www.alinx.com/detail/315

4 路 SFP+ 光纤FMC 子卡 FH1223 通过标准 FMC 接口与 Z7-P 相连,提供完整的 10GbE 硬件支持。


 

MPSoC(ALINX 4路SFP+光纤FMC子卡 FH1223)


Z7-P + FH1223 的模块化组合,能够显著简化您的开发流程,缩短验证周期,亦能提升产品复用性,降低开发成本。
 

软件环境

vivado2020.1

petalinux2020.1
 

相关资料

https://pan.baidu.com/s/1NnG9ULlE4ojY3FtcrXeQiw提取码: dt15

Vivado 工程

请参考我们提供的 Vivado 工程

整体框图如图所示

MPSoC


 

主要 IP 配置如下

MPSoCMPSoCMPSoCMPSoC


注意时钟连线以及对应数据流传输的关系,读写数据主要通过 dma 实现。

Petalinux工程
 

使用 vivado 工程导出的包含 bit 流的 xsa 文件,搭建基础的 petalinux 工程。(该部分可参考 Z7-P 的《course_s3_ALINX_ZYNQ_MPSoC开发平台Linux基础教程》第一章 使用 Petalinux 定制 Linux 系统。)

MPSoC

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

MPSoC

/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
MPSoCMPSoC

 

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

MPSoC


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

MPSoC

保存配置并退出

编译petalinux工程,生成BOOT.BIN文件

 

petalinux-build
petalinux-package --boot --u-boot --fsbl --fpga --force
MPSoCMPSoC

 

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

MPSoC

速率测试

硬件环境:

主机(cpu: i5-14600k 主板: tuf b760m-plus wifi d4)

Intel E810-2SFP28 万兆网卡

MPSoC

10G光纤模块

MPSoC

软件环境:

主机:windows10系统

开发板:petalinux2020.1系统

测速软件:iperf3.7

硬件准备:

sd卡插入Z7_P,拨码调整为sd启动模式

FH1223接到Z7_P FMC接口上

Z7_P PS_UART接口连接到主机USB接口

10g光纤模块连接FH1223的SFP1接口和主机万兆网卡的光纤接口

MPSoCMPSoC

软件准备:

板卡上电启动后,在其串口终端中输入如下命令,配置SFP1对应的网口ip地址和mtu值,并关闭其余网口

 

ifconfig eth1 mtu 9000
ifconfig eth1 192.168.8.100
ifconfig eth1 up
ifconfig eth0 down

 

输入ifconfig命令查看当前网口配置

MPSoC

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

MPSoCMPSoC

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

MPSoCMPSoC

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

MPSoCMPSoC

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

MPSoC

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

MPSoC

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

MPSoC

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

MPSoC

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

MPSoC

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

MPSoC

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

MPSoCMPSoC

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

 

ping  192.168.8.100
MPSoC

 

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

 

ping  192.168.8.130
MPSoC

 

UDP RX

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

 

taskset -c 2 iperf3 -s -p 5301 -i 60 &
MPSoC

 

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

 

mpstat -P ALL 1 60 
MPSoC

 

在windows主机,iperf3测试程序路径下打开的命令行终端中,输入如下命令,开始iperf3 udp传输60s测试

 

iperf3 -c 192.168.8.100 -u -T s1 -p 5301 -t 60 -i 60 -b 10G -l 8960
MPSoC

 

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

MPSoC

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

MPSoC

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

 

killall  iperf3
MPSoC

 

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
MPSoC

 

在板卡串口终端中输入如下命令,开启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&
MPSoC

 

在串口终端中输入命令,使用mpstat监测处理器负载

 

mpstat -P ALL 1 60 

 

在udp传输测试过程中,板卡串口终端mpstat程序每秒打印的cpu核心负载情况如图所示,处理器总负载为75%左右

MPSoC

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

MPSoC

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

 

taskkill /im iperf3.exe /f
MPSoC

 

TCP RX

在开发板的串口终端中输入命令,启动iperf3服务端线程,并绑到cpu核2上

 

taskset -c 2 iperf3 -s -p 5301 -i 60 &
MPSoC

 

在串口终端中输入命令,监测处理器负载

 

mpstat -P ALL 1 60 

 

在主机的命令行终端输入命令,启动iperf3测试

 

start  /B  iperf3 -c 192.168.8.100   -T s1 -p 5301 -t 60 -i 60
MPSoC

 

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

MPSoC

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

MPSoC

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

 

killall  iperf3
MPSoC

 

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
MPSoC

 

在板卡串口终端中输入如下命令,开启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 &
MPSoC

 

在串口终端中输入命令,使用mpstat监测处理器负载

 

mpstat -P ALL 1 60 

 

在tcp传输测试过程中,板卡串口终端mpstat程序每秒打印的cpu核心负载情况如图所示,处理器总负载约为41%

MPSoC

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

MPSoC

测试总结

MPSoC

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分