0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文详解8b/10b编码

EtonSmt888 来源:硬件测试杂谈 作者:硬件测试杂谈 2022-11-12 15:47 次阅读

1. 什么是8b/10b编码?

8b/10b最常见的是应用于光纤通讯和LVDS信号的。由于光模块光模块只能发送亮或者不亮,也就是0或者1这两种状态这种单极性码,那么这会存在一个问题,如果传输中出现较长的连0或者连1(例如111111100000000),那么接收端将没有办法正确的采样识别信号,另外还会由于单极性码含有直流分量,这种直流成分会随数据中1和0的随机变化也呈现随机性,这会引起接收端的基线漂移导致接收端误判。LVDS信号一样会存在这个问题,随着线路上的信号频率越来越高,如果线路上的0和1数量不均衡(直流不平衡)那么线路上的基电压会出现偏移,一样会导致解码错误。

总之一句话,8b/10b是为了解决直流平衡而推出的。

8B/10B编码是加扰二进制码的一种,在此之前这种技术已得到应用,只是没有像8B10B那么普遍。目前采用8b/10b编码的串行高速接口总线有IEEE 1394b、SATA、PCI Express、Infini-band、Fiber Channel、RapidIO、USB3.0、MIPI M-phy 等。

将8bit编码成10bit后,连续的1或者0不能超过5位,所以10b中0和1的位数只可能出现3中情况:

• 有5个0和5个1

• 有6个0和4个1

• 有4个0和6个1

**不均等性:**这样引出了一个新术语“不均等性”(Disparity),就是1的位数和0的位数的差值,根据上面3种情况就有对应的3个Disparity0、-2、+2。

2. 为什么引入8b/10b编码?

首先,为什么要编码?原来的码型有什么不好的地方吗?其中最主要的原因用下面这个图来进行解释:

4baf174c-3df2-11ed-9e49-dac502259ad0.png

4bf12b14-3df2-11ed-9e49-dac502259ad0.png

4c1b0920-3df2-11ed-9e49-dac502259ad0.png

大家看明白了吧,由于我们的串行链路中会有交流耦合电容,我们知道理想电容的阻抗公式是Zc=1/2πf*C,因此信号频率越高,阻抗越低,反之频率越低,阻抗越高。因此上面的情况,当码型是高频的时候,基本上可以不损耗的传输过去,但是当码型为连续“0”或者“1”的情况时,电容的损耗就很大,导致幅度不断降低,带来的严重后果是无法识别到底是“1”还是“0”。因此编码就是为了尽量把低频的码型优化成较高频的码型,从而保证低损耗的传输过去。

3. 8b/10b的编码算法

4c558b5e-3df2-11ed-9e49-dac502259ad0.png

如上图,关于8B/10B编码算法有下面几点需要理解:

1, 低5位(ABCDE)中间加一位,进行5B/6B编码,高三位(FGH)中间加一位,进行3B/4B编码;

2, 编码后的bit仅会出现这三种情况:5个“0”与5个“1”、4个“0”与6个“1”、6个“0”与4个“1”;

3, 有两个术语要知道:不均等性(disparity)和极性偏差(running disparity,RD)。

不均等性是指编码后的码型数据是“1”多还是“0”多,如果是“1”多,则极性偏差RD为RD-,如果是“0”多则为RD+。

那定义+/-RD有什么意义呢?+/-RD代表着同一个码型的两种编码方式。我们本身就是编码的目标就是为了缓解长“0”或长“1”的影响,因此在编码后如果“1”多的话,我们下一次的编码就要把这种码型做一个修正,因此从-RD码型变成+RD码型。如果是“0”和“1”一样多,极性则不用变,如下图:

4c7f6d52-3df2-11ed-9e49-dac502259ad0.png

4, 我们怎么知道编码后映射成什么码型呢?因此会有一个专门的编码表,我们只需要在上面找到我们的原始码型,然后就一目了然了。编码表如下所示(部分截图):

4ca7ccde-3df2-11ed-9e49-dac502259ad0.png

说了那么多,还不如举个例子更直观。

我们以上面的D3.0码型进行仿真验证:

4cd0a62c-3df2-11ed-9e49-dac502259ad0.png

原始的码型如下:

4cf65282-3df2-11ed-9e49-dac502259ad0.png

仿真得到8B/10B编码后的码型如下:

4d19e756-3df2-11ed-9e49-dac502259ad0.png

对照上面的编码表,结果完全相同,从RD-的模型出发,编码后RD-的码型“1”比较多,因此极性变成RD+的编码码型,接着RD+的编码码型“0”比较多,极性又变回RD-,因此码型就是RD-和RD+之间循环下去。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lvds
    +关注

    关注

    2

    文章

    1042

    浏览量

    65787
  • 编码
    +关注

    关注

    6

    文章

    940

    浏览量

    54810

原文标题:8b/10b编码

