基于SerDes技术串行通信系统的编解码方法及装置

申请号 CN201610961572.5 申请日 2016-11-04 公开(公告)号 CN106411322A 公开(公告)日 2017-02-15
申请人 深圳国人通信股份有限公司; 发明人 徐小明; 康婕; 赵羽; 项圣文;
摘要 本 发明 提供一种基于SerDes技术串行通信系统中的编解码方法及装置,该方法包括编码步骤:将18位的普通数据分为两个9位的两个原始数据;将两个原始数据分别作为两个编码查找表的初始地址N并转化为2*N+0和2*N+1作为编码查找表的输入地址;根据输入地址输出包含 不平衡 度信息的第一码字与第二码字;第一码字中“1”的个数大于或等于“0”的个数,第二码字中“0”的个数大于或等于“1”的个数;根据当前码流的运行极性差异值输出选择指示 信号 ;根据选择指示信号在每个查找表输出的第一码字与第二码字中选择一个码字组成下一输出码字。该方案的译码过程是编码的逆过程,实现方法与编码过程类似。本发明在达到输出码流的直流平衡的目标的同时提高传输性能。
权利要求

1.一种基于SerDes技术串行通信系统中的编解码方法,包括编码步骤:
将18位的普通数据分为高9位和低9位两个原始数据;
将两个所述原始数据分别作为两个编码查找表的初始地址N;
将所述初始地址转化为2*N+0和2*N+1作为所述编码查找表的输入地址;
所述编码查找表根据所述输入地址输出包含不平衡度信息的第一码字与第二码字;其中,所述第一码字中“1”的个数大于或等于“0”的个数,其不平衡度为正;所述第二码字中“0”的个数大于或等于“1”的个数,其不平衡度为负;
根据当前码流的运行极性差异值输出选择指示信号
根据所述选择指示信号在每个所述查找表输出的第一码字与第二码字中选择一个码字组成下一输出码字。
2.根据权利要求1所述基于SerDes技术串行通信系统中的编解码方法,其特征在于,所述第一码字与第二码字为10位的码字信息与3位的不平衡度D的编码信息相加得到的;其中,所述10位的码字信息为9位的所述原始数据到10位的映射;所述不平衡度D=n-(10-n),其中n为码字中“1”的个数。
3.根据权利要求1所述基于SerDes技术串行通信系统中的编解码方法,其特征在于,还包括K码编码步骤:
定义6个K码,每两个K码为一组,且每组K码中的码字互为补码;
接收输入的K码指示信号和极性选择信号;
通过K码查找表输出由两个10比特组成的K码编码。
4.根据权利要求1所述基于SerDes技术串行通信系统中的编解码方法,其特征在于,在根据所述当前码流的运行极性差异值输出所述选择指示信号时:若所述当前码流的运行极性差异值为负,则输出的所述选择指示信号为高电平;若所述当前码流的运行极性差异值为正,则输出的所述选择指示信号为低电平;
在根据所述选择指示信号在每个所述查找表输出的第一码字与第二码字中选择一个码字组成输出码字时:若输出的所述选择指示信号为高电平,则所述下一输出码字中在所述第一码字与第二码字中选择所述第一码字;若输出的所述选择指示信号为低电平,则所述下一输出码字中在所述第一码字与第二码字中选择所述第二码字。
5.根据权利要求1或4所述基于SerDes技术串行通信系统中的编解码方法,其特征在于,所述当前码流的运行极性差异值的计算具体包括步骤:
将所述运行极性差异值与所述输出码字的不平衡度的代数和作为编码后的极性差异总和值;
当所述输出码字完美平衡时,所述当前码流的运行极性差异值保持不变;
当所述输出码字的不平衡时:
若所述编码后的极性差异总和值小于0,则所述当前码流的运行极性差异值为负;
若所述编码后的极性差异总和值大于0,则所述当前码流的运行极性差异值为正;
若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为正,则所述当前码流的运行极性差异值为负;
若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为负,则所述当前码流的运行极性差异值为正。
6.根据权利要求1所述基于SerDes技术串行通信系统中的编解码方法,其特征在于,还包括译码步骤:
对译码查找表中对应普通数据位置上的译码输出数据做处理;
对所述译码查找表中对应K码位置上的译码输出数据做处理;
在上述生成的所述译码查找表中根据查找表的地址分别选择一个译码输出数据;
将两个所述译码输出数据的低9比特整合后输出。
7.一种基于SerDes技术串行通信系统中的编解码装置,其特征在于,包括主编码器、与所述主编码器相连的线路极性计算器、与所述主编码器相连的编码选择器;
所述主编码器包括:
拆分单元,用于将18位的普通数据分为高9位以及低9位的两个原始数据;
初始地址定义单元,用于将两个所述原始数据分别作为两个编码查找表的初始地址N;
输入地址计算单元,用于将所述初始地址转化为2*N+0和2*N+1作为所述编码查找表的输入地址;
输出单元,用于根据所述输入地址输出包含不平衡度信息的第一码字与第二码字;其中,所述第一码字中“1”的个数大于或等于“0”的个数,其不平衡度为正;所述第二码字中“0”的个数大于或等于“1”的个数,其不平衡度为负;
所述线路极性计算器用于根据当前码流的运行极性差异值输出选择指示信号;
所述编码选择器用于根据所述选择指示信号在每个所述查找表输出的第一码字与第二码字中选择一个码字组成下一输出码字。
8.根据权利要求7所述基于SerDes技术串行通信系统中的编解码装置,其特征在于,还包括K码编码器,与所述线路极性计算器相连:所述线路极性计算器还用于输出极性选择信号;
所述K码编码器包括:
定义单元,用于定义6个K码,每两个K码为一组,且每组K码中的码字互为补码;
接收单元,用于接收输入的K码指示信号和极性选择信号;
K码编码输出单元,用于通过K码查找表输出由两个10比特组成的K码编码。
9.根据权利要求7所述基于SerDes技术串行通信系统中的编解码装置,其特征在于,所述线路极性计算器包括:
差异总和值计算单元,用于将所述运行极性差异值与所述输出码字的不平衡度的代数和作为编码后的极性差异总和值;
平衡判断单元,用于判断所述输出码字是否完美平衡;
运行极性差异值计算单元,用于当所述输出码字完美平衡时,所述当前码流的运行极性差异值保持不变;
所述运行极性差异值计算单元还用于,当所述输出码字的不平衡时:若所述编码后的极性差异总和值小于0,则所述当前码流的运行极性差异值为负;若所述编码后的极性差异总和值大于0,则所述当前码流的运行极性差异值为正;若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为正,则所述当前码流的运行极性差异值为负;若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为负,则所述当前码流的运行极性差异值为正。
10.根据权利要求7所述基于SerDes技术串行通信系统中的编解码装置,其特征在于,还包括主译码器以及与所述主译码器相连的数据整合器;
所述主译码器用于对译码查找表中对应普通数据位置上的译码输出数据做处理;在上述生成的译码查找表中根据查找表的地址分别选择一个译码输出数据;
所述数据整合器用于将两个所述译码输出数据的低9比特整合后输出。

