读数据的采集是在基于 LUT 的双端口分布式 RAM 中完成的(见图4)。LUT RAM 被配置成一对 FIFO,每个数据位都被输入到上升边沿 (FIFO 0) 和下降边沿 (FIFO 1)的FIFO 中,如图4 所示。这些深度为 16 个输入的 FIFO 异步运行,具有独立的读写端口。

各种存储器接口控制器设计和Xilinx解决方案

来自存储器的读数据写到经过延迟的 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 系列的存储器接口设计,以适合自己的应用。

高性能存储器接口

随着数据速率的提高,满足接口时序方面的要求变得愈益困难了。与写入存储器相比,从存储器中读数据时,存储器接口时钟控制方面的要求通常更难满足。追求更高数据速率的趋势使得设计人员面临巨大挑战,因为数据有效窗口(此为数据周期内的一段时间,其间可获得可靠的读数据)比数据周期本身缩小得快。造成这种情况的原因是,影响有效数据窗口尺寸大小的系统和器件性能参数具有种种不确定性,它们缩小的速率与数据周期不同。