ARTICLE DETAIL

资讯详情

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

差分信号与时钟同步:高速PCB设计从原理到工程实践全解析

差分信号与时钟同步:高速PCB设计从原理到工程实践全解析 1. 从差分布线到信号完整性先搞懂为什么搞硬件这些年我经手过不少高速板子从最初的DDR3、千兆网口到后来的MIPI屏、USB 3.0再到工业上常见的LVDS、Camera Link可以说只要信号速率一上去差分信号和时钟同步这两件事就绕不开。很多人一看到“高速PCB”就头大觉得那是射频工程师的活其实没那么玄乎。只要你能把差分信号的原理吃透把时钟同步的链路捋清绝大多数板子你都能自己搞定。简单说差分信号就是一对极性相反、幅度相等、一起向前传输的信号线接收端看的是两根线之间的电压差。相比单端信号靠“线对地”的电平来判断0和1差分信号天然有更强的抗干扰能力也更不容易对外辐射。而时钟同步则是让板子上所有关键器件的工作节拍对齐到同一个参考源上防止数据采错、通信错位。这两者一旦处理不好轻则偶发误码重则整板功能瘫痪。这篇文章我打算从原理讲到实操再结合我最近做的一块带多路ADC采集、FPGA处理、LVDS输出的板子把差分信号布线和时钟同步优化的完整过程拆开来讲。无论你是刚入行的硬件工程师还是被信号完整性折腾过的老手这篇内容应该都能给你一些参考。聊聊热搜词里那个特别典型的问题MCU没有USB差分信号数据引脚怎么办。这个问题看似简单但确实很多人卡在这。答案我先放这USB的D和D-本身就是差分信号引脚绝大多数MCU只要带了USB外设它必然有这两根专用引脚不需要额外去“找”差分引脚。你真正要确认的是这颗MCU的USB是Device、Host还是OTG以及它是否内置了PHY芯片。如果一颗MCU根本没有USB外设资源那才需要外接一颗USB转UART桥接芯片或者一颗独立的USB控制器带PHY的那种让它帮你把差分信号收编了。2. 差分信号的核心逻辑与工程设计要点2.1 差分信号的本质从“电压参考”到“电位差”我们先回到最基本的物理层面。单端信号是“一根信号线对地”的电平变化接收端拿这根线的电压和地上的参考电平比。问题在于如果地平面有波动——比如大电流器件瞬间抽流导致地弹——接收端的参考点就跟着抖信号就容易误判。高速下这种情况尤其致命。差分信号则完全换了一种思路。两根线比如叫A和A-发送端让A走高、A-走低下一时刻反过来接收端检测的是A减去A-的差值。因为地平面的噪声会同时耦合到这两根线上一减就抵消掉了这就是所谓共模抑制。所以你看到的所有高速接口——USB、PCIe、HDMI、LVDS、RS485——几乎全是差分架构不是没有道理的。具体到PCB设计上差分信号还需要保证两根线的长度尽量一致否则就会出现相位差。比如两条线差了0.5英寸在1Gbps速率下一个UI单位间隔可能只有1ns而信号在FR4板材上的传播速度大概是每英寸167ps左右0.5英寸就是83ps的偏差相当于吃掉接近10%的时序裕量。这在高速下是绝对不可接受的。2.2 差分阻抗控制100欧姆是怎么定下来的差分信号需要做阻抗控制这是所有教科书都会强调的。常见的单端阻抗是50欧姆而差分阻抗通常做100欧姆USB是90欧姆HDMI是100欧姆LVDS也是100欧姆。这个值不是拍脑袋定的而是和传输线的特性、接收端输入阻抗、以及历史标准一起演化出来的。设计时你要把目标值报给板厂板厂会结合你的叠层结构、线宽线距来算。这里有个容易被忽略的点差分阻抗并不仅仅是“两根线各自的阻抗串联”而是和两根线之间的耦合程度密切相关。也就是线距edge-to-edge spacing和线宽共同决定了差分阻抗。通常我们说的“差分对”在设计上要么选耦合走线线距很小的紧耦合要么选松耦合线距拉开各自独立像单端线。在实际工程中我更倾向于适中的紧耦合因为这样对外部噪声的免疫更好但对加工精度要求也更高。板厂的阻抗控制能力一般在±10%以内你要留够裕量。假设你想做100欧姆阻抗叠层是常规的四层板1.6mm厚度表层走线参考平面是第二层地。通常你把线宽做到5mil、线距做到5mil查一下板厂的阻抗计算表一般能落在95到105欧姆之间。但如果你把线距拉到15mil以上那么两根线基本就是独立传输耦合很弱差分阻抗会接近两根50欧姆单端线的串联也就是接近100欧姆附近但此时抗干扰能力会弱不少。所以不要盲目拉大线距。2.3 差分对的布线规则等长、间距、换层布线时候的辛酸我太懂了。差分对布线有三条铁律任何一条破了都会出问题。第一条是等长。长度差直接造成相位偏移进而把差分信号转成共模噪声。在PCB布线时我一般对USB 2.0要求等长控制在5mil以内LVDS等高速信号控制在20-30mil以内这本质上取决于信号的上升沿时间。上升沿越陡等长要求越严。常见做法是在差分对末端做蛇形绕线补偿注意蛇形绕线的间距要保持在线距的3倍以上否则绕线自身产生的耦合会抵消掉补偿效果。第二条是间距。差分对的两根线要尽量平行、贴近间距在整个走线路径上保持一致不要忽宽忽窄。如果线距变了阻抗就会突变产生反射。另外差分对与相邻信号线之间要保持足够距离一般至少是5倍线宽如果能做到3W原则以上最好否则旁边信号的串扰会耦合到差分对上。第三条是换层。差分对需要换到另一层时过孔附近往往会出现阻抗不连续点。这时候你要注意把两个过孔尽量对称放置并且在换层位置附近添加回流地过孔。我见过不少板子差分线走得好好的结果在过孔那一段出现了一个明显的阻抗尖峰眼图直接塌了后来加了两个地过孔瞬间解决。这个是经验之谈。3. 时钟同步的工程实践从晶振到系统节拍3.1 时钟同步同步的是什么时钟同步这件事说起来容易做起来难。板子上的时钟源通常来自晶振或者有源振荡器但一颗晶振的输出不只是频率问题还有相位噪声、抖动、上升沿单调性。而时钟同步本质上是两件事一是频率一致二是相位对齐。频率一致靠锁相环PLL比如FPGA内部的MMCM/PLL或者专用的时钟芯片。PLL会把输入参考时钟的相位和本地压控振荡器的相位做比较用反馈环路把输出频率锁定到输入频率的N倍或M分之一。相位对齐则是要保证数据和时钟之间满足建立时间、保持时间的要求说白了就是数据不能在时钟眼图的边缘被采到。我遇到过一个典型的项目两块板卡之间用LVDS传输数据接收端老是偶尔出现错字。查来查去最终发现是发送端的时钟和数据之间相位裕量不足。数据信号的走线长度比时钟信号长了不少导致数据在采样沿附近跳变。解决办法很简单把时钟线走成蛇形加长让数据到接收端的时间提前半个数据周期。这种问题在没有示波器眼图模式的时候非常难定位因为现象是偶发性的跑一天可能才错一次。3.2 线扫相机、RS485和差分时钟工业场景里的“隐藏热词”网上有人搜“线扫相机差分信号是什么”还有人搜“根据RS485差分信号解析数据”这些其实都是差分信号与时钟同步在实际工业场景里的延伸。线扫相机的接口最常见的是Camera Link它的数据线、时钟线全部是LVDS差分信号。Camera Link协议里有一个专门的像素时钟由相机输出给采集卡用来同步数据的采样。这个像素时钟就是差分形式对布线和接收端的时钟恢复要求很高。如果PCB上LVDS走线不等长像素时钟和数据之间的相位关系就乱了图像就会出现竖条纹、闪纹。RS485则是最经典的差分总线它传输的是异步数据本身不含时钟信号接收端需要靠双方的波特率约定来采样。RS485的A、B两根线之间的差分电压决定了逻辑1还是0。如果你想用MCU的UART去解析RS485数据最便捷的方式是通过MAX3485这类收发器芯片把差分信号转换成单端UART电平。不要想着拿MCU的普通GPIO直接去判断A、B线之间的瞬时压差——电平域完全不同而且没有过压保护。时钟同步在工业场景里还有一个容易踩坑的点线扫相机会给采集卡输出一个“行触发”或者“外同步”信号这个信号通常也是差分形式。如果你的采集系统需要对多台相机做硬同步就需要额外的同步信号发生器把触发信号同时送给所有相机并且保证它们到达各台相机的时序偏差在几十纳秒以内。这种情况下PCB布线的等长就非常关键有时候甚至要用蛇形绕线来对齐各路同步时钟。3.3 板级时钟树的PCB处理手法在设计PCB时时钟树的处理有几个实战要点。时钟晶振的布局要尽量靠近使用它的主芯片并且周围要留出足够的包地空间。晶振下面不要走其他信号线否则晶振输出容易干扰别人别人也容易干扰晶振。时钟芯片的电源引脚要单独滤波通常是一颗磁珠加多颗不同容值的去耦电容从高频到低频铺满。我一般会用1nF、10nF、100nF加10uF的组合覆盖从几十MHz到GHz的噪声频段。时钟走线尽量走内层因为内层有完整的参考平面阻抗可控也不容易受到表层电磁干扰。如果必须走表层那就一定要做包地处理在时钟线两侧加地线并且每隔一段距离打地孔形成一圈屏蔽。还有一点很关键时钟信号的串接电阻。很多人做设计的时候照抄参考设计看到原理图里时钟信号线上串了个33欧姆或者22欧姆电阻觉得可有可无。实际上这个电阻是用来阻抗匹配的它能够吸收反射、抑制振铃。如果你把它去掉轻则时钟沿变差导致误码率上升重则信号过冲把芯片的输入引脚打坏。所以量产板子上这种电阻不要随便按0欧姆处理。4. 实战复盘一块多路ADC板的高速差分与时钟优化全过程4.1 项目背景与设计约束来聊聊我最近做的一块板子这是一块8通道16位ADC数据采集板ADC输出的数据通过FPGA做预处理再通过LVDS接口传给上一级处理板。板子要求采集精度高尤其是模拟信号通道的信噪比要达标同时LVDS输出的误码率要低于10的负15次方。设计约束有几个板卡尺寸是标准3U板层数定为6层板材是生益S1000-2M常规的FR4增强型介电常数约4.2损耗角正切0.017左右。工作温度范围要从-40到85℃。主时钟是100MHz的LVCMOS晶振经过FPGA内部PLL产生ADC所需的采样时钟以及LVDS输出的像素时钟。这块板子最有代表性的地方在于它有典型的模拟-数字混合信号处理又有多路LVDS高速输出还牵扯到采样时钟的产生和分发几乎把差分信号和时钟同步的所有问题都覆盖了。4.2 叠层与阻抗设计6层板的常用叠层是L1信号、L2地、L3电源、L4信号、L5地、L6信号或者L1信号、L2地、L3信号、L4电源、L5地、L6信号。考虑到板子上既有高速信号又有敏感的模拟信号我选择的是L1模拟与关键高速信号L2完整地平面L3走电源与部分低速信号L4走LVDS差分对L5完整地平面L6走剩下的低速控制和电源。这样安排的好处是L1和L4都紧挨着完整的地平面高速信号的回流路径最短阻抗也最容易控制。模拟部分和数字部分在L1上用分割岛隔离但地平面不分割保持完整。这一点非常重要——很多人喜欢把模拟地和数字地物理分割开但如果你有ADC这种跨域器件地平面一割跨槽信号的回流路径就断了问题比不分割还严重。阻抗目标LVDS差分对100欧姆阻抗L4层的差分线线宽5mil线距7mil。FSD层厚和介质厚度上报给板厂后板厂反馈计算结果是97到103欧姆之间满足要求。4.3 差分对布线的现场记录布LVDS差分对时我给自己定了几个规矩。一是等长控制在10mil以内因为LVDS的信号速率是700Mbps级别一个UI大约是1.4ns10mil的偏差大约只有1.7ps对时序的影响微乎其微但为了保险起见还是尽量收紧。二是所有差分对外侧要留2倍线宽以上的隔离带旁边不走其他高速单端线。如果实在空间不够那就把相邻层的地平面保持完整防止层间串扰。三是换层位置的处理。板子上一共有8对LVDS差分线其中有3对不得不从L1换到L4层。我在每个换层过孔旁边加了一对地过孔间距大概30到40mil。加完地过孔后用TDR实测换层位置的阻抗突变幅度从原来的约15欧姆尖峰降到了5欧姆以内效果非常明显。我画差分线的时候还养成了一个习惯先从接收端往发送端走沿着最优路径把差分对“铺”到位然后再处理蛇形等长补偿而不是边走边绕。这样出来的差分线路径清晰绕线也不容易乱。4.4 时钟树设计与同步实现时钟方案上我用的是一颗100MHz的LVCMOS有源晶振输出送给FPGA的时钟输入引脚。在FPGA内部用MMCM混合模式时钟管理器将100MHz倍频到200MHz作为ADC的采样时钟同时分频出35MHz的LVDS像素时钟以及后续处理逻辑用的系统时钟。这里有一个常见的坑ADC采样时钟的抖动直接决定了模数转换的信噪比。尤其是对于一个16位ADC采样时钟的抖动哪怕增加几十飞秒都会对信噪比产生显著影响。按公式算对于20MHz的输入信号16位ADC对采样时钟抖动的理论上限大约是10psRMS超过这个值位数就保不住了。所以板级处理时我把FPGA产生的采样时钟引到ADC的时钟输入脚走线尽量短并且加了一个33欧姆的串阻做匹配。同时ADC的时钟输入引脚旁边放了一颗0.1uF和一颗1nF的旁路电容滤除高频噪声。另外我在原理图上特意把ADC的时钟引脚和数字数据引脚之间加了地孔隔离带防止LVDS数据回路窜扰到采样时钟上。但实际测下来发现ADC输出数据的信噪比还是差了一点点大概比规格书低1.5dB左右。排查后发现问题出在FPGA的MMCM输出抖动偏大解决方案是改用了FPGA的专用时钟输出引脚而不是普通IO口。FPGA芯片通常有专门的时钟输出引脚它们拥有独立的驱动能力和更低的输出抖动换成专用引脚后SNR终于和规格书标称值对上了。4.5 测试验证与问题记录板子贴出来之后我先做常规的上电测试然后重点测了三项指标。第一项是LVDS差分信号的眼图。用示波器接差分探头观测像素时钟通道的眼图。实测张开度大约85%抖动大约80ps峰峰值比协议要求的至少70%张开度要好不少。为了探一下裕量我做了温度循环测试从-40℃到85℃眼图张开度最低掉到82%仍在可接受范围。这个结果说明差分阻抗控制、等长设计和过孔处理都到位了。第二项是采样时钟的频谱。用频谱仪近场探头靠近ADC时钟引脚附件测量发现100MHz处有一个干净的峰周围的杂散非常少。这个结果也验证了包地和滤波措施是有效的。第三项是整板误码率测试。用FPGA内部产生伪随机序列通过LVDS接口发出去在对端用一块相同的板子接收回环对比。连续跑48小时误码为零。当然过程中也踩了不少坑下面我把常见问题按经验整理成一张速查表方便你以后排查。5. 常见问题排查与避坑指南5.1 高速差分信号调试的核心步骤与工具当一块板子出现信号完整性问题时第一步不是去乱改设计而是先定位问题发生在哪个环节。我常用的排查顺序是先测电源的纹波再测时钟的频谱然后用示波器看差分信号的眼图最后用TDR测阻抗。如果电源纹波很大后面的测试都没有意义因为所有信号的参考都会受影响。眼图是比较直观的测试手段。如果眼图闭合先看是不是差分对等长出了问题把示波器的数学功能打开叠加显示A和A-的波形看它们的交叉点是否在电压中心位置。如果交叉点偏了说明存在共模偏置通常是驱动芯片的共模电压设置不对或者是差分对有不平衡的负载。TDR测试能直接看到阻抗突变点在哪里。板厂出厂报告只能说明加工均匀性但你自己布线时的破损、参考平面开槽、过孔stub这些是板厂报告体现不出来的。我用TDR实测的时候经常能发现换层过孔处的阻抗尖峰顺着这个尖峰去改设计比盲目绕线有效得多。5.2 常见问题速查表现象可能原因排查与处理眼图张开度差、交叉点不在中心差分对等长偏差过大、驱动芯片共模电压异常检查等长绕线刷新驱动芯片寄存器配置偶发误码低温更严重采样时钟抖动偏大、时序裕量不足检查时钟源相噪更换低抖动时钟芯片或改用专用时钟引脚特定通道持续误码差分对过孔stub过长、参考平面被破坏TDR定位阻抗突变点修改过孔背钻或调整走线换层差分信号辐射超标回流地不完整、差分对间距变化补回流地过孔保证参考平面完整检查过孔布局时钟同步失败、失锁PLL参考时钟不干净、同步芯片配置错测参考时钟频谱、检查反馈路径、核对锁存寄存器5.3 针对热搜问题逐一解答“线扫相机差分信号是什么”——线扫相机常用的接口有Camera Link和LVDS两种其中Camera Link完全基于LVDS差分信号数据线时钟线可能有几十对所以连接器和线缆都是专用的。像素时钟和数据是一起通过差分线传输的硬件上必须保证这对差分线到达采集卡时的相位对齐否则图像有竖条纹。“clocksync怎么设置时钟同步”——如果是ADI等公司的时钟同步芯片一般通过SPI/I2C接口配置输出频率、分频比、相位偏移和同步使能位。多数时钟芯片支持参考时钟失锁检测配置完建议读一下lock状态寄存器确认PLL锁定后再让下游器件上电工作。在PCB上所有受同步控制的器件它们的同步请求引脚要尽量等长布线保证各器件的相位对齐基准一致。“根据RS485差分信号解析数据”——RS485在硬件上通过收发器比如MAX3485把A、B差分电平转成UART的TTL电平然后接MCU的UART RX脚。要“解析数据”你只需要按双方的波特率、数据位、校验位、停止位配置UART收到的是完整的字节流。真正容易出错的是收发控制和终端电阻匹配。如果总线上挂了多台设备需要在物理层做地址帧区分这属于协议层的活和差分信号本身关系不大。“MCU没有USB差分信号数据引脚怎么办”——这个问题我再补充一种情况有些MCU是USB Device模式D和D-是专用的但如果你想做一个支持OTG的产品而MCU只支持Device那就需要外部加一颗USB OTG PHY芯片或者干脆换MCU。但如果是MCU根本没USB外设那就只能外接USB转串口芯片如CH340、CP2102或者一颗带USB接口的单片机做桥接。总之差分信号引脚是物理层面的事决定有没有的是芯片内部是否集成USB控制器/PHY而不是你“找”不找得到引脚。5.4 避坑指南补充最后再唠几句踩坑心得。一是关于蛇形绕线的间距。我在等长补偿时反复叮嘱自己绕线的间距必须至少是线距的3倍以上最好能到5倍。绕得太近差分对内部的耦合会发生变化等于你补偿了长度却改变了阻抗和耦合系数得不偿失。二是关于地平面分割。如果在高速区域把地平面开了一个长槽那么任何跨越这个槽的信号线都会形成一个巨大的电流环产生强烈的共模辐射。这种板上问题用近场探头一压就能测出来。遇到这种情况唯一的办法是改变布线路径或者用金属化过孔在槽两侧做缝合。三是关于旁路电容的选型。高速差分芯片电源脚的旁路电容不是越大越好。大容量的电容本身有较高的等效串联电感高频下不但不滤波反而可能和电源寄生电感发生谐振。实际做法是多颗小容值电容并联从1nF到10uF铺开覆盖不同频段。四是关于回流地过孔的数量。有人觉得地孔越多越好其实不是。地孔太密会把地平面打得千疮百孔破坏参考平面的连续性。一般做法是换层过孔旁边对称放两颗地过孔距离在30到50mil之间形成局部回流路径就足够了。这几年我调试高速板最大的体会是非标设计和“想当然”几乎占据了所有返工原因。你严格按照差分规则走线认真做时钟树的滤波与匹配板子大概率不出问题但凡有一点侥幸心理比如“这里就一根线不绕了”“这个电容应该没关系”后面调试的时候就等着熬夜吧。所以如果你是新手最值得做的不是学一堆高级阻抗计算工具而是把差分走线的等长、间距、参考平面、换层这四件事刻在脑子里然后把时钟树的电源和回路弄干净。做到这两点高速板这块的基本盘你就稳住了。
返回列表