摘要:在深入研究了8B/10B 编码规则及其内在相关性的基础上,提出了一种新的8B/10B编、解码方法,该方法综合了查表法和逻辑运算法的优点,具有运算量小、编解码同步好、速度快、可靠性高等优点。用Verilog HDL 语言实现编解码算法的描述,并通过高性能的FPGA器件进行仿真和综合,实现了具体的硬件电路,并验证了设计方法的有效性和可行性。
关键词:8B/10B 码, 编码, 解码, 光纤通信, 集成电路
引言
随着Internet 业务的迅速增长,光纤通信的数据传输速率和容量不断提高。目前,甚短距离传输系统(VSR) 、1000BASE-X标推的千兆以太网以及10GBASE-X标推的万兆以太网成为世界上光纤通信系统研究的焦点。然而随着传输距离的增加以及数据速率的提升,信号恶化将十分严重,此时满足要求的误码率成为通信系统设计的一个挑战。
为了增加信息传输的可靠性,以上系统都采用了一种传输带宽小、转换密度高以及码字游程长度受限的8B/10B编码,它将原8位(一个字节) 数据编码成为10位字符,增加了数据中的高低电平变换(即“1”/“0”变换) ,有利于实现转换前后的时钟同步,此外还能帮助实现直流平衡,以使接收器的输入没有直流(DC)漂移。由于采用了这种编码,链路可以是交流(AC)耦合的,这样就给任一端的设备厂商提供了更大的灵活性。而且这种编码有利于检测出传输过程中单个和多个的比特误码,同时编码设计中的一些特殊码组还有助于比特流的码组定位和信息识别。
高速通信系统中信息处理都是通过大规模集成电路实现的,因此在集成电路设计过程中如何高速、有效地实现8B/10B编解码,直接决定着通信系统数据传输速率的进一步提高。目前最常用的编码方法是查表法,它用存储器存储所有可能出现的码组,再把输入码组作为存储地址,找出对应的编解码。该方法简单直接,但是编解码电路工作速度受到存储器读取时间的限制,并且不可避免地增加芯片的面积和功耗。另一种方法则是通过逻辑运算直接完成编解码功能,该方法的难点在于逻辑关系复杂,同时由于延时、竞争和冒险的存在,使输出的数据抖动严重,限制了芯片的最高工作速度。本文在对8B/10B编解码的内在相关性进行研究的基础上,综合上述两种编码方法的优点,实现了一种新的8B/10B编解码方法。
1 8B/10B 编解码方法研究
8B/10B 编码在发送端将输入的8B码组按照编码规则映射成10B码组,再通过并串转换将并行的10位码组串行输出,在接收端则进行串并转换和解码。8B/10B 编码过程是将8B码组(从高位到低位为HGFEDCBA) 分解成3B (HGF) 和5B( EDCBA) ,分别进行3B/4B编码和5B/6B编码,最后组成10B码组(从低位到高位为abcdeifghj)。3B/4B 编码表如表1 所示:
分析表1 可以看出,3B码000 ,011 ,100 的4B编码都有互相取反的两种编码,000 和100 编码的游程值(RD) 为1 和3 ,011 的两种编码的RD值均为2。而001 ,010 ,101 ,110 的编码则只有一种,其RD值为2。比较特殊的是111 的编码,它有两组互相取反的编码共4 种,但是根据8B/10B编码表可以看出,1000 和0111 这组编码分别只出现在5B 码组为01011 ,01101 ,01110 的RD + 列和5B 码组为10001 ,10010 ,10100 的RD-列,其它的码组根据编码规则采用0001 和1110这组编码。
同样分析5B/6B 编码表得出,5B 码共32 种,其中有18 种的编码为单值,其RD 值为3 ,其它13 种为互相取反的双值,并且其RD 值为4 和2 ,剩下的00111 的编码也是双值(111000 和000111) ,但是其RD 均为3。因此编码得到的10B 码组的RD 值只可能是6、5或4,其它的为禁用码组。同时根据游程差的正负,8B/10B 编码表分成RD-和RD + 两列。深入分析整个8B/10B 编码的内在相关性可以知道:
当3B码有唯一4B编码时(001 , 010 , 101 ,110) ,若5B 码为具有单值编码的码字,则8B/ 10B 编码表的RD-列和RD + 列取唯一的10B 编码,并且其RD 值为5 ;若5B 码具有双值编码,则在RD-列取RD值为4 的6B 编码,在RD + 列取RD 值为2 的6B 编码;若5B 码为00111 ,则在RD-列取111000 ,在RD +列取000111。
当3B码有双值4B编码时(000 ,100) ,若5B码为18 种具有单值编码的码字,则4B 编码在RD-列和RD+ 列分别取RD 值为3 和1 的编码,3B 码为011 的情况下则分别取1100 和0011 ;若5B 码为13种有双值编码的码字时,则在RD-列和RD+ 列分别取6B RD 值为4、4B RD 值为1 和6B RD 值为2、4B RD值为3 的编码;若5B 码为00111 ,3B 码为000 ,100 ,则在RD-列和RD + 列分别取6B 为111000、4BRD 值为3 和6B 为000111、4B RD值为1 的编码;若5B 码为00111 ,3B 码为011 时,在RD-列和RD+列的编码分别111000、1100 和000111、0011。当3B 码为111 时,由前面分析的1000 和0111 这组编码出现的特殊情况外,其它的编码规则同上面分析的3B 码具有双值编码的情况,此时的编码取0001 和1110 这组编码。
另外,8B 码分为D 分组(数据字节编码) 和K分组(特殊控制符号编码) ,上面分析的D 分组,对于K 分组,共有12个8B 码组,其编码规则与D 分组不同,但是由于其码组少,编码比较简单,只需要在编码过程中根据输入判断这12 个码组是否为K分组,再根据K 分组编码规则进行编码,在这里不再赘述。
由前面的分析得出了3B/4B 编码和5B/6B 编码的关系,从而得到整个8B/ 10B 编码表的RD-和RD+ 两列,编码过程中根据当前的游程差确定4B和6B 编码的选取,从而实现10B码的直流平衡 。根据上面对分析得出的结论,我们设计的8B/10B 编码器如图1 所示:
图1 8B/ 10B编码器框图
上图中整个编码器的核心是Controls模块,它根据输入信号进行判断,在8B/10B 编码表的RD-和RD + 两列正确的选取适当的编码。3B/4B 编码和5B/6B 编码的选取是通过图中的两个异或门实现的,由上面的分析,具有非唯一编码的8B 码,其3B/4B 编码和5B/ 6B 编码都是成对出现的,而且互为取反。因此,我们可以根据输入的3B和5B码组,只选择出一组4B和6B 编码输出即可,然后通过它们与0000 (000000) 或者1111 (111111) 的异或运算,就可以两组编码中的一组。
5B/6B编码表和3B/4B编码表模块实现多路选择器的功能,根据输入的3B和5B码组,只选择出一组RD-列的4B和6B 编码输出,然后与Controls模块的输出进行异或运算来得到正确的编码。Controls模块实现的功能有: K 分组(特殊控制符号编码) 码组的判断,根据输入8B码组和K判断输入是D分组还是K分组,以及是否为正确的K分组码,并根据K分组编码规则输出用来进行异或运算的操作数;设置一个内部寄存器变量RD,设定的默认初始值为0,表示RD-列,根据输入8B码判断是否翻转,并存储下一个8B码的游程差的正负,以便在正确的列取得编码。
对RD的赋值状态机如图2所示,其中RD=0代表RD-列,RD=1代表RD+列;当输入为D分组码时,根据前面内在相关性的分析,输出用来进行异或运算的正确的操作数,例如当输入5B码为01011 ,01101 ,01110 ,3B码为111时,若当前取RD+列,输出4比特1001 ,与3B/4B编码表模块输出的4B码0001相异或,得到正确的3B/4B编码1000 ;对于输入的K分组禁用码组,输出错误标志kerr 。根据对编码的需要,Controls 模块输出的6 比特和4 比特操作数分别包括000000、111111、000001、111110 和0000、1111、1001、0110。
图2 游程差值状态机
对解码器的设计相对简单一些,其根据也是前面分析的结果。解码过程大致为:先将输入的10B码分解成4B和6B 码,对它们分别进行判断是否为许用码组,因为它们的许用码组分别只有14个和46个。同时判断4B和6B虽为许用码组,得到的10B码组是否为禁用码。对于K分组码组,判断其是否为正确的K分组编码。如果未出现禁用码错误,则解出相应的3B和5B码组,同时计算它们的RD值,否则输出错误标志。然后根据得到的8B码的RD值进一步判断其是否为许用码组,同时根据判断标志输出正确的8B码。设计的解码器框图如图3 所示。
图3 8B/10B解码器框图
该解码器由三个模块组成, 6B/5B 解码表和4B/3B 解码表模块分别根据输入的6B和4B许用码,输出相应的5B和3B解码,其实现与编码器的相应模块类似。
Controls模块完成对输入10B 分解后的6B 和4B 码组是否为许用码组的判断,并计算RD值,分别只能是4、3、2 和1、2、3 ;对输入码组是否为K分组码及其正确性的判断;对既是许用码组,又满足RD 值要求的10B 禁用码进行判断,包括6B 码为111000 或000111、4B 码为0011 或1100 时可能出现的禁用码组合,以及前面提到3B 码为111 时的两对编码的情况下禁用码组的判断,同时在本模块内部对10B码的RD值判断其是否为6、5 或4 ,进一步判断出10B 码是否是禁用码;完成解码有效性的判断,输出各种错误标志,包括D 分组解码错误derr 和K分组解码错误kerr ,在此基础上计算收到的10B 码的游程差,检查其是否是在编码表中RD-和RD+两列中相应的列中选择的,若出现错误, rderr 指示解码无效;输出K指示得到的8B解码是否是K分组码。
上述编解码器的实现结构比较简单,编解码器的各个模块用同一系统时钟同步触发,编解码速度比较快,输出抖动小。出现解码错误的原因是10B码在传输过程中出现了误码,对解码的有效性检查增加了信息传输的可靠性。
2 仿真结果与分析
根据本文提出的8B/10B 编、解码方法,用Verilog HDL进行了硬件描述,用MAX+plus Ⅱ软件在Altera的FPGA 器件上实现了编解码器的功能验证、综合和时序仿真。在对编解码器内的各个模块分别进行验证和仿真的基础上,将各模块组合起来综合成完整的编解码电路。
图4a所示为编码器的仿真时序图,输入datain的顺序为HGFEDBA ,输出dataout 的顺序为abcde-ifghj 。图中所取的值包含了HGF =111时两组不同的编码的选择,并且根据当前游程差的正负,从RD-和RD+两列选取相应的编码,从而实现了保持了码流中1和0的数目相等。从编码的结果可以看出采用该方法实现的编码器能够根据输入8B码正确的编码。同时,由于本方法采用同步设计,并且各控制信号和数据产生的延时差别不大,所以输出数据的抖动很小。图4b 所示为解码器的仿真时序图,其中第五个输入数据1110000011由于是10B禁用码组,所以输出derr 跳变为1指示该解码错误。由于第二个输入数据1000110111 取自RD-列,而第三个输入数据1110100101 同样取自RD-列,所以产生游程差错误,rderr = 1。
(a) 8B/ 10B 编码器仿真时序图
(b) 8B/10B 解码器仿真时序图 图4 8B/10B编解码器仿真时序图
仿真结果表明,采用本方法设计的8B/10B 编解码器有效可靠的实现了编解码功能。对于输出出现的抖动,可以通过减小高速电路的工作延时或者在关键路径上用D 触发器进行同步,减小输出抖动的积累。在本设计中,在编解码器的输入、输出级通过D 触发器同步采样后的输入输出的时序图如图5 所示,输入信号、编码信号和解码信号之间都顺序相差一个码元周期,输出抖动被完全消除了。
图5 用D 触发器同步采样后的编解码器仿真时序图
3 结论
文在分析8B/10B 编码规则和3B/4B编码、5B/6B编码之间的内在相关性的基础上,提出了新的编解码方案, 并用Verilog HDL语言在Altera的FPGA上实现了硬件电路,仿真结果完全正确。该方案层次分明、结构简单、编解码速度快、输出抖动小与现有的编解码方法相比有一定的优势,适合高速光纤通信物理层的8B/10B编解码器以及VSR转换器IC的设计。 ------------------------------------------------------ 8b/10b 维基百科,自由的百科全书 跳转到: 导航, 搜索 8b/10b编码是1983年由IBM的 Al Widmer 与 Peter Franaszek 所提出,应用于ESCON,后来申请成专利。目前广受串列汇流排所采用。例如:1394b、Serial ATA、PCI Express、Infini-band、Fiber Channel、RapidIO 等汇流排,都是采用8b/10b编码。2008年甫推出的USB 3.0 规格书亦明言支援了8b/10b编码。 8b/10b编码的提出即是因应光纤的传输技术,8b/10b技术是将8个位元经过某种映射的机制转化为10个位元的字码,分两个部位分别进行映射的处理,分别是 5B/6B 与 3B/4B 的处理,另外“D.a.b”是资料码(D即是Data),“K.a.b”指控制码(K即是Key),a与b表示输入的原始资料。
目录 [隐藏]
- 1 工作原理
- 1.1 编码表
- 1.1.1 5b/6b
- 1.1.2 3b/4b
- 1.1.3 Control symbols
- 2 与 8b/10b 相关技术
- 3 外部链接
|
[编辑] 工作原理 8b/10b编码输出位元数目总共是10个位元,但只有“+2”“+0”“-2”三种组合。其中“+2”是指4个位元0,与6个位元1;“+0”是指5个位元“0”,与5个位元“1”;“-2”是指6个位元“0”,与4个位元“1”,利用这种“不均等性— Disparity”的特性而具有强大的直流平衡(DC Balance)功能,可使得发送的“0”、“1”数量保持一致,连续的“1”或“0”基本上不超过5位。 [编辑] 编码表 8b/10b编码将一组8位元资料分成两组,一组3位元,一组5位元,经过编码后形成一组4位元和一组6位元,故送发时是一组10位元的资料,解码时再将10位元的资料变换得到8位元资料。编码过程中低于5位元的资料会进行5B/6B编码,高于3位元的资料则进行3B/4B编码。 例如一组8位元的资料是 10110101: 首先,分成两组 101 与 10101 a=10101(21) b=101(5),符号为 D21.5,在下表中的位序为HGFEDCBA,a(EDCBA)经过5B/6B编码为abcdei,b(HGF)经过3B/4B编码为fghj。
不均等性的执行规则
Previous RD |
Disparity of 6 or 4 Bit Code |
Disparity chosen |
Next RD |
−1 |
0 |
0 |
−1 |
−1 |
±2 |
+2 |
+1 |
+1 |
0 |
0 |
+1 |
+1 |
±2 |
−2 |
−1 |
[编辑] 5b/6b
5B/6B code
input |
RD = −1 |
RD = +1 |
|
input |
RD = −1 |
RD = +1 |
|
EDCBA |
abcdei |
|
EDCBA |
abcdei |
D.00 |
00000 |
100111 |
011000 |
D.16 |
10000 |
011011 |
100100 |
D.01 |
00001 |
011101 |
100010 |
D.17 |
10001 |
100011 |
D.02 |
00010 |
101101 |
010010 |
D.18 |
10010 |
010011 |
D.03 |
00011 |
110001 |
D.19 |
10011 |
110010 |
D.04 |
00100 |
110101 |
001010 |
D.20 |
10100 |
001011 |
D.05 |
00101 |
101001 |
D.21 |
10101 |
101010 |
D.06 |
00110 |
011001 |
D.22 |
10110 |
011010 |
D.07 |
00111 |
111000 |
000111 |
D.23 † |
10111 |
111010 |
000101 |
D.08 |
01000 |
111001 |
000110 |
D.24 |
11000 |
110011 |
001100 |
D.09 |
01001 |
100101 |
D.25 |
11001 |
100110 |
D.10 |
01010 |
010101 |
D.26 |
11010 |
010110 |
D.11 |
01011 |
110100 |
D.27 † |
11011 |
110110 |
001001 |
D.12 |
01100 |
001101 |
D.28 |
11100 |
001110 |
D.13 |
01101 |
101100 |
D.29 † |
11101 |
101110 |
010001 |
D.14 |
01110 |
011100 |
D.30 † |
11110 |
011110 |
100001 |
D.15 |
01111 |
010111 |
101000 |
D.31 |
11111 |
101011 |
010100 |
|
K.28 |
11100 |
001111 |
110000 |
† Same code is used for K.x.7 [编辑] 3b/4b
3b/4b code
input |
RD = −1 |
RD = +1 |
|
input |
RD = −1 |
RD = +1 |
|
HGF |
fghj |
|
HGF |
fghj |
D.x.0 |
000 |
1011 |
0100 |
K.x.0 |
000 |
1011 |
0100 |
D.x.1 |
001 |
1001 |
K.x.1 ‡ |
001 |
0110 |
1001 |
D.x.2 |
010 |
0101 |
K.x.2 ‡ |
001 |
1010 |
0101 |
D.x.3 |
011 |
1100 |
0011 |
K.x.3 |
011 |
1100 |
0011 |
D.x.4 |
100 |
1101 |
0010 |
K.x.4 |
100 |
1101 |
0010 |
D.x.5 |
101 |
1010 |
K.x.5 ‡ |
001 |
0101 |
1010 |
D.x.6 |
110 |
0110 |
K.x.6 ‡ |
001 |
1001 |
0110 |
D.x.P7 † |
111 |
1110 |
0001 |
|
|
|
D.x.A7 † |
111 |
0111 |
1000 |
K.x.7 † ‡ |
111 |
0111 |
1000 |
[编辑] Control symbols 5b/6b 与 3b/4b 表可能导致下列 12 控制符号(control symbols)允许被发送,K.28.1, K.28.5, K.28.7 是逗号(,)序列:
控制符号(Control symbols)
input |
RD = −1 |
RD = +1 |
|
HGF EDCBA |
abcdei fghj |
abcdei fghj |
K.28.0 |
000 11100 |
001111 0100 |
110000 1011 |
K.28.1 † |
001 11100 |
001111 1001 |
110000 0110 |
K.28.2 |
010 11100 |
001111 0101 |
110000 1010 |
K.28.3 |
011 11100 |
001111 0011 |
110000 1100 |
K.28.4 |
100 11100 |
001111 0010 |
110000 1101 |
K.28.5 † |
101 11100 |
001111 1010 |
110000 0101 |
K.28.6 |
110 11100 |
001111 0110 |
110000 1001 |
K.28.7 ‡ |
111 11100 |
001111 1000 |
110000 0111 |
K.23.7 |
111 10111 |
111010 1000 |
000101 0111 |
K.27.7 |
111 11011 |
110110 1000 |
001001 0111 |
K.29.7 |
111 11101 |
101110 1000 |
010001 0111 |
K.30.7 |
111 11110 |
011110 1000 |
100001 0111 |
[编辑] 与 8b/10b 相关技术 目前IBM 的专利已过期,此方案已成为大众化的技术。 8B/10B 编码的应用如下
- PCI Express
- IEEE 1394b
- Serial ATA
- SAS
- Fibre Channel
- SSA
- Gigabit Ethernet(except for the twisted pair based 1000Base-T)
- InfiniBand
- XAUI
- Serial RapidIO
- DVI 和 HDMI(最小化传输差分讯号)
- DVB Asynchronous Serial Interface(ASI)
- DisplayPort Main Link
- HyperTransport
- Common Public Radio Interface(CPRI)
- USB 3.0
[编辑] 数位音效 重要的应用面:
- Digital Audio Tape
- Digital Compact Cassette (DCC).
用于 audio 与 data CDs:
- Compact Disc Eight-to-Fourteen Modulation
[编辑] 外部链接
- Original paper by Franaszek and Widmer.
- (英文)美国专利 4486739 (expired June 30, 2002)
取自“http://zh.wikipedia.org/zh-sg/8b/10b” |