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

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

3天内不再提示

对高速信号8B/10B编码的初步认识

454398 来源:一博科技 作者:黄刚 2021-04-01 12:04 次阅读

在高速链路中导致接收端眼图闭合的原因,很大部分并不是由于高频的损耗太大了,而是由于高低频的损耗差异过大,导致码间干扰严重,因此不能张开眼睛。针对这种情况,前面有讲过可以通过CTLE和FFE(包括DFE)均衡进行解决,原理无非就是衰减低频幅度或者抬高高频幅度,从而达到在接收端高低频均衡的效果。

隔了一段时间,不知道大家还记得我们这个约定吗?不管你们记不记得,本人肯定没有忘记哈。现在就把这个关子拿出来讲讲,也就是今天要说的编码方式。说到针对于NRZ数据的编码方式,本人听过的有4B/5B,8B/10B,64B/66B,64/67B,128B/130B,128B/132B编码(可能各位还有其他吧),不同的编码方式针对于不同的信号协议,当然效率也是不一样的。

什么叫效率?在数据包传送的术语叫开销,意思就是除了实际需要的数据之外的一些数据bit,例如冗余校验等。那大家看上面的编码的数值比就知道了,例如8B/10B,要把8bit的实际数据扩展为10B,那开销就是20%,效率就只有80%了,更通俗来说就是增加了20%的非实际数据的传输 。所以一个好的编码方式,除了看它本身的算法优化情况外,还要注重效率高不高。

本人将用两期的篇章主要介绍下8B/10B和64/66B编码方式,其他的主要都是由他们扩展开来的。那介绍完前面总体的情况后,进入本期的主题,8B/10B编码。

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

pIYBAGBlRjiAPFjAAAIf6V-FkpM871.png

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

上面解释了原因,下面就介绍下这种8B/10B的编码方式的算法。

18-gscx-03.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”一样多,极性则不用变,如下图:

18-gscx-04.png

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

18-gscx-05.png

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

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

18-gscx-06.png

原始的码型如下:

18-gscx-07.png

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

18-gscx-08.png

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

通过上面的介绍,大家对8B/10B编码有一个初步的认识了吧。

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

    关注

    17

    文章

    937

    浏览量

    45790
  • 编码
    +关注

    关注

    6

    文章

    933

    浏览量

    54739
  • 高速信号
    +关注

    关注

    1

    文章

    220

    浏览量

    17674
  • 耦合电容
    +关注

    关注

    2

    文章

    154

    浏览量

    19777
收藏 人收藏

    评论

    相关推荐

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

    为了在USB 3.0中实现数据的8 b/10 b编解码,把8b/10b编解码分解成5
    发表于 11-30 11:38 3234次阅读
    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编解码系统设计方案。与现有的8B
    发表于 05-26 11:08 3785次阅读
    基于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 8431次阅读
    浅谈<b class='flag-5'>高速</b><b class='flag-5'>信号</b>的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 8660次阅读
    <b class='flag-5'>高速</b>串行通信常用的<b class='flag-5'>编码</b>方式-<b class='flag-5'>8b</b>/<b class='flag-5'>10b</b><b class='flag-5'>编码</b>/解码解析

    一文详解8b/10b编码

    8b/10b最常见的是应用于光纤通讯和LVDS信号的。由于光模块光模块只能发送亮或者不亮,也就是0或者1这两种状态这种单极性码,那么这会存在一个问题,如果传输中出现较长的连0或者连1(例如
    的头像 发表于 11-12 15:47 1.4w次阅读