文章出处:【微信号:硬件测试杂谈,微信公众号:硬件测试杂谈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    USB3.0与USB2.0编码方式的区别

    USB 3.0的传输编码方式与USB 2.0有所不同,从USB 3.0规范中我们了解到,USB 3.0采用的是8b/10b编码方式
    发表于 11-22 16:22 9244次阅读
    USB3.0与USB2.0<b class='flag-5'>编码</b>方式的区别

    USB3.0中8b/10b编解码器的设计

    为了在USB 3.0中实现数据的8 b/10 b编解码,把8b/10b编解码分解成5
    发表于 11-30 11:38 3264次阅读
    USB3.0中<b class='flag-5'>8b</b>/<b class='flag-5'>10b</b>编解码器的设计

    8b10b编码verilog实现

    8b/10b编码种用于减少数据线上的低效能时钟信号传输的技术,通过在数据流中插入特殊的控制字符,来同步数据和时钟。在Verilog中实现8b
    发表于 03-26 07:55

    Aurora 8b/10b IP核问题

    小弟最近在调用Aurora 8b/10b IP模块时,在用modelsim功能仿真时,切正常。 但是直接使用了例化后的example,并将Tx和Rx形成了回路下到FPGA板子上
    发表于 03-09 10:58

    8b/10b编解码的控制字问题

    8b/10b编码用的控制字是K28.5,但是解码时用非K28.5的控制字能把数据解码出来吗?
    发表于 01-02 14:47

    浅析64B//66B编码

    作者:黄刚上文说完了8B/10B之后,我们再来说说貌似更复杂的64B/66B编码。很多人可能在想,8B
    发表于 07-19 07:35

    收发器向导中启用8b/10b编码器的方法是什么?

    亲爱的先生,我正在使用Vivado 2015.4。我想在收发器向导中使用通道绑定,但CB在手册中是灰色的。另外,我找不到在收发器向导中启用8b / 10b编码器的方法。如果你能给我
    发表于 08-04 08:32

    如何使用Aurora 8B / 10B建立仅传输?

    你好,我正在尝试使用Aurora 8B / 10B建立仅传输(流媒体)。现在使用Vivado 2014.4进行模拟阶段。我知道GTXE2_COMMON原语需要在设计中使用以包含个QUAD PLL
    发表于 08-14 08:49

    怎么禁用Aurora IP Core 8B / 10B中的时钟补偿功能?

    大家好,我使用的是Vivado 2016.4和Virtex 7 XC7VX485T FPGA。我需要知道是否有个选项可以禁用Aurora IP Core 8B / 10B中的时钟补偿功能。我可以看到IP核心文件,但它们都是只读
    发表于 08-18 09:43

    高速接口8B/10B的作用?

    、高速接口8B/10B的作用? 在数字通信中编码和加扰的作用是不同的。编码通常有信源编码和信道
    发表于 01-18 06:16

    基于FPGA的8B10B编解码设计

    摘要:为提高8B10B编解码的工作速度和简化逻辑方法,提出种基于FPGA的8B10B编解码系统设计方案。与现有的
    发表于 05-26 11:08 3838次阅读
    基于FPGA的<b class='flag-5'>8B</b>/<b class='flag-5'>10B</b>编解码设计

    基于PRBS的8B/10B编码器误码率为0设计

    基于减少8B/10B编码器占用的逻辑资源和保证该编码器误码率为0的目的,采用查表法和组合逻辑实现相结合的方法设计实现了符合嵌入式互连规范Rapidl0协议的
    发表于 11-06 17:04 7次下载
    基于PRBS的<b class='flag-5'>8B</b>/<b class='flag-5'>10B</b><b class='flag-5'>编码</b>器误码率为0设计

    基于Virtex-6 的Aurora 8B/10B,PCIe2.0,SRIO 2.0三种串行通信协议分析

    针对较为常用的Aurora 8B/10B和PCI Express 2.0,Serial RapidIO 2.0三种协议进行了测试及对比分析。首先搭建了基于Virtex-6 FPGA的高速串行协议测试
    发表于 11-18 01:00 1.2w次阅读
    基于Virtex-6 的Aurora <b class='flag-5'>8B</b>/<b class='flag-5'>10B</b>,PCIe2.0,SRIO 2.0三种串行通信协议分析

    浅谈高速信号的64B/66B编码方式

    很多人可能在想,8B/10B编码主要作用的优化直流平衡,从8bit中插2个bit进去,这样的话最终效果能够使长0或者长1的位数不超过5位,达到很好的效果。那64
    的头像 发表于 04-01 12:01 8553次阅读
    浅谈高速信号的64<b class='flag-5'>B</b>/66<b class='flag-5'>B</b><b class='flag-5'>编码</b>方式

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

      论序 8b/10b编码/解码是高速串行通信,如PCle SATA(串行ATA),以及Fiber Channel中常用的编解码方式。在发送端,编码电路将串行输入的
    的头像 发表于 09-26 09:56 8857次阅读
    高速串行通信常用的<b class='flag-5'>编码</b>方式-<b class='flag-5'>8b</b>/<b class='flag-5'>10b</b><b class='flag-5'>编码</b>/解码解析