8B10B編碼(高速收發器五)

1、8B10B解決的問題

??8B10B編碼是1983年IBM公司提出的傳輸編碼標準,通常用于高速收發器中,常見的JESD204B、SATA等接口協議,使用查表就可以實現編碼和解碼。

??在這些高速收發器的接收端需要通過CDR技術去恢復時鐘與數據的相位關系,在這個過程中需要不斷的檢測數據邊沿和數據中心,從而調整時鐘和數據的相位,因此需要保證接收的數據需要不斷的變化,從而給CDR提供足夠多的待檢測數據邊沿。

??另外高速接口電路一般采用交流耦合方式進行連接,在交流耦合電路中的信號線會接電容(隔直通交),如果傳輸的數據在一段時間內全是1或全是0,那么這段時間傳輸的信號可以等效成直流信號,會產生直流偏移,在通過電容時,有可能解碼錯誤。

??因此通過8B10B編碼,保證編碼后的數據在一定時間內0的個數與1的個數保持相等。

2、8B10B編碼規則

??8B10B就是把8位數據編碼成10位數據,8位共有256種狀態,而10位數據有1024種狀態,可以從1024種狀態中選取256種0和1個數相等的數據作為編碼結果,在從剩下的數據中選取12個作為控制字符,即常見的K碼。

??如下圖所示,將輸入的8位數據分為高3位和低5位,分別進行3B4B、5B6B編碼,結果為10位數據。

在這里插入圖片描述

圖1 8B10B編碼原理

??通常把編碼前的低5位數據EDCBA的十進制數值記為x,把編碼前的高3位數據HGF的十進制數值記為y,原始8位數據可以表示為D.x.y。

??比如待編碼數據為110_00011,高3位數據的十進制為6,低5位的十進制數據為3,則D.3.6就表示110_00011。

??常見的控制字符K.28.5的也是采用上述方式,控制字符的編碼結果是固定的,不會與數據的編碼結果沖突。

??低5位數據總共有32種狀態,對應的5B6B編碼規則如下表所示。

在這里插入圖片描述

圖2 5B6B編碼原理

??下面是3B4B編碼的表格,原理與5B6B編碼一致。

在這里插入圖片描述

圖3 3B4B編碼原理

??可能第一次看下表會有疑問,為什么D.00的編碼結果有兩種?RD又是什么東西?

??5位數據總共有32種狀態,編碼結果有6位數據,0和1數量相等的只有000_111、001_011…、110_001、111_000等20種狀態。其中000_111和111_000存在三個連續相同的狀態,并沒有被使用。導致編碼后0和1數據相等的結果就只有18種狀態,并不能滿足輸入5位數據的32種數據狀態,3B4B編碼也有同樣的問題。

??此時設計編碼的人提出,一次編碼如果不能保證編碼結果0和1個數相等,那么可以讓連續兩次編碼結果的0和1相等,也能滿足要求。

??極性偏差(running disparity,RD)用來記錄上一次編碼結果中0和1個數的多少。RD=-1表示編碼結果0多于1,RD=1表示編碼結果1多于0。

??如果編碼結果的1和0個數相等,稱為平衡編碼,此時RD的數值保持不變。如果編碼結果1和0個數不等,稱為非平衡編碼,此時RD的數值翻轉,下次編碼采用RD對應數值的編碼作為編碼結果。

??將上次8B10B編碼結果的RD數值用作本次5B6B編碼的起始RD,而3B4B編碼的起始RD等于5B6B編碼結果的RD,3B4B編碼結果的RD作為本次8B10B編碼的RD。

??對應的編碼狀態跳轉如下圖所示。

在這里插入圖片描述

圖4 編碼狀態

??通過這種方式才能保證一次編碼結果要么0和1個數相等,要么相差兩個。關于這方面的講述,網上絕大多數文章都是錯誤的,認為上次8B10B編碼結果的RD會作為下次5B6B和3B4B編碼的起始RD,造成3B4B編碼錯誤。

