​ 注:扫码关注小青菜哥哥的weixin公众号,免费获得更多优质的核探测器与电子学资讯~

本篇小青菜哥哥将以TI公司的JESD204B ADC为例,和大家分享基于JESD204B ADC的FPGA数据获取的开发过程,其中ADC型号为ADS54J40,具体性能参数包括双通道采样、1GHz采样频率、14bit采样精度。

如下图为小青菜哥哥设计的基于该款ADC的功能子板,2路待测模拟信号均通过SMA接口引入,其中1路经过变压器交流差分耦合后进入ADC采样,另一路经过直流差分放大器芯片后进入ADC采样,并在该ADC上安装了散热片。

图:ADS54J40子板电路板实物正反面

如下图为小青菜哥哥设计的基于xilinx kintex7系列FPGA的母板,该母板的FPGA数据输出接口包括1路千兆以太网口、2路SFP光纤口以及1路USB串口。信号进出FPGA的方式为1个FMC HPC接插件、2个FMC LPC接插件,其中包括了LVDS、GTX、时钟、3.3V/2.5V/1.8V单端信号IO等,并板载了8Gb DDR3存储器和LMK048**系列的高精度可编程JESD204B时钟模块。小青菜哥哥设计该母板的初衷就是为了方便进行各种不同的应用开发,在本篇中该母板用在了JESD204B ADC应用开发。

图:FPGA通用母板

接下来小青菜哥哥介绍一下基于ADS54J40的jesd204b FPGA逻辑开发流程~

ADS54J40逻辑开发按先后顺序包括LMK048**时钟配置、ASD54J40寄存器配置、JESD204B IP核例化、JESD204B IP核配置以及ADC数据解析。下面内容将分别介绍各个模块的开发过程。

1,LMK048032时钟配置

开发这款ADC时,我们首先要确定ADC工作的参数,这样才能把时钟配置的参数定下来。ADC的数据手册给出了3种jesd的链路参数,分别为LMFS=4211、4244以及8224,如下图1所示:

图1:jesd链路参数

图2为ADC输出数据的jesd链路帧结构,我们在FPFA端取数的时候就是按照这个结构来操作的。

图2:jesd数据帧结构

首先我们分析LMFS=4211的情况:

1)L=4指的是4 lanes模式,每条lane的最高线速率为10Gbps,结合图2我们可以看到,A通道的采样数据选择管脚DA1和DA2这两条lane进行数据输出,B通道的采样数据选择管脚DB1和DB2这两条lane进行数据输出,其它输出管脚没用。

2)M=2指的是该芯片有2个AD转换器(对应2通道),对于这款芯片来说,M这个参数是固定的。

3)F=1指的是数据输出的帧长度为1个字节,结合图2我们可以看到,对于A通道,DA1输出A0[7:0],DA2输出A0[15:8],均为一个字节。通道B同理。

4)S=1指的是每个AD转换器的每个帧周期里只有1个采样点。结合图2我们可以看到,在1个帧周期里,DA1输出A0[7:0],DA2输出A0[15:8],确实只有A0这1个采样数据。

5)理解了以上参数后,我们需要了解FPGA jesd204b IP核的相关内容,对于xilinx 的IP核同样设定LMFS=4211这样的参数后,我们就可以一步步来确定ADC和FPGA的时钟/SYSREF了。

6)根据图1给出的数据,在采样率为1GSPS时,每条lane的线速率为10Gbps。(其实只要给定了采样率、lane的数量以及采样数据精度,线速率就可以计算出来。对这款ADC来说,采样精度14bit,填充为16bit后,再经过8b/10b编码变为20bit。也就是说每个采样数据最终传输的时候为20bit,而采样率为1GSPS,因此每路ADC数据的输出总数据量为20Gbps,如果用2条lanes传输的话,每条lane的速率必定为10Gbps)假定我们需要实现的是1GSPS的采样,很自然的LMK04832需要给ADC提供1GHz的时钟输入,另外对于实现subcalss 1来说,ADC的SYSREF是多少呢?ADC手册已给出。如图3所示:

图3:SYSREF设置

这里又涉及到了另外一个参数K,它指的是每个多帧内含有帧的数量。ADC会有一个默认K值,我们也可以通过配置ADC寄存器来修改。为了方便,一般我们倾向选择4、8、16、32这样的数值。通过图3,我们就能确定SYSREF的频率了。这里我们把K设成8,2N=32,这样SYSREF=3.90625MHz。这样LMK04832就给ADC提供CLK=1GHz,SYSREF=3.90625MHz的差分时钟即可。

