在当今电子技术飞速发展的时代,DDR3 存储器作为一项关键的技术,在众多领域都有着广泛的应用。本文将对 DDR3 存储器的基础知识进行深度解读,帮助读者更好地了解这一重要的存储技术。
首先,我们来了解下 RAM 和 ROM。RAM 是与 CPU 直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,速度极快,常作为操作系统或其他正在运行程序的临时数据存储媒介。然而,其缺点是掉电后数据会丢失,目前主流发展包括 SDRAM、DRAM、DDR 等。而 ROM 一般在整机装入前事先写好数据,在整机工作过程中只能读出,不能像随机存储器那样方便改写,且掉电数据不会丢失,目前主流发展有 FLASH、HDD、SSD 等。
DDR3,全称第三代双倍速率同步动态随机存储器,具有独特的特点。它掉电无法保存数据,需要周期性刷新;时钟上升沿和下降沿都会传输数据,且采用突发传输,突发长度 Burst Length 一般为 8。
在存储方面,DDR3 类似于 excel 表格,行对应行地址,列对应列地址,一个格子就是存储单元,其容量可以是 16bit、8bit 或者 4bit,一个表格即为一个 bank。所以,在访问 DDR3 时,需先指定 bank 的地址,再指定行地址和列地址。其容量计算方式为 Bank 的数量 × 行数量 × 列数量 × 数据位宽。以镁光公司的 DDR3 为例,如 MT41J 64M16 -125,64M×16 表示 bank 的数量是 8 个,行的数量是 8K(2 的 13 次方除以 1024),列的数量是 1K,后面的 x16 就是数据位宽,地址线越多通常表示容量越大。
DDR3 的速度方面,基本规格书给出了时钟频率规定。例如, -125 的时钟周期是 1.25 个 ns,时钟频率就是 1/1.25ns = 800MHz,这是 DDR3 的 IO 时钟频率。DDR3 的带宽计算公式为带宽 = 时钟频率 × 数据位宽 ×2(因为上升沿和下降沿都传输数据)。对于上述 -125 的带宽,理论计算为 800×2×16 = 1600Mbit/s×16 = 3200MB/s = 3.2GB/s,但实际可能只有 2.88GB/S(按 90% 效率算)。这里要注意,算容量时用 1024 算,算速率用 1000 算,因为数据存储容量通常使用 2 的 10 次方(1024)作为进制,而数据传输速率按照标准国际单位制(SI)规定,用 1000 作为进制。

DDR3 的突发长度一般为 8,它指的是当内存控制器向内存发送一个列地址和一个读取 / 写入命令后,内存性连续传输数据包的大小,以 “传输次数” 为单位。总传输数据量 = 突发长度(BL)×64 位,如果 BL = 8,内存能连续传输 64 个字节。突发模式的存在主要是为了提高数据传输效率,降低延迟影响。一方面可以减少命令开销,另一方面符合程序的 “空间局部性” 原理。突发长度与 DDR 的带宽密切相关,传输速率是带宽的 “发动机”,决定潜力,突发长度则是带宽的 “变速箱”,决定效率,影响实际性能。而 BL = 8 在 DDR3/4/5 时代成为主流,是因为它能在有效分摊延迟的同时,避免造成太大的数据浪费,很好地匹配了 CPU 缓存行的大小。
DDR3 的引脚可分为几个模块。电源管脚是其供电的基础;CK 和 CKN 为差分时钟输入,走线时要按 100Ω 阻抗进行,且不同 CPU 可能有差异;数据组走线讲究分组,低 8 位和 LDQS、LDQS#、LDM 为一组,高八位和 UDQS、UDQS# 和 UDM 为一组,同组同层走线;剩下的地址线和命令控制线一般和时钟 CK、CK# 做等长处理,例如 A7 - XILIXN 习惯于将相关引脚(如 BANK34、35,DDR_AO - 14、BA [O - 2]、CSN、RASN、CASN、WEN、ODT、CKE 等)上拉到 VTT,上拉电阻一般为 49.9 欧姆,DDR3 的 CLK 终端电阻需串一个 100 欧姆。

