目錄
8b/10b編碼
5b/6b 編碼表
3b/4b 編碼表
控制字元編碼表
8b/10b編碼的利用率
參考文獻
為什麼要使用8b/10b編碼?
8b/10b編碼的特性之一是保證dc 平衡,採用8b/10b編碼方式,可使得傳送的「0」、「1」數量保持基本一致,連續的「1」或「0」不超過5位,即每5個連續的「1」或「0」後必須插入一位「0」或「1」,從而保證訊號dc平衡,它就是說,在鏈路超時時不致發生dc失調。通過8b/10b編碼,可以保證傳輸的資料串在接收端能夠被正確復原,除此之外,利用一些特殊的**( 在pci-express匯流排中為k碼) ,可以幫助接收端進行還原的工作,並且可以在早期發現資料位的傳輸錯誤,抑制錯誤繼續發生。
8b/10b編碼是目前許多高速序列匯流排採用的編碼機制,如 usb3.0、1394b、serial ata、pci express、infini-band、fiber channel、rapidio等匯流排或網路等。
8b/10b編碼是目前高速序列通訊中經常用到的一種編碼方式。直觀的理解就是把8bit資料編碼成10bit來傳輸,為什麼要引入這種機制呢?其根本目的是「直流平衡(dc balance)」。當高速序列流的邏輯1或邏輯0有多個位沒有產生變化時,訊號的轉換就會因為電壓位階的關係而造成訊號錯誤,直流平衡的最大好處便是可以克服以上問題。
將8bit編碼成10bit後,10b中0和1的位數只可能出現3種情況:
1.有5個0和5個1
2.有6個0和4個1
3.有4個0和6個1
這樣引出了乙個新術語「不均等性(disparity)」,就是1的位數和0的位數的差值,根據上面3種情況就有對應的3個disparity 0、-2、+2。
8b/10b編碼的原理:
8bit原始資料會分成兩部分,其低5位進行5b/6b編碼,高3位則進行3b/4b編碼,這兩種對映關係在當時已經成為了乙個標準化的**。人們喜歡把8bit資料表示成dxx.y的形式,其中x=5lsb,y=3msb。
其中d表示待編碼的字元為正常資料,還存在kxx.y的形式,這裡的k表示控制字元。
例如乙個8bit資料101 10101,x=10101(十進位制為21) y=101(十進位制為5),現在我們就把這8bit資料寫成d21.5,明白了吧!
對於8bit資料,它在表中的位序為hgfedcba,即h為最高位,a為最低位,edcba經過5b/6b編碼為abcdei,hgf經過3b/4b編碼為fghj。傳送10bit編碼的順序為abcdeifghi。
8b/10b編碼由低5位進行5b/6b編碼,高3位則進行3b/4b編碼實現,二者都是通過lut的方式實現。在lut中,除了原始的8位輸入資料,編碼後10位輸出資料,還有乙個編碼極性rd(running disparity),下面會給出二者的編碼表:
input
rd = −1
rd = +1
input
rd = −1
rd = +1
edcba
abcdei
edcba
abcdei
d000000
100111
011000
d1610000
011011
100100
d100001
011101
100010
d1710001
100011
d200010
101101
010010
d1810010
010011
d300011
110001
d1910011
110010
d400100
110101
001010
d2010100
001011
d500101
101001
d2110101
101010
d600110
011001
d2210110
011010
d700111
111000
000111
d2310111
111010
000101
d801000
111001
000110
d2411000
110011
001100
d901001
100101
d2511001
100110
d1001010
010101
d2611010
010110
d1101011
110100
d2711011
110110
001001
d1201100
001101
d2811100
001110
d1301101
101100
d2911101
101110
010001
d1401110
011100
d3011110
011110
100001
d1501111
010111
101000
d3111111
101011
010100
input
rd = −1
rd = +1
hgffghj
d.x.0
0001011
0100
d.x.1
0011001
d.x.2
0100101
d.x.3
0111100
0011
d.x.4
1001101
0010
d.x.5
1011010
d.x.6
1100110
d.x.p7
1111110
0001
d.x.a7
1110111
1000
在8b/10b編碼中,還會用到12個特殊的k字元,k字元及其組合方式通常用於表示資料幀的sof(起始位)/eof(結束位)/idle(空閒位)等特殊資訊。
input
rd = −1
rd = +1
hgf edcba
abcdei fghj
abcdei fghj
k.28.0
000 11100
001111 0100
110000 1011
k.28.1
001 11100
001111 1001
110000 0110
k.28.2
010 11100
001111 0101
110000 1010
k.28.3
011 11100
001111 0011
110000 1100
k.28.4
100 11100
001111 0010
110000 1101
k.28.5
101 11100
001111 1010
110000 0101
k.28.6
110 11100
001111 0110
110000 1001
k.28.7
111 11100
001111 1000
110000 0111
k.23.7
111 10111
111010 1000
000101 0111
k.27.7
111 11011
110110 1000
001001 0111
k.29.7
111 11101
101110 1000
010001 0111
k.30.7
111 11110
011110 1000
100001 0111
由於採用8b/10b編碼帶來了2個位寬的開銷,所以導致頻寬利用率只有原來的80%,如srio協議3.125gbps頻寬,其有效的頻寬利用率只有3.125*0.8 = 2.5gbps,所以序列匯流排在提高頻寬的同時,頻寬利用率也必須提高,因此誕生了64b/66b、128b/130b等編碼方式,原理和8b/10b編碼相同,但是頻寬利用率提高了。
嵌入式高速序列匯流排技術
參考鏈結1
參考鏈結2
參考鏈結3
參考鏈結4
目錄
高速序列匯流排系列(2)高速序列匯流排技術總覽
srio serial rapidio 是一種低延時 基於包交換和分發結構的 支援訊息和讀寫操作的 具有容錯機制和流量控制的 高效率低功耗 可支援數千個節點的新型匯流排結構。srio匯流排的定位是針對嵌入式系統多處理器間的互連。jesd204匯流排是面向dac adc的序列通訊匯流排結構。jesd2...
演算法馬拉松18 B 非010串
acm模版 這道題一開始一看,覺得是dp,後來發現資料太大,dp要死人的,於是想到了矩陣快速冪,在網上看到有人說可以dp,不懂他是怎麼做的,但是感覺一定會超時啊 這裡首先我們需要找到遞推式 01 an 10 bn 00 cn 11 dn 由此可以推出 an 1 bn cn bn 1 dn 因為需要排...
51Nod演算法馬拉松18 B 非010串
如果乙個01字串滿足不存在010這樣的子串,那麼稱它為非010串。求長度為n的非010串的個數。對1e9 7取模 最喜歡簽到題了。設f i j 表示到第i個點,末尾的狀態是j 01,00,10,11四個狀態 轉移很顯然。然後在轉成矩陣乘法就好了。include include include inc...