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

目录

1.8B/10B介绍

2.原理

3.Verilog实现

4.实例:在JESD204B中的应用

参考资料:


1.8B/10B介绍

8B/10B编码的目的是防止串行的数据出现长时间的连0连1,因为这会使得信号直流电压不稳定,换句话说就是 直流平衡keep DC-balance;另一个目的是提供给接收端‘清晰的边界’,时钟恢复:接收端能在串行数据流中确定某个10B的起始边界;而且接收端还能判断数据是否出错,能检错不能纠错

值得一提的是,除了检错外,还有上述前2个功能的是扰码:scramble,扰码没有冗余比特出现,基本原理是使用线性反馈移位寄存器LFSR实现,这里不做详细介绍哈。

8B/10B编码广泛应用于串行数据总线, 例如SATA,PCIE,USB,JESD204接口中,后来升级成冗余更小的64/66B,128/132B,128/130B,升级后的版本也或应用于上述总线的新版本中。

2.原理

简单来说就是5B映射成6B,3B映射成4B,分为数据码和控制码的映射,在映射的过程中进行查表。

8b/10b编码输出比特数目总共是10个比特,但只有“+2”“+0”“-2”三种组合。其中“+2”是指4个比特0,与6个比特1;“+0”是指5个比特“0”,与5个比特“1”;“-2”是指6个比特“0”,与4个比特“1”,利用这种“不均等性— Disparity”的特性而具有强大的直流平衡(DC Balance)功能,可使得发送的“0”、“1”数量保持一致,连续的“1”或“0”基本上不超过5位。[1] 

数据值可以统一的表示为DX.Y或KX.Y,其中D表示为数据代码,K表示为特殊的命令代码,X表示输入的原始数据的低5位EDCBA,Y 表示输入的原始数据的高3位HGF。[2]

1)running disparity

running disparity简称RD,表示当前的0与1的不均等性,进行数据映射时要根据 input 的 RD去映射,使映射后的数据具有parity,并且还要计算映射后的RD,以作为下一次映射的input RD。

因此在代码实现时,一次8Bto10B的过程中要计算两次RD:5Bto6B后,3Bto4B后。计算方式如表1[1]。

表1 RD的计算方法

2)映射

数据码和控制码的都是互不相同的,即映射后的10B要么是数据码,要么是控制码。

对于8bit数据,它在表中的位序为HGFEDCBA,即H为最高位,A为最低位,EDCBA经过5B/6B编码为abcdei,HGF经过3B/4B编码为fghj。传送10bit编码的顺序为abcdeifghj。[3]

表2-4为映射查找表。下面解释一下,

表2 5Bto6B

“+”代表也用于K.x.7的映射,但从表4可以看出来其fhg的映射是D.x.A7,而数据码的映射是Dx.P7,因此不会与数据码相同。

“++”表示只用于控制码的映射,保证了与数据码的不同性。

 

表3 3Bto4B

“+”:B数据码Dx.7的映射一般都用Dx.P7,只有下列情况才用D.x.A7,为的是防止出现5个连0或连1:

  • when RD = −1: for x = 17, 18 and 20 and
  • when RD = +1: for x = 11, 13 and 14.  

‡ Only K.28.1, K.28.5, and K.28.7 generate comma symbols, that contain a bit sequence of five 0s or 1s.
The symbol has the format 110000 01xx or 001111 10xx.[1]

 

表4 Kx.y

“+”K.28.1, K.28.5, and K.28.7 are "comma symbols",会出现5个连0或连1,就是用这个comma symbols来从串行的比特流中同步/定位一个10B的开始位。K.28.7 不用的话 ,正常情况下00111110 or 11000001 是不会出现在比特流中的。

注意到K.23.7,K.27.7,K.29.7,K.30.7用的是D.x.A7,与防止连0或连1的x并不相同,因此不会与数据码相同。

‡ If K.28.7 is allowed in the a

  • 32
    点赞
  • 179
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
8b10b编码器、解码器verilog code 8B/10B,也叫做8比特/10比特或8b10b8b/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编码是将一组连续的8位数据分解成两组数据,一组3位,一组5位,经过编码后分别成为一组4位的代码和一组6位的代码,从而组成一组10位的数据发送出去。相反,解码是将1组10位的输入数据经过变换得到8位数据位。数据值可以统一的表示为DX.Y或KX.Y,其D表示为数据代码,K表示为特殊的命令代码,X表示输入的原始数据的低5位EDCBA,Y 表示输入的原始数据的高3位HGF。 8b/10b编码是目前许多高速串行总线采用的编码机制,如 USB3.0、1394b、Serial ATA、PCI Express、Infini-band、Fibre Channel(光纤通道)、RapidIO等总线或网络等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值