以太网
AI summary
Last edited time
Dec 29, 2025 03:19 AM
Last edited by
Tags
第一节:CRC算法1.1 CRC码1.1.1 CRC定义1.1.2 任意CRC硬件实现第二节:ETH1.1 ETH接口特点1.2 协议1.2.1 网络层协议1.2.1.1 IP协议1.2.1.2 ARP协议1.2.2 传输层协议1.2.2.1 UDP1.2.2.2 TCP1.3 独立媒体介质无关接口1.3.1 MII(RMII)接口1.3.2 GMII(rgmii)1.3.3 xGMII1.3.4 MDIO接口
第一节:CRC算法
CRC是一种常用于高速接口或者总线的信道编码,它具备检错能力,它可以对任意比特数据的进行检查。
CRC= (N,K) ,K为任意bit,监督位为crc码,也可以是任意比特
通过以上可以看出,CRC是一种扩展性和灵活性较高的信道分组码,因此在数字通信中得到非常广泛的应用,比如USBx.x,ETH,PCIE,…..。
1.1 CRC码
CRC校验的核心就是计算监督位,这里监督位我们习惯上叫做CRC码,任何信道分组码主要是计算监督位,这里就是计算crc码。
1.1.1 CRC定义
CRC码倍定义为,(N,K),监督位为N-K,将Kbit的信息为乘以2N-K,模2除以生成多项式,最后得到的余数即为CRC码。

例如:crc=(11,8) ,data[7:0]=8’b1001_1100, plot = 4’b1001
第一步:data[7:0]*2(N-K) = data[7:0]*211-8 = {data[7:0],3’b000}= 11’b1001_1100_000
第二步:求余数

1.1.2 任意CRC硬件实现

练习:G(x )= x5+x3+1 实现crc5的CRC码计算电路实现


第二节:ETH
以太网作为目前为数不多的对等传输类接口,它支持复杂的通信模型,需要路由协议完成通信控制。
1.1 ETH接口特点
- 独立媒体介质传输
ETH采用高速驱动电路,IEEE802.3规定ETH物理驱动为高速驱动电路,并且驱动电路与上层电路分类(物理驱动电路与上层电路为独立的电路,不是一个整体),这两个电路同时规定了相关接口,我们叫做独立媒体介质接口。

- 速率
速率等级 | 独立媒体介质接口 | 线路编码 |
10Mbps | MII(rmii)+ Mdio | 曼彻斯特编码 |
100MBPS | ㅤ | 4B/5B |
1000MBPS | GMII(rGmii)+ Mdio | 8B/10B |
10000MBPS | XGMII+Mdio | 64B/66B |
- 通信方式
采用对等传输,并且在正常模式下为全双工,其中10mbps/100mbps允许工作在半双工。
- 通信模型
ETH由于是对等多点通信,在通信中这种通信是路由最为复杂的通信。





- 可靠性
- 应答机制
- 链接机制
ETH为了符合实际需求,提供了2种传输方式,可靠传输和非可靠传输,具体在传输协议中体现,可靠传输采用TCP协议,非可靠传输采用UDP协议。
这里我们简单说一下可靠传输的机制,在数字通信中可靠通信一般他有2种机制
比如I2C总线,每发送一个数据,从机需要给出应答
每次传输数据都需要请求连接,数据发生完之后释放连接,一旦链接成功,连。续发送数据,如果需要重新发送信的数据,需要重新连接,ETH采用这种机制。
- ECC
ETH采用的CRC32作为校验码,具体要求如下:
生成多项式:G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X3+X+1
初值:32’HFFFFFFFF
结果:CRC码 xor 32’HFFFFFFFF
- 传输单位
以太网以帧作为数据传输单位,每次传输只能传输一个数据单位同时ETH要求每次传输需要有IFG,规定最小96bit时间。

10MBPS:9600ns
100Mbps:960ns
1000MBPS:96ns
10000MBPS:9.6ns

名称 | 字节数 | 数值 | 含义 |
前导码 | 7字节 | 0x55_5555_5555_5555 | 同步码,实现数据同步 |
帧起始界定符 | 1字节 | 0xD5 | 表示一帧的开始 |
目的MAC地址 | 6字节 | / | 指示目标设备的MAC地址 |
源MAC地址 | 6字节 | / | 发送端的MAC地址 |
长度/类型 | 2字节 | / | 小于1536字节时表示数据长度;特定数值表示不同协议包
当为0x0800时,表示该数据包是IPv4协议包。
当为0x08DD时,表示该数据包是IPv6协议包。
当为0x0806时,表示该数据包是ARP协议包 |
数据 | 46~1500字节 | / | 包含TCP、IP、UDP、ARP等协议数据 |
校验FCS | 4字节 | / | CRC32校验结果,确保数据正确性 |
IFG(帧间间隔) | / | / | 10M网络:9600ns;100M网络:96ns;1000M网络:96ns |
- 寻址
ETH采用双寻址,MAC+IP寻址,需要2个地址进行寻址
Mac地址:48bit,叫做物理地址,本质上是设备编号,每个设备都由唯一的地址
IP地址 (32bit[IPV4]/48bit[IPV6]):网络节点地址,节点编号,通信模型多样化,需要节点编号。
1.2 协议
Eth协议参考了IOS的7层协议模型,采用分层协议,一共7层:

