基于FPGA实现的UDP应用调试记录

1.1 项目简介

项目的基本流程是用户使用上位机通过UDP包下发数据到FPGA。FPGA将数据分批次传输到用户的算法模块。待算法模块处理完成后,通过UDP包上送至上位机。应用平台基于优数科技的PCIe-404信号处理卡,采用国产的690T FPGA芯片。

1.2 项目架构

1.2.1 基本流程

  1. 上位机下发数据

(1) 上位机下发基础配置信息

(2) 上位机下发数据信息

  1. 数据到达FPGA侧,FPGA进行处理

(1) FPGA将配置信息存入cfg_interface

(2) FPGA将数据内容写入DDR0

(3) 写入DDR0后,FPGA向上位机发送写DDR0完成标志

  1. 上位机收到返回的写DDR0完成标志,下发配置信息。从DDR0读取数据至用户算法模块

(1) FPGA按帧读取数据至用户算法模块

(2) 算法模块处理1帧完成后,处理后的信息写入DDR1

(3) 用户处理完成1帧完成后,FPGA才允许读下一帧到用户算法模块

  1. 用户算法模块将所有内容处理完成,FPGA向上位机返回写DDR1完成标志

  2. 上位机收到写DDR1完成标志后,下发读DDR1配置信息

  3. FPGA收到读DDR1配置信息,发起读DDR1命令,传送至上位机。

1.3 调试问题

1.3.1 上位机丢包

发送200M数据,在上位机侧QT侧发现少收到数据。用wireshark抓包发现丢包以发送至PC端,进一步开启wireshark的checksum校验,发现丢包是由于checksum错误导致的。

进一步分析,发现checksum错误时,我计算的值始终比正确值大1.

分析逻辑代码,发现由checksum计算在边界处少加1导致的。修改如下:

1.3.2 FPGA侧丢包

在PCIE404的回环测试实验中,发现上位机收到报文存在异常。用wireshark抓包发现,这些报文的确正常发送了。进一步分析,发现当下发时,如果1个udp包后面紧跟着1个arp包,那么回环后收到的数据大概率是错的。

分析代码,发现FPGA内时根据mac地址确定是否为需要处理的udp包的。此逻辑在大压力下存在异常,当两个包相邻近时,发现会存在mac地址与原数据不匹配的现象。

因此,在顶层利用FIFO缓存相关mac信息,FIFO预读1拍,确保时序对应正确。

1.3.3 算法模块连续性

用户要求输入算法模块的数据必须连续,不能中断。

初步设想如下:通过突发读DDR来保证连续与带宽平衡。例如,DDR接口位宽为512bit,用户接口位宽为128bit.突发为16。那我只需要每64个周期发送1个突发为16的ddr读命令就可以保证连续了。

但是,实际测试发现,DDR返回的数据有快有慢,即使我调整到每16个周期发送1个突发为16的ddr读命令。仍概率性的不连.所以,利用周期性发送突发读命令来保证数据连续是不现实的。因此,修改为方案2.

方案2如下:必须存在1个FIFO,将一次性进入用户的数据进行缓存。缓存完毕之后,在连续向用户发送,这样就能保证连续性了。

此FIFO可以根据用户的数据情况进行调整。

1.3.4 大小端问题

通过千兆以太网下发到FPGA的数据为小端模式。需要在小端模式下进一步调整,适应用户算法模块的数据

1.3.5 MDIO控制

针对不同的板卡,需要控制千兆以太网PHY的不同的rx_delay和tx_delay。可以在一定程度上解决FPGA侧或上位机侧的误码问题。当前版本支持通过axi_lite接口取控制以太网phy的rxdelay,txdelay。

1.4 优化点

1.4.1 调试接口

补充了关键模块的输入输出计数,便于分析数据流走向和定位问题。如下,通过trigger_cnt读取模块计数。后续可通过继续优化,通过上位机读取fpga内数据状态和计数。

1.4.2 反压逻辑

原架构考虑了普通流量的情况,部分FIFO没有反压信号。未考虑大压力下FIFO可能会挂死。对此处进行优化。确保反压控制逻辑正确性。

相关推荐
s91236010134 分钟前
FPGA眼图
fpga开发
北京青翼科技1 小时前
【PCIe732】青翼PCIe采集卡-优质光纤卡- PCIe接口-万兆光纤卡
图像处理·人工智能·fpga开发·智能硬件·嵌入式实时数据库
minglie12 小时前
verilog信号命名规范
fpga开发
XINVRY-FPGA5 小时前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
南檐巷上学10 小时前
基于FPGA的音频信号监测识别系统
fpga开发·音频·verilog·fpga·傅立叶分析·fft·快速傅里叶变换
Aaron158817 小时前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
碎碎思1 天前
当 FPGA 遇见怀旧计算:486 与 Atari ST 的硬件级重生
fpga开发
数字芯片实验室1 天前
怎么定义芯片上的异步时钟?
单片机·嵌入式硬件·fpga开发
unicrom_深圳市由你创科技1 天前
基于ARM+DSP+FPGA异构计算架构的高速ADC采集卡定制方案
arm开发·fpga开发
北京青翼科技1 天前
高速采集卡丨AD 采集丨 多通道数据采集卡丨高速数据采集系统丨青翼科技FMC 子卡
图像处理·人工智能·fpga开发·信号处理·智能硬件