4、DDR初始化与训练:上电序列、ZQ校准、DQS训练、读写平衡、ODT配置
DDR颗粒上电后,可不是直接就能读写的。
它得经历一套严格的初始化流程,就像电脑开机要自检一样。这套流程要是没走对,系统要么跑不起来,要么跑起来也不稳定。
我个人习惯把这部分叫做「DDR的拜师礼」——颗粒得先认主,然后校准自己的状态,最后才能听候差遣。
4.1 上电序列:第一步不能错
DDR上电有严格的时序要求。说白了,就是哪个电压先来、哪个后到,都有讲究。
我遇到过不少新手,觉得上电嘛,把电通上就行了。结果呢?颗粒初始化失败,或者工作一段时间后莫名其妙死机。
标准的DDR4上电顺序是这样的:
- VDDQ先上电(1.2V,核心供电)
- VDD后上电(也是1.2V,但走不同路径)
- VPP最后上电(2.5V,字线升压)
嗯,这里要注意:VDDQ和VDD可以同时上电,但绝对不能比VPP晚。为什么?因为VPP负责内部字线驱动,如果它没准备好,核心电路就开始工作,容易造成闩锁效应。
上电完成后,还需要等待至少200μs的稳定时间,然后拉低RESET#引脚,再等待500μs,才能开始后续的初始化命令。
4.2 ZQ校准:让阻抗匹配
ZQ校准,全称是ZQ Calibration。你想想看,DDR颗粒内部的驱动器和ODT电阻,实际阻值会随工艺、电压、温度变化。如果不校准,信号质量就没法保证。
DDR颗粒外部会接一个240Ω的精密参考电阻(ZQ电阻)。校准过程就是利用这个参考电阻,调整内部电阻的精度。
校准分为两种:
- ZQCL(长校准):初始化时做一次,耗时约512个时钟周期
- ZQCS(短校准):工作过程中定期做,耗时约64个时钟周期
4.3 DQS训练:找到数据的节拍
DQS是数据选通信号,它和数据(DQ)是同步的。但问题是,从颗粒到控制器的路径上,DQ和DQS的延迟可能不一样。
DQS训练的目的,就是让控制器找到正确的采样窗口——说白了,就是在哪个时刻读取数据最稳。
训练过程大致是这样的:
- 控制器发送特定的训练数据模式(比如PRBS或固定pattern)
- 颗粒返回数据时,控制器逐步调整DQS的延迟
- 找到使数据采样错误率最低的那个延迟值
我记得有一次调试DDR3,发现读数据偶尔出错。用示波器抓了DQS和DQ的波形,发现DQS的边沿正好落在DQ的跳变区。调整了DQS的延迟后,采样点移到了数据眼图的中心,问题就解决了。
4.4 读写平衡:让数据对齐
读写平衡(Read/Write Leveling)是DQS训练的进阶版。它解决的是多颗粒系统中,不同颗粒的DQS到达控制器的延迟不一致的问题。
你想想看,一个DDR通道上可能挂了4颗、8颗甚至16颗颗粒。每颗颗粒到控制器的走线长度不同,DQS的延迟自然也不同。
读写平衡的过程:
- 写平衡:调整每个颗粒的DQS相对于CK的相位,确保写入时DQS的边沿对齐到CK的上升沿
- 读平衡:调整控制器接收每个颗粒DQS的延迟,确保读取时数据能正确采样
4.5 ODT配置:端接电阻的学问
ODT(On-Die Termination),片上端接。说白了,就是在颗粒内部集成端接电阻,用来吸收信号反射。
ODT的配置包括两个参数:
- ODT阻值:常见的有40Ω、60Ω、120Ω等
- ODT使能时机:什么时候开启,什么时候关闭
ODT阻值的选择取决于系统阻抗。一般来说:
| 系统配置 | 推荐ODT阻值 |
|---|---|
| 单颗粒(单Rank) | 40Ω 或 60Ω |
| 双颗粒(双Rank) | 60Ω 或 120Ω |
| 多颗粒(多Rank) | 120Ω |
ODT的使能时机也很关键。写入时,接收端的ODT要打开;读取时,发送端的ODT要关闭。如果搞反了,信号质量会严重恶化。
知识体系总览
下面这张图,把DDR初始化和训练的整个流程串起来了。你可以把它当作一个检查清单,调试时对照着看,不容易漏步骤。
好了,DDR初始化和训练这部分就讲到这里。这些步骤环环相扣,哪一步出了问题,系统都可能跑不起来。调试时,我建议你按照这个流程一步步排查,别跳步。
- 上电顺序错了,颗粒可能直接挂掉
- ZQ校准不准,信号质量差
- DQS训练不到位,数据采样出错
- 读写平衡没做好,多颗粒系统不稳定
- ODT配置不当,反射严重
公众号:蓝海资料掘金营,微信deep3321