转载:FPGA进行AD采样的噪声问题

转载至 FPGA哪些事 微信公众号:

刚哥专栏008.诡异的噪声

刚哥 FPGA那点事儿 2015-10-20

午饭回来,有些犯困,正琢磨着打个盹儿,突然有人从后面拍了我一下。回头一看,原来是雷炎,他所在事业部做的都是高大上的项目,我们平时接触不多,不太熟悉。

 

他冲我笑道:“打扰你休息了。”

 

我赶紧站起来,道:“没关系,什么事?”

 

他靠在桌子上,道:“要不我就不找你了,这个项目太急了,现在出了问题,他们把责任拍到我身上了,没办法。”

 

我问道:“什么问题啊?”

 

他道:“是这样,我们FPGA前面接了两路ADC,FPGA采到数据后做些算法处理,然后交给DSP。现在功能测试都没问题了,可就是信噪比很差。我本来认为信噪比差肯定是硬件的问题,和FPGA没关系,可他们设计硬件的说硬件设计绝对没问题,是严格按原厂的参考设计做的,把责任硬推到我身上。我也没办法证明不是我的问题,实在没着了,就来找你了。”

 

我道:“没问题,我尽快和大嘴兄协调一下时间,即使不能解决,让他给出出主意也好。”说实话,在这个问题上大嘴兄能否帮上忙,我心里还真没底。

 

“对了,你们那里什么时间方便?”我又问道。

 

“随时恭候,越早越好。那我就不打扰你休息了。”他又拍了我一下,然后就离开了。

 

被他拍了两下,把我睡意全拍没了。

 

 

第二天,大嘴兄和我来到雷炎的实验室,实验室里摆了很多测试设备,看起来都高端大气上档次,好多我都不认识。

 

雷炎拿电路板给大嘴兄介绍电路结构,包括什么放大、滤波、混频等等。这些模拟电路,我听不大懂。而大嘴兄还和往常一样,依旧是静静地倾听,很少插嘴,不知道他能否听懂。

 

谈到问题,雷炎道:“从射频输入信号,在DSP上计算信噪比。结果噪声特别高,信噪比只有10dB左右。硬件工程师说他们的设计没有问题,而且他们也用频谱仪测了,性能确实是好的。这样他们就认为问题出在FPGA上,可在FPGA上已经是数字信号了,我的算法也是验证过的,我认为不可能增加噪声的。后来为了排除硬件问题,我又做了个实验,把测试信号直接从ADC的模拟输入接进去,这样就把前边射频和中频电路给绕开了,FPGA里也把一些中频处理的算法模块旁路了。结果一测试,信噪比虽然还是不符合要求,但比从射频输入好多了,可以达到四五十dB。我觉得这已经可以说明前面的射频和中频模拟电路确实有问题了。可是他们说我把算法模块去掉了,也不能说明问题。但我的算法都是经过算法验证和仿真的,而且时序都没错误,所以我觉得算法模块没问题,还是模拟电路有问题。但虽然有很大提升,信噪比却还是不达标,我就不知道怎么回事了。”

 

大嘴兄点点头,问道:“ADC的采样精度是多少位?采样的模拟信号中频频率是多少?”

 

雷炎想了想,答道:“ADC采样精度是14位,采样率92M,中频频率115M。现在是直接从外部给ADC输入的是100KHz单音信号,ADC基本满量程输入。”

 

大嘴兄道:“按13bit有效位来算,乘以6大约是78dB。嗯,四五十dB确实太低了。FPGA和DSP接口情况如何?”

 

雷炎道:“这个接口肯定没问题,因为这个接口还走控制数据,我也做过很多测试,从来没错过。”

 

“嗯,那咱们先看看FPGA设计吧。”

 

“好。”雷炎把FPGA工程打开,简单介绍了代码结构和功能模块,采样数据进到FPGA后做了滤波抽取降采样,然后让大嘴兄自己浏览。

 

ADC接口的时钟也是从ADC送给FPGA的,时钟走的是全局时钟管脚。大嘴兄又查看了IO报告和约束文件。最后,他打开FPGA Editor,查看布局布线后的结果,主要是ADC时钟的延迟和每个ADC数据输入的延迟。

 

大嘴兄对雷炎问道:“ADC送出来的时钟和数据的相位关系是什么样的?”

 

雷炎答道:“时钟上升沿正对数据中心。”

 

大嘴兄考虑了一下,道:“咱们先改改试试。”

 

雷炎问道:“是FPGA的问题吗?”

 

大嘴兄道:“是,也不全是。来,我说,你改。”

 

他们把综合和map的属性选项改了一下,改成把触发器放进IOB。又在ADC的输入时钟上加入DCM,DCM使用内部反馈,使用默认选项‘System-Synchronous’。然后就开始编译。

 

