目录

  • 前言
  • 一、简介
  • 二、转换过程
    • 2.1 背景
    • 2.2 具体转换过程
  • 三、其他相关链接
    • 1、PCIe物理层总结-PCIE专题知识(一)
    • 2、PCIe数据链路层图文总结-PCIe专题知识(二)
    • 3、PCIe物理层链路训练和初始化总结-PCIe专题知识(三)
    • 4、PCIe物理层弹性缓存机制解析-PCIe专题知识(四)
    • 5、PCI总线及发展历程总结

前言

本文主要通过图文方式介绍8b/10b编码,具体转换方式通过实例解析,方便读者快速掌握。

一、简介

8b/10b编码也叫做8字节/10字节,是目前高速串行通信中经常用到的一种编码方式,直观的理解就是把8bit数据编码成10bit来传输。该编码方式最初是由IBM公司在1983年发明并应用于ESCON[200M互联系统],由AI widmer和Peter Franaszek在IBM的刊物“研究与开发”上提出。

二、转换过程

2.1 背景

8b/10编码的特性就是保证DC平衡——直流平衡,其实就是串行数据中连续出现的1/0达到一个平衡均匀的状态,当高速串行流动逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶段关系而造成信号错误。
理想电容的阻抗公式通过上面公式可以知道,频率f越高,阻抗越低,反之,频率越低,阻抗越高。因此上图中的情况,当码型是高频的时候,基本可以不损耗的传输过去,但是当码型为连续的0或者1的时候,电容的损耗就很大,导致幅度不断降低,最严重的后果就是无法识别到底是0还是1,因此8b/10b编码就是为了尽量把低频的码型优化成较高频率的码型,从而降低阻抗带来的损耗。
将8bit编码成10bit后,连续的1或者0不能超过5位,所以10b中0和1的位数只可能出现3中情况:
有5个0和5个1
有6个0和4个1
有4个0和6个1

2.2 具体转换过程

1、拆分转换
假设原始8位数据从高到低用HGFEDCBA表示,8B/10B编码将8位数据分成高3位HGF和低5位EDCBA两个子组。然后经过5B/6B编码,将低5位EDCBA映射成abcdei;高3位经过3B/4B编码,映射成fghj,最后合成abcdeifghj发送。发送时由于是小端模式,a先发送,相反,解码是将1组10位的输入数据经过变换得到8位数据位。2、转换规则

将低5位EDCBA按其十进制数值记为x,将高3位按其十进制数值记为y,将原始8bit数据记为D.x.y,依次查表得到相应的转换结果。

5B/6B编码映射关系表

举例说明:
例如8bit数“101 10101”,即十进制数181,按照按照3/5的划分原则x=10101(21),y=101(5),所示这个数被表示为D.21.5。此外在8B/10B编码中,还需用到12种控制字符,用来标识传输数据的开始和结束,传输空闲等状态,按照上述规则,将控制字符记为K.x.y。

3B/4B编码映射关系表
RD:running disparity 直译“运行不一致性”,也翻译成“极性偏差”(running disparity,RD),RD是对编码后的数据流Disparity的一个统计,+1用来表示1比0多,-1用来表示0比1多,-1是它的初始化状态,编码中“1”和“0”数量相等的码字称为“完美平衡码”。

和5B/6B组合时D.x.m7和D.x.n7编码必须选择一个来避免连续的5个0或1。
具体怎么选择呢,是有规则的:

D.x.n7用在:x=17 x=18 x=20当RD=-1时;
x=11 x=13 x=14 当RD=+1时。
其他情况下x.n7码不能被使用

举例说明:
例1:
在编码时,RD的初始值为负,即RD-,根据当前的RD值,决定相应的编码输出。比如:在上表中,对于D.x.3(011),其对应的4B码字有两种:1100和0011,若此时RD为负,则取1100作为其对应的4B码字作为输出,同时检验此时的编码是否为完美编码,如果是完美编码,则保持RD的极性不变;否则改变RD的极性。通过控制RD的极性,同时在编码时根据RD的极性选择相对应的编码值,使得编码后的数据流有更好的直流平衡特性。

例2:
在上表中,对于D.x.4(100),其对应的4B码字有两种:1101和0010,若此时RD为负,则取1101作为其对应的4B码字作为输出,同时检验此时的编码是否为完美编码,如果是完美编码,则保持RD的极性不变;否则改变RD的极性。通过控制RD的极性,同时在编码时根据RD的极性选择相对应的编码值,使得编码后的数据流有更好的直流平衡特性,达到我们的缓解长“0”或长“1”的目的。

8B/10B编码映射关系表
下图所示为RD状态转移图:

规划8B/10B编码机制的时候,使用了12个特殊的控制代码(Control Characters),他们能在数据中被发送,还可以组合成各种“原语”。由于控制字符只有12种,对其单独编码即可,可不按照上述方法对其编码。其编码映射关系如下:

三、其他相关链接

1、PCIe物理层总结-PCIE专题知识(一)

2、PCIe数据链路层图文总结-PCIe专题知识(二)

