芯路恒电子技术论坛

 找回密码
 立即注册

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

热搜: 合集

SU200P 双口千兆以太网实验说明

配套工程:SU200P_Ethernet 工程环境:Vivado 2026.1 目标器件:xcsu200p-sbva1024-2-e

1. 实验目的

本实验使用 SU200P 开发板上的两路千兆以太网接口完成以下内容:

  1. 通过 GMII 接口驱动两片板载 DP83867 千兆以太网 PHY;
  2. 使用 MDIO 对两路 PHY 进行复位、初始化和链路状态检测;
  3. 分别为 J2 和 J58 网口实现独立的 IPv4/UDP 数据接收与原端口回显;
  4. 使用普通按键 SW6 在 UDP 回显模式和连续测速模式之间切换;
  5. 完成 PDI 下载、网卡配置、UDP 回显和千兆链路吞吐验证。

2. 设计概况

本工程采用纯 RTL 实现,以 su200p_dual_gmii.v 为综合顶层。两路网口具有各自的 PHY 初始化模块、接收时钟、UDP 处理模块和收发数据通路,J2 接收到的合法 UDP 报文仍从 J2 返回,J58 接收到的合法报文仍从 J58 返回,两路数据不会相互转发。

工程提供回显和测速两种工作模式。复位完成后默认进入回显模式,主机发送到指定 IP 地址和 UDP 端口的数据会原样返回。按下 SW6 后进入测速模式,FPGA 使用最近一次有效 UDP 报文中学习到的主机 MAC、IP 和 UDP 端口,连续发送固定长度的测速报文。再次按下 SW6,设计返回回显模式。

<samp>工程文件说明</samp>

文件作用
su200p_dual_gmii.xprVivado 工程入口
su200p_dual_gmii.src/sources_1/new/su200p_dual_gmii.v综合顶层,连接两路 PHY、UDP 模块、按键和状态 LED
su200p_dual_gmii.src/sources_1/new/dp83867_gmii_init.vDP83867 复位、MDIO 初始化和千兆链路检测
su200p_dual_gmii.src/sources_1/new/mode_button.vSW6 同步、消抖和模式切换
su200p_dual_gmii.src/sources_1/new/udp_echo_port.v单路 UDP 接收校验、报文缓存、回显和测速控制
su200p_dual_gmii.src/sources_1/eth_udp_gmii/eth_udp_tx_gmii.v以太网、IPv4 和 UDP 发送帧生成
crc32_d8.vip_checksum.v以太网 CRC32 和 IPv4 首部校验和计算
su200p_dual_gmii.src/constrs_1/new/su200p_gmii.xdc时钟、按键、LED 和两路 GMII 管脚约束
software/host/UdpSpeedTest.exeWindows 端 UDP 注册、接收和吞吐统计工具
software/host/Start_Port0.cmdJ2 网口测试入口
software/host/Start_Port1.cmdJ58 网口测试入口
bit/su200p_dual_gmii.pdi板级下载文件

mermaid-diagram <kbd>双口千兆以太网设计结构</kbd>

3. 设计原理

3.1 板级接口与网络参数

开发板上的 J2 和 J58 分别连接一片 DP83867 千兆以太网 PHY。FPGA 与 PHY 之间使用 8 位 SDR GMII 接口,每个时钟传输 1 Byte 数据;在 125 MHz GMII 时钟下,物理层数据速率为 1 Gbit/s。两组 GMII 位于 FPGA 的 1.8 V I/O Bank 41 和 Bank 42,因此约束中均采用 LVCMOS18,设计没有使用 RGMII 所需的双沿采样转换逻辑。

两路网口使用不同的本地 MAC 和 IP 地址,但监听相同的 UDP 端口:

<samp>双网口网络参数</samp>

逻辑端口板载接口FPGA MAC 地址FPGA IP 地址UDP 端口建议的电脑地址
GEM0J202:00:00:00:00:02192.168.0.25000192.168.0.3/24
GEM1J5802:00:00:00:00:03192.168.1.25000192.168.1.3/24

