FPGA学习笔记——以太网

笔记根据正点原子官方教学视频第33讲

时间:2025/2/7

【第一期】手把手教你学领航者&启明星ZYNQ之FPGA开发篇【真人出镜】FPGA教学视频教程_哔哩哔哩_bilibili

 有错误的地方希望可以告诉博主

前言

什么是以太网帧

        在以太网链路上的数据包称作以太帧。 以太帧有很多种类型。不同类型的帧具有不同的格式和MTU(Maximum Transmission Unit最大传输单元)值。 常见的以太网帧格式有Ethernet II、Ethernet802.3 RAW 等。

以太网帧格式区分

        以下是Ehtemet II和Ethernet802.3 的一种以太帧网帧格式: 

        这里需要了解的是,7Byte 长度的前导码固定为:7个0x55;1Byte 长度的 SFD 固定为:0xd5。 

        区分长度和类型的依据:小于等于1500是长度,大于1500是类型。

        

        以太网MAC帧数据格式:

        当类型为0800时:IPv4协议。

        当类型为0806时:ARP协议:知道IP地址获取MAC地址。

        当类型为0835时:RARP协议:知道MAC地址获取IP地址。

        其余类型用到以后再补充。

        以下是一个小例子:

        这是一个广播信号,源地址为:74:7d:24:92:fb:df,类型为0806(ARP协议)。ARP应答/请求在中间未标记字段,后续的全0字段为字节填充。

以太网帧传输方式 

        单播:指从单一的源端发送到单一的目的端。

        广播:表示帧从单一的源发送到共享以太网上的所有主机。

        组播:组播可以理解为选择性的广播 。

        如何通过地址来进行区分:广播的地址为全1;单播地址的第一个Byte为 0x00,而组播地址的第一个Byte为 0x01。

        以下从左到右依次是:单播、广播、组播。

                

帧间隙:(IFG,Interpacket Gap) 

        帧间隙的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间,IFG 的最小值是 96 bit time。96 bit time 的含义:在媒介中发送96位原始数据所需要的时间,在不同媒介中IFG的最小值是不一样的。

        10Mbit/s 最小时间为: 96*100ns = 9600ns;(10M以太网下发送 1bit 数据需要100ns)

        100Mbit/s 最小时间为: 96*10ns = 960ns;

        1000Mbit/s 最小时间为: 96*1ns = 96ns 。

ARP协议

        ARP:Address Resolution Protocol(地址解析协议)。ARP 是根据 IP 地址(逻辑地址) 获取 MAC 地址的一种 TCP/IP 协议。

        ARP的映射分为静态映射和动态映射。

        所谓静态映射,就是指手动将 IP 地址和 MAC 地址绑定到一起。

ARP协议的工作方式

        ARP工作方式: ARP请求; ARP应答; 免费ARP 。接下来解释一下这三种工作方式有何区别:

        ARP请求 的发送过程为:主机A会广播一个ARP请求数据包,该数据包包含主机A的IP地址和MAC地址,以及主机B的IP地址。以此来询问网络中哪个设备的IP地址与主机B的IP地址匹配,并请求该设备返回其MAC地址。

        ARP应答 的工作过程为:主机B会向主机A发送一个ARP应答数据包,该数据包包含主机B的IP地址和MAC地址。这是一个单播消息,直接发送给主机A。主机A收到ARP应答后,将主机B的IP地址和MAC地址的映射关系存储在ARP缓存中,以便后续通信时直接使用。

        免费ARP 是一种特殊的ARP请求,设备主动使用自己的IP地址作为目的IP地址发送的ARP请求。这样做的目的如下:

        1、IP冲突检测:设备通过发送免费ARP报文,检测网络中是否有其他设备使用了相同的IP地址。如果有设备响应,则说明存在IP冲突。

        2、刷新ARP表:当设备更改了MAC地址或获得了新的IP地址后,会发送免费ARP报文,通知同一广播域内的其他设备更新其ARP表中的映射关系。

        3、VRRP主备切换:在虚拟路由冗余协议(VRRP)中,当主设备故障切换到备用设备时,备用设备会发送免费ARP报文,刷新其他设备的ARP表。

        4、服务器集群:部分集群通过免费ARP报文作为心跳报文,告知其他服务器其在线状态。

 ARP协议的内容

        ARP协议的内容在以太网帧中占28Byte,具体内容如下: 

         

        其中,硬件类型一般都是以太网接口(0x0001) ,协议类型一般是IPv4(0x0800),硬件地址长度为6字节,协议地址长度为4字节,OP为0x0001为ARP请求,0x0002为ARP应答。

        值得一提的是,目的MAC地址在ARP请求中可以是全1或全0,因为本身就不知道目的MAC地址嘛。

        ARP报文实例如下:

        ARP报文段从标记的0001开始 ,上面带有各个字段的解析。

