tag 标签: lvds

相关帖子
相关博文
  • 热度 2
    2024-11-7 10:40
    505 次阅读|
    1 个评论
    AD9633默认情况下调试记录(一)
    AD9633在旁路SPI接口时如何在FPGA逻辑中确认字边界 概述 AD9633与FPGA之间的LVDS接口初调试,ADC可以通过SPI接口对其内部寄存器进行各项配置。在SPI接口未调通之前,对LVDS接口初步尝试调试,且已经打通。 在打通LVDS接口的基础上,FPGA收到AD采样结果后,字边界对齐是首要任务。未打通SPI接口的情况,只能使用默认配置进行调试,即在关闭SPI的时候,ADC输出总线也可以强制对外输出识别码(Pattern Code),FPGA收到此码后,即可利用LVDS的Bitslip功能完成字边界对齐。本文即记录此调试过程。 AD9633如何在未打通SPI接口时发送识别码 根据数据手册描述,在禁用SPI接口模式下,CSB直接接AVDD,这样SDIO/OLM引脚依据图1所示表格选择AD输出模式。本系统100MHz@12-bit,所以必然选择2个Lane(目前市面ADC单通道串行输出最高限速1Gbps,100MHz@12bit要单通道输出,则速率高达1.2Gbps)。 图1:输出分道模式(Output Lane Mode)引脚设置 由上确定了CSB和SDIO/OLM两个引脚的接法,下面确定SCLK的接法。SCLK/DTP引脚在禁止用SPI接口模式下用来控制AD的输出模式,即控制输出识别码还是模数转换的数值。 CSB与SDIO/OLM在上述配置的情况下,SCLK/DTP如果接AVDD,则ADC通道对外输出固定的数字识别码,即二进制的“1000 0000 0000”,即或十六进制的x“800”。具体控制如图2所示,所以切换到正常操作时,将该引脚悬空即可,实际板级设计可以使用拨码来完成图2中两个模式之间的切换。 图2:数字测试识别引脚设置 FPGA逻辑使用识别码 FPGA逻辑收到识别码,即十六进制h’800,其后实际得到数字码会发生移位,如图3所示,实际两个ADC分别接收到的是h'400和h'100,即字边界未对齐。 图3:FPGA的LVDS-RX收到的识别码解串后发生位移 如图3所示,板子上有2片不同的AD9633,均被控制发送十六进制h’800识别码,但是两个ADC均发生了位移,而且位移还不一样。 此时可以根据上图收到的实际数码,编码字边界对齐控制逻辑,让LVDS-RX模块自动完成字对齐。如图4所示,由逻辑生成控制脉冲,然后得到图5所示的控制结果,识别码从h’400到h’800的逐次转变对齐。 图4:控制逻辑产生bitslip控制脉冲提供给LVDS的rx_bitslip_ctrl端口 图5:LVDS收到bitslip脉冲后自动完成字边界对齐 注意事项 在找字边界调试的时候,发现有几个事项需要注意。首先,对于LVDS-RX模块来说,对应每个AD9633在双分道(Lane)的时候,总共有8个LVDS接收通道,所以图4中的rx_bitslip_ctrl端口有8个比特。而在调试的时候通过SignalTap观察仅有最低位能收到bitslip脉冲(如图6),似乎LSB单个bit的控制脉冲完成整个8通道的控制,而且8个通道来自同一ADC,所以其位移也是一样的,这样也不会有问题。 其次,由于ADC输出使用双Lane模式,所以12-bit分成了两个6-bit部分。所以识别码h’800也要分成两部分,所以其位移的可能性总共只有5种,即从十六进制的“800”到“400”、“200”、“100”、“080”以及最后的“040”,不会出现其余可能。 图6:Bitslip控制过程观察 参考 Quad, 12-Bit, 80 MSPS/105 MSPS/125 MSPS, Serial LVDS 1.8 V ADC Datasheet LVDS SERDES Intel FPGA IP User Guide: Intel Arria 10 and Intel Cyclone 10 Devices.
  • 热度 1
    2024-8-11 10:37
    678 次阅读|
    0 个评论
    概述 本文主要记录在实际使用FPGA的LVDS模块初始阶段时候遇到的问题,这些问题都是些非典型问题。 C10器件LVDS-RX对接M10器件LVDS-TX遇到的问题 因为板子上有一片C10和一片M10器件,而且电路设计的时候安排了两个器件之间的LVDS接口连接。所以在C10与ADC对接之前,首先在C10与M10之间进行LVDS接口调试,这样可以将C10的LVDS-RX移植到与ADC采样数据的接口。 由于M10与FPGA之间并未安排随路时钟,所以打算使用FPGA的系统时钟来作为LVDS-RX的参考输入时钟。直接例化LVDS-RX后编译的时候遇到问题,在Fit的时候会出现如下所示的报错信息: Error ( 14566 ): The Fitter cannot place 1 periphery component (s) due to conflicts with existing constraints ( 1 LVDS_CLOCK_TREE(s) ). Fix the errors described in the submessages, and then rerun the Fitter. The Intel FPGA Knowledge Database may also contain articles with information on how to resolve this periphery placement failure. Review the errors and then visit the Knowledge Database at https: //www.intel.com/content/www/us/en/support/programmable/kdb-filter.html and search for this specific error message number. Error ( 175020 ): The Fitter cannot place logic LVDS_CLOCK_TREE that is part of LVDS SERDES Intel FPGA IP LVDS_1Ch6B_RX_altera_lvds_2001_3ymtrna in region ( 38 , 32 ) to ( 38 , 32 ), to which it is constrained, because there are no valid locations in the region for logic of this type. Info ( 14596 ): Information about the failing component (s) : Info ( 175028 ): The LVDS_CLOCK_TREE name (s) : u_LVDS_RX_Test|LVDS_1Ch6B_RX_inst|lvds_0|core|arch_inst|default_lvds_clock_tree.lvds_clock_tree_inst Error ( 16234 ) : No legal location could be found out of 2 considered location (s) . Reasons why each location could not be used are summarized below: Info ( 175013 ): The LVDS_CLOCK_TREE is constrained to the region ( 38 , 32 ) to ( 38 , 32 ) due to related logic Info ( 175015 ) : The I/O pad clkin is constrained to the location PIN_AA18 due to: User Location Constraints (PIN_AA18) File: E:/won/CSEP/C10GX_AD9633/src/C10GX_AD9633.vhd Line: 19 Info ( 14709 ): The constrained I/O pad drives a IOPLL, which drives this LVDS_CLOCK_TREE Error ( 175006 ) : There is no routing connectivity between the LVDS_CLOCK_TREE and destination LVDS_CHANNEL Info ( 175027 ) : Destination: LVDS_CHANNEL u_LVDS_RX_Test|LVDS_1Ch6B_RX_inst|lvds_0|core|arch_inst|channels .rx_non_dpa.serdes_dpa_inst~CHANNEL Info ( 175015 ) : The I/O pad M10_TO_C10_LVDS_RX is constrained to the location PIN_P3 due to: User Location Constraints (PIN_P3) File: E:/won/CSEP/C10GX_AD9633/src/C10GX_AD9633.vhd Line: 29 Info ( 14709 ): The constrained I/O pad is contained within a pin, which is contained within this LVDS_CHANNEL Error ( 175022 ) : The LVDS_CLOCK_TREE could not be placed in any location to satisfy its connectivity requirements Info ( 175021 ) : The destination LVDS_CHANNEL was placed in location LVDS_CHANNEL containing P3 Info ( 175029 ) : 2 locations affected Info ( 175029 ) : LVDSCLOCKTREE_X38_Y32_N4 Info ( 175029 ) : LVDSCLOCKTREE_X38_Y32_N5 Error ( 15307 ) : Cannot apply project assignments to the design due to illegal or conflicting assignments. Refer to the other messages for corrective action. Error ( 16297 ): An error has occurred while trying to initialize the plan stage. Error: Quartus Prime Fitter was unsuccessful. 7 errors, 2 warnings Error: Peak virtual memory: 1397 megabytes Error: Processing ended: Mon Jul 29 17 : 45 : 25 2024 Error: Elapsed time: 00 : 00 :09 Error: System process ID: 12428 后来检查发现该时钟输入引脚与LVDS-RX的引脚位于FPGA的不同bank,如图1所示,所以LVDS-RX例化时需要打开external PLL选项,如图2所示。 图1:LVDS-RX引脚与其参数输入时钟引脚位于FPGA的不同BANK 图2:LVDS-RX例化时PLL设置 如图2所示,LVDS模块例化的时候可以选择使用外部PLL。但是在设计C10与M10之间的LVDS通信的时候,即便因为上述原因使用外部PLL,依然未成功,因为FPGA主时钟输入I/O标准是单端的LVCMOS,LVDS模块似乎仅支持LVDS差分标准。 由于这对C10与M10之间的LVDS差分对正好与ADC差分对接入同一个FPGA的bank,所以在例化的时候,将LVDS-RX的参考输入时钟直接接入ADC的FCO,这样就成功了,可以实现M10串行发送,而C10进行串行接收。 根据正常理解,LVDS数据线可以与参考时钟位于不同的BANK,只是此时必须使用外部PLL形式。上述示例并未验证是否可行,因为如图1所示的不同bank的时钟是单端输入,应该是无法直接用作LVDS的参考时钟。另外,也尝试进行PLL级联,即在例化LVDS模块的时候,并未选择图2中“Use external PLL”,LVDS模块直接内置PLL,外部再例化一个PLL使用该单端时钟,再使用PLL的输出时钟来作为LVDS的参考时钟,但是这样使用并未获得通过,在编译的时候会出现下述报错信息。 Error ( 18694 ): The reference clock on PLL "u_LVDS_RX_Test|LVDS_1Ch10B_RX_inst|lvds_0|core|arch_inst|internal_pll.pll_inst|altera_lvds_core20_iopll" , which feeds an Altera LVDS SERDES IP instance, is not driven by a dedicated reference clock pin from the same bank. Use a dedicated reference clock pin to guarantee meeting the LVDS SERDES IP max data rate specification. Error: Failed to synthesize partition Error: Quartus Prime Synthesis was unsuccessful. 2 errors, 22 warnings Error: Peak virtual memory: 726 megabytes Error: Processing ended: Mon Jul 29 15 : 20 : 58 2024 Error: Elapsed time: 00 : 00 : 39 Error: System process ID: 4044 参考 LVDS SERDES Intel FPGA IP User Guide: Intel Arria 10 and Intel Cyclone 10 Devvices.
  • 热度 4
    2024-7-14 12:25
    906 次阅读|
    0 个评论
    概述 SiPM测试系统的信号处理板使用了ADI的单片4通道的高速差分ADC信号,所以FPGA需要通过LVDS接口来收取差分高速ADC送出的差分串行数据。 本文讨论FPGA如何例化LVDS模块,以及几种用来收取外部ADC采样后送来的高速差分串行数据。 10代器件LVDS实例化界面 在Intel的10代器件中有Arria、Cyclone、MAX以及Stratix几种,我们使用的是Cyclone系列10代GX产品。 图1:LVDS模块例化界面 如图1所示为LVDS例化界面,具体使用方法可以参考1“LVDS SERDES Intel FPGA IP User Guide”。这里给出LVDS SERDES通道结构框图,如图2所示。图2下半部分展示的RX通道是本文着重要关注的部分。 图2:Cyclone 10 GX系列器件LVDS Serdes通道结构框图 高速差分ADC数据引入FPGA的方法 高速差分ADC采样后串行数据、时钟以及帧同步总线接入FPGA的方法大致分为以下几种,不同的方法使用的场合有些微差别。 方法一:每个ADC单独将DCO和FRAME接入FPGA,此时不需要RX PLL,DCO必须使用专用时钟引脚。 方法二:每个ADC的FRAME接入FPGA,FRAME必须接专用时钟引脚,使用PLL通过FRAME在内部产生串行高速时钟。 方法三:如果预期到每个ADC之间布线延时差异足够小,此时所有ADC芯片可以使用同一组DCO和FRAME。 方法四:如果无法预估各ADC之间延时差异,又不想使用方法一和方法二,此时可以使用软CDR在初始阶段生成训练码。需要将ADC的SPI接口连接到FPGA。 根据不同的使用场景,又存在下述几种划分: 场景1:类似上述方法一 举个最简单的例子,当FPGA仅处理一个ADC时,FPGA单个bank就可以处理,ADC的所有必要和非必要的信号都可以连接到FPGA。如此,就可以确保安全可靠地接收ADC的采样数据。 此场景的其它例子,比如FPGA需要处理多个ADC的时候,此时可能分为不同情况,属于本场景的情况是FPGA有足够的bank来处理所有ADC,即每个BANK仅处理一个ADC。此时可以按照单个ADC的方法处理。单个bank如果LVDS端口足够,也可以处理多个ADC,但是单个bank仅接一路DCO到时钟引脚。 场景2:多个ADC需要处理,LVDS端口不足 此时为了省略出足够的LVDS端口给串行数据,可以多个ADC共享同一个DCO时钟,此时也省时钟引脚与PLL,有时候可能是时钟引脚或内部PLL不够。 场景3:多个ADC需要处理,时钟引脚不足 此时FPGA没有足够的时钟引脚接收来自ADC的DCO或FRAME,此时可以将DCO接入到普通的LVDS差分对端口,用本地时钟作为LVDS参考时钟,DCO当普通数据,然后根据DCO跳变去取ADC数据。 场景4:多个ADC需要处理,时钟引脚不足的同时,LVDS端口也不足 此时,DCO完全可以连接到FPGA,当异步处理,通过过采样,本地恢复DCO。 以上四种使用场景,风险从场景1到场景4依次递增。 参考 LVDS SERDES Intel FPGA IP User Guide: Intel Arria 10 and Intel Cyclone 10 Devvices.
  • 热度 2
    2024-7-7 13:28
    652 次阅读|
    0 个评论
    概述 我们知道了ALTERA器件的IOE里有DDR寄存器,而且ALTERA提供了DDIO模块供用户可以自动利用这些DDR寄存器。之前我们也探讨了不使用LVDS模块设计高速串行ADC接口原因,本文我们来具体讨论下使用IOE的DDR寄存器设计高速串行ADC接口。 近期有项目需要串行ADC,比如AD9633,替换前期使用并行ADC,比如AD9218. 如果使用ALTEAR的FPGA,可以直接使用厂家提高的LVDS模块来接收ADC的LVDS输出。由于FPGA本身的限制,以及某些需要众多ADC同道应用场合,FPGA无法胜任如此场合,如此才无法直接使用LVDS模块,可以使用迂回方式,即DDIO+移位寄存器来接收高速串行ADC的输出。 DDIO加移位寄存器架构 这里不再介绍什么是DDIO和移位寄存器(shift register),大家可以在ALTERA的开发集成环境Quartus II里找到这两个MegaFunction。 我们知道所谓的高速串行ADC一般包含多个通道,而且符合标准的LVDS接口要求,所以可以直接连接到FPGA的LVDS接口上。一般我们直接在FPGA内实例化LVDS模块来接收ADC的采样数据即可,这在ADC分辨率不高于10bit以及ADC的通道数不多的情况下是非常常见的设计思路。但是基于之前我们分析的原因,我们需要在FPGA内部利用DDIO加shift register来设计该接口,如图1所示。 图1:DDIO加移位寄存器构成的LVDS接收接口设计 如图1所示,这种架构,每个通道需要一个DDIO加两个shift register函数以及PLL来产生快速时钟和慢速时钟(图1所示是一个8bit例子)。我们知道LTM9010当采样频率在100MHz@14bit时,其转换数字输出数据率是1400Mbps,如果采用2-Lane工作模式,那么图1所示的“datain”的速率是700Mbps,那么PLL产生的快速时钟只需350MHz即可,这在现在流行的FPGA中是可以很轻易达成的。 实例分析 这里只是针对DDIO-in的例子来研究ADC输入接口的实现,根据图1,我们来看看一个非常简单8-bit分辨率ADC的接口实现。 根据前面分析,我们知道DDR输入寄存器接收数据并将数据分离成奇数位和偶数位。那么如图1中的数据位0、2、4和6被连接到一个移位寄存器,而数据位1、3、5和7被连接到另一个移位寄存器。这两个移位寄存器就是所谓的软SerDes,用于解串数据。我们还需要一个寄存器将移位寄存器输出的并行数据同步驱动到下一级逻辑。如图2所示,包括了实现LVDS串行接收buffer所有必需的模块。 图2:完整的LVDS接收器模块 图3:具体实现 分析及结论 探讨了FPGA内部利用DDIO加移位寄存器架构设计高速串行ADC接口的可能性,最后通过一个实例进行具体分析。 这里我们需要考虑一个问题就是我们前面提到了,我们之所以采用这种方案,是因为ADC的通道数众多,所以需要考虑众多ADC通道之间是否需要同步以及各个ADC通道处理的时候高速时钟和低速时钟是否可以共享的问题。 参考 Arria II GX Device Handbook AN 167 ALTDDIO Megafunction User Guide
  • 热度 6
    2022-10-30 11:03
    2601 次阅读|
    1 个评论
    Lattice Crosslink-NX器件(LIFCL-40-7MG121I)用作视频输入桥接时支持的CMOS型号及可达性能汇总
    作者:Hello,Panda 大家早上好、中午好、晚上好。 熊猫君前几天回老家了,手上没得啥新素材码字,决定水一文,将 Lattice Crosslink-NX 系列器件中熊猫君前一阵子用得比较多的那个型号( LIFCL-40-7MG121I )用作 CMOS 图像传感器接口桥接时所支持的 CMOS 芯片型号简单罗列一下,可能会方便大家选型: (一)桥接的目的和意义 当前,很多监控、工业和特殊应用领域的 Camera Sensor 大多输出的是 LVDS 、 SLVS 或 HiSPi 电平(协议),常用的 Sony 、安森美器件均是如此。后端的处理器如果是 FPGA ,则可以直接接入并解码图像;如果是海思、瑞芯微、英伟达、高通等 SoC 的话,则需要桥接转换为标准的 MIPI D-PHY 比较方便接入。这就是 SLVS 、 LVDS 、 HiSPi 等转 MIPI 桥接存在的目的和意义。 (二)LIFCL-40桥接方案概要 方案采用 Lattice Crosslink-NX 器件( LIFCL-40-7MG121I ), 6mm*6mm BGA 小型封装,可作为一个中间模块单独存在或直接和 CMOS 芯片放置在同一个 PCB 上。如下图: 1 、 SLVS ( LVDS 或 HiSPi )转 MIPI 采用透传模式,即不关注采集的数据内容和正确与否,直接通过 MIPI D-PHY ( CSI-2 协议)转发出去; 2 、主控 SoC 配置 CMOS 和发出控制信号,无需关注 FPGA ,从主控端看,就相当于是 CMOS 直接输出为 MIPI 接口。 (三)LIFCL-40可达的功能性能参数 1 、输入支持电平类型: SLVS 、 LVDS 、 HiSpi ,支持 8bit 、 10bit 、 12bit 、 14bit 、 16bit 串行数据输入; 2 、输入支持的通道速率: 1.2Gbps/Lane Max; 3 、输入支持的通道数: 24 Lane (包含时钟 Lane+Data Lane ) Max ; 4 、输出支持的通道数: 8-Lane MIPI D-PHY Max ; 5 、输出支持的通道速率: 2.5Gbps/Lane ( 20Gbps Max Total ); 6 、输出支持的 MIPI 模式: CSI-2, 连续时钟模式和非连续时钟模式; 7 、支持 IIC 转 SPI 桥( 100KHz 、 400KHz 、 1MHz )。 https://v.qq.com/x/page/e3361hhfldc.html (四)桥接支持的器件列表(不一定全) 备注:输入 / 输出的定义以 FPGA 为基准参考, CH 数为时钟通道 + 数据通道的总数。 SONY的器件可支持:IMX122、IMX117/ IMX172、IMX178、IMX531/IMX541、IMX185、IMX226、IMX236、IMX273、IMX183、IMX250、IMX252、IMX253、IMX264、IMX265、IMX287、IMX661、IMX342、IMX530/IMX540、IMX367、IMX387、IMX532/IMX542、IMX535/IMX545、IMX304、IMX267、IMX255、IMX487/IMX536/IMX546、IMX428、IMX420、IMX537/IMX547/IMX548、IMX437、IMX429、IMX421、IMX392、IMX174、IMX302、IMX430、IMX422、IMX432、IMX425、IMX433、IMX426。 安森美的器件可支持:PYTHON1300、PYTHON2000、PYTHON300、PYTHON480、PYTHON500、PYTHON5000、AR132/AR134/AR140/AR141/AR0237/AR0238/AR0239/AR0331/AR550、XGS12000/XGS16000/XGS2000/XGS20000/XGS30000/XGS5000/XGS8000/XGS9400。 好了,今天的分享就到这里。各位晚安。
相关资源