3、PCIe物理层链路训练和初始化总结-PCIe专题知识(三)

4、PCIe物理层弹性缓存机制解析-PCIe专题知识(四)

5、PCI总线及发展历程总结

8b/10b编码方式(详细)总结附实例快速理解相关推荐

  1. 高速串行通信常用的编码方式-8b/10b编码/解码

    绪论 8b/10b编码/解码是高速串行通信,如PCle SATA(串行ATA),以及Fiber Channel中常用的编解码方式.在发送端,编码电路将串行输入的8比特一组的数据转变成10比特一组的数据 ...

  2. USB3.0中的8/10b编码技术详细解释

    USB3.0在Physical layer中定义了超速USB的信号传输技术,在其中最关键的就是引入了8/10b编码技术,如下图中的红色部分. 8/10b编码和解码的的流程如下图所示,在编码时将ABCD ...

  3. 高速串行总线系列(1)8B/10B编码技术

    目录 8B/10B编码 5B/6B 编码表 3B/4B 编码表 控制字符编码表 8B/10B编码的利用率 参考文献 8B/10B编码 为什么要使用8B/10B编码? 8b/10b编码的特性之一是保证D ...

  4. 高速收发器之8B/10B编码

    前面文章说过,在高速链路中导致接收端眼图闭合的原因,很大部分并不是由于高频的损耗太大了,而是由于高低频的损耗差异过大,导致码间干扰严重,因此不能张开眼睛.针对这种情况,前面有讲过可以通过CTLE和FF ...

  5. #PCIE# 8b/10b 编码

    前言 8B/10B,也叫做8字节/10字节或8B10B.8B/10B方式最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),由Al Widmer和Peter Franaszek在I ...

  6. 【FPGA】8B/10B编码--转自wiki百科

    8B/10B,也叫做8字节/10字节或8B10B.8B/10B方式最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),由Al Widmer和Peter Franaszek在IBM的 ...

  7. 8B/10B编码原理详解、Verilog实现及在JESD204B中的应用

    目录 1.8B/10B介绍 2.原理 3.Verilog实现 4.实例:在JESD204B中的应用 参考资料: 1.8B/10B介绍 8B/10B编码的目的是防止串行的数据出现长时间的连0连1,因为这 ...

  8. 线路/信道编码技术(1)——8B/10B编码

    1. 线路编码技术 线路编码机制将输入原始数据转变为接收器可接收的数据格式,同时保证数据流中有足够的时钟信息提供给接收端的时钟恢复电路.线路编码技术提供了一种将数据对齐到字节/字的方法,可以保持良好的 ...

  9. 让我们来搞清楚8b/10b编码到底是怎么回事吧

    前言:很多知识我们往往只是了解了皮毛,不知道它为什么产生,更不清楚它深层的应用,很多人半瓶水晃荡,而这正是我最厌恶的,对于8B/10B编码这个知识点我就来扯开它的神秘面纱. 8b/10b的由来: 8B ...

最新文章

  1. Python+OpenCV 图像处理系列(7)—— 图像色彩空间及转换
  2. Silverlight 4 中数据绑定发生的变化
  3. 测试知识整理——基础篇
  4. 用python画漫画_Python——turtle绘制动漫形象(魔法少女小圆晓美焰,super beautiful)...
  5. eclipse 在 Linux中常用命令,持续更新....
  6. 十八、深入Java 访问修饰符和非访问修饰符
  7. IIS7 经典模式和集成模式的区别分析
  8. .NetCore下使用Polly结合IHttpClientFactory实现聚合服务
  9. HDU-3998 Sequence LIS统计
  10. 第3章 Linux内核调试手段之三
  11. git 拉新项目_Git学习系列之Git基本操作拉取项目(图文详解)
  12. 疫情防控背景下在线课程教学满意度影响因素分析与对策探讨-以电子商务及法律专业为例
  13. 在Windows下使用安装并启动HDFView踩坑记录
  14. Android MessageQueue与Message详解
  15. foxmail的邮局和端口_Foxmail客户端设置
  16. 1、当鼠标移动到目标上的时候,自动显示一个提示框。
  17. STC12C5A56S2和DS12C887做的电子闹铃
  18. ppt模板如何制作个性人物海报?
  19. 漫画:什么是MD5算法?
  20. littlevgl教程 Linux,树莓派littlevGL系列教程:容器控件(lv_cont)

热门文章

  1. android原生和H5交互(转)
  2. 面试题-专业名称诠释
  3. Android原生音频变调代码流程分析
  4. nRF52832学习记录(十、PWM 脉冲调制)
  5. 机场安检装X失败的大姐:国外是这么安检的!
  6. java8日期时间格式化与解析
  7. FLTK的UI设计工具FLUID使用方法总结
  8. 动态脑电图(Ambulatory EEG)及其工作过程、数据处理
  9. java飘动_OpenGL -- 飘动的旗帜 (java)
  10. 在.jupyter文件夹中找不到jupyter_notebook_config.py文件怎么办