1.2.1 网络层协议
网络层是针对节点路由的一些规定的协议,主要有2种协议,IP协议,arp协议
IP协议 :用来封装上层数据
ARP协议:协助型的协议,一般情况下知道对方IP地址就可以发送数据,如果在不知道对方MAC地址的情况下,需要通过这个协议解析对方MAC。
1.2.1.1 IP协议
IP协议为本质是一个IP包,包内部规定了与节点路由相关的参数

字段名称 | 长度 | 作用 |
版本号(Version) | 4位 | 区分IP v4和IP v6 |
首部长度 | 4位 | 表示IP包头长度,前20字节固定,后40字节可选 |
服务类型(Type of Service TOS) | 8位 | 表示用户请求的服务质量
前3位为优先级(Precedence),后4位标志位,最后1位保留未用。优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由) |
总长度(Total Length) | 16位 | 表示IP包总长度,最大可达65535字节 |
标识符(Identifier) | 16位 | 用于数据包分段重组时的序列号标识 |
标志(Flags) | 3位 | 指示数据包是否需要分段以及是否还有后续分片
长度为3位,三位从左到右分别是MF、DF、未用。MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。DF=1表示路由器不能对该数据包分段,DF=0表示数据包可以被分段。 |
偏移量(Fragment Offset) | 13位 | 标识数据段在上层数据报文中的偏移量 |
生存时间(TTL) | 8位 | 避免数据包无限转发,每经过一个路由器减1,减至0则丢弃 |
协议(Protocol) | 8位 | 标识上层使用的协议
· 6 表示 TCP(传输控制协议)
· 17 表示 UDP(用户数据报协议) |
首部校验和(Header Checksum) | 16位 | 对IP数据包首部进行校验,不包含数据部分
反码求和运算 |
源IP地址(Source IP) | 32位 | 表示数据发送的主机IP |
目的IP地址(Destination IP) | 32位 | 表示数据接收的主机IP |
选项字段(Options) | 0-40字节 | 提供额外的功能,如安全、路径记录、时间戳等 |
1.2.1.2 ARP协议
ARP协议本质就是arp包,目的根据当前IP地址解析对方的MAC地址,规定了和地址解析相关参数。

字段名称 | 长度 | 作用 |
硬件类型 | 2字节 | 指明硬件接口类型,以太网值为1 |
协议类型 | 2字节 | 表示协议地址类型,值为0x0800,表示IP地址 |
硬件地址长度和协议长度 | 2字节 | 分别指出硬件地址和协议的长度,以字节为单位,以太网上的值分别为6和4 |
操作类型 | 2字节 | 表示报文类型,请求为1,响应为2,RARP请求为3,RARP响应为4 |
发送方MAC地址 | 6字节 | 发送方设备的硬件地址 |
发送方IP地址 | 4字节 | 发送方设备的IP地址 |
目标MAC地址 | 6字节 | 接收方设备的硬件地址 |
目标IP地址 | 4字节 | 接收方设备的IP地址 |
1.2.2 传输层协议
该层主要是针对如何传输的相关规定,比如可靠传输,非可靠传输,主要有TCP/UDP协议
TCP:可靠传输,面向字节流,传输效率特别低,主要用于传输软件或者操作系统的有关命令和消息等信息
UDP:非可可传输,面向报文,用于传输数据
1.2.2.1 UDP
UDP协议本质就是报文,规定了传输相关的参数,支持虚拟端口(最多216个端口)

字段名称 | 内容 |
源端口 | 范围:0-65535;保留端口号:1-1024,为标准的服务端口 |
目的端口 | 无须多解释 |
UDP长度 | header+data 总长度 |
UDP校验和 | 伪头部、头部、data三部分校验和 |
数据 | 上层应用层的数据 |
伪头部格式 | 源地址、目的地址、零位、协议、UDP长度 |
1.2.2.2 TCP
TCP采用报文形式,同样规定了可靠传输的相关参数,采用链接机制(请求连接需要3次握手,释放连接需要4次握手)

字段名称 | 长度 | 作用 |
源端口 | 16位 | 发送方主机的应用程序的端口号 |
目的端口 | 16位 | 目的主机的应用程序的端口号 |
序列号 | 32位 | 表示本报文段所发送数据的第一个字节的编号 |
确认号 | 32位 | 表示接收方期望收到发送方下一个报文段的第一个字节数据的编号 |
首部长度 | 4位 | 确定TCP报文的报头部分长度 |
保留字段 | 6位 | 必须全部为0 |
标志位字段 | 6位 | 共有6个标志位,每个标志位占1个bit标志位说明URG表示本报文中发送的数据(有效载荷)是否包含紧急数据ACK表示本报文前面的确认号字段是否有效PSH告诉对方收到该报文段后,上层应用程序立即把数据从TCP接收缓冲区读取RST表示是否重置连接SYN在建立连接时使用,用来同步序号FIN标记数据是否发送完毕
|
窗口大小 | 16位 | 表示发送该TCP报文的接受窗口还可以接受多少字节的数据量 |
校验和 | 16位 | 用于确认传输的数据有无损坏 |
紧急指针 | 16位 | 仅当标志位字段的URG标志位为1时才有意义 |
选项字段 | 变长 | 提供了一些额外的功能或对TCP协议进行扩展 |
请求链接