雷炎问大嘴兄道:“这么改会影响噪声吗?”

 

大嘴兄微微点了点头,答非所问,道:“你的运气很好,也不好。”

 

“什么意思?”雷炎听糊涂了。

 

大嘴兄又道:“说运气好,是因为FPGA的问题非常凑巧没有影响你要实现的功能,让你可以把整个系统调试完成。说运气不好,是FPGA设计虽然有问题但碰巧还让功能是正常的,掩盖了FPGA的问题,使你不能及时发现解决问题。”

 

“到底是什么问题呀?怎么会产生噪声呢?”

 

“你这块板子产生的噪声的主要原因有两个。我们现在解决的是第一个,这个比较容易;第二个比较严重,等我们把这个解决了再说。这个的问题其实就是接口时序的问题。”大嘴兄道。

 

“噢?数字接口也会产生噪声吗?功能都是正确的,我从来都没怀疑过接口时序,您怎么判断是ADC接口时序的问题呢?”

 

大嘴兄道:“我注意到你最后的测试,已经旁路掉了前端模拟电路,因为DSP和FPGA接口没有问题,FPGA内数字信号处理算法也没有问题,并且已经旁路掉了,内部也没有时序错误。这样,如果再假设ADC采样没有问题的话,问题就只可能在ADC接口了。我查看了你的约束文件和IO报告,发现你没有加ADC接口输入的约束,而且ADC输入数据的第一拍触发器也没有放进IOB。接着,我又用FPGA Editor查看了ADC时钟和数据的延迟,证实了我的猜测。采样数据低6位的延迟比高8位要大很多,并且超过时钟延迟大约5ns左右。这样的后果,就是低6位时序可能有问题,也就是低6位数据会有错误,那么采样数据的有效位就变成了8位,信噪比大约是50dB左右。我为什么说你运气好也不好呢,就是因为采样数据错的是低位,看起来只是采样信号噪声比较大;如果错的是高位,采样信号就完全不对了,整个功能看起来就都是错的,但错误明显的好处是会让你很好定位并找到问题。”

 

“噢,这么回事啊!我只是认为数字信号处理不会增加模拟噪声,有点儿想当然了。”雷炎有些懊恼,又问道:“为什么后来那样改呢?”

 

大嘴兄道:“首先,把触发器放进IOB是保证采样数据信号的输入延迟最小,只有管脚进入芯片的延迟,没有FPGA内部布线延迟。而ADC时钟虽然是全局时钟管脚进来经过时钟buffer到时钟网络,延迟也是很大的,在FPGA Editor中看到大约3到4ns,也就是比放进IOB的数据信号滞后了3到4ns。虽然ADC接口进来时是时钟上升沿对数据中间,但经过时钟延迟后,就到数据边缘了,时序还可能有问题。我们又加入了一个DCM,并把选项设置成‘System-Synchronous’,这样DCM就可以补偿时钟从管脚到内部时钟分配的延迟,相当于做了一个零延迟buffer,就是ZDB。这样,在IOB触发器看到的时钟和数据的相位关系就和FPGA管脚看到的一样了,就可以稳定可靠地采到ADC数据了。”

 

“可是,刚才您不是说IO没加约束吗?现在也没加啊!”雷炎真够认真细致的。

 

大嘴兄道:“是应该加上,不过设计这样修改后,加不加输入IO约束对时序都没有影响,因为资源位置已经固定,延迟也固定了,加约束也改变不了延迟。但即使这样,加约束还是有好处的,只要加了IO约束,在静态时序分析报告里就会有datasheet一项,可以报告FPGA的对外输入时序要求,这样你用FPGA和别的器件对接时,就清楚知道FPGA要求的输入信号的建立保持时间了,可以做到心中有数。”

 

“ 原来如此!”雷炎默默地思考着。

 

 

大约二十几分钟后,FPGA编译完成了,雷炎马上下载,并把DSP工程师叫来,进行测试。

 

结果非常理想,信噪比变成了69dB。

 

雷炎很高兴,对大嘴兄道:“真的好了,专家就是不一样,手到病除啊!真是太感谢了!”

 

大嘴兄笑着道:“我哪里是什么专家,我说的也不能保证全对。你先别着急道谢,还没完呢。”

 

“还有什么问题?”雷炎很惊讶。

 

大嘴兄道:“你现在测试输入的是100KHz正弦信号,你的中频是115MHz,这可和实际应用相差甚远啊!”

 

“这有什么差别吗?现在信噪比不是挺好的吗?”雷炎不解地问道。

 

大嘴兄道:“当然有差别了,而且现在信噪比也称不上很好,你满量程输入100KHz的信噪比至少应该到70多dB才可能称得上很好,现在才69dB。”

 

