当前位置:首页 > EDA > 电子设计自动化
[导读]8b10b编码作为数字通信领域中的一项重要线路编码方案,其核心理念在于将每8位数据映射到10位编码中。这个映射过程严格按照特定规则进行,旨在保证编码中的电平转换足够,以维持信号的直流平衡,并提供足够的时钟信息,使接收端能够准确无误地解码数据。这种编码技术在多个通信系统中发挥着关键作用,其中包括但不限于Aurora、PCIe、USB、光纤通信、SATA和HDMI等。在这些应用场景中,8b10b编码通过其独特的特性,如电平平衡、时钟恢复和错误检测,确保了高速数字数据的可靠传输。在今天的通信标准中,8b10b编码已经成为确保数据完整性和可靠性的不可或缺的一环。

8b10b编码作为数字通信领域中的一项重要线路编码方案,其核心理念在于将每8位数据映射到10位编码中。这个映射过程严格按照特定规则进行,旨在保证编码中的电平转换足够,以维持信号的直流平衡,并提供足够的时钟信息,使接收端能够准确无误地解码数据。这种编码技术在多个通信系统中发挥着关键作用,其中包括但不限于Aurora、PCIe、USB、光纤通信、SATA和HDMI等。在这些应用场景中,8b10b编码通过其独特的特性,如电平平衡、时钟恢复和错误检测,确保了高速数字数据的可靠传输。在今天的通信标准中,8b10b编码已经成为确保数据完整性和可靠性的不可或缺的一环。

1为什么要使用8b10b编码

由于串行链路中存在交流耦合电容,理想电容的阻抗公式为Zc=1/2πf*C。因此,随着信号频率的增加,阻抗逐渐降低;反之,频率降低时阻抗增加。在这种情况下,当信号频率较高时,传输基本上可以实现零损耗。然而,当码型为连续“0”或“1”时,电容的损耗显著增加,导致信号幅度不断下降。这带来的严重后果是无法准确识别是“1”还是“0”。因此,为了尽量减小低频码型的损耗,8b10b编码技术应运而生。8b10b编码的主要目标是优化低频码型,将其转换为较高频的码型,以确保在传输过程中降低损耗,这就是直流平衡。通过这种方式,我们能够在高频率条件下更可靠地传输数据,提高串行链路的性能和稳定性。8b/10b编码的提出最早应用在光纤的传输技术,8b/10b技术是将8个比特经过某种映射的机制转化为10个比特的字码,分两组分别进行映射的处理,分别是 5B/6B 与 3B/4B 的处理。

FPGA基础:8b/10b编码原理详解

2不均等性——Disparity

8b10b编码产生的输出为10位,经过8b10b编码后只存在三种情况,分别是"+2" "0" "-2",它们代表了三种不均等性(Disparity)。在这里,不均等性通过计算 "1" 的数量减去 "0" 的数量得到,即 Disparity = "1"的数量 - "0"的数量。通过利用这种不均等性与 Disparity 的关系,可以确保发送的 "0" 和 "1" 的数量保持一致,从而有效地限制了连续的 "1" 或 "0" 不超过5位。这种机制有助于维持编码的直流平衡,保障了数据的可靠传输。

· "+2"表示10b内有4b的"0",6b的"1"。

· " 0"表示10b内有5b的"0",5b的"1"。

· "-2"表示10b内有6b的"0",4b的"1"。

3编码原理

8b10b编码会将8b数据分成两组,一组3b(HGF),一组5b(EDCBA),经过8b10b编码后,3b(HGF)经过3b4b编码变成4b(fghj),5b(EDCBA)经过5b6b编码变成6b(abcdefgi),合起来就是10b(abcdefgifghj)。此外,“D.x.y”是数据码(D即是Data),“K.x.y”指控制码(K即是Key),x与y表示输入的原始数据。

FPGA基础:8b/10b编码原理详解

不均等性执行规则

FPGA基础:8b/10b编码原理详解

8b/10b编码是DC-free(直流平衡)的,意味着长时间的传输比特数的1和0的比例恰好为50%。为了实现这一点,传输的1的数量和0的数量之间的差异始终被限制在±2之间,并且在每个符号的末尾,它要么是+1要么是−1。这个差异被称为运行差异(RD,running disparity)

· 当RD = -1时,表示编码后"1"的个数比"0"的个数多2个,表示"1"多;

