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.mzph.cn/web/13257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux day6 yum下载,systemctl,

yum命令 yum [-y] install wget 通过yum下载wget小工具 -y的意思是,如果有询问,自动确认(总是允许)。 yum remove wget 也可以通过这种方式卸载wget

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.…

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, // 折现角度:圆滑…

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插件无法登录 安…

制氧机负离子的作用与好处深度解析

随着现代生活节奏的加快,空气质量逐渐下降,人们对健康生活的追求也日益增强。在这样的背景下,制氧机负离子功能因其多重健康效益而备受关注。本文将深入探讨制氧机负离子的作用与功效,帮助大家更好地了解并应用这一健康科技。 我们…

单片机烧录程序时“DTR的低电平复位,RTS高电平进入bootloader”有关的串口Modem联络信号

烧录程序时常见DTR和RTS引脚 参考,参考视频 因为常常使用的都是串口下载程序,常用的芯片CH340系列,下图中标红的引脚是MODEM联络信号,其中常见的DTR和RTS就是常见的串口Modem网络输出信号,也就是通过烧录软件控制的接…

深入解析Wireshark1:从捕获到分析,一网打尽数据包之旅

目录 1 认识 Wireshark 1.1 选择网卡界面 1.2 捕获数据包界面 1.3 常用按钮功能介绍 1.4 数据包列表信息 1.5 数据包详细信息 2 数据包案例分析 Frame: 物理层的数据帧概况 Ethernet II: 数据链路层以太网帧头部信息 Internet Protocol Version 4 (IPv4): 互联网层IP…

Git系列:git restore 高效恢复代码的技巧与实践

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

AndroidStudio集成高德地图后出现黑屏并报错

报错内容为:No implementation found for void com.autonavi.base.ae.gmap.GLMapEngine.nativeMainThreadTrigger(int, long) (tried Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger and Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeM…

爱吃香蕉的珂珂

题目链接 爱吃香蕉的珂珂 题目描述 注意点 piles.length < h < 10^9如果某堆香蕉少于k根&#xff0c;将吃掉这堆的所有香蕉&#xff0c;然后这一小时内不会再吃更多的香蕉返回可以在 h 小时内吃掉所有香蕉的最小速度 k&#xff08;k 为整数&#xff09; 解答思路 二…

数据分析实例——搭建电商的指标体系||对应功能开发需要接入的电商API接口说明

前言&#xff1a; 在日常工作中&#xff0c;数据分析中常常涉及搭建指标体系&#xff0c;搭建电商需要接入的电商API接口本文主要以电商为案例&#xff0c;来讲讲如何搭建指标体系。 指标体系的定义&#xff1a; 指标体系是由一系列指标组成的&#xff0c;这些指标是基于不同的…

React 第三十六章 Scheduler 任务调度

Scheduler 用于在 React 应用中进行任务调度。它可以帮助开发人员在处理复杂的任务和操作时更好地管理和优化性能。 关于 Scheduler 在React 如何渲染的可以参考 React 第三十四章 React 渲染流程 下面我们根据流程图先简单的了解 Scheduler 的调度过程 Scheduler 维护两个队…

C++入门系列-赋值运算符重载

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 赋值运算符重载 运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其返回值类型&#xff0c;函数名字以及参…

【GESP试卷】2024年03月Scratch三级试卷

2024年GESP03月认证Scratch三级试卷 分数&#xff1a;100 题数&#xff1a;27 一、单选题(共15题&#xff0c;每题2分&#xff0c;共30分) 010203040506070809101112131415CBACADDADCBCBAB 1、小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&…

24长三角A题思路+分析选题

需要资料的宝子们可以进企鹅获取 A题 问题1&#xff1a;西湖游船上掉落华为 mate 60 pro 手机 1. 手机掉落范围分析 物品特征&#xff1a;华为 mate 60 pro 手机的尺寸、重量、形状等特性。静水假设&#xff1a;西湖水面平静&#xff0c;不考虑水流影响。掉落位置&#xff…