LVDS高速ADC接口, xilinx FPGA实现

文章介绍了如何使用FPGA的LVDS接口接收高速ADC(如AD9653)产生的数据,强调了ISERDES和IDDR在数据接收中的应用,以及IDELAY在时钟对齐中的重要性。手动和自动对齐方法被提及,以确保数据采样的准确性。文章还提到了在不同环境条件下,如温度变化,自动训练算法能提高系统的鲁棒性。
部署运行你感兴趣的模型镜像

LVDS

即Low-Voltage Differential Signaling。FPGA的selecteIO非常强大,支持各种IO接口标准,电压电流都可以配置。其接口速率可以达到几百M甚至上千M。使用lvds来接收高速ADC产生的数据会很方便。像ISERDES,IDDR,IDELAY,OSERDES,ODDR这种资源在FPGA的IOB中多得是(每个IO都对应有,最后具体介绍),根本不担心使用。最近刚在项目中用到,提供一个思路,具体的器件使用参考FPGA手册。

使用的AD芯片是ADI的AD9653,125M16bit高精度高速ADC,用到的采样速率是80M。其SPI配置会单独开一篇来讲,SPI配置里面有个大坑,本来以为调好了的,后来又发现了问题,调了三天才定位到问题在哪,这就是硬件的魅力(坑爹)所在了吧。这里主要介绍FPGA的接收部分。

接收ADC数据的时序图,

5592243a87145663f8bcd91f01bd0c9a.jpeg

有几点需要注意: 

0 , 可以看出分成三种信号,数据采样时钟DCLK,帧同步信号FCLK,和输入数据DATA 

1,输入数据采样时钟默认是已经对齐了输入数据的中点,但帧时钟是和数据字节边缘对齐的。 

2,使用Iserdes接收数据,Idelay调整时钟延迟。

1,对数据采样时钟的处理如下

通过控制延时,使得CLK和经过IBUFDS的BitClk对齐,从而消除IBUFIO和BUFR还有net的延时。这样所有的输入信号都只经过了一个IBUFDS,延时相等。对Idelay的控制,可以手动调节,也可以用自动算法。(参考xapp524) 

967a0d72dd3a1cb191fefd6613e788be.png

33ba97d475ec1d3c303da0f13a7019a5.png

a7d88ff3fd75ffbc4b6cc0ceccdc00f8.jpeg

282e91880ee35d71242d87f5aa0c2e22.jpeg

03e1b175d67178572b11cd257a7fac5a.jpeg

1.1手动调节对齐

首先来看看手动调节算法,用vivado的vio可以很方便的输入输出,可手动在线修改观察现象,对后面的自动训练算法也有一定的启发作用。 
默认R_delay_cnt=0时,可以看到输入的正弦波形很乱 

914600a3bf311442ad518c8179bfe5c5.png

b59a584b6200d98ebbc7b3f3681acf65.png

慢慢的增加R_delay_cnt,当R_delay_cnt=12时,开始出现稳定的正弦波,实验发现R_delay_cnt=14,15,16时恰好采到时钟的边缘,也就是跟输入的原始时钟对齐了,可以看到采到边缘是allign_word一直在跳变,有的是0,有的是1。一直到R_delay_cnt=18,正弦波都很稳定。有效窗口可以准确计算出来,200M的Idelay参考时钟,78ps/tap。7tap*78ps=546ps。说明数据的有效窗口很小,毕竟是320M的DDR,半个周期都才1.56ns.

2b9641ddb218aceb19ffe53a41790872.png

2747ad7d875f8923d605e2e5b89b2edd.png

8717d87443b188f643ec8dfcdd019985.png

9db0154f1a5231df224d357969455a6d.png

最后取R_delay_cnt=15,可以在代码里面写死。

1.2自动训练算法

既然有了手动调节的算法,为什么还要用自动训练对齐的算法呢?在高低温测试的时候,器件的延迟会受温度的影响发生变化,特别是在时钟频率很高,数据有效窗口很小的时候,这时候就需要能够动态的改变R_delay_cnt的值去自适应delay的变化,增加了鲁棒性。 

有了上面的手动调节算法,自动训练的思路也很简单了。上电复位后R_delay_cnt一直自加,记下最后一个全0和第一个全1的值,取中点。这里只考虑了一种情况,还可能是从全1到全0的情况。代码如下

e06efb48c115a2486f0a97c5cf638e12.png

57b78947c81b5addcb85ae1851239183.png

a8b9c695abc8b586b34360d2560d92df.png

2,对帧同步信号和数据的处理

用上面产生的数据采样时钟同时去采样FCLK和DATA,使用Iserdes可以1:8进行串并转换。但是我们不知道字节的边界在哪里,所以要使用一个bit_slip对串转并的结果进行移位,移位的同时检测FCLK转换的输出,当输出是8’b11110000的时候就停止移位。

7b316718dd325da2d375f39f3c83e70d.png

b321ce5cc5bb1551a582fd4f65d1d14f.png

c6a4fe915d18f4e4cd39953c1d218cc4.jpeg

0dfad600b3d821aa53fd8abebebe16b9.jpeg

5d29473feaeb4380144bbd313792b843.png

96432663e14133ae6135b569fa70cb5e.jpeg

4c2b3416c8020bf10d61ec1b5369f740.jpeg

当数据率不是很高的IDDR数据,使用DDR替代Iserdes接收。IDDR和Iserdes使用的资源相同(待验证)

0bce0b8f78abd8739df170adaba7dce6.png

HR Bank真实的器件如下,一对IOB,可单独使用,可差分使用。后面的资源从上到下依次是ISERDES(ILOGIC),IDELAY,OLOGIC(OSERDES),ILOGIC,IDELAY,OLOGIC。(ILOGIC可作为IDDR,OLOGIC可作为ODDR)。左上角的是一个clock region(如X0Y2)的中间分布的四个BUFIO和BUGR(局部时钟驱动,局部时钟分频,二者延时相等)。后面是一个IDELAYCTRL。 

cae878280e5088affc5dc8f3e3d959c9.png

下面分别详细介绍: 
IDEALY, 
经过IDELAY必须要经过ISERDES,可直通。 
ISERDES, 
ISERDES和ILOGIC使用相同的资源,可互换 
ILOGIC, 

305dcae6071a3e0fe5c2feae0c496d49.png

2055b5ca966379ad840ae7076c5980a3.png

OSERDES,和OLOGIC使用相同的资源,可互换 

功能描述 

• Edge triggered D type flip-flop(FF) 

• DDR mode (SAME_EDGE or OPPOSITE_EDGE) 

• Level sensitive latch(Latch) 

• Asynchronous/combinatorial(直通)

‧  END  

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值