PHY通信接口简介与时序

PHY通信接口简介 

         PHY芯片通信接口:MII(Medium Independent Interface),即“介质独立接口”,该接口一般应用于以太网硬件平台的MAC层和PHY层之间,MII接口的类型有很多,常用的有MII、RMII、GMII、RGMII等。但一块PHY通常不会集成以上全部接口,而是根据需求有选择的集成一部分。下面对它们进行一一介绍。

MII

接口方向作用补充
ETH_RXCPHY —> FPGA发送由PHY芯片产生的时钟信号发送时钟
ETH_RXDVPHY —> FPGA数据有效信号, 高电平时数据有效
ETH_RXERPHY —> FPGA数据错误信号,高电平时数据有误接收端接收此数据后可以选择丢弃
ETH_RXD[3:0]PHY —> FPGA发送数据的接口(对于PHY)
ETH_TXCPHY —> FPGA发送由PHY芯片产生的时钟信号接收时钟
ETH_TXENFPGA —> PHY数据有效信号,高电平时数据有效
ETH_TXERFPGA —> PHY数据错误信号,高电平时数据有误
ETH_TXD[3:0]FPGA —> PHY发送数据的接口(对于FPGA)
CRSPHY —> FPGA载波侦测信号
COLPHY —> FPGA冲突检测信号

        MII 接口只支持10M和100M,当处于10M的情况下,因为数据位宽是4位,所以此时的时钟频率为 2.5MHz;当处于100M的情况下,时钟频率为 25MHz。此外,还有MDIO接口:用于配置PHY芯片的寄存器。

RMII 

        RMII: Reduced Media Independent Interface,即简化媒体独立接口。同样也只支持 10M 和100M。

接口方向作用补充
REF_CLK双向时钟信号由外部晶振产生
CRS_DVPHY —> FPGA由 MII 的 ETH_RCDV 和 CRS 合并到了一起,高电平时表示数据有效
ETH_RXERPHY —> FPGA数据错误信号,高电平时数据有误接收端接收此数据后可以选择丢弃
ETH_RXD[1:0]PHY —> FPGA发送数据的接口(对于PHY)
ETH_TXENFPGA —> PHY数据有效信号,高电平时数据有效
 ETH_TXD[1:0]FPGA —> PHY发送数据的接口(对于FPGA)

        RMII 接口也只支持10M和100M,当处于10M的情况下,因为数据位宽是2位,所以此时的时钟频率为 5MHz;当处于100M的情况下,时钟频率为 50MHz。

GMII

        GMII: Gigabit Media Independent Interface,即千兆比特媒体独立接口。

接口方向作用补充
ETH_RXCPHY —> FPGA发送由PHY芯片产生的时钟信号发送时钟
ETH_RXDVPHY —> FPGA数据有效信号, 高电平时数据有效
ETH_RXERPHY —> FPGA数据错误信号,高电平时数据有误接收端接收此数据后可以选择丢弃
ETH_RXD[7:0]PHY —> FPGA发送数据的接口(对于PHY)
ETH_TXCFPGA —> PHY发送由PHY芯片产生的时钟信号接收时钟
ETH_TXENFPGA —> PHY数据有效信号,高电平时数据有效
ETH_TXERFPGA —> PHY数据错误信号,高电平时数据有误
ETH_TXD[7:0]FPGA —> PHY发送数据的接口(对于FPGA)
CRSPHY —> FPGA载波侦测信号
COLPHY —> FPGA冲突检测信号

        GMII支持千兆网,同时也向下兼容10M和100M网。GMII的接口基本与GII相同,但数据位宽为8位,且ETH_TXC信号转为由MAC侧发送(MII中ETH_RXC和ETH_TXC均由PHY侧发送)。

