pcie总线工作机制(PCIe技术专题PCIe总线物理层)

在数字通信设备中,PCIe总线是每个硬件工程师必定会遇到高速总线之一,包括华为、博通、Cavium、高通、联发科在内的顶级IC设计大厂,其主流处理器几乎都有集成PCIe总线接口,PCIe总线速率高,每个PCIe具有独立的地址,扩展性非常强。

PCIe总线外部硬件接口非常简单,1X PCIe总线就是两条差分对线,正是因为外部线路简单,当PCIe总线出现问题时(例如:PCIe设备扫描不到、高低温环境下PCIe总线down掉等),大多数硬件工程师不知道该如何着手进行定位分析。

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(1)

PCIe1.0 1X Lanes连接模型

笔者认为,作为一名硬件工程师必需熟练掌握PCIe总线架构,以及PCIe总线的物理层特性,只有把PCIe总线的物理层特性搞懂了,在遇到PCIe总线问题才能快速定位出原因。下文将对PCIe总线进行详细的讲解,希望可以帮助到正在学习路上的同学。

--------------------------------------黄金分过线---------------------------------------------

1.PCI-E系统架构

PCI Express的基本结构包括根组件(Root Complex)、交换机(Switch)和各种终端设备(Endpoint)。根组件可以集成在北桥芯片中,用于处理器和内存子系统与I/O设备之间的连接,而交换器的功能通常是以软件形式提供的,它包括两个或更多的逻辑PCI到PCI的连接桥(PCI-PCI Bridge),以保持与现有PCI兼容。当然,像PCI Express-PCI的桥设备也可能存在。在PCI Express架构中的新设备是交换机(Switch),它取代了现有架构中的I/O桥接器,用来为I/O总线提供输出端。交换器支持在不同终端设备间进行对等通信。

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(2)

PCIE系统架构

2.PCI-E体系结构

PCI Express体系结构采用分层设计,就像网络通信中的七层OSI结构一样,这样利于跨平台的应用,主要包括物理层(Physical Layer)、数据链路层(Data link layer)、处理层(transaction layer)。

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(3)

PCIE OSI结构

3.物理层

物理层是最低层,它负责接口或者设备之间的链接,是物理接口之间的连接。

物理层决定了PCI Express总线接口的物理特性,如点对点串行连接、微差分信号驱动、热插拔、可配置带宽等。初始的单一串行PCI Express链接包含两个低压差分驱动信号对(4线的接收和发送对)的双向连接,即“发送”和“接受”信号。数据时钟使用8/10b解码方式来达到相当高的数据速率,时钟信息直接被编码成数据流,比起分离信号时钟更好。微差分信号受两个不同方向的电压驱动。双向连接允许数据在两个方向上同时传输,类似于全双工连接。

物理层包括了两个子层:逻辑子层和电气子层,如下:

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(4)

逻辑子层主要有两个部分:一个发送部分用来为电气子层发送从数据链路层来的信息作准备,一个接收部分在降数据传给数据链路层之前区分并且准备相应的信息。

电气子层包含一个发送器和接收器。发送器接收从逻辑子层来的符号,并串行化发送到通道(Lane)上,接收器从通道上接收串行符号。反串行化,传送给逻辑子层。

3.1 编码

PCI-E采用8b/10b编码技术,8bit的数据字节被分成3bit和5bit,分别映射到4bit码组和6bit码组。另外还有一位控制bit用来区分8b/10b发送码组中的12个特殊符号(Special Symbols)。如下图所示:

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(5)

3.2 串行化和反串行化(De-serialization)

符号(Symbol)中的各位是以bit a开始,bit j结束的顺序放到Lane上的。如下:

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(6)

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(7)

3.3 用于组帧和链路管理的特殊符号(K码组)

特殊符号主要用于各种链路管理机制,也可用来组帧(frame) DLLPs和TLPs。PCI-E使用的特殊符号如下:

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(8)

3.4 组帧(Framing)和符号的应用

对于Lane来说,有两类组帧和符号的应用情况,一类是ordered set,另一类是TLP和DLLP包。Ordered Set通常在每个Lane上串行的传输,即在多个Lane的Link下,整个ordered set同时出现在所有的Lane上。

组帧的机制使用特殊符号K28.2“SDP”来定义DLLP的开始[a1] ,K27.7“STP” 来定义TLP的开始[a2] ,特殊符号K29.7“END”来定义TLP或者DLLP的结束。

