视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
理清8b10b编码三大观念
2025-09-24 06:38:46 责编:小OO
文档
陈乃塘

8b/10b编码是目前许多高速串行总线采用的编码机制,如1394b、Serial ATA、PCI Express、Infini-band、Fiber Channel、RapidIO等总线或网络,都是8b/10b编码的拥护者。8b/10b编码方式早在1983年就被提出,现在则成为主流传输标准选用的编码技术,本文将探究其优点,并详细介绍8b/10b编码重要的三大观念。

以映射机制将8位转为10位字码

8b/10b编码是目前高速数据传输接口或总线常用的编码方式,该编码技术的基本精神很简单,就是将8个位经过映射的机制转化为10个位的字码,但是平衡了位流中0与1的数量,这就是8b/10b编码的根本目的“直流平衡(DC Balance)”。当高速串行流的逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶的关系而造成信号错误,直流平衡的最大好处便是可以克服以上问题。

  80年代IBM发表该论文时,正是预期到光纤技术的应用实现而针对高速局域网以及计算机链接所研发的传输码。事隔多年,8b/10b 编码竟摇身一变成为高速串行总线的主要编码方式,这也许是当时所始料未及的。

  8b/10b编码方式存在着一个极为有趣的特色,其总输出位数是10个位,其中位0与位1出现的次数总共也仅在三种场合存在,分别为“5个位0与5个位1”、“4个位0与6个位1”、“6个位0与4个位1”。

有一个8b/10b编码的技术专用语“不均等性(Disparity)”,其涵义就是指10个位中位0与位1出现次数的差。换句话说,8b/10b编码的“Disparity”就仅有“+2”(4个位0与6个位1)、“+0”(5个位0与5个位1)以及“-2”(6个位0与4个位1)三种状况。

分两个部分进行映射处理

  从图1至少可以看出几点关于8b/10b编码的基本观念。首先,8个位映射成10个位,划分两个部分分别进行映射处理,分别是5B/6B与3B/4B的处理。这种位的映射关系,已经在当时论文中做成一个标准化的表格。其次,5B/6B与3B/4B的映射控制,必须依赖“Disparity Control”功能块才能够达成最后的编码,因为直流平衡就是要靠它制衡。

  另一个重点是,当初在规划8b/10b编码时,除了“数据码”的定义之外,又另外规划了所谓的“控制代码”。文章或是文献上所见到的“D.a.b”就是数据码的表现方式。而“K.a.b”就是另指控制代码,至于为何会有“D.a.b”及“K.a.b”这种表现方式,当然与前面所提到的5B/6B与3B/4B的映射控制有高度相关,也有人以“/Dx.y/”或是“/Kx.y/”的文字来分别表示。

  一个字节的组成有8个位,若是将其分成两类,分别是5个LSB以及3个MSB。5个LSB就是前面提及的“x”,3个MSB就是“y”。以下举例说明这种表现方式。

  示范之一,/D0.0/ = 000 00000

  示范之二,/D6.2/ = 010 00110

  如此一来,3B/4B、5B/6B的各自映射就更容易呈现。

由于高速串行流是连续地将数据从发送端往接收端逐次地传输过去,每一个数据的编码会随着前面送出数据不停累积“不均等性”的状态而产生正确的位映射关系,所以这个依靠做为判断的状态就被称为“Running Disparity”。实际上可以将它视为一个判断标志(Flag),因此“Running Disparity”也仅会出现两种状态,分别是“+1”与“-1”,分别代表位1比位0多或位0比位1多。如此一来,整个冗长数据串的编码就可以被在约定的范围之内。

数据码与控制代码不会同时发生

  表2、表3列举了5B/6B、3B/4B的编码映像表格。当初在规划8B/10B编码机制的时候,就事先规划了所谓的控制代码(Control Characters),也有人称为“K Code”,顾名思义,就是作为控制的用途。由于数据码与控制代码两者不会在同一个时间点发生,因此即便数据码与控制代码在编码上的数值重复,也不会发生冲突。

  控制代码的另一个重点是:这些控制代码会随着各种接口规范的需要而有各自不同的解读与定义,以下就以流行的Serial ATA与PCI Express为例来解释这个要点。

  先来看PCI Express如何来运用这些控制代码(如表5所示)。PCI Express运用控制代码基本上作为两种用途:其一,接口总线上的链接管理(Link Management)必须依靠它;其二,链接层与数据交易层各自生成的包(DLLP与TLP),发送的开始与退出也需要控制代码来标示。而致力于存储装置接口的Serial ATA规范,则是参考Fibre Channel的内在,仅仅用到K28.3与K28.5。

  如果从元器件的角度来看 8b/10b的功能,究竟藏身何处?答案也是很清楚,就在物理层(Physical layer)当中。请看PCI Express的PHY逻辑示意图(图5),自然能够理解串行总线的一些基本法则。

  总之,8b/10b编码机制的发源虽然有点久远,但却对高速串行总线具有深远的影响,并成为现今工程开发人员的重要课题。下载本文

显示全文
专题