??上述講解的是數據編碼過程,因為8B10B編碼大多用于異步串行通信,接收方需要識別數據的幀頭、幀尾這些控制信息,從而完成數據的對齊、同步等等。

??因此8B10B編碼有12個控制字符,通常稱為K碼,這些控制字符的編碼結果是唯一的,不會與數據編碼的結果重復。下表就是12個控制字符的編碼。

在這里插入圖片描述

圖5 K碼的編碼規則

??因為K碼的編碼結果是唯一的,因此接收端檢測K碼的方式很簡單,通過一組移位寄存器,將輸入數據依次移入,當移位寄存器的數值與K碼的編碼結果相同時,就認為檢測到對應K碼了,從而實現對應功能,包括逗號檢測、時鐘糾正、起始位、停止位等等。

3、8B10B編碼練習

??8B10B相關的理論講解就到此結束了,以兩個示例測試是否真的掌握該編碼,請問D.8.3的8B10B編碼結果是多少?

??由于起始RD并沒有明確指出,可能為1或者-1,所以會存在兩種編碼結果。

??首先RD=-1時,根據圖2得D.8的5B6B編碼結果為111001,5B6B編碼完成后,RD翻轉變為1。將RD=1作為D.x.3的3B4B編碼起始RD,根據圖3查表得編碼結果為0011,再次將RD翻轉作為本次8B10B編碼結果的RD。

??因此起始RD=-1的編碼結果為111001_0011,先輸出高位數據。

??當起始RD=1時,根據圖2得D.8的5B6B編碼結果為000110,RD翻轉作為3B4B起始RD,得D.x.3的3B4B編碼結果為1100,因此8B10編碼及熱鍋為000110_1100。

??怎么驗證上述計算是否正確呢?

??Xilinx的UG476手冊的附錄有所有8B10B編碼數據的結果,如下圖所示,起始RD=-1時,D.8.3編碼結果為111001_0011,起始RD=1時,D.8.3編碼結果為000110_1100,與上述計算結果保持一致,證明計算方法沒有問題。

在這里插入圖片描述

圖6 D.8.3的編碼結果

??第二個問題,當前RD=1,則K.28.5、D.2.6、D.23.4的編碼結果依次是多少,且最終的RD是多少?

??首先RD=1時,通過圖5查得k.28.5編碼結果為110000_0101,然后RD保持不變,因為K28.5的5B6B和3B4B都是不平衡編碼,因此RD翻轉兩次的結果就是不變。

??因此D.2.6的起始RD=1,首先D.2的5B6B編碼結果為010010,RD翻轉變為-1。D.x.6的3B4B編碼結果為0110,由于D.x.6是平衡編碼,因此RD保持不變。

??故D.2.6的編碼結果為010010_0110,RD最終為-1。

??當RD=-1時,D.23.4的5B6B編碼結果為111010,然后RD翻轉為1。之后D.x.4的編碼結果為0010,RD的極性再次翻轉為-1。

??所以K.28.5、D.2.6、D.23.4的編碼結果依次是110000_0101、010010_0110、111010_0010,RD的最終取值為-1。D.2.6、D.23.4的查表結果如下圖所示,與上述計算結果保持相同,證明編碼規則沒有問題。

在這里插入圖片描述

圖7 D.2.6的編碼結果

在這里插入圖片描述

圖8 D.23.4的編碼結果

??從上述編碼過程可知,每個輸入數據通過查表都可以得到其唯一的編碼結果,根據編碼結果也可以查表反推進行解碼,所以實現這個編碼和解碼的思路比較簡單,直接使用查表法即可。

??通過上述編碼也可以很清晰知道該編碼的缺陷,每次傳輸的10位數據中有2位是無效數據,損耗比較大。后續的64B66B編碼就是為了解決這個問題提出的,但是8B10B編碼的誤碼率會比64B66B編碼低。