该 RTL 只处理满足设计条件的 IPv4/UDP 报文,没有实现 ARP 和 ICMP。因此,主机访问 FPGA 前需要配置静态邻居项;ping 没有响应也不能直接说明以太网设计异常,功能判断应以 UDP 回显或测速结果为准。

<!-- 在此插入开发板双网口及相关 PHY 电路截图 -->

<kbd>J2、J58 与 DP83867 以太网接口电路</kbd>

3.2 PHY 初始化与链路建立

dp83867_gmii_init.v 在系统复位释放后先保持 PHY 复位约 10 ms,再等待约 210 ms,使 PHY 的时钟和内部模拟电路稳定。随后,状态机通过约 995 kHz 的 MDC 时钟访问 PHY 地址 1,并依次完成以下配置:

  1. 写寄存器 4,关闭 10 Mbit/s 和 100 Mbit/s 能力通告;
  2. 写寄存器 9,只通告 1000BASE-T 全双工能力;
  3. 写基本控制寄存器 0,重新启动自动协商;
  4. 写 LED 控制寄存器 24,将 PHY 指示灯设置为发送和接收活动指示;
  5. 循环读取状态寄存器 17,判断链路是否协商为 1000 Mbit/s 全双工。

自动协商仍用于确定千兆链路的主从关系,但模块只在检测到千兆全双工状态时置位 link_1000。因此,连接的电脑网卡、交换机或 USB 网卡必须支持并启用千兆以太网;如果对端只能工作在百兆,FPGA 端的数据通路将保持复位。

两路 PHY 使用独立的 MDC/MDIO 接口,各自完成初始化和状态轮询。任一路掉线只会复位本端口的数据通路,不会中断另一路已经建立的连接。

3.3 时钟与复位

板载 266.67 MHz 差分时钟由 IBUFDSBUFG 转换为系统时钟,用于按键消抖、PHY 复位和 MDIO 管理。SW13 连接管脚 F23,按下时产生低有效全局复位。

以太网数据处理不直接使用系统时钟。每片 PHY 都向 FPGA 提供独立的 125 MHz RX_CLK,对应的 udp_echo_port 在本端口接收时钟域内完成接收、缓存和发送,从而避免在两个网口之间传递数据。发送数据在 RX_CLK 上升沿更新,顶层将该时钟反相后作为 GTX_CLK 返回 PHY,使 PHY 在半个周期之后采样发送数据。

全局复位和链路状态先在系统时钟域组合成本端口复位条件,再分别同步释放到两路接收时钟域。这样,即使某一路网线拔出或接收时钟停止,另一路仍可继续工作。

<samp>时钟、复位与模式输入</samp>

信号FPGA 管脚板上器件说明
sys_clk_p/nV28/U28板载差分时钟约 266.67 MHz 系统时钟
reset_nF23SW13低电平有效全局复位
key_modeE24SW6高电平有效,按一次切换一次模式
gem0_rx_clkAD17J2 对应 PHYGEM0 接收时钟,千兆链路时为 125 MHz
gem1_rx_clkAF15J58 对应 PHYGEM1 接收时钟,千兆链路时为 125 MHz

3.4 UDP 接收与原端口回显

每个 udp_echo_port 都从 GMII 字节流中识别以太网帧,并检查帧结构、以太网 CRC、目的 MAC、IPv4 类型、IP 首部格式、分片标志、目的 IP、UDP 协议、目的端口、长度关系以及校验和。设计只接收无 IP 选项、无分片且 UDP 载荷不超过 1472 Byte 的 IPv4 报文。

接收模块设置了四个完整报文缓存槽。只有通过全部检查的报文才会被提交到发送队列;队列已满或报文校验失败时,当前帧会被整包丢弃,不会返回残缺数据。

回显模式是复位后的默认模式。模块保存有效请求的源 MAC、源 IP 和源 UDP 端口,发送时将它们作为目的地址,并保持 UDP 载荷内容不变。J2 和 J58 各自保存并处理本端口的请求,因此可以同时服务两个不同网段的主机。

