1、DDR基础扫盲:从SDRAM到DDR5,我们到底在谈什么?
各位同学,大家好。我是你们的硬件讲师,今天咱们来聊聊DDR内存。
说实话,DDR这个主题,我讲了不下几十遍了。但每次开新课,我依然会从最基础的东西讲起。为什么?因为很多同学上来就盯着时序图、眼图、训练序列,结果连DDR和SRAM的区别都说不清楚。嗯,这不行。
今天这一章,咱们就把地基打牢。我会带你走一遍DDR的发展史,讲清楚它的核心优势,再对比一下DDR和SRAM到底差在哪。我个人习惯,讲基础的时候一定要把「为什么」讲透,不然你后面调试时序的时候,会一头雾水。
1.1 DDR内存的发展历程:从SDRAM到DDR5
先问大家一个问题:你知道DDR里的「D」代表什么吗?
Double。双倍。
但DDR不是凭空冒出来的。它的老祖宗是SDRAM,也就是单倍数据速率同步动态随机存取存储器。我2005年刚入行那会儿,用的还是DDR2,当时觉得1.6Gbps的速率已经很快了。现在回头看,DDR5都跑到6400Mbps以上了,真是感慨。
咱们按时间线捋一捋:
| 代际 | 推出年份 | 核心频率 | 数据速率 | 预取位数 | 工作电压 |
|---|---|---|---|---|---|
| SDRAM | 1993 | 66-133 MHz | 66-133 Mbps | 1n | 3.3V |
| DDR | 2000 | 100-200 MHz | 200-400 Mbps | 2n | 2.5V |
| DDR2 | 2003 | 200-400 MHz | 400-800 Mbps | 4n | 1.8V |
| DDR3 | 2007 | 400-800 MHz | 800-1600 Mbps | 8n | 1.5V |
| DDR4 | 2014 | 800-1600 MHz | 1600-3200 Mbps | 8n | 1.2V |
| DDR5 | 2020 | 1600-3200 MHz | 3200-6400 Mbps | 16n | 1.1V |
看到没?每一代DDR,核心频率其实没翻那么多倍,但数据速率翻倍了。秘密就在预取机制上。这个咱们后面细说。
我在项目中遇到过最头疼的事,就是DDR3和DDR4的混用。有次客户说「反正都是DDR,插上去试试呗」。结果呢?烧了。电压都不一样,1.5V和1.2V,你想想看,能混吗?
1.2 DDR的核心优势:双倍速率与预取机制
好,咱们来拆解一下DDR最核心的两个概念。
1.2.1 双倍速率(Double Data Rate)
说白了,就是时钟的上升沿和下降沿都传输数据。
你想想看,SDRAM只在时钟上升沿传一次数据。DDR呢?上升沿传一次,下降沿再传一次。同样的时钟频率,吞吐量直接翻倍。这就是「双倍」的由来。
我刚开始学的时候,总觉得这有什么难的?不就是双边沿采样吗?后来做FPGA接口设计才发现,麻烦大了。因为你要保证DQS(数据选通信号)和DQ(数据信号)的边沿对齐,而且DQS是双向的——写的时候由控制器发出,读的时候由DDR颗粒发出。这个切换逻辑,调试起来相当折腾。
1.2.2 预取机制(Prefetch)
预取机制,是DDR能跑高频的另一个关键。
为什么?因为内存颗粒内部的存储阵列(Bank)其实跑不了那么快。你想想看,DDR5的核心频率才1600-3200 MHz,但数据速率已经到6400 Mbps了。内部阵列跟不上外部接口的速度,怎么办?
答案就是:一次读多个bit,然后串行化输出。
举个例子:
- SDRAM:预取1n。每次读操作,内部只取1个bit,然后输出1个bit。
- DDR:预取2n。每次读操作,内部取2个bit,然后在时钟的上升沿和下降沿各输出1个bit。
- DDR2:预取4n。内部取4个bit,分两次双边沿输出。
- DDR3/DDR4:预取8n。内部取8个bit,分四次双边沿输出。
- DDR5:预取16n。内部取16个bit,分八次双边沿输出。
你看,内部阵列的频率其实没怎么变,但通过预取+双边沿,外部数据速率翻着倍往上涨。这就是DDR的聪明之处。
我画了一张图,帮你理解这个结构:
这张图你看懂了吗?内部阵列一次取8个bit,然后通过IO接口分4个时钟周期(双边沿)输出。这样内部频率只需要400 MHz,外部数据速率就能达到1600 Mbps。这就是预取机制的魔力。
1.3 DDR与SRAM的区别
很多初学者会把DDR和SRAM搞混。其实它们完全是两码事。
我直接给你列个表,一目了然:
| 对比项 | DDR SDRAM | SRAM |
|---|---|---|
| 存储单元 | 电容(需要刷新) | 触发器(无需刷新) |
| 速度 | 较慢(有CAS延迟) | 极快(无等待周期) |
| 容量 | 大(单颗可达16Gb+) | 小(通常几Mb) |
| 成本 | 低(每bit成本低) | 高(每bit成本高) |
| 功耗 | 需要刷新,功耗较高 | 静态功耗低,动态功耗高 |
| 接口 | 复杂(行/列地址复用) | 简单(独立地址线) |
| 典型应用 | 主存、大容量缓存 | CPU缓存、FPGA内部BRAM |
说白了,DDR是「大而慢」,SRAM是「小而快」。你想想看,你的电脑内存是DDR,但CPU的一级缓存是SRAM。为什么?因为CPU需要极快的访问速度,哪怕多等一个时钟周期都会拖慢性能。而内存呢,容量要大,成本要低,慢一点可以接受。
我在FPGA项目中经常遇到这样的场景:需要一个大容量的数据缓冲区。有人会说「用BRAM啊」。但BRAM是SRAM,容量有限。一个中等规模的FPGA,BRAM总共也就几Mb。你要存一帧1080p的图像,至少需要几MB。这时候就必须用DDR了。
- DDR适合大容量、低成本、对延迟不敏感的场景
- SRAM适合小容量、高速度、对延迟敏感的场景
- 在FPGA设计中,通常用DDR做数据缓存,用BRAM做临时寄存器或FIFO
还有一个容易忽略的点:DDR需要刷新。因为它的存储单元是电容,电荷会漏掉。一般每64ms需要刷新一次。如果你在做低功耗设计,这个刷新电流不能忽视。我有个项目,电池供电的设备,DDR的刷新功耗占了总功耗的15%。后来我们用了自刷新模式(Self-Refresh),才把功耗降下来。
好了,这一章的内容就到这里。DDR的基础概念,咱们算是讲清楚了。下一章,我会带你深入DDR的物理层,聊聊DQ、DQS、地址线、命令线这些信号到底是怎么工作的。到时候咱们再细聊。
可可精品资料库