第3章 DDR时序基础:Setup/Hold、tDS、tDH、时序裕度
做DDR信号完整性,时序是最绕不开的坎儿。刚开始学DDR的同学,总觉得时序就是一堆数字:建立时间、保持时间、tDS、tDH……其实说白了,这些参数决定了你的数据能不能被接收端正确地“咬住”。
我入行那会儿,第一次调DDR3的板子,眼图看着挺好的,但跑memtest就是报错。找了三天,最后发现是时序裕度只有20ps,温度一上来直接翻车。从那以后,我对时序这根弦就绷得特别紧。
3.1 Setup/Hold:数据采样的“两扇门”
任何一个数字接收器,在时钟边沿到来时,数据必须稳定在一定的时间窗口内。这个窗口由两个关键参数定义:
- 建立时间 (Setup Time, tS):在时钟有效沿到来之前,数据必须保持稳定的最短时间。
- 保持时间 (Hold Time, tH):在时钟有效沿到来之后,数据必须保持稳定的最长时间。
你可以把采样过程想象成拍一张照片——快门按下(时钟边沿)时,物体(数据信号)不能动。tS是快门按下前你必须摆好pose的时间,tH是快门关闭后物体还要保持姿势的时间。
3.2 tDS与tDH:DDR控制器/颗粒的时序规格
在JEDEC标准中,DDR接口会给出两个具体参数来约束信号质量:
- tDS (DQS to DQ Setup Time):数据相对于DQS(数据选通信号)的建立时间。
- tDH (DQS to DQ Hold Time):数据相对于DQS的保持时间。
注意,DDR的数据和DQS是源同步的,也就是说控制器在发送数据的同时,一起发送DQS给颗粒。颗粒用这个DQS来采样数据。所以tDS/tDH描述的是颗粒内部DQS与DQ之间的相对时序要求,而不是系统级的时间。
| 参数 | 含义 | 典型值(DDR4-2400) |
|---|---|---|
| tDS (base) | DQ 在 DQS 边沿前需稳定的时间 | 0.12 ~ 0.25 UI |
| tDH (base) | DQ 在 DQS 边沿后需稳定的时间 | 0.12 ~ 0.25 UI |
| tDS (with derating) | 考虑信号斜率降额后的值 | 可增至 0.35 UI |
降额的原理很简单——信号越缓,接收器内部比较器判断高低的窗口就越模糊,所以需要更长的建立/保持时间。JEDEC的 derating 表是一个二维矩阵,依赖信号斜率(Slew Rate)和负载条件。每个颗粒供应商会给出自己的降额系数,但通常可以参考JEDEC标准表。
3.3 时序裕度:到底够不够用?
时序裕度(Timing Margin)就是实际可用的时间减去要求的最小时间。对于建立时间裕度和保持时间裕度:
Setup Margin = T_clk_q + T_flight - tS - T_settle
Hold Margin = T_hold - (T_clk_q + T_flight_min)
保持时间计算中,走线的最小飞行时间(T_flight_min)是关键。因为如果数据走线比时钟走线短太多,数据提前到达,保持时间就会被破坏。所以DDR拓扑中经常要求数据与DQS严格等长,就是这个道理。
3.4 裕度计算的完整流程
下面是一张我整理的DDR时序裕度计算流程图,把整个分析逻辑串起来:
你看这个流程,不是简单地套公式就完事。实际工程中,走线延时你可能用仿真软件提取,也可以用经验公式估算(例如FR-4介质,信号速度约 60ps/inch)。但skew计算时别忘了时钟树的抖动(jitter)和板级Vref噪声——这些都会间接体现在setup/hold的采样窗口上。
3.5 实际案例分析
记得有一次我调试一块DDR4 SODIMM的参考板,信号完整性仿真显示setup slack有15ps,hold slack有35ps,看着都正。但温度循环到85°C时,随机出现读写错误。
排查后发现两个问题:
- 参考电压Vref有10mV的纹波,叠加在接收端造成了等效的抖动,等效到时序上吃掉了约8ps的setup margin。
- DQS信号在远端有一个阻抗不连续的反射,导致DQS过零点位置偏移,进一步减少了建立窗口。
解决办法:增加Vref滤波电容,并在颗粒端加一个RTT终端到VTT。调整后slack都超过30ps了,问题解决。
- Setup/Hold是采样窗口的基本约束,tDS/tDH是DDR颗粒给出的具体要求。
- 时序裕度必须考虑降额、抖动、噪声、温度变化等因素。
- 计算流程:获取规格 → 提取延时 → 计算skew → 降额修正 → 求slack → 判断。
- 实际调试中,眼图好不一定裕度够,必须做时序分析。