8bit/10bit线路编码简介

线路编码:

线路/信道:

特指在数据(信息)传输中,信号传输的物理通道。本质上信道不局限于有线/无线,也不局限于具体的载体材质,可以是铜线、光信号、甚至是无介质空间中的电磁场。在本文中,主要针对有线通讯和光通讯应用的场景来具体讨论和展开。

  1. 信号交叠

每一种信道都有自己的特性,这些特性限制了最高的传输频率,更高频率的传输,会导致前后两个信息之间难以分辨,产生信号的交叠。

  1. 时钟信息

在数字电路系统中,需要传输的最高频率的信息就时钟信息。时钟频率要低于信道允许传输的最高频率。

  1. 信道干扰

任何信道都会受到所处环境的干扰。持续存在的干扰可以等同于基底噪声。突发的干扰则会引起信道的短暂不可靠,甚至造成传输错误。

总体来说,就是信道要保证传输的数据易于被接收端接收(采样)、分辨、恢复。

线路/信道编码:

线路/信道编码就是将原始需要传输的信息,经过一定的变换,使其更适合其所要使用的传输信道。通常要考虑如下因素:

  1. 带宽利用率要高

没有哪种信道编码可以100%利用信道的传输资源,但是要尽量减少信道编码的开销。

  1. 时钟信息传输要可靠

为了便于接收端的时钟恢复电路,必须充分传递时钟信息(控制连续的0和连续的1的个数)。

  1. 数据分割和对齐的方法

字节的划分、信道间的数据对齐等

  1. 具有一定的抗干扰能力

误码检测、误码纠错等

  1. 适应远距离传输

直流平衡等

8b-10b编码简介:

8b/10bB编码是1983年由IBM公司的Al Widmer和PeterFranaszek所提出的数据传输编码标准,目前已经被广泛应用到高速串行总线,如IEEE1394b、SATA、PCI-Express、Infini-band、FiberChannel、XAUI、RapidIO、USB 3.0等。

  • 8b/10b编码,实际上是3b/4b 和 5b/6b两个编码的组合。
  • 输入的8bit原始数据,被拆分成高3bit(记作y),和低5bit(记作x)两部分
  • 拆分后的两部分,分别做3b/4b 和 5b/6b编码。生成10bit数据(4bit + 6bit)
  • 最后生成的10bit数,按照LSB的顺序,从最低位逐bit发送。

3b/4b 和 5b/6b编码表

  1. 5b/6b code

Input

RD=-1

RD=+1

Input

RD=-1

RD=+1

data

EDCBA

iedcba

data

EDCBA

iedcba

D.00

00000

111001

000110

D.16

10000

110110

001001

D.01

00001

101110

010001

D.17

10001

110001

D.02

00010

101101

010010

D.18

10010

110010

D.03

00011

100011

D.19

10011

010011

D.04

00100

101011

010100

D.20

10100

110100

D.05

00101

100101

D.21

10101

010101

D.06

00110

100110

D.22

10110

010110

D.07

00111

000111

111000

D.23

10111

010111

101000

D.08

01000

100111

011000

D.24

11000

110011

001100

D.09

01001

101001

D.25

11001

011001

D.10

01010

101010

D.26

11010

011010

D.11

01011

001011

D.27

11011

011011

100100

D.12

01100

101100

D.28

11100

011100

D.13

01101

001101

D.29

11101

011101

100010

D.14

01110

001110

D.30

11110

011110

100001

D.15

01111

111010

000101

D.31

11111

110101

001010

K.28

11100

111100

000011

理论上分析:

  • 5bit码共有32个码字,6bit码共有64个码字。因此5b/6b编码中,6bit码字只需要用一半。
  • 为了去除连0和连1,自然会想到用64个码字中0/1比较平衡的码字。
  • 6bit码字中,0和1个数相等(3个0和3个1)的码字共有C63=20个

0和1的个数相差2的有:2*C62=30个

0和1的个数相差4的有:2*C61=12个

0和1的个数相差6(全0或全1)的有:2*C60=2个

  • 理论上,我们选择上述的前两种(0和1个数差小于等于2)码字就够了。

