ARTICLE DETAIL

资讯详情

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

Allegro DDR等长规则设置:Match Group五分钟搞定

Allegro DDR等长规则设置:Match Group五分钟搞定 1. 为什么DDR等长规则值得单独花时间搞明白DDR布线里最让人头疼的不是走线本身而是走完之后发现时序余量不够回头一查——等长没做对。尤其是DDR3、DDR4这类并行总线数据组内、地址控制组内、时钟与选通之间都有严格的长度匹配要求。差个几十mil可能还能靠训练机制兜住差个几百mil就直接导致读写误码板子回来点不亮。Allegro在等长规则这块给的工具其实相当成熟Match Group配合Relative Propagation Delay约束能把一组网络的长度差控制在指定范围内。但问题在于很多刚接触Allegro的朋友在Constraint Manager里绕来绕去建了组却不知道怎么把网络塞进去塞进去了又发现规则不生效或者等长目标值设错了导致整组线全部报错。这篇内容就是把我自己在实际项目中反复用到的Match Group设置流程完整拆一遍。从约束管理器的入口、网络分组逻辑、目标长度设定、到实际绕线时的实时反馈每一步都讲清楚为什么这么做。适合已经会用Allegro画基本PCB、但对约束系统还不够熟练的工程师也适合从其他EDA工具转过来、需要快速上手Allegro规则体系的朋友。整个流程熟练之后一组DDR数据线的等长规则确实可以在五分钟内建好。但前提是你理解每一步在做什么而不是机械地点按钮。2. 动手之前先把DDR等长的基本逻辑理清楚2.1 DDR总线里到底哪些组需要等长DDR接口的信号大致分几类每类的等长要求不一样。以常见的16位DDR3为例数据组DQ/DQS/DM每8位数据配一对差分选通DQS±和一个数据掩码DM。组内DQ、DM相对于DQS做等长通常要求控制在±25mil以内严格一点的做到±10mil。字节组之间不需要互相等长。地址控制组ADDR/CMD/CTRL地址线、Bank地址、片选、行/列选通等归为一组相对于时钟做等长。这个组的容差通常比数据组宽±50mil到±100mil都有人做具体看控制器手册。时钟组CK±差分时钟对通常作为地址控制组的参考基准。电源和地不需要等长但需要保证回流路径完整。关键点在于等长的参考对象是谁。数据组以DQS为参考地址控制组以CK为参考。这个参考关系如果搞反了规则建出来就是错的。2.2 Match Group和Relative Propagation Delay是什么关系Allegro里做等长有两层东西Match Group把需要互相等长的网络归到一个组里这是一个逻辑容器。Relative Propagation Delay附着在Match Group上的约束定义组内网络相对于某个基准网络或组内最长网络允许的长度偏差。你可以把Match Group理解成一个班级Relative Propagation Delay就是这个班级的纪律要求——所有人跟班长的高度差不能超过多少。班长可以是组内最长的那根线Delta: Longest也可以是你指定的某根线Delta: Target。注意Match Group本身不限制长度它只管组内一致性。绝对长度限制是另一个约束Propagation Delay管的。两者配合使用才能既控制绝对长度又控制相对偏差。2.3 为什么不用Pin Pair而用Match GroupAllegro里做等长有两种粒度Pin Pair和Match Group。Pin Pair适合点对点的精确控制比如一个驱动引脚到一个接收引脚。但DDR总线往往有Fly-by拓扑、T型分支、或者一颗驱动对多颗颗粒的情况Pin Pair数量会爆炸。Match Group的优势在于它直接以网络为单位不管网络内部是什么拓扑Allegro会自动计算每个网络的整体长度或者你指定的Pin Pair长度。对于DDR这种一组十几根线的情况用Match Group效率高得多。当然如果你的DDR拓扑很复杂比如需要分别控制每一段的长度那可能需要在Match Group内部再细化Pin Pair。这个后面会提到。3. 在Constraint Manager里建组的完整操作链路3.1 打开约束管理器的正确姿势很多人习惯在Allegro主界面点那个小图标打开Constraint Manager但有时候会发现某些约束项是灰的。原因通常是当前没有加载正确的技术文件或者规则集没激活。我的习惯是先在Allegro里确认PCB已经加载了正确的Constraint Manager配置文件.dcf然后通过Setup Constraints Constraint Manager进入。进入之后左侧的Worksheet Selector里找到Electrical下面的Relative Propagation Delay。这里有个细节Relative Propagation Delay是挂在Net Class下面的。也就是说你得先有Net Class才能在里面建Match Group。如果你还没建Net Class需要先去Physical或者Electrical的Net Class里把DDR相关的网络归类。3.2 先建Net Class还是直接建Match Group实际操作中我建议先建Net Class。原因很简单Net Class可以帮你把DDR的所有信号先归拢到一起后面建Match Group的时候直接从Net Class里拖网络不容易漏。建Net Class的步骤在Constraint Manager左侧选择Net Class。右键Create Net Class给它起个名字比如DDR3_DATA。从PCB或者原理图里把对应的网络选进来。Allegro支持按网络名通配符匹配比如DQ*、DQS*这个功能在DDR这种命名规范的总线上特别好用。Net Class建好之后再回到Relative Propagation Delay右键Create Match Group。这时候你可以选择从已有的Net Class导入网络也可以手动选。3.3 Match Group里到底放哪些网络以一组8位数据线为例假设网络名是DQ0到DQ7加上DQS0_P、DQS0_N、DM0。这11根线应该放在同一个Match Group里。但这里有个容易踩的坑DQS差分对要不要放进Match Group答案是要但处理方式不同。DQS_P和DQS_N本身是一对差分线它们之间的长度差由差分对规则控制通常要求±5mil以内。而它们作为一个整体又需要和DQ/DM做等长。所以在Match Group里你应该把DQS_P和DQS_N都放进去但基准网络选择DQS_P或者DQS_N中的一个或者用它们的平均长度。Allegro的处理方式是差分对在Match Group里会被识别为两个独立的网络但你可以通过设置让它们共享同一个目标长度。具体操作是在Match Group的约束里把DQS_P和DQS_N的Delta值设为相同。3.4 目标长度怎么定这是整个流程里最需要动脑子的一步。目标长度定错了后面绕线会非常痛苦。定目标长度的逻辑先确定参考网络。数据组以DQS为参考地址控制组以CK为参考。估算参考网络的物理长度。这个长度取决于你的布局——控制器到颗粒的距离、走线层、过孔数量。在布局基本确定之后可以用Allegro的Analyze Length或者手动测量来得到参考网络的近似长度。设定目标值。目标值通常设为参考网络长度加上一个余量或者直接设为组内最长网络的实际长度。Allegro的Relative Propagation Delay支持Delta: Longest模式意思是自动以组内最长的网络为基准其他网络向它看齐。这个模式在初期绕线时很好用因为你不需要预先知道确切的最长长度。但Delta: Longest有个问题如果组内有一根线因为布局原因特别长其他所有线都要跟着绕浪费空间。所以更推荐的做法是先设一个理论目标值比如控制器手册推荐的匹配长度然后根据实际布局微调。提示DDR3的数据组等长容差通常设±25milDDR4可以收紧到±10mil甚至±5mil。地址控制组根据控制器要求常见的是±50mil到±100mil。具体数值一定要查你所用的控制器数据手册不同厂商要求差异很大。4. 规则设好之后绕线时怎么实时判断是否达标4.1 打开实时长度监控规则建好只是第一步绕线的时候你得能实时看到每根线当前的长度和偏差。Allegro提供了几个工具Dynamic Length Monitor在走线时实时显示当前网络的长度和与目标的偏差。开启方式是在Setup Constraints Modes里勾选相关选项或者在走线时按F10调出监控窗口。Constraint Manager的Spreadsheet视图绕完一部分线之后回到Constraint Manager看实际长度和偏差哪些超标一目了然。PCB界面上的Length Banner在走线时Allegro会在光标附近显示一个长度条直观显示当前长度相对于目标的位置。我个人的习惯是绕线时开着Dynamic Length Monitor每绕完一根就扫一眼偏差。如果发现某根线怎么绕都超差那说明目标长度设得不合理需要回去调整规则而不是硬绕。4.2 绕线顺序和策略DDR数据组的绕线顺序建议先走DQS差分对。因为DQS是参考它的长度决定了整组的目标。DQS走完之后记录它的实际长度。再走DQ和DM。走的时候以DQS的长度为目标通过蛇形绕线Snake来补偿长度差。最后检查。全部走完之后用Constraint Manager的Spreadsheet视图检查所有网络的偏差。蛇形绕线的参数也有讲究蛇形间距相邻蛇形线之间的间距至少3倍线宽减少串扰。蛇形幅度不要太大否则占用空间且引入额外寄生参数。一般控制在5倍线宽以内。蛇形段长度每段蛇形的长度不要超过信号上升沿的空间延伸否则会导致阻抗不连续。对于DDR3上升沿大概几百皮秒对应PCB上的空间延伸大概几厘米所以蛇形段控制在1厘米以内比较安全。4.3 差分对内部的等长怎么处理DQS_P和DQS_N之间的等长是差分对规则管的不是Match Group管的。在Constraint Manager的Differential Pair下面有一个Static Phase Tolerance通常设为±5mil。绕线时如果发现差分对内部偏差超标需要在差分对内部做补偿而不是在Match Group层面调。这里有个实操技巧差分对内部的补偿尽量在靠近源端或末端做不要在中间突然拉开间距否则会破坏差分阻抗的连续性。5. 那些让我返工的坑和后来总结的应对方法5.1 规则建了但不生效这是最常见的问题。原因通常有几个网络没有正确关联到Match Group。检查方法是回到Constraint Manager看Match Group下面的网络列表是否完整。有时候通配符匹配会漏掉一些命名不规范的网络。约束没有激活。Allegro的约束有Enable/Disable状态在Constraint Manager里每行前面有个复选框确认它是勾上的。PCB没有加载最新的约束文件。如果你在Constraint Manager里改了规则但PCB界面没有刷新需要手动Apply或者重新加载。我遇到过一次特别隐蔽的情况Match Group建在了错误的Net Class下面导致规则虽然存在但作用不到目标网络上。后来养成的习惯是建完组之后立刻在PCB里选中一根网络看它的约束信息里有没有正确显示Match Group的名字。5.2 目标长度设得太紧导致无法绕线DDR4的数据组等长要求可能到±5mil这个精度在密集布局下非常难达到。如果发现绕线空间不够有几个应对方案调整布局把颗粒挪近一点或者调整控制器和颗粒的相对位置减少基础长度差。换走线层不同层的物理长度不同通过换层可以微调长度。放宽容差如果控制器支持训练机制可以适当放宽到±10mil甚至±15mil。但这个决定要和硬件工程师确认不能自己拍脑袋。5.3 蛇形绕线引入的串扰问题蛇形绕线虽然能补长度但绕不好会引入严重的串扰。我踩过的坑是蛇形间距太小导致相邻段之间的耦合电容增大信号边沿变缓眼图闭合。后来总结的经验蛇形间距至少3倍线宽有条件的话做到4倍。蛇形尽量走在内层两边有地平面屏蔽。如果空间允许用大弧度蛇形代替直角蛇形减少阻抗突变。绕完之后用Allegro的SigXplorer或者第三方工具做一下串扰仿真确认眼图没问题。5.4 过孔长度没有计入等长Allegro默认计算的是走线的平面长度但过孔本身也有长度板厚方向。如果一组线里有的过孔多、有的过孔少实际电气长度会有差异。处理方法是在Constraint Manager里启用Z-axis Delay让Allegro把过孔的垂直长度也计入总长度。或者手动在规则里给过孔多的网络加一个补偿值。这个细节在低速信号里可以忽略但在DDR3以上的速率下过孔长度差异可能占到总偏差的相当比例必须考虑。6. 从建组到验证的完整检查清单6.1 规则建立阶段的检查项在开始绕线之前花两分钟过一遍这个清单能省掉后面大量的返工时间检查项确认内容常见问题Net ClassDDR信号是否已归类命名不规范导致漏网Match Group组内网络是否完整DQS差分对是否包含参考网络是否选对DQS或CK参考选错导致整组偏差目标长度是否基于实际布局估算拍脑袋定值导致无法绕容差是否符合控制器手册过紧或过松过孔补偿是否启用Z-axis Delay高速下偏差累积差分对规则内部Phase Tolerance是否设置差分对内部不等长6.2 绕线完成后的验证步骤绕完线不等于完事必须做验证Constraint Manager Spreadsheet检查看所有网络的Actual Length和Delta是否在容差内。DRC检查Allegro的Online DRC或者Batch DRC会报告违反约束的网络。眼图仿真有条件的话用SigXplorer或者外部工具跑一下确认信号完整性。和硬件工程师交叉确认把你的等长报告发给硬件工程师确认符合控制器要求。6.3 一个容易被忽略的细节测试点的长度如果你在DDR网络上加了测试点测试点引入的短截线Stub也会影响信号。虽然测试点通常很短但在DDR4速率下一个几十mil的Stub就可能造成明显的反射。处理方式测试点尽量放在走线末端或者用过孔直接引出减少Stub长度。如果测试点必须放在中间考虑用背钻Back Drill去掉多余的Stub。7. 把这套流程用熟之后的一些个人体会我第一次做DDR等长的时候在Constraint Manager里折腾了一个下午建了删、删了建最后发现是参考网络选错了。后来做多了总结出一个习惯每次建完Match Group先不急着绕线而是用Allegro的Report功能生成一份约束报告对着报告检查一遍逻辑关系。这个报告会列出每个Match Group的成员、参考网络、目标长度、容差一目了然。确认无误之后再动手绕线效率高很多。另一个体会是等长规则不是越严越好。有些工程师为了保险把容差设得特别小结果绕线绕到崩溃板子面积也浪费了。实际上只要控制器手册给的容差范围内信号都能正常工作。过度设计除了增加工作量没有实际收益。还有一点Allegro的约束系统很强大但也很容易让人迷失在层层嵌套的菜单里。我的建议是先把一个Match Group从头到尾走通一遍理解每个步骤的作用然后再去探索更高级的功能比如Pin Pair、XNet、拓扑约束等。基础打牢了后面学什么都快。最后分享一个快捷键在Constraint Manager里CtrlC和CtrlV可以复制粘贴约束设置。如果你有多个DDR组需要建类似的规则建好一个之后直接复制改改网络名和目标值就行能省不少时间。
返回列表