说明书全文

基于SerDes技术串行通信系统的编解码方法及装置

技术领域

[0001] 本发明涉及通信技术领域,尤其涉及一种基于SerDes技术串行通信系统的编解码方法及装置。

背景技术

[0002] 随着通信技术的不断发展,通信系统对传输带宽要求不断增加,由于高速SerDes(串行器/解串器)的串行通信技术具有信道容量高、系统成本低以及传输速度快等特点,这使得基于SerDes的串行通信技术逐渐成为主流的高速数据通信技术。
[0003] 基于SerDes的串行通信系统结构如附图1所示:在发送端,并行数据经过主编码器1进行编码;并串转换器2接收编码后的并行数据,根据时钟管理器4提供的时钟信号将并行数据转换为串行数据,并经由发送器3发出该串行数据。接收端,接收器7接收串行输入数据,并将其发送至串并转换器6,串并转换器6将所述串行输入数据变为并行数据,并发送至主译码器5,主译码器5将其译码后输出;时钟管理器4通过串并转换器从数据中恢复时钟信号
[0004] 基于SerDes的串行通信系统中的关键技术之一是接收端的时钟和数据恢复,而影响接收端时钟和数据恢复性能的主要因素是串行数据流的电平变换和直流平衡。电平变换是指数据从“0”到“1”或者从“1”到“0”的变换,直流平衡是指串行数据流中“0”和“1”的个数基本相同。
[0005] 为了保证串行数据流具有很好的电平变换和直流平衡特性,基于SerDes技术的串行通信系统在发送端对输入的并行数据进行编码处理。
[0006] 在进行编码处理时,主要考量的因素包括:
[0007] (1)、码字不平衡度D(Disparity),表示一个码字中1的数目与0的数目的差值。用正极性(Positive Disparity)表示码字中1的个数比0的个数多,正N极性中的“N”,表示数据中的1的个数比0的个数多N;用负极性(Negative Disparity)表示码字中1的个数比0的个数少,负N极性中的“N”,表示数据中的1的个数比0的个数少N。例如:对于0100,D=-2;对于0111,D=+2。
[0008] (2)运行极性差异值RD(Running Disparity)。表示当前连续的所有码字中1和0的个数之差,即当前码流的不平衡特性。用运行极性差异值和RDS(Running Disparity Sum)值表示输出码流的总不平衡度。在编码时要考虑输出码流的RDS的“±”极性,而不要考虑具体的数值。“+”表示当前的码流中“1”的数目多于“0”的数目;“-”表示当前的码流中“0”的数目多于“1”的数目。对于一个好的线路码,RDS应该是一个绝对值接近0的有限值。
[0009] (3)编码游程长度(Run Length)表示连续的串行码流中,连续的1或者0的个数。
[0010] 现有技术中,最常见的线路编码技术是8B/10B编码,8B/10B编码将8Bit(8位)数据编码成10Bit(10位)数据,其良好的直流平衡特性和游程短(最大游程长度仅为5)等优点使接收端进行数据和时钟恢复变得非常容易。然而8B/10B编码也存在明显的缺点,即编码效率不高。假如传输速率为1Gb/s的有用数据流,其编码后实际线路传输速率为1.25Gb/s,这将近有25%的冗余。这么大的冗余开销在更高速率的光线通信系统(传输速率达到6Gb/s甚至10Gb/s)中将变得无法承受;另外随着光纤通信设备性能的提高,使得光线通信系统对线路码的要求降低了很多,如最大编码游程只要小于20就能很容易被接收机检测。

