高速采集卡FPGA设计方案及代码

目录

简介

设计指标

FPGA架构设计

时钟树

复位树

数据流

上位机通信方案

通信协议

详细模块设计方案

系统时钟

系统复位

系统参数

模拟前端配置

触发

[Ø 外触发](#Ø 外触发)

[Ø 通道触发](#Ø 通道触发)

ADC算法

DMA控制

远程升级方案

测试方案


简介

款高速数字化仪,采用高速大容量数据缓存和高速数据交换技术,适用于高速、瞬态信号的精确捕获,可用于构建多通道、高精度、同步采集系统。高速采集卡是一类用于实现高采样率、高精度信号捕获的专业硬件,广泛应用于雷达、机器视觉、自动驾驶、医疗成像等领域。根据技术特性和应用场景,可划分为高速数据采集卡和高速图像采集卡两大类型。

设计指标

本产品作为一款PCIe采集卡,主要实现的功能为双通道模拟信号采集和示波。模拟信号采集通常使用高速ADC转换,由于采样率高、数据量大,因此需要使用Jesd204b通信协议,并将ADC数据存储在DDR中。对于示波功能,是将ADC采集的数据传送到CPU端进行UI显示,针对当前需求的带宽吞吐量,采用PCIe4.0 x8模式进行传输。基于以上需求,因此FPGA使用Xilinx公司UltraScale系列,型号:Xcku040

FPGA架构设计

固件实现架构如图所示,双通道模拟信号经过各自前端电路后,进入ADC中,ADC通过Jesd204B协议总线上传至FPGA。FPGA内部实现了模拟前端控制、触发处理、算法处理、数据的储存和转发以及其他控制。

时钟树

固件中系统时钟树主要分为3部分:

  1. 系统时钟树
  1. ADC时钟树
  1. PCIe时钟树

复位树

固件中复位树主要分为3部分:

  1. 系统复位

  2. ADC复位

  3. PCIe复位

每个时钟均有单独的复位信号,其复位树基本和时钟树一致。每个复位均采用异步复位,同步释放准则。

数据流

固件整体数据流如下所示:

上位机通信方案

FPGA与上位机通过PCIe总线连接,FPGA端使用XDMA ip实现对外总线接口。该总线接口框图如下所示:

该ip中共有三条总线,其中:

l axi lite:上位机通过该接口实现FPGA内部参数设置和回读。

l axi bypass:用于上位机索引表查询

l axi dma:用于上位机数据读取。

注:以上三条总线均属于业内标准总线,协议请参考

通信协议

Ø 寄存器配置协议

寄存器是通过axi lite接口配置,即常规的寄存器读写,没有额外的协议封装。

Ø 索引表协议

索引表用于表述当前固件数据写状态,CPU通过bypass接口读取索引表,判读是否有新数据。索引表是一个4096深度的BRAM,数据位宽为128bit,索引表数据格式如下所示:

|-----|------------|-------------|------------------------|
| No. | Bits | Function | Note |
| 1 | 127:96 | rx_cnt | 接收到的字节数 |
| 2 | 95:94 | chnum | 通道编号 通道1:0 通道2:1 |
| 3 | 94:65 | ddr_wr_addr | ddr写入地址,地址每次累加0x400000 |
| 4 | 64:32 | block_cnt | 写一次索引表,该值加1 |
| 5 | 31:0 | Rsv | 全0 |
| 6 | 1:0 | chnum | 通道编号 通道1:0 通道2:1 |

详细模块设计方案

系统时钟

系统时钟模块主要是产生50MHz和100MHz的工作时钟,用于配置前端模拟电路。其时钟树参考系统时钟树章节。

系统复位

固件中不同的模块可能存在不同的工作时钟,这些时钟在相位和频率上基本各有不同,因此在设计中需要考虑不同时钟域下的复位。复位信号分为同步复位和异步复位,不同的复位方式存在各自的优缺点。

为了克服同步复位和异步复位各自的缺点,本设计采用异步复位,同步释放的准则。异步复位,同步释放就是指在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步,既可以解决亚稳态,又可以减少逻辑资源。

系统参数

系统参数模块的输入是一个系统配置总线,该总线来源于PCIe的AXI-Lite总线,输出是不同的配置参数和有效标志。每个参数都有对应的寄存器,详细请参考DAQ寄存器手册。

模拟前端配置

模拟前端配置主要是配置继电器、DAC、VGA等一些参数,该部分的详细配置方法请参考各自芯片手册。

JESD204B总线控制

JESD204B总线作为高速数据转换器首选数字接口,与传统LVDS接口相比,该接口在传输带宽上有很大的优势。本固件中使用Jesd204b接口作为ADC数据接口,内部控制如下所示:

图中Sync和Ref模块用于产生同步和参考信号,该信号连接至ADC器件。ADC Reference Clock是与ADC Core时钟同源的参考时钟,250MHz。

触发

触发处理是产品一个核心功能。触发主要分为外触发、通道触发、软触发3种,下面将对每个触发一一介绍。

Ø 外触发

外触发即使用外部触发方式进行数据采样。外触发模块主要分为:TDC测量、TDC辅助测量、TDC测量结果转换、ADC触发处理。设计框图如下所示:

下面介绍每个单独模块的功能:

IBUFDS模块:外部触发输入是一个差分信号,经过IBUFDS后转成单端信号。

TDC Measure:由于外部触发输入是一个异步信号,因此会与采样时钟存在抖动问题,使用TDC测量模块,可以测出外部触发沿与测量时钟沿之间的抖动关系,以便后续进行数据补偿。

TDC Auxiliary Measure:该模块是一个辅助测量模块,主要是解决TDC Measure测量存在的问题。

TDC Result Convert:该模块是将两个TDC测量结果进行转换,方便后续采样点数补偿。

ADC Data Process:该模块产生数据触发有效信号,并对TDC测量结果进行采样点补偿。

Ø 通道触发

通道触发是类似电平触发的概念,即主控端设置一个触发电平值,当采样信号的电平值大于(上升沿触发模式)或小于(下降沿触发模式)设置的触发电平值时,触发新的采样。由于被采样信号频率的不同,触发点位置的电平值会存在抖动,针对该问题,采用差值算法进行差值处理,该部分的实现方案尚在理论探讨中。

Ø 软触发

由软件下发的一个触发指令,再内部产生一个触发信号

ADC算法

ADC算法主要实现3种算法:累加算法、NSA+,NSA-。

Ø 累加算法

累加算法顾名思义将每个trigger对应点累加,达到累加次数后,再上传至CPU。累加算法点数为0~100Ksa,即100*1024个点;累加次数为0~65536。

Ø NSA+

NSA(Nosie Suppression Algorithm)中文含义噪声抑制算法,如下所示:

当NSA+算法打开时,CPU将设置噪声抑制基线,对于ADC采集到的信号做如下处理,记输入信号为S, NSA+ Level为NSL,输出为R:

Ø NSA-

NSA-和NSA+类似,只是针对的输入信号不同,处理的方式不同。如下所示:

当NSA-算法打开时,CPU将设置噪声抑制基线,对于ADC采集到的信号做如下处理,记输入信号为S, NSA- Level为NSL,输出为R:

DMA控制

DMA控制主要完成ADC数据的存储和发送,如下所示。

当ADC有数据时,会启动DDR写操作,将数据写入DDR中;写入的同时会记录写入的地址和长度,CPU采用查询模式查询索引表,进行数据的判读是否有新数据;当有新数据时,使用DMA操作读取数据。

远程升级方案

远程升级方案采用双镜像方案,实现方案如下所示(仅作为示意图):

图中Golden image为出厂时固化镜像文件,Update image为用户远程更新镜像文件。

FPGA上电启动时,首先会加载Golden image,在加载过程中,判断该image中某个标志位,该标志位存在时,即跳转加载Update image;当不存在时,会继续加载Golden image。当Update image不存在或者出错时,FPGA会自动跳转至Golden image继续加载。

比特流加密方案(FPGA)

该点需求暂时不是必要,因此暂未实现,后续再补充方案。

固件风险点分析

根据现有的方案分析,固件存在风险点主要是以下几个方面:

  1. 外触发抖动,TDC沿临界测量结果不稳定,导致TDC补偿存在问题。

  2. 由于累加算法和跨时钟域需要大量BRAM,因此FPGA内部Block RAM可能存在资源紧张情况。

  3. 通道触发插值算法实现,该部分尚未调研和实现,可能是一个风险点。

测试方案

描述固件的功能及性能测试方案,包括(通信连接、寄存器读写、数据流稳定性、板载硬件外设如时钟芯片、DDR等速率测试)

源代码

可以私信进行沟通

相关推荐
仲南音1 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner2 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20202 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子3 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun4 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun4 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议