经典PCIe Switch芯片PEX8734:设计调试与量产固件管理全攻略
简介面向硬件工程师与PCB设计人员的PEX8734 PCIE桥片硬件设计全套资料覆盖原理图设计、PCB Layout及信号完整性等核心环节适合从事服务器、存储及高速接口板卡开发的读者。压缩包共32个文件大小51.5MB以24个PDF文档为主体包含数据手册、硬件参考手册、原理图检查清单、Layout设计指南、产品认证报告等同时提供OrCAD原理图库.olb、Pinout引脚表.xlsx、BSDL边界扫描文件及Hspice模型便于直接导入设计工具使用。已有1364人学习下载。资料围绕Gen1/Gen2/Gen3 PCIE应用展开从器件电气特性、时钟与复位设计、错误注入与Surprise Down处理到PCB布局规范、回流焊曲线与可靠性监控均有涉及是一套从理论到实践相对完整的参考依据。 上周整理移动硬盘时又翻出这个PEX8734.rar压缩包是当年做服务器扩展项目时留下的里面有固件备份、改到第三版的原理图还有一堆当时懒得分类的调试记录。看到这串文件名不少做过 PCIe 扩展方案的工程师应该都会心一笑PLX 时代的 PEX8734博通接手后依然叫这个名字48 lane、PCIe Gen3 的经典交换芯片到现在还在大量 GPU 服务器、NVMe 全闪阵列和工控机里服役。这篇文章我就围绕 PEX8734 这颗芯片把从拿到 .rar 盲解、读 datasheet、画板、调链路到量产固件管理的完整经验捋一遍适合正在做 PCIe Switch 选型、被扩展拓扑折腾到头秃或者刚接触这类芯片想快速入门的硬件和固件工程师参考。1. PEX8734 这颗芯片到底是什么来头1.1 一块芯片解决“CPU 通道不够用”的问题先聊一个最基础的问题为什么需要 PCIe Switch拿一颗普通服务器 CPU 来说无论 Intel 还是 AMD 平台芯片组或 CPU 原生引出的 PCIe lane 数量都是固定的常见也就 20 到 64 条 lane。但一台机器要同时挂两张 GPU、几块 NVMe SSD、双口万兆网卡、阵列卡通道一下子就见底了。这时候就需要一个“岔路口”把 CPU 出来的少部分 lane 扩展成更多、更灵活的物理接口——这个岔路口就是 PCIe SwitchPEX8734 就是其中相当有代表性的一颗。PEX8734 本质上是 PCIe 交换芯片内部由多个上游端口和下游端口组成支持数据包在任意端口之间转发和交换机的概念基本一致。它不像 PCIe 桥那样只是简单的一进一出而是能把 48 条 lane 按不同模式切分成各种 x1、x4、x8、x16 的组合拓扑配置极其灵活。举个例子CPU 只引出一个 x16芯片就能把它扩展成四个 x8或者两个 x16具体怎么切完全由固件和配置引脚决定。这个“按需拆分”的能力让整机设计有了很大自由度。板卡形状、位置、接口数量都可以围绕散热和结构重新规划不再被迫跟着 CPU 的原生接口走。我自己做过的几个项目里PEX8734 基本都承担着“扩展 调整走线”双重角色既把接口数量补齐又让 PCB 布局更合理。1.2 看参数先抓这几个关键指标PEX8734 的主要参数拿 datasheet 第一页就能看到但参数表写得很生硬真正选型时我建议优先抓这四项总 lane 数、端口数、协议代次、转发模式。先说 lane 和端口。PEX8734 提供 48 条 lane最多支持 12 个端口。要注意这里的“端口”不一定是 x4 或 x8而是可以自由组合的逻辑端口比如切成 3 个 x16、6 个 x8以及一些更小的非对称组合。端口多了单个端口带宽就窄这是一个典型的资源权衡问题设计之初就得确定好实际需要几个宽口而不是只看“最多支持 12 口”。协议代次方面PEX8734 是 PCIe Gen3单 lane 速率 8GT/sx16 链路单向带宽约 16GB/s双向约 32GB/s。这个带宽对当下的 GPU 互联、NVMe 阵列扩展基本够用但如果要做下一代高速网卡或大量 SSD 聚合就得看向 Gen4 甚至 Gen5 的型号。再一个是非透明桥NTB能力。虽然 8734 核心资料里常见的是透明桥模式但部分配置和后续相关型号支持非透明桥用来做双主机冗余、故障切换。如果你要拿它做双控存储选型时必须专门确认是否支持 NTB否则系统枚举时两个 CPU 会“打起来”。关键参数PEX8734 典型值选型关注点总 Lane 数48 lane是否匹配实际外设数量端口数最多 12 个端口要不要多路 x16/x8协议代次PCIe Gen3 (8GT/s)和 CPU/外设代次匹配非透明桥具体型号需确认双控/冗余场景必须看封装/功耗BGA需加散热设计风道、散热片选型2. 拿到 PEX8734.rar里面到底装了啥2.1 常见文件类型与用途说明一个真实项目中负责芯片的工程师手里通常都会有这样一个 .rar 包里面文件杂七杂八但归纳起来无非这几类搞清楚每类文件的用途能省下大量翻文档的时间。datasheet 和数据手册是必读的重点看 register map、端口配置、上电时序、引脚定义尤其是配置引脚比如通过对地/对电源拉电阻设置 lane 分配模式。固件和驱动是另一个大头.bin 或者 .hex 文件一般是烧到芯片外部 EEPROM 或 SPI Flash 里的初始化固件Linux 驱动源码则用于系统枚举完成后初始化芯片内部寄存器。还有一类文件最容易忽略——参考原理图和 layout guide。PLX/Broadcom 官方出的 layout guide 对差分走线、参考层、退耦电容位置都有严格要求照着做能少踩很多高频信号坑。最后是配置工具和烧录工具一般是 Windows 或 Linux 下的可执行程序用于读写 EEPROM、升级固件、调整端口模式。2.2 固件烧录与版本匹配那些事PEX8734 启动时会从外部 EEPROM 或 SPI Flash 读取固件配置如果里面没有数据芯片会回落到默认模式运行但端口分配可能不是你想要的。所以拿到 .rar 包第一步不是急着看原理图而是先把固件和你的硬件拓扑对上。常规烧录流程是用烧录器把固件文件写入 EEPROM或通过芯片的 SMBus/串口接口在线烧录。博通官方工具里一般提供“Load from file”和“Write to EEPROM”两个动作前者只改芯片当前运行配置重启失效后者才会写入存储介质掉电保留。调试阶段建议先用临时加载的方式验证端口分割是否正确全部确认后固化到 EEPROM避免反复擦写降低器件寿命也避免板子变砖。固件版本匹配问题我踩过一次坑。某次项目里主控板已经正常识别 PEX8734但下游一块 NVMe 转接卡偶尔掉链子排查半天发现是 EEPROM 里固件比芯片修订版本旧了一代导致某些 lane 的均衡参数异常。后来我把所有板卡的固件统一升级到和芯片修订版本配套的版本问题才彻底消失。这里额外提醒一句升级固件前务必先读取当前固件做备份如果新固件导致无法枚举至少还能回滚。注意固件升级过程一旦断电芯片可能无法识别外部存储导致整板不可用。量产阶段建议在板卡上预留恢复跳线或串口接口关键时刻能救命。3. 基于 PEX8734 的典型设计场景拆解3.1 GPU 服务器给 CPU 扩展出更多 x16 口GPU 服务器是 PEX8734 出镜率最高的场景之一。一张双槽 GPU 通常需要 x16 带宽但服务器 CPU 原生往往只有少数几个 x16还要留给网卡、存储卡完全不够用。用 PEX8734 做“PCIe 扩展池”把 CPU 的两个 x16 上游口扩展成四个或更多 x16 下游口就能在有限 CPU 通道下挂更多 GPU。这种拓扑下芯片工作在多上游端口的非对称模式每个 GPU 独享一整条 x16 链路带宽和延迟都有保障。设计时要注意下游端口的 AC 耦合电容要放在芯片一侧走线长度尽量做等长否则高速信号容易因 skew 产生误码。另一个容易忽视的点是 GPU 的电源和热插拔逻辑。PEX8734 本身只管 PCIe 数据层但板卡设计时通常要在它的下游端口配合做热插拔控制器否则带电插拔 GPU 时可能把链路直接打崩。加一个 per-port 的供电开关和热插拔时序控制电路虽然增加了成本和板面积但对服务器硬件维护体验是质变。3.2 NVMe 全闪阵列与 JBOF/JBOD 扩展NVMe 全闪阵列是 PEX8734 的第二个大本营。一颗 8734 可以扩展出多个 x4/x8 端口每个端口接一个 U.2/U.3 NVMe 盘位组合起来就是一台 JBOFJust a Bunch of Flash。相比传统 SAS 方案这种 PCIe Switch 直连方式延迟更低顺序读写带宽也更容易堆满。实际做 JBOF 时我会把 48 lane 切成 8 个 x4 或 6 个 x8然后通过背板直接连到 NVMe 连接器。这里有个容易被忽略的细节NVMe 盘支持热插拔但 U.2 连接器的 sideband 信号比如 Presence、PWRDIS必须严格对应 PCIe 规范否则系统识别不到硬盘或者热插拔时系统死机。PEX8734 有专门的处理热插拔事件的逻辑但外部还需要配套 CPLD 或 MCU 来管理这些 sideband 信号不能想当然地直接连。功耗和散热也要提前算。48 lane 全跑起来芯片自身功耗不低而 NVMe 盘阵列发热更猛。JBOF 机箱内如果有独立的散热风道一般压得住但如果把 PEX8734 直接放在硬盘背板附近就必须评估局部热点必要时加导热垫和铝挤散热器。3.3 多网卡、采集卡与国产化平台上的应用除了 GPU 和存储PEX8734 在很多“非典型”场景同样好用。比如视频采集服务器一张主机要插多路采集卡但 CPU 原生接口只有两三个 x8/x16用 8734 扩展到五六个 x8既不影响带宽又能把卡全部挂上。工业控制领域也有不少用例一台机器要挂多张串口卡、CAN 卡、GPIB 卡这些低速设备不需要大带宽但接口数量特别多用 x1/x4 的灵活分配正好合适。国产化平台我这两年接触得更多。一些国产 CPU 虽然 PCIe lane 数量足够但端口形态和位置与结构件冲突或者主板面积有限这时在子板上放一颗 PEX8734就能把 CPU 的 x16 口引出到任意物理位置再拆分成多个口主板设计灵活性大增。另外有些国产 SoC 的 PCIe 控制器数量固定加一颗交换芯片还能解决多控制器枚举冲突的问题可以说是性价比很高的组合。4. 调试 PEX8734 的实操要点与踩坑实录4.1 上电时序与复位电路检查PEX8734 调试第一步不是看软件而是盯上电时序。芯片电源有核心电压、IO 电压、模拟电压等多路每路都有上下电顺序要求。用示波器同时测几路电源确认电压上升没有异常凹陷再确认 PERST# 复位信号满足要求——复位信号必须在所有电源稳定后在规定时间释放否则芯片内部状态机容易跑飞。我调试的时候习惯给复位电路加一个 RC 延时加手动复位按钮的组合。RC 延时保证满足上电时序手动复位按钮方便调试时随时把芯片拉回初始状态。很多新手板卡点不亮先别怀疑固件多半就是复位时序不干净或者电源纹波太大导致 PCIe PHY 无法锁定参考时钟。参考时钟REFCLK也要重点查。PEX8734 对 100MHz 参考时钟的精度要求很高必须用低抖动振荡器或由时钟缓冲器分配。用示波器看 REFCLK 上升沿是否干净、有无过冲必要时用频谱分析仪测相位噪声。如果参考时钟有杂散链路训练就会出现间歇性失败的怪问题。4.2 链路训练失败排查清单链路训练失败这是 PCIe 调试里最常见的坑。PEX8734 下游设备枚举不出来现象表现为 lspci 看不到设备或者系统报“Unknown device”错误。遇到这种问题按下面清单从上往下查基本能解决 80% 的 case。第一检查电源和复位。用万用表量各电源引脚电压确认在规格范围内用逻辑分析仪抓 PERST# 释放时刻确认满足芯片 datasheet 的时序要求。第二检查参考时钟。用示波器确认 100MHz REFCLK 是否稳定频率偏差应在 ±300ppm 以内差分摆幅要达标。第三检查 lane 分配和配置引脚。PEX8734 的端口模式由硬件配置引脚决定如果引脚电阻选择和固件不一致就会出现“芯片起来了但端口不对”的情况。第四检查链路协商速度。PCIe 链路会从 Gen1 逐步训练到协商速度某些布线不过关的板卡在 Gen3 时因为均衡参数不匹配掉到 Gen1这时需要用协议分析仪或示波器抓差分解调信号看是哪一步训练失败。注意Gen3 链路训练涉及发送端和接收端均衡EqualizationPEX8734 固件里一般有预设系数。如果 PCB 走线比较长或者用了廉价连接器建议在固件里把对应下游端口的预加重系数调大很多“间歇性掉速”的毛病就是这么治好的。4.3 Linux 下怎么确认 PEX8734 工作状态系统只要能开机Linux 下有很多工具可以确认 PEX8734 的状态。最基础的是lspci先看设备树里有没有这颗芯片的条目。PEX8734 的 Vendor ID 是 0x10B5Device ID 网上搜一下就能找到直接用lspci -nn | grep 10b5可以快速过滤出来。如果是跑在透明桥模式下lspci -tv可以清晰看到整棵 PCIe 设备树PEX8734 作为上游设备下面挂着具体外设。再用lspci -vvv查看单个设备的 LinkCap 和 LinkSta 字段可以确认实际协商速度是 Gen3 还是 Gen1链路宽度是 x8 还是 x4。# 查看设备树 lspci -tv # 查看某个设备具体链路状态 lspci -vvv -s 03:00.0 # 通过 sysfs 查看当前链路速度和宽度 cat /sys/bus/pci/devices/0000:03:00.0/max_link_speed cat /sys/bus/pci/devices/0000:03:00.0/current_link_speed cat /sys/bus/pci/devices/0000:03:00.0/max_link_width cat /sys/bus/pci/devices/0000:03:00.0/current_link_width这几条命令在调试时几乎天天用。尤其current_link_speed和current_link_width只要不满足设计预期直接往回推链路训练问题基本方向就不会错。5. 写给选型与做方案的人5.1 PEX8734 与同系列芯片怎么选很多朋友问既然 PEX8734 这么经典后面出的 87xx 系列该怎么选我的建议是别盯着一颗芯片看先从最终产品的端口需求倒推。你需要几个 x16、几个 x8、几个 x4加起来总共多少 lane再去看系列里哪颗芯片的 lane 和 port 组合刚好覆盖需求留出 20% 到 30% 的扩展余量不用追求最大规格。PEX8734 的 48 lane / 12 port 组合适合中等规模扩展如果要做更高密度PEX8747 同样是 48 lane 但端口更多适合大量 x4/x8 小口场景如果要做满配存储或大规模 GPU 池PEX8796 这种 96 lane 级别才够用。代价是 lane 越多封装越大、功耗越高、layout 越复杂BOM 成本也明显上升。很多方案实际上用 32 lane 就足够硬上 48 lane 只会增加 PCB 层数和散热成本。还要考虑代次匹配。CPU 和外设如果都是 Gen3那 PEX8734 很合适如果 CPU 已经支持 Gen4外设也有部分 Gen4我建议优先选 Gen4 Switch虽然成本和设计难度上了一个台阶但链路带宽和未来兼容性都更好。PEX8734 这种 Gen3 芯片更适合对成本敏感、对带宽要求没那么极端的场景。5.2 散热、Layout 与成本控制心得最后聊几个实操层面的心得。PCB 设计上PCIe 高速差分走线阻抗一般按 85 欧姆差分设计走线要远离时钟线、电源开关节点等干扰源同一条链路的差分对之间要做等长控制skew 控制在 5 mil 以内比较稳妥。PEX8734 附近的退耦电容要尽量靠近电源引脚电源过孔部署要均匀避免局部电流过大产生压降。这些细节在 Broadcom 官方 layout guide 里都有具体数值画板前一定把文档通读一遍别等项目流片回来再后悔。散热方面PEX8734 是 BGA 封装热量集中在芯片中心。量大的项目可以定制铝挤散热器量小的话用标准 BGA 散热片加导热硅脂也够用。我的经验是设计时就预留好散热器安装孔位同时确认风道方向能覆盖芯片区域否则后期很难补救。成本控制上固件存储选容量刚好的 EEPROM 就行没必要上大 Flash如果对热插拔和端口管理要求不高外围的 CPLD 可以用简单逻辑芯片代替能省下不少钱。但别在电源和参考时钟上省钱——这两块省出来的每一分钱都会在调试阶段加倍还回去。这个项目做完之后我最大的体会是PEX8734 这类 PCIe Switch 芯片看起来只是个“扩展芯片”实际上它把整机硬件架构的天花板抬高了。只要你把 lane、端口、复位、时钟、固件这几件事理顺它能给你带来的拓扑自由度远超一开始的预期。现在再看到PEX8734.rar这种文件我不会只把它当成一包零件资料更像是一整套工程经验的索引。最后再分享一个小技巧每个板卡版本对应的固件、原理图、配置文件建议按“硬件版本号日期”命名归档别用“final”“最终版”这种名字时间一长绝对分不清哪个才是真正量产的那个。本文还有配套的精品资源点击获取