免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

DDR4内存从原理到实战:时序、IDD与PCB布局布线全解析

DDR4内存从原理到实战:时序、IDD与PCB布局布线全解析 做硬件的人应该都有过这种经历好不容易画完一块板子DDR4的时序却怎么调都调不过或者功能验证时跑个压力测试就死机最后排查半天发现是走线等长没做够、阻抗不连续甚至就是一颗匹配电阻贴错了位置。DDR4这块内容说难也难说基础也基础——说白了它就是一个高速并行总线的存储接口但牵扯到的知识面特别杂协议、时序、信号完整性、功耗、PCB布局布线全都要懂一点。这篇东西就是给刚接触DDR4的人准备的101入门同时也适合做嵌入式、FPGA、原理图设计的朋友拿来对照参考。我会从一个完整的角度把DDR4从里到外捋一遍存储单元原理、IDD电流参数、模式寄存器、2133与3200的实际差异、电路设计时的布局布线要点、原理图引脚定义还会单独讲一个常用的降速配置案例。内容比较多但每个部分我都会尽量说得接地气一些尽量用实际项目中的场景来解释相信不管是学生还是刚转行的工程师读下来都会有不少收获。1. 先搞清楚DDR4到底是什么1.1 DRAM家族里的DDR4定位很多人第一眼看到DDR4 DRAM会有点懵DDR4和DRAM到底是不是一回事这里先把这个概念理清。DRAMDynamic Random Access Memory动态随机存取存储器是存储单元结构的一种类型而DDR4是DRAM在接口和协议层面的第四代标准。换句话说DDR4内存条上的每一颗颗粒本质上都是一个DRAM芯片只是它的外部接口按照DDR4规范来设计。DRAM和SRAM的区别是硬件工程师绕不开的基础题。SRAM用触发器存储数据速度快但面积大、功耗高一般用在CPU缓存这类容量要求不高的地方。DRAM则全靠一个晶体管加一个电容的组合1T1C结构来存比特电容充放电代表1和0密度可以做得很高、成本低但缺点是电容会漏电所以必须定期刷新Refresh。这个刷新机制贯穿了所有DRAM系内存包括DDR3、DDR4、DDR5的生命周期也是后面讲IDD功耗时绕不开的一个大头。再说DDR本身。DDR全称是Double Data Rate双倍数据速率意思是时钟的上升沿和下降沿都传数据等效于同频率SDR SDRAM单倍速率的两倍带宽。从DDR到DDR2、DDR3再到DDR4每一代更新的主线其实就是三件事更高的工作频率、更低的电压、更细的工艺。DDR4的工作电压降到了1.2V相比DDR3的1.5V节能明显同时最高速率能跑到3200MT/s兆传输/秒甚至更高。从系统角度看工程师常说的Memory Systems: Cache, DRAM, Disk是一条完整的数据存储路径。CPU内部的Cache高速缓存通常用SRAM实现访问最快但容量小、贵主内存挂DRAM容量大、速度中等掉电丢数据磁盘/SSD则负责持久化存储容量最大但速度最慢。DDR4承担的角色就是这条路径中间的那一层——如果它性能拉胯了CPU再强也会被内存墙卡住脖子这就是为什么DDR4的时序优化、频率配置在很多项目里会直接影响跑分和实际体验。1.2 外观上怎么区分DDR3和DDR4虽然现在DDR4已经量产很久了但不少新手在拿到内存条或者看原理图封装图的时候还是经常把DDR3和DDR4搞混。最直观的区分方法当然看防呆缺口的位置——这个最靠谱因为不同代的内存条的缺口位置是固定的物理规范。具体来说DDR3的缺口偏左侧距离左侧边缘大约52.6mm位置金手指总长大约133.5mmDDR4的缺口要更靠中间一些在左侧边缘约74.5mm处。另外DDR4金手指的排列是弯曲的中间部分略微向外凸起底部不是完全水平而DDR3的金手指是水平的平直线。这个设计是为了让DDR4插槽在装配时能卡得更牢固同时防止误插。还有一个比较容易忽略的细节DDR4颗粒的封装和DDR3也不同。DDR4的主流封装是78球BGA标准x8位宽颗粒而DDR3常见的是78球BGA或者96球BGAx16颗粒。如果看原理图符号DDR4引入了伪开漏Pseudo-Open Drain的ODT引脚结构DQ引脚上多了额外的终端电阻控制逻辑这在DDR3上没有那么复杂。如果项目里要去仓库翻旧料、识别未知颗粒我一般建议三步走第一步看丝印找到类似MT40A512M8或者K4A8G165WC这种型号编码再对着厂商的规格书确认代数第二步看防呆槽和引脚形状作物理确认第三步才上电读SPD串行存在检测的EEPROM内容用软件读取DIMM信息来最终确认。前面两步适合快速筛选第三步是在上机测试时才做的。2. DDR4的工作机理与关键参数2.1 存储单元的本质电容充放电与SA电路DRAM能存数据核心靠的是那个存储电容。逻辑1就表示电容里有电荷逻辑0就是基本没电荷。听起来很简单但实际工程里麻烦事一大堆电容的电荷量非常小在先进工艺下只有几飞法到几十飞法fF级别读取的时候需要把电荷通过位线Bitline搬运出来但这个时候信号幅度极其微弱直接送出去根本没法识别为0还是1。这就是DRAM内部必须要有SASense Amplifier感测放大器电路的原因。SA电路的基本工作过程大致是这样的读取时先把位线预充电到参考电压VDD/2然后打开存储单元的访问晶体管让存储电容和位线之间做电荷共享Charge Sharing。如果电容里存的是1位线电压会稍微抬升一点点如果存的是0位线电压会稍微降低一点点。这个变化量可能只有几十毫伏甚至更小。紧接着SA把这个微小变化放大成满摆幅的数字信号。所以SA的精度和速度直接决定了一颗DRAM颗粒的读取可靠性和访问速度。这也是为什么DRAM测试中专门有SA相关的测试项目和失效分析分类——SA电路如果offset偏大或者灵敏度不够老化之后就会出现随机读写错误。这里有一点值得和大家说一下因为读取操作会破坏电容上的电荷读出后电容状态被改变所以DRAM每次读取后还要做一个恢复动作把读出来的数据重新写回应答电容。这也意味着DRAM的读操作并不是无损的读取而是在底层做了个写回。很多做系统级的人可能不知道这个细节但它影响了你对DRAM功耗和时序的理解——读操作内部实际是有预先充电位线电荷共享感测恢复写入这一整套流程的。2.2 IDD电流参数怎么读懂DRAM数据手册的功耗指标拿到DDR4颗粒的数据手册一页页翻过去最让人头疼的表格之一就是IDD。IDD全称是IDD Supply Current意思是芯片在不同工作模式下的供电电流单位通常是mA。IDD的细分项特别多常见的有IDD0激活-预充电操作的平均电流、IDD2P预充电低功耗状态电流、IDD2N预充电待机电流、IDD3N激活待机电流、IDD4R/ IDD4W读/写突发模式电流、IDD5B突发刷新电流等。为什么这些参数重要因为它们直接决定了整块板子的电源设计余量。比如你做一块带两通道DDR4的嵌入式核心板选电源芯片比如常见的同步降压芯片RT8231B或者是LTC3616之前就算总功耗和峰值电流就必须逐项加IDD。我通常的做法是这样的先看活化待机电流IDD3N这决定系统常态运行时内存维持的电流。再看IDD0和IDD4W/IDD4R分别对应连续随机访问和突发读写的峰值。最后看刷新电流IDD5B因为刷新是所有bank周期性进行的功耗突发性很强容易造成供电电压跌落。这里给一个概念性的例子。比如某颗8Gb DDR4颗粒数据手册标称IDD4R大约在110mA左右如果板卡上有16颗颗粒单是读突发这一个瞬间VDD供电电流就近1.76A。如果还叠加核电压、IO电压、终端电压同时有瞬态变化电源芯片的负载瞬态响应不过关内存供电纹波就会飙起来直接影响时序稳定性。还有一点要注意IDD测的是单颗芯片的电流实际DDR4模组上还有一小部分功耗来自ODT终端电阻和上拉/下拉电阻。所以估算整条内存功耗时除了颗粒IDD还要加上系统侧的端接损耗。如果做板卡设计我会留至少20%-30%的电流余量避免在高温和全速压力测试下电源处在临界状态。2.3 持续带宽差距DDR4-2133与DDR4-3200的取舍速率等级是DDR4绕不开的话题。DDR4-2133的等效频率是2133MT/s每条通道的位宽是64bit峰值带宽大约是2133 × 8字节 17.06GB/s。DDR4-3200的等效频率是3200MT/s单通道峰值带宽就是3200 × 8 25.6GB/s两者差了大概8.5GB/s也就是50%。但实际项目里很少有人单纯为了峰值带宽就去换更高频率的内存这里面的门道在延迟和时序上。很多人只看等效频率忽略了CLCAS Latency列地址选通延迟这些时序参数。DDR4-2133常见的CL是15也就是15个时钟周期的延迟DDR4-3200常见的CL是22。这里做个简单的延迟换算DDR4-2133下的一个时钟周期约为0.9375ns1/1066.5MHz15个周期大约是14.06nsDDR4-3200的时钟周期约0.625ns1/1600MHz22个周期约13.75ns。你会发现虽然3200的CL周期数更高但由于时钟频率更快实际等待时间反而和2133差不多甚至更快。这就是为什么频率提升带来的收益大但时序调得好不好也很重要的原因。在嵌入式系统比如Zynq、i.MX、RK3588这些平台具体选哪档频率往往不取决于能跑多少而取决于跑多少稳。DDR4-2133之所以在工业板卡上依然大量存在是因为2133速率下的时序裕量更大对PCB走线长度偏差skew、阻抗偏差的容忍度更高温度漂移引起的时序变化也更小。换句话说如果你设计的是宽温工业产品或者对可靠性要求极高的场景2133可能比3200更实用。反过来如果你是消费级产品、跑图形和AI应用3200能带来的带宽收益则是实打实的。还有一个很多人忽视的细节DDR4 2133与3200在系统配置上不仅频率不一样很多寄存器默认值例如DRAM内部的VREF训练值、ODT阻值、驱动强度也会不同。MCU/SoC里的DDR控制器需要对两种速率分别做training和校准不能简单地把2133的配置文件原封不动改成3200就完事。3. DDR4协议、模式寄存器与管脚定义3.1 DDR4的核心协议Bank、Row、Column和刷新DDR4的存储阵列逻辑结构是个三维矩阵Bank组、Row行、Column列。读写数据时要先通过激活ACTIVATE命令打开某一个Bank中的某一行Row行数据全部进入该Bank内的Sense Amplifier阵列相当于这一行的缓存然后再通过列地址读取/写入具体的列Column数据。这个打开行的过程就是tRCDRAS to CAS Delay的来源而列访问到数据真正出现在DQ上则是CL延迟。DDR4和DDR3相比协议层面比较大的变化点是Bank Groupbank分组设计。DDR4把Bank分成若干组同一时刻可以在不同的Bank Group里并行访问这样可以降低冲突、提高随机访问效率。而且DDR4增加了内部Bank数量的选择部分颗粒支持16个Bank分为4个Bank Group每组4个再加上更高密度的Die堆叠VCT/3D DRAM架构也就是通过TSV硅通孔把多层DRAM Die堆叠起来单颗封装的容量可以做得很大。3D DRAM在HBM高带宽内存里面同样用到了TSV堆叠技术只是HBM的接口和协议完全不同。刷新是DRAM生命周期里的例行公事。因为电容会漏电数据放久了就会消失所以控制器要周期性对每行执行刷新命令。DDR3/DDR4里常见的刷新周期是64ms商业级温度范围内芯片内所有行都要在64ms内至少刷新一遍。这个64ms是用芯片内部行数除以刷新周期计算出来的假设芯片有8192行那么每7.8微秒64ms/8192就要连续发刷新命令。到了高温环境比如85°C以上刷新周期还要缩短到32ms因为漏电速度和温度呈指数关系。嵌入式做DDR降速配置的时候刷新周期这项参数也跟着变这点后面会仔细讲。3.2 模式寄存器MR配置这些寄存器到底在管什么DDR4颗粒内部有很多模式寄存器Mode RegisterMR控制器通过MR命令带Bank地址和命令组合来配置DRAM的工作状态。项目里最常用的是MR0、MR1和MR2、MR3这些。MR0主要配置CLCAS Latency读写延迟相关的核心参数以及burst length突发长度和CL/AL。MR1配置ODT片内终端的阻值、驱动强度Driver Impedance、以及是否开启DLL延迟锁定环。MR2配置CWLCAS Write Latency和动态ODT、写入均衡等。MR3配置多用途寄存器、温度相关状态控制Temperature Controlled Refresh可选。MR4内部定时参数比如刷新速率相关的扩展配置。MR5数据总线反转、CRC循环冗余校验等功能开关。这组寄存器不是随便配的。DDR控制器比如Zynq里的DDRC、各种SoC集成的DDRPHY在上电后都会执行一套完整的初始化序列片上校准DQ/DQS训练、写入均衡Write Leveling、读数据眼图训练、VREF校准等等最终把合适的配置写进MR里。如果MR配置错误最常见的现象是读写数据出现稳定错误的bit位表现为固定bit翻转或者能读但写不进去。新手容易踩的坑是手动调了某个MR的CL值或者驱动强度却不知道它和系统控制器里的参数要联动。DDR4控制器里配置的CL是针对接口的总时钟周期数而颗粒MR里写的也是同样的值两边必须保持一致。任何一边改动了另一边没改就会出现初始化正常但高速读写随机错误的问题。所以我在调试时永远会同时打开SoC的DDR配置寄存器和颗粒手册的MR表格逐位对着检查绝不单方面去改一个寄存器。3.3 管脚定义和原理图上的关键词DDR4的管脚定义在原理图和PCB设计中非常重要。以DDR4 x8颗粒为例主要管脚可以分成几类第一类是电源和地。VDD1.2V主供电、VDDQIO供电一般也是1.2V、VPP2.5V字线/激活供电DDR4新增、VSS地。DDR4引入了VPP这个独立供电主要是为了平衡低电压下的访问性能和刷新可靠性设计时别忘了给它配去耦电容很多新手第一次画DDR4原理图就把VPP漏了或者跟VDD串在一起结果上电颗粒直接工作异常。第二类是地址与命令脚A[13:0]地址线BA[2:0]/BG[1:0]Bank和Bank Group地址还有RAS_n、CAS_n、WE_n激活、列选、写使能组合命令、CS_n片选、CKE时钟使能、ODT片内终端控制。第三类是数据与数据选通DQ[7:0]、DQS数据选通、DQS_n、DM_n数据屏蔽/掩码。在DDR4里DQS和DQS_n是差分对通常在设计时和DQ一起做等长误差一般控制在±1mm内具体看系统频率和方案手册要求。DDR4原理图上还会看到ZQ脚这个脚外接一个240Ω误差1%的电阻到地颗粒内部通过它校准输出阻抗和ODT阻抗。这个电阻的精度对信号质量有直接影响千万不能用普通5%精度电阻在位置上也尽量靠近颗粒放置。还有SPD引脚如果是DIMM模组挂一颗EEPROM里面存了内存条的Jedec标准配置信息系统在BIOS/UEFI阶段读取它来做默认初始化。4. DDR4布局布线实战经验4.1 布局的基本思路和分区规划DDR4的布局布线决定了系统能否稳定跑在标称频率。虽然不需要像RF那样玄学但高速并行总线的信号完整性该尊重的还是要尊重。我的经验是把DDR4当成一个微型子系统来设计而不是把颗粒随手丢到板上。第一个原则是器件分组摆放。DDR4控制器SoC/BGA和DRAM颗粒之间的布线区域尽量保持完整不要有其他的敏感信号穿越。DDR4数据组最好是按字节通道粒度摆放每个字节通道byte lane对应一个控制器byte lane 对应颗粒如果x64用8颗x8颗粒的局部区域。这样可以保证字节通道内部的DQ/DQS走线短而紧凑方便最后做等长和分组屏蔽。第二个原则是电源和地平面。DDR4的VDD和VDDQ必须保证有完整参考地平面。如果地平面被切碎了回流路径变长信号边沿的EMI电磁干扰和串扰都会明显恶化。做四层板以上时建议DDR4区域的正下方至少有完整的地层和电源层不要在该区域下方走大功率开关节点的走线否则容易引入板级噪声。第三个原则是去耦电容摆放。VDD和VDDQ的陶瓷去耦电容建议用0.1uF或者0.22uF的多颗组合要放在靠近颗粒供电引脚的位置过孔尽量短最好直接打在电源/地脚旁。VPP的电容一般按数据手册推荐放置。这个细节别省很多高频不稳定问题其实根源是电源去耦不足。4.2 布线关键技术阻抗、等长与拓扑DDR4的布线相比DDR3最大的变化是更严格的阻抗控制和更短的走线距离。以常见DDR4设计为例单端信号DQ、地址、命令特性阻抗建议50Ω±10%部分SoC要求45Ω或者55Ω参考具体设计指南。差分信号DQS、时钟CK差模阻抗100Ω±10%常见。走线层建议用内层带状线stripline保证有完整参考平面避免表层走线带来的阻抗波动和辐射问题。等长要求DQS与DQ组内差建议在±1mm以内DQS与CK组间差建议在±3mm以内以具体SoC手册为准这里只是常见值。地址/控制组与时钟组之间的skew建议控制在±5mm以内同样参考SoC手册。拓扑上DDR4如果是一控制器多颗粒比如8颗x8组成64bit常用的是菊花链fly-by拓扑命令、地址、时钟用串联方式依次经过每颗颗粒并用ODT在末端进行端接。DDR4规范里fly-by拓扑是强制要求相比DDR3的T型拓扑这直接影响了走线排布命令地址总线必须从左到右或从右到左依次穿过颗粒而不能每颗颗粒都从控制器拉等长线过去。fly-by拓扑的好处是每颗颗粒看到的信号路径时序一致性好坏处是DQS和CLK在每颗颗粒位置会有一个天然的偏移所以需要DDR控制器执行读延迟调整写均衡来补偿这个偏移。我第一次画DDR4的时候就是想当然做了个T型拓扑结果训练总失败后来查文档才发现DDR4必须按fly-by来布线。DQ数据组虽然在颗粒之间不做Fly-by而是点对点每组对应一到两颗但它也需要保证组内等长和完整的参考平面。如果板子叠层不均外层走线阻抗和内层不一致尽量把DQ放在同一层上避免不同层的走线因为参考平面不同而产生附加skew。自己检查的时候我会做一轮DRC Review先看每组信号的等长报告再看每根信号是否有足够近的回流地过孔然后检查DDR区域电源平面有没有被分割。建议在投板前用仿真软件如HyperLynx或者ADS对DDR4的关键拓扑做一遍眼图仿真至少能看到走线到60mm以上高频率下的裕量趋势。没有仿真条件的话也要严格按照SoC手册给出的走线长度表来做别自己随意加长。4.3 一个要注意的坑Zynq PS端DDR4降速怎么配置很多基于Xilinx Zynq UltraScale MPSoC的板卡在用DDR4时会遇到DDR4默认配置跑在一个较高的频率上但由于工作温度、电源或者PCB层面的余量不足导致系统不稳定需要降速到更低频率来保证可靠运行。这个降速并不是在软件里改个频率这么简单要做的事情还挺多。首先DDR4降速的核心是在DDR控制器/DDRPHY的配置参数里把与频率相关的时序参数全部重新计算。比如CL、CWL、tRCD、tRP、tRC这些参数的单位是时钟周期频率变了以后这些参数在ns单位下要保持不变或者略大于规范值所以周期数要重新计算。举个例子原来在DDR4-2400下tRCD13.91ns换算时钟周期就是13.91ns ÷ 0.833ns ≈ 17个周期四舍五入。如果降到DDR4-2133时钟周期变成0.9375nstRCD至少要 ceil(13.91/0.9375)15个周期。如果直接用原来的17个周期行不行行的话等于把延迟放得更宽但会损失一些性能。反正只要不低于规范值就行。其次DDR4 PHY的training算法要求有对应的初始化序列和训练模式。降速后训练速率、参考电压训练范围、DQS gate training的位置都要重新做。在Zynq MPSoC里具体操作就是在FSBLFirst Stage Boot Loader或者U-Boot的DDR初始化代码里修改DDRC配置寄存器比如在MIG/定制PHY的寄存器映射并调整DDR的PLL配置使实际输出的DDR时钟频率与控制器中计算的tCK一致。如果配置里不同步系统可能在启动阶段DDR初始化失败或者正常启动后压力测试蓝屏/死机。最后电源也要考虑。DDR4降到2133后峰值电流会比2400/3200时低一些但反而要注意电源的纹波要求没有变松多少。因为DDR4的IODDR输入输出信号摆幅依旧是1.2V标准VDDQ纹波要求通常在±40mV以内降频不代表你可以把电源质量降级。所以降速是一个很系统的调整DDRC时序寄存器、PHY训练配置、PLL、电源余量、温度范围都要一起评估。5. 常见问题与排查技巧实录5.1 问题速查表从现象到根因DDR4调试时我习惯把问题分成几类上电初始化失败、读写错误、不稳定偶发、功耗/温度异常。下面这张表是我在实际项目中整理的速查要点供大家参考。现象可能原因排查手段初始化卡死/训练失败频率配置错误、PHY供电异常、ODT阻值不对、fly-by拓扑错误用逻辑分析仪抓DDR命令时序检查是否发出MR配置命令先降速到最低档如DDR4-1600逐一排除单bit固定错误DQ数据线序错误、等长偏差过大、VREF设置不对用内存测试工具如memtester定位到bit位再对照原理图查对应DQ走线读训练失败/数据窗口很小DQS与CK偏移过大走线skew超标回流地缺失用SoC的DDR读写训练工具观察每个byte lane训练眼图检查DQS与DQ等长报告高温下偶发死机刷新周期不够、温度补偿关闭、VDDQ跌落调整MR为高温刷新模式缩短刷新周期用热风枪配合测温检查DDR区域功耗异常偏高VPP供电异常、ODT配置过渡频繁、IDD超标测量VDD/VPP电流对比数据手册IDD表检查MR1中ODT是否设太高这张表的价值在于帮助快速定位问题边界但真正排查时我建议不要一上来就怀疑颗粒本身而是先确认电源、时钟和PCB走线这些基础项。生产环境里我看到过太多颗粒问题最终是焊盘虚焊或者过孔stub太长导致的。5.2 两个值得多说的经验第一个是关于外观区分DDR3和DDR4的实用技巧。除了防呆缺口用卡尺量颗粒尺寸也能侧面判断DDR4颗粒通常是标准的78球BGA正面尺寸约9.5mm × 13.5mm左右参考典型而DDR3颗粒如果是x8位宽的一般是8mm × 13.5mm封装x16的会更大一些。当然这个不是绝对标准毕竟不同厂家的封测工艺有差异但结合缺口位置可以做到很高的准确率。如果你只是想在仓库里快速挑料先看缺口位置再用手机微距镜头看金手指是否弯曲基本就八九不离十了。第二个是关于天水华天这类封测厂的信息这里多说一句。天水华天是国内在DRAM封装测试领域比较有代表性的一家公司新闻报道里提过他们有16纳米/14纳米逻辑芯片封装、128层3D NAND、18纳米DRAM的封测能力。对这些消息我们需要理性看待封测产线能力和芯片设计能力是两个概念。封测厂能封装DRAM不代表它设计DRAM同理一个封测厂宣传的制程数字可能指的是封装基板层数、芯片厚度、凸点间距这些工艺能力而不是晶圆制造的光刻线宽。所以在参考这类行业资讯时务必要区分封装和制造的边界避免产生误解。这个思维对硬件工程师很重要——你选物料时评估的是供应商实际交付的颗粒参数与可靠性而不是宣传口径里的技术路线。5.3 一个小技巧用memtester快速做DDR4稳定性验证做嵌入式Linux开发时DDR4稳定性最方便的验证工具之一就是memtester。这个命令行工具能对指定内存地址做多种数据模式的读写测试检测固定位错误和偶发错误。使用方法很简单# 测试200MB内存循环10次 memtester 200M 10 # 或者指定起始物理地址避开系统关键内存 memtester -p 0x10000000 512M 3跑压力测试时我习惯在系统负载较重的情况下同时执行比如挂载NFS编译大工程、播放视频流同时memtester这样可以模拟更真实的并发访问场景。如果memtester出现FAILURE提示通常会显示出错时数据模式比如0xFFFFFFFF、目标地址以及出错bit的位置。这个信息很关键结合原理图查DQ引脚就能缩小问题范围。有一次我排查一块Zynq的板子跑memtester总是报0x00000008这一位错误后来查原理图发现该板子的DQ8引脚在焊接时和相邻引脚桥连了用放大镜和万用表确认后重新植球才解决。这种问题如果你只跑bare metal简单读写测试可能发现不了因为访问模式和数据模式不够复杂。6. 写在最后的经验沉淀DDR4这东西看着是一个外设实际上从协议学习到PCB设计再到驱动调试每走一步都可以让一个工程师成长不少。我自己最大的体会是DDR4的问题基本上都是三层联动问题——硬件引脚/走线、控制器的寄存器配置、颗粒本身的IDD和时序参数三者相互影响排查时绝不能只盯着一层。如果你正在做一个新的DDR4设计我的建议很简单原理图阶段先把每一颗颗粒的供电脚、VPP脚和去耦电容规划清楚PCB阶段严格按fly-by拓扑和等长要求走线不要贪图好看做了个对称的T型拓扑调试阶段先去下低速率比如DDR4-1600把训练跑通确认基本读写无错再去升频。这样一步步来成功率会高很多。最后再分享一个小技巧DDR4的SPD或者SoC的DDR寄存器配置最好用脚本管理每次改动前都备份一份并记录改动原因。调DDR的频率和时序是件非常容易回不去的事情有了版本记录你才能在项目后期快速定位是不是哪次改动把稳定配置改坏了。别问我为什么这么强调这些都是踩坑踩出来的经验。
返回列表