“要求这么高啊?那到底是什么问题呀?”

 

“你开始问我‘是不是FPGA的问题’,我说‘是,也不全是’,你还记得吧。因为我看到你ADC的采样时钟是从FPGA给的,所以就知道ADC的性能一定有问题。”

 

“这个呀?我们这块板子是因为看到FPGA内部有PLL,觉得可以直接用FPGA供给ADC采样时钟,可以节省外部时钟芯片和板面积。我们还觉得挺好呢!”

 

“这可不行。你现在就试试,把ADC的输入信号改回射频输入,我推测信噪比还是十几dB。”

 

“会这样吗?”雷炎有些半信半疑,但还是去找硬件工程师改板子了。

 

不一会儿,板子拿回来了,从一个很大的仪器上把射频信号接进来。信噪比果然还是10dB左右。

 

“到底怎么回事?”雷炎对大嘴兄彻底钦服了,看着大嘴兄,眼神充满渴望。

 

“是采样时钟的问题。ADC采样时钟的抖动会使ADC的性能指标恶化。其中,确定性抖动中的周期性抖动使SFDR无杂散动态恶化,随机抖动加确定性抖动会使SNR信噪比恶化。”

 

“抖动我知道,但确定性抖动和随机抖动是怎么区分的呢?”雷炎问道。

 

“确定性抖动是可重复的、可预测、抖动幅度有限的抖动,一般是由于SSN开关噪声、电源噪声、信号阻抗不匹配引起的反射、串扰和信号噪声等因素引起,周期性抖动属于确定性抖动的一种;随机抖动是不可预测、抖动幅度随机的抖动,一般是来自物理环境内的因素,比如热干扰、辐射、半导体晶体结构等。

 

“对于一个不考虑量化误差的理想ADC,就是无限精度的ADC,假设噪声都是由于抖动引起的。那么基于抖动的信噪比和抖动的关系满足这个公式”说着,大嘴兄写下这个公式,

 

“这个信噪比单位是dBFS,模拟信号是满量程输入。 t j 是抖动RMS即均方根值,包括随机和确定性抖动;你猜这个f是什么的频率?”

 

“是采样率吧?”雷炎答道,“肯定是采样率越高对抖动要求越严格。”

 

大嘴兄摇摇头,道:“不是,这个f不是采样时钟频率,是输入信号频率。”

 

“啊?和采样频率没关系吗?”

 

大嘴兄笑道:“对,信噪比和采样时钟频率没关系,只和采样时钟抖动有关系。采样时钟频率是和采样带宽有关系。信噪比和输入信号频率、采样时钟抖动成反比。”

 

“为什么和输入信号频率有关系呢?”

 

“因为输入模拟信号频率越高,变化率越大,在采样时钟同样抖动大小的情况下误差就越大。所以,信号频率越高,受抖动影响越大。对于中频频率在115MHz,如果采样时钟抖动是300ps,信噪比是13dBFS左右。如果信号频率是100KHz,同样情况下,信噪比大约是74dB。”

 

“怪不得,100K信号和115M中频信号在同样情况下差这么多!”雷炎若有所思道。

 

“但是,如果抖动很小,就相差没这么大了。比如抖动是0.1ps,则100K和115M信噪比分别是144dBFS和82.8dBFS,而即使14bit有效位的量化信噪比也就是14乘以6.02再加1.76等于86dBFS,这时的实际信噪比基本是受量化噪声限制了。刚才我说用FPGA供时钟肯定不行,就是因为FPGA中即使用PLL,输出时钟的抖动也是几百ps甚至到ns量级。”

 

“那ADC采样时钟必须要改回外部时钟了。”雷炎道。

 

“对。你们赶紧改版吧!”

 

 

晚上回来,我对大嘴兄道:“大嘴兄,你真太牛了,雷炎已经对你很崇拜了,我也快崇拜你了。你怎么什么都会呀?”

 

大嘴兄笑道:“我都快崇拜我自己了。其实这都是唬人的,装成很牛的样子而已,虚伪的很。我哪里记得住那么多东西,这些都是你给我说后,我提前做的功课。”

 

“你太谦虚了,让我做功课也不知道从何做起呀!”

 

“我们确实都很虚伪。一个外企的朋友一起喝酒,跟我说,苦恼得很,老外认为他虚伪,排挤他。我对他说,‘他们说你虚伪根本就不对,你不是虚伪,而是太虚伪。他们虚伪的境界没你高,嫉妒你而已。’我这个朋友确实是境界比较高,虚伪得连自己都骗过去了。我还有一丝自知之明,不至于骗过自己。”他说完这些莫名其妙的话,陷入沉思,不再说话。

 

我也默然。

 

  • 16
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值