电脑发送:主机 MAC/IP/端口  →  FPGA IP,UDP 5000
FPGA 回显:FPGA MAC/IP,UDP 5000  →  原主机 MAC/IP/端口

发送模块负责生成前导码、以太网首部、IPv4 首部、UDP 首部、载荷、必要的填充、CRC 和帧间隔。顶层将帧间隔设置为 12 个 GMII 时钟周期,符合千兆以太网最小帧间隔要求。

3.5 测速模式

mode_button.v 对 SW6 进行双触发同步和约 20 ms 消抖。一次有效按下只切换一次模式,持续按住不会反复切换。speed_mode=0 表示回显模式,speed_mode=1 表示测速模式。

进入测速模式前,主机必须先向 FPGA 发送至少一个有效 UDP 报文。接收模块利用该报文学习主机的 MAC、IP 和 UDP 源端口;如果尚未学习到主机信息,即使按下 SW6,FPGA 也不会盲目发送测速数据。工程配套的 UdpSpeedTest.exe 会每秒发送一次 speed-host 注册报文,因此可以自动完成这一过程。

进入测速模式后,每一路已经学习到主机信息的网口都会连续发送 1472 Byte UDP 载荷。载荷前 16 Byte 用于识别和统计,后续内容采用固定规律,便于主机检查数据完整性。

<samp>测速载荷格式</samp>

字节偏移长度内容
0~34 ByteASCII 字符 SU2P
4~74 Byte会话编号,大端格式
8~114 Byte报文序号,大端格式
12~132 Byte载荷长度 0x05C0,即 1472 Byte
141 Byte端口编号,J2 为 0,J58 为 1
151 Byte格式版本,当前为 1
16~14711456 Byte每个字节等于其偏移量的低 8 位

模式只在发送模块空闲时切换。进入测速前先发送完已经进入队列的回显报文,退出测速时也会等待当前帧完整结束,因此不会因为按键切换产生半帧数据。

在理想情况下,单口 1472 Byte UDP 有效载荷速率约为:

<p align="center"><strong>R ≈ 1472 ÷ (1526 + 12) × 1000 Mbit/s ≈ 957 Mbit/s</strong></p>

其中 1526 Byte 包括前导码、以太网帧、IPv4/UDP 首部、载荷和 CRC,12 Byte 为帧间隔。电脑端显示值还会受到网卡、驱动、操作系统调度和接收缓冲区影响,因此板级实测值通常低于理论值。

3.6 状态指示

顶层使用四个板载 LED 显示链路、模式和发包状态。原理图中 Q26~Q29 为 LED 驱动器件,FPGA 输出高电平时对应 LED 点亮。

<samp>状态LED</samp>

顶层信号FPGA 管脚板上器件含义
led[0]B17Q26(LED1)J2 已建立千兆全双工链路
led[1]C18Q27(LED2)J58 已建立千兆全双工链路
led[2]B18Q28(LED3)点亮为测速模式,熄灭为回显模式
led[3]E17Q29(LED4)两路发包计数活动指示

led[3] 由两路已发送报文计数器的最低位组合产生。低频回显时可以看到状态翻转;连续测速时翻转速度远高于人眼分辨能力,可能表现为稳定亮度,不应把它当作精确的速率指示。

4. 板级验证

4.1 硬件准备与连接

准备 SU200P 开发板、配套电源、JTAG 下载器、支持千兆以太网的电脑网卡和网线。建议先单独验证一个网口;如果要同时验证 J2 和 J58,电脑需要两块独立网卡,并分别配置到两个网段。

  1. 在断电状态下连接 JTAG 下载器;
  2. 将网线连接到 J2 或 J58;
  3. 网线另一端连接电脑千兆网卡;
  4. 确认连接设备支持 1000BASE-T;
  5. 连接开发板电源并上电。

<kbd>双口千兆以太网实验连接</kbd>

4.2 配置电脑网卡

验证 J2 时,将对应电脑网卡设置为静态地址 192.168.0.3、子网掩码 255.255.255.0;验证 J58 时设置为 192.168.1.3、子网掩码 255.255.255.0。本实验为本地直连,不需要填写默认网关和 DNS。

