基于Xilinx Artix7 的FPGA高级应用 (二):千兆以太网通信(实战篇)第一期

本项目是基于Xilinx Artix7 XC7A35T芯片
以太网芯片选用的是RTL8211EG PHY芯片 MAC 和PHY接口标准是GMII
开发工具是vivado 2018.3
这期不知道CSDN编辑器为什么出了问题,图片下面的代码直接显示出来了,各位看官自行过滤。

我们先来复习一下以太网的基本通信原理:

当我们的计算机需要与局域网中另外的设备进行通信的时候,需要将数据传输到网卡进行编码,然后传输到线上,经过另一个设备的网卡解码成该设备能读取的数据。

关于以太网协议的知识在原理篇中已经讲过,不再重复,下面直接看接收代码:

在这里插入图片描述
首先注意我们的MAC和PHY通信选择的是GMII接口标准,发送数据一次是八个bit,然后我们设置有效信号,设置清零功能。

此时我们通信的两个设备就是板子和PC,所以设置它们的MAC地址寄存器,MAC地址由48位二进制(6个字节)组成,采用十六进制表示。其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位), 也称为“编制上唯一的标识符”,后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。

在这里插入图片描述
在这里插入图片描述
上面两图分别是IP和UDP数据包的格式,我们在模块定义里面也对照着一一设置好寄存器存放各项数据就行了。

在这里插入图片描述
按照惯例,我们不能直接对真实的输入输出口读写数据,这里加一个“my”来作为一个中间的缓冲区。

我们用case来进行一个连续操作,这种代码块的特点是,在执行完一个case的同时立刻以非阻塞方式对case状态机进行赋值使其进行下一个case的操作:

在这里插入图片描述
第一个case当然是复位清零,第二个case开始接收数据,由于受到GMII接口的限制,我们每次只能读进来八位数据,所以我们的数据的进程如下图:
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/202008270225448.png?x-oss-process=image/waterm在这里插入图片描述
这里我们前几个case完成了数据的载入,数据全部写到缓冲区内等待输入PC,接下来开始处理IP格式和UDP格式问题。

先接收MAC的地址,判断是否是我们的FPGA板子,然后开始载入IP和UDP的包头,这部分不再详述。

在这里插入图片描述
在这里插入图片描述
注意写入不满32位的时候是要补齐的。
最后将缓冲区的数据写入真正的输入输出口,然后复位整个系统。

今天的分享就到这里,下期我们讲发送部分和剩余的crc校验,在下一期,也是本项目最后一期讲顶层模块和一些别的剩余部分。

谢谢观看!

猜你喜欢

转载自blog.csdn.net/weixin_43824941/article/details/108251147