1. 高速差分信号在PADS中的设计困局
搞过硬件的朋友大概都有过这种经历:板子打回来,功能跑通了,眼图一测,惨不忍睹。尤其是涉及到USB、HDMI、PCIe、SATA这类高速接口的时候,信号完整性问题就像幽灵一样缠着你。很多时候问题不在芯片选型,也不在原理图,而是出在PCB布局布线这一环。而在国内中小企业和个人开发者群体里,PADS依然是使用最广泛的EDA工具之一,所以今天我就专门聊聊PADS里差分对设置这件事。
你可能会问,差分对设置有什么好聊的?不就是设个等长、设个间距吗?说实话,我刚开始也是这么想的。直到有一次做一块HDMI 2.0的板子,差分对在PADS Router里怎么都调不到理想的等长,眼图死活打不开,折腾了整整一周才发现问题出在差分对的规则设置逻辑上。PADS的差分对管理和Allegro、Altium的逻辑不太一样,它有一套自己的“脾气”,你不顺着它来,它就给你埋坑。
这篇文章适合所有用PADS做高速信号设计的工程师,不管你是刚入行的新手,还是用了几年PADS但一直没深究过差分对规则的老手。我会从差分对的基本概念讲起,把PADS里差分对设置的完整流程、参数计算、常见坑点、排查技巧全部拆开揉碎讲清楚。核心关键词就几个:PADS、差分对、高速信号、布线、阻抗。你把这几个东西搞明白了,高速信号的稳定性问题至少能解决一大半。
注意:本文讨论的所有操作基于PADS VX2.x及以上版本,部分菜单路径在PADS 9.5及更早版本中可能有差异,我会在涉及的地方特别标注。
2. 差分信号的核心原理与PADS的实现逻辑
2.1 差分信号为什么能抗干扰
在深入PADS的操作之前,有必要先把差分信号的基本原理捋一遍。很多人做了好几年差分对布线,其实并没有真正理解差分信号的工作机制,这就导致在遇到规则冲突的时候不知道该怎么取舍。
差分信号的核心思想很简单:用两根线传输一个信号,一根传正相,一根传反相。接收端把两个信号相减,得到有效信号。这样做的好处是,两根线在空间上挨得很近,外界耦合进来的噪声对两根线的影响几乎是相同的,也就是所谓的共模噪声。接收端一相减,共模噪声就被抵消掉了。这就是差分信号抗干扰能力强的原因。
但这里有一个前提条件:两根线必须足够“对称”。如果两根线的长度不一致、间距不均匀、参考平面不完整,那么它们受到的干扰就不再是共模的了,一部分会转化成差模噪声,直接叠加在有效信号上。这就是为什么差分对布线要求等长、等间距、紧耦合。
从阻抗的角度来看,差分信号有两种阻抗概念:单端阻抗和差分阻抗。单端阻抗是指每根线对参考平面的阻抗,差分阻抗是指两根线之间的等效阻抗。对于大多数高速接口,规范要求的是差分阻抗,比如USB 2.0要求90欧姆差分阻抗,HDMI要求100欧姆,PCIe要求85欧姆或100欧姆(取决于具体版本)。
差分阻抗的计算公式比较复杂,涉及线宽、线间距、介质厚度、介电常数等多个参数。工程上一般用阻抗计算工具来算,比如嘉立创的阻抗计算神器、Polar SI9000等。但你要知道,PADS本身并不具备阻抗计算功能,它只能根据你设定的线宽和间距来布线,实际的阻抗需要你在叠层设计阶段就确定好。
2.2 PADS差分对管理的底层逻辑
PADS对差分对的管理方式和Allegro有本质区别。Allegro里差分对是一个约束管理器里的概念,你可以非常精细地控制每一段的间距、长度容差。PADS的逻辑更“直接”一些:它是在PCB设计环境中通过“差分对”对象来管理的,你需要先在原理图或PCB中定义哪些网络是差分对,然后设置差分对的规则,最后在布线时PADS会自动按照规则来走线。
PADS中差分对的实现依赖三个层面的配合:
- 网络定义层:在PADS Logic或PADS Layout中,把两个网络标记为差分对。这一步是基础,没有这一步后面都无从谈起。
- 规则设置层:在“设计规则”中设置差分对的线宽、间距、等长容差等参数。这一步决定了PADS在布线时的行为。
- 布线执行层:在PADS Router中进行交互式差分对布线,或者用自动布线器处理。这一步是最终落地的环节。
很多人出问题就出在第一步和第二步的衔接上。比如在原理图里定义了差分对,但导入PCB后差分对信息丢失了;或者规则设置里的参数和实际叠层不匹配,导致PADS算出来的线宽根本达不到目标阻抗。这些坑我在后面会逐一展开。
3. PADS差分对设置完整实操流程
3.1 差分对定义:从原理图到PCB的正确传递
差分对定义这一步看似简单,但坑最多。我见过太多人在这一步栽跟头,导致后面布线时根本找不到差分对。
方法一:在PADS Logic中定义
这是最规范的做法。在PADS Logic中,选中需要定义为差分对的两个网络,右键选择“特性”,在弹出的对话框中找到“差分对”选项卡,勾选“是差分对”,然后给差分对起一个名字。注意,两个网络的命名最好有规律,比如USB_DP和USB_DM,这样PADS能自动识别。如果你命名成USB_P和USB_N,也能识别,但有些版本的PADS对命名规则有要求,建议用_DP/_DM或_P/_N这种常见后缀。
定义完成后,在PADS Logic中执行“工具->PADS Layout链接”,把网表同步到PADS Layout。同步的时候要注意,必须确保“差分对”信息被包含在网表中。在链接设置里有一个“包括差分对信息”的选项,一定要勾上。
方法二:在PADS Layout中直接定义
如果原理图里没有定义,或者你拿到的是一个已经导入的PCB但差分对信息丢了,可以在PADS Layout中手动定义。操作路径是:“设置->网络->差分对”,在弹出的对话框中点击“添加”,然后选择两个网络,给差分对命名。这种方法适合补救,但不推荐作为主要方式,因为手动定义容易遗漏,而且后续原理图更新时可能会覆盖掉。
实操心得:我个人的习惯是在原理图阶段就把差分对定义好,并且在网络命名上严格遵循“功能名_DP/功能名_DM”的格式。这样即使网表同步出了问题,在PCB里也能通过命名规则快速批量重建差分对。PADS Layout里有一个“按名称自动创建差分对”的功能,在差分对对话框里可以找到,能省不少事。
一个容易被忽略的细节:差分对的命名不要用中文,也不要用特殊字符。PADS对中文的支持一直不太好,用中文命名差分对可能导致规则无法正确应用。另外,差分对的名字不要和已有网络名重复,否则PADS会报错。
3.2 差分对规则设置:参数计算与填写
差分对定义好之后,接下来就是设置规则。这是整个流程中最核心的一步,也是决定信号质量的关键。
在PADS Layout中,打开“设置->设计规则”,切换到“差分对”选项卡。这里你需要设置几个关键参数:
| 参数 | 说明 | 典型值 |
|---|---|---|
| 线宽 | 差分对中每根线的宽度 | 根据阻抗计算确定,通常4-6mil |
| 间距 | 两根线之间的边缘到边缘距离 | 根据阻抗计算确定,通常4-8mil |
| 等长容差 | 两根线允许的长度差 | 通常5-10mil,高速信号建议≤5mil |
| 最大长度 | 差分对的允许最大走线长度 | 根据信号频率和协议规范确定 |
这些参数怎么填?不是拍脑袋决定的,需要根据你的叠层结构和目标阻抗来反推。
第一步:确定目标差分阻抗。查你的接口规范。USB 2.0是90Ω±15%,USB 3.0是90Ω±10%,HDMI是100Ω±10%,PCIe Gen3是85Ω±15%,千兆以太网是100Ω。这个不能搞错,搞错了后面全白搭。
第二步:确定叠层结构。联系你的PCB板厂,拿到他们的叠层参数,包括每层的介质厚度、铜厚、介电常数。不同板厂的叠层不一样,同样的线宽间距在不同的板厂做出来的阻抗可能差10%以上。
第三步:用阻抗计算工具反推线宽和间距。把叠层参数输入进去,调整线宽和间距,直到差分阻抗接近目标值。这里有一个经验法则:线宽越小、间距越大,差分阻抗越高;线宽越大、间距越小,差分阻抗越低。但间距太小会导致生产困难,一般不建议小于4mil。线宽太小会导致损耗增大,一般不建议小于3.5mil。
第四步:把算好的线宽和间距填入PADS的差分对规则中。注意,PADS里的间距是指两根线的边缘间距,不是中心间距。有些阻抗计算工具给的是中心间距,需要换算一下:边缘间距 = 中心间距 - 线宽。
注意:PADS的差分对规则里有一个“最小间距”和“推荐间距”的区分。最小间距是DRC检查的下限,推荐间距是布线时的默认值。建议把推荐间距设成你计算出来的值,最小间距设成推荐值的80%左右,给布线留一点余量。
3.3 层设置与差分对布线前的准备
规则设好了,别急着布线。还有几件事需要确认:
确认层定义正确。在“设置->层定义”中,确保你的差分对走线所在的层已经正确设置了走线方向、铜厚等参数。如果是多层板,还要确认参考平面的完整性。差分对最好走在有完整参考平面的层上,而且参考平面不能有跨分割。
确认过孔类型。差分对换层时需要用过孔。过孔会引入阻抗不连续,所以过孔的设计也很关键。建议使用差分过孔,也就是两个过孔成对出现,间距和差分对间距一致。过孔的焊盘直径和钻孔直径也要根据阻抗要求来选,一般过孔焊盘比走线宽2-4mil,钻孔比焊盘小8-10mil。
确认栅格设置。PADS Router里的栅格设置会影响差分对布线的精度。建议把栅格设成1mil或0.5mil,这样能更精确地控制线宽和间距。如果栅格太大,PADS可能会自动调整线宽来对齐栅格,导致阻抗偏离目标值。
确认设计规则优先级。PADS的规则系统是有优先级的,差分对规则、网络规则、类规则、默认规则,优先级从高到低。如果你发现差分对布线时没有按照你设置的规则走,很可能是被更高优先级的规则覆盖了。检查一下“设计规则”里的优先级设置。
4. PADS Router中的差分对布线实战
4.1 交互式差分对布线操作步骤
准备工作做完,终于可以开始布线了。PADS Router的差分对布线功能还是比较顺手的,但有几个操作细节需要注意。
第一步:选择差分对。在PADS Router中,点击“布线”工具栏里的“差分对布线”按钮,或者直接按快捷键。然后在PCB上点击差分对的任意一个焊盘,PADS会自动选中整个差分对。
第二步:设置布线参数。在开始布线之前,先确认一下当前使用的布线规则。在Router的“选项”对话框里,可以查看和临时修改差分对的线宽、间距、过孔类型等参数。这里有一个技巧:如果你发现PADS用的线宽不对,不要急着去改设计规则,先在选项里临时改一下,看看效果,确认后再去改规则。
第三步:开始布线。点击起点焊盘,移动鼠标,PADS会自动生成一对平行的走线。在布线过程中,你可以通过右键菜单切换布线模式,比如“以任意角度布线”、“以45度角布线”、“以90度角布线”。对于高速差分对,建议用45度角或圆弧,避免90度直角,因为直角会导致阻抗突变。
第四步:处理障碍物。差分对布线过程中遇到障碍物时,PADS会自动绕行。但自动绕行的结果不一定最优,可能会破坏等长或等间距。这时候你需要手动调整。在Router里,你可以用“推挤”功能让PADS自动调整周围走线来给差分对让路,也可以用“手工布线”模式自己控制走线路径。
第五步:等长调整。差分对布完后,需要检查两根线的长度是否在容差范围内。在Router中,选中差分对,右键选择“特性”,可以看到两根线的实际长度和差值。如果超差,需要用“蛇形布线”功能来补偿。PADS Router里有一个“差分对蛇形布线”功能,可以同时对两根线做蛇形补偿,保持等间距。
实操心得:蛇形布线的时候,蛇形的幅度和间距也有讲究。幅度太小起不到补偿作用,幅度太大占空间而且可能引入新的阻抗不连续。一般建议蛇形幅度不小于3倍线宽,蛇形间距不小于4倍线宽。另外,蛇形段尽量放在走线的末端,不要放在中间,因为中间的蛇形会影响信号传播。
4.2 等长匹配的精确控制方法
等长匹配是差分对布线中最考验耐心的环节。PADS提供了几种等长控制的方法,我逐一说明。
方法一:实时长度监控。在PADS Router中,布线时状态栏会实时显示当前走线的长度。你可以打开“长度监控”窗口,同时看到差分对两根线的长度和差值。这个方法适合在布线过程中随时调整,避免布完了才发现超差。
方法二:自动等长调整。PADS Router有一个“自动等长”功能,在差分对布完后,选中差分对,右键选择“自动等长调整”,PADS会自动在较短的那根线上添加蛇形来补偿长度差。这个功能很方便,但自动生成的结果不一定美观,可能需要手动微调。
方法三:手动蛇形补偿。如果自动调整的结果不理想,可以手动添加蛇形。在Router中,选择“蛇形布线”模式,然后在需要补偿的线上拖动鼠标,PADS会生成蛇形走线。手动补偿的好处是你可以精确控制蛇形的位置、幅度和间距。
方法四:Pin Delay补偿。对于高速信号,芯片内部的引脚延迟也需要考虑。比如FPGA的差分对,不同Bank的引脚延迟可能不同。PADS支持在规则里设置Pin Delay,这样等长计算的时候会把引脚延迟也算进去。这个功能在“设计规则->差分对->Pin Delay”里设置。
| 等长控制方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 实时长度监控 | 布线过程中 | 随时调整,避免返工 | 需要分心看数据 |
| 自动等长调整 | 布完后的快速补偿 | 操作简单,速度快 | 结果可能不美观 |
| 手动蛇形补偿 | 对美观和性能有要求 | 精确控制,结果可控 | 耗时,需要经验 |
| Pin Delay补偿 | 芯片引脚延迟差异大 | 考虑全面,精度高 | 需要准确的Pin Delay数据 |
4.3 差分对过孔与换层处理
差分对换层是高速信号设计中的一个难点。换层意味着信号要从一个参考平面切换到另一个参考平面,如果处理不好,会导致阻抗不连续和回流路径断裂。
过孔设计要点:
- 差分过孔要成对放置,间距和差分对间距一致。如果间距不一致,会导致差分阻抗突变。
- 过孔焊盘不宜过大,一般比走线宽2-4mil即可。焊盘越大,寄生电容越大,阻抗越低。
- 过孔钻孔不宜过小,一般8-12mil。钻孔太小会增加生产成本,而且可能影响可靠性。
- 如果换层前后参考平面不同,需要在过孔附近添加回流过孔,给回流电流提供低阻抗路径。
换层处理技巧:
在PADS Router中,差分对换层时,PADS会自动在两根线上各放一个过孔。但默认的过孔可能不符合你的要求,需要提前在规则里设置好过孔类型。在“设计规则->过孔”里,可以指定差分对使用的过孔。
换层后,差分对的线宽和间距可能会因为过孔的存在而发生变化。PADS会自动调整,但调整的结果不一定最优。建议在换层后手动检查一下,确保线宽和间距仍然符合阻抗要求。
注意:高速差分对尽量减少换层次数。每次换层都会引入阻抗不连续和额外的寄生参数。如果必须换层,尽量在信号接收端附近换,不要在中间换。
5. 差分对设计中的常见问题与排查技巧
5.1 差分对规则不生效的排查思路
这是PADS用户反馈最多的问题之一:明明设置了差分对规则,但布线的时候PADS就是不按规则走。我总结了几种常见原因和排查方法。
原因一:差分对没有正确定义。排查方法:在PADS Layout中打开“设置->网络->差分对”,看看你的差分对是否在列表里。如果不在,说明定义没成功。回到原理图检查差分对定义,或者手动在PCB里添加。
原因二:规则优先级冲突。排查方法:在“设计规则”里查看规则的优先级顺序。差分对规则的优先级应该高于网络规则和默认规则。如果被覆盖了,调整优先级。
原因三:层规则限制。排查方法:检查差分对走线所在的层是否设置了特殊的走线规则。比如某些层可能设置了固定的线宽,这会覆盖差分对规则。
原因四:栅格设置问题。排查方法:如果栅格太大,PADS可能会为了对齐栅格而调整线宽。把栅格设小一点试试。
原因五:PADS版本Bug。排查方法:某些PADS版本确实存在差分对规则不生效的Bug,尤其是VX2.4之前的版本。如果排除了以上原因,尝试升级到最新版本,或者重启PADS试试。
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 布线时线宽不对 | 规则优先级冲突 | 检查规则优先级 | 调整差分对规则优先级 |
| 差分对找不到 | 定义未成功 | 检查差分对列表 | 重新定义或手动添加 |
| 间距忽大忽小 | 栅格设置不当 | 检查栅格大小 | 减小栅格到1mil |
| 等长无法调整 | 蛇形功能被禁用 | 检查布线模式 | 启用蛇形布线功能 |
| 换层后阻抗突变 | 过孔设计不当 | 检查过孔参数 | 优化过孔焊盘和钻孔 |
5.2 阻抗不匹配的实测与调整
阻抗不匹配是高速信号不稳定的根本原因之一。但阻抗这个东西,设计阶段算得再好,实际做出来也可能有偏差。所以实测和调整是必不可少的环节。
实测方法:用TDR或VNA测量差分对的阻抗。TDR可以测出阻抗随距离的变化曲线,能直观地看到哪里阻抗偏高、哪里偏低。VNA可以测S参数,通过S11和S21可以推算出阻抗和损耗。
常见阻抗问题及调整方法:
- 阻抗整体偏高:说明线宽太小或间距太大。调整方法:增大线宽或减小间距。
- 阻抗整体偏低:说明线宽太大或间距太小。调整方法:减小线宽或增大间距。
- 阻抗局部突变:通常是过孔、焊盘、跨分割等引起的。调整方法:优化过孔设计,确保参考平面完整。
- 阻抗随频率变化大:说明介质损耗大或导体损耗大。调整方法:更换低损耗板材,或增大线宽。
实操心得:嘉立创的阻抗计算神器是个不错的工具,免费而且操作简单。但要注意,它用的是理想模型,实际做出来的阻抗可能会有5%-10%的偏差。所以设计的时候最好留一点余量,比如目标100Ω,设计成102Ω左右,这样即使有偏差也不会超出规范。
5.3 高速信号不稳定的其他隐藏因素
差分对设置只是高速信号设计的一个环节,还有很多其他因素会影响信号稳定性。这里列举几个容易被忽略的:
参考平面跨分割。这是高速信号的大忌。如果差分对走线下面的参考平面被分割了,回流电流就没有完整的路径,会导致严重的信号完整性问题。排查方法:在PADS中打开平面层,检查差分对走线下方是否有分割线。如果有,调整走线路径或修改平面分割。
晶振布线干扰。晶振是板上的噪声源,如果差分对走线离晶振太近,可能会被干扰。排查方法:检查差分对和晶振的距离,建议至少保持50mil以上的间距。如果空间不够,可以在中间加地线隔离。
电源噪声耦合。如果差分对走在电源平面附近,电源噪声可能会耦合到信号上。排查方法:确保差分对有完整的参考地平面,不要以电源平面作为参考。
连接器引脚定义错误。有些连接器的差分对引脚定义和常规不一样,比如正负反了。排查方法:仔细核对连接器手册,确保差分对的正负引脚连接正确。如果反了,信号也能通,但眼图会变差。
测试点的影响。如果在差分对上加了测试点,测试点的寄生电容会导致阻抗不连续。排查方法:尽量减少测试点,或者用低寄生电容的测试点。如果不需要测试,布完线后把测试点删掉。
6. 差分对设计的进阶技巧与经验总结
6.1 差分对与FPGA布局的配合
FPGA的差分对布局和普通芯片不太一样。FPGA的差分对通常分布在特定的Bank里,每个Bank的引脚延迟可能不同。所以在做FPGA的差分对布线时,需要考虑Bank的布局和引脚延迟。
Bank布局原则:把相关的差分对放在同一个Bank里,这样引脚延迟比较一致,等长匹配更容易。如果差分对必须跨Bank,需要在规则里设置Pin Delay来补偿。
引脚交换:FPGA的差分对引脚通常支持正负交换和Bank内交换。在PADS中,可以通过“引脚交换”功能来优化布线。但要注意,交换后要更新原理图,否则网表会不一致。
电源和地的处理:FPGA的差分对Bank通常有专用的电源和地引脚。布线时要确保这些电源和地引脚正确连接,而且要有足够的去耦电容。
6.2 差分对蛇形布线的艺术
蛇形布线是等长匹配的主要手段,但蛇形布线本身也会影响信号质量。如果蛇形参数设置不当,可能引入新的信号完整性问题。
蛇形幅度:蛇形幅度是指蛇形走线偏离原走线的距离。幅度太小,补偿效果不明显;幅度太大,占空间而且可能耦合到相邻走线。一般建议幅度不小于3倍线宽。
蛇形间距:蛇形间距是指相邻两段蛇形走线之间的距离。间距太小,蛇形段之间会耦合,导致阻抗变化。一般建议间距不小于4倍线宽。
蛇形位置:蛇形段尽量放在走线的末端,靠近接收端。放在中间会影响信号传播,放在源端可能被驱动器的输出阻抗吸收。
蛇形对称性:差分对的两根线都要做蛇形,而且蛇形要对称。如果只有一根线做蛇形,会导致两根线的寄生参数不一致,影响差分信号的对称性。
实操心得:我一般会在PADS Router里先用自动等长调整生成蛇形,然后手动微调。自动生成的蛇形往往幅度和间距不太理想,手动调整一下能明显改善。另外,蛇形段不要放在过孔附近,因为过孔本身就有阻抗不连续,再加上蛇形,问题会更严重。
6.3 从Allegro转PADS的差分对迁移经验
很多公司之前用Allegro,后来因为成本或其他原因转到PADS。Allegro转PADS的时候,差分对信息往往会丢失,需要重新设置。这里分享一些迁移经验。
网表转换:Allegro的网表和PADS的网表格式不同,转换的时候差分对信息可能丢失。建议在Allegro里先把差分对信息导出成文本,然后在PADS里手动重建。
规则转换:Allegro的约束管理器功能比PADS强大得多,很多规则在PADS里没有对应项。转换的时候需要做减法,把最关键的规则保留,其他的用PADS的近似功能替代。
封装转换:Allegro的封装和PADS的封装格式也不同,转换后需要检查焊盘、过孔等参数是否正确。尤其是差分对的封装,要确保引脚间距和Allegro里一致。
布线转换:如果Allegro里已经布好了差分对,转换到PADS后可能需要重新布线。因为两个工具的布线算法不同,转换后的走线可能不符合PADS的规则。建议在PADS里重新布差分对,不要依赖转换结果。
6.4 差分对设计的检查清单
最后,我整理了一份差分对设计的检查清单,每次布完差分对后对照检查一遍,能避免大部分低级错误。
- 差分对是否正确定义,命名是否规范
- 差分阻抗目标值是否与接口规范一致
- 线宽和间距是否根据叠层计算得出
- 差分对是否走在完整的参考平面上
- 参考平面是否有跨分割
- 差分对是否等长,长度差是否在容差内
- 蛇形布线的幅度和间距是否合理
- 过孔设计是否优化,是否成对放置
- 换层次数是否最少,换层位置是否合理
- 差分对是否远离晶振、电源等噪声源
- 测试点是否必要,是否会影响阻抗
- Pin Delay是否设置正确(FPGA设计)
- DRC检查是否通过,是否有未连接的差分对
这份清单看起来简单,但每一条背后都是踩过的坑。我见过太多板子因为忽略了其中一条,导致信号不稳定,最后不得不改板重做。改板的时间成本和金钱成本,远比花十分钟检查一遍清单要高得多。
差分对设计这件事,说到底就是“对称”两个字。两根线要对称,阻抗要对称,回流路径要对称。PADS这个工具虽然在某些方面不如Allegro精细,但只要你理解了它的逻辑,把规则设置对了,它完全能胜任高速差分对的设计。关键是你要知道每一步为什么这么做,而不是机械地照搬教程。希望这篇内容能帮你少走一些弯路,下次遇到高速信号不稳定的问题,能快速定位到差分对设置这个环节。