· 当RD = +1时,表示编码后"0"的个数比"1"的个数多2个,表示"0"多;

这里为什么是2呢,这是由于4 bit和6bit的两个子分组都是偶数个位数,所以不平衡度不可能是“+1” 或“-1”,因此,在8B/10B编码方案中会使用不平衡度为“+2” 和“-2” 的值。

编码的过程就是使得"0"和"1"的数量均衡,防止"0"或"1"过长的现象,因此在"1"多的时候会翻转RD-变为RD+,在"0"多的时候会翻转RD+变为RD-,在编码过程中,RD的初值为-1,当编码为完美平衡编码时,如上表所示不均等性(Disparity of 6 or 4 bit Code)为0,RD的极性(Next RD)不反转;当编码“1”和“0”的数量不等时,如上表所示不均等性为±2,则RD的极性(Next RD)反转。

上表有四种情况,Next RD值依赖于Current RD以及当前6B码或者4B码的Disparity。根据Current RD的值,决定5B/4B和 3B/4B编码映射方式:

· 当前RD为-1,编码"0"和"1"数量相等即不均等性为0,则选择Disparity为0的编码,下次RD的极性不变为-1。

· 当前RD为-1,编码"0"和"1"数量不等即不均等性为±2,根据RD = -1选择Disparity为+2的编码,下次RD的极性翻转为+1。

· 当前RD为+1,编码"0"和"1"数量相等即不均等性为0,则选择Disparity为0的编码,下次RD的极性不变为+1。

· 当前RD为+1,编码"0"和"1"数量不等即不均等性为±2,根据RD = +1选择Disparity为-2的编码,下次RD的极性翻转为+1。

FPGA基础:8b/10b编码原理详解

下表分别为5b6b和3b4b的映射码表,对于每个具有不同数量的1和0的5b/6b和3b/4b编码,都有两种可以用于传输的比特模式:一种是含有两个更多“1”比特,另一种是所有比特取反从而含有两个更多“0”。根据信号的当前的RD,编码引擎会选择对给定数据发送哪两种可能的六位或四位序列之一。

FPGA基础:8b/10b编码原理详解

下面是一个例子:

o 原数据为D.01.3即8b'011_00001

o 当前5b6b编码RD = -1,可以看到EDCBA为D.01,5b6b编码后为5b'011101

o 当前3b4b编码RD = -1,可以看到HGF为D.x.3,3b4b编码后为3'b0011

o 综合起来8b'01100001经过8b10b编码后变成10'b0111010011

o 编码后Disparity = -2,则最终的RD需要由RD-1翻转为RD+1

D.x.7主要编码和备用编码

从上图可以看到,D.x.7有两套编码,分别是D.x.P7(主要,Primary)和D.x.A7(备用,Alternate),这是为了避免与前面的5b/6b代码组合时出现5个连续的0或1.

· 当 RD = -1,5b/6b编码 x = 17,18或20时,如果选择D.x.P7则会出现5个连续的1,所以需要选择备用编码D.x.A7

· 当 RD = -1,5b/6b编码 x = 11,13或24时,如果选择D.x.P7则会出现5个连续的0,使用需要选择备用编码D.x.A7

控制符号(Control Symbols)

在8b/10b编码中,控制符号是10位符号,它们是有效的位序列(包含不超过六个1或0),但没有对应的8位数据字节。这些控制符号主要用于执行低级别的控制功能。例如,在光纤通信中,K28.5 用于执行循环仲裁、填充字、链路重置等功能的四字节序列(称为“有序集”)的开头。

通过引入K.28或备用的D.x.A7输出,可以创建用于控制的12个特殊符号。这些符号不携带实际的数据,而是用于在数据流中标识和控制特定的状态或操作。其中有一些逗号序列,这是一个在数据流中独特且不会与实际数据混淆的位模式。通过检测逗号序列,接收方可以确定字节边界,帮助正确解释和处理数据流中的字节。

只有K.28.1、K.28.5和K.28.7生成包含五个0或1位序列的逗号序列。这些逗号序列的格式是11000001xx或00111110xx,其中xx表示任意两位。

