编码器和解码器的制作方法

文档序号:32106668发布日期:2022-11-09 04:38阅读:63来源:国知局
编码器和解码器的制作方法
编码器和解码器
1.相关申请的交叉引用
2.本技术要求享有2021年5月6日在美国专利和商标局提交的第63/185,190号美国临时专利申请以及2021年7月29日在美国专利和商标局提交的第17/389,146号美国非临时专利申请的优先权和权益,在此通过引用的方式将其全部公开内容并入此文。
技术领域
3.本公开的实施例的方面涉及用于在通信链路中实施低开销转换编码的系统和方法。


背景技术:

4.在电子数据通信中,诸如在串行数据链路中,发送器和接收器之间的通信可以使用时钟恢复或时钟数据恢复(cdr)处理而同步化。例如,接收器可以使用锁相环(pll)从近似频率参考生成时钟,并且随后在数据流中使用cdr将所生成的信号与(在高信号电平和低信号电平之间的)转换进行相位对准。然而,如果数据游程长度(例如,连续1或0的序列)由于存在对于接收器不足以检测的转换量而超过特定长度,时钟信号的恢复会失败。


技术实现要素:

5.根据本公开的一个实施例,一种编码器包括处理电路,该处理电路被配置为:接收原始数据;将原始数据划分成多个原始q位字;从多个原始q位字组装包括n个原始q位字的数据包;标识从n个原始q位字的值中缺失的第一编码器值d1和第二编码器值d2;基于根据第一编码器值d1和第二编码器值d2从q位原始值至q位已编码值的一对一映射而将n个原始q位字编码以生成n个已编码q位有效载荷字,n个已编码q位有效载荷字不含为全零的字并且不含为全一的字;生成表示第一编码器值d1和第二编码器值d2的密钥;以及传送密钥和n个已编码q位有效载荷字。
6.根据本公开的一个实施例,一种解码器包括处理电路,该处理电路被配置为:接收密钥和n个已编码q位有效载荷字;从密钥解码第一编码器值d1和第二编码器值d2;以及基于根据第一编码器值d1和第二编码器值d2从q位已编码值至q位原始值的一对一映射而将n个已编码q位有效载荷字解码,以生成n个已解码原始q位字。
附图说明
7.附图与说明书一起说明了本发明的示例实施例,并且与描述一起用于解释本发明的原理。
8.图1是发送器和接收器之间的串行链路的示意方框图,发送器包括根据本公开的实施例的编码器并且接收器包括根据本公开的实施例的解码器。
9.图2是使用单极性行码在数据链路上传送的二进制数据的描绘,其中将逻辑1值编码作为逻辑电平高(h)信号并且将逻辑0值编码作为逻辑电平低(l)信号。
10.图3是根据本公开的一个实施例的数据包的示意描绘。
11.图4是根据本公开的实施例的当在数据包中对数据编码时在六位字(q=6)的示例情形中的最大游程长度的示意描绘。
12.图5是描绘了根据本公开的一个实施例的用于将原始数据编码以生成数据包的方法的流程图。
13.图6示出了根据本公开的一个实施例的基于编码器值以二进制表示法和十进制表示法将原始字的4位值映射至对应的已编码字。
14.图7是描绘了根据本公开的一个实施例的用于将已编码数据包解码的方法的流程图。
15.图8示出了根据本公开的一个实施例的基于编码器值将已编码字的4位值映射至对应的已解码字或原始字。
具体实施方式
16.在以下详细描述中,借由说明的方式仅示出并描述了本发明的某些示例实施例。如本领域技术人员应该认识到的,发明可以以许多不同的形式具体化并且不应解释为限制于在此所阐述的实施例。遍及说明书,同样的附图标记表示同样的元件。
17.本发明的实施例的方面涉及用于在通信系统中减小或最小化数字数据的游程长度的系统和方法。更详细地,本公开的实施例的一些方面涉及用于将数字数据编码以确保有限游程长度或者确保数字数据的包的游程长度小于或等于采用游程长度有限码形式的特定限值的系统和方法。
18.根据本公开的一个实施例,一种编码器包括处理电路,该处理电路被配置为:接收原始数据;将原始数据划分成多个原始q位字;从多个原始q位字组装包括n个原始q位字的数据包;标识从n个原始q位字的值中缺失的第一编码器值d1和第二编码器值d2;基于根据第一编码器值d1和第二编码器值d2从q位原始值至q位已编码值的一对一映射而将n个原始q位字编码以生成n个已编码q位有效载荷字,n个已编码q位有效载荷字不含为全零的字并且不含为全一的字;生成表示第一编码器值d1和第二编码器值d2的密钥;以及传送密钥和n个已编码q位有效载荷字。
19.处理电路可以被配置为基于q位原始值x与第一编码器值d1和第二编码器值d2的比较而将q位原始值x编码作为q位已编码值x’。
20.在一些实施例中,第一编码器值d1和第二编码器值d2可以具有长度q-1的匹配前缀,算得值e可以对应于第一编码器值d1的q-1个最高有效位,并且密钥包括表示第一编码器值d1和第二编码器值d2的算得值e。
21.处理电路可以被配置为通过对q位原始值x和算得值e计算异或运算而将q位原始值x编码作为q位已编码值x’。
22.在一些实施例中,q位原始值的2q个值的空间可以被划分为多个分组,每个分组包括连续的多个不同的q位原始值,并且处理电路可以被配置为通过以下操作而标识第一编码器值d1和第二编码器值d2:标识多个分组中的一个分组,该一个分组具有从n个原始q位字的值中缺失的两个q位原始值;以及将所标识的分组中的两个q位原始值中的一个q位原始值标识作为第一编码器值d1,并且将所标识的分组中的两个q位原始值的另一个q位原始
值标识作为第二编码器值d2。
23.q位原始值的2q个值的空间可以被划分为g个分组,并且n可以小于或等于2
q-g-1。
24.在一些实施例中,每个分组可以包括最多连续的三个不同的q位原始值,并且处理电路可以被配置为将所标识的分组中的连续的三个不同的q位原始值中的中间一个q位原始值选择作为表示第一编码器值d1和第二编码器值d2的算得值e。
25.处理电路可以被配置为基于q位原始值x与算得值e的比较而将q位原始值x编码作为q位已编码值x’。
26.在一些实施例中,每个分组可以包括连续的2r个不同的q位原始值,第一编码器值d1和第二编码器值d2可以共用q-r个最高有效位,并且处理电路可以被配置为通过以下操作而生成表示第一编码器值d1和第二编码器值d2的密钥:使用2r-1位将第一编码器值d1的r个最低有效位和第二编码器值d2的r个最低有效位编码以生成最低有效位码,最低有效位码具有至少一个转换;以及将q-r个最高有效位与最低有效位码串接。
27.处理电路可以被配置为通过以下操作而将q-r个最高有效位与最低有效位码串接:将q-r个最高有效位划分为第一部分和第二部分;以及在q-r个最高有效位的第一部分和第二部分之间串接最低有效位码。
28.处理电路可以被配置为传送数据包,数据包包括:n个已编码q位有效载荷字;以及包括密钥的头部。
29.根据本公开的一个实施例,一种解码器包括处理电路,该处理电路被配置为:接收密钥和n个已编码q位有效载荷字;从密钥将第一编码器值d1和第二编码器值d2解码;以及基于根据第一编码器值d1和第二编码器值d2从q位已编码值至q位原始值的一对一映射而将n个已编码q位有效载荷字解码以生成n个已解码原始q位字。
30.在一些实施例中,处理电路可以被配置为基于q位已编码值x’与第一编码器值d1和第二编码器值d2的比较,将q位已编码值x’解码为q位原始值x。
31.密钥可以包括q-1位值e,处理电路可以被配置为通过将第一编码器值d1的q-1个最高有效位设置成q-1位值e并且将第一编码器值d1的最低有效位设置成0而将第一编码器值d1解码,并且处理电路可以被配置为通过将第二编码器值d2的q-1个最高有效位设置成q-1位值e并且将第二编码器值d2的最低有效位设置成1而将第二编码器值d2解码。
32.密钥可以包括q-1位值e,并且处理电路可以被配置为基于对q位已编码值x’和q-1位值e执行的异或运算的结果而将q位已编码值x’解码为q位原始值x。
33.在一些实施例中,q位原始值的2q个值的空间可以被划分为多个分组,每个分组包括连续的多个不同的q位原始值,每个分组可以包括最多连续的三个不同的q位原始值,密钥可以包括q-1位值e,并且处理电路可以被配置为基于对q-1位值e的模运算的结果而将第一编码器值d1和第二编码器值d2解码。
34.处理电路可以被配置为基于q位已编码值x’和q-1位值e的比较而将q位已编码值x’解码为q位原始值x。
35.在一些实施例中,q位原始值的2q个值的空间可以被划分为多个分组,每个分组包括连续的2r个不同的q位原始值,第一编码器值d1和第二编码器值d2可以共用q-r个最高有效位,并且处理电路可以被配置为通过以下操作而从密钥将第一编码器值d1和第二编码器值d2解码:从密钥读取2r-1位最低有效位码;将最低有效位码解码为第一最低有效位和第
二最低有效位;从密钥读取q-r个最高有效位;将q-r个最高有效位与第一最低有效位串接以将第一编码器值d1解码;以及将q-r个最高有效位与第二最低有效位串接以将第二编码器值d2解码。
36.解码器可以被配置为接收数据包,数据包包括:n个已编码q位有效载荷字;以及包括密钥的头部。
37.图1是发送器1和接收器2之间的串行链路的示意方框图,发送器1包括根据本公开的实施例的编码器100并且接收器2包括根据本公开的实施例的解码器200。在图1中所示的设置中,原始数据10将从发送器1传送至接收器2,其中原始数据10由解码器200重构作为已解码数据18。已解码数据18可以随后由数据消费者20消费。更详细地,编码器100将原始数据10编码成已编码数据30,并且已编码数据30经由数据链路50传送至解码器200。解码器200随后将已编码数据30解码以重构已解码数据18。
38.根据本公开的各个实施例,编码器100和解码器200可以分别称作编码器电路或编码器处理电路以及解码器电路或解码器处理电路,并且可以使用各种处理电路实施,诸如一个或多个计算系统的中央处理单元(cpu)、应用处理器(ap)或应用处理单元(apu)、现场可编程门阵列(fpga)、诸如显示驱动器集成电路(ddic)的专用集成电路(asic)和/或图形处理单元(gpu)。例如,编码器100和解码器200可以是相同计算机系统的部件(例如,集成在单个外壳内,诸如在智能电话、平板计算机或膝上型计算机的情形中),可以是计算机系统的分立部件(例如,与外部监视器通信的台式计算机),或者可以是分立的计算机系统(例如,经由数据链路50通信的两个独立计算机系统),或者其变型(例如,实施在诸如被配置为经由数据链路50通信的微控制器的专用处理电路内,其中微控制器是计算机系统内的外围部件)。如本领域技术人员将理解的,编码器电路与解码器电路相比可以使用不同类型的处理电路实施。此外,如本领域技术人员将理解的,各种处理电路可以是相同集成电路的部件(例如,作为相同的片上系统(soc)的部件),或者可以是可以通过印刷电路板上的管脚和引线而连接的不同集成电路的部件。
39.作为具体的示例,在用于控制显示装置的数据链路50的情形中,发送器1可以包括生成图像数据作为原始数据10的图形控制器,诸如计算机系统(例如,膝上型计算机、智能电话或平板计算机等)的图形处理单元(gpu)或应用处理单元(apu)。该图像数据或原始数据10随后经由数据链路50传送至显示面板(例如,液晶显示面板或有机发光二极管显示面板),显示面板包括用于将已编码数据30解码为已解码数据18的解码器200。已解码数据18随后可以提供至数据消费者20,诸如被配置为将接收到的已解码数据18转换为控制显示面板以显示如在已解码数据18中所表示的图像(例如,图形用户界面、视频和其他显示元件)的信号的处理电路。
40.在数字通信中,发送器1和接收器2可以使用时钟恢复或时钟数据恢复(cdr)处理而被同步化。使用cdr处理的接收器通常通过检测数据链路的物理层上的符号(例如,链路上信号的电压电平)之间的转换的时间并且基于所检测的转换而将接收器的时钟进行相位对准而操作。
41.图2是使用单极性行码在数据链路50上传送的二进制数据的描绘,其中将逻辑1值编码作为逻辑电平高(h)信号并且将逻辑0值编码作为逻辑电平低(l)信号。逻辑电平高信号和逻辑电平低信号可以分别经由数据链路50物理地编码作为高电压(例如,5伏或3.3伏)
和低电压(例如,0伏)。在图2中所示的示例中,经由数据链路50传送数据位序列101001110010。逻辑电平低(l)电压和逻辑电平高(h)电压之间的转换由箭头51示出。在其期间信号并未变化的重复位的段称作游程。图2具体地突出了标记为52、53、54、55、56、57和58的七个不同的游程以及它们对应的游程长度。基于数据位序列101001110010,游程52、53、54、55、56、57和58具有1、1、1、2、3、2和1的对应的游程长度。
42.如果接收到的信号包含过长的游程长度(例如,具有相同电压电平的数据符号的长序列),则由于接收到的信号中存在数目不足的转换,cdr处理会失败,这会在时钟恢复中引起问题。例如,在单极性不归零(nrz)编码中,可以使用逻辑电平高值(例如,高电压)以编码1并且可以使用逻辑电平低值(例如,低电压)以编码0。对任何特定输入数据的值直接编码可以导致任意长的游程长度。例如,为全零(0)的长字序列或为全一(1)的长字序列将分别导致在逻辑电平低值或逻辑电平高值处连续的信号,在位之间没有转换以用于cdr。尽管以上在单极性nrz编码的上下文中描述了由长游程长度引起的一些问题,但是类似的问题可以出现在可以具有多于两个信号幅度电平的其他类型调制中(例如,具有多于两个电平的脉冲幅度调制或pam,诸如使用四个幅度电平的pam4)。
43.因而,本公开的实施例的方面涉及用于将输入数据编码以生成已编码数据位的系统和方法,其中确保已编码数据位具有有限的游程长度(例如,不比特定有限位数长的游程长度)。限制以该方式编码的数据的游程长度提高了解码器执行cdr的能力,由此提高了在发送器和接收器之间的通信链路的质量。本公开的实施例的方面还涉及用于将已编码数据位解码以恢复原始输入数据的系统和方法。
44.更正式地,本公开的实施例的方面涉及通过使用行编码算法确保每k位(例如,限制游程长度)发生转换以将原生数据或原始数据编码以便转换规则地发生。
45.本公开的实施例的一些方面涉及游程长度有限码,其中将输入数据编码为一个或多个数据包,每个数据包包括多个字。在以下描述中,每个数据包包括n个字(或最多n个字),并且其中每个字具有q位(换言之,每个数据包可以包括最多n个q位字)。图3是数据包的示意描绘。每个数据包31可以因此视为包括qn位的有效载荷字32,其可以从0编号或索引至qn-1,如以以下形式:b[0:qn-1]。每个q位字x可以采取从0至2
q-1的任何值,并且也可以表示为q位的阵列,例如,b[0:q-1]。有效载荷字32可以因此视为一起串接成qn位的阵列的n个字:
[0046]
x1,x2,...,xn[0047]
x1(b[0:q-1]),x2(b[q:2q-1]),...,xn(b[q(n-1):qn-1])
[0048]
为了说明起见,在以下示例中,q设置为6,以便每个字是6位长,具有在0至63范围内的值。然而,本公开的实施例不限于此,并且根据编码和解码系统的设计参数和需求且基于应用,q可以设置为诸如8、10或16等的其他值。
[0049]
如图3中所示,数据包31还包括头部34(具有h位长度),头部34表示作为已编码数据包31的一部分被传送并且由解码器200使用以将已编码数据包31解码的额外开销信息。头部34可以包括密钥,密钥包含了用于将已编码数据包31解码的信息。
[0050]
编码方案的效率的一个度量是基于有效载荷位数(例如,每个字q位的n个字,总计qn个有效载荷位)除以数据包31中的总位数(例如,有效载荷位数qn与头部位数h之和)。例如:
[0051][0052]
为了简化起见,讨论在此假设头部34的所有h位由密钥使用(例如,头部34也不包括诸如用于错误检测或错误校正的奇偶校验位的额外信息)。然而,本公开的实施例不限于此,并且也可以包括其中头部34包括额外信息的情形。
[0053]
此外,尽管在此描述了本公开的一些实施例,其中在包含与特定密钥相关联的数据的n个字(qn个有效载荷位)的数据包31的头部34中传送密钥,本公开的实施例不限于此,并且在一些实施例中,在与包含有效载荷位的数据包31分离的包中传送密钥。
[0054]
本公开的实施例的一些方面涉及通过确保已编码数据30中的字都不为全零(例如,q个连续0)或为全一(例如,q个连续1)(诸如在其中q=6的情形中的6’b000000和6’b111111)而确保已编码数据的每个字中存在至少一个转换。换言之,本公开的实施例的一些方面涉及从已编码数据30去除全零字和全一字或者确保已编码数据30不包括(例如,不含)为全零的字并且也不包括为全一的任何字。通过从已编码数据去除全零字和全一字,游程长度限于2(q-1)位的最坏情形。
[0055]
图4是根据本公开的实施例的当在数据包中对数据编码时在六位字(q=6)的示例情形中的最大游程长度的示意描绘。如图4中所示,当6位字6’b100000(标识为字xi)接下来是6位字6’b000001(标识为字x
i+1
)时,则存在十个0的游程(2
×
(6-1))。同样,当6位字6’b011111接下来是6位字6’b111110时,则存在十个1的游程。因为已经去除了全零字和全一字,连续字的任何其他配对将导致比2(q-1)位的有限最大游程长度短的游程长度。
[0056]
因而,以下将关于用于将原始数据10编码以生成已编码数据30的系统和方法更详细描述本公开的实施例的方面,其中已编码数据30不含为全零的字或为全一的字(例如,没有字具有q个0并且没有字具有q个1)。此外,本公开的实施例的方面涉及用于将已编码数据30解码以生成与原始数据10匹配的已解码数据18的系统和方法,原始数据10可以包括为全一的字和/或为全零的字。
[0057]
图5是描绘根据本公开的一个实施例的用于将原始数据编码以生成数据包的方法500的流程图。在本公开的一些实施例中,图5的操作实施在被配置为执行在此所述操作的编码器100中,诸如实施在存储于存储器中并且由处理器或处理电路执行以实施编码器100的指令中,其中处理器和存储器可以是微控制器、应用处理器、中央处理单元、数字信号处理器、现场可编程门阵列或专用集成电路等的部件。
[0058]
参照图5,从数据源(例如,由图形处理单元所生成的图像数据)提供原始数据10至编码器100。在操作510中,编码器100将原始数据10划分成多个q位字。每个字x中的位数q可以根据各种设计考虑而设置,如以下更详细所讨论的。为了方便起见,将使用变量n以表示字的数目,以便操作510将原始数据10划分成n个字,对于总共qn位,每个字是q位长。在其中原始数据10包括比qn少的位的情形中,可以将额外的填充位添加至原始数据10以达到qn的总位数,或者可以在特定数据包中编码比n少的字。如果存在比qn多的位的原始数据10,则原始数据10的第一个qn位可以编码在第一数据包中,并且将原始数据10的后续位编码在后续的数据包中(例如,原始数据10的下一个qn位可以编码在第二数据包中,等等)。
[0059]
在操作530中,编码器100标识两个q位字,其具有从在操作510中从原始数据10划分的n个q位字的值中缺失的值。q位字可以采用在从0至2
q-1的范围内的2q个不同值中的任
意一个。例如,6位字可以采用在从0至63的范围内的64个不同值中的任意一个。限制数据包中的字数n确保存在不出现在n个q位字之中的至少两个q位字。例如,将n设置为小于或等于2
q-2提供了该确保(例如,在6位字的情形中,设置n=2
6-2=62个字确保了出自6位字的64个可能值的至少两个值将不出现在62个字之中)。两个所选择的q位字将在此称作编码器值d1和d2,其中d1《d2。以下将更详细描述与编码器值d1和d2的选择相关的本公开的实施例的方面。
[0060]
在操作550中,编码器100基于第一编码器值d1和第二编码器值d2将原始数据10编码以生成具有n个已编码有效载荷字的已编码有效载荷数据,其中已编码有效载荷数据不包括为全零或为全一的任何字(与原始n个q位字是否包含为全零或为全一的任何字无关)。继续6位字的以上示例,n个已编码有效载荷字中没有b000000,并且n个已编码有效载荷字中没有b111111(n个原始字可以包括或可以不包括b000000和/或b111111的情形)。
[0061]
在一些实施例中,编码器100基于原始值与已编码值之间的一对一映射函数而将原始数据编码。
[0062]
图6描绘了根据本公开的一个实施例的基于两个编码器值d1和d2对原始数据编码以生成已编码数据。在一些实施例中,编码器100通过根据用于将原始字x编码为已编码字x’的以下函数enc(x)将字的值映射至已编码字以将n个原始字编码:
[0063][0064]
换言之,原始字x在原始字x的值小于第一编码器值d1时被加一,在其值在第一编码器值d1和第二编码器值d2之间时保持相同(同一性),并且在其值大于第二编码器值d2时被减一。(其中x=d1或x=d2的情形不必考虑,因为通过构造,编码器值d1和d2在待编码的n个原始字中不出现。)该映射确保在已编码数据中不出现全零值,因为小于第一编码器值d1的所有值被加一,由此将n个原始字中出现的任何全零值表示为值1(例如,在q=6的情形中的b000001)。同样,该映射也确保在已编码数据中不出现全一值,因为n个原始字中出现的任何全一值表示为次高可能值(例如,在q=6的情形中的b111110)。
[0065]
在图6中所示的示例中,q=4(例如,每个字4位长),并且值4(4b0100)、5(4b0101)、10(4b1010)和13(4b1101)从原始输入数据中缺失,原始输入数据可以是位序列:
[0066]
0001 0011 0110 1001 1000 0111 1111 1111 1111 0000 1110 1100 0010 1011
[0067]
图6示出了十进制表示601和二进制表示602下的字的所有可能4位值的表格,并且采用白色背景指示了原始数据中出现的值,而原始数据中缺失的值以阴影背景显示。为了说明起见,在四个候选值之中,选择值4b0101作为第一编码器值d1并且选择值4b1010作为第二编码器值d2。编码函数或编码映射(enc)610将二进制表示602下的值映射至对应的已编码值630,如由箭头所示。结果,在数据的已编码版本中并未使用全零值(4b0000)和全一值(4b1111)。特别地,以上示例原始数据的已编码版本将是:
[0068]
0010 0100 0110 1001 1000 0111 1110 1110 1110 0001 1101 1011 0011 1010
[0069]
如上可见,该原始数据的已编码版本不包括任何全零值也不包括任何全一值。此外,最大游程长度已经从原始数据中的15减小至已编码数据中的6(例如,2(q-1))的最坏情形最大游程长度。
[0070]
在一些实施例中,编码器100通过根据用于将原始字x编码为已编码字x’的以下函数enc(x)将字的值映射至已编码字以将n个原始字编码:
[0071][0072]
换言之,如果原始字x是全零值(例如,q个连续0),则原始字x映射为第一编码器值d1,并且如果原始字x是全一值(例如,q个连续1),则原始字x映射为第二编码器值d2。(替代地,在一些实施例中,如果原始字x是全一值,则原始字x映射为第一编码器值d1,并且如果原始字x是全零值,则原始字x映射为第二编码器值d2)否则,已编码字x’具有与其在原始字x中所具有的相同值。因此,当选择值4b0101作为第一编码器值d1并且选择值4b1010作为第二编码器值d2时,通过采用4b0101替代4b0000的每个实例并且采用4b1010替代4b1111的每个实例,可以将以上原始位序列:
[0073]
001 0011 0110 1001 1000 0111 1111 1111 1111 0000 1110 1100 0010 1011
[0074]
编码为:
[0075]
0001 0011 0110 1001 1000 0111 1010 1010 1010 0101 1110 1100 0010 1011。
[0076]
在操作570中,编码器100生成表示编码器值(例如,第一编码器值d1和第二编码器值d2)的密钥,密钥作为头部34被传送,并且在操作590中,编码器100生成包括头部34和n个已编码有效载荷字32的数据包31。得到的数据包31可以随后经由数据链路50作为已编码数据30而传送至解码器200。
[0077]
图7是描绘了根据本公开的一个实施例的用于将已编码数据包解码的方法700的流程图。数据包31可以包括头部34和已编码有效载荷字32。如图7中所示,在操作710中,解码器200从接收到的数据包(例如,由编码器100所编码的数据包)读取头部以从头部解码编码器值(例如,第一编码器值d1和第二编码器值d2)。使用编码器值d1和d2以确定从已编码有效载荷字的已编码值至原始数据的已解码值的映射。
[0078]
在一些实施例中,解码器200通过根据用于将已编码字x’解码为原始字x的以下函数dec(x’)将已编码字的值映射至已解码字以将n个已编码字解码:
[0079][0080]
换言之,当已编码字x’的值小于或等于第一编码器值d1时已编码字x’被减一,当其值在第一编码器值d1和第二编码器值d2之间时保持相同(同一性),并且当其值大于或等于第二编码器值d2时被加一。该映射恢复了原始数据中出现的任何全零值和任何全一值。
[0081]
图8示出了根据本公开的一个实施例的基于编码器值将已编码字的4位值映射至对应的已解码字或原始字。如图8中所示,解码函数或解码映射(dec)计算从已编码值830至以二进制表示法818示出并且也以十进制表示法819示出的重构或解码的原始值的映射。
[0082]
类似地,在编码器函数(enc)执行其中采用第一编码器值d1替代全零字(例如,4b0000)的实例并采用第二编码器值d2替代全一字(例如,4b1111)的实例、并且所有其他值保持相同的映射的情形中,解码函数或解码映射(dec)可以表示如下:
[0083][0084]
因而,本公开的实施例的一些方面涉及用于基于标识原始数据内未使用值、选择未使用值作为编码器值、并且基于编码器值将原始数据编码而对原始数据编码以限制已编码数据中游程长度的系统和方法。本公开的实施例的方面还涉及基于编码器值将已编码数据解码。以下将更详细描述关于编码器值的选择、数据包中字x的数目n的选择、以及每个字的位数q的额外细节。
[0085]
在先前的讨论中,在实施例的上下文中描述了本公开的方面,其中将数据包中的字数n约束为小于或等于2
q-2以确保有至少两个值不出现在n个字之中,以便两个缺失或未使用值可以用作编码系统的编码器值d1和d2。因为第一编码器值d1和第二编码器值d2可以是2q个可能值的空间内的任何两个值,第一编码器值d1和第二编码器值d2将作为头部的一部分(如在操作570中生成)以它们的整体传送而不压缩,由此得到2q位的开销(对于第一编码器值d1和第二编码器值d2,每一个为q位)。如上所述,编码方案的效率可以给出为:
[0086][0087]
在该情形中,h=2q,因此:
[0088][0089]
更具体地,在q=6并且n=2
q-2的情形中,这是:
[0090][0091]
本公开的实施例的一些方面涉及能够使效率进一步提高的在数据包中的字数n和字中的位数q的选择,诸如通过在n字数据包31中减小用于表示将每个字的已编码值解码的编码器值或多个编码器值的头部位(或开销位)的数目。
[0092]
更详细地,本公开的实施例的一些方面涉及通过压缩到少于2q位而减少用于传送编码器值(例如,第一编码器值d1和第二编码器值d2)的开销位数。例如,如果选择第一编码器值d1和第二编码器值d2以便它们具有公共的前缀(或最高有效位),则可以使用较少位在头部中传送这两个值。更通常地,一些方面涉及基于公共前缀(或公共最高有效位)将q位字的2q个可能值分组并且在数据包中选择字数n以便两个未使用值(例如,从待编码的原始数据中缺失的值)在相同分组中。这使能将落入相同分组中的两个未使用值选择作为编码器值d1和d2,并且基于与分组相关联的标识符(或分组标识符)而对这两个编码器值d1和d2编码,其中编码器值d1和d2的该编码使用比2q个少的开销位。当n≤2
q-g-1时,n个字的数据包将具有落入相同分组中的两个未使用值,其中q位字的2q值的空间被划分为g个分组。
[0093]
以下更详细展示的一些示例实施例涉及如下的编码方案,其中:n=30,q=6,具有5位开销(97.3%的效率);n=40,q=6,具有6位开销(97.6%的效率);n=47,q=6,具有7位开销(97.6%的效率);以及n=55,q=6,具有8位开销(97.6%的效率),尽管本公开的实施例不限于此。例如,本公开的实施例可以采用除了6位之外的长度的字而实施,诸如q=8。
[0094]
在本公开的一个实施例中,q位原始字x的可能值的空间被划分为两个连续值(值配对)的分组。例如,分组0可以包括值0和1,分组1可以包括值2和3,并且分组2可以包括值4和5(通常,分组k包括值2k和2k+1)。因为每个分组包含具有共用前缀的连续值,例如,可以共用q-1个最高有效位,每个分组的两个值不同之处仅在于它们的最低有效位。因此,当第一编码器值d1和第二编码器值d2落入相同分组内时,则第一编码器值d1和第二编码器值d2两者可以使用q-1位编码。这在其中n≤2
q-g-1的情形中确保为真。因此,在本公开的这些实施例中,在操作530中,编码器100标识落入相同分组内的两个编码器值d1和d2。
[0095]
以下表格1提供了其中q=6的情形中的一个示例:
[0096]
表格1
[0097][0098]
在以上表格1中,5位开销和表示分组的密钥中的全部包括至少一个转换,除了分组0(其可以表示为00-000或者11-111(为了可读性而包括字符
“‑”
))之外。为了在传送表示分组0的密钥时提供一些转换,根据本公开的一些实施例的编码器基于紧接在密钥之前所传送的位的值而确定是否使用00-000或11-111表示分组0,以便于产生转换。例如,如果紧接在密钥之前传送的位是1,则编码器使用00-000作为指示分组0的密钥,而如果在密钥之前传送的位是0,则编码器使用11-111以指示分组0。然而,因为使用00-000和11-111两者以表示分组0,所以没有对应的剩余密钥用以表示分组31。然而,无需使用d1=62和d2=63。特别地,当n《=30时,总是存在可以替代地选择的另一配对编码器值d1和d2(可以通过矛盾法证明)。因此,无需密钥表示分组31,这在表格1中表示为“无效”。
[0099]
在其中q=6并且n=30的情形中,可以使用5位标识每个分组,并且因此,在第一编码器值d1和第二编码器值d2落入相同分组内的情况下,效率可以如下计算:
[0100][0101]
在本公开的这些实施例中,编码器100可以在操作550中使用上述技术(例如,基于公式(2)或公式(3))或者其等同方式而实施编码函数或者从原始值至已编码值的映射。
[0102]
此外,在本公开的一些实施例中,其中第一编码器值d1和第二编码器值d2区别仅在于它们的最低有效位(例如,d1=6b010010并且d2=6b010011),编码器100在操作550中如下对原始数据编码:基于第一编码器值d1计算值e,其中e是d1除以2(或等同地,右移1):
[0103][0104]
对于其中q=6的情形:
[0105][0106]
算得值e随后用于基于e将原始字x编码为对应的已编码字x’:
[0107]
x

