(57)【要約】【課題】複数の文字列の各々に割り当てられた複数のビット長を複数の符号に変換する際の処理時間を短縮する。【解決手段】ハフマンテーブル復号回路において、文字に割り当てられたビット長の入力に応じて、各文字に割り当てられたビット長をｂｌ［Ｎ］に格納し、同じビット長が割り当てられた文字列の中での各文字列の順番をｃｏｄｅ＿ｆｉｎ［Ｎ］に格納する。また、同じビット長が割り当てられた文字の数をｂｌ＿ｃｏｕｎｔ［Ｍ］に格納し、これに基づき、同じビット長を有する最小符号をｃｏｄｅ＿ｍｉｎ［Ｍ］に格納する。これにより、セレクタ３１が、ｃｏｄｅ＿ｍｉｎ［Ｍ］に格納された複数の最小基準のうちｂｌ［Ｎ］で指定された最小符号を取り出し、加算回路３２が、これをｃｏｄｅ＿ｆｉｎ［Ｎ］に格納された値に加算する処理を並列に行い、その結果を文字に割り当てられた符号とする。【選択図】図１０
2010258532.tif 000002
【特許請求の範囲】
【請求項１】
複数の文字列の各々に割り当てられた複数のビット長を、当該複数のビット長の各々を有する複数の符号に変換する回路であって、
前記複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、
前記記録部により記録された前記文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、
前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記基準符号生成部により生成された前記複数の基準符号のうち前記記録部により記録された当該各文字列に割り当てられたビット長を有する基準符号と、前記記録部により記録された同じビット長が割り当てられた文字列の中での当該各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、前記複数の符号を生成する割り当て符号生成部と
を含む、回路。
【請求項２】
前記記録部は、前記複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、当該特定のビット長と同じビット長が割り当てられた文字列の数を更新し、当該特定の文字列に対して、当該特定のビット長と、当該特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持する、請求項１の回路。
【請求項３】
前記基準符号生成部は、複数段の回路を含む並列計算回路であって、各段の回路が、第１のビット長が割り当てられた文字列の数を表すビット列を左に１ビットシフトすることによって得られたビット列と、当該第１のビット長より１つ長い第２のビット長が割り当てられた文字列の数を表すビット列とを加算し、この加算によって得られたビット列を左に１ビットシフトする回路である並列計算回路を用いて、前記複数の基準符号を生成する、請求項１の回路。
【請求項４】
前記基準符号生成部は、所定数のビット長に関する当該所定数の処理であって、ビット長Ｍ（Ｍは自然数）に関する処理が、ビット長Ｋが割り当てられた文字列の数を表すビット列を左に（Ｍ−Ｋ）ビットシフトすることによって得られたビット列を、ＫがＭより小さな自然数である場合について足し合わせる処理である当該所定数の処理を、並列に行うことにより、当該所定数の基準符号を生成する、請求項１の回路。
【請求項５】
複数の文字列の各々に割り当てられた複数のビット長を、当該複数のビット長の各々を有する複数の符号に変換する回路であって、
前記複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、当該特定のビット長と同じビット長が割り当てられた文字列の数を更新し、当該特定の文字列に対して、当該特定のビット長と、当該特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持することにより、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、
前記複数のビット長を構成する互いに異なるビット長である所定数のビット長に関する当該所定数の処理であって、ビット長Ｍ（Ｍは自然数）に関する処理が、前記記録部により記録されたビット長Ｋが割り当てられた文字列の数を表すビット列を左に（Ｍ−Ｋ）ビットシフトすることによって得られたビット列を、ＫがＭより小さな自然数である場合について足し合わせる処理である当該所定数の処理を、並列に行うことにより、同じビット長を有する符号の最小の符号である当該所定数の最小符号を生成する最小符号生成部と、
前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記最小符号生成部により生成された前記所定数の最小符号のうち前記記録部により記録された当該各文字列に割り当てられたビット長を有する最小符号と、前記記録部により記録された同じビット長が割り当てられた文字列の中での当該各文字列の順番とを加算する処理である複数の処理を、並列に行うことにより、前記複数の符号を生成する割り当て符号生成部と
を含む、回路。
【請求項６】
複数の文字列の各々に割り当てられた複数のビット長を定義した定義情報と、当該複数のビット長の各々を有する複数の符号を含むデータとからなる符号化データを復号する装置であって、
前記符号化データから前記定義情報を抽出する抽出部と、
前記抽出部により抽出された前記定義情報で定義された前記複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、
前記記録部により記録された前記文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、
前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記基準符号生成部により生成された前記複数の基準符号のうち前記記録部により記録された当該各文字列に割り当てられたビット長を有する基準符号と、前記記録部により記録された同じビット長が割り当てられた文字列の中での当該各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、前記複数の符号を生成する割り当て符号生成部と、
前記割り当て符号生成部により生成された前記複数の符号の各符号を、前記複数の文字列のうち当該各符号の元となるビット長が割り当てられた文字列に変換する変換部と
を含む、装置。
【請求項７】
複数の文字列の各々に割り当てられた複数のビット長を、当該複数のビット長の各々を有する複数の符号に変換する方法であって、
前記複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録するステップと、
前記文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成するステップと、
前記複数の文字列に関する複数の処理であって、各文字列に関する処理が、前記複数の基準符号のうち当該各文字列に割り当てられたビット長を有する基準符号と、同じビット長が割り当てられた文字列の中での当該各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、前記複数の符号を生成するステップと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビット長を符号に変換する回路及び方法に関する。特に、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、その複数のビット長の各々を有する複数の符号に変換する回路及び方法に関する。
【背景技術】
【０００２】
ｄｅｆｌａｔｅ圧縮（ＲＦＣ１９５１）は、現在コンピュータで広く用いられているデータ圧縮形式であるＺＬＩＢ（ＲＦＣ１９５０）、ＧＺＩＰ（ＲＦＣ１９５２）のベースとなる圧縮方法であり、ハフマン符号化という符号化技術を用いてデータを圧縮する。ハフマン符号化では、データ内に繰り返し現れるバイト単位の文字に、出現頻度に応じて可変長の符号を割り当てる。この際、出現頻度の高い文字には短いビット長の符号を、出現頻度の低い文字には長いビット長の符号を割り当てることで、より効率的な符号化を行う。
そのため、ハフマン符号化では、各文字に割り当てた符号を保持するハフマンテーブルを作成し、圧縮データに付加しておく。そして、圧縮データの復号は、このハフマンテーブルを参照して行う。
【０００３】
ところが、このように圧縮データにハフマンテーブルを付加する場合、このハフマンテーブルのサイズが大きいと圧縮率が悪くなってしまう。それを改善するため、ｄｅｆｌａｔｅ圧縮（ＲＦＣ１９５１）では、このハフマンテーブル自体も圧縮する。
具体的には、ｄｅｆｌａｔｅ圧縮では、ハフマンテーブルにおいて、各文字に割り当てた符号を保持するのではなく、各文字に割り当てた符号の長さ（ビット長）を保持する。同じビット長のグループの中での符号の割り振り方を、ＡＳＣＩＩコード順（対象がアルファベットであればアルファベット順）と定義することにより、ビット長から一意に符号を決定することが可能である。例えば、Ａ，Ｃ，Ｄに割り当てられたビット長が何れも「３」であった場合、Ａの符号が「１００」と決まれば、Ｃ，Ｄは、それぞれ順番に「１」を加算することにより、「１０１」、「１１０」と決定することができる。
【０００４】
ここで、ハフマンテーブルを用いて符号化されたデータの復号に関する技術としては、従来、幾つかの提案がなされている（例えば、特許文献１、２参照）。
特許文献１では、復号化対象の符号が標準のハフマンテーブル又は非標準のハフマンテーブルの何れを使用して符号化されたものかを判定し、標準のハフマンテーブルを使用して符号化されたものであると判定された場合には、標準復号化回路にて標準のハフマンテーブルを使用して復号化し、非標準のハフマンテーブルを使用して符号化されたものであると判定された場合には、ソフトウェア処理手段にて非標準のハフマンテーブルを使用して復号化している。
特許文献２では、圧縮したデータストリーム中の有効なハフマン符号の長さに対して試験を行なうと共に、試験基準に対応するオフセットを使うことにより、ハフマン復号化の実行時間を短縮している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−２６１３２４号公報
【特許文献２】特開２００２−２７１２０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上記のような方法で圧縮したハフマンテーブルを復号するには、（１）各ビット長の使用回数の算出、（２）各ビット長における最小符号の算出、（３）符号の割り当て、の３つの手順を踏む必要がある。
しかしながら、これらの手順をハードウェアで実現しようとした場合、手順（２）においてはビット長の数だけ、手順（３）においては符号の数だけ、繰り返し処理を行わなければならない。そのため、符号の数が多い場合には処理時間が増大してしまう。
尚、特許文献１、２の技術は、各文字にビット長を割り当てたハフマンテーブルを作成し、ビット長に基づいて各文字を復号する場合のこのような問題点に着目したものではない。
【０００７】
本発明の目的は、複数の文字列の各々に割り当てられた複数のビット長を複数の符号に変換する際の処理時間を短縮することにある。
【課題を解決するための手段】
【０００８】
かかる目的のもと、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、複数のビット長の各々を有する複数の符号に変換する回路であって、複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、記録部により記録された文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、複数の文字列に関する複数の処理であって、各文字列に関する処理が、基準符号生成部により生成された複数の基準符号のうち記録部により記録された各文字列に割り当てられたビット長を有する基準符号と、記録部により記録された同じビット長が割り当てられた文字列の中での各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、複数の符号を生成する割り当て符号生成部とを含む、回路を提供する。
【０００９】
ここで、記録部は、複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、特定のビット長と同じビット長が割り当てられた文字列の数を更新し、特定の文字列に対して、特定のビット長と、特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持する、ものであってよい。
また、基準符号生成部は、複数段の回路を含む並列計算回路であって、各段の回路が、第１のビット長が割り当てられた文字列の数を表すビット列を左に１ビットシフトすることによって得られたビット列と、第１のビット長より１つ長い第２のビット長が割り当てられた文字列の数を表すビット列とを加算し、この加算によって得られたビット列を左に１ビットシフトする回路である並列計算回路を用いて、複数の基準符号を生成する、ものであってよい。
更に、基準符号生成部は、所定数のビット長に関する所定数の処理であって、ビット長Ｍ（Ｍは自然数）に関する処理が、ビット長Ｋが割り当てられた文字列の数を表すビット列を左に（Ｍ−Ｋ）ビットシフトすることによって得られたビット列を、ＫがＭより小さな自然数である場合について足し合わせる処理である所定数の処理を、並列に行うことにより、所定数の基準符号を生成する、ものであってよい。
【００１０】
また、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、複数のビット長の各々を有する複数の符号に変換する回路であって、複数のビット長のうち特定の文字列に割り当てられた特定のビット長の入力に応じて、特定のビット長と同じビット長が割り当てられた文字列の数を更新し、特定の文字列に対して、特定のビット長と、特定のビット長と同じビット長が割り当てられた文字列の更新前又は更新後の数とを保持することにより、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、複数のビット長を構成する互いに異なるビット長である所定数のビット長に関する所定数の処理であって、ビット長Ｍ（Ｍは自然数）に関する処理が、記録部により記録されたビット長Ｋが割り当てられた文字列の数を表すビット列を左に（Ｍ−Ｋ）ビットシフトすることによって得られたビット列を、ＫがＭより小さな自然数である場合について足し合わせる処理である所定数の処理を、並列に行うことにより、同じビット長を有する符号の最小の符号である所定数の最小符号を生成する最小符号生成部と、複数の文字列に関する複数の処理であって、各文字列に関する処理が、最小符号生成部により生成された所定数の最小符号のうち記録部により記録された各文字列に割り当てられたビット長を有する最小符号と、記録部により記録された同じビット長が割り当てられた文字列の中での各文字列の順番とを加算する処理である複数の処理を、並列に行うことにより、複数の符号を生成する割り当て符号生成部とを含む、回路も提供する。
【００１１】
更に、本発明は、複数の文字列の各々に割り当てられた複数のビット長を定義した定義情報と、複数のビット長の各々を有する複数の符号を含むデータとからなる符号化データを復号する装置であって、符号化データから定義情報を抽出する抽出部と、抽出部により抽出された定義情報で定義された複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録する記録部と、記録部により記録された文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成する基準符号生成部と、複数の文字列に関する複数の処理であって、各文字列に関する処理が、基準符号生成部により生成された複数の基準符号のうち記録部により記録された各文字列に割り当てられたビット長を有する基準符号と、記録部により記録された同じビット長が割り当てられた文字列の中での各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、複数の符号を生成する割り当て符号生成部と、割り当て符号生成部により生成された複数の符号の各符号を、複数の文字列のうち各符号の元となるビット長が割り当てられた文字列に変換する変換部とを含む、装置も提供する。
【００１２】
更にまた、本発明は、複数の文字列の各々に割り当てられた複数のビット長を、複数のビット長の各々を有する複数の符号に変換する方法であって、複数のビット長の入力に応じて、同じビット長が割り当てられた文字列の数と、各文字列に割り当てられたビット長と、同じビット長が割り当てられた文字列の中での各文字列の順番とを記録するステップと、文字列の数に基づいて、同じビット長を有する符号の基準となる符号である複数の基準符号を生成するステップと、複数の文字列に関する複数の処理であって、各文字列に関する処理が、複数の基準符号のうち各文字列に割り当てられたビット長を有する基準符号と、同じビット長が割り当てられた文字列の中での各文字列の順番とに基づく処理である複数の処理を、並列に行うことにより、複数の符号を生成するステップとを含む、方法も提供する。
【発明の効果】
【００１３】
本発明によれば、複数の文字列の各々に割り当てられた複数のビット長を複数の符号に変換する際の処理時間を短縮することができる。
【図面の簡単な説明】
【００１４】
【図１】ハフマンテーブルの圧縮について示した図である。
【図２】本発明の実施の形態が適用されるハフマン復号装置の構成例を示した図である。
【図３】一般的なハフマンテーブル復号回路の使用回数算出回路の構成例を示した図である。
【図４】一般的なハフマンテーブル復号回路の最小符号算出回路の構成例等を示した図である。
【図５】一般的なハフマンテーブル復号回路の割り当て符号算出回路について説明するための図である。
【図６】本発明の実施の形態におけるハフマンテーブル復号回路の使用回数算出回路の構成例を示した図である。
【図７】本発明の実施の形態におけるハフマンテーブル復号回路の最小符号算出回路の構成例等を示した図である。
【図８】本発明の実施の形態におけるハフマンテーブル復号回路の最小符号算出回路のオプティマイズ方法について示した図である。
【図９】本発明の実施の形態におけるハフマンテーブル復号回路の割り当て符号算出回路について説明するための図である。
【図１０】本発明の実施の形態におけるハフマンテーブル復号回路の割り当て符号算出回路の構成例を示した図である。
【図１１】本発明の実施の形態におけるハフマン復号装置の動作例を示したフローチャートである。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
［ｄｅｆｌａｔｅ圧縮におけるハフマンテーブルの圧縮方法］
図１は、本実施の形態で用いるハフマンテーブルの具体例について、その圧縮方法を示した図である。
図において、太矢印の左側は圧縮前のハフマンテーブルを、太矢印の右側は圧縮後のハフマンテーブルを示す。即ち、圧縮前のハフマンテーブルでは、各文字に対して符号を割り当てているが、圧縮後のハフマンテーブルでは、各文字に対して、符号の代わりに符号のビット長を割り当てている。具体的には、Ａ，Ｂ，Ｃ，Ｄ，Ｅに対して、「０１０」、「０１１」、「１００」、「１０１」、「１１０」の代わりに「３」を割り当て、Ｆに対して、「００」の代わりに「２」を割り当て、Ｇ，Ｈに対して、「１１１０」、「１１１１」の代わりに「４」を割り当てている。尚、一般には、文字列に対して符号やビット長を割り当てることも可能であるが、本実施の形態では、文字に対して符号やビット長を割り当てるものとして説明する。
【００１６】
［ハフマンテーブル復号回路の構成］
図２は、本実施の形態におけるハフマン復号装置の構成例を示した図である。
このハフマン復号装置としては、例えば、圧縮されたデータを解凍しウイルスチェック等を行って再び圧縮する処理をすばやく行うことが要求されるルータ等の通信機器が例示されるが、ＰＣ（Personal Computer）等の一般的なコンピュータであってもよい。
図示するように、ハフマン復号装置は、ハフマンテーブル復号回路１００と、ハフマンテーブル分離回路２００と、ハフマン復号回路３００とを含む。
【００１７】
このうち、ハフマンテーブル復号回路１００は、圧縮後のハフマンテーブルのデータ（以下、「圧縮後ハフマンテーブルデータ」という）がハフマンテーブル分離回路２００から入力されると、これを復号して、圧縮前のハフマンテーブルのデータ（以下、「圧縮前ハフマンテーブルデータ」という）を生成し、ハフマン復号回路３００に出力するものである。ここで、圧縮後ハフマンテーブルデータとは、図１に示した圧縮後のハフマンテーブルに含まれるビット長のみを並べたデータをいう。但し、ビット長の並び順は、ハフマンテーブルにおいて文字がＡＳＣＩＩコード順に並べられている場合の順番であるとする。また、圧縮前ハフマンテーブルデータとは、図１に示した圧縮前のハフマンテーブルに含まれる符号のみを並べたデータをいう。但し、符号の並び順は、ハフマンテーブルにおいて文字がＡＳＣＩＩコード順に並べられている場合の順番であるとする。
尚、本実施の形態では、「文字」と称しているが、これは数字や記号を除外する趣旨ではない。但し、以下では、簡略化のため、文字としてアルファベットを例にとり説明する。
【００１８】
図示するように、本実施の形態におけるハフマンテーブル復号回路１００は、使用回数算出回路１０と、最小符号算出回路２０と、割り当て符号算出回路３０とを有する。
使用回数算出回路１０は、圧縮後ハフマンテーブルデータが入力されると、各ビット長の使用回数、つまり、ビット長ごとのアルファベットの数を算出する。
最小符号算出回路２０は、使用回数算出回路１０により算出された各ビット長の使用回数に基づいて、各ビット長に割り当てられた符号のうちの最小の符号である最小符号を決定する。
割り当て符号算出回路３０は、最小符号算出回路２０により決定された最小符号に、各符号のビット長のグループごとの順番を加算して、最終的な符号を文字に割り振る。
【００１９】
また、ハフマンテーブル分離回路２００は、圧縮後ハフマンテーブルデータと、データに含まれる文字をその文字に割り当てられた符号に置き換えることによって圧縮した圧縮後データとからなる符号化データを受信すると、この符号化データを圧縮後ハフマンテーブルデータと圧縮後データとに分離し、前者はハフマンテーブル復号回路１００に、後者はハフマン復号回路３００にそれぞれ出力する。
更に、ハフマン復号回路３００は、ハフマンテーブル分離回路２００から入力された圧縮後データに含まれる符号を、ハフマンテーブル復号回路１００から入力された圧縮前ハフマンテーブルデータにおいてその符号が割り当てられた文字に置き換えることによって圧縮前データに戻し、出力する。
【００２０】
以下、これらの３つの回路の詳細な動作について説明するが、まず、これらの３つの回路の一般的な動作を「一般的なハフマンテーブルの復号方法」として説明し、次に、これらの３つの回路の本実施の形態における動作を「本実施の形態におけるハフマンテーブルの復号方法」として説明する。尚、以降の説明では、図１の例に従い、圧縮後ハフマンテーブルデータ「３，３，３，３，３，２，４，４」がハフマンテーブル復号回路１００に入力されるものとする。また、ＲＦＣ１９５１では、文字は最大２８６個定義されており、ビット長は最大１５まで定義されているが、本実施の形態では、説明の簡略化のため、文字はアルファベット８文字のみを示し、ビット長は最大４ビットまでを示す。
【００２１】
［一般的なハフマンテーブルの復号方法］
（使用回数算出回路１０）
図３は、一般的な使用回数算出回路１０について示した図である。
図には、使用回数算出回路１０に対して、圧縮後ハフマンテーブルデータ「３，３，３，３，３，２，４，４」が入力されていることが示されている。この場合、圧縮後ハフマンテーブルデータにおける１つのビット長が１クロックで入力されるものとする。すると、セレクタ１１が、入力されたビット長ごとに、そのビット長に対応するｂｌ＿ｃｏｕｎｔ［Ｍ］にその時点で格納されていた数を取り出す。そして、カウンタ１２が、取り出された数に「１」を加算した数を元のｂｌ＿ｃｏｕｎｔ［Ｍ］に格納する。
これにより、入力されたビット長ごとに、その使用回数がｂｌ＿ｃｏｕｎｔ［Ｍ］に格納される。図の例では、全てのデータが入力された時点で、ｂｌ＿ｃｏｕｎｔ［２］、ｂｌ＿ｃｏｕｎｔ［３］、ｂｌ＿ｃｏｕｎｔ［４］に「１」、「５」、「２」が格納される。
【００２２】
（最小符号算出回路２０）
図４は、一般的な最小符号算出回路２０について説明するための図である。
この最小符号算出回路２０では、（ａ）に示す式により、各ビット長の最小符号（ｃｏｄｅ＿ｍｉｎ）が決定される。尚、この式は、ＲＦＣ１９５１に定義されている。詳細は省略するが、「code = (code + bl_count[bits-1]) << 1」の計算を行えばよい。
【００２３】
そして、この式によってｃｏｄｅ＿ｍｉｎを算出する回路は、（ｂ）に示すように、加算回路２１とシフト回路２２とフリップフロップ２３とセレクタ２４とを組み合わせることにより簡単に構成できる。つまり、Ｍ＝１の段階では、セレクタ２４が、ｃｏｄｅ「０」を選択し、加算回路２１が、これとｂｌ＿ｃｏｕｎｔ［０］を加算し、シフト回路２２がその結果を左に１ビットシフトし、フリップフロップ２３がその結果を保持し、保持された結果がｃｏｄｅ＿ｍｉｎ［１］として出力される。次に、Ｍ＝２の段階では、セレクタ２４が、フリップフロップ２３に保持された結果を選択し、加算回路２１が、これとｂｌ＿ｃｏｕｎｔ［１］を加算し、シフト回路２２がその結果を左に１ビットシフトし、フリップフロップ２３がその結果を保持し、保持された結果がｃｏｄｅ＿ｍｉｎ［２］として出力される。このように、ｂｌ＿ｃｏｕｎｔ［Ｍ−１］を順次投入して、ｃｏｄｅ＿ｍｉｎ［Ｍ］が順次出力される回路になっている。
【００２４】
尚、本実施の形態で用いる例では、（ａ）に示した式より、各ビット長の最小符号ｃｏｄｅ＿ｍｉｎ［Ｍ］は（ｃ）に示したようになる。この場合、最大ビット長をＢとすると、処理時間はＯ（Ｂ）となる。この例では、Ｂ＝４（ｃｌｏｃｋ）であるが、ＲＦＣ１９５１において、最大のビット長は「１５」と定義されているため、最大値は、Ｂ＝１５（ｃｌｏｃｋ）である。
【００２５】
（割り当て符号算出回路３０）
図５は、各文字に割り振られたビット長に加え、各文字に割り振られた符号を示した図である。
最小符号算出回路２０により各ビット長の最初の符号が決定されたので、割り当て符号算出回路３０は、ビット長のグループごとにアルファベット順に「１」を加算しながら符号を割り振る。この場合、処理時間はＯ（Ａ）となる。この例では、Ａ＝８（ｃｌｏｃｋ）であるが、２８６個の文字全てを対象とする場合、Ａ＝２８６（ｃｌｏｃｋ）となる。
【００２６】
ここで、この一般的なハフマンテーブルの復号方法のスループットを考える。
まず、使用回数算出回路１０は、ハフマンテーブルのデータをそのまま流せば完了する。ところが、全てのデータを流し終えた後、最小符号算出回路２０で最大１５クロック、割り当て符号算出回路３０で最大２８６クロックかかるため、合計で最大３０１クロック後でなければ、ハフマンテーブルの復号が完了しない。
ハフマンテーブルを復号し、復号したハフマンテーブルを用いて圧縮データを復号し、この圧縮データの復号と並行して、次のハフマンテーブルを復号する、というパイプライン処理をスムーズに行うことができれば、圧縮データの解凍もスムーズに行うことができる。しかしながら、全てのデータを流し終えた後、圧縮前のハフマンテーブルを得るまでに最大３０１クロックもかかっていたのでは、パイプライン処理はスムーズに行えない。即ち、最小符号算出回路２０及び割り当て符号算出回路３０の処理が、パイプライン処理を行う上でボトルネックとなっている。
【００２７】
［本実施の形態におけるハフマンテーブルの復号方法］
（使用回数算出回路１０）
図６は、本実施の形態における使用回数算出回路１０について示した図である。
本実施の形態では、図３に示したようにビット長ごとのアルファベットの数を数えるだけではなく、その時点でｂｌ＿ｃｏｕｎｔ［Ｍ］に格納されていた値を、同時にハフマンテーブルに記録する。つまり、セレクタ１１が、入力されたビット長ごとに、そのビット長に対応するｂｌ＿ｃｏｕｎｔ［Ｍ］にその時点で格納されていた値を取り出す。そして、カウンタ１２が、取り出された値に「１」を加算した値を元のｂｌ＿ｃｏｕｎｔ［Ｍ］に格納するが、その際、セレクタ１１によって取り出された値は、入力されたビット長に対応する文字に対するｃｏｄｅ＿ｆｉｎ［Ｎ］にも格納される。つまり、図３の回路に対して、各文字の同じビット長における順番をハフマンテーブルに書き込む回路を追加している。
【００２８】
これにより、ビット長のグループごとのアルファベット順の順番が一時的にｃｏｄｅ＿ｆｉｎ［Ｎ］に格納されることになる。図には、２進数の符号を示しているが、１０進数に置き換えて説明すると、ビット長が「２」のグループについては、ｃｏｄｅ＿ｆｉｎ［６］に「０」が格納され、ビット長が「３」のグループについては、ｃｏｄｅ＿ｆｉｎ［１］、ｃｏｄｅ＿ｆｉｎ［２］、ｃｏｄｅ＿ｆｉｎ［３］、ｃｏｄｅ＿ｆｉｎ［４］、ｃｏｄｅ＿ｆｉｎ［５］に「０」、「１」、「２」、「３」、「４」が格納され、ビット長が「４」のグループについては、ｃｏｄｅ＿ｆｉｎ［７］、ｃｏｄｅ＿ｆｉｎ［８］に「０」、「１」が格納される。
【００２９】
また、本実施の形態では、アルファベットごとのビット長をｂｌ［Ｎ］に格納する。
尚、ｂｌ＿ｃｏｕｎｔ［Ｍ］に格納された値は、同じビット長が割り当てられた文字列の数の一例であり、ｂｌ［Ｎ］に格納された値は、各文字列に割り当てられたビット長の一例であり、この時点でｃｏｄｅ＿ｆｉｎ［Ｎ］に格納された値は、同じビット長が割り当てられた文字列の中での各文字列の順番の一例である。また、本実施の形態では、これらの情報を記録する記録部の一例として、使用回数算出回路１０を設けている。
【００３０】
（最小符号算出回路２０）
図７は、本実施の形態における最小符号算出回路２０について説明するための図である。
この最小符号算出回路２０でも、図４（ａ）に示す式により、各ビット長の最小符号（ｃｏｄｅ＿ｍｉｎ）が決定される。この最小符号（ｃｏｄｅ＿ｍｉｎ）は、図４（ｃ）に示したものと同様であるが、再度、図７（ａ）に示す。
【００３１】
但し、本実施の形態では、図４とは異なり、最小符号（ｃｏｄｅ＿ｍｉｎ）を並列計算回路によって算出する。
図７（ｂ）に、並列計算回路の一例を示す。この並列計算回路の第１段の回路では、シフト回路２２−１が、ｂｌ＿ｃｏｕｎｔ［０］を左に１ビットシフトすることによりｃｏｄｅ＿ｍｉｎ［１］を算出し、このｃｏｄｅ＿ｍｉｎ［１］がフリップフロップに保持されることなくそのまま加算回路２１−２に入力される。また、第２段の回路では、加算回路２１−２が、ｃｏｄｅ＿ｍｉｎ［１］とｂｌ＿ｃｏｕｎｔ［１］を加算し、シフト回路２２−２が、その結果を左に１ビットシフトすることによりｃｏｄｅ＿ｍｉｎ［２］を算出し、このｃｏｄｅ＿ｍｉｎ［２］がフリップフロップに保持されることなくそのまま次の段の加算回路に入力される。以降、同様の計算を繰り返し、第１５段の回路では、加算回路２１−１５が、ｃｏｄｅ＿ｍｉｎ［１４］とｂｌ＿ｃｏｕｎｔ［１４］を加算し、シフト回路２２−１５が、その結果を左に１ビットシフトすることによりｃｏｄｅ＿ｍｉｎ［１５］を算出する。そして、この並列計算回路では、各段の回路の算出結果が１５段の回路を流れるのが十分に速ければ、全ての最小符号を１クロックで計算することも可能となる。
【００３２】
更に、この回路は比較的簡単な回路であるので、十分オプティマイズすれば、全ての符号をより確実に１クロックで算出することができるようになる。
そこで、この場合のオプティマイズ方法について説明する。
図７（ｂ）の回路におけるクリティカルパス（最大遅延）はｃｏｄｅ＿ｍｉｎ［１５］である。そこで、ｃｏｄｅ＿ｍｉｎ［１５］の計算を最適化する。
図８（ａ）は、図４（ａ）の計算式によるｃｏｄｅ＿ｍｉｎ［１５］の算出過程を示した図である。ここで、ＢＫは、ｂｌ＿ｃｏｕｎｔ［Ｋ］の各ビットの値を示し、Ｃ１５は、ｃｏｄｅ＿ｍｉｎ［１５］の各ビットの値を示す。各ビットの値を全て同じ記号ＢＫ、Ｃ１５で示すが、これは各ビットの値が等しいことを意味するものではない。図から分かるように、ｃｏｄｅ＿ｍｉｎ［１５］は、ｂｌ＿ｃｏｕｎｔ［Ｋ］を左に（１５−Ｋ）ビットシフトしたものを足し合わせることで求められる（Ｋ＝１，２，３，…，１４）。
【００３３】
同様に、ｃｏｄｅ＿ｍｉｎ［１４］は、ｂｌ＿ｃｏｕｎｔ［Ｋ］を左に（１４−Ｋ）ビットシフトしたものを足し合わせることで求められ（Ｋ＝１，２，３，…，１３）、ｃｏｄｅ＿ｍｉｎ［１３］は、ｂｌ＿ｃｏｕｎｔ［Ｋ］を左に（１３−Ｋ）ビットシフトしたものを足し合わせることで求められる（Ｋ＝１，２，３，…，１２）。即ち、一般的には、ｃｏｄｅ＿ｍｉｎ［Ｍ］は、ｂｌ＿ｃｏｕｎｔ［Ｋ］を左に（Ｍ−Ｋ）ビットシフトしたものを足し合わせることで求められる（Ｋ＝１，…，Ｍ−１；Ｍ＝２，…，１５）。従って、ｃｏｄｅ＿ｍｉｎ［Ｍ］は、並列に計算することが可能である。
【００３４】
ところで、ＲＦＣ１９５１に定義されている文字の最大値は２８６であるため、ｂｌ＿ｃｏｕｎｔ［Ｍ］に格納される値の最大値は２８６となる。つまり、図８（ａ）の格段は９ビットまでしか有効ではない。
図８（ｂ）は、このことを踏まえて図８（ａ）を書き換えた図である。このような加算を行う加算回路は、十分１クロックで処理を完了できる回路規模である。
【００３５】
尚、ｃｏｄｅ＿ｍｉｎ［Ｍ］に格納された値、つまり、最小符号は、同じビット長を有する符号の基準となる符号である基準符号の一例である。また、本実施の形態では、基準符号を生成する基準符号生成部の一例として、最小符号算出回路２０を設けている。
【００３６】
（割り当て符号算出回路３０）
図９は、各文字に割り振られたビット長に加え、各文字に割り振られる符号の算出式と、その算出式によって算出された符号とを示した図である。
即ち、本実施の形態では、使用回数算出回路１０により、ハフマンテーブル内のｃｏｄｅ＿ｆｉｎ［Ｎ］にアルファベットごとの同じビット長における順番が既に格納されている。そこで、割り当て符号算出回路３０は、このｃｏｄｅ＿ｆｉｎ［Ｎ］に対して、計算式の欄に示すように、最小符号算出回路２０により算出されたビット長に応じた最小符号を加算する。
【００３７】
図１０に、このような処理を並列に行う並列加算回路の一例を示す。
この並列加算回路では、セレクタ３１−１が、ｂｌ［１］に格納されたビット長「３」に対応する最小符号ｃｏｄｅ＿ｍｉｎ［３］に格納された値「０１０」を取り出す。そして、加算回路３２−１が、ｃｏｄｅ＿ｆｉｎ［１］に格納された値「０００」に対して、最小符号ｃｏｄｅ＿ｍｉｎ［３］に格納された値「０１０」を加算し、ハフマンテーブルにおける１番目の文字「Ａ」に割り当てる符号とする。
また、セレクタ３１−２が、ｂｌ［２］に格納されたビット長「３」に対応する最小符号ｃｏｄｅ＿ｍｉｎ［３］に格納された値「０１０」を取り出す。そして、加算回路３２−２が、ｃｏｄｅ＿ｆｉｎ［２］に格納された値「００１」に対して、最小符号ｃｏｄｅ＿ｍｉｎ［３］に格納された値「０１０」を加算し、ハフマンテーブルにおける２番目の文字「Ｂ」に割り当てる符号とする。
更に、セレクタ３１−３が、ｂｌ［３］に格納されたビット長「３」に対応する最小符号ｃｏｄｅ＿ｍｉｎ［３］に格納された値「０１０」を取り出す。そして、加算回路３２−３が、ｃｏｄｅ＿ｆｉｎ［３］に格納された値「０１０」に対して、最小符号ｃｏｄｅ＿ｍｉｎ［３］に格納された値「０１０」を加算し、ハフマンテーブルにおける３番目の文字「Ｃ」に割り当てる符号とする。
【００３８】
また、セレクタ３１−６が、ｂｌ［６］に格納されたビット長「２」に対応する最小符号ｃｏｄｅ＿ｍｉｎ［２］に格納された値「００」を取り出す。そして、加算回路３２−６が、ｃｏｄｅ＿ｆｉｎ［６］に格納された値「００」に対して、最小符号ｃｏｄｅ＿ｍｉｎ［２］に格納された値「００」を加算し、ハフマンテーブルにおける６番目の文字「Ｆ」に割り当てる符号とする。
更に、セレクタ３１−７が、ｂｌ［７］に格納されたビット長「４」に対応する最小符号ｃｏｄｅ＿ｍｉｎ［４］に格納された値「１１１０」を取り出す。そして、加算回路３２−７が、ｃｏｄｅ＿ｆｉｎ［７］に格納された値「００００」に対して、最小符号ｃｏｄｅ＿ｍｉｎ［４］に格納された値「１１１０」を加算し、ハフマンテーブルにおける７番目の文字「Ｇ」に割り当てる符号とする。
このように、図９で説明した計算の全てを並列加算回路で行うことで、１クロックで処理が完了する。
【００３９】
尚、この時点でｃｏｄｅ＿ｆｉｎ［Ｎ］に格納された値は、複数の符号の一例である。また、本実施の形態では、複数の符号を生成する割り当て符号生成部の一例として、割り当て符号算出回路３０を設けている。
【００４０】
ここで、本実施の形態におけるハフマンテーブルの復号方法のスループットを考える。
まず、使用回数算出回路１０は、ハフマンテーブルのデータをそのまま流せば完了する。全てのデータを流し終えた後、最小符号算出回路２０、割り当て符号算出回路３０とも、１クロックで処理可能であるため、合計２クロック後には、ハフマンテーブルが完成する。従って、パイプライン処理をスムーズに行うことが可能となる。
【００４１】
最後に、本実施の形態におけるハフマン復号装置の動作の流れについて説明する。
図１１は、このときの動作の流れを示したフローチャートである。
図示するように、本実施の形態におけるハフマン復号装置では、ハフマンテーブル分離回路２００が、圧縮後ハフマンテーブルデータと圧縮後データとからなる符号化データを受信すると、これらを分離する（ステップ１０１）。
【００４２】
次に、ハフマンテーブル復号回路１００では、使用回数算出回路１０が、文字に割り当てられたビット長をハフマンテーブルから順に取り出し、ｂｌ＿ｃｏｕｎｔ［Ｍ］、ｂｌ［Ｎ］、ｃｏｄｅ＿ｆｉｎ［Ｎ］に値を格納する（ステップ１０２）。また、最小符号算出回路２０が、ｂｌ＿ｃｏｕｎｔ［Ｍ］に基づいて、ｃｏｄｅ＿ｍｉｎ［Ｍ］を生成する（ステップ１０３）。更に、割り当て符号算出回路３０が、ｃｏｄｅ＿ｍｉｎ［Ｍ］に格納された最小符号のうちｂｌ［Ｎ］で指定された最小符号と、ｃｏｄｅ＿ｆｉｎ［Ｎ］に格納された値とを加算する処理を並列に行うことで、文字に符号が割り当てられた圧縮前ハフマンテーブルデータを生成する（ステップ１０４）。
【００４３】
その後、ハフマン復号回路３００が、圧縮前ハフマンテーブルを用いて、圧縮後データに含まれる符号を、その符号が割り当てられた文字に置き換えることにより、圧縮前データを生成する（ステップ１０５）。
【００４４】
以上述べたように、本実施の形態では、（１）各ビット長の使用回数の算出、（２）各ビット長における最小符号の算出、（３）符号の割り当て、の３つの手順のうち、手順（１）で各文字の同じビット長が割り当てられたグループにおける順番を決定し、手順（２）で最小符号が算出されると、手順（３）では、その順番と最小符号とを加算するという並列計算可能な構成を採用した。これにより、手順（３）の処理時間を短縮することができた。
また、手順（２）での最小符号の算出も、並列計算回路を用いて行うようにした。これにより、手順（２）の処理時間を短縮することができた。
【００４５】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００４６】
１００…ハフマンテーブル復号回路、１０…使用回数算出回路、２０…最小符号算出回路、３０…割り当て符号算出回路、２００…ハフマンテーブル分離回路、３００…ハフマン復号回路
【図１】
2010258532.tif 000003
【図２】
2010258532.tif 000004
【図３】
2010258532.tif 000005
【図４】
2010258532.tif 000006
【図５】
2010258532.tif 000007
【図６】
2010258532.tif 000008
【図７】
2010258532.tif 000009
【図８】
2010258532.tif 000010
【図９】
2010258532.tif 000011
【図１０】
2010258532.tif 000012
【図１１】
2010258532.tif 000013