基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)

本项目是基于Xilinx Artix7 XC7A35T芯片
以太网芯片选用的是RTL8211EG PHY芯片 MAC 和PHY接口标准是GMII
开发工具是vivado 2018.3

FPGA高级应用(二) 千兆以太网通信

Ethernet(以太网)是现存三种比较成熟的局域网技术中发展前景最的一个,现已成为主流的局域网技术。

我们知道计算机中的数据是并行的,那么当一台计算机需要通过局域网和其他设备进行通信的时候,我们就需要网卡来完成数据的1.串并转换2.打包和拆解3.网络存取的控制4.网络信号和缓存

发送信号的时候计算机将数据写到网卡的缓存,由网卡完成编码,再传输,接收信号则相反。

以太网和CPU、内存、总线的关系如下:
基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)_第1张图片
以太网自身的结构如图:

基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)_第2张图片
当CPU接受到调用以太网时,会把总线的控制权交给MAC,这时候MAC从总线获取数据,并将其按照固定的格式打包,通过GMII(千兆以太网专用接口标准,由MII接口标准衍生出来的多种接口之一)发送给PHY。
在MAC的处理后,以太网数据帧结构如下:
在这里插入图片描述
其中preamble 是提醒码,按照01交替提醒接收端将有一个以太网数据帧来临;
SFD是一个字节,这个字节最后以11结尾表示下面正式开始数据帧的内容;
DA是目的节点的地址,SA是源节点的地址;
Type/length如果字段值在0x0000-0x05DC范围内,则表示该字段为Length,该帧为802.3 raw封装。如果字段值在0x0600-0xFFFF范围内,则表示该字段为Type字段,该帧为Ethernet II封装。
payload就是我们的数据,最少46bit,最大1600bit,不足46bit会用0
x00填充。
最后的FCR是校验和。(也叫CRC)

PHY主要完成物理层的工作,我们可以通过往它的寄存器赋值来控制它,具体可以根据选择的芯片来确定。物理层来说没有数据帧的概念,只有数据,PHY每四个bit增加一个bit的验错码,然后将数据变为模拟信号传输出去,接收过程则相反,除此之外PHY还具有解决冲突的功能,我们首先要提到以太网的工作模式:
以太网有三种工作模式:1.双全工2.半全工3.自协商
在半全工状态下,它采用下图中的CSMA/CD 协议来解决冲突问题
基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)_第3张图片
在CSMA/CD 协议下的数据帧传送过程如下图:

基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)_第4张图片
PHY就能完成上图的检验功能,这保证了整个局域网系统的时序不会出错。

以太网的数据帧能够直接交给物理层来处理,但是并不能直接被计算机识别,如果想要计算机识别还需转换位IP数据包,再转换为UDP。
其中的协议关系如下图:
基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)_第5张图片
在数据发送时首先需要确定发送目标,其中包括目标IP地址、目标MAC地址(当采用广播进行通讯时,MAC全部为0XFF),目标端口号等目标信息,然后将要发送的数据进行UDP打包、IP打包、以太网帧打包,然后按照RGMII的时序要求将数据发送出去。 需要特别注意: 1. 当采用单播UDP时,需要进行ARP协议的发送或者应答。 2. RGMII发送时,要保证,在TXCLK上升或者下降沿时,TXD数据线上的数据已经稳定。

ARP广播利用了以太网的广播特性:以太网中的每个节点都能获取全部的数据,我们想要获得MAC的地址时,就相当于在系统里叫一声:谁住在xxxxx?然后大家就开始对比自己的地址是否符合,然后符合的那个地方的人大吼一声说:我xxxx在这里!这样我们就获得了MAC 的起始和目的地址。

MAC在和PHY进行数据传输时还要经过GMI口,这个口的标准随处可以搜到,这里就不做介绍了。

这期粗略地讲解了以太网的基本工作流程和一些协议。但是由于本人之前没有接触过通信领域,在这方面还有很多不足,如有错误请各位看官大佬指出!

这篇博客编写过程中参考了很多大佬的文章,在此一并表示感谢!

谢谢观看!

[1] 图片来自csdn博主@sunshine008 侵删

你可能感兴趣的:(FPGA入门,数字电子技术,通信网络,fpga,以太网,局域网,网络,开发工具)