1、什么是PHY?
网线传输数据使用是串行的差分信号,PHY就是一个电压转换器件,将FPGA/ARM/DSP的TTL电平的并行信号转换为能够在网线传输的串行电信号。其还会完成编码(千兆:8b/10b,百兆:4b/5b)。
PHY还会进行自协商,与另一个设备协商传输模式与速率,以两个设备同时能支持的最大数率传输数据。
2、FPGA与PHY传输数据
若要传输以太网数据,我们只需要管fpga和phy之间的数据传输就行,至于phy和其他设备之间的通信和数据传输都由phy去完成。
fpga和phy之间传输数据的方式有4种,都是并行信号。GMII,RGMII,MII,RMII这四种分别适用于不同的速度,方式的区别也就在于是单边沿传输还是双边沿传输。"G"表示千兆,否者是100M或10M,"R"表示简化,是使用双边沿传输减少了数据线,所以有了4中组合。
RGMII信号连接关系:

实现双边沿发送数据和接收数据,使用的是FPGA的IDDR和ODDR资源。发送信号时,时钟相位需要偏斜90°,可以使用PLL生成两路相位相差90°的时钟,一路产生数据,一用作时钟。
3、MAC协议
以太网MAC帧格式:
- 长度/类型:当这两个字节的值小于 0x0600时,代表该以太网中数据段的长度;否则表示该以太网中的数据属于哪个上层协议, 0x0800 代表 IP 协议(网际协议)、0x0806 代表 ARP 协议(地址解析协议)等。
- FCS校验:不包含前导码、SFD(帧起始界定符)与FCS本身其他所有数据的检验结果(CRC)。CRC要取反。
- 注意:帧与帧之间的时间有时间间隔要求:96个时钟周期,如1000M为96*1ns=96ns。
4、ARP协议
ARP是什么?:ARP(Address Resolution Protocol),即地址解析协议,是根据 IP 地址(逻辑地址)获取 MAC 地址的一种 TCP/IP 协议。
ARP做什么?:应用在发送以太网数据时,是以帧发送的,帧里面包含有目的ip和mac,只有接收设备和自己mac匹配的数据才会被接收和解析使用,否者会被抛弃。所以在通信前需要先获得目的地的MAC地址,ARP协议就是这个作用。
ARP映射是什么:获取到目的MAC以后,缓存到ARP缓存表中,称为ARP映射
ARP映射怎么做?:
1、静态映射,手动将MAC地址和ip绑定,但是MAC地址可能会变。
2、动态映射:发送一个 ARP 请求报文,这个报文包含了发送方的 MAC 地址和 IP 地址以及接收方的 IP 地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播,即 ARP 请求时发送的接收方物理地址为广播地址,用48’hff_ff_ff_ff_ff_ff 表示。


封包过程:ARP数据包→MAC帧
ARP数据包格式:
- 硬件类型:硬件地址的类型,1 表示以太网地址。
- 协议类型:要映射的协议地址类型,ARP 协议的上层协议为 IP 协议,因此该协议类型为 IP 协议,其值为 0x0800。
- OP:操作码,用于表示该数据包为 ARP 请求或者 ARP 应答。1 表示 ARP 请求,2 表示ARP 应答。
- 硬件地址长度为MAC长度,为6(Byte)。协议地址长度为ip地址长度为4(Byte)。
- 目的 MAC 地址:ARP请求时,为广播地址48’hff_ff_ff_ff_ff_ff。
5、UDP协议
UDP,即用户数据报协议,是一种面向无连接的传输层协议。无连接是指在传输数据时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
封包过程:用户数据→UDP数据包→IP数据包→MAC帧。
UDP数据包格式:
- 端口:用于区分不同服务的端口,端口号的范围从 0 到 65535。
- UDP 长度:16 位 UDP 长度,包含 UDP 首部长度+数据长度,单位是字节(byte)。
- UDP 校验和:UDP 伪首部,UDP 首部和 UDP 的数据部分。伪首部的数据是从 IP 数据报头和 UDP 数据报头获取的,包括源 IP 地址,目的 IP 地址,协议类型和 UDP 长度,其目的是让 UDP 两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。在大多数使用场景中接收端并不检测 UDP 校验和
IP数据包格式:
- 版本:4 位 IP 版本号,0100 表示 IPv4,0110 表示IPv6,目前使用比较多的是 IPv4。
- 首部长度:表示 IP 首部一共有多少个 32 位(4 个字节)。在没有可选字段时,IP 首部长度为 20 个字节,因此首部长度的值为 5。
- 服务类型:分为3 位优先级字段(现在已经基本忽略掉了)和 4 位 TOS 字段加固定最后1位为0。服务类型为 0 时表示一般服务。
- 总长度:包括 IP 首部和 IP 数据部分,以字节为单位。一般小于1500?
- 标识字段:通常每发送一份报文它的值就会加 1。
- 标志字段:3 位标志字段,第 1 位为保留位;第 2 位表示禁止分片(1 表示不分片 0:允许分片);第 3 位标识更多分片(除了数据报的最后一个分片外,其它分片都为 1)。
- 片偏移:13 位片偏移,在接收方进行数据报重组时用来标识分片的顺序。
- 生存时间:TTL(Time To Live)域防止丢失的数据包在无休止的传播,一般被设置为 64 或者 128。
- 协议:表示此数据报所携带上层数据使用的协议类型,ICMP 为 1,TCP为 6,UDP 为 17。
- 首部校验和:16 位首部校验和,只校验首部,不包含数据部分。
- 用户数据:以太网数据最小46个字节,IP首部20个字节+UDP首部8个字节,所以数据至少46-20-8=18个字节。
例如:
TCP协议:
TCP 协议设计之初是根据软件灵活性设计的,如果使用硬件逻辑实现,工程量会十分巨大,而且功能和性能无法得到保证,因此,TCP 协议设计并不适合使用硬件逻辑实现。故略。
文献参考:正点原子领航者ZYNQ之FPGA开发指南