释放链接

注意:Eth传输数据用UDP,传输操作协议或者软件的命令,消息等数据才会使用TCP
1.3 独立媒体介质无关接口
1.3.1 MII(RMII)接口
10mbps和100mbps采用这种接口,下来我们对该接口进行分析

信号 | 方向 | 位宽 | 含义 |
RX_CLK | O | 1 | 发送时钟,PHY芯片产生,100Mbps时为25MHz,10Mbps时为2.5MHz。 |
RX_DV | O | 1 | 高电平表示发送的数据有效。 |
RX_ER | O | 1 | 高电平表示发送数据的错误,接收端不接受该数据。 |
RX_D | - | 4 | 发送数据总线。 |
TX_CLK | O | 1 | 接收时钟,PHY芯片产生,频率与RX_CLK一致。 |
TX_EN | 1 | 1 | 高电平表示接收的数据有效。 |
TX_ER | 1 | 1 | 高电平表示接收的数据包有误,丢弃该数据包。 |
TX_D | 1 | 4 | 接收数据总线。 |
CRS | 0 | 1 | 载波侦测信号,不需要同步于参考时钟,有数据传输,CRS就有效,仅PHY在半双工模式下有效。 |
COL | O | 1 | 冲突检测信号,不需要同步于参考时钟,仅PHY在半双工模式下有效。 |
1.3.2 GMII(rgmii)
GMIIG向下兼容MII

信号名称 | 描述 | 方向 |
GTX_CLK | 1000M发送时钟 | MAC→PHY |
TX_CLK | 100/10M发送时钟 | MAC→PHY |
TX_ER | 发送数据错误 | MAC→PHY |
TX_EN | 发送使能 | MAC→PHY |
TX_[7:0] | 发送数据8bit,如果工作中在10mbps/100mbps,只有低4位有效 | MAC→PHY |
RX_CLK | 接收时钟 | PHY→MAC |
RX_DV | 接收数据有效 | PHY→MAC |
RX_ER | 接收数据错误 | PHY→MAC |
RX_[7:0] | 接收数据8bit,如果工作中在10mbps/100mbps,只有低4位有效 | PHY→MAC |
CRS | 载波监测 | PHY→MAC |
COL | 冲突碰撞监测 | PHY→MAC |
1.3.3 xGMII
该接口为万兆以太网的接口,为74根线,采用双沿采样
信号名称 | 描述 | 方向 |
TXD[31:0] | 32位并行Q数据总线,传输MAC层发送的数据 | 发送方向(TX) |
TXC[3:0] | 4位控制信号,每位对应TXD总线的8位数据,用于指示数据或控制信息 | 发送方向(TX) |
TX_CLK | 发送时钟信号,频率为156.25 MHz,同步TXD和TXC信号 | 发送方向(TX) |
RXD[31:0] | 32位并行数据总线,传输PHY层接收的数据 | 接收方向(RX) |
RXC[3:0] | 4位控制信号,每位对应RXD总线的8位数据,用于指示数据或控制信息 | 接收方向(RX) |
RX_CLK | 接收时钟信号,频率为156.25 MHz,同步RXD和RXC信号 | 接收方向(RX) |
在实际项目开发中,由于XGMII线较多,一般需要寻求别的方式进行传输,而不采用官方的接口,一种能够被大众接收的方式是用XAUI代替XGMII的方式。
XAUI的本质是采用4路高速驱动电路直接驱动,每路传输8bit数据,采用8B/10编码
在FPGA开发中,万兆网不需要PHY的情况下使用4路高速收发器即可实现网络传输。
1.3.4 MDIO接口
MDIO接口是IEEE802.3规定的独立媒体介质无关接口的管理接口,通过2根新信号线(MDC ,MDIO)实现PHY的寄存器配置,用于和PHY人机交互。


字段名称 | 长度 | 含义 |
开始标志 | 2Bits | 标志该数据帧开始,必须为01。 |
操作码 | 2Bits | 10标志为读操作,01标志为写操作。 |
PHY地址 | 5Bits | 表示所访问的PHY地址,一个MDIO总线最大支持32个PHY。 |
寄存器地址 | 5Bits | 表示所访问的寄存器的地址,共计32个寄存器。 |
翻转标志位 | 2Bits | 读话Z0,写10 |
数据 | 16Bits | 操作符为读操作时,该数据为对于地址PHY的特定寄存器的数值;操作符为写时,该数据为对该寄存器写入的数值。 |
Loading...