发明内容

[0011] 本发明的特征和优点在下文的描述中部分地陈述,或者可从该描述显而易见,或者可通过实践本发明而学习。
[0012] 为克服现有技术的问题,本发明提供一种基于SerDes技术串行通信系统的编解码方法及装置,采用9B/10B编码,通过查找表方法在FPGA(Field-Programmable Gate Array,现场可编程阵列)内实现,从而提高有效传输效率。
[0013] 本发明解决上述技术问题所采用的技术方案如下:
[0014] 根据本发明的一个方面,提供一种基于SerDes技术串行通信系统中的编解码方法,包括编码步骤:
[0015] 将18位的普通数据分为两个9位的两个原始数据;
[0016] 将两个所述原始数据分别作为两个编码查找表的初始地址N;
[0017] 将所述初始地址转化为2*N+0和2*N+1作为所述编码查找表的输入地址;
[0018] 所述编码查找表根据所述输入地址输出包含不平衡度信息的第一码字与第二码字;其中,所述第一码字中“1”的个数大于或等于“0”的个数,其不平衡度为正;所述第二码字中“0”的个数大于或等于“1”的个数,其不平衡度为负;
[0019] 根据当前码流的运行极性差异值输出选择指示信号;
[0020] 根据所述选择指示信号在每个所述查找表输出的第一码字与第二码字中选择一个码字组成下一输出码字。
[0021] 可选地,所述第一码字与第二码字为10位的码字信息与3位的不平衡度D的编码信息相加得到的;其中,所述10位的码字信息为9位的所述原始数据到10位的映射;所述不平衡度D=n-(10-n),其中n为码字中“1”的个数。
[0022] 可选地,还包括K码编码步骤:
[0023] 定义6个K码,每两个K码为一组,且每组K码中的码字互为补码;
[0024] 接收输入的K码指示信号和极性选择信号;
[0025] 通过K码查找表输出由两个10比特组成的K码编码。
[0026] 可选地,在根据所述当前码流的运行极性差异值输出所述选择指示信号时:若所述当前码流的运行极性差异值为负,则输出的所述选择指示信号为高电平;若所述当前码流的运行极性差异值为正,则输出的所述选择指示信号为低电平;
[0027] 在根据所述选择指示信号在每个所述查找表输出的第一码字与第二码字中选择一个码字组成输出码字时:若输出的所述选择指示信号为高电平,则所述下一输出码字中在所述第一码字与第二码字中选择所述第一码字;若输出的所述选择指示信号为低电平,则所述下一输出码字中在所述第一码字与第二码字中选择所述第二码字。
[0028] 可选地,所述当前码流的运行极性差异值的计算具体包括步骤:
[0029] 将所述运行极性差异值与所述输出码字的不平衡度的代数和作为编码后的极性差异总和值;
[0030] 当所述输出码字完美平衡时,所述当前码流的运行极性差异值保持不变;
[0031] 当所述输出码字的不平衡时:
[0032] 若所述编码后的极性差异总和值小于0,则所述当前码流的运行极性差异值为负;
[0033] 若所述编码后的极性差异总和值大于0,则所述当前码流的运行极性差异值为正;
[0034] 若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为正,则所述当前码流的运行极性差异值为负;
[0035] 若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为负,则所述当前码流的运行极性差异值为正。
[0036] 可选地,还包括译码步骤:
[0037] 对译码查找表中对应普通数据位置上的译码输出数据做处理;
[0038] 对所述译码查找表中对应K码位置上的译码输出数据做处理;
[0039] 在上述生成的译码查找表中根据查找表的地址分别选择一个译码输出数据;
[0040] 将两个所述译码输出数据的低9比特整合后输出。
[0041] 根据本发明的另一个方面,提供一种基于SerDes技术的串行通信系统中编解码装置,其特征在于,包括主编码器、与所述主编码器相连的线路极性计算器、与所述主编码器相连的编码选择器;
[0042] 所述主编码器包括:
[0043] 拆分单元,用于将18位的普通数据分为高9位以及低9位的两个原始数据;
[0044] 初始地址定义单元,用于将两个所述原始数据分别作为两个编码查找表的初始地址N;
[0045] 输入地址计算单元,用于将所述初始地址转化为2*N+0和2*N+1作为所述编码查找表的输入地址;
[0046] 输出单元,用于根据所述输入地址输出包含不平衡度信息的第一码字与第二码字;其中,所述第一码字中“1”的个数大于或等于“0”的个数,其不平衡度为正;所述第二码字中“0”的个数大于或等于“1”的个数,其不平衡度为负;
[0047] 所述线路极性计算器用于根据当前码流的运行极性差异值输出选择指示信号;
[0048] 所述编码选择器用于根据所述选择指示信号在每个所述查找表输出的第一码字与第二码字中选择一个码字组成输出码字。
[0049] 可选地,还包括K码编码器,与所述线路极性计算器相连:所述线路极性计算器还用于输出极性选择信号;
[0050] 所述K码编码器包括:
[0051] 定义单元,用于定义6个K码,每两个K码为一组,且每组K码中的码字互为补码;
[0052] 接收单元,用于接收输入的K码指示信号和极性选择信号;
[0053] K码编码输出单元,用于通过K码查找表输出由两个10比特组成的K码编码。
[0054] 可选地,所述线路极性计算器包括:
[0055] 差异总和值计算单元,用于将所述运行极性差异值与所述输出码字的不平衡度的代数和作为编码后的极性差异总和值;
[0056] 平衡判断单元,用于判断所述输出码字是否完美平衡;
[0057] 运行极性差异值计算单元,用于当所述输出码字完美平衡时,所述当前码流的运行极性差异值保持不变;
[0058] 所述运行极性差异值计算单元还用于,当所述输出码字的不平衡时:若所述编码后的极性差异总和值小于0,则所述当前码流的运行极性差异值为负;若所述编码后的极性差异总和值小于0,则所述当前码流的运行极性差异值为正;若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为正,则所述当前码流的运行极性差异值为负;若所述编码后的极性差异总和值等于0,且原码流的运行极性差异值为负,则所述当前码流的运行极性差异值为正。
[0059] 可选地,还包括主译码器以及与所述主译码器相连的数据整合器;
[0060] 所述主译码器用于对译码查找表中对应普通数据位置上的译码输出数据做处理;
[0061] 对所述译码查找表中对应K码位置上的译码输出数据做处理;
[0062] 在上述生成的译码查找表中根据查找表的地址分别选择一个译码输出数据;
[0063] 所述数据整合器用于将两个所述译码输出数据的低9比特整合后输出。
[0064] 本发明提供了一种基于SerDes技术串行通信系统的编解码方法及装置,将9位的原字映射为10位的码字。编码后数据流具有很好的直流平衡特性,最大游程为7,这些优势使得数据在链路上的传输性能将大大提高,且在接收端也很容易实现时钟恢复,非常适用于高速串行数据的传输。与现行常用的8B/10B编码方式相比,在相同的传输速率下,9B/10B编码方案的有效传输速率提高了12.5%。
[0065] 通过阅读说明书,本领域普通技术人员将更好地了解这些技术方案的特征和内容。

