当前位置: 首页 > web >正文

高速采集卡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) 系统时钟树

2) ADC时钟树

3) 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等速率测试)

源代码

可以私信进行沟通

http://www.xdnf.cn/news/16533.html

相关文章:

  • 【测试报告】博客系统(Java+Selenium+Jmeter自动化测试)
  • maven命令详解
  • Element表格单元格类名动态设置
  • 可控、安全、可集成:安防RTSP|RTMP视频播放模块工程实践参考
  • Android基础(一) 运行HelloWorld
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipywidgets’问题
  • 区块链共识机制与联邦学习
  • 《杜甫传》读书笔记与经典摘要(三)流亡与走向人民
  • Java面试题及详细答案120道之(081-100)
  • 电商项目_核心业务_数据归档
  • 计算机网络:(十二)传输层(上)运输层协议概述
  • 【测试报告】玄机抽奖系统(Java+Selenium+Jmeter自动化测试)
  • KNN 算法中的各种距离:从原理到应用
  • PandasAI连接LLM进行智能数据分析
  • Tkinter美化 - 告别土味Python GUI
  • 医疗AI语义潜空间分析研究:进展与应用
  • 2507C++,APC可以干的活
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-138节(MySQL的综合案例)
  • 记录一次薛定谔bug
  • SpringAI入门及浅实践,实战 Spring‎ AI 调用大模型、提示词工程、对话记忆、Adv‎isor 的使用
  • goland编写go语言导入自定义包出现: package xxx is not in GOROOT (/xxx/xxx) 的解决方案
  • red靶机
  • zabbix-agent静默安装
  • AI编程自动化与算法优化实践指南
  • Oracle 19C RU 19.28 升级和安装
  • Spring Cloud 详解与搭建全攻略
  • MySQL的底层原理--InnoDB数据页结构
  • Java实现大根堆与小根堆详解
  • 53. 最大子数组和
  • 在 Windows 系统中实现 WinToGo 的 VHDX 文件切换使用的常见方法