系列文章目录
FPGA千兆以太网通信--基于CycloneIV
FPGA千兆以太网通信--基于ZYNQ7035
前言
FPGA与其它设备通信的方式比较多,例如:UART、IIC、SPI、USB、以太网、PCIE等通信总线都可以用于FPGA和其它设备之间的数据传输。其中,UART、IIC、SPI的通信速度较低,在一些大数据量传输的高速通信场景下,UART、IIC、SPI是无法适用的,这时必须借助其它传输带宽更大的通信总线来实现大量数据的高速传输。以太网(Ethernet)是一个使用相当广泛的通信方式,在因特网(Internet)如此发达的当今社会中,以太网发挥着绝对重要的作用。如果不知道以太网是什么的话,可以看一下“C知道”给出的答案。
图1 以太网和因特网的关系
简单来说,以太网是构成局域网的物理和协议基础,局域网中的网络设备想要通信,必须符合IEEE802.3规范制定的以太网技术标准,它规定了包括物理层的连线、电信号和介质访问层协议的内容。而因特网则是由许许多多的局域网构成的庞大的互联网。也就是说,以太网是所有因特网的物理基础。 从最早期只能传输简单文本信息,到现在可以实时传输超高清视频数据流, 以太网一直是我们通过因特网进行工作、学习、 生活、娱乐的强力支撑。
表1 以太网技术分类
分类 | 速度 | 特点 |
标准以太网 | 10Mbit/s | 最初的以太网标准,采用双绞线作为传输介质,最高传输速度为10Mbps |
快速以太网 | 100Mbit/s | 速度提升到100Mbps,使用双绞线,支持全双工通信 |
千兆以太网 | 1000Mbit/s | 速度提升至1000Mbps,使用双绞线,支持全双工或半双工通信 |
万兆以太网 | 10Gbit/s | 速度提高到10Gbps,同样支持双绞线,但需要更高质量的电缆 |
光纤以太网 | 1Gbit/s~10Gbit/s | 采用光纤作为传输介质,速度从1Gbps到10Gbps不等,提供了更长的传输距离和更低的信号干扰 |
图2 以太网架构
本文主要就CycloneIV FPGA平台下的千兆以太网通信进行简单介绍,希望能够为有需要的伙伴提供一定的参考价值。
一、工程设计
硬件详情:EP4CE10F17C8,RTL8211(GMII接口)。
软件详情:Quartus Prime 18.1,Wireshark,小兵以太网测试仪。
1、系统架构
工程实现的功能如下:
1、本机(FPGA)实现了以太网中TCP/IP协议体系中最基础的UDP(传输层)、IP(网络层)、ARP(网络层)、MAC(链路层)的功能,包括:发送方向(FPGA至PC)的组包、接收方向(PC至FPGA)的拆包;
2、UDP功能:本机(FPGA)通过UDP协议实现与远程机(PC)之间的用户数据收发;
3、ARP功能:本机(FPGA)通过ARP协议实现与远程机(PC)之间,互相向对方请求/应答MAC地址;
4、UDP报文的测试数据(payload)由FPGA内部通过计数器间歇性产生随机长度的数据,因此,实际传输速率可能远低于1000M bps;
5、ARP报文:FPGA-->PC方向的ARP请求报文是由FPGA内部间歇性产生,FPGA-->PC方向的ARP应答报文是在FPGA收到PC的ARP请求报文的时候才会产生。
2、三速以太网IP核介绍
Altera官方提供的三速以太网(Triple-Speed Ethernet)IP核,集成了一个10/100/1000 Mbps速率的以太网介质访问控制器(MAC)和一个可选的1000BASE-X/SGMII物理编码子层(PCS),以及内置的物理介质附件(PMA)、片上收发器I/O或LVDS I/O。当在仅MAC模式下使用时,IP使用MII、GMII或RGMII与外部PHY芯片连接。
在这里,因为我们要实现的是1000bps的传输速率,而且板卡上自带的有PHY芯片(RTL8211),因此只需要使用IP核的MAC功能即可,当然,自己用编写一个MAC功能的模块也是可以的,只是为了快速实现工程开发直接使用了官方的IP核。此外,由于所使用的PHY芯片默认被配置成了1000bps的速率,因此可以不需要使用IP核的MDIO对PHY芯片配置。
以下简单介绍一下Altera官方三速以太网IP核配置以及相关细节信息。
2.1 Triple-Speed Ethernet MAC GUI配置
首先,在GUI界面中需要对IP核进行基本的配置。 需要特别注意的是,如果在"FIFO Options"选项卡下的"Width",选择了32bits,则在"MAC Options"选项卡下,勾选"Align packet headers to 32-bit boundary",意思是MAC IP会在以太网帧头添加2个字节(16'h0000)保证Payload字段的数据是32bit对齐的,因为MAC帧的帧头(MAC头、IP头、UDP头)共42字节,通过在MAC帧头添加2字节0使得MAC帧头字段一共44字节(11个Word,即11 * 4字节),这样Payload字段刚好是第12个Word开始,方便MAC接收端解析。同样地,在用户逻辑组帧部分,也需要进行这样的操作。
2.2 Triple-Speed Ethernet MAC 寄存器配置
其次,需要通过轻量级Avalon Memory-Mapped接口对IP内部寄存器进行基本配置,例如:用于MAC帧过滤(关闭混杂模式下)的本地MAC地址,接收和发送启动/关闭,最大包文长度,帧间隙等参数。
对于帧长度(frm_length)寄存器的配置,默认是1518,即默认MAC帧Payload长度为1518字节;当然,如果发送的报文长度太大,这个IP核也是可以支持巨型帧(Jumbo Frame)的,此时可以使用其巨型帧功能,将其配置为9600。但是,需要先修改Quartus安装路径下的几个文件中关于以太网帧长度的定义,这样生成的IP核才能够支持巨帧通信。