7)ADC端的时钟确定后,我们还需要确定FPGA端的时钟数量和时钟频率,如何确定呢?在JESD204B IP核中给出了两种方案。我们先来看第1种通用时钟方案,如下图4所示:

图4:通用FPGA时钟方案

在通用方案1中,LMK04832需要给FPGA提供3路时钟,分别为refclk、glbclk以及SYSREF。refclk即为GT模块的参考时钟,通过该参考时钟后,GT模块能够工作在指定的10Gbps线速率下;glbclk为jesd204b IP核的工作时钟,它固定为线速率的1/40倍,即250MHz,IP核的数据都是在该时钟频率下处理。SYSREF参考时钟和ADC端的SYSREF要保持一致,均为3.90625MHz即可。总得来说,为了实现jesd204b的FPGA端数据采集,LMK04832需要给FPGA提供refclk,glbclk和SYSREF这3组时钟,给ADC提供1GHz的采样时钟和SYSREF,总共5路时钟。

我们再来看第二种相对简便的时钟方案,如下图5所示:

图5:简便jesd时钟方案

在简便方案中,glbclk被refclk替代了,我们就可以少提供1路时钟给FPGA。但是我们要注意,refclk作为glbclk使用时,IP核规定了不同型号FPGA的refclk频率范围。如下图6、7、8所示:

图6:Frequency Ranges for Artix-7 Devices

图7:Frequency Ranges for Kintex-7, Virtex-7 and Zynq-7000 Devices

图8:Frequency Ranges for Virtex-7 Devices Using GTHE2

我们可以看到,refclk作为glbclk使用时的最高频率是165MHz,而glbclk的频率固定为线速率的1/40,这也就意味着refclk作为glbclk使用时的6.6Gbps线速率上限了。在10Gbps的线速率下,显然我们不能用这种简便方案了。

接下来我们分析LMFS=4244的情况:

1)同样的L=4指的是4 lanes模式,并且每条lane的最高线速率为10Gbps,结合图2我们可以看到,A通道的采样数据选择管脚DA1和DA2这两条lane进行数据输出,B通道的采样数据选择管脚DB1和DB2差分对这两条lane进行数据输出,其它输出管脚没用。

2)M=2指的是该芯片有2个AD转换器(对应2通道),对于这款芯片来说,M这个参数是固定的。

3)F=4指的是数据输出的帧长度为4个字节,结合图2我们可以看到,对于A通道,DA1输出A3~A2共4个字节,DA2输出A1~A0共4个字节。通道B同理。

4)S=4指的是每个AD转换器的每个帧周期里有4个采样点。结合图2我们可以看到,在1个帧周期里,DA1~ DA 2输出A3~A0共4个采样数据。通道B同理。

5)理解了以上参数后,我们需要了解FPGA jesd204b IP核的相关内容,对于xilinx 的IP核同样设定LMFS=4244这样的参数后,我们就可以一步步来确定ADC和FPGA的时钟/SYSREF了。

6)根据图1给出的数据,在采样率为1GSPS时,每条lane的线速率为10Gbps。假定我们需要实现的是1GSPS的采样,很自然的LMK04832需要给ADC提供1GHz的时钟输入,另外对于实现subcalss 1来说,ADC的SYSREF是多少呢?ADC手册已给出,如图3所示。这里我们把K设成8,2N=8,这样SYSREF=3.90625MHz。这样LMK04832就给ADC提供CLK=1GHz,SYSREF=3.90625MHz的差分时钟即可。

ADC端的时钟确定后,我们还需要确定FPGA端的时钟数量和时钟频率,如何确定呢?在JESD204B IP核中给出了两种方案。但前面已经说过,在10Gbps的线速率下,我们只能用通用方案1。

我们再来分析LMFS=8224的情况:

1)L=8指的是8 lanes模式,并且每条lane的最高线速率为5Gbps,结合图2我们可以看到,A通道的采样数据选择管脚DA0~ DA3这4条lane进行数据输出,B通道的采样数据选择管脚DB0~ DB3这4条lane进行数据输出,没有数据线空闲。

2)M=2指的是该芯片有2个AD转换器(对应2通道),对于这款芯片来说,M这个参数是固定的。

3)F=2指的是数据输出的帧长度为2个字节,结合图2我们可以看到,对于A通道,DA0~ DA3均输出2个字节。通道B同理。

4)S=4指的是每个AD转换器的每个帧周期里有4个采样点。结合图2我们可以看到,在一个帧周期里,DA4~ DA 1确实输出了A3~A0共4个采样数据。

