背景技术
随着信息科技的进步,几乎所有的信息都能以数字的方式储存,以供使用者保存信息。同时,网络技术的快速发展,让使用者可以经由网络传递与交换信息。然而,虽然储存技术及网络技术进步迅速,仍然无法赶上信息成长的速度。例如,影像与声音的数据量相当庞大,若直接加以储存或在网络上传递,则必需付出相当的储存空间及网络频宽。因此目前多以压缩编码的方式,在可接受的影音品质条件下降低数据量,以有效节省储存空间及网络频宽。
以影音数据为例,目前有MPEG(motion picture experts group)、MP3(MPEG audio layer 3)及WMA(windows media audio)等相关的影音压缩格式为一般使用者所接受,并以这种文件格式在网络上进行传递。将数据压缩编码后,要读取其中的数据或将播放影音数据,就必须将数据译码。而译码的程序可由软件或硬件来执行。然而,若以软件进行译码,所有的译码运算动作将交由系统的中央处理单元(central processing unit,CPU)执行。当系统的效能不足时,影音播放的品质将大打折扣,例如视频产生跳格,音频不平顺的现象。若以硬件进行译码程序将可大大降低这类情况的发生。
另外,无论是以软件或硬件进行压缩编码或译码,为了保持压缩编码与译码的一致性,必须记录相对应的压缩编码表。若以硬件进行译码,可将这类压缩编码表储存在只读存储器(read-only memory,ROM)中,并在译码时读取其中的数据来进行译码程序。例如,以WMA格式压缩音频数据必须使用六种压缩编码表,分别为huffman-RLC-16-mono、huffman-RLC-16-dif、huffman-RLC-440-mono、huffman-RLC-440-diff、huffman-RLC-44Q-mono、huffman-RLC-44Q-diff。将这些压缩编码表储存在只读存储器中会占用4438×16个位。作集成电路时,也将占据较大面积的硅晶而无法有效地缩小集成电路的设计,因而增加了原料成本。
综上所述,如何有效率的记录这类压缩编码表于只读存储器中,以减少储存压缩编码表所占用的硅晶面积,进而降低原料成本便是目前亟需解决的问题。
发明内容
为了克服上述问题,本发明的目的在于提供一种记录压缩编码表于虚拟只读存储器的方法及装置,其可有效地减少压缩编码表所需的储存空间。
本发明的另一目的在于提供一种记录压缩编码表于虚拟只读存储器的方法及装置,其可有效降低译码集成电路所需的硅晶面积,进而降低原料成本。
为了达到上述目的,本发明的记录压缩编码表于虚拟只读存储器的方法,先将压缩编码表中具有重复性或递增性的连续数据划分为多个区块,其中该区块具有重复性的连续数据以一个重复标记代表,该重复标记以<REP,LEVELREP,COUNTREP>来表示,该REP表示该重复标记的性质为重复性,该LEVELREP表示该区块的重复值,该COUNTREP表示该区块所包含的数据笔数,该区块具有递增性的连续数据以一个递增标记代表,该递增标记以<INC,LEVELINC,COUNTINC>来表示,该INC表示该递增标记的性质为递增性,该LEVELINC表示该区块的递增起始值,该COUNTINC表示该区块所包含的数据笔数。再以逻辑电路计算输出区块中对应于压缩编码表的实际值。而压缩编码表中不具重复性或递增性的数据则储存于另一储存元件中。
另外,本发明的记录压缩编码表于虚拟只读存储器的装置,包括:一个虚拟地址解码器、一个可编程逻辑数组以及一个对应值计算模块。该虚拟地址解码器以输入压缩编码表中的索引编号,判断索引编号所对应的数据落入压缩编码表的哪一个区块,并产生对应的输出值给该可编程逻辑数组。该可编程逻辑数组依据索引编号所落入的区块,也就是虚拟地址解码器的输出值,计算该落入区块的相关数据,包括落入区块之前所有区块所包含的数据总笔数、落入区块中的标记性质以及区块起始值。该对应值计算模块则根据数据总笔数、区块起始值以及标记性质来计算输出索引编号对应于压缩编码表中的实际值。
本发明的记录压缩编码表于虚拟只读存储器的装置更包括:一个储存元件、一个减法器以及一个多路转换器。该储存元件用以储存该压缩编码表中不具有重复性或递增性的数据。该减法器用来计算索引编号与地址偏移量的差值,以对该储存元件进行读取。该多路转换器则用以选择性输出该对应值计算模块计算的输出值或读取自该储存元件的数据。
根据本发明的记录压缩编码表于虚拟只读存储器的方法及装置,可将压缩编码表中大部份重复性或递增性的连续数据以逻辑电路计算出对应的实际值,仅将表中不具重复性或递增性的数据用只读存储器储存,因此可以有效节省压缩编码表储存于只读存储器的空间,进而减少实作集成电路所需的硅晶面积,以降低成本。
具体实施方式
以下配合附图,说明根据本发明较佳实施例的记录压缩编码表于虚拟只读存储器的方法及装置,其中相同的元件将以相同的符号表示。
表1为huffman-RLC-16-mono压缩编码表的部份数据,索引编号(Index)由388至406。以表1仿真一个压缩编码表,将其索引编码重新从0开始逐一编号(如表1 Index2字段所示)来说明本发明的记录压缩编码表于虚拟只读存储器的方法。以下说明如未特别指明,将以重新编号的索引编号为准。由表1中可以发现|Level|字段具有重复的性质,而Zero Run字段则具有递增的性质。例如,索引编号由0至9数据中的|Level|字段值都为9,而Zero Run字段值则由0递增到9。索引编号由10至14数据中的|Level|字段值都为10,而Zero Run字段值则由0递增到4。
根据以上的规则,可将表1划分为4个区块,分别为索引号码0至9(B1)、索引号码10至14(B2)、索引号码15至17(B3)以及索引号码18(B4)的数据。各区块的|Level|字段值可用一个重复标记代表,以<REP,LEVELREP,COUNTREP>表示,REP表示该标记的性质为重复性,LEVELREP为该区块的重复值,该COUNTREP为该区块所包含的数据笔数。因此上述4个区块|Level|字段值可表示成<REP,9,10>、<REP,10,5>、<REP,11,3>以及<REP,12,1>。而各区块的Zero Run字段值也可用一个递增标记代表,以<INC,LEVELINC,COUNTINC>来表示,INC表示该递增标记的性质为递增性,该LEVELINC为该区块的递增起始值,该COUNTINC为该区块所包含的数据笔数。上述4个区块Zero Run字段值可表示成<INC,0,10>、<INC,0,5>、<INC,0,3>以及<INC,0,1>。
由于表1中|Level|字段值以重复标记表示,因此可通过判断索引编号落入的区块加以得知。例如,索引编号16落入表中B3区块,|Level|字段值的重复标记为<REP,11,3>,因此,|Level|字段值即为11。而Zero Run字段值是以递增标记表示,其值VALUEINC可以下列方程式计算而得:
VALUEINC=INDEX-SUMCOUNT+LEVEL (a)
其中INDEX为索引编号,SUMCOUNT为所在区块之前所有区块所包含的数据笔数总和,LEVEL为该递增标记中的LEVELINC值。同样以索引编号16为例,其落入B3区块,SUMCOUNT为B1区块及B2区块数据笔数的加总,其和为15,Zero Run字段值的递增标记为<INC,0,3>,其LEVEL值为0。因此索引编号16的Zero Run字段值VALUEINC为16-15+0,即为1。
上述比对索引编号落入的区块以及计算索引编号对应于压缩编码表的实际值,可由一个逻辑电路加以实现,详细方式如后所述。另外,B4区块中仅有1笔数据,没有数笔连续数据的重复性或递增性,因此可将其直接储存于储存元件中。压缩编码或译码时可依据索引编号直接读取储存元件取得压缩编码表中的实际值。
综上所述,将本发明的记录压缩编码表于虚拟只读存储器的方法的实施步骤整理如图1所示。首先,以压缩编码表中具有重复性或递增性的连续数据作为一个区块,而将压缩编码表划分为多个区块(S11),接着,以逻辑电路计算输出区块中对应于压缩编码表的实际值(S12)。而压缩编码表中不具重复性或递增性的数据则储存于储存元件中(S13)。
接着说明实现本发明的记录压缩编码表于虚拟只读存储器的方法的实施装置。如图2所示,本发明的记录压缩编码表于虚拟只读存储器的装置,包括:一个虚拟地址解码器21、一个可编程逻辑数组22以及一个对应值计算模块23。虚拟地址解码器21以输入的索引编号INDEX,判断索引编号INDEX所对应的数据落入压缩编码表的哪一个区块,并产生对应的输出值给可编程逻辑数组22。可编程逻辑数组22依据索引编号INDEX所落入的区块,也就是虚拟地址解码器21的输出值,计算该落入区块的相关数据,包括落入区块之前所有区块所包含的数据总笔数SUMCOUNT、落入区块中的标记性质OP(其包括重复性REP及递增性INC)以及重复标记的重复值或递增标记的递增起始值,以下简称为区块起始值LEVEL。对应值计算模块23则根据数据总笔数SUMCOUNT、区块起始值LEVEL以及标记性质OP来计算输出索引编号INDEX对应于压缩编码表中的实际值。若标记性质OP为REP,即该标记为重复标记,则对应的实际值为区块起始值LEVEL,也就是表1中|LEVEL|字段的实际值。若标记性质OP为INC,即该标记为递增标记,对应的实际值则可由上述方程式(a)计算而得。方程式(a)中的VALUEINC即为表1中Zero Run字段的实际值。方程式(a)中的INDEX以索引编号INDEX代入,方程式(a)中的SUMCOUNT以可编程逻辑数组22输出的数据总笔数SUMCOUNT代入,方程式(a)中的LEVEL则以区块起始值LEVEL代入。如此即可输入一个索引编号INDEX而得到相对应的|LEVEL|字段值与Zero Run字段值。
对应值计算模块23依据方程式(a),包括:一个第一减法器231、一个加法器232以及一个第二多路转换器233。第一减法器231计算索引编号INDEX与数据总笔数SUMCOUNT的差值,并输出至加法器232。加法器232则计算第一减法器231的输出值与区块起始值LEVEL之和,并输出至第二多路转换器233。第二多路转换器233则依据标记性质OP来选择性输出区块起始值LEVEL或加法器232的输出值。若OP为REP时,则输出区块起始值LEVEL。若OP为INC时,则输出加法器232的输出值。
虚拟地址解码器21主要由一个连串比较器所组成。以表1的压缩编码表划分为4个区块为例,其虚拟地址解码器如图3所示,其包括:一个第一比较器211、一个第二比较器212、一个第三比较器213、一个反向器214、一个第一与门215以及一个第二与门216。第一比较器211、第二比较器212以及第三比较器213的B端子接受索引编号INDEX的输入,A端子的输入为各区块的界限值,即为各区块最大索引编号INDEX。例如第一区块界限值bound1连接第一比较器211的A端子,其值为9。第二区块界限值bound2连接第二比较器212的A端子,其值为14。第三区块界限值bound3连接第三比较器213的A端子,其值为17。当比较器的B端子输入大于A端子输入时,则输出1,否则输出0。第一比较器的输出经反向器214反向后输出第一输出值OUT1。第一与门215的一个输入端连接第一比较器211的输出,另一输入端连接第二比较器212输出的反向,并输出一个第二输出值OUT2。第二与门216的一个输入端连接第二比较器212的输出,另一输入端连接第三比较器213输出的反向,并输出一个第三输出值OUT3。第三比较器213的输出作为第四输出值OUT4。当输入一个索引编号INDEX时,虚拟地址解码器21即可经由比较器比较,得知索引编号INDEX所落入的区块,并表现在其输出值的变化上。
另外,如上所述,可将表1中B4区块的不具重复性或递增性的数据储存于储存元件25,本实施例为一个只读存储器(read-only memory),再配合一个第一多路转换器26选择性输出对应值计算模块23的输出值,或是读取储存元件25所得的数据。当输入的索引编号INDEX经虚拟地址解码器21判断其落入的区块不在可编程逻辑数组22的区块范围时,则读取储存元件25中索引编号INDEX所对应的值,其可由虚拟地址解码器21传送至第一多路转换器26的输出值来加以判断。而读取只读存储器可以一个第二减法器24计算索引编号INDEX与地址偏移量Address_offset输出一个差值而对只读存储器进行存取。
接上例,以表1仿真一个压缩编码表,说明如何以索引编号INDEX取得压缩编码表中的值。其中表1的区块B1、区块B2及区块B3中的数据可由可编程逻辑数组22计算而得,区块B4则储存于储存元件25中,即只读存储器,因此虚拟地址解码器21的第四输出值OUT4连接至第一多路转换器26。
假设输入虚拟地址解码器21的索引编号INDEX为16,第一比较器211与第二比较器212的输出值为1,第三比较器213的输出值为0。因此第一输出值OUT1、第二输出值OUT2及第四输出值OUT4都为0,仅第三输出值OUT3为1,故索引编号INDEX为16的数据属于区块B3。可编程逻辑数组22即计算输出区块B3的相关数据。计算|Level|字段值时,输出标记性质OP为REP、数据总笔数SUMCOUNT为15以及区块起始值LEVEL为11。计算Zero Run字段值时,输出标记性质OP为INC、数据总笔数SUMCOUNT为15以及区块起始值LEVEL为0。对应值计算模块23依据可编程逻辑数组22的输出值计算得到对应于压缩编码表的实际值。计算|Level|字段值时,则输出区块起始值LEVEL为11。计算Zero Run字段值时,则依上述方程式(a)得到Zero Run字段值为1。第一多路转换器26则根据虚拟地址解码器21的第四输出值OUT4为0,判断输出对应值计算模块23的输出值。
再以一个实例说明输入的索引编号INDEX不在可编程逻辑数组22的区块范围时的情形。当输入虚拟地址解码器21的索引编号INDEX为18,第一比较器211、第二比较器212以及第三比较器213的输出值都为1。因此第一输出值OUT1、第二输出值OUT2及第三输出值OUT3为0,仅第四输出值OUT4为1,故索引编号INDEX为18的数据属于区块B4。第一多路转换器26则根据虚拟地址解码器21的第四输出值OUT4为1,判断输出读取自只读存储器中的数据。
依据本发明的记录压缩编码表于虚拟只读存储器的装置,可有效节省压缩编码表储存于储存元件的空间。例如,完整的huffman-RLC-16-mono压缩编码表共有476笔数据。其中可以<REP,1,113>、<REP,2,68>、<REP,3,49>、<REP,4,42>以及<INC,0,113>、<INC,0,68>、<INC,0,49>以及<INC,0,42>表示索引编号2至273的数据,共有272笔数据,并可以逻辑电路及可编程逻辑数组仿真出这些压缩数据表的数据。而WMA格式压缩音频数据必须使用的六种压缩编码表,将其中重复标记及递增标记以逻辑电路及可编程逻辑数组仿真出这些压缩数据表的数据需要约600至700个门数(gate count)。其余的数据以只读存储器储存,则需要约721×13个位,与原来需要4438×16个位相比较,减少至原来所需位的13%。因此本发明确可有效节省压缩编码表储存于储存元件的空间,进而降低实施时的成本。
以上所述仅为举例,而非为限制性。任何熟悉该项技术者均可依据上述本发明的实施例进行等效的修改,而不脱离其精神与范畴。例如,本实施例以表1为例划分为B1、B2、B3以及B4共4个区块。熟悉该项技术者可进行等效的修改,如图4所示的虚拟地址解码器21’,增加一个第二比较器212及一个第二与门216并修改相关连接,即可产生5个输出值,也就是划分压缩编码表为5个区块。同理,通过比较器的增加可得到所需的划分区块数。
另外,不连续的区块也可通过修改标记的表示方法来进行等效的修改。例如以<403,REP,11>及<403,INC,0>来表示B3区块,其中403为B3区块的索引编号起始值(此为原始索引编号,即表1中Index字段值)。当依据索引编号计算其对应压缩编码表的实际值时,例如原始索引编号为404的数据,其重复性的|Level|字段值仍为11。而递增性的Zero Run字段值可略为修改方程式(a)如下列方程式,计算而得:
VALUEINC=INDEXcurrent-INDEXinit+LEVEL
其中,INDEXcurrent为要计算对应实际值的索引编号,INDEXinit为标记中的索引编号起始值,LEVEL为标记中的区块起始值。因此原始索引编号为404的Zero Run字段值即为404-403+0,即得1。故任何未脱离本发明的精神与范畴,而对其进行的等效修改或变更,均应包含于本发明的权利要求中。
表1