JP2023132713A - データ伸張装置、メモリシステム、およびデータ伸張方法 - Google Patents
データ伸張装置、メモリシステム、およびデータ伸張方法 Download PDFInfo
- Publication number
- JP2023132713A JP2023132713A JP2022038199A JP2022038199A JP2023132713A JP 2023132713 A JP2023132713 A JP 2023132713A JP 2022038199 A JP2022038199 A JP 2022038199A JP 2022038199 A JP2022038199 A JP 2022038199A JP 2023132713 A JP2023132713 A JP 2023132713A
- Authority
- JP
- Japan
- Prior art keywords
- code
- length
- dictionary
- symbol
- prefix
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 27
- 238000004364 calculation method Methods 0.000 claims abstract description 8
- 230000006837 decompression Effects 0.000 claims description 35
- 238000012545 processing Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 16
- 230000000052 comparative effect Effects 0.000 description 14
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000012937 correction Methods 0.000 description 6
- 238000007726 management method Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 230000010365 information processing Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000013144 data compression Methods 0.000 description 2
- 238000013523 data management Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/405—Tree adaptation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【課題】 復号のスループットを向上できるデータ伸張装置を実現する。【解決手段】 実施形態によれば、データ伸張装置は、圧縮データに含まれる符号をシンボルに復号する。データ伸張装置は、第1符号長生成部と、第2符号長生成部とを具備する。第1符号長生成部は、前記圧縮データに含まれる第1符号の第1符号長を演算により生成する。第2符号長生成部は、前記圧縮データに含まれる前記第1符号に後続する第2符号の第2符号長を、前記第1符号と、前記第1符号に関連付けられた前記第2符号長とを少なくとも示すテーブルを用いて生成する。【選択図】図8
Description
本発明の実施形態は、データ伸張装置、メモリシステム、およびデータ伸張方法に関する。
データを圧縮して圧縮データ(圧縮ストリーム)を生成する圧縮方式として、RFC1951に定められたDEFLATE規格が知られている。DEFLATE規格では、辞書式符号化の結果として得られたシンボルに対するエントロピー符号化が規定されている。
エントロピー符号化は、符号化対象のシンボルの出現頻度に基づいて動的に符号表を生成する可変長符号化方式である。符号表は、シンボルと、当該シンボルに割り当てられた符号との対応を示す。エントロピー符号化では、出現頻度が大きいシンボルには短い符号が割り当てられ、出現頻度が小さいシンボルには長い符号が割り当てられる。符号化対象のシンボルは、符号表を用いて可変長符号に変換される。
DEFLATE規格に基づく圧縮によって得られた圧縮データは、連結された複数の符号語を含む。圧縮データが伸張される場合、先頭から順に符号語がシンボルに復号される。圧縮データでは、例えば、第1符号語の符号長が生成されたことに応じて、後続する第2符号語の先頭の位置が決定される。そのため、第1符号語の符号長の生成に要する時間が長ければ、第2符号語の復号の開始が遅延する可能性がある。
L. Peter Deutsch、"DEFLATE Compressed Data Format Specification version 1.3"、[online]、RFC1951、1996年5月、[2022年1月20日検索]、インターネット<URL:https://datatracker.ietf.org/doc/html/rfc1951>
本発明の一実施形態では、復号のスループットを向上できるデータ伸張装置、メモリシステム、およびデータ伸張方法を提供する。
実施形態によれば、データ伸張装置は、圧縮データに含まれる符号をシンボルに復号する。データ伸張装置は、第1符号長生成部と、第2符号長生成部とを具備する。第1符号長生成部は、前記圧縮データに含まれる第1符号の第1符号長を演算により生成する。第2符号長生成部は、前記圧縮データに含まれる前記第1符号に後続する第2符号の第2符号長を、前記第1符号と、前記第1符号に関連付けられた前記第2符号長とを少なくとも示すテーブルを用いて生成する。
以下、実施の形態について図面を参照して説明する。
図1は、実施形態に係るデータ伸張装置を含む情報処理システムの構成の例を示す。情報処理システム1は、ホストデバイス2(以下、ホスト2と称する)と、メモリシステム3とを含む。
メモリシステム3は、NAND型フラッシュメモリ5のような不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。メモリシステム3は、例えば、NAND型フラッシュメモリ5を備えるソリッドステートドライブ(SSD)として実現される。以下では、メモリシステム3がSSDとして実現される場合について例示するが、メモリシステム3はハードディスクドライブ(HDD)として実現されてもよい。
ホスト2は、大量且つ多様なデータをメモリシステム3に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3はホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とメモリシステム3とを接続するためのインタフェースは、SCSI、Serial Attached SCSI(SAS)、ATA(AT Attachment)、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等に準拠する。
メモリシステム3は、コントローラ4およびNAND型フラッシュメモリ5を備える。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現され得る。
メモリシステム3は、揮発性メモリであるランダムアクセスメモリ(RAM)、例えばダイナミックランダムアクセスメモリ(DRAM)6を備えていてもよい。あるいは、スタティックランダムアクセスメモリ(SRAM)のようなRAMがコントローラ4に内蔵されていてもよい。なお、DRAM6が、コントローラ4に内蔵されていてもよい。
DRAM6は揮発性のメモリである。DRAM6等のRAMには、例えば、ファームウェア(FW)の格納領域、および論理物理アドレス変換テーブルのキャッシュ領域が設けられる。
NAND型フラッシュメモリ5は複数のブロックを含む。各ブロックは複数のページを含む。1つのブロックは最小の消去単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。各ページは、同一ワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位である。なお、ワード線をデータ書き込み動作およびデータ読み出し動作の単位としてもよい。
各ブロックに対して許容できるプログラム/イレーズサイクル数には上限(最大P/Eサイクル数)がある。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
コントローラ4は、例えば、ホストインタフェース(ホストI/F)11、CPU12、NANDインタフェース(NAND I/F)13、DRAMインタフェース(DRAM I/F)14、およびデータ伸張装置15を含む。これらホストI/F11、CPU12、NAND I/F13、DRAM I/F14、およびデータ伸張装置15は、バス10を介して相互接続され得る。
コントローラ4は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応するNAND I/F13を介して、NAND型フラッシュメモリ5に電気的に接続されている。NAND I/F13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして機能する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のデータ読み出し動作/データ書き込み動作とブロック単位のデータ消去動作との差異を隠蔽するための処理が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびガベージコレクションが含まれる。
論理アドレスは、メモリシステム3の記憶領域をアドレス指定するためにホスト2によって使用されるアドレスである。論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブルを用いて実行される。コントローラ4は、論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータが書き込まれたNAND型フラッシュメモリ5内の物理記憶位置を示す。論理物理アドレス変換テーブルは、メモリシステム3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、この論理アドレスをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブルを更新することにより、以前のデータを無効化する。
ホストI/F11は、メモリシステム3と、メモリシステム3の外部装置であるホスト2との通信を行うハードウェアインタフェースである。ホストI/F11は、ホスト2から様々なコマンド、例えば、入出力(I/O)コマンド、各種制御コマンドを受信する回路を含む。I/Oコマンドには、ライトコマンド、リードコマンド、が含まれ得る。制御コマンドには、アンマップコマンド(トリムコマンド)、フォーマットコマンドが含まれ得る。ホストI/F11は、コマンドに応じた応答やデータをホスト2に送信する回路を含む。
DRAM I/F14は、DRAM6へのアクセスを制御するように構成されたDRAM制御回路として機能する。
CPU12は、ホストI/F11、NAND I/F13、DRAM I/F14、およびデータ伸張装置15を制御するように構成されたプロセッサである。CPU12は、DRAM6にロードされたFWを実行することによって様々な処理を行う。つまり、FWはCPU12の動作を制御するための制御プログラムである。CPU12は、前述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行されてもよい。
データ伸張装置15は、NAND型フラッシュメモリ5から読み出された圧縮ストリーム(圧縮データ)内の符号語を復号することにより、その圧縮ストリームを伸張する。データ伸張装置15は、例えば、ホスト2からリードコマンドを受け付けたことに応じて、コントローラ4(より詳しくは、CPU12)がNAND型フラッシュメモリ5から読み出した圧縮ストリームを、伸張する。
なお、コントローラ4は、さらに、ECCエンコーダとECCデコーダを備えてもよい。この場合、ECCエンコーダが、データ圧縮装置によって出力された圧縮ストリームに対して誤り訂正用のパリティ(ECCパリティ)を生成し、生成したECCパリティと圧縮ストリームとを有する誤り訂正符号語を生成する。そして、CPU12が、誤り訂正符号語をNAND I/F13経由でNAND型フラッシュメモリ5へ書き込むように構成される。また、この場合、コントローラ4が例えばホスト2から発行されるリードコマンドに基づいてNAND型フラッシュメモリ5からデータを読み出す際に、CPU12がNAND I/F13経由でNAND型フラッシュメモリ5から誤り訂正符号語を読み出し、ECCデコーダが当該読み出された誤り訂正符号語に対して、エラー検出処理、エラー訂正処理を実行し、圧縮ストリームを生成する。そして、データ伸張装置15が、生成された圧縮ストリームを伸張するように構成される。すなわち、コントローラ4は、データ圧縮装置から出力される圧縮ストリームに基づくデータをNAND型フラッシュメモリ5に書き込み、NAND型フラッシュメモリ5から読み出したデータに基づいて圧縮ストリームを生成し、生成した圧縮ストリームを伸張するように構成されてもよい。
以下では、圧縮ストリームの生成に用いられた圧縮方式が、DEFLATE規格(RFC1951)に基づく方式である場合について例示する。DEFLATE規格に基づく圧縮方式では、辞書式符号化の結果として得られたシンボルに対してエントロピー符号化が行われる。
辞書式符号化では、過去に入力されたデータ(例えば、文字シンボル列)を保持するヒストリバッファが利用される。辞書式符号化では、ヒストリバッファを検索して圧縮対象のデータと少なくとも一部が一致する過去のデータが取得され、辞書一致距離と辞書一致長のペアが取得される。辞書一致距離は、ヒストリバッファにおいて、取得された過去のデータが記憶されている位置までの距離を示す。辞書一致距離は、辞書一致距離シンボルを用いて表される。辞書一致長は、取得された過去のデータと圧縮対象のデータとで一致した部分の長さを示す。辞書一致長は、辞書一致長シンボル(Match Length:ML)を用いて表される。圧縮対象のデータを辞書一致距離と辞書一致長のペアに変換することにより、データを圧縮できる。
なお、辞書式符号化では、圧縮対象のデータのいずれの部分も、ヒストリバッファ内のデータと一致しない場合、その圧縮対象のデータに含まれるシンボルは、辞書不一致シンボル(Literal:L)としてそのまま出力される。
DEFLATE規格において、257種類の辞書不一致シンボルと29種類の辞書一致長シンボルからなる286種類のシンボルは、一連のコードインデックス(例えば、0から285までのコードインデックス)で表される。30種類の辞書一致距離シンボルは、別の一連のコードインデックス(例えば、0から29までのコードインデックス)で表される。なお、シンボル(コードインデックス)は、固定長のデータである。
辞書式符号化で得られた辞書不一致シンボルおよび辞書一致長シンボルに対して、エントロピー符号化がさらに行われる。また、辞書式符号化で得られた辞書一致距離シンボルに対して、エントロピー符号化がさらに行われる。エントロピー符号化は、可変長符号化方式である。エントロピー符号化は、例えば、動的ハフマン符号化である。
エントロピー符号化では、符号化対象のシンボルの出現頻度に基づいて動的に符号表が生成される。符号表は、例えば、符号化対象のデータに出現する全種類のシンボルそれぞれについて、シンボルと、当該シンボルに割り当てられた符号とを示す情報を含む。エントロピー符号化では、出現頻度が大きいシンボルには短い符号が割り当てられ、出現頻度が小さいシンボルには長い符号が割り当てられる。符号化対象のシンボルは、符号表を用いて符号に変換される。変換により得られた符号は、可変長符号であり、接頭符号である。接頭符号は、あるシンボルに割り当てられた符号が、別のシンボルに割り当てられた符号の接頭部になっていない符号である。つまり、復号対象のビット列が接頭符号で構成される場合、復号対象のビット列全体が読み出されることなく、復号対象のビット列が先頭から順に1ビットずつ読み出されて、読み出された1ビット以上のビット列に対応する符号が逐次特定される。したがって、特定された符号を逐次復号できる。接頭符号は、Prefixと称される。
圧縮データにおいて、辞書不一致シンボルに対応する符号語は、第1タイプの符号で構成される。辞書一致長シンボルに対応する符号語と、辞書一致距離シンボルに対応する符号語のそれぞれは、第1タイプの符号で構成されるか、あるいは第1タイプの符号と第2タイプの符号とで構成される。第1タイプの符号は、Prefixである。第2タイプの符号は、ExtraBitである。ExtraBitは、対応する辞書一致長または辞書一致距離の特定に用いられる1ビット以上の符号(ビット列)である。つまり、辞書一致長は、Prefixに対応する辞書一致長シンボルによって特定されるか、あるいはPrefixに対応する辞書一致長シンボルとExtraBitの値とによって特定される。また、辞書一致距離は、Prefixに対応する辞書一致距離シンボルによって特定されるか、あるいはPrefixに対応する辞書一致距離シンボルとExtraBitの値とによって特定される。
以下では、説明を分かりやすくするために、圧縮ストリームに含まれる辞書不一致シンボルの符号語と辞書一致長シンボルの符号語とを復号する場合の動作について主に例示する。なお、この動作は、圧縮ストリームに含まれる辞書一致距離シンボルの符号語を復号する場合の動作にも適用可能である。
図2は、データ伸張装置15において伸張される圧縮ストリーム31内の符号語の例を示す。圧縮ストリーム31は、例えば、辞書不一致シンボル(L)に対応する符号語311と、辞書一致長シンボル(ML)に対応する符号語312とを含む。
図2に示すように、辞書不一致シンボルに対応する符号語311は、Prefixで構成される。辞書一致長シンボルに対応する符号語312は、PrefixとExtraBitとで構成され得る。Prefixは可変長符号である。
可変長符号を含む圧縮ストリーム31において、ある符号語の開始位置は、その符号語よりも前にある符号語の長さ(符号長)に依存する。そのため、圧縮ストリーム31に含まれる符号語の復号は、圧縮ストリーム31の先頭にある符号語からシーケンシャルに行われる必要がある。圧縮ストリーム31では、例えば、第1符号語の符号長が生成されたことに応じて、第1符号語に後続する第2符号語の先頭の位置が決定される。そのため、第1符号語の符号長の生成に要する時間が長ければ、第2符号語の復号の開始が遅延する可能性がある。したがって、符号長の生成は、圧縮ストリーム31内の符号語を復号する処理を高速化する際のボトルネック(クリティカルパス)になりやすい。
符号長の生成方法は、符号語に対応するシンボルの種類によって異なる。より具体的には、辞書不一致シンボルに対応する符号語の符号長は、Prefixの長さ(Prefix長)である。辞書一致長シンボルに対応する符号語の符号長は、Prefixの長さとExtraBitの長さ(ExtraBit長)との和である。
ここで、Prefixの長さについて説明する。
図3は、辞書不一致シンボルに割り当てられるPrefixと辞書一致長シンボルに割り当てられるPrefixとを表すハフマン木71の例を示す。辞書不一致シンボルに割り当てられるPrefixと、辞書一致長シンボルに割り当てられるPrefixとは、共通のハフマン木71で表現される。
ハフマン木71の各リーフノード72は、辞書不一致シンボルと辞書一致長シンボルのいずれかに対応する。ハフマン木71のルートノード710を起点とする各リーフノード72の深さ(すなわち、ルートノード710からそのリーフノード72へ至るまでに辿ったエッジの数)は、対応するシンボルに割り当てられるPrefixの長さに相当する。
例えば、リーフノード721は、辞書不一致シンボルに対応する。リーフノード721に対応する辞書不一致シンボルには、Prefix“00”が割り当てられている。このPrefixの長さは、2である。
また例えば、リーフノード722は、辞書一致長シンボルに対応する。リーフノード722に対応する辞書一致長シンボルには、Prefix“1011”が割り当てられている。このPrefixの長さは、4である。
このように、Prefixはエントロピー符号化によって得られた可変長符号である。したがって、シンボルの出現頻度が高いほど、対応するPrefixの長さは短くなる。換言すると、シンボルの出現頻度が低いほど、対応するPrefixの長さは長くなる。
次いで、ExtraBitの長さについて説明する。
ExtraBitは、辞書一致長シンボルに対応する符号語に含まれ得る符号である。換言すると、ExtraBitは、辞書一致長シンボルに対応するPrefixに付加され得る符号である。ExtraBitの長さは、対応する辞書一致長シンボルの種類に基づいて決定される。
図4は、辞書一致長シンボルの種類と、ExtraBit長と、辞書一致長との対応関係を表す辞書一致長テーブル37の例を示す。この対応関係は、例えば、DEFLATE規格で規定されている。DEFLATE規格において、辞書不一致シンボルおよび辞書一致長シンボルの種類は、0から285までのコードインデックスで表される。より詳しくは、0から256までのコードインデックスそれぞれは、257種類の辞書不一致シンボルそれぞれを示す。256から285までのコードインデックスそれぞれは、29種類の辞書一致長シンボルそれぞれを示す。
したがって、図4では、29種類の辞書一致長シンボルをそれぞれ示す256から285までのコードインデックス(Code)が示されている。また、29種類の辞書一致長シンボルそれぞれに対応するExtraBit長と辞書一致長とが示されている。
例えば、コードインデックスが257である辞書一致長シンボルに対応するExtraBit長は、0ビットである。この辞書一致長シンボルに対応する辞書一致長は、3である。この辞書一致長シンボルは単一の辞書一致長を示すので、対応する符号語にはExtraBitが含まれていない。
また例えば、コードインデックスが265である辞書一致長シンボルに対応するExtraBit長は、1ビットである。つまり、この辞書一致シンボルに対応する符号語は、Prefixと、1ビットのExtraBitとを含む。また、この辞書一致長シンボルに対応する辞書一致長は、11と12のいずれかである。1ビットであるExtraBitの値は、0または1を示す。例えば、ExtraBitの値が0である場合、辞書一致長は11である。ExtraBitの値が1である場合、辞書一致長は12である。
このように、例えば、DEFLATE規格において、辞書一致長シンボルの種類と、ExtraBit長と、辞書一致長との対応関係を示す辞書一致長テーブル37が規定されている。したがって、辞書一致長テーブル37を用いることにより、ある辞書一致長シンボルに対応するExtraBit長と辞書一致長とを特定できる。なお、同様にして、例えば、DEFLATE規格において、辞書一致距離シンボルの種類と、ExtraBit長と、辞書一致距離との対応関係(辞書一致距離テーブル)が規定されている。したがって、辞書一致距離テーブルを用いることにより、ある辞書一致距離シンボルに対応するExtraBit長と辞書一致距離とを特定できる。
データ伸張装置15は、例えば、辞書不一致シンボルに対応する符号語と、辞書一致長シンボルに対応する符号語とを含む圧縮ストリーム31を伸張する。圧縮ストリーム31において、ある符号語の開始位置は、その符号語よりも前にある符号語の長さに依存する。符号語が辞書不一致シンボルに対応する場合、その符号語に含まれるPrefixの長さが符号長として生成される。一方、符号語が辞書一致長シンボルに対応する場合、例えば、その符号語に含まれるPrefixの長さが生成され、Prefixを復号した結果に基づいてExtraBitの長さが取得され、Prefixの長さとExtraBitの長さとを加算することによって、符号長が生成される。そのため、辞書一致長シンボルに対応する符号語の符号長を生成するパスは、復号のスループットを決定するクリティカルパスになりやすい。
符号長の生成を高速化する方法の1つとして、入力されたPrefixに対応する符号長を出力するルックアップテーブル(LUT)を用いる方法が考えられる。しかし、この方法では、全ての種類のPrefixそれぞれに対応する符号長の情報を、LUTに含める必要があるので、LUTの回路面積が大きくなる。
そのため、本実施形態に係るデータ伸張装置15では、回路面積を増大させることなく、辞書一致長シンボルに対応する符号語の符号長の生成を高速化する。これにより、復号のスループットを向上できる。
図5は、データ伸張装置15の構成例を示すブロック図である。データ伸張装置15は、入力された圧縮ストリーム31を伸張して、伸張データ32を取得する。データ伸張装置15は、例えば、符号表復元部20、エントロピー復号部21、および辞書式復号部25を備える。エントロピー復号部21は、辞書一致距離エントロピー復号部211、辞書不一致・辞書一致長エントロピー復号部212、シンボルマルチプレクサ(MUX)、および符号長MUX214を含む。辞書式復号部25は、伸張データ生成部251とヒストリバッファ252とを含む。
(符号表復元部)
符号表復元部20は、圧縮ストリーム31のヘッダ31Hを用いて、辞書一致距離シンボルの符号表35(以下、第1符号表35と称する)と、辞書不一致シンボルおよび辞書一致長シンボルの符号表36(以下、第2符号表36と称する)とを生成(復元)する。第1符号表35は、辞書一致距離シンボルと、その辞書一致距離シンボルに割り当てられた符号(すなわち、Prefix)とを示す情報を含む。シンボルは、例えば、コードインデックスで表される。第2符号表36は、(1)辞書不一致シンボルと、その辞書不一致シンボルに割り当てられた符号とを示す情報と、(2)辞書一致長シンボルと、その辞書一致長シンボルに割り当てられた符号とを示す情報とを含む。
符号表復元部20は、圧縮ストリーム31のヘッダ31Hを用いて、辞書一致距離シンボルの符号表35(以下、第1符号表35と称する)と、辞書不一致シンボルおよび辞書一致長シンボルの符号表36(以下、第2符号表36と称する)とを生成(復元)する。第1符号表35は、辞書一致距離シンボルと、その辞書一致距離シンボルに割り当てられた符号(すなわち、Prefix)とを示す情報を含む。シンボルは、例えば、コードインデックスで表される。第2符号表36は、(1)辞書不一致シンボルと、その辞書不一致シンボルに割り当てられた符号とを示す情報と、(2)辞書一致長シンボルと、その辞書一致長シンボルに割り当てられた符号とを示す情報とを含む。
ヘッダ31Hは、例えば、複数の辞書一致距離シンボルにそれぞれ対応する複数の符号長を圧縮したデータ(第1符号表圧縮データ)と、複数の辞書不一致シンボルおよび辞書一致長シンボルにそれぞれ対応する複数の符号長を圧縮したデータ(第2符号表圧縮データ)とを含む。第1符号表圧縮データは、例えば、複数の辞書一致距離シンボルにそれぞれ対応する複数の符号長を、特定のシンボル順に並べ替え、並べ替えられた複数の符号長をランレングス符号化し、その結果をさらにハフマン符号化したデータである。第2符号表圧縮データは、例えば、複数の辞書不一致シンボルおよび辞書一致長シンボルにそれぞれ対応する複数の符号長を、特定のシンボル順に並べ替え、並べ替えられた複数の符号長をランレングス符号化し、その結果をさらにハフマン符号化したデータである。特定のシンボル順は、例えば、対応する複数のシンボルのアルファベット順に従う順序である。つまり、特定のシンボル順に並べられた複数の符号長は、例えば、アルファベット順に並べられた複数のシンボルとそれぞれ対応するように並べ替えられた複数の符号長である。
符号表復元部20は、第1符号表圧縮データを伸張して、複数の辞書一致距離シンボルに対応し、且つ特定のシンボル順に並べ替えられた複数の符号長を取得する。符号表復元部20は、取得した複数の符号長を用いて第1符号表35を生成する。符号表復元部20は、例えばカノニカルハフマン方式により、第1符号表35を生成する。カノニカルハフマン方式は、シンボルの符号長のみを用いて、シンボルに割り当てる符号ビット列(可変長符号)を決定可能な方式である。カノニカルハフマン方式は、DEFLATE規格のエントロピー符号化方式として採用されている。符号表復元部20は、生成した第1符号表35を辞書一致距離エントロピー復号部211に送出する。
符号表復元部20は、第2符号表圧縮データを伸張して、複数の辞書不一致シンボルおよび辞書一致長シンボルに対応し、且つ特定のシンボル順に並べ替えられた複数の符号長を取得する。符号表復元部20は、取得した複数の符号長を用いて第2符号表36を生成する。符号表復元部20は、例えばカノニカルハフマン方式により、第2符号表36を生成する。符号表復元部20は、生成した第2符号表36を辞書不一致・辞書一致長エントロピー復号部212に送出する。
(エントロピー復号部)
エントロピー復号部21は、圧縮ストリーム31から取得される入力符号語31Cをエントロピー復号する。これにより、エントロピー復号部21は、入力符号語31Cに対応するシンボルと符号長とを取得する。
エントロピー復号部21は、圧縮ストリーム31から取得される入力符号語31Cをエントロピー復号する。これにより、エントロピー復号部21は、入力符号語31Cに対応するシンボルと符号長とを取得する。
より具体的には、辞書一致距離エントロピー復号部211は、圧縮ストリーム31から取得される、辞書一致距離シンボルに対応する入力符号語31Cを、エントロピー復号する。辞書一致距離エントロピー復号部211は、シンボル生成部215と符号長生成部216とを備える。
シンボル生成部215は、第1符号表35を用いて、入力符号語31Cを辞書一致距離シンボルに変換する。シンボル生成部215は、変換により得られた辞書一致距離シンボルをシンボルMUX213に送出する。送出した辞書一致距離シンボルには、対応するExtraBitの値が付加され得る。
符号長生成部216は、入力符号語31Cの符号長を生成する。入力符号語31CがPrefixのみで構成される場合、符号長生成部216は、Prefix長を符号長として生成する。入力符号語31CがPrefixとExtraBitとで構成される場合、符号長生成部216は、Prefix長にExtraBit長を加算して、符号長を生成する。ExtraBit長は、例えば、第1符号表35と前述した辞書一致距離テーブルとを用いて取得される。符号長生成部216は、生成した符号長を符号長MUX214に送出する。
辞書不一致・辞書一致長エントロピー復号部212は、圧縮ストリーム31に含まれる、辞書不一致シンボルまたは辞書一致長シンボルに対応する符号語31Cを、エントロピー復号する。辞書不一致・辞書一致長エントロピー復号部212は、シンボル生成部217と符号長生成部218とを備える。
シンボル生成部217は、第2符号表36を用いて、入力符号語31Cを辞書不一致シンボルと辞書一致長シンボルのいずれかに変換する。シンボル生成部217は、変換により得られた辞書不一致シンボルまたは辞書一致長シンボルを、シンボルMUX213に送出する。送出した辞書一致長シンボルには、対応するExtraBitの値が付加され得る。
符号長生成部218は、入力符号語31Cの符号長を生成する。入力符号語31CがPrefixのみで構成される場合、符号長生成部218は、Prefix長を符号長として生成する。入力符号語31CがPrefixとExtraBitとで構成される場合、符号長生成部218は、Prefix長にExtraBit長を加算して、符号長を生成する。ExtraBit長は、例えば、第2符号表36と前述した辞書一致長テーブル37とを用いて取得される。符号長生成部218は、生成した符号長を符号長MUX214に送出する。
シンボルMUX213は、辞書一致距離エントロピー復号部211から受け取った辞書一致距離シンボルを、辞書式復号部25(より詳しくは、伸張データ生成部251)に送出する。シンボルMUX213は、辞書不一致・辞書一致長エントロピー復号部212から受け取った辞書不一致シンボルまたは辞書一致長シンボルを、辞書式復号部25に送出する。
符号長MUX214は、辞書一致距離エントロピー復号部211または辞書不一致・辞書一致長エントロピー復号部212から受け取った符号長を、圧縮ストリーム31から入力符号語31Cを取得する各部に送出する。圧縮ストリーム31から入力符号語31Cを取得する各部は、例えば、辞書一致距離エントロピー復号部211と辞書不一致・辞書一致長エントロピー復号部212である。これにより、辞書一致距離エントロピー復号部211と辞書不一致・辞書一致長エントロピー復号部212とは、符号長を用いて、次に復号すべき入力符号語31Cの圧縮ストリーム31における先頭位置を決定できる。
なお、ある入力符号語31C(第1符号語)が辞書不一致シンボルに復号された場合、次に復号されるべき入力符号語31C(第2符号語)は、辞書不一致シンボルまたは辞書一致長シンボルに復号される符号語である。したがって、辞書不一致・辞書一致長エントロピー復号部212は、第1符号語の符号長を用いて、第2符号語の圧縮ストリーム31における先頭位置を決定し、第2符号語を辞書不一致シンボルまたは辞書一致長シンボルに復号する。
第1符号語が辞書一致長シンボルに復号された場合、第2符号語は、辞書一致距離シンボルに復号される符号語である。したがって、辞書一致距離エントロピー復号部211は、第1符号語の符号長を用いて、第2符号語の圧縮ストリーム31における先頭位置を決定し、第2符号語を辞書一致距離シンボルに復号する。つまり、第1符号語に対応する辞書一致長シンボルと、後続する第2符号語に対応する辞書一致距離シンボルとによって、辞書一致長と辞書一致距離のペアが生成される。
また、第1符号語が辞書一致距離シンボルに復号された場合、第2符号語は、辞書不一致シンボルまたは辞書一致長シンボルに復号される符号語である。したがって、辞書不一致・辞書一致長エントロピー復号部212は、符号長を用いて、第2符号語の圧縮ストリーム31における先頭位置を決定し、第2符号語を辞書不一致シンボルまたは辞書一致長シンボルに復号する。
(辞書式復号部)
辞書式復号部25は、エントロピー復号部212(より詳しくは、シンボルMUX213)によって送出された辞書不一致シンボル、辞書一致長シンボル、および辞書一致距離シンボルを復号して、伸張データ32を生成する。辞書一致長シンボルおよび辞書一致距離シンボルそれぞれには、対応するExtraBitの値が付加されていてもよい。
辞書式復号部25は、エントロピー復号部212(より詳しくは、シンボルMUX213)によって送出された辞書不一致シンボル、辞書一致長シンボル、および辞書一致距離シンボルを復号して、伸張データ32を生成する。辞書一致長シンボルおよび辞書一致距離シンボルそれぞれには、対応するExtraBitの値が付加されていてもよい。
具体的には、伸張データ生成部251は、辞書不一致シンボルをそのまま、伸張データ32として出力すると共に、ヒストリバッファ252に格納する。
また、伸張データ生成部251は、辞書一致長シンボルに対応する辞書一致長と、辞書一致距離シンボルに対応する辞書一致距離とのペアに基づいて、ヒストリバッファ252からシンボル列を読み出す。そして、伸張データ生成部251は、読み出したシンボル列を伸張データ32として出力する。
以上の構成により、データ伸張装置15は、圧縮ストリーム31から伸張データ32を生成できる。
ここで、本実施形態に係るデータ伸張装置15における符号長生成の高速化について説明するために、比較例に係るデータ伸張装置における符号長生成について説明する。
(比較例)
図6は、比較例に係るデータ伸張装置における符号長生成部の構成を示すブロック図である。比較例に係るデータ伸張装置において、符号長生成部218Aは、圧縮ストリーム31Aから取得された符号語(入力符号語)の符号長を生成する。また、シンボル生成部217Aは、圧縮ストリーム31Aから取得された符号語を、シンボルに変換する。シンボル生成部217Aは、例えば、本実施形態に係るデータ伸張装置15内のシンボル生成部217(あるいはシンボル生成部215)と同様にして、符号語をシンボルに変換する。以下では、符号長生成部218Aが、辞書不一致シンボルと辞書一致長シンボルのいずれかに対応する符号語の符号長を生成する場合について例示する。
図6は、比較例に係るデータ伸張装置における符号長生成部の構成を示すブロック図である。比較例に係るデータ伸張装置において、符号長生成部218Aは、圧縮ストリーム31Aから取得された符号語(入力符号語)の符号長を生成する。また、シンボル生成部217Aは、圧縮ストリーム31Aから取得された符号語を、シンボルに変換する。シンボル生成部217Aは、例えば、本実施形態に係るデータ伸張装置15内のシンボル生成部217(あるいはシンボル生成部215)と同様にして、符号語をシンボルに変換する。以下では、符号長生成部218Aが、辞書不一致シンボルと辞書一致長シンボルのいずれかに対応する符号語の符号長を生成する場合について例示する。
符号長生成部218Aは、第1符号長生成部51、第2符号長生成部52、およびMUX53を含む。第1符号長生成部51は、Prefix長がNビット未満である場合に、入力符号語の符号長(以下、第1符号長と称する)を生成する。第2符号長生成部52は、Prefix長がNビット以上である場合に、入力符号語の符号長(以下、第2符号長と称する)を生成する。MUX53は、第1符号長または第2符号長を送出する。送出された第1符号長または第2符号長を用いることで、圧縮ストリーム31Aにおいて、次に復号すべき符号語の先頭位置が決定される。
より詳しくは、第1符号長生成部51は、第1LUT511、第2LUT512、および第1加算器513を含む。
第1LUT511は、入力符号語と一致するPrefixの長さ(第1Prefix長)を、第1加算器513に送出する。第1LUT511は、例えば、辞書不一致シンボルおよび辞書一致長シンボルの第2符号表36を用いて構成される。具体的には、第1LUT511は、Nビット未満であるPrefixと、そのPrefixの長さとをそれぞれ示す複数のエントリを含む。また、第1LUT511は、入力符号語と一致するNビット未満のPrefixがあったことを示す第1符号長生成部出力有効信号を、MUX53に送出する。入力符号語と一致するPrefixを保持していなければ、第1LUT511は、第1Prefix長および第1符号長生成部出力有効信号を送出しない。
第2LUT512は、入力符号語と一致するPrefixに関連付けられたExtraBit長(第1ExtraBit長)を、第1加算器513に送出する。第2LUT512は、例えば、第2符号表36と辞書一致長テーブル37とを用いて構成される。具体的には、第2LUT512は、Nビット以上であるPrefixと、そのPrefixに対応するExtraBit長とをそれぞれ示す複数のエントリを含む。入力符号語と一致するPrefixを保持していなければ、第2LUT512は第1ExtraBit長を送出しない。
第1加算器513は、第1Prefix長と第1ExtraBit長とを加算して、入力符号語の符号長(第1符号長)を取得する。第1加算器513は、第1符号長をMUX53に送出する。なお、第1LUT511から第1Prefix長が送出され、第2LUT512から第1ExtraBit長が送出されていない場合、第1加算器513は、第1Prefix長を第1符号長としてMUX53に送出する。
第2符号長生成部52は、第1算術論理演算器(Arithmetic Logic Unit:ALU)521、第2ALU522、および第2加算器523を含む。
第1ALU521は、入力符号語と一致するPrefixの長さ(第2Prefix長)を算出する。また、第1ALU521は、入力符号語と一致するPrefixを復号して、対応するシンボルを表すコードインデックスを生成する。第2Prefix長の算出と、コードインデックスの生成には、例えば、第2符号表36が用いられる。第1ALU521は、算出した第2Prefix長を第2加算器523に送出する。第1ALU521は、生成したコードインデックスを第2ALU522に送出する。
第2ALU522は、第1LUT521から受け取ったコードインデックスに基づいて、コードインデックスに対応するExtraBit長(第2ExtraBit長)を算出する。第2ExtraBit長の算出には、例えば、辞書一致長テーブル37が用いられる。第2ALU522は、算出した第2ExtraBit長を第2加算器523に送出する。なお、コードインデックスが辞書不一致シンボルに対応する場合、第2ALU522は、第2ExtraBit長を送出しないか、あるいは第2ExtraBit長として0を送出する。
第2加算器523は、第2Prefix長と第2ExtraBit長とを加算して、入力符号語の符号長(第2符号長)を算出する。第2加算器523は、第2符号長をMUX53に送出する。なお、第1ALU521から第2Prefix長が送出され、第2ALU522から第2ExtraBit長が送出されていない場合、第2加算器523は、第2Prefix長を第2符号長としてMUX53に送出する。
MUX53は、第1符号長生成部出力有効信号の入力の有無に応じて、第1符号長と第2符号長のいずれかを、入力符号語の符号長として送出する。具体的には、第1符号長生成部出力有効信号が入力されている場合(例えば、第1符号長生成部出力有効信号=1である場合)、MUX53は第1符号長を送出する。第1符号長生成部出力有効信号が入力されていない場合(例えば、第1符号長生成部出力有効信号=0である場合)、MUX53は第2符号長を送出する。圧縮ストリーム31Aから入力符号語を取得する各部は、送出された符号長を用いて、次に復号すべき入力符号語の圧縮ストリーム31における先頭位置を決定できる。
このように、比較例に係るデータ伸張装置において、PrefixがNビット未満である場合に第1符号長生成部51によって生成される第1符号長は、第1LUT511と第2LUT512それぞれから、入力符号語と一致するPrefixのエントリ(すなわち、第1Prefix長と第1ExtraBit長)を読み出して、加算することで得られる。
これに対して、PrefixがNビット以上である場合に第2符号長生成部52によって生成される第2符号長は、(1)入力符号語と一致するPrefixの長さ(第2Prefix長)を算出し、(2)入力符号語と一致するPrefixを復号してコードインデックスを取得し、(3)コードインデックスに基づいてExtraBit長(第2ExtraBit長)を算出し、(4)第2Prefix長と第2ExtraBit長とを加算する、という手順で得られる。そのため、第2符号長生成部52が第2符号長を生成するパスは、符号長が生成されるまでの遅延時間が大きいパスとなる。
前述したように、可変長符号を含む圧縮ストリームにおいて、ある符号語の開始位置は、その符号語よりも前にある符号語の長さ(符号長)に依存する。そのため、圧縮ストリームに対する復号処理全体のスループットは、符号長生成のスループットにより律速される。
比較例に係るデータ伸張装置では、例えば、第1符号長生成部51が第1符号長を1サイクルで生成するのに対して、第2符号長生成部52は第2符号長を3サイクル以上で生成する。つまり、符号長生成は、Prefix長がNビット未満である場合、1サイクルに1つの符号語を処理する(すなわち、1つの符号長を生成する)スループットとなるのに対して、Prefix長がNビット以上である場合には、3サイクル以上で1つの符号語を処理するスループットに低下する。
図7は、比較例に係るデータ伸張装置における、符号長生成に関するタイミングチャートを示す。ここでは、符号語C0、C1、およびC2がNビット未満のPrefixを含み、符号語C3およびC4がNビット以上のPrefixを含むことを想定する。Nは、例えば、10である。
図7に示すように、符号語C0、C1、およびC2それぞれについては、1サイクル内に、符号長CL0、CL1、およびCL2それぞれが生成される。具体的には、例えば、符号語C0について、Prefix長P0とExtraBit長E0とを取得して、符号長CL0を生成する動作が、1サイクル内に行われる。
一方、符号語C3およびC4それぞれについては、3サイクルで、符号長CL3およびCL4それぞれが生成される。具体的には、例えば、符号語C4について、Prefix長P4を取得する動作と、Prefixを復号してコードインデックスI4を取得した後に、コードインデックスに基づいてExtraBit長E4を取得する動作とに、3サイクルを要している。
このように、符号語C0、C1、およびC2については1サイクルに1つの符号語を処理するスループットとなるのに対し、符号語C3およびC4については3サイクル以上で1つの符号語を処理するスループットとなる。したがって、比較例に係るデータ伸張装置では、Prefix長がNビット以上である場合に、符号長生成のスループットが低下するので、復号における高いスループットを保証できない。
そのため、本実施形態に係るデータ伸張装置15では、回路面積を増大させることなく、符号長の生成を高速化する。これにより、復号のスループットを向上できる。
図8から図10を参照して、データ伸張装置15における、符号長生成を高速化するための構成について説明する。
図8は、データ伸張装置15における符号長生成部218の構成例を示すブロック図である。ここでは、辞書不一致・辞書一致長エントロピー復号部212内の符号長生成部218の構成例を説明するが、辞書一致距離エントロピー復号部211内の符号長生成部216も同様の構成で実現され得る。シンボル生成部217の動作については、図5を参照して前述した通りである。
符号長生成部218は、Prefix長生成ALU部221と、ExtraBit長生成LUT部222と、加算器223とを含む。
Prefix長生成ALU部221は、入力符号語に含まれるPrefixの長さ(Prefix長)を、演算により生成する。Prefix長生成ALU部221は、例えば、Prefixがカノニカルハフマン符号であることを利用して、低遅延でPrefix長を生成する。Prefix長生成ALU部221は、Prefixを復号する動作(すなわち、Prefixをコードインデックスに変換する動作)を行うことなく、Prefix長を生成する。これにより、低遅延でPrefix長を生成できる。Prefix長生成ALU部221は、生成したPrefix長を加算器223に送出する。
ExtraBit長生成LUT部222は、入力符号語に含まれるPrefixに対応するExtraBit長を生成する。なお、入力符号語と一致するPrefixを保持していない場合、ExtraBit長生成LUT部222は、ExtraBit長を生成しないか、あるはExtraBit長として0を生成する。ExtraBit長生成LUT部222は、生成したExtraBit長を加算器223に送出する。
加算器223は、Prefix長とExtraBit長とを加算して、入力符号語の符号長を取得する。なお、Prefix長生成ALU部221からPrefix長が送出され、ExtraBit長生成LUT部222からExtraBit長が送出されていない場合、加算器223は、Prefix長を符号長として取得する。
ここで、ExtraBit長生成LUT部222で保持されるExtraBit長について説明する。
例えば、DEFLATE規格では、257種類の辞書不一致シンボルと、29種類の辞書一致長シンボルとが規定されている。図4の辞書一致長テーブル37に示したように、29種類の辞書一致長シンボルそれぞれは、257から285までのコードインデックスそれぞれで表される。29種類の辞書一致長シンボルの内、1ビット以上のExtraBitが付加される辞書一致長シンボルは、20種類である。1ビット以上のExtraBitが付加される20種類の辞書一致長シンボルそれぞれは、265から284までのコードインデックスそれぞれで表される。
この場合、ExtraBit長生成LUT部222は、最大で、20種類の辞書一致長シンボルにそれぞれ対応する20個のExtraBit長を保持する。そのため、ExtraBit長の生成をLUTで実現することによる回路面積のコストは低い。
これに対して、例えば、比較例に係るデータ伸張装置内の第1LUT511では、辞書不一致シンボルと辞書一致長シンボルを区別することなく、Prefix長がNビット未満であるPrefixのPrefix長を保持する。また、第2LUT512でも、辞書不一致シンボルと辞書一致長シンボルを区別することなく、Prefix長がNビット未満であるPrefixに対応するExtraBit長を保持する。そのため、比較例のデータ伸張装置では、Nを大きくするほど、復号(より詳しくは、符号長生成)のスループットは向上するが、回路面積が増大するというトレードオフがある。したがって、比較例のデータ伸張装置では、復号のスループットを向上させるために、回路面積が増大する可能性がある。
本実施形態に係るデータ伸張装置15では、回路面積を増大させることなく、且つ辞書不一致シンボルと辞書一致長シンボルの区別なく低遅延で符号長を生成できる。つまり、回路面積を増大させることなく、復号における高いスループットを保証できる。
図9は、データ伸張装置15内のPrefix長生成ALU部221の構成例を示すブロック図である。Prefix長生成ALU部221は、例えば、Prefixのリスト231と、1つ以上のレンジチェック部232-1~232-4と、One-Hot-Dec部233とを含む。
Prefixのリスト231は、例えば、第2符号表36に含まれる全てのPrefixに相当する。第2符号表36に含まれるPrefixそれぞれは、例えばカノニカルハフマン方式により、辞書不一致シンボルと辞書一致長シンボルのいずれかに割り当てられた可変長符号である。カノニカルハフマン方式により、複数の辞書不一致シンボルおよび辞書一致長シンボルにそれぞれ割り当てられた複数の可変長符号(以下、カノニカルハフマン符号とも称する)は、符号を数値と見なして数直線上に並べた場合、符号長が短い符号から順に並ぶ性質を有する。入力符号語は、カノニカルハフマン符号であるPrefixを含む。そのため、Prefixのリスト231において、xビットであるPrefix長に対応する先頭(すなわち、最小値)のPrefixから末尾(すなわち、最大値)のPrefixまでの範囲に、入力符号語の先頭からxビットの部分(すなわち、Prefixの部分)が含まれるかどうかに基づいて、Prefix長を決定できる。
図9に示す例では、Prefixのリスト231は、Prefix長が2ビットであるPrefix“00”と、Prefix長が3ビットであるPrefix“010”、“011”、および“100”と、Prefix長が4ビットであるPrefix“1000”、“1011”、“1100”、および“1101”と、Prefix長が5ビットであるPrefix“11100”とを含んでいる。
レンジチェック部232-1~232-4それぞれは、Prefixのリスト231において、xビットのPrefix長に対応する先頭のPrefixから末尾のPrefixまでの範囲に、入力符号語の先頭からxビットの部分が含まれるかどうかを判定する。xビットのPrefix長に対応する先頭のPrefixから末尾のPrefixまでの範囲を、xビットのPrefix範囲と称する。レンジチェック部232-1~232-4それぞれは、判定結果をOne-Hot-Dec部233に送出する。
One-Hot-Dec部233は、レンジチェック部232-1~232-4それぞれから得られた判定結果を用いて、入力符号語が含まれるPrefix範囲に対応するPrefix長を出力する。
ここで、図9に示すPrefixのリスト231を用いて、入力符号語“1011…”に対応するPrefix長を生成する例について、具体的に説明する。
レンジチェック部232-1は、Prefix長が2ビットである先頭のPrefix“00”から末尾のPrefix“00”までの範囲に、2ビットの入力符号語“10”が含まれるかどうかを判定する。この場合、Prefix長が2ビットであるPrefixは、Prefix“00”のみであるので、先頭のPrefixと末尾のPrefixはいずれも、Prefix“00”である。レンジチェック部232-1は、2ビットのPrefix範囲に入力符号語“10”が含まれなかったことを示す判定結果を、One-Hot-Dec部233に送出する。
レンジチェック部232-2は、Prefix長が3ビットである先頭のPrefix“010”から末尾のPrefix“100”までの範囲に、3ビットの入力符号語“101”が含まれるかどうかを判定する。レンジチェック部232-2は、3ビットのPrefix範囲に入力符号語“101”が含まれなかったことを示す判定結果を、One-Hot-Dec部233に送出する。
レンジチェック部232-3は、Prefix長が4ビットである先頭のPrefix“1010”から末尾のPrefix“1101”までの範囲に、4ビットの入力符号語“1011”が含まれるかどうかを判定する。レンジチェック部232-3は、4ビットのPrefix範囲に入力符号語“1011”が含まれたことを示す判定結果を、One-Hot-Dec部233に送出する。
レンジチェック部232-4は、Prefix長が5ビットである先頭のPrefix“11100”から末尾のPrefixまでの範囲に、5ビットの入力符号語“1011…”が含まれるかどうかを判定する。レンジチェック部232-4は、5ビットのPrefix範囲に入力符号語“1011…”が含まれなかったことを示す判定結果を、One-Hot-Dec部233に送出する。
そして、One-Hot-Dec部233は、レンジチェック部232-1~232-4から受け取った判定結果の内、4ビットのPrefix範囲に入力符号語“1011”が含まれたことを示すレンジチェック部232-3の判定結果に基づいて、Prefix長として4ビットを出力する。
例えば、DEFLATE規格では、Prefix長は1ビットから15ビットまでと規定されている。この場合、入力符号語がPrefix範囲に含まれるか否かの判定(レンジチェック)の回数は、最大で15回である。Prefix長生成ALU部221には、例えば、複数のレンジチェック部が設けられる。複数のレンジチェック部(例えば、15個のレンジチェック部)でレンジチェックを並列に行うことにより、Prefix長生成ALU部221は、Prefix長の生成を高速化できる。なお、Prefix長生成ALU部221に、レンジチェックの対象となる複数のPrefix長の数よりも少ないレンジチェック部が設けられていてもよい。その場合、各レンジチェック部が、Prefix範囲に入力符号語が含まれるか否かの判定を、繰り返し行う。
図10は、データ伸張装置15内のExtraBit長生成LUT部222の構成例を示すブロック図である。ExtraBit長生成LUT部222は、例えば、1つ以上のエントリ240、1つ以上の一致検出器241-1、241-2、および241-3、並びにMUX245を含む。
1つ以上のエントリ240それぞれは、第2符号表36に含まれるPrefixの内、辞書一致長シンボルに割り当てられ、且つ1ビット以上のExtraBitが付加されるPrefixに対応する。1つ以上のエントリ240は、例えば、第2符号表36と辞書一致長テーブル37とを用いて決定される。第2符号表36は、辞書一致長シンボル(例えば、コードインデックス)とPrefixとの対応関係を示す情報を含む。辞書一致長テーブル37は、辞書一致長シンボル(例えば、コードインデックス)とExtraBit長との対応関係を示す情報を含む。
1つ以上のエントリ240それぞれは、Prefixと、そのPrefixに関連付けられたExtraBit長とを示す。ExtraBit長は、そのPrefixに付加されるExtraBitの長さである。より具体的には、1つ以上のエントリ240それぞれは、Prefixフィールド243と、ExtraBit長フィールド244とを含む。あるPrefixに対応するエントリにおいて、Prefixフィールドは、そのPrefixを示す。ExtraBit長フィールド244は、そのPrefixに関連付けられたExtraBit長を示す。
図10に示す例では、エントリ240-1は、Prefix“11101”と、ExtraBit長“1”との組を示す。つまり、Prefix“11101”は、第2符号表36において、コードインデックスが265である辞書一致長シンボルに割り当てられたPrefixである。ExtraBit長“1”は、辞書一致長テーブル37において、コードインデックスが265である辞書一致長シンボルに関連付けられたExtraBit長である。
エントリ240-2は、Prefix“1011”と、ExtraBit長“2”との組を示す。つまり、Prefix“1011”は、第2符号表36において、コードインデックスが270である辞書一致長シンボルに割り当てられたPrefixである。ExtraBit長“2”は、辞書一致長テーブル37において、コードインデックスが270である辞書一致長シンボルに関連付けられたExtraBit長である。
エントリ240-3は、Prefix“100”と、ExtraBit長“5”との組を示す。つまり、Prefix“100”は、第2符号表36において、コードインデックスが284である辞書一致長シンボルに割り当てられたPrefixである。ExtraBit長“5”は、辞書一致長テーブル37において、コードインデックスが284である辞書一致長シンボルに関連付けられたExtraBit長である。
一致検出器241-1、241-2、および241-3は、1つ以上のエントリ240を用いて、入力符号語と一致するPrefixを検出する。一致検出器241-1、241-2、および241-3それぞれは、1つ以上のエントリ240それぞれに対応する。一致検出器241-1、241-2、および241-3それぞれは、入力符号語が、対応するエントリ240内のPrefixと一致したか否かを判定する。そして、一致検出器241-1、241-2、および241-3それぞれは、判定結果をMUX245に送出する。
MUX245は、一致検出器241-1、241-2、および241-3それぞれから受け取った判定結果に基づいて、1つ以上のエントリ240のいずれかに含まれるExtraBit長を出力し得る。より詳しくは、MUX245は、入力符号語が、対応するエントリ240内のPrefixと一致したことを示す判定結果を、一致検出器241-1、241-2、および241-3のいずれかから受け取った場合、そのエントリ240内のExtraBit長を出力する。なお、MUXは、一致検出器241-1、241-2、および241-3それぞれから受け取った判定結果がいずれも、入力符号語が、対応するエントリ240内のPrefixと一致しなかったことを示す場合、ExtraBit長として0を出力してもよいし、あるいはExtraBit長を出力しなくてもよい。
ここで、図10に示す1つ以上のエントリ240を用いて、入力符号語“1011…”に対応するExtraBit長を生成する例について、具体的に説明する。
一致検出器241-1は、入力符号語“1011…”が、対応するエントリ240-1内のPrefix“11101”と一致するか否かを判定する。一致検出器241-1は、入力符号語がエントリ240-1内のPrefixと一致しなかったことを示す判定結果を、MUX245に送出する。
一致検出器241-2は、入力符号語“1011”が、対応するエントリ240-2内のPrefix“1011”と一致するか否かを判定する。一致検出器241-2は、入力符号語がエントリ240-2内のPrefixと一致したことを示す判定結果を、MUX245に送出する。
一致検出器241-3は、入力符号語“101”が、対応するエントリ240-2内のPrefix“100”と一致するか否かを判定する。一致検出器241-2は、入力符号語がエントリ240-3内のPrefixと一致しなかったことを示す判定結果を、MUX245に送出する。
そして、MUX245は、一致検出器241-1、241-2、および241-3から受け取った判定結果の内、エントリ240-2内のPrefixと一致したことを示す一致検出器241-2の判定結果に基づいて、そのエントリ240-2内のExtraBit長である2ビットを出力する。
例えば、DEFLATE規格では、辞書不一致シンボルおよび辞書一致長シンボルを含む全285シンボルの内、20個の辞書一致長シンボルが1ビット以上のExtraBitを有することが規定されている。この場合、ExtraBit長生成LUT部222に含まれるエントリ240の数は、最大で20である。したがって、ExtraBit長生成LUT部222が保持する情報は、辞書一致長シンボルに割り当てられた、1ビット以上のExtraBitが付加されるPrefixに対応する情報に絞り込まれる。そのため、本実施形態に係るデータ伸張装置15のExtraBit長生成LUT部222では、小面積且つ低遅延の回路で、入力符号語に対応するExtraBit長を生成できる。
以上の構成で生成したPrefix長とExtraBit長とを加算器223で加算することにより、符号長生成部218は、入力符号語の符号長を生成できる。Prefix長の生成とExtraBit長の生成との間に依存関係はないので、Prefix長生成ALU部221とExtraBit長生成LUT部222とは並列に動作可能である。したがって、Prefix長とExtraBit長とが加算された符号長を、低遅延で生成できる。
図11は、データ伸張装置15における、符号長生成に関するタイミングチャートを示す。符号語C0、C1、C2、C3、およびC4それぞれは、例えば、DEFLATE規格で規定された1ビットから15ビットまでのいずれかのビット長のPrefixを含む。
図11に示すように、データ伸張装置15では、符号語C0、C1、C2、C3、およびC4それぞれについて、1サイクル内に、符号長CL0、CL1、CL2、CL3、およびCL4それぞれが生成される。具体的には、例えば、符号語C0について、Prefix長P0とExtraBit長E0とを取得して、符号長CL0を生成する動作が、1サイクル内に行われる。
このように、本実施形態に係るデータ伸張装置15におけるタイミングチャートでは、例えば、図7に示した比較例に係るデータ伸張装置におけるタイミングチャートと比較して、Nビット以上のPrefixを含む符号語の符号長を生成する場合のスループットの低下が発生しない。そのため、本実施形態のデータ伸張装置15では、シンボルの種類およびPrefix長の違いに関わらず、符号長生成における高いスループットを保証できる。
したがって、本実施形態のデータ伸張装置15では、回路面積を増大させることなく、符号長の生成を高速化できる。つまり、回路面積を増大させることなく、復号のスループットを向上できる。
なお、前述した例では、圧縮ストリームに含まれる辞書不一致シンボルの符号語と辞書一致長シンボルの符号語とについて、符号長を生成する動作を説明した。この符号長を生成する動作は、圧縮ストリームに含まれる辞書一致距離シンボルの符号語にも適用可能である。この場合、例えば、第1符号表35と、DEFLATE規格で規定された辞書一致距離テーブルとを用いて、Prefix長生成ALU部221およびExtraBit長生成LUT部222が構成される。第1符号表35は、辞書一致距離シンボル(例えば、コードインデックス)とPrefixとの対応関係を示す情報を含む。辞書一致距離テーブルは、辞書一致距離シンボル(例えば、コードインデックス)とExtraBit長との対応関係を示す情報を含む。データ伸張装置15では、圧縮ストリームに含まれる辞書一致距離シンボルの符号語の符号長を生成する動作でも同様に、回路面積を増大させることなく、符号長の生成を高速化できる。
以上説明したように、本実施形態によれば、復号のスループットを向上できる。Prefix長生成ALU部221は、圧縮ストリーム31に含まれるPrefixの符号長を演算により生成する。ExtraBit長生成LUT部222は、圧縮ストリーム31に含まれるPrefixに後続するExtraBitの符号長を、Prefixと、そのPrefixに関連付けられたExtraBit長とを少なくとも示すテーブルを用いて生成する。これにより、データ伸張装置15は、例えば、第1符号と第2符号とを含む符号語の符号長を高速に生成できる。そして、データ伸張装置15は、高速に生成した符号長を用いて、後続する符号語の圧縮ストリーム31における開始位置を特定するので、復号のスループットを向上できる。
本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…情報処理システム、2…ホスト、3…メモリシステム、4…コントローラ、5…NAND型フラッシュメモリ、11…ホストI/F、12…CPU、13…NAND I/F、14…DRAM I/F、15…データ伸張装置、21…エントロピー復号部、25…辞書式復号部、211…辞書一致距離エントロピー復号部、212…辞書不一致・辞書一致長エントロピー復号部、213…シンボルMUX、214…符号長MUX、215…シンボル生成部、216…符号長生成部、217…シンボル生成部、218…符号長生成部、221…Prefix長生成ALU部、222…ExtraBit長生成LUT部、223…加算器、251…伸張データ生成部、252…ヒストリバッファ、31…圧縮ストリーム、31H…ヘッダ、32…伸張データ、35…第1符号表、36…第2符号表、37…辞書一致長テーブル。
Claims (11)
- 圧縮データに含まれる符号をシンボルに復号するデータ伸張装置であって、
前記圧縮データに含まれる第1符号の第1符号長を演算により生成する第1符号長生成部と、
前記圧縮データに含まれる前記第1符号に後続する第2符号の第2符号長を、前記第1符号と、前記第1符号に関連付けられた前記第2符号長とを少なくとも示すテーブルを用いて生成する第2符号長生成部とを具備する
データ伸張装置。 - 前記第1符号は、接頭符号である
請求項1に記載のデータ伸張装置。 - 前記テーブルは、前記圧縮データに出現する、全種類または一部の種類のシンボルにそれぞれ割り当てられた1つ以上の第1タイプの符号と、前記1つ以上の第1タイプの符号にそれぞれ関連付けられた1つ以上の第2タイプの符号の符号長とを示し、
前記第2符号長生成部は、
前記テーブルを用いて、前記1つ以上の第1タイプの符号の内、前記第1符号と一致する符号を検出し、
前記テーブルを用いて、前記検出された符号に関連付けられた前記第2タイプの符号の符号長を、前記第2符号長として生成する
請求項1または請求項2に記載のデータ伸張装置。 - 前記1つ以上の第1タイプの符号それぞれは、辞書一致長シンボルに割り当てられた符号である
請求項3に記載のデータ伸張装置。 - 前記1つ以上の第1タイプの符号それぞれは、前記辞書一致長シンボルに割り当てられ、且つ1ビット以上の前記第2タイプの符号の符号長に関連付けられた符号である
請求項4に記載のデータ伸張装置。 - 前記第1符号長と前記第2符号長とを加算して、辞書不一致シンボルに対応する符号語の符号長と、辞書一致長シンボルに対応する符号語の符号長のいずれかを取得する加算器をさらに具備し、
前記第2符号長生成部は、前記第1符号が前記辞書不一致シンボルに割り当てられた符号である場合、前記第2符号長として0を生成する
請求項1または請求項2に記載のデータ伸張装置。 - 前記第1符号が辞書不一致シンボルに割り当てられた符号である場合、前記第1符号長を、前記辞書不一致シンボルに対応する符号語の符号長として取得し、
前記第1符号が辞書一致長シンボルに割り当てられた符号である場合、前記第1符号長と前記第2符号長とを加算して、前記辞書一致長シンボルに対応する符号語の符号長を取得する加算器をさらに具備する
請求項1または請求項2に記載のデータ伸張装置。 - 前記第1符号は、対応する辞書不一致シンボルまたは辞書一致長シンボルがカノニカルハフマン方式で符号化された符号である
請求項1乃至請求項7のいずれか一項に記載のデータ伸張装置。 - 取得された前記符号語の符号長は、前記符号語に後続する符号語の前記圧縮データにおける開始位置を特定するために用いられる
請求項6または請求項7に記載のデータ伸張装置。 - 請求項1乃至請求項9のいずれか一項に記載のデータ伸張装置と、
不揮発性メモリと、
前記不揮発性メモリから前記圧縮データを読み出す制御部とを具備する
メモリシステム。 - 圧縮データに含まれる符号をシンボルに復号するデータ伸張装置のデータ伸張方法であって、
前記圧縮データに含まれる第1符号の第1符号長を演算により生成し、
前記圧縮データに含まれる前記第1符号に後続する第2符号の第2符号長を、前記第1符号と、前記第1符号に関連付けられた前記第2符号長とを少なくとも示すテーブルを用いて生成する
データ伸張方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022038199A JP2023132713A (ja) | 2022-03-11 | 2022-03-11 | データ伸張装置、メモリシステム、およびデータ伸張方法 |
US17/939,692 US20230291418A1 (en) | 2022-03-11 | 2022-09-07 | Data decompression device, memory system, and data decompression method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022038199A JP2023132713A (ja) | 2022-03-11 | 2022-03-11 | データ伸張装置、メモリシステム、およびデータ伸張方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023132713A true JP2023132713A (ja) | 2023-09-22 |
Family
ID=87931294
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022038199A Pending JP2023132713A (ja) | 2022-03-11 | 2022-03-11 | データ伸張装置、メモリシステム、およびデータ伸張方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230291418A1 (ja) |
JP (1) | JP2023132713A (ja) |
-
2022
- 2022-03-11 JP JP2022038199A patent/JP2023132713A/ja active Pending
- 2022-09-07 US US17/939,692 patent/US20230291418A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230291418A1 (en) | 2023-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20090058693A1 (en) | System and method for huffman decoding within a compression engine | |
JP3778087B2 (ja) | データ符号化装置及びデータ復号装置 | |
CN108768403A (zh) | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 | |
US9479194B2 (en) | Data compression apparatus and data decompression apparatus | |
JP2021527376A (ja) | データ圧縮 | |
JP2017073615A (ja) | 符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置 | |
US11868615B2 (en) | Compression device and control method | |
WO2014030189A1 (ja) | 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム | |
KR20220054651A (ko) | 다중 심볼 디코더 | |
US20160226516A1 (en) | Non-transitory computer-readable recording medium, compression method, decompression method, compression device, and decompression device | |
JP2023132713A (ja) | データ伸張装置、メモリシステム、およびデータ伸張方法 | |
US9998142B1 (en) | Techniques for invariant-reference compression | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
JP6135788B2 (ja) | 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム | |
US11461008B2 (en) | Memory system for improving compression performance of a dictionary coder circuit | |
US20230283295A1 (en) | Code table generation device, memory system, and code table generation method | |
Vasanthi et al. | Implementation of Robust Compression Technique Using LZ77 Algorithm on Tensilica's Xtensa Processor | |
US11770132B2 (en) | Compression device and control method | |
US20240204796A1 (en) | Code table generation device, memory system, and code table generation method | |
US11431995B2 (en) | Memory system | |
US7612692B2 (en) | Bidirectional context model for adaptive compression | |
US20240106459A1 (en) | Compression device and compression method | |
US20230403027A1 (en) | Dictionary compressor, data compression device, and memory system | |
JP7305609B2 (ja) | 受信したデータを処理する装置 | |
JP2024085156A (ja) | 符号表生成装置、メモリシステム、および符号表生成方法 |