基于Xilinx 和FPGA的DDR2 SDRAM存储器接口控制器的设
时间:2023-09-29 10:34来源: 作者: 点击: 次本白皮书讨论各种所面临的挑战和 的解决方案,同时也说明如何使用 软件工具和经过硬件验证的参考来为您自己的应用(从低成本的 DDR 应用到像 667 Mb/s 这样的更高性能)完整的存
储器解决方案。
接口趋势和 解决方案
20 世纪 90 年代后期,接口从单倍数据速率 (SDR) 发展到了双倍数据速率 (DDR) SDRAM,而今天的 SDRAM 运行速率已经达到每引脚 667 Mb/s或更高。当今的趋势显示,这些数据速率可能每四年增加一倍,到 2010 年,随着DDR3 SDRAM 的出现,很可能超过每引脚 1.2 Gb/s。见图1。
应用通常可分为两类:一类是低成本应用,降低器件成本为主要目的;另一类是高性能应用,首要目标是谋求高带宽。
运行速率低于每引脚 400 Mb/s 的 DDR SDRAM 和低端 SDRAM 已能满足大多数低成本系统存储器的带宽需求。对于这类应用,Xilinx 提供了 Spartan-3 系列,其中包括 Spartan-3、Spartan-3E 和 Spartan-3A 器件。
高性能应用把每引脚 533 和 667 Mb/s 的 DDR2 SDRAM 这样的存储器接口带宽推到了极限;对于这类应用,Xilinx 推出了 Virtex-4 和 Virtex-5 ,能够充分满足今天大多数系统的最高带宽需求。
带宽是与每引脚数据速率和数据总线宽度相关的一个因素。Spartan-3 系列、Virtex-4、Virtex-5 提供不同的选项,从数据总线宽度小于 72 位的较小的低成本统,到576 位宽的更大的 Virtex-5 封装(见图2)。
高于 400 Mb/s 速率的更宽总线使得芯片到芯片的接口愈益难以开发,因为需要更大的封装、更好的电源和接地-信号比率。Virtex-4 和 Virtex-5 FPGA 的开发使用了先进的稀疏锯齿形 (Sparse Chevron) 封装技术,能提供优良的信号-电源和接地引脚比率。每个 I/O 引脚周围都有足够的电源和接地引脚和板,以确保良好的屏蔽,使由同步交换输出 (SSO) 所造成的串扰噪音降到最低。
低成本存储器接口
今天,并不是所有的系统都在追求存储器接口的性能极限。当低成本是主要的决定因素,而且存储器的比特率达到每引脚 333 Mb/s 已经足够时,Spartan-3 系列 FPGA配之以 Xilinx 软件工具,就能提供一个易于实现、低成本的解决方案。
FPGA 设计的存储器接口和由三个基本构建模块组成:读写数据接口、存储器状态机,以及将存储器接口设计桥接到 FPGA 设计的其余部分的用户界面(图3)。这些模块都在 FPGA 资源中实现,并由数字时钟管理器 (DCM) 的输出作为时钟来驱动。在 Spartan-3 系列实现中,DCM 也驱动查找表 (LUT) 延迟校准监视器(一个确保读数据采集具有正确时序的逻辑块)。延迟校准电路用来选择 LUT 的延迟单元的数量,这些延迟单元则用于针对读数据对选通脉冲线 (DQS) 加以延迟。延迟校准电路计算出与 DQS 延迟电路相同的一个电路的延迟。校准时会考虑所有延迟因素,包括所有组件和布线延迟。
用户界面是一种握手型的界面。用户发出一条读或写命令,如果是写命令的话还包括地址和数据,而用户界面逻辑以 User_cmd-ack 信号回应,于是下一条命令又可发出。
在 Spartan-3 系列实现中,使用可配置逻辑块 (CLB) 中的 LUT 来实现读数据采集。在读事务过程中,DDR 或 DDR2 SDRAM 器件将读数据选通脉冲 (DQS) 及相关数据按照与读数据 (DQ) 边沿对齐的方式发送给 FPGA。在高频率运行的源同步接口中采集读数据是一项颇具挑战性的任务, 因为数据在非自由运行 DQS 的每个边沿上都会改变。读数据采集的实现使用了一种 LUT 的 tap 延迟机制。DQS 时钟信号被适量延迟,使其放置后在读数据有效窗口中具有足够的余量,以在 FPGA 内被采集。
读数据的采集是在基于 LUT 的双端口分布式 RAM 中完成的(见图4)。LUT RAM 被配置成一对 FIFO,每个数据位都被输入到上升边沿 (FIFO 0) 和下降边沿 (FIFO 1)的FIFO 中,如图4 所示。这些深度为 16 个输入的 FIFO 异步运行,具有独立的读写端口。
来自存储器的读数据写到经过延迟的 DQS 上升边沿的 FIFO_0 中,并写到经过延迟的DQS 下降边沿的 FIFO_1 中。将读数据从 DQS 时钟域传输到存储器控制器时钟域就是通过这些异步 FIFO 完成的。在存储器控制器的时钟域中,可以从 FIFO_0 和FIFO_1 同时读出数据。FIFO 的读指针在 FPGA 的内部时钟域中生成。写使能信号(FIFO_0 WE 和 FIFO1_WE)的生成通过 DQS 和一个外部回送(亦即归一化)信号完成。外部归一化信号作为输出传送至输入/ 输出模块 (IOB),然后通过输入缓冲器作为输入取出。这种技术可补偿 FPGA 与存储器器件之间的 IOB、器件和迹线延迟。从FPGA 输入管脚发出的归一化信号在进入 LUT 延迟电路之前使用与 DQS 相似的布线资源,以与布线延迟相匹配。环路之迹线延迟应为发送给存储器的时钟和 DQS 之迹线延迟的总和(图4)。
写数据命令和时序由写数据接口生成并控制。写数据接口使用 IOB 触发器和 DCM 的90 度、180 度和 270 度输出,发送按照 DDR 和 DDR2 SDRAM 的时序要求与命令位和数据位正确对齐的 DQS。
用于 Spartan-3 系列 FPGA 的一种 DDR 和 DDR2 SDRAM 存储器接口实现已通过硬件进行了充分验证。一个利用 Spartan-3A 入门套件的低成本 DDR2 SDRAM 参考设计示例已完成。此设计为板上 16 位宽 DDR2SDRAM 存储器器件而开发,并使用了XC3S700A-FG484。此参考设计仅利用了 Spartan-3A FPGA 器件可用资源的一小部分:13% 的 IOB、9% 的逻辑 Slice、16% 的 BUFG MUX 和八个 DCM 中的一个。这一实现为其余部分 FPGA 设计所需的其他功能留下了可用资源。
使用存储器接口生成器 (MIG) 软件工具(本白皮书后面的部分有说明),设计人员可以很容易地定制 Spartan-3 系列的存储器接口设计,以适合自己的应用。
高性能存储器接口
随着数据速率的提高,满足接口时序方面的要求变得愈益困难了。与写入存储器相比,从存储器中读数据时,存储器接口时钟控制方面的要求通常更难满足。追求更高数据速率的趋势使得设计人员面临巨大挑战,因为数据有效窗口(此为数据周期内的一段时间,其间可获得可靠的读数据)比数据周期本身缩小得快。造成这种情况的原因是,影响有效数据窗口尺寸大小的系统和器件性能参数具有种种不确定性,它们缩小的速率与数据周期不同。
如果比较一下运行速度为 400 Mb/s 的 DDR SDRAM 数据有效窗口和运行速度为 667Mb/s 的 DDR2 存储器技术,这种情况就一目了然了。数据周期为 2.5 ns 的 DDR 器件拥有 0.7 ns 的数据有效窗口,而数据周期为 1.5 ns 的 DDR2 器件仅有 0.14 ns 的数据有效窗口(图5)。
显然,数据有效窗口的加速减损给 FPGA 设计人员带来了一堆全新的设计挑战,要创建和维护可靠的存储器接口性能,就得采用更有效的方法。
正如 Spartan-3 系列 FPGA 中所实现的那样,使用读数据 DQS 可以把读数据采集到可配置逻辑块 (CLB) 中,但是使用 LUT 把 DQS 或时钟与数据有效窗口中心对齐时,所用的延迟 tap 却很粗糙。CLB 中实现的延迟 tap 具有大约几百微微秒 (ps) 的分辨率,然而,对于超过 400 Mb/s 的数据速率的读取采集时序,所需的分辨率要比基于CLB 的 tap 高一个数量级。Virtex-4 和 Virtex-5 FPGA 采用 I/O 模块中的专用延迟和时钟资源(称为 ChipSync? 技术)来解决这一难题。内置到每个 I/O 中的 ChipSync模块都含有一串延迟单元(tap 延迟),在 Virtex-4 中称为 IDELAY,而在 Virtex-5FPGA 中称为 IODELAY,其分辨率为 75 ps (见图6)。
此实现的架构基于几个构建模块。用户界面负责把存储器控制器和物理层接口桥接到其余 FPGA 设计,它使用 FIFO 架构(图7)。FIFO 有三套:命令/ 地址 FIFO、写FIFO、读 FIFO。这些 FIFO 保存着命令、地址、写数据和读数据。主要的控制器模块控制读、写和刷新操作。其他两个逻辑模块执行读操作的时钟-数据中心对齐:初始化控制器和校准逻辑。