编码方式:

  • 5bit码字中0和1的个数相差为1、3、5(0和1的个数不可能相等)
  • 0比1多一个的码字有10个:

D.03(00011)        RD-/+ (100011)

D.05(00101)            RD-/+ (100101)

D.06(00110)             RD-/+ (100110)

D.09(01001)            RD-/+ (101001)

D.10(01010)            RD-/+ (101010)

D.12(01100)             RD-/+ (101100)

D.17(10001)            RD-/+ (110001)

D.18(10010)            RD-/+ (110010)

D.20(10100)            RD-/+ (110100)

D.24(11000)             RD-    (110011)   RD+ (001100)

从上面可以看到,5bit码字中当0比1多一个时,直接在前面添加1,编程6bit码字。这时的6bit码字0和1个数相等。

但是D.24比较特殊,按照上述规则,D.24编码后应该是111000,但是由于D.07,占用了相应的码字,因此D.24采用了其特殊的映射编码方式。

  • 1比0多一个的码字也有10个(其实就是0/1翻转一下,码字翻转也等同于用31去减一下):

D.28(11100)        RD-/+ (011100)

D.26(11010)             RD-/+ (011010)

D.25(11001)             RD-/+ (011001)

D.22(10110)             RD-/+ (010110)

D.21(10101)            RD-/+ (010101)

D.19(10011)             RD-/+ (010011)

D.14(01110)             RD-/+ (001110)

D.13(01101)             RD-/+ (001101)

D.11(01011)             RD-/+ (001011)

D.07(00111)             RD-    (000111)   RD+ (111000)

从上面可以看到,5bit码字中当0比1多一个时,直接在前面添加1,编程6bit码字。这是的6bit码字0和1个数相等。

由于D.07占用了2个1/0个数相等的6bit码字,因此D.24使用了其他的码字。到此,20个0/1平衡的6bit码字全部用完了。

但是D.07比较特殊,在5’b00111前加一个0编程6’b000111后,此码字仅作为RD-,同时还编码了RD+ 6’b111000,这个码字刚好占用了D.24对应的码字,因此才导致了D.24使用了两个1/0差为2的码字。 这样做,主要是因为码字000111和111000的前后边界都是3连0/1,这很容易和前后的其他码字形成多个连续的0/1,因此编码时就必须考虑其他码字情况来做适当的选择,以避免过多的连0/1。

  • 1和0个数相差3的码表

Input

RD=-1

RD=+1

Input

RD=-1

RD=+1

data

EDCBA

iedcba

data

EDCBA

iedcba

D.01

00001

101110

010001

D.23

10111

010111

101000

D.02

00010

101101

010010

D.27

11011

011011

100100

D.04

00100

101011

010100

D.29

11101

011101

100010

D.08

01000

100111

011000

D.30

11110

011110

100001

D.16

10000

110110

001001

D.15

01111

111010

000101

D.23、D.27、D.29、D.30对应的5bit码字中1的个数比0多,因此其RD-编码即为在其前面加1bit0。而RD+则是RD-按bit取反。

D.01、D.02、D.04、D.08对应的5bit码字中0的个数比1多,因此其RD+是在第二bit处插入1bit1(最前面加1bit1对应的码字被D.23、D.27、D.29、D.30的RD-占用了)

D.16和D.15,比较特殊,为了减少连续的0/1,采用了特殊的编码方法。

但是D.30的中间存在4个连续的0/1:6’b011110和6’b100001。

  • 特殊编码:

Input

RD=-1

RD=+1

Input

RD=-1

RD=+1

data

EDCBA

iedcba

data

EDCBA

iedcba

D.16

10000

110110

001001

D.15

01111

111010

000101

D.00

00000

111001

000110

D.31

11111

110101

001010

D.24

11000

110011

001100

K.28

11100

111100

000011

编码的2个基本原则:

  1. RD为“-”时,表示前面的码流中0比较多,因此RD-的码字中,1要比0多。同理,当RD为“+”时,码字中的0要比1多。
  2. 使用的码字中,尽量避免的连续的0或1的编码,尤其在码字的边界处。

K.28 作为控制码,其边界有连续的0和1,因此在和前后其他码字构成连续的码流时,需要考虑避免过长的连续0/1的情况。

