ARTICLE DETAIL

资讯详情

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

PCIe X4硬件设计实战:从原理图到PCB布局布线及调试要点

PCIe X4硬件设计实战:从原理图到PCB布局布线及调试要点 1. 为什么PCIE X4的电路设计值得单独拎出来讲很多人画PCIE接口第一反应是“不就是几对差分线嘛照着参考设计抄一遍就完了”。我刚开始接触PCIE的时候也是这个心态结果第一版板子打回来链路训练直接卡在Detect阶段连Link Up都上不去。后来用示波器一点点抓波形、翻协议规范、对着Intel的布线指南逐条核对才发现PCIE X4这个接口看着简单实际上从原理图到PCB每一个环节都有它自己的脾气。PCIE X4全称PCI Express x4是PCIe总线的一种通道配置包含4条独立的Lane每条Lane由一对发送差分线TX/TX-和一对接收差分线RX/RX-组成。相比X1X4的聚合带宽在Gen3下能达到约3.94GB/s单向Gen4下翻倍到约7.88GB/s。这个带宽量级意味着它既能带得动NVMe SSD阵列、万兆网卡也能撑得起入门级的数据采集卡和图像采集卡。但带宽越高对信号完整性的要求就越苛刻这也是为什么X4的设计不能简单照搬X1的经验。这篇文章面向的是有一定原理图绘制基础、准备第一次做PCIE X4接口设计的硬件工程师或者之前做过X1、想升级到X4但不确定细节差异的朋友。我会从原理图设计讲到PCB布局布线把时钟、电源、热插拔信号这几个最容易出问题的部分拆开揉碎讲清楚。每一段都尽量说清楚“为什么这么做”而不是只给一个结论。注意本文涉及的PCIE规范细节以PCI Express Base Specification 3.0/4.0为参考具体设计请以你所用主控芯片的Datasheet和硬件设计指南为准。2. 原理图阶段先把信号分类搞清楚再动手2.1 PCIE X4的信号组成与分类逻辑在原理图里画PCIE X4接口第一步不是急着连线而是先把信号分类。我习惯把PCIE X4的信号分成五组高速差分信号组、参考时钟组、电源组、热插拔控制组、辅助信号组。这个分类逻辑很重要因为它直接决定了你后面PCB布局时的分区策略。高速差分信号组就是4条Lane的TX和RX共16根线8对差分。每对差分线的极性不能搞反TX和RX也不能交叉——除非你的主控支持Lane Reversal通道反转否则TX必须接对端的RXTX-接RX-。我见过有人把TX和RX接反了结果链路训练一直失败查了两天才发现是原理图上的低级错误。参考时钟组是PCIE设计里最容易被低估的部分。PCIE X4需要一个100MHz的差分参考时钟REFCLK通常是HCSL电平。这个时钟的来源有两种方案一种是主控芯片自带时钟输出直接从主控引过来另一种是板上单独放一颗时钟发生器芯片。两种方案各有适用场景后面会详细展开。电源组方面PCIE X4插槽通常需要3.3V和12V两路供电具体取决于你的卡是标准PCIe卡还是M.2形态。3.3V主要给接口逻辑和辅助电路供电12V则给高功耗负载供电。每路电源的电流需求要根据你的实际负载来算不能拍脑袋。热插拔控制组包括PRSNT1#/PRSNT2#存在检测、WAKE#唤醒、CLKREQ#时钟请求等信号。这些信号在原理图上看起来不起眼但如果处理不当轻则系统识别不到设备重则热插拔时烧毁接口。辅助信号组包括JTAG、SMBusSMCLK/SMDAT、复位信号PERST#等。这些信号不是高速信号但它们的上拉电阻、串联电阻配置也有讲究。2.2 参考时钟方案选型主控直出还是独立时钟芯片参考时钟的方案选型是原理图阶段第一个需要做决策的地方。我先把两种方案的对比列出来对比项主控直出时钟独立时钟芯片成本低省一颗芯片高多一颗芯片BOM抖动性能取决于主控通常一般可选用低抖动型号性能好布局灵活性受主控引脚位置限制可灵活放置靠近接口时钟扇出能力通常只能带1-2个负载可带多路输出适用场景单卡、短距离、Gen3以下多卡、长距离、Gen4及以上如果你的设计是Gen3及以下、板上只有一路PCIE X4接口、走线距离不超过10cm主控直出时钟通常够用。但如果你要做Gen4、或者板上有多个PCIE设备需要共享时钟、或者走线距离较长建议老老实实上一颗专用的低抖动时钟发生器。这里涉及一个关键参数时钟抖动Jitter。PCIE Gen3对参考时钟的RMS相位抖动要求是小于1ps集成带宽12kHz到20MHzGen4更严格要求小于0.5ps。主控直出的时钟抖动通常在1-2ps量级勉强够Gen3用但Gen4就悬了。独立时钟芯片可以做到0.3ps甚至更低这就是为什么高端设计几乎都走独立时钟方案。选时钟芯片的时候除了抖动指标还要看输出电平类型。PCIE参考时钟要求HCSLHigh-Speed Current Steering Logic电平有些时钟芯片输出的是LVDS或LVPECL需要加电平转换电路。我建议直接选支持HCSL输出的型号省事。2.3 电源树设计与去耦电容配置PCIE X4的电源设计有两个核心问题一是电压转换方案二是去耦电容的配置。电压转换方面如果你的系统只有12V输入需要一颗DC-DC把12V降到3.3V给接口逻辑供电。如果系统本身有3.3V那就直接引过来。但要注意PCIE接口的3.3V供电电流可能不小特别是当你挂的是功耗较高的设备时。我一般会按每Lane 0.5A来估算3.3V的电流需求X4就是2A左右留50%余量就是3A。12V的电流需求取决于你的负载设备如果是NVMe SSD通常不超过2A如果是网卡或采集卡可能要3-5A。去耦电容的配置是很多人容易忽略的地方。PCIE接口的电源引脚旁边必须放足够的高频去耦电容通常每个电源引脚配一颗0.1uF的0402或0201电容再加上几颗1uF和10uF的体电容。这些电容的作用是滤除电源噪声保证高速信号的眼图质量。我见过有人为了省空间只在接口附近放了两颗0.1uF结果眼图闭合得厉害链路只能降到Gen1跑。提示去耦电容的接地回路要尽量短最好直接打到地平面不要走长线再接地。过孔到电容焊盘的距离控制在1mm以内。2.4 热插拔信号的原理图处理细节热插拔信号是PCIE X4原理图设计里最容易被“随便接接”的部分但恰恰是这些信号决定了你的设备能不能被系统正确识别和热插拔。PRSNT1#和PRSNT2#是存在检测信号。在标准PCIe插槽上PRSNT1#在插槽侧接地PRSNT2#在卡侧通过一个电阻接地。当卡插入时两个信号连通系统检测到低电平就知道有卡插入。在原理图上你需要在卡侧给PRSNT2#接一个上拉电阻通常10kΩ到3.3V然后通过一个电阻通常也是10kΩ接地。这个电阻的阻值不能随便改因为它影响的是检测电路的阈值。CLKREQ#是时钟请求信号低电平有效。当设备需要参考时钟时它会拉低CLKREQ#。这个信号需要上拉到3.3V通常用10kΩ。有些主控芯片对CLKREQ#的时序有要求比如必须在PERST#释放之前拉低否则可能不识别设备。具体时序要求要查主控Datasheet。WAKE#是唤醒信号也是低电平有效。当设备需要唤醒系统时它会拉低WAKE#。这个信号同样需要上拉到3.3V。如果你的设备不需要唤醒功能可以不上拉但建议还是留着方便调试。PERST#是复位信号低电平有效。这个信号由主控或系统提供直接接到接口的PERST#引脚。注意PERST#的走线要尽量短避免引入噪声导致误复位。3. PCB布局差分对走线不是“等长就行”3.1 差分对的阻抗控制与层叠设计PCIE X4的差分对要求100Ω差分阻抗±10%这个大家都知道。但实际做的时候很多人只关注线宽和间距忽略了层叠设计对阻抗的影响。差分阻抗的计算涉及线宽W、线间距S、介质厚度H、铜厚T和介电常数Er。以常见的FR-4板材为例Er约为4.2-4.5如果你用0.1mm的介质厚度、1oz铜厚要实现100Ω差分阻抗线宽大概在0.15mm左右间距在0.2mm左右。但这只是粗略估算实际值需要用阻抗计算工具如Polar SI9000或者PCB厂提供的叠层参数来精确计算。我建议在画PCB之前先跟PCB厂确认叠层方案拿到他们推荐的阻抗控制参数。不同厂的工艺能力不同同样的线宽间距阻抗可能差10%以上。如果你自己算了一组参数结果厂里做出来阻抗偏了那就白费功夫了。层叠设计方面PCIE X4的差分对最好走在内层上下都有参考平面。这样有两个好处一是屏蔽效果好减少外部干扰二是阻抗控制更稳定。如果走在表层虽然方便调试但阻抗受绿油和空气影响一致性差而且容易受到外部电磁干扰。3.2 差分对的等长匹配与过孔处理差分对的等长匹配是PCIE布线的基本要求但“等长”不是简单的“两根线一样长”。PCIE Gen3对差分对内偏斜Intra-pair Skew的要求是小于5ps换算成走线长度大约是0.75mm在FR-4中信号传播速度约为15cm/ns。Gen4更严格要求小于3ps约0.45mm。实际布线时由于走线拐弯、过孔等因素两根线的长度很难完全一致。这时候需要在短的那根线上做蛇形补偿Serpentine。蛇形补偿的幅度和间距也有讲究幅度太大会引入额外的寄生电容和电感影响信号质量间距太小会导致线间耦合。我一般用3W原则蛇形间距至少是线宽的3倍来控制。过孔处理是另一个容易出问题的地方。差分对换层时两个过孔要尽量靠近最好对称放置。过孔会引入阻抗不连续产生反射。为了减少反射可以在过孔旁边加接地过孔GND Via提供回流路径。接地过孔到信号过孔的距离控制在1mm以内效果比较好。注意差分对换层时如果参考平面也换了比如从GND换到VCC需要在过孔附近加缝合电容Stitching Capacitor通常0.1uF为回流信号提供低阻抗路径。3.3 参考时钟走线的特殊要求参考时钟走线虽然也是差分对但它的要求和高速数据差分对不太一样。时钟信号对抖动更敏感所以走线要尽量短、尽量直避免过多的过孔和拐弯。100MHz的参考时钟波长在FR-4中大约是1.5m。虽然这个波长相对走线长度来说很长但时钟信号的边沿很陡上升时间可能只有100ps量级所以仍然需要按传输线来处理。时钟差分对的阻抗也要求100Ω对内偏斜要求更严格通常要小于2ps。时钟走线要远离其他高速信号特别是远离DC-DC电源电路。DC-DC的开关噪声会耦合到时钟线上导致时钟抖动增加。我一般会在时钟线两侧包地并且保证包地到时钟线的距离至少3W。如果时钟走线必须跨分割平面那一定要在跨分割处加缝合电容。否则回流路径被切断时钟信号质量会严重恶化。3.4 电源平面与地平面的处理策略PCIE X4的电源平面和地平面处理核心原则是地平面要完整电源平面要干净。地平面完整的意思是地平面不要被其他信号线分割得支离破碎。特别是差分对下方的地平面必须是连续的。如果地平面被分割回流路径就会绕远导致信号质量下降。我见过有人在地平面上开了很多槽结果PCIE链路只能跑Gen1后来把槽填上就好了。电源平面方面3.3V和12V的电源平面要尽量分开避免相互干扰。如果层数不够至少要在电源平面之间加足够的去耦电容。电源平面的边缘要尽量远离板边通常留20mil以上的间距减少边缘辐射。4. 时钟、电源、热插拔信号的联合调试4.1 时钟抖动与频偏的实测方法板子打回来之后第一件事不是急着插设备而是先测时钟。时钟不对后面什么都白搭。测时钟抖动需要一台高带宽示波器至少1GHz以上和一个高质量的差分探头。把探头接到参考时钟的测试点上观察时钟波形。首先要看频率是否准确100MHz的时钟频偏应该在±300ppm以内PCIE规范要求。如果频偏太大可能是时钟芯片的参考晶振有问题或者时钟芯片的配置不对。然后看抖动。示波器上可以直接测RMS抖动但要注意示波器的本底抖动要足够低否则测出来的抖动包含示波器本身的贡献。我一般会用示波器的抖动分析功能设置积分带宽为12kHz到20MHz直接读RMS值。如果测出来大于1ps就要查原因了。常见原因包括时钟芯片供电噪声大、参考晶振质量差、时钟走线受到干扰等。4.2 电源纹波对链路稳定性的影响电源纹波是导致PCIE链路不稳定的常见原因之一。PCIE Gen3对电源纹波的要求是小于50mV峰峰值Gen4更严格要求小于30mV。测电源纹波要用示波器加同轴电缆或者专用的电源纹波探头不能用普通的无源探头因为无源探头会引入很大的噪声。测量点要尽量靠近PCIE接口的电源引脚。如果纹波超标首先要查DC-DC的开关频率和输出电容配置。开关频率太低比如低于500kHz输出纹波会比较大。可以适当提高开关频率或者增加输出电容。另外DC-DC的布局也很重要输入电容要尽量靠近芯片的VIN引脚输出电容要尽量靠近电感。4.3 热插拔信号的时序验证与常见问题热插拔信号的时序验证最直接的方法是用示波器同时抓PRSNT#、CLKREQ#、PERST#和电源的波形看时序是否符合规范。PCIE规范对热插拔时序的要求是当设备插入时PRSNT#先变低然后电源稳定然后CLKREQ#变低最后PERST#释放变高。如果时序不对比如PERST#释放太早设备可能还没准备好就被复位了导致识别失败。我遇到过一个案例设备插入后系统偶尔能识别偶尔识别不到。后来抓波形发现CLKREQ#的上拉电阻太大用了100kΩ导致CLKREQ#的上升沿太慢主控在采样时还没到高电平误判为设备不需要时钟。把上拉电阻换成10kΩ就好了。另一个常见问题是PRSNT#的检测电阻阻值不对。有些设计为了省事直接用0Ω电阻结果检测电路无法正确判断设备是否存在。PRSNT#的检测电阻通常要求10kΩ左右具体值要查主控Datasheet。5. 从原理图到PCB的完整检查清单5.1 原理图检查要点原理图画完之后不要急着导PCB先做一遍自查。我整理了一份检查清单每次做完PCIE设计都会过一遍差分对的TX/RX极性是否正确有没有接反参考时钟的来源和电平类型是否匹配电源引脚的电压和电流是否满足要求去耦电容的数量和位置是否合理PRSNT#、CLKREQ#、WAKE#的上拉电阻是否配置PERST#的走线是否从主控直接过来有没有经过其他逻辑SMBus信号的上拉电阻是否配置JTAG信号是否需要引出测试点这份清单看起来简单但每一条都对应着实际项目中踩过的坑。比如TX/RX接反我见过不止一次CLKREQ#忘记上拉也遇到过。5.2 PCB检查要点PCB画完之后同样需要自查。重点检查以下几个方面差分对的阻抗是否控制在100Ω±10%差分对的内偏斜是否小于5psGen3或3psGen4差分对之间的间距是否满足3W原则参考时钟走线是否远离DC-DC和高速信号地平面是否完整有没有被分割电源平面的去耦电容是否靠近引脚过孔是否加了接地过孔测试点是否预留时钟、电源、差分对提示建议在PCB上预留PCIE差分对的测试点方便调试时抓波形。测试点要尽量小避免引入额外的寄生参数。5.3 调试阶段的常见问题与排查思路调试阶段最常见的问题就是链路训练失败。排查思路可以按以下顺序进行先测参考时钟频率对不对抖动大不大电平类型对不对再测电源电压对不对纹波大不大然后测PERST#复位时序对不对最后测差分对有没有信号眼图怎么样如果参考时钟和电源都正常但链路还是训练失败那就要查差分对了。用示波器抓TX和RX的波形看有没有信号输出。如果没有信号可能是主控的PCIE控制器没有使能或者Lane映射配置不对。如果有信号但眼图很差那就要查走线阻抗、过孔、连接器焊接等问题。我遇到过一个比较隐蔽的问题PCIE连接器的某个引脚虚焊导致一对差分线中的一根接触不良。这种问题用万用表测通断不一定能发现因为虚焊在静态下可能是通的但高速信号下阻抗不连续。后来用X光检查才发现是焊接问题。6. 几个容易被忽略的实战细节6.1 连接器选型与焊接工艺PCIE X4的连接器有标准插槽式和M.2两种形态。标准插槽式连接器的焊接比较考验工艺特别是引脚间距小容易连锡。我建议在PCB上做钢网时连接器引脚的开口要适当缩小减少锡量。回流焊的温度曲线也要根据连接器的规格来调整避免过热导致塑料本体变形。M.2连接器相对好焊一些但要注意M.2的Key位防呆口位置。不同的Key位对应不同的接口协议PCIE X4通常用M Key。买连接器的时候一定要确认Key位和你的设计匹配。6.2 测试点的预留与使用测试点的预留是调试阶段的关键。我一般会在PCIE差分对上预留测试点但测试点不能随便加因为测试点会引入寄生电容影响信号质量。测试点的焊盘要尽量小比如0.3mm直径并且要放在差分对的末端不要放在中间。参考时钟的测试点也要预留最好放在时钟芯片的输出端和接口的输入端各一个方便对比。电源的测试点可以放在接口附近用示波器测纹波。6.3 散热与结构配合PCIE X4设备如果功耗较大散热是个问题。特别是NVMe SSD满速读写时功耗可能达到5-8W如果不加散热片温度会很高。在PCB设计时要考虑散热片的安装空间以及散热片和周围元件的间隙。结构配合方面PCIE卡的高度和长度要符合规范否则插不进机箱。标准PCIe卡的高度是111.15mm全高或68.9mm半高长度有几种标准规格。如果你的卡是自定义尺寸要确认机箱能不能装得下。7. 写在最后的一些个人体会PCIE X4的设计说难不难说简单也不简单。核心就是把信号分类搞清楚把时钟、电源、热插拔这几个关键部分处理好剩下的就是按规范走线。但实际做的时候往往是一些细节决定成败。我自己的经验是每次做PCIE设计都要把主控的硬件设计指南翻出来看一遍特别是Layout Checklist部分。不同主控对PCIE的布线要求可能有差异比如有些主控要求差分对的走线长度不超过多少有些主控对过孔数量有限制。这些细节不看指南是不知道的。另外调试阶段一定要有耐心。链路训练失败的原因可能有很多种从时钟到电源到走线到焊接每一个环节都可能出问题。按顺序排查用示波器抓波形一步步缩小范围总能找到原因。最后分享一个小技巧如果你手头有现成的PCIE X4设备比如一块NVMe SSD转接卡可以先拿它来验证你的板子。如果现成设备能正常工作说明你的板子基本没问题问题可能出在你自己的设备上如果现成设备也不行那就要查板子了。这个方法可以快速定位问题范围。
返回列表