1、DDR3基础:从DDR2到DDR3,我们到底升级了什么?

各位同学,咱们今天聊聊DDR3。说实话,我刚接触DDR3那会儿,也觉得它跟DDR2差不多——不就是频率高一点、电压低一点嘛?后来在项目里踩了坑才发现,事情没那么简单。

DDR3的出现,其实是被逼出来的。当年CPU越来越快,内存带宽成了瓶颈。DDR2跑到800MHz已经气喘吁吁,再往上提频率,功耗和信号完整性都扛不住。怎么办?工程师们想了个办法:预取8n。这个改动,直接让DDR3成了DDR2的“进化版”。

1.1 预取8n:DDR3的核心秘密

先说说预取(Prefetch)是什么。我打个比方:内存颗粒就像一个小仓库,每次取货(读数据)需要时间。DDR2一次取4个数据(4n预取),DDR3一次取8个(8n预取)。

你想想看,同样是一次内存访问,DDR3拿回来的数据量是DDR2的两倍。这意味着什么?内部频率不用提太高,就能把数据吞吐量翻倍。

核心参数对比:

  • DDR2:预取4n,核心频率200MHz时,数据传输率800MT/s
  • DDR3:预取8n,核心频率200MHz时,数据传输率1600MT/s

我在项目中遇到过一件事:有个同事非要把DDR3跑在2000MT/s以上,结果信号眼图惨不忍睹。后来我建议他降回1600MT/s,把预取8n的优势吃透,反而系统更稳定。嗯,这里要注意——预取8n不是万能的,它需要配合好的时序设计。

1.2 突发长度:一次能拿多少数据?

突发长度(Burst Length, BL)跟预取是绑定的。DDR2支持BL=4或8,DDR3固定为BL=8。为什么?因为预取8n,一次就读8个数据,突发长度自然就是8。

我刚开始做DDR3控制器时,总想着能不能改BL=4来节省带宽。结果发现——不行,DDR3内部强制BL=8。你如果只想要4个数据,它也会读8个,剩下4个要么丢弃,要么用掩码屏蔽。

避坑指南:我曾经在某个项目中,为了省带宽把突发长度设成4,结果DDR3颗粒根本不认这个配置。后来查手册才发现,DDR3的BL是硬编码的。所以,设计时一定要按BL=8来规划数据宽度。

1.3 ODT:终结电阻,谁说了算?

ODT(On-Die Termination),说白了就是片内终结电阻。DDR2也有ODT,但DDR3的ODT更灵活、更智能。

为什么需要ODT?高速信号在PCB上跑,遇到阻抗不匹配就会反射,反射回来的信号会干扰原始信号。ODT就是在芯片内部加一个匹配电阻,把反射吃掉。

DDR3的ODT支持多种阻值:40Ω、60Ω、120Ω等。我个人的习惯是:单颗粒用40Ω,多颗粒用60Ω。为什么?单颗粒时信号路径短,反射小,用低阻值能更快吸收能量;多颗粒时信号路径长,用高阻值更稳定。

特性 DDR2 DDR3
预取 4n 8n
突发长度 4或8 固定8
ODT阻值 75Ω/150Ω 40Ω/60Ω/120Ω
工作电压 1.8V 1.5V
最大频率 800MT/s 2133MT/s

注意:ODT不是随便设的。我曾经在一个4片DDR3的板子上,ODT设成40Ω,结果信号反射严重,眼图闭合。后来改成60Ω,问题解决。所以,ODT值要根据实际拓扑结构来调,别照搬参考设计。

1.4 DDR3 vs DDR2:到底差在哪?

说白了,DDR3就是DDR2的全面升级版。但升级不是白给的,代价也有。

  • 电压更低:1.8V降到1.5V,功耗降了约30%。但注意,DDR3的I/O电压是1.5V,FPGA的Bank电压也要对应调整。我见过有人把1.5V的DDR3接到1.8V的Bank上,结果颗粒直接冒烟。
  • 频率更高:DDR3轻松上1600MT/s,DDR2到800MT/s就到头了。但高频意味着PCB设计更严格,等长、阻抗控制、串扰抑制,一个都不能少。
  • 时序更复杂:DDR3增加了ZQ校准、写均衡(Write Leveling)等功能。这些在DDR2上都没有。我第一次调DDR3的ZQ校准,折腾了两天才搞定。

我的建议:如果你还在用DDR2,赶紧换DDR3。成本差不多,性能翻倍。但如果你是从零开始学,直接上DDR4或DDR5也行,不过DDR3的很多概念是通用的,学好了DDR3,后面的都容易理解。

1.5 小结

DDR3的核心就三点:预取8n、突发长度8、ODT可配置。跟DDR2比,它更快、更省电、更智能。但代价是设计复杂度更高,对PCB和时序的要求更严。

下一章,我会讲DDR3的物理层接口——DQ、DQS、地址/命令线,这些东西在FPGA上怎么连、怎么布。嗯,到时候再聊。