8b10b編解碼仿真

一、基本概念

??8B/10B編碼(8-bit to 10-bit encoding)是一種將8位數據(包括數據字符和控制字符)轉換為10位符號(Symbol)的編碼技術,由IBM工程師Al Widmer和Peter Franaszek于1983年提出。其核心思想是通過引入冗余位(2位/8位,編碼效率80%),實現直流平衡、時鐘同步,廣泛應用于高速數據傳輸場景。
??直流平衡(DC Balance)的意思是確保傳輸信號中“0”和“1”的數量盡可能相等,避免直流偏置(DC Offset)導致的信號失真和傳輸損耗。還有通過冗余位調整符號的“偏置值”(Disparity),使連續傳輸的符號整體保持0和1的平衡。
??還有通過8B/10B編碼可以避免長串連續的0或1(如全0或全1),保證接收端能從數據流中提取穩定的時鐘信號。

二、編碼原理

??8B/10B將8位輸入分為兩部分:
? 高5位(5B):從8位中取高5位,編碼為6位符號(5B/6B編碼)。
? 低3位(3B):剩余低3位,編碼為4位符號(3B/4B編碼)。
??最終將6位和4位合并為10位符號。
??8B/10B編碼后的符號分為兩種:
(1) 數據符號(D碼): 8bit數據(0x00~0xFF)可映射到10bit符號中的512個,正負各256個。如下圖部分符號示例,參考Xilinx的ug196_Virtex-5 FPGA RocketIO GTP Transceiver用戶手冊。
在這里插入圖片描述

(2) 控制符號(K碼):編碼特殊控制字符(如K28.5用于幀同步)。如下圖示例。
在這里插入圖片描述

??為什么10bit符號會有正負之分?這里涉及到偏置值概念,也稱為運行不一致性(Running Disparity,RD)。
??偏置值表示當前符號中“1”與“0”的數量差。
? 若碼字有6個1和4個0,偏置值為+2;
? 若碼字有4個1和6個0,偏置值為-2;
??編碼器維護一個全局偏置狀態,根據前一個符號的偏置值,選擇當前符號的兩種可能編碼中偏置相反的版本,以保持整體平衡。
例:若前一個符號偏置為+1,當前符號優先選擇偏置為-1的編碼,使總偏置趨近于0。

三、應用場景

??8B/10B編碼是高速串行通信的經典方案,常見于:

  • 光纖通道(Fibre Channel)
  • 千兆以太網(Gigabit Ethernet)
  • PCI Express(PCIe)1.0/2.0
  • Serial ATA(SATA)
  • InfiniBand
  • USB 3.0(部分變體,如64B/66B為改進版)

四、K碼符號

??上表中8B/10B編碼中的K碼有12個,原表中沒有列出哪個是高位,哪個是低位,所以這里指示一下高低位。
在這里插入圖片描述

K28_0 = 8'h1C; // (10b-)10'h0BC, (10b+)10'h343
K28_1 = 8'h3C; // (10b-)10'h27C, (10b+)10'h183
K28_2 = 8'h5C; // (10b-)10'h2BC, (10b+)10'h143
K28_3 = 8'h7C; // (10b-)10'h33C, (10b+)10'h0C3
K28_4 = 8'h9C; // (10b-)10'h13C, (10b+)10'h2C3
K28_5 = 8'hBC; // (10b-)10'h17C, (10b+)10'h283
K28_6 = 8'hDC; // (10b-)10'h1BC, (10b+)10'h243
K28_7 = 8'hFC; // (10b-)10'h07C, (10b+)10'h383
K23_7 = 8'hF7; // (10b-)10'h057, (10b+)10'h3A8
K27_7 = 8'hFB; // (10b-)10'h05B, (10b+)10'h3A4
K29_7 = 8'hFD; // (10b-)10'h05D, (10b+)10'h3A2
K30_7 = 8'hFE; // (10b-)10'h05E, (10b+)10'h3A1