由此我们也考虑到D.07采用的编码,虽然0和1的个数是均等的,但是由于其连续的0和连续的1都在码字的边界,因此在构成连续的码流时也容易和前后的其他码字组成比较长的连0/1。

由此还剩下两个编码: 110000和001111。

3bit/4bit code

Input

RD=-1

RD=+1

Input

RD=-1

RD=+1

data

HGF

jhgf

data

HGF

jhgf

D.x.0

000

1101

0010

K.x.0

000

1101

0010

D.x.1

001

1001

K.x.1

001

0110

1001

D.x.2

010

1010

K.x.2

010

0101

1010

D.x.3

011

0011

1100

K.x.3

011

0011

1100

D.x.4

100

1011

0100

K.x.4

100

1011

0100

D.x.5

101

0101

K.x.5

101

1010

0101

D.x.6

110

0110

K.x.6

110

1001

0110

D.x.P7

111

0111

1000

D.x.A7

111

1110

0001

K.x.7

111

1110

0001

3bit/4bit码表看起来比较直观:

  • D.x.1、D.x.2、D.x.5、D.x.6都是简单地在最前面插入相应的1/0,凑成1和0平衡的4bit编码。
  • D.x.3和5bit/6bit编码中的D.07类似,占用了两个平衡的码字,因此D.x.4和D.24类似,只能有非平衡的码字了。
  • D.x.0采用了特殊的编码后,剩下四个连0/1的分给了D.x.7
  • 为了防止码流中D.x.7和前后的码连接出太多的0/1,给D.x.7分配了2组码字,并且规定如下:

1)3bit/4bit码排在5bit/6bit码之后(D.x.y中的x表示5bit/6bit编码的结果)。在和5bit/6bit编码组合时,D.x.P7和D.x.A7必须选一个,但是要避免5个以上的连0或连1。

2)结合5bit/6bit编码,以下情况选择A7,其他情况全都使用P7:

当RD为“-”是,有3个码字选择A7,即:

D.17.A7、D.18.A7、D.20.A7

当RD为“+”是,有3个码字选择A7,即:

D.11.A7、D.13.A7、D.14.A7

此处更能清晰的理解编码的思想,和RD的含义:在有RD+和RD-的编码中,利用不同RD采用不同的编码,都可以有效的避免过多的连续0/1情况。但是对于D.17、D.18、D.20、D.11、D.13、D.14这样的编码并没有区分RD+和RD-,这在和4bit/5bit编码时,就容易产生多个连续的0/1。尤其当比较平衡的码字都分配完后,K.x.7的编码方式就必须考虑这一点了。

  • K码的码字共有16个(4bti所有码字也是16个),而为了避免出现某些连0/1的码字,在K码的16个码字中,是有重复码字的,因此在使用K码时,情况会比较复杂。

使用K码时,要避免和其他码字混淆,因此并不是所有的组合都会被使用到。

K code:

K码作为特殊的控制编码,专门用来表示数据以外的控制指令。可以根据需要镶嵌在数据码流中的任何位置

基于K码的应用和复杂性,在原始的8bit/10bit编码中,只定义了12个特殊的控制码。他们可以和其他码字一起组成各种“原语”。

input

RD= -1

RD= +1

HGF  EDCBA

abcdei  fghj

abcdei  fghj

K28.0

000  11100

001111  0100

110000  1011

K28.1

001  11100

001111  1001

110000  0110

K28.2

010  11100

001111  0101

110000  1010

K28.3

011  11100

001111  0011

110000  1100

K28.4

100  11100

001111  0010

110000  1101

K28.5

101  11100

001111  1010

110000  0101

K28.6

110  11100

001111  0110

110000  1001

K28.7

111  11100

001111  1000

110000  0111

K23.7

111  10111

111010  1000

000101  0111

K27.7

111  11011

110110  1000

001001  0111

K29.7

111  11101

101110  1000

010001  0111

K30.7

111  11110

011110  1000

100001  0111

注意这个码表的排列顺序。

  • K28.1、K28.5、K28.7中出现了5个连续的0/1,这在8bit/10bit编码中是绝无仅有的。因此这连续出现的5个0/1,被定义为 逗号码(commas),或者逗号序列,通常用来做序列的bit校准。

