当前位置: 首页 > news >正文

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.xdnf.cn/news/354385.html

相关文章:

  • 前端自学入门:HTML 基础详解与学习路线指引
  • WebRTC 源码原生端Demo入门-1
  • 【大模型ChatGPT+ArcGIS】数据处理、空间分析、可视化及多案例综合应用
  • 鸿蒙电脑:五年铸剑开新篇,国产操作系统新引擎
  • 机器人运动控制技术简介
  • SpringAI特性
  • Vscode 顶部Menu(菜单)栏消失如何恢复
  • 操作系统面试题(3)
  • C++之运算符重载实例(日期类实现)
  • 云上系统CC攻击如何进行检测与防御?
  • 【Rust测试】Rust代码测试方法详解与应用实战
  • Mac配置php开发环境(多PHP版本,安装Redis)
  • JDK8 HashMap红黑树退化为链表的机制解析
  • 第五节:对象与原型链:JavaScript 的“类”与“继承”
  • odoo-049 Pycharm 中 git stash 后有pyc 文件,如何删除pyc文件
  • RslRlOnPolicyRunnerCfg 学习
  • 生成自定义的androidjar文件具体操作
  • CSS vertical-align
  • Java学习手册:微服务设计原则
  • 【从0带做】基于Springboot3+Vue3的文物展览系统
  • 【文件系统—散列结构文件】
  • Nacos源码—7.Nacos升级gRPC分析三
  • [Windows] 希捷(Seagate)硬盘官方检测工具 - SeaTools(1.4.0.7)
  • OceanBase 在业务监控系统中的应用实践
  • Altera系列FPGA纯verilog视频图像去雾,基于暗通道先验算法实现,提供4套Quartus工程源码和技术支持
  • rust-candle学习笔记10-使用Embedding
  • Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制
  • SSHv2公钥认证示例-Paramiko复用 Transport 连接
  • 港大今年开源了哪些SLAM算法?
  • Github 热点项目 Cursor开源代替,AI代理+可视化编程!支持本地部署的隐私友好型开发神器。