以映射机制将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编码机制的发源虽然有点久远,但却对高速串行总线具有深远的影响,并成为现今工程开发人员的重要课题。
本文转自:http://hi.baidu.com/hipnose/blog/item/5ad8ecf826b9670ed8f9fdf7.html