FPGA 设计人员在满足关键时序余量的同时力争实现更高性能,在这种情况下,存储器接口的设计是一个一向构成艰难而耗时的挑战。Xilinx FPGA 提供 I/O 模块和逻辑资源,从而使接口设计变得更简单、更可靠。尽管如此,I/O 模块以及额外的逻辑还是需要由设计人员在源 RTL 代码中配置、验证、执行,并正确连接到其余的 FPGA 上,经过仔细仿真,然后在硬件中验证,以确保存储器接口系统的可靠性。 本白皮书讨论各种存储器接口控制器设计所面临的挑战和 Xilinx 的解决方案,同时也说明如何使用 Xilinx软件工具和经过硬件验证的参考设计来为您自己的应用(从低成本的 DDR SDRAM 应用到像 667 Mb/sDDR2 SDRAM 这样的更高性能接口)设计完整的存储器接口解决方案。 存储器接口趋势和 Xilinx 解决方案 20 世纪 90 年代后期,存储器接口从单倍数据速率 (SDR) SDRAM 发展到了双倍数据速率 (DDR) SDRAM,而今天的 DDR2 SDRAM 运行速率已经达到每引脚 667 Mb/s或更高。当今的趋势显示,这些数据速率可能每四年增加一倍,到 2010 年,随着DDR3 SDRAM 的出现,很可能超过每引脚 1.2 Gb/s。见图1。 应用通常可分为两类:一类是低成本应用,降低器件成本为主要目的;另一类是高性能应用,首要目标是谋求高带宽。 高于 400 Mb/s 速率的更宽总线使得芯片到芯片的接口愈益难以开发,因为需要更大的封装、更好的电源和接地-信号比率。Virtex-4 和 Virtex-5 FPGA 的开发使用了先进的稀疏锯齿形 (Sparse Chevron) 封装技术,能提供优良的信号-电源和接地引脚比率。每个 I/O 引脚周围都有足够的电源和接地引脚和板,以确保良好的屏蔽,使由同步交换输出 (SSO) 所造成的串扰噪音降到最低。 用户界面是一种握手型的界面。用户发出一条读或写命令,如果是写命令的话还包括地址和数据,而用户界面逻辑以 User_cmd-ack 信号回应,于是下一条命令又可发出。 来自存储器的读数据写到经过延迟的 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)。 显然,数据有效窗口的加速减损给 FPGA 设计人员带来了一堆全新的设计挑战,要创建和维护可靠的存储器接口性能,就得采用更有效的方法。 此实现的架构基于几个构建模块。用户界面负责把存储器控制器和物理层接口桥接到其余 FPGA 设计,它使用 FIFO 架构(图7)。FIFO 有三套:命令/ 地址 FIFO、写FIFO、读 FIFO。这些 FIFO 保存着命令、地址、写数据和读数据。主要的控制器模块控制读、写和刷新操作。其他两个逻辑模块执行读操作的时钟-数据中心对齐:初始化控制器和校准逻辑。 用于地址、控制和数据的物理层接口在 I/O 模块 (IOB) 中实现。读数据在锁存器的第二级(也是 IOB 的一部分)重新采集。 在校准过程中会增加 DQS 和数据的延迟 tap 以执行边沿检测,检测方式是通过连续从存储器中读回数据并对预编写培训模式或存储器 DQS 本身进行采样,直到确定数据选通脉冲 (DQS) 的前沿或前后两沿。之后数据或 DQS 的 tap 数被设定,以提供最大的时序余量。对“基于 DQS”的采集而言,DQS 和数据可以有不同的 tap 延迟值,因为同步实质上分为两个阶段:一个先在 DQS 域中采集数据,另一个把此数据传输到系统时钟域。 在更高的时钟频率下,“基于 DQS ”的采集方法就变得十分必要,其二阶段方法能提供更好的采集时序余量,因为 DDR 时序的不确定性主要限于 IOB 中触发器的第一级。此外,因为使用 DQS 来寄存数据,与时钟-数据 (Tac) 变化相比较, DQS -数据变化的时序不确定性要小一些。例如,对于 DDR2 而言,这些不确定性就是由器件的tDQSQ 和 tQHS 参数给出的。 正如 Spartan-3 系列 FPGA 中所实现的那样,Virtex-4 和 Virtex-5 FPGA 的写时序由DCM 所支持,此 DCM 生成系统时钟的两相输出。存储器的 DQS 由一个输出 DDR 寄存器来输出,这个 DDR 寄存器由系统时钟的同相时钟驱动。写数据则由超前系统时钟90° 的一个 DCM 时钟输出进行时钟控制。这种技术确保了在 FPGA 的输出部分,DQS 与写操作的数据中心对齐。 此设计的其他方面包括整体控制器状态机的逻辑生成和用户接口。为了使设计人员更容易完成整个设计,Xilinx 开发了存储器接口生成器 (MIG) 工具。 控制器设计和集成 创建存储器控制器是一项极其复杂、精细的任务,FPGA 设计人员要解决面临的一道道难题,就需要 FPGA 随附的工具提供更新水平的集成支持。 为设计的完整性起见,对包括存储器控制器状态机在内的所有构建模块加以集成,十分必要。控制器状态机因存储器架构和系统参数的不同而异。状态机编码也可以很复杂,它是多个变量的函数,例如: 架构(DDR、DDR2、QDR II、RLDRAM 等) 组 (bank) 数(存储器器件之外或之内) 数据总线宽度 存储器器件的宽度和深度 组和行存取算法 最后,数据与 DQS 比 (DQ/DQS) 这类参数会进一步增加设计的复杂性。控制器状态机必须按正确顺序发出命令,同时还要考虑存储器器件的时序要求。 使用 MIG 软件工具可生成完整的设计。该工具作为 CORE Generator 参考设计和知识产权套件的一部分,可从 Xilinx 免费获取。MIG 设计流程(图9)与传统 FPGA 的设计流程非常相似。MIG 工具的优点是不必再为物理层接口或存储器控制器从头生成RTL 代码。 MIG 图形用户界面 (GUI) 可用于设置系统和存储器参数(图10)。例如,选定FPGA 器件、封装方式和速度级别之后,设计人员可选择存储器架构,并挑选实际存储器器件或 DIMM。同是这一个 GUI,还可用于选择总线宽度和时钟频率。同时,对于某些FPGA 器件,它还提供拥有多于一个控制器的选项,以适应多个存储器总线接口的要求。另外一些选项可提供对时钟控制方法、CAS 延迟、突发长度和引脚分配的控制。 用不了一分钟,MIG 工具即可生成 RTL 和 UCF 文件,前者是 HDL 代码文件,后者是约束文件。这些文件是用一个经过硬件验证的参考设计库生成的,并根据用户输入进行了修改。 设计人员享有完全的灵活性,可进一步修改 RTL 代码。与提供“黑匣子”实现方法的其他解决方案不同,此设计中的代码未加密,设计人员完全可以对设计进行任意修改和进一步定制。输出文件按模块分类,这些模块被应用于此设计的不同构建模块:用户界面、物理层、控制器状态机等等。因此,设计人员可选择对控制组存取算法的状态机进行自定义。由 MIG 工具生成的 Virtex-4 和 Virtex-5 DDR2 的组存取算法彼此不同。Virtex-5 设计采用一种最近最少使用 (LRU) 算法,使多达四组中的一行总是打开,以缩减因打开/ 关闭行而造成的开销。如果需要在一个新组中打开一行,控制器会关闭最近最少使用组中的行,并在新组中打开一行。而在 Virtex-4 控制器实现中,任何时候只有单个组有一个打开的行。每个应用都可能需要有自己的存取算法来最大化吞吐量,设计人员可通过改变 RTL 代码来修改算法,以更加适合其应用的访问模式。 修改可选代码之后,设计人员可再次进行仿真,以验证整体设计的功能。MIG 工具还可生成具有存储器校验功能的可综合测试平台。该测试平台是一个设计示例,用于Xilinx 基础设计的功能仿真和硬件验证。测试平台向存储控制器发出一系列写和读回命令。它还可以用作模板,来生成自定义的测试平台。 设计的最后阶段是把 MIG 文件导入 ISE 项目,将它们与其余 FPGA 设计文件合并,然后进行综合、布局和布线,必要时还运行其他时序仿真,并最终进行硬件验证。MIG软件工具还会生成一个批处理文件,包括相应的综合、映射以及布局和布线选项,以帮助优化生成最终的 bit 文件。 高性能系统设计 实现高性能存储器接口远远不止实现 FPGA 片上设计,它需要解决一系列芯片到芯片的难题,例如对信号完整性的要求和电路板设计方面的挑战。 信号完整性的挑战在于控制串扰、地弹、振铃、噪声容限、阻抗匹配和去耦合,从而确保可靠的信号有效窗口.Virtex-4 和 Virtex-5 FPGA 所采用的列式架构能使 I/O、时钟、电源和接地引脚部署在芯片的任何位置,而不光是沿着外围排列.此架构缓解了与 I/O 和阵列依赖性、电源和接地分布、硬 IP 扩展有关的问题。此外,Virtex-4 和Virtex-5 FPGA 所使用的稀疏锯齿形封装技术能对整个封装中的电源和接地引脚进行均匀分配。这些封装提供了更好的抗串扰能力,使高性能设计中的信号完整性得以改善。图11 所示为 Virtex-5 FPGA 封装管脚。圆点表示电源和接地引脚,叉号表示用户可用的引脚;在这样的布局中,I/O 信号由足够的电源和接地引脚环绕,能确保有效屏蔽 SSO 噪音。 对于高性能存储器系统来说,增加数据速率并不总能满足需求;要达到希望的带宽,就需要有更宽的数据总线。今天,144 或 288 位的接口已经随处可见。多位同时切换可导致信号完整性问题。对 SSO 的限制由器件供应商标明,它代表器件中用户可为每组同时使用的信号引脚的数量。凭借稀疏锯齿形封装技术良好的 SSO 噪音屏蔽优势和同质的 I/O 结构,宽数据总线接口完全可能实现。 表1 列出了 Virtex-5 LX 器件和满足 600 Mb/s 数据速率下的 SSO 需求的最大数据总线宽度。 设计大容量或密集型存储器系统的另一个挑战是容量负载。高性能存储器系统可能需要由地址和命令信号共用的一条总线驱动的多存储器器件。大容量无缓冲 DIMM 接口就是一个例子。如果每个单列 DIMM 拥有 18 个组件,那么包含两个 72 位无缓冲DIMM 的接口可以在地址和命令总线上拥有多达 36 个接收器。由 JEDEC 标准推荐,并在通用系统中常见的最大负载是两个无缓冲 DIMM。总线上所产生的容量负载会极其庞大,导致信号边沿上升和下降需要多于一个时钟周期,从而使存储器器件的建立和保持出错。图12 所示为 IBIS 仿真所提供的眼图,使用的是不同配置:一个寄存DIMM、一个无缓冲 DIMM 和两个单列无缓冲 DIMM。容量负载的范围从使用寄存DIMM 时的 2 个接收器到使用无缓冲 DIMM 时的 36 个接收器不等。 这些眼图清楚地显示了地址总线的容量负载效果;寄存 DIMM 提供地址和命令总线上一个打得很开的有效窗口。一个 DIMM 的眼张开度在 267 MHz 下仍然不错。然而,当负载为 32 时,地址和命令信号有效窗口便大为缩小,而传统的实现方法已不足以可靠地与两个无缓冲 DIMM 接口。 开发电路板的范围涵盖从低成本 Spartan-3 系列 FPGA 实现到 Virtex-4 和 Virtex-5FPGA 系列器件所提供的高性能解决方案。 |