PCIe – Training Sequence
PCIe – Training Sequences
Training Sequences (简称TS) 用于初始化位锁定、字符锁定和交换 PL 层参数。在 2.5 GT/s 和 5.0 GT/s 时, TS 不会加扰,在 8.0 GT/s 以及以上时,可能会加扰也可能不会加扰。TS 有两类 : TS1 和 TS2。TS 是连续传送,但是中间可以插入 SKP Ordered Sets (简称SKPOS) 或者 EIEOS Ordered Sets (针对2.5 GT/s 以上,因为 EIEOS 在 5.0 GT/s 及以上才有)
TS1
16个 symbol,每一个 symbol 有 8bits,代表不同的意思
- Symbol 0
- 在 2.5 或者 5.0 GT/s 时,为 COM 字符,用来实现符号对齐
- 在 8.0 GT/s 及以上时,固定编码为 1Eh(8’b0001_1110),标识这是一个 TS1 而不是其它,在 Gen3 及以上时,没有 8b/10b 编码来维持 DC (直流) 平衡,所以在一些固定编码上会尽量保持 0 和 1 的个数相当。
- Symbol 1
- Link Number, 链路号, 需要满足一定的规则
- port 不支持 8.0 GT/s 及以上时,取值为 0-255 或者 PAD
- 支持 8.0 GT/s 及以上的 Downstream port 时,取值为 0-31 或者 PAD
- 支持 8.0 GT/s 及以上的 Upstream port时,取值为0-255 或者 PAD
- 当链路速度在 2.5 或者 5.0 GT/s 时,PAD 编码为 K23.7
- 当链路速度在 8.0 GT/s 或者更高时,PAD 编码为 F7h
- Link Number, 链路号, 需要满足一定的规则
- Symbol 2
- 链路的 Lane number
- 当链路速度在 2.5 或者 5.0 GT/s 时,取值为 0-31 或者 PAD (K23.7)
- 当链路速度在 8.0 GT/s 或者更高时,取值为 0-31 或者 PAD (F7h)
- 链路的 Lane number
- Symbol 3
- N_FTS, 接收机需要的 Fast Training Sequences (简称 FTS)数量,取值 0-255
- Symbol 4
- 数据指示标志
- bit[0] : 保留
- bit[1] : 是否支持 2.5 GT/s,必须设置为1
- bit[2] : 是否支持 5.0 GT/s,当 bit[3] 为 1 时,必须设置为 1
- bit[3] : 是否支持 8.0 GT/s,当 bit[4] 为 1 时,必须设置为 1
- bit[4] : 是否支持 16.0 GT/s,当 bit[5] 为 1 时,必须设置为 1
- bit[5] : 是否支持 32.0 GT/s
- bit[6] : Autonomous Change/Selectable De-emphasis
- 这种多功能位在不同的状态代表不同的作用,比如在 Recovery 状态不会有 De-emphasis 操作,因此只能是 Autonomous Change
- 对于 Downstream port, 此位只会在 LTSSM 中的 Polling.Active, Configuraton.Linkwidth.Start 和 Loop.Entry 状态使用,其它状态保留
- 对于 Upstream port, 此位只会在 LTSSM 中的 Polling.Active, Configuration, Recovery 和 Loopback.Entry 状态使用,其它情况保留 bit[7] : speed_change, 此位只允许在 LTSSM 中 Recovery.RcvrLock 状态置 1, 其它状态保留
- 数据指示标志
- Symbol 5
- 链路控制
- Deassert 可以理解为不执行相应动作,Assert 可以理解为执行相应动作,比如 bit[0] 当 Assert 后,会进入到 Hot Reset
- bit[0] : Hot Reset 位
- 0b Deassert, 1b Assert
- bit[1] : Disable Link 位
- 0b Deassert, 1b Aseert
- bit[2] : Loopback 位
- 0b Deassert, 1b Aseert
- bit[3] : 禁止加扰位 (适用于 2.5 和 5.0 GT/s)
- 0b Deassert, 1b Aseert, 其它情况保留
- bit[4] : Compliance Receive 位(2.5 GT/s 可选,5.0 GT/s 及以上必须实现)
- 0b Deassert, 1b Aseert, 只支持 2.5 GT/s 可选,如果没有实现,则改为保留
- bit[5] : 在 Loopback 发送 Modified Compliance Pattern, 在 32.0 GT/s 及更高速度中的 Loopback master 中使用,其它情况保留
- bit[7:6] : 增强链路行为控制
- bit[7:6] 只会在下面两种条件下才会定义
- 32.0 GT/s 及更高速度, LinkUp = 0 且 LTSSM 处于 Polling 或者 Configuration 状态 <br>
- 32.0 GT/s 及更高速度,LTSSM 处于 Loopack 且只能是 Loopback Master
- 00b : Full EQ, 比如从 2.5 GT/s 往 32.0 GT/s 切速时,不能跳过 16.0 GT/s,不支持 Modified TS1/TS2
- 01b : 支持 EQ bypass to highest rate,比如从 2.5 GT/s 往 32.0 GT/s 切速时,可以跳过 16.0 GT/s 的 EQ 过程
- 10b : 不需要 EQ 过程
- 11b : 是否支持 Modified TS1/TS2 Ordered Sets
- bit[7:6] 只会在下面两种条件下才会定义
- 链路控制
- Symbol 6
- 当链路速度在 2.5 或者 5.0 GT/s 时
- 如果是标准的 TS1, 编码为 D10.2 (4Ah),作为 TS1 的标识符
- 如果是 EQ TS1 (当需要切换到 8.0 GT/s 或者 32.0 GT/s 及以上时会有EQ过程,这时发送的 TS1 为 EQ TS1)
- 2.5 或者 5.0 GT/s往上切换速度时,不会直接切换到 16.0GT/s,在 Gen5 时规定了可以做一次 EQ 直接切换到最高速度,所以会有下面 32.0 GT/s 及更高时的 EQ 过程
- 当链路速度为 8.0 GT/s 时的 EQ 过程(比如 5.0 GT/s 往 8.0 GT/s 切换时,先将连链路速度切换到 8.0 GT/s,然后看能否实现 Symbol Lock (符号锁定), 然后就会做 EQ)
- bit[2:0] : 接收机 Preset Hint (预设提升)
- bit[6:3] : 接收机 Preset
- bit[7] : 设置为 1
- 当链路速度为 32.0 GT/s 是的 EQ 过程
- bit[0] : 发射机预编码请求,接受机方向此时对该位没有定义
- bit[2:1] : 保留
- bit[6:3] : 发射机 Preset
- bit[7] : 设置为 1
- 当链路速度为 8.0GT/s 及更高时
- bit[1:0] : 均衡控制 (Equalization Control, 简称EC), 这些位只会在在 LTSSM 中的 Recovery.Equalization 和 Loopback 状态使用, 在 LTSSM 的其它状态,固定为 00b
- bit[2] : 重置 EIEOS 间隔计数。这一位只会在 LTSSM中的 Recovery.Equalization 状态使用,LTSSM 的其它状态中保留
- bit[6:3] : 发射机预设
- bit[7] : 使用预设/重做 EQ。这一位在 LTSSM 中的 Recovery.Equalization、Recovery.RcvrLock 和 Loopback 状态使用,其它状态保留。这种多功能位,在不同的状态过程会有不同的含义
- 当链路速度在 2.5 或者 5.0 GT/s 时
- Symbol 7
- 当链路速度为 2.5 或 5.0 GT/s 时,为 TS1 的标志,固定编码为 D10.2 (4Ah)
- 当链路速度在 8.0 GT/s 及以上时
- bit[5:0] : 当 Symbol 6 的 EC 域为 01b 时,此位为 FS,其它情况代表当前链路速度对应的 Pre-cursor 系数
- bit[6] : 发射机 Precoding (预编码) 开启,只会在 32.0 GT/s 及更更高速度下的 Recovery 状态使用,其它情况保留
- bit[7] : Retimer EQ 扩展位, 此位只会在 16.0 GT/s 及更高速度下的 Recovery.Equalization 状态使用,在 8.0 GT/s 和其它状态为保留位
- Symbol 8
- 当链路速度为 2.5 或 5.0 GT/s 时,为 TS1 的标志,固定编码为 D10.2 (4Ah)
- 当链路速度在 8.0 GT/s 及以上时
- bit[5:0] : 当 Symbol 6 的 EC 域为 01b 时,此位为 LF,其它情况代表当前链路速度对应的 Cursor 系数
- bit[7:6] : 保留
- Symbol 9
- 当链路速度为 2.5 或 5.0 GT/s 时,为 TS1 的标志,固定编码为 D10.2 (4Ah)
- 当链路速度在 8.0 GT/s 及以上时
- bit[5:0] : 当前链路速度对应的 Post-cursor 系数
- bit[6] : 拒绝系数值位,此位只会在 LTSSM 中的 Recovery.Equalization 下的一些特定阶段置 1, 在 LTSSM 的其它状态,必须设置为 0
- bit[7] : 奇偶校验(P), 此位为 Symbol 6,7,8 和 Symbol 9 的 bit[6:0] 的奇偶校验位,接收机必须根据接受到的 TS1 来计算此位,并将其与接收的奇偶校验位进行比较。只有计算出的奇偶校验位与此位一致时,接收到 TS1 才是有效的。
- Symbol 10-13
- 当链路速度为 2.5 或 5.0 GT/s 时,为 TS1 的标志,固定编码为 D10.2 (4Ah)
- 当链路速度为 8.0 GT/s 及以上时,为 TS1 的标志,固定编码为 (4Ah)
- Symbol 14-15
- 当链路速度为 2.5 或 5.0 GT/s 时,为 TS1 的标志,固定编码为 D10.2 (4Ah)
- 当链路速度为 8.0 GT/s 及以上时,可以是 TS1 的标志,固定编码为 (4Ah),也可以是用来维持直流平衡 (根据前面 Symbol 中 0 和 1 的个数来设置此位)
TS2
- Symbol 0
- 当链路速度为 2.5 或 5.0 GT/s 时,为 COM (K28.5)用于符号对齐
- 当链路速度为 8.0 GT/s 时,固定编码为 2Dh (8’b0010_1101)
- Symbol 1
- Link Number, 链路号, 需要满足一定的规则
- port 不支持 8.0 GT/s 及以上时,取值为 0-255 或者 PAD
- 支持 8.0 GT/s 及以上的 Downstream port 时,取值为 0-31 或者 PAD
- 支持 8.0 GT/s 及以上的 Upstream port时,取值为0-255 或者 PAD
- 当链路速度在 2.5 或者 5.0 GT/s 时,PAD 编码为 K23.7
- 当链路速度在 8.0 GT/s 或者更高时,PAD 编码为 F7h
- Link Number, 链路号, 需要满足一定的规则
- Symbol 2
- 链路的 Lane number
- 当链路速度在 2.5 或者 5.0 GT/s 时,取值为 0-31 或者 PAD (K23.7)
- 当链路速度在 8.0 GT/s 或者更高时,取值为 0-31 或者 PAD (F7h)
- 链路的 Lane number
- Symbol 3
- N_FTS, 接收机需要的 Fast Training Sequences (简称 FTS)数量,取值 0-255
- Symbol 4
- 数据指示标志
- bit[0] : 保留
- bit[1] : 是否支持 2.5 GT/s,必须设置为1
- bit[2] : 是否支持 5.0 GT/s,当 bit[3] 为 1 时,必须设置为 1
- bit[3] : 是否支持 8.0 GT/s,当 bit[4] 为 1 时,必须设置为 1
- bit[4] : 是否支持 16.0 GT/s,当 bit[5] 为 1 时,必须设置为 1
- bit[5] : 是否支持 32.0 GT/s
- bit[6] : Autonomous Change/Selectable De-emphasis/Link Upconfigure Capalibity
- TS2 中此位比 TS1 中的 Symbol 4 bit[6] 的功能要多
- 这些位只会在 LTSSM 中的 Polling.Configuration, Configuraton.Complete 和 Recovery 状态使用,其它情况保留
- bit[7] : speed_change, 此位只允许在 LTSSM 中 Recovery.RcvrLock 状态置 1, 其它状态保留
- 数据指示标志
- Symbol 5
- 链路控制
- Deassert 可以理解为不执行相应动作,Assert 可以理解为执行相应动作,比如 bit[0] 当 Assert 后,会进入到 Hot Reset
- bit[0] : Hot Reset 位
- 0b Deassert, 1b Assert
- bit[1] : Disable Link 位
- 0b Deassert, 1b Aseert
- bit[2] : Loopback 位
- 0b Deassert, 1b Aseert
- bit[3] : 禁止加扰位 (适用于 2.5 和 5.0 GT/s)
- 0b Deassert, 1b Aseert, 其它情况保留
- bit[4] : Retimer Present bit (只对 2.5 GT/s 适用,其它速度保留)
- 0b : 没有 Retimers 存在,1b : 一个或多个 Retimes 存在,此位与 TS1 中的定义不同
- bit[5] : Two Retimes Present,目前没理解
- bit[7:6] : 增强链路行为控制
- 00b : Full EQ, 不支持 Modified TS1/TS2 Ordered Sets
- 01b : 支持 EQ bypass to highest rate,不支持 Modified TS1/TS2 Ordered Sets
- 10b : 不需要 EQ 过程,支持这种能力的 device 必须支持 Equalization bypass to highest rate. 需要与其它寄存器配合使用,不支持 Modified TS1/TS2 Ordered Sets
- 11b : 支持 Modified TS1/TS2 Ordered Sets
- bit[7:6] 只会在 32.0 GT/s 及更高速度, LinkUp = 0 且 LTSSM 处于 Polling 或者 Configuration 状态是才会被定义
- 链路控制
- Symbol 6
- 当链路速度在 2.5 或者 5.0 GT/s 时
- 如果是标准的 TS2, 编码为 D5.2 (45h),作为 TS2 的标识符
- 如果是 EQ TS2
- 当链路速度为 8.0 GT/s 时的 EQ 过程
- bit[2:0] : 接收机 Preset Hint (预设提示)
- bit[6:3] : 接收机 Preset
- bit[7] : 设置为 1
- 当链路速度为 32.0 GT/s 是的 EQ 过程
- bit[0] : 发射机预编码请求
- bit[2:1] : 保留
- bit[6:3] : 发射机 Preset
- bit[7] : 设置为 1
- 当链路速度为 8.0 GT/s 时的 EQ 过程
- 当链路速度在 8.0 GT/s 或者更高与 TS1 不同
- bit[3:0] : 保留
- bit[5:4] : EQ 请求速度
- 这些位只会在 LTSSM 中的 Recovery.RcvfCfg 状态使用,其它情况保留
- 00b : 8.0 GT/s
- 10b : 16.0 GT/s
- 01b : 32.0 GT/s
- 11b : 保留
- bit[6] : Quisce Guarantee,此位只会在 LTSSM 中的 Recovery.RcvfCfg 状态使用,在 LTSSM 的其它状态保留
- bit[7] : 请求 EQ, 此位只会在 LTSSM 中的 Recovery.RcvrCfg 状态使用,在 LTSSM 的其它状态保留
- 当链路速度在 2.5 或者 5.0 GT/s 时
- Symbol 7
- 与 TS1 Symbol 7 定义不同
- 当链路速度为 2.5 或 5.0 GT/s 时,为 TS2 的标志,固定编码为 D5.2 (45h)
- 当链路速度在 8.0 GT/s 及以上时
- 如果是标准的 TS2, 为 TS2 的标志,固定编码为 45h
- 128b/130b EQ TS2 OS
- 只有在传输预设值且 LTSSM 处于 Recovery.RcvrCfg 时才有效
- bit[0] : 32.0 GT/s 及更高速度下的发射机预编码请求,在 8.0 GT/s 和 16.0 GT/s 下的 EQ 过程保留
- bit[2:1] : 保留
- bit[6:3] : 128b/130b 发射机预设
- bit[7] : 设置为 1
- Symbol 8-13
- 2.5 或者 5.0 GT/s 时,TS2 的标志,固定为 D5.2 (45h)
- 8.0 GT/s 或者更高时,TS2 的标志,固定为 45h
- Symbol 14-15
- 2.5 或者 5.0 GT/s 时,TS2 的标志,固定为 D5.2 (45h)
- 8.0 GT/s 及更高时, 可以是 TS2 的标志 (编码为 45h),也可以用来维持直流平衡