??K碼所對應的8bit數據只有配置K碼指示信號時才按K碼編碼,否則沒有K碼指示信號則只是普通D碼數據。

五、8B/10B編解碼仿真

??仿真工程可以去如下地址下載https://download.csdn.net/download/cjie221/90714799
??仿真框圖如下,用計數器產生0~255的數據,用k_valid為1來指示K碼數據。經encoder_8B10B測試單元編碼生成10bit符號,再經decoder_8B10B測試單元解碼恢復原始8bit數據和k_out指示信號。
在這里插入圖片描述
??仿真波形如下,encoder_8B10B和decoder_8B10B模塊數據輸出都比輸入數據延時2拍。
在這里插入圖片描述

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

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

相關文章

23龍信服務器wp

中規中矩的一套服務器,比較簡單 1.服務器系統的版本號是___。(格式:1.1.1111) 2.網站數據庫的版本號是___。(格式:1.1.1111) 3.寶塔面板的“超時”時間是___分鐘。(格式:…

Redis 存儲原理與數據模型(三)

目錄 存儲結構 存儲轉換 數據組織 hash 沖突 負載因子 擴容 縮容 漸進式rehash Redis 線程模型 單線程命令處理機制 為什么Redis 命令的單線程快 機制 優化 柔性數組 Redis reactor_io 多線程網絡模型 存儲結構 key-value鍵值對通過 hash 的方式存儲到數組中value 主要…

langchain4j中使用milvus向量數據庫做RAG增加索引

安裝milvus向量數據庫 官方網址 https://milvus.io/zh 使用docker安裝milvus mkdir -p /data/docker/milvus cd /data/docker/milvus wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh#在docker中啟動milvus sh standalone_emb…

UE5.3 C++ 房屋管理系統(一)

一.框架思路 1.如何加載。房屋管理,既然管理。就存在動態加載,和靜態加載的考慮。如果是靜態加載,就是在編輯器情況下放置,但這樣方便了擺放,但管理就需要在開始是將所有的房屋找到加到管理者里。你無法決定拖入場景的…

4.1【LLaMA-Factory 實戰】醫療領域大模型:從數據到部署的全流程實踐

【LLaMA-Factory實戰】醫療領域大模型:從數據到部署的全流程實踐 一、引言 在醫療AI領域,構建專業的疾病診斷助手需要解決數據稀缺、知識專業性強、安全合規等多重挑戰。本文基于LLaMA-Factory框架,詳細介紹如何從0到1打造一個垂直領域的醫…

解決LangChain4j報錯HTTP/1.1 header parser received no bytes

問題描述 當使用langchain4j-open-ai調用自己部署的大模型服務時報錯: public static void main(String[] args) {OpenAiChatModel model OpenAiChatModel.builder().apiKey("none").modelName("qwen2.5-instruct").baseUrl("http://19…

阿里云codeup以及本地gitclone+http

cmd命令行亂碼問題、解決 chcp 65001 git代碼提交 git add . git commit -m init git push origin master

2025.05.07-淘天算法崗-第二題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 02. 完美拼圖挑戰 問題描述 A先生是一位拼圖愛好者,他有兩種形狀的拼圖塊: a a a

Spring Boot中Redis序列化配置詳解

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 引言 在使用Spring Boot集成Redis時,序列化方式的選擇直接影響數據存儲的效率和系統兼容性。默認的JDK序列化存在可讀性差、存儲空間大等問題&am…

紫禁城多語言海外投資理財返利源碼帶前端uniapp純工程文件

測試環境:Linux系統CentOS7.6、寶塔、PHP7.2、MySQL5.6,根目錄public,偽靜態thinkphp,開啟ssl證書 語言:中文簡體、英文、越南語、馬來語、日語、巴西語、印尼語、泰語 前端是uniapp的源碼,我已經把nmp給你…

搭建大數據學習的平臺

一、基礎環境準備 1. 硬件配置 物理機:建議 16GB 內存以上,500GB 硬盤,多核 CPU虛擬機:至少 3 臺(1 主 2 從),每臺 4GB 內存,50GB 硬盤 2. 操作系統 Ubuntu 20.04 LTS 或 CentOS…

Linux 軟硬連接詳解

目錄 一、軟鏈接(Symbolic Link) ?定義與特性 ?實現方法?使用 ln -s 命令: 二、硬鏈接(Hard Link) 1、是什么 2、工作機制 3、實現方式 一、軟鏈接(Symbolic Link) ?定義與特性 定義…

每日c/c++題 備戰藍橋杯(洛谷P1115 最大子段和)

洛谷P1115 最大子段和 題解 題目描述 最大子段和是一道經典的動態規劃問題。題目要求:給定一個包含n個整數的序列,找出其中和最大的連續子序列,并輸出該最大和。若所有數均為負數,則取最大的那個數。 輸入格式: 第…

前端取經路——框架修行:React與Vue的雙修之路

大家好,我是老十三,一名前端開發工程師。在前端的江湖中,React與Vue如同兩大武林門派,各有千秋。今天,我將帶你進入這兩大框架的奧秘世界,共同探索組件生命周期、狀態管理、性能優化等核心難題的解決之道。無論你是哪派弟子,掌握雙修之術,才能在前端之路上游刃有余。準…

PyTorch API 1 - 概述、數學運算、nn、實用工具、函數、張量

文章目錄 torch張量創建操作索引、切片、連接與變異操作 加速器生成器隨機采樣原地隨機采樣準隨機采樣 序列化并行計算局部禁用梯度計算數學運算常量逐點運算歸約操作比較運算頻譜操作其他操作BLAS 和 LAPACK 運算遍歷操作遍歷操作遍歷操作遍歷操作遍歷操作遍歷操作遍歷操作遍歷…

java命令行打包class為jar并運行

1.創建無包名類: 2.添加依賴jackson 3.引用依賴包 4.命令編譯class文件 生成命令: javac -d out -classpath lib/jackson-core-2.13.3.jar:lib/jackson-annotations-2.13.3.jar:lib/jackson-databind-2.13.3.jar src/UdpServer.java 編譯生成class文件如下 <

ABC 轉 STL 全攻略:格式解析、方法實操與問題解決

在 3D 建模與設計領域&#xff0c;不同格式文件間的轉換是一項基礎且重要的操作。ABC&#xff08;Alembic&#xff09;和 STL&#xff08;Standard Triangle Language&#xff09;是其中常見的兩種格式。ABC 格式因其高效存儲和傳輸 3D 數據的特性&#xff0c;常被用于影視特效…

編寫一個處理txt的loader插件,適用于wbepack

處理txt的webpack的loader插件 編寫一個處理txt的loader插件&#xff0c;適用于wbepack 編寫一個處理txt的loader插件&#xff0c;適用于wbepack 實現一個處理txt的插件&#xff0c;給文本每行前后添加**** module.exports function txtLoader(content) {// 確保 Loader 是異…

DeepSeek的100個應用場景

在春節前夕&#xff0c;浙江杭州的AI企業DeepSeek推出了其開源模型DeepSeek-R1&#xff0c;以僅相當于Open AI最新模型1/30的訓練成本&#xff0c;在數學、編程等關鍵領域展現出媲美GPT-o1的出色性能。發布僅數日&#xff0c;DeepSeek-R1便迅速攀升至中美兩國蘋果應用商店免費榜…

ev_loop_fork函數

libev監視器介紹&#xff1a;libev監視器用法-CSDN博客 libev loop對象介紹&#xff1a;loop對象-CSDN博客 libev ev_loop_fork函數介紹:ev_loop_fork函數-CSDN博客 libev API吐血整理&#xff1a;https://download.csdn.net/download/qq_39466755/90794251?spm1001.2014.3…