了解PCIExpress的基本工作原理2009-12-2821:06从并行转向串行PCIExpress®(或称PCIe®),是一项高性能、高带宽,此标准由互连外围设备专业组(PCI-SIG)制订,用于替代PCI、PCIExtended(PCI-X)等基于总线的通讯体系架构以及图形加速端口(AGP)。转向PCIe主要是为了实现显著增强系统吞吐量、扩容性和灵活性的目标,同时还要降低制造成本,而这些都是基于总线的传统互连标准所达不到的。PCIExpress标准在设计时着眼于未来,并且能够继续演进,从而为系统提供更大的吞吐量。第一代PCIe规定的吞吐量是每秒2.5千兆比特(Gbps),第二代规定的吞吐量是5.0Gbps,而最近公布PCIe3.0标准已经支持8.0Gbps的吞吐量。在PCIe标准继续充分利用最新技术来提供不断加大的吞吐量的同时,采用分层协议也便于PCI向PCIe的演进,并保持了与现有PCI应用的驱动程序软件兼容性。虽然最初的目标是计算机扩展卡以及图形卡,但PCIe目前也广泛适用于涵盖更广的应用门类,包括网络组建、通信、存储、工业电子设备和消费类电子产品。本白皮书的目的在于帮助读者进一步了解PCIExpress以及成功PCIe成功应用。PCIExpress基本工作原理拓扑结构本节介绍了PCIe协议的基本工作原理以及当今系统中实现和支持PCIe协议所需要的各个组成部分。本节的目标在于提供PCIe的相关工作知识,并未涉及到PCIe协议的具体复杂性。PCIe的优势就在于降低了复杂度所带来的成本。PCIe属于一种基于数据包的串行连接协议,它的复杂度估计在PCI并行总线的10倍以上。之所以有这样的复杂度,部分是由于对以千兆级的速度进行并行至串行的数据转换的需要,部分是由于向基于数据包实现方案的转移。PCIe保留了PCI的基本载入-存储体系架构,包括支持以前由PCI-X标准加入的分割事务处理特性。此外,PCIe引入了一系列低阶消息传递基元来管理链路(例如链路级流量控制),以仿真传统并行总线的边带信号,并用于提供更高水平的健壮性和功能性。此规格定义了许多既支持当今需要又支持未来扩展的特性,同时还保持了与PCI软件驱动程序的兼容性。PCIExpress的先进特性包括:自主功率管理;先进错误报告;通过端对端循环冗余校验(ECRC)实现的端对端可靠性,支持热插拔;以及服务质量(QoS)流量分级。而一个经简化的系统拓扑结构包括了4种功能类型:根联合体、交换器、端点和桥接器,如图1所示。每条虚线均代表着2个PCIe设备之间的一条连接,这种连接被称为链路。根联合体用于初始化整个PCIe结构并配置每条链路。根联合体通常用于将中央处理器(CPU)与其它3项功能之中的一个或多个相连接,包括PCIe交换器、PCIe端点和PCIe-PCI桥接器。PCIe交换器用于将数据向下游路由给多个PCIe端口,以及从每个独立端口将数据向上游路由至单一的根联合体。PCIe交换器也可以从一个下游端口灵活地向另一个下游端口路由数据(对等),不再局限于传统PCI系统所要求的严格的树形结构。端点通常驻留在应用内,用于在系统中将应用连接到PCIe网络。端点具有请求和完成PCIe事务处理的功能。此系统内的端点数量通常多于其它任何类型的PCIe组件。桥接器用于将PCIe与其它PCI总线标准(如PCI/PCI-X)相连接,适用于那些同时采用了这些体系架构与PCIe的系统。PCIe协议规格PCIe规格内所定义的此协议遵循的是开源促进会(OSI)模型。此协议分隔成5个基本层,如图2左侧所示。本节对机械层和物理层进行了综述;后续各节将针对链路层、事务处理层和应用层进行说明。机械层用于定义机械环境,如接头、插卡形状系数、卡检验和热插拔要求等。在图2的右侧,我们将其余层进行了展开,以便更精确地显示较低层是如何映射到物理硬件实现层的。如图所示,物理层可以分割成2个子层:电气层和逻辑层。而有一些公司已经在电气层和逻辑层之间定义和采用了一种接口,这种接口称为PCIExpress物理接口(PIPE)。PIPE接口让设计方案能够采用一种标准接口和/或采购多种能够配合运行的组件,甚至可以向多个供货商进行采购。物理层的电气子层用于实现各种模拟元器件,包括收发器、模拟缓冲器、串化器/解串器(SerDes)和10位接口。物理编码子层(PCS)用于每一个8位数据字节与10位代码之间的编码/解码。这种编码功能不仅能对有效字符进行校验,而且还限制了所发送的0和1数量之间的差异度,从而在发送器与接收器之间保持了一种直流平衡度,进而显著增强了电磁兼容性(EMC)以及电气信号性能。物理层内的PIPE接口的另一个方面包括了链路训练和状况状态机(LTSSM)、通道间去偏移(laneto-lanede-skew)、特殊序列检测和生成,等等。在物理硬件方面,从串行引脚至PIPE接口的各层总称为PHY,而从PIPE接口至应用层的各层总称为数字控制器。任意给定PCIe链路的每一端均存在一个PHY和数字控制器。图3显示了从图1所定义的子系统内插入到根联合体和端点的PCIePHY和控制器。端点采用了一个端点端口,而根联合体采用了一个根端口。此图显示了每一个扩展到各种单独的PHY和控制器功能的端口类型。正如上文所述,2个端口之间的虚线代表着链路。PCIe链路是单向的,并采用了低压差分信号。PCIe规格定义了链路可以包含多达32个并行通道,用于将PCIe1.x(2.5Gbps)链路的吞吐量扩展至80Gbps,或将PCIe2.0(5.0Gbps)的吞吐量扩展至160Gbps。同一链路内的每个线路(Lane)均提供了自己的内嵌时钟信号,因而无需在PC电路板上实现线路长度匹配——这种匹配是以前PCI接口为了保持时序所必需的。下面两节更深入地探讨了PHY和控制器的设计问题。PCIeSerDes设计难题为PCIe设计PCIePHY对于设计人员尤有难度,原因在于:串行至并行的数据转换要求采用先进的模拟设计方案。模拟设计在各种制程技术之间不可移植,所以必须针对用于制造芯片的每一种新制程技术重新设计PHY。高速本身就已经属于设计难题,而模拟链路增加了设计的复杂度,更加剧了设计难度。例如,由于信号完整性和噪声会造成性能降级,而这种降级问题必须得到解决。PHY必须通过严格的电气和兼容性测试来确保与其它设备的互操作性。随着线路速率的增加,PHY不仅在设计上的难度更大,而且在集成时也必须十分谨慎,以满足在吞吐量超过1Gbps时出现的信号完整性问题。高速条件的封装和电路板设计难度也大幅提高,经常导致项目延迟。此外,高性能PHY的设计也要求设计人员在高速模拟通信领域里具有高级专业经验。这些通信性能还十分依赖于设备的生产制程,因此设计人员必须对基本设备的物理特性有一定的了解。这样的专业经验只有通过大量的设计实践来获得。PHY不仅在开发上存在难度,而且还必须能够与其它公司设计的PCIe接口实现互操作。因此,PCI-SIG提供了兼容性测试认证大会(workshops),通常称为“plugfests”,来测试一项设计方案对规格的符合性以及与其它设备的互操作性。为什么PCIe的工程设计难度要大得多呢?图4显示了在高速设计方案中这些问题的实例以及标准的FR4电路板材料对于信号的影响度。此图左侧显示了一个1.25Gbps数据流和一个5Gbps数据流的二进制眼图,并对应于通过26英寸的标准FR4电路板材料进行传输。右侧的对应二进制眼图表明,目的地处的信号性能出现了衰减。而1.25Gbps数据流在这种传输路程中保存得非常完好,但5Gbps眼图的大小和清晰度均出现了显著的衰减,这是因为低成本FR4基底材料以及互连线材料在大于1GHz的频率下所发生的介电损失现象而造成的。这种损失现象会随着频率增加而加大,导致在1-0-1-0位流中出现不能接受的畸变现象(实际上交流信号),但一串全部是1或全部是0(实际上直流信号)可以成功地发送。此项解决方案的目标在于通过提升更高频率(交流)信号相应于较低频率(直流)信号的幅值来改善综合的信噪比,这种过程称为预加重(pre-emphasis)。另外一种方式是,也可以对较低频率的信号实现“去加重”。在发送器处采用去加重处理可以在目的地处获得更加干净的眼图,从而以充分的余量满足规格要求(如图5所示)。采用预加重和其它模拟设计技巧可以提供更为纯净的信号。但是,即使有一个明显很纯净的眼图的信号也仍然必须满足PCIe规格所要求的电压裕量要求。在图6中,左图代表了PCIe规格,中间的菱形描述了对眼图张开度的最低要求。位于中间的眼图代表了PCIe规格的要求(如图中的菱形所示)并显示了一种能够超过这些要求的合格眼图开度。在右侧图中,波形未能满足由这个菱形所代表的要求。这点有什么重要作用呢?高速串化器/解串器测试通常会采用一种回送模式,以确保PHY能够产生纯净的眼图。但是,即使某个设备拥有纯净的眼图,它也仍然有可能通过回环测试,但并不能够可靠地与系统内的其它PCIe设备进行通信。很明显,回环测试并不足以确保PHY能够满足PCIe规格的电气要求。为了克服回环测试的这种局限性,Synopsys已经在自己的高速PHY设计中实施了电路板上诊断,提供了对于链路特性和性能的实时观察能力。这种诊断可以查明并量化各种信号完整性问题,例如过大的抖动和芯片上的电压裕量不足,而这些是简单的“通过/未通过”式回送诊断所无法查明的。但是,要解决上面的PHY开发难题还受到了其它限制。这些难题必须能够在经济可行的芯片占用面积下以及功耗预算范围内得到解决。较小的内核面积以及低功率属于强制性条件。PCIExpress数字控制器的设计难题PCIe的复杂度远高于PCI,其接口复杂度大致高出10倍,而且门电路数量(不包括PHY在内)约多出7.5倍。PCIe还定义了一系列不同的端口类型,包括:根联合体、交换器、桥接器和端点。导致事情更加复杂化的还有,对于每一种PCIe端口类型,“同一方案不能适用于所有端口”。举例来说,对于1G以太网控制器的1个PCIe附加卡的要求可以采用一个拥有32位内部数据通路的单通道(x1)端点来予以满足,而一个机顶盒就有可能要求采用1个64位的内部数据通路并要提供根联合体和端点双功能。有许多因素会提高PCIe接口的复杂度,包括某一特定PCIe应用可能需要的一些可选特性。在实现PCIe接口时,必须格外注意确保设计方案中只包括了必需的特性,以避免不必要地增加门电路数量、面积以及功耗损失。每一种PCIe端口类型均存在一系列的必要特性,但也有一系列的系统级问题必须得到优化和解决。这些系统级的决策会在很大程度上影响到接口性能以及门电路的数量。这些决定不属于本白皮书的范围,也不准备在本白皮书内解决。PCIe数据包在仔细探讨每个协议层的各种不同特性之前,首先要了解数据在PCIe网络内的传输方式,这一点是很重要的。PCIExpress采用了数据包方式在系统内传输数据,并用于数据接口与PCIe设备的各层之间。应用层用于发起事务处理,而事务处理层用于将应用程序的请求转换成PCIe事务处理包。数据链路层用于为这个包添加一个序列编号和链路循环冗余校验码(LCRC)。数据链路层还确保了双向事务处理能够正确地得到接收(参见图7)。最终,物理层能够通过PCIe链路发送事务处理。控制器物理层用于与PHY的接口,并用于管理许多能够发起链路并构建数据包的功能。一些特殊序列用于建立物理链路、进入和退出低功耗链路状态等。物理层的接收部分负责:通道映射、通道间去偏移,适用于由多条线路构成的链路。数据解扰数据包检测和解帧检查特殊数据包序列,例如TS1、TS2、跳过和电气空闲。物理层的发送部分负责:采用特殊符号插入来对数据包进行封帧,例如采用STD或SDP符号来标志数据包的开始,用END符号来标志结尾。数据加扰链路控制–初始化、带宽和线路反转(lane-reversal)协商。多条线路发送控制。生成跳过序列来补偿链路两端的时钟PPM差异。以下各节对这些概念进行了更为详尽的描述:线