
上个月调试一块DDR3的板子遇到一个挺典型的迷惑场景地址组里两根网络的Routed Length几乎一样误差只有2mil。按照不少同事的习惯这个值已经满足等长要求了肯定是稳的。但我习惯性地切到Signal Length看了一眼好家伙两根线直接差了130多mil。问题就出在其中一个网络多换了一次层、多打了两个过孔。对于刚接触AD软件的工程师来说Signal Length和Routed Length这两个名称很容易被当成同一个东西的两种叫法。实际上它们代表的是两套完全不同的度量体系一个管“铜箔画了多少”一个管“信号实际走了多远”。这篇文章我会用实际板卡例子把两者的定义、AD里的查看方式、等长匹配里的选型逻辑以及一些常见的踩坑点一次性说清楚。内容适合正在做DDR、高速接口的Layout工程师也适合刚入行的硬件新人用来建立正确的长度观。1. 两种“长度”背后是同一根线却分别代表铜箔量和传播时间1.1 Routed Length把所有铜箔走线段累加起来Routed Length中文里叫布线长度指的是网络上所有走线段Track在二维平面上的物理长度总和。你在PCB编辑器里选中一段走线Properties面板显示的Length就是这段走线的坐标几何长度。把网络上所有走线段累加就得到这个网络的Routed Length。这个长度有个很关键的特点它只看铜箔在XY平面的展开量完全不关心信号怎么流动。也就是说它对过孔、焊盘、封装引脚的长度贡献一概不统计。你在顶层走了50mil打一个过孔再到底层走50milRouted Length就是100mil过孔在Z轴穿过的板厚段不会被算进去。所以把Routed Length理解成“画了多少铜线”比理解成“信号走了多远”更准确。它最大的价值在于能反映布局布线的工作量、铜箔面积也可以用来粗略评估物理走线是否过长。在低速电路、功率电路或者普通信号完整性要求不高的设计里拿它做长度判断基本够用。但问题是一旦信号速率上去决定时序的并不是铜箔的平面长度而是信号从驱动端抵达负载端所花费的时间。影响这个时间的要素比单纯的Track长度多得多。1.2 Signal Length把过孔、焊盘、引脚折算成电长度Signal Length信号长度是AD基于网络拓扑计算出来的“信号传播路径长度”。它不再只是把所有走线段简单相加而是按照实际信号路径把路径上的走线长度、过孔长度、焊盘与封装引脚的贡献都折算进去最终得出一个更接近电气长度的值。为什么要把过孔算进去因为信号在PCB里传播时碰到过孔就必须沿Z轴穿过整个板层厚度。FR4板材常用板厚1.6mm大约等于63mil一个过孔对信号而言等效于多走约63mil的电气距离两个过孔就是126mil。这个数字在高速总线的等长预算里绝对算得上大头。如果只盯着Routed Length这些Z轴距离会被完全忽略。焊盘和封装引脚也是同样的道理。SMD焊盘虽然贡献不大但直插器件、连接器的引脚在封装里有一段较长的金属高速信号经过这段金属同样会产生延迟。AD在计算Signal Length时会把这部分按封装模型折算进来。所以你会看到同一网络的Signal Length在绝大多数情况下都会大于Routed Length而且两者差值越大往往意味着这个网络的过孔数量、器件引脚长度或者拓扑复杂度越高。这里补充一个数据传输阶段很有用的参考在FR4板材上表层微带线的信号传播速度大约是6mil/ps左右内层带状线略慢一点。也就是说Signal Length每差100mil延迟大约就差16到17ps。DDR3-1600的时序预算里一个时钟周期是625ps算上建立保持时间后留给等长偏差的预算往往只有几十皮秒。所以100mil的电气长度偏差足以影响一块板子的稳定性。1.3 一个含过孔网络的数值对比看清差值的来源用一组最简单的数值来加深印象。假设板厚1.6mm即63mil有两个地址网络网络A顶层走线长度1000mil中间换了两次层也就是经过了2个过孔。Signal Length约为1000 2 × 63 1126mil。网络B顶层走线长度1080mil全程不换层。Signal Length就是1080mil。从Routed Length来看A比B短了80mil给人的直觉是A“还缺长度”后续调整时会优先给A加绕线。但从Signal Length来看A比B反而长了46mil已经超出了等长目标。如果设计的等长目标值是1100mil ± 25mil那么A的实际Signal Length是1126mil已经超出上限B则需要再加长20mil左右。这时候如果按Routed Length去调整给A绕线、给B减短方向和正确做法完全相反DRC跑完依然报错甚至越调越乱。这就是为什么我在做等长设计时第一步永远先确认AD里显示到底哪个长度。2. 在AD中分别调出这两种长度的操作路径2.1 看Routed Length选中走线后Properties面板即可查看Routed Length是AD软件最直接的操作之一。用鼠标选中任意一条走线右侧Properties面板里的Length字段就会显示这条Track的几何长度。如果一次框选多条走线Length显示的就是这些走线段的累加值。需要注意这个累加不会自动区分信号方向。只要走线属于同一个网络哪怕它是从分支点甩出去的一段短Stub也会被算进Routed Length。这也是后面“两值背离”的一个隐藏推手稍后会展开讲。如果想查看某个网络整体的Routed Length可以在PCB编辑界面用查找相似对象ShiftF把同一网络的走线全部选中然后在Properties面板查看总长度。更快的办法是先单独点选一条走线在Properties里找到网络名再利用Selection Filter扩大选择到整个网络最后看累加长度。2.2 看Signal LengthPCB面板Nets视图的关键字段Signal Length的查看入口和Routed Length不太一样。右侧面板区域点击Panels - PCB在PCB面板顶部的下拉列表里选择Nets视图。左侧列表会按网络分类点击任意网络中间区域会显示出这个网络下的所有元素而右侧上方的信息区里就会清晰列出Routed Length和Signal Length两个字段。如果你的面板里没有显示Signal Length多半是版本或面板配置问题。可以在该视图上方的列标题区域右键打开Column对话框把Signal Length等字段勾选出来。不同AD版本的叫法会有细微差别但核心就是找Nets视图下的长度列。这个方法在需要快速比对多个网络时非常实用。比如我想看DDR地址线一组的Signal Length是否接近直接在Nets视图点选不同网络右上角字段实时刷新比逐个打开Properties快得多。AD新版本还会在同一个信息区显示Propagation Delay也就是传播延迟本质上是由Signal Length和层叠结构换算出来的时间值做时序分析时可以直接参考。2.3 整板长度数据报表的两种导出思路当网络数量很多一个个点击就不现实了。我常用的办法是在PCB面板的Nets列表中按住Ctrl多选要分析的全部网络然后在Reports菜单下生成网络长度报告。这类报告一般会包含当前选中网络的名称、Routed Length、Signal Length等信息生成后复制到表格工具里按列排序谁长谁短一目了然。另一种思路是在Nets视图信息区里复制当前网络的长度信息配合公司内部的脚本或壳层工具批量提取。如果你会写一点DelphiScript或者Python也可以直接遍历PCB对象把全部网络名称、Routed Length、Signal Length、Propagation Delay导出成CSV再做排序和偏差分析。我自己做等长数据复盘时基本是“报表导出加排序”先按Signal Length降序排列找到偏差最大的网络再倒查它的过孔数量和路径定位效率会高很多。3. DDR3地址组等长实战为什么按Routed Length调线会调反方向3.1 全流程设置Matched Lengths规则与DRC继续用DDR3地址组做实战演示。新建或打开一个PCB工程后进入菜单Design - Rules在High Speed分类下找到Matched Lengths规则。双击规则进入设置页先在Where The Object Matches区域选择应用对象。这里建议提前把地址组网络加入一个Net Class然后在规则里指定这个Net Class避免挨个手动勾选网络。设置目标长度和容差时要明确这个目标值指的是Signal Length还是Routed Length。AD的Matched Lengths规则在DRC检查时评估的是电气路径也就是Signal Length而不是简单加总所有Track。这一点在规则说明里并不起眼但却是判断等长是否达标的依据。设好规则后回到PCB编辑器菜单Tools - Design Rule Check把Matched Lengths检查项勾上并运行。如果某个网络不满足等长约束DRC会直接在Message面板报出该网络当前的Signal Length与目标值的偏差。3.2 数据对比Routed Length接近但Signal Length差了130mil这块板子里地址组目标长度是1500mil误差±25mil。跑完DRC后有两根网络报了错我测量了它们的Routed Length发现一个是1482mil一个是1490mil差值只有8mil。只看这个值谁都不会觉得等长有大问题。但看Signal Length数据就很说明问题了一个还在1493mil附近另一个直接变成1623mil差了130mil超过误差上限接近100mil。查了一下后者多打了两个过孔并且有一个过孔附近甩出一小段12mil的Stub。过孔按63mil一个折算两个就是126mil基本解释了全部差值。这里顺带说一个很多人忽略的点Routed Length会统计那段12mil的Stub而在Signal Length的DRC计算中Stub并不属于从驱动端到负载端的主路径所以不会计入等长偏差。恰恰是这个细微差别让两个Length的背离看起来特别吓人。3.3 用交互式长度调整修正Signal Length确定问题是换层过多导致电气长度超标后正确做法不是简单减短走线而是重新规划拓扑看看能不能减少过孔数量。但在已经完成大部分布线的情况下更稳妥的处理方式是通过交互式长度调整把过长网络的Signal Length拉回窗口内。选中过长的网络走线在菜单Route - Interactive Length Tuning不同AD版本入口略有差异进入长度调整模式。鼠标点击需要绕线的走线位置软件会沿当前路径生成锯齿状的绕线区段。此时打开Properties面板或注意状态栏软件会实时显示当前Signal Length、目标长度以及剩余偏差。调整的目标不是让某个数值看起来好看而是要让所有同组网络的Signal Length最终落在同一个等长窗口里。如果只有一个网络过长调整方向是压缩绕线或改变拓扑只有当它过短时才需要增加绕线。这就是为什么我先讲数值对比搞反了方向越绕越乱。3.4 绕线时的间距与寄生参数提醒用交互式长度调整增加绕线时还有几个工程细节要留意。锯齿波形的振幅和间距不是越大越好太大的振幅会浪费布线面积太小的间距会引入相邻平行段的串扰。业界经验是绕线相邻边沿间距至少满足3W也就是三倍线宽保守设计可以做到5W。绕线位置也要尽量避开放置在过孔正下方或焊盘根部那种地方阻抗变化已经很剧烈再加一段绕线只会雪上加霜。选在走线中段、周围净空较大的区域绕线是更合理的方案。绕完之后再跑一次DRC观察阻抗、间距等相关规则是否被破坏。4. 不同信号类型该选哪个长度指标4.1 高速时钟与差分对必须看Signal Length时钟信号的时序要求通常是最严格的。它的翻转时刻直接决定整个系统的同步所以任何额外延迟都要算进预算。对于高速时钟Routed Length最多只能作为走线物理占比的参考真正纳入时序分析的是Signal Length。差分对也是一样对内P和N的等长匹配本质是保证差分信号的正负沿同时到达接收端必须看Signal Length。差分对走线还有个特殊之处两条线一般处于同一层并紧耦合物理长度本身比较接近。但一旦换层位置不对称或者某一端的过孔数量不一致Signal Length就会立刻拉开差距。因此布线阶段就要尽量让差分对的两个网络对称换层不要为了绕开个别障碍让其中一端的P、N过孔数量产生差异。4.2 DDR等并行总线以Signal Length组内匹配为基准并行总线比如DDR3/DDR4的地址、控制、数据线等长的核心是让一组信号在同一个时钟边沿窗口内稳定到达。地址线通常是从控制器到多颗内存颗粒属于多点负载拓扑路径复杂所以更依赖Signal Length。DRC的Matched Lengths规则也按照Signal Length来评估。数据线组内会区分DQS和DQ要求更细DQS与DQ之间不仅要比长度有时还要做相对的偏斜控制。这个时候Signal Length比Routed Length能更真实地反映延迟差。结合过孔数量、层叠结构一起看才不容易遗漏隐藏延迟。如果你是做DDR4甚至更高频率的设计我的建议是在SI仿真之前先用Signal Length做一轮粗筛把明显偏离等长窗口的网络挑出来再针对性地做仿真验证。这要比拿着Routed Length做一堆无效仿真高效得多。信号类型首选长度指标原因高速时钟Signal Length时序预算紧张需计入过孔与引脚延迟差分对Signal LengthP/N两侧需对称换层避免电气长度偏差DDR地址/控制线Signal Length多负载拓扑Routed Length含Stub干扰DDR数据线/DQSSignal Length组内相对偏斜控制要求精确低速控制信号Routed Length可初判时序裕量大关注物理走线是否冗余电源与地网络Routed Length主要关注铜箔电阻和载流能力4.3 低速控制信号Routed Length能用但也有前提低速控制信号比如复位、片选、I2C等时序裕量常常很大走线长度差个几百mil也不会产生功能问题。这种情况下用Routed Length做粗略判断完全可行而且快速方便。我的习惯是只要信号速率低于几十兆赫兹、负载单一、时序预算宽松就不必纠结Signal Length。但前提条件是这根线的路径不能存在过大的过孔数量差异也不能有严重的拓扑分支。因为即便整体时序裕量大如果一根复位线上打了七八个过孔导致上升沿被过孔寄生电容拖慢也可能在极端温度下触发问题。低速不等于可以完全放弃电气直觉。4.4 多分支拓扑与Stub处理当网络带多个负载比如一串DDR颗粒挂在同一条地址线上AD计算Signal Length时关注的是驱动端到各个负载的路径长度。Routed Length会把所有分支的残端长度全加进去这在等长判断上是一个严重的干扰项。处理思路是先看拓扑结构确认驱动端和负载端在原理图上的引脚方向被正确设置为Input/Output。AD只有根据正确的器件引脚方向才能自动识别信号路径。然后单独查看每个分支的Signal Length而不是看整网的Routed Length。这样分析出来的数据才有实际意义。如果设计规范允许优先采用菊花链或Fly-by拓扑让信号按顺序到达每个负载而不是在某个节点分出多个长Stub。拓扑一旦定下来Signal Length的提取就会稳定等长调整也会变得可控。5. 两个Length严重背离时的五步排查法5.1 查过孔层对设置是否正确Signal Length中过孔长度按层对间距计算如果Layer Stack Manager中的层对定义错误比如把两个物理距离很远的层归为相邻层AD会按错误的间距折算过孔长度。这种情况下Signal Length会和实际电气长度偏差很大。排查时打开Design - Layer Stack Manager检查每个过孔类型对应的层对。顶层到底层的过孔间距应该约等于整板厚度一到三层的盲埋孔间距应等于第一层到第三层的介质厚度。如果层对里混入了错误的对称层信息过孔长度就会被高估或低估Signal Length自然不准。5.2 查网络拓扑和信号方向定义第二个高频原因是原理图里器件的引脚方向定义不对。AD需要知道哪个引脚是输出源、哪些是输入负载才能自动提取信号路径。如果驱动器引脚被错误设置成Passive或者负载引脚被误设为Output拓扑路径就会乱套Signal Length会按错误路径计算。检查方法是在原理图中选中器件在Properties里查看Pin的Electrical Type。修正方向类型后更新PCB重新提取拓扑Signal Length值一般会立即恢复合理范围。这个问题在复用外部参考设计时特别常见因为别人画的原理图里引脚属性未必规范。5.3 查封装焊盘与3D模型引起的长度偏差某些特殊器件比如DDR内存条插槽、板对板连接器、RJ45等封装引脚本身带有较长的金属段。AD在计算Signal Length时会把引脚长度按封装模型加入。如果发现某个网络的Signal Length比Routed Length大得离谱而且过孔数量又不多优先怀疑封装引脚的长度设置。这时打开PCB封装库编辑器查看Pin的长度属性是否和实际器件一致。如果器件是客户提供的Step模型还要确认机械引脚长度和电气焊盘之间的对应关系避免3D尺寸和电气长度互相误导。我遇到过因为封装里Pin长度被误设为100mil导致一整组连接器的Signal Length全部偏大的情况。5.4 查DRC规则选型是否匹配Design Rules里长度相关的规则有好几个Min Length、Max Length、Matched Lengths、Differential Pair Matched Lengths。它们各自检查的对象不同。有时工程师在规则里配的是Min/Max Length但实际要做的是组内等长匹配DRC报告会显得“明明改了长度却不更新”。我在实践中会同时检查等长组是否都加入了Matched Lengths规则有没有网络漏加目标值设置在了Min/Max Length字段还是Matched Lengths字段。规则设置混乱时长度值本身没问题DRC也会给出让人误解的报错这时候先冷静看一下规则类型再动手。5.5 查残端走线与孤岛铜皮最后一种背离场景相对隐蔽网络里存在未连接到过孔或焊盘的残端走线、孤岛铜皮。Routed Length会把它们全部加起来而Signal Length只走真实信号路径不统计这些“死线段”。这在手工布线后清理不彻底时非常常见。全局排查时可以打开DRC的Un-Routed和Un-Connected检查项或者用查找相似对象筛选同一网络中连接对象数量为0的Track。这些残端删除后两个Length的差值通常会明显收窄。如果差值依然存在再用前面几步继续倒查。最后分享一个我的习惯看一个网络的长度前先问自己一句“接下来要拿它做什么”。如果是评估走线占板面积、评估铜箔量看Routed Length如果是做时序等长、判断信号延迟看Signal Length。把这两个值的差别吃透了DDR、差分线、时钟总线的等长处理都能少走很多弯路。另外一个很实用的技巧是每完成一版布线就把PCB面板Nets视图里的Signal Length导出来按差值从大到小排序优先处理背离最大的那几根。大多数时候它们都会和过孔数量、拓扑结构、残端走线这几个因素强相关。用这种方法做自查比反复跑DRC更早发现问题。