JP2010258532A - ビット長を符号に変換する回路及び方法 - Google Patents

ビット長を符号に変換する回路及び方法 Download PDF

Info

Publication number
JP2010258532A
JP2010258532A JP2009103213A JP2009103213A JP2010258532A JP 2010258532 A JP2010258532 A JP 2010258532A JP 2009103213 A JP2009103213 A JP 2009103213A JP 2009103213 A JP2009103213 A JP 2009103213A JP 2010258532 A JP2010258532 A JP 2010258532A
Authority
JP
Japan
Prior art keywords
assigned
bit length
code
codes
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009103213A
Other languages
English (en)
Other versions
JP4758494B2 (ja
Inventor
Kiyoshi Takemura
潔 竹村
Nobuyasu Tanaka
伸宜 田中
Tadayuki Okada
忠幸 岡田
Makoto Ogawa
誠 小川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2009103213A priority Critical patent/JP4758494B2/ja
Priority to US12/753,784 priority patent/US8018359B2/en
Publication of JP2010258532A publication Critical patent/JP2010258532A/ja
Application granted granted Critical
Publication of JP4758494B2 publication Critical patent/JP4758494B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】複数の文字列の各々に割り当てられた複数のビット長を複数の符号に変換する際の処理時間を短縮する。
【解決手段】ハフマンテーブル復号回路において、文字に割り当てられたビット長の入力に応じて、各文字に割り当てられたビット長をbl[N]に格納し、同じビット長が割り当てられた文字列の中での各文字列の順番をcode_fin[N]に格納する。また、同じビット長が割り当てられた文字の数をbl_count[M]に格納し、これに基づき、同じビット長を有する最小符号をcode_min[M]に格納する。これにより、セレクタ31が、code_min[M]に格納された複数の最小基準のうちbl[N]で指定された最小符号を取り出し、加算回路32が、これをcode_fin[N]に格納された値に加算する処理を並列に行い、その結果を文字に割り当てられた符号とする。
【選択図】図10

Description

本発明は、ビット長を符号に変換する回路及び方法に関する。特に、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、その複数のビット長の各々を有する複数の符号に変換する回路及び方法に関する。
deflate圧縮(RFC1951)は、現在コンピュータで広く用いられているデータ圧縮形式であるZLIB(RFC1950)、GZIP(RFC1952)のベースとなる圧縮方法であり、ハフマン符号化という符号化技術を用いてデータを圧縮する。ハフマン符号化では、データ内に繰り返し現れるバイト単位の文字に、出現頻度に応じて可変長の符号を割り当てる。この際、出現頻度の高い文字には短いビット長の符号を、出現頻度の低い文字には長いビット長の符号を割り当てることで、より効率的な符号化を行う。
そのため、ハフマン符号化では、各文字に割り当てた符号を保持するハフマンテーブルを作成し、圧縮データに付加しておく。そして、圧縮データの復号は、このハフマンテーブルを参照して行う。
ところが、このように圧縮データにハフマンテーブルを付加する場合、このハフマンテーブルのサイズが大きいと圧縮率が悪くなってしまう。それを改善するため、deflate圧縮(RFC1951)では、このハフマンテーブル自体も圧縮する。
具体的には、deflate圧縮では、ハフマンテーブルにおいて、各文字に割り当てた符号を保持するのではなく、各文字に割り当てた符号の長さ(ビット長)を保持する。同じビット長のグループの中での符号の割り振り方を、ASCIIコード順(対象がアルファベットであればアルファベット順)と定義することにより、ビット長から一意に符号を決定することが可能である。例えば、A,C,Dに割り当てられたビット長が何れも「3」であった場合、Aの符号が「100」と決まれば、C,Dは、それぞれ順番に「1」を加算することにより、「101」、「110」と決定することができる。
ここで、ハフマンテーブルを用いて符号化されたデータの復号に関する技術としては、従来、幾つかの提案がなされている(例えば、特許文献1、2参照)。
特許文献1では、復号化対象の符号が標準のハフマンテーブル又は非標準のハフマンテーブルの何れを使用して符号化されたものかを判定し、標準のハフマンテーブルを使用して符号化されたものであると判定された場合には、標準復号化回路にて標準のハフマンテーブルを使用して復号化し、非標準のハフマンテーブルを使用して符号化されたものであると判定された場合には、ソフトウェア処理手段にて非標準のハフマンテーブルを使用して復号化している。
特許文献2では、圧縮したデータストリーム中の有効なハフマン符号の長さに対して試験を行なうと共に、試験基準に対応するオフセットを使うことにより、ハフマン復号化の実行時間を短縮している。
特開2000−261324号公報 特開2002−271208号公報
ところで、上記のような方法で圧縮したハフマンテーブルを復号するには、(1)各ビット長の使用回数の算出、(2)各ビット長における最小符号の算出、(3)符号の割り当て、の3つの手順を踏む必要がある。
しかしながら、これらの手順をハードウェアで実現しようとした場合、手順(2)においてはビット長の数だけ、手順(3)においては符号の数だけ、繰り返し処理を行わなければならない。そのため、符号の数が多い場合には処理時間が増大してしまう。
尚、特許文献1、2の技術は、各文字にビット長を割り当てたハフマンテーブルを作成し、ビット長に基づいて各文字を復号する場合のこのような問題点に着目したものではない。
本発明の目的は、複数の文字列の各々に割り当てられた複数のビット長を複数の符号に変換する際の処理時間を短縮することにある。
かかる目的のもと、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、複数のビット長の各々を有する複数の符号に変換する回路であって、複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、記録部により記録された文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、複数の文字列に関する複数の処理であって、各文字列に関する処理が、基準符号生成部により生成された複数の基準符号のうち記録部により記録された各文字列に割り当てられたビット長を有する基準符号と、記録部により記録された同じビット長が割り当てられた文字列の中での各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、複数の符号を生成する割り当て符号生成部とを含む、回路を提供する。
ここで、記録部は、複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、特定のビット長と同じビット長が割り当てられた文字列の数を更新し、特定の文字列に対して、特定のビット長と、特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持する、ものであってよい。
また、基準符号生成部は、複数段の回路を含む並列計算回路であって、各段の回路が、第1のビット長が割り当てられた文字列の数を表すビット列を左に1ビットシフトすることによって得られたビット列と、第1のビット長より1つ長い第2のビット長が割り当てられた文字列の数を表すビット列とを加算し、この加算によって得られたビット列を左に1ビットシフトする回路である並列計算回路を用いて、複数の基準符号を生成する、ものであってよい。
更に、基準符号生成部は、所定数のビット長に関する所定数の処理であって、ビット長M(Mは自然数)に関する処理が、ビット長Kが割り当てられた文字列の数を表すビット列を左に(M−K)ビットシフトすることによって得られたビット列を、KがMより小さな自然数である場合について足し合わせる処理である所定数の処理を、並列に行うことにより、所定数の基準符号を生成する、ものであってよい。
また、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、複数のビット長の各々を有する複数の符号に変換する回路であって、複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、特定のビット長と同じビット長が割り当てられた文字列の数を更新し、特定の文字列に対して、特定のビット長と、特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持することにより、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、複数のビット長を構成する互いに異なるビット長である所定数のビット長に関する所定数の処理であって、ビット長M(Mは自然数)に関する処理が、記録部により記録されたビット長Kが割り当てられた文字列の数を表すビット列を左に(M−K)ビットシフトすることによって得られたビット列を、KがMより小さな自然数である場合について足し合わせる処理である所定数の処理を、並列に行うことにより、同じビット長を有する符号の最小の符号である所定数の最小符号を生成する最小符号生成部と、複数の文字列に関する複数の処理であって、各文字列に関する処理が、最小符号生成部により生成された所定数の最小符号のうち記録部により記録された各文字列に割り当てられたビット長を有する最小符号と、記録部により記録された同じビット長が割り当てられた文字列の中での各文字列の順番とを加算する処理である複数の処理を、並列に行うことにより、複数の符号を生成する割り当て符号生成部とを含む、回路も提供する。
更に、本発明は、複数の文字列の各々に割り当てられた複数のビット長を定義した定義情報と、複数のビット長の各々を有する複数の符号を含むデータとからなる符号化データを復号する装置であって、符号化データから定義情報を抽出する抽出部と、抽出部により抽出された定義情報で定義された複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、記録部により記録された文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、複数の文字列に関する複数の処理であって、各文字列に関する処理が、基準符号生成部により生成された複数の基準符号のうち記録部により記録された各文字列に割り当てられたビット長を有する基準符号と、記録部により記録された同じビット長が割り当てられた文字列の中での各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、複数の符号を生成する割り当て符号生成部と、割り当て符号生成部により生成された複数の符号の各符号を、複数の文字列のうち各符号の元となるビット長が割り当てられた文字列に変換する変換部とを含む、装置も提供する。
更にまた、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、複数のビット長の各々を有する複数の符号に変換する方法であって、複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録するステップと、文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成するステップと、複数の文字列に関する複数の処理であって、各文字列に関する処理が、複数の基準符号のうち各文字列に割り当てられたビット長を有する基準符号と、同じビット長が割り当てられた文字列の中での各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、複数の符号を生成するステップとを含む、方法も提供する。
本発明によれば、複数の文字列の各々に割り当てられた複数のビット長を複数の符号に変換する際の処理時間を短縮することができる。
ハフマンテーブルの圧縮について示した図である。 本発明の実施の形態が適用されるハフマン復号装置の構成例を示した図である。 一般的なハフマンテーブル復号回路の使用回数算出回路の構成例を示した図である。 一般的なハフマンテーブル復号回路の最小符号算出回路の構成例等を示した図である。 一般的なハフマンテーブル復号回路の割り当て符号算出回路について説明するための図である。 本発明の実施の形態におけるハフマンテーブル復号回路の使用回数算出回路の構成例を示した図である。 本発明の実施の形態におけるハフマンテーブル復号回路の最小符号算出回路の構成例等を示した図である。 本発明の実施の形態におけるハフマンテーブル復号回路の最小符号算出回路のオプティマイズ方法について示した図である。 本発明の実施の形態におけるハフマンテーブル復号回路の割り当て符号算出回路について説明するための図である。 本発明の実施の形態におけるハフマンテーブル復号回路の割り当て符号算出回路の構成例を示した図である。 本発明の実施の形態におけるハフマン復号装置の動作例を示したフローチャートである。
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
[deflate圧縮におけるハフマンテーブルの圧縮方法]
図1は、本実施の形態で用いるハフマンテーブルの具体例について、その圧縮方法を示した図である。
図において、太矢印の左側は圧縮前のハフマンテーブルを、太矢印の右側は圧縮後のハフマンテーブルを示す。即ち、圧縮前のハフマンテーブルでは、各文字に対して符号を割り当てているが、圧縮後のハフマンテーブルでは、各文字に対して、符号の代わりに符号のビット長を割り当てている。具体的には、A,B,C,D,Eに対して、「010」、「011」、「100」、「101」、「110」の代わりに「3」を割り当て、Fに対して、「00」の代わりに「2」を割り当て、G,Hに対して、「1110」、「1111」の代わりに「4」を割り当てている。尚、一般には、文字列に対して符号やビット長を割り当てることも可能であるが、本実施の形態では、文字に対して符号やビット長を割り当てるものとして説明する。
[ハフマンテーブル復号回路の構成]
図2は、本実施の形態におけるハフマン復号装置の構成例を示した図である。
このハフマン復号装置としては、例えば、圧縮されたデータを解凍しウイルスチェック等を行って再び圧縮する処理をすばやく行うことが要求されるルータ等の通信機器が例示されるが、PC(Personal Computer)等の一般的なコンピュータであってもよい。
図示するように、ハフマン復号装置は、ハフマンテーブル復号回路100と、ハフマンテーブル分離回路200と、ハフマン復号回路300とを含む。
このうち、ハフマンテーブル復号回路100は、圧縮後のハフマンテーブルのデータ(以下、「圧縮後ハフマンテーブルデータ」という)がハフマンテーブル分離回路200から入力されると、これを復号して、圧縮前のハフマンテーブルのデータ(以下、「圧縮前ハフマンテーブルデータ」という)を生成し、ハフマン復号回路300に出力するものである。ここで、圧縮後ハフマンテーブルデータとは、図1に示した圧縮後のハフマンテーブルに含まれるビット長のみを並べたデータをいう。但し、ビット長の並び順は、ハフマンテーブルにおいて文字がASCIIコード順に並べられている場合の順番であるとする。また、圧縮前ハフマンテーブルデータとは、図1に示した圧縮前のハフマンテーブルに含まれる符号のみを並べたデータをいう。但し、符号の並び順は、ハフマンテーブルにおいて文字がASCIIコード順に並べられている場合の順番であるとする。
尚、本実施の形態では、「文字」と称しているが、これは数字や記号を除外する趣旨ではない。但し、以下では、簡略化のため、文字としてアルファベットを例にとり説明する。
図示するように、本実施の形態におけるハフマンテーブル復号回路100は、使用回数算出回路10と、最小符号算出回路20と、割り当て符号算出回路30とを有する。
使用回数算出回路10は、圧縮後ハフマンテーブルデータが入力されると、各ビット長の使用回数、つまり、ビット長ごとのアルファベットの数を算出する。
最小符号算出回路20は、使用回数算出回路10により算出された各ビット長の使用回数に基づいて、各ビット長に割り当てられた符号のうちの最小の符号である最小符号を決定する。
割り当て符号算出回路30は、最小符号算出回路20により決定された最小符号に、各符号のビット長のグループごとの順番を加算して、最終的な符号を文字に割り振る。
また、ハフマンテーブル分離回路200は、圧縮後ハフマンテーブルデータと、データに含まれる文字をその文字に割り当てられた符号に置き換えることによって圧縮した圧縮後データとからなる符号化データを受信すると、この符号化データを圧縮後ハフマンテーブルデータと圧縮後データとに分離し、前者はハフマンテーブル復号回路100に、後者はハフマン復号回路300にそれぞれ出力する。
更に、ハフマン復号回路300は、ハフマンテーブル分離回路200から入力された圧縮後データに含まれる符号を、ハフマンテーブル復号回路100から入力された圧縮前ハフマンテーブルデータにおいてその符号が割り当てられた文字に置き換えることによって圧縮前データに戻し、出力する。
以下、これらの3つの回路の詳細な動作について説明するが、まず、これらの3つの回路の一般的な動作を「一般的なハフマンテーブルの復号方法」として説明し、次に、これらの3つの回路の本実施の形態における動作を「本実施の形態におけるハフマンテーブルの復号方法」として説明する。尚、以降の説明では、図1の例に従い、圧縮後ハフマンテーブルデータ「3,3,3,3,3,2,4,4」がハフマンテーブル復号回路100に入力されるものとする。また、RFC1951では、文字は最大286個定義されており、ビット長は最大15まで定義されているが、本実施の形態では、説明の簡略化のため、文字はアルファベット8文字のみを示し、ビット長は最大4ビットまでを示す。
[一般的なハフマンテーブルの復号方法]
(使用回数算出回路10)
図3は、一般的な使用回数算出回路10について示した図である。
図には、使用回数算出回路10に対して、圧縮後ハフマンテーブルデータ「3,3,3,3,3,2,4,4」が入力されていることが示されている。この場合、圧縮後ハフマンテーブルデータにおける1つのビット長が1クロックで入力されるものとする。すると、セレクタ11が、入力されたビット長ごとに、そのビット長に対応するbl_count[M]にその時点で格納されていた数を取り出す。そして、カウンタ12が、取り出された数に「1」を加算した数を元のbl_count[M]に格納する。
これにより、入力されたビット長ごとに、その使用回数がbl_count[M]に格納される。図の例では、全てのデータが入力された時点で、bl_count[2]、bl_count[3]、bl_count[4]に「1」、「5」、「2」が格納される。
(最小符号算出回路20)
図4は、一般的な最小符号算出回路20について説明するための図である。
この最小符号算出回路20では、(a)に示す式により、各ビット長の最小符号(code_min)が決定される。尚、この式は、RFC1951に定義されている。詳細は省略するが、「code = (code + bl_count[bits-1]) << 1」の計算を行えばよい。
そして、この式によってcode_minを算出する回路は、(b)に示すように、加算回路21とシフト回路22とフリップフロップ23とセレクタ24とを組み合わせることにより簡単に構成できる。つまり、M=1の段階では、セレクタ24が、code「0」を選択し、加算回路21が、これとbl_count[0]を加算し、シフト回路22がその結果を左に1ビットシフトし、フリップフロップ23がその結果を保持し、保持された結果がcode_min[1]として出力される。次に、M=2の段階では、セレクタ24が、フリップフロップ23に保持された結果を選択し、加算回路21が、これとbl_count[1]を加算し、シフト回路22がその結果を左に1ビットシフトし、フリップフロップ23がその結果を保持し、保持された結果がcode_min[2]として出力される。このように、bl_count[M−1]を順次投入して、code_min[M]が順次出力される回路になっている。
尚、本実施の形態で用いる例では、(a)に示した式より、各ビット長の最小符号code_min[M]は(c)に示したようになる。この場合、最大ビット長をBとすると、処理時間はO(B)となる。この例では、B=4(clock)であるが、RFC1951において、最大のビット長は「15」と定義されているため、最大値は、B=15(clock)である。
(割り当て符号算出回路30)
図5は、各文字に割り振られたビット長に加え、各文字に割り振られた符号を示した図である。
最小符号算出回路20により各ビット長の最初の符号が決定されたので、割り当て符号算出回路30は、ビット長のグループごとにアルファベット順に「1」を加算しながら符号を割り振る。この場合、処理時間はO(A)となる。この例では、A=8(clock)であるが、286個の文字全てを対象とする場合、A=286(clock)となる。
ここで、この一般的なハフマンテーブルの復号方法のスループットを考える。
まず、使用回数算出回路10は、ハフマンテーブルのデータをそのまま流せば完了する。ところが、全てのデータを流し終えた後、最小符号算出回路20で最大15クロック、割り当て符号算出回路30で最大286クロックかかるため、合計で最大301クロック後でなければ、ハフマンテーブルの復号が完了しない。
ハフマンテーブルを復号し、復号したハフマンテーブルを用いて圧縮データを復号し、この圧縮データの復号と並行して、次のハフマンテーブルを復号する、というパイプライン処理をスムーズに行うことができれば、圧縮データの解凍もスムーズに行うことができる。しかしながら、全てのデータを流し終えた後、圧縮前のハフマンテーブルを得るまでに最大301クロックもかかっていたのでは、パイプライン処理はスムーズに行えない。即ち、最小符号算出回路20及び割り当て符号算出回路30の処理が、パイプライン処理を行う上でボトルネックとなっている。
[本実施の形態におけるハフマンテーブルの復号方法]
(使用回数算出回路10)
図6は、本実施の形態における使用回数算出回路10について示した図である。
本実施の形態では、図3に示したようにビット長ごとのアルファベットの数を数えるだけではなく、その時点でbl_count[M]に格納されていた値を、同時にハフマンテーブルに記録する。つまり、セレクタ11が、入力されたビット長ごとに、そのビット長に対応するbl_count[M]にその時点で格納されていた値を取り出す。そして、カウンタ12が、取り出された値に「1」を加算した値を元のbl_count[M]に格納するが、その際、セレクタ11によって取り出された値は、入力されたビット長に対応する文字に対するcode_fin[N]にも格納される。つまり、図3の回路に対して、各文字の同じビット長における順番をハフマンテーブルに書き込む回路を追加している。
これにより、ビット長のグループごとのアルファベット順の順番が一時的にcode_fin[N]に格納されることになる。図には、2進数の符号を示しているが、10進数に置き換えて説明すると、ビット長が「2」のグループについては、code_fin[6]に「0」が格納され、ビット長が「3」のグループについては、code_fin[1]、code_fin[2]、code_fin[3]、code_fin[4]、code_fin[5]に「0」、「1」、「2」、「3」、「4」が格納され、ビット長が「4」のグループについては、code_fin[7]、code_fin[8]に「0」、「1」が格納される。
また、本実施の形態では、アルファベットごとのビット長をbl[N]に格納する。
尚、bl_count[M]に格納された値は、同じビット長が割り当てられた文字列の数の一例であり、bl[N]に格納された値は、各文字列に割り当てられたビット長の一例であり、この時点でcode_fin[N]に格納された値は、同じビット長が割り当てられた文字列の中での各文字列の順番の一例である。また、本実施の形態では、これらの情報を記録する記録部の一例として、使用回数算出回路10を設けている。
(最小符号算出回路20)
図7は、本実施の形態における最小符号算出回路20について説明するための図である。
この最小符号算出回路20でも、図4(a)に示す式により、各ビット長の最小符号(code_min)が決定される。この最小符号(code_min)は、図4(c)に示したものと同様であるが、再度、図7(a)に示す。
但し、本実施の形態では、図4とは異なり、最小符号(code_min)を並列計算回路によって算出する。
図7(b)に、並列計算回路の一例を示す。この並列計算回路の第1段の回路では、シフト回路22−1が、bl_count[0]を左に1ビットシフトすることによりcode_min[1]を算出し、このcode_min[1]がフリップフロップに保持されることなくそのまま加算回路21−2に入力される。また、第2段の回路では、加算回路21−2が、code_min[1]とbl_count[1]を加算し、シフト回路22−2が、その結果を左に1ビットシフトすることによりcode_min[2]を算出し、このcode_min[2]がフリップフロップに保持されることなくそのまま次の段の加算回路に入力される。以降、同様の計算を繰り返し、第15段の回路では、加算回路21−15が、code_min[14]とbl_count[14]を加算し、シフト回路22−15が、その結果を左に1ビットシフトすることによりcode_min[15]を算出する。そして、この並列計算回路では、各段の回路の算出結果が15段の回路を流れるのが十分に速ければ、全ての最小符号を1クロックで計算することも可能となる。
更に、この回路は比較的簡単な回路であるので、十分オプティマイズすれば、全ての符号をより確実に1クロックで算出することができるようになる。
そこで、この場合のオプティマイズ方法について説明する。
図7(b)の回路におけるクリティカルパス(最大遅延)はcode_min[15]である。そこで、code_min[15]の計算を最適化する。
図8(a)は、図4(a)の計算式によるcode_min[15]の算出過程を示した図である。ここで、BKは、bl_count[K]の各ビットの値を示し、C15は、code_min[15]の各ビットの値を示す。各ビットの値を全て同じ記号BK、C15で示すが、これは各ビットの値が等しいことを意味するものではない。図から分かるように、code_min[15]は、bl_count[K]を左に(15−K)ビットシフトしたものを足し合わせることで求められる(K=1,2,3,…,14)。
同様に、code_min[14]は、bl_count[K]を左に(14−K)ビットシフトしたものを足し合わせることで求められ(K=1,2,3,…,13)、code_min[13]は、bl_count[K]を左に(13−K)ビットシフトしたものを足し合わせることで求められる(K=1,2,3,…,12)。即ち、一般的には、code_min[M]は、bl_count[K]を左に(M−K)ビットシフトしたものを足し合わせることで求められる(K=1,…,M−1;M=2,…,15)。従って、code_min[M]は、並列に計算することが可能である。
ところで、RFC1951に定義されている文字の最大値は286であるため、bl_count[M]に格納される値の最大値は286となる。つまり、図8(a)の格段は9ビットまでしか有効ではない。
図8(b)は、このことを踏まえて図8(a)を書き換えた図である。このような加算を行う加算回路は、十分1クロックで処理を完了できる回路規模である。
尚、code_min[M]に格納された値、つまり、最小符号は、同じビット長を有する符号の基準となる符号である基準符号の一例である。また、本実施の形態では、基準符号を生成する基準符号生成部の一例として、最小符号算出回路20を設けている。
(割り当て符号算出回路30)
図9は、各文字に割り振られたビット長に加え、各文字に割り振られる符号の算出式と、その算出式によって算出された符号とを示した図である。
即ち、本実施の形態では、使用回数算出回路10により、ハフマンテーブル内のcode_fin[N]にアルファベットごとの同じビット長における順番が既に格納されている。そこで、割り当て符号算出回路30は、このcode_fin[N]に対して、計算式の欄に示すように、最小符号算出回路20により算出されたビット長に応じた最小符号を加算する。
図10に、このような処理を並列に行う並列加算回路の一例を示す。
この並列加算回路では、セレクタ31−1が、bl[1]に格納されたビット長「3」に対応する最小符号code_min[3]に格納された値「010」を取り出す。そして、加算回路32−1が、code_fin[1]に格納された値「000」に対して、最小符号code_min[3]に格納された値「010」を加算し、ハフマンテーブルにおける1番目の文字「A」に割り当てる符号とする。
また、セレクタ31−2が、bl[2]に格納されたビット長「3」に対応する最小符号code_min[3]に格納された値「010」を取り出す。そして、加算回路32−2が、code_fin[2]に格納された値「001」に対して、最小符号code_min[3]に格納された値「010」を加算し、ハフマンテーブルにおける2番目の文字「B」に割り当てる符号とする。
更に、セレクタ31−3が、bl[3]に格納されたビット長「3」に対応する最小符号code_min[3]に格納された値「010」を取り出す。そして、加算回路32−3が、code_fin[3]に格納された値「010」に対して、最小符号code_min[3]に格納された値「010」を加算し、ハフマンテーブルにおける3番目の文字「C」に割り当てる符号とする。
また、セレクタ31−6が、bl[6]に格納されたビット長「2」に対応する最小符号code_min[2]に格納された値「00」を取り出す。そして、加算回路32−6が、code_fin[6]に格納された値「00」に対して、最小符号code_min[2]に格納された値「00」を加算し、ハフマンテーブルにおける6番目の文字「F」に割り当てる符号とする。
更に、セレクタ31−7が、bl[7]に格納されたビット長「4」に対応する最小符号code_min[4]に格納された値「1110」を取り出す。そして、加算回路32−7が、code_fin[7]に格納された値「0000」に対して、最小符号code_min[4]に格納された値「1110」を加算し、ハフマンテーブルにおける7番目の文字「G」に割り当てる符号とする。
このように、図9で説明した計算の全てを並列加算回路で行うことで、1クロックで処理が完了する。
尚、この時点でcode_fin[N]に格納された値は、複数の符号の一例である。また、本実施の形態では、複数の符号を生成する割り当て符号生成部の一例として、割り当て符号算出回路30を設けている。
ここで、本実施の形態におけるハフマンテーブルの復号方法のスループットを考える。
まず、使用回数算出回路10は、ハフマンテーブルのデータをそのまま流せば完了する。全てのデータを流し終えた後、最小符号算出回路20、割り当て符号算出回路30とも、1クロックで処理可能であるため、合計2クロック後には、ハフマンテーブルが完成する。従って、パイプライン処理をスムーズに行うことが可能となる。
最後に、本実施の形態におけるハフマン復号装置の動作の流れについて説明する。
図11は、このときの動作の流れを示したフローチャートである。
図示するように、本実施の形態におけるハフマン復号装置では、ハフマンテーブル分離回路200が、圧縮後ハフマンテーブルデータと圧縮後データとからなる符号化データを受信すると、これらを分離する(ステップ101)。
次に、ハフマンテーブル復号回路100では、使用回数算出回路10が、文字に割り当てられたビット長をハフマンテーブルから順に取り出し、bl_count[M]、bl[N]、code_fin[N]に値を格納する(ステップ102)。また、最小符号算出回路20が、bl_count[M]に基づいて、code_min[M]を生成する(ステップ103)。更に、割り当て符号算出回路30が、code_min[M]に格納された最小符号のうちbl[N]で指定された最小符号と、code_fin[N]に格納された値とを加算する処理を並列に行うことで、文字に符号が割り当てられた圧縮前ハフマンテーブルデータを生成する(ステップ104)。
その後、ハフマン復号回路300が、圧縮前ハフマンテーブルを用いて、圧縮後データに含まれる符号を、その符号が割り当てられた文字に置き換えることにより、圧縮前データを生成する(ステップ105)。
以上述べたように、本実施の形態では、(1)各ビット長の使用回数の算出、(2)各ビット長における最小符号の算出、(3)符号の割り当て、の3つの手順のうち、手順(1)で各文字の同じビット長が割り当てられたグループにおける順番を決定し、手順(2)で最小符号が算出されると、手順(3)では、その順番と最小符号とを加算するという並列計算可能な構成を採用した。これにより、手順(3)の処理時間を短縮することができた。
また、手順(2)での最小符号の算出も、並列計算回路を用いて行うようにした。これにより、手順(2)の処理時間を短縮することができた。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
100…ハフマンテーブル復号回路、10…使用回数算出回路、20…最小符号算出回路、30…割り当て符号算出回路、200…ハフマンテーブル分離回路、300…ハフマン復号回路

Claims (7)

  1. 複数の文字列の各々に割り当てられた複数のビット長を、当該複数のビット長の各々を有する複数の符号に変換する回路であって、
    前記複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、
    前記記録部により記録された前記文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、
    前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記基準符号生成部により生成された前記複数の基準符号のうち前記記録部により記録された当該各文字列に割り当てられたビット長を有する基準符号と、前記記録部により記録された同じビット長が割り当てられた文字列の中での当該各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、前記複数の符号を生成する割り当て符号生成部と
    を含む、回路。
  2. 前記記録部は、前記複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、当該特定のビット長と同じビット長が割り当てられた文字列の数を更新し、当該特定の文字列に対して、当該特定のビット長と、当該特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持する、請求項1の回路。
  3. 前記基準符号生成部は、複数段の回路を含む並列計算回路であって、各段の回路が、第1のビット長が割り当てられた文字列の数を表すビット列を左に1ビットシフトすることによって得られたビット列と、当該第1のビット長より1つ長い第2のビット長が割り当てられた文字列の数を表すビット列とを加算し、この加算によって得られたビット列を左に1ビットシフトする回路である並列計算回路を用いて、前記複数の基準符号を生成する、請求項1の回路。
  4. 前記基準符号生成部は、所定数のビット長に関する当該所定数の処理であって、ビット長M(Mは自然数)に関する処理が、ビット長Kが割り当てられた文字列の数を表すビット列を左に(M−K)ビットシフトすることによって得られたビット列を、KがMより小さな自然数である場合について足し合わせる処理である当該所定数の処理を、並列に行うことにより、当該所定数の基準符号を生成する、請求項1の回路。
  5. 複数の文字列の各々に割り当てられた複数のビット長を、当該複数のビット長の各々を有する複数の符号に変換する回路であって、
    前記複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、当該特定のビット長と同じビット長が割り当てられた文字列の数を更新し、当該特定の文字列に対して、当該特定のビット長と、当該特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持することにより、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、
    前記複数のビット長を構成する互いに異なるビット長である所定数のビット長に関する当該所定数の処理であって、ビット長M(Mは自然数)に関する処理が、前記記録部により記録されたビット長Kが割り当てられた文字列の数を表すビット列を左に(M−K)ビットシフトすることによって得られたビット列を、KがMより小さな自然数である場合について足し合わせる処理である当該所定数の処理を、並列に行うことにより、同じビット長を有する符号の最小の符号である当該所定数の最小符号を生成する最小符号生成部と、
    前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記最小符号生成部により生成された前記所定数の最小符号のうち前記記録部により記録された当該各文字列に割り当てられたビット長を有する最小符号と、前記記録部により記録された同じビット長が割り当てられた文字列の中での当該各文字列の順番とを加算する処理である複数の処理を、並列に行うことにより、前記複数の符号を生成する割り当て符号生成部と
    を含む、回路。
  6. 複数の文字列の各々に割り当てられた複数のビット長を定義した定義情報と、当該複数のビット長の各々を有する複数の符号を含むデータとからなる符号化データを復号する装置であって、
    前記符号化データから前記定義情報を抽出する抽出部と、
    前記抽出部により抽出された前記定義情報で定義された前記複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、
    前記記録部により記録された前記文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、
    前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記基準符号生成部により生成された前記複数の基準符号のうち前記記録部により記録された当該各文字列に割り当てられたビット長を有する基準符号と、前記記録部により記録された同じビット長が割り当てられた文字列の中での当該各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、前記複数の符号を生成する割り当て符号生成部と、
    前記割り当て符号生成部により生成された前記複数の符号の各符号を、前記複数の文字列のうち当該各符号の元となるビット長が割り当てられた文字列に変換する変換部と
    を含む、装置。
  7. 複数の文字列の各々に割り当てられた複数のビット長を、当該複数のビット長の各々を有する複数の符号に変換する方法であって、
    前記複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録するステップと、
    前記文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成するステップと、
    前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記複数の基準符号のうち当該各文字列に割り当てられたビット長を有する基準符号と、同じビット長が割り当てられた文字列の中での当該各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、前記複数の符号を生成するステップと
    を含む、方法。
JP2009103213A 2009-04-21 2009-04-21 ビット長を符号に変換する回路及び方法 Expired - Fee Related JP4758494B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009103213A JP4758494B2 (ja) 2009-04-21 2009-04-21 ビット長を符号に変換する回路及び方法
US12/753,784 US8018359B2 (en) 2009-04-21 2010-04-02 Conversion of bit lengths into codes

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009103213A JP4758494B2 (ja) 2009-04-21 2009-04-21 ビット長を符号に変換する回路及び方法

Publications (2)

Publication Number Publication Date
JP2010258532A true JP2010258532A (ja) 2010-11-11
JP4758494B2 JP4758494B2 (ja) 2011-08-31

Family

ID=42980608

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009103213A Expired - Fee Related JP4758494B2 (ja) 2009-04-21 2009-04-21 ビット長を符号に変換する回路及び方法

Country Status (2)

Country Link
US (1) US8018359B2 (ja)
JP (1) JP4758494B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012124679A (ja) * 2010-12-07 2012-06-28 Internatl Business Mach Corp <Ibm> 符号化データを復号する装置及び方法
JP2022518666A (ja) * 2019-01-31 2022-03-16 インターナショナル・ビジネス・マシーンズ・コーポレーション データの圧縮/解凍で使用する履歴バッファを指定する圧縮/解凍命令
JP2022518665A (ja) * 2019-01-31 2022-03-16 インターナショナル・ビジネス・マシーンズ・コーポレーション 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2023044846A (ja) 2021-09-21 2023-04-03 キオクシア株式会社 データ伸長装置、データ圧縮装置、及びメモリシステム

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0250667B2 (ja) * 1984-09-27 1990-11-05 Mitsubishi Electric Corp
JPH07106981A (ja) * 1993-10-07 1995-04-21 Fujitsu Ltd 可変長符号デコード回路
JPH07177039A (ja) * 1993-12-20 1995-07-14 Canon Inc ハフマン符号化復号化装置
JPH07184202A (ja) * 1993-12-22 1995-07-21 Kawasaki Steel Corp 画像データ符号化装置
JP2002515201A (ja) * 1996-03-15 2002-05-21 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ディジタル信号符号化方法および装置
JP2002271208A (ja) * 2000-12-15 2002-09-20 Internatl Business Mach Corp <Ibm> ハフマン符号化・復号化法
JP2006222626A (ja) * 2005-02-09 2006-08-24 Olympus Corp 動画像伝送装置および動画像伝送システム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0250667A (ja) 1988-08-12 1990-02-20 Matsushita Electric Works Ltd モニタ付きインターホン装置
JPH07107303A (ja) * 1993-09-30 1995-04-21 Nec Corp ハフマン符号の復号化方法
JP2000261324A (ja) 1999-03-10 2000-09-22 Fuji Film Microdevices Co Ltd ハフマン復号化回路
US6573847B1 (en) * 2002-01-08 2003-06-03 Intel Corporation Multi-table mapping for huffman code decoding

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0250667B2 (ja) * 1984-09-27 1990-11-05 Mitsubishi Electric Corp
JPH07106981A (ja) * 1993-10-07 1995-04-21 Fujitsu Ltd 可変長符号デコード回路
JPH07177039A (ja) * 1993-12-20 1995-07-14 Canon Inc ハフマン符号化復号化装置
JPH07184202A (ja) * 1993-12-22 1995-07-21 Kawasaki Steel Corp 画像データ符号化装置
JP2002515201A (ja) * 1996-03-15 2002-05-21 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ディジタル信号符号化方法および装置
JP2002271208A (ja) * 2000-12-15 2002-09-20 Internatl Business Mach Corp <Ibm> ハフマン符号化・復号化法
JP2006222626A (ja) * 2005-02-09 2006-08-24 Olympus Corp 動画像伝送装置および動画像伝送システム

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012124679A (ja) * 2010-12-07 2012-06-28 Internatl Business Mach Corp <Ibm> 符号化データを復号する装置及び方法
US8947272B2 (en) 2010-12-07 2015-02-03 International Business Machines Corporation Decoding encoded data
JP2022518666A (ja) * 2019-01-31 2022-03-16 インターナショナル・ビジネス・マシーンズ・コーポレーション データの圧縮/解凍で使用する履歴バッファを指定する圧縮/解凍命令
JP2022518665A (ja) * 2019-01-31 2022-03-16 インターナショナル・ビジネス・マシーンズ・コーポレーション 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令
JP7442526B2 (ja) 2019-01-31 2024-03-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令
JP7442529B2 (ja) 2019-01-31 2024-03-04 インターナショナル・ビジネス・マシーンズ・コーポレーション データの圧縮/解凍で使用する履歴バッファを指定する圧縮/解凍命令

Also Published As

Publication number Publication date
US8018359B2 (en) 2011-09-13
US20100265110A1 (en) 2010-10-21
JP4758494B2 (ja) 2011-08-31

Similar Documents

Publication Publication Date Title
KR100894002B1 (ko) 선택적 압축과 복원 및 압축 데이터에 대한 데이터 포맷을위한 장치 및 방법
JP3278297B2 (ja) データ圧縮方法及びデータ復元方法並びにデータ圧縮装置及びデータ復元装置
JP4801776B2 (ja) データ圧縮
KR101049699B1 (ko) 데이터의 압축방법
US10547324B2 (en) Data compression coding method, apparatus therefor, and program therefor
US9094039B2 (en) Efficient deflate decompression
WO2014021837A1 (en) Entropy coding and decoding using polar codes
JP7425526B2 (ja) 動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減
WO2010044100A1 (en) Lossless compression
JP2010136417A (ja) データ圧縮装置、及びデータ復元装置
JP6045123B2 (ja) エンコーダ、デコーダ及び方法
JP6681313B2 (ja) データを符号化するための方法、コンピュータ・プログラムおよびシステム
JP5656593B2 (ja) 符号化データを復号する装置及び方法
JP4758494B2 (ja) ビット長を符号に変換する回路及び方法
Yang et al. Universal lossless data compression with side information by using a conditional MPM grammar transform
Mathpal et al. A research paper on lossless data compression techniques
CN104682966B (zh) 列表数据的无损压缩方法
Hameed et al. A new lossless method of Huffman coding for text data compression and decompression process with FPGA implementation
KR101367811B1 (ko) 데이터 압축/해제장치 및 방법
JP2005521324A (ja) 損失のないデータの圧縮および圧縮解除方法および装置
Mitzenmacher On the hardness of finding optimal multiple preset dictionaries
Kaur et al. Lossless text data compression using modified Huffman Coding-A review
Wang et al. An Entropy Coding Based on Binary Encoding for Mixed-Radix Digits
Mahmood et al. An Efficient Text Database Compression Technique using 6 Bit Character Encoding by Table Look Up
Begum et al. An efficient text compression for massive volume of data

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110405

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110517

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20110517

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110602

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140610

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees