基于FPGA多通道以太网实时同步采集系统 FPGA: Vivado工程 AD芯片:AD7606...

基于FPGA多通道以太网实时同步采集系统 FPGA: Vivado工程 AD芯片:AD7606 传输协议:UDP 上位机开发软件:QT5.12 AD7606八通道同步采集,最高采样率200KHz,上位机发送指令开始采集,上位机通过千兆以太网udp进行数据传输 QT上位机软件:udp上位机接收数据实时绘制所采集的数据波形并且可以存储数据(.txt格式) 整个工程系统已验证

一、模块概述

在 AD7606 UDP FPGA 项目(基于 Vivado 2018.3 开发,目标器件为 xc7a35tfgg484-2)中,adcdatafifo模块是衔接 AD7606 ADC 数据采集与后续 UDP 数据传输的核心缓冲单元。其核心作用是解决 ADC 采集时钟与 UDP 传输时钟可能存在的异步问题,避免数据丢失或传输拥塞,同时实现 16 位采集数据到 32 位传输数据的格式转换,为后续以太网数据封装与发送提供适配的数据格式,是整个数据采集传输链路中保障数据完整性与时序稳定性的关键环节。

基于FPGA多通道以太网实时同步采集系统 FPGA: Vivado工程 AD芯片:AD7606 传输协议:UDP 上位机开发软件:QT5.12 AD7606八通道同步采集,最高采样率200KHz,上位机发送指令开始采集,上位机通过千兆以太网udp进行数据传输 QT上位机软件:udp上位机接收数据实时绘制所采集的数据波形并且可以存储数据(.txt格式) 整个工程系统已验证

该模块基于 Xilinx FIFO Generator IP 核(版本 v13.2.3)构建,生成的功能仿真网表文件为adcdatafifosimnetlist.v,仅用于功能验证,不可直接用于综合或比特流生成,也不支持 SDF 注释仿真。

二、核心功能与技术特性

(一)异步时钟域数据缓冲

模块采用异步 FIFO 架构,支持独立的写时钟(wrclk)和读时钟(rdclk),两者均配置为 100MHz(通过接口参数FREQ_HZ 100000000定义),可有效隔离 ADC 采集时序域与 UDP 传输时序域,解决跨时钟域数据传输中的亚稳态问题。

  • 写时钟域:与 AD7606 ADC 采集时钟同步,负责将 16 位 ADC 原始数据写入 FIFO。
  • 读时钟域:与 UDP 传输模块(如以太网 MAC 控制器)时钟同步,负责从 FIFO 中读取 32 位数据并传递给后续传输链路。

(二)数据位宽转换

模块实现了16 位输入到 32 位输出的数据位宽转换,适配不同模块的数据接口需求:

  • 输入数据(din):16 位宽,对应 AD7606 ADC 单次采集的原始数据(如单通道模拟量转换后的数字值)。
  • 输出数据(dout):32 位宽,将两个 16 位 ADC 数据拼接为一个 32 位数据(具体拼接顺序需结合顶层逻辑,通常为高 16 位和低 16 位组合),适配 UDP 数据包的 32 位数据总线宽度,减少数据传输次数,提升传输效率。

(三)FIFO 状态监控与控制

模块提供完整的 FIFO 状态信号,支持上层逻辑对 FIFO 读写过程进行精准控制,避免数据溢出或空读错误:

信号名称方向位宽功能描述
full输出1 位FIFO 写满状态指示,高电平表示 FIFO 已无法写入新数据,此时需暂停 ADC 数据写入,防止数据溢出
empty输出1 位FIFO 读空状态指示,高电平表示 FIFO 内无数据可读取,此时需暂停 UDP 数据读取,防止空读
wrdatacount输出14 位写时钟域下 FIFO 内已存储的数据量,用于上层逻辑判断 FIFO 剩余空间,避免接近满状态时仍持续写入
rddatacount输出13 位读时钟域下 FIFO 内可读取的数据量,用于上层逻辑判断 FIFO 数据充足性,确保 UDP 传输模块有足够数据可发送

