有序集 – Ordered Sets
Ordered Sets 用于两个设备物理层之间的通信。Gen1/2 总是以字符 COM 开头。用于链路训练,时钟补偿和改变链路功耗状态。
TS
TS简介
Training Sequences(简称TS)用于初始化位锁定、字符锁定和交换PL层参数。在 2.5 GT/s 和 5.0 GT/s 时, TS不会加扰,在8.0 GT/s以及以上时,可能会加扰也可能不会加扰。TS有3类:TS0, TS1和TS2。TS是连续传送,但是中间可以插入 SKP Ordered Sets(简称SKPOS)或者EIEOS Ordered Sets(针对2.5 GT/s 以上,因为 EIEOS 在 5.0 GT/s 及以上才有)
TS0
- 16个symbol,只在1b/1b编码下有
- 只有Recovery.Equalization会用到
- symbol 0,8 – TS0标识符,未加扰的33h
- Bits 7,5,3,1 : 0101b
- Bits 6,4,2,0 : Half Scrambling前的值不重要,在经过Half Scrambling之后跟bits 7,5,3,1相同
- symbol 1,9 – Equalization Byte 0 – Half Scrambled
- symbol 1决定了symbol 2到6的含义
- symbol 9决定了symbol 10到14的含义
- Bits 3,1 Equalization Control (EC)
- 00b Phase0(用在Phase 0 和 Phase 1)
- 01b Phase1(用在Phase 0 和 Phase 1)
- 10b Phase2(Upstream Lane用在Phase 2,Downstream Lane只用在初始请求Upstream Lane向Phase 2移动)
- 11b Phase3(只用在Upstream Lane初始请求Downstream Lane进入Phase 3)
- Bit 5 : Reset EIEOS Interval Count – 在Recovery.Equalization Phase 2使用,其它状态保留
- 0b : 不复位EIEOS内部计数
- 1b : 复位EIEOS内部计数
- Bit 7 : Use Preset – 在Recovery.Equalization Phase 2和3有定义,在USP Phase 3和DSP Phase 2改比特是0b,其它状态保留
- 0b : 使用Coefficients
- 1b : 使用Preset
- Bits 6,4,2,0 – Half Scrambling前的值不重要,在Half Scrambling之后,跟Bits{7,5,3,1}相同
- symbol 2,10
- Equalization Byte 1 – Half Scrambled
- 对当前速度而言,取决于symbol 1或者9的EC字段
- Bits 7,5,3,1 :
- Phase 0 & 1 FS[3:0]
- Phase 2 & 3 当Use Preset字段是0b是,第一个Pre-Cursor Coefficient[3:0](C-1)
- 其它状态 : 保留
- Bits 6,4,2,0 – Half Scrambling前的值不重要,在Half Scrambling之后,跟Bits{7,5,3,1}相同
- symbol 3,11
- Equalization Byte 2 – Half Scrambled
- 对当前速度而言,取决于symbol 1或者9的EC字段
- Bits 3,1
- Phase 0 & 1 : FS[5:4]
- Phase 2 & 3 : 当Use Preset字段位0b时,Post-Cursor Coefficient[1:0](|C+1|)
- 其它状态,保留
- Bits 6,4,2,0 – Half Scrambling前的值不重要,在Half Scrambling之后,跟Bits{7,5,3,1}相同
- symbol 4,12
- Equalization Byte 3 – Half Scrambled
- 对当前速度而言,取决于symbol 1或者9的EC字段
- Bit 1
- Phase 0 & 1 : LF[2]
- Phase 2 & 3 : 当Use Preset字段位0b时位Post-Cursor Coefficient[4](|C+1|)
- 其它状态 : 保留
- Bits 7,5,3
- Phase 0 & 1 LF[5:3]
- Phase 2 & 3 当Use Preset字段位0时,表示Second Pre-Cursor Coefficient[2:0](|C-2|)
- 其它状态 : 保留
- Bits 6,4,2,0 – Half Scrambling前的值不重要,在Half Scrambling之后,跟Bits{7,5,3,1}相同
- symbol 5,13
- Equalization Byte 4 – Half Scrambled
- 对当前速度而言,取决于symbol 1或者9的EC字段
- Bits 7,5,3,1
- Phase 0 & 1 : Transmitter Preset[3:0]
- Phase 2 & 3 : 如果Use Preset为1表示Transmitter Preset[3:0]
- 其它状态保留
- Bits 6,4,2,0 – Half Scrambling前的值不重要,在Half Scrambling之后,跟Bits{7,5,3,1}相同
- symbol 6,14
- Equalization Byte 5 – Half Scrambled
- 对当前速度而言,取决于symbol 1或者9的EC字段
- Bits 3,1
- Phase 2 & 3 : 当Use Preset字段为1时表示Cursor[5:4]
- 其它状态保留
- Bit 5 : Retimer Equalization Extend
- Bit 7 : 保留
- Bits 6,4,2,0 – Half Scrambling前的值不重要,在Half Scrambling之后,跟Bits{7,5,3,1}相同
- symbol 7,15
- 如果在TS0开始的时候需要调整DC Balance, 00-FFh未加扰
- 否则,Bits 7,5,3,1
- Byte级别偶校验 – Half Scrambling
- Symbol 7 = Symbol 0 ^ Symbol 1 ^ … Symbol 6
- Symbol 15 = Symbol 8 ^ Symbol 9 ^ … Symbol 14
- Bits 6,4,2,0 – Half Scrambling前的值不重要,在Half Scrambling之后,跟Bits{7,5,3,1}相同
TS1
16个 symbol,每一个 symbol 有 8bits,代表不同的意思
- Symbol 0 – TS1标识符
- 在2.5或者5.0 GT/s时,为COM(K28.5)字符,用来实现符号对齐
- 在8.0 GT/s及以上时,固定编码为1Eh(8’b0001_1110),标识这是一个 TS1 而不是其它,在 Gen3 及以上时,没有 8b/10b 编码来维持 DC (直流) 平衡,所以在一些固定编码上会尽量保持 0 和 1 的个数相当。
- Symbol 1 – 链路号(Link Number)
- 端口不支持8.0 GT/s及以上时,取值为0-255或者PAD(K码)
- 支持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
- Symbol 2 – 链路的通道号(Lane Number)
- 当链路速度在2.5或者5.0 GT/s时,取值为0-31或者PAD(K23.7)
- 当链路速度在8.0 GT/s或者更高时,取值为0-31或者 PAD(F7h)
- Symbol 3 – N_FTS
- 接收机需要的Fast Training Sequences(简称 FTS)数量,取值范围为0-255.在Flit模式协商是保留
- Symbol 4 – 数据指示标志
- bit[0] : 是否支持Flit模式
- 0b : 不支持flit模式
- 1b : 支持flit模式
- 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, Upstream Port 如果想改变链路带宽, 则必须把 TS2 中的 Autonomous Change 位 置 1
- 对于 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 位
- bit[1] : Disable Link 位
- bit[2] : Loopback 位
- 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 状态
- 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
- 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 状态使用,其它状态保留。这种多功能位,在不同的状态过程会有不同的含义
- 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
- Symbol 2
- 链路的 Lane number
- 当链路速度在 2.5 或者 5.0 GT/s 时,取值为 0-31 或者 PAD (K23.7)
- 当链路速度在 8.0 GT/s 或者更高时,取值为 0-31 或者 PAD (F7h)
- 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 位
- bit[1] : Disable Link 位
- bit[2] : Loopback 位
- 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 或者更高与 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 的其它状态保留
- 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),也可以用来维持直流平衡
SKPOS
SKPOS 简介
- SKPOS (Skip Ordered Set)用于链路两端不同不同频率的补偿, 物理层接受机中逻辑子层的弹性缓冲 (elastic buffer)用于实现补偿
- 接收机评估 SKPOS 并在内部添加或者移除 SKP 符号,以防止 elastic buffer 上溢或者下溢。
- SKPOS分为Standard SKPOS和Control SKPOS, Control SKPOS的最后四个符号跟Standard SKPOS不同,Control SKPOS包括了奇偶校验位和数据的奇偶校验位
- 发射机发送的SKPOS长度是固定的,gen1/2 4symbol, gen3/4/5 16个symbol,gen6是40个symbol
- 接收端可以根据两端频率不同增加或删除SKP符号
- 1b/1b编码下没有Standard SKPOS,即64.0GT/s无Standard SKPOS
Standard SKPOS和Control SKPOS(Y:yes,支持,N:no,不支持)
速度 |
支持Standard SKPOS(Non-Flit) |
支持Control SKPOS(Non-Flit) |
支持Standard SKPOS(Flit) |
支持Control SKPOS(Flit) |
2.5GT/s |
Y |
N |
Y |
N |
5.0GT/s |
Y |
N |
Y |
N |
8.0GT/s |
Y |
N |
Y |
Y |
16.0GT/s |
Y |
Y |
Y |
Y |
32.0GT/s |
Y |
Y |
Y |
Y |
64.0GT/s |
N |
Y |
N |
Y |
发送端标准(Standard) SKPOS 组成
发射机不同速度下发送的Standard SKPOS组成
symbol |
2.5GT/s,5.0GT/s |
8.0GT/s,16.0GT/s |
32.0GT/s |
64.0GT/s |
0 |
COM(K28.5) |
AAh |
99h |
|
1-3 |
SKP(K28.0) |
AAh |
99h |
|
4-11 |
|
AAh |
99h |
|
12 |
|
E1h |
E1h |
|
13 |
|
00-FFh |
00-FFh |
|
14 |
|
00-FFh |
00-FFh |
|
15 |
|
00-FFh |
00-FFh |
|
- 8b/10b编码下的SKPOS
- symbol 0 : COM符号
- symboo 1-3 : SKP符号
- 128b/130b编码下的Standard SKPOS
- Symbol 0 – (4*N -1), N可以是 1 到 5 (对于发射机方向而言, N = 4, 因为发射机发的 SKPOS 是 16 个 symbol)
- 对于 8.0 GT/s 和 16.0 GT/s, 为 AAh, 对于 32.0 GT/s 已经更高速度为 99h, 这些 Symbol 为 SKP 符号, Symbol 0 为 SKPOS 的标识符
- Symbol 4*N
- E1h (SKP_END 符号), 标识SKPOS在三个符号后结束
- Symbol 4*N + 1
- 00-FFh, 如果 LTSSM 在 Polling.Compliance, 为 AAh; 如果先前的一个 block 是 Data Block (数据快),bit[7] 为 数据奇偶校验位, bit[6:0] 为 LFSR[22:16], 否则 bit[7] = ~LFSR[22], bit[6:0] = LFSR[22:16]
- Symbol 4*N + 2
- 00-FFh, 如果 LTSSM 处于 Polling.Compliance, 为 Error_Status[7:0], 否者为 LFSR[15:8]
- Symbol 4*N + 3
- 00-FFh, 如果 LTSSM 处于 Polling.Compliance, 为 ~Error_Status[7:0], 否则为 LFSR[7:0]
发送端控制(Control) SKPOS组成
发射机不同速度下发送的Control SKPOS组成
symbol |
2.5GT/s,5.0GT/s |
8.0GT/s,16.0GT/s |
32.0GT/s |
0-11 |
|
AAh |
99h |
12 |
|
E1h |
E1h |
13 |
|
00-FFh |
00-FFh |
14 |
|
00-FFh |
00-FFh |
15 |
|
00-FFh |
00-FFh |
- 128b/130b编码下的Control SKPOS
- Symbol 0 – (4*N -1), N可以是 1 到 5
- 对于 8.0 GT/s 和 16.0 GT/s, 为 AAh, 对于 32.0 GT/s 及以上, 为 32.0 GT/s, 这些 symbol 为 SKP Symbol, Symbol 0 是 SKPOS 的标识符
- Symbol 4*N
- 78h, SKP_END_CTL Symbol, 标识在三个或者更多个 Symbol 之后, Control SKPOS 的结束
- Symbol 4*N + 1
- bit[7] : 数据奇偶校验位 (Data Parity)
- bit[6] : 第一个 Retimer 的数据奇偶校验位
- bit[5] : 第一个 Retimer 的奇偶校验位
- bit[4:0] : Margin CRC[4:0]
- Symbol 4*N + 2
- bit[7] : Margin Parity (奇偶校验)
- bit[6:0] : 与 Usage Model 的值有关
- Symbol 4*N + 3
- bit[7:0] : 与 Usage Model 的值有关
1b/1b编码发送的Control SKPOS组成
symbol |
64.0GT/s |
0,4, 8,12,16,20 |
F0h |
1,5, 9,13,17,21 |
0Fh |
2,6,10,14,18,22 |
F0h |
3,7,11,15,19,23 |
0Fh |
24,28 |
FFh |
25,29 |
F0h |
26,30 |
00h |
27,31 |
F0h |
32-39 |
F0h或Phy Payload[7:0]/[15:8]…[63:56] |
- 1b/1b编码下的Control SKPOS
- symbol 32-39:如果正在传输TS0OS,则为F0h,否则位Phy Padload对应比特
- 接收到的SKPOS可以是24,32,40,48或者56
- SKPOS是由SKPs(F00F_F00F)跟着SKP_END(FFF0_00F0)加PHY Payload(8B)构成
接收端的SKPOS
- 8b/10b下的接收机接收的SKPOS为一个COM字符加1-5个SKP(最多增加或删除2个SKP符号)
- 接收端128b/130b编码下的SKPOS可以是8(删除了8个SKP符号,N=1),12(删了4个SKP符号,N=2),16(SKP符号无增减,N=3),20(增加4个SKP符号,N=4),24(增加8个SKP符号,N=5)
- 对于Standard SKPOS和Control SKPOS,接收端都是一样的规则
EIOS
EIOS 简介
- 希望进入低功率链路状态的发射机在停止传输之前发送此信息。收到后,接收者就知道要为低功率状态做好准备。接收器检测到此有序集并通过忽略输入错误直到退出电气空闲来准备链接进入电气空闲。 发送EIOS 后不久,发射机将其差分电压降低到小于 20mV 峰值
- 在发射机进入 Electrical Idle (简称 EI) 前,如果没有特别说明,发射机必须发送 Electrical Idle Ordered Set Sequence (简称EIOSQ)。在 2.5 GT/s, 8.0 GT/s, 16.0 GT/s 和 32.0 GT/s 时,EIOSQ 为一个 Electrical Idle Ordered Set (简称 EIOS),在 5.0 GT/s 为两个 EIOS。EIOS 在不同速度下其内容不完全一样。Electrical Idle Exit Ordered Sets (简称EIEOS) 是用来退出 EI 状态, EIEOS 在不同速度下也有不同的格式。EIEOS序列 (Electrical Idle Exit Ordered Set Sequence,简称EIEOSQ) 在 5.0 GT/s, 8.0 GT/s, 16.0 GT/s 由一个 EIEOS 构成,在 32.0 GT/s 时由 2 个连续的 EIEOS 构成
EIOS 作用
- 让本端TX进入EI
- 告知对端本端TX已经入EI
EIOS 组成
不同速度下的 EIOS 组成
symbol |
2.5GT/s,5.0GT/s |
8.0GT/s,16.0GT/s,32.0GT/s |
64.0GT/s |
0 |
COM(K28.5) |
66h |
0Fh |
1 |
IDL(K28.3) |
66h |
F0h |
2 |
IDL(K28.3) |
66h |
0Fh |
3 |
IDL(K28.3) |
66h |
F0h |
4,6,8,10,12,14 |
|
66h |
0Fh |
5,7,9,11,13,15 |
|
66h |
F0h |
SKPOS的规则
EIEOS
作用
EIEOS 为 Gen2 增加的内容,在 2.5 GT/s 链路速度下不存在
- 确保电路能够退出 EI 状态,使用的低频序列
- 128b/130b 编码时用来做块对齐 (Block Alignment)
EIEOS 组成
不同速度下的 EIOS 组成
symbol |
2.5GT/s |
5.0GT/s |
8.0GT/s |
16.0GT/s |
32.0GT/s |
64.0GT/s |
0 |
|
COM(K28.5) |
00h |
00h |
00h |
00h |
1 |
|
EIE(K28.7) |
ffh |
00h |
00h |
00h |
2 |
|
EIE(K28.7) |
00h |
ffh |
00h |
00h |
3 |
|
EIE(K28.7) |
ffh |
ffh |
00h |
00h |
4 |
|
EIE(K28.7) |
00h |
00h |
ffh |
00h |
5 |
|
EIE(K28.7) |
ffh |
00h |
ffh |
00h |
6 |
|
EIE(K28.7) |
00h |
ffh |
ffh |
00h |
7 |
|
EIE(K28.7) |
ffh |
ffh |
ffh |
00h |
8 |
|
EIE(K28.7) |
00h |
00h |
00h |
ffh |
9 |
|
EIE(K28.7) |
ffh |
00h |
00h |
ffh |
10 |
|
EIE(K28.7) |
00h |
ffh |
00h |
ffh |
11 |
|
EIE(K28.7) |
ffh |
ffh |
00h |
ffh |
12 |
|
EIE(K28.7) |
00h |
00h |
ffh |
ffh |
13 |
|
EIE(K28.7) |
ffh |
00h |
ffh |
ffh |
14 |
|
EIE(K28.7) |
00h |
ffh |
ffh |
ffh |
15 |
|
D10.2 |
ffh |
ffh |
ffh |
ffh |
一些规则
- 8b/10b编码,且链路速度为 5.0 GT/s 时
- 进入 Configuration.Linkwidth.Start 状态后,发送第一个 TS1OS 前,必须发送 EIEOS
- 进入 Recovery.RcvrLock 状态后,发送第一个 TS1OS 前,必须发送 EIEOS
- 在 LTSSM 中的 Configuration.Linkwidth.Start, Recovery.RcvrLock 和 Recovery.RcvrCfg 状态,每发送 32 个 TS1/2 后要发送一个 EIEOS。TS1/2 的数量会被清零,当满足下面的条件时 :
- 发送了一个 EIEOS
- 当在 Recovery.RcvrCfg 状态时,收到第一个 TS2OS
- 128b/130b 编码,EIEOS 需要满足的规则
- 进入 Configuration.Linkwidth.Start 状态后,发送第一个 TS1OS 前,必须发送 EIEOS
- 进入 Recovery.RcvrLock 状态后,发送第一个 TS1OS 前,必须发送 EIEOS
- 当数据流 (Data Stream) 结束且没有发送 EIOS, 也没有进入 LTSSM 中的 Recovery.RcvrLock 状态时,在 EDS Framing Token 后面接 EIEOS
- 在需要传输 TS1/2 的状态,每32个 TS1/2 传输后必须跟 EIEOS。当满足下面条件时, TS1/2 的数量会被清零
- 传输了一个 EIEOS
- 在 Recovery.RcvrCfg 状态,收到第一个 TS2OS 后
- 在 Configuration.Complete 状态,收到第一个 TS2OS 后
- Downstream Port 在 LTSSM 中 Recovery.Equalization 的 Phase 2 并且任意一条 lane 收到 2 个连续的 TS1 (Reset EIEOS Interval Count 必须要为1,Symbol 6 bit[2])
- Upstream port 在 LTSSM 中 Recovery.Equalization 的 phase 3并且收到 2 个连续的 TS1 (Reset EIEOS Interval Count 必须要为1,Symbol 6 bit[2])
- LTSSM 中的 Recovery.Equalization 状态每传输 65536 个 TS1 后 (Reset EIEOS Interval Count 位要设置为 1)
FTS 简介
Fast Training Sequence (简称FTS) 用于从 L0s 向 L0 跳转时实现位锁定 (bit lock) 和 符号锁定 (Symbol lock)。接收机使用 FTS 检测是否退出 EI 状态并且让接受输入数据的电路实现位锁定和符号锁定。
- 1b/1b编码无FTS,因为FTS是用在L0s到L0转变,1b/1b编码下无L0s状态,即64.0GT/s无FTS
- 最大允许请求的 FTSs 数量 (The maximum number of FTSs,简称 N_FTS) 为 255,最大的 bit lock 时间为 4*255*10 UI
- 传FTS前,需要先传EIEOS(Electrical Idle Exit OS,gen2及以上)
FTS组成
不同速度下的 EIOS 组成
符号 |
2.5GT/s,5.0GT/s |
8.0GT/s,16.0GT/s,32.0GT/s |
64.0GT/s |
0 |
COM(K28.5) |
55h |
|
1 |
k28.1 |
47h |
|
2 |
K28.1 |
4Eh |
|
3 |
K28.1 |
C7h |
|
4 |
|
CCh |
|
5 |
|
C6h |
|
6 |
|
C9h |
|
7 |
|
25h |
|
8 |
|
6Eh |
|
9 |
|
ECh |
|
10 |
|
88h |
|
11 |
|
7Fh |
|
12 |
|
80h |
|
13 |
|
8Dh |
|
14 |
|
8Bh |
|
15 |
|
8Eh |
|
SDSOS 简介
- SDSOS (The Start of Data Stream) 表示从有序集块(Ordered Set)到数据流(Data Stream)的转换, 只在128b/130b编码下使用, 并且只会在 LTSSM 中的 Configuration.Idle、Recovery.Idle 和 Tx_L0s.FTS 中会使用到,SDSOS 后面跟数据流
SDSOS组成
在 8b/10b 下没有, 即 2.5 GT/s 和 5.0 GT/s 不存在 EIEOS
不同速度下的 EIOS 组成
符号 |
2.5GT/s,5.0GT/s |
8.0GT/s,16.0GT/s |
32.0GT/s |
64.0GT/s |
0 |
|
E1h |
E1h |
B1h |
1-3 |
|
55h |
87h |
C6h |
4 |
|
55h |
87h |
B1h |
5-7 |
|
55h |
87h |
C6h |
8 |
|
55h |
87h |
B1h |
9-11 |
|
55h |
87h |
C6h |
12 |
|
55h |
87h |
B1h |
13-15 |
|
55h |
87h |
C6h |
- 55h = 01010101b, 87h = 10001110b, C6h = 11000110 在更高的速度下,识别低频的01跳变可能更容易
SDSOS 的一些规则
- SDSOS只在Configuration.Idle,Recovery.Idle和Tx_L0s.FTS以及Loopback状态发送,因为只有在这些状态下才会发送开始准备发送数据
- 在非Loopback时,Non-Flit模式下,SDSOS后面必须跟着数据块,数据块的第一个symbol也是数据流的第一个symbol
- 在1b/1b编码下,当满足发送SDSOS时,发射机必须发送2个背靠背的SDSOS.
- 1b/1b编码下,SDSOS必须必须对齐到128b(16B)的边界
- 在128b/130b和1b/1b编码下,SDSOS发送完后必须发送Control SKPOS,Control SKPOS后面跟着数据流的第一个symbol
- SDSOSQ(SDSOS Sequence,SDSOS序列)在128b/130b下指一个SDSOS,在1b/1b编码下指2个背靠背的SDSOS
- 在1b/1b编码下,如果收到4(1b/1b编码下SDSDOSQ有8个,2*4)个好的B1_C6_C6_C6(4B),其中至少有两个位于偶数4字节对齐位置(如bytes 0-3,8-11),则认为收到的SDSOSQ有效
很好的文章
@cszdzc 哈哈,谢谢,后面还得完善一下,目前主要是还是协议直译,加点自己的理解