??關于8B10B編碼內容講解就到此結束了,本來最開始是不想寫這方面內容的,結果在CSDN和B站看到很多大佬對RD極性變化的理解都有問題,編碼結果與官方提供的結果都不相同,因此寫了這篇文章,希望對大家的理解有幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13257.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13257.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13257.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux day6 yum下載,systemctl,

yum命令 yum [-y] install wget 通過yum下載wget小工具 -y的意思是,如果有詢問,自動確認(總是允許)。 yum remove wget 也可以通過這種方式卸載wget

Git版本控制工具的原理及應用詳解(四)

本系列文章簡介: 隨著軟件開發的復雜性不斷增加,版本控制成為了開發團隊中不可或缺的工具之一。在過去的幾十年里,版本控制工具經歷了各種發展和演變,其中Git無疑是目前最受歡迎和廣泛應用的版本控制工具之一。 Git的出現為開發者…

Apache Flink典型應用場景全面解析

Apache Flink作為一個高度靈活且功能強大的開源流處理框架,因其在實時數據處理、大規模數據分析以及事件驅動應用方面的卓越表現而受到廣泛青睞。以下是Flink幾個典型的使用場景,展示了其在不同行業和業務需求中的應用潛力。 實時數據分析與監控 應用描述…

工作小記2——二周年記

不知不覺,工作已經有二周年, 由于公司電腦不能登錄csdn,不能登github,我已經好久沒有碰過我的個人博客空間啦。現在從大廠跳到小公司,舒適度翻倍提升!現在我要回歸CSDN啦! 總體感受&#xff1a…

playwright 自動化框架python教程(九)

Playwright 提供了一系列API來處理各種瀏覽器中的特殊操作 Playwright 提供了一系列API來處理各種瀏覽器中的特殊操作,包括彈窗(如alert、confirm、prompt)、新窗口的打開與管理,以及其他一些高級交互。以下是處理這些情況的一些…

Solon Cloud Event 新的事務特性與應用

1、Solon Cloud Event? 是 Solon 分布式事件總線的解決方案。也是 Solon “最終一致性”分布式事務的解決方案之一2、事務特性 事務?就是要求 Event 有原子性,當多個 Event 發布時,要么全成功,要么全失敗。 public …

PyQt5 中的 List View

文章目錄 1. 基礎概念2. 創建 List View2.1 PyQt5 中一個簡單的 List View 實例2.2 代碼解釋2.3 運行結果 3. 數據模型3.1 標準模型3.2 自定義模型 4. 自定義 List View4.1 使用樣式表 (QSS)4.2 設置項委托 (Item Delegate) 5.事件處理6. 與數據交互6.1 添加數據6.2 刪除數據6.…

【哈希】Leetcode 205. 同構字符串【簡單】

同構字符串 給定兩個字符串 s 和 t ,判斷它們是否是同構的。 如果 s 中的字符可以按某種映射關系替換得到 t ,那么這兩個字符串是同構的。 每個出現的字符都應當映射到另一個字符,同時不改變字符的順序。不同字符不能映射到同一個字符上&am…

如何解決 Scrapy 下載圖片時的文件名錯誤問題

在使用 Scrapy 的 ImagesPipeline 下載圖片時,有時會遇到因為文件名的問題導致下載失敗的情況。本文將詳細解釋這種錯誤的原因,并提供一個簡單易懂的解決方案,幫助大家避免類似的問題。 問題描述 在下載圖片時,如果圖片的名字是…

C語言到底怎么學?

C語言到底怎么學? 1、工欲善其事,必先利其器 這里介紹幾個華清遠見學習C語言必備的工具: VMware、ubuntu。 VMware是一家提供虛擬化軟件和解決方案的公司,VMware的旗艦產品是VMware Workstation,這是一種虛擬機軟件,…

