FPGA与高速ADC LVDS数据接口设计考虑

2024-09-02 22:44

本文主要是介绍FPGA与高速ADC LVDS数据接口设计考虑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言:本文描述了ADC和FPGA之间LVDS接口设计需要考虑的因素,包括LVDS数据标准、LVDS接口数据时序违例解决方法以及硬件设计要点。

1. LVDS简介

1.1 什么是LVDS?

LVDS(低压差分信号)标准是业界流行的差分数据传输标准,它是双线、低摆幅差分信号。其优点包括以下几点:

•低电源电压运行

•高速数据传输

•良好的共模噪声抑制

•噪音产生更少

图片

图1:LVDS发送器和接收器

LVDS是在100Ω的受控阻抗介质上进行基带数据传输,其中传输介质可以是PCB走线、背板或电缆。如图1所示,LVDS输出由约3.5mA的电流源组成,该电流源驱动差分对。LVDS接收器具有高直流输入阻抗,因此,LVDS驱动器的大部分电流流过100Ω的终端电阻器,在接收器输入端产生约350mV的电压。

1.2 LVDS标准

表1所示的ANSI/TIA/EIA-644-A(LVDS)标准定义了LVDS信号。本标准定义了驱动器输出和接收器输入特性,它是一个纯电气标准。它不包括基本规范、协议甚至完整的电缆特性,因为这些都取决于应用。这允许在许多应用中轻松采用,也允许参考标准根据所需的信号质量和媒体长度或类型指定所需的最大数据速率。

表1:ANSI/TIA/EIA-644(LVDS)标准

图片

1.3 LVDS优于单端标准的优势

LVDS中使用的差分数据传输方法比CMOS等单端方案更不容易受到共模噪声的影响。因为差分传输使用两条具有相反电流和电压摆动的线来传输数据,而不是CMOS中使用的一条线。LVDS接收器只会查看两个信号之间的差异,可以消除共模噪声。另外,由于磁场的抵消,差分信号也倾向于比单端信号辐射更少的噪声。此外,电流模式驱动器不易产生振铃和开关尖峰,进一步降低了噪声。LVDS与其他信号标准的比较如表2所示。

表2:LVDS与其他信号标准的比较

图片

ANSI/TIA/EIA标准基于一组限制性假设建议最大数据速率为655Mbps,并基于无损耗介质提供了1.923Gbps的理论最大值。数据传输的最终速率和距离取决于介质的衰减特性和来自环境的噪声耦合。

图片

图2:共模电压范围

2. ADC LVDS数据的边沿捕获分析

当LVDS接收器中没有足够的建立和保持时间来捕获数据时,称为边边沿获。由于LVDS对之间的PCB走线长度不匹配,可能会发生数据的边沿捕获。例如,如果6个DDR LVDS对没有以相同的距离路由到FPGA,则边沿捕获发生在12位ADC中。在边沿捕获期间,一些数据位可能会改变其值,导致FPGA不能正确采样ADC数据。

图片

图3:显示了从ADS6129 12位ADC在FPGA内捕获的边沿捕获数据

由于ADC数据的边缘捕获,在图3中观察到峰值。在这种情况下,对比特D6和D8观察到边沿捕获。峰值是由于D6和D8位的建立和保持时间违规造成的。x轴表示采样数,y轴表示12位ADC的信号幅度。

3. 处理边沿捕获问题

边沿捕获问题可以通过两种方法来解决。一种方法是使用ADC LVDS功能来改变LVDS数据线相对于LVDS输出时钟的延迟。另一种方法是使用FPGA内部的延迟组件。

3.1 使用ADC内部的延迟特性

通过使用ADC的串行接口或并行模式调整输出时钟边沿,ADC LVDS数据可以相对于时钟延迟。只有调整输出时钟边沿才有可能改变所有LVDS对相对于输出时钟的建立和保持关系。图4提供了ADS6129串行模式下时钟位置偏移功能的详细信息。

图片

图4:串行模式下ADS6129的时钟位置偏移特性

另外,ADS6129为并行模式控制时,可以通过控制SEN引脚电压来控制时钟延迟,如表3所示。

表3:SEN–模拟控制引脚

图片

3.2 使用FPGA内部的延迟特

解决边沿捕获问题的另一种方法是利用FPGA内部的延迟特性。FPGA的每个LVDS对都有延迟组件。例如,Xilinx FPGA具有称为“IDELAY”的延迟元件,可用于更改每个LVDS对的单独延迟。FPGA的IDELAY非常灵活,可以插入任何LVDS ADC对和FPGA之间。对于图2所示的边沿捕获问题,LVDS对D6_D7和D8_D9需要使用IDELAY组件进行延迟。此外,LVDS数据对之间的偏斜也可以通过在FPGA内使用此IDELAY组件来补偿。

图片

图5:FPGA延迟块与ADC LVDS数据

4. 使用ADC测试模式功能检查ADC和FPGA LVDS数据时序

为了验证建立和保持时间,系统设计人员可以使用测试模式生成可以在FPGA内部验证的特定模式。在测试模式下,可以使用用户自定义模式对每个上升沿和下降沿的位翻转进行编程。这是用FPGA测试ADC LVDS数据接口健康状况的最佳方法。图6提供了ADS6129和ADS6149的这种测试模式特征的信息。

图片

图6:ADC内部的自定义测试模式选项

该测试确定了ADC和FPGA之间的正确接口。如果测试模式通过,则可以认为ADC LVDS与FPGA的数据接口是正确的。图7显示了10 MHz NORMAL模拟输入信号的数字化数据眼图。

图片

图6:10MHz正常输入模拟信号的数字化数据眼图

5. ADC与FPGA之间LVDS信号布线设计考虑

(1)如果ADC输出和FPGA输入引脚之间的布线距离较大,则必须注意将差分阻抗保持在100Ω附近。差分对的总长度并不重要,但在指定内差分对之间的匹配很重要。此匹配规范取决于ADC采样率以及设置和保持时间裕度。

(2)在ADC LVDS输出和FPGA输入之间的任何跨分割处,差分特性阻抗应在90Ω至110Ω之间,由于LVDS信号的边缘速率很快,阻抗匹配非常重要。

(3)最好在PCB中使用至少4层。高速设计需要接地、电源和单端信号(如CMOS)以及LVDS信号的单独层。

图片


图7:典型4层PCB层叠

(4)LVDS线路的最小PCB通孔数量。最好使用45度转弯,避免90度转弯。

(5)LVDS信号在没有终端电阻器的情况下无法工作。最好的选择是使用FPGA的内部100Ω终端电阻器(如果可用)。对于内部FPGA终端电阻器,输入LVDS终端寄存器需要在FPGA粘合逻辑中设置为“TRUE”。

(6)在顶层上布线高速走线可以避免通孔以及通孔引起的电感。然而,在中间层上布线高速走线有助于更好地抑制噪声。在带状线(中间层)而不是微带线(顶部/底部)上路由噪声信号有助于减少EMI。

图片

图8:微带线与带状线


欢迎关注FPGA技术实战公众号,喜欢就多多转发吧!

这篇关于FPGA与高速ADC LVDS数据接口设计考虑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131285

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性