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傳輸。