RGMII

        RGMII: Reduced Gigabit Media Independent Interface,即简化千兆比特媒体独立接口。

       

接口方向作用补充
ETH_RXCPHY —> FPGA发送由PHY芯片产生的时钟信号发送时钟
ETH_RXCTLPHY —> FPGA上升沿和下降沿同为高电平有效由RXDV和RXER合并
ETH_RXD[3:0]PHY —> FPGA发送数据的接口(对于PHY)
ETH_TXCFPGA —> PHY发送由PHY芯片产生的时钟信号接收时钟
ETH_TXCTLFPGA —> PHY上升沿和下降沿同为高电平有效由TXEN和TXER合并
 ETH_TXD[3:0]FPGA —> PHY发送数据的接口(对于FPGA)

        ETH_RXCTL:

        在时钟上升沿,ETH_RXCTL 表示接收数据有效信号(ETH_RXDV),高电平表示当前接收的数据是有效的。

        在时钟下降沿,ETH_RXCTL 表示接收数据错误信号(ETH_RXER)与接收数据有效信号(ETH_RXDV)的异或值(ETH_RXER xor ETH_RXDV)。如果 ETH_RXER 为高电平,表示接收到的数据存在错误。

        ETH_TXCTL:

       在时钟上升沿,ETH_TXCTL 表示发送数据使能信号(ETH_TXEN),高电平表示当前发送的数据是有效的。

        在时钟下降沿,ETH_TXCTL 表示发送数据错误信号(ETH_TXER)与发送数据使能信号(ETH_TXEN)的异或值(ETH_TXER xor ETH_TXEN)。如果 ETH_TXER  为高电平,表示发送的数据存在错误。

        RGMII是如何达到千兆网的?只需125M时钟,通过双沿采样和4为数据位宽即可达到,125×2×4=1000。此时数据在上升沿和下降沿都会被采样。

PHY接口时序

        以下的时序都是针对PHY芯片而言的,发送时序为PHY芯片发送数据的时序,接收时序为PHY芯片接收数据的时序。 

MII接口时序

发送时序 

        PHY芯片会在上升沿时采样,下降沿时输出,如下图所示。 

         PHY 芯片会在在 RX_CLK 下降沿输出数据 RXD,两个时钟发送一字节数据先发送低四位数据,后发送高四位数据,发送数据时RXDV信号也会拉高。 MAC侧的FPGA会在时钟上升沿采集 RXDV 和 RXD 的状态。

接收时序 

        与发送时序基本相同。 

RMII接口时序 

        与 MII 接口时序一致。

GMII接口时序 

发送时序

        与 MII 接口时序相同,PHY 芯片同样是在 RX_CLK 下降沿输出数据,MAC 侧的 FPGA 在上升沿采集数据。区别是 GMII 在每个时钟周期都会传输 1Byte 数据。 

接收时序

         与接收时序基本相同。

RGMII

发送时序

        与上面不同的是,RGMII接口会在上升沿和下降沿都进行数据发送:在时钟的上升沿发送低4位数据,在时钟的下降沿发送高4位数据。每个时钟周期能发送 1Byte 数据。

        注意,RX_CLK要延迟2ns后再输出给接收端,因为接收端会在时钟的上升沿采集数据,但发送端也是在上升沿发送数据,延迟2ns能保证接收端能够采集到数据。延迟2ns的方法可以使用PLL(可以参考这篇文章:PLL学习笔记-优快云博客)。

        另一个需要注意的是图中标记出来的 TskewR 和 TskewT,分别是接收端和发送端的时钟偏斜,即 RX 和 RX_CTRL 信号对于 RX_CLK 的延迟。这个延迟是需要严格控制的,一般是±500ps。

接收时序

        与发送时序基本相同。 

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值