专利名称:PCIe的自动分支的方法及系统
专利类型:实用新型专利
专利申请号:CN202011221638.X
专利申请(专利权)人:广达电脑股份有限公司
权利人地址:中国台湾桃园市
专利发明(设计)人:林友涵
专利摘要:一种用于自动产生控制分支信号以设置计算装置上的PCIe IO单元的端口的系统及方法。PCIe IO单元的通道被分为最低粒度的初始端口。判断PCIe装置是否被连接至每个初始端口。PCIe IO单元的分支端口设置,是基于具有已连接的PCIe装置而判断。PCIe IO单元的端口,是基于分支端口设置而设置。
主权利要求:
1.一种提供快速外围元件互连PCIe输入/输出单元的自动分支检测及设置的系统,该系统包括:一计算装置,包含一PCIe输入/输出单元,该PCIe输入/输出单元具有可设置的多个通道;
一PCIe装置,被连接至该PCIe输入/输出单元的至少一些所述通道;及一分支设置装置,可运作以执行以下步骤:将该PCIe输入/输出单元的所述通道分为多个初始端口,每个所述初始端口具有最低粒度的所述通道;
检测该PCIe装置是否被连接至每个所述初始端口;
基于已连接至所述初始端口的PCIe装置的检测,判断该PCIe输入/输出单元的一分支端口设置;及储存该PCIe输入/输出单元的该分支端口设置,其中该分支设置装置包含该PCIe输入/输出单元与该PCIe装置之间的多个通道连接的多个通道反转规则,且其中该分支设置装置为通道反转调整该分支端口设置。
2.如权利要求1所述的系统,其中该分支设置装置可运作以将没有已检测到的PCIe装置的该初始端口与另一初始端口合并。
3.如权利要求1所述的系统,其中该计算装置是一CPU,且包含多个PCIe输入/输出单元,每个所述PCIe输入/输出单元的端口被该分支设置装置所设置。
4.如权利要求1所述的系统,其中该分支设置装置更能运行以执行以下步骤:在设置该PCIe输入/输出单元后,重启该系统;
判断任何先前所检测到的PCIe装置是否没被检测到;及若任何先前所检测到的PCIe装置没被检测到,重设该PCIe输入/输出单元的多个端口。
5.一种自动提供分支控制信号的方法,以设置在一计算装置上的一快速外围元件互连PCIe输入/输出单元,包括:将PCIe输入/输出单元的多个通道分为最低粒度的多个初始端口;
检测一PCIe装置是否经由一分支设置装置而被连接至每个所述初始端口;
基于具有一已连接的PCIe装置的所述初始端口,经由该分支设置装置,判断该PCIe输入/输出单元的一分支端口设置;及基于该分支端口设置,设置该PCIe输入/输出单元的多个端口,该方法还包括:
判断该PCIe输入/输出单元与该PCIe装置之间的多个通道连接的通道反转;及为通道反转调整该分支端口设置。
6.如权利要求5所述的方法,更包括将没有已检测到的PCIe装置的该初始端口与另一初始端口合并。
7.如权利要求5所述的方法,其中该计算装置是一CPU,且包含多个PCIe输入/输出单元,每个所述PCIe输入/输出单元的端口被该分支设置装置所设置。
8.如权利要求5所述的方法,更包括:
在设置该PCIe输入/输出单元后,重启一系统;
判断任何先前所检测到的PCIe装置是否没被检测到;及若任何先前所检测到的PCIe装置没被检测到,重设该PCIe输入/输出单元的所述端口。 说明书 : PCIe的自动分支的方法及系统技术领域[0001] 本公开主要涉及计算系统中,快速外围元件互连(peripheralcomponentinterconnectexpress;PCIe)装置的动态分支(dynamicbifurcation)控制。更具体而言,本公开的面向涉及确保基本输入输出系统(basicinputoutputsystem;BIOS)对PCIe输入/输出单元所作的有效率且自动的分支控制。背景技术[0002] 快速外围元件互连(peripheralcomponentinterconnectexpress;PCIe)标准已被采用于计算装置中的高速元件的连接。装置具备含有多个通信数据用的通道的PCIe输入/输出(inputoutput;IO)单元。这种IO单元可包含4、8、16条通道(lane),该等通道可被切分成不同的通信管道,以连接至不同的PCIe装置。来自基本输入输出系统(basicinputoutputsystem;BIOS)的分支控制机制允许将一总线IO单元(例如一PCIe总线IO单元)切分成较小的总线,以供不同的PCIe装置。举例来说,藉由对装置的分支设定,一个16通道的PCIeGen3总线IO单元可被切分成两个x8通道宽度的PCIeGen3接口。支持PCIe分支的伺服器中的处理器具有一BIOS设定,来对他们分别的PCIeIO单元启用分支功能。[0003] 根据PCIe规格,分支为带有PCIeIO单元的装置提供了弹性,以配合连接器的通道宽度,来与安装它们的系统的元件通信。较宽的通道宽度需要更多实际的硬件连接接脚,但提供了较高的通信速度。在带有支持容量的PCIe装置的计算机系统中,PCIe根端口(rootport)通常是由CPU或晶片组(chipset)提供,以连接至PCIe装置。CPU/晶片组厂商通常提供弹性的方法,来允许计算机系统设计者动态地设置PCIe通道分支,因为CPU/晶片组具有固定数目的接脚供PCIe通信。举例来说,被CPU支持的一个16PCIe通道群组可以被设置为一个x16通道宽度的PCIe端口来支持一个PCIe装置、两个x8宽度的PCIe端口来支持两个PCIe装置、一个x8与两个x4宽度的PCIe端口来支持三个PCIe装置,或者四个x4宽度的PCIe端口来支持四个装置。[0004] 较宽的宽度(例如一个x16宽度的端口)提供与PCIe装置之间较高的通信速度,但减少了系统的被支持PCIe装置的总数。相反地,较窄的宽度(例如四个x4宽度的端口)提供较低的速度,但提供更多的端口供PCIe装置连接。这种在每个端口的通道数上的弹性,让计算机系统设计者有能力提供不同的系统,以相同的CPU/晶片组支持不同数目及类型的PCIe装置。对于计算机系统制造商而言,使用单一的BIOS固件映像档来支持这些不同的计算机系统,是很普遍的。单一的BIOS映像档必须储存每个系统所使用的PCIe分支设置,以适应关联于每个系统的硬件装置。通常的方法是在BIOS中提供一映射表(mappingtable)来使PCIe分支设置关联于被CPU/晶片组所支持的不同的系统。[0005] 当BIOS被启动,系统类型被检测,且BIOS能基于映射表来设定CPU/晶片组中正确的PCIe分支。然而,若BIOS设定了错误的分支,系统可能无法使用安装在系统上的某些PCIe装置,或者某些PCIe装置可能会以下降的降速执行。[0006] 伺服器系统中的系统设计,通常是复杂的。一个CPU/晶片组可具有许多个PCIe通道群组,而每个群组能具有一个别的分支设定。识别需要不同分支设置的不同系统,是个挑战。举例来说,两个系统可具有相同的主机板、不同的PCIe转接卡(risercard)。转接卡是能被安装在主机板上的扩充版(extensionboard),以将PCIe信号从主机板路由至安装在转接卡上的PCIe卡。因此,不同的PCIe转接卡可能需要不同的PCIe分支设置。举例来说,第一转接卡可将16PCIe通道全部路由至一个单一的x16宽度的PCIe插槽,而第二转接卡可将16PCIe通道路由至两个x8宽度的PCIe插槽。BIOS必须知道哪个PCIe转接卡是被安装来提供正确的PCIe分支设定。要更复杂的话,第三系统可具有完全不同的主机板。在此范例中,BIOS可能需要不同的方法来识别这三种系统,以正确地设定PCIe分支。[0007] 这种复杂度,有时造成BIOS设计者为某些系统写入了错误的PCIe分支设定。而且,当系统的PCIe设计改变,或者新增了一个被相同BIOS所支持的新系统,就会需要释出一个新的BIOS版本以支持这种PCIe分支设计改变。这些潜在的改变,增加了系统及BIOS本身的维护难度。[0008] 图1是先前技术厂商的CPU设计10的方块图,CPU设计10具有一个群组的可设置的PCIeIO单元。CPU设计10包含第一IO单元12(端口0,直接媒体界面(Direct MediaInterface;DMI))、第二IO单元14(端口1,IOU2)、第三IO单元16(端口2,IOU0),及第四IO单元18(端口3,IOU1)。每个IO单元12、14、16及18具有IO单元的接脚的不同潜在设置,以供个别的PCIe通道。每一组IO单元,例如IO单元14,具有交易层(transactionlayer)20、连结层(linklayer)22,及带有一组实体通道(physicallane)24的实体层。实体通道是与对应的PCIe连接器配对的接脚,该等接脚被用于安装PCIe卡。取决于系统设计,这些接脚亦可在没有PCIe连接器的情况下连接至PCIe装置,而并非是与连接器配对。在此范例中,IO单元14具有实体通道0‑7,且可被设置给一个或两个端口(端口1a及端口1b)。IO单元16及IO单元18具有多组对应的实体通道34及实体通道44(通道0‑15),且可被设置给至多四个端口。每个端口能被连接至一PCIe装置,无论是经由PCIe连接器抑或是直接连接。[0009] 举例来说,IO单元(端口2,IOU0)16具有数个不同可能的分支设定及对应的至多四个端口的组合(端口2a、端口2b、端口2c及端口2d)。PCIe分支可因此被设定为四个端口,每个端口具有x4宽度的通道—例如端口2a(x4)、端口2b(x4)、端口2c(x4),及端口2d(x4);三个端口—两个端口具有x4宽度的通道,一个端口具有x8宽度的通道(端口2a(x4)、端口2b(x4),及端口2c(x8));三个端口—一个端口具有x8宽度的通道,两个端口具有x4宽度的通道(端口2a(x8)、端口2c(x4)、端口2d(x4));两个端口,每个端口具有x8宽度的通道(端口2a(x8)、端口2c(x8));以及一个具有x16宽度的通道的端口(端口2a(x16))。[0010] 厂商CPU设计10的范例,提供弹性给系统设计者在使用CPU设计10时,在不同的系统上支持不同的PCIe装置。然而,PCIe分支必须被正确地设置给CPU设计10。否则,已连接的PCIe装置可能无法被检测到。举例来说,若一个x4连结宽度的PCIe装置被连接至IO单元16的实体连结4~7上,但PCIe分支控制将端口2a设定为一个x16连结宽度的端口,而没有端口2b、端口2c及端口2d,则该PCIe装置无法被检测到。这是因为对于PCIe端口而言,第一个实体连结或最后一个实体连结(在此案例中,为端口2a的连结0或连结15,因为端口2a被设置为一个x16宽度的端口)必须被连接至PCIe装置以供检测。为了检测此案例中的PCIe装置的第一个实体连结,PCIe分支必须被设定为具有端口2b作为一个x4宽度的端口,或者端口2a作为一个x8宽度的端口。[0011] 另一个问题可能是,PCIe装置可被PCIe根端口检测到,但是以下降的速度执行,造成PCIe装置可能的效能骤降。举例来说,若一个x8连结宽度的PCIe装置被连接至IO单元16的实体连结0~7上,但PCIe分支控制将连结0~7设定为具有x4连结宽度的端口2a,及具有x4连结宽度的端口2b,该x8宽度的PCIe装置能藉由端口2a通信,但仅能以x4连结宽度来执行。为了允许PCIe装置以全满的连结宽度(x8)运行,PCIe分支控制必须将通道0~7设置为端口2a(x8),或将通道0~15设置为端口2a(x16)。[0012] 目前,BIOS会在启动期间检测系统,以设定正确的PCIe分支。PCIe分支是根据BIOS中的一个预先定义的表来设定,该预先定义的表叙述从每个系统到其正确的PCIe分支设定的映射。如上述所解释,出于系统设计的复杂度,BIOS设计者可能对每个系统写入错误的PCIe分支设定。而且,当系统的PCIe设计改变,或者新增了一个使用相同BIOS的新系统,就会需要释出一个新的BIOS版本以支持这种PCIe分支设计改变。这增加了系统及BIOS本身的维护难度。[0013] 因此,需要一计算装置,使用例如为BIOS的系统固件,以自动地辨识出IO单元上正确的PCIe分支设定。另外需要去除为了检查每个系统的设置,而去维护BIOS中的PCIe分支表的必要。另外需要一道程序,允许在被相同的BIOS所支持的同时,PCIe分支设定被改变,藉此去除为新的PCIe分支需求而释出的新的BIOS。发明内容[0014] 一个被公开的范例是一种用于PCIeIO单元的自动分支检测及设置的系统。该系统具有一计算装置,计算装置包含PCIeIO单元,PCIeIO单元具有可设置的通道。PCIe装置被连接至PCIeIO单元的至少一些通道。该系统包含分支设置装置,可运作以将PCIeIO单元的通道分为多个初始端口。每个初始端口具有最低粒度的通道。分支设置装置检测PCIe装置是否被连接至每个初始端口。分支设置装置基于已连接至初始端口的PCIe装置的检测,判断PCIeIO单元的分支端口设置。分支设置装置储存PCIeIO单元的分支端口设置。[0015] 在被公开的范例系统的另一实施中,分支设置装置可运作,以将没有已检测到的PCIe装置的初始端口与另一初始端口合并。在另一实施中,分支设置装置包含基本输入输出系统(basicinputoutputsystem;BIOS)。在另一实施中,PCIe装置是选自由网络接口卡(networkinterfacecard;NIC)、非易失性快速存储器储存(non‑volatilememoryexpress;NVMe)装置、磁碟阵列(redundantarrayofindependentdisks;RAID)卡、主机总线配接器(hostbusadapter;HBA)卡、显示卡(videocard)、音效卡(soundcard)、图像处理器(graphicsprocessingunit;GPU)卡、场域可编程逻辑阵列(fieldprogrammablegatearray;FPGA)卡及PCIe交换器(switch)所组成的群组。在另一实施中,分支设置装置包含PCIeIO单元与PCIe装置之间的通道连接的通道反转规则。分支设置装置为通道反转调整分支端口设置。在另一实施中,PCIeIO单元具有可设置的十六个通道,且有最低粒度的四个初始端口。在另一实施中,计算装置是CPU。在另一实施中,计算装置包含多个PCIeIO单元。每个PCIeIO单元被分支设置装置所设置。在另一实施中,分支设置装置在设置PCIeIO单元后,重启系统。分支设置装置于是判断任何先前所检测到的PCIe装置是否没被检测到。若任何先前所检测到的PCIe装置没被检测到,分支设置装置于是重设PCIeIO单元的端口。在另一实施中,PCIe装置是被连接至PCIeIO单元的通道的多个PCIe装置的其中之一。[0016] 另一个被公开的范例是一种自动提供分支控制信号的方法,以设置在计算装置上的PCIeIO单元。PCIeIO单元的通道被分为最低粒度的多个初始端口。分支设置装置判断PCIe装置是否被连接至每个初始端口。PCIeIO单元的分支端口设置是基于具有已连接的PCIe装置的初始端口,经由分支设置装置所判断。PCIeIO单元的端口,是基于分支端口设置而被设置。[0017] 在被公开的范例方法的另一实施中,没有已检测到的PCIe装置的初始端口与另一初始端口被合并。在另一实施中,分支设置装置包含基本输入输出系统(basicinputoutputsystem;BIOS)。在另一实施中,PCIe装置是选自由网络接口卡(networkinterfacecard;NIC)、非易失性快速存储器储存(non‑volatilememoryexpress;NVMe)装置、磁碟阵列(redundantarrayofindependentdisks;RAID)卡、主机总线配接器(hostbusadapter;HBA)卡、显示卡(videocard)、音效卡(soundcard)、图像处理器(graphicsprocessingunit;GPU)卡、场域可编程逻辑阵列(fieldprogrammablegatearray;FPGA)卡及PCIe交换器(switch)所组成的群组。在另一实施中,该方法包含判断PCIeIO单元与PCIe装置之间的通道连接的通道反转。该方法亦包含为通道反转调整分支端口设置。在另一实施中,PCIeIO单元具有可设置的十六个通道,且有最低粒度的四个初始端口。在另一实施中,计算装置是CPU。在另一实施中,计算装置包含多个PCIeIO单元,每个PCIeIO单元的端口被分支设置装置所自动地设置。在被公开的范例方法的另一实施中,在设置PCIeIO单元后,系统被重启。任何先前所检测到的PCIe装置是否没被检测到被判断。若任何先前所检测到的PCIe装置没被检测到,PCIeIO单元的端口被重设。[0018] 另一个被公开的案例是可在一控制器上执行的基本输入输出系统固件。该固件包含将PCIeIO单元的通道分为最低粒度的多个初始端口的指令。该固件亦包含检测PCIe装置是否被连接至每个初始端口的指令。该固件亦包含基于具有已连接的PCIe装置的初始端口,判断PCIeIO单元的分支端口设置的指令。该固件包含基于分支端口设置,设置PCIeIO单元的端口的指令。[0019] 以上发明内容并非意图代表本公开的每个实施例或每个面向。相反地,前述的发明内容仅提供在此列举的某些新颖的观念及特征的范例。以上特征及优点,以及本公开的其他特征及优点,当关联于搭配的附图及权利要求,从以下用来实行本发明的代表性实施例及模式的详细叙述中,将会轻易地清晰可见。附图说明[0020] 本公开将可从以下示范的实施例的叙述,参考附图,而更佳地理解,其中:[0021] 图1是先前技术具有可设置的PCIeIO单元的处理器设计的方块图。[0022] 图2是根据本公开的某些面向,使用BIOS以自动检测PCIeIO单元的分支设置的范例系统的方块图。[0023] 图3A是根据本公开的某些面向,图2中的范例系统的PCIe装置的检测及合并未连接的端口的规则的范例表。[0024] 图3B是根据本公开的某些面向,图2中的范例系统的PCIe装置的检测及合并未连接的端口的PCIe通道反转规则的范例表。[0025] 图4是根据本公开的某些面向,被BIOS所执行以自动检测及设置图2中的PCIeIO单元的分支确认的例行程序的流程图。[0026] 图5是根据本公开的某些面向,提供一种替代的分支控制方法以考虑BIOS未知的PCIe通道反转状态的例行程序的流程图。[0027] 图6是PCIeIO单元的正常的自动设置以及基于检测到的通道反转的设置的不同规则的表。[0028] 本公开容许各式各样的修改及替代的形式。某些代表性的实施例已藉由附图中的范例所显示,并将在此被详细叙述。然而应被理解的是,本发明并非意图受限于被公开的特定形式。相反地,本公开欲涵盖落在如权利要求所定义本发明的精神与范围内的所有修改、均等物及替代选项。[0029] 符号说明[0030] 10:CPU设计[0031] 12,14,16,18:IO单元(IOU)[0032] 20:交易层[0033] 22:连结层[0034] 24,34,44:实体通道[0035] 200:系统[0036] 210:CPU[0037] 220,230:PCIeIO单元(IOU)[0038] 240:BIOS[0039] 242:平台路径控制器(PCH)[0040] 250,252,260:PCIe装置[0041] 300:表[0042] 310,320:栏[0043] 332,334,336,338,340:行[0044] 350:表[0045] 360,370:栏[0046] 380,382,384,386:行[0047] 400:例行程序[0048] 410,412,414,416,418:步骤[0049] 500:例行程序[0050] 510,512,514,516,518,520,522:步骤[0051] 600:表[0052] 610,620,630,640:栏具体实施方式[0053] 本发明能以许多不同的形式实施。代表性的实施例被显示在附图中,并将在此被详细叙述。本公开是本发明的原则的范例或图解,且并非意图将本公开的广泛的面向限制于绘式的实施例。在此基础上,例如在摘要、发明内容及实施方式等段落中被公开,但并未明确地在权利要求中列举的元件及限制,不应被单独地、集体地、暗示地、推论地或其他方式地并入至权利要求中。为了本详细叙述的目的,除非被具体地否认,否则单数形包含复数形,反之亦然;且「包含」一词意指「无限制地包含」。此外,表近似的词汇,例如「约」、「几乎」、「大体上」、「大概」及类似的词汇,可在此用于意指「在」、「近」、「近于」、「3‑5%的范围内」或「可接受的制造公差内」,或者其任何的逻辑组合。[0054] 本公开提供一种方法,允许例如为BIOS的系统固件自动地为PCIe输入/输出(IO)单元辨识出正确的PCIe分支设定,取代仰赖于手动、预先程序化PCIe分支设置表。有了自动的设置辨识,BIOS不需要为每种系统类型依入口维护一个PCIe分支设置表。此外,当新系统被引进于PCIe分支已改变之处,相同的BIOS可直接支持新系统及新的分支设置。这去除了为新的PCIe分支需求释出新的BIOS的需要。[0055] 被公开的方法为给定的PCIeIO单元预设将PCIe分支设定为最小粒度的端口。举例来说,一个16通道的PCIeIO单元管道被设定为四个x4宽度的起始端口(initialport)。对于每个最小粒度的端口,检测任何已连接的PCIe装置。当被设定为最小粒度时,根据PCIe装置检测状态,PCIe分支被正确地设定。例行程序(routine)将没有检测到PCIe装置的最低粒度的任何PCIe初始端口合并至它们邻接的初始端口,以确保正确的通道利用。[0056] 图2是允许PCIeIO单元设置的自动检测的范例系统200的方块图。范例系统200包含一计算装置,例如为带有PCIeIO单元220及PCIeIO单元230的CPU210。应被理解的是,CPU210可包含比范例的两个PCIeIO单元(PCIeIO单元220及PCIeIO单元230)更多的PCIeIO单元。PCIeIO单元220或PCIeIO单元230可被连接至转接卡,转接卡提供连接器至不同类型的PCIe装置。[0057] 经由来自BIOS240的分支控制,每个PCIeIO单元220及PCIeIO单元230可被设置为不同的通道设置。类似于图1中的范例端口16,每个PCIeIO单元220及PCIeIO单元230具有交易层、连接层,及带有16个实体通道(0‑15)的实体层。PCIeIO单元220及PCIeIO单元230可个别被设置至多四个分离的端口。在此范例中,PCIeIO单元220被连接至两个PCIe装置(PCIe装置250及PCIe装置252)。PCIe装置250及PCIe装置252可以是网络接口控制器(networkinterfacecontroller;NIC)卡、非易失性快速存储器储存(non‑volatilememoryexpress;NVMe)装置、磁碟阵列(redundantarrayofindependentdisks;RAID)卡、主机总线配接器(hostbusadapter;HBA)卡、显示卡(videocard)、音效卡(soundcard)、图像处理器(graphicsprocessingunit;GPU)卡、场域可编程逻辑阵列(fieldprogrammablegatearray;FPGA)卡,或PCIe交换器(switch)。PCIeIO单元220因此必须以适当的分支控制信号来设置,以分配正确的通道至两个PCIe装置(PCIe装置250及PCIe装置252)。举例来说,PCIeIO单元220的实体通道0‑7可被连接至PCIe装置250,而实体通道8‑15则可被连接至PCIe装置252。为了让PCIe装置250及PCIe装置252运作于最大的传输,PCIeIO单元220必须被设置两个带有x8宽度的端口。[0058] 分配通道至PCIe装置250及PCIe装置252的适当的分支控制设定,是由BIOS240自动地判断。如在此所解释,需要不同分支控制信号的不同数目的PCIe装置,可搭配范例系统200作使用,因为这种设置是被BIOS240自动地检测。举例来说,单一的PCIe装置260被连接至PCIeIO单元230的实体通道,且因此PCIeIO单元230的设置不同于PCIeIO单元220的设置。[0059] 因此,BIOS240的范例分支控制设定例行程序允许将一PCIeIO单元的通道设置为多个不同尺寸的端口。在此范例中,作为PCIeIO单元设置的CPU210的分支设定,可在范例系统200启动的期间,被BIOS240经由一CPU设置暂存器所设定。替代地,设置可经由平台路径控制器(platformcontrollerhub;PCH)242所设定。[0060] 在此范例中,根据在此所叙述的原则,PCIe单元220可被BIOS240设置为适当地与PCIe装置250及PCIe装置252通信。在系统启动之后,BIOS240被设置为将PCIeIO单元220的分支设定为最小粒度的初始端口。在此范例中,IO单元具有16个通道,而最小粒度因此为四个通道的四个初始端口—例如端口2a(x4)、端口2b(x4)、端口2c(x4)及端口2d(x4)。例行程序检测是否有任何PCIe装置被连接至任一初始端口。由于端口是分支的最小粒度,能被正确的PCIe分支所检测到的所有连接至PCIeIO单元220的PCIe装置,在此条件下也预期能被检测到。在此范例中,第一端口(端口2a,通道0‑3)及第三端口(端口2c,通道8‑11)分别与PCIe装置250及PCIe装置252连接。例行程序于是在没有检测到PCIe装置的情况下,将初始端口合并至邻接的初始端口,以利用额外的闲置通道。在此范例中,两个未连接的端口(端口2b及端口2d)与另外两个连接PCIe装置的端口(端口2a及端口2c)合并。BIOS240于是重启系统,并根据来自先前检测程序的检测状态,正确地设定PCIe分支。在此范例中,BIOS240为检测到的PCIe装置250及PCIe装置252正确地将PCIeIO单元220设置为两个x8宽度的连结。[0061] 用于分支检测及控制的BIOS例行程序,是根据提供基于被检测到的PCIe装置的分支设置的规则,而自动地执行。用于上述的范例BIOS240的一个范例规则可为,若端口2a上有一个被检测到的PCIe装置,且端口2b、端口2c及端口2d上没有PCIe装置被检测到,则端口2a的分支控制被设定为x16宽度,而没有端口2b、端口2c及端口2d。若端口2b没有被检测到的PCIe装置,但一装置端口2c或端口2d上被检测到,则端口2a的分支控制被设定为x8宽度,而没有端口2b。[0062] 若一装置在端口2c上被检测到,且若端口2d上没有被检测到的装置,则端口2c的分支被设定为x8,而没有端口2d。该规则的其他范例可包含,若装置在端口2a及端口2d上被检测到,则分支被设定为端口2a(x8宽度)、端口2c(x4宽度)及端口2d(x4宽度)。在此范例中,若端口2a上的PCIe装置是x8连结宽度的装置,则该装置此刻能以全满的连结宽度(x8)运行。基于该规则,端口2a上的装置并非是x16连结宽度的装置,因为有另一个装置在端口2d上(通道12‑15)被检测到。该规则亦可判断在端口2d上所检测到的装置也并非是x8连结宽度的装置。在此案例中,这种装置应该是在端口2c上被检测到,而并非是在端口2d上。[0063] 另一个范例为,若被检测到的装置是被连接至端口2a、端口2c及端口2d,则分支被设定为端口2a(x8)、端口2c(x4)及端口2d(x4)。此范例类似于之前的范例,因为装置都是在端口2a及端口2d。端口2c上的装置不能是x8连结宽度的装置,因为有另一个装置被连接至在端口2d(通道12‑15)。[0064] 若装置在端口2a及端口2c上被检测到,则分支被设定为端口2a(x8)及端口2c(x8)。若端口2a上的PCIe装置是x8连结宽度的装置,则该装置此刻能以全满的连结宽度(x8)运行。端口2a上的装置并非是一x16连结宽度的装置,因为端口2c上(通道8‑11)有另一个装置。因此,若端口2c上的PCIe装置是x8连结宽度的装置,则该装置此刻能以全满的连结宽度(x8)运行。[0065] 若端口2a上仅检测到一个装置,则分支被设定为单一的端口2a(x16)。无论端口2a上的PCIe装置是x8连结宽度的装置或x16连结宽度的装置,该装置此刻能以全满的连结宽度运行。[0066] 图3A是显示用于检测及合并端口的规则的不同排列的表300。第一组的栏310显示PCIeIO单元220的每个最小粒度的端口。在此范例中,有四个栏310代表每个最小粒度的端口。栏310中的每个端口之下的阴影项目,代表一装置被检测到连接至该端口。第二组的栏320代表基于对应的被检测到的装置,每个最小粒度的端口的设置。在上述被解释的范例中,若只有第一个端口有检测到装置(例如行332),该等端口被合并为一个单一的x16宽度的端口。如上述所解释,当端口2b上没有检测到装置,但一装置在端口2c上被单独地检测到,则该等端口被设定为两个x8宽度的端口,如行334所示。当装置在端口2a及端口2d上被检测到,则端口2a被设定为x8宽度,而端口2c及端口2d被各自设定为x4宽度,如行336所示。当装置在端口2a、2b及2c上被检测到,则该等端口被设置为两个x4宽度的端口及一个x8端口,如行338所示。当装置在端口2a、端口2b及端口2d上被检测到,则该等端口被设置为四个x4宽度的端口,如行340所示。[0067] 一个需要不同于上述规则的替代案例,可为PCIe通道反转(lanereversal)。PCIe通道反转,是PCIeIO单元的通道与PCIe装置之间的连接处于反转的顺序的一种状况。因此,在正常情况下,PCIeIO单元通道0‑15惯常地连接至PCIe装置通道0‑15。在通道反转的案例中,PCIeIO单元通道0‑15分别连接至PCIe装置15‑0。[0068] 若上述案例是落于PCIe通道反转的状况,则分支设定是不同的。在PCIe通道反转规则的案例中,若装置在端口2b上被检测到,但端口2a上没有装置被检测到,则端口2a的分支被设定为x8宽度,而没有端口2b。若一装置在端口2d上被检测到,且端口2a、端口2b及端口2c上没有装置被检测到,则分支控制被设定为端口2a享有x16宽度,而没有端口2b、端口2c及端口2d。若端口2c上没有被检测到的装置,但在端口2a或端口2b上有被检测到的装置,则端口2c的分支被设定为x8宽度,而没有端口2d。[0069] 若装置在端口2a及端口2d上被检测到,则分支被设定为端口2a(x4)、端口2b(x4)及端口2c(x8)。端口2a上的PCIe装置仅为x4连结宽度,或者更低。在通道反转的状况中,装置的第一条PCIe通道必须被连接至通道3,以让端口2a所检测到。因此PCIe装置只能是x4宽度(被连接至端口2a通道3‑0)、x2宽度(被连接至端口2a通道3‑2)或x1宽度(被连接至端口2a通道3)。因此,对此装置而言,将端口2a设置为一x4宽度的端口,是可接受的。[0070] 端口2d上所检测到的装置的最大可能的连接宽度为x8宽度,因为在端口2c上没有被检测到的装置。但端口2a上(通道3‑0)有检测到一装置。因此,被检测到的装置可为x8宽度(被连接至通道15‑8)、x4宽度(被连接至通道15‑12)、x2宽度(被连接至通道15‑14),或x1宽度(被连接至通道15)。因此,端口2c被设置为x8宽度的端口,以涵盖所有的这些可能。[0071] 若装置在端口2a、端口2c及端口2d上被检测到,分支被设定为端口2a(x4)、端口2b(x4)、端口2c(x4)及端口2d(x4)。在通道反转的状况中,通道7‑0无法被设定为单一的端口2a(x8),因为一装置被检测到连接至端口2a。这指示PCIe装置的通道0被连接至PCIeIO单元的通道3。将通道7‑0设定为单一的端口,由于装置的通道0未被连接至IO单元通道7或通道0,将造成PCIe装置未被检测到。与IO单元连接的最大实体连结,为x4连结宽度。因此,将端口2a设定为x4连结宽度,将不会限制连接的实体连结。[0072] 若装置在端口2a及端口2c上被检测到,则分支被设定为端口2a(x4)、端口2b(x4)、端口2c(x4)及端口2d(x4)。在通道反转的状况中,端口2a及端口2c被维持为x4宽度的连结,因为这些端口仅能为x4连结宽度。若端口2a上仅检测到一个装置,则出于相同的原因,分支仍将设定端口2a(x4)、端口2b(x4)、端口2c(x4)及端口2d(x4)。[0073] 图3B是显示取决于被检测到的装置来设置端口的分支的通道反转规则的表350。第一组的栏360显示在通道反转的案例中,PCIeIO单元220(图2中)的每个最小粒度的端口。在此范例中,有四个栏360代表每个最小粒度的端口。栏360中的每个端口之下的阴影项目,代表一装置于该端口上被检测到。第二组的栏320代表每个端口的最终设置,基于对应的被检测到的装置。[0074] 如上述所解释,通道反转的案例导致不同于图3A所显示的正常设置的端口设置。在表350中,行380代表若仅端口2d上检测到装置,x16的单一的端口设置(2a)。行382代表若仅端口2b及端口2d上检测到装置,两个x8宽度的端口设置。行384代表当端口2a、端口2c及端口2d上检测到装置时,四个x4宽度的端口。同样地,行386代表当端口2b、端口2c及端口2d上检测到装置时,一个x8宽度的端口及两个x4宽度的端口。[0075] 图4及图5的流程图代表在例如为CPU的装置上的PCIeIO单元的动态分支设置程序的范例机器可读指令(machinereadableinstructions)。在此范例中,机器可读指令包括供(a)处理器;(b)控制器;及/或(c)一种或更多种其他合适的处理装置执行的一种算法。该算法可被实施于储存在有形媒体(例如快闪存储器、CD‑ROM、软碟、硬碟、数字多功能影音光碟(DVD),或其他存储器装置)上的软件中。然而,所属技术领域的普通技术人员将轻易地理解,整个算法及/或其部分,可被除了处理器之外的装置执行,及/或以熟知的方式被实施于固件或专用的硬件中(例如可被专用集成电路(applicationspecificintegratedcircuit;ASIC)、可编程逻辑装置(programmablelogicdevice;PLD)、场域可编程逻辑装置(field programmable logicdevice;FPLD)、场域可编程逻辑阵列(fieldprogrammablegatearray;FPGA)、离散逻辑(discretelogic)等实施)。举例来说,接口的任何或所有的元件可被软件、硬件及/或固件实施。并且,流程图所代表的某些或所有的机器可读指令可被手动地实施。此外,虽然范例算法是参考图4及图5中所绘示的流程图所叙述,所属技术领域的普通技术人员将轻易地理解,实施范例机器可读指令的许多其他方法可被替代地使用。举例来说,方块的执行顺序可被改变,且/或某些被叙述的方块可被改变、删减或合并。[0076] 图4是假设通道反转设计被预先定义,图2中的范例PCIeIO单元220或PCIeIO单元230的其中之一的自动设置程序的流程图400。于步骤410,系统被启动。于步骤412,例行程序将PCIe通道的分支设定至最小粒度的初始端口。于步骤414,系统固件于是检测及记录在最小粒度之下,被连接至任何初始端口的任何PCIe装置。在此范例中,PCIeIO单元220具有最小粒度的分支中的四个端口(端口2a、端口2b、端口2c及端口2d)。由于该等端口是最小粒度的分支,连接至以正确的PCIe分支可检测到的PCIeIO单元220的所有PCIe装置,在此条件下也预期能被检测到。在最小粒度的分支之下,已连接的装置可能无法以它们全满的连接宽度运行。举例来说,具有八个通道的PCIe装置,由于四个通道的四个端口的最小粒度,在此阶段仅能每个被例行程序以四个通道运行。[0077] 为了提供全满的连结宽度给较大宽度的装置,例行程序于是将没有检测到PCIe装置的初始端口合并至有连接PCIe装置的邻接的初始端口。此程序因此在需要时利用了额外的闲置PCIe通道。于步骤416,例行程序于是根据在检测期间所判断的状态,重启系统并设定PCIeIO单元220的端口的PCIe分支。于步骤418,系统于是以修正后的PCIe分支设定运行,修正后的PCIe分支设定辨识所有已连接的PCIe装置,并且基于检测到的状态,将正确的通道宽度分配至每个装置。[0078] 在上述的例行程序400中,PCIe通道反转设计需要被预先定义,使正确的规则可被使用于正确的端口的合并中。因此,图5中的另一个例行程序500允许PCIe分支自动地被BIOS固件正确地设定,而毋须系统中的PCIe通道反转设置的信息。[0079] 在例行程序500中,于步骤510,系统被启动。于步骤512,例行程序将IO单元(例如图2中的PCIeIO单元220)的PCIe通道的分支设定至最小粒度的初始端口。于步骤514,系统固件于是检测及记录在最小粒度之下,被连接至任何初始端口的任何PCIe装置。在此范例中,PCIeIO单元220具有最小粒度的分支中的四个初始端口(端口2a、端口2b、端口2c及端口2d)。由于该等端口是最小粒度的分支,连接至以正确的PCIe分支可检测到的PCIeIO单元220的所有PCIe装置,在此条件下也预期能被检测到。在最小粒度的分支之下,已连接的装置可能无法以它们全满的连接宽度运行,且检测并没有将通道反转列入考虑。[0080] 为了提供全满的连结宽度给较大宽度的装置,例行程序于是将没有检测到PCIe装置的初始端口合并至有连接PCIe装置的邻接的初始端口。此程序在需要时利用了额外的闲置PCIe通道。于步骤516,例行程序于是根据在检测期间所判断的状态,重启系统并设定PCIeIO单元220的端口的PCIe分支。于步骤518,例行程序于是检查在新的设置下,先前所检测到的装置是否仍被检测到。若先前所检测到的所有装置均仍被检测到,则系统于是以修正后的PCIe分支设定运行,修正后的PCIe分支设定辨识所有已连接的PCIe装置,并且基于检测到的状态,将正确的通道宽度分配至每个装置。[0081] 于步骤518,若没检测到任何先前有检测到的装置,这指示了一种没有假设通道反转但实际上有通道反转状况的案例,否则就是一种假设了通道反转但实际上并没有通道反转状况的案例。在此状况中,于步骤520,系统固件再次重启系统并将失去检测到的PCIe装置的已合并的PCIe端口切分。于步骤522,系统于是以修正后的PCIe分支设定运行,修正后的PCIe分支设定辨识所有已连接的PCIe装置,并且基于检测到的状态,将正确的通道宽度分配至每个装置。[0082] 在假设与实际状况之间的通道反转设计差异的可能性,导致在初始分支设置被套用于图5中的例行程序之后,某些已连接的PCIe装置可能未被检测到的可能性。举例来说,若仅端口2a上检测到一个装置,而端口2b、端口2c及端口2d上没有检测到装置,则基于没有通道反转的假设之上的规则,将会把分支设定为单一的x16连结宽度的端口(2a)。然而,若系统包含通道反转,则在分支设置将端口2a设定为x16连结宽度之后,PCIe装置将不会被检测到,因为PCIe装置的通道0实际上是被连接至IO单元通道3,而非通道0或通道15。在此状况下,例行程序将返回至重启系统并改变分支设置,以基于通道反转的规则将分支设置设定回端口2a(x4)、端口2b(x4)、端口2c(x4)及端口2d(x4),如图3B中的表350所综整。因此,若在对应的端口上所检测到的任何装置,以正常规则下的设置未被检测到,则修改后的例行程序500供通道反转的规则将复原正常规则所作的改变。[0083] 图6是显示在新的设置之后,装置检测及检测装置失败的所有可能性的表600。表600因此包含全面的规则,涵盖图5中的例行程序500中的正常案例及通道反转案例。表600包含第一组的栏610,第一组的栏610显示在以阴影项目代表的最低粒度端口上的PCIe装置的初始检测的不同可能性。第二栏620显示对于每个检测到的端口,每个对应的端口的对应的初始分支设置设定。第三栏630显示对于在栏610中的每个被检测到的端口,被连接至在初始分支设置被根据栏620而设定之后可能不被检测到的端口的装置。第四栏640显示基于没有检测先前在一个或多个端口上所检测到的装置,修改后的分支设置设定。栏640中的交叉线项目,代表初始检测到的装置与后来检测到的装置相符的情况。[0084] 以上方法的优点,允许BIOS为装置的PCIeIO单元自动地辨识正确的PCIe分支设定。这去除了BIOS对每个系统仰赖PCIe分支设置表的需要。此程序允许使用BIOS的同时,PCIe分支设定被改变,因此去除了为新的PCIe分支需求释出新的BIOS的需要。[0085] 如本申请中所使用的「元件」、「模块」、「系统」或类似的词汇,通常是指与计算机相关的实体,可以是硬件(例如电路)、硬件与软件的组合、软件,或者与运作机器相关、具有一种或更多种特定功能的实体。举例而言,元件可以是但不限于在处理器(例如数字信号处理器)上执行的程序、处理器、物件、可执行档、执行绪(threadofexecution)、程序,及/或计算机。作为示例,在控制器上执行的应用,以及控制器本身,皆可为元件。一个或更多个元件可常驻于程序及/或执行绪之内,且一个元件可被局限在一台计算机上及/或分散在两台或更多台计算机之间。此外,「装置」可出自于特殊设计的硬件的形式;藉由执行其上使硬件能执行特定功能的软件所特制出的通用硬件;储存在计算机可读取媒体上的软件;或者其组合。[0086] 在此所使用的术语仅以叙述特定的实施例为目的,而并非意图限制本发明。如在此所使用的,单数形「一」及「该」意图亦包含复数形,除非文意明显另有所指。此外,倘若「包含」、「具有」一词或者其变形,被使用在详细叙述及/或权利要求中,这类词汇意图被包含在类似于「包括」一词的方式中。[0087] 除非另有定义,在此所使用的所有词汇(包含技术性及科学性的词汇),与本技术领域的普通技术人员一般所理解的,具有相同的含意。此外,像是被定义在一般所使用的字典中的词汇,应被解读为具有与它们在相关技术的文意中一致的含意,且除非在此被明确地如此定义,否则该等词汇不会被解读为理想化或过度正式的概念。[0088] 虽然本发明的各种实施例已被叙述如上,应被理解的是,该等实施例仅被呈现来作为范例,而非限制。即使本发明已参考一种或更多种实施方式所绘示及叙述,当阅读及理解本说明书及附图时,均等的替换及修改将可被其他熟习此项技术者想到或知晓。此外,虽然本发明的特定的特征可仅被数个实施例的其中之一所公开,这种特征可与其他实施例的一个或更多个其他特征组合,而此其他特征对于任何给定的或特定的应用可能是期望的或有利的。因此,本发明的广度及范围不应受限于任何以上叙述的实施例。反之,本发明的范围应根据权利要求及其均等物所定义。
专利地区:台湾
专利申请日期:2020-11-05
专利公开日期:2024-08-30
专利公告号:CN113312287B