3、DDR的核心工作原理:时钟信号、数据选通信号(DQS)、读写操作的基本流程
好,咱们今天聊聊DDR最核心的东西。说白了,DDR能跑这么快,全靠时钟和DQS这对“黄金搭档”在背后撑着。我当年第一次调DDR的时候,被这两个信号折腾得够呛,后来才慢慢摸透了它们的脾气。
3.1 时钟信号:DDR的“心跳”
时钟信号,就是DDR的脉搏。所有操作都得跟着它走。DDR里用的是差分时钟——CK和CK#,两者相位正好相反。
关键点:DDR的时钟是“双沿采样”。上升沿和下降沿都传数据。所以,时钟频率200MHz时,数据传输率就是400MT/s。
为什么会这样?你想想看,如果只用一个沿,那带宽就浪费了一半。DDR的设计师们聪明,干脆两个沿都用上,效率直接翻倍。我在项目中遇到过有人把时钟频率和传输速率搞混,结果时序约束全算错了,板子调了三天才找到原因。
3.2 数据选通信号(DQS):数据的“保镖”
DQS是DDR里一个很特别的存在。它不像时钟那样一直跳,只在数据传输时才“工作”。
- 读操作时:DQS由DDR颗粒发出,和输出数据边沿对齐
- 写操作时:DQS由控制器发出,和写入数据中心对齐
嗯,这里要注意:DQS也是差分信号,DQS和DQS#。我刚开始做设计时总觉得DQS可有可无,直到有一次板子跑起来数据老是出错,用示波器一抓才发现DQS的相位完全不对。从那以后,我再也不敢小看这个信号了。
个人经验:布局时DQS和对应的DQ数据线一定要等长,误差控制在±20mil以内。我曾经因为偷懒没严格等长,结果高频下数据眼图全闭上了。
3.3 读写操作的基本流程
DDR的读写,说白了就是“发命令→等时间→传数据”这三步。但每一步都有讲究。
3.3.1 读操作流程
- 控制器发送读命令(READ)和列地址
- 等待CL(CAS Latency)个时钟周期
- DDR颗粒输出数据,同时DQS开始跳变
- 控制器用DQS的边沿来锁存数据
我习惯把CL叫做“潜伏期”。命令发出去后,数据不会马上出来,得等一会儿。这个等待时间就是CL。DDR4的CL一般在10-20之间,具体看频率和颗粒体质。
避坑指南:我曾经遇到过读数据时DQS和时钟的相位关系没调好,结果数据采样点正好落在信号跳变沿上。那叫一个惨,数据读出来全是乱的。后来加了DQS的相位偏移校准才解决。
3.3.2 写操作流程
- 控制器发送写命令(WRITE)和列地址
- 等待WL(Write Latency)个时钟周期
- 控制器发出DQS信号,同时输出数据
- DDR颗粒用DQS的边沿来锁存写入数据
写操作和读操作最大的区别在于:写的时候DQS是控制器发出的,而且DQS的边沿要对准数据的中心。为什么?因为这样采样最稳定。你想想看,数据在中间的时候最不容易出错。
3.4 核心知识体系
下面这张图,是我自己总结的DDR核心工作原理。你看一遍就能把整个流程串起来。
3.5 时序参数速查表
这几个参数,做DDR设计时必须烂熟于心。我每次做新项目都会先确认一遍。
| 参数 | 全称 | 说明 | 典型值(DDR4-3200) |
|---|---|---|---|
| CL | CAS Latency | 读命令到数据输出的延迟 | 22个时钟周期 |
| WL | Write Latency | 写命令到DQS发出的延迟 | 14个时钟周期 |
| tRCD | RAS to CAS Delay | 行地址到列地址的延迟 | 22个时钟周期 |
| tRP | Row Precharge Time | 预充电时间 | 22个时钟周期 |
我的习惯:每次拿到DDR颗粒的datasheet,第一件事就是把这几个时序参数抄下来贴在墙上。调试的时候一眼就能看到,省得来回翻手册。
好了,DDR的核心工作原理就这些。时钟是心跳,DQS是保镖,读写流程就是一套标准动作。把这些搞明白了,DDR对你来说就不再是黑盒子了。
公众号:蓝海资料掘金营,微信deep3321