符号流中的符号是以这样的方式映射到Lane中的,第一个符号(表示字符0)被放到Lane0,第二个符号放到Lane1,依此类推。当没有包信息或者ordered set要传输时,发送器处于逻辑空闲状态(Logical Idle state)。在这期间必须发送空闲(idle)数据,空闲数据必须包含数据字节0(0x00),并与TLP和DLLP数据字符一样经过扰码器处理,按照8b/10b编码。同样,当接收器没有接收任何包信息或者ordered set时,它也处于逻辑空闲状态,必须接收前面描述的空闲数据。

对于xN的link,当N为8或者更大时,如果END或者ENDB符号放在 LaneK,且K不等于N-1,并且在Lane K 1没有跟着STP或者SDP符号,那么PAD符号必须被填充到Lane K 1到Lane N-1。

3.5 链路初始化和训练

链路训练(link training)是一系列的物理层的初始化,链路训练成功之后,设备间才能够实现数据的传输。链路训练时在Reset之后由物理层自动完成,不需要软件的配置。LTSSM (Link Training and Status State Machine )是物理层的一个子模块,专门用来实现了链路的初始化和训练。

训练序列由用于初始化位对齐,符号对齐,交换物理层参数的ordered set组成。这些ordered set不经过扰码器但会经过8b/10b编码。训练序列(TS1或者TS2[a3] )连续发送并且只能被SKP中断。

接收器可以通过查看训练序列的Symbol 6-15来确定Lane极性反转[a4] ,在出现极性反转的情况下,对于TS1,Symbol 6-15接收到的将是D21.5,而不是D10.2;对于Ts2,将是D26.5而不是D5.2。在发现极性反转的情况,接收器将反转接收到的数据,而发送器不能反转发送数据。快速训练序列(FTS)是从L0s到L0转换时用于位和符号lock。主要是接收器用于发现从电气空闲(Electriacal idle)退出,并将接收器的位/符号接收电路与输入数据对齐。一个FTS训练序列是由一个K28.5符号和三个K28.1符号组成。

链路训练的过程如下:

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(9)

各个状态的含义如下:

⑴ Detect

发送端通过对电容器充电来检测接收端是否存在设备。

⑵ Polling

发送训练ordered sets,并对接收到的训练ordered set做出响应。这个状态中主要完成bit lock和symbol lock的确定,Lane极性配置,Lane数据速率的确定。

·Bit Lock: 同步时钟。发送方向接收方发送训练序列ordered set(TS1和TS2),经过8/10编码后的序列中携带了发送方的时钟。接收方接收到这些序列以后,经过PLL实现和发送方时钟的同步。

·Symbol Lock:发送方发送的数据是连续的数据流,接收方为了把这些数据流识别成10bit的信号(Symbol),需要进行信号锁定(Symbol Lock)。TS1和TS2序列中的COM字段8/10编码后会变成如下的形式:0011111010b 或者1100000101b(注:只有COM字段编码后会变成这种格式,其它的数据流中不会出现这种格式)。接收方在收到多个COM之后,会实现和发送方的同步,这样就可以数据流识别成10bit的信号了。

·Lane Polarity:参见前面。

· Lane Data Rate:训练序列ordered set中的特定域用来广播所支持的数据速率,在polling过程中,link两端所支持的更高的速率将会被初始化。

·Compliance testing :主要测试发送方和接收方的电压,噪声等的误差是否可以容忍。

⑶ Configuration

在配置状态下,发送器和接收器将以协商的速率发送和接收数据。通过宽度和Lane协商,一个端口的Lanes被配进一个link。

·Link width:带宽的自动协商

·Lane reversal:链路极性反转。

·Lane-to-Lane de-skew:宽度大于1的情况下,缓存中的单个报文会以byte为单位从不同的lane发送出去,但是这些Byte到达接收端的时间可能会不同步,Lane-to-Lane de-skew通过补偿的方法来解决上面不同步的问题。De-skew的机制是在训练序列过程中发送COM符号,或者对一个link中的所有Lanes发送SKP ordered set。在Configuration、Recovery、L0s状态中都必须执行Lane-to-Lane de-skew。

⑷ L0状态:链路成功后,正常工作的状态。

⑸ Recovery:当由于错误使得链路不能正常工作时就会从L0状态进入Recovery状态;当link处于L1状态,且在转换到L0状态前需要重新初始化,也会进入Recovery状态。在Recovery状态,bit lock和Symbol lock会被重新确认,Lane-to-lane de-skew可以被执行。

