注:推薦大家查看英文原版,筆者大部分內容也為翻譯;
S IP:
1. pcie供電:
Vph: 1.2,1.5, 1.8V high voltage IO supply;
Vp/VptxX/Vpdig :analog supply, 0.9V;
vddcore: core supply; 0.75~0.9V;
其中Vddcore和Vp在進行upf時會通過power switch對外部pin進行控制;
一,. upcs層 支持的feature:
1, 支持original PIPE結構;
2. 支持serdes 結構;
3.支持pclk方式: pclk as phy output/input; 支持external pll;
4. 支持low pin count interface,移除那些對timing時序較低的信號線,將他們挪到message bus register中;
5. 標準的pipe接口連接mac層;
6. pcie 8b/10b以及128b/130b編解碼;
7. 傳輸PIPE 相關的power state(P0,P1,等)到phy層,并維持power相關的sequence;
8. 時鐘補償 elastic buffer (original pipe結構)
9. error report
10. 可選的bif & aggre 結構
11. 最多支持連接x16 lane;
Original PIPE:在檢測到EIOS之后,phy_rxX_data_en; 被拉低;lane CDR停止轉換;使用elastic buffer模式,來補償lane skew;
serdes pipe 結構:
數據move 在controller中實現;pipeline 可選用于timing 收斂。
Mindshare 部分翻譯
整體框圖;
差分對接收:
RX 時鐘恢復:
gen1,2 沒有CDR結構;使用的是RX本地PLL進行恢復,PLL時鐘和tx數據流同頻(2.5或者5Ghz)。并且將RX數據進行解串。解串數據10bit為一組。解析出COM碼。
接收bit鎖定:在TX 8b/10b編碼中,已經包含了頻率信息。(CRD)當RX時鐘和TX時鐘的頻率同步了,可以被稱為“bit lock”
在低功耗下(l0s或L1),為了避免數據包丟失造成bit lock 失鎖。所以TX在進入到低功耗之前要發送EIOS碼告知RX關閉其輸入(de-gate)。
Regaining Bit lock:重新鎖定
當TX 從L0s狀態恢復時,會發送特定數量的FTS(S IP 默認CX_NFTS=200)接收端會從新獲取bit和symbol lock。從L1恢復和L0s情況完全不同。
symbol lock:
COM碼有兩種編碼方式:
所有order set 均不會進行scramble 在tx端。只要檢測到了COM之后就被稱為“symbol lock”
RX 端時鐘補償
elastic buffer: 輸入recovery clock;輸出receiver clock;當輸入快輸出慢時會刪除SKP,反之亦然;elastic buffer有兩種方式:empty buffer,half-empty buffer。TX周期性的發送SKIP碼流就是為了消除skew。他們在傳到下一個層dllp之前會被完全丟棄。
當在1180到1538 個symbol 周期內發送SKIP order set。一個symbol就是10bit 碼流。
SKIP最大間隔:
lane到lane之間的deskew
由于多種原因(pcb布線等)會找出RX端存在lane之間的skew。
ordered set 幫助deskew
所有的lane在相同時間檢測到COM碼,用于deskew;超前檢測到COM碼會加入延遲。
RX lane2lane de-skew capability
放在elastic buffer之后;優點:到達時間差現在被本地時鐘同步為符號時間。可以通過延遲早到的COM適當符號時鐘來使其與晚到的COM對齊。接收器允許的最大時鐘偏移是時鐘周期的整數倍。
(注:官方spec中只提及了Gen1 允許的最大de-skew,其余未提及,gen2~gen5應該都是4 clocks最大,正好是一個SKP order set有續集時間)
注:1. 為什么8b/10b decode要放在elastic buffer之后?
1)時鐘域隔離;
elastic buffer就是一個跨時鐘與fifo;所以必須先緩存并穩定數據,然后再到本地時鐘域解碼。確保穩定性。
2)保持碼流完整性;
8b/10b 編碼保證了傳輸的直流平衡和足夠的邊沿用于時鐘恢復。CDR用的是10bit編碼后的數據來鎖相。先解碼可能會丟失時鐘邊沿信息。
3) 鏈路訓練需要使用原始10b數據
鏈路訓練過程中檢測特殊字符K碼。都是10bit編碼;
4) 更尬獲得處理碼流skew
8b/10b解碼
通過查找表來解碼,兩個查找表。D碼和K碼。
10b碼流disparity計算。當symbol lock之后開始指定初始的disparity。
如果一個符號(Symbol)中的兩位發生錯誤翻轉,該錯誤可能不會被察覺,而該符號仍可能被解碼為一個有效的8位字符。這樣的錯誤在物理層是無法被檢測到的。
descrambler(解碼器)
在8b/10b之后是解碼器;只對Data數據進行解碼,K碼不進行解碼。當一個 COM 字符進入解擾器時,它會將 LFSR(線性反饋移位寄存器)的值重新初始化為 FFFFh。
disable:
If the descrambler receives at least two TS1/TS2 ordered sets with
the “disable scrambling” bit set on all of its configured Lanes, it disables the
descrambler.當收到至少兩個TS序列中包含了disable scrambing bit時,disable該功能。
Byte-unstrip
un-striping: 去交織;在接受端將多條lane中的字符從新按原始順序合并成串行數據流的過程。
TX strip:tx交織的實現;
將一個數據包中的字節分發到多個通道(lanes)中,形成并行發送的結構。例如在 x8 鏈路中,第1個字節發到 Lane 0,第2個發到 Lane 1,以此類推,循環分配。Round-Robin 字節分發。但是要注意STP/SDP/END symbol需要有一些特定的規則。
RX buffer
RX buffer 保存TLP和DLLP的數據(header+data)。
物理層錯誤處理
內容不多,放到一起了。
S IP中通過CR端口或者Jtag 端口可以讀到Phy內部的所有reg;用于判定phy status。
必須上報錯誤:
8b/10b decode error: disparity, illegal symbol;
S IP中有pipe_rxX_rec_ovrd_8b10b_decerr 信號;用于指示當收到error時應該如何處理。
可選的error checking;
? Loss of Symbol lock (see “Achieving Symbol Lock” on page 396)
? Elastic Buffer overflow or underflow
? Lane deskew errors (see “Lane‐to‐Lane Skew” on page 398)
? Packets inconsistent with format rules
Response of Data Link Layer to Receiver Error
物理層像dllp層報告一個rx error之后會自動出發dllp的錯誤重傳機制。回復nak,retry buffer輸出當前tlp報文。當使能了AER時該錯誤會報告出來,一個correctable error;
Active State Power Management
phy + controller 配合支持pcie 低功耗。(低功耗內容,可能會開一個專題)
Link Training and Initialization
后續會開一個專題。
?