发明内容
本发明主要目的是提供一种针对变长编码数据的解码电路,其能够在单时钟周期解码多个数据,以提高解码效率。
根据本发明的一个方面,提供了一种针对变长编码数据的解码电路,所述变长编码数据包括多个变长编码,且其最长编码的码字位宽为N,包括:第一行缓存和第二行缓存,其数据位宽均为W,依次缓存所述变长编码数据中2W个相继数位的值,第一缓存的W个数位依次编号为0至W-1,第二缓存的W个数位依次编号为W至2W-1,其中,W≥N;P个译码本单元,依次编号为0至P-1,其中第i个译码本单元对所述2W个相继数位中第i个至第i+N-1个数位进行解码,确定从第i位开始的一个变长编码所对应的初步译码结果,其中,0≤i<P;M个译码结果选择单元,依次编号为0至M-1,每个译码结果选择单元接收所述P个初步译码结果,并基于本轮译码起始位置分别选择一个译码本单元的初步译码结果,作为各自的译码结果,所述本轮译码起始位置表示本轮译码操作所针对的变长编码数据在所述第一行缓存中的起始位置,其中,且i、P、M、N均是正整数。
在本发明的一个实施例中,译码结果选择单元选择为其指定的译码起始位置所对应的译码本单元的初步译码结果,其中,为第0个译码结果选择单元指定的译码起始位置是在上一轮译码操作中确定的本轮译码起始位置,为第j+1个译码结果选择单元指定的译码起始位置是为第j个译码结果选择单元所选择的初步译码结果对应的变长编码在所述第一行缓存中的结束位置的下一个位置,其中,0≤j<M-1。
在本发明的一个实施例中,第i个译码本单元以第i个数位为起始数位来识别变长编码,对所识别的变长编码进行译码以得到所述初步译码结果,并输出所述初步译码结果和所述变长编码的长度,第j个译码结果选择单元基于为其指定的译码起始位置和其所选择的初步译码结果所对应的变长编码的长度,确定第j+1个译码结果选择单元的译码起始位置,并发送给第j+1个译码结果选择单元。
在本发明的一个实施例中,在第k个译码结果选择单元所选择的初步译码结果对应的变长编码的起始位置在所述第一行缓存,而其结束位置在第二行缓存的情况下,所述第k个译码结果选择单元发出跨行信号,其中,0≤k<M。
在本发明的一个实施例中,该解码电路还可以包括译码结果整合单元,接收M个译码结果选择单元所选择的译码结果,整合本轮译码结果集合,并确定下一轮译码起始位置。
在本发明的一个实施例中,译码结果整合单元还可以包括:译码结果获取模块,用于从M个译码结果选择单元获取本轮译码结果集合;以及下一轮起始地址确定模块,用于确定下一轮起始地址,其中,在M个译码结果选择单元均没有发出跨行指令的情况下,译码结果获取模块获取M个译码结果选择单元所选择的译码结果,作为本轮译码结果集合,并且下一轮起始地址确定模块基于为最后一个译码结果选择单元指定的译码起始位置及其所对应的变长编码的长度,确定下一轮起始地址;在第k个译码结果选择单元发出了跨行指令的情况下,译码结果获取模块获取第0个至第k个译码结果选择单元所选择的译码结果,作为本轮译码结果集合,并且下一轮起始地址确定模块基于为第k个译码结果选择单元指定的译码起始位置及其所对应的变长编码的长度,确定下一轮起始位置。
在本发明的一个实施例中,译码结果整合单元还可以包括:跨行使能模块,在第k个译码结果选择单元发出了跨行指令的情况下,向第一行缓存和第二行缓存发出跨行指令,响应于跨行指令,将第二行缓存中的数据转移到第一行缓存中,并且在第二行缓存中写入后续变长编码数据。
在本发明的一个实施例中,该解码电路还可以包括先入先出队列,用于从外部存储器输入变长编码数据,并且响应于跨行指令,向第二行缓存提供变长编码数据。
在本发明的一个实施例中,该解码电路还可以包括输出寄存器,用于寄存译码结果集合、跨行指令、下一轮起始地址,以向外输出译码结果,向第一行缓存、第二行缓存以及先入先出队列发送跨行指令,并向第0个译码结果选择单元发送下一轮译码起始地址。
在本发明的一个实施例中,每个译码本单元还输出标识其是否成功识别出变长编码的译码有效性标识,每个译码结果选择单元向译码结果整合单元输出其所选择的译码本单元输出的译码有效性标识,译码结果整合单元还包括:译码错误检查模块,基于译码有效性标识检查本轮译码操作是否出错,并在确定译码操作出错的情况下,经由输出寄存器发出译码错误信号。
综上,本发明采取“投机机制”,按照顺序依次以每个数位为起始数位,使用相应的译码本单元对该起始数位前向N个数位范围(包括该起始数位,数位范围也可以大于N)的编码数据进行解码。若译码本单元未找到匹配编码,则表明“投机失败”,输出无效信号,若找到匹配码本,则表明“投机成功”,可以输出包含变长编码长度、解码值、解码成功标识的初步解码结果,以此实现对变长编码数据的并行解码。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本发明主要提出了一种针对变长编码的解码电路,为了便于更好地理解本发明,首先就本发明的发明机理进行简要说明。
如背景技术部分及本领域技术人员所公知,变长编码是一种根据数据出现的概率进行编码的方法,其主要编码思想是对出现概率大的数据赋予较短的码字位宽(即编码所包含的数位个数,下同),通过改变码字位宽达到压缩信息冗余的目的。
在对变长编码数据进行解码时,由于不同的数据可能被编码成不同的码字位宽,在前一个数据未被解码时,后一个数据的编码起始位置不能确定,使得无法对变长编码数据进行并行解码。因此,现有的解码方法需要逐个对其进行解码,解码效率很低。
针对这种问题,本发明人在深入研究后发现,可以采取“投机”的方法来实现对变长编码数据的并行解码。具体地,以图1为例,对于由一定数位构成的变长编码数据,可以采取“投机”的方法,假设每个数位(例如数位1、2、3、4……)均为编码起始位置,以每个数位为编码起始位置对该数位向前的n个数位范围(包括编码起始位置)并行执行解码处理(参见图中解码处理1、2、3、4)。
其中,解码成功则表示“投机成功”,假设的起始数位确为编码起始位置,解码失败则表示“投机失败”,假设的起始数位为错误的编码起始位置。对于“投机成功”的解码处理来说,可以确定其所对应的n个数位范围内的编码起始位置和变长编码的长度,基于该编码起始位置和变长编码可以确定下一个编码起始位置。
由此,对于多个并行解码处理中最后一个“投机成功”的解码处理来说,可以根据该解码处理的解码结果,确定编码起始位置以及变长编码长度,由此可以进一步确定后续待解码的变长编码数据中的下一个编码起始位置。这样就可以以确定的下一个编码起始位置为初始位置继续对后续的变长编码数据并行执行多个解码处理,以此类推,可以实现对变长编码数据的并行化解码,大大提高解码效率。
基于这种思路,本发明提出了一种针对变长编码数据的解码电路。图2是示出了根据本发明一实施例的解码电路的功能框图。本发明的解码电路可以用来对变长编码数据(例如霍夫曼编码数据)进行解码,为了便于描述,变长编码数据的最长编码的码字位宽可以设为N,这里的N以及下文将要述及的符号i、P、M均是正整数。
参见图2,本实施例的解码电路包括第一行缓存11、第二行缓存12、P个译码本单元以及M个译码结果选择单元。
第一行缓存11和第二行缓存12用于缓存变长编码数据。其中,第一行缓存和第二行缓存的数据位宽均为W,依次缓存变长编码数据中2W个相继数位的值。为了便于描述,这里设第一行缓存的W个数位依次编号为0至W-1,第二行缓存的W个数位依次编号为W至2W-1。这里如果W小于N,那么,就有可能有一个变长编码开始于第一行的最后一个,到第二行缓存结束,该变长编码都还没有结束,这样就不能实现解码了。因此需要保证W≥N,以使得每行缓存至少包含一个完整的编码数据。
P个译码本单元构成译码本阵列,译码本阵列中的译码本单元可以并行执行译码操作。如图2所示,可以将P个译码本单元依次编号为dec-0至dec-(P-1)。
译码单元dec-i可以对第一行缓存和第二行缓存中的2W个相继数位中第i个至第i+N-1个数位进行解码,确定从第i位开始的从第i+N-1位结束的一个变长编码所对应的初步译码结果,其中,0≤i<P。
也就是说,译码本单元dec-0可以对第0个至第N-1个数位进行解码,译码本单元dec-1可以对第1个至第N个数位进行解码,译码本单元dec-2可以对第2个至第N+1个数位进行解码,以此类推。其中,变长编码的最长位宽是N,所以译码本单元一次译码的对象最多是N位宽。或者说,译码本单元的译码能力是基于变长编码的最长位宽设定的。
这里,译码本单元的个数P可以小于或等于第一行缓存11和第二行缓存12的数据位宽W。
译码本单元所确定的初步译码结果为假设当前数位为起始数位,在前向(包括该起始数位)M个数位范围内的译码结果。若译码本单元未找到匹配编码,则表明该起始数位并非正确的编码起始位置,则输出无效信号,若找到匹配编码,则表明该起始数位为正确的编码起始位置,此时则可以输出匹配编码的编码长度(在有多个匹配编码的情况下,可以输出多个匹配编码的长度)、解码后的数据(在有多个匹配编码的情况下,可以输出多个解码数据)以及解码成功标识等信息。
由此,本发明采取“投机机制”,按照顺序依次以每个数位为起始数位,使用相应的译码本单元对该起始数位前向N个数位范围(包括该起始数位,数位范围也可以大于N)的编码数据进行解码。若译码本单元未找到匹配编码,则表明“投机失败”,输出无效信号,若找到匹配码本,则表明“投机成功”,可以输出包含变长编码长度、解码值、解码成功标识的初步解码结果。
这里需要说明的是,对于“投机成功”的N个数位范围,如果其中存在多个变长编码,译码本单元可以优选地仅对第一个变长编码进行解码。这是因为如果前面的一个译码本单元译出了第二个变长编码,而且其也开始于第一行缓存,那么后面也会有一个译码本单元会译出这个代码,造成解码数据的重复。由此,每个译码本单元可以被配置为在每轮译码操作中仅能够识别第一个变长编码。
其中,P个译码本单元可以执行多轮译码操作,对于每轮译码操作来说,可以根据本轮最后一个译码成功的译码本单元的初步译码结果,得到下一轮译码操作的起始数位,由此就可以使用译码本阵列中的P个译码本单元以所确定的下一轮译码起始数位开始继续对后续的变长编码数据并行地执行译码操作。这里,确定下一轮译码操作的起始数位的具体原理及实现将在下文说明,这里暂不赘述。
需要说明的是,在确定下一轮译码操作的起始数位位于第二行缓存中时,第一行缓存中的变长编码数据已经解码完成,此时,可以暂停下一轮译码操作,将第二行缓存中的变长编码数据写入第一行缓存,并在第二行缓存中写入新的变长编码数据,然后再开始下一轮的译码操作。这样,可以及时写入新的变长编码数据,使得译码本阵列中的译码本单元均可以并行进行译码操作。
其中,译码本单元可以优选地被配置为仅以第一行缓存11中的数位为起始数位执行译码操作,在其所对应的起始数位位于第二行缓存12中时,停止译码操作。
M个译码结果选择单元构成选择单元阵列(也可以称为涟漪阵列),如图2所示,可以将M个译码结果选择单元编号为sel-0至sel-(M-1)。选择单元阵列中的每个译码结果选择单元可以接收来自P个译码本单元的P个初步译码结果,并基于本轮译码起始位置分别选择一个译码本单元的初步译码结果,作为各自的译码结果。其中,本轮译码起始位置表示本轮译码操作所针对的变长编码数据在第一行缓存中的起始位置。
P个译码本单元可以执行多轮译码操作,对于每轮译码操作所得到的P个初步译码结果,每个译码结果选择单元可以优选地从中选取译码成功的初步译码结果。
这里,可以为每个译码结果选择单元指定一个译码起始位置,这样,译码结果选择单元就可以选择为其指定的译码起始位置所对应的初步译码结果。其中,这里所指定的译码起始位置优选地是“投机成功”的起始位置。
具体来说,对于译码结果选择单元sel-0来说,为其制定的译码起始位置可以是在上一轮译码操作中确定的本轮译码起始位置。也就是说,可以将上一轮识别的最后一个变长编码的结束位置的下一个数位确定为本轮译码起始位置,或者说,还可以根据最后一个变长编码的起始位置+编码长度来确定本轮译码起始位置。
在确定了译码结果选择单元sel-0所对应的译码起始位置后,就可以将基于译码结果选择单元sel-0所选择的初步译码结果所对应的变长编码在第一行缓存中的结束位置的下一个位置指定为译码结果选择单元1的译码起始位置,以此类推,就可以得到每个译码结果选择单元的译码起始位置。
由此,为第j+1个译码结果选择单元指定的译码起始位置是为第j个译码结果选择单元所选择的初步译码结果对应的变长编码在第一行缓存中的结束位置的下一个位置,其中,0≤j<M-1。
也就是说,第j个译码结果选择单元可以基于为其指定的译码起始位置和其所选择的初步译码结果所对应的变长编码的长度,确定第j+1个译码结果选择单元的译码起始位置,并发送给第j+1个译码结果选择单元。其中,确定第j+1个译码结果选择单元的译码起始位置的公式可以记为Sj+1=Sj+Lj,Sj为第j个译码结果选择单元的译码起始位置,Lj为第j个译码结果选择单元所选择的初步译码结果所对应的变长编码的长度。
这样,对于每轮译码操作得当的P个初步译码结果,M个译码结果选择单元均可以从中选出“投机成功(即译码成功)”的初步译码结果,通过后续对译码结果选择单元选择的初步译码结果进行整合就可以得到解码数据。
以上以一个译码结果选择单元选取一个初步译码结果为例进行了说明,应该知道,对于每轮译码操作下的P个初步译码结果来说,在译码结果选择单元的数量M小于译码成功的初步译码结果的数量时,每个译码结果选择单元还可以选择多个初步译码结果。也就是说,M个译码结果选择单元可以循环执行多轮选取操作,此时,可以将译码本单元dec-(P-1)所选择的初步译码结果对应的变长编码在第一行缓存中的结束位置的下一个位置确定为译码本单元dec-0的下一个译码起始位置。
正如前文所述,为了更好地实现译码本阵列中的P个译码本单元可以并行地执行多轮译码操作,还可以进行“跨行”检测。
这里,可以在第k个译码结果选择单元所选择的初步译码结果对应的变长编码的起始位置在第一行缓存,而其结束位置在第二行缓存的情况下,第k个译码结果选择单元发出跨行信号,其中,0≤k<M。此时,第k+1至第M-1个译码结果选择单元可以不再选择译码结果(因为其起始地址已到下一行,而译码本单元没有从下一行开始译码的)。
图3示出了根据本发明另一实施例的解码电路的功能框图。
参见图3,本实施例的解码电路除了包括图2所示的全部功能模块外,还可以包括译码结果整合单元13。其中,关于第一行缓存11、第二行缓存12、P个译码本单元以及M个译码结果选择单元可以参见上文结合图2的相关描述,这里不再赘述。
译码结果整合单元13可以接收M个译码结果选择单元所选择的译码结果,整合本轮译码结果集合,并确定下一轮译码起始位置。
简要来说,译码结果整合单元13可以对接收到的M个译码结果选择单元所选择的译码结果进行整合,以得到本轮译码操作所得到的解码数据,并且可以根据本轮译码结果集合中最后一个译码成功的初步译码结果所对应的变长编码的长度和译码起始位置,确定下一轮译码起始位置。
如图3所示,译码结果整合单元13可以包括译码结果获取模块131和下一轮起始地址确定模块133。
译码结果获取模块131可以从M个译码结果选择单元获取本轮译码结果集合,下一轮起始地址确定模块133可以确定下一轮起始地址。
其中,在M个译码结果选择单元均没有发出跨行指令的情况下,译码结果获取模块131获取M个译码结果选择单元所选择的译码结果,作为本轮译码结果集合,并且下一轮起始地址确定模块133基于为最后一个译码结果选择单元指定的译码起始位置及其所对应的变长编码的长度,确定下一轮起始地址。即下一轮起始位置Snext=SM+LM,其中,SM是为最后一个译码结果选择单元指定的译码起始位置,LM是对应的变长编码的长度。
在第k个译码结果选择单元发出了跨行指令的情况下,译码结果获取模块131可以获取第0个至第k个译码结果选择单元所选择的译码结果,作为本轮译码结果集合,并且下一轮起始地址确定模块133基于为第k个译码结果选择单元指定的译码起始位置及其所对应的变长编码的长度,确定下一轮起始位置。在跨行时,可以将第二行缓存12中的数位转移到第一行缓存11中,因此所确定的下一轮起始位置Snext=Sk+Lk–W,其中,Sk是为第k译码结果选择单元指定的译码起始位置,Lk是对应的变长编码的长度。
在确定了下一轮译码起始位置后,就可以由译码本阵列中的译码本单元继续并行执行下一轮的译码操作。
参见图3,译码结果整合单元13还可以包括跨行使能模块135。在第k个译码结果选择单元发出了跨行指令的情况下,跨行使能模块135可以向第一行缓存11和第二行缓存12发出跨行指令,响应于跨行指令,可以将第二行缓存12中的数据转移到第一行缓存11中,并且在第二行缓存12中写入后续变长编码数据。
由此,作为本发明的一个可选实施例,解码电路还可以包括先入先出队列,用于从外部存储器输入变长编码数据,并且响应于跨行指令,向第二行缓存提供变长编码数据。
如图3所示,解码电路还可以包括输出寄存器14。输出寄存器4可以寄存译码结果集合、跨行指令、下一轮起始地址,以向外输出译码结果,向第一行缓存、第二行缓存以及先入先出队列发送跨行指令,并向译码结果选择单元sel-0发送下一轮译码起始地址。
其中,每个译码本单元还可以输出标识其是否成功识别出变长编码的译码有效性标识,每个译码结果选择单元向译码结果整合单元输出其所选择的译码本单元输出的译码有效性标识。如图3所示,译码结果整合单元13还可以包括译码错误检查模块137。译码错误检查模块137可以基于译码有效性标识检查本轮译码操作是否出错,并在确定译码操作出错的情况下,经由输出寄存器14发出译码错误信号。这里,如果某个译码结果选择单元所选择的译码本单元没有识别出变长编码,则说明译码过程出错。
图4是示出了根据本发明一实施例的解码电路的功能模块之间的信号传输示意图。
图5是示出了根据本发明一实施例的基于跨行指令更新行缓存的示意图。
参见图4、图5,译码本阵列16可以并行地以第一行缓存11中的数位为起始数位执行译码操作,选择阵列17可以从译码本阵列16中选取译码成功的初步译码结果,并交由译码结果整合单元13进行整合。整合得到的译码结果集合、跨行指令、下一轮起始地址均可以由输出寄存器14存储。输出寄存器14可以向先入先出队列15发送跨行指令。先入先出队列15中可以从外部输入变长编码数据。响应于跨行指令,第二行缓存12中的数据可以转移到第一行缓存11中,并可以由先入先出队列15将新的变长编码数据写入第二行缓存12。这样,译码本阵列16可以对更新后的缓存中的变长编码数据继续并行地进行译码操作。
上文中已经参考附图详细描述了根据本发明的解码电路。综上,本发明的解码电路可以实现对变长编码的并行化解码,例如可以对霍夫曼编码进行并行化解码。由此,本发明可以被配置为一种多发射霍夫曼解码电路。其中,本发明的解码电路中的译码本单元的个数第一行缓存、第二行缓存的数据位宽以及译码结果选择单元的个数均可以根据实际情况进行设定。由此本发明的解码电路的并行化的运行能力可以根据实际需要进行设置,电路扩展与裁剪容易。
此外,根据本发明的解码电路的解码机理还可以实现为一种计算机程序,该计算机程序包括用于实现本发明的解码电路中各功能模块的操作的计算机程序代码指令。或者,根据本发明还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的上述方法中限定的上述功能的计算机程序。本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。