目录
FPGA采集AD7606转Aurora 8B10B传输,基于GTP高速收发器,提供2套工程源码和技术支持
FPGA采集AD7606转Aurora 8B10B传输
1、前言
Aurora 8B10B是啥?
Aurora 8B10B 是由Xilinx(现AMD)开发的轻量级链路层协议,用于FPGA间的高速点对点串行通信。它基于8B/10B编码方案,提供简化的数据封装和流控制机制,主要应用于需要低延迟、高可靠性传输的场景;
Aurora 8B10B核心作用如下:
1、高速数据传输:通过SerDes收发器实现Gbps级数据传输
2、简化通信协议:仅需基本流控制,无需复杂协议栈
3、可靠传输:内置CRC校验和错误检测机制
4、灵活扩展:支持通道绑定(多通道聚合)
Aurora 8B10B主要工程应用如下:
博主之前用Xilinx GTP收发器实现过Aurora 8B10B编解码,本博客用的则是Xilinx的标准集成Aurora 8B10B IP核,这两种方法都能实现Aurora 8B10B编解码,区别如下:
Xilinx GTP收发器 vs 标准集成Aurora 8B10B IP核对比如下:
1、用户数据接口不同;
GTP收发器实现过Aurora 8B10B用户数据接口为并行数据;
标准集成Aurora 8B10B IP核用户数据接口为AXI4-Stream流数据;
2、数据对齐不同
GTP收发器实现过Aurora 8B10B输出的数据没有对齐,需要用户自己写逻辑电路对齐;
标准集成Aurora 8B10B IP核输出的数据是经过内部处理后的对齐数据,用户无需自己写逻辑电路对齐;
3、设计难度不同
GTP收发器实现过Aurora 8B10B设计难度较大,需要对GTP高速收发器链路层和物理层有深刻理解,比如PCS和PMA;GTP预留的很多接口直接和底层协议挂钩,无论是配置难度还是使用难度都很大,对设计者技术要求较高;
标准集成Aurora 8B10B IP核则简单很多,无需理解高速收发器链路层和物理层,无论是配置难度还是使用难度都很小,对设计者技术要求较低;
工程概述
本设计使用Xilinx Artix7系列FPGA为平台,基于GTP高速收发器实现AD7606数据采集转Aurora 8B10B传输,旨在为读者提供一套精简版的、基于Aurora 8B10B编解码的AD数据收发架构;
ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,转换后的AD数据传输至FPGA,FPGA遵循AD7606数据输出时序采集AD数据,并输出8通道16位的AD数据,随后AD数据进入纯verilog代码实现的数据缓存模块,实现AD数据缓存和时钟域转换,当缓存到256个AD数据后再送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,并实现并串转换,经板载SFP光口输出;本设计采用简单的光口回环方式连接,即用光纤将SFP光口的收发两端直连;高速串行数据经SFP光口回环后进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,并输出AXI4-Stream数据流;我们在接收端添加了一个ILA观测AD数据,在ILA中设置为模拟波形模式即可完美还原接收到的ADC波形;针对市场主流需求,本博客设计并提供2套工程源码,具体如下:
现对上述2套工程源码做如下解释,方便读者理解:
工程源码1
开发板FPGA型号为Xilinx–Artix7–xc7a35tfgg484-2;ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,AD7606输出模式为串行模式,转换后的AD数据传输至FPGA,FPGA遵循AD7606数据输出时序采集AD数据,并输出8通道16位的AD数据,让后AD数据进入纯verilog代码实现的数据缓存模块,实现AD数据缓存和时钟域转换,当缓存到256个AD数据后再送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,并实现并串转换,经板载SFP光口输出;本设计采用简单的光口回环方式连接,即用光纤将SFP光口的收发两端直连;高速串行数据经SFP光口回环后进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,并输出AXI4-Stream数据流;我们在接收端添加了一个ILA观测AD数据,在ILA中设置为模拟波形模式即可完美还原接收到的ADC波形;
工程源码2
开发板FPGA型号为Xilinx–Artix7–xc7a35tfgg484-2;ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,AD7606输出模式为并行模式,转换后的AD数据传输至FPGA,FPGA遵循AD7606数据输出时序采集AD数据,并输出8通道16位的AD数据,让后AD数据进入纯verilog代码实现的数据缓存模块,实现AD数据缓存和时钟域转换,当缓存到256个AD数据后再送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,并实现并串转换,经板载SFP光口输出;本设计采用简单的光口回环方式连接,即用光纤将SFP光口的收发两端直连;高速串行数据经SFP光口回环后进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,并输出AXI4-Stream数据流;我们在接收端添加了一个ILA观测AD数据,在ILA中设置为模拟波形模式即可完美还原接收到的ADC波形;
本博客详细描述了FPGA采集AD7606转Aurora 8B10B传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往
我这里已有的 GT 高速接口解决方案
我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往
本设计的GTP高速收发器配置Aurora 8B10B方案
使用GTP高速收发器配置为Aurora 8B10B模式也可以实现和本设计类似的效果,只不过该方案设计难度更大,需要自己设计数据对齐电路,想挑战自我的读者,可以参考我之前发布的博客,链接如下:
点击直接前往
3、工程详细设计方案
工程设计原理框图
工程设计原理框图如下:
AD输入源
本设计使用示波器为AD输入源,示波器配置为AD正弦波,当然,你也可以使用其他ADC输入源;示波器通过BNC线缆连接至AD7606模块;
AD7606数据采集
AD7606数据手册解读
AD7606英文原版数据手册只有37页,但真正看懂的兄弟却很少,下面解读一下这个手册:
DAQ7606 是 16 位 8 通道同步采样模数数据采集系统(DAS)。
AD7606内置模拟输入箝位保护、二阶抗混叠滤波器、跟踪保持放大器、16位电荷再分配逐次逼近型ADC、灵活的数字滤波器、2.5V基准电压源、基准电压缓冲以及高速串行和并行接口。AD7606采用5V单电源供电,可以处理±10V 和±5V 真双极性输入信号,同时所有通道均能以高达200 KSPS的吞吐速率采样。输入箝位保护电路可以耐受最高达±16.5V 的电压。无论以何种采样频率工作,AD7606的模拟输入阻抗均为1 MΩ。它采用单电源工作方式,具有片内滤波和高输入阻抗,因此无需驱动运算放大器和外部双极性电源。AD7606抗混叠滤波器的3 dB截止频率为22 kHz;当采样速率为200 KSPS时,它具有40 dB抗混叠抑制特性。灵活的数字滤波器采用引脚驱动,可以改善信噪比(SNR),并降低3 dB带宽。
写了这么多你看懂了吗?
我猜你应该是云里雾里,下面举例说人话,让你听得懂:
AD7606芯片框图如下:
红线即是信号输出输出的数据通路;
AD7606输入信号采集范围
AD7606可以处理±10V 和±5V 真双极性输入信号,即输入信号可以是±10V 和±5V,由RANGE引脚上下拉决定;
下拉处理±5V 信号;
上拉处理±10V 信号;
一旦选择了输入信号范围,就别乱给信号源了,否则烧板子了。。。
原文如下:
AD7606输出模式选择
红线以通道1为例:
输入数据位单端模拟数据,进过复杂的转换后可输出串行数字信号或者并行数据信号;
如果你的板子设计引脚资源有限,则选择串行输出;串行输出的优点是节约IO,缺点是采集时序复杂些;
如果你的板子设计引脚足够多,则选择并行输出,并行输出数据线占用16个IO口,并行输出的优点是采集时序简单,缺点是费IO;可自行选择;
输出模式选择通过PAR/SER/BYTE SEL引脚的上下拉决定;
上拉选择串行输出;
下拉选择并行输出;
具体的时序细节放在后面的章节;
原文如下:
AD7606过采样率设置
过采样率设置由OS的三个引脚上下拉决定,可以固定用电阻上下拉,这种模式就定死了,除非飞线,也可以用FPGA引脚给高低电平配置,具体配置模式如下图:
作为FPGA开发者,需要知道这些就行了,具体的时序细节放在后面的章节;
AD7606串行输出模式采集
AD7606串行输出模式采集模块顶层接口如下:
将AD7606串行输出采集模块直接拖入Block Design中,如下:
AD7606串行采集时钟的范围要求如下:
这里我们选择16.666MHz时钟,不高也不低;
系统参考时钟选择100M,那个1个时钟周期就是1000÷100=10ns;
采集时钟是16.666M,那个1个时钟周期就是1000÷16.666=60ns;
记住这两个时钟周期,很重要;
串行输出流程时序图如下:
这张图采用边转换边读取的方式,还有转换完成后再读取的方式,既然可以边转换边读取,为何还要等转换完成后再读取呢?所以我们直接用这种方式。
并行采集使用的则是转换完成后再读取的方式。
第一步:拉高RESET引脚至少至少50ns,数据手册规定如下:
第二步:拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns),注意这里是最多,所以在代码里只需一个参考时钟周期足以,比如你用的100M,一个参考时钟周期就是10ns,当然,CONVSTA和CONVSTB也可同时拉低,这样就是8个通道同时采集,时间由数据手册得知,如下:
CONVSTA开启V1-V4通道的转换;
CONVSTB开启V5-V8通道的转换;
原文如下:
第三步:等待BUSY为高后,拉低CS,这个BUSY是AD7606输出给用户的,表征AD转换正在进行,他有一个最大时间,我们一定要满足他的最大时间,不然人家还没转换完你就结束采集了,岂不唧唧了;那么,CS在什么时刻拉低呢?既然前面我们已经选择了边转换边读取的方式,所以在BUSY拉高的期间CS拉低,数据手册最大推荐4.15us,代码里直接设置5ms,由数据手册得知,如下:
流程看完了,来看具体的采集时序:
采集时序如下:
首先用户拉低CS,并给出SCLK到AD7606,AD7606在CS为低期间,在SCLK的上升沿输出数据(但根据时序图,我感觉是SCLK高电平期间输出的),一个通道一次转换后输出16位采样数据;
既然AD7606是在SCLK上升沿输出,那么FPGA就应该在SCLK下降沿采集(或者低电平采集);
AD7606有8个模拟输入通道,串行输出模式下只有两个数字输出通道,每个输入通道输出16位采样数据;
DOUTA对应CH1、CH2、CH3、CH4四个输出通道;
DOUTB对应CH5、CH6、CH7、CH8四个输出通道;
因为每个输入通道输出16位采样数据,需要16个SCLK周期,所以4个输入通道输出16位采样数据,需要64个SCLK周期;那个我们需要一个计数器,计数到64时输出64位的采集数据,呢么采集到的每个通道数据对应如下:
wire [15:0] ad_ch1 = ad_out_a[63:48];
wire [15:0] ad_ch2 = ad_out_a[47:32];
wire [15:0] ad_ch3 = ad_out_a[31:16];
wire [15:0] ad_ch4 = ad_out_a[15: 0];
wire [15:0] ad_ch5 = ad_out_b[63:48];
wire [15:0] ad_ch6 = ad_out_b[47:32];
wire [15:0] ad_ch7 = ad_out_b[31:16];
wire [15:0] ad_ch8 = ad_out_b[15: 0];
AD7606并行输出模式采集
AD760并行输出模式采集模块顶层接口如下:
将AD7606并行输出采集模块直接拖入Block Design中,如下:
并行采集时序,由于官方画的图太繁琐,我直接重画了一个图来表示,如下:
第一步:拉高RESET引脚至少至少50ns,和串行采集一样;
第二步:拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns),和串行采集一样;
第三步:等待转换完成再读取数据,即采用转换完成后再读取的方式;
第四步:拉低CS片选信号;
第五步:拉低RD信号,在RD和CS同时为低时即可依次读取V1-V8通道的数据;
相应的时间问题也是重要的,具体查看手册;
AD数据缓存模块
随后AD数据进入纯verilog代码实现的数据缓存模块,实现AD数据缓存和时钟域转换,当缓存到256个AD数据后再送入Xilinx官方的Aurora 8B10B IP核;其中缓存的AD个数可配置,AD数据缓存模块顶层接口如下:
将AD数据缓存模块直接拖入Block Design中,如下:
Aurora 8B10B数据传输架构
采集的AD数据送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,并实现并串转换,经板载SFP光口输出;本设计采用简单的光口回环方式连接,即用光纤将SFP光口的收发两端直连;高速串行数据经SFP光口回环后进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,并输出AXI4-Stream数据流;Aurora 8B10B在Block Design中如下:
Aurora 8B10B图像视频传输架构的核心是Aurora 8B10B IP核的例化和使用,所以本章节我们重点讲解这个IP;
Aurora 8B10B IP核简介
关于Aurora 8B10B IP核介绍最详细的肯定是Xilinx官方的《pg046_Aurora 8B/10B LogiCORE IP Product Guide》,我们以此来解读,《pg046》PDF文档我已放在了资料包里;我用到的开发板FPGA型号为Xilinx–Artix7系列FPGA;带有4路GTP资源,每通道的收发速度为500 Mb/s到6.6 Gb/s之间。本设计使用的Aurora 8B10B IP核基于GTP高速收发器实现物理层和数据链路层;
Aurora 8B10B 基本结构
根据《pg046_Aurora 8B/10B LogiCORE IP Product Guide》,Aurora 8B10B 基本结构如下:
由上图可知,Aurora 8B10B IP核由四个核心模块构成,协同实现链路初始化、数据编解码及流控制:
通道逻辑(Lane Logic)
功能:驱动每个GT收发器(GTP/GTX/GTH),初始化收发器硬件,处理8B/10B编解码、错误检测(如CRC校验)
关键操作:检测控制字符(如空闲符、时钟补偿符),确保数据对齐
全局逻辑(Global Logic)
功能:管理多通道绑定(Lane Bonding),验证通道同步状态,生成随机空闲字符维持链路活性,监控所有通道的错误(如hard_err硬件错误、soft_err位错误)
错误处理:检测到严重错误时自动复位并重新初始化通道
发送用户接口(TX User Interface)
接口类型:支持AXI4-Stream帧接口(带tlast/tkeep)或流接口(简化无帧控制)
功能:将应用层数据封装为Aurora帧(添加SCP/ECP控制符),插入时钟补偿序列(每10,000字节插入12字节开销)
接收用户接口(RX User Interface)
功能:解析输入数据流,剥离SCP/ECP控制符,恢复原始数据帧并通过AXI4-Stream输出;支持流量控制(如UFC/NFC)
特点:无弹性缓冲,依赖实时流控避免溢出
用户数据接口对比
Aurora 8B10B支持帧接口 (Framing) 流接口 (Streaming),对比如下:
Aurora 8B10B 发送流程
Aurora 8B10B用户发送数据使用帧接口(AXI4-Stream),包括以下流程:
用户发起传输
应用层置位s_axi_tx_tvalid并输出数据至s_axi_tx_tdata,同时用s_axi_tx_tlast标识帧结束,s_axi_tx_tkeep标记末尾有效字节
IP核组帧
当s_axi_tx_tready与s_axi_tx_tvalid同时有效时,IP核采样数据
组帧规则:
帧首添加2字节SCP(Start Channel Protocol)
帧尾添加2字节ECP(End Channel Protocol)
若数据字节数为奇数,末尾补PAD字符
插入控制序列
在数据间隙插入空闲字符或时钟补偿序列(CC),优先级高于数据传输
发送过程中可通过拉低s_axi_tx_tvalid暂停传输(流控)
串行化输出
数据经GT收发器进行8B/10B编码,转为串行信号通过物理链路发送
使用总结
以上流程为Aurora 8B10B IP核内部实现,开发者只需了解即可,无需关心起具体实现细节,开发者只需把发送数据转换为AXI4-Stream数据流送入Aurora 8B10B用户发送接口即可;
Aurora 8B10B 接收流程
数据解析
GT收发器接收串行数据,进行字对齐和8B/10B解码
通道逻辑检测并剥离SCP、ECP、PAD及空闲字符,提取有效负载
帧恢复与输出
恢复的数据通过AXI4-Stream接口输出:
m_axi_rx_tvalid标识有效数据
m_axi_rx_tlast标识帧结束
m_axi_rx_tkeep标记帧末有效字节(仅当tlast有效时)
无流控信号:接收端无tready,需应用层实时消费数据
错误检测
实时监测编解码错误(置位soft_err)或帧结构错误(如连续SCP,置位frame_err)
使用总结
以上流程为Aurora 8B10B IP核内部实现,开发者只需了解即可,无需关心起具体实现细节,开发者只需把Aurora 8B10B IP核输出的AXI4-Stream数据流送入自己的接收模块即可进行具体分析和处理;
Aurora 8B10B 时钟架构
Aurora 8B10B IP核涉及多时钟域协同,关键时钟信号如下:
时钟交互要点:
跨时钟域同步:INIT_CLK用于复位逻辑(gt_reset需同步至该时钟域),避免亚稳态
用户时钟生成:USER_CLK由GT收发器的CDR(时钟数据恢复)电路产生,确保与输入数据同步
抖动要求:参考时钟(GT_REFCLK)需满足严格抖动限制(通常<1 ps RMS),否则高线速下链路失锁
Aurora 8B10B IP核调用和使用
Aurora 8B10B IP核调用和使用很简单,通过vivado的UI界面即可完成,如下:
传输AD数据时,需要配置为流模式,配置如下:
具体配置要根据自己的项目需求而定,上图只是博主的配置,仅供参考;
AD数据接收
我们在接收端添加了一个ILA观测AD数据,在ILA中设置为模拟波形模式即可完美还原接收到的ADC波形,如下:
工程源码架构
提供1套工程源码,以工程源码1为例,工程Block Design设计如下:
提供4套工程源码,以工程源码1为例,综合后的工程源码架构如下:
工程仿真
工程源码1提供针对AD7606串行模式数据采集的仿真,如下:
4、vivado工程源码1详解–>Artix7–35T,AD7606串行模式版本
开发板FPGA型号:Artix7–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:串行输出模式;
光编码类型:Aurora 8B10B;
回环光口类型:1路SFP光口;
高速收发器类型:GTP,线速率5Gbps;
Aurora 8B10B用户数据位宽:32 bit;
实现功能:FPGA实现Aurora 8B10B AD数据传输;
工程作用:此工程目的是让读者掌握FPGA采集AD7606转Aurora 8B10B传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
5、vivado工程源码2详解–>Artix7–35T,AD7606并行模式版本
开发板FPGA型号:Artix7–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:并行输出模式;
光编码类型:Aurora 8B10B;
回环光口类型:1路SFP光口;
高速收发器类型:GTP,线速率5Gbps;
Aurora 8B10B用户数据位宽:32 bit;
实现功能:FPGA实现Aurora 8B10B AD数据传输;
工程作用:此工程目的是让读者掌握FPGA采集AD7606转Aurora 8B10B传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
6、工程移植说明
vivado版本不一致处理
1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解决如下:
打开工程后会发现IP都被锁住了,如下:
此时需要升级IP,操作如下:
FPGA型号不一致处理
如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;
其他注意事项
1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;
7、上板调试验证
准备工作
需要准备的器材如下:
AD7606转接板;
FPGA开发板,没有开发板可以找本博提供;
SFP光模块和光纤;
我的开发板了连接如下:
Aurora 8B10B ADC数据传输效果演示
Aurora 8B10B ADC数据传输效果演示如下:
FPGA采集AD7606转Aurora 8B10B传输
12、工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下:
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务: