Granite River Labs, GRL
Leo Wang 王嘉鼎
前向糾錯(FEC)是一種糾錯技術,用於檢測和糾正傳輸數據中有限數量的錯誤,而無需重新傳送。現實包括廣播、無線電傳輸、衛星傳輸、電纜數據傳輸,以及影像傳輸。任何有雜訊和不能容忍重傳延遲的地方,FEC 都是錯誤處理的首選解決方案。
FEC 為 DP v1.4新增功能,使用 RS(254:250)編碼方式,符號大小為10 bits,能夠糾正每個 FEC 區塊(包含254個 RS 符號)最多2個 RS 符號的錯誤,是一種可添加到 Main-Link PHY 層的子邏輯塊功能,發生在8b/10b 編碼之後,因為 FEC 是 Main-Link PHY 層邏輯子塊功能,且與 Link symbols 的內容無關,所以 FEC 適用於 SST 模式、MST 模式、未壓縮的影像傳輸及 DSC 影像壓縮傳輸。
FEC 編碼方式_RS(254, 250)
Reed Solomon是一種前向錯誤更正的編碼,對校正過的資料產生的有效多項式。編碼過程首先在多個點上對這些多項式求出冗餘,然後將其傳輸或者儲存。當接收器正確地收到足夠的數值後,它就可以恢復原來的多項式,即使接收到的多項式上有很多數值被干擾失真。
DisplayPort 使用 Reed Solomon (254, 250)編碼,以 Block 呈現,FEC 一次處理一個 Data Block。而使用 Reed Solomon(254,250),可以在原始訊息(信息區塊k)中添加額外的奇偶校驗碼,從而傳輸(代碼區塊n),以便識別損壞的狀況及其最可能預期的結果。
圖1. RS(254, 250)格式
- 信息區塊k:該區塊包含特定數量的符號。在 DisplayPort FEC中,k是250個symbols。
- 代碼區塊n:包括信息區塊和FEC奇偶校驗碼。在DisplayPort FEC中,n是254個symbols。
- 糾錯因子t:是可以糾正符號錯誤的數量。奇偶校驗符號數量的一半。在DisplayPort中,t為2,因為每個區塊可以糾正兩個符號錯誤。
DisplayPort FEC 編碼過程
圖2. DPTx FEC編碼過程
發送端會將冗餘糾錯碼與數據一起發送。接收端根據附加的冗餘位置執行必要的檢查。如果發現數據沒有錯誤,就會執行生成實際的糾錯碼。然後再將數據傳遞到上層之前刪除冗餘碼,最後傳送至接收端。另外, HDCP 加密及加擾皆不會有FEC程序。
為了提高對 DPRx 決策反饋等化器(Decision feedback equalizer, DFE)突發錯誤的傳輸免疫力,DisplayPort FEC 使用雙向交錯的編碼方式。雙向交錯會因 lane 數的不同而有不同的配置如表1:
對於1個通道配置: DPTx 需組合兩個 FEC 區塊才能進行雙向交錯,每個區塊有254個 RS 符號,形成一個由 512個8b/10b 編碼組成的交錯FEC塊,。而每128個交錯 FEC 區塊會插入1個 FEC 奇偶校驗標記,如圖3。
對於 2 和 4 通道配置: DPTx 生成由256個8b/10b 編碼的交錯 FEC 區塊。對於 2 和 4 通道配置,而每256個交錯 FEC 區塊會插入1個 FEC 奇偶校驗標記,如圖4。
表1. Interleaved FEC Block for 4-, 2-, and 1-lane Configurations
圖3. Interleaved FEC Block Transport for 2- and 4-lane Configurations
圖4. Interleaved FEC Block Transport for 1-lane Configuration
FEC編碼主要分為兩個部分,奇偶校驗多工器 (FEC Parity Muxer)和FEC編碼器 (FEC Encoder):
奇偶校驗多工器 (FEC Parity Muxer)
奇偶校驗多工器主要用途為插入奇偶校驗的標記(FEC Parity Marker)在每一個 FEC Block 中, 讓每個 Block 都有 FEC 的標記, 並插入 FEC 編碼啟動程序(FEC_DECODE_EN/FEC_DECODE_DIS), 最後插入奇偶校驗臨時佔位符號, 臨時佔位的符號會在之後FEC編碼時使用,如圖5,圖6。
圖5. FEC Parity Muxer (1 lane config)
圖6. FEC Parity Muxer (2-and 4-lane config)
FEC 編碼器 (FEC Encoder)
FEC 編碼器其主要目的是進行 FEC 編碼,先刪除奇偶校驗多工器插入的 FEC 奇偶校驗佔位符號後,將通道內的所有符號進行交錯,計算並加入奇偶校驗碼,其後將奇偶校驗碼也進行交錯,如圖7,圖8。完成奇偶校驗碼交錯後,將4個奇偶校驗碼計算出5個奇偶校驗位元組(bytes)並加入視差調整位元(Disparity Adjustment),如圖9,圖10。最後將編碼後的奇偶校驗碼放至原本多工器插入的佔位符號位置中,完成 FEC 標碼,如圖11,圖12
圖7. FEC Encoder_Interleaving (1 lane config)
圖8. FEC Encoder_Interleaving (2-and 4-lane config)
圖9. FEC Encoder Code creation (1 lane config)
圖10. FEC Encoder Code creation (2-and 4-lane config)
圖11. FEC Encoder(1 lane config)
圖12. FEC Encoder (2-and 4-lane config)
DPRx
DPRx其FEC行為與Tx相反,當啟動FEC解碼時,Main-Link PHY層邏輯子塊會先把FEC奇偶校驗碼及視差調整解碼移除,經由8b/10b Decoding後,將先前移除之空位插入奇偶校驗佔位符號,完成解碼的動作,HDCP加密及加擾皆不會有FEC程序,如圖13。
圖13. DPRx FEC解碼過程
FEC_DP測試項目
Source FEC測項
主要測試FEC功能是否在不同Lane count及Link speed下是否有開啟且正常運作。
Sink FEC測項
FEC_DPCD address
結論
越高的傳輸速率越容易出現傳輸錯誤,更容易產生以下錯誤:脈衝雜訊、串擾、導致符號間干擾的信號失真。所以DisplayPort如果沒有FEC前向糾錯,在傳輸DSC影像壓縮時,會更容易受到視覺偏差的影響,無論是聲音或是影像。
筆者認為FEC非常適合高速傳輸中突發性的錯誤排除,且FEC不需要Source和Sink之間的溝通,可以用於從單個Source同時向多個目標發送數據,節省了重傳所需的頻寬。但要注意的一點是以DisplayPort FEC,如果每個Block超過2個以上的錯誤訊息,還是需要重新傳輸檔案,確保檔案完整性。
參考文獻
VESA DisplayPort (DP) Standard Version 1.4a, Release 19 April, 2018
作者
GRL 台灣測試工程師 王嘉鼎 Leo Wang