☰
PCIe Bifurcation深度解析:7款开源拆分板卡硬件设计与实战指南
2026/10/6 18:16:41 网站建设 项目流程

提到PCIe Bifurcation,很多玩NAS、搞AI推理、做视频采集的朋友应该都不陌生。简单说,就是把一个物理PCIe x16或者x8插槽里的通道,在CPU和主板允许的前提下,拆成几组独立的小通道,例如x16拆成x4x4x4x4,可以直接挂四块NVMe盘或者四块独立设备,成本比买PCIe Switch扩展卡低得多。这篇文章以立创开源社区里出现的7款PCIe拆分板卡为线索,把它们背后的硬件设计思路、关键器件选型、从原理图到打样的流程,以及上机调试的常见问题全部过一遍。不管你是准备自己抄作业打样,还是只想搞清楚这类板卡能不能解决自己的需求,这篇内容都适用。

1. 为什么要做PCIe Bifurcation:先分清拆分和桥接

1.1 什么是Bifurcation?CPU视角下的通道拆分

Bifurcation这个词直译是“分叉”,放在PCIe语境里,就是处理器根端口下的通道再分配。以最常见的CPU PCIe控制器为例,一个x16控制器通常有16组差分收发对,传统用法是打包成一个x16链路。但芯片设计时往往允许把这16个通道拆成多个独立控制器,比如x8+x8、x4+x4+x4+x4、x8+x4+x4等。拆分后每个子链路都可以独立枚举设备,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模式差异很大,常见的有:

物理槽位可拆模式典型用途
x16x8+x8双GPU、双加速卡
x16x4+x4+x4+x4四块NVMe、四路万兆网卡
x16x8+x4+x4一块大卡加两块小卡
x8x4+x4两块NVMe、双网卡
x8x4+x2+x2混合扩展

理论上只要主板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#。这些步骤看起来基础,但能过滤掉九成的问题。记住,拆分板卡是物理层连接,高速信号的问题往往最后都归结到接触、电源和时钟这三件事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询