(四)跨时钟域数据同步

为确保异步时钟域下状态信号(如数据计数)的准确性,模块集成了XPMCDCGRAY 跨时钟域同步模块,采用格雷码编码实现数据同步:

  • 格雷码特性:相邻数值仅一位二进制位变化,可有效避免二进制计数在跨时钟域传输时因多位同时变化导致的亚稳态问题。
  • 同步流程:写时钟域的wrdatacount和读时钟域的rddatacount先转换为格雷码,经两级寄存器同步到目标时钟域后,再转换回二进制码,确保状态信号在异步时钟域下的稳定性与准确性。

三、硬件资源与参数配置

(一)FIFO 存储配置

模块基于 Xilinx 7 系列 FPGA 的 Block RAM 资源构建,核心参数配置如下:

参数名称配置值功能说明
写深度(CWRDEPTH16384写时钟域下 FIFO 可存储的最大数据量(16 位数据),总存储容量为 16384×16bit = 32KB
读深度(CRDDEPTH8192读时钟域下 FIFO 可读取的最大数据量(32 位数据),与写深度匹配(8192×32bit = 32KB)
存储类型(CMEMORYTYPE1采用 Block RAM 存储(0 为分布式 RAM,1 为 Block RAM),适合大容量、高速度的缓冲场景
写响应 latency(CWRRESPONSE_LATENCY1写操作完成后,状态信号(如wrdatacount)更新的延迟周期,确保状态反馈的实时性

(二)时钟与复位配置

  • 时钟相位(PHASE):写时钟与读时钟相位均配置为 0.000,确保时钟信号无额外相位偏移,简化时序约束。
  • 复位同步(CENABLERST_SYNC):使能复位同步功能(配置为 1),通过同步寄存器将复位信号同步到目标时钟域,避免异步复位导致的逻辑不稳定。
  • 复位类型:无独立读写复位(CHASRDRSTCHASWRRST均为 0),采用全局复位信号,简化复位控制逻辑。

四、数据流程

(一)数据写入流程

  1. ADC 数据输入:AD7606 ADC 完成一次模拟量采集后,输出 16 位数字数据到din接口。
  2. 写使能判断:上层逻辑检测full信号,若为低电平(FIFO 未写满),则将wr_en信号置高,允许数据写入。
  3. 数据写入 FIFO:在wrclk上升沿,16 位数据din被写入 FIFO 内部存储单元,同时wrdata_count自动加 1,反映当前 FIFO 内数据量变化。
  4. 写满保护:若full信号为高电平(FIFO 已写满),上层逻辑需立即拉低wr_en,暂停数据写入,防止后续 ADC 数据丢失。

(二)数据读取流程

  1. UDP 传输请求:UDP 传输模块(如以太网发送逻辑)准备好接收数据时,向 FIFO 发送读请求。
  2. 读使能判断:上层逻辑检测empty信号,若为低电平(FIFO 非空),则将rd_en信号置高,允许数据读取。
  3. 数据读取与格式转换:在rdclk上升沿,FIFO 内的两个 16 位数据拼接为 32 位数据,通过dout接口输出到 UDP 传输模块,同时rddata_count自动减 1。
  4. 读空保护:若empty信号为高电平(FIFO 已读空),上层逻辑需拉低rd_en,暂停数据读取,避免 UDP 模块读取无效数据。

五、关键子模块功能

(一)FIFO 核心实例(`decalper_eb_ot_sdeen_pot_pi_dehcac_xnilix_fifo_generator_v13_2_3`)

作为模块的核心,该子模块实现 FIFO 的数据存储、读写控制与状态生成:

  • 集成 Block RAM 控制器,管理数据的写入、存储与读取。
  • 生成fullemptywrdatacountrddatacount等状态信号,反馈 FIFO 实时状态。
  • 支持异步时钟域下的读写操作,通过内部时序逻辑隔离不同时钟域的干扰。

(二)跨时钟域同步模块(`xpm_cdc_gray`)

该模块解决异步时钟域下数据计数信号的同步问题,分为两个参数化实例:

  1. 14 位同步实例:用于wrdatacount(14 位)从写时钟域同步到读时钟域。
  2. 13 位同步实例:用于rddatacount(13 位)从读时钟域同步到写时钟域。
  • 同步流程:输入二进制数据 → 格雷码编码 → 两级寄存器同步 → 格雷码解码 → 输出同步后的二进制数据。
  • 关键特性:采用ASYNC_REG属性标记同步寄存器,告知 Vivado 工具进行时序优化,降低亚稳态风险。

(三)Block RAM 控制模块(`blk_mem_gen_prim_wrapper` 系列)

基于 Xilinx 7 系列 FPGA 的RAMB36E1原语构建,实现 FIFO 的物理存储:

  • 支持双端口操作(独立的读写端口),匹配异步 FIFO 的读写时钟需求。
  • 配置读写宽度与深度,适配 16 位输入、32 位输出的位宽转换需求。
  • 集成 ECC 错误校验功能(当前配置为禁用,ENECCREADENECCWRITE均为FALSE),可根据需求启用以提升数据存储可靠性。

六、模块接口与上层逻辑交互

(一)接口定义

接口名称方向位宽交互模块功能描述
wr_clk输入1 位AD7606 采集模块写时钟,与 ADC 采集时钟同步(100MHz)
rd_clk输入1 位UDP 传输模块读时钟,与 UDP 传输时钟同步(100MHz)
din输入16 位AD7606 采集模块ADC 采集的 16 位原始数据
wr_en输入1 位上层控制逻辑FIFO 写使能,高电平允许数据写入
rd_en输入1 位上层控制逻辑FIFO 读使能,高电平允许数据读取
dout输出32 位UDP 传输模块32 位拼接数据,用于 UDP 数据包封装
full输出1 位上层控制逻辑FIFO 写满状态,用于暂停 ADC 数据写入
empty输出1 位上层控制逻辑FIFO 读空状态,用于暂停 UDP 数据读取
wrdatacount输出14 位上层控制逻辑写时钟域数据计数,用于监控 FIFO 剩余空间
rddatacount输出13 位上层控制逻辑读时钟域数据计数,用于监控 FIFO 可读取数据量

(二)与上层逻辑的交互逻辑

  1. AD7606 采集模块
    - 采集模块在每次完成 ADC 转换后,先检测full信号;
    - 若full为低,置高wren并输出din数据,在wrclk上升沿完成写入;
    - 若full为高,暂停采集或缓存数据(需结合 ADC 模块自身缓存能力),避免数据丢失。
  1. UDP 传输模块
    - 传输模块在准备发送数据包时,检测empty信号和rddatacount
    - 若empty为低且rddatacount满足 UDP 数据包长度需求(如至少 1 个 32 位数据),置高rden,在rdclk上升沿读取dout数据;
    - 读取的数据经 UDP 协议封装后,通过以太网发送到上位机。
  1. 上层控制逻辑
    - 基于wrdatacountrddatacount实现 FIFO 流量控制,例如当wrdatacount超过阈值时,提前降低 ADC 采集速率;
    - 监控fullempty信号,当出现异常(如持续fullempty)时,触发告警或复位 FIFO,确保系统稳定运行。

七、仿真与验证要点

由于该模块为功能仿真网表,需通过 Vivado Simulator 进行功能验证,核心验证场景包括:

  1. 正常读写场景:配置 100MHz 读写时钟,持续写入 16 位数据,同时读取 32 位数据,验证数据完整性(拼接顺序正确)和状态信号(fullempty、数据计数)的准确性。
  2. 写满保护场景:持续写入数据直至full置高,验证此时wren无效,无数据溢出,且wrdata_count保持最大值(16383)。
  3. 读空保护场景:持续读取数据直至empty置高,验证此时rden无效,无空读错误,且rddata_count保持最小值(0)。
  4. 异步时钟场景:调整读写时钟频率(如写时钟 100MHz、读时钟 125MHz),验证跨时钟域同步模块的有效性,确保数据计数信号无错误。
  5. 复位场景:触发全局复位,验证 FIFO 状态信号(full低、empty高、数据计数 0)恢复正常,无残留数据。

八、总结与应用建议

adcdatafifo模块作为 AD7606 UDP FPGA 项目的数据缓冲核心,其核心价值在于解决异步时钟域数据传输问题与数据位宽适配,保障 ADC 采集数据的完整性与 UDP 传输的稳定性。在实际项目应用中,需注意以下几点:

  1. 时序约束:尽管模块为仿真网表,但实际项目中需对 FIFO 的读写时钟、数据信号进行时序约束,确保时钟抖动、建立/保持时间满足 FPGA 器件要求。
  2. 参数调整:若 ADC 采集速率或 UDP 传输速率变化,需重新配置 FIFO 读写深度(如提高采集速率时增大CWRDEPTH),避免 FIFO 频繁满/空导致数据传输中断。
  3. 错误处理:上层逻辑需完善full/empty异常处理机制,例如full持续高电平时,可暂停 ADC 采集并向上位机发送告警信息,便于问题定位。
  4. 性能优化:若需进一步提升传输效率,可结合 FIFO 的 “First Word Fall Through”(首字直通)模式,减少数据读取延迟,但需注意该模式对 FIFO 状态信号的影响。

通过合理配置与上层逻辑配合,该模块可稳定支撑 AD7606 ADC 数据的采集与 UDP 传输,为整个项目的可靠性提供关键保障。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1178784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js用os.tmpdir高效获取临时目录

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Node.js高效获取临时目录:os.tmpdir()的深度实践与优化策略目录Node.js高效获取临时目录:os.tmpdir()的深…

数字孪生系统(B/S 架构)全栈技术方案 + 学习路线 + 开源案例(纯开源框架 / 工具,适配 Python/.NET/Java)

数字孪生的 B/S 架构核心是「浏览器端 3D 可视化渲染 + 后端服务实时数据驱动 + 物理设备 / 业务系统数据接入 + 高精度三维建模」,所有推荐内容均为开源、无商业授权限制、工业级主流技术,无冷门工具 / 框架,学完即…

计算机小程序毕设实战-基于springboot的妈宝小程序的设计与实现 宝宝成长记录分享系统 母婴商城系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

ChromeStandalone_58.0.3029.110使用步骤详解(附安装与设置教程)

ChromeStandalone_58.0.3029.110_Setup.exe 是 Google Chrome 58 版本的独立安装包(离线安装版),不用联网就能装。 这个版本比较老(2017 年的),适合一些老项目、特定环境,或者电脑配置不高的情…

【杂谈】你完全可以用一年的时间变强

【杂谈】你完全可以用一年的时间变强健康管理 ‌作息调整‌:保持7-8小时睡眠,避免久坐并每1小时活动身体。‌‌ ‌饮食优化‌:减少高糖高油摄入,晨起空腹饮水促进代谢。‌‌ ‌运动计划‌:每周3-5次锻炼,结合有氧…

【硬件测试】基于FPGA的16QAM软解调+卷积编码Viterbi译码系统开发,包含帧同步,信道,误码统计,可设置SNR

1.引言 基于FPGA的16QAM软解调+卷积编码Viterbi译码通信系统开发,包含帧同步,高斯信道,误码统计,可设置SNR。系统包括16QAM调制,16QAM软解调模块,217卷积编码模块,维特比译码模块,AWGN信道模块,误码统计模块,帧同…

机器学习基础 | KNN(K-近邻) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于 YOLOv8 的铁轨旁危险行为识别系统 [目标检测完整源码]

:基于 YOLOv8 的铁轨旁危险行为识别系统完整落地方案 [目标检测完整源码] 一、问题背景:铁路场景下“人”的风险识别为何困难 铁路沿线属于高风险公共区域。在实际运行中,铁轨旁常出现行人 停留、坐卧、行走甚至睡觉 等不当行为&#xff0c…

强烈安利9个AI论文写作软件,专科生搞定毕业论文不求人!

强烈安利9个AI论文写作软件,专科生搞定毕业论文不求人! AI工具让论文写作不再难 在当今这个信息爆炸的时代,学术写作对很多专科生来说无疑是一项巨大的挑战。从选题到撰写,再到反复修改和降重,每一步都可能让人感到力不…

在JavaScript / HTML中,cloneNode()方法详细指南

在HTML中使用JavaScript的cloneNode()方法详细指南 cloneNode() 是JavaScript中用于复制DOM节点的方法。下面我将详细指导你如何使用这个方法,包括基本用法、参数选项和实际示例。 1. 基础概念 cloneNode() 方法创建一个节点的副本,可以返回一个与指定节…

SpringAI实践-创建MCP Server

langchain4j是没法开发mcp server的,springai可以, 开发一个获取当前任意时区的时间的MCP Server: 1、初始化一个springboot项目 2、引入<dependency> <groupId>org.springframework.ai</groupId&…

小程序毕设项目:基于springboot+微信小程序的城镇职工基本医保云上管理系统(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

React Native for OpenHarmony 实战:Button 按钮组件使用指南

React Native for OpenHarmony 实战&#xff1a;Button 按钮组件使用指南 摘要&#xff1a;本文深度解析React Native标准Button组件在OpenHarmony平台的实战应用&#xff0c;涵盖基础用法、样式定制、事件处理及平台适配要点。通过7个可运行代码示例、2个对比表格和3个架构图…

本周学习小结

本次学习主要学习了动态内存分配的核心函数malloc、calloc、realloc和free头文件&#xff1a;所有动态内存函数都需要包含 <stdlib.h>1.malloc函数原型&#xff1a;void* malloc(size_t size)功能&#xff1a;在堆区申请一块大小为 size 字节的连续内存&#xff0c;返回起…

DocumentFormat.OpenXml 组件解析:构建现代化文档的四大支柱

DocumentFormat.OpenXml 组件解析&#xff1a;构建现代化文档的四大支柱 在当今数字化办公环境中&#xff0c;处理和管理文档已成为日常工作中的重要组成部分。对于.NET开发者而言&#xff0c;DocumentFormat.OpenXml库是一个强大且灵活的工具&#xff0c;可以让我们以编程方式…

微信小程序毕设项目推荐-基于小程序的位置服务的城市路线分享系统基于springboot位置服务的城市路线分享系统小程序【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

RL for LLM(large language model)

本文主要讲在LLM中RL的应用。 文章目录前言一、LLM模型论文解读1.1 kimi 1.51.2 Deepseek R11.3 S1二、深度解析GRPO2.1 推导GRPO总结前言 合成数据与model collapse 在介绍LLM中RL的应用前&#xff0c;先来讲一下LLM中的一些问题和技巧&#xff1b; 1&#xff09;介绍一下Nat…

2026年行业内靠谱的布袋除尘器直销厂家怎么选,通风阀门/通风蝶阀/除尘器花板/除尘器门盖,布袋除尘器实力厂家口碑排行榜 - 品牌推荐师

行业洞察:布袋除尘器市场进入技术驱动与全链服务竞争阶段 随着工业领域对超低排放、绿色生产的刚性需求提升,布袋除尘器作为核心环保设备,正从“单一产品竞争”转向“全链条服务+技术差异化”的双重竞争格局。2024年…

【毕业设计】基于微信小程序的育儿平台的设计与实现基于springboot的育儿妈宝小程序的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

小程序计算机毕设之基于微信小程序的城镇职工基本医保云上管理系统springboot+微信小程序的城镇职工基本医保云上管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…