在硬件设计方面,FPGA 次使用 DDR3 时需注意多个问题。首先要选择合适的 FPGAbank,使用 MIG 的 IP 核时用 HP bank 里面的;特殊功能引脚的选择也很重要,时钟输入要设置在 MRCC 引脚的 P 引脚,差分对要 PN 对应;DDR3 的供电电压要与对应的 BANK 电平一致,如 DDR3 通常为 1.5V。由于 DDR3 速度高且是双倍速率采样,硬件设计时要严格考虑信号完整性,开发板在原理图设计、PCB 布线和加工时要充分考虑匹配电阻 / 终端电阻、走线阻抗控制、走线等长控制,以保证 DDR3 高速稳定工作。使用 HP Bank 驱动板载 DDR 存储器芯片时,以 Micron DDR3 芯片为例,其 IO 接口电压标准和外部参考电压通常为 1.5V,所以 FPGA 对应 HP Bank 供电电压值需设定为 1.5V。输入时钟可由外部有源晶振直接提供,也可由源端 FPGA 提供,采用后者更灵活。同时要注意工作频率和带宽单位的区别,当使用高速 IO 接口时,接收端通常需匹配端接电阻,以利于高低电平转换和提高信号完整性,且端接电阻应尽可能放在接收端。FPGA 驱动 DDR3 SRAM 芯片时,FPGA 要配置 output driver 的相关属性参数,SRAM 作为 input receiver 需进行端接电阻匹配,地址总线接口和差分时钟输入接口需匹配对应阻值的电阻。

DDR3 的功耗也是设计中需要考虑的重要因素。常见的 DDR3 除 VDDQ 和 VDD 的 1.5V 供电外,上拉的端接电阻也比较耗电。例如,地址、命令、控制有 21 - 24 根线,每根线 50Ω 电阻,电流约为(0.75/50)×24 = 0.36A,所以设计时 0.75V 电压一般用 500mA 进行设计,通常使用 DC - DC。以镁光的 DDR 为例,对于 X16、16 位宽的芯片,计算可知其功耗较大,对于 VDDQ 或 VDD,通常按 1.5A 余量设计较为合理。
在 PCB 设计方面,要注意等长和阻抗匹配。同组的走线,数据线 20mil 以内、地址线 50mil 以内要做等长处理;数据线必须同组同层,以保证传播时间相同,因为其传输速率高,允许长度差值小;地址线同组同层,但由于允许的长度差值较大,且布线空间可能受限,也可走在不同层;要匹配好终端电阻,单端 50 欧姆,差分 100 欧姆;遵循 3W 原则,处理好长的线;差分线要做包地处理。数据组(DQ, DQS, DM)内所有信号线必须在同一层布线,组内等长要求严格,误差控制在 ±5mil 以内,DQS 作为数据选通信号,组内所有 DQ 和 DM 信号都以它为时序参考。地址 / 命令 / 控制组采用 Fly - by 拓扑布线,以减少 stub 影响并改善信号质量,这些信号以 CK 为参考进行等长,误差控制可放宽至 ±25mil 以内,且 CK 信号在末端需通过电阻(通常 100Ω 差分)端接。DDR3 支持 ODT,能有效抑制反射,地址、命令、控制线在 Fly - by 拓扑的远端需用 VTT 电源(约为 VDDQ 的一半,即 0.75V)进行端接,端接电阻值通常为 40Ω 到 60Ω,VTT 电源需要强大的去耦。同时,要确保所有高速信号线下方有完整的参考平面(优选 GND),严禁信号线跨电源平面分割区域,否则会破坏信号完整性。

DDR3 的布线类型主要有 T 型拓扑和 Fly - BY 拓扑。T 型拓扑适合新手入门,布线对称性强,时钟 / 地址信号能同时到达所有颗粒,无需主控支持读写平衡,调试简单,适用于低频场景(≤1GHz)和颗粒少(≤4 片)的板子,但绕等长耗时,分支多导致布线空间要求高,高频信号衰减快,1GHz 以上性能会暴跌,颗粒多则不适用。Fly - BY 拓扑是高频大神,布线灵活,主干串联节省空间,支持高频(轻松跑 1.6GHz +),颗粒再多也能稳定工作,但信号到达时间不一致,需要主控支持 Write Leveling,且末端必须加端接电阻(50Ω 上拉 Vtt)。