国产FPGA(紫光同创)—— 数据采集及千兆以太网传输(二)

科研需要,使用国产FPGA(紫光PLG50H)实现数据采集及千兆以太网传输。总体流程如图所示

 数据采集完成后,第二部分就需要千兆以太网实现数据传输。

一、硬件部分

开发板上通过Realtek RTL8211EG 以太网 PHY 芯片为用户提供网络通信服务。 RTL8211EG 芯片支持10/100/1000 Mbps 网络传输速率,通过 RGMII 接口跟 FPGA 进行数据通信。RTL8211EG支持MDI/MDX自适应,各种速度自适应,Master/Slave 自适应,支持 MDIO 总线进行 PHY 的寄存器管理。

我们使用的千兆以太网进行数据的传输,当网络连接到千兆以太网时,FPGA 和 PHY 芯片RTL8211EG的数据传输时通过RGMII 总线通信,传输时钟为 125Mhz,数据在时钟的上升沿和下降沿采样。 接收时钟E_RXC 由 PHY 芯片提供,发送时钟 E_GTXC 由 FPGA 提供,数据在时钟的上升沿采样。下图为FPGA与以太网PFY芯片连接示意图:

国产FPGA(紫光同创)—— 数据采集及千兆以太网传输(二)_第1张图片

二、UDP协议

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

简单介绍下以太网帧格式,以UDP协议为例

国产FPGA(紫光同创)—— 数据采集及千兆以太网传输(二)_第2张图片

从图中可以看到,以太网帧包括以太网首部,IP首部,UDP首部,应用数据和FCS(帧校验序列,常用CRC校验)等 。具体每部分的详细讲解可百度自行查询,资料非常多。

在整个过程中,用户关心的就是应用数据这一部分共46~1500字节,也即我们需要通过千兆以太网发送的数据。

三、程序部分

本人在此部分设计的思想就是,将采集的数据写入FIFO中,再去判断FIFO中数据的大小,若达到1024字节即开始发送。

在此部分参考的程序是黑金的千兆以太网传输的代码。在其中加上了不同位宽的异步FIFO(写入时钟为ADC的采样率时钟,位宽为32位(原16位数添加通道号,时间戳等,可自行设计);读取时钟位125MHz,位宽为8位)。

fifo fifo_inst(
    .wr_clk(clk_fifo),
    .wr_rst(!rst_n),
    .wr_en(start),
    .wr_data(data[num0]),
    .wr_full(),
    .wr_water_level(),
    .almost_full(),

    .rd_clk(gmii_rx_clk),
    .rd_rst(!rst_n),
    .rd_en(fifo_rd_en),
    .rd_data(fifo_data),
    .rd_empty(),
    .rd_water_level(fifo_data_count),
    .almost_empty());

clk_fifo:与采集的几个通道及采样率有关

start:设计的一个按钮,当按下按钮时开始写入FIFO,达到控制传输的目的

data[num0]:写入的数据,num0即为第几个通道(32位)

gmii_rx_clk:以太网传输时钟125MHz

fifo_rd_en:当写入数据达到1024字节时开始使能(发送数据的字节数46~1500字节)

fifo_data:存取的数据(8位)

fifo_data_count:数据的数量(由此判断是否达到1024字节)

在千兆以太网传输实际应用中重点就是这个FIFO的设计,其余的部分因为已经很成熟了不需要我么自己去设计,看懂就行,多看几遍代码。其余部分厂商已经写的很好了,我在这块主要就是说一说在实际使用中我自己的思路,详细部分可参考:

【紫光同创国产FPGA教程】【第二十三章】千兆以太网传输实验_ALINX技术博客的博客-CSDN博客

至此即可完成千兆以太网的数据传输,有问题的可以评论,我会及时回复。

你可能感兴趣的:(FPGA,紫光同创,fpga开发)