ARTICLE DETAIL

资讯详情

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

PEX88096 PCIe 4.0交换芯片硬件设计与调试实战指南

PEX88096 PCIe 4.0交换芯片硬件设计与调试实战指南 1. 从一颗芯片说起PEX88096到底解决了什么问题第一次拿到PEX88096的参考设计包时我盯着那几百页的schematics和layout guide愣了半天。这颗芯片是Broadcom原PLX旗下的PCIe 4.0交换芯片96 lane的交换容量放在今天依然是很多存储服务器、AI训练节点、NVMe JBOFJust a Bunch of Flash方案里的核心互连器件。你如果正在做多卡GPU服务器、全闪存储阵列或者需要把一堆NVMe盘挂到少数几个主机通道上那大概率绕不开它。PEX88096的核心价值在于它把上游主机的PCIe通道“扇出”成更多下游端口同时保持PCIe 4.0的16GT/s速率。96条lane可以灵活配置成x16、x8、x4、x2甚至x1的端口组合最多支持到24个独立端口具体取决于配置模式。这意味着你可以用一颗芯片同时连接4块GPU、8块NVMe SSD和2个网卡而主机侧只需要一个x16的上行链路。适合读这篇内容的人硬件工程师做原理图设计、Layout工程师做高速布线、固件工程师调SPI Flash和配置寄存器、测试工程师做信号完整性验证。如果你只是想知道“这芯片能干嘛”看上面那段就够了如果你要把它画到板子上、点起来、跑稳那接下来的内容是我踩过坑之后整理出来的实操记录。注意PEX88096的参考设计文档Reference Design Kit是签NDA之后从Broadcom FAE那里拿到的网上流传的版本大多不完整。我下面讲的内容基于公开可查的datasheet摘要和实际项目经验具体寄存器地址和配置值请以你手里的正式文档为准。2. 硬件参考设计的整体架构与关键选型逻辑2.1 为什么PEX88096的方案通常配SPI Flash启动PEX88096上电后需要一个配置源来初始化内部寄存器、端口划分、SerDes参数等。Broadcom给了三种方式I2C从模式、SPI从模式、以及通过上游主机的PCIe配置空间写入。实际项目里95%以上用SPI Flash原因很直接——便宜、简单、不依赖主机。SPI Flash的选择有几个硬指标容量至少16MB128Mbit因为PEX88096的固件镜像加上配置数据通常在4~8MB留一倍余量方便后期改配置。我见过有人用8MB的Flash结果固件升级时空间不够只能飞线换芯片。品牌上Macronix MX25L系列、Winbond W25Q系列、GigaDevice GD25系列都行但要注意PEX88096的SPI控制器对某些型号的擦除时序有兼容性问题具体在下面第4章会展开。SPI Flash的连接方式PEX88096的SPI_MISO、SPI_MOSI、SPI_CLK、SPI_CS_N四根线直接连Flash另外Flash的WP#和HOLD#建议上拉避免误写。参考设计里通常还会留一个Header用于外部烧录器量产时用治具烧调试时用跳线帽切换。2.2 上行端口和下行端口的分配原则96条lane怎么分是参考设计里最需要动脑子的事。PEX88096内部有多个Station可以理解为交换单元每个Station管理一组端口。上行端口连接主机通常配成x16占用16条lane剩下的80条lane分给下行端口。一个典型的NVMe JBOF配置上行x16下行8个x8端口每个端口接一块双盘位的NVMe背板。这样总共用了166480条lane还剩16条可以再开两个x8或者四个x4。但要注意PEX88096的端口编号和lane编号有固定的映射关系不是随便分配的。比如Port 0通常固定为上行Port 1~8对应Station 0的下行Port 9~16对应Station 1以此类推。你在画原理图之前一定要先用Broadcom提供的配置工具通常叫PEX88096 Configuration Wizard或者类似的Excel表格把端口分配表定下来否则layout做到一半发现lane对不上改起来就是灾难。2.3 参考设计里的电源树设计PEX88096的电源域比较多核心电压0.9V大电流典型15~20A、SerDes电压0.9V或1.0V取决于具体配置、IO电压1.8V和3.3V。参考设计里通常用一颗多相PWM控制器加DrMOS来做0.9V核心电源因为电流大、对纹波要求高。我实测下来核心电压的纹波如果超过30mVppSerDes的误码率会明显上升。所以输出电容不能省参考设计里通常放10颗以上的470uF聚合物电容加若干陶瓷电容。另外0.9V的时序要控制好核心电压先上然后1.8V最后3.3V。如果时序反了芯片内部可能有闩锁风险。参考设计里一般用一颗电源时序控制器如TI的UCD9090来管理。提示PEX88096的功耗在满配96 lane、PCIe 4.0速率下大约25~30W。散热片选型时如果机箱内风道不好建议用带鳍片的铝挤散热器加小风扇别省这个钱。3. 核心细节解析从原理图到Layout的实操要点3.1 原理图设计中最容易出错的几个地方第一参考时钟REFCLK的接法。PEX88096需要100MHz的差分参考时钟通常由一颗专用的时钟发生器如Si5332提供。参考设计里会把这个时钟同时送给上行主机和交换芯片但要注意如果主机和交换芯片用同一个时钟源jitter要求可以放宽到1ps RMS如果用独立时钟那两边都要满足0.5ps RMS以下的jitter。我见过一个项目为了省一颗时钟芯片主机和交换芯片各用各的本地晶振结果PCIe 4.0链路训练时好时坏最后换了带SSC扩频时钟的专用时钟发生器才稳。第二PERST#信号的复位逻辑。PERST#是PCIe的标准复位信号低有效。PEX88096要求在上电稳定后至少保持100ms的低电平然后释放。参考设计里通常用一颗复位芯片如MAX809来产生这个信号同时要保证所有下游端口的PERST#和上行同步。如果下游设备的复位释放比上行晚太多主机枚举时可能看不到某些设备。第三SMBus/I2C的从地址。PEX88096支持通过I2C从模式进行带外管理但它的I2C地址由几个strap pin决定。参考设计里会把这些pin上拉或下拉来设置地址。如果你板子上有多个PEX88096地址不能冲突。我建议在原理图里把strap pin做成可跳线的调试阶段方便改。3.2 高速差分对的Layout规则PCIe 4.0的16GT/s对走线损耗非常敏感。参考设计里给的损耗预算是从芯片引脚到连接器整个通道的插入损耗在8GHz时不超过-16dB。这意味着FR4板材最多走8~10英寸再长就要换低损耗板材如Megtron 6或类似等级。差分对的阻抗控制100欧姆差分误差±10%。线宽和间距根据叠层来算通常线宽4~5mil间距7~8mil。过孔是最大的损耗来源每个过孔大约贡献0.5~1dB的损耗。所以换层要尽量少如果必须换层用背钻back drill把多余的stub去掉stub长度控制在8mil以内。还有一个容易被忽略的点AC耦合电容的放置。PCIe 4.0要求在上行和下行链路的发送端放AC耦合电容通常0.1uF。参考设计里会把这些电容放在靠近发送端芯片的位置但实际layout时如果空间紧张放在通道中间也可以只要阻抗连续。我试过把电容放在连接器附近测试下来眼图也OK但前提是电容的焊盘要做阻抗补偿否则会引入反射。3.3 SerDes参数配置与均衡设置PEX88096的SerDes有很多可调参数发送端的前馈均衡FFE、接收端的判决反馈均衡DFE、连续时间线性均衡CTLE等。参考设计里会给一组默认值但实际板子因为走线长度和板材不同需要微调。调试时通常用Broadcom提供的软件工具如PEX88096 GUI或者通过I2C读写寄存器来调整。我一般先让链路训练自动完成然后读误码率统计。如果误码率在1E-12以上就手动调CTLE的增益和DFE的抽头。具体寄存器地址每个版本可能不同但思路是一样的先调CTLE把低频增益拉起来再用DFE压掉码间干扰。注意SerDes参数改完之后一定要做温度循环测试。我遇到过常温下误码率很好一到70度就崩的情况最后发现是DFE的某个抽头在高温下收敛不好换了一组预设值才解决。4. SPI Flash配置与固件烧录的完整流程4.1 固件镜像的组成PEX88096的SPI Flash里通常存三部分内容Bootloader、主固件Firmware、以及配置文件Configuration。Bootloader负责上电后的基本初始化主固件实现交换功能配置文件定义端口划分、SerDes参数、PCIe属性等。Broadcom会提供一个固件包里面包含一个默认的配置文件。你需要用他们的配置工具通常是Windows下的GUI或者命令行工具生成一个针对你板子的配置文件然后和固件一起打包成最终的镜像。镜像的格式通常是二进制烧录到Flash的0地址开始。4.2 烧录方式的选择量产时用治具烧录通过SPI Header连接烧录器如DediProg SF100或者类似型号。调试阶段可以用PEX88096的I2C从模式通过主机侧的I2C控制器写入Flash但速度慢不推荐。烧录时要注意Flash的扇区大小。PEX88096的固件通常按64KB扇区擦除如果你的Flash是4KB扇区的配置工具里要改擦除命令。我见过有人用4KB扇区的Flash结果固件烧进去启动不了查了半天发现是擦除命令不匹配。4.3 配置文件的关键参数配置文件里最重要的几个参数端口数量、每个端口的lane分配、上行端口的位置、SerDes的参考时钟频率、以及PCIe的Max Payload Size和Max Read Request Size。Max Payload Size建议设成256字节或512字节太大在某些主机上会有兼容性问题。Max Read Request Size设成512字节比较稳。另外如果下游接的是NVMe盘要确保ARIAlternative Routing-ID Interpretation和SR-IOV相关的选项按需开启。提示配置文件改完之后一定要用配置工具里的校验功能检查一遍确保没有lane冲突或者端口编号重复。我吃过一次亏配置文件里两个端口用了同一组lane结果上电后一个端口都认不到。5. 常见问题与排查技巧实录5.1 链路训练失败从现象到根因的排查路径链路训练失败是最常见的问题现象是主机枚举不到下游设备或者只枚举到部分设备。排查步骤我一般按这个顺序来查参考时钟用示波器测100MHz差分时钟的幅度和频率幅度要在400~1200mVpp之间频率偏差不超过300ppm。如果时钟都没有后面不用看了。查PERST#确认复位信号的时序低电平至少100ms释放时要干净不能有毛刺。查SerDes供电0.9V和1.0V的电压要准纹波要小。用示波器加同轴探头测不要用普通探头否则噪声测不准。读链路状态寄存器通过I2C读PEX88096的链路训练状态寄存器看LTSSMLink Training and Status State Machine卡在哪个状态。如果卡在Polling通常是参考时钟或复位问题如果卡在Configuration通常是lane映射或SerDes参数问题。换线换板如果以上都正常换一根已知好的PCIe线或者换一块金手指板排除连接器和线缆的问题。5.2 SPI Flash启动失败的典型原因启动失败的现象是芯片不工作I2C也读不到。常见原因Flash型号不兼容某些Flash的ID识别不了PEX88096会认为没有Flash然后进入I2C从模式等待主机配置。解决办法是换兼容型号或者在配置文件里强制指定Flash参数。镜像烧录不完整烧录后要做校验读回来对比。我习惯烧完之后用烧录器的校验功能跑一遍确认无误再上电。Flash的WP#没上拉如果WP#悬空Flash可能处于写保护状态但读应该没问题。不过有些Flash的HOLD#悬空会导致SPI总线冲突所以这两个pin都要上拉。5.3 高温下误码率恶化的处理前面提过SerDes参数在高温下可能不收敛。除了换预设值还可以做两件事一是降低发送端的预加重Pre-emphasis因为高温下通道损耗会增加过度的预加重反而会让眼图变差二是调整接收端的CTLE增益适当提高低频增益来补偿通道损耗。如果以上都不行那可能是板材或者连接器的问题。我遇到过用普通FR4走12英寸的板子常温下勉强能跑高温下直接挂。后来换了低损耗板材问题消失。所以如果你的板子走线超过8英寸一开始就选好板材别省这个钱。5.4 常见问题速查表现象可能原因排查方法解决措施主机枚举不到任何设备参考时钟缺失或频率偏差大示波器测REFCLK换时钟源或调整负载电容只枚举到部分设备部分lane映射错误读配置文件核对lane分配重新生成配置文件链路训练卡在PollingPERST#时序不对测复位信号调整复位芯片或RC参数链路训练卡在ConfigurationSerDes参数不匹配读LTSSM状态寄存器调整CTLE/DFE参数SPI Flash启动失败Flash型号不兼容读Flash ID换兼容型号或改配置高温下误码率高SerDes参数温漂做温度循环测试换预设值或换板材I2C读不到芯片I2C地址冲突或上拉电阻不对测I2C波形改strap pin或换上拉电阻6. 调试与验证阶段的实操心得6.1 上电顺序的验证方法PEX88096对上电顺序有要求但很多板子设计时没太在意。我的做法是在关键电源轨上各放一个测试点用四通道示波器同时抓0.9V核心、1.8V IO、3.3V IO和PERST#。上电时看时序核心电压先到90%之后1.8V才开始上升3.3V最后。如果顺序不对就要调电源时序控制器的配置。另外掉电顺序也要看。有些电源芯片掉电时输出电容放电慢导致3.3V比0.9V晚掉这也会有风险。参考设计里通常会在电源轨之间加肖特基二极管做钳位防止反向电压。6.2 眼图测试的注意事项PCIe 4.0的眼图测试要用到误码率测试仪BERT或者示波器加PCIe 4.0测试软件。测试点在发送端芯片的引脚处用差分探头或者焊接同轴电缆。我一般用焊接同轴的方式因为探头会引入额外的电容负载影响眼图。测试时要注意发送端的均衡设置要和实际工作时一致否则测出来的眼图不代表真实情况。另外测试图案要用PCIe 4.0规定的Pattern比如PRBS31或者合规测试图案。6.3 与主机兼容性的验证PEX88096虽然符合PCIe标准但不同主机Intel、AMD、不同代的CPU的枚举行为可能有差异。我建议至少测三种主机Intel服务器平台、AMD服务器平台、以及一颗常见的PCIe Switch上游如果有多级交换。测试内容包括冷启动枚举、热插拔、以及S3/S4唤醒后的枚举。遇到过一个问题某AMD平台上PEX88096的下游NVMe盘在冷启动时枚举正常但S3唤醒后丢失。最后发现是主机BIOS里的PCIe ASPM设置和交换芯片的ASPM策略冲突把ASPM关掉或者改成L0s only就好了。6.4 散热与长期可靠性PEX88096在满负荷下功耗不低散热设计不好会导致芯片降频或者链路不稳定。我的经验是散热片的热阻要小于3°C/W如果机箱内风速低于1m/s就要加主动风扇。另外芯片底部的散热焊盘一定要和PCB的接地焊盘充分焊接中间不能有气泡否则热阻会大很多。长期可靠性方面建议做至少72小时的老化测试环境温度45°C以上跑满负荷的数据流。我一般用fio或者类似的工具对NVMe盘做持续读写同时监控误码率计数器和芯片温度。如果72小时内误码率没有明显上升温度稳定那基本可以放心。7. 关于TSN功能与PCIe交换的延伸思考最近“具备TSN功能的交换芯片”是个热词但PEX88096本身是PCIe交换芯片不直接支持TSN时间敏感网络。TSN是以太网的标准工作在二层。不过在实际系统里PCIe交换芯片和TSN以太网交换芯片经常共存于同一个板卡上比如一个边缘计算盒子内部用PEX88096做PCIe设备扩展外部用TSN交换芯片做网络接口。如果你在做这类混合设计要注意两个域之间的时钟同步。TSN要求纳秒级的时间同步而PCIe有自己的参考时钟。通常的做法是让TSN交换芯片的时钟和PCIe的参考时钟同源或者用一颗支持IEEE 1588的时钟发生器同时给两边提供时钟。这样能避免两个域之间的时间偏差。另外PEX88096的PCIe端口可以配置成NTBNon-Transparent Bridging模式实现两个主机域之间的通信。在某些TSN应用里NTB可以用来在主机和TSN交换芯片之间传递时间戳或者控制信息。这个配置比较复杂需要改固件和配置文件建议找Broadcom的FAE支持。提示如果你真的需要PCIe over TSN或者类似的时间敏感PCIe应用PEX88096可能不是最佳选择。Broadcom有专门的TSN交换芯片产品线选型时要看清楚。8. 写在最后一些零散但有用的经验PEX88096这颗芯片我用了三年多从第一版板子点不亮到后来批量出货几千片中间踩的坑足够写一本小册子。如果只让我说三条最重要的经验第一参考设计要精读但不能照抄。Broadcom的参考设计是基于他们的测试板做的你的板子叠层、板材、连接器都不一样SerDes参数和电源设计一定要根据实际情况调整。第二SPI Flash不要省。容量买大不买小型号选主流不选偏门。我见过太多因为Flash问题导致启动失败的案例换一颗Flash就能解决的事没必要折腾。第三测试要趁早。板子回来第一件事就是测电源和时钟这两样没问题再上芯片。不要等全部焊完了才发现电源时序不对那时候拆芯片的风险很大。这个内容后续还可以这样扩展比如PEX88096的NTB配置细节、与NVMe SSD的兼容性列表、以及在不同主机平台上的枚举差异。如果你在做类似的项目欢迎交流。
返回列表