echers配置項:數據過多時,折疊數據縮放查看

當數據過多時,如上圖所示的時間點,會自動折疊,此時鼠標縮放還不起作用,我們配置如下代碼 let option {dataZoom: [{startValue: 05:00}, // 這個值需要跟 第一條 時間數據對應上{type: inside}], }配置后,就可以進行…

echers配置項:折線圖,折現的顏色修改

如上圖所示:紅框內的折現顏色修改,并隱藏默認的點 series: [{data: [1, 230, 224, 218, 135, 147, 760,1500,1200,2500,2000],type: line,lineStyle: {color: #00DBFE // 折現顏色},symbol:none, // 不顯示點smooth: true, // 折現角度:圓滑…

hadoop生態圈集群搭建(持續更新240513)

Hadoop生態圈 Linux1.修改ip地址2.重啟network服務3.安裝插件4.關閉防火墻5.創建用戶6.創建目錄7.修改目錄的所屬主和所屬組為lxy8.修改主機名:hadoop102 (注意名字后面不要加空格)9.修改hosts文件10.等插件都裝完后再重啟Linux11.把xshell的登錄用戶換成lxy (注意&…

5W 3KVAC隔離 寬電壓輸入 AC/DC 電源模塊——TP05AL系列

TP05AL系列產品是一款經濟型開板式開關電源,輸出功率為5W,具有可靠性高、小體積、性價比高等特點,廣泛用于工控和電力儀器、儀表、智能家居等相關行業。

通過 Apple Vision Pro 釋放創造力:深入研究空間計算

Apple 最新進軍空間計算領域的 Apple Vision Pro,標志著重新定義我們與技術交互方式的重大飛躍。空間計算超越了傳統界限,允許用戶以無縫集成到物理世界的方式參與 2D 和 3D 內容。 我們可以關注兩種類型的體驗: 在空間中渲染 2D 內容。這涉及將現有設備窗口投影到空間領域…

通過C++和libcurl下載網易云音樂音頻文件的5個簡單步驟

概述 在網絡編程中,使用C和libcurl庫下載文件是一項常見的任務。網易云音樂作為中國領先的在線音樂服務平臺之一,以其豐富的音樂資源、優質的音質和智能推薦系統而廣受歡迎。由于其平臺提供了大量的正版音樂資源,用戶在下載音頻文件時可能會…

開源發布:JAVA版低代碼報文網關-通過簡單配置快速對接銀行渠道

大家好,我是隱墨星辰,自從《百圖解碼支付系統設計與實現》專欄中的文章《圖解支付報文網關:一種低代碼報文網關的設計思路與核心代碼實現》發表以來,不少同學留言或私信問我如何實現,說是雖然看懂了思路,但…

pycharm 里面安裝 codeium 插件的時候,不能夠彈出登錄界面

pycharm 里面安裝 codeium 插件的時候,不能夠彈出登錄界面 pycharm 里面安裝 codeium 插件的時候,不能夠彈出登錄界面--解決如下A pycharm 里面安裝 codeium 插件的時候,不能夠彈出登錄界面–解決如下 #踩坑/pycharm/codeium插件無法登錄 安…

微信聯登報invalid code, rid: 66446806-0826d0b4-3a94ce3a ,錯誤碼:40029解決方法

目錄 一、問題描述二、問題原因三、解決方法 一、問題描述 微信登錄報錯: invalid code, rid: 66446806-0826d0b4-3a94ce3a ,錯誤碼:40029二、問題原因 后端設置的 appsecret 和 appid 與前端的 appid 不一致。 三、解決方法 檢查是否已…

用Ai編寫一個電機驅動程序

問:幫我寫一個步進電機的控制程序,要有包括加減速,以及電機步中斷處理函數。 答:編寫一個步進電機的控制程序涉及到硬件層面的操作,通常需要依賴特定的硬件平臺和相應的驅動程序。以下是一個簡化的示例,它展…