热度 12
2013-10-10 14:50
5464 次阅读|
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