4.1 简介
物理层将事务层和数据链路层与用于链路数据交换的信令技术隔离开来。物理层被划分为逻辑物理层和电气物理层子模块(见图4-1)。
4.2 逻辑物理层子模块
逻辑子模块有两个主要部分:一个发送部分,它准备从数据链路层传递过来的信息,以便通过电气子模块传输;一个接收部分,它识别并准备接收到的信息,然后将其传递给数据链路层。
逻辑子模块和电气子模块通过状态和控制寄存器接口或功能等效设备协调每个收发器的状态。逻辑子模块指导物理层的控制和管理功能。
PCI Express在数据速率为2.5 GT/s或5.0 GT/s时使用8b/10b编码。对于大于或等于8.0 GT/s的数据速率,它使用每条通道的编码以及物理层封装。
4.2.1 2.5 GT/s和5.0 GT/s数据速率编码
4.2.1.1 符号编码
在2.5和5.0 GT/s的数据速率下,PCI Express使用8b/10b传输编码。这种传输编码的定义与ANSI X3.230-1994标准第11条款(以及IEEE 802.3z,36.2.4)中指定的定义相同。采用这种方案,8位数据字符被当作3位和5位映射到一个4位代码组和一个6位代码组上。控制位与数据字符结合使用,用于确定何时编码8b/10b传输编码中包含的12个特殊符号之一。这些代码组连接起来形成一个10位符号。如图4-2所示,ABCDE映射到abcdei,FGH映射到fghj。
4.2.1.1.1 数据的串行化和反串行化
符号的位被放置在一条通道上,从位"a"开始,以位"j"结束。图4-3和图4-4中展示了示例。
4.2.1.1.2 用于帧定界和链路管理的特殊符号(K代码)
8b/10b编码方案提供了与用于表示字符的数据符号不同的特殊符号。这些特殊符号用于本章后面描述的各种链路管理机制。 特殊符号也用于对DLLPs和TLPs进行帧定界, 使用不同的特殊符号允许这两种类型的包能够快速且容易地区分开来。
表4-1显示了PCI Express使用的特殊符号,并为每个符号提供了简要说明。这些符号将在后续章节中更详细地讨论。每个这些特殊符号以及数据符号,都必须通过查看整个10位符号来解释。
4.2.1.1.3 8b/10b 解码规则
有效的8b/10b代码的符号表在附录B中给出。这些表格有一列用于正差错和一列用于负差错。
在从电气空闲状态出来后首次传输差分数据时,除非有其他要求,否则发射器可以选择任何差错,发射器之后必须遵循正确的8b/10b编码规则,直到进入下一个电气空闲状态。
当接收器检测到从电气空闲状态退出时,初始差错设置为获得符号锁定时使用的第一个符号的差错。如果由于硬件设计实现的错误数量,在传输差分信息期间丢失并重新获得符号锁定,差错也可能会被重新初始化。
在初始差错设置后,所有接收到的符号都必须在与当前运行差错相对应的正确列中找到。 如果接收到的符号在与错误的运行差错相对应的列中找到,或者符号与两列都不对应,则物理层必须通知数据链路层接收到的符号无效。这是一个接收器错误,并且是与端口相关联的报告错误(见第6.2节)。
4.2.1.2 符号到链路的帧定界和应用
符号到通道的帧定界和应用分为两类。第一类是有序集(Ordered Sets),第二类是TLPs(事务层包)和DLLPs(数据链路层协议包)。有序集总是在每条通道上串行传输,以便在多通道链路上,所有通道同时出现完整的有序集。
帧定界机制使用特殊符号K28.2 "SDP"来开始一个DLLP,使用特殊符号K27.7 "STP"来开始一个TLP。特殊符号K29.7 "END"用于标记TLP或DLLP的结束。
符号的概念流必须从其内部表示(这是实现依赖的)映射到外部通道。符号被映射到通道上,以首位符号(代表字符0)放置在通道0上;第二个放置在通道1上;依此类推。x1链路是一个最简单案例,映射是最普通的,所有符号按顺序放置在单一通道上。
当没有传输包信息或特殊有序集时,发射器处于逻辑空闲状态。在此期间,必须传输空闲数据。空闲数据必须由数据字节0('h00),根据4.2.1.3节的规则进行扰乱,并根据4.2.1.1节的规则进行8b/10b编码,与TLP和DLLP数据符号的扰乱和编码方式相同。同样,当接收器没有接收任何包信息或特殊有序集时,接收器处于逻辑空闲状态,并且应接收上述描述的空闲数据。 在传输空闲数据期间,必须继续按照4.2.7节的规定传输SKP有序集。
对于以下规则,"放置"定义为发射器将符号放入链路的正确通道的要求。
- TLPs必须通过在TLP开始放置一个STP符号,在TLP结束放置一个END符号或EDB符号来帧定界(见图4-5)。
- 一个正确形成的TLP在STP和END或EDB符号之间包含至少18个符号。如果接收到的序列在STP和END或EDB符号之间少于18个符号,接收器允许将其视为接收器错误。 如果检查,这是一个与接收端口相关联的报告错误(见第6.2节)。
- DLLPs必须通过在DLLP开始放置一个SDP符号,在DLLP结束放置一个END符号来帧定界(见图4-6)。
- 逻辑空闲定义为一个或多个符号时间的时间段,在此期间没有传输/接收信息:TLPs、DLLPs或任何类型的特殊符号。与电气空闲不同,在逻辑空闲期间,空闲符号(00h)正在被传输和接收。
- 当发射器处于逻辑空闲状态时,所有通道上必须传输逻辑空闲数据(00h)。 这根据4.2.1.3节的规则进行扰乱。
- 接收器必须忽略传入的逻辑空闲数据,并且除了扰乱序列外,不得对任何特定数据模式有任何依赖。
- 对于大于x1的链路,当从逻辑空闲链路条件开始传输TLP时,必须将STP符号(代表TLP的开始)放置在通道0上。
- 对于大于x1的链路,当从逻辑空闲链路条件开始传输DLLP时,必须将SDP符号(代表DLLP的开始)放置在通道0上。
- STP符号放置在链路上的频率不得超过每个符号时间一次。
- SDP符号放置在链路上的频率不得超过每个符号时间一次。
- 只要满足上述规则,就允许TLP和DLLP传输连续跟随彼此。
- 在同一符号时间内,可以放置一个STP符号和一个SDP符号在链路上。
- 大于x4的链路可以在第4*N通道上放置STP和SDP符号,其中N是一个正整数。 例如,在x8链路上,STP和SDP符号可以放置在通道0和4;在x16链路上,STP和SDP符号可以放置在通道0、4、8或12。
- 对于N等于8或更大的xN链路,如果END或EDB符号被放置在通道K上,而K不等于N-1,并且通道K+1后面没有STP或SDP符号(即,没有TLP或DLLP立即跟随),那么PAD符号必须被放置在通道K+1到通道N-1。
- 例如,在x8链路上,如果END或EDB被放置在通道3上,当后面没有STP或SDP跟随时,PAD必须被放置在通道4到7。
- EDB符号用于标记一个无效化TLP的结束。有关EDB使用的更多信息,请参见第3.6.2.1节。
- 接收器可以自行选择检查本节规则的违规情况。这些检查是独立的可选检查(见第6.2.3.4节)。如果进行了检查,违规被视为接收器错误,并且是与端口相关联的报告错误(见第6.2节)。
4.2.1.3 数据扰码
为了改善链路的电气特性,通常会对数据进行扰乱。这涉及到使用线性反馈移位寄存器(LFSR)生成的模式与数据流进行异或(XOR)操作。在发射端,扰乱是在8b/10b编码之前对字符应用的。在接收端,在8b/10b解码之后对字符应用反扰乱。
在多通道链路上,扰乱功能可以使用一个或多个LFSR实现。当每个链路有多个发射LFSR时,这些LFSR必须协同工作,在每个LFSR中保持相同的同时(通道到通道输出偏斜)值。当每个链路有多个接收LFSR时,这些LFSR也必须协同工作,在每个LFSR中保持相同的同时(通道到通道偏斜)值。无论它们如何实现,LFSR必须以通道为单位与数据交互,就好像链路内每个通道都有一个单独的LFSR一样。
LFSR在图4-10中有图形表示,扰乱或反扰乱是通过将8位(D0-D7)字符与LFSR的16位(D0-D15)输出进行串行异或操作来执行的。LFSR的一个输出,D15,与要处理的数据的D0进行异或。然后,LFSR和数据寄存器串行前进,重复D1到D7的输出处理。数据异或后,LFSR前进。LFSR实现了多项式:
数据链路层用来通知物理层禁用扰乱的机制和/或接口是硬件定义实现的,并且超出了本规范的范围。 数据扰乱规则如下:
- COM符号初始化LFSR。
- 除了SKP符号外,每个符号LFSR值前进八个串行移动。
- 所有数据符号(D代码),除了有序集内(例如,TS1、TS2、EIEOS)、合规模式(见第4.2.8节)和修改后的合规模式(见第4.2.9节)之外,都被扰乱。
- 所有特殊符号(K代码)都不被扰乱。
- 线性反馈移位寄存器(LFSR)的初始种子值(D0-D15)是FFFFh。当一个COM符号从发射端LFSR退出后,发射端的LFSR会被初始化。每当COM符号进入该链路任何通道上的接收端LFSR时,接收端的LFSR也会被初始化。
- 扰乱只能在配置结束时禁用(见第4.2.6.3.5节)。
- 对于回环从设备,扰乱不适用。
- 默认情况下,在检测模式下扰乱始终是启用的。