=enc(x)={xor(xor(x[q-1:1],e),{(q-1){x[0]}}),x[0]}
ꢀꢀ
(6)
[0108]
其中{(q-1){x[0]}}表示在x[0]处重复q-1次的位值。对于其中q=6的情形:
[0109]
x

=enc(x)={xor(xor(x[5:1],e),{5{x[0]}}),x[0]}
[0110]
其中{5{x[0]}}表示在x[0]处重复5次的位值。
[0111]
在操作570中在头部34中生成(q-1)位值e,其中(q-1)位值e表示包含所选择编码器值d1和d2两者的分组。编码器100随后在操作590中生成包括头部34(包含(q-1)位值e)和已编码有效载荷字32的数据包31。得到的数据包31可以随后传送至接收器2,接收器2使用被配置为将数据包31中的已编码有效载荷字32解码的解码器200。
[0112]
特别地,在这些实施例中,在操作710中,解码器200基于数据包31的头部34中的(q-1)位值e而确定分组。因为分组仅包含两个值,这些值由解码器200采用作为编码器值d1和d2,并且由此用于确定由解码器200(例如,根据如上所述的公式(4)或(5))使用以在操作750中将已编码有效载荷字解码的映射。
[0113]
在如以上的公式(6)中所示使用xor编码的实施例中,基于在头部34中所传送的分组标识符e而在操作750中在解码器200处执行类似的xor操作:
[0114]
x=dec(x

)={xor(xor(x

[q-1∶1],e),{(q-1){x

[0]}}),x

[0]}
ꢀꢀ
(7)
[0115]
在其中q=6的具体情形中:
[0116]
x={xor(xor(x

[5:1],e),{5{x

[0]}}),x

[0]}
[0117]
根据本公开的另一实施例,将字的值设置成这些连续值的分组。例如:分组0可以标识值0、1和2;分组1可以标识值3、4和5等等。因此,编码器100根据以下而计算用于标识分组以及分组内哪两个值对应于编码器值d1和d2的q位值e(例如,当在操作570中生成头部34时):
[0118][0119]
直观地,这可以被认为是e表示分组的中间值。特别地,通过构造,d1≤e≤d2。如果d2-d1=2(在以下的表格2中每个分组的中间行的情形中),则e是中间值(e=d1+1=d2-1)。在这之上的行的情形中,d1=e并且d2=e+1(这是当第一编码器值d1为3的倍数时)。在以下的行中,我们得到d1=e-1并且d2=e。
[0120]
在这些实施例中,编码器100可以被配置为使用例如以上的公式(2)或公式(3)在操作550中执行从原始字x至已编码字x’的映射或编码。在这些实施例中,公式(2)的编码方案可以基于值e而如下简化:
[0121][0122]
以下,表格2对于其中q=6的情形提供将值映射至分组和它们的对应开销的示例:
[0123]
表格2
[0124][0125][0126]
在使用该编码设置的本公开的一些实施例中,解码器200被配置为在操作710中如下从包含q位值e的头部34将编码器值解码:
[0127][0128]
解码器200随后可以关于公式(4)和(5)如上所述将已编码值解码为原始值。此外,根据公式(4)的解码可以在该情形中简化为:
[0129][0130]
在6位字(q=6)的情形中,该设置允许每个数据包使用最多2
6-22-1=41个字。因此,在其中q=6并且n=41的情形中,可以使用6位标识每个分组,并且因此,在第一编码器值d1和第二编码器值d2落入三个值的相同分组内的情况下,效率可以计算为:
[0131][0132]
根据本公开的一些实施例,q位字的可能值的空间被划分为2r个值的分组,以便每个分组中的值共用公共前缀直至r个最低有效位(例如,值可以共用q-r个最高有效位以便q-r个最高有效位在每个值中相同)。例如,当r设置为2时,则q位字的可能值的空间被划分为四个值的分组,以便每个分组中的值共用公共前缀直至两个最低有效位(例如,第一q-2个位相同)。在一些实施例中,使用2r-1个额外位对来自分组的两个所选择值编码。
[0133]
以下的表格3提供了在其中q=6并且r=2的情形中的一个示例:
[0134]
表格3
[0135]
[0136][0137]
因而,可以使用对于每个分组唯一的q-2位(例如,q-2个最高有效位(msb))标识分组。分组内对应于第一编码器值d1和第二编码器值d2的两个值不同在于剩下的2位(例如,2个最低有效位(lsb)),并且在一些实施例中使用三个额外位标识该值配对,诸如通过使用以下表格4:
[0138]
表格4
[0139][0140]
在以上所示的特定编码方案中,设计用于对分组内编码器值d1和d2的最低有效位编码的码(例如,3位码)以便每个码包括至少一个转换(例如,这些码并非三个连续0的字串或三个连续1的字串)。这是可能的,因为第一编码器值d1和第二编码器值d2的可能配对的数目小于用于对该配对编码的位数(例如,使用3位以编码6个不同可能性,其中3位能够编码23个可能值)。另一方面,用于标识分组的q-2个位可以包含例如q-2个连续0或q-2个连续1。在该情形中,仅仅将用于标识分组的q-2个位与用于标识分组内的编码器值d1和d2的3位串接可以引起q个连续0或q个连续1的游程。例如,在其中q=6的情形中,如果分组标识符是0000并且lsb码是001(根据表格4,将第一编码器值d1和第二编码器值d2标识为具有lsb 00和01的值),则将0000与001串接导致头部0000001,其包括6个连续0的游程。当分组标识符是1111并且lsb码是110时,类似的问题可以出现,导致6个连续1的游程。因此,在一些实施例中,分组标识符被分开为两个部分并且在两个部分之间放置lsb码。继续其中q=6的示
例,对于第一编码器值d1和第二编码器值d2共用的较高阶位可以标识为d1[5:2](例如,在第一编码器值d1的位置5至2中的位,或等同地,如在d2[5:2]中的第二编码器值d2的位置5至2中的位)。这四个较高阶位可以划分为第一部分d1[5:4]和第二部分d1[3:2],并且lsb码可以放置在这两个部分之间,如在以下中:
[0141]
{d1[5:4],lsb码,d1[3:2]}
[0142]
如上所述,设计lsb码以便于每一个包括至少一个转换。因此,通过在两个部分之间放置lsb码,头部34的最大游程长度是((q-2))/2+2。例如,在以上0000的分组标识符和001的lsb码的情形中,将头部编码为0000100,这导致四个连续0的游程。
[0143]
解码器200在操作710中通过从头部34读取最高有效位(例如,d1[5:4]串接d1[3:2])并且从头部34读取最低有效位码(lsb码)、随后(例如,基于以上表格)将lsb码解码以确定第一编码器值d1的最低有效位和第二编码器值d2的最低有效位而将第一编码器值d1和第二编码器值d2解码。从头部34读取的最高有效位随后与第一编码器值d1的已解码最低有效位串接以解码整个第一编码器值d1,并且从头部34读取的最高有效位随后与第二编码器值d2的已解码最低有效位串接以解码整个第二编码器值d2。
[0144]
使用该编码方案,开销是用于标识分组的q-2位加上用于标识分组的两个所选组元的3位,总共h=q+1位。例如,在q=6的这种情形中,开销是7位。在q=6的情形中,当n《=47(例如,每个数据包最多2
6-16-1=47个字)时可以确保在分组之中找到有效的编码器值d1和d2。因此,在其中q=6并且n=47的情形中,可以使用7位标识每个分组,并且因此,在第一编码器值d1和第二编码器值d2落入四个值的相同分组内的情况下,效率可以如下计算:
[0145][0146]
在这些实施例中,编码器和解码器可以以类似于以上所述的方式的方式实施。例如,在使用该编码设置的本公开的一些实施例中,解码器200被配置为根据公式(2)或(3)从包含q位编码器值d1和d2的头部34将编码器值解码。类似地,解码器200可以随后关于公式(4)或(5)如上所述将已编码值解码为原始值。
[0147]
作为另一示例,在其中r=3的本公开的一些实施例中,可能值的空间被划分为八个连续值的分组。例如,分组0可以包括值0至7,分组1可以包括值8至15等等。在该设置中,每个分组内的值共用q-3位公共前缀,并且区别可以仅在于它们的三个最低有效位。以下的表格5提供了在q=6且r=3并且作为示例选择值9作为第一编码器值d1且选择值11作为第二编码器值d2的情形中的一个示例。在以下的表格5中以粗体示出了对应于第一编码器值d1和第二编码器值d2的这些行。
[0148]
表格5
[0149][0150]
以类似于以上所述的方式的方式,可以采用5位长的lsb码唯一地标识八个值的分组内的两个值(例如,存在28种方式以从八个可能值的集合中选出两个值,并且因此5位(25=32)足以指定两个值的那些28个可能配对中的任意一个,在lsb码中留下空间以排除五位全零和全一游程)。因而,在一些实施例中,使用以下码对编码器值d1和d2编码:
[0151]
{lsb码,msb}
[0152]
例如,在其中q=6的情形中,这可以表示为:
[0153]
{lsb码,d1[5:3]}
[0154]
在一些实施例中,以类似于以上所述的方式的方式,msb拆分为两个部分,并且lsb码放置在msb的两个部分之间。例如,在其中q=8的情形中,msb可以拆分为具有首先三位的第一部分(d1[7:5])和具有接下来两位的第二部分(d1[4:3])。因而,这可以表示为:
[0155]
{d1[7:5],lsb码,d1[4:3]}
[0156]
在解码器200处,在操作710中,对于r=2的情形可以以类似于以上所述的方式的方式从头部解码第一编码器值d1和第二编码器值d2(例如,通过读取msb,使用表格从lsb码解码lsb,以及将msb与两个已解码lsb串接)。
[0157]
因而,在q=6的情形中,可以确保,当n《=2
6-8-1=55时在相同分组中存在第一编码器值d1和第二编码器值d2。采用q-3+5=6-3+5=8位的头部长度,该编码设置的效率可以计算为:
[0158][0159]
在一些实施例中,编码器100可以在操作550中使用上述技术(例如,基于公式(2)或公式(3))或其等同形式而实施从原始值至已编码值的编码函数或映射。类似地,解码器200可以在操作750中使用上述技术(例如,基于公式(4)或公式(5))或其等同形式而实施从已编码值至原始值的解码函数或映射。
[0160]
在一些实施例中,编码器100在操作550中使用xor(^)运算实施从原始值至已编码值的两级映射。特别地,在编码的第一级中,待编码的字x与第一编码器值d1异或(xor)以计算中间值y。在第二级中,y的一个或多个位与y的一个位异或(xor)。特别地,通过选择对于
具有值1的第二编码器值d2所计算的y的值的任何单个位位置z、以及将在该位位置z处的值与在z之外的位置处的y的位进行异或(xor)并且将位位置z处的位复制至x’的相同位置z而计算x’。表格5示出了其中第一编码器值d1和第二编码器值d2分别对应于值9和11的具体示例。在此,为了执行特定字x的编码,将字x与第一编码器值d1的值(9或二进制的001-001)异或(xor)以计算y(参见标记y=x^d1的列)。例如,对于值x=7,通过将7(二进制的000-111)与第一编码器值d1(001-001)异或(xor)而计算y以得到y=001-110。返回参照表格5,第二编码器值d2精确地具有带有值1的一位位置(在z=2处或在次最低有效位处)。因此,对于x=7,通过将其y(001-110,其在z=2处具有1的值)在z=2处的位值与在y的所有其他位置(z≠2)处的位值异或(xor)而计算x’以得到x’=110-011。作为另一示例,对于x=8,其对应的值y是000-001,其在位置2处具有0的位值。因此,当将除了2之外的位位置处的位值异或(xor)以计算x’时,值从y的值保持不变,以便x’=000-001。
[0161]
因而,本公开的实施例的方面提供了用于编码数据以减小最大游程长度的系统和方法,由此提高数据链路上的转换的效率。提高转换的效率可以例如改进时钟数据恢复处理,由此提高经由数据链路通信的发送器与接收器之间的连接的质量。更详细地,本公开的实施例的一些方面涉及将原始数据划分为n个字的数据包,每个字q位长,将原始数据编码以便已编码数据不含为全零或为全一的字,由此确保每q位至少出现一次转换。基于由对应于并未在原始数据中出现的两个值的两个编码器值所限定的一对一映射而执行编码,其中两个编码器值作为开销传送以由解码器在限定用于解码已编码数据的映射中所使用。由通过压缩编码器值将与编码处理相关联的数据开销减小而导致对于效率的进一步提高。
[0162]
尽管以上在图形控制器与显示装置之间的串行链路的上下文中描述了本公开的实施例的一个示例应用,本公开的实施例不限于此并且也可以应用于其他类型的串行数据链路和串行数据总线以用于连接至其他类型的外围设备和计算装置,诸如数据存储装置(例如,易失性或非易失性存储器和大容量存储装置等)、外部协同处理装置(例如,外部图形处理单元和人工智能加速器等)、网络控制器、其他计算机系统、智能电话和其他便携式计算装置等。
[0163]
本发明的实施例可以以如将由本领域普通技术人员所理解的各种方式实施,并且如在此使用的术语“处理器”可以表示能够执行所述操作的任何计算装置,诸如具有存储在连接至通用处理器的存储器中的指令的已编程通用处理器(例如,arm处理器)、现场可编程门阵列(fpga)以及定制专用集成电路(asic)。本发明的实施例可以集成至串行通信控制器(例如,通用串行总线或usb控制器)、图形处理单元(gpu)、面板内接口以及被配置为传送和接收数字数据的其他硬件或软件系统。
[0164]
尽管已经结合某些示例实施例描述了本发明,应该理解的是,本发明不限于所公开的实施例,而是相反,意图涵盖包括在所附权利要求的精神和范围内的各种修改和等同设置。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1