8bit/10bit编码规则

RD(running disparity):

RD用来表示0和1的相对多少。如果RD=(+1),表示之前的编码中1的个数比0多;如果RD=(-1),表示之前的编码中0的个数比1多。

Previous RD

Disparity of 6 or 4 bit code

Next RD

-1

-2(0比1多2个)

此情况禁止发生

-1

0

-1

-1

2

+1

+1

-2

-1

+1

0

+1

+1

2

此情况禁止

  • 每一个编码过程有2个输入,和两个输出:

输入:           要编的源码 码字

上一次编码后得出的RD值

输出:           编码后的码字

本次编码后的RD值

编码过程:

  1. 初始RD=-1
  2. 输入一个要编码的原始8bit码字,和一个控制码 z (z用来表示是D码码,还是K码)
  3. 将码字拆分成高3bit(HGF) 和 低5bit(EDCBA)。
  4. 依据控制z bit,决定使用D码表,还是K码表
  5. 根据当前RD、和5bit码,编码(查表)得到6bit 码字(abcdei)。
  6. 根据编码后码字(abcdei),计算当前的disparity值(-2/0/+2)。
  7. 根据当前RD和disparity值,得出新的RD值。
  8. 依据新的RD,和3bit(HGF),以及选择后的码表(D码或K码),编码(查表)得到4bit码字(fghj)
  9. 根据编码后的码字(fghj),计算当前的disparity值(-2/0/+2)。
  10. 根据当前RD和disparity值,得出本次编码的RD值。
  11. 将编码后的jhgfiedcba,从最低bit逐bit发送,发送顺序:

a,b,c,d,e,I,f,g,h,j

  1. RD= 上一次编码后的RD值,
  2. 重复2)~12)步骤。

K码的应用:

在PCIE协议中,使用如下的K码:

Encoding

symbol

function

description

K28.5

001111 1010

110000 0101

COM

comma

Used for Lane and Link Initialization and management

K27.7

110110 1000

001001 0111

STP

Start TLP

Marks the start of a Transaction Layer Packet

K28.2

001111 0101

110000 1010

SDP

Start DLLP

Marks the start of a Data Link Layer Packet

K29.7

101110 1000

010001 0111

END

end

Marks the end of TLP or DLLP

K30.7

011110 1000

100001 0111

EDB

End bad

Marks the end of nullified TLP

K23.7

111010 1000

000101 0111

PAD

Pad

Used in Framing and Link Width and Lane ordering negotiations

K28.0

001111 0100

110000 1011

SKP

skip

Used for compensating for different bit rates for two communicating ports

K28.1

001111 1001

110000 0110

FTS

Fast training sequence

Used within an ordered set to exit from L0s to L0

K28.3

001111 0011

110000 1100

IDL

Idle

Used in the Electrical idle ordered set

K28.4

001111 0010

110000 1101

reserved

K28.6

001111 0110

110000 1001

reserved

K28.7

001111 1000

110000 0111

reserved

从上表可以理解到:

  1. 仅有K28.5中包含5个连续的0/1,因此用作comma(逗号码),作为串行序列的bit位检测标识,区分symbol。K28.5可以定期或者不定期地插入到码流中的任何部分,作用类似于帧同步信号,接收方收到后,需要从码流中将其去掉。
  2. K28.0(skip):在多个lane时,用以填充空闲的lane,以达到各个lane之间的字节对齐。

