FPGA基礎(chǔ):8b/10b編碼原理詳解
掃描二維碼
隨時隨地手機(jī)看文章
導(dǎo)言
8b10b編碼作為數(shù)字通信領(lǐng)域中的一項重要線路編碼方案,其核心理念在于將每8位數(shù)據(jù)映射到10位編碼中。這個映射過程嚴(yán)格按照特定規(guī)則進(jìn)行,旨在保證編碼中的電平轉(zhuǎn)換足夠,以維持信號的直流平衡,并提供足夠的時鐘信息,使接收端能夠準(zhǔn)確無誤地解碼數(shù)據(jù)。這種編碼技術(shù)在多個通信系統(tǒng)中發(fā)揮著關(guān)鍵作用,其中包括但不限于Aurora、PCIe、USB、光纖通信、SATA和HDMI等。在這些應(yīng)用場景中,8b10b編碼通過其獨特的特性,如電平平衡、時鐘恢復(fù)和錯誤檢測,確保了高速數(shù)字?jǐn)?shù)據(jù)的可靠傳輸。在今天的通信標(biāo)準(zhǔn)中,8b10b編碼已經(jīng)成為確保數(shù)據(jù)完整性和可靠性的不可或缺的一環(huán)。
1為什么要使用8b10b編碼
由于串行鏈路中存在交流耦合電容,理想電容的阻抗公式為Zc=1/2πf*C。因此,隨著信號頻率的增加,阻抗逐漸降低;反之,頻率降低時阻抗增加。在這種情況下,當(dāng)信號頻率較高時,傳輸基本上可以實現(xiàn)零損耗。然而,當(dāng)碼型為連續(xù)“0”或“1”時,電容的損耗顯著增加,導(dǎo)致信號幅度不斷下降。這帶來的嚴(yán)重后果是無法準(zhǔn)確識別是“1”還是“0”。因此,為了盡量減小低頻碼型的損耗,8b10b編碼技術(shù)應(yīng)運而生。8b10b編碼的主要目標(biāo)是優(yōu)化低頻碼型,將其轉(zhuǎn)換為較高頻的碼型,以確保在傳輸過程中降低損耗,這就是直流平衡。通過這種方式,我們能夠在高頻率條件下更可靠地傳輸數(shù)據(jù),提高串行鏈路的性能和穩(wěn)定性。8b/10b編碼的提出最早應(yīng)用在光纖的傳輸技術(shù),8b/10b技術(shù)是將8個比特經(jīng)過某種映射的機(jī)制轉(zhuǎn)化為10個比特的字碼,分兩組分別進(jìn)行映射的處理,分別是 5B/6B 與 3B/4B 的處理。
2不均等性——Disparity
8b10b編碼產(chǎn)生的輸出為10位,經(jīng)過8b10b編碼后只存在三種情況,分別是"+2" "0" "-2",它們代表了三種不均等性(Disparity)。在這里,不均等性通過計算 "1" 的數(shù)量減去 "0" 的數(shù)量得到,即 Disparity = "1"的數(shù)量 - "0"的數(shù)量。通過利用這種不均等性與 Disparity 的關(guān)系,可以確保發(fā)送的 "0" 和 "1" 的數(shù)量保持一致,從而有效地限制了連續(xù)的 "1" 或 "0" 不超過5位。這種機(jī)制有助于維持編碼的直流平衡,保障了數(shù)據(jù)的可靠傳輸。
-
"+2"表示10b內(nèi)有4b的"0",6b的"1"。
-
" 0"表示10b內(nèi)有5b的"0",5b的"1"。
-
"-2"表示10b內(nèi)有6b的"0",4b的"1"。
3編碼原理
8b10b編碼會將8b數(shù)據(jù)分成兩組,一組3b(HGF),一組5b(EDCBA),經(jīng)過8b10b編碼后,3b(HGF)經(jīng)過3b4b編碼變成4b(fghj),5b(EDCBA)經(jīng)過5b6b編碼變成6b(abcdefgi),合起來就是10b(abcdefgifghj)。此外,“D.x.y”是數(shù)據(jù)碼(D即是Data),“K.x.y”指控制碼(K即是Key),x與y表示輸入的原始數(shù)據(jù)。
不均等性執(zhí)行規(guī)則
8b/10b編碼是DC-free(直流平衡)的,意味著長時間的傳輸比特數(shù)的1和0的比例恰好為50%。為了實現(xiàn)這一點,傳輸?shù)?的數(shù)量和0的數(shù)量之間的差異始終被限制在±2之間,并且在每個符號的末尾,它要么是+1要么是?1。這個差異被稱為運行差異(RD,running disparity)
-
當(dāng)RD = -1時,表示編碼后"1"的個數(shù)比"0"的個數(shù)多2個,表示"1"多;
-
當(dāng)RD = +1時,表示編碼后"0"的個數(shù)比"1"的個數(shù)多2個,表示"0"多;
這里為什么是2呢,這是由于4 bit和6bit的兩個子分組都是偶數(shù)個位數(shù),所以不平衡度不可能是“+1” 或“-1”,因此,在8B/10B編碼方案中會使用不平衡度為“+2” 和“-2” 的值。
編碼的過程就是使得"0"和"1"的數(shù)量均衡,防止"0"或"1"過長的現(xiàn)象,因此在"1"多的時候會翻轉(zhuǎn)RD-變?yōu)镽D+,在"0"多的時候會翻轉(zhuǎn)RD+變?yōu)镽D-,在編碼過程中,RD的初值為-1,當(dāng)編碼為完美平衡編碼時,如上表所示不均等性(Disparity of 6 or 4 bit Code)為0,RD的極性(Next RD)不反轉(zhuǎn);當(dāng)編碼“1”和“0”的數(shù)量不等時,如上表所示不均等性為±2,則RD的極性(Next RD)反轉(zhuǎn)。
上表有四種情況,Next RD值依賴于Current RD以及當(dāng)前6B碼或者4B碼的Disparity。根據(jù)Current RD的值,決定5B/4B和 3B/4B編碼映射方式:
-
當(dāng)前RD為-1,編碼"0"和"1"數(shù)量相等即不均等性為0,則選擇Disparity為0的編碼,下次RD的極性不變?yōu)?1。
-
當(dāng)前RD為-1,編碼"0"和"1"數(shù)量不等即不均等性為±2,根據(jù)RD = -1選擇Disparity為+2的編碼,下次RD的極性翻轉(zhuǎn)為+1。
-
當(dāng)前RD為+1,編碼"0"和"1"數(shù)量相等即不均等性為0,則選擇Disparity為0的編碼,下次RD的極性不變?yōu)?1。
-
當(dāng)前RD為+1,編碼"0"和"1"數(shù)量不等即不均等性為±2,根據(jù)RD = +1選擇Disparity為-2的編碼,下次RD的極性翻轉(zhuǎn)為+1。
下表分別為5b6b和3b4b的映射碼表,對于每個具有不同數(shù)量的1和0的5b/6b和3b/4b編碼,都有兩種可以用于傳輸?shù)谋忍啬J剑阂环N是含有兩個更多“1”比特,另一種是所有比特取反從而含有兩個更多“0”。根據(jù)信號的當(dāng)前的RD,編碼引擎會選擇對給定數(shù)據(jù)發(fā)送哪兩種可能的六位或四位序列之一。
下面是一個例子:
-
原數(shù)據(jù)為D.01.3即8b'011_00001
-
當(dāng)前5b6b編碼RD = -1,可以看到EDCBA為D.01,5b6b編碼后為5b'011101
-
當(dāng)前3b4b編碼RD = -1,可以看到HGF為D.x.3,3b4b編碼后為3'b0011
-
綜合起來8b'01100001經(jīng)過8b10b編碼后變成10'b0111010011
-
編碼后Disparity = -2,則最終的RD需要由RD-1翻轉(zhuǎn)為RD+1
D.x.7主要編碼和備用編碼
從上圖可以看到,D.x.7有兩套編碼,分別是D.x.P7(主要,Primary)和D.x.A7(備用,Alternate),這是為了避免與前面的5b/6b代碼組合時出現(xiàn)5個連續(xù)的0或1.
-
當(dāng) RD = -1,5b/6b編碼 x = 17,18或20時,如果選擇D.x.P7則會出現(xiàn)5個連續(xù)的1,所以需要選擇備用編碼D.x.A7
-
當(dāng) RD = -1,5b/6b編碼 x = 11,13或24時,如果選擇D.x.P7則會出現(xiàn)5個連續(xù)的0,使用需要選擇備用編碼D.x.A7
控制符號(Control Symbols)
在8b/10b編碼中,控制符號是10位符號,它們是有效的位序列(包含不超過六個1或0),但沒有對應(yīng)的8位數(shù)據(jù)字節(jié)。這些控制符號主要用于執(zhí)行低級別的控制功能。例如,在光纖通信中,K28.5 用于執(zhí)行循環(huán)仲裁、填充字、鏈路重置等功能的四字節(jié)序列(稱為“有序集”)的開頭。
通過引入K.28或備用的D.x.A7輸出,可以創(chuàng)建用于控制的12個特殊符號。這些符號不攜帶實際的數(shù)據(jù),而是用于在數(shù)據(jù)流中標(biāo)識和控制特定的狀態(tài)或操作。其中有一些逗號序列,這是一個在數(shù)據(jù)流中獨特且不會與實際數(shù)據(jù)混淆的位模式。通過檢測逗號序列,接收方可以確定字節(jié)邊界,幫助正確解釋和處理數(shù)據(jù)流中的字節(jié)。
只有K.28.1、K.28.5和K.28.7生成包含五個0或1位序列的逗號序列。這些逗號序列的格式是11000001xx或00111110xx,其中xx表示任意兩位。
逗號序列中有兩個相同的前導(dǎo)位("00","11"),是為了應(yīng)對當(dāng)逗號序列跨越兩個符號時,可能出現(xiàn)連續(xù)五個相同的位。這種設(shè)計確保了逗號序列的唯一性,從而在解析數(shù)據(jù)流時,可以準(zhǔn)確識別并用于確定字節(jié)邊界。例如,D.x.A7(0111)后面可能跟著一個以兩個相同位開始的符號,比如D.03(110001)、D.11、D.12、D.19、D.20、D.28或K.28,但是,D.x.A7始終以一個非相同的位作為前導(dǎo)位,因此形成的模式是ifghj_abc = 10111_110或01000_001,如果前導(dǎo)位為非相同位("10","01")則不認(rèn)為他是逗號序列。
在控制符號中,只有在x等于23、27、29、30時,K.x才能與A7組合使用。對于其他D.x.A7編碼,不應(yīng)該使用,因為這可能導(dǎo)致逗號序列的對齊錯誤。
4帶寬利用率
在8b/10b編碼中,每8位數(shù)據(jù)被編碼成10位,其中2位用于控制目的??紤]到每8位數(shù)據(jù)編碼成10位,帶寬利用率可以計算為8/10 = 80%。這表示在8b/10b編碼中,80%的比特用于傳輸實際的數(shù)據(jù),而其余的20%用于控制和維護(hù)直流平衡。
5總結(jié)
本文主要介紹了8b10b的編碼原理,8b/10b編碼是一種用于高速數(shù)據(jù)通信的編碼方案,其設(shè)計目的是保持直流平衡,并通過控制符號實現(xiàn)一些控制功能。在后續(xù),我們將深入探討如何在FPGA中實現(xiàn)和優(yōu)化8b/10b編碼,以滿足不同應(yīng)用場景的性能和可靠性需求。





