PC与FPGA的以太网通信

预期目标

  1. FPGAPC 通过 UDP 协议通信
  2. 数据传输为单项传输, PC 发送,FPGA 接收
  3. 发送的数据为 PC 端制备的随机数

目标选型

目标选型具体阐述已在 此部分 给出,这里简单给出本节所用设备型号:
  1. FPGA – 黑金 AX530
  2. PCwin10 电脑
  3. 网线

通信方式

PC 如何与 FPGA 的通信方式有很多中,根据 FPGA 的型号而定,就本项目所使用的 FPGA*(*AX530)而言,通信方式不外乎有以下几种:
  1. 利用USB的串口通信 ———— 速度在百兆左右
  2. 利用以太网的网口通信 ———— 速度有百兆和千兆两个量级。

注解

其中由传输协议又细分为 TCP 协议和 UDP 协议

TCP 协议需要使用多次握手确定双方的连接关系,是一种安全的通信方式,并且由于建立了通信双方的连接, 故传输的数据不会丢失,缺点是速度较 UDP 协议慢

UDP 协议是面向无连接的协议,即发送方只管发送信息,接收方只管接收信息。是一种适用于高速传输的场景中,例如:视频直播、网络游戏、聊天软件等都是利用了 UDP 协议。 它会存在一定的丢包率,不过由于传输速率很快,所以较少的丢包并不会影响整体。


UDP协议

注解

UDP 协议全称为(User Datagram Protocol),即用户数据报协议。UDP 协议是一种基本的、低延迟的数据报的通讯。数据报就是一种自带寻址信息,从发送端到接收端的数据包。 其常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。

更多关于 UDP 协议知识,请访问 UDP百科

基于本开发板的板上资源,通信协议采用 Ethernet UDP 通信协议,FPGA 通过 GMII 总线和开发板上的 Gigabit PHY 芯片通信,Gigabit PHY 芯片再把数据通过网线发送给 PC。 传输示意图如下:

_images/kuangtu.png

在本开发板(AX530)中,采用 Realtek 千兆 GPHY 芯片 RTL8211E 来实现 千兆以太网数据通信。该芯片能够自动选择传输速率, 当网口连接到千兆以太网时,FPGA 通过 GMII 总线和 PHY 芯片进行数据通信;当网口连接到百兆以太网时,FPGA 通过 MII 总线和 PHY 芯片进行数据通信。

注解

这里的千兆以太网和百兆以太网,还应根据具体电脑配置是否支持千兆以太网来判断,不过目前大部分电脑已支持千兆网口。

FPGA 通过 MDI/MDIO 管理接口来配置或读取 PHY 芯片内部的寄存器。


FPGA如何实现

上面讲到,FPGA中的芯片会根据 Link 的具体是千兆还是百兆自动选择,所以在千兆通信或百兆通信,引脚触发是不一样的。

  1. 在千兆的 GMII 通信模式下,发送数据时,发送时钟为125 MhzGTXC 信号,数据有效信号为 TXEN,;接收数据时,接收时钟为125 Mhz 的RXC信号,数据有效信号为 RXDV
  2. 在百兆的 MII 通信模式下,发送数据时,发送时钟为25 MhzTXC 信号,数据有效信号为 TXEN,;接收数据时,接收时钟为25 Mhz 的RXC信号,数据有效信号为 RXDV

更多关于 GMIIMII 通信模式请参考: MII、GMII接口详细介绍

verilog实现

因为本节实现的功能主要是 FPGAPC 利用 UDP 协议进行单向的数据传输 (PC 发,FPGA 收)。 所以在 verilog 代码,项目主要由以下几个模块构成:

  1. 顶层模块 —- 例化其他子模块
  2. UDP 接收模块 —- 接收由 PC 发送的数据
  3. CRC 校验模块 —- 对接收的数据进行错误校验,如发现错误就抛弃数据包
  4. UDP 测试模块 —- 进行代码测试

具体的代码,用户手册中有具体给出,这里就不一一列举。

验证接收

如何验证是否接收到,这里需要用到工具–网络调试助手