8B/10B,也叫做8字节/10字节或8B10B。8B/10B方式最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),由Al Widmer和Peter Franaszek在IBM的刊物“研究与开发”上描述。
8b/10b编码的特性之一是保证DC 平衡(DC Balance),采用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。
8b/10b编码是目前许多高速串行总线采用的编码机制,如 USB3.0、1394b、Serial ATA、PCI Express、Infini-band、Fiber Channel、RapidIO等总线或网络等。
8B/10B编码器,首先系统接收外部发送的8B并行数据,在8B/10B编码模块中完成编码后,再通过10B数据并串转换模块生成利于传输的10B串行信号。这样8B/10B编码模块和10B并串转换模块构成8B/10B编码器。编码端发送的10B串行信号经过传输线路传输后被lOB数据串并行转换模块所接收,转换完成的10B并行数据再通过10B/8B解码模块解码完成后即是还原后的原始数据。这样10B串行数据到10B并行数据转换模块和10B/8B解码模块就构成了10B/8B解码器。
8B/10B编解码器通常有两种设计方法:一种是用查找表直接将8位信号映射成10位信号,该方法是采用存储器存储所有可能出现的码组,再将输入码组转换为存储地址,找出对应的编解码。这种方法逻辑简单,开发时间很短;另一种是通过逻辑运算直接实现编解码功能,其优点是明显减小内部使用面积,但逻辑关系复杂。从系统优化考虑把1节8 bit字节拆分成3 bit和5 bit,然后在极性偏差RD(Running Dis-parity)控制器的控制下以并列方式编解码。这种方法的组合逻辑实现可以简化码表,减小电路板的面积,有效提高编码工作速度,同时由于电路板的面积减小,功耗显著降低。
8B/10B编码方式存在有趣的特色:总输出为10位,其中’0’和’1’出现的次数仅仅有以下三种场合:
2 5个’0’和5个’1’
2 4个’0’和6个’1’
2 6个’0’和4个’1’
“不均等性(Disparity)”:就是指10个位中’1’和‘0’出现的差值。换句话说,8B/10B编码的Disparity仅有‘+2’(6个)‘+0’‘-2’
2 ‘+2’ :4个’0’和6个’1’
2 ‘+0’ :5个’0’和5个’1’
2 ‘-2’ :6个’0’和4个’1’
8B/10B编码中:数据码表示为:Dx.y,控制代码表示为:Kx.y。
一个字节为8位,分别为5个LSB和3个MSB。5个LSB为x,3个MSB为y,举例:D0.0 = 000 00000 D6.2 = 010 00110。
由于高速串行流是连续地将数据从发送端往接收端逐次地传输过去,每一个数据的编码会随着前面送出数据不停累积“不均等性”的状态而产生正确的位 映射关系,所以这个依靠做为判断的状态就被称为“Running Disparity”。实际上可以将它视为一个判断标志(Flag),因此“Running Disparity”也仅会出现两种状态,分别是“+1”与“-1”,分别代表位1比位0多或位0比位1多。如此一来,整个冗长数据串的编码就可以被限制 在约定的范围之内。
Ø Altera K码含义:
Ø 模块端口分布图:
n 可以旁路掉。
n Tx_forcedisp和tx_dispval一起使用,强制进行正或者负校验。
n Tx_incpolarity对于差分走线交换的情况,‘1’翻转数据极性
Ø 端口说明:
Kin : 高电平输入代表是命令输入,低电平表示数据输入
文章评论(0条评论)
登录后参与讨论