摘要:64B/66B編碼技術是IEEE 802.3工作組為10G以太網提出的,目的是減少編碼開銷,降低硬件的復雜性,并作為8B/10B編碼的另一種選擇,以支持新的程序和數據。在本篇文章中,我將從它的提出背景、編碼格式、編碼原理、和8B/10B比較它的優缺點等方面和大家分享一下,在學習過程中有關64B/66B編碼的心得筆記。
關鍵字:8B/10B,64B/66B,編碼,擾碼
1、??引言
①??經過之前的學習,我們知道,8b/10b編碼最初由IBM公司于1983年發明,并應用于ESCON(200M互連系統)的一種編碼方式。8B/10B編碼不只應用于光纖通道,目前在許多高速串行總線。
我們知道的8b/10b編碼的特性之一是保證DC 平衡。
采用8b/10b編碼方式,可使得發送的“0”、“1”數量保持基本一致,連續的“1”或“0”不超過5位,即每5個連續的“1”或“0”后必須插入一位“0”或“1”,從而保證信號DC平衡,也就是說,在鏈路超時時不致發生DC失調。
通過8b/10b編碼,可以保證傳輸的數據串在接收端能夠被正確復原,除此之外,利用一些特殊的代碼( 在PCI-Express總線中為K碼) ,可以幫助接收端進行還原的工作,并且可以在早期發現數據位的傳輸錯誤,抑制錯誤繼續發生。
然而,將原本8位的字節用10位來表示,會使8B/10B編碼的開銷太大,帶寬利用率并不高。
于是,就有了一系列的優化編碼方式,其中64B/66B就是其中的一種。
②? 64B/66B編碼技術是IEEE802.3工作組為10G以太網提出的,目的是減少編碼開銷,降低硬件的復雜性,并作為8B/10B編碼的另一種選擇,以支持新的程序和數據。它并不是真正的編碼,而是一種基于擾碼機制編解碼方式,這種編碼方式,是IEEE推薦的10G通信的標準編碼方式。
當前,64B/66B編碼主要應用于FiberChannel 10GFC和16GFC、10G以太網、100G以太網、10G EPON、InfiniBand、Thunderbolt和Xilinx的Aurora協議。
2、??64B/66B編碼技術
64B/66B編碼將64bit“數據或控制信息”編碼成66bit塊來進行傳輸,這66bit中,前兩位表示同步頭(2bit Sync Header),主要用于接收端的數據對齊和接收數據位流的同步。
00??????編碼錯誤
01??????64 bit = 純數據
10??????64 bit = 混合的數據/控制信息
11??????編碼錯誤
也就是說,在沒有發生錯誤的情況下,每66位的數據,就會出現至少一個“01”或者“10”的轉換。
同步頭有“01”和“10”兩種:
“01“表示后面的64bit都是數據。
“10”表示后面的64bit是數據和控制信息的混合,其中緊挨著同步頭的8b是類型域,后面的56bit是控制信息或者數據或者兩者的混合。
①??對于純數據Pure data
同步頭:01,后面的信息:8*8=64bit數據
②??對對于純控制Pure Control (Type = 0x1E)
同步頭:10,后面的信息:8bit類型表示+7*8控制信息
③??對于數據和控制信息的混合
同步頭:10,后面的信息:數據信息和控制信息的混合。
64B/66B編碼格式圖如下圖所示:
其中,D表示數據編碼,每個數據碼8bit;Z表示控制碼,每個控制碼7bit;S表示包的開始,T表示包的結束。S只會出現在8字節中的第0和第4字節,T能夠出現在任意的字節。
下面我們一起來看一個簡單的例子,這個例子將幫助我們更好地理解數據幀和控制幀。
一個18 bytes的數據塊的傳輸過程如下圖所示:
這過程是怎么樣的呢?我們一起來看一下,從圖中我們可以直觀的看到,在數據的傳輸過程中,我們需要用到兩個控制幀,一個是開始部分的控制幀,用來告訴接收方這是某一個數據塊的開始,還要有的是一個用來表示結束的控制幀,告訴接收方該數據塊到此結束。
從圖中我們可以知道,在開始和結束的控制幀之外,為純數幀,一個純數據幀,他能表示64bit的數據。不管是數據幀還是控制幀,每隔64bit,就會插入一個01或者10序列來分隔,我們還知道,他的DC平衡并不是由這兩位01.10來完成的,相對于64bit這么大的數據塊,10和01的平衡能力微乎其微,在學習的過程中,我們知道他用到的是擾碼技術,這是我們下一個模塊要講述的內容。
3、??擾碼傳輸技術
上面我們提到,除同步碼外,64bit的數據必須經過擾碼以后才能進行傳輸,在引言部分我們說過,64B/66B并不是真正的編碼,而是一種基于擾碼機制編解碼方式。
我們知道8B/10B編碼通過優化直流平衡,從8bit中插2個bit進去,這樣能夠使長0或者長1的位數不超過5位,達到很好的效果。那64B/66B編碼方式呢?在從64個bit中僅加入2個bit,能夠很好的解決長0長1的問題嗎?作用似乎只是杯水車薪,2個bit相對于64個bit太少了。
當然,如果僅靠這2個bit來實現8B/10B的作用顯然不太現實。其實上,這兩個bit只是起一個同步頭的作用,主要用于接收端的數據對齊和接收數據位流的同步。
那按照上面說的,新加的2個bit只是作為同步,那后面的數據可以如何優化呢?這里有一項區別于8B/10B編碼的技術——擾碼。
為此,我又去查資料看了一下,有關擾碼的相關知識。
通過查資料我知道,擾一種將數據重新排列或者進行編碼以使其最優化的方法,他的作用是對數字信號的比特級進行隨機處理,減少連0和連1的出現,從而減少碼間干擾和抖動,方便接收端的時鐘提??;同時又擴展了基帶信號頻譜,起到加密的效果。
為了保證在任何情況下進入傳輸信道的數據碼流中“0”與“1”的概率都能基本相等,傳輸系統會用一個偽隨機序列對輸入的傳送碼流進行擾亂處理,將二進制數字信息做“隨機化”處理,變為偽隨機序列,也能限制連“0”碼或連“1”碼的長度,這種“隨機化”處理通常稱為“擾碼”。
擾亂雖然改變了原始傳送碼流,但這種擾亂是有規律的,因而也是可以解除的,在接收端解除這種擾亂的過程稱為解擾。完成擾碼和解擾的電路相應稱為擾碼器和解擾器。
64B/66B自同步擾碼實現隨機化,編碼所使用的擾碼器為: X58+X39+1
擾碼的數學原理使用了多項式,多項式的選擇通常是基于擾碼的特性,包括生成數據的隨機度,以及打亂連0和連1的能力。一個簡單的擾碼器包含一組排列好的觸發器,用于移位數據流。大部分的觸發器只需要簡單地輸出下一個比特流即可,但是在復雜的擾碼電路中,觸發器需要與數據流中的歷史比特進行邏輯運算(與和或運算)?;镜臄_碼電路如下所示:
第39和第58位的異或運算,然后通過移位寄存器輸出的碼型結果。這是一個需要大量計算的過程,但對于我們的計算機來說,僅僅是異或和移位的操作是比較簡單的,他可以很快就完成。
他的計算原理,我們通過一個簡單的表達式的例子來講解:X3+X2+1。
首先我們有一個初始狀態“111”。我們就有了下面這么一個計算過程(畫得不好,大家看內容就好)。簡單說明一下,紅色為異或運算過程,藍色為每次移位后的bit,綠色為輸出的數據bit,紫色說明繞一圈之后又回到了原先,循環了一次。
具體的計算過程,如下圖,我們一起來看一下圖。
這是一個初始一直是111的例子,也就是說,我們的輸入一直都是111.觀察最終的輸出結果我們可以看出,他得到了0,不再是全是1。
4、??編碼過程
關于編碼過程,我們先一起來看一個圖:
圖中的CGMII是物理編碼子層,output of ?encoder function為編碼器的輸出結果,outputof scrambler function為擾碼器的輸出結果,transmit block為傳輸塊,Gearbox為變速箱。
我們一起來看一下這個過程,我們一些數據塊要傳輸,假設說從物理編碼子層傳來的這兩個塊每個是32bit,加在一起才有64bit,經過encoder編碼器進行編碼,得到編碼后的數據D0-D7,生成同步頭01或者10,然后不含同步頭的D0-D7,經過擾碼器,得到表達式X58+X39+1擾碼后的數據S0-S7。
在之后,將同步頭和擾碼后的數據S0-S7合并,生成一個傳輸塊,將這個傳輸塊經過GearBox處理后,完成編碼。
5、??8B/10B、64B/66B簡單比較
這里,我們一起來看一個比較的圖:
在圖中,我們分別從他們之中的連續的0和連續的1的個數、DC平衡能力、位同步時鐘恢復能力,字同步能力控制塊等方面進行了比較。
經過對比分析我們可以得知,8B/10B編碼的連續0或者連續1的最大長度是5;8B/10B編碼他有良好的DC平衡能力和位同步恢復能力,而64B/66B的這些能力都和擾碼器有關,或者說他都決定于擾碼所用的表達式。對于字同步,8B/10B編碼有他自己的K碼,而64B/66B編碼用的是兩位表示的同步頭。對于控制碼,8B/10B編碼也是使用K碼,而64B/66B編碼用的是同步頭為10 的控制碼。
6、??結束語
64B/66B編碼的這種擾碼方式目標是使數據的“0”和“1”最大程度的隨機分布,減小連續出現的情況,因此它可能并不能適用于所有的碼型,不像8B/10B編碼一樣對所有的bit組合都有出色的表現,具體還要看擾碼器接收器的能力。但是無可否認,它最大的好處是效率比較高,傳輸冗余的bit只有2位,開銷大約只有3%,不像8B/10B編碼需要20%的開銷,這方面在更高速的傳輸環境下更具有優勢。
參考資料:
【1】??????存儲技術基礎?西安電子科技大學出版社劉凱 劉博 編著。
【2】??????百度百科64B/66B編碼8B/10B編碼
【3】??????CSDN博客 線路/信道編碼技術(2)——64B/66B編碼
編輯:黃飛
?
評論
查看更多