Board logo

标题: 射频采样ADC的FPGA接口 成功经验 [打印本页]

作者: pengpengpang    时间: 2014-9-4 10:18     标题: 射频采样ADC的FPGA接口 成功经验

射频采样ADC的FPGA接口 经历做了一个3.2G采样率ADC的FPGA接口。ADC通过FMC接到母板上的K7 410T芯片,LVDS电平标准。 做了这个项目后,有些感触。 从FPGA角度来看,FPGA需要设计一个DDR模式、数据率为400M的接口,且由于信号线比较多,已经跨BANK(换句话说,信号比较多,一个BANK不能提供足够多的LVDS引脚,需要2个BANK)。 从这些数据可以看到,data的valid window 理论值仅有1.25ns。这是一个很具备挑战性的设计。 我想从两点来谈这个高速ADC的接口。1.要想实现最佳的DATA/CLOCK 时序关系,FPGA应采用什么样的方案,去调整ADC的随路时钟的相位。   IDELAY 还是 MMCM?   这二者之间的优缺点:1.MMCM的输入是ADC的输入时钟,动态调整其输出而获得最佳的DATA/CLOCK 时序关系                        其优点是MMCM输出的钟质量要比IDELAY的方案要高,Jitter要稍小一些。                        这是因为IDELAY的输出钟,每经过一级TAP就会给输出钟叠加一定量的jitter,                        TAP越多,jitter就越明显。                         注:我的这里提到的IDELAY方案,是使用IDELAY去延时ADC的随路时钟,而不是与延时                            ADC的数据。为什么不延时数据,这是因为延时数据,对数据引入的jitter要比延时                            时钟引入的jitter要大的多,且延时数据使用的IDELAY数量更多,引入的FPGA功耗也要大。                       2.MMCM方案有一个很大很大的弊端。每次上电后,MMCM对ADC的随路时钟锁相的相位出现随机现象。                        这就造成了IDDR输出存在数据会随机出现180度相位翻转问题。                        比如说,LVDS串行进入FPGA的数据顺序是A,B,C,D,E,F                                经过IDDR后,有两种可能是输出:IDDR的D1,出现数据顺序是A,C,E;                                                              IDDR的D2,出现数据顺序是B,D,F;                                         另外一种可能的输出是:IDDR的D1,出现数据顺序是B,D,F;                                                              IDDR的D1,出现数据顺序是A,C,E;                         针对这个现象我反复进行了严酷的测试:1.反复通断ADC的参考时钟,50次。出现的概率约30%。                                                            2.反复加载FPGA程序,     50次。出现的概率约40%。                         这说明,如果是DDR模式的数据,MMCM的方案慎用。                                如果是SDR模式的数据,比如说其数据率在800M,那么这个MMCM方案是优先选取的方案。                       3.IDELAY方案要比MMCM方案要灵活一些。                         我们都在知道,找最佳DATA/CLOCK 时序关系,就是动态调整IDDR的采样时钟。一般的做法都是                        找出DATA的valid window的低端沿,再找出valid window的高端沿。得到这两个条件的相移次数。                        这两个相移数,相加再除2就是数据的最佳采样时候。这一点我是在做DDR2/3的时候学会的。                         计算出最佳采样点后,IDELAY 可以使用load这个信号,直接将所需的TAP值写入到IDELAY中。                        MMCM就没有这样一个port.因此如果使用自动调整随路时钟相位时,相应的FPGA的状态机要复杂一些。 2.第二点就是在选定上述方案后,在板上测试获得的最佳DATA/CLOCK 时序关系 如何才具备高可信度?   谈到这个话题,这是我偶然发现的。我采样的是自适应的方法,写一个状态机每次上电后,自动调整IDELAY的TAP,获取TAP最佳值。   我的FPGA代码,只有这个ADC接口代码时,假设获得的DATA的valid window的高、低端沿及其最佳TAP位置的 区间分别是     是[2,5],[14,19],[8,12]. 换一种方式来给大家解释:如果数据用眼图表示的话,其眼宽还是比较大的,大约是2到19Z这么宽。   整个FPGA代码集成完毕后,再测试。发现数据眼图变差了,严宽变的很小了。   就是因为这个发现,我想清楚了很多很多FPGA深层次的内容。就其中一小部分,拿出来跟大家交流一下。   我们都知道,FPGA的使用的资源越多,其对电源系统的负载就越大,电源系统的电源纹波就越大。那么Vcco和Vint的电源质量就越差   电源系统的噪声都以一定程度的转移到数据和BUFG输出的钟上,给数据和钟都造成了不同程度的恶化。   记得之前看过一个图,讲的是电源的噪声,以一定的规律,呈现出一定关系,转移为xilinx transceiver的jitter上。在某一个频率处有一  拐点。超过这个拐点,电源上的噪声,急剧对gtp/gtx等transceiver的眼图恶化有很多的贡献量。   因此,大家记得等你的FPGA代码都准备好的话,再需要重新测试一遍。   为什么我要专门提出这个现象。因为高速ADC的钟都是在400M以上,这个频率对自动调整最佳DATA/CLOCK关系的状态机的时序收敛是很难的。   有的时候我们使用IDELAY,再获得最佳最可信的DATA/CLOCK关系后,采用FIXED 的模式。这就需要实测一下,确定哪个需要延迟多大才最可靠。因为我们的产品是要做军品方面的高低温试验的哦。高低温试验能经受的住的话,你的设计水平就更上一层楼了。   最后一点,我尝试将ADC的DDR模式速率设置为500m,这意味着,数据率实际频率达到了1Ghz,Valid windonw 达到了令人恐怖的1ns !!!!!   我的设计运行正常。羡慕吧。。。。    吼吼。。。  从这个设计来看,不得不说,XILINX的FPGA还是蛮不错的。赞一个。 如果大家对这些东西感兴趣,可以通过,电子创新网或安富利 联系到我。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0