8bit/10bit线路编码简介
8bit/10bit线路编码简介
线路编码:
线路/信道:
特指在数据(信息)传输中,信号传输的物理通道。本质上信道不局限于有线/无线,也不局限于具体的载体材质,可以是铜线、光信号、甚至是无介质空间中的电磁场。在本文中,主要针对有线通讯和光通讯应用的场景来具体讨论和展开。
- 信号交叠
每一种信道都有自己的特性,这些特性限制了最高的传输频率,更高频率的传输,会导致前后两个信息之间难以分辨,产生信号的交叠。
- 时钟信息
在数字电路系统中,需要传输的最高频率的信息就时钟信息。时钟频率要低于信道允许传输的最高频率。
- 信道干扰
任何信道都会受到所处环境的干扰。持续存在的干扰可以等同于基底噪声。突发的干扰则会引起信道的短暂不可靠,甚至造成传输错误。
总体来说,就是信道要保证传输的数据易于被接收端接收(采样)、分辨、恢复。
线路/信道编码:
线路/信道编码就是将原始需要传输的信息,经过一定的变换,使其更适合其所要使用的传输信道。通常要考虑如下因素:
- 带宽利用率要高
没有哪种信道编码可以100%利用信道的传输资源,但是要尽量减少信道编码的开销。
- 时钟信息传输要可靠
为了便于接收端的时钟恢复电路,必须充分传递时钟信息(控制连续的0和连续的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编码表
- 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个基本原则:
- RD为“-”时,表示前面的码流中0比较多,因此RD-的码字中,1要比0多。同理,当RD为“+”时,码字中的0要比1多。
- 使用的码字中,尽量避免的连续的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值
编码过程:
- 初始RD=-1
- 输入一个要编码的原始8bit码字,和一个控制码 z (z用来表示是D码码,还是K码)
- 将码字拆分成高3bit(HGF) 和 低5bit(EDCBA)。
- 依据控制z bit,决定使用D码表,还是K码表
- 根据当前RD、和5bit码,编码(查表)得到6bit 码字(abcdei)。
- 根据编码后码字(abcdei),计算当前的disparity值(-2/0/+2)。
- 根据当前RD和disparity值,得出新的RD值。
- 依据新的RD,和3bit(HGF),以及选择后的码表(D码或K码),编码(查表)得到4bit码字(fghj)
- 根据编码后的码字(fghj),计算当前的disparity值(-2/0/+2)。
- 根据当前RD和disparity值,得出本次编码的RD值。
- 将编码后的jhgfiedcba,从最低bit逐bit发送,发送顺序:
a,b,c,d,e,I,f,g,h,j
- RD= 上一次编码后的RD值,
- 重复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 |
从上表可以理解到:
- 仅有K28.5中包含5个连续的0/1,因此用作comma(逗号码),作为串行序列的bit位检测标识,区分symbol。K28.5可以定期或者不定期地插入到码流中的任何部分,作用类似于帧同步信号,接收方收到后,需要从码流中将其去掉。
- K28.0(skip):在多个lane时,用以填充空闲的lane,以达到各个lane之间的字节对齐。
8bit/10bit线路编码简介相关推荐
- python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用
注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...
- php 8bit 10bit 解码,求助:我想把10bit的MKV压制成8bitMP4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 装了ffdshow avisynth megui megui自带的x264换成了10bit版 这个是用avswriter生成的avs文件 LoadPlug ...
- HDMI接口简介---分辨率 时钟频率 lane速率计算
全部内容转自:https://www.cnblogs.com/ruihuagogogo/p/6564730.html 补充一个链接,关于TMDS发送数据的详细解析:http://blog.csdn.n ...
- 10bit灰阶测试图_真假10bit?!到底该怎么测?测试显示器10bit色深的两种方法
为什么要开启10bit色深? 因为显示器的色深越高,容纳的颜色就越多,越能够在色彩的过度渐变方面做的细腻,因为颜色渐变更自然了,观感也会得到很大的提升. 现在就是一个显示行业升级换代的分水岭,就像当年 ...
- 8bit、12bit、16bit图像数据
注:以下信息摘自各个网页和论坛.只是做一个综合.谢谢前辈们的分享. 一. 若R.G.B每种颜色使用一个字节(8bit)表示,每幅图像可以有1670万种颜色:若R.G.B每种颜色使用两个字节(1 ...
- python界面颜色设置_pycharm修改界面主题颜色的方法
pycharm修改界面主题颜色的方法 更新时间:2019年01月17日 09:53:27 作者:转身及不见 今天小编就为大家分享一篇pycharm修改界面主题颜色的方法,具有很好的参考价值,希望对大家 ...
- 视频驱动之eDP接口LCD调试
一 概述 eDP接口是一种基于DisplayPort架构和协议的内部数字接口,适用于平板电脑,笔记本,一体机等等,未来将逐步取代LVDS接口 二 eDP接口简介 下图1为eDP接口架构图,主要分为3部 ...
- Hi3518EV300-venc例程分析
Hi3518EV300-venc例程分析 前言: MAPI 层业务流程 VENC录像 流程: 1.定义要绑定的VCap,VProc,VENC变量 2.start vcap 3.start vproc( ...
- 华为_网络工程师_初级笔记(完整版)
初级网络工程师笔记完整版 1.1 企业网架构 2.0 OSI 七层 模型 2.1 OSI模型-简介 2.2 OSI模型-物理层 2.3 OSI模型-数据链路层 2.4 OSI模型-网络层 2.5 OS ...
- 小型点阵屏后台监控系统研发
目 录 一.绪论 1 (一)课题的研究意义 1 (二)设计任务及要求 1 (三)单片机的发展史 2 (四)单片机的发展趋势 3 二.系统的整体结构 5 三.单片机介绍 6 1.单片机引脚介绍 9 2. ...
最新文章
- 【Android OpenGL ES】阅读hello-gl2代码(二)Java代码
- LAMP兄弟连PHP课程学习笔记 第二天 PHP中使用变量
- c语言结果用全局变量返回,c语言参数传递和返回值及变量存储.doc
- docker本地仓库镜像
- (转)zookeeper理解
- ACL 2020 《Cross-Modality Relevance for Reasoning on Language and Vision》论文笔记
- mysql-5.7.37-winx64解压版安装超详细图文教程
- socket 通信关于bind那点事
- 为了养成NLP卷王,我画了一张路线图
- Atcoder Grand Contest 010 B - Boxes 差分
- 深度学习分类任务常用评估指标
- [分治] leetcode 23 合并K个升序链表
- linux模块builtin是什么意思,Linux命令手册
- harmonyos2.0怎么更新,harmonyOS 2.0什么时候更新 harmonyOS 2.0手机开发者Beta版更新内容[多图]...
- SpingMVC简易学习笔记二(springMVC的请求和响应)
- js 的常用工具类库
- 回归算法--K近邻算法
- window8系统激活工具
- Ubuntu下 百度在线语音合成使用
- mac电脑最好用的图片浏览器,没有之一
热门文章
- python猜拳游戏
- 2021年安全生产模拟考试(建筑起重信号司索工模拟考试题库)安考星
- 2021年安全生产模拟考试(全国特种作业操作证电工作业-继电保护模拟考试题库一)安考星
- tx2 GPIO使用教程
- 如何规避采购风险?五种有效的采购风险防范措施
- java安装后怎么下载forge_我的世界forge怎么安装
- Laravel 登录验证,md5验证,自定义验证,自定义表
- win10微软商店/账号登录一直转圈
- c语言小球消砖块的游戏,求大神帮忙看看这个弹弹球消砖块的游戏代码,为什么speed只能15...
- 网络口碑推广主要目的全知道