PCIe Bifurcation深度解析:7款开源拆分板卡硬件设计与实战指南
发布时间:2026/10/6 18:17:53 作者:尧图编辑部 阅读量:1,286

提到PCIe Bifurcation很多玩NAS、搞AI推理、做视频采集的朋友应该都不陌生。简单说就是把一个物理PCIe x16或者x8插槽里的通道在CPU和主板允许的前提下拆成几组独立的小通道例如x16拆成x4x4x4x4可以直接挂四块NVMe盘或者四块独立设备成本比买PCIe Switch扩展卡低得多。这篇文章以立创开源社区里出现的7款PCIe拆分板卡为线索把它们背后的硬件设计思路、关键器件选型、从原理图到打样的流程以及上机调试的常见问题全部过一遍。不管你是准备自己抄作业打样还是只想搞清楚这类板卡能不能解决自己的需求这篇内容都适用。1. 为什么要做PCIe Bifurcation先分清拆分和桥接1.1 什么是BifurcationCPU视角下的通道拆分Bifurcation这个词直译是“分叉”放在PCIe语境里就是处理器根端口下的通道再分配。以最常见的CPU PCIe控制器为例一个x16控制器通常有16组差分收发对传统用法是打包成一个x16链路。但芯片设计时往往允许把这16个通道拆成多个独立控制器比如x8x8、x4x4x4x4、x8x4x4等。拆分后每个子链路都可以独立枚举设备Link Training也是独立完成的相当于一个物理槽位变成了多个逻辑槽位。这个能力不需要额外芯片纯粹是CPU和主板BIOS是否配合的问题。主板把CPU的PCIe通道根据Bifurcation模式重新路由到不同的物理插槽或者同一个插槽的不同金手指分段上。我们做的拆分板卡本质就是把一个x16插槽内部的通道从物理连接上引到多个设备接口上。注意这是物理层的通道分配不是数据层的交换和PCIe Switch有本质区别。1.2 Bifurcation和PCIe Switch的本质区别很多朋友一上来就问“为什么不直接买个PLX/PEX芯片的扩展卡”答案很简单PCIe Switch虽然不受平台限制但它把原来的一条x16链路先收成一条上行链路再扩展成多条下行链路所有设备共享上行带宽。更关键的是Switch芯片本身需要串行解串器、内部交叉矩阵、电源管理、固件甚至散热高端芯片价格可以买好几块主板。Bifurcation拆分的优点正好是成本低、延迟低。低到几乎没有额外功耗整块无源手搓板卡不含一颗有源芯片也能工作。缺点是必须主板BIOS支持而且CPU根端口本身要具备这种可拆分能力。这里多说一句并不是所有主板都有“PCIe Bifurcation”这个设置项。消费级主板里华硕、微星、技嘉的一部分型号会有服务器主板基本都有AMD的TRX40/WRX80以及线程撕裂者平台支持比较完整。拿到板卡设计前先确认自己的平台能做什么模式否则做了半天上机直接不认盘。1.3 哪些模式最常用提前规划好通道分配不同平台支持的Bifurcation模式差异很大常见的有物理槽位可拆模式典型用途x16x8x8双GPU、双加速卡x16x4x4x4x4四块NVMe、四路万兆网卡x16x8x4x4一块大卡加两块小卡x8x4x4两块NVMe、双网卡x8x4x2x2混合扩展理论上只要主板BIOS给出对应的Bifurcation选项板卡就可以按照对应模式布线。但实际中还有两个细节一是有些平台只允许特定插槽支持Bifurcation比如只有直连CPU的那个x16插槽支持PCH出来的插槽是不支持的二是拆分后的每个端口是否需要独立的复位/时钟会影响板卡是否要加时钟Buffer和复位控制器这一点后面原理图部分再展开。2. 7款开源拆分板卡逐一拆解从纯无源到带桥接2.1 第一款纯无源x16转4个M.2 NVMe拆分卡这是最常见的设计。物理上就是一个PCIe x16金手指扩展出四路M.2 Key M插槽每个M.2口走x4通道。因为NVMe盘本身就是x4设备四块盘加一起就能吃满x16带宽。这种设计尽量不放置任何有源芯片连时钟Buffer都不加直接把金手指上的REFCLK差分对分成四路并联到四个M.2槽。听起来很简单但实际上是7款里面对信号完整性要求最微妙的一款。原因在于Bifurcation模式下四块盘的100MHz参考时钟理论上需要同一个源直接用电阻或电容分路会带来阻抗不连续尤其是Gen4速率下容易造成链路训练失败或者协商速率掉到Gen1。所以一些开源设计即使“无源”也会在REFCLK线上设计合理的扇出走线保证从金手指到每个M.2座子的时钟走线等长、结构一致而不是随便十字交叉分出去。这款适合手里有旧主板、想低成本组四盘NVMe阵列的朋友。2.2 第二款带时钟Buffer的x16转4路U.2/SFF-8643拆分卡U.2盘在服务器和数据中心里用得很多接口是SFF-8643或SFF-8639支持热插拔单盘功耗比M.2高不少。这一款和第一款最大的区别是在REFCLK路径上增加了一颗时钟缓冲芯片典型型号有IDT 9DBV0441、TI LMK00304、Microchip ZL40214等把单路100MHz差分时钟扩展成4路干净时钟每一路都接近点对点连接。为什么要这么设计因为M.2盘的时钟灵敏度相对低一些直连分线还能凑合U.2盘走线更长、连接器更多时钟抖动稍大就可能出现莫名其妙掉盘。实测中我遇到过同样的平台同一块板子不带Buffer的M.2版本稳定改成U.2版本后隔三差五丢一块盘加了Buffer之后问题消失。所以第二款更偏向做存储的朋友牺牲一点成本和功耗换稳定。2.3 第三款x16转2个x8标准插槽拆分板这款设计思路很直白适合插两张需要x8带宽的设备比如两块GPU、两块视频采集卡、两块NVMe RAID卡。它不需要时钟Buffer吗实际要看插槽形态。如果只是把x16金手指的通道分成两组接到两个物理x8插槽时钟线同样可以并联扇出。但问题在于标准PCIe插槽还要处理PRSNT#、WAKE#、PERST#等边带信号如果两个槽位的存在检测信号处理不好主板可能认为槽位上没有设备完全不启动训练。这类板卡的硬件设计重点往往不在高速信号而在边带逻辑和机械结构。比如两个x8插槽的安装孔位、挡板尺寸、空间干涉都是实际设计中容易踩坑的地方。开源方案里常见做法是两个槽位背面贴背靠背用一条x16转两个x8的转接线连接。从实用角度如果你只是插两张卡这款是最合适的选择因为不需要外接供电PCIe插槽最大能提供75W两张普通卡功耗完全够。2.4 第四款x8转2个x4的迷你拆分卡有些平台CPU直连槽位只有x8或者机箱空间只能放半高卡。这时候用x8转2个x4的迷你板更合适。两块NVMe组系统盘和缓存盘或者插两张x4接口的采集卡、FPGA卡都是常见用法。它比x16转4盘的结构简单很多PCB面积也可以做得很小不少开源方案直接用立创EDA画个半高尺寸四层板打样成本很低。这类板卡有一个设计细节值得注意x8槽位金手指的机械长度和马鞍山相同但电气上只用一半通道。很多新手画图时直接按照x16金手指封装套用结果切掉一半信号后反而忽略了尾部PRSNT#引脚的作用。实际上x8插槽的金手指形态必须对应x8的物理卡槽否则插不进主板。开源仓库里最常看到的错误就是金手指封装选型错误。2.5 第五款x16转多路标准x4插槽的通用扩展板这款不限定用途通常做成一个x16金手指扩展出4个x4标准插槽客户可能是编解码服务器、网络测试设备、工业视觉主机什么都有可能插。比如四张千兆或万兆网卡做软路由或流量采集四张FPGA加速卡做并行计算验证甚至四张视频采集卡同时接入多路摄像头。针对这种通用场景板卡设计上会把电源做更足。因为标准PCIe设备供电需求参差不齐单一金手指的75W上限可能不够用所以很多方案会在板上加一个6pin或者8pin辅助供电接口给四个槽位额外的12V供给。同时挡板空间要放下四张卡就必须采用类似于PCIe Riser的横向或纵向扩展结构机械设计复杂度提高不少。2.6 第六款带PCIe Switch桥接芯片的“伪拆分”扩展卡严格来说这款已经不是Bifurcation而是PCIe Switch方案。为什么放在一起讲因为很多人在实际应用里并不在乎原理只关心“我主板不支持拆分能不能也一块变多块”。这时候用PEX 8747或者PEX 8764这类Switch芯片就可以绕开CPU的Bifurcation能力把物理x16上行链路扩展出多个x4/x8下行端口。但这类板卡的设计难度和成本完全不在一个量级。Switch芯片一般是17x17mm以上的BGA封装差分走线数量庞大需要专门的散热片甚至主动风扇上下电时序也要求严格电源要分多路轨。开源项目里偶尔能看到但绝大多数人看完原理图就放弃了。如果你不是追求极致扩展性我会建议优先考虑Bifurcation方案省心太多。2.7 第七款带模式拨码和电源监控的“豪华”拆分背板最后一款是在无源拆分基础上加入了管理和保护功能。常见做法是板载一颗小单片机比如STM32或者GD32用于控制每路端口的PERST#复位时序读取辅助供电的电流电压并通过LED或数码管显示。有的设计还会加拨码开关强制关闭某个端口相当于把出问题的设备从链路上隔离掉。这颗MCU不参与PCIe高速信号传输只管理低速边带所以设计风险不高。但它解决了实际维护中一个很痛的点多盘状态下如果某一盘故障导致整个根端口训练失败其他盘也全部不可用。有了单独复位和隔离后维护时就不用反复关机拔盘了。这种板卡在拆机服务器改造NAS的圈子里比较受欢迎。3. 硬件设计核心细节信号、时钟、复位、电源3.1 金手指与连接器差分对、AC耦合电容、阻抗控制无论哪种拆分板卡最核心的机械电气接口就是PCIe金手指和末端设备插槽。PCIe差分信号对的对内等长是基本功工程上Gen3要求对内误差控制在5mil以内组间偏差尽量控制在5mm左右到了Gen4对内等长越短越好组间最好控制在1mm以内。实际上拆分板如果主要跑NVMe Gen3很多开源板勉强能过如果目标上Gen4布线要认真做仿真不是随便拉等长就行的。AC耦合电容也经常被忽略。PCIe规范要求在发送端串接AC耦合电容常见容值是0.1uF或0.22uF。主板几乎都已经在CPU端做好了所以纯无源拆分板上一般不需要再重复放置。但如果是自己设计的PCIe设备端出口有些习惯做法会在靠近槽位一侧预留电容位方便调试时选择是否贴装。这里一定要结合整个链路看不要主板有一套、卡上又塞一套两个电容串一起是能工作的但会引入不必要的阻抗变化。阻抗控制方面PCIe差分对规范是85欧姆差分阻抗但很多开源板用100欧姆也跑得通尤其是Gen3及以下。个人建议直接按85欧姆设计因为你不知道主板和末端设备实际匹配怎么样链路裕量多留一点总是好的。阻抗不仅取决于线宽线距还和参考平面、介质厚度强相关四层板最好用成熟的层叠模板别自己瞎定叠层。3.2 100MHz参考时钟时钟Buffer还是电阻分扇PCIe系统里所有设备都依靠100MHz差分参考时钟做数据恢复。Bifurcation模式下拆分出来的多个端口如果每个都需要独立时钟最稳健的选择是加时钟Buffer。时钟Buffer输入接金手指端的REFCLK输出多路点对点接到各个设备接口每一路都能保证一定的驱动能力和低抖动。不加Buffer的直连扇出方式危险在哪主要在于反射。各路走线从分支点出去后远端设备未必有良好的端接反射信号会沿着分支回来干扰原时钟。即便只是Gen3碰到布线比较长的U.2或者标准PCIe插槽时也很容易出现开机不稳定。所以我个人建议只要拆分端口数大于2尽量加时钟Buffer成本可能就是十几块钱但能省掉大量调试时间。如果做纯无源款至少保证各分支走线尽量短、尽量等距分支点加小电阻做隔离会好一些。3.3 复位和边带信号PERST#、CLKREQ#、PRSNT#的处理PCIe系统中每个设备都有PERST#复位信号设备上电后必须在PERST#释放之前完成自身初始化。Bifurcation拆分后如果所有端口共享一路PERST#通常也可以工作但对于可热插拔设备或容易出故障的盘位最好还是让每个端口能独立复位。设计上有几种做法最简单的所有PERST#并联进阶版用RC延时电路错开复位时间避免多个设备同时启动造成电源过冲再往上就是前面第七款说的用MCU单独控制。CLKREQ#信号在移动端和服务器端经常用作时钟管理拆分板上如果末端设备支持CLKREQ#建议把它正确连到金手指对应引脚或者直接接上拉不要悬空。PRSNT#则是插卡存在检测标准PCIe插槽必须处理好了很多时候设备不识别不是高速信号问题而是PRSNT#没有正确拉低。3.4 供电设计多盘状态下避免电源翻车PCIe x16插槽规范最大提供75W包含12V和3.3V。四块NVMe盘同时满载M.2盘一般每块5W到10W看似没问题但启动瞬间的峰值电流可能很高而且很多U.2企业盘单盘就能到15W以上四块就是60W再加上板卡上的时钟Buffer、LED、MCU插槽供电压力非常大。所以多盘拆分的板卡基本都要预留辅助供电接口。最常用的方式是12V供电入口再通过板载DC-DC转换出所需的5V或3.3V比如M.2 SSD需要3.3V供电如果直接从金手指取3.3V受限于插槽引脚数量和电源分配网络很容易压降超标。用一颗同步降压芯片从12V转3.3V给四个M.2槽位统一供电是更稳的方案。电源布线时注意铜皮加宽过孔要多打连接器每路供电引脚尽量保证足够过流能力。4. 用立创EDA从原理图到打样的实操流程4.1 原理图阶段器件选型和网络分配立创开源项目通常使用立创EDA专业版绘制器件库可以直接从嘉立创商城调取。原理图阶段最需要先画好的是金手指连接器。如果封装库里没有合适的自己建封装时一定要对照PCIe Card Electromechanical规范确认引脚编号和差分对位置特别是x16金手指有很长的防呆缺口错一位就会全盘皆输。网络分配建议按照“上游到下游”的层次命名例如把金手指端的差分对命名成PCIE_TX0_P/N经过拆分后分别命名成M2_A_TX0_P/N、M2_B_TX0_P/N。这样后面做等长约束时一目了然。时钟网络单独建一个类命名ACK100M_CLK_A、ACK100M_CLK_B等。电源网络也要区分12V_IN、12V_AUX、3V3_M2、3V3_BUF等方便后续做电源规则检查。器件选型方面时钟Buffer如果选LMK00304要注意它的封装比较小手工焊接难度大9DBV0441这种偏传统一点引脚间距大一些手搓相对友好。电源芯片推荐选内置MOSFET的同步降压方案外围器件少比如MP1584、TPS54302或者国产的芯龙XL4015系列。如果空间允许甚至可以保留一个独立电源模块焊盘位方便调试时直接替换。4.2 PCB阶段层叠、阻抗连续和等长控制拆分板建议至少四层板常用层叠是SIG-GND-PWR-SIG第二层做完整参考地第三层做电源分割顶层和底层走信号。嘉立创的四层板工艺成熟沉金和普通喷锡都能做但PCIe金手指位置建议沉金耐磨性和接触可靠度都要好很多。布线时先布电源和时钟再布差分信号。电源区域铺大铜皮过孔适当放大电流时钟走线要远离其他高速信号最好两侧加地孔隔离。差分信号每条都尽量走在同一层少换层如果必须换层打过孔的地方对称放置回流地孔减小回流路径不连续。等长约束看起来复杂实际上立创EDA专业版可以按网络类设置匹配长度。我的习惯是先把每对差分线按对内等长5mil约束再把所有M.2端口的差分线按组间等长10mm约束。注意拆分后的四组通道是从同一个根端口出来的理论上整组偏差越小链路裕量越高。但也不要为了强行等长绕太多的蛇形线绕线本身会引入串扰适度就好。4.3 打样与手工贴片的几个经验立创开源广场上很多项目直接用嘉立创打样和SMT贴片。如果是全板SMT建议把时钟Buffer、电源芯片、MCU这类小封装元件全部交给SMT产线自己只补焊接插件和连接器。手工焊接最怕的是M.2座子和SFF-8643连接器因为引脚细密且背面有接地焊盘容易虚焊。我个人的做法是收到板子后先用万用表测一遍电源对地阻抗确认没有短路再上电。第一次上电不要直接插设备先空载量金手指的3.3V和12V是否正常再量时钟Buffer输出端有没有100MHz信号。条件允许的话拿示波器看一下波形幅值正常情况下差分时钟约0.7V左右摆幅。调试顺序是电源、时钟、复位、高速信号这个顺序能省下大量排查时间。5. 实战拆分卡上机与BIOS配置5.1 硬件安装和BIOS拆分模式设置拿到做好的拆分板先别急着插设备。建议先把整块卡插在主板上进入BIOS找到PCIe Bifurcation配置项。不同主板厂商名称略有差异常见位置在Advanced/PCI Subsystem Settings或CPU Configuration里选项名字可能是“PCIe Slot Bifurcation”“PCIe Lane Configuration”等。设置成对应模式比如x16插槽选择“x4x4x4x4”保存重启。这里有一个容易被忽略的点有些主板虽然有Bifurcation选项但当插槽连接的是普通显卡或者转接卡时主板会根据设备类型自动调整模式或者默认关闭Bifurcation。所以配置前先把卡插上再开机进BIOS设置。设置完成后重新启动时主板的Option ROM可能尝试从其中某个设备启动如果只做存储关闭CSM或启动项里跳过即可。5.2 系统验证查看链路速度和宽度进入系统后第一件事就是确认每个端口都协商到了预期宽度和速率。Linux下用lspci就能看到对应的NVMe盘会出现在设备列表中再用lspci -vv查看LnkCap和LnkSta字段LnkSta应该显示类似“Speed 8GT/s, Width x4”的字样。Windows下可以用HWiNFO或者设备管理器查看。如果发现某个端口只识别成x1或者Gen1先不要急着怀疑硬件。可能是挡板触点没插到位也可能是该端口上的设备本身工作在低功耗状态。重新插拔、换个端口交叉验证一下。四块盘都识别成x4是基本要求如果全部识别但总带宽跑不满再检查系统里是不是有很多PCIe设备共享同一组CPU通道确认没有被强制拆分到PCH的共享链路上。5.3 应用场景NAS、视频采集、异构计算拆分板最常见的用途还是NAS扩容。一台普通的ATX主板通过一个x16槽位拆分出四个x4口再接四块NVMe或U.2盘组ZFS或者RAID0顺序读写可以轻松跑满万兆网络。另一个热门的玩法是视频采集和直播推流一张x16拆分卡转出四路采集卡同时接入多路HDMI/SDI信号单机就能做成多机位导播台。FPGA和异构计算玩家也会用到很多FPGA开发板是x4或x8接口过去一个主机只能插一两块用拆分板扩展后可以做多卡并行验证、低延迟交易策略回测或者分布式计算实验。需要注意的是这类使用场景对PCIe通道数量要求高但对通道速率可能并不敏感Gen3的x4已经够带宽了反而应该更关注整体系统散热和电源分配。6. 常见问题与排查技巧实录我踩过的坑6.1 主板能过自检但系统里没设备这是拆分板最常遇到的问题。排查思路按下面顺序来检查项可能原因处理方式BIOS Bifurcation选项没有正确设置为拆分模式重新确认主板支持的具体模式金手指插入深度接触不良或没插到底压紧并固定卡扣PRSNT#信号边带检测没有接通检查焊点和连接器定义设备本身单盘坏道或固件兼容问题换一块已知正常盘交叉验证时钟信号无源扇出不稳导致训练失败观察示波器或改加时钟Buffer其中PRSNT#问题最隐蔽。因为M.2接口本身没有存在检测一些设计直接不做处理看起来也能识别换成标准PCIe插槽的拆分板就必须处理否则主板认为插槽空载连训练都不启动。6.2 链路速率跑不满或反复降速如果是四块盘都识别成x4但速度只有Gen1或Gen2多半是信号质量裕量不足。先看布线是否等长再看差分阻抗是否匹配最后确认时钟Buffer是否正常工作。实测中很多降速问题都和REFCLK有关尤其是无源分扇四路时远端时钟幅度偏小设备会不断降速重训。解决办法之一是降低目标速率如果设备固态盘支持Gen4强制设置Gen3可能就稳定了。另一种场景是设备进入节能状态后降速可以检查ASPM电源管理策略在BIOS里关闭PCIe ASPM或者系统里设置高性能模式。6.3 使用中掉盘/黑屏先查电源和散热多盘高负载下突然掉盘大概率是电源问题而不是信号问题。整机电源分支上如果有其他大功率设备比如显卡或者CPU瞬时电流波动会传导到拆分板上。解决方向是给拆分板单独接入辅助供电尽量从电源独立线材取电不要共用显卡的模组线分支。另一类是散热问题四块M.2盘堆在一起主控温度很容易超过80度掉盘前通常有性能断崖或者报错日志可以加一个小风扇对着盘位吹。6.4 一套快速排查技巧速查我平时调试这类板卡会准备一只万用表、一块已知正常的NVMe盘、一个小风扇和一根辅助供电线。故障复现后先量板载12V和3.3V是否在位再测时钟Buffer输入输出再用已知好盘逐个端口试。如果单个端口都正常四盘同时插就出问题优先查总电流和PRSNT#。这些步骤看起来基础但能过滤掉九成的问题。记住拆分板卡是物理层连接高速信号的问题往往最后都归结到接触、电源和时钟这三件事。