ADS52J90开发笔记(3)—LVDS_8通道_10bit_200MSPS数据采集
1,硬件工作环境
ADC:ADS52J90。FPGA:kintex7。供电:12V/5A 直流电源。该板卡最多外接32通道2Vpp模拟信号以及20路外部触发信号。数据传输接口方式有1Gbps以太网接口、高速光纤接口以及usb-uart。需要用到的工具为万用表、示波器、信号发生器。
图1:硬件PCB
2,逻辑开发环境
Vivado2017.4(但也能够兼容ise14.7)。
3,工作模式总结
小青菜哥哥开发该ADC的工作模式如***:该ADC在8通道模式下只支持LVDS模式下的10bit精度):
3.1 LVDS模式
通道数(Channel) |
采样精度(bit) |
采样率(MSPS) |
8 |
10 |
200 |
16 |
10 |
100 |
16 |
12 |
80 |
16 |
14 |
60 |
32 |
10 |
50 |
32 |
12 |
40 |
32 |
14 |
30 |
3.2 JESD204B模式(该ADC的JESD204B功能不支持8通道模式)
通道数(Channel) |
采样精度(bit) |
采样率(MSPS) |
16 |
10 |
100 |
16 |
12 |
80 |
16 |
14 |
60 |
32 |
10 |
50 |
32 |
12 |
40 |
32 |
14 |
30 |
4,LVDS_8通道_10bit_200MSPS数据采集开发过程
本篇将介绍该款ADC的8通道/10bit/200MSPS工作模式下的开发过程。开发过程本人按顺序总结了以下6个部分:
1)熟悉LVDS模式下的8通道工作原理
2)对时钟芯片编程,产生200MHz的ADC时钟和FPGA系统时钟
3)配置该ADC的工作模式为LVDS/8通道/10bit/200MSPS
4)开发FPGA端的ADC数据获取逻辑
5)在线chipscope调试与测试
6)利用真实信号测试
4.1熟悉LVDS模式下的8通道工作原理
小青菜哥哥在决定开发这款ADC后,首先做的第一件事就是仔细研读它的数据手册。该ADC工作在8通道时,其信号输入部分的采样原理由下图2详细给出了说明:
图2:8通道信号输入采样
该芯片内含16个AD转换器,从上图不难发现其工作在8通道模式时,每两个AD交替采集同一个输入信号。由于每个ADC在10bit采样精度时,最大采样率可达100MSPS,因此两个ADC同时工作,交替采集同一个输入信号时,对该信号的采样率就可达200MHz。该模式下的数据输出结构,在数据手册中也详细给出了,如下图3所示:
图3:8通道模式LVDS输出结构
我们可以看到,一个通道的采样数据通过两个AD输出,这两路输出数据交错组合起来就形成了完整的200MHz采样数据。该模式下,从模拟信号输入到LVDS串行数据输出之间详细的映射关系如下表所示:
4.2对时钟芯片编程,产生200MHz的ADC时钟
既然ADC工作在200MHz连续采样下,因此FPGA的处理时钟也应该设计为200MHz。FPGA利用板载40MHz晶振,产生配置逻辑,对LMK04826时钟芯片进行编程配置,分别产生ADC采样时钟和FPGA系统200MHz时钟。需要注意的是输入ADC芯片的时钟是200MHz,可是该芯片内部每个AD转换时钟为100MHz,即有采样时钟fs=200MHz,转换时钟fc=100MHz,帧时钟fFCLK=100MHz,位时钟fbitclk=5*fFCLK.
4.3配置该ADC的工作模式为LVDS/8通道/10bit/200MSPS
该ADC芯片可以工作在多种模式下,其默认的工作模式可能不是我们所需要的模式。因此需要通过SPI配置该ADC,配置数据和地址应该严格按照数据手册给出的值确定。该ADC芯片功能很丰富,因此配置寄存器数量比较多,有一些寄存器不需要配置,保持默认值即可。我们需要做的就是了解每个配置寄存器的功能,选择需要的寄存器配置,这里需要花费大量的时间和精力。该款ADC配置的方面的内容在以前的文章已详细说明,这里略过。
4.4开发FPGA端的ADC数据获取逻辑
对于该款ADC的FPGA数据获取逻辑思路很清晰,其实就是高速源同步数据的获取,只需要利用FPGA自带的底层硬件资源ISERDES即可实现。ISERDES就是FPGA自带的高速串并转换模块,其具体定义和功能,小青菜哥哥在以前的文章中已专门说过。该数据采集模块功能图如图4所示:
图4:数据采集模块框图
下面分别介绍各个主要模块的功能:
1,DCLK模块
DCK模块的功能就是通过idelay、ISERDES、BUFIO、BUFR产生bitclk和clkdiv,使得bitclk的相位和位时钟dclk的相位对齐。其内部功能框图如图5所示:
图5:dlck
具体过程就是:首先控制模块控制Idelay延迟模块,使得dclk产生一定的延迟量。Idelay的输出再经过BUFIO和BUFR,进一步产生固定延迟,得到bitclk和clkdiv。Dclk同时还进入ISERDES模块进行串行转换,其时钟就为bitclk。控制模块一直监视iserdes的并行数据输出。随着idelay延迟量的改变,iserdes的输出也一直在变。当发现iserdes的输出为既有0又有1的状态时,说明bitclk和dclk相位对齐了。之后bitclk就可以作为fclk和data的数据采集时钟了。
2,FCLK模块
Dclk模块功能完成之后,只能保证采集到的数据的每bit都是对的,但并不知道一个10bit数据的首尾在哪,fclk模块就是用来寻找并行数据的正确起始与结束位置,因此业界也称fclk为帧时钟,但它并不是用作时钟,只用来判断data数据的位置。通过图3给出的LVDS输出时序图,不难发现:fclk进入iserdes进行串并转换后,如果输出的10bit数据为1111100000,说明找到了正确的字符边界,在此状态下去取data从iserdes输出的并行10bit数据即可,如图6所示:
图6:fclk
Fclk模块工作的原理就是通过bitslip不断的调节iserdes的输出,当输出为1111100000时,该模块功能完成,bitslip的用法在iserdes的说明里很详细,前面的文章也具体介绍过。
3,Data模块
Dclk和fclk的功能完成后,该模块就只需要取数就就行了,不需要任何控制操作。如图7所示:
图7:data
4,数据输出模块
由于是8通道工作模式,每两路data模块的数据其实只有100MSPS,需要整合为一个完整的200MSPS采样数据,这里就需要用到fifo了,通过fifo将100MHz下的两路数据同步到200MHz系统时钟区域内,再进行后续的处理。如图8所示:
图8:数据输出模块
Fifo1,fifo2的写入时钟均为100MHz,用200MHz的系统时钟交替读写这两个fifo,读出的数据即为200MSPS采样率下的模拟输入波形。由于所有的时钟都同源产生于LMK04826,所以不用担心fifo的空满问题,只需要不断读就可以~
4.5在线chipscope调试与测试
按照上面的思路和功能模块编写好代码,并利用chipscope观察输出信号。首先将ADC配置成ramp测试模式,即测试累加数据(0~1023)会取代正常采样数据,测试的波形如下图9,10所示:可以看到FPGA接收到的ramp测试数据无误。
图9:ramp测试总体
图10:ramp测试细节
4.6利用真实信号测试采集功能
接下来,将ADC配置成正常采集模式,利用外接的信号发生器,FPGA获取到的200MHz采样波形如图11,12 ,13,14,15所示:
图11:chipscope抓取正弦波形总体
图12:chipscope正弦详细波形
图13:信号发生器输出波形
图14:整体1
图15:整体2
可以看到,信号发生器给的正弦频率为5MHz(200ns),而chipscope抓取的正弦波形一个周期为40个点,chipscope的观察时钟为200MHz(5ns),信号发生器给出的波形和数据采集后波形完全一致。
ADS52J90的LVDS、8通道、10bit、200MSPS数据采集模式的开发笔记就到这里,下篇将是LVDS、16通道、10bit、100MSPS数据采集模式的开发笔记。