热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

#PCIE#8b/10b编码

前言8B10B,也叫做8字节10字节或8B10B。8B10B方式最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),

 

前言

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

一、基本知识

8b/10b编码的特性之一是保证DC 平衡。

采用8b/10b编码方式,可使得发送的“0”、“1”数量保持基本一致,连续的“1”或“0”不超过5位,即每5个连续的“1”或“0”后必须插入一位“0”或“1”,从而保证信号DC平衡,它就是说,在链路超时时不致发生DC失调。通过8b/10b编码,可以保证传输的数据串在接收端能够被正确复原,除此之外,利用一些特殊的代码( 在PCI-Express总线中为K码) ,可以帮助接收端进行还原的工作,并且可以在早期发现数据位的传输错误,抑制错误继续发生。

8b/10b编码是目前许多高速串行总线采用的编码机制,如 USB3.0、1394b、Serial ATA、PCI Express、Infini-band、Fiber Channel、RapidIO等总线或网络等。

8B/10B编码是目前高速串行通信中经常用到的一种编码方式。直观的理解就是把8bit数据编码成10bit来传输,为什么要引入这种机制呢?其根本目的是“直流平衡(DC Balance)”。当高速串行流的逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶的关系而造成信号错误,直流平衡的最大好处便是可以克服以上问题。
将8bit编码成10bit后,10B中0和1的位数只可能出现3种情况:
1.有5个0和5个1  ;  // Disparity  = 0 ; (不均等性)
2.有6个0和4个1 ; //  Disparity  = +2 ;(计算规则:0的个数减去1的个数。而RD(极性偏差或者运行不一致) ,如果1的个数比0多,那么是RD = +1;如果0的个数比1多,那么是RD= -1。此外,这里,6个0 并不是说会出现0000001111或者1111110000 这样的序列, 因为这样的序列已经被剔除出去。但是可以出现1010001001这样的,6个0和4个1的序列。连续5个0(0000011111、0000010111等)和5个1(1111100000)的序列,只有在控制码中存在)
3.有4个0和6个1  ;  // Disparity  = -2 ;
这样引出了一个新术语“不均等性(Disparity)”,就是1的位数和0的位数的差值,根据上面3种情况就有对应的3个Disparity 0、-2、+2。

二、工作原理

1.原理讲解

8bit原始数据会分成两部分,其低5位会进行5B/6B编码,高3位则进行3B/4B编码,这两种映射关系在当时已经成为了一个标准化的表格。人们喜欢把8bit数据表示成Dx.y的形式,其x=5LSB(least significant bit最低有效位),y=3MSB(most significant bit最高有效位)。

8b/10b编码是将一组连续的8位数据分解成两组数据,一组3位,一组5位,经过编码后分别成为一组4位的代码和一组6位的代码,从而组成一组10位的数据发送出去。相反,解码是将1组10位的输入数据经过变换得到8位数据位。

数据值可以统一的表示为DX.Y或KX.Y:

其中D表示为数据代码,

K表示为特殊的命令代码,

X表示输入的原始数据的低5位EDCBA,

Y 表示输入的原始数据的高3位HGF。

例如一个8bit数据101 10101,x=10101(21) y=101(5),现在我们就把这8bit数据写成D21.5,明白了吧!
Dx.y形式在进行5B/6B和3B/4B编码中表示更直观,下面我们来看看两张编码表:
对于8bit数据,它在表中的位序为HGFEDCBA,即H为最高位,A为最低位,EDCBA经过5B/6B编码为abcdei,HGF经过3B/4B编码为fghj。传送10bit编码的顺序为abcdeifghj。

8B/10B编码 <wbr>详解zz

† 3B/4B使用K.x.7

8B/10B编码 <wbr>详解zz
† 对于D.x.7&#xff0c;当和5B/6B组合时D.x.P7和D.x.A7编码必须选择一个来避免连续的5个0或1。遇上连续5个0或1的情况下使用“逗号码”来进行校准。D.x.A7用在x&#61;17 x&#61;18 x&#61;20当RD&#61;-1时&#xff0c;x&#61;11 x&#61;13 x&#61;14 当RD&#61;&#43;1时。当x&#61;23 x&#61;27 x&#61;29 x&#61;30时&#xff0c;使用K.x.7进行编码。其他情况下x.A7码不能被使用&#xff0c;他将会导致和其他“逗号序列”产生冲突。
‡ 候补编码K.x.y允许K.28.1 K.28.5 K.28.7作为“逗号码”来保证数据流中的唯一性。

   你们也许注意到了表中有个RD标志&#xff0c;它是Running Disparity的缩写&#xff0c;它的目的就是保持8B/10B编码中的直流平衡。它跟上面提到的Disparity其实是一样的意思&#xff0c;&#43;1用来表示1比0多&#xff0c;-1用来表示0比1多&#xff0c;-1是它的初始化状态。下面我们来看一张表来加深理解&#xff1a;

RD的全称为RunningDisparity&#xff0c;简称为RD&#xff0c;由于数据流不断从发送端向接收端传输&#xff0c;前面已发送数据的不一致性累积产生的状态称为“运行不一致”&#xff0c;RD会出现“&#43;1”和“-1”两种状态&#xff0c;“&#43;1”表示正极性&#xff0c;即位“1”比位“0”多&#xff1b;“-1”表示负极性&#xff0c;即位“0”比位“1”多&#xff0c;当前RD计算方式为&#xff1a;

RD &#61; Number(1) – Number(0) &#43; Number&#xff08;past&#xff09;

RD的初始值为“-1”&#xff0c;下一状态RD的值依赖于当前的RD值以及当前6B或者4B码的极性&#xff0c;根据当前RD的值&#xff0c;决定5b/6b,3b/4b的映射方式。

8B/10B编码 <wbr>详解zz

上面我们提到的“逗号码”和“逗号序列”&#xff0c;其实都是当初在规划8B/10B编码机制的时候&#xff0c;所谓的控制代码&#xff08;Control Characters&#xff09;的其中之一。8B/10B标准中使用了12个特殊的控制代码&#xff0c;他们能在数据中被发送&#xff0c;还可以组合成各种“原语”。

8B/10B编码 <wbr>详解zz

† 在控制代码中&#xff0c;K.28.1 K.28.5 K.28.7 是逗号序列&#xff0c;逗号序列是用来校准用的&#xff0c;如果K.28.7没有被使用&#xff0c;序列0011111 或者 1100000 是不会出现在任何编码中的。
‡ 在实际编码中如果K.28.7可以被使用&#xff0c;一种更复杂的校准规范需要†被使用&#xff0c;它们能组合成各种“原语”&#xff0c;在任何情况下多个K.28.7序列不允许被同时使用&#xff0c;它将导致不可探测的逗号序列。

 

当CurrentRD&#61;&#61;-1时&#xff0c;表示之前传输的数据中“0”的个数多于“1”的个数.

经过8b/10b编码后&#xff0c;连续的“1”和“0”的个数基本上不会超过5bit&#xff0c;只有在使用K码时&#xff0c;才会出现连续的5个0或1&#xff1a;



总结

 


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
author-avatar
爱情失挖_904
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有