ARTICLE DETAIL

资讯详情

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

DDR4与PCIe 5.0高速接口仿真五步实战:从模型到眼图优化

DDR4与PCIe 5.0高速接口仿真五步实战:从模型到眼图优化 DDR4和PCIe 5.0这两类高速接口在现在的板卡设计里几乎绕不开。一边是并行总线里最难啃的骨头DDR4跑到3200MT/s时建立时间、保持时间全部以皮秒计算另一边是串行接口里速率第一梯队的PCIe 5.0单lane就是32GT/s通道上随便一个过孔残桩没处理干净眼图就可能整体塌掉。干硬件设计这些年我越来越觉得高速接口仿真不是要不要做的问题而是怎么做才有效的问题。这篇文章把我用Cadence Sigrity SystemSI做这两类接口仿真的完整流程梳理出来一共有五个关键步骤从模型准备到结果优化一次讲透虽然标题里写的是DDR4和PCIe 5.0但思路对LPDDR、USB、SATA这类接口同样适用适合正在调试DDR4或PCIe设计、想系统掌握高速仿真方法的硬件工程师和信号完整性工程师参考。1. 在动手之前先搞清楚这两种接口的仿真差别1.1 DDR4和PCIe 5.0难度不在一个量级很多人第一次接触SystemSI容易犯一个毛病上来就想把整个板子的网络全部塞进去跑一遍或者反过来随便挑几个网络一仿完事。这两种做法都跑偏了。要先把DDR4和PCIe 5.0对仿真的需求差异搞清楚。DDR4虽然是并行总线但内部并不是简单的一对一互连。以一颗支持DDR4-3200的CPU或SoC为例数据线DQ有64bit再加上8bit ECC对应的DQS选通也有一整套还有地址、命令、控制信号。这些信号跑在所谓源同步机制下时钟信号或选通信号和数据一起传输接收端靠DQS采样DQ。速率看起来只有3200MT/s但因为并行总线同时翻转的bit太多串扰、同步开关噪声SSN、电源纹波对时序的挤压效应都会叠加在一起。更麻烦的是DDR4协议本身带有ODT动态端接、ZQ校准、Vref校准机制仿真如果不把这些因素考虑进去算出来的时序余量根本不可信。PCIe 5.0走的是另一条路。它是串行差分接口单lane速率32GT/s采用NRZ编码协议里自带训练序列、预加重、接收端均衡等机制。链路能不能跑通主要看三件事通道插入损耗是否在预算内回波损耗和串扰是否超标均衡器能不能把眼图重新拉开。仿真手段也从DDR4那种时域波形时序裕量转向了统计域眼图BER等高线。说句实话PCIe 5.0比DDR4更吃方法论因为32GT/s下TX端一个抽头系数没设对接收端哪怕DFE开了眼图也是死的。1.2 SystemSI在整个Sigrity流程里处于什么位置Cadence Sigrity不是一个单点工具而是一整套信号完整性、电源完整性仿真平台。PowerSI、SPEED2000、SystemSI、PowersDC、Clarity等各有分工。SystemSI的定位是整个流程里的系统级仿真执行器它不负责提取物理模型而是拿到从布线后PCB中提取出来的拓扑、S参数和模型文件完成IBIS/IBIS-AMI模型的装载、激励设置、眼图测量、时序分析。所以跑SystemSI之前通常已经在Cadence Allegro里把PCB设计做完然后用PowerSI或Sigrity的拓扑提取工具把目标网络的通道模型抽出来。这里有一个经验不要一上来就追求全波提取尤其整板网络很多时建议先用快速提取的等效SPICE模型做预仿真把拓扑、端接、ODT设置这些大方向定下来再对真正高危的信号做S参数级精细仿真。SystemSI对这两种模型都支持但模型来源不同结果精度和耗时差异很大。SYSTEMSI做的事可以简单理解成这样你把路提取的通道模型和车IBIS模型里的收发器行为都交给它它把这些东西放在一个系统层面跑起来输出你关心的交通状况——眼图、时序余量、误码率。这个定位决定了它非常适合做DDR4读写测试、PCIe链路的端到端评估这类系统级问题。2. 关键步骤一把物理设计搬进仿真环境2.1 叠层、材料参数与过孔设置错一处后面全白搭SystemSI本身不画PCB但仿真工程里必须有一个准确的物理基础。大多数情况下你是在Allegro环境里把.brd文件打开或者把ODB文件导入Sigrity套件。第一步先检查叠层信息这步不起眼但错一处后面全白搭。我在实际项目中见过一个典型错误板厂给的叠层里核心层芯板是FR4介电常数Dk大概4.2但仿真的Dk值设置成了4.4损耗正切Df也差了不少。对于DDR4这类速率还可以勉强通过但PCIe 5.0的通道插入损耗本身就是拿分毫算账的Dk偏大会导致走线延时偏差Df偏大会导致高频损耗被低估或高估最终眼图结果和实际测试差开一大截。叠层参数设置有三个关键点每层介电常数Dk和损耗正切Df必须和板厂最终确认的叠层参数一致不能拿默认值硬填。铜箔粗糙度模型要打开。常规的修改Hammerstad模型或者更精确的Huray模型在32GT/s下铜粗糙度对损耗的影响非常明显。实测下来Huray模型配合合适的雪球半径插损结果和实际测试误差能控制在0.5dB以内。玻纤编织效应对PCIe这类差分信号的影响也不能忽略如果板厂用的玻纤布类型偏粗建议在仿真里评估一下skew。模拟DDR4内存条基板电路图上的走线时叠层处理逻辑一样。但要注意普通板卡和DIMM条本身是两块板中间还有连接器DDR4读写测试仿真中如果包含内存条必须把连接器的S参数模型挂上。不少人在这一步省略了连接器模型导致仿真结果过于乐观。2.2 网络筛选与拓扑提取不是所有信号都要精细仿真接下来是网络筛选。一个大型单板DDR4的DQ网络就有几十根PCIe的差分对也有十几对甚至更多如果每一根都做全波提取仿真时间会爆炸。我一般按风险等级筛选第一优先级布线跨层多的过孔、长度特别长的走线、离其他高翻转率总线特别近的走线。第二优先级PCIe链路里每一lane的连接器附近、AC耦合电容附近的区域以及DDR4里DQS和CLK这类时序敏感信号。第三优先级其余普通信号做批量快速验证即可。拓扑提取在Sigrity中通常这样操作在Allegro中选中目标网络右键启动Sigrity的Extract Topology工具选择提取模式。对DDR4建议提取从驱动端BGA焊球、过孔、走线、接收端BGA焊球的一段完整通道对PCIe则要包含发送端封装、PCB走线、AC耦合电容、连接器以及接收端封装。提取完会生成一个包含传输线或S参数的拓扑文件这个文件就是SystemSI里要加载的通道。这里有个实操心得PCIe链路里的AC耦合电容在提取拓扑时一定要单独作为分立元件保留。很多人图省事把电容当作理想短路处理但电容的寄生参数在32GT/s下绝对不可忽略。正品容值0.1uF或0.22uF的0402封装电容在16GHz频率上的寄生感抗和容抗会产生明显的阻抗不连续直接影响回波损耗。3. 关键步骤二模型准备是仿真精度的一半3.1 IBIS模型版本、文件完整性与I/V曲线检查仿真精度一半靠模型这句话一点不夸张。DDR4和PCIe 5.0的仿真都必须有收发器模型。大部分芯片厂商提供IBIS模型或IBIS-AMI模型。用IBIS模型前先检查三件事模型文件版本。DDR4建议用IBIS 5.0及以上版本的模型PCIe 5.0必须用支持IBIS-AMI的模型。老版本模型缺少一些必要的参数仿真结果会偏乐观。文件里是否包含所有需要的pin。有些SoC的IBIS模型非常大包含上千个pin释放模型的人可能漏掉了某些ball的模型描述。加载到SystemSI如果发现某些pin报model not found多半是这个问题。I/V曲线覆盖范围。IBIS模型里的上拉/下拉I/V曲线一般给出典型电压和最大最小两个极端情况的曲线。仿真时建议对三种corner都跑一遍尤其做DDR4时序分析时max和min corner的驱动能力差异会让建立时间和保持时间的余量判死刑。3.2 IBIS-AMI对PCIe 5.0是必需品PCIe 5.0仿真必须是IBIS-AMI模型原因很简单NRZ信号在32GT/s时通道损耗通常达到十几dB发送端的预加重、接收端的CTLE和DFE均衡算法已经不能靠传统IBIS模型的模拟波形来精确描述。IBIS-AMI模型里封装了算法行为仿真时以统计方式运行速度和精度都能兼顾。在SystemSI里加载PCIe模型时我习惯先看厂商提供的AMI文件说明。有的模型是模拟算法混合型有些则是纯算法型。如果只是做通道优化选型推荐纯算法模型足够如果要做完整的链路验证带模拟部分的模型更准确。但带模拟部分的模型运行时间明显变长要提前有心理准备。3.3 用Model Integrity做模型体检模型文件拿到手不要直接加载。建议先丢进Sigrity自带的Model Integrity工具里过一遍。它能自动检查IBIS模型的语法错误、I/V曲线连续性、dV/dt是否异常等。我实际碰到过一种情况某个厂商的DDR4模型在Model Integrity里报出V-t curve slope is too large的警告说明上升沿转换速率设置得过于理想直接用会导致DDR4读写测试的时序余量偏大。四步模型体检流程打开Model Integrity加载IBIS或AMI文件。查看V-t曲线和I/V曲线确认翻转速率和驱动能力是否符合芯片数据手册。检查电源pin和地pin的钳位曲线确认二极管模型没有缺失。对PCIe的AMI模型检查是否有算法输出变量说明比如tap个数、CTLE增益范围、DFE抽头数方便后续在SystemSI里做参数扫描。4. 关键步骤三并行接口DDR4的仿真设置与读写测试4.1 在SystemSI里搭建DDR4读写仿真的完整链路DDR4仿真在SystemSI里走的是并行总线分析流程。操作方法大致是新建一个SystemSI工程选择Parallel Bus分析类型然后导入DDR4通道拓扑加载控制器的IBIS模型和DRAM的IBIS模型接着定义数据率、触发方式、读写方向。DDR4读写测试和DDR3有个显著区别DDR4引入了Vref校准接收端判决阈值不再简单是参考电压Vref中心值。仿真时要把DQ信号和DQS信号同时分析尤其注意DQS的选通窗口。以DDR4-3200为例数据有效窗口本身只有625ps扣除时钟抖动、通道串扰、码间干扰之后留给建立时间和保持时间余量的窗口非常窄。SystemSI会在仿真结束后输出一份时序清单其中包括setup margin、hold margin测量结果。在仿真设置窗口中有几个参数必须手动确认数据翻转pattern。不要只跑PRBS7建议叠加一些固定型比如全0/全1切换、伪随机码这样能暴露更恶劣的码间干扰。ODT配置。读写方向不同端接位置不同。写方向时DRAM侧的ODT要设置成RTT_NOM读方向时控制器侧要有端接。SystemSI里可以用多工况扫描同时覆盖不同ODT组合。仿真时间。时域仿真需要让波形充分稳定。对于DDR4这种周期信号建议至少跑1000个UI以上再取稳态区间做眼图和时序测量。4.2 从DDR4原理图反推仿真network的正确姿势很多硬件工程师手里有完整的DDR4原理图。原理图里标清楚了地址线、控制线、DQ/DQS网络的分组和端接电阻。做SystemSI仿真时这套原理图其实就是最好的摸底清单。我习惯先在原理图上做标注哪些网络是拓扑最长的哪些网络的stub多哪些网络和时钟靠得近。然后按这套清单去SystemSI里定义虚拟差分对或总线分组。要注意DDR4拓扑是Fly-by还是T拓扑。地址、命令、控制信号在DDR4里普遍采用Fly-by拓扑也就是从控制器出发依次经过每一颗DRAM颗粒。这种拓扑的优点是信号完整性好但代价是不同颗粒之间的时序偏差DQS和CK的延时差需要控制器内部做Write Leveling来补偿。仿真时Fly-by拓扑必须要保持每一颗颗粒的stub长度和间距都按实际设计建模。有些工程师图方便把Fly-by简化成简单的菊花链少了分支电容结果仿出来的波形振铃明显变小错误地以为信号质量很好。4.3 眼图模板与Vref参数设置DDR4的仿真结果判定一是看时序余量二是看眼图是否满足模板要求。SystemSI里可以直接导入或绘制眼图模板。DDR4眼图模板通常按JEDEC标准里的定义来画数据有效区域、高电平和低电平范围都有明确要求。Vref电平设置DDR4的Vref通常由控制器内部的寄存器设定仿真时按数据手册设置典型值但建议做上下浮动2%的扫描因为实际板子上Vref的波动是必然的。眼图测量区间写方向以DQS为中心读方向以接收端捕获窗口为中心。测量区间选错眼宽结果会完全失真。DQ-DQS skew读写测试中系统性检查每个DQ bit相对DQS的skew。这个值在DDR4里是生死线一旦超过几百个皮秒系统时序基本是废的。实测经验运行完DDR4仿真后优先看报告里的setup/hold margin数值如果某个bit的余量小于30ps先别急着改走线把它和相邻DQS的skew报告打开确认是不是DQS本身偏了再决定优化方向。5. 关键步骤四PCIe 5.0串行链路仿真与均衡参数扫描5.1 32GT/s通道的插入损耗预算先算明白PCIe 5.0的串行仿真在SystemSI里走的是Serial Link分析流程。整条链路定义好之后插入损耗是第一道关卡。PCIe CEM规范里对32GT/s的插入损耗预算大概在13dB到16dB之间具体取决于板卡类型和厂商芯片能力。这个预算的分配要提前规划好连接器占一部分、PCB走线占一部分、AC耦合电容寄生损耗占一部分、芯片封装占一部分。我常用估算公式来预判通道是否达标损耗大约等于走线长度乘以每英寸损耗值dB/inch。但注意这个值不是固定常数在32GT/s时频率16GHz常规Megtron6材料加适度粗糙度的铜箔每英寸走线损耗大概在1.5dB到2.5dB之间。如果你设计里走线长度已经超过8英寸插损大概率会超过预算仿真基本做不到合规眼图。这种设计问题仿真只是验证最终还是得靠改设计。在SystemSI里跑PCIe仿真前先对提取出来的S参数做一个快速检查。看Sdd21在16GHz处是否在预算内Sdd11在奈奎斯特频率范围内是否低于-10dB。如果这两项不达标后面眼图大概率张不开。不要浪费时间在均衡参数上找补那是最后的补救手段。5.2 TX EQ、CTLE和DFE参数扫描才是仿真精华PCIe 5.0仿真的核心价值在于均衡器参数的搜索。手动选三组参数去碰运气费时费力。SystemSI支持在仿真中对TX端3-tap FIR、接收端CTLE和DFE参数做批处理扫描。我的推荐做法是分两轮第一轮粗扫。把TX预加重系数离散成比较少的档位比如预增益让出10%、15%、20%CTLE低频增益和高频增益的候选值也放几个DFE暂定经典的1到2个抽头。先跑一轮统计仿真看哪几个组合能把眼高和眼宽撑到模板之上。第二轮细扫。在粗扫出来的前两三个优良组合邻域把参数步长缩小再做一轮扫描得到最终最优解。仿真完成后不要只盯着一组参数。PCIe芯片内部训练出来的参数往往和仿真最优解有偏差。实际项目里我习惯要求设计团队在系统里至少预留两种参数的备选方案一种偏重RX均衡一种偏重TX预加重以适应系统训练过程中的不确定性。5.3 BER眼图与抖动的解读PCIe 5.0的误码率目标通常定在BER1e-12。SystemSI统计仿真会输出BER等高线和眼图。重点看两个数字眼宽在目标BER下的剩余宽度以及眼高在目标BER下的剩余高度。抖动问题要拆开看。随机抖动RJ服从高斯分布累积起来对BER影响很大确定性抖动DJ主要来自反射、串扰和电源噪声。SystemSI输出的眼图自带抖动分解报告。我的经验是如果DJ占比过大说明通道的阻抗不连续或者串扰没压住这时候调均衡器不如去查过孔stub和相邻lane的隔离。如果RJ偏大重点排查时钟发生器的抖动指标和电源纹波。还有一个很多人忽略的点TX端和RX端的封装建模。芯片封装内部的走线和bump寄生都会给32GT/s链路带来额外损耗和反射。SystemSI在导入AMI模型时可以附带芯片厂提供的封装S参数。这个细节往往能决定仿真精确到能不能量产的级别。6. 关键步骤五从仿真结果反推优化方案6.1 眼图不达标先按这个顺序排查跑完仿真眼图不达标新手容易慌老手会按一套固定流程排查先看通道插损是否超预算。如果超了再看走线长度能不能缩短材料能不能升级。这是根本性修复。再看回波损耗。如果Sdd11在奈奎斯特频率附近有尖峰多半是过孔阻抗或连接器引脚区匹配出问题用TDR曲线辅助定位。然后查串扰。相邻lane间距是否拉够2倍线宽甚至3倍线宽隔离地孔是否缺失。PCIe 5.0对lane间串扰要求很高。最后才考虑均衡参数。均衡能解决一部分码间干扰但解决不了通道物理设计上的硬伤。这套顺序是踩过坑之后才总结出来的。早期我做过一个PCIe项目拿到仿真眼图一直不过我连着调了两天均衡参数收敛甚微。后来一狠心把通道S参数拉出来看发现TI连接器外壳的过孔ring尺寸不对导致差分阻抗掉到70欧姆左右。改完过孔眼图瞬间活过来。从此我养成了一个习惯不看S参数不解读眼图。6.2 DDR4时序余量不够的针对性优化DDR4时序余量不够优化动作要分读写方向区别对待写方向时序余量不足优先检查控制器驱动端的上升/下降时间对称性是否因为驱动电流配置过小导致边沿过缓。再检查DQS和DQ在PCB上的长度匹配精度常规建议做到±5mil以内。对于DDR4-3200DQ和DQS的skew要求更高很多时候要靠蛇形走线补偿蛇形走线自身的耦合也要注意间距至少做到3倍线宽。读方向时序余量不足DRAM端返回的数据信号受接收端负载和片上终结影响最大可以尝试调整ODT模式比如把RTT_PARK从高阻切换到60欧姆或40欧姆。如果是Vref噪声引起的余量下跌就要回头查电源平面的PDN阻抗DDR4的VDDQ电源1.2V纹波目标一般控制在2%以内。6.3 仿真报告怎么输出才有说服力仿真最后要落到报告上一份有说服力的SystemSI仿真报告应包含以下部分仿真环境信息软件版本、模型版本、叠层参数、温度corner。网络拓扑图清晰标出提取的通道模型包含各级网络名称。关键结果DDR4报告要输出每个DQbit的setup/hold margin、skew表、眼图模板截图PCIe报告要输出插损曲线、回损曲线、BER眼图、均衡参数组合。风险清单和优化建议按优先级列出不满足项和整改方向。报告不需要花哨但每一张波形图、每一个数字必须能溯源。仿真模型的版本信息非常关键因为芯片厂经常升级模型不同版本模型跑出来的结果差异有时超过10%。7. 实际操作中的常见问题与排查技巧实录7.1 模型加载失败或仿真不收敛现象SystemSI加载IBIS模型时报错Model not found。原因IBIS文件里引用了一个子模型但子模型定义缺失。处理用Model Integrity打开文件找到报错位置确认是模型文件本身不完整还是引脚名映射错误。如果是映射问题在SystemSI的pin mapping里手动关联。现象PCIe统计仿真长时间不结束或结果明显发散。原因AMI模型设置的采样点数太多或者均衡参数扫描开关在选择全扫时组合爆炸。处理把仿真模式从快速统计模式切换为单比特模式先验证连通性扫描组合不要全扫先做粗扫再细扫。现象DDR4瞬态仿真跑完后眼图里出现大段毛刺。原因激励pattern不够长波形没有进入稳态。处理增加模拟周期数至少跑到数千个bit并设置眼图测量起始点跳过前10%的不稳定区间。7.2 眼图张不开仿真结果和实测差很多这是最让工程师头疼的情况。按照我的排查顺序先核对叠层参数Dk和Df是不是和板厂实际板材一致。检查过孔模型有没有带stub长度PCIe 5.0过孔stub超过10mil就会明显拉低眼高。检查S参数提取时参考地平面是否完整地平面被掏空会导致环路电感增大。检查模型的corner选择。TT模型和SS模型的结果差距可能大到几dB。实测数据总结了一个规律如果仿真眼图比实测好很多大概率是模型太理想——要么忽略了铜箔粗糙度要么把器件寄生参数理想化了如果仿真比实测差很多先看S参数提取精度再看IBIS/AMI模型的驱动能力是否偏低。7.3 仿真耗时太长如何提速高速接口仿真动辄数小时跑不完工程进度等不起。我常用三个提速手段分阶段仿真。先跑快速理想模型把拓扑和参数定下来再跑高精度模型做最终验证。合理降低统计样点数。PCIe统计仿真在精度和速度之间找平衡点348位pattern加上合理的抖动值通常能满足1e-12 BER评估。并行化处理。SystemSI支持多核并行和批量仿真把多个扫描工况分发到多台机器上跑效率提升非常明显。我一台16核工作站并行跑8个lane的扫描PCIe仿真从5小时压缩到1小时左右。7.4 一张常见问题速查表送给你问题现象排查方向常用对策DDR4 setup margin不足DQS-DQ skew、驱动强度调整驱动电流档、蛇形线补偿长度匹配DDR4 hold margin不足走线过长、Vref偏低缩短关键走线、优化Vref补偿、调整ODTPCIe插损超标走线过长、材料损耗大换低损耗板材、更短走线、更大线宽PCIe回波损耗尖峰过孔阻抗、连接器引脚匹配优化过孔anti-pad、背钻残桩、调整连接器区域走线PCIe串扰超标lane间距不足、隔离地孔缺失拉开间距到3倍线宽以上、加密地孔仿真和实测差很大模型精度、叠层参数核对板材参数、打开铜箔粗糙度模型、更新芯片模型版本8. 关于这套方法的一些个人体会写到这里五个关键步骤的主线已经完整了。回想这些年实际做过的DDR4读写测试和PCIe 5.0链路仿真我最大的体会是仿真的价值不只是验证能不能跑通而是帮你在投板前把风险点一个一个拆开看清楚。同样一个SystemSI工程有人跑完只留下一堆波形截图有人能从中找到改板方向区别就在于有没有真正理解每一步背后的物理含义。再分享一个小技巧做这类高速接口仿真尽量在项目的原理图设计阶段就介入而不是等板卡画完了再补。DDR4原理图阶段就能把拓扑结构定下来PCIe链路在布局阶段就能把走线长度预算锁死。早期介入的仿真效果往往最好后期返工的代价实在太高。如果你正在做DDR4或者PCIe相关的高速设计建议从这套五步流程里的第一步——叠层和拓扑提取——开始动手先把物理模型搞准了后面的眼图和时序分析才真正有参考价值。过程中的坑不少但每踩平一个坑你对信号完整性的理解就会深一层。
返回列表