附图说明

[0066] 下面通过参考附图并结合实例具体地描述本发明,本发明的优点和实现方式将会更加明显,其中附图所示内容仅用于对本发明的解释说明,而不构成对本发明的任何意义上的限制,在附图中:
[0067] 图1为现有技术中的SerDes通信系统结构框图示意图。
[0068] 图2为本发明实施例的基于SerDes技术串行通信系统中的编码步骤的流程示意图;
[0069] 图3为本发明实施例的极性偏差状态转移图;
[0070] 图4为本发明实施例的基于SerDes技术串行通信系统中的K码编码步骤的流程示意图;
[0071] 图5为本发明实施例的基于SerDes技术串行通信系统中的译码步骤的流程示意图;
[0072] 图6为本发明实施例的基于SerDes技术串行通信编码系统的结构示意图;
[0073] 图7为本发明实施例的基于SerDes技术串行通信系统中主编码器的结构示意图;
[0074] 图8为本发明实施例的基于SerDes技术串行通信系统中的线路极性计算器的结构示意图;
[0075] 图9为本发明另一实施例的基于SerDes技术串行通信系统的结构示意图;
[0076] 图10为本发明实施例的基于SerDes技术串行通信系统中的K码编码器的结构示意图;
[0077] 图11为本发明又一实施例的基于SerDes技术串行通信系统的结构示意图;

具体实施方式