5)理解了以上参数后,我们需要了解FPGA jesd204b IP核的相关内容,对于xilinx 的IP核同样设定LMFS=8224这样的参数后,我们就可以一步步来确定ADC和FPGA的时钟/SYSREF了。

6)根据图1给出的数据,在采样率为1GSPS时,每条lane的线速率为5Gbps。假定我们需要实现的是1GSPS的采样,很自然的LMK04832需要给ADC提供1GHz的时钟输入,另外对于实现subcalss 1来说,ADC的SYSREF是多少呢?ADC手册已给出,如图3所示。这里我们把K设成8,2N=8,这样SYSREF=3.90625MHz。这样LMK048**就给ADC提供CLK=1GHz,SYSREF=3.90625MHz的差分时钟即可。

7)ADC端的时钟确定后,我们还需要确定FPGA端的时钟数量和时钟频率,如何确定呢?在JESD204B IP核中给出了两种方案。在5Gbps的线速率下,我们就可以用图5简便方案,此时glbclk=125MHz。因此我们将refclk定为125MHz即可。

在了解了LMFS=4211、4244以及8224分别对应的时钟方案后,接下来我们来进行LMK048**的寄存器配置,来实现各个模式的时钟输出。LMK048**的输出端口和FPGA的GT模块端口管脚分布如下图9所示:

 

图9:时钟输出管脚原理图

1)LMFS=4211

由前文分析可知,ADC_CLK=1GHz, ADC_SYSREF=3.90625MHz,FPGA_refclk=250MHz, FPGA_glbclk=250MHz, FPGA_SYSREF=3.90625MHz.

我们把LMK04832的DCLKOUT0作为FPGA_glbclk、把SDCLKOUT1作为FPGA_SYSREF、把DCLKOUT2作为ADC_CLK、把SDCLKOUT3作为ADC_SYSREF、把DCLKOUT8作为FPGA_refclk即可,其它时钟不输出即可。设置如下图10所示:

图10:LMFS=4211、4244的时钟寄存器设置图

2)LMFS=4244

此参数下的时钟和LMFS=4211时的时钟是一样的,如图10所示。

3)LMFS=8224

由前文分析可知,ADC_CLK=1GHz, ADC_SYSREF=3.90625MHz,FPGA_refclk=125MHz, FPGA_SYSREF=3.90625MHz.

我们把LMK04832的DCLKOUT2作为ADC_CLK、把SDCLKOUT3作为ADC_SYSREF、把DCLKOUT8作为FPGA_refclk,把SDCLKOUT9作为FPGA_SYSREF,其它时钟不输出即可。设置如下图11所示:

图11:LMFS=8224的时钟寄存器设置图

配置设置好之后,将寄存器值写入LMK04832,即可得到正确的时钟,如下图所示12为不同模式下得到的1GHz、250MHz、125MHz以及3.90625MHz时钟。(注意:为了降低功耗和串扰,本设计将SYSREF设置为只有4个周期的脉冲信号,而不是连续的3.90625MHz时钟)

图12:配置LMK04832后不同模式的输出时钟

2,ASD54J40寄存器配置

该ADC的配置引脚共包括PDN、RESET、SCLK、SDIN、SDOUT、SEN这6个引脚,我们根据数据手册的描述相应控制即可。切记:SCLK不能超过2MHz。如下图13所示为寄存器空间分布:

图13:寄存器空间分布

1)Analog Bank写操作如下图14所示:

图14:Analog Bank寄存器写操作

2)Analog Bank读操作如下图15所示:

图15:Analog Bank寄存器读操作

3)JESD Bank写操作如下图16所示,注意:如果不对4005h操作,则通道A和B配置相同的内容,读操作同样如此:

图16:JESD Bank寄存器写操作

4)JESD Bank读操作如下图17所示:

图17:JESD Bank寄存器读操作

手册上也给出了推荐的ADC配置流程,我们按照流程配置即可,如下图18所示:

图18:ADC寄存器配置流程

3,JESD204B IP核例化

下面我们在vivado内调用JESD204B的IP核,IP核的例化设置共4个界面。

首先是界面1的例化设置,如下图19所示:

图19:JESD IP核例化设置界面1

其次是界面2的例化设置,如下图20所示:

图20:JESD IP核例化设置界面2

接下来是界面3的例化设置,如下图21所示:

图21:JESD IP核例化设置界面3

最后一个界面4的例化设置,如下图22所示:

图22:JESD IP核例化设置界面4

这样JESD IP核我们就例化完成了,在工程中调用该IP即可。该IP核的例化文件接口如下图23所示:

图23:JESD IP例化顶层

4,JESD204B IP核AXI-LITE4配置

