4.2.1 2.5 GT/s和5.0 GT/s数据速率的8b/10b编码
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”结束的Lane上。示例如图4-3和图4-4所示。
4.2.1.1.2用于分帧和链路管理的特殊符号(K码)
8b/10b编码方案提供了不同于用于表示字符的数据符号的特殊符号。这些特殊符号用于本章后面描述的各种链路管理机制。特殊符号还用于将DLLPs和TLPs^59以Non-Flit模式进行帧,使用不同的特殊符号可以快速方便地区分这两种类型的数据包。当Flit Mode被启用时,数据流的每个符号(字节)仍然用8b/10b编码编码,没有所讲的组帧过程。Flit Mode操作在§4.2.3.1节中有描述。即使启用了Flit模式,当以2.5 GT/s或5.0 GT/s数据速率运行时,有序集也遵循§4.2.1节中所述。
表4-3显示了用于PCI Express的特殊符号,并对每个符号进行了简要说明。这些符号将在以下章节中进行更详细的讨论。每个特殊符号以及数据符号,都必须通过完整地查看10位符号来解释。
Table 4-3 Special Symbols in 8b/10b Encoding
Encoding | Symbol | Name | Description |
---|---|---|---|
K28.5 | COM | Comma | Used for Lane and Link initialization and management (Used identically in Flit Mode and Non-Flit Mode) |
K27.7 | STP | Start TLP | Marks the start of a Transaction Layer Packet in Non-Flit Mode. (Reserved in Flit Mode.) |
K28.2 | SDP | Start DLLP | Marks the start of a Data Link Layer Packet in Non-Flit Mode. (Reserved in Flit Mode.) |
K29.7 | END | End | Marks the end of a Transaction Layer Packet or a Data Link Layer Packet in Non-Flit Mode. (Reserved in Flit Mode.) |
K30.7 | EDB | EnD Bad | Marks the end of a nullified TLP in Non-Flit Mode. (Reserved in Flit Mode.) |
K23.7 | PAD | Pad | Used in Framing in Non-Flit Mode only. It is also used in Link Width and Lane ordering negotiations in both Non-Flit Mode and Flit Mode. |
K28.0 | SKP | Skip | Used for compensating for different bit rates for two communicating Ports. Used identically in Flit Mode and Non-Flit Mode. |
K28.1 | FTS | Fast Training Sequence | Used within an Ordered Set to exit from L0s to L0 in Non-Flit Mode. No usage for this Encoding is defined in Flit Mode. |
K28.3 | IDL | Idle | Used in the Electrical Idle Ordered Set (EIOS) ; Used identically in Flit Mode and Non-Flit Mode. |
K28.4 | Reserved | ||
K28.6 | Reserved | ||
K28.7 | EIE | Electrical Idle Exit | (Reserved in 2.5 GT/s) Used in the Electrical Idle Exit Ordered Set (EIEOS) and sent prior to sending FTS at data rates other than 2.5 GT/s |
4.2.1.1.3 8b/10b解码规则
有效的8b/10b码的符号表见附录b。这些表有一列为正不一致型,一列为负不一致型。
除非另有要求,在处于电空闲状态后,当第一次传输差分数据时,发送端允许选择任何不一致型。然后发送端必须遵循适当的8b/10b编码规则,直到进入下一次电气空闲状态。
检测到从电气空闲状态退出的接收器,其不一致型设置为用于获取符号锁定的第一个符号的不一致型。如果在传输差分信息期间由于达到特定数量的错误而丢失符号锁定并重新获得符号锁定,也可以重新初始化不一致型。设置初始不一致型后,必须在当前运行不一致型对应的相应列中找到以下所有接收符号。
如果在不正确的运行不一致型对应的列中发现接收到的符号,或者如果该符号不对应于任何一列,则物理层必须通知数据链路层接收到的符号无效。这是一个接收方错误,也是一个在Non-Flit模式下与端口相关的报告错误(参见§6.2)。在Flit模式下,错误的符号传递给FEC逻辑进行纠正;如果在Flit边界内检测到8b/10b错误或k-char,则允许接收方向FEC逻辑发送任何8位值。
4.2.1.2 用于组帧和应用的特殊符号(K码)
通道上用于组帧和应用的特殊符号分为两类。第一类由有序集组成。第二类由数据流中的TLPs和DLLPs组成。有序集总是在每条车道上串行传输,从而一个完整的有序集同时出现在多车道链路的所有车道上。数据流的Non-Flit模式描述如下。数据流的Flit模式描述见§4.2.3.2节和§4.2.3.3节。在Flit模式下使用8b/10b编码时,没有定义与帧相关的错误。
4.2.1.2.1 TLPs和DLLPs在Non-Flit模式下通道上符号的组帧和应用
组帧机制中使用特殊符号K28.2"SDP"作为DLLP的开始,使用特殊符号K27.7"STP"作为TLP的开始。特殊符号K29.7"END"用于标记TLP或DLLP的结束。
符号的概念流必须从其内部表示(依赖于实现)映射到外部通道上。这些符号被映射到通道上,这样第一个符号(代表字符0)就被放置到通道0上;第二个放置在通道1上;等等。x1链路表示简并情况,映射是平常的,所有的符号按顺序放置在单个通道上。
当没有报文信息或特殊的有序集被发送时,发送端处于逻辑空闲状态。在此期间,必须传输空闲数据。空闲数据必须由数据字节0 (00h)组成,根据§§4.2.1.3的规则进行加扰,并根据§§4.2.1.1的规则进行8b/10b编码,与TLP和DLLP数据符号进行加密和编码的方式相同。同样,当接收方没有接收到任何包信息或特殊的有序集时,接收方处于逻辑空闲状态,应按照上述方式接收空闲数据。在传输空闲数据期间,SKP有序集必须按照§4.2.8的规定继续传输。
对于下列规则,“放置”的定义是指要求发送端将符号放置在链路的适当通道中。
- TLP必须在TLP的开头放置一个STP符号,在TLP的末尾放置一个END符号或EDB符号(见§图4-5)。
- 正确形成的TLP在STP和END或EDB符号之间至少包含18个符号。如果接收到的序列在STP和END或EDB符号之间少于18个符号,则允许接收方将其视为接收方错误。
- 如果勾选此项,这是一个与接收端口相关的报告错误(见§Section 6.2)。
- DLLP必须通过在DLLP的开头放置一个SDP符号和在DLLP的末尾放置一个END符号来构建(参见§图4-6)。
- 逻辑空闲(Logical Idle)是指一个或多个符号时间(Symbol Times)的一段时间内,没有TLPs、DLLPs或任何类型的特殊符号正在发送/接收。与电气空闲不同,在逻辑空闲期间,将发送和接收空闲数据符号(00h)。
- 当发送器处于逻辑空闲状态时,应在所有lane上发送空闲数据符号(00h)。数据符号根据§4.2.1.3节的规则进行加扰。
- 接收器必须忽略传入的空闲数据符号,并且除了对任意特定的数据模式进行加扰排序外、不得具有任何依赖性。
- 对于宽度大于x1的链路,当从逻辑空闲链路状态开始传输TLP时,STP符号(表示TLP的开始)必须放在Lane 0。
- 对于宽度大于x1的链路,当DLLP从逻辑空闲链路状态开始传输时,SDP符号(表示DLLP的开始)必须放在Lane 0。
- STP符号在链路上放置的频率不得超过每个符号时间一次。
- 在每个符号时间内,SDP符号在链路上的放置次数不得超过一次。
- 只要满足上述规则,就允许TLP和DLLP传输依次接连发送。
- 一个STP符号和一个SDP符号可以在同一符号时间内放置在链路上。
- 比x4宽的链路可以有STP和SDP符号放置在车道4*N,其中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链路上,当没有STP或SDP时,如果END或EDB放置在Lane 3,则PAD必须放置在Lane 4至7。
- EDB符号用于标记无效TLP的结束。有关EDB使用的信息,请参见§3.6.2.1。
- 接收方可以选择检查是否违反了本节的规则。这些检查是独立可选的(参见§6.2.3.4节)。如果被检查,违规是接收器错误,并且是与端口相关的报告错误(见§Section 6.2)。
4.2.1.3 数据加扰
为了改善链路的电气特性,数据通常是加扰的。这适用于在2.5 GT/s和5.0 GT/s的数据速率下的Flit模式和Non-Flit模式。这涉及到用线性反馈移位寄存器(LFSR)生成的码型对数据流进行异或操作。在发送端,8b/10b编码之前对字符进行加扰。在接收端,对8b/10b解码后的字符进行去解扰。
在多通道链路上,可以使用一个或多个lfsr来实现加扰功能。当每条链路有多个发送侧LFSR时,这些LFSR必须协同工作,在每个LFSR中保持相同的同步的(Lane-to-Lane Output Skew)值。当每条链路上有多个接收侧LFSR时,这些LFSR必须协同工作,在每个LFSR中保持相同的同步(Lane-to-Lane Skew)值。无论它们是如何实现的,LFSR都必须以Lane-by-Lane为基础与数据交互,就好像该Link中的每个Lane都有一个单独的LFSR一样。
LFSR如图4-10所示。加扰或解扰是通过将8位(D0-D7)字符与LFSR的16位(D0-D15)输出进行串行异或操作来完成的。
LFSR的输出D15与待处理数据的D0相异或。
然后,LFSR和数据寄存器依次进位,D1到D7重复上述的输出处理。数据被异或后,LFSR将被进位。LFSR实现了多项式:
G(X)=X16+X5+X4+X3+1
数据链路层用来通知物理层禁用加扰的机制或接口是具体实现的,超出了本规范的范围。
数据加扰规则如下:
- COM符号初始化LFSR。
- 除SKP外,每个符号的LFSR值向前移动8个串行移位。
- 除有序集(如TS1、TS2、EIEOS)、一致性测试码型(见§4.2.9节)和修改的一致性测试码型(见§4.2.10节)外,所有数据符号(D码)都被加扰。
- 所有特殊符号(K码)不加扰。
- LFSR种子(D0-D15)的初始值为FFFFh。COM退出发送侧LFSR后,发送端的LFSR立即初始化。每当COM在该链路的任何Lane上进入接收侧LFSR时,接收端的LFSR都会被初始化。
- 加扰只能在配置结束时禁用(见§4.2.7.3.5节)。
- 加扰不适用于环回从机。
- 默认情况下,在检测状态中总是启用加扰。
实现注意:禁用加扰
禁用加扰旨在帮助简化测试和调试设备。控制精确的数据码型在测试和调试环境中非常有用。由于加扰是在物理层重置的,因此没有合理的方法可以通过软件可靠地控制数据转换的状态。因此,TS1和TS2有序集中的禁用置乱位是为这些目的提供的。
数据链路层用来通知物理层禁用置乱的机制或接口是具体实现的,超出了本规范的范围。
有关加扰的更多信息,请参见§附录C。