[0078] 本发明通过编码查找表的设计,能将9位的原字映射为10位的码字。该编码查找表可以按以下方法实现。
[0079] 首先,考虑所有10位码字样本,10位的码字样本有2^10=1024种组合。这1024个码字向量按照比特“1”的个数进行分组后得到下表1所示的分布规律:
[0080]“1”的个数 码字样本数量 码字不平衡度D 注释
0或者10 1 +10或者-10 不使用
1或者9 10 +8或者-8 不使用
2或者8 45 +6或者-6 不使用
3或者7 120 +4或者-4 成对使用
4或者6 210 +2或者-2 成对使用
5 252 0 使用
[0081] 表1 10位码字的分类
[0082] 在所有可能的1024个码字样本中,放弃所有码字不平衡度D绝对值大于4的码字样本,这样就剩下252个完美平衡码字(D=0)与330对非完美平衡码字(D=±2、±4)。也就是说共有582对码字,大于9位所需的512对任意原字。
[0083] 为了使最大游程长度最小化,在582对码字中挑出70对不需要的码字。原则是考虑每个码字的头部和尾部游程长度,比如码字0010111111的头部游程长度为2,尾部游程长度为6。对上述582对码字全都以这种方式分析,可以得到表2所示的分布规律:
[0084]
[0085] 表2码字游程长度分布表
[0086] 将头部和尾部游程长度大于5的32对码字(其中码字0000011111和1111100000在表中算了两次)。那么此时还剩下550对码字,且由于头部和尾部游程长度为4,所以连续码流的最大游程为8。
[0087] 不能丢弃所有头部和尾部游程长度为4的码字的原因是会损失太多码字,从而导致不够9位编码所需512对码字。这里只选择丢弃尾部游程长度为4的码字。
[0088] 通过上述分析后最后得到的许用码字为232个平衡码字,其开头和结尾处的游程不大于3;200×2个D=±2的码字,80×2个D=±4的码字,其开头和结尾处的游程不大于4,且232+200+80=512,刚好可以满足9位编码所需512对码字样本。
[0089] 获取满足9位编码所需512对码字样本后,可以进行9位到10位的映射时,具体包括以下步骤:
[0090] 步骤1:首先将232个平衡码字的第一位去掉,剩下的9位就是与其对应的原字。如平衡码字0100100111,去掉第一位就是100100111,100100111就是与它对应的原字,即用十进制表示就是295编码后还是295,这些原字的第一码字和第二码字相同。
[0091] 步骤2:对剩余的码字与原字进行分析,同样可以将部分的不平衡码字与部分的原字对应起来。规则是先处理的是D=±2的码字,后处理D=±4的码字。如010011000原字既可以与1010011000对应,也可以与0010011000对应,因为先处理D=±2的码字,所以它将与1010011000对应。这样处理后有228个原字可以找到第一码字和第二码字中一种模式的编码结果。
[0092] 步骤3:剩余的52个原字由于不平衡度太大,不能通过上面的方法得到某一模式下的编码。这样的话就只能在剩余的许用码字中先找一个与其最相近的码字进行映射。如原字101000000,在剩余的码字集合中与其最相近的是0101000001,则0101000001就是101000000的第二码字。
[0093] 步骤4:经过上面步骤处理后,每个9位原字都找到了一个与其对应的码字模式,这个码字模式可能第一码字也可能是第二码字。除了步骤1中平衡码字外,其他280个原字还需要另外一种模式的编码结果。因此还需找到这280个原字的另一个模式下的码字。其编码准则为:对于某一个需要编码的原字,只要从剩余的码字中找一个与其最接近,并且和它通过步骤1~3已找到码字的极性相反即可。比如原字000000000根据步骤3找到第二码字为0001000011,它的极性为负;则原字的第一码字应该在剩余的许用码字中选一个与他最接近且极性为正的码字,这里选择1001010111作为它的第一码字。
[0094] 步骤5:通过上述步骤就可以实现9位到10位的映射,但是制作编码表时不仅仅包含10位的码字信息,还需包含每个码字的不平衡度D信息。具体操作方法是:先计算每个码字中“1”的个数n,则码字不平衡度D=n-(10-n),由于码字是经过筛选后的,所以这里n只可能为3,4,5,6,7。所以码字不平衡度D只能为-4,-2,0,+2,+4。对码字不平衡度D进行3位编码,如下表3所示:
[0095]码字不平衡度D值 -4 -2 0 2 4
不平衡度D值对应编码 110 111 000 001 010
[0096] 表3码字不平衡度D值编码表
[0097] 将表中码字不平衡度D的编码信息左移10位于码字信息相加得到最终编码,如式1所示:公式中F_Code为编码查找表中最终编码信息,D_Code表示码字不平衡度D的编码信息,U_Code表示9位原字所对应的码字信息。D_Code乘以2的10次方表示左移10位。因此最终编码信息是一个13位的编码数据。512个9位原字分别映射为RD-和RD+的第一码字和第二码字,因此码表中共有1024个码字。对每个码字都按照公式1进行处理生成最终码表后存到FPGA内部的查找表RAM中。
[0098] F_Code=D_Code*2^10+U_Code   (公式1)
[0099] 基于上述编码查找表的实现方法,提供本发明基于SerDes技术的串行通信系统编解码方法及装置。
[0100] 如图2所示,本发明提供一种基于SerDes技术串行通信系统中的编解码方法,其中包括数据9B/10B编码步骤:
[0101] S1、将18位的普通数据分为高9位和低9位两个原始数据;
[0102] S2、将两个所述原始数据分别作为两个编码查找表的初始地址N(N=0~511);
[0103] S3、将所述初始地址转化为2*N+0和2*N+1作为所述编码查找表的输入地址;
[0104] S4、所述编码查找表根据所述输入地址输出包含不平衡度信息的第一码字与第二码字;
[0105] 本发明中,为保证输出码流的直流平衡,在编码查找表映射时用2个10位的码字表示一个9位原字,分别为第一码字和第二码字;其中,第一码字中“1”的个数大于或等于“0”的个数,第二码字中“0”的个数大于或等于“1”的个数。若10位码字完美平衡,即码字中“1”的个数和“0”的个数相同,则第一码字和第二码字相同;若10位码字非完美平衡,即码字中“1”的个数和“0”的个数不同,则第一码字和第二码字是极性相反的两个不同码字;
[0106] 上述第一码字与第二码字为10位的码字信息与3位的不平衡度D的编码信息相加得到的;其中,所述10位的码字信息为9位的所述原始数据到10位的映射;所述不平衡度D=n-(10-n),其中n为码字中“1”的个数;
[0107] S5、根据当前码流的运行极性差异(RD)值输出选择指示信号;
[0108] 具体地,在根据当前码流的运行极性差异值输出所述选择指示信号时:若当前码流的运行极性差异值为负,则输出的选择指示信号为高电平;若当前码流的运行极性差异值为正,则输出的选择指示信号为低电平;
[0109] S6、根据所述选择指示信号在每个所述查找表输出的第一码字与第二码字中选择一个码字组成下一输出码字;
[0110] 具体地,若输出的所述选择指示信号为高电平,则下一输出码字中在所述第一码字与第二码字中选择所述第一码字;若输出的所述选择指示信号为低电平,则下一输出码字中在所述第一码字与第二码字中选择所述第二码字。
[0111] 在本发明的一个实施例中,步骤S5中的当前码流的运行极性差异(RD)值则根据表示编码后总不平衡度信息的极性差异总和(RDS)值来计算,其规则如图3所示:
[0112] 上电初始时刻的RD值为负,RDS值为0;
[0113] 将原RD值与输出码字的不平衡度的代数和作为编码后的RDS值;
[0114] 当输出码字完美平衡时,当前码流的RD值保持不变;
[0115] 当输出码字的不平衡时:
[0116] 若编码后的RDS值小于0,则当前码流的RD值为负;
[0117] 若编码后的RDS值大于0,则当前码流的RD值为正;
[0118] 若编码后的RDS值等于0,且原码流的RD值为正,则当前码流的RD值为负;
[0119] 若编码后的RDS值等于0,且原码流的RD值为负,则当前码流的RD值为正。
[0120] 如图4所示,除了编码步骤外,还包括K码编码步骤:
[0121] S11、定义6个K码,每两个K码为一组,且每组K码中的码字互为补码;
[0122] K码可以用来完成码流的字节对齐、定界、字符填充以及时钟恢复等功能。本实施例中9B/10B编译码定义3组共6个K码,分别为K001和K101、K002和K102、以及K003和K103,每一组K码中两个码字互为补码,分别代表K码的第一码字和第二码字编码输出;
[0123] S12、接收输入的K码指示信号和极性选择信号;
[0124] S13、通过K码查找表输出由两个10比特组成的K码编码;
[0125] K码编码的实现过程也相当于一个查找表,其输出输入关系如下表4所示:
[0126]
[0127] 表4 K码编码器输出与输入对应关系
[0128] 如图5所示,在本发明的另一实施例中,还包括译码步骤,译码步骤与编码步骤的构思是相同的,也是基于查找表方法实现的,不同的是,译码过程是无记忆的。所谓的无记忆译码就是指对当前接收的10位码字译码得到一个9位数据,与以前的码流无任何关系,即无论何时接收到同样10位的码字译码后都只会有一种译码结果。具体地,译码步骤可以包括:
[0129] S21、对译码查找表中对应普通数据位置上的译码输出数据做处理;
[0130] 译码是编码的逆过程,具体也是基于查找表方法实现的。由上文编码过程所知,为保证输出码流的直流平衡,在码表映射时用2个10位的码字表示一个9位原字,分别为第一码字和第二码字。若10位码字完美平衡,则第一码字和第二码字相同;若10位码字非完美平衡,则第一码字和第二码字不相同。
[0131] 在生成译码查找表的时候,若第一码字和第二码字相同,则译码查找表中只有一个位置存放着原字信息。若第一码字和第二码字不同,则译码查找表中有两个位置存放着原字信息。比如原字000000000(十进制为0)经编码后得到两个不同码字,分别为第一码字1001010111(十进制为599)、第二码字0001000011(十进制为67)。则在译码时,查找表地址为599和67时,译码输出都将输出0,即译码表中两个位置都存放着0这个原字信息。而原字
0011100001(十进制为225)经编码后得到两个相同的码字,即第一码字和第二码字均为
1011100001(十进制为737),则在译码时,查找表地址有且只有等于737时,译码才输出225,即译码表中只有一个位置存放着225这个原字信息。
[0132] S22、对所述译码查找表中对应K码位置上的译码输出数据做处理;
[0133] 具体地,对应K码位置上的译码输出数据包括低9位的K码原字信息和高3位为K码指示信息;
[0134] 在译码查找表生成过程中,还应包含K码指示信息。本发明在编码过程中共用到3组6个K码,分别为K001和K101、K002和K102、以及K003和K103,每一组K码中两个码字互为补码,分别代表K码的第一码字和第二码字输出。在生成译码查找表时,当检测到K001和K101时,K码指示信息的第1比特置1;当检测到K002和K102时,K码指示信息第2比特置1;当检测到K003和K103时,K码指示信息的第3比特置1。然后将这3比特K码指示信息与K码原字信息相结合,其处理方式如公式2所示:
[0135] F_data=K_Flag[9]*2^9+K_Flag[10]*2^10+K_Flag[11]*2^11+K_data   (公式2)[0136] 其中F_data译码查找表中K码的译码输出数据,K_Flag为3位K码指示信息,K_data为9位K码原字信息。为经过公式2处理后就将3位K码指示信息的第1、2、3比特对应到译码数据输出的第9、10、11比特,在结合9比特K码原字信息,最终的译码输出F_data为一个12比特的数据。
[0137] 值得一提的是,译码查找表中的普通数据的译码输出其实也是12比特。其也包括3比特的K码指示信息,只是作为普通数据时,对应着K码指示信息的3比特均为0而已。
[0138] S23、在上述生成的译码查找表中根据查找表的地址分别选择一个译码输出数据;
[0139] 将20位的译码数据分为高10位与低10位两个码字分别作为两个译码查找表的地址;由于译码过程是无记忆的,两个译码查找表根据输入地址分别选择相应的译码输出数据。
[0140] S24、将两个所述译码输出数据的低9比特整合后输出。
[0141] 也就是,将两路查找表译码输出数据整合为一路18位的数据,并将其作为译码输出。其输入输出关系为:
[0142] Xout[17:0]={DoutB[8:0],DoutA[8:0]}
[0143] 其中Xout为译码输出信号,DoutA[8:0]为低10比特码字查找表输出译码数据的低9比特;DoutB[8:0]为高10比特码字查找表输出译码数据的低9比特。在S24中所述的译码输出数据流中,SerDes系统并不知道哪个是K码哪个是普通数据,因此译码过程还需输出K码指示信号,即Kout[1:0],当它为两比特0时,系统会认为当前译码输出为普通数据的译码输出,当不为0时,表明当前译码输出为K码的译码输出。K码指示信号对于SerDes系统对于恢复时钟,保持链路同步起着关键作用。具体地,将在步骤S22中获取的包含K码信息(即两个查找表输出数据的第13~15比特)数据作为输入,经过相关的逻辑运算得到K码指示信号输出。其输入输出关系为:
[0144] 当DoutB[10]=1时,Kout[1]=1;
[0145] 当DoutA[9]=1时,Kout[0]=0;DoutA[11]=1时,Kout[0]=1。
[0146] 其中Kout为K码指示信号,DoutA为低10比特码字查找表输出译码数据;DoutB为高10比特码字查找表输出译码数据。
[0147] 上面对本发明实施例中的基于SerDes技术串行通信系统中的编解码方法进行了描述,下面对本发明实施例中的基于SerDes(串行器/解串器)技术串行通信系统中的编解码装置进行描述。
[0148] 如图6所示,本发明还提供一种基于SerDes技术串行通信系统中编解码装置,包括主编码器10、与主编码器相连的线路极性计算器20、与主编码器相连的编码选择器30。
[0149] 如图7所示,其中,主编码器10包括:
[0150] 拆分单元11,用于将18位的普通数据分为高9位以及低9位的两个原始数据;
[0151] 初始地址定义单元12,用于将两个原始数据分别作为两个编码查找表的初始地址N(N=0~511);
[0152] 输入地址计算单元13,用于将初始地址转化为2*N+0和2*N+1作为编码查找表输入地址;
[0153] 输出单元14,用于编码查找表根据输入地址输出包含不平衡度信息的第一码字与第二码字;本发明中,为保证输出码流的直流平衡,在编码查找表映射时用2个10位的码字表示一个9位原字,分别为第一码字和第二码字;其中,第一码字中“1”的个数大于或等于“0”的个数,第二码字中“0”的个数大于或等于“1”的个数。若10位码字完美平衡,则第一码字和第二码字相同;若10位码字非完美平衡,则第一码字和第二码字不同且极性相反;上述编码查找表中的第一码字与第二码字为10位的码字信息与3位的不平衡度D的编码信息相加得到的;其中,10位的码字信息为9位的原始数据对应10位的编码映射;其中不平衡度D=n-(10-n),其中n为码字中“1”的个数。
[0154] 上述线路极性计算器20用来保证输出码流的直流平衡,它为编码选择器提供选择指示信号。编码过程中,根据表示当前码流不平衡特性的运行极性差异RD值来决定选择指示信号的输出。具体地,在根据当前码流的运行极性差异值输出所述选择指示信号时:若当前码流的运行极性差异值为负,则输出的选择指示信号为高电平;若当前码流的运行极性差异值为正,则输出的选择指示信号为低电平。
[0155] 编码选择器30的功能是选择编码输出,其由三个输入端一个输出端,分别为数据输入端A、数据输入端B、输入选择指示信号以及数据输出端。其输出与输入关系为:
[0156] 1)当选择指示信号为1时,编码输出=输入数据A;
[0157] 2)当选择指示信号为0时,编码输出=输入数据B。
[0158] 在本发明的另一实施例中,请参照图8,线路极性计算器20包括:
[0159] 差异总和值计算单元21,用于将运行极性差异值与输出码字的不平衡度的代数和作为编码后的极性差异总和值;
[0160] 平衡判断单元22,用于判断输出码字是否完美平衡;
[0161] 运行极性差异值计算单元23,用于当输出码字完美平衡时,当前码流的运行极性差异值保持不变;
[0162] 运行极性差异值计算单元23还用于,当输出码字的不平衡时:若编码后的极性差异总和值小于0,则当前码流的运行极性差异值为负;若编码后的极性差异总和值大于0,则当前码流的运行极性差异值为正;若编码后的极性差异总和值等于0,且原码流的运行极性差异值为正,则当前码流的运行极性差异值为负;若编码后的极性差异总和值等于0,且原码流的运行极性差异值为负,则当前码流的运行极性差异值为正。需要说明的是,在上电初始时刻的运行极性差异值为负,编码后的极性差异总和值为0。
[0163] 编码选择器30用于根据选择指示信号在每个查找表输出的第一码字与第二码字中选择一个码字组成下一输出码字。
[0164] 如图9、图10所示,本实施例中还包括K码编码器40,与线路极性计算器20以及编码选择器30相连:K码编码器40包括:
[0165] 定义单元41,用于定义6个K码,每两个K码为一组,且每组K码中的码字互为补码;K码可以用来完成码流的字节对齐、帧定界、字符填充以及时钟恢复等功能。本实施例中9B/10B编译码定义3组共6个K码,分别为K001和K101、K002和K102、以及K003和K103,每一组K码中两个码字互为补码,分别代表K码的第一码字和第二码字编码输出;
[0166] 接收单元42,用于接收输入的K码指示信号和极性选择信号;
[0167] K码编码输出单元43,用于通过K码查找表输出由两个10比特组成的K码编码;K码编码的实现过程也相当于一个查找表,其输出输入关系如表4所示。
[0168] 虽然图中没显示,但是还包括与K码编码器40相连的延迟模,延迟模块的功能是保证编码器编码输出和K码输出指示信号对齐,即编码器在K码输出指示信号有效时,此时编码器的编码输出正好是K码。为了保证这种对齐关系,K码输入指示信号必须通过延迟模块得到K码输出指示信号,且延迟模块的时延量必须等于输入数据经过编码器编码处理产生的时延量。
[0169] 如图10所示,在本实施例中还包括主译码器50以及与主译码器相连的数据整合器60;
[0170] 主译码器50用于对译码查找表中对应普通数据位置上的译码输出数据做处理;对所述译码查找表中对应K码位置上的译码输出数据做处理;在上述生成的译码查找表中根据查找表的地址分别选择一个译码输出数据;译码是编码的逆过程,具体也是基于查找表方法实现的。由上文所知,为保证输出码流的直流平衡,在码表映射时用2个10位的码字表示一个9位原字,分别为第一码字和第二码字。若10位码字完美平衡,则第一码字和第二码字相同;若10位码字非完美平衡,则第一码字和第二码字不相同。因此在生成译码查找表的时候,若第一码字和第二码字相同,则译码查找表中只有一个位置存放着原字信息。若第一码字和第二码字不同,则译码查找表中有两个位置存放着原字信息。比如原字000000000(十进制为0)经编码后得到两个不同码字,分别为第一码字1001010111(十进制为599)、第二码字0001000011(十进制为67)。则在译码时,查找表地址为599和67时,译码输出都将输出0。而原字0011100001(十进制为225)经编码后得到两个相同的码字,即RD-和第二码字均为1011100001(十进制为737),则在译码时,查找表地址有且只有等于737时,译码才输出225。
[0171] 主译码器50可以用于K码的译码;具体地,在生成译码表时对K码原字信息做特殊处理,即在9位K码的原字信息基础上加入3位K码指示信息。本发明在编码过程中共用到3组6个K码,分别为K001和K101、K002和K102、以及K003和K103,每一组K码中两个码字互为补码,分别代表K码的第一码字和第二码字编码输出。在生成译码表时,当检测到K001和K101时,K码指示信息的第1比特置1;当检测到K002和K102时,K码指示信息第2比特置1;当检测到K003和K103时,K码指示信息的第3比特置1。
[0172] 数据整合器60用于将两个译码输出数据的低9比特整合后输出;具体地,将两路查找表译码输出数据整合为一路18位的数据,并将其作为整个主译码器的译码输出。其输入输出关系为:
[0173] Xout[17:0]={DoutB[8:0],DoutA[8:0]}
[0174] 其中Xout为译码输出信号,DoutA为低10比特码字查找表输出译码数据;DoutB为高10比特码字查找表输出译码数据。
[0175] 此外,还包括K码指示信息处理器70,用于将获取的包含K码信息(即两个查找表输出数据的第9~11比特)数据作为输入,经过相关的逻辑运算得到K码指示信号输出。其输入输出关系为:
[0176] 当DoutB[10]=1时,Kout[1]=1;
[0177] 当DoutA[9]=1时,Kout[0]=0;DoutA[11]=1时,Kout[0]=1。
[0178] 其中Kout为K码指示信号,DoutA为低10比特码字查找表输出译码数据;DoutB为高10比特码字查找表输出译码数据。
[0179] 本发明所述的9B/10B编码主要是在FPGA中通过查找表方法实现的,其将普通数据分为高9位和低9位数据分别作为查找表的地址,查找表则把地址相对应的正极性(Rd+)第一码字和负极性(Rd-)第二码字同时输出到编码选择器中,编码选择器通过线路极性计算器提供的指示信号选择相应的编码输出。K码编码器则根据K码指示和线路极性计算器提供的指示共同选择相应的K码输出,最终的编码输出则通过编码选择器在K码输出和普通数据编码输出中做出选择。
[0180] 以上参照附图说明了本发明的优选实施例,本领域技术人员不脱离本发明的范围和实质,可以有多种变型方案实现本发明。举例而言,作为一个实施例的部分示出或描述的特征可用于另一实施例以得到又一实施例。以上仅为本发明较佳可行的实施例而已,并非因此局限本发明的权利范围,凡运用本发明说明书及附图内容所作的等效变化,均包含于本发明的权利范围之内。
QQ群二维码
意见反馈