ARTICLE DETAIL

资讯详情

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

PEX88096参考设计实战:PCIe 4.0交换芯片硬件设计要点与调试避坑指南

PEX88096参考设计实战:PCIe 4.0交换芯片硬件设计要点与调试避坑指南 1. 从一颗芯片到一块板子PEX88096参考设计到底在解决什么问题如果你正在看PEX88096这颗芯片大概率你面对的场景是这样的手头有一堆PCIe 4.0的端点设备——可能是NVMe盘阵、GPU加速卡、或者25G/100G网卡——需要把它们全部挂到一台主机下面而且要求低延迟、高带宽、还不能丢包。CPU自带的PCIe lane不够用或者拓扑太扁平没法灵活分配这时候就需要一颗PCIe Switch芯片来当交通枢纽。PEX88096是博通BroadcomPEX88000系列里的一款96-lane、PCIe 4.0的交换芯片。96条lane意味着什么你可以拆成24个x4端口或者12个x8或者6个x16甚至混搭。单lane速率16 GT/s理论双向带宽接近32 GB/s per lane的聚合能力。这个量级放在存储服务器、AI训练节点、或者多卡推理平台上基本就是想怎么连就怎么连的级别。但问题来了芯片本身只是一块硅片它不会自己工作。你需要一块PCB上面有电源、时钟、复位、配置EEPROM、散热、连接器、以及最重要的——正确的走线和阻抗控制。这就是硬件参考设计存在的意义。博通官方会给一份参考设计文档和原理图但那份东西通常是给大客户看的细节多、假设多、而且不会告诉你为什么这里要放这个电容或者为什么这个电阻不能省。我写这篇东西的目的很直接把PEX88096参考设计里那些真正影响你板子能不能跑起来、能不能稳定跑PCIe 4.0速率的点一个一个拆开讲清楚。不是照抄官方文档而是从实际画板、打样、调试的角度告诉你哪些地方容易翻车、哪些参数必须算、哪些看起来可选的东西其实不能省。适合谁看硬件工程师、SI工程师、系统架构师以及那些正在评估要不要用PEX88096做板子的人。如果你只是写驱动的也可以看看至少能理解为什么有时候链路训练会失败、为什么某些slot的带宽上不去。2. PEX88096的端口拆分逻辑与参考设计里的拓扑假设2.1 96 lane不是随便分——Station架构决定了你的拓扑上限PEX88096内部不是简单的crossbar。它采用的是Station架构每个Station包含若干laneStation之间有内部总线互联。具体来说PEX88096有多个Station每个Station可以配置成不同的端口宽度。你在参考设计里看到的端口分配表其实就是把物理lane映射到逻辑端口的过程。这里有个关键点不是所有lane都能任意组合成x16。有些lane组只能做x4或者x8因为它们的SerDes通道和Station的绑定关系是固定的。官方参考设计通常会给出几种推荐配置比如24个x4、12个x8、6个x16或者4个x16 8个x4之类的组合。你如果自己乱分可能会出现某个端口死活训练不到Gen4或者带宽只有预期的一半。我的建议是先确定你的端点设备需要什么宽度然后去查PEX88096的datasheet里那张Port Configuration表看看哪些组合是官方验证过的。不要自己发明拓扑。参考设计里的默认配置通常是最通用的那个但不一定是最适合你的。2.2 上行端口和下行端口参考设计里的Host Side和Endpoint SidePEX88096是一个非透明桥还是透明桥这取决于你的用法。在大多数参考设计里它被配置成透明交换Transparent Switch也就是说Host看到的是一个大的PCIe域下面挂了一堆设备。上行端口Upstream Port连到Host的Root Complex下行端口Downstream Port连到各个端点。参考设计里通常会把上行端口固定成x16或者x8因为Host侧的lane数有限。下行端口则根据你的背板或者线缆方案来定。这里有个坑上行端口的宽度不能小于下行端口的总和否则会出现带宽瓶颈。比如你有6个x16的下行端口上行只有x8那所有设备共享x8的带宽性能直接崩。另外参考设计里会标注哪些端口支持热插拔Hot-Plug。如果你要做NVMe热插拔背板必须用支持Hot-Plug的端口并且要在PCB上做相应的PRSNT#信号和电源控制。不是所有下行端口都默认支持这个功能需要看参考设计里的Port Capability表。2.3 参考设计里的默认配置是怎么来的博通的参考设计通常基于一个典型应用场景比如存储服务器上行x16下行24个x4接NVMe盘。这个配置之所以成为默认是因为它覆盖了大多数客户的需求而且lane分配比较均衡。但如果你做的是AI训练平台可能需要上行x16下行4个x16接GPU再加几个x8接网卡。这时候你就不能直接用默认配置了得改EEPROM里的配置数据。参考设计里会有一个Configuration EEPROM的章节告诉你哪些地址对应哪些端口设置。这部分我后面会详细讲。3. 电源树设计PEX88096不是接个3.3V就能跑的芯片3.1 核心电压、SerDes电压和IO电压三组电源缺一不可PEX88096的电源需求比一般PCIe设备复杂得多。它至少需要以下几组电源VDD_CORE核心逻辑电压通常是0.9V或1.0V具体看datasheet。电流可能达到几十安培取决于你的端口配置和负载。VDD_SERDESSerDes模拟电压通常是1.2V或1.8V对噪声极其敏感。VDD_IOIO电压通常是1.8V或3.3V用于配置引脚和低速接口。VDD_AUX辅助电压用于管理接口和热插拔逻辑。参考设计里会给出每一路电源的电流预算和去耦方案。这里最容易翻车的是VDD_SERDES如果你用普通的DC-DC给它供电开关噪声会直接耦合到SerDes输出上导致眼图闭合、误码率飙升。参考设计通常会建议用LDO给SerDes供电或者至少用两级滤波。3.2 去耦电容不是越多越好而是要放对位置参考设计的PCB布局里去耦电容的摆放位置比数量更重要。PEX88096的BGA下面通常会有大量的0402或0201电容这些电容必须尽量靠近芯片的电源球。如果放远了寄生电感会让电容在高频下失效。我的经验是对于VDD_CORE每对电源球至少配一个0.1uF的0402电容再加几个大容量的钽电容或聚合物电容做低频储能。对于VDD_SERDES除了0.1uF还要加0.01uF和1nF的小电容专门滤高频噪声。参考设计里会给出一个电容布局图照着放就行但要注意你的PCB层叠是否允许在BGA下面放这么多电容。3.3 上电时序为什么你的板子有时候起不来PEX88096对上电时序有要求。通常VDD_CORE要先于VDD_SERDES和VDD_IO上电或者至少同时上电。如果VDD_SERDES先上电可能会导致内部ESD保护二极管导通产生大电流甚至损坏芯片。参考设计里会有一个Power-Up Sequence的时序图告诉你每路电源之间的延迟要求。通常是用电源管理ICPMIC或者CPLD来控制。如果你自己用分立DC-DC做一定要加使能信号和延时电路。我见过有人因为省了时序控制结果板子十次上电有三次起不来查了半天才发现是SerDes电源先到了。4. 时钟与复位参考设计里最容易被简化掉的部分4.1 参考时钟100MHz差分不是随便找个晶振就行PEX88096需要一个100MHz的差分参考时钟REFCLK。这个时钟的抖动要求非常严格PCIe 4.0对REFCLK的RMS抖动要求通常在1ps以下具体看规范。如果你用一个普通的晶振加差分缓冲器很可能抖动超标导致链路训练不稳定。参考设计里通常会推荐用专用的PCIe时钟发生器比如IDT或Silicon Labs的时钟芯片。这些芯片内置了低抖动的PLL和差分输出能保证REFCLK的质量。另外REFCLK的走线必须做100欧姆差分阻抗控制长度尽量短远离高速信号和电源。4.2 复位信号PERST#不是拉低再拉高那么简单PERST#是PCIe的标准复位信号。参考设计里会告诉你PERST#必须在电源稳定之后至少保持100ms的低电平然后再释放。这个时间是为了让芯片内部的PLL锁定、配置EEPROM加载完成。但实际调试中我发现很多人忽略了PERST#的去抖和滤波。如果PERST#上有毛刺芯片可能会误复位。参考设计里通常会在PERST#上放一个RC滤波比如10k上拉加100nF到地。另外PERST#的驱动源也很重要如果是从Host侧过来的要确保电平匹配如果是本地产生的要用开漏输出加外部上拉。4.3 配置EEPROM没有它芯片就是一块砖PEX88096上电后会自动从EEPROM加载配置数据。如果EEPROM是空的或者数据不对芯片会使用默认配置但默认配置可能不是你想要的端口分配。参考设计里会给出EEPROM的型号建议通常是24C系列或兼容的SPI EEPROM和烧录方法。这里有个大坑EEPROM的I2C地址和速度必须匹配。有些EEPROM默认地址是0x50但PEX88096可能期望0x51或者别的。参考设计里会写清楚。另外EEPROM的写保护引脚WP一定要处理好否则配置数据可能被意外修改。5. PCB走线PCIe 4.0的16 GT/s不是随便连就能跑的5.1 差分阻抗与插入损耗你的板材选对了吗PCIe 4.0的16 GT/s信号在PCB上的衰减非常快。如果你用普通的FR4板材走线长度超过8英寸插入损耗可能就超过规范允许的预算了。参考设计里通常会建议用低损耗板材比如Megtron 6或类似等级或者至少用FR4但严格控制走线长度。差分阻抗必须控制在85欧姆±10%。这个不是差不多就行因为阻抗不匹配会导致反射直接恶化眼图。参考设计里会给出叠层建议和走线宽度/间距。如果你自己改叠层一定要重新计算阻抗。5.2 过孔设计背钻不是可选项PCIe 4.0的过孔残桩stub效应非常明显。如果一个过孔从顶层到底层残桩长度超过30mil就会在16 GT/s下产生严重的谐振。参考设计里通常会要求对过孔进行背钻Back-drill把残桩控制在10mil以内。背钻会增加成本但如果你要做稳定的PCIe 4.0链路这是必须的。我见过有人为了省钱不做背钻结果链路只能跑到Gen3Gen4死活训练不上来。后来做了背钻问题直接消失。5.3 走线长度匹配不是等长就行还要看相位PCIe的差分对内部两条线需要等长通常要求误差在5mil以内。但很多人忽略了差分对之间的等长。如果你有多个lane组成一个端口比如x16那么这16对差分线之间的长度差也要控制通常要求在100mil以内。否则会出现lane间偏斜skew影响链路训练。参考设计里会给出一个Length Matching Table告诉你哪些信号组需要等长容差是多少。照着做就行但要注意你的PCB设计工具是否支持自动等长绕线。6. 散热与机械参考设计里看不见但致命的部分6.1 功耗估算你的散热器够大吗PEX88096的功耗取决于端口配置、速率、以及是否开启某些功能。参考设计里通常会给出一个典型功耗和最大功耗的表格。比如96 lane全跑Gen4功耗可能在30W到40W之间。如果你不加散热器芯片结温会迅速超过125°C然后降速或者宕机。参考设计里会建议散热器的尺寸和风道要求。我的经验是如果板子放在1U服务器里必须用主动散热小风扇或者至少用大面积铝挤散热器加导风罩。自然散热在大多数情况下不够。6.2 BGA焊接与翘曲不是贴上去就行PEX88096是大型BGA封装引脚数多、间距小。回流焊时如果温度曲线不对容易出现虚焊或者翘曲。参考设计里会给出推荐的焊接曲线和PCB厚度建议。通常建议用厚板比如2.0mm以上来减少翘曲。另外BGA下面的PCB表面处理也很重要。ENIG化学镍金是常见选择但要注意黑盘问题。如果PCB厂工艺控制不好焊点可靠性会出问题。7. 调试与验证板子回来之后怎么点亮它7.1 第一步检查电源和时钟板子打样回来先别急着上电。用万用表测一遍各路电源对地阻抗确认没有短路。然后上电用示波器测各路电源的纹波和时序。REFCLK要用高带宽探头测看频率和幅度是否正常。如果电源纹波超过50mVSerDes可能会工作不稳定。如果REFCLK抖动太大链路训练会失败。这两个是基础必须先过。7.2 第二步读EEPROM和配置寄存器PEX88096上电后你可以通过I2C或者SMBus读取EEPROM的内容确认配置数据是否正确加载。参考设计里会给出寄存器地址和期望值。如果读出来全是0xFF说明EEPROM没烧录或者I2C通信有问题。另外你可以通过厂商提供的工具比如Broadcom的PEX工具来读取链路状态和误码率。如果某个端口训练不到Gen4先看误码率如果误码率高说明信号完整性有问题如果误码率为0但速率上不去可能是配置问题。7.3 第三步链路训练与压力测试链路训练成功后用PCIe分析仪或者误码仪做压力测试。参考设计里会建议跑至少24小时的误码测试误码率要低于1e-12。如果测试中出現误码先检查走线和连接器再检查电源噪声。我自己的经验是很多链路问题不是芯片本身而是连接器或者线缆。比如背板连接器的阻抗不连续或者线缆太长导致衰减过大。参考设计里会给出连接器选型建议尽量用官方推荐的型号。8. 几个实际项目中踩过的坑和应对方法8.1 端口配置改了但没生效有一次我改EEPROM里的端口配置把两个x8合并成一个x16结果上电后还是两个x8。查了半天发现是EEPROM的写保护没关数据根本没写进去。后来把WP引脚拉低再烧录问题解决。这个坑很小但很浪费时间。8.2 Gen4链路不稳定Gen3正常另一个项目里板子跑Gen3很稳Gen4偶尔训练失败。用示波器看眼图发现眼高勉强达标但眼宽不够。后来发现是走线长度太长插入损耗超标。换了低损耗板材缩短走线问题解决。所以PCIe 4.0对板材和走线长度真的敏感不要心存侥幸。8.3 散热不足导致降速还有一个案例是板子跑了一段时间后带宽突然下降。查温度发现芯片结温到了110°C触发了降速保护。后来加了小风扇温度降到80°C以下带宽恢复。所以散热设计一定要留余量不要按典型功耗算要按最大功耗算。9. 参考设计之外你还需要考虑的系统级问题9.1 与Host的兼容性PEX88096虽然标准PCIe但不同Host的Root Complex行为可能不同。比如有些Host对链路训练的超时时间要求更严或者对某些配置空间寄存器的处理不一样。参考设计里通常不会覆盖所有Host你需要自己测试。9.2 热插拔与电源管理如果你要做热插拔除了硬件上的PRSNT#和电源控制还需要软件层面的支持。参考设计里会给出硬件接口但驱动和ACPI配置需要你自己搞。这部分容易出问题建议先用评估板验证。9.3 电磁兼容PCIe 4.0的16 GT/s信号辐射很强如果板子要做认证EMC是个挑战。参考设计里会给出一些布局建议比如差分线尽量走内层、包地、加屏蔽罩等。但最终还是要靠测试和整改。10. 写在最后一些个人体会PEX88096是一颗很强大的芯片但它的参考设计不是抄作业就能搞定的。你需要理解每一部分的设计意图然后根据你的实际场景做调整。电源、时钟、走线、散热这四个环节任何一个出问题板子都跑不起来。我的建议是第一版板子尽量贴近参考设计不要自己发明。等第一版跑通了再根据实际需求做优化。另外调试工具要提前准备好比如高带宽示波器、PCIe分析仪、误码仪这些能帮你快速定位问题。最后如果你在画板过程中遇到不确定的地方优先查官方datasheet和参考设计文档其次查PCIe规范。网上的资料很多是错的或者只适用于特定场景。自己算一遍、测一遍比什么都靠谱。
返回列表