8bit/10bit线路编码简介相关推荐

  1. python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用

    注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...

  2. php 8bit 10bit 解码,求助:我想把10bit的MKV压制成8bitMP4

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 装了ffdshow avisynth megui megui自带的x264换成了10bit版 这个是用avswriter生成的avs文件 LoadPlug ...

  3. HDMI接口简介---分辨率 时钟频率 lane速率计算

    全部内容转自:https://www.cnblogs.com/ruihuagogogo/p/6564730.html 补充一个链接,关于TMDS发送数据的详细解析:http://blog.csdn.n ...

  4. 10bit灰阶测试图_真假10bit?!到底该怎么测?测试显示器10bit色深的两种方法

    为什么要开启10bit色深? 因为显示器的色深越高,容纳的颜色就越多,越能够在色彩的过度渐变方面做的细腻,因为颜色渐变更自然了,观感也会得到很大的提升. 现在就是一个显示行业升级换代的分水岭,就像当年 ...

  5. 8bit、12bit、16bit图像数据

        注:以下信息摘自各个网页和论坛.只是做一个综合.谢谢前辈们的分享. 一. 若R.G.B每种颜色使用一个字节(8bit)表示,每幅图像可以有1670万种颜色:若R.G.B每种颜色使用两个字节(1 ...

  6. python界面颜色设置_pycharm修改界面主题颜色的方法

    pycharm修改界面主题颜色的方法 更新时间:2019年01月17日 09:53:27 作者:转身及不见 今天小编就为大家分享一篇pycharm修改界面主题颜色的方法,具有很好的参考价值,希望对大家 ...

  7. 视频驱动之eDP接口LCD调试

    一 概述 eDP接口是一种基于DisplayPort架构和协议的内部数字接口,适用于平板电脑,笔记本,一体机等等,未来将逐步取代LVDS接口 二 eDP接口简介 下图1为eDP接口架构图,主要分为3部 ...

  8. Hi3518EV300-venc例程分析

    Hi3518EV300-venc例程分析 前言: MAPI 层业务流程 VENC录像 流程: 1.定义要绑定的VCap,VProc,VENC变量 2.start vcap 3.start vproc( ...

  9. 华为_网络工程师_初级笔记(完整版)

    初级网络工程师笔记完整版 1.1 企业网架构 2.0 OSI 七层 模型 2.1 OSI模型-简介 2.2 OSI模型-物理层 2.3 OSI模型-数据链路层 2.4 OSI模型-网络层 2.5 OS ...

  10. 小型点阵屏后台监控系统研发

    目 录 一.绪论 1 (一)课题的研究意义 1 (二)设计任务及要求 1 (三)单片机的发展史 2 (四)单片机的发展趋势 3 二.系统的整体结构 5 三.单片机介绍 6 1.单片机引脚介绍 9 2. ...

最新文章

  1. 【Android OpenGL ES】阅读hello-gl2代码(二)Java代码
  2. LAMP兄弟连PHP课程学习笔记 第二天 PHP中使用变量
  3. c语言结果用全局变量返回,c语言参数传递和返回值及变量存储.doc
  4. docker本地仓库镜像
  5. (转)zookeeper理解
  6. ACL 2020 《Cross-Modality Relevance for Reasoning on Language and Vision》论文笔记
  7. mysql-5.7.37-winx64解压版安装超详细图文教程
  8. socket 通信关于bind那点事
  9. 为了养成NLP卷王,我画了一张路线图
  10. Atcoder Grand Contest 010 B - Boxes 差分
  11. 深度学习分类任务常用评估指标
  12. [分治] leetcode 23 合并K个升序链表
  13. linux模块builtin是什么意思,Linux命令手册
  14. harmonyos2.0怎么更新,harmonyOS 2.0什么时候更新 harmonyOS 2.0手机开发者Beta版更新内容[多图]...
  15. SpingMVC简易学习笔记二(springMVC的请求和响应)
  16. js 的常用工具类库
  17. 回归算法--K近邻算法
  18. window8系统激活工具
  19. Ubuntu下 百度在线语音合成使用
  20. mac电脑最好用的图片浏览器,没有之一

热门文章

  1. python猜拳游戏
  2. 2021年安全生产模拟考试(建筑起重信号司索工模拟考试题库)安考星
  3. 2021年安全生产模拟考试(全国特种作业操作证电工作业-继电保护模拟考试题库一)安考星
  4. tx2 GPIO使用教程
  5. 如何规避采购风险?五种有效的采购风险防范措施
  6. java安装后怎么下载forge_我的世界forge怎么安装
  7. Laravel 登录验证,md5验证,自定义验证,自定义表
  8. win10微软商店/账号登录一直转圈
  9. c语言小球消砖块的游戏,求大神帮忙看看这个弹弹球消砖块的游戏代码,为什么speed只能15...
  10. 网络口碑推广主要目的全知道