逗号序列中有两个相同的前导位("00","11"),是为了应对当逗号序列跨越两个符号时,可能出现连续五个相同的位。这种设计确保了逗号序列的唯一性,从而在解析数据流时,可以准确识别并用于确定字节边界。例如,D.x.A7(0111)后面可能跟着一个以两个相同位开始的符号,比如D.03(110001)、D.11、D.12、D.19、D.20、D.28或K.28,但是,D.x.A7始终以一个非相同的位作为前导位,因此形成的模式是ifghj_abc = 10111_110或01000_001,如果前导位为非相同位("10","01")则不认为他是逗号序列。

在控制符号中,只有在x等于23、27、29、30时,K.x才能与A7组合使用。对于其他D.x.A7编码,不应该使用,因为这可能导致逗号序列的对齐错误。

FPGA基础:8b/10b编码原理详解

FPGA基础:8b/10b编码原理详解

4带宽利用率

在8b/10b编码中,每8位数据被编码成10位,其中2位用于控制目的。考虑到每8位数据编码成10位,带宽利用率可以计算为8/10 = 80%。这表示在8b/10b编码中,80%的比特用于传输实际的数据,而其余的20%用于控制和维护直流平衡。

5总结

本文主要介绍了8b10b的编码原理,8b/10b编码是一种用于高速数据通信的编码方案,其设计目的是保持直流平衡,并通过控制符号实现一些控制功能。在后续,我们将深入探讨如何在FPGA中实现和优化8b/10b编码,以满足不同应用场景的性能和可靠性需求。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

现隶属于艾默生的Digilent将成为NI的教育和教学产品品牌

关键字: FPGA 数字逻辑

在FPGA(现场可编程门阵列)设计中,性能优化是设计师们持续追求的目标。为了实现这一目标,除了关注硬件层面的优化外,编程技术的选择和应用同样至关重要。特定的编程技术能够显著提高FPGA设计的性能,其中循环展开和数据流编程...

关键字: FPGA 编程

在现代电子系统设计中,FPGA(现场可编程门阵列)已成为实现高性能系统的核心组件。然而,仅仅依靠FPGA的硬件特性并不足以充分发挥其性能潜力。综合过程,作为将高级设计描述转化为硬件实现的关键步骤,对FPGA的性能有着至关...

关键字: FPGA 现场可编程门阵列 综合过程

在现代通信系统中,FPGA(现场可编程门阵列)因其高度的灵活性和可配置性,成为实现复杂通信协议和接口的理想平台。UART(通用异步收发传输器)作为一种广泛应用的串行通信协议,结合RS485差分信号传输技术,为FPGA在远...

关键字: FPGA UART RS485

在FPGA(现场可编程门阵列)设计中,约束文件扮演着至关重要的角色。它们不仅指导了设计的布局布线过程,还确保了设计能够按照预定的要求正确实现。本文将详细探讨FPGA约束文件的类型、作用、语法以及在实际设计中的应用。

关键字: FPGA 约束文件

在FPGA和ASIC设计流程中,仿真验证是一个至关重要的环节。ModelSim作为业界领先的仿真工具,以其强大的功能和高效的仿真速度赢得了广泛的应用。然而,随着设计复杂度的不断提升,仿真时间也随之延长,成为制约设计周期的...

关键字: ModelSim仿真 FPGA ASIC设计

在现代电子系统设计中,FPGA(现场可编程门阵列)以其高度的灵活性和可配置性,成为实现高性能系统的关键组件。为了进一步提升FPGA设计的性能,我们可以充分利用FPGA的特定特性,如DSP块和高速串行收发器。本文将深入探讨...

关键字: FPGA DSP 高速串行接口

在FPGA(现场可编程门阵列)设计中,功耗是一个重要的考量因素,尤其是在电池供电或热敏感的应用场景中。I/O(输入/输出)操作作为FPGA与外部世界交互的桥梁,其功耗虽然相比于FPGA内部的逻辑功耗可能较小,但在大量数据...

关键字: I/O操作 FPGA

在现代电子系统设计中,现场可编程门阵列(FPGA)以其高度的灵活性和可配置性成为实现高性能计算、数据处理和实时控制等应用的关键平台。FPGA内部集成的丰富存储器资源,如块RAM(BRAM)、分布式RAM(LUTRAM)等...

关键字: FPGA 内部存储器

在FPGA(现场可编程门阵列)开发领域,随着人工智能(AI)技术的不断融入,如何高效地利用AI辅助设计成为了一个重要的研究课题。AI编程提示词,作为引导AI模型生成特定输出或优化设计的关键输入,其编写质量直接影响了AI辅...

关键字: AI编程 FPGA
关闭