tag 标签: ddio

相关博文
  • 热度 2
    2024-7-7 13:28
    740 次阅读|
    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
  • 热度 12
    2013-10-10 14:50
    5487 次阅读|
    0 个评论
    Altera FPGA 的 IOE  DDR寄存器 介绍 王敏志 概述            本文对 Altera 器件 IOE 的 DDR 功能进行简单介绍, DDR 寄存器可以在时钟的上升沿和下降沿都采集或者发送数据,我们知道利用此特性 FPGA 可以实现 DDR SDRAM 、 DDR2 SDRAM 、 RLDRAM II 、 QDR SRAM 以及 QDRII SRAM 等存储器控制,这里笔者不是要涉及这些特性,而是特别介绍利用IOE的 DDR 寄存器实现某些高速串行应用中解串功能,比如 LVDS 。            ALTERA 提供了专用的 LVDS 函数以及硬件 SerDes 供客户使用,那么我们为什么还要使用 IOE 的 DDR 寄存器来手动搭建 SerDes 呢?这是因为 ALTERA 提供的专用 LVDS 模块只能提供最大串化和解串因子是 10 ,而我们知道现在很多 ADC 的分辨率超过了 10bit ,达到 12bit 、 14bit 甚至更高,这时候就需要我们想其它办法。当然,我们可以利用复用多路 LVDS 模块来解决这个问题,比如 12bit 可以利用两个 6bit lvds 模块。但是这个方法无法解决单 FPGA 处理多 ADC 通道的问题,因为往往有些应用中 FPGA 需要处理的 ADC 通道数远远大于 FPGA 提供的硬 SerDes 数目,这时候必然需要使用到软 SerDes 来解决问题。            这里,笔者只接受 Receiver 的情况,即 DDR 输入寄存器。 DDR 输出寄存器,或者 LVDS 发送( TX )大致类似。   APEX II 器件 IOE 配置成 DDR 输入            首先,我们来看看 ALTERA 一款已经停产的老器件的情况,因为这个 IOE 结构相对比较简单,比较有利于我们理解,如图 1 所示。   图 1 : APEX II IOE 配置成 DDR 输入 I/O          如图 1 所示,有两个“ input register ”和一个“ Latch ”,两个输入寄存器分别使用时钟的上升沿和下降沿驱动。如果查看 DDIO 的用户手册,我们可以得到如图 2 所示的简化后的 DDIO_IN 的架构图。   图 2 :配置成输入 DDR 的 I/O          如图 2 所示,时钟的下降沿触发寄存器 B I 获取第一个数据位,然后在对应的时钟上升沿触发寄存器 A I 获取第二个数据位,为了正确地将数据传输到 FPGA 逻辑内部,使用了另一个寄存器 C I ( 虽然这里显示为锁存器 ) ,在时钟上升沿时将其和 B I 的数据一起驱动到逻辑内部。这里的时钟由 PLL 产生,其频率是高速串行数据率的一半,也就是一个寄存器在该高速时钟的上升沿获取数据,另一个寄存器在该高速时钟下降沿获取数据,而在下降沿获取的数据经过半个时钟周期的延迟和在上升沿获取的数据一起被同步到逻辑内部。          图 3 显示了高速串行数据和高速时钟信号之间的 DDR 时序关系,该高速时钟频率是串行数据率的一半。   图 3 :输入高速串行数据和高速时钟之间的 DDR 时序关系   不同器件 IOE DDR 寄存器比较   查看 ALTERA 不同系列器件手册对于 IOE DDR 寄存器描述,发现还是有一些细微差别,这里只是进行简单的总结。 {C} l   Apex II 的 IOE DDR 寄存器和 Stratix 第一代差别不大,基本相同 {C} l   需要注意的是 Cyclone III 的 IOE 中 DDR 寄存器没有嵌入到 IOE 中,必须使用临近的 LAB 中的寄存器 {C} l   Stratix II 开始高级的 FPGA 中 IOEDDR 寄存器中的那个 Latch 改成了 Register   分析及结论   深入了解了 FPGA 的 IOE DDR 寄存器,研究利用该特性设计高速串行 ADC 的 FPGA 接口。   参考   Stratix III Device Handbook AN 167 ALTDDIO Megafunction User Guide