附图说明
根据以下结合了附图对本发明各个实施例的详细描述可以更完全地理解本发明,其中:
图1是显示根据本发明一个实施例用于实现端点设备与PCI Express内部总线相连的装置的框图;
图2是显示根据本发明一个实施例用于实现端点设备与PCI Express内部总线相连的装置的框图;
图3是显示根据本发明一个实施例用于实现端点设备与PCI Express内部总线相连的装置的框图;
图4A-4C显示了一种集成的PCI Express端点设备的软件视图,其中:
图4A显示了根据本发明一个实施例的单个集成设备的块级软件视图,其模拟通过虚拟链路耦合的两个块;
图4B显示了根据本发明另一个实施例在图4A中所示设备的各个层与寄存器的详细软件视图;以及
图4C显示了根据本发明另一个实施例在图4A中所示设备的虚拟链路配置寄存器的实现视图;
图5显示了根据本发明另一个实施例使用图4A中所示设备的模拟状态机的虚拟链路的实现视图;以及
图6显示了根据本发明另一个实施例集成的PCI Express端点设备的寄存器结构。
具体实施方式
虽然,本发明可进行各种修改与替代方式,但其具体内容已借助附图中的实例显示并将详细说明。然而,应理解本发明并不限定于所述具体实施例。相反,本发明覆盖所有落入所附的权利要求限定的发明范围内的修改、等效物与替换方式。
本发明被认为适用于涉及电子通信的各种电路和方法,尤其适用于那些涉及在端点类型设备与通信总线之间通信的电路和方法(例如,在PCI Express网络集线器内)。然而本发明并不局限于这种应用,通过讨论在这一环境内的实例可以更好地获得对本发明各方面的理解。
根据本发明的一个实施例,集成的PCI Express端点设备模拟PCIExpress链路以模拟一个通过PCI Express兼容链路连接到一个端点设备的开关的下游端口。该PCI Express链路模拟一条PCI Express总线适合于与其进行通信的PCI类型链路(例如,PCI至PCI Express桥)。根据该方法,可以将PCI Express端点设备连接到PCI Express总线,同时模拟在端点设备与总线之间存在一条PCI Express兼容链路。另外,该方法促进实现经由开关的下游端口将PCI Express端点设备旁边的集成的PCI Express端点设备连接到总线。
在一种实施方案中,集成的PCI Express端点设备包括寄存器,在满足PCI Express标准要求的同时促进与PCI Express网络集线器的内部总线的连接。具体地说,PCI Express设备是一种用寄存器虚拟地表现为两个单独设备(下游开关端口和端点设备)的集成端点设备,促进与PCI Express技术规格要求的兼容性,其涉及出现在内部总线上的端点设备的一般性禁用。
根据软件透视图,模拟以下一个或多个寄存器:每一个虚拟设备唯一的寄存器;在虚拟设备之间共享的寄存器;只读所有的零的寄存器(看起来在软件透视图中存在却未被功能性实现);以及控制虚拟设备之间的虚拟链路的寄存器,利用最小链路模拟逻辑使其看起来像真实存在的链路。未被功能性实现的寄存器促进了PCI Express设备的实现,在通常不约束设备与网络集线器之间虚拟链路的简易性的同时还满足PCI标准要求。例如,实现非功能性的寄存器来模拟符合PCI Express标准的虚拟链路。在有些情况下,上述一个或多个寄存器包含显示以上类别组合的字段。在这一实例中,单个寄存器包括非功能性只读零字段/位和功能性使用的字段。
现在转到附图,图1显示了根据本发明另一实施例的为包含PCIExpress总线的PCI Express端点设备所配置的PCI Express装置100。装置100包括PCI Express开关(即开关的逻辑实现方式),其包括一个与总线132耦合的上游端口130和多个下游开关端口140、142、144、146和148。例如,可以在还包含了主机桥的部件内实现该开关的上游端口130和总线132。根据逻辑透视图,集成的PCI Express端点设备120包括通过虚拟链路110与PCI Express端点设备121耦合的开关146的下游端口。具体地说,集成的PCI Express端点设备120是一个单独的块,其适用于模拟按分层结构相连(通过虚拟链路110)的两个单独的块(下游端口146和PCI Express端点设备120)。借助于实例显示了另一个集成的PCI Express端点设备122,其特征与集成的PCI Express端点设备120相类似(模拟通过虚拟链路112与PCI Express端点设备123耦合的下游端口148)。
根据软件透视图,PCI Express端点设备121有效地显示为一个外部块,其通过专用PCI Express链路(虚拟链路110)连接到下游端口146(继而连接到内部总线132)。同时,显示为专用PCI Express链路的虚拟链路110具有不同于专用PCI Express链路的功能要求。例如,由于该链路是虚拟的,所以不要求横跨虚拟链路110进行串行连接,不要求提供错误恢复,而且不要求物理逻辑层或物理电子层功能横跨两个芯片。使用内部虚拟链路110和112减轻对管理和控制PCI Express链路通常所需要更多的功能性要求。
在一种实施方案中,虚拟链路110减少和/或消除一般使用专用PCIExpress链路实现PCI Express功能所需要的逻辑。例如,就如通常专用PCI Express链路所要求的,由虚拟链路110提供的与两个逻辑端点(下游端口146和PCI Express端点设备121)的处理层、数据链接层和物理层有关的功能都不是必须的。有关专用PCI Express链路实现的上述功能以及“PCI Express兼容”应用的更多信息可以参考2003年4月来自俄勒冈州波特兰市的PCI-SIG(PCI-特别兴趣工作组)的“PCIExpress Base Specification Revision 1.0a”。符合PCI Express基本技术规范的解决方案可以认为是“PCI Express兼容”。
在另一种实施方案中,集成的PCI Express端点设备120包括共享下游端口(146)和端点(121)功能的比特的配置寄存器。以这种方式共享比特促使在两个单独块之间使用真实的专用PCI Express链路的有效程度为无效,从而减少相对于这一专用PCI Express链路装置所显示的复杂性。根据该方法,要求相对较少的寄存器比特来保持与为了PCIExpress通信而实现的软件驱动器的兼容性。以下图4A-6讨论可以连同PCI Express装置100一起实现的寄存器和其他部件用于模拟部件、链路及其他目的。
图2显示了根据本发明的另一实施例为PCI Express集成设备配置的PCI Express装置200。图2显示的实施例与图1中显示的实施例相类似,具有通过单个虚拟链路210与总线耦合的多个PCI设备(而不是每一个虚拟链路将总线耦合到单个PCI端点设备)。开关的上游端口230通过PCI Express总线232与下游端口240、242、244和246耦合,其中下游端口246集成在集成的PCI Express端点装置220内。
集成的PCI Express端点装置220包括一个电路块,它模拟通过虚拟链路210和虚拟(PCI)总线252耦合的分立元件。具体地说,多个PCI设备包括通过虚拟总线252与PCI Express至PCI Express桥部件250耦合的设备260、262和264。PCI Express至PCI桥150通过虚拟链路210耦合到下游端口246。根据该方法,由于模拟部件和虚拟链路(以及总线)符合PCI Express要求,所以集成的PCI Express端点装置220可以在(内部)PCI Express总线232上存在。如以上结合图1的以上讨论,以类似于所示模拟部件的方式耦合到PCI Express总线的分立部件所要求的各种部件相对更加复杂,并且相应地需要比集成的PCIExpress端点装置220更多的资源。通过将这些部件(例如,寄存器)组合成一个单独的块,相对于实现包括单个块的相同设备,可以使用更少的部件。另外,可以实现一个相对简单的传统软件模型用于控制PCIExpress装置200,这在使用多个PCI设备时特别有用。
图3显示了根据本发明的另一实施例为PCI Express集成设备配置的PCI Express装置300。在该实施例中,PCI Express网络集线器(带有虚拟的PCI Express总线332)位于相对于PCI Express至PCI桥380的下一层。具体地说,PCI Express至PCI桥380通过PCI总线334与集成的PCI设备372、374和376以及集成装置320耦合。
集成装置320是单个块,其具有模拟通过虚拟链路310和PCIExpress总线332进行耦合的单独块的功能。具体地说,PCI至PCIExpress桥320通过虚拟链路310与开关的上游端口330耦合。上游端口330通过PCI Express总线332与下游端口340、342和344耦合。例如,可以以类似于有关图1中类似部件所讨论的方式实现其中各种部件。举例来说,可以以类似于虚拟链路110的方式实现虚拟链路310。另外,可以以类似于图1中的方式实现共享的配置寄存器(还如同以下关于图4A-6进一步描述的)。根据该方法,促进了PCI Express兼容解决方案,而且PCI Express类型软件应当成功地列举装置。
图4A-4C显示了根据本发明另一实施例的集成设备420的软件和实现视图。集成设备420包括模拟块,其包括通过虚拟链路410耦合的下游端口446和PCI Express端点421。例如,可以连同图1、2和3中分别显示的虚拟链路110、210和310以及它们连接的模拟块一同实现虚拟链路410。虚拟链路410表现成作为真实的PCI Express链路的软件,它包括相应表现为分立块的下游端口446和PCI Express端点421。可以将虚拟链路410置于低功率模式,表现为具有两组完整的配置寄存器并在各方面都表现成作为完全的功能性链路的软件。然而,不实现包含处理、数据链接和物理层的一般PCI Express部件。根据配置图,在它们那儿是模拟这些功能运行的小逻辑块。
根据软件透视图,图4B和4C所示的PCI Express链路的层被模拟至该软件看起来似乎是查看一个完全运行的链路的程度。例如,通过假设没有错误发生以及所有块总是在准备状态来简化该模拟。在某些情况下,为了减少模拟的复杂性而支持最小功能。举例来说,可以保留不支持槽与可选的功率管理以及使可选的扩展寄存器保留无效。
参照图4B,显示了图4A的集成设备420的下游端口446和PCIExpress端点设备410的软件视图,其包括下游端口配置寄存器472和PCI Express端点配置寄存器474。下游端口层包括适配器480、处理层481、数据链接层482和物理层483。PCI Express端点层包括物理层484、数据链接层485、处理层486和与IP 488(具有知识产权的应用块,例如视频设备、音频设备或盘控制器)耦合的适配器487。适配器480和487在IP总线与包之间进行转换,提供对配置寄存器的访问并产生用于中断的消息。
图4C显示了集成设备420的虚拟链路410的软件透视图,其包括适配器490和I.P.498,以及与适配器490耦合的虚拟链路配置寄存器476。虚拟链路配置寄存器476包括处理模拟寄存器491、数据链接模拟寄存器492、物理模拟寄存器493、物理模拟寄存器494、数据链接模拟寄存器495和处理模拟寄存器496。
每一个处理,数据链接和物理层都不执行(例如是无效块)而为了与PCI Express兼容而进行模拟。为了模拟数据链接层482和485,响应认定的链路失效情况,分别使适配器480和487失效(防止产生任何新的循环)。
为了模拟物理层483和484,产生一个PME_TO_Ack消息来支持允许网络集线器收集所有PME_TO_Ack并完成在软件视图所示分层结构中向上返回该集合版本(aggregate version)。举例来说,带有PME_TO_Ack消息的模拟包括一个由处于分层结构顶部的处理器发送的PME_Turn_Off消息启动的停止处理。每一个端点设备在其准备关闭时通过产生一个PME_TO_Ack消息来应答该PME_Turn_Off消息。当网络集线器的所有下游设备都应答了一个PME_TO_Ack消息时,利用单个PME_TO_Ack消息应答处理器(或其他上游设备)的该网络集线器就收集这些PME_TO_Ack消息。
在一种实现方案中,PCI Express网络集线器(例如,当按照图1实现时包括总线132)在假设虚拟端口不进行应答就消除对该端口的依赖性的情况下运行。举例来说,当一个特定端口支持一个非功能性设备,由于它总是准备好关闭,所以不必等待该非功能性设备准备好关闭。如上所述,在某些情况下,网络集线器在产生对一个上游设备的PME_TO_Ack消息之前不用等候该虚拟端口应答。物理层通电至一种就绪和配置状态,而且配置摘要中存在的许多常数都是随机的。在这方面,对虚拟设备一般不使用与典型的PCI Express实现有关的L1退出时间功能(使物理层从低功率状态恢复的时间)。物理层使转变无任何延迟,如同实际运行时间为零那样。有效状态情况是理论上的,如同该软件无视独立的有效状态功率管理;因此,忽略有效状态情况且不影响装置470的运行性能。实现PCI Express“D”状态(设置一种“L”硬件状态的软件状态)作为读/写寄存器,同时立即选择一种请求状态(支持D0和D3状态)。另外,一般不产生PCI Express类型请求“PM_Active_State_Request_L1”。
图5显示了根据本发明另一个实施例的虚拟链路410(例如,类似于图4C中的视图)的另一个软件实现视图。适配器590和I.P.598与虚拟链路配置寄存器576一起运行以模拟下游端口446和PCI Express端点设备421及其分隔它们的虚拟链路410。上行链路和下行链路模拟状态机592和594与配置比特相互作用用于模拟处理、数据链接和物理层功能。在某些情况下,上行链路和下行链路模拟状态机592和594被集成到一个对于所有层的单个模拟块中。
利用各种装置中的一个或多个装置实现上述及图中所示寄存器。在本发明的一个实施例中,组合一个或多个配置寄存器。参照图4B作为例子,可以组合处理层481与数据链接层482的寄存器。为了模拟目的而实现的非功能性寄存器和比特被故意设置为零,而不实现的寄存器故意返回零。
在一种实现方案中,将寄存器及伴随电路配置成在没有进行选择时产生一个零结果(即,一个未定义的或未选择的)。例如,可以通过将每一个多路信道上的一个输入指定零或者更简单地通过使用标准‘与’‘或,树选择寄存器来实现该方法。在该‘与’‘或’树中,一个寄存器具有其通过一个“与”门选择的输出。所有寄存器的输出被一起进行“或”运算,结果就是被选择的门。如果没有选择门,所有“或”输入为0,保证任何没有被实现的寄存器结果为零。类似地,实现的寄存器内的所有未实现比特将返回“0”。
以一种或多种方式选择将要实现的寄存器(例如,共享的,开关端口或设备寄存器)。例如,某些寄存器包括对开关端口唯一的寄存器和对设备唯一的寄存器。当配置周期为类型0且目的地址与开关端口的设备数量匹配时选择开关端口寄存器。当配置周期为类型1时选择设备寄存器,该设备寄存器在开关端口编程的总线范围内且与设备标识符(ID)匹配。以兼容PCI要求的方式转换类型1和类型0周期。通过对以上涉及开关端口和设备寄存器的两个机制实现“或”操作来选择共享的寄存器。
可以通过使用类似于上述的方法来实现的一类共享寄存器是厂商ID寄存器。当读取开关端口寄存器或设备寄存器时选择该寄存器。在寄存器表中显示了在D开关与设备列中具有X的单个输入项。类似地可以实现其他各种类型的共享寄存器。
图6显示了根据本发明另一个实施例的命令寄存器装置600。该命令寄存器用作两个分立的虚拟寄存器的一个实例(以类似于涉及分立的虚拟寄存器的方式容易实现其他类型的寄存器)。对于PCI Express来说,比特15∶11,9,7,5∶2是只读位而不被实现;因此这些比特总是返回所有零。比特10,中断使能,可以用来允许中断传播或禁止中断传播。禁止任何一个比特就会禁止中断传播。有关这些比特实现的更多信息可以参照上述的PCI Express基本技术规范。
对于每一个命令寄存器610和620,在硬件中都不实现RO 0(只读固定0输出)比特(实现使用的比特)。在某些情况下,显示48比特而仅仅实现10比特。在页顶部的寄存器610和620描述了表示在同一位置的两个不同寄存器的寄存器。当实现中断禁止功能时,设置PCI Express设备的命令寄存器内的INT DIS比特或在开关的下游端口的命令寄存器内的相同比特来阻塞该INT信号。在一种实施方案中,通过使用上述“或”门来实现,组合两个禁止信号以使得在认定两个禁止位或其中一个时都会阻塞INT。在“或”门后面的“与”门在置位一个或两个INT DIS比特时禁止INT。如果寄存器内的总线主控使能位都被置位(以上所示的两个输入与非门),总线主控使能就启动该设备的总线主控。总线控制寄存器620实现要实现的2个比特,其中之一的SERR还包括在所示另外两个控制寄存器内的控制比特。其中任何一个比特都可以阻塞信号系统错误输出,而与虚拟分层结构中哪里的SERR被禁止无关。
以下的表1显示了根据本发明另一个实施例通过使用共享的寄存器集合的方法。例如,可以连同上述的图6实现表1中所示的信息。
表1.共享的寄存器集合,开关的下游端口和包括虚拟链路的设备
地址 |
偏移量 |
寄存器 |
说明 |
D开关 |
设备 |
注意 |
0/1类型 |
0x00 |
0x00 |
VID |
厂商ID |
X |
X |
共享的RO寄存器 |
0x02 |
0x02 |
DID |
设备ID |
X | |
开关的D端口的设备ID |
0x02 |
0x02 |
DID |
设备ID | |
X |
设备的设备ID,节点1 |
0x04 |
0x04 |
CMD |
命令寄存器 |
X | |
具体见文本 |
0x04 |
0x04 |
CMD |
命令寄存器 | |
X |
具体见文本 |
0x06 |
0x06 |
STS |
状态寄存器 |
X | |
具体见文本 |
0x06 |
0x06 |
STS |
状态寄存器 | |
X |
具体见文本 |
0x08 |
0x08 |
RID |
修正ID |
X |
X |
共享的 |
0x09 |
0x09 |
CC |
分类符号 |
X |
X |
共享的 |
0x0C |
0x0C |
CLS |
超高速缓冲存储器线 | | |
RO 0 |
0x0D |
0x0D |
MLT |
主延迟时间 | | |
RO 0 |
0x0E |
0x0E |
HT |
标题类型 | | |
RO 0 |
0x0F |
0x0F |
BIST |
内置自测试 | | |
RO 0 |
0x10 |
0x10 |
BAR0 |
基地址寄存器0,固定0 | | |
RO 0 |
0x10 |
BAR0 |
基地址寄存器0,用户定义常数 | |
X | |
0x14 |
0x14 |
BARl |
基地址寄存器1,固定0 | | |
RO 0 |
0x14 |
BARl |
基地址寄存器1,用户定义常数 | |
X | |
0x18 |
0x18 |
Pri-Bus# |
主总线编号,RW,缺省0 |
X | | |
0x18 |
BAR2 |
基地址寄存器,用户定义 | | |
RO 0 |
0x19 |
0x19 |
Sec-Bus# |
次总线编号,RW,缺省0 |
X | | |
0x19 | |
保留,所有零 | | |
RO 0 |
0x1A |
0x1A |
Sub-Bus# |
下级总线编号,RW,缺省0 |
X | | |
0x1A | |
保留,所有零 | | |
RO 0 |
0x1B |
0x1B |
Sec-LT |
次等候时间,保留,所有零 |
X | |
RO 0 |
0x1B | |
保留,所有零 | | |
RO 0 |
0x1C |
0x1C |
I/OBase |
I/O基础,仅仅是软件分配 |
X | | |
0x1C | |
保留,所有零 | | |
RO 0 |
0x1D |
0x1D |
I/OLimit |
I/O限制,仅仅是软件分配 |
X | | |
0x1D | |
保留,所有零 | | |
RO 0 |
0x1E |
0x1E |
Sec-STS |
次总线状态 |
X | | |
0x1E | |
保留,所有零 | | |
RO 0 |
0x20 |
0x20 |
MEMBase |
存储器基础,RW,通过开关使用 |
X | | |
0x20 | |
保留,所有零 | | |
RO 0 |
0x22 |
0x22 |
MEMLimit |
存储器限制,RW,通过开关使用 |
X | | |
0x22 | |
保留,所有零 | | |
RO 0 |
0x24 |
0x24 |
PMEMBase |
可预取存储器,固定所有零 | | |
RO 0 |
|
0x24 | |
保留的,所有零 | | |
RO 0 |
0x26 |
0x26 |
PMEMLimit |
可预取存储器限制,固定所有零 | | |
RO 0 |
0x26 | |
保留,所有零 | | |
RO 0 |
0x28 |
0x28 |
PMEMBase |
可预取存储器基础,(高32比特)固定0 | | |
RO 0 |
0x28 |
CIS |
卡信息结构,不使用,固定0 | | |
RO 0 |
0x2C |
0x2C |
PMEMLimit |
可预取存储器限制,(上面的32比特) | | |
RO 0 |
0x2C,0x2E |
SVID,SID |
子系统厂商ID,子系统ID | |
X |
常数ID |
0x30 |
0x30 |
I/OBase,I/OLimit |
I/O基础(高16比特),I/O限制(高16比特),RW,用在开关中 | | |
RO 0 |
0x30 |
ROM BAR |
ROM基地址,不使用 | | |
RO 0 |
0x34 |
0x34 |
CAP PTR |
容量指针 |
X |
X |
共享的 |
0x35-0x37 |
0x35-0x37 | |
保留,所有零 | | |
RO 0 |
0x38 |
0x38 |
ROM BAR |
扩展ROM基地址,保留,所有零 | | |
RO 0 |
0x38 | |
保留,所有零 | | |
RO 0 |
0x3C |
0x3C |
INTLINE |
中断线 | | |
RO 0 |
0x3D |
0x3D |
INT PIN |
中断管脚 | | |
RO 0 |
0x3E |
0x3E |
BCR |
桥控制寄存器 |
X | | |
0x3E |
0x3E |
MIN GNT |
最小许可,不使用 | | |
RO 0 |
0x3F |
0x3F |
MAX LAT |
最大等候时间,不使用 | | |
RO 0 |
MSI |
0x40 |
0x00 |
消息控制 | |
X | | |
0x44 |
0x04 |
消息地址 | |
X | | |
0x4B |
0x0B |
消息高地址 |
消息高地址 |
X | | |
0x4C |
0x0C |
消息数据 |
消息数据 |
X | | |
PCI Express性能 |
0x50 |
0x0 |
PCIExpress性能列表寄存器 |
PCI Express性能列表寄存器 |
X |
X |
共享的 |
0x52 |
0x2 |
PCIExpress性能寄存器 |
PCI Express性能寄存器 |
X | |
共享的大多数比特,端口类型不同 |
0x52 |
0x2 |
PCIExpress性能寄存器 |
PCI Express性能寄存器 | |
X |
0x54 |
0x4 |
设备性能寄存器 |
设备性能寄存器 |
X |
X |
共享的RO比特,最大有效负载,延迟字段等于两个块 |
0x58 |
0x8 |
设备控制寄存器 |
设备控制寄存器 |
X |
X |
比特必须设定为相同,因此共享事件控制。许多比特是固定的RO。假定没有错误(无链路) |
0x5A |
0xA |
设备状态寄存器 |
设备状态寄存器 | | |
RO 0(假定没有错误) |
0x5C |
0x0C |
链路性能 |
链路性能 |
X |
X |
共享RO伪字段 |
0x60 |
0x10 |
链路控制寄存器 |
链路控制寄存器 |
X |
X |
共享比特4为RW但为空。其他的是内容 |
0x62 |
0x12 |
链路状态寄存器 |
链路状态寄存器 |
X |
X |
RO比特,共享 |
0x64 |
0x14 |
槽性能 |
槽性能 | | |
RO 0 |
0x68 |
0x18 |
槽控制 |
槽控制 | | |
RO 0 |
0x6A |
0x1A |
槽状态 |
槽状态 | | |
RO 0 |
0x6C |
0x1C |
启动控制 |
启动控制 |
X | |
PMEint使能比特为仅仅需要的比特 |
0x1c |
Na |
保留,所有的零 | | |
RO 0 |
0x70 |
0x20 |
启动状态 |
启动状态 |
X | | |
0x20 |
na |
保留,所有的零 | | |
RO 0 |
电源 |
0x74 |
0x0 |
电源管理性能 | | | |
不需要 |
0x78 |
0x4 |
电源管理状态/控制 | | | |
不需要 |
卖方说明 |
卖方说明不需要 |