JP2025139943A - データ圧縮装置、データ伸張装置、およびメモリシステム - Google Patents
データ圧縮装置、データ伸張装置、およびメモリシステムInfo
- Publication number
- JP2025139943A JP2025139943A JP2024039045A JP2024039045A JP2025139943A JP 2025139943 A JP2025139943 A JP 2025139943A JP 2024039045 A JP2024039045 A JP 2024039045A JP 2024039045 A JP2024039045 A JP 2024039045A JP 2025139943 A JP2025139943 A JP 2025139943A
- Authority
- JP
- Japan
- Prior art keywords
- data
- symbols
- symbol
- block
- literal
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【課題】 スループットを向上できるデータ圧縮装置を実現する。
【解決手段】 実施形態によれば、データ圧縮装置は、全リテラル判定部と、終端シンボル追加部とを具備する。全リテラル判定部は、第1データブロックに対する辞書式圧縮により得られた第2データブロックに含まれる1つ以上のシンボルが、全てリテラルシンボルであるか否かを判定する。終端シンボル追加部は、1つ以上のシンボルが全てリテラルシンボルである場合、第2データブロックの終端にブロック終端シンボルを追加しない。終端シンボル追加部は、1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、第2データブロックの終端にブロック終端シンボルを追加する。
【選択図】図9
【解決手段】 実施形態によれば、データ圧縮装置は、全リテラル判定部と、終端シンボル追加部とを具備する。全リテラル判定部は、第1データブロックに対する辞書式圧縮により得られた第2データブロックに含まれる1つ以上のシンボルが、全てリテラルシンボルであるか否かを判定する。終端シンボル追加部は、1つ以上のシンボルが全てリテラルシンボルである場合、第2データブロックの終端にブロック終端シンボルを追加しない。終端シンボル追加部は、1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、第2データブロックの終端にブロック終端シンボルを追加する。
【選択図】図9
Description
本発明の実施形態は、データを圧縮または伸張する技術に関する。
データを圧縮して圧縮データ(圧縮ストリーム)を生成する圧縮方式として、例えば、RFC1951に定められたDEFLATEが知られている。DEFLATEでは、辞書式圧縮の結果として得られたシンボル列に対するエントロピー符号化が規定されている。
エントロピー符号化は、符号化対象のシンボル列におけるシンボル毎の出現頻度に基づいて符号化テーブルを生成する可変長符号化方式である。符号化テーブルは、シンボルと、当該シンボルに割り当てられた符号語との対応を示す。エントロピー符号化では、出現頻度が高いシンボルには短い符号語が割り当てられ、出現頻度が低いシンボルには長い符号語が割り当てられる。よって、符号化対象の各シンボルは、符号化テーブルを用いて可変長符号に変換される。
本発明の一実施形態では、スループットを向上できるデータ圧縮装置、データ伸張装置、およびメモリシステムを提供する。
実施形態によれば、データ圧縮装置は、全リテラル判定部と、終端シンボル追加部とを具備する。全リテラル判定部は、第1データブロックに対する辞書式圧縮により得られた第2データブロックに含まれる1つ以上のシンボルが、全てリテラルシンボルであるか否かを判定する。終端シンボル追加部は、1つ以上のシンボルが全てリテラルシンボルである場合、第2データブロックの終端にブロック終端シンボルを追加しない。終端シンボル追加部は、1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、第2データブロックの終端にブロック終端シンボルを追加する。
以下、実施の形態について図面を参照して説明する。
図1は、実施形態に係る辞書式圧縮部を含む情報処理システムの構成の例を示す。情報処理システム1は、ホストデバイス2と、メモリシステム3とを含む。
ホストデバイス2は、データをメモリシステム3に格納する情報処理装置である。ホストデバイス2は、例えば、大量且つ多様なデータをメモリシステム3に格納するストレージサーバ、またはパーソナルコンピュータである。以下では、ホストデバイス2を、ホスト2と称する。
メモリシステム3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。不揮発性メモリは、例えば、NAND型フラッシュメモリ4である。メモリシステム3は、例えば、ソリッドステートドライブ(SSD)として実現される。以下では、メモリシステム3がSSDとして実現される場合について例示するが、メモリシステム3はハードディスクドライブ(HDD)として実現されてもよい。
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3はホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とメモリシステム3とを接続するためのインタフェースは、SCSI、Serial Attached SCSI(SAS)、ATA(AT Attachment)、Serial ATA(SATA)、PCI ExpressTM(PCIeTM)、EthernetTM、Fibre channel、NVM ExpressTM(NVMeTM)等の規格に準拠する。
メモリシステム3は、例えば、NAND型フラッシュメモリ4、ダイナミックランダムアクセスメモリ(DRAM)5、およびコントローラ6を備える。
NAND型フラッシュメモリ4は、1つ以上のメモリチップを含む。各メモリチップは、複数のブロックを含む。1つのブロックは、データ消去動作の最小単位として機能する。ブロックは、消去ブロック、または物理ブロックと称されることもある。複数のブロックのそれぞれは、複数のページを含む。複数のページのそれぞれは、単一のワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、ワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
各ブロックに対するプログラム/イレーズサイクル数(P/Eサイクル数)には上限があり、最大P/Eサイクル数と称される。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
DRAM5は、揮発性のメモリである。DRAM5の記憶領域は、例えば、ファームウェア(FW)の格納領域、論理物理アドレス変換テーブルのキャッシュ領域、およびユーザデータのバッファ領域として割り当てられる。
コントローラ6は、NAND型フラッシュメモリ4およびDRAM5を制御するメモリコントローラである。コントローラ6は、例えば、System-on-a-chip(SoC)のような回路によって実現される。コントローラ6は、スタティックランダムアクセスメモリ(SRAM)またはDRAMを内蔵していてもよい。この場合、コントローラ6の外部のDRAM5が設けられていなくてもよい。
コントローラ6は、例えば、NAND型フラッシュメモリ4のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能する。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ4の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のデータ読み出し動作/データ書き込み動作とブロック単位のデータ消去動作との差異を隠蔽するための処理、が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびガベージコレクションが含まれる。
論理アドレスは、メモリシステム3の記憶領域をアドレス指定するために、ホスト2によって使用される。論理アドレスは、例えば、論理ブロックアドレス(LBA)である。
論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、例えば、論理物理アドレス変換テーブルを用いて実行される。コントローラ6は、論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのユーザデータが書き込まれたNAND型フラッシュメモリ4内の物理記憶位置を示す。論理物理アドレス変換テーブルは、メモリシステム3の起動時にNAND型フラッシュメモリ4からDRAM5にロードされてもよい。
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、コントローラ6は、ある論理アドレスに対応する更新ユーザデータを、この論理アドレスに対応する以前のユーザデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ6は、この論理アドレスをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブルを更新することにより、以前のユーザデータを無効化する。
コントローラ6は、例えば、CPU11、NANDインタフェース(NAND I/F)12、DRAMインタフェース(DRAM I/F)13、ホストインタフェース(ホストI/F)14、データ圧縮装置15、およびデータ伸張装置16を含む。これらCPU11、NAND I/F12、DRAM I/F13、ホストI/F14、データ圧縮装置15、およびデータ伸張装置16は、例えば、バス10を介して接続される。
CPU11は、NAND I/F12、DRAM I/F13、ホストI/F14、データ圧縮装置15、およびデータ伸張装置16を制御するように構成されたプロセッサである。CPU11は、NAND型フラッシュメモリ4からDRAM5にロードされたFWを実行することによって、様々な処理を行う。FWは、CPU11に様々な処理を実行させるための命令群を含む制御プログラムである。CPU11は、前述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理を実行する。CPU11の動作は、CPU11によって実行されるFWによって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ6内の専用ハードウェアによって実行されてもよい。
NAND I/F12は、コントローラ6とNAND型フラッシュメモリ4とを電気的に接続する。NAND I/F12は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
NAND I/F12は、NAND型フラッシュメモリ4を制御するように構成されたNAND制御回路として機能する。NAND I/F12は、複数のチャネルを介して、NAND型フラッシュメモリ4内の複数のメモリチップにそれぞれ接続されていてもよい。複数のメモリチップが並列に駆動されることにより、NAND型フラッシュメモリ4全体に対するアクセスを広帯域化することができる。
DRAM I/F13は、DRAM5へのアクセスを制御するように構成されたDRAM制御回路として機能する。
ホストI/F14は、メモリシステム3とホスト2との間の通信を行うインタフェースとして機能する回路である。ホストI/F14は、ホスト2から様々なコマンド(例えば、入出力(I/O)コマンド、および制御コマンド)を受信する回路を含む。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。制御コマンドは、例えば、アンマップコマンド(トリムコマンド)、またはフォーマットコマンドである。ホストI/F11は、コマンドに応じた応答やデータをホスト2に送信する回路を含む。
データ圧縮装置15は、符号化によってデータを圧縮する符号化器である。圧縮すべきデータは、例えば、NAND型フラッシュメモリ4に書き込むべきデータである。CPU11は、例えば、ホスト2からライトコマンドを受け付けたことに応じて受信したライトデータを、平文データ(非圧縮データ)としてデータ圧縮装置15へ入力する。データ圧縮装置15は、CPU11から入力された平文データを符号化して、圧縮ストリーム(圧縮データ)を生成する。
具体的には、データ圧縮装置15は、例えば、平文データに含まれる複数のシンボルに対する辞書式圧縮を行うことにより、複数のシンボルを取得する。以下、辞書式圧縮により得られたシンボルを、辞書圧縮シンボルとも称する。データ圧縮装置15は、複数の辞書圧縮シンボルに対するエントロピー符号化を行うことにより、複数の可変長符号を含む圧縮ストリームを生成する。
辞書式圧縮は、過去に入力されたデータ(すなわち、シンボル列)を保持するヒストリバッファを利用して、圧縮対象のデータをポインタに変換する符号化方式である。辞書式圧縮は、辞書式符号化とも称される。ポインタは、例えば、一致距離(マッチ距離)と、一致長(マッチ長)とを含む。辞書式圧縮では、ヒストリバッファを探索して圧縮対象のデータと少なくとも一部が一致する過去のデータを取得して、一致距離と一致長とを得る。一致距離は、ヒストリバッファにおいて、圧縮対象のデータが記憶される位置から、取得した過去のデータが記憶されている位置までの距離である。一致長は、取得した過去のデータと圧縮対象のデータとで一致した部分の長さである。圧縮対象のデータをポインタ(すなわち、一致距離および一致長)に変換することにより、データを圧縮できる。辞書式圧縮によって得られたポインタは、辞書一致シンボル、あるいはマッチシンボルと称される。
なお、圧縮対象のデータと少なくとも一部が一致する過去のデータがヒストリバッファに見つからない場合、圧縮対象のデータ(シンボル)がそのまま出力される。辞書式圧縮でポインタに変換されず、そのまま出力されたシンボルは、辞書不一致シンボル、あるいはリテラルシンボルと称される。
したがって、平文データに含まれる複数のシンボルに対する辞書式圧縮によって得られる複数の辞書圧縮シンボルは、辞書不一致シンボル(リテラルシンボル)と、辞書一致シンボル(マッチシンボル)の少なくともいずれかを含む。
エントロピー符号化は、符号化対象のシンボル(例えば、辞書圧縮シンボル)のシンボル毎の出現頻度を用いて符号化テーブルを生成する可変長符号化方式である。エントロピー符号化は、例えば、DEFLATEで規定されている。符号化テーブルは、N種類のシンボルと、N種類のシンボルにそれぞれ関連付けられたN個の符号語とを示す情報を含む。エントロピー符号化では、出現頻度が高いシンボルには短い符号語が割り当てられ、出現頻度が低いシンボルには長い符号語が割り当てられる。エントロピー符号化では、このような割り当てに従い、入力されたシンボルが符号語に変換される。つまり、変換により得られる符号語は、可変長符号である。なお、シンボルは、例えば、固定長のデータである。したがって、エントロピー符号化では、シンボルの出現頻度の偏りを利用して、データ量を削減できる。エントロピー符号化によって生成された圧縮ストリームは、複数の辞書圧縮シンボルのそれぞれを変換した符号語を含む。圧縮ストリームは、エントロピー符号化に用いられた符号化テーブルを示すデータをヘッダとしてさらに含み得る。符号化テーブルを示すデータは、圧縮ストリームを伸張する場合に、符号化テーブルを復元するために用いられる。
データ伸張装置16は、復号によって圧縮ストリームを伸張する復号器である。圧縮ストリームは、例えば、NAND型フラッシュメモリ4から読み出されたデータである。CPU11は、例えば、ホスト2からリードコマンドを受け付けたことに応じてNAND型フラッシュメモリ4から読み出した圧縮ストリームをデータ伸張装置16へ入力する。データ伸張装置16は、CPU11から入力された圧縮ストリームを復号して、非圧縮データ(平文データ)を生成する。
具体的には、データ伸張装置16は、例えば、圧縮ストリームに含まれる複数の符号語に対するエントロピー復号を行うことにより、複数の辞書圧縮シンボルを取得する。そして、データ圧縮装置15は、複数の辞書圧縮シンボルに対する辞書式伸張を行うことにより、複数のシンボル(リテラルシンボル)を含む平文データを生成する。
エントロピー復号は、圧縮ストリームのヘッダに含まれるデータを用いて符号化テーブルを復元し、この符号化テーブルに基づき、圧縮データに含まれる符号語をシンボル(辞書圧縮シンボル)に変換する復号方式である。
辞書式伸張は、過去に生成(復号)された平文データを保持するヒストリバッファを利用して、復号すべき辞書圧縮シンボル列に含まれるマッチシンボルを平文データ(すなわち、リテラルシンボル列)に変換する復号方式である。なお、辞書圧縮シンボル列に含まれるリテラルシンボルは、辞書式圧縮されていないシンボルであるので、そのまま出力される。辞書式伸張は、辞書式復号とも称される。
図2は、データ圧縮装置15から出力される、あるいはデータ伸張装置16に入力される、圧縮ストリーム33の例を示す。圧縮ストリーム33には、マッチシンボルに対応する符号語Mと、リテラルシンボルに対応する符号語Lとが含まれ得る。
マッチシンボルは、ヒストリバッファを探索して圧縮対象のシンボル列(バイト列)と少なくとも一部が一致する過去のシンボル列がある場合に、その圧縮対象のシンボル列が置き換えられたポインタである。リテラルシンボルは、ヒストリバッファを探索して圧縮対象のシンボル列のいずれの一部とも一致する過去のシンボル列が見つからない場合に、ポインタ(マッチシンボル)に置き換えられずにそのまま出力されたシンボルである。
圧縮対象のシンボル列の少なくとも一部のシンボルがマッチシンボルに置き換えられた場合、圧縮後のシンボル列は、圧縮対象のシンボル列(すなわち、全てリテラルシンボルのままであるシンボル列)よりもシンボル数が減少する。
データ圧縮装置15は、例えば、非圧縮データを特定の単位毎に圧縮する。特定の単位の非圧縮データは、ハフマンブロックとも称される。ハフマンブロックは、特定のデータサイズを有する。つまり、ハフマンブロックは、特定の数のシンボルを含む。特定のデータサイズは、例えば、情報処理システム1(より詳しくは、データ圧縮装置15およびデータ伸張装置16)において任意に設定可能である。データ圧縮装置15は、エントロピー符号化に用いられる符号化テーブルを、例えばハフマンブロック毎に切り替える。
データ圧縮装置15は、ハフマンブロックの境界を検出するために、各ハフマンブロックの終端にブロック終端(End of Block:EOB)シンボルを追加することがある。EOBシンボルは、ハフマンブロックの終端を示すシンボルである。EOBシンボルとして、例えば、DEFLATEで規定された値(ビット列)が用いられる。データ伸張装置16は、例えばEOBシンボルを検出したことに応じて、エントロピー復号に用いられる符号化テーブルを切り替え得る。
図3および図4を参照して、ハフマンブロックの終端にEOBシンボルを追加するケースについて具体的に説明する。
図3は、データ圧縮装置15による辞書式圧縮およびエントロピー符号化において生成されるデータの例を示す。ここでは、非圧縮データ31が、1個のハフマンブロックに相当する非圧縮データであるものとする。
データ圧縮装置15に入力された非圧縮データ31は、辞書式圧縮により辞書圧縮シンボル列32に変換される。具体的には、非圧縮データ31のバイト列の内、過去のバイト列(ヒストリバッファ内のバイト列)と一致するバイト列は、一致する過去のバイト列へのポインタ(マッチシンボル)に置換される。一方、非圧縮データ31のバイト列の内、一致する過去のバイト列が見つからないバイト列は、非圧縮バイト列(リテラルシンボル)のまま出力される。
図3に示す例では、非圧縮データ31に含まれる8個のシンボルが、辞書式圧縮により、5個の辞書圧縮シンボルを含む辞書圧縮シンボル列32に変換されている。辞書圧縮シンボル列32は、2個のマッチシンボルと、3個のリテラルシンボルとを含んでいる。このように、非圧縮データ31は、辞書式圧縮によりシンボル数が削減された辞書圧縮シンボル列32に圧縮され得る。
次いで、辞書圧縮シンボル列32の末尾にはEOBシンボルが追加される。辞書圧縮シンボル列32と追加されたEOBシンボルとは、エントロピー符号化により圧縮ストリーム33に変換される。具体的には、辞書圧縮シンボル列32とEOBシンボルとは、エントロピー符号化によりシンボル毎に可変長符号に変換される。
図3に示す例では、圧縮ストリーム33には、3個のリテラルシンボル、2個のマッチシンボル、およびEOBシンボルの各シンボルをエントロピー符号化することにより得られた6個の可変長符号が含まれている。このように、辞書圧縮シンボル列32は、エントロピー符号化によりデータ量が削減された圧縮ストリーム33に圧縮される。つまり、圧縮ストリーム33は、非圧縮データ31(ここでは、1個のハフマンブロック)を辞書式圧縮およびエントロピー符号化により圧縮したデータである。
前述したように、EOBシンボルは、データ伸張装置16による復号時にハフマンブロックの境界を検出するために用いられ得る。データ伸張装置16は、ハフマンブロックの境界を検出したことに応じ、復号に用いる符号化テーブルを切り替える。
図4は、データ伸張装置16によるエントロピー復号および辞書式伸張において生成されるデータの例を示す。データ伸張装置16は、圧縮ストリーム33を特定の単位(ハフマンブロック)毎に伸張する。
データ伸張装置16に入力された圧縮ストリーム33は、エントロピー復号により辞書圧縮シンボル列32に変換される。具体的には、圧縮ストリーム33に含まれる複数の可変長符号は、エントロピー復号により、辞書圧縮シンボル列32とEOBシンボルとに変換される。EOBシンボルが得られたことに応じて、圧縮ストリーム33におけるハフマンブロックの境界が検出される。EOBシンボルは、出力される辞書圧縮シンボル列32からは除外される。
図4に示す例では、圧縮ストリーム33に含まれる6個の可変長符号をエントロピー復号することにより、3個のリテラルシンボル、2個のマッチシンボル、およびEOBシンボルが取得される。この内、3個のリテラルシンボルと2個のマッチシンボルとが復号順に従って、辞書圧縮シンボル列32として出力される。
次いで、辞書圧縮シンボル列32は、辞書式伸張により非圧縮データ31に変換される。具体的には、辞書圧縮シンボル列32内のマッチシンボルは、ポインタにより示される過去のバイト列(例えば、ヒストリバッファ内のバイト列)に置換されて、非圧縮データ31として出力される。一方、辞書圧縮シンボル列32内のリテラルシンボルは、非圧縮バイト列であるので、そのまま非圧縮データ31として出力される。つまり、非圧縮データ31は、圧縮ストリーム33(ここでは、1個のハフマンブロックに相当する圧縮データ)をエントロピー復号および辞書式伸張により伸張したデータである。
図4に示す例では、辞書圧縮シンボル列32に含まれる5個の辞書圧縮シンボルが、辞書式伸張により、8個のシンボル(リテラルシンボル)を含む非圧縮データ31に変換されている。このように、辞書圧縮シンボル列32は、辞書式伸張により、シンボル数が増加した非圧縮データ31に伸張され得る。つまり、非圧縮データ31は、圧縮ストリーム33をエントロピー復号および辞書式伸張により伸張したデータである。
ハフマンブロック(より詳しくは、ハフマンブロックに対応する辞書圧縮シンボル列)の終端にEOBシンボルが追加される場合、データ圧縮装置15では、EOBシンボルをエントロピー符号化するための演算により、スループットが低下する。同様に、データ伸張装置16では、EOBシンボルに対応する可変長符号をエントロピー復号するための演算により、スループットが低下する。また、EOBシンボルに対応する可変長符号を含むことにより、圧縮ストリーム33のデータ量が増加し、圧縮効率が低下する。
1サイクル当たり1シンボルをエントロピー復号可能なデータ伸張装置16を例に、EOBシンボルの追加によるスループットの低下について説明する。ここでは、ハフマンブロックのサイズが8192バイトであるものとする。
ハフマンブロックに対応する辞書圧縮シンボル列にマッチシンボルが1つでも含まれていれば、エントロピー復号すべきシンボル(可変長符号)の数は8192以下となる。この場合、ハフマンブロックのエントロピー復号にかかるサイクル数は、8192サイクル以下に抑えられる。
これに対して、ハフマンブロックに対応する辞書圧縮シンボル列が全てリテラルシンボルである場合、辞書圧縮シンボル列は8192個のリテラルシンボルを含む。そして、辞書圧縮シンボル列の末尾にEOBシンボルが追加される場合、エントロピー復号すべきシンボル(可変長符号)の数は8193となる。この場合、ハフマンブロックのエントロピー復号にかかるサイクル数は8193サイクルになり、エントロピー復号におけるスループットが低下する。
(第1比較例)
第1比較例に係るデータ圧縮装置およびデータ伸張装置により、エントロピー符号化およびエントロピー復号でスループットが低下する例について説明する。
第1比較例に係るデータ圧縮装置およびデータ伸張装置により、エントロピー符号化およびエントロピー復号でスループットが低下する例について説明する。
図5は、第1比較例に係るデータ圧縮装置の構成を示すブロック図である。データ圧縮装置15Cは、辞書式圧縮およびエントロピー符号化により、非圧縮データ31Cを圧縮ストリーム33C-1に圧縮する圧縮器(符号化器)である。非圧縮データ31Cは、例えば、1つ以上のハフマンブロックを含む圧縮対象のデータである。データ圧縮装置15Cは、辞書式圧縮部21Cと、エントロピー符号化部22Cとを備える。
辞書式圧縮部21Cは、非圧縮データ31Cに対する辞書式圧縮により辞書圧縮シンボル32Cを生成する。辞書圧縮シンボル32Cは、リテラルシンボルとマッチシンボルのいずれかである。辞書式圧縮部21Cは、生成した辞書圧縮シンボル32Cをエントロピー符号化部22Cに送出する。
エントロピー符号化部22Cは、エントロピー符号化により辞書圧縮シンボル32Cを可変長符号に変換して、圧縮ストリーム33C-1を生成する。エントロピー符号化部22Cは、EOB追加部221C、符号化テーブル生成部222C、および可変長符号化部223Cを含む。
EOB追加部221Cは、1つのハフマンブロックに対応する1つ以上の辞書圧縮シンボル32Cの末尾にEOBシンボルを追加する。具体的には、EOB追加部221Cは、例えば、辞書式圧縮部21Cから辞書圧縮シンボル32Cを受け取る毎に、その辞書圧縮シンボル32Cが辞書式圧縮される前のデータサイズを取得し、取得したデータサイズの累積値(以下、非圧縮データサイズと称する)を算出する。辞書圧縮シンボル32Cがリテラルシンボルである場合、辞書式圧縮される前のデータサイズは、例えば1バイトである。辞書圧縮シンボル32Cがマッチシンボルである場合、辞書式圧縮される前のデータサイズは、例えば、そのマッチシンボルが示すバイト単位の一致長である。
EOB追加部221Cは、データサイズを取得した辞書圧縮シンボル32Cを、符号化テーブル生成部222Cと可変長符号化部223Cとに送出する。そして、EOB追加部221Cは、算出した非圧縮データサイズ特定のサイズに達した場合、EOBシンボルを追加する。つまり、EOB追加部221Cは、直前にデータサイズを取得した辞書圧縮シンボル32Cの後に、EOBシンボルを符号化テーブル生成部222Cと可変長符号化部223Cとに送出する。特定のサイズは、例えば、ブロックサイズ情報41Cで示される1つのハフマンブロックのサイズ(以下、ブロックサイズとも称する)である。これにより、EOB追加部221Cは、ハフマンブロックに対応する1つ以上の辞書圧縮シンボル32Cの終端に、EOBシンボルを追加できる。
符号化テーブル生成部222Cは、EOB追加部221Cから受け取った1つのハフマンブロックに対応する複数のシンボル(より詳しくは、1つ以上の辞書圧縮シンボル32Cと、末尾のEOBブロック)のシンボル毎の出現頻度に基づいて、符号化テーブル42Cを生成する。具体的には、符号化テーブル生成部222Cは、出現頻度が高いシンボルに短い符号語を割り当て、出現頻度が低いシンボルに長い符号語を割り当てる。符号化テーブル生成部222Cは、生成した符号化テーブル42Cを可変長符号化部223Cに送出する。また、符号化テーブル生成部222Cは、符号化テーブル42Cを示すデータを、圧縮ストリーム33C-1のヘッダ部331C-1として出力する。
なお、1つのハフマンブロックに対応する複数のシンボルにおいて、EOBシンボルの出現頻度は1である。そのため、符号化テーブル生成部222Cは、EOBシンボルに対して、符号化テーブル42Cにおいて最長の符号長を有する可変長符号を割り当て得る。
可変長符号化部223Cは、可変長符号化により、1つのハフマンブロックに対応する複数のシンボルにそれぞれ対応する複数の可変長符号を生成する。具体的には、可変長符号化部223Cは、符号化テーブル42Cに基づいて、1つのハフマンブロックに対応する複数のシンボルのそれぞれを可変長符号に変換する。可変長符号化部223Cは、各シンボルから変換された可変長符号を、圧縮ストリーム33C-1のペイロード部332C-1として順に出力する。ペイロード部332C-1の末尾には、EOBシンボルから変換された可変長符号333Cが格納される。前述したように、EOBシンボルには最長の可変長符号が割り当てられ得る。したがって、ペイロード部332C-1のデータサイズに占める、EOBシンボルから変換された可変長符号333Cのサイズ(符号量)の割合は大きくなる。
なお、符号化テーブル生成部222Cは、EOB追加部221Cから次のハフマンブロックに対応する複数のシンボルを受け取った場合、新たな符号化テーブル42Cを生成して、可変長符号化部223Cに送出する。つまり、符号化テーブル生成部222Cは、EOB追加部221CからEOBシンボルを受け取ったことに応じて、符号化テーブル42Cを切り替える。可変長符号化部223Cは、新たな符号化テーブル42Cを用いて、その次のハフマンブロックに対応する複数のシンボルのそれぞれを可変長符号に変換する。
したがって、圧縮ストリーム33C-1は、ハフマンブロック毎に、符号化テーブル42Cを含むヘッダ部331C-1と、辞書圧縮シンボル列32CおよびEOBシンボルを可変長符号化したペイロード部332C-1とで構成される。
データ圧縮装置15Cでは、ハフマンブロックに対応する辞書圧縮シンボル列32Cが全てリテラルシンボルである場合、可変長符号化部223CがEOBシンボルをエントロピー符号化するための、例えば1サイクルの演算により、スループットが低下する。なお、データ圧縮装置15Cは、1つのシンボル(ここでは、EOBシンボル)のエントロピー符号化に複数サイクルを要する構成であってもよい。また、EOBシンボルに対応する可変長符号を含むことにより、圧縮ストリーム33C-1のデータ量が増加する。
図6は、第1比較例に係るデータ伸張装置の構成を示すブロック図である。データ伸張装置16C-1は、エントロピー復号および辞書式伸張により、圧縮ストリーム33C-1を非圧縮データ31Cに伸張する伸張器(復号器)である。圧縮ストリーム33C-1は、1つ以上のハフマンブロックに対応する伸張対象のデータである。データ伸張装置16C-1は、エントロピー復号部51Cと、辞書式伸張部52Cとを備える。
エントロピー復号部51Cは、エントロピー復号により圧縮ストリーム33C-1から辞書圧縮シンボル32Cを生成する。エントロピー復号部51Cは、ヘッダ/ペイロード分離部511C、符号化テーブル復元部512C、可変長復号部513C、およびEOB検出部514Cを含む。
ヘッダ/ペイロード分離部511Cは、圧縮ストリーム33C-1に含まれるヘッダ部331C-1とペイロード部332C-1とを分離する。ヘッダ/ペイロード分離部511Cは、ヘッダ部331C-1を符号化テーブル復元部512Cに送出する。ヘッダ/ペイロード分離部511Cは、ヘッダ部331C-1に後続するペイロード部332C-1を可変長復号部513Cに送出する。
符号化テーブル復元部512Cは、ヘッダ部331C-1に含まれるデータを用いて、符号化テーブル42Cを復元(生成)する。符号化テーブル復元部512Cは、復元した符号化テーブル42Cを可変長復号部513Cに送出する。
可変長復号部513Cは、可変長復号により、ペイロード部332C-1に含まれる複数の可変長符号にそれぞれ対応する複数のシンボルを生成する。具体的には、可変長復号部513Cは、符号化テーブル42Cに基づいて、ペイロード部332C-1に含まれる複数の可変長符号のそれぞれをシンボルに変換する。変換により得られるシンボルは、辞書圧縮シンボル、またはEOBシンボルである。可変長復号部513Cは、生成されたシンボルを順にEOB検出部514Cと辞書式伸張部52Cとに送出する。
EOB検出部514Cは、可変長復号部513Cから受け取ったシンボルからEOBシンボルを検出する。具体的には、EOB検出部514Cは、可変長復号部513Cから受け取ったシンボルが、EOBシンボルの値と一致する場合、そのシンボルをEOBシンボルとして検出する。EOB検出部514Cは、EOBシンボルを検出したことに応じ、符号化テーブル復元部512Cに符号化テーブル42Cの切り替えを通知する。
符号化テーブル復元部512Cは、EOB検出部514Cからの通知に応じて、ヘッダ/ペイロード分離部511Cから受け取った次のヘッダ部に含まれるデータを用いて、新たな符号化テーブル42Cを復元する。可変長復号部513Cは、新たな符号化テーブル42Cを用いて、後続するペイロード部に含まれる複数の可変長符号のそれぞれをシンボルに変換する。
辞書式伸張部52Cは、辞書式伸張により、可変長復号部513Cから受け取った辞書圧縮シンボルから非圧縮データ31Cを生成する。具体的には、辞書式伸張部52Cは、辞書圧縮シンボルがマッチシンボルである場合、ポインタにより示される過去のバイト列を非圧縮データ31Cとして出力する。辞書式伸張部52Cは、辞書圧縮シンボルがリテラルシンボルである場合、リテラルシンボルをそのまま非圧縮データ31Cとして出力する。なお、辞書式伸張部52Cは、可変長復号部513Cから受け取ったEOBシンボルを非圧縮データ31Cとして出力しない。図6に示す非圧縮データ31Cでは、EOBシンボルが非圧縮データ31Cとして出力されないことを、“×”で表している。
データ伸張装置16C-1では、ハフマンブロックに対応する辞書圧縮シンボル列が全てリテラルシンボルである場合、可変長復号部513CがEOBシンボルに対応する可変長符号をエントロピー復号するための、例えば1サイクルの演算により、スループットが低下する。
例えば、可変長復号部513Cが1サイクル当たり1シンボルをエントロピー復号可能とする。この場合、仮にEOBシンボルに対応する可変長符号の復号を考慮しなければ、非圧縮データ31Cを出力する際の伸張スループットは、辞書圧縮シンボル列が全てリテラルシンボルであることで復号すべきシンボル数が最多となる最悪のケースでも、1サイクル当たり1バイトを保証できる。しかしながら、EOBシンボルに対応する可変長符号をさらに復号するならば、この復号のための追加の1サイクルが必要であるので、同じ非圧縮データ31Cを出力する際の伸張スループットは、1サイクル当たり1バイト未満になり、低下する。
したがって、第1比較例のデータ伸張装置16C-1では、ハフマンブロックに対応する辞書圧縮シンボル列が全てリテラルシンボルである場合、スループットが低下する。
(第2比較例)
なお、データの圧縮および伸張を行うシステムでは、圧縮対象のデータ単位が、すなわちハフマンブロックのサイズが、例えば、4KiB、8KiB、等として指定される場合がある。その場合、圧縮ストリームにEOBシンボルを含めなくとも、圧縮ストリームを復号して得られる非圧縮データのサイズ(例えば、バイト数)に基づいて、ハフマンブロック間の境界(すなわち、各ハフマンブロックの終端)を検出可能である。
なお、データの圧縮および伸張を行うシステムでは、圧縮対象のデータ単位が、すなわちハフマンブロックのサイズが、例えば、4KiB、8KiB、等として指定される場合がある。その場合、圧縮ストリームにEOBシンボルを含めなくとも、圧縮ストリームを復号して得られる非圧縮データのサイズ(例えば、バイト数)に基づいて、ハフマンブロック間の境界(すなわち、各ハフマンブロックの終端)を検出可能である。
そこで、第2比較例に係るデータ伸張装置として、圧縮ストリームを復号して得られる非圧縮データのサイズに基づいて、ハフマンブロック間の境界を検出するデータ伸張装置を説明する。
図7は、第2比較例に係るデータ伸張装置の構成を示すブロック図である。第2比較例のデータ伸張装置16C-2は、第1比較例のデータ伸張装置16C-1と同様に、エントロピー復号および辞書式伸張により、圧縮ストリーム33C-2を非圧縮データ31Cに伸張する伸張器である。第2比較例のデータ伸張装置16C-2は、EOB検出部514Cの代わりにブロック境界判定部515Cを備える点で、第1比較例のデータ伸張装置16C-1と異なる。以下では、第1比較例のデータ伸張装置16C-1と異なる点について主に説明する。
圧縮ストリーム33C-2は、1つ以上のハフマンブロックに対応する圧縮ストリームである。圧縮ストリーム33C-2には、EOBシンボルに対応する可変長符号は含まれていない。具体的には、圧縮ストリーム33C-2は、ハフマンブロック毎に、符号化テーブル42Cを含むヘッダ部331C-2と、辞書圧縮シンボルに対応する可変長符号を含むペイロード部332C-2とで構成される。
符号化テーブル復元部512Cは、ヘッダ部331C-2に含まれるデータを用いて、符号化テーブル42Cを復元する。符号化テーブル復元部512Cは、復元した符号化テーブル42Cを可変長復号部513Cに送出する。
可変長復号部513Cは、符号化テーブル42Cに基づいて、ペイロード部332C-2に含まれる各可変長符号を辞書圧縮シンボルに変換する。可変長復号部513Cは、辞書圧縮シンボルを辞書式伸長部52Cとブロック境界判定部515Cとに送出する。
ブロック境界判定部515Cは、可変長復号部513Cから辞書圧縮シンボルを受け取る毎に、その辞書圧縮シンボルが辞書式伸張された場合のデータサイズを取得し、取得したデータサイズの累積値(非圧縮データサイズ)を算出する。辞書圧縮シンボルがリテラルシンボルである場合、辞書式伸張された場合のデータサイズは、例えば1バイトである。辞書圧縮シンボルがマッチシンボルである場合、辞書式伸張された場合のデータサイズは、例えば、そのマッチシンボルが示すバイト単位の一致長である。ブロック境界判定部515Cは、算出した非圧縮データサイズの累積値が特定のサイズに達した場合、直前にデータサイズを取得した辞書圧縮シンボルが1つのハフマンブロックの終端であると判断する。特定のサイズは、例えば、ブロックサイズ情報41Cで示される1つのハフマンブロックのサイズ(ブロックサイズ)である。これにより、ブロック境界判定部515Cは、ハフマンブロック間の境界を検出できる。ブロック境界判定部515Cは、ハフマンブロック間の境界を検出したことに応じ、符号化テーブル42Cの切り替えを符号化テーブル復元部512Cに通知する。
図8のフローチャートを参照して、ブロック境界判定部515Cによる処理を具体的に説明する。図8は、第2比較例に係るデータ伸張装置16C-2において実行されるブロック境界判定処理の手順を示すフローチャートである。ブロック境界判定部515Cは、例えば、データ伸張装置16C-2に圧縮ストリーム33C-2が入力されたことに応じ、ブロック境界判定処理を実行する。
まず、ブロック境界判定部515Cは、非圧縮データサイズDSを初期化する(ステップS101)。つまり、ブロック境界判定部515Cは、非圧縮データサイズDSを0に設定する。
次に、ブロック境界判定部515Cは、可変長復号部513Cから辞書圧縮シンボルを受信する(ステップS102)。そして、ブロック境界判定部515Cは、受信した辞書圧縮シンボルの種類がリテラルシンボルとマッチシンボルのいずれであるかを判定する(ステップS103)。
受信した辞書圧縮シンボルがマッチシンボルである場合(ステップS103の“マッチ”)、ブロック境界判定部515Cは、非圧縮データサイズDSにそのマッチシンボルが示す一致長を加算し(ステップS104)、ステップS106に進む。
受信した辞書圧縮シンボルがリテラルシンボルである場合(ステップS103の“リテラル”)、ブロック境界判定部515Cは、非圧縮データサイズDSに1を加算し(ステップS105)、ステップS106に進む。
次いで、ブロック境界判定部515Cは、非圧縮データサイズDSがブロックサイズ以上であるか否かを判定する(ステップS106)。ブロック境界判定部515Cは、例えば、データ伸張装置16C-2に予め格納されているブロックサイズ情報41Cから、ブロックサイズを取得する。
非圧縮データサイズDSがブロックサイズ未満である場合(ステップS106のNo)、ブロック境界判定部515Cによる処理はステップS102に戻る。つまり、ブロック境界判定部515Cは、可変長復号部513Cから辞書圧縮シンボルを受信して、非圧縮データサイズDSがブロックサイズに達したかどうかに基づきハフマンブロック間の境界を検出する処理をさらに行う。
非圧縮データサイズDSがブロックサイズ以上である場合(ステップS106のYes)、ブロック境界判定部515Cは、現在のハフマンブロックと次のハフマンブロックとの境界を検出したと判断して、ブロック境界フラグを符号化テーブル復元部512Cに出力し(ステップS107)、ステップS101に戻る。
ブロック境界フラグは、可変長復号部513Cから直前に受け取った辞書圧縮シンボルがハフマンブロックの終端であることを示す情報である。ブロック境界フラグは、符号化テーブル42Cの切り替えを符号化テーブル復元部512Cに指示するために用いられる。符号化テーブル復元部512Cは、ブロック境界フラグを受け取ったことに応じて、圧縮ストリーム33C-2内の後続するヘッダ部を取得する。符号化テーブル復元部512Cは、取得したヘッダ部を用いて新たな符号化テーブル42Cを生成して、前の符号化テーブル42Cから切り替える。これにより、可変長復号部513Cは、新たな符号化テーブル42Cを用いて、圧縮ストリーム33C-2内の後続する可変長符号(ペイロード部)を辞書圧縮シンボルに復号する。
第2比較例のデータ伸張装置16C-2において、可変長復号のスループット(例えば1サイクルあたり1シンボルを復号)を低下させないためには、可変長復号、ブロック境界判定、および符号化テーブル42Cの切り替えを、1サイクルで実行する必要がある。しかし、ブロック境界判定部515Cにおいて非圧縮データサイズDSを計算する演算が追加されるため、この計算に要する遅延時間の分だけエントロピー復号部51Cの最大動作周波数を落とす必要がある。したがって、可変長復号のスループットが低下する可能性がある。つまり、図7に示すように、可変長復号、ブロック境界判定、および符号化テーブル42Cの切り替えの一連の動作は、可変長復号のスループットに関するクリティカルパスとなる。
図8のフローチャートを参照して前述した通り、ブロック境界判定部515Cは、可変長復号して得られた辞書圧縮シンボルを入力として受け取ると、その辞書圧縮シンボルの種類を判定する。ブロック境界判定部515Cは、1つのハフマンブロックに対応する各辞書圧縮シンボルが辞書式伸長された場合のデータサイズの累積値を示す非圧縮データサイズDSに、受け取った辞書圧縮シンボルの種類に応じた値を加算する。つまり、受け取った辞書圧縮シンボルがマッチシンボルである場合、ブロック境界判定部515Cは、非圧縮データサイズDSに一致長(例えば、バイト単位の一致長)を加算する。一方、受け取った辞書圧縮シンボルがリテラルシンボルである場合、ブロック境界判定部515Cは、非圧縮データサイズDSに1バイトを加算する。そして、ブロック境界判定部515Cは、更新された非圧縮データサイズDSに基づいて、ハフマンブロック間の境界であるかどうかを判定する。
このようなブロック境界判定部515Cによるハフマンブロック間の境界の判定では、必要な演算の論理段数が増加する。この場合、ブロック境界判定部515Cを回路実装した場合の遅延時間が長くなる。そのため、第2比較例のデータ伸張装置16C-2では、動作周波数が低くなり、スループットが低下する可能性がある。
これに対して、実施形態に係るデータ圧縮装置15およびデータ伸張装置16は、処理のスループットと、圧縮効率とを向上できる。
具体的には、データ圧縮装置15は、ハフマンブロックに対する辞書式圧縮で得られた1つ以上のシンボルが全てリテラルシンボルである場合、1つ以上のシンボルの終端にEOBシンボルを追加しない。これにより、データ圧縮装置15では、エントロピー符号化の対象となるシンボル数が減少するので、符号化のスループットと、圧縮効率とを向上できる。
また、データ圧縮装置15においてハフマンブロックに対する辞書式圧縮で得られた1つ以上のシンボルが全てリテラルシンボルである場合、データ伸張装置16は、圧縮ストリームを可変長復号して得られたリテラルシンボルの数に基づいて、ハフマンブロックの終端を検出できる。これにより、データ伸張装置16では、第1比較例のデータ伸張装置16C-1におけるEOBシンボルを復号する処理サイクルが不要であり、また第2比較例のデータ伸張装置16C-2における可変長復号で得られた辞書圧縮シンボルの種類に応じた非圧縮データサイズDSの計算も不要である。したがって、データ伸張装置16では復号のスループットを向上できる。
図9から図12を参照して、データ圧縮装置15とデータ伸張装置16のそれぞれの構成および動作について説明する。
(データ圧縮装置15)
図9は、実施形態に係るデータ圧縮装置15の構成例を示すブロック図である。データ圧縮装置15は、辞書式圧縮およびエントロピー符号化により、非圧縮データ31を圧縮ストリーム33に圧縮する圧縮器である。非圧縮データ31は、例えば、1つ以上のハフマンブロックを含む圧縮対象のデータである。データ圧縮装置15は、辞書式圧縮部21と、エントロピー符号化部22とを備える。
図9は、実施形態に係るデータ圧縮装置15の構成例を示すブロック図である。データ圧縮装置15は、辞書式圧縮およびエントロピー符号化により、非圧縮データ31を圧縮ストリーム33に圧縮する圧縮器である。非圧縮データ31は、例えば、1つ以上のハフマンブロックを含む圧縮対象のデータである。データ圧縮装置15は、辞書式圧縮部21と、エントロピー符号化部22とを備える。
辞書式圧縮部21は、辞書式圧縮により非圧縮データ31を辞書圧縮シンボル32に変換する。辞書圧縮シンボル32は、リテラルシンボルとマッチシンボルのいずれかである。辞書式圧縮部21は、辞書圧縮シンボル32をエントロピー符号化部22に送出する。
エントロピー符号化部22は、エントロピー符号化により辞書圧縮シンボル32を可変長符号に変換して、圧縮ストリーム33を生成する。エントロピー符号化部22は、例えば、全リテラル判定部224、EOB追加部221、符号化テーブル生成部222、および可変長符号化部223を含む。
辞書式圧縮部21、EOB追加部221、符号化テーブル生成部222、可変長符号化部223、全リテラル判定部224は、レジスタ、加算器、乗算器、セレクタ、および、その他の演算器のうちの少なくとも一つにより実現される。レジスタは、例えば、フリップフロップのような論理回路で実現される。加算器、乗算器、セレクタ、および、その他の演算器は、例えば、論理回路で実現される。
全リテラル判定部224は、第1のタイミング以降に連続して辞書式圧縮部21から受け取った1つ以上の辞書圧縮シンボル32(以下、辞書圧縮シンボル列32とも称する)が、全てリテラルシンボルであるか否かを判定する。第1のタイミングは、データ圧縮装置15におけるデータ圧縮処理が開始されたタイミング、またはEOB追加部221によってハフマンブロックの終端が通知されたタイミング(後述するブロック終端フラグを受け取ったタイミング)である。辞書圧縮シンボル列32は、例えば、1つのハフマンブロック(第1データブロック)に対する辞書式圧縮により得られたデータブロック(第2データブロック)に含まれる1つ以上の辞書圧縮シンボル32である。全リテラル判定部224は、例えば、辞書圧縮シンボル列32に含まれる各シンボルのバイト値が、予め規定された(例えば、DEFLATEで規定された)いずれかのリテラルシンボルのバイト値と一致するか否かに基づいて、辞書圧縮シンボル列32が全てリテラルシンボルであるか否かを判定する。
全リテラル判定部224は、辞書圧縮シンボル列32が全てリテラルシンボルであるか否かを示す情報(以下、全リテラル判定情報とも称する)を、EOB追加部221に送出する。全リテラル判定情報は、例えば、true(真)とfalse(偽)のいずれかを示す情報である。trueを示す値として、例えば、1が用いられる。falseを示す値として、例えば、0が用いられる。より具体的には、全リテラル判定部224は、例えば、常時、あるいは一定時間毎に、全リテラル判定情報を含む信号をEOB追加部221に送出する。
また、全リテラル判定部224には、EOB追加部221によってブロック終端フラグが送出される。ブロック終端フラグは、ハフマンブロックの終端(すなわち、判定対象の辞書圧縮シンボル列32の終端が、ハフマンブロックの終端に対応すること)を示す情報である。EOB追加部221によってブロック終端フラグが送出されたことに応じ、全リテラル判定部224は、現在の全リテラル判定情報をヘッダ部331として出力してもよい。この全リテラル判定情報は、例えばデータ伸張装置16において、圧縮ストリーム33に対するエントロピー復号で得られた辞書圧縮シンボルに対応するハフマンブロックが、全てリテラルシンボルであるハフマンブロックであるかどうかの判定に用いられる。
EOB追加部221は、全リテラル判定情報がfalseを示す場合に、1つのハフマンブロックに対応する1つ以上の辞書圧縮シンボル32の終端(末尾)にEOBシンボルを追加する。
具体的には、EOB追加部221は、例えば、辞書式圧縮部21から1つの辞書圧縮シンボル32を受け取る(取り込む)毎に、その辞書圧縮シンボル32が辞書式圧縮される前のデータサイズを取得し、取得したデータサイズの累積値(非圧縮データサイズ)を算出する。辞書圧縮シンボル32がリテラルシンボルである場合、辞書式圧縮される前のデータサイズは、例えば1バイトである。辞書圧縮シンボル32がマッチシンボルである場合、辞書式圧縮される前のデータサイズは、例えば、そのマッチシンボルが示すバイト単位の一致長である。EOB追加部221は、データサイズを取得した辞書圧縮シンボル32を、符号化テーブル生成部222と可変長符号化部223とに送出する。
EOB追加部221は、算出した非圧縮データサイズと、ブロックサイズ情報41とに基づいて、非圧縮データサイズの算出に用いた1つ以上の辞書圧縮シンボル32の終端がハフマンブロックの終端に対応するか否かを判定する。ブロックサイズ情報41は、1つのハフマンブロックのサイズ(ブロックサイズ)を示す。ブロックサイズ情報41は、例えば、情報処理システム1において規定されたブロックサイズに基づいて生成される。ブロックサイズ情報41は、データ圧縮装置15(またはメモリシステム3)内の任意の記憶領域に予め格納されていてもよいし、外部(例えば、ホスト2)から受信されてもよい。EOB追加部221は、算出した非圧縮データサイズがブロックサイズに達したか否かに基づいて、1つ以上の辞書圧縮シンボル32の終端がハフマンブロックの終端に対応するか否かを判定する。1つ以上の辞書圧縮シンボル32の終端(末尾)のシンボルは、データサイズを直前(最後)に取得したシンボルである。
算出した非圧縮データサイズがブロックサイズに達した場合(すなわち、1つ以上の辞書圧縮シンボル32の終端がハフマンブロックの終端に対応する場合)、EOB追加部221は、全リテラル判定部224から受け取った全リテラル判定情報がtrueとfalseのいずれを示しているかを判定する。
全リテラル判定情報がfalseを示す場合、EOB追加部221は、現在のハフマンブロックの終端にEOBシンボルを追加する。つまり、EOB追加部221は、符号化テーブル生成部222と可変長符号化部223とにEOBシンボルを送出する。送出したEOBシンボルは、直前にデータサイズを取得した辞書圧縮シンボル32に後に配置される。
一方、全リテラル判定情報がtrueを示す場合、EOB追加部221は、現在のハフマンブロックの終端にEOBシンボルを追加しない。つまり、EOB追加部221は、符号化テーブル生成部222と可変長符号化部223とにEOBシンボルを送出しない。したがって、直前にデータサイズを取得した辞書圧縮シンボル32の後にEOBシンボルは配置されない。
そして、EOB追加部221は、非圧縮データサイズの算出に用いた1つ以上の辞書圧縮シンボル32の終端がハフマンブロックの終端に対応することを示す情報(ブロック終端フラグ)を、全リテラル判定部224に送出する。EOB追加部221は、ブロック終端フラグを符号化テーブル生成部222に送出してもよい。
符号化テーブル生成部222は、1つのハフマンブロックに対応する複数のシンボルのシンボル毎の出現頻度に基づいて、符号化テーブル42を生成する。1つのハフマンブロックに対応する複数のシンボルは、例えば、第1のタイミングからブロック終端フラグを受け取るまでにEOB追加部221から受け取ったシンボルを含む。具体的には、符号化テーブル生成部222は、出現頻度が高いシンボルに短い符号語を割り当て、出現頻度が低いシンボルに長い符号語を割り当てる。符号化テーブル生成部222は、生成した符号化テーブル42を可変長符号化部223に送出する。また、符号化テーブル生成部222は、符号化テーブル42を示すデータを、圧縮ストリーム33のヘッダ部331として出力する。
可変長符号化部223は、可変長符号化により、1つのハフマンブロックに対応する複数のシンボルにそれぞれ対応する複数の可変長符号を生成する。具体的には、可変長符号化部223は、符号化テーブル42に基づいて、1つのハフマンブロックに対応する複数のシンボルのそれぞれを可変長符号に変換する。可変長符号化部223は、各シンボルから変換された可変長符号を、圧縮ストリーム33のペイロード部332として順に出力する。EOB追加部221によってEOBシンボルが追加された場合、ペイロード部332は、1つ以上の辞書圧縮シンボル32のそれぞれに対応する可変長符号と、EOBブロックに対応する末尾の可変長符号とを含む。EOB追加部221によってEOBシンボルが追加されなかった場合、ペイロード部332は、全てリテラルシンボルである複数の辞書圧縮シンボル32のそれぞれに対応する可変長符号を含む。
なお、符号化テーブル生成部222は、EOB追加部221から次のハフマンブロックに対応する複数のシンボルを受け取った場合、新たな符号化テーブル42を生成して、可変長符号化部223に送出する。可変長符号化部223は、新たな符号化テーブル42を用いて、そのハフマンブロックに対応する複数のシンボルのそれぞれを可変長符号に変換する。
したがって、圧縮ストリーム33は、ハフマンブロック毎の、符号化テーブル42を含むヘッダ部331と、ペイロード部332とで構成される。ペイロード部332は、(A)辞書圧縮シンボル列32およびEOBシンボルを可変長符号化した可変長符号列と、(B)全てリテラルシンボルである辞書圧縮シンボル列32を可変長符号化した可変長符号列のいずれかを含む。
なお、ペイロード部332が、(B)全てリテラルシンボルである辞書圧縮シンボル列32を可変長符号化した可変長符号列を含む場合、ヘッダ部331は、その可変長符号列のサイズを示す情報(以下、圧縮サイズ情報と称する)をさらに含んでいてもよい。ペイロード部332に含まれる可変長符号列のサイズは、対応するハフマンブロックに対する辞書式圧縮およびエントロピー符号化により得られる可変長符号列(すなわち、圧縮されたハフマンブロック)のサイズである。圧縮サイズ情報は、例えばデータ伸張装置16において、圧縮ストリーム33内の1つ以上の可変長符号(可変長符号列)に対するエントロピー復号で1つ以上のシンボルが得られた場合に、それら1つ以上の可変長符号の終端がハフマンブロックの終端に対応するかどうかの判定に用いられる。つまり、圧縮サイズ情報は、ハフマンブロック間の境界の判定に用いられる。
ここで、全リテラル判定部224による具体的な処理の例を示すと共に、EOB追加部221が全リテラル判定情報に応じてEOBシンボルを追加するか否かを変更することによる効果について説明する。
図10は、実施形態に係るデータ圧縮装置15において実行される全リテラル判定処理の手順の例を示すフローチャートである。全リテラル判定処理は、ハフマンブロックに対応する1つ以上の辞書圧縮シンボル32が全てリテラルシンボルであるか否かを判定する処理である。全リテラル判定部224は、例えば、データ圧縮装置15に非圧縮データ31が入力されたことに応じ、全リテラル判定処理を実行する。ここでは、全リテラル判定処理に、変数Lが用いられる例を示す。変数Lは、変数Lが初期化された後に全リテラル判定部224が辞書式圧縮部21から受け取った1つ以上の辞書圧縮シンボル32が、全てリテラルシンボルであったか否かを示す変数である。
まず、全リテラル判定部224は、変数Lを初期化する(ステップS201)。具体的には、全リテラル判定部224は、変数Lをtrueに設定する。変数Lは、例えば、trueとfalseのいずれかに設定される。trueは、例えば、変数Lが初期化された後に辞書式圧縮部21から受け取った1つ以上の辞書圧縮シンボル32が全てリテラルシンボルであったことを示す。falseは、例えば、変数Lが初期化された後に辞書式圧縮部21から受け取った1つ以上の辞書圧縮シンボル32の少なくとも1つがリテラルシンボルでなかったこと(すなわち、マッチシンボルであったこと)を示す。変数Lを含む信号は、全リテラル判定部224からEOB追加部221へ全リテラル判定情報として出力される。
全リテラル判定部224は、辞書式圧縮部21から辞書圧縮シンボル32を受信する(ステップS202)。そして、全リテラル判定部224は、変数Lがtrueであるか否かを判定する(ステップS203)。
変数Lがfalseである場合(ステップS203のNo)、全リテラル判定部224はステップS206に進む。
変数Lがtrueである場合(ステップS203のYes)、全リテラル判定部224は、受信した辞書圧縮シンボルがリテラルシンボルであるか否かを判定する(ステップS204)。
受信した辞書圧縮シンボルがリテラルシンボルである場合(ステップS204のYes)、全リテラル判定部224はステップS206に進む。
受信した辞書圧縮シンボルがリテラルシンボルでない場合(ステップS204のNo)全リテラル判定部224は、変数Lをfalseに設定し(ステップS205)、ステップS206に進む。
次いで、全リテラル判定部224は、現在のハフマンブロックの終端を示す信号(ブロック終端フラグ)を、EOB追加部221から受信したか否かを判定する(ステップS206)。
現在のハフマンブロックの終端を示す信号をEOB追加部221から受信していない場合(ステップS206のNo)、全リテラル判定部224はステップS202に戻る。つまり、全リテラル判定部224は、辞書式圧縮部21から辞書圧縮シンボルを受信し、変数Lがtrueである間、受信した辞書圧縮シンボルがリテラルシンボルであるか否かを判定する処理をさらに行う。
現在のハフマンブロックの終端を示す信号をEOB追加部221から受信している場合(ステップS206のYes)、全リテラル判定部224はステップS201に戻る。つまり、全リテラル判定部224は、変数Lを初期化して、次のハフマンブロックに対する辞書式圧縮によって得られるシンボルが全てリテラルシンボルであるかどうかを判定する処理をさらに行う。
以上の全リテラル判定処理により、全リテラル判定部224は、変数Lを用いて、ハフマンブロックに対する辞書式圧縮によって得られたシンボルが全てリテラルシンボルであるか否かを示す信号(全リテラル判定情報)を、EOB追加部221に出力できる。
具体的には、ハフマンブロックに対する辞書式圧縮によって得られた1つ以上の辞書圧縮シンボル32が全てリテラルシンボルである場合(すなわち、変数Lがtrueである場合)、EOB追加部221は、それら複数の辞書圧縮シンボル32の末尾にEOBシンボルを追加しない。これにより、データ圧縮装置15では、エントロピー符号化の対象となるシンボル数が減少するので、圧縮効率と、符号化のスループットとを向上できる。
一方、ハフマンブロックに対する辞書式圧縮によって得られた1つ以上の辞書圧縮シンボル32の少なくとも1つがリテラルシンボルでない場合(すなわち、変数Lがfalseである場合)、EOB追加部221は、それら複数の辞書圧縮シンボル32の末尾にEOBシンボルを追加する。この場合、EOBシンボルを用いてハフマンブロック間の境界を検出できるので、例えば、第2比較例のデータ伸張装置16C-2のように可変長復号で得られた辞書圧縮シンボルの種類に応じた非圧縮データサイズDSを計算する必要がない。したがって、データ伸張装置16における復号のスループットの低下を回避できる。
以上の構成により、データ圧縮装置15は、辞書式圧縮およびエントロピー符号化により、非圧縮データ31を圧縮ストリーム33に圧縮できる。データ圧縮装置15は、ハフマンブロックに対する辞書式圧縮によって得られた1つ以上の辞書圧縮シンボル32が全てリテラルシンボルである場合、EOBシンボルを追加しないことにより、圧縮効率と、符号化のスループットとを向上できる。また、データ圧縮装置15は、ハフマンブロックに対する辞書式圧縮によって得られた1つ以上の辞書圧縮シンボル32の少なくとも1つがリテラルシンボルでない場合、EOBシンボルを追加することにより、復号時のスループットの低下を回避できる。
(データ伸張装置16)
図11は、実施形態に係るデータ伸張装置の構成例を示すブロック図である。データ伸張装置16は、エントロピー復号および辞書式伸張により、圧縮ストリーム33を非圧縮データ31に伸張する伸張器である。圧縮ストリーム33は、1つ以上のハフマンブロックに対応する伸張対象のデータである。データ伸張装置16は、エントロピー復号部51と、辞書式伸張部52とを備える。
図11は、実施形態に係るデータ伸張装置の構成例を示すブロック図である。データ伸張装置16は、エントロピー復号および辞書式伸張により、圧縮ストリーム33を非圧縮データ31に伸張する伸張器である。圧縮ストリーム33は、1つ以上のハフマンブロックに対応する伸張対象のデータである。データ伸張装置16は、エントロピー復号部51と、辞書式伸張部52とを備える。
エントロピー復号部51は、エントロピー復号により圧縮ストリーム33から辞書圧縮シンボル32を生成する。エントロピー復号部51は、例えば、ヘッダ/ペイロード分離部511、符号化テーブル復元部512、可変長復号部513、EOB検出部514、ブロック境界判定部515、全リテラル判定部516、およびマルチプレクサ(MUX)517を含む。
辞書式伸張部52、ヘッダ/ペイロード分離部511、符号化テーブル復元部512、可変長復号部513、EOB検出部514、ブロック境界判定部515、全リテラル判定部516、MUX517は、レジスタ、加算器、乗算器、セレクタ、および、その他の演算器のうちの少なくとも一つにより実現される。レジスタは、例えば、フリップフロップのような論理回路で実現される。加算器、乗算器、セレクタ、および、その他の演算器は、例えば、論理回路で実現される。
ヘッダ/ペイロード分離部511は、圧縮ストリーム33に含まれるヘッダ部331とペイロード部332とを分離する。ヘッダ/ペイロード分離部511は、ヘッダ部331を符号化テーブル復元部512に送出する。ヘッダ/ペイロード分離部511は、ヘッダ部331に後続するペイロード部332を可変長復号部513に送出する。なお、ヘッダ部331に全リテラル判定情報が含まれる場合、ヘッダ/ペイロード分離部511は、全リテラル判定情報を全リテラル判定部516に送出してもよい。
符号化テーブル復元部512は、ヘッダ部331に含まれるデータを用いて、符号化テーブル42を復元する。符号化テーブル復元部512は、復元した符号化テーブル42を可変長復号部513に送出する。
可変長復号部513は、可変長復号により、ペイロード部332に含まれる複数の可変長符号にそれぞれ対応する複数のシンボルを生成する。具体的には、可変長復号部513は、符号化テーブル42に基づいて、ペイロード部332に含まれる複数の可変長符号のそれぞれをシンボルに変換する。変換により得られるシンボルは、辞書圧縮シンボル、またはEOBシンボルである。可変長復号部513は、生成したシンボルを順に、EOB検出部514、ブロック境界判定部515、全リテラル判定部516、および辞書式伸張部52のそれぞれに送出する。
EOB検出部514は、可変長復号部513から受け取ったシンボルからEOBシンボルを検出し、EOBシンボルを検出したことを示す情報をMUX517とブロック境界判定部515とに送出する。EOBシンボルを検出したことを示す情報を、EOB検出フラグとも称する。
具体的には、EOB検出部514は、可変長復号部513からシンボルを受け取る毎に、そのシンボルがEOBシンボルと一致するか否かを判定する。例えば、可変長復号部513から1つ以上のシンボルを受け取る場合、EOB検出部514は、それら1つ以上のシンボルの先頭から順にEOBシンボル(より詳しくは、EOBシンボルに割り当てられた値)と一致するか否かを判定する。先頭のシンボルから末尾のシンボルの一つ前のシンボルまでEOBシンボルが検出されなかった場合、末尾のシンボルがEOBシンボルと一致するか否かを判定する。EOB検出部514は、その末尾のシンボルがEOBシンボルと一致する場合、その末尾のシンボルをEOBシンボルとして検出する。これにより、EOB検出部514は、それら1つ以上のシンボルの終端が、ハフマンブロックの終端に対応することを検出する。そして、EOB検出部514は、EOB検出フラグ(すなわち、1つ以上のシンボルの終端がハフマンブロックの終端に対応することを示す情報)を、MUX517とブロック境界判定部515とに送出する。
ブロック境界判定部515は、第2のタイミング以降に連続して可変長復号部513から受け取った1つ以上のシンボルの終端が、ハフマンブロックの終端に対応することを示す情報(ブロック境界フラグ)をMUX517に送出する。第2のタイミングは、データ伸張装置16におけるデータ伸張処理が開始されたタイミング、またはEOB検出部514からEOB検出フラグを受け取ったタイミングである。
具体的には、ブロック境界判定部515は、可変長復号部513からシンボルを受け取る毎に、そのシンボルが辞書式伸張された場合のデータサイズを取得し、取得したデータサイズの累積値(非圧縮データサイズ)を算出する。ブロック境界判定部515は、受け取ったシンボルがリテラルシンボルであると仮定して、そのシンボルが辞書式伸張された場合のデータサイズを取得する。リテラルシンボルは辞書式圧縮されていないシンボルであるので、リテラルシンボルが辞書式伸張された場合のデータサイズは、例えば1バイトである。したがって、ブロック境界判定部515は、可変長復号部513から受け取ったシンボルがリテラルシンボルであると仮定することにより、受け取ったシンボルの数をカウントすることで、非圧縮データサイズを容易に算出できる。
ブロック境界判定部515は、算出した非圧縮データサイズと、ブロックサイズ情報41とに基づいて、非圧縮データサイズの算出に用いた1つ以上のシンボルの終端がハフマンブロックの終端に対応するか否かを判定する。ブロックサイズ情報41は、データ伸張装置16(またはメモリシステム3)内の任意の記憶領域に予め格納されていてもよいし、外部(例えば、ホスト2)から受信されてもよい。具体的には、ブロック境界判定部515は、算出した非圧縮データサイズがブロックサイズに達したことに応じ、それら1つ以上のシンボルの終端がハフマンブロックの終端に対応すると判断する。直前にデータサイズを算出したシンボルは、1つのハフマンブロックの終端に対応する。これにより、ブロック境界判定部515は、ハフマンブロック間の境界を検出できる。ブロック境界判定部515は、ハフマンブロック間の境界を検出したことに応じ、ブロック境界フラグをMUX517に送出する。ブロック境界フラグは、例えば、ハフマンブロック間の境界を検出したこと(すなわち、1つ以上のシンボルの終端がハフマンブロックの終端に対応すること)を示す信号である。なお、ブロック境界判定部515による具体的な処理の例は、図12のフローチャートを参照して後述する。
全リテラル判定部516は、第3のタイミング以降に連続して可変長復号部513から受け取った1つ以上のシンボル(以下、対象シンボル列とも称する)が、全てリテラルシンボルであるか否かを示す情報(全リテラル判定情報)を、MUX517とブロック境界判定部515とに送出する。第3のタイミングは、データ伸張装置16におけるデータ伸張処理が開始されたタイミング、またはMUX517によってハフマンブロックの終端が通知されたタイミングである。全リテラル判定部516は、例えば、対象シンボル列に含まれる各シンボルのバイト値が、予め規定された(例えば、DEFLATEで規定された)いずれかのリテラルシンボルのバイト値と一致するか否かに基づいて、対象シンボル列が全てリテラルシンボルであるか否かを判定する。
なお、全リテラル判定部516は、ヘッダ/ペイロード分離部511から受け取った全リテラル判定情報(すなわち、ヘッダ部331内の全リテラル判定情報)を用いて、対象シンボル列が全てリテラルシンボルであるか否かを判定してもよい。この場合、全リテラル判定部516の回路規模(演算量)を削減できる。
全リテラル判定部516は、例えば、常時、あるいは一定時間毎に、全リテラル判定情報をMUX517とブロック境界判定部515とに送出する。全リテラル判定部516による全リテラル判定処理は、データ圧縮装置15の全リテラル判定部224による全リテラル判定処理とほぼ同様である。より詳しくは、全リテラル判定部516による全リテラル判定処理は、図10のフローチャートを参照して前述した全リテラル判定処理における辞書式圧縮部21およびEOB追加部221を、全リテラル判定部516にシンボルを送出する可変長復号部513、およびハフマンブロックの終端を通知するMUX517にそれぞれ置き換えた処理に相当する。
MUX517は、全リテラル判定情報がtrueとfalseのいずれであるかに応じて、EOB検出部514によって出力されたEOB検出フラグと、ブロック境界判定部515によって出力されたブロック境界フラグのいずれかを出力するセレクタである。なお、図11に示す例では、MUX517内において、trueである全リテラル判定情報を“1”として、falseである全リテラル判定情報を“0”として、表している。具体的には、全リテラル判定部516からfalse(図11では、0)を示す全リテラル判定情報を受け取っている間に、EOB検出部514からEOB検出フラグを受け取った場合、MUX517は、EOB検出フラグに基づいて、符号化テーブル42の切り替えを符号化テーブル復元部512に通知し、現在のハフマンブロックの終端を全リテラル判定部516に通知する。これに対して、全リテラル判定部516からtrue(図11では、1)を示す全リテラル判定情報を受け取っている間に、ブロック境界判定部515からブロック境界フラグを受け取った場合、MUX517は、ブロック境界フラグに基づいて、符号化テーブル42の切り替えを符号化テーブル復元部512に通知し、現在のハフマンブロックの終端を全リテラル判定部516に通知する。具体的には、MUX517は、符号化テーブル42の切り替えを通知するために、例えば、符号化テーブル42の切り替えを示す信号を符号化テーブル復元部512に送出する。MUX517は、現在のハフマンブロックの終端を通知するために、例えば、現在のハフマンブロックの終端を示す信号を全リテラル判定部516に送出する。
符号化テーブル復元部512は、MUX517からの符号化テーブル42の切り替えの通知に応じて、ヘッダ/ペイロード分離部511から受け取った次のヘッダ部に含まれるデータを用いて、新たな符号化テーブル42を復元する。可変長復号部513は、新たな符号化テーブル42を用いて、後続するペイロード部に含まれる複数の可変長符号のそれぞれをシンボルに変換する。
辞書式伸張部52は、辞書式伸張により、可変長復号部513から受け取った辞書圧縮シンボルから非圧縮データ31を生成する。具体的には、辞書式伸張部52は、辞書圧縮シンボルがマッチシンボルである場合、ポインタにより示されるヒストリバッファ内の過去のバイト列を、非圧縮データ31として出力する。辞書式伸張部52は、辞書圧縮シンボルがリテラルシンボルである場合、リテラルシンボルをそのまま非圧縮データ31として出力する。なお、辞書式伸張部52は、可変長復号部513から受け取ったEOBシンボルを非圧縮データ31として出力しない。
ここで、ブロック境界判定部515による具体的な処理の例を示すと共に、MUX517が全リテラル判定情報に応じてEOB検出フラグとブロック境界フラグのいずれかを選択して、符号化テーブル42の切り替えを符号化テーブル復元部512に通知することによる効果について説明する。
図12は、実施形態に係るデータ伸張装置16において実行されるブロック境界判定処理の手順の例を示すフローチャートである。ブロック境界判定処理は、現在のハフマンブロックに対応するシンボル(より詳しくは、可変長復号されたシンボル)が全てリテラルシンボルである場合に、ハフマンブロック間の境界を判定する処理である。ブロック境界判定部515は、例えば、データ伸張装置16に圧縮ストリーム33が入力されたことに応じ、ブロック境界判定処理を実行する。
まず、ブロック境界判定部515はカウンタCを初期化する(ステップS301)。具体的には、ブロック境界判定部515は、カウンタCを0に設定する。カウンタCは、カウンタCが初期化された後にブロック境界判定部515が可変長復号部513から受け取ったシンボルの数を示す変数である。つまり、カウンタCは、可変長復号部513から受け取ったシンボルがリテラルシンボル(すなわち、1バイトのシンボル)であると仮定した場合の非圧縮データサイズを示す。
ブロック境界判定部515は、可変長復号部513からシンボルを受信する(ステップS302)。そして、ブロック境界判定部515は、カウンタCを初期化した後にEOB検出部514によってEOBシンボルが検出されたか否かを判定する(ステップS303)。具体的には、ブロック境界判定部515は、例えば、カウンタCを初期化した後にEOB検出部514からEOB検出フラグを受け取ったか否かを判定する。
EOB検出部514によってEOBシンボルが検出された場合(ステップS303のYes)、ブロック境界判定部515はステップS301に戻る。つまり、ブロック境界判定部515は、EOBシンボルの検出によって現在のハフマンブロックの終端が既に検出されているので、次のハフマンブロックの終端を判定するための処理をさらに行う。
EOB検出部514によってEOBシンボルが検出されていない場合(ステップS303のNo)、ブロック境界判定部515はカウンタCに1を加算する(ステップS304)。ブロック境界判定部515は、カウンタCを初期化した後に受信したシンボル(すなわち、現在のハフマンブロックに対応する辞書圧縮シンボル)が全てリテラルシンボルであるか否かを判定する(ステップS305)。具体的には、ブロック境界判定部515は、例えば、全リテラル判定部516から受け取った全リテラル判定情報に基づいて、カウンタCを初期化した後に受信したシンボルが全てリテラルシンボルであるか否かを判定する。
カウンタCを初期化した後に受信したシンボルの少なくとも1つがリテラルシンボルでない場合(ステップS305のNo)、ブロック境界判定部515はステップS302に戻る。この場合、ブロック境界判定部515は、カウンタCを用いたハフマンブロックの境界の検出を行うことができない。つまり、ブロック境界判定部515は、受信したシンボルが全てリテラルシンボルであると仮定した場合の非圧縮データサイズに基づくハフマンブロックの境界の検出を行うことができない。そのため、ブロック境界判定部515は、ステップS303でEOB検出部514によってEOBシンボルが検出されたことに応じ、次のハフマンブロックの境界を検出するためにステップS301に戻る。
カウンタCを初期化した後に受信したシンボルが全てリテラルシンボルである場合(ステップS305のYes)、ブロック境界判定部515は、カウンタCがブロックサイズと等しいか否かを判定する(ステップS306)。
カウンタCがブロックサイズと等しい場合(ステップS306のYes)、ブロック境界判定部515は、現在のハフマンブロックの境界を検出したと判断して、ブロック境界フラグを出力し(ステップS307)、ステップS301に戻る。つまり、ブロック境界判定部515は、次のハフマンブロックのブロック境界を検出するための処理をさらに行う。ブロック境界フラグは、MUX517を介して符号化テーブル復元部512に出力される。これにより、符号化テーブル42の切り替えが符号化テーブル復元部512に指示される。
符号化テーブル復元部512は、ブロック境界フラグを受け取ったことに応じて、圧縮ストリーム33内の次のヘッダ部を取得する。符号化テーブル復元部512は、取得したヘッダ部を用いて新たな符号化テーブル42を復元して、前の符号化テーブル42から切り替える。これにより、可変長復号部513は、新たな符号化テーブル42を用いて、圧縮ストリーム33内の後続するシンボル(ペイロード部)を復号する。
以上のブロック境界判定処理により、データ伸張装置16は、ハフマンブロックに対応する可変長復号されたシンボル(辞書圧縮シンボル)が全てリテラルシンボルである場合、可変長復号部513から得られたシンボルの数に基づいて、ハフマンブロックの終端を検出できる。この場合、データ伸張装置16では、第1比較例のデータ伸張装置16C-1におけるEOBシンボルを復号する処理サイクルが不要であり、また第2比較例のデータ伸張装置16C-2における可変長復号で得られたシンボルの種類に応じた非圧縮データサイズDSの計算も不要である。したがって、データ伸張装置16では復号のスループットを向上できる。また、対応する辞書圧縮シンボルが全てリテラルシンボルであるハフマンブロックにはEOBシンボルが追加されていないので、入力される圧縮ストリーム33は圧縮効率が高いデータである。
なお、ブロック境界判定部515は、圧縮サイズ情報を用いて、第2のタイミング以降に連続して可変長復号部513から受け取った1つ以上のシンボルの終端が、ハフマンブロックの終端に対応するか否かを判定してもよい。圧縮サイズ情報は、対応するハフマンブロックに対する辞書式圧縮およびエントロピー符号化により得られるデータブロック(より詳しくは、可変長符号列)のサイズを示す情報である。圧縮サイズ情報は、例えば、ヘッダ部331から取得される。なお、特定のサイズを示す圧縮サイズ情報が、データ伸張装置16に予め格納されていてもよい。
具体的には、ブロック境界判定部515は、可変長復号部513から受け取った1つ以上のシンボルに対応する1つ以上の可変長符号のデータサイズ(以下、圧縮データサイズと称する)を算出する。ブロック境界判定部515は、例えば、符号化テーブル42を用いて、可変長復号部513からシンボルを受け取る毎に、そのシンボルが可変長復号される前のデータサイズ(例えば、対応する可変長符号の符号長)を取得し、取得したデータサイズの累積値を圧縮データサイズとして算出する。そして、ブロック境界判定部515は、例えば受け取った1つ以上のシンボルが全てリテラルシンボルである場合、算出した圧縮データサイズと、圧縮サイズ情報とに基づいて、圧縮データサイズの算出に用いた1つ以上のシンボルの終端がハフマンブロックの終端に対応することを示す情報(ブロック境界フラグ)を、MUX517に送出する。より詳しくは、ブロック境界判定部515は、全リテラル判定部516から受け取った全リテラル判定情報がtrueを示し、且つ算出した圧縮データサイズが圧縮サイズ情報に示されるサイズと等しい場合、ブロック境界フラグをMUX517に送出する。圧縮サイズ情報を用いてハフマンブロック間の境界を判定する場合にも、図12を参照して前述したブロック境界判定処理と同様の効果を得ることができる。
以上の構成により、データ伸張装置16は、エントロピー復号および辞書式伸張により、圧縮ストリーム33を非圧縮データ31に伸張できる。データ伸張装置16は、圧縮ストリーム33に対するエントロピー復号によって得られた1つ以上のシンボルが全てリテラルシンボルである場合、それらシンボルの数をカウントすることでハフマンブロック間の境界を判断でき、復号のスループットを向上できる。また、データ伸張装置16は、圧縮ストリーム33に対するエントロピー復号によって得られた1つ以上のシンボルの少なくとも1つがリテラルシンボルでない場合、EOBシンボルを検出することでハフマンブロック間の境界を判断でき、復号のスループットの低下を回避できる。
なお、前述したように、データ圧縮装置15は、非圧縮データ31が圧縮された圧縮ストリーム33を生成する。例えば、非圧縮データ31がホスト2によってNAND型フラッシュメモリ4に書き込むことを要求されたデータである場合、CPU11は、NAND I/F12を介して圧縮ストリーム33をNAND型フラッシュメモリ4に書き込む。
また、コントローラ6は、さらに、ECCエンコーダとECCデコーダを備えてもよい。この場合、ECCエンコーダが、データ圧縮装置15から出力される圧縮データ(圧縮ストリーム)33に対して誤り訂正用のパリティ(ECCパリティ)を生成し、生成したECCパリティと圧縮データ33とを有する符号語を生成する。そして、CPU11が、符号語をNAND I/F12経由でNAND型フラッシュメモリ4へ書き込むように構成される。つまり、CPU11は、データ圧縮装置15から出力される圧縮データ33に基づくデータを、NAND I/F12を介してNAND型フラッシュメモリ4に書き込むように構成される。また、CPU11は、例えばホスト2からホストI/F14を介してリードコマンドを受信する場合、当該リードコマンドに基づくデータをNAND I/F12を介してNAND型フラッシュメモリ4から読み出す。ECCデコーダは、読み出されたデータに対する誤り訂正処理を実行する。誤り訂正処理が実行された読み出しデータは圧縮データ33としてCPU11によりデータ伸張装置16へ入力され、データ伸張装置16は、入力された圧縮データ33を伸張する。CPU11は、ホスト2からのリードコマンドに対して、伸張された非圧縮データ31をホスト2へ送信する。つまり、ホスト2からのリードコマンドに対して、CPU11は、NAND型フラッシュメモリ4から読み出したデータに基づく圧縮データ33を伸張し、伸張した非圧縮データ31をホスト2へ送信するように構成される。
なお、データ圧縮装置15およびデータ伸張装置16の一部または全ては、回路のようなハードウェアとして実現されてもよいし、少なくとも1つのプロセッサによって実行されるプログラム(すなわちソフトウェア)として実現されてもよい。
以上説明したように、本実施形態に係るデータ圧縮装置15およびデータ伸張装置16によれば、スループットを向上できる。
データ圧縮装置15において、全リテラル判定部224は、第1データブロック(ハフマンブロック)に対する辞書式圧縮により得られた第2データブロックに含まれる1つ以上のシンボルが、全てリテラルシンボルであるか否かを判定する。EOB追加部221は、1つ以上のシンボルが全てリテラルシンボルである場合、第2データブロックの終端にブロック終端シンボルを追加しない。EOB追加部221は、1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、第2データブロックの終端にブロック終端シンボルを追加する。
このように、EOB追加部221は、ハフマンブロックに対する辞書式圧縮で得られた1つ以上のシンボルが全てリテラルシンボルである場合、1つ以上のシンボルの終端にEOBシンボルを追加しない。これにより、データ圧縮装置15では、エントロピー符号化の対象となるシンボル数が減少するので、符号化のスループットと、圧縮効率とを向上できる。
また、データ伸張装置16において、全リテラル判定部516は、圧縮データ33をエントロピー復号することによって得られた1つ以上のシンボルが、全てリテラルシンボルであるか否かを判定する。ブロック境界判定部515は、1つ以上のシンボルが辞書式伸張された場合の第1データサイズを算出し、1つ以上のシンボルが全てリテラルシンボルである場合、第1データサイズと、非圧縮のデータブロック(ハフマンブロック)のサイズを示すブロックサイズ情報41とに基づいて、1つ以上のシンボルの終端がデータブロックの終端に対応することを示す情報を出力する。EOB検出部514は、1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、1つ以上のシンボルの末尾のシンボルに基づいて、1つ以上のシンボルの終端がデータブロックの終端に対応することを示す情報を出力する。
このように、ブロック境界判定部515は、1つ以上のシンボルが全てリテラルシンボルである場合、EOBシンボルの検出を行うことなく、ハフマンブロックの終端を検出できる。また、EOB検出部514は、1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合には、EOBシンボルを検出して、ハフマンブロックの終端を判別できる。これにより、データ伸張装置16では復号のスループットを向上できる。
本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…情報処理システム、2…ホスト、3…メモリシステム、4…NAND型フラッシュメモリ、5…DRAM、6…コントローラ、11…CPU、12…NAND I/F、13…DRAM I/F、14…ホストI/F、15…データ圧縮装置、16…データ伸張装置、21…辞書式圧縮部、22…エントロピー符号化部、221…EOB追加部、222…符号化テーブル生成部、223…可変長符号化部、224…全リテラル判定部、31…非圧縮データ、33…圧縮ストリーム、331…ヘッダ部、332…ペイロード部、333…ブロック終端シンボル(EOBシンボル)、51…エントロピー復号部、52…辞書式伸張部、511…ヘッダ/ペイロード分離部、512…符号化テーブル復元部、513…可変長復号部、514…EOB検出部、515…ブロック境界判定部、516…全リテラル判定部、517…MUX。
Claims (23)
- 第1データブロックに対する辞書式圧縮により得られた第2データブロックに含まれる1つ以上のシンボルが、全てリテラルシンボルであるか否かを判定する全リテラル判定部と、
前記1つ以上のシンボルが全てリテラルシンボルである場合、前記第2データブロックの終端にブロック終端シンボルを追加せず、
前記1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、前記第2データブロックの終端に前記ブロック終端シンボルを追加する終端シンボル追加部と、
を具備するデータ圧縮装置。 - 前記第1データブロックを辞書式圧縮して前記第2データブロックを生成する辞書式圧縮回路をさらに備え、
前記終端シンボル追加部は、
前記1つ以上のシンボルを、前記辞書式圧縮回路から1シンボルずつ取り込み、前記取り込んだシンボルが辞書式圧縮される前のデータサイズを取得し、前記取得したデータサイズの累積値を算出し、
前記算出した累積値が、前記第1データブロックのサイズ情報が示すサイズに達する場合に、前記取り込んだシンボルが前記第1データブロックの終端に対応すると判定し、前記1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、前記第2データブロックの終端に前記ブロック終端シンボルを追加する、
請求項1に記載のデータ圧縮装置。 - 前記全リテラル判定部は、
前記取り込んだシンボルがリテラルシンボルであるか否かを判定し、リテラルシンボルでない場合はフラグをFalseに設定する、
請求項2に記載のデータ圧縮装置。 - 前記終端シンボル追加部は、
前記取り込んだシンボルが前記第1データブロックの終端に対応すると判定する場合に、前記フラグがFalseであるならば、前記1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでないと判定する、
請求項3に記載のデータ圧縮装置。 - 前記第2データブロックをエントロピー符号化することによって圧縮データを生成する符号化部をさらに具備する、
請求項1に記載のデータ圧縮装置。 - 前記圧縮データは、前記1つ以上のシンボルが全てリテラルシンボルであるか否かを示す情報を含む、
請求項5に記載のデータ圧縮装置。 - 前記圧縮データは、前記第2データブロックのサイズを示す情報を含む、
請求項5に記載のデータ圧縮装置。 - 前記第2データブロックのシンボル毎の出現頻度に基づいて、符号化テーブルを生成する符号化テーブル生成部をさらに具備し、
前記符号化部は、前記符号化テーブルを用いて前記第2データブロックをエントロピー符号化する、
請求項5に記載のデータ圧縮装置。 - 前記終端シンボル追加部は、
前記1つ以上のシンボルが辞書式圧縮される前のデータサイズを算出し、
前記データサイズと、前記第1データブロックのサイズを示す情報とに基づいて、前記1つ以上のシンボルの終端が前記第1データブロックの終端に対応するか否かを判定し、
前記1つ以上のシンボルの終端が前記第1データブロックの終端に対応し、且つ前記1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、前記第2データブロックの終端に前記ブロック終端シンボルを追加する、
請求項1に記載のデータ圧縮装置。 - 前記全リテラル判定部は、前記1つ以上のシンボルが全てリテラルシンボルであるか否かを示す情報を、前記終端シンボル追加部に出力する、
請求項9に記載のデータ圧縮装置。 - 前記終端シンボル追加部は、前記1つ以上のシンボルの終端が前記第1データブロックの終端に対応することを示す情報を、前記全リテラル判定部に出力する、
請求項1に記載のデータ圧縮装置。 - 不揮発性メモリと、
請求項5に記載のデータ圧縮装置を含み、前記圧縮データを前記不揮発性メモリに書き込むように構成されるコントローラと、
を具備するメモリシステム。 - 圧縮データをエントロピー復号することによって得られた1つ以上のシンボルが全てリテラルシンボルであるか否かを判定する全リテラル判定部と、
前記1つ以上のシンボルが辞書式伸張された場合の第1データサイズを算出し、前記1つ以上のシンボルが全てリテラルシンボルである場合、前記第1データサイズと、非圧縮のデータブロックのサイズを示す情報とに基づいて、前記1つ以上のシンボルの終端が前記データブロックの終端に対応することを示す第1情報を出力するブロック境界判定部と、
前記1つ以上のシンボルの内の少なくとも1つのシンボルがリテラルシンボルでない場合、前記1つ以上のシンボルの末尾のシンボルに基づいて、前記1つ以上のシンボルの終端が前記データブロックの終端に対応することを示す第2情報を出力する終端シンボル検出部と、
を具備するデータ伸張装置。 - 前記圧縮データは、前記1つ以上のシンボルが全てリテラルシンボルであるか否かを示す第3情報を含み、
前記全リテラル判定部は、前記第3情報に基づいて、前記1つ以上のシンボルが全てリテラルシンボルであるか否かを判定する、
請求項13に記載のデータ伸張装置。 - 前記ブロック境界判定部は、前記1つ以上のシンボルの数に基づいて前記第1データサイズを算出する、
請求項13または請求項14に記載のデータ伸張装置。 - 前記ブロック境界判定部は、前記第1データサイズと、前記非圧縮のデータブロックのサイズとが等しい場合、前記第1情報を出力する、
請求項15に記載のデータ伸張装置。 - 前記終端シンボル検出部は、
前記末尾のシンボルがブロック終端シンボルであるか否かを判定し、
前記末尾のシンボルが前記ブロック終端シンボルである場合、前記第2情報を出力する、
請求項13または請求項14に記載のデータ伸張装置。 - 前記終端シンボル検出部は、前記末尾のシンボルが前記ブロック終端シンボルである場合、前記第2情報を前記ブロック境界判定部に出力する、
請求項17に記載のデータ伸張装置。 - 前記圧縮データから得られる第1符号化テーブルを用いて前記圧縮データをエントロピー復号することによって、前記1つ以上のシンボルを生成し、
前記第1情報が出力された場合、または前記第2情報が出力された場合、前記圧縮データから得られる前記第1符号化テーブルとは異なる第2符号化テーブルを用いて前記圧縮データをエントロピー復号することによって、前記1つ以上のシンボルに後続する1つ以上のシンボルを生成する復号部をさらに具備する、
請求項13に記載のデータ伸張装置。 - 前記圧縮データに含まれる1つ以上の可変長符号をエントロピー復号することによって、前記1つ以上のシンボルを生成する復号部をさらに具備し、
前記ブロック境界判定部は、
前記1つ以上の可変長符号の第2データサイズを算出し、
前記1つ以上のシンボルが全てリテラルシンボルである場合、前記第2データサイズと、第1データブロックに対する辞書式圧縮およびエントロピー符号化により得られる第2データブロックのサイズを示す第3情報とに基づいて、前記第1情報を出力する、
請求項13に記載のデータ伸張装置。 - 前記ブロック境界判定部は、前記第2データサイズと、前記第2データブロックのサイズとが等しい場合、前記第1情報を出力する、
請求項20に記載のデータ伸張装置。 - 前記圧縮データは、前記第3情報を含む、
請求項20に記載のデータ伸張装置。 - 不揮発性メモリと、
請求項13に記載のデータ伸張装置を含み、前記圧縮データを前記不揮発性メモリから読み出すように構成されるコントローラと、
を具備するメモリシステム。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2024039045A JP2025139943A (ja) | 2024-03-13 | 2024-03-13 | データ圧縮装置、データ伸張装置、およびメモリシステム |
| US18/829,536 US20250291714A1 (en) | 2024-03-13 | 2024-09-10 | Data compression device, data decompression device, and memory system |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2024039045A JP2025139943A (ja) | 2024-03-13 | 2024-03-13 | データ圧縮装置、データ伸張装置、およびメモリシステム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2025139943A true JP2025139943A (ja) | 2025-09-29 |
Family
ID=97028636
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2024039045A Pending JP2025139943A (ja) | 2024-03-13 | 2024-03-13 | データ圧縮装置、データ伸張装置、およびメモリシステム |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US20250291714A1 (ja) |
| JP (1) | JP2025139943A (ja) |
-
2024
- 2024-03-13 JP JP2024039045A patent/JP2025139943A/ja active Pending
- 2024-09-10 US US18/829,536 patent/US20250291714A1/en active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| US20250291714A1 (en) | 2025-09-18 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111294053B (zh) | 硬件友好的数据压缩方法、系统及装置 | |
| CN112514270B (zh) | 数据压缩 | |
| US9479194B2 (en) | Data compression apparatus and data decompression apparatus | |
| US9362948B2 (en) | System, method, and computer program product for saving and restoring a compression/decompression state | |
| JP2022520158A (ja) | 動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減 | |
| JPWO2009022531A1 (ja) | データ圧縮伸張方法 | |
| US20180039426A1 (en) | Data compression using partial statistics | |
| JP2022094108A (ja) | 圧縮装置および制御方法 | |
| JP7707108B2 (ja) | データ伸張装置、メモリシステム、およびデータ伸張方法 | |
| US11461008B2 (en) | Memory system for improving compression performance of a dictionary coder circuit | |
| US11561738B2 (en) | Memory system | |
| US12108064B2 (en) | Memory system | |
| US11593286B2 (en) | Memory system and information processing system | |
| US12418309B2 (en) | Code table generation device, memory system, and code table generation method | |
| JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
| JP2025139943A (ja) | データ圧縮装置、データ伸張装置、およびメモリシステム | |
| US12081241B2 (en) | Code table generation device, memory system, and code table generation method | |
| JP7562451B2 (ja) | 圧縮装置および制御方法 | |
| JP2023128936A (ja) | 情報処理装置及び初期辞書作成方法 | |
| US12224778B2 (en) | Dictionary compressor, data compression device, and memory system | |
| US20250291482A1 (en) | Storage system | |
| US20250284632A1 (en) | Data compression circuit, memory system and method for controlling the data compression circuit | |
| US20240223211A1 (en) | Conversion device, memory system, decompression device, and method | |
| JP5499700B2 (ja) | 情報圧縮装置、情報復元装置、情報圧縮方法、情報復元方法、及びその処理プログラム |