ADS52J90开发笔记(8)—LVDS_32通道_12bit_40MSPS数据采集
ADS52J90开发笔记(8)—LVDS_32通道_12bit_40MSPS数据采集
1,硬件工作环境
ADC:ADS52J90。FPGA:kintex7。供电:12V/4A 直流电源。该板卡最多外接32通道2Vpp模拟信号以及20路外部触发信号。数据传输接口方式有千兆以太网接口、高速光纤接口以及低速USB串口。需要用到的工具为万用表、示波器、信号发生器。
图1:硬件PCB
2,逻辑开发环境
Vivado2017.4(但也能够兼容ise14.7)。
3,工作模式总结
小青菜哥哥开发该ADC的工作模式如***:该ADC在8通道模式下只支持LVDS模式下的10bit精度):
-
- 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_32通道_12bit_40MSPS数据采集开发过程
本篇将介绍该款ADC的32通道/12bit/40MSPS工作模式下的开发过程。开发过程本人按步骤总结了以下6点:
1)熟悉LVDS模式下的32通道工作原理
2)对时钟芯片编程,产生80MHz的ADC时钟
3)配置该ADC的工作模式为LVDS/32通道/12bit/40MSPS
4)开发FPGA端的ADC数据获取逻辑
5)在线chipscope调试与测试
6)利用真实信号测试
4.1熟悉LVDS模式下的32通道工作原理
小青菜哥哥在决定开发这款ADC后,首先做的第一件事就是仔细研读它的数据手册。该ADC工作在32通道时,其信号输入部分的采样原理由下图2详细给出了说明:
图2:32通道信号输入采样
该芯片内含16个AD转换器,从上图不难发现其工作在32通道模式时,每个AD转换器负责处理2路输入信号。由于每个AD转换内部都分为奇采样和偶采样,这是其他ADC所没有的,这么做的目的就是为了更好的实现每个AD可以处理2路输入信号,从而利用16个AD转换器就可以实现该芯片32通道的数据采集。该模式下的数据输出结构,在数据手册中也详细给出了,如下图3所示:
图3:32通道模式LVDS输出结构
我们可以看到,由于一个ADC工作时分为奇数和偶数采样,最终输出也分为奇偶结构。比如奇数采样负责通道1,偶数采样负责通道2。两通道的采样数据最终通过一个AD输出。该模式下,从模拟信号输入到LVDS串行数据输出之间部分通道的映射关系如下表所示,属于一一对应:
4.2对时钟芯片编程,产生80MHz的ADC时钟
虽然输入信号的采样率是40MSPS,但每个ADC仍工作在80MHz连续奇偶采样下,因此ADC的系统时钟为80MHz,但FPGA的处理时钟应该设计为40MHz。FPGA利用板载40MHz晶振,产生配置逻辑,对LMK04826时钟芯片进行编程配置,分别产生ADC采样80MHz和FPGA系统40MHz时钟。即有输入时钟fIN=80MHz,采样时钟fSAMP=40MHz,转换时钟fc=80MHz。前文已经提到过,12bit精度的数据必须在尾部添加2个零变成14bit数据才能在FPGA内部使用ISERDES处理,因此帧时钟fFCLK=40MHz,但位时钟fbitclk=14* fFCLK=560MHz(在帧时钟fclk低电平期间输出奇数通道数据,高电平期间输出偶数通道数据,如图3所示).
4.3配置该ADC的工作模式为LVDS/32通道/12bit/40MSPS
该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模块功能完成之后,只能保证采集到的数据的每一位都是对的,但并不知道一个10bit数据的首尾在哪,fclk模块就是用来寻找并行数据的正确起始与结束位置,因此业界也称fclk为帧时钟,但它并不是用作时钟,只用来判断data数据的位置。通过图3给出的LVDS输出时序图,不难发现:fclk进入iserdes进行串并转换后,如果输出的12bit数据为111111111111,说明找到了fclk的高电平状态,对应数据的偶数通道,此时取数即得到偶数通道的数据。如果输出的12bit数据为000000000000,说明找到了fclk的低电平状态,对应数据的奇数通道,此时取数即得到奇数通道的数据,如图6所示:
图6:fclk
fclk工作的原理就是通过bitslip不断的调节iserdes的输出,在32通道工作模式下,当输出为12’b111111111111或12’b000000000000时,该模块功能完成,并输出奇偶状态。bitslip的用法在iserdes的说明里很详细,前面的文章也具体介绍过~。
3,Data模块&数据输出模块
Dclk和fclk的功能完成后,该模块就只需要取数就就行了,不需要任何控制操作。然后在奇状态下将取到的数通过fifo1同步到系统时钟域,在偶状态下将取到的数通过fifo2同步到系统时钟域即可,如图7所示:
图7:data
Fifo1和fifo2的写入时钟为80MHz,交替写入奇偶数据。用40MHz的系统时钟读这个fifo,读出的数据即为40MSPS采样率的全局时钟域下的模拟输入波形。由于所有的时钟都同源产生于LMK04826,所以不用担心fifo的空满问题,只需要不断读就可以~
4.5在线chipscope调试与测试
按照上面的思路和功能模块编写好代码,并利用chipscope观察输出信号。首先将ADC配置成ramp测试模式,即测试累加数据(0~4095)会取代正常采样数据,测试的波形如下图9,10所示。可以看到FPGA接收到的测试数据无误。
图8:ramp测试总体
图9:ramp测试细节:该adc的ramp测试数据规定是按16通道形式输出,所以在32通道模式下,ramp数据都是以2为步长增长
4.6利用真实信号测试采集功能
接下来,将ADC配置成正常采集模式,利用外接的信号发生器,FPGA获取到的40MHz采样波形如图10,11 ,12所示:
图10:chipscope抓取正弦和三角波波形
图11:信号发生器三角输出波形
图12:信号发生器正弦输出波形
可以看到,信号发生器给的正弦波形频率为2MHz(500ns),而chipscope抓取的正弦和三角波形一个周期为20个点,chipscope的观察时钟为40MHz(25ns),信号发生器给出的波形和数据采集后波形完全一致。
ADS52J90的LVDS_32通道_12bit_40MSPS数据采集模式的开发笔记就到这里,下篇将是LVDS_32通道_14bit_30MSPS数据采集模式的开发笔记。