By GRL Team on 七月 31, 2023

DisplayPort FEC(Forward Error Correction 前向糾錯)技術淺談

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),以便識別損壞的狀況及其最可能預期的結果。

 

RS(254, 250)格式_FEC 處理 Data Block_可在原始訊息(信息區塊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 編碼過程

 

DPTx FEC編碼過程——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。

Interleaved FEC Block for 4-, 2-, and 1-lane Configurations——DisplayPort FEC編碼過程

表1. Interleaved FEC Block for 4-, 2-, and 1-lane Configurations

Interleaved FEC Block Transport for 2- and 4-lane Configurations——DisplayPort FEC編碼過程

圖3. Interleaved FEC Block Transport for 2- and 4-lane Configurations

Interleaved FEC Block Transport for 1-lane Configuration——DisplayPort FEC編碼過程圖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。

FEC Parity Muxer (1 lane config)_奇偶校驗多工器 (FEC Parity Muxer)

圖5. FEC Parity Muxer (1 lane config)

 

FEC Parity Muxer (2-and 4-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



FEC Encoder_Interleaving (1 lane config)

圖7. FEC Encoder_Interleaving (1 lane config)



FEC Encoder_Interleaving (2-and 4-lane config)

圖8. FEC Encoder_Interleaving (2-and 4-lane config)

 

FEC Encoder Code creation (1 lane config)

圖9. FEC Encoder Code creation (1 lane config)

 

FEC Encoder Code creation (2-and 4-lane config)

圖10. FEC Encoder Code creation (2-and 4-lane config)

 

FEC Encoder(1 lane config)

圖11. FEC Encoder(1 lane config)

 

FEC 編碼器 (FEC Encoder) _FEC Encoder (2-and 4-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。

 

DP Rx FEC解碼過程

圖13. DPRx FEC解碼過程

 

FEC_DP測試項目

 

Source FEC測項

主要測試FEC功能是否在不同Lane count及Link speed下是否有開啟且正常運作。

Source FEC測項_FEC_DP測試項目

Sink FEC測項

FEC_DPCD address

FEC_DPCD address_FEC_DP測試項目

結論

越高的傳輸速率越容易出現傳輸錯誤,更容易產生以下錯誤:脈衝雜訊、串擾、導致符號間干擾的信號失真。所以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

Published by GRL Team 七月 31, 2023