[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_UDP篇连载-03UDP万兆以太网光通信测试

文档创建者:FPGA课程
浏览次数:485
最后更新:2024-09-11
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 4-FPGA UDP通信
本帖最后由 FPGA课程 于 2024-9-11 14:18 编辑

​ 软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!



1概述
为了实现UDP FPGA通信“米联客”提供了uiudp_stack.dcp协议栈网表文件给用户免费使用,具备和源码一样的功能,并且多年来已经有大量客户用于实际项目开发中稳定可靠,但是需要源码的客户需要付费购买。uiudp_stack这里对于用户就是一个“黑盒子”负责处理ARP以及UDP IP通信协议,上层协议就是用户实际收发的有效数据部分,而“10G Ethernet Subsystem”IP核负责处理以太网数据通过GTX高速串行接口传输。开发板中实现万兆网UDP传输的基本逻辑框架如下图所示。关于协议栈的使用参考“附录1:米联客uiudp_stack udp ip协议栈使用说明”一文。

f7f7636659de4cb5924fc6444e4a1916.jpg

2 SFP+接口
H3上有2个SFP+屏蔽笼,SFP+屏蔽笼可以插入千兆或万兆光模块。SFP+信号定义与SFP 一致,如下图所示.
b4a4abeaea7c46b1bf176d71960ed3b5.jpg
3 10G Ethernet Subsystem IP使用
3.1IP核设置
将 IP 核 AXI-Stream 的用户数据接口位宽设为 64bit,此时对应用户接口时钟频率为 156.25MHz。如下图所示。
c92915d89921432b9717aa9874d13c1a.jpg
将 AXI-Lite 配置接口时钟频率设置为 100MHz,当然用户也可以自由选择其他的频率。不使用参数统计和优先级流量控制功能。如下图所示。
f167e65f29374e759ad613e1e1c357b7.jpg
时钟频率的设置仅对 IP 核单独综合有效。如下图。
e20bf13c2007416797d851ba8de26aed.jpg

将 GTX 动态重配置端口DRP 的时钟设为 100MHz, Debug 功能不作使用,如下图。
9ddd06ddee2840d1b9fd569cdb47e053.jpg

该时钟频率设置也仅对单独综合有效。如下图。

36fcaf0fed3540b2965da04463cb0122.jpg

1588 同步功能一般针对某些需要进行网络时间同步的场合,如音视频传输。仅用作数据传输时无需使用。因此
这里不启用 1588 功能。如下图。

e3b2837a6b3d4c1785162a1937e89506.jpg

当设计中只包含 1 个此 IP 核时,应当将可共享的逻辑资源和硬件模块包含在 IP 核内部,这样会减少所生成的模块数量,简化设计。如下图所示。

af65bb5055744119a56fa4798c35a9c2.jpg

当设计中需要同时使用若干个此 IP 核,且所使用的GTX 均位于同一个GTX BANK 中。此时,只需其中 1 个IP 核内部的共享资源(MMCM、QUADPLL、GTX 参考时钟等)便可以满足所有 IP 核的需求,即选择将共享资源包含在 IP 核内部。其余 IP 核将这些共享资源从其内部剔除即可,即选择将共享资源包含在 example 中。如下图所示。
3d51689991a84fe3bafe0aed0c7745e3.jpg

3.2核结构
IP 核的结构如下图所示。用户的接收和发送接口均采用了 AXI-Stream 标准。
4cc7392842dc4442804de9a74610f024.jpg
10 Gigabit Ethernet Subsystem IP 核内部由 10 Gigabit Ethernet MAC 和 10 Gigabit Ethernet PCS/PMA 两个 IP 核所组成,两个 IP 之间通过XGMII 和 MDIO 接口连接。如下图所示。

28f87b87e6da4574998f3dcddf9d721c.jpg
3.3时钟网络
IP 核内部时钟网络结构如下图所示。

87830b5c304b4df0b0eac6653c9760dd.jpg
3.4多IP资源共享
例如,在设计中同时使用 3 个 IP 核时,3 个 IP 核之间的共享资源信号连接如下图所示。
ae7dc601f1f74622a9d52601f4adf953.jpg

3.5用户接口
3.5.1AXI-Stream接口
AXI-Stream 发送接口
AXI-Stream 发送接口信号如下图所示。用户通过该接口,向 IP 核传输所需要发送的以太网数据包。其中,
tx_ifg_delay 用于设置发送间隔,一般都默认采用最小间隔,将 tx_ifg_delay 置为 0 即可。
033cb138956b4231964f5aaa316bdb61.jpg

AXI-Stream 发送接口时序如下图所示。
de6d7e6f29dd40dc97e033a9f1d3d8e2.jpg
背靠背连续发送
970d3e0ff0a344ff9d8c866fe132f920.jpg

AXI-Stream 接收接口
AXI-Stream 接收接口信号如下图所示。用户通过该接口接收从 IP 核输出的以太网数据包。需要注意的是,接收接口没有使用 AXI-Stream 标准中的 tready 信号。这代表接收端需要具备持续接收数据的能力,防止出现数据来不及接收而产生溢出。
4d08d1ca551a44e998d8677248af599a.jpg
AXI-Stream 接收接口时序如下图所示。
2cd1ab4692774dcfb65594eadc639e6a.jpg
3.5.2pcspma_status
pcspma_status 端口用户反应 IP 核内部 PCS PMA 部分的运行状态。由于 GTX 只支持 10GBASE-R,因此pcspma_status 只有 bit0 有效。如下图所示。
a000547d3503498d9487ea41d766da75.jpg
3.5.3sim_speed_up
sim_speed_up 引脚只有在仿真时才需要用到这个信号,用于加快仿真速度。编译时将其置为 0 或 1 即可。
e39b1f849eb2403cbe02fbfe4e66e4d8.jpg
3.5.4光模块相关信号
IP 与光模块之间的连接信号及接法如下图所示。
120363b7f1c3434e99007b4069fe3142.jpg
3.5.5流量控制信号
非高带宽、大负荷传输情况下,一般不需要使用流量控制功能。因此,不需要发送暂停帧,将以下两个信号均置为 0 即可。
83239a1958c64499850948e684c5b0ca.jpg
3.5.6接收发送数据统计信号
下图中的信号,用于统计并输出当前发送完毕或者接收完毕的帧对应的各种类型的信息。除了调试用之外,一般无需使用。

6085e881018c4be99c097d028a346adb.jpg

信号时序如下图所示。
be1df748eb4f4f4c84f3e38aa29067ff.jpg

d2efce74a29e49428ced54315c56df51.jpg

3.6AXI-Lite接口
AXI-Lite 接口主要用于配置和读取 IP 核内部的寄存器。AXI-Lite 接口不仅可以配置 IP 核 MAC 部分的寄存器, 还可以直接通过 MAC 部分的 MDIO 接口配置PCS/PMA 部分的寄存器,如下图所示。
bc7b286d07ea4efaa422540257e0032b.jpg
通过AXI-Lite 接口实现 MDIO 接口读写PCS/PMA 部分的寄存器的例子如下所示。
bae78a2cf74345cd8617572b8b3304b7.jpg
3.7用注意点
3.7.1数据发送长度
IP 核在默认情况下,发送帧长度小于 64 字节时,IP 核会在帧末尾自动补 0,补足至 64 字节,并且再帧末尾自动插入 4 字节 CRC。接收时,IP 核自动去除末尾 4 字节CRC,但对于长度小于 64 字节的帧末尾补的 0 不会被去掉, 仍会通过接收接口输出。因此,可以发送的数据长度在 14~1514(含 14 字节 MAC 帧头)字节之间。
IP 使用文档中对此有如下描述。
e8942f6f2f8c4af4bd6deff53e117bca.jpg

070215240e424449bdba26f1f89e8c9c.jpg


d51cf44a153749f6aeb330e775f7714a.jpg
3.7.2FIFOIPAXI-Stream接口连接
在设计中,可以使用 AXI-Stream DATA FIFO 与 IP 核的 AXI-Stream 接口,作为数据的缓冲。使用 FIFO 时有以下几个注意点。对此,IP 核使用文档中有如下描述:
b87905d7f72d4697aae7400375d87117.jpg
3.7.3AXI-Lite接口配置策略
仿真 ip 核自带的 example,可以观察到 example 中通过AXI-Lite 配置 IP 核MAC 部分的过程,如图蓝色方框内所示。以及通过 AXI-Lite 经过 MAC 部分的内部MDIO 接口配置访问PCS PMA 部分的寄存器,如图红色方框所示。具体寄存器定义参考PG157。
e16325f3998e4cb28a4ec44055bc8e40.jpg
Example 通过AXI-Lite 配置 IP 核的流程如下图所示。在例程中,直接采用这部分的代码。

1b202832c81643a4a216456d12c64d1b.jpg

4例程设计
例程的原理如下图所示。实现了一个 UDP 收发环路,即电脑通过网络调试助手向开发板发送 udp 包,开发板接收到 udp 包经过 fifo 缓存后重新发回电脑,由此验证数据收发的正确性。
20818069203442be8f9c668941524d52.jpg
UDP IP 协议栈与万兆 IP 核之间通过 2 个 AXI-Stream DATA FIFO 进行连接。两个 FIFO 的设置如下图所示,均使能Packet mode 功能。
Packet mode 是指 FIFO 持续缓存 AXI-Stream 接口输入的数据直至输入端 tlast 信号拉高,即存满一个完整的数据包时,才开始在 AXI-Stream 输出端口向外输出数据。需要注意的是,启用 Packet mode 时,FIFO 必须工作于同步模式。
对于发送路径,这样做是为了防止 FIFO 被 IP 核读空。对于接收路径,是由于米联的UDP IP 协议栈要求 1 个数据包的 tvalid 信号在数据包持续期间必须恒为 1。
0adc96e6afbf4d83b3316ca0b63200dc.jpg
由于在 Verilog 中定义变量,对 tdata 和 tkeep 进行大小端的字节序转换。
5程序测试
cda0298e4bcd4ec2ab440255ea533142.jpg
5.1硬件接线
以 MK7325FA 开发板为测试样板,其他开发板使用也一样,其他开发板的接线见“ 附录 1 ”。
30bc6b2e21f44efdbb007d437ec501a8.jpg
5.2环路测试
连接任意一个SFP接口连接,在例程中,电脑的IP地址为192.168.137.100,UDP端口号为6001,开发板中的所有网口的IP地址均为192.168.137.2,UDP端口号均为6002。
测试前,需要将所使用电脑网卡的IP地址设置为192.168.137.100,子网掩码设为255.255.255.0,如下图所示
打开网络调试助手,分别设置好电脑和开发板的IP地址位和UDP端口号,通过网络调试助手以udp包的形式向开发板发送文字数据,并以1ms的间隔不断循环发送,如下图所示。
b5c029c8aeff4cee968a34ed06f98946.jpg
497e614b9c234b1eacdf1b8d6a910f33.jpg
测试结果上图所示。从图中可以看出,网络调试助手所发出的udp包和开发板返回的udp包一致,接收和发送的数据包数量一致。
通过wireshark软件可捕获电脑和开发板之间的通信数据包,如下图所示。
af319797ed8048e0abeb8f31bb58614f.jpg
在网络调试助手向开发板发UDP包的同时,通过cmd命令窗不断向开发板发起ping命令,观察ping命令的返回,如下图所示。从图中可以看到开发板能够快速响应电脑发起的ping命令,UDP数据包收发与ping应答互不干扰。
8d802b9e46c94028b0d26220338b9d2b.jpg
5.3发送测速
第二个demo是发送测速,在电脑上观察开发板以太网网口的发送速率,这个测速只代表可能的最高的速度,不代表电脑真实的不丢包速度,UDP的点到点不丢包速度和电脑的网卡、CPU速度、内存速度、操作系统都有关系。
5.3.1VIO虚拟IO设置
本例中对千兆发送速率进行了测试。程序中添加了VIO IP核,用户可以通过VIO修改发送的UDP包长度以及发送间隔。
VIO共设置了3个输出端口,如下图所示。
1d5fab8ade2347d9a400ef996ce4edfe.jpg

83eaf310d89d491bb307f2031a042b8c.jpg
VIO的3个输出参数为:

  • trans_en,UDP包发送使能信号。1代表使能发送,0代表关闭发送。
  • PACKET_LENGTH,发送UDP数据包的长度(不含UDP首部),单位为字节,可设置范围1~1472。
  • PACKET_INTERVAL,UDP包发送间隔,单位为时钟周期数,可设置范围0~65535。
需要注意的是,在修改PACKET_LENGTH和PACKET_INTERVAL两个参数之前,必须先将trans_en设为0,停止UDP包发送,否则会产生错误。
不断以最小间隔循环发送1472字节的UDP包,用来测试协议栈的最高发送带宽。在VIO中先将trans_en设为0,再将PACKET_LENGTH设为1472,PACKET_INTERVAL设为0,然后将trans_en设为1,如下图所示。
6fcc47c70bd643d3801fec9597ad966d.jpg
5.3.2测试结果
003246f99f0349d6a83e7b2a18fe2d23.jpg


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则