赞
踩
适用于板卡型号:
PGL22G
本实验将实现FPGA芯片和PC之间进行千兆以太网数据通信, 通信协议采用Ethernet UDP通信协议。 FPGA通过RGMII总线和开发板上的Gigabit PHY芯片通信, Gigabit PHY芯片把数据通过网线发给PC,程序中实现了ARP,UDP,PING功能,此外还实现了100/1000M自适应。
在开发板上通过1片RTL8211EG以太网PHY芯片为用户提供网络通信服务。以太网PHY芯片是连接到Pango FPGA的IO接口上。芯片支持10/100/1000 Mbps网络传输速率,通过RGMII接口跟FPGA进行数据通信。RTL8211EG支持MDI/MDX自适应,各种速度自适应,Master/Slave自适应,支持MDIO总线进行PHY的寄存器管理。当网口Link到千兆以太网时, FPGA通过RGMII总线和PHY芯片进行数据通信,当网口Link到百兆以太网时, FPGA通过MII总线和PHY芯片进行数据通信。另外FPGA可以通过MDI/MDIO管理接口来配置或读取PHY芯片内部的寄存器。在千兆的RGMII通信模式下(以U8为例), 发送数据时,发送时钟为125Mhz的E_GTXC信号, 数据为E_TXD[3:0], 数据有效信号为E_TXEN, E_TXC信号连接但没有使用; 接收数据时,接收时钟为125Mhz的E_RXC信号, 数据为E_RXC[3:0], 数据有效信号为E_RXDV。关于详细的管脚说明和RGMII/MII的通信时序,请大家参考RTL8211EG的芯片手册。
硬件电路设计如下:
开发板网络部分电路
关于详细的管脚说明和RGMII的通信时序,请大家参考相关芯片手册。
3.1 以太网帧格式
下图为以太网的帧格式:
前导码(Preamble):8字节,连续7个8’h55加1个8’hd5,表示一个帧的开始,用于双方设备数据的同步。
目的MAC地址:6字节,存放目的设备的物理地址,即MAC地址
源MAC地址:6字节,存放发送端设备的物理地址
类型:2字节,用于指定协议类型,常用的有0800表示IP协议,0806表示ARP协议,8035
表示RARP协议
数据:46到1500字节,最少46字节,不足需要补全46字节,例如IP协议层就包含在数据
部分,包括其IP头及数据。
FCS:帧尾,4字节,称为帧校验序列,采用32位CRC校验,对目的MAC地址字段到数据字
段进行校验。
进一步扩展,以UDP协议为例,可以看到其结构如下,除了以太网首部的14字节,数据部分包含IP首部,UDP首部,应用数据共46~1500字节。
3.2 ARP数据报格式
ARP地址解析协议,即ARP(Address Resolution Protocol),根据IP地址获取物理地址。主机发送包含目的IP地址的ARP请求广播(MAC地址为48’hff_ff_ff_ff_ff_ff)到网络上的主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将IP地址和物理地址保存到缓存中,并保留一段时间,下次请求时直接查询ARP缓存以节约资源。下图为ARP数据报格式 。
帧类型:ARP帧类型为两字节0806
硬件类型:指链路层网络类型,1为以太网
协议类型:指要转换的地址类型,采用0x0800 IP类型,之后的硬件地址长度和协议地址长度分别对应6和4
OP字段中1表示ARP请求,2表示ARP应答
例如:|ff ff ff ff ff ff|00 0a 35 01 fe c0|08 06|00 01|08 00|06|04|00 01|00 0a 35 01 fe c0
|c0 a8 00 02| ff ff ff ff ff ff|c0 a8 00 03| 表示向192.168.0.3地址发送ARP请求。
|00 0a 35 01 fe c0 | 60 ab c1 a2 d5 15 |08 06|00 01|08 00|06|04|00 02| 60 ab c1 a2 d5 15
|c0 a8 00 03|00 0a 35 01 fe c0|c0 a8 00 02|表示向192.168.0.2地址发送ARP应答。
3.3 IP 数据报格式
因为UDP协议包只是IP包中的一种, 所以我们来介绍一下IP包的数据格式。下图为IP分组的报文头格式,报文头的前20个字节是固定的,后面的可变
版本:占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)
首部长度:占4位,可表示的最大数值是15个单位(一个单位为 4 字节)因此IP 的首部长度的最大值是 60 字节
区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.1998 年这个字段改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用这个字段
总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节.总长度必须不超过最大传送单元 MTU
标识:占16位,它是一个计数器,用来产生数据报的标识
标志(flag):
占3位,目前只有前两位有意义
MF
标志字段的最低位是 MF (More Fragment)
MF=1 表示后面“还有分片”。MF=0 表示最后一个分片
DF
标志字段中间的一位是 DF (Don't Fragment)
只有当 DF=0 时才允许分片
片偏移:占12位,指较长的分组在分片后某片在原分组中的相对位置.片偏移以 8 个字节为偏移单位
生存时间:占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255
协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为 UDP 协议
首部检验和:占16位,只检验数据报的首部不检验数据部分,采用二进制反码求和,即将16位数据相加后,再将进位与低16位相加,直到进位为0,最后将16位取反。
源地址和目的地址:都各占4 字节,分别记录源地址和目的地址
3.4 UDP协议
UDP是User Datagram Protocol(用户数据报协议)的英文缩写。UDP只提供一种基本的、低延迟的被称为数据报的通讯。所谓数据报,就是一种自带寻址信息,从发送端走到接收端的数据包。UDP协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。
UDP协议的报头格式:
UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:
① UDP源端口号
② 目标端口号
③ 数据报长度
④ 校验和
UDP协议使用端口号为不同的应用保留其各自的数据传输通道。数据发送一方将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。
数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。
UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。虽然UDP提供有错误检测,但检测到错误时,错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。
3.5 Ping功能
ICMP是TCP/IP协议族的一个IP层子协议,包含在IP数据报里,用于IP主机、路由器之间传递控制消息。控制消息是指网络是否连通,主机是否可达等功能。其中ping功能采用回送请求和回答报文,回送请求报文类型为8’h08,回答报文类型为8’h00。
串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟,由MAC端提供,在本实验中也就是FPGA端。在RTL8211EG文档里可以看到MDC的周期最小为400ns,也就是最大时钟为2.5MHz。
如下图,为SMI的读写帧格式:
名称 | 说明 |
Preamble | 由MAC发送32个连续的逻辑“1”,同步于MDC信号,用于MAC与PHY之间的同步 |
ST | 帧开始位,固定为01 |
OP | 操作码,10表示读,01表示写 |
PHYAD | PHY的地址,5 bits |
REGAD | 寄存器地址,5 bits |
TA | Turn Around,MDIO方向转换,在写状态下,不需要转换方向,值为10,在读状态下,MAC输出端为高阻态,在第二个周期,PHY将MDIO拉低 |
DATA | 共16bits数据 |
IDLE | 空闲状态,此状态下MDIO为高阻态,由外部上拉电阻拉高 |
4.2 读写时序
可以看到在Turn Around状态下,第一个周期MDIO为高阻态,第二个周期由PHY端拉低。
为了保证能够正确采集到数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。