>
首页 » 技术文章 » PCI-Express中8b/10b编码解码器的设计与实现

PCI-Express中8b/10b编码解码器的设计与实现

作者:许 军,许西荣  时间:2006-10-20 22:26  来源:
摘 要:文章在研究了8b/10b编码原理的基础上,采用FPGA设计并实现了PCI-Express总线控制器中的8b/10b编码解码器。8b/10b编码是一种面向字节的二进制传输代码。这种代码特别适合于高速串行总线的数据传输。这种编码编码的基本特性是保证DC 平衡,采用8b/10b编码方式,可使得发送的“0”、“1”数量保持基本一致,连续的“1”或“0”不超过5位,从而保证信号DC 平衡。8b/10b编码器可以通过一个5b/6b编码器和一个3b/4b编码器来实现。

关键词:8b/10b,编码,解码


引 言

随着新一代计算机不断的发展,新一代计算机局部总线PCI-Express已经出现并开始应用,由于新一代总线采用串行数据传输,为了改善数据在线上传输的特性,采用了8b/10b编码方式来传输数据,这种编码方式在ANSI X3.230-1994,CLAUSE11( IEEE802.3z,36.2.4) 中定义,并应用于千兆位以太网的数据传输。同时在许多其它的串行标准中均要求采用这种编码方式,如Infiniband、Fibre Channel、ATM、ESCON 及DVB-ASI等标准。本文在研究8b/10b编码原理的基础上,设计并实现了PCI-Express总线控制器中的8b/10b编码解码器。

8b/10b编码的特性之一是保证DC 平衡,采用8b/10b编码方式,可使得发送的“0”、“1”数量保持基本一致,连续的“1”或“0”不超过5位,即每5个连续的“1”或“0”后必须插入一位“0”或“1”,从而保证信号DC平衡,它就是说,在链路超时时不致发生DC失调。通过8b/10b编码,可以保证传输的数据串在接收端能够被正确复原,除此之外,利用一些特殊的代码( 在PCI-Express总线中为K码) ,可以帮助接收端进行还原的工作,并且可以在早期发现数据位的传输错误,抑制错误继续发生。

8b/10b编码原理

8b/10b编码是将一组连续的8位数据分解成两组数据,一组3位,一组5位,经过编码后分别成为一组4位的代码和一组6位的代码,从而组成一组10位的数据发送出去。相反,解码是将1组10位的输入数据经过变换得到8位数据位。数据值可以统一的表示为DX.Y或KX.Y,其中D表示为数据代码,K表示为特殊的命令代码,X表示输入的原始数据的低5位EDCBA,Y 表示输入的原始数据的高3位HGF。在PCI-Express总线规范中定义了12个特殊的命令代码(K码) ,这些特殊符号用于帧同步和连接管理机制,同时也用于识别DLLP 和TLP 帧。8b/10b编码逻辑可分解为两个子逻辑块,一个5b/6b编码器( EDCBA<->iedcba) 和一个3b/4b编码器(HGF<->jhgf) ,在PCI-Express总线中这10位代码是按照最先发送a最后发送j的顺序进行传输。编解码原理框图如图1所示。


38b/10b编码解码器的设计

发送器的设计
由于PCI-Express的传输速率高达2.5Gb/s,确定编码器采用250MHz的时钟信号,保证每个时钟周期编码器输出10位数据:为了降低提供数据等设备的时钟速率,发送器设计采用16位的输入数据总线,并且采用两位控制位来确定哪一字节的数据输入编码器,这样就需要一个125MHz的时钟输入,且要与250MHz时钟保持同步。发送器的功能框图如图2所示。


编码器可分为四部分功能,ENC_K为K码的编码功能块,ENC_D为D码的编码功能块,数据选择寄存器主要是决定输出的数据并向输出寄存器提供输出的数据,输出寄存器为经过8b/10b编码的最终输出模块。它每隔4ns向PCI_Express总线控制器中的串并转换模块提供经过编码的并行数据。图3为编码器功能框图。其中ENC_F模块为ENC_D提供一些附加的控制功能。



K码编码功能模块主要完成PCI-Express总线用于帧和链路管理的命令代码(K码) 的编码,共有12种K码,在PCI-Express1.0a规范中使用了9 种K码。在设计的这个功能模块中实现了全部12种K码的编码功能。其输出主要包括Kcode_6B、Kcode_4B、K_ERR、K_SEL[1:0]等信号。Kcode_6B为对低5位输入编码数据编码后的输出:Kcode_4B为对高3位输入数据编码后的输出:K_ERR在当输入的8位数据不是一个有效的命令代码时有效:K_SEL 表明输入的8位数据是一个有效的命令代码。