AXI-LITE4配置端口如下图24所示,配置需要按顺序注意的地方有4个:

1)写的最后一个寄存器必须是0x004,写的值为0x0001_0001,功能是复位IP核。写完之后,IP核会用新的配置数据重新开始同步链路和对齐操作,该复位是自清零,变为0x0001_0000。

2)写完寄存器0x004后,给LMK04832一个高脉冲信号SYNC,使其向FPGA和ADC发送4个周期的SYSREF

3)需要读取0x004的bit0数据,当该位为0则表示复位完成

4)复位完成之后,我们需要监视0x038的寄存器值,只有当值为0x0001_0001时,才表明SYSREF和link SYNC正常工作了。

图24:JESD IP核AXI配置端口

5,ADC数据解析

在进行ADC数据解析之前,我们需要了解JESD IP核数据输出的结构,下面来进行介绍:

1)rx_tdata的位宽为[32*N-1:0],其中N为lanes。具体结构如下图25所示:

图25:rx_tdata数据结构

对于这款ADC来说,JESD IP核例化时我们选择的是8 lanes,因此得到的数据位宽为[255 : 0]。

对于每条lane来说,接收到数据都是32bit。如下图26所示为每条lane的数据和帧之间的对应关系(以F=8举例),其中包括帧起始和帧结尾的标志位,方便我们识别ADC数据。F=8意味着一帧数据包含8个字节(D7~D0),而每lane的rx_data在每个周期都输出32bit,共4个字节,因此一帧字节需要两个时钟周期输出,这时候就通过rx_start_of_frame和rx_end_of_frame来识别这一帧数据的帧头和帧尾,有的时候我们还需要rx_start_of_multiframe和rx_end_of_multiframe信号来识别多帧的头尾。

图26:每lane的32bit数据帧结构

在这里我们再把图2放上,因为接下来在不同的LMFS模式下,我们从每条lane的rx_tdata取数时要用到这种结构。

图27:jesd数据帧结构

2)LMFS=4211时的FPGA取数

取数之前,我们先要读取IP核寄存器的值,用来观察此时JESD204B链路的工作状态,正如前文介绍过的,主要观察0x004和0x038这两个寄存器的值即可。0x004寄存器的值必须为0x0001_0000才行,这表示IP核复位完成,载入了最新的配置链路参数。0x038寄存器的值必须为0x0001_0001才行,这表示SYSREF核SYNC已完成同步,JESD链路正常工作了,如下图27所示。接下来我们就可以看看IP核数据输出了。

图28:LMFS=4211模式的AXI-Lite4配置寄存器读取

如下图28所示为该模式下的JESD数据输出,我们可以看到:由于IP核例化了8条lane,但实际ADC只占用了4 lanes,所以其余空闲的lane 1、4、5、8数据均为0。由于该模式下ADC每帧数据只有1个字节,所以该字节既是帧头、也是帧尾,对应图28上的rx_start_of_frame和rx_end_of_frame则均为4’b1111。又由于ADC配置时我们设置的多帧K为8,对应图28上的rx_start_of_multiframe则是按照4’b0001-4’b0000的顺序循环,rx_end_of_multiframe则是按照4’b0000-4’b1000的顺序循环。

图29:LMFS=4211模式的IP核输出数据时序

3)LMFS=4244时的FPGA取数

接下来就不具体分析了,LMFS=4244时的AXI配置的寄存器数据读取如下图29所示,JESD数据输出如下图30所示:

图30:LMFS=4244模式的AXI-Lite4配置寄存器读取

图31:LMFS=4244模式的IP核输出数据时序

4)LMFS=8224时的FPGA取数

注意LMFS=8224时使用了8 lanes,并且DA2与DA3、DB2与DB3的数据顺序是交换的,这里需要注意一下。AXI配置的寄存器数据读取如下图31所示,JESD数据输出如下图32所示:

图32:LMFS=8224模式的AXI-Lite4配置寄存器读取

图33:LMFS=8224模式的IP核输出数据时序

取每lane的32bit数据后,按照ADC手册给出的图2结构,将这32bit拆分就可以得到采样数据了。如下图33所示为FPGA最终得到的1GHz采样率下的噪声、正弦以及方波信号:

图34:1GSPS-14bit ADC数据双通道采样结果

经过以上这些过程的折腾,小青菜哥哥就完成了基于JESD204B ADC的FPGA高速数据采集开发过程!看上去简单,其实一点也不难吧,JESD204B 的主题到该篇也就结束了,谢谢大家对小青菜哥哥的支持!

​今天的博文就到这里了,有问题请在小青菜哥哥的公众号留言,谢谢!

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。