由于 FPGA 没有实现 ARP,还需要以管理员身份打开命令提示符,为目标 IP 添加静态邻居项。先用以下命令查看网卡名称:

netsh interface ipv4 show interfaces

假设测试网卡名称为“以太网”,J2 和 J58 分别使用以下命令。实际操作时只需添加当前测试端口对应的一项,并按电脑上的名称替换“以太网”。

netsh interface ipv4 add neighbors "以太网" 192.168.0.2 02-00-00-00-00-02
netsh interface ipv4 add neighbors "以太网" 192.168.1.2 02-00-00-00-00-03

可以用 arp -a 检查目标 IP 是否已经对应到正确的 MAC 地址。更换网卡、切换网段或删除系统网络配置后,需要重新添加相应的静态邻居项。

4.3 下载 PDI

  1. 启动 Vivado 2026.1,打开 su200p_dual_gmii.xpr
  2. 进入 Open Hardware Manager
  3. 选择 Open Target → Auto Connect
  4. 确认识别到 xcsu200p
  5. 右键器件,选择 Program Device
  6. 选择 bit/su200p_dual_gmii.pdi
  7. 单击 Program 完成下载。

下载后等待 PHY 复位和自动协商完成。J2 建立千兆链路后 Q26 点亮,J58 建立千兆链路后 Q27 点亮。JTAG 下载为易失性配置,开发板断电后需要重新下载。

4.4 UDP 回显验证

回显功能使用以太网调试软件进行验证。打开软件并选择 UDP 协议,根据被测网口设置本地地址、远端地址和端口:

<samp>UDP回显软件配置</samp>

测试接口本地主机地址本地端口远端 FPGA 地址远端端口
J2 / GEM0192.168.0.36102192.168.0.25000
J58 / GEM1192.168.1.36102192.168.1.25000

保持 SW6 对应的模式为回显模式,选择 ASCII 发送和接收显示,在发送区输入一段容易辨认的文本并单击发送。FPGA 接收到合法 UDP 报文后,会交换源、目的地址和端口,并将载荷原样返回。

J2网口的UDP回显实测结果

<kbd>J2 网口的 UDP 回显实测结果</kbd>

图中网络调试助手使用本地地址 192.168.0.3 和本地端口 6102,远端设置为 FPGA 的 192.168.0.2:5000。软件先后两次发送相同的 49 Byte ASCII 文本,随后均从 192.168.0.2:5000 收到内容完全一致的 49 Byte 数据;窗口底部的 TX 和 RX 计数均为 98 Byte。

发送长度、接收长度和文本内容均一致,说明 J2 的千兆链路、静态邻居配置、IPv4/UDP 接收校验以及原端口回显均已正常工作。验证期间 Q26 应点亮,Q28 保持熄灭。测试 J58 时只需换用表中的第二组 IP 地址,正常情况下 Q27 点亮,发送数据同样会从 J58 返回。

4.5 连续测速验证

连续测速使用工程提供的 software/host/UdpSpeedTest.exe。运行程序后选择被测网口:输入 1 测试 J2,输入 2 测试 J58。程序会绑定对应的电脑地址和 UDP 6102 端口,并每秒向 FPGA 的 UDP 5000 端口发送注册报文,使 FPGA 学习测速数据的目标 MAC、IP 和 UDP 端口。

保持程序运行,等待注册报文发出后,按下并松开 SW6。按键消抖完成后,Q28 点亮,FPGA 进入连续测速模式。程序每秒打印一次接收结果,主要字段含义如下:

<samp>测速程序输出</samp>

字段含义正常判断
Mbps1472 Byte UDP 有效载荷速率应持续显示较高且相对稳定的数值
pps每秒接收的测速报文数应连续增加
packets累计有效测速报文数持续增加
gap_slots序号向前跳过的位置数理想情况下保持较小或为 0
late_or_repeat迟到或重复的报文数理想情况下为 0
bad载荷格式或内容检查失败数使用 --check 时应为 0
other非测速格式 UDP 报文数回显注册报文会计入此项

J2网口的UDP连续测速实测结果

<kbd>J2 网口的 UDP 连续测速实测结果</kbd>

图中选择 1 对 J2 / GEM0 进行测试,本地端点为 192.168.0.3:6102,FPGA 端点为 192.168.0.2:5000。进入测速模式后,有效载荷速率稳定在 955.08~955.30 Mbit/s,接收速率约为 81104~81128 packet/s;运行到 7.8 s 时,累计收到 630623 个测速报文。

整个截图范围内 gap_slots=0late_or_repeat=0bad=0,说明接收端没有发现序号跳跃、迟到或重复报文,也没有发现载荷格式错误。实测速率接近约 957 Mbit/s 的理论 UDP 有效载荷上限,表明 J2 的连续发送和电脑端接收均处于正常状态。图中的 other=0 是因为截图时设计已经处于测速模式,注册报文用于更新目标信息,不会作为回显数据返回。

Q29 在连续发包期间快速翻转,肉眼可能看到稳定亮度。再次按下并松开 SW6 后,设计会发送完当前帧再退出测速,Q28 熄灭;测速报文计数停止,而每秒注册报文重新被回显,other 继续增加。

双口同时验证时,应分别使用两块网卡运行 Start_Port0.cmdStart_Port1.cmd。两个窗口应各自统计本端口的测速数据,拔掉其中一根网线只影响对应端口,另一端口仍能继续接收。

4.6 常见问题

<samp>常见问题与处理方法</samp>

问题可能原因处理方法
Q26 或 Q27 不亮对端只支持百兆、网线异常或 PHY 尚未协商完成确认网卡为千兆模式,更换六类或合格的超五类网线,重新连接并等待协商
程序提示本机没有可绑定的 IP网卡没有配置为 192.168.0.3192.168.1.3检查当前测试网卡的静态 IPv4 地址和子网掩码
链路已建立但收不到回显未配置静态邻居项、目标 MAC 错误或程序被防火墙拦截重新添加对应 IP/MAC 映射,使用 arp -a 核对,并允许测试程序通过防火墙
ping 无响应RTL 没有实现 ARP 和 ICMP使用静态邻居项和 UDP 测试工具判断功能
按 SW6 后没有测速数据还未收到有效注册报文,或主机工具没有保持运行先启动对应端口的测试程序,等待回显后再按 SW6
Mbps 波动较大或 gap_slots 增加主机网卡、驱动、系统调度或接收缓冲能力不足关闭其他大流量程序,使用独立千兆网卡,提高接收缓冲并避免低性能 USB 网卡
双口测试地址冲突两块网卡配置到同一网段或启动了错误脚本J2 使用 192.168.0.x,J58 使用 192.168.1.x,分别运行两个启动脚本

5. 总结与扩展

本实验使用纯 RTL 在 SU200P 上实现了两路相互独立的千兆以太网数据通路。设计通过 MDIO 初始化两片 DP83867,只在千兆全双工链路建立后释放端口逻辑;每路 udp_echo_port 对接收报文进行完整性和地址检查,并在四槽缓存的基础上完成原端口 UDP 回显。SW6 可以在回显和连续测速之间切换,配套主机程序负责注册目标、接收 1472 Byte 测速载荷并统计吞吐与序号连续性。

板级验证时,应特别注意两路网口使用不同网段、设计不响应 ARP 和 ICMP,以及对端必须支持千兆以太网。完成静态地址和静态邻居配置后,可以先用以太网调试软件检查 UDP 载荷能否原样返回,再用 UdpSpeedTest.exe 检查连续测速。J2 实测回显数据内容与长度一致,测速有效载荷速率约为 955 Mbit/s,且未发现序号或载荷错误。

后续可以在现有设计上增加 ARP、ICMP 和 DHCP,使主机不再依赖静态邻居表;也可以加入跨时钟统计、ILA 在线观测、可配置 IP/端口寄存器,或扩展为多端口 UDP 数据采集与转发系统。

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2026-9-22 00:38 , Processed in 0.038177 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部