PC与FPGA的以太网通信¶
预期目标¶
- FPGA 和 PC 通过 UDP 协议通信
- 数据传输为单项传输, PC 发送,FPGA 接收
- 发送的数据为 PC 端制备的随机数
通信方式¶
- PC 如何与 FPGA 的通信方式有很多中,根据 FPGA 的型号而定,就本项目所使用的 FPGA*(*AX530)而言,通信方式不外乎有以下几种:
- 利用USB的串口通信 ———— 速度在百兆左右
- 利用以太网的网口通信 ———— 速度有百兆和千兆两个量级。
注解
其中由传输协议又细分为 TCP 协议和 UDP 协议
TCP 协议需要使用多次握手确定双方的连接关系,是一种安全的通信方式,并且由于建立了通信双方的连接, 故传输的数据不会丢失,缺点是速度较 UDP 协议慢
UDP 协议是面向无连接的协议,即发送方只管发送信息,接收方只管接收信息。是一种适用于高速传输的场景中,例如:视频直播、网络游戏、聊天软件等都是利用了 UDP 协议。 它会存在一定的丢包率,不过由于传输速率很快,所以较少的丢包并不会影响整体。
UDP协议¶
注解
UDP 协议全称为(User Datagram Protocol),即用户数据报协议。UDP 协议是一种基本的、低延迟的数据报的通讯。数据报就是一种自带寻址信息,从发送端到接收端的数据包。 其常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。
更多关于 UDP 协议知识,请访问 UDP百科
基于本开发板的板上资源,通信协议采用 Ethernet UDP 通信协议,FPGA 通过 GMII 总线和开发板上的 Gigabit PHY 芯片通信,Gigabit PHY 芯片再把数据通过网线发送给 PC。 传输示意图如下:
在本开发板(AX530)中,采用 Realtek 千兆 GPHY 芯片 RTL8211E 来实现 千兆以太网数据通信。该芯片能够自动选择传输速率, 当网口连接到千兆以太网时,FPGA 通过 GMII 总线和 PHY 芯片进行数据通信;当网口连接到百兆以太网时,FPGA 通过 MII 总线和 PHY 芯片进行数据通信。
注解
这里的千兆以太网和百兆以太网,还应根据具体电脑配置是否支持千兆以太网来判断,不过目前大部分电脑已支持千兆网口。
FPGA 通过 MDI/MDIO 管理接口来配置或读取 PHY 芯片内部的寄存器。
FPGA如何实现¶
上面讲到,FPGA中的芯片会根据 Link 的具体是千兆还是百兆自动选择,所以在千兆通信或百兆通信,引脚触发是不一样的。
- 在千兆的 GMII 通信模式下,发送数据时,发送时钟为125 Mhz 的 GTXC 信号,数据有效信号为 TXEN,;接收数据时,接收时钟为125 Mhz 的RXC信号,数据有效信号为 RXDV
- 在百兆的 MII 通信模式下,发送数据时,发送时钟为25 Mhz 的 TXC 信号,数据有效信号为 TXEN,;接收数据时,接收时钟为25 Mhz 的RXC信号,数据有效信号为 RXDV
更多关于 GMII 和 MII 通信模式请参考: MII、GMII接口详细介绍
verilog实现¶
因为本节实现的功能主要是 FPGA 和 PC 利用 UDP 协议进行单向的数据传输 (PC 发,FPGA 收)。 所以在 verilog 代码,项目主要由以下几个模块构成:
- 顶层模块 —- 例化其他子模块
- UDP 接收模块 —- 接收由 PC 发送的数据
- CRC 校验模块 —- 对接收的数据进行错误校验,如发现错误就抛弃数据包
- UDP 测试模块 —- 进行代码测试
具体的代码,用户手册中有具体给出,这里就不一一列举。
验证接收¶
如何验证是否接收到,这里需要用到工具–网络调试助手