Xilinx FPGA高速串行传输技术与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.3 线路编码技术

线路编码机制将输入的原始数据转变成接收器可以接收的格式,同时保证数据流中有足够的时钟信息提供给接收端的时钟恢复电路。编码技术提供一种将数据对齐到字的方法,同时线路可以保持良好的直流平衡,增加了数据的传输距离,提供了更有效的错误检测机制。除此之外,线路编码机制也可用来实现时钟修正、块同步、通道绑定和将带宽划分到子通道。线路编码机制主要有两种:数值查找机制和自修改数据流或扰码器机制。目前常用的有 8b/10b编码和 64b/66b编码。

1.8b/10b编码技术简介

8b/10b编码是 1983年由 IBM公司的 Al Widmer与 Peter Franaszek所提出的数据传输编码标准,目前已经被广泛应用于高速串行总线,如 IEEE 1394b、SATA、PCI-Express、Infiniband、FiberChannel、XAUI、RapidIO、USB3.0等。8b/10b编码将待发送的二进制数据由 8位代码组转换成 10位代码组,其目的是保证直流平衡,以及足够密集的电平转换。

8b/10b 编码示意图如图1-18 所示,原始 8b 数据分成两部分,即低位的 5 比特EDCBA和高位的 3比特 HGF。低 5位经过 5b/6b编码成为 6比特码 abcdei,高 3位经过 3b/4b 编码成为 4 比特码 fghj,最后再将两部分合起来,组成一个 10 比特码abcdeifghj。

5b/6b编码和 3b/4b编码都可以使用基于查找表的方式来实现。习惯上,人们将原始8b数据记为 D.X.Y,其中,X代表低 5位的十进制数值;Y代表高 3位的值,如原始数据为 101 10101,X=10101(21),Y=101(5),因此这 8b数据就写作 D.21.5。8b/10b编码中还用到 12个控制字符,它们可以作为传输中帧起始、帧结束、传输空闲等状态标志,与数据字符的记法类似,控制字符一般记为 K.X.Y。8b数据有 256种,加上 12种控制字符,总共有 268种,而 10b数据有 1024种,从而可以从 1024种待选编码中选取一部分来表示 8b数据。

图1-18 8b/10b编码示意图

将 8b码编码成 10b码后,10b码中 0和 1的位数只可能出现 3种情况,即有 5个 0和 5个 1、有 6个 0和 4个 1,以及有 4个 0和 6个 1,这也是在 1024种待选编码中选择 8b/10b码字的条件。8b/10b编码中使用不一致性(Disparity)来描述 10b码中 1的位数和 0的位数的差值,上述 3种情况的不一致性分别为 0、-2和+2。由于数据流不停地从发送端向接收端传输,每一个 8b的编码会随着前面数据累积的不均等性的状态而产生正确的映射关系,这个作为判断的状态称为运行不一致性(Running Disparity,RD),RD仅有两种状态:+1和-1,分别表示 1的位数比 0多和 1的位数比 0少,其初始值设为-1。RD值的改变依赖前一个 RD及当前 6b码或 4b码的不一致性,其变化规律如表 1-6所示,当 PRD(Previous RD)=-1时,表示之前传输的数据中 0的个数多,如果当前 6b码(4b码)的 Disparity=0,表示 0 的个数等于 1 的个数,则 NRD(Next RD)不变,如果Disparity=+2,表示 0的个数比 1的个数少,则 NRD=+1,以此保证码流的直流平衡。数据经过 8b/10b编码后,连续的“1”或“0”基本不超过 5位,从而使两条差分信号线中的电荷保持平衡,具有强大的直流平衡能力,减小差分信号的直流分量。

表1-6 RD变化规律

经过 8b/10b编码后的 10b码在发送时,一般按照先发送低位再发送高位的顺序依次发送各个比特位,即先发送码位 a,最后发送码位 i。在 8b/10b编码中将 K.28.1、K.28.5、K.28.7作为 K码控制字符,称为“comma”。在任意数据组合中,comma码只作为控制字符出现,而在数据负荷部分不会出现,因而可以利用“comma”字符指示帧的开始和结束标志,或时钟修正和数据流对齐的控制字符。

2.64b/66b编码技术简介

64b/66b编码是由 IEEE 802.3工作组为 10G以太网提出的,目的是减少编码开销,降低硬件的复杂性,并作为 8b/10b 编码的另一种选择,以支持新的程序和数据。当前64b/66b编码主要应用于 Fiber Channel 10GFC和 16GFC、10G以太网、100G以太网、10G EPON、InfiniBand、Thunderbolt和 Xilinx的 Aurora协议。

64b/66b编码将 64b数据或控制信息编码成 66b块传输,66b块的前两位表示同步头,主要用于接收端的数据对齐和接收数据位流的同步。同步头有“01”和“10”两种,“01”表示后面的 64b都是数据,“10”表示后面 64b是数据和控制信息的混合,其中紧接着同步头的 8b表示类型域,最后的 56b表示控制信息或者数据或者控制信息与数据的混合。64b/66b编码格式如图1-19所示,其中 D表示数据码,每个数据码 8b,Z表示控制码,每个控制码 7b,S表示包的开始,T表示包的结束,S只会出现在 8字节中的第 0和第 4字节,T 能够出现在任意字节。除前同步码外,64b 的数据必须经过扰码后进行传输,64b/66b编码使用的扰码器为 X58+X39+1。

图1-19 64b/66b数据编码格式