D码编码功能模块主要完成PCI-Express总线输入数据(D码) 的编码。其输出主要包括Dcode_6B和Dcode_4B信号。当Dcode_6B为对低5位输入编码数据编码后的输出:Dcode_4B为对高3位输入数据编码后的输出。而ENC_F模块提供附加的输出信号来确定输出的数据是否需要反向。这部分功能可通过两个ROM查找表来实现。第一个ROM表容量为4×8bit,其选择信号为输入数据的高3位:第二个ROM表容量为6×32bit,其选择信号为输入数据的低5位。

数据选择寄存器模块主要完成以下功能:

确定是向输出寄存器传输K码的编码还是D码的编码;

确定所输出的6b和4b编码是否需要反向;

将无效的命令代码错误指示传输到输出端。

输出寄存器模块为经过8b/10编码的最终输出模块,它向PCI-Express总线控制器的并—串转换模块提供并行数据,同时向总线控制器提供无效的命令代码错误指示。

接收器的设计
接收器包含两个相同的解码器、一个数据合并模块和同步逻辑,其功能框图如图4所示。


两个解码器功能完全相同,每个解码器均有10位数据输入和8位数据输出,同时产生一位的控制位输出,对不合法的代码生成一位错误指示位。这两个解码器的输出随后在数据合并模块中合并成为一个16位的数据输出,同时输出两位控制位和一个错误指示位。错误指示位能够指示出下列错误:

(1) 接收到的数据极性不对。由于错误检测可以通过在先前接收到的数据判断出数据错误,所以在对当前数据位设置错误标志时,对先前接收的三个数据也必须设置为数据错误状态。

(2) 输出的16位数据中包含一个无效的数据。

① 解码器
在接收器中包含两个完全一致的解码器,每个解码器包含10位输入寄存器,用来储存输入数据。解码器实现10b/8b解码功能:从10位输入数据中解码出有效的8位数据,计算出8位数据的极性,检测是否为命令代码,并且判断是否为无效代码。

数据解码
通过RX_DATA[5:0]可以直接解码出Dec_Data[4:0],通过对8b/10b代码研究可看出,所有的64种代码组合中只有48种组合是有效的,解码功能可直接通过代码表用HDL 语言中的CASE 语句实现。解码数据Dec_Data[7:5]与所有的10位输入数据有关。在当RX_DATA[5:0]为11000或是K28.X命令代码时RX_DATA[9:6]需要改变,另外上述的编码在当接收到的RX_DATA[9:6] 数据为0101、0110、1001和1010时需要改变码值。所有的16种代码组合中只有14种组合是有效的,解码功能同样可以直接通过代码表用HDL 语言中的CASE 语句实现。只是需要在上述情况下增加一条IF语句来进行判断是否需要改变码值。

极性判断
每一个解码器均有8位极性输出Disparity[7:0]。其中低四位是根据RX_DATA[5:0]确定的,高四位是根据RX_DATA[9:6] 和零极性状态下的000111,111000,0011和1100确定的。

命令代码检查
每个解码器有一个单独的输出K_Control_Dec用来指示接收到的10位代码为一个命令代码。"无效代码检查每个解码器有一个单独的输出Illegal_Code 用来表示收到的10位代码中包含一个无效代码。

② 同步逻辑同步逻辑控制接收器的两个输出信号Comma_Dec_En 和Word_SYNC。PCI-Express控制器提供字符排队电路来保证收到的数据流有正确的顺序。可通过Comma_Dec_En 来使字排队电路有效或无效。

(3) 数据合并/输出寄存器数据合并/输出寄存器的功能是将两个10b/8b解码器的输出经过组合,从而将2个单独的数据字节组合成1个字,同时输出两位控制位RX_K[1:0]和一个错误指示位CODE_ERR。

结束语

在研究PCI-Express总线中采用的8b/10b编码原理的基础上,采用FPGA设计并实现了PCI-Express总线控制器中的8b/10b编码解码器。

相关推荐

中国物联网核心网络建设明年铺开

物联网  编码  2011-05-27

H.264视频解码芯片中与滤波相关的存储器的设计

解码  H.26  2011-04-26

ZiiLABS推出1080p蓝光掌上媒体处理器ZMS-08

2009-11-10

德州仪器演示单处理器 8 通道 H.264 主类编码

2009-05-19

基于ATmegal28的LED屏图像数据解码设计

ATmegal28  LED  解码  2009-05-07

基于DSP的脱机视频编/解码系统

DSP  视频  解码  2009-03-01
在线研讨会
焦点