⑹L0s:这是一个省电状态,允许link在没有经过Recovery快速(50ns)进入和退出省电模式。L0s的入口是接收到Electrical Idle ordered set。

⑺L1:与L0相比,L1可以节省更多的电源消耗,但从L1恢复需要更长的时间。

⑻L2:这是最小电源消耗的状态,大多数的接收和发送逻辑都被Powered down。Vaux电源是可用的,但主电源和时钟并不保证。在使用Beacon信号的情况下必须保证upstream口能支持唤醒机制并发出信号,downstream口能检测到信号。

⑼Loopback:主要用于测试和错误隔离。测试可以是基于Lane或者整个link。Loopback主设备发送TS1[a5] 给loopback从设备,从设备接收到两个连续的TS1序列后进入loopback。

⑽Disable:使配置好的link被disable(比如由于意外拔走)。

⑾Hot Reset:当上层要求或者接收到两个Hot Reset位被置位的TS1序列时进入。

链路训练过程中几个关键步骤说明如下:

⑴Detect

从Fundamental Reset、hot reset,L2、Loopback、Disable、Polling、Configuration、Recovery状态都可以进入Detect.Quiet状态。在Detect.Quiet状态下:

·发送器处于Electrial Idle状态

·发送器驱动一个DC共模电压

·初始的数据速率为2.5Gbit/s(Generation 1)

·往数据链路层发送的是Linkup=0

12ms的时间溢出或者link退出Electrical Idle状态后进入Detect.Active。在Detect.Active状态下,发送器发现在link的所有Lane上是不是有接收器。发送器先在所有的Lane上驱动一个稳定的共模电压,这个电压可以是VDD,GND或者这两个之间的其他值。发送器然后驱动另外一个DC共模电压,基于D 和D-信号线充电到新的电压的速率就可以发现接收器。当另外一端有接收器连接时所需要的充电时间将比没有接收器连接时要长。[a6]

如果没有接收器被发现,将从Detect.Active状态回到Detect.Quiet状态,如果有接收器被发现,那么下一个状态将是Polling。

⑵数据速率的确定

在下列条件下会进入Polling.Speed:

·接收到8个连续的TS2 ordered set,并且

·在接收到一个TS2后发送16 TS2 ordered set,并且

·至少有一个Lanes发送和接收时TS2 ordered set中的Data Rate Identifier高于2.5Gb/s。

在Polling.Speed状态中,发送器进入Electrical Idle状态至少50 UI(20ns),但不长于2ms。在进入Electrical Idle状态前,发送一个Electrical Idle ordered set。在这状态中,所有Lanes中的数据速率将改变到两端link共同支持的最高速率。

⑶Link number和Lane number的确定

Link numbering和Lane numbering是在Configuration.Rcvrcfg状态机中由upstream设备发起的,Root Complex和switch downstream口都可以发起改过程,端点和upstream口是downstream设备,不能发起该过程。

下面分三种情况介绍Link number和Lane number的确定。

①如下图所示,设备A可以支持x4,x2,x1,设备B可以支持x4,x2,x1,与每个Lane相连的管脚物理上编为0,1,2,3,虽然逻辑Lane number可能会在configuration.RcvrCfg状态中改变。

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(10)

Link number协商的过程如下:

1)Upstream设备A发送TS1 ordered set,其中的每组Lanes的Link number设为一个设备相关的初始值,Lane number设为PAD符号。对于图中设备,将往四个Lanes上发送四个TS1 ordered set,四个TS1 ordered set每个包含Link number n,n,n,n[a7] ,Lane number域设为PAD。虽然设备A也支持x1,x2,但总是以假设使用最大的Lanes数开始。

2)设备B从所有接收到TS1 ordered set的Lane(图中为4个)上返回TS1 ordered set,每个lane上的TS1 ordered set包含link number n,Lane number域为PAD。设备A将在每个Lane上看到link number为n的TS1 ordered set,因此可以确定它的四个Lanes连到一个downstream设备上了,该Link的number为n,Link也将被配置成一个x4 link。

Lane number协商的过程如下:

3)Upstream设备A往所有相连的Lane上发送TS1 ordered set,Link number为前面配置的Link number,Lane number将不再是PAD,而是每个Lane不同的一个从0开始的值。对于上图,将发送Link number为n,Lane number分别为0,1,2,3的TS1 ordered set。

4)Downstream设备B以接收到的TS1 ordered set相同的Link number和Lane number返回TS1 ordered set。如果downstream设备的lane是反的,并且不支持Lane Reversal特性,那么它可以返回包含它想要的Lane number的TS1 ordered set,通常,Upstream设备会支持反转,因而将接受downstream设备想要的Lane number。

最后设备A和设备B将通过交换TS2 ordered set确认前面协商的Link number和Lane number。

②如下图所示,设备A支持一个x4,或者两个x2,x1,两个Port都支持x2,并且每个Port的物理管脚号为0,1。设备B,C都是单Port支持x2,Port的物理管脚number为0,1。

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(11)

Link number协商的过程如下:

1)设备A往所有的四个Lane上发送TS1 ordered set,每个Lane包含link number n,n,n 1,n 1,[a8] Lane number域为PAD。

2)设备B跟C在每个Lane上返回TS1 ordered set,设备B的Link number域值为n,设备C为n 1,Lane number设为PAD。设备A从两个Lane接收到Link number为n的TS1 ordered set,从另两个Lane接收到Link number为n 1的TS1 ordered set。这样两个up随同ream口和downstream口的Link状态寄存器中的Link width域将被改成000010,表示一个x2 link。

Lane number协商的过程如下:

3)设备A知道它的Lane被分成两个link,因而将往两个Lane发送link number为n的,Lane number一个为0,一个为1的TS1 ordered set,另两个发送Link number为n 1,Lane number一个为0,一个为1的TS1 ordered set。

4)Downstream设备B和C返回与接收到的TS1 Ordered set中相同Link number和Lane number的TS1 ordered set。反转的情况与前一个例子一样处理。

最后,设备A和设备B/C通过交换TS2 ordered set确认协商的Link number和Lane number。

③如下图所示,设备A支持一个x4或者两个x2,或者两个x1,设备B支持x4,x2,x1,管教物理上编为3,2,1,0,在这个例子中假设设备B不支持Lane反转,A支持。

pcie总线工作机制(PCIe技术专题PCIe总线物理层)(12)

Link number协商的过程如下:

1)设备A往四个Lane上发送四个TS1 ordered set,分别包含Link number n,n,n 1,n 1,Lane number都为PAD。

2)设备B从每个Lane上返回TS1 ordered set,Link number都是n,Lane number都初始化为PAD。设备A在四个Lane上都看到Link number为n的TS1 ordered set,就知道它的四个Lane是连到一个downstream设备的,Link number应该为n。

Lane number协商的过程如下:

3)设备A往四个Lane上发送Link number为n,Lane number分别为0,1,2,3[a9] 的TS1 ordered set。

4)Downstream设备B从相连的Lane上返回TS1 ordered set,Link number为n,Lane number与接收到的一样,当然如果是Lane反转的情况并且B不支持Lane反转,那么TS1 ordered set 中的Lane number将是反的(从左到右为3,2,1,0),因为upstream设备A支持Lane反转,因此它将接受Lane反转。[a10]

最后设备A和设备B通过交换TS2 ordered set确认协商的Link number和Lane number。

[a1]对于宽度大于x1的情况,当从逻辑空闲状态开始发送DLLP时,SDP符号必须放在Lane0。

[a2]对于宽度大于x1的情况,当从逻辑空闲状态开始发送TLP时,STP符号必须放在Lane0。

[a3]具体定义可以参见规范1.1第171页。

[a4]D 和D-交换

[a5]Loopback位要置位

[a6]因为充放电的时间常数的计算为t=RC,有接收器存在时的C值比没有接收器存在时要大,因为有接收器存在时必须加上耦合电容的值。

[a7]N的值为0-255,是一个logical link number,并不是存储在配置寄存器中,而是由设计hard-wired,与Link Capability Register中的Port number域无关。

[a8]通过使用strapping option(或者按默认值),设备A在发送TS1 ordered set时报告它的两个x2 port,以此开始Configuration.RcvrCfg。

[a9]见图,从左到右

[a10]如果设备A不支持Lane反转,这样,设备B返回的Lane number为3,2,1,0,设备A无法反转3)步中提出的Lane number 0,1,2,3,这将发生链路训练错误,并由设备A链路状态寄存器中的Link training Error位报告。因此在设计时不能将两个不支持Lane反转的设备以Lane反转的方式相连。


,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页