128B/130B是指在128bit前面加上2bit的sync header来组成130bit的block.sync header可以用来指示该block为data block(10b)或Order set block(01b)。注意sync header只是data block的alignment,后面可以跟framing token也可以跟data payload。
下面介绍一个特殊的Ordered Set, EIEOS。
在link training期间,接收端利用EIEOS来判断block sync header的位置。
首先可以将接收端分为三个状态:unaligned, aligned, locked.
unaligned: 接收端在electrical idle之后进入这个状态,例如当link rate切换到128/130,或退出low power state,或被定向至这个状态,这时,接收端会监测EIEOS,如果检测到,就调整对齐位置,进入到aligned状态。
aligned: 接收端监测EIEOS和SDS(start data stream) Ordered Set。如果收到EIEOS则调整对齐位置,收到SDS则进入Locked。如果收到未定义的sync header(00b or 11b),则返回unaligned。
Locked: 在这个状态下,接收端不会再调整对齐位置,而是准备接收跟在SDS之后的Data block。 如果收到未定义的sync header, 则会退回unaligned或aligned状态。
但是,在aligned和Locked状态下,接收端如果收到了SKP OS,则必须调整alignment。
在LTSSM进入Recovery状态后,接收端在收到EIEOS之前将会忽略掉所有的TS OS。如果是EIEOS引起LTSSM从L0进入到Recovery,则在没有再次收到EIEOS的情况下,接收端可以选择处理或者忽略TS。
128B/130B的Framing Token
IDL : logical idle。长度为1symbol(8bits), 当没有其他的TLP/DLLP/Framing Token传输时,就传输IDL,即IDL用来填补Data block中的空白。
SDP : start of DLLP,长度2symbol,后面跟DLLP
STP : start of TLP, 长度为4symbol,包含有12bit的sequence number,和11bit的TLP length, 后面跟TLP。
EDB : end bad。4 symbol,用来表示前面的TLP无效。
EDS : End of data stream, 4 symbol,表示接下来是OS block。
STP/SDP must not be transmitted more frequently than once per symbol time的意思是,由于当lane数量大于4时,同一个symboltime可以传大于4 byte的数据,这里面不能有两个STP或者两个SDP。
在EDS之后收到的必须是SKP/EIOS/EIEOS.
如果收到IDL,对于lane小于4的link,只有下一个symbol time收到的token才会处理,同一个symbol time, 协议上不强制检查IDL之后收到的是否是IDL token。对于大于8lane的link,在IDL之后第一个处理的Token是在IDL之后以DW对齐的lane上。注意同一个symbol time中,IDL之后跟随的应该是IDL或者EDS。
scramble:
不需要进行scramble的有:
2bits sync header;
EIEOS;
TS1/TS2 的 Symbol 0;TS1/TS2的14/15 symbol在需要DC balance时也不需要scramble;
FTS;
SDS;
EIOS;
SKP;
SDS只在Configuration.Idle,Recovery.Idle,TxL0s.FTS以及loopback master传输。