ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

板载DDR4内存设计核心:电源与时钟的完整指南

板载DDR4内存设计核心:电源与时钟的完整指南 如果你做过带板载DDR4的主板bring-up大概率经历过这样的画面核心电压1.2V量下来很稳时钟频率也按预设设好了DDR4颗粒就是训练不过报错日志翻来覆去就那几个地址。换一颗CPU还是同样结果最后用示波器在颗粒引脚上抓到几百毫伏的纹波叠加才意识到问题根本不在逻辑而在电源和时钟这两个“喂饭的人”。板载DDR4和插槽内存条完全是两种玩法。DIMM内存条坏了可以换频率跑不上去可以怪条子体质板载颗粒焊死在主板上一旦电源和时钟设计有缺陷整板报废。这也是为什么我坚持认为板载DDR4的设计电源和时钟的优先级永远高于信号完整性里的走线等长。信号没对齐还能靠训练算法兜底电源纹波超标或时钟抖动超限那是物理层面的绝路。这篇文章我把DDR4板载内存的电源与时钟设计从头到尾拆开讲清楚包括每个电压域是干什么的、为什么选LDO还是DC-DC、时钟拓扑怎么接、端接电阻怎么取值、上下电时序怎么控制、布局布线要避哪些坑最后附上我常用的电源和时钟参考电路图以及关键器件选型表。内容面向的是正在画原理图或做硬件调试的工程师也适合刚入手DDR4设计、想把底层原理弄明白的学生朋友。1. 为什么板载DDR4比插槽内存更难伺候先理解电源与时钟的角色1.1 从一次“点不亮”的实测说起之前调试过一块工业主板板载4颗DDR4颗粒组成64bit单通道。上电后CPU能够发出复位但DDR4训练一直卡在write leveling阶段。拿万用表量电压VDD 1.2V、VDDQ 1.2V、VTT 0.6V、VPP 2.5V全部在规格范围内。拿示波器看波形发现VDD纹波大约120mVVTT纹波接近80mV看起来似乎不大但DDR4的VREF容限是±1.5%左右的VDDQ也就是大约±18mV。60mV的纹波落在VREF附近直接把高速信号判决推到了错误边缘。这个案例说明一个核心问题DDR4的电压规格窄对噪声极其敏感。电源不只是给颗粒“通电”那么简单它直接决定了信号判决的参考基准。1.2 板载与DIMM的本质差异寄生参数与可调试性插槽内存条的主板设计相对宽容因为DIMM连接器上都有完整的参考设计可以抄走线也可以拉长一点信号路径相对可控。但板载DDR4把颗粒直接贴在PCB上没有插槽缓冲于是出现了接口条内存不太会遇到的问题PCB空间紧凑电源去耦电容阵列和存储颗粒抢面积。去耦电容放不下就拼命往背面塞但过孔寄生电感又削弱了高频去耦效果。没有散热风道温度变化对时钟芯片和电源芯片影响更大。DDR4的时序训练结果与温度强相关温度漂移直接体现在VREF和VTT的稳定性上。可调试性差。插槽内存条可以拔下来换一根排除颗粒问题板载颗粒一旦焊上返修代价极高很多情况下只能整板报废。这意味着设计阶段就必须把电源和时钟的裕量留足。1.3 电源乱序、时钟抖动的危害机制DDR4的电源域和时钟信号本质上是在共同构建一个“采样窗口”。CPU在每一个时钟周期对DQS和DQ进行采样有效窗口取决于数据建立时间tDS和保持时间tDH。而这两个时间参数在物理层面受以下因素制约电源电压偏移供电电压波动会改变内部晶体管的开关速度逻辑电平阈值随VDD变化导致信号跳变沿提前或滞后。VREF漂移DDR4的参考电压VREF一般由VDDQ分压产生VDDQ上的噪声直接耦合进VREF压缩了采样裕量。时钟抖动时钟信号上的周期抖动直接转移到每个数据比特的采样时刻上数据有效窗口越窄对抖动的容忍度就越低。一句话总结电源决定了信号能有多“干净”时钟决定了采样点能有多“准”。这两者任何一个出问题信号完整性做得再好也会前功尽弃。2. DDR4电源树设计电压规格、上下电时序与电源选型2.1 四个关键电压域VDD/VDDQ/VTT/VPP各自干什么DDR4的原理图电源部分首先要搞清楚颗粒上有几个电源域。很多人把VDD和VDDQ接到一起就算完事实际上在板载设计中除非空间极度受限否则我建议按规格书要求分开处理。电源域典型电压用途关键特性VDD1.2V ±3%核心逻辑电源DRAM核心电路使用电流较大对纹波相对宽容但上下电时序敏感VDDQ1.2V ±3%IO输出驱动电源DQ/DQS驱动的源电压影响输出信号摆幅纹波直接决定信号质量VTTVDDQ/2通常0.6V端接电压用于数据线、地址线、控制线的并联端接电流不大但动态电流频繁对纹波敏感VPP2.5V ±5%部分平台字线升压电源写入操作时使用电流小但必须有很多板载设计容易漏掉这个域这里要注意一个细节VTT的定义是VDDQ的一半。如果VDDQ是1.2VVTT就是0.6V。VTT需要在靠近颗粒端接电阻阵列的地方生成走线要短粗因为它承担的是大量端接电阻的瞬间拉灌电流。VTT电源的波动会直接反映在信号的波形成型上是DDR4电源设计里最容易忽视却也最致命的一路。2.2 电源拓扑选型LDO还是DC-DC按电流和纹波定板载DDR4的电源拓扑没有绝对标准答案关键是按电流需求、纹波要求、成本和面积来权衡。VDD1.2V电流最大通常2A起步。如果主板上原本就有1.2V系统电源可以直接复用但必须评估颗粒瞬态电流会不会把系统1.2V电源拉垮。多数情况下我会单独给DDR4 VDD用一颗同步降压DC-DC电感选1µH到2.2µH开关频率放到1MHz以上纹波控制在30mV以内。VDDQ1.2V如果空间紧张可以从VDD取电用磁珠隔离后直接供电但要确保VDD电源层走线足够宽。如果要求高则单独用DC-DC或LDO。实测下来VDDQ用LDO更容易把纹波做低因为IO驱动电流变化频率很高DC-DC的动态响应有时候跟不上。VTT0.6V这颗电源负载是动态变化的数据线上传输的0/1不断切换端接电阻的灌入拉出电流就不断变化瞬态响应要求高。用LDO其实很合适因为VTT本身的功耗不大但要注意LDO的压差和散热。像TI的TLV75706P这种小封装LDO就很适合做VTT。VPP2.5V数码管老化电路或者电荷泵都能做电流只需要几十毫安但必须有。很多板载设计从系统5V或3.3V用一个小LDO拉出2.5V即可。总结一下选型逻辑电流大的地方用DC-DC效率高、但纹波需要额外滤波电流小且动态响应要求高的地方用LDO输出纹波低、电路简单VTT这种需要频繁双向电流的地方优先选输出电容大、环路快的低压差LDO。2.3 上下电时序的控制方案DDR4的上下电时序要求非常明确虽然JEDEC标准允许VDD和VDDQ同时上电但建议VDD先于VDDQVDDQ先于VTTVPP可以在中间任意时刻到达。下电顺序相反VTT先掉然后是VDDQ/VDD最后是VDD。这个顺序怎么控制如果你用的是多路输出电源芯片找带时序控制功能的型号最省事。如果是独立的多颗电源芯片最简单的做法是用前一级的PGPower Good信号去使能下一级电源芯片。在电源芯片的EN引脚上增加RC延时电路保证上电间隔至少1ms到5ms。对于没有PG输出的电源可以用电阻分压监控输出电压通过比较器去控制下一级的EN引脚。实际设计中我更推荐用一颗支持时序配置的电源监控复位芯片配合各电源的PG输出来做时序控制。比如SGM803系列配置好上下电阈值能够自动保证顺序。不要指望靠电阻电容的RC延时做到精确时序温度变化会导致充放电时间漂移在批量生产中很容易出问题。2.4 纹波与噪声预算参考电压VREF为什么是“命门”DDR4颗粒内部会从VDDQ产生参考电压VREF通常通过两个等值电阻分压得到VDDQ的一半。这个分压电桥在颗粒内部但它的参考源头是VDDQ引脚。因此VDDQ上的任何噪声都会按比例耦合到VREF上直接抬升或压低信号的判决阈值。假设VDDQ纹波是50mV峰峰值那么VREF上会被耦合进来25mV的噪声。而DDR4的输入高电平最小值VIH(DC)是VREF0.07V左右输入低电平最大值VIL(DC)是VREF-0.07V左右。25mV的VREF噪声直接吃掉了约18%的噪声裕量。所以在电源设计阶段要给每个电压域设定一个噪声预算电源域建议目标纹波说明VDD≤50mV pk-pk核心逻辑对噪声容忍度稍高VDDQ≤30mV pk-pkIO驱动参考源必须严格VTT≤30mV pk-pk端接电压直接影响信号波形VPP≤50mV pk-pk字线升压要求相对宽松这三个“30mV”的数字就是布线时去耦电容数量的依据。宁可多放几颗100nF小电容也不要省面积导致最后调试时重新加电容。3. 时钟设计拓扑、端接与差分走线3.1 DDR4需要哪几路时钟CK与DQS的分工DDR4的时钟信号有两类原理图设计时必须分清楚CK_t/CK_c差分时钟这是DDR4颗粒的工作主时钟所有命令、地址信号都根据CK的上升沿采样。频率就是DDR4的运行频率比如DDR4-2666的CK频率为1333MHz。DQS_t/DQS_c差分数据选通这是数据线上的采样时钟写入时由控制器发送与DQ同步传输读取时由颗粒返回作为DQ的同步信号。DQS在设计上其实是和数据DQ一起处理的布线时要按数据组单独做等长匹配。但DQS的电源完整性和CK一样重要因为DQS上的抖动会直接影响数据采样窗口。还有一个容易被忽略的时钟信号是地址命令线上的CK参考时钟它在原理图上和CK共享同一个时钟源通过内部PLL分配到命令/地址接收器上。因此CK的抖动不仅是数据采样问题还会严重影响Command/Address总线的建立保持时间。3.2 时钟拓扑单点还是菊花链板载DDR4如果只挂4颗颗粒有人会直接把CK差分走线从一个点分叉到4颗颗粒。这种“星型”或者叫“扇出”拓扑看起来方便但阻抗不连续很严重特别是分叉点本身就是一个阻抗突变区会导致时钟信号上出现反射。我一般更倾向菊花链Daisy Chain拓扑CK信号从控制器出来依次经过“颗粒1 → 颗粒2 → 颗粒3 → 颗粒4”在末端接一个100Ω差分端接电阻或者通过On-Die Termination把末端的颗粒端接开启。菊花链的走线顺序和DQS/DQ数据线无关而是要看颗粒的物理排列原则是让每个颗粒的CK接收点的走线分支长度尽量短避免stub过长。如果主板布局不允许做严格的菊花链可以接受一定长度的stub但每个stub长度不要超过3mmDDR4对时钟stub的容忍度远低于数据线。很多人误以为时钟频率越高就越要急着用星型拓扑这个理解反了。高频下更要控制阻抗连续菊花链的母线式结构是最容易保证阻抗一致性的。3.3 端接电阻怎么取值On-Die Termination vs 板端端接DDR4的时钟和地址信号端接有两种方式颗粒内部ODT和板端并联端接。对于CK差分对DDR4颗粒内部一般没有对应的ODT配置项所以必须依靠板端处理。差分时钟的标准做法是在差分对的末端靠近最后一颗颗粒的位置放置一颗100Ω电阻或者两颗50Ω串联后在中间接地具体看参考设计。这颗电阻的作用是吸收时钟信号在末端产生的反射。CMD/Address信号则是单端信号一般通过一颗电阻上拉到VTT完成端接。端接电阻的取值通常为22Ω到39Ω取决于走线特征阻抗。走线阻抗控制为50Ω单端时端接电阻取33Ω到47Ω对VTT配合源端串联电阻22Ω左右形成残余反射抑制网络。关于ODTDDR4颗粒在DQ/DQS上有内置ODT通过模式寄存器配置不需要在板上端接。而CMD/Address没有内置ODT必须在板级加端接电阻。这是原理图设计时最容易漏掉的地方。3.4 为什么DDR4默认频率2666成了常见档位写到这里顺便回答一个高频问题为什么DDR4默认频率普遍是2666MHz其实DDR4的JEDEC标准速率档位包括1600/1866/2133/2400/2666/3200而“默认频率2666”成为最常见档位的原因有两方面一方面DDR4-2666是JEDEC标准从DDR4-2400升级后内存控制器和颗粒普遍支持的标准档位不需要开启XMP或者超频就能稳定运行另一方面2666MHz的数据速率对应1333MHz的时钟频率时信号建立保持时间的压力比较均衡对板级走线和电源噪声的要求在成熟工艺下可以稳定量产。也就是说DDR4-2666本质上是大规模量产选出来的“甜点频率”。如果你的板载DDR4跑不到2666而只能稳定2133问题往往不是颗粒体质而是你设计的时钟抖动和电源纹波在1333MHz时钟下已经逼近极限了。这正好反过来说明电源和时钟设计在DDR4系统中的决定性作用。4. 完整参考电路图电源部分与时钟部分的实例4.1 电源树完整电路图与关键参数下面这张图是我在板载DDR4设计中常用的电源树框架省略了具体的芯片型号参数保留了拓扑和关键元件取值方便你直接抄到自己原理图里。5V_VIN ──┬─────────────────────────┐ │ │ │ ┌────────────────────┐ │ ├─►│ DC-DC Buck 1.2V │─┼────► VDD 1.2V ──► DDR4 VDD引脚 │ │ (2A, 1MHz, L1.5µH)│ │ │ │ └────────────────────┘ │ │ │ │ ├─► 磁珠 ──► VDDQ 1.2V │ ┌────────────────────┐ │ │ ├─►│ LDO 0.6V (VTT) │─┼───► VTT 0.6V ──► 端接电阻阵列 │ │ (1A Low Noise) │ │ │ │ └────────────────────┘ │ │ │ │ │ │ ┌────────────────────┐ │ │ └─►│ LDO 2.5V (VPP) │─┼───► VPP 2.5V ──► DDR4 VPP引脚 └────────────────────┘ │ │ VDD_PG ─► EN(时序控制) VTT_PG ─► EN(时序控制)4.2 时钟缓冲与端接电路图时钟部分的核心是从处理器/控制器的差分时钟输出经过一颗时钟缓冲器扇出到多颗DDR4颗粒的CK引脚然后在末端的颗粒处端接。CPU CK_t/CK_c ──► 时钟缓冲器 ──┬──► 串联电阻22Ω ──► DDR4_1 CK_t/CK_c ├──► 串联电阻22Ω ──► DDR4_2 CK_t/CK_c ├──► 串联电阻22Ω ──► DDR4_3 CK_t/CK_c └──► 串联电阻22Ω ──► DDR4_4 CK_t/CK_c │ 100Ω差分电阻(末端)所有CK_t/CK_c差分走线在末端颗粒处放置一颗100Ω差分端接电阻。串联电阻的作用是抑制多次反射取值一般在15Ω到33Ω之间具体要看驱动端的输出阻抗和走线阻抗。DQS的数据组端接和DQ一起处理通过颗粒内部ODT配置不需要额外板端端接电阻。4.3 关键器件选型表与实际经验值功能推荐器件类型关键参数备选方案1.2V DC-DC同步降压输出2A以上开关频率≥1MHzTPS62130系列、RT8059VTT LDO低压差、低噪声输出电流≥1APSRR≥50dB100kHzTLV75706P、AP7341VPP LDO普通LDO输出电流≥50mALM1117-2.5、HE9073时钟缓冲器差分1:4缓冲输出相位噪声低支持1.2V供电NB4N121K、SI52111差分端接电阻0402/0603100Ω ±1%尽量靠近末端颗粒无要求去耦电容0402100nF X7R 4.7µF X5R组合10nF应对更高频关于时钟缓冲器的选型我要多说一句宁可选一款功能简单的纯缓冲器也不要选带分频或可配置功能的复杂PLL芯片。板载DDR4不需要生成多个时钟域一个低抖动、低附加相噪的固定1:4差分缓冲器是最简单可靠的选择。5. 布局布线让电源和时钟“分道扬镳”5.1 分区布局电源区、时钟区、颗粒区原理图画得再完美布局布线这一关过不了照样是废板。板载DDR4布局的核心思想是三个字分区域。以DDR4颗粒为中心周围往外分成三个圈第一圈0到3mm去耦电容阵列和VTT端接电阻。这一圈是必须紧贴颗粒引脚的100nF电容到颗粒电源引脚的距离不要超过1mm。第二圈3到10mmVTT LDO和时钟缓冲器。VTT电源芯片必须靠近端接电阻阵列时钟缓冲器要靠近颗粒阵列的中间位置让四路CK走线长度差异最小。第三圈10mm以外DC-DC降压芯片和VDD电源层。DC-DC的电感是辐射源必须远离DDR4颗粒和时钟缓冲器至少保持15mm间距。这个分区的逻辑是高频噪声源DC-DC电感和敏感信号CK/CLK时钟物理隔离去耦电容尽可能贴近负载。5.2 时钟走线等长与阻抗控制DDR4时钟CK差分对的走线我给自己定的设计目标是差分阻抗100Ω ± 10%CK_t和CK_c长度误差≤1mm四路CK差分到各颗粒的长度差尽量控制在5mm以内时钟走线尽量不跨分割必须跨时用陪伴地孔关于等长这里有一个容易误解的地方对于板载DDR4CK到每颗颗粒的长度差其实不需要严格做到和DIMM主板一样变态。因为DDR4的fly-by拓扑本身允许一定长度差只要保证每颗颗粒的时序满足训练容差即可。真正严格的是CK和地址命令线之间的相对关系也就是常说的CK到CSN/WE#等信号的长度匹配。这个必须按芯片手册要求的范围去做。实测经验是CK差分对内长度差控制在0.5mm到1mmCK到CMD/ADDR组长度差控制在手册要求的范围内基本不会出现训练失败。5.3 电源去耦电容阵列的摆放密度与过孔策略VDD和VDDQ的去耦我常用的策略是每颗颗粒电源引脚分布10颗到20颗100nF 0402电容均匀分布在DDR4颗粒电源引脚周围每2到3颗100nF电容配1颗4.7µF 0603钽电容或X5R陶瓷电容在DC-DC输出端放置1颗10µF到22µF的输入输出电容。过孔策略是很多新手容易忽略的。去耦电容到电源层再接负载中间回路过孔越多等效串联电感越大。正确做法是去耦电容尽量放置在与DDR4颗粒同层电源焊盘通过短走线连接颗粒电源引脚短走线上可以直接打一个过孔下到电源平面但要避免“电容—过孔—长走线—过孔—颗粒”这种路径。电源平面在DDR4下方要完整不要被其他信号走线切碎。VTT电源走线要短粗建议至少1mm宽且VTT的端接电阻阵列要有一个完整的覆铜区域作为“VTT岛”再用多个过孔连接下层VTT电源平面。关于电容过孔我的个人习惯是电容两端各只打一个过孔不追求常规说的“扇出过孔越多越好”。过孔多了反而会引入额外的并联谐振点效果不一定好。6. 上电调试与常见问题定位6.1 上电时序实测方法板子回来后不要急着装系统跑内存测试第一步是用示波器量上电时序。用四通道示波器分别接VDD、VDDQ、VTT、VPP四个电压域触发源选VDD上升沿时基设在10ms/div记录四个通道的上升沿顺序。观察点VDD先上升VDDQ其次VTT在VDDQ之后VPP可以提前到达但必须在VDD之前有稳定电压。每个电压域的上升时间应在1ms到10ms之间太陡容易引起过冲太缓可能导致初始化时序不满足。VTT在VDDQ掉电之前不能先掉否则端接二极管等效电路会通过颗粒引脚漏电。很多硬件工程师只看静态电压不看时序结果系统既能启动又偶尔启动失败大概率是时序边缘问题。6.2 初始化失败的第一轮排查清单当DDR4训练失败时按照以下顺序排查比漫无目的地改走线高效得多先确认所有电源电压在颗粒引脚处实测值不只看原理图网络标号。万用表探头最好经过一个测试点直接压测在颗粒旁边。检查上下电时序特别是VTT和VDDQ的顺序。用示波器看CK差分信号的幅值和抖动。正常DDR4-2666的CK信号在颗粒引脚处摆幅应该在±500mV左右周期抖动应该小于40ps。检查CMD/ADDR信号的眼图和建立保持裕量DRAM控制器通常有训练日志可以查看是哪一类信号训练失败。看VREF电平是否等于VDDQ/2。如果颗粒内部VREF出现偏移检查VDDQ纹波和瞬态响应。这张表是我自己项目的排查速查表供参考故障现象优先怀疑对象验证手段Write Leveling失败VTT电源纹波、CK时钟抖动示波器量VTT、CK波形Read训练失败VDDQ纹波、DQS走线等长量VDDQ纹波、查走线长度命令地址训练失败VDD纹波、CMD/ADDR端接量VDD纹波、查VTT端接电阻随机初始化失败上下电时序示波器录四路电源时序高温下不稳定去耦电容不足、电源芯片热漂移热风枪加热颗粒实测电源纹波6.3 用读写测试验证设计的最终裕量硬件改完切记不要只跑一次系统起来就算通过。我推荐做一轮带温度的DDR4读写测试行业里常用memtester、MemTest86或者开发板的DDR training测试程序。测试时关注在常温下连续跑4小时以上无报错高温70℃到85℃下跑1小时无报错低温0℃到-10℃下跑30分钟无报错。如果温度变化时出现间歇性错误优先怀疑电源芯片的高低温性能其次是VTT LDO的热漂移特别是低压差LDO在高温下压差不足时输出会掉出规格。6.4 三个典型坑实测踩过的教训第一坑不要把VDD和VDDQ从同一颗DC-DC的同一路输出直接拉出去。我之前为省面积这么做过结果写训练从没一次通过因为颗粒内部核心逻辑和IO驱动同时瞬态拉流单路DC-DC的动态响应跟不上VDDQ纹波直接超标。第二坑忽视VPP电源的存在。有些参考设计里VPP和某个现有的2.5V电源共用看起来省了一颗LDO但2.5V电源本身还有别的负载瞬态噪声会透过VPP耦合到存储阵列的字线上表现为偶发写失败。VPP单独一路LDO成本增加不到几毛钱换来的稳定性远超这价值。第三坑时钟缓冲器的地返回路径被切割。时钟缓冲器放在DDR4颗粒旁边结果主控芯片的电源平面从下面穿过把地平面切了一刀。CK信号的共模噪声飙升示波器上看差分波形仍然干净但加上地噪声就出来了。最后的解决办法是把时钟缓冲器挪到地平面完整的位置过孔和走线全部重排。修这块板子的过程让我彻底认同一个观点DDR4板载设计里电源和时钟是根信号完整性是树干固件训练算法是树叶。根不稳后面的功夫全白费。最后分享一个我常用的调试小技巧在首批试产板上预先在VDDQ、VTT和CK差分对靠近颗粒的位置预留同轴测试点。这几个测试点在量产板上可以保留也可以不贴料但在调试阶段它们能帮你快速定位问题。省去拿示波器探头在颗粒引脚间硬找位置的时间排查电源纹波和时钟抖动时会轻松非常多。
返回列表