IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特開-エンコーダ及びデコーダ 図1
  • 特開-エンコーダ及びデコーダ 図2
  • 特開-エンコーダ及びデコーダ 図3
  • 特開-エンコーダ及びデコーダ 図4
  • 特開-エンコーダ及びデコーダ 図5
  • 特開-エンコーダ及びデコーダ 図6
  • 特開-エンコーダ及びデコーダ 図7
  • 特開-エンコーダ及びデコーダ 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023184342
(43)【公開日】2023-12-28
(54)【発明の名称】エンコーダ及びデコーダ
(51)【国際特許分類】
   H03M 7/40 20060101AFI20231221BHJP
   G06F 12/04 20060101ALI20231221BHJP
【FI】
H03M7/40
G06F12/04 530
【審査請求】未請求
【請求項の数】17
【出願形態】OL
(21)【出願番号】P 2022098430
(22)【出願日】2022-06-17
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110000408
【氏名又は名称】弁理士法人高橋・林アンドパートナーズ
(72)【発明者】
【氏名】竹本 卓
【テーマコード(参考)】
5B160
5J064
【Fターム(参考)】
5B160DA08
5J064AA03
5J064BA09
5J064BC02
5J064BC09
(57)【要約】
【課題】メモリシステムのエンコーダ及びデコーダにおける符号化及び復号の処理速度を高速化させること。
【解決手段】エントロピー符号のエンコーダは、データ列を用いて前記エンコーダの状態を示す内部ステートを保持するレジスタと、入力されるシンボルの出現頻度に対応する第1値と、前記第1値に対する逆数である第2値と、をシンボルごとに保持するテーブルと、前記テーブルから出力された前記第2値と、前記レジスタから出力された前記内部ステートに基づく第3値と、を乗算して第4値を算出する演算処理ユニットと、を有する。前記テーブルから出力された前記第1値と、前記演算処理ユニットから出力された前記第4値と、を乗算した結果に基づいて、前記内部ステートを更新する。
【選択図】図2
【特許請求の範囲】
【請求項1】
エントロピー符号のエンコーダであって、
データ列を用いて前記エンコーダの状態を示す内部ステートを保持するレジスタと、
入力されるシンボルの出現頻度に対応する第1値と、前記第1値に対する逆数である第2値と、をシンボルごとに保持するテーブルと、
前記テーブルから出力された前記第2値と、前記レジスタから出力された前記内部ステートに基づく第3値と、を乗算して第4値を算出する演算処理ユニットと、を有し、
前記テーブルから出力された前記第1値と、前記演算処理ユニットから出力された前記第4値と、を乗算した結果に基づいて、前記内部ステートを更新するエンコーダ。
【請求項2】
セレクタをさらに有し、
前記演算処理ユニットは、
前記レジスタに接続され、前記内部ステートに対して第1演算処理を実行して第1出力を算出する第1演算処理ユニットと、
前記レジスタに対して前記第1演算処理ユニットと並列に接続され、データ列が所定のビット数シフトした前記内部ステートに対して第2演算処理を実行して第2出力を算出する第2演算処理ユニットと、を含み、
前記セレクタは、前記第1演算処理ユニットから出力された前記第1出力、及び前記第2演算処理ユニットから出力された前記第2出力を受信し、
前記セレクタは、前記内部ステートの値の大きさに基づいて、受信した前記第1出力及び前記第2出力のいずれか一方を選択して出力する、請求項1に記載のエンコーダ。
【請求項3】
前記テーブルから出力された前記第1値と、前記演算処理ユニットから出力された前記第4値と、を乗じた値が、所定の基準を満たしているか否かの判定を行い、前記所定の基準を満たしていないと判定した場合に、前記第4値の補正を行う比較演算回路をさらに有する、請求項2に記載のエンコーダ。
【請求項4】
前記エントロピー符号にrANS方式が用いられている、請求項1乃至3のいずれか一に記載のエンコーダ。
【請求項5】
エントロピー符号のエンコーダであって、
データ列を用いて前記エンコーダの状態を示す内部ステートを保持するレジスタと、
入力されるシンボルの出現頻度に対応する第1値に基づいて、前記第1値に対する逆数である第2値を生成する逆数器と、
前記逆数器から出力された前記第2値と、前記レジスタから出力された前記内部ステートに基づく第3値と、を乗算して第4値を算出する演算処理ユニットと、を有し、
前記第1値と、前記演算処理ユニットから出力された前記第4値と、を乗算した結果に基づいて、前記内部ステートを更新するエンコーダ。
【請求項6】
前記第1値の累積分布値を保持するテーブルをさらに有し、
前記第1値は、前記テーブルに保持された前記累積分布値のうち、隣接する前記累積分布値の差分に基づいて算出される、請求項5に記載のエンコーダ。
【請求項7】
セレクタをさらに有し、
前記演算処理ユニットは、
前記レジスタに接続され、前記内部ステートに対して第1演算処理を実行して第1出力を算出する第1演算処理ユニットと、
前記レジスタに対して前記第1演算処理ユニットと並列に接続され、データ列が所定のビット数シフトした前記内部ステートに対して第2演算処理を実行して第2出力を算出する第2演算処理ユニットと、を含み、
前記セレクタは、前記第1演算処理ユニットから出力された前記第1出力、及び前記第2演算処理ユニットから出力された前記第2出力を受信し、
前記セレクタは、前記内部ステートの値の大きさに基づいて、受信した前記第1出力及び前記第2出力から1の出力を選択して出力する、請求項5又は6に記載のエンコーダ。
【請求項8】
前記エントロピー符号にrANS方式が用いられている、請求項5又は6に記載のエンコーダ。
【請求項9】
前記エントロピー符号にrANS方式が用いられている、請求項7に記載のエンコーダ。
【請求項10】
エントロピー符号のエンコーダであって、
データ列を用いて前記エンコーダの状態を示す内部ステートを保持するレジスタと、
前記レジスタに接続され、前記内部ステートに対して第1演算処理を実行して第1出力を算出する第1演算処理ユニットと、
前記レジスタに対して前記第1演算処理ユニットと並列に接続され、前記データ列が所定のビット数シフトした前記内部ステートに対して第2演算処理を実行して第2出力を算出する第2演算処理ユニットと、
前記第1演算処理ユニットから出力された前記第1出力に基づいて計算された値、及び前記第2演算処理ユニットから出力された前記第2出力に基づいて計算された値を受信するセレクタと、を有し、
前記セレクタは、前記内部ステートの値の大きさに基づいて、受信した前記第1出力及び前記第2出力から1の出力を選択して出力するエンコーダ。
【請求項11】
前記第1演算処理ユニットは、第1除算ユニット及び第1剰余算ユニットを含み、
前記第2演算処理ユニットは、第2除算ユニット及び第2剰余算ユニットを含む、請求項10に記載のエンコーダ。
【請求項12】
前記エントロピー符号にrANS方式が用いられている、請求項10又は11に記載のエンコーダ。
【請求項13】
エントロピー符号のデコーダであって、
データ列を用いて前記デコーダの状態を示す内部ステートを保持するレジスタと、
シンボルの出現頻度に対応する第1値の累積分布値を保持するテーブルと、
前記テーブルに保持される複数の前記累積分布値と前記内部ステートとの比較を行う複数の比較器と、
前記複数の比較器の結果に基づいて、前記テーブルに保持される複数の前記累積分布値のうち、隣接する2つの前記累積分布値を選択するセレクタ回路と、を有し、
前記セレクタ回路によって選択された2つの前記累積分布値の差分に基づいて前記第1値を算出した結果に基づいて、前記内部ステートを更新するデコーダ。
【請求項14】
前記複数の比較器の結果に基づいて出力シンボルを出力する、請求項13に記載のデコーダ。
【請求項15】
エントロピー符号のデコーダであって、
データ列を用いて前記デコーダの状態を示す内部ステートを保持するレジスタと、
シンボルの出現頻度に対応する第1値の累積分布値を保持するテーブルと、
前記テーブルに保持される複数の前記累積分布値と前記内部ステートとの比較を行う複数の第1比較器と、
前記複数の第1比較器の結果に基づいて、前記テーブルに保持される複数の前記累積分布値のうち、隣接する3つ以上の前記累積分布値を選択するセレクタ回路と、
前記セレクタ回路によって選択された3つ以上の前記累積分布値のうち隣接する前記累積分布値の差分に基づいて前記第1値を算出した結果に基づいて、前記内部ステートを更新するデコーダ。
【請求項16】
前記セレクタ回路によって選択された3つ以上の前記累積分布値のうち少なくとも1つの前記累積分布値と前記内部ステートとの比較を行う第2比較器と、
前記複数の第1比較器による比較結果と前記第2比較器による比較結果とに基づいて、出力シンボルを生成するシンボル生成器と、をさらに有する、請求項15に記載のデコーダ。
【請求項17】
前記エントロピー符号にrANS方式が用いられている、請求項13乃至16のいずれか一に記載のデコーダ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の一実施形態は不揮発性メモリを備えるメモリシステムに設けられるエンコーダ及びデコーダに関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
上記のメモリシステムにおいて、符号化テーブル及び復号テーブルを逐次更新しながらデータの符号化及び復号を行う算術符号化及び復号方式が用いられている。この方式をハードウェア実装するための技術が要求されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願公開第2020/0413106号明細書
【特許文献2】米国特許第6026198号明細書
【特許文献3】米国特許第5635938号明細書
【特許文献4】米国特許第7791510号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本開示は、メモリシステムのエンコーダ及びデコーダにおける符号化及び復号の処理速度を高速化させることを目的とする。
【課題を解決するための手段】
【0006】
一実施形態に係るエントロピー符号のエンコーダは、データ列を用いて前記エンコーダの状態を示す内部ステートを保持するレジスタと、入力されるシンボルの出現頻度に対応する第1値と、前記第1値に対する逆数である第2値と、をシンボルごとに保持するテーブルと、前記テーブルから出力された前記第2値と、前記レジスタから出力された前記内部ステートに基づく第3値と、を乗算して第4値を算出する演算処理ユニットと、を有する。前記テーブルから出力された前記第1値と、前記演算処理ユニットから出力された前記第4値と、を乗算した結果に基づいて、前記内部ステートを更新する。
【図面の簡単な説明】
【0007】
図1】一実施形態に係るメモリシステムの構成を示すブロック図である。
図2】一実施形態に係るエントロピー符号化装置の回路図である。
図3】一実施形態に係る復号装置の回路図である。
図4】一実施形態に係るエントロピー符号化装置の回路図である。
図5】一実施形態に係るエントロピー符号化装置の回路図である。
図6】一実施形態に係る復号装置の回路図である。
図7】一実施形態に係る復号装置の回路図である。
図8】一実施形態に係るセレクタ出力の一例を示す図である。
【発明を実施するための形態】
【0008】
以下、実施形態に係るメモリシステムについて、図面を参照して具体的に説明する。以下の説明において、略同一の機能及び構成を有する構成要素について、同一符号が付されており、重複する説明が省略される場合がある。以下に示す各実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示する。実施形態の技術思想は、構成要素の材質、形状、構造、配置等を下記のものに限定しない。実施形態の技術的思想は、特許請求の範囲に対して、種々の変更を加えたものであってもよい。
【0009】
以下の説明において、圧縮するためにエンコーダに入力されるデータ、及び圧縮されたデータがデコーダによって伸張されて出力されるデータを「シンボル」という。圧縮・伸張回路16の符号化部に入力されるシンボルを「入力シンボル」という。圧縮・伸張回路16の復号部から出力されるシンボルを「出力シンボル」という。「入力シンボル」と「出力シンボル」とを特に区別する必要がない場合、単に「シンボル」という。
【0010】
「圧縮する」とは、対象のデータ列の情報量(例えばビット数)を小さくすることを意味し、「符号化する」又は「エンコード処理を行う」ということもできる。「伸張する」とは、圧縮されたデータ列の情報量を圧縮前の状態に復元することを意味し、「復号する」又は「デコード処理を行う」ということもできる。「圧縮ストリーム」とは、圧縮されたデータ列を意味する。
【0011】
エンコード処理及びデコード処理において、「内部ステート」は、算術符号化によりシンボル列を対応する数値情報に変換したときの、その数値情報のうちエンコーダ又はデコーダ内部で保持している部分を意味する。すなわち、内部ステートはエンコーダ及びデコーダの状態を示すものである。内部ステートの一部は、圧縮ストリーム又は出力シンボルとして出力される。「左シフト」は対象データを上位ビット側にビットシフトすることを意味し、「右シフト」は対象データを下位ビット側にビットシフトすることを意味する。
【0012】
[1.第1実施形態]
第1実施形態に係るメモリシステムについて説明する。第1実施形態に係るメモリシステムは、例えば、半導体記憶装置としてのNAND型フラッシュメモリと、当該NAND型フラッシュメモリを制御するメモリコントローラと、を含む。本実施形態において、メモリコントローラは、データを圧縮・伸張する機能を有する。
【0013】
[1-1.メモリシステム1の全体構成]
図1は、一実施形態に係るメモリシステムの構成を説明するためのブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と、複数のメモリセルを含む不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能である。図1では、メモリシステム1とホスト30とが接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
【0014】
不揮発性メモリ20は、複数のメモリチップ21を含む。メモリコントローラ10は複数のメモリチップ21の各々を制御する。具体的には、メモリコントローラ10は、メモリチップ21の各々に対してデータの書き込み動作及び読み出し動作を実行する。複数のメモリチップ21の各々は、NANDバスを介してメモリコントローラ10に接続されている。各々のメモリチップ21は、複数のダイ22を含む。ダイ22は、メモリセルが形成されたウェハ単位を意味する。複数のダイ22が積層されることでメモリチップ21が構成されている。各々のダイ22には、複数のメモリブロック23が設けられている。メモリブロック23は一括消去が可能な単位である。メモリブロック23に設けられた全てのメモリセルトランジスタは同じソース線に接続されている。メモリブロック23の1つの単位を「物理ブロック」という場合がある。メモリブロック23は複数のページで構成されている。また、メモリ素子の最小単位であるメモリセルトランジスタを単に「メモリセル」という場合がある。物理ブロック中におけるメモリセルの位置を「物理アドレス」という場合がある。
【0015】
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の半導体記憶装置を用いることができる。不揮発性メモリ20が半導体記憶装置であることは必須ではない。半導体記憶装置以外の種々の記憶媒体に対して本実施形態を適用することができる。
【0016】
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよく、SSD(Solid State Drive)等であってもよい。
【0017】
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成される半導体集積回路である。以下で説明するメモリコントローラ10の各構成要素の動作の一部又は全部はハードウェアによって実現されるが、CPU(Central Processing Unit)がファームウェアを実行することによって実現されてもよい。
【0018】
メモリコントローラ10は、ホスト30からの書き込み要求に従って不揮発性メモリ20への書き込み動作を制御し、ホスト30からの読み出し要求に従って不揮発性メモリ20からの読み出し動作を制御する。メモリコントローラ10は、プロセッサ11、RAM(Random Access Memory)12、ROM(Read Only Memory)13、ランダマイザ14、ECC回路15、圧縮・伸張回路16、ホストインタフェース17、及びメモリインタフェース18を備える。これらの機能ブロックは内部バス19で相互に接続されている。
【0019】
プロセッサ11は、メモリシステム1の各機能ブロックを統括的に制御する制御部である。プロセッサ11は、ホスト30からの要求をホストインタフェース17経由で受け付けた場合に、その要求に応じた制御を行う。例えば、プロセッサ11は、ホスト30からの書き込み要求に応じて、不揮発性メモリ20へのデータの書き込み動作をメモリインタフェース18へ指示する。プロセッサ11は、ホスト30からの読み出し要求に応じて、不揮発性メモリ20からのデータの読み出し動作をメモリインタフェース18へ指示する。
【0020】
プロセッサ11は、ホスト30から書き込み要求を受信した場合、RAM12に保持されているデータに対して、不揮発性メモリ20上の記憶領域(メモリ領域)を決定する。すなわち、プロセッサ11は、データの書き込み先を管理する。ホスト30から受信したデータの論理アドレスと当該データが記憶された不揮発性メモリ20上の記憶領域を示す物理アドレスとの対応はアドレス変換テーブルに記憶される。プロセッサ11は、書き込み要求に応じた書き込み動作を実行する際に、書き込み動作が行われた時刻又はある基準時からの時間をRAM12の書き込み時間テーブルに記憶してもよい。
【0021】
プロセッサ11は、ホスト30から読み出し要求を受信した場合、読み出し要求によって指定された論理アドレスを、上述のアドレス変換テーブルを用いて物理アドレスに変換し、当該物理アドレスからの読み出し動作をメモリインタフェース18へ指示する。
【0022】
NANDメモリでは、一般に、「ページ」と呼ばれるデータ単位で書き込み動作及び読み出し動作が行われ、上記の物理ブロックのデータ単位で消去が行われる。以下の説明において、「ページ」は書き込み動作における最小単位を意味する。同一のワード線に接続される複数のメモリセルを「メモリセルグループ」という。メモリセルがSLC(Single Level Cell)である場合は、1つのメモリセルグループによって1ページが構成される。1つのメモリセルグループによって2ページが構成されるMLC(Multi Level Cell)、1つのメモリセルグループによって3ページが構成されるTLC(Triple Level Cell)、又は1つのメモリセルグループによって4ページが構成されるQLC(Quad Level Cell)などの多ビットセルである場合、1つのメモリセルグループが複数ページに対応する。各メモリセルはワード線及びビット線の両方に接続される。したがって、ワード線を識別するアドレスとビット線を識別するアドレスとを用いて各メモリセルを識別することが可能である。
【0023】
RAM12は、例えばデータバッファとして使用され、メモリコントローラ10がホスト30から受信したデータを不揮発性メモリ20へ記憶させるまでに一時的に保持する。RAM12は、不揮発性メモリ20から読み出したデータをホスト30へ送信するまでの間に一時的に保持する。RAM12として、例えば、SRAM(Static Random Access Memory)又はDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
【0024】
ROM13は、メモリコントローラ10を動作させるための種々のプログラムやパラメータ等を記憶する。ROM13に格納されているプログラムやパラメータ等は、必要に応じてプロセッサ11に読み出されて実行される。
【0025】
ランダマイザ14は、例えば線形帰還シフトレジスタ等を含み、入力されたシード値に対して一義的に求められる擬似乱数を生成する。ランダマイザ14によって生成された擬似乱数は、例えばプロセッサ11において書き込みデータとの排他的論理和が計算される。これにより、不揮発性メモリ20に書き込まれる書き込みデータがランダマイズされる。また、ランダマイザ14は不揮発性メモリ20から読み出されたデータに対するランダマイズの解除を実行する。ランダマイズの解除とは、ランダマイズされたデータからランダマイズ前の元のデータを得ることである。
【0026】
ECC回路15は、プロセッサ11からの指示に基づいて、書き込み動作時のECC符号化(誤り訂正符号化)及び読み出し動作時のECC復号(誤り訂正復号)を実行する。ECC回路15の符号化方式として、例えば、LDPC(Low-Density Parity-Check)符号、BCH(Bose-Chaudhuri-Hocquenghem)符号、又はRS(Reed-Solomon)符号を用いた符号化方式を採用することができる。
【0027】
圧縮・伸張回路16は、不揮発性メモリ20へ書き込むデータを圧縮する符号化部として動作する。圧縮・伸張回路16は、不揮発性メモリ20から読み出されたデータを伸張する復号部としても動作する。圧縮・伸張回路16に係る詳細な説明は後述する。
【0028】
ホストインタフェース17は、ホスト30とホストインタフェース17との間のインタフェース規格に従った処理を実行する。ホストインタフェース17は、ホスト30から受信した要求及び書き込み対象のデータなどを内部バス19に出力する。ホストインタフェース17は、不揮発性メモリ20から読み出され、圧縮・伸張回路16によって伸張されたデータをホスト30へ送信する。ホストインタフェース17は、プロセッサ11からの応答などをホスト30へ送信する。
【0029】
メモリインタフェース18は、プロセッサ11の指示に基づいて、不揮発性メモリ20への書き込み動作を行う。メモリインタフェース18は、プロセッサ11の指示に基づいて、不揮発性メモリ20からの読み出し動作を行う。
【0030】
以上のような構成を備えるメモリシステム1における書き込み動作では、プロセッサ11は、不揮発性メモリ20への書き込み動作実行時に、圧縮・伸張回路16に対してデータの圧縮を指示する。その際、プロセッサ11は、不揮発性メモリ20における書き込みデータの記憶場所(記憶アドレス)を決定し、決定した記憶場所をメモリインタフェース18へ指示する。圧縮・伸張回路16は、プロセッサ11からの指示に基づいて、RAM12上のデータを圧縮する。そして、ランダマイザ14は、プロセッサ11からの指示に基づいて、RAM12上の圧縮されたデータをランダマイズする。そして、ECC回路15は、プロセッサ11からの指示に基づいて、ランダマイズされたデータをさらにECC符号化する。これにより生成された書き込みデータは、メモリインタフェース18を介して不揮発性メモリ20の指定された記憶場所に書き込まれる。
【0031】
一方、読み出し動作では、プロセッサ11は、不揮発性メモリ20に対する読み出し動作時に、不揮発性メモリ20上のアドレスを指定し、指定されたアドレスに応じてメモリセルの読み出し動作の条件を決定してメモリインタフェース18へ読み出し動作の実行を指示する。プロセッサ11は、ECC回路15へECC復号の開始を指示するとともに、ランダマイザ14へランダマイズの解除の開始を指示し、圧縮・伸張回路16へ伸張の開始を指示する。メモリインタフェース18は、プロセッサ11の指示に従って、不揮発性メモリ20の指定されたアドレスに対する読み出し動作を実行し、この読み出し動作によって得られた読み出しデータをECC回路15に入力する。ECC回路15は入力された読み出しデータをECC復号する。ランダマイザ14はECC復号されたデータに対してランダマイズの解除を実行する。圧縮・伸張回路16はランダマイズの解除が実行されたデータを伸張する。この伸張に成功した場合、プロセッサ11は、伸張されたオリジナルのデータをRAM12に格納する。一方、ECC復号またはランダマイズの解除または伸張に失敗した場合、プロセッサ11は、例えば、ホスト30へリードエラーを通知する。
【0032】
[1-2.エントロピー符号化装置40の構成]
図2を用いて、本発明の一実施形態に係るエントロピー符号化装置40について説明する。このエントロピー符号化装置40は圧縮・伸張回路16に含まれる。エントロピー符号化装置40は、算術符号化手法の一つであるrANS(Range variants Asymmetric Numeral System)方式がハードウェアに実装された装置である。
【0033】
エントロピー符号化装置40はエンコード処理(圧縮)を行う。エントロピー符号化装置40は入力シンボルsから圧縮ストリームOUTを生成する。エントロピー符号化装置40は、以下の演算C(x,s)を繰り返し行うように、ハードウェアに実装されている。入力シンボルsは、例えば、圧縮・伸張回路16がプロセッサ11から圧縮を指示されたデータである。生成される圧縮ストリームOUTは、例えば、プロセッサ11からの指示を受けたランダマイザ14によりランダマイズされる。
【0034】
【数1】
【0035】
xは内部ステート値である。sはエンコード対象である入力シンボルである。f[s]は、シンボルsの出現確率を2倍した値であり、nビットの長さを有する(nは自然数である)。シンボルsの出現確率はf[s]/2と表現される。floorは切り捨てを意味する。/は除算(割り算)である。%は剰余算(割り算の余り)である。+は加算である。CDF[s]は、f[s]の累積分布関数であり、以下の通り定義される。
【0036】
【数2】
【0037】
f[s]は、シンボルsの出現確率を2倍した値なので、0以上2以下の値になる。したがって、CDF[s]は単調増加関数である。入力シンボルsに対するf[s]とCDF[s]との値は、あらかじめ計算され、それぞれテーブル(以下のテーブル41)に格納されている。入力シンボルsに対するf[s]を「入力されるシンボルの出現頻度に対応する値」という場合があり、例えば「第1値」という場合がある。入力シンボルsに対するCDF[s]を「累積分布値」という場合がある。
【0038】
C(x,s)は、内部ステートxと入力シンボルsとの関数であり、この値が次の内部ステートxとして用いられる。つまり、エントロピー符号化装置40では、C(x,s)の演算が繰り返し行われる。
【0039】
以上の数式で定義される演算を行う回路が実装される際に用いられる擬似コードは以下の通りである。
【0040】
【数3】
【0041】
上記のコードに示されているように、はじめに内部ステートxに0が入力される。
【0042】
input_symbol()は、入力シンボル列から、順次、入力シンボルsを取り込む処理を行う関数表示である。while(s=input_symbol()!=EOF)は、入力シンボル列が空になるまで処理を繰り返すことを意味する。
【0043】
繰り返し対象となる処理は、以下に説明するように第1の処理及び第2の処理を含む。
【0044】
第1の処理において、まず、内部ステートxがf[s]<<(2*m-n)以上か否かの判定が行われる。f[s]<<(2*m-n)は、xのビット長である2*mからnを引いた値分だけf[s]を左シフトさせることを意味する(mは自然数である)。内部ステートxがf[s]<<(2*m-n)以上である場合、シンボルsについて演算が行われると内部ステートxがオーバーフローする。そこで、内部ステートxの下位mビットを圧縮ストリームOUTに出力する。そして、x>>mをxとして用いる。x>>mは、xをmビット右シフトさせることを意味する。このようにして、内部ステートxをmビット分だけ縮小する。
【0045】
第2の処理において、x/f[s]が計算される。x/f[s]では、整数除算が実行されるため、切り捨て処理に対応するfloor関数が適用される。同時にx%f[s]が計算される。x%f[s]は、剰余算の実行を意味する。そして、x/f[s]<<nとx%f[s]とCDF[s]とが加算され、これが新たな内部ステートxとして用いられる。x/f[s]<<nは、x/f[s]をnビット左シフトさせることを意味する。
【0046】
図2は、以上で説明した擬似コードがハードウェアに実装された場合の回路図を示す。この回路では、内部ステートxのオーバーフロー判定の比較と除算・剰余算とが同時に行われる。さらに、内部ステートxがオーバーフローする場合としない場合の除算・剰余算が投機的に並行して行われる。その結果、動作周波数を高くすることが可能となる。
【0047】
図2に示すように、エントロピー符号化装置40は、テーブル41、レジスタ42、比較器43、除算・剰余算ユニット44、45、加算器46、47、セレクタ48、及び出力器49を有する。
【0048】
テーブル41は、それぞれ入力シンボルsをエントリとする、CDF[s]テーブルと、f[s]テーブルと、を含む。CDF[s]の出力はmビットであり、f[s]の出力はnビットである。
【0049】
レジスタ42は、内部ステートxを保持する。レジスタ42は2*mビットの長さを有する。
【0050】
比較器43(cmp)は、f[s]<<(2*m-n)(f[s]を(2*m-n)ビット左シフトさせた値)と内部ステートxとを比較する。具体的には、比較器43は、f[s]と内部ステートxの上位(2*m-n)ビットとを比較する。その結果、比較器43によって(2*m-n)ビットの比較が行われる。これは、内部ステートxがf[s]<<(2*m-n)以上であれば、シンボルsについて演算を行った場合に内部ステートxがオーバーフローすることを意味する。
【0051】
エントロピー符号化装置40には、2つの除算・剰余算ユニット44、45が設けられている。除算・剰余算ユニット44は、x/f[s]とx%f[s]との整数演算をそれぞれ行う。レジスタ42と除算・剰余算ユニット45との間に、mビット右にシフトさせる回路(>>m)が設けられている。これは内部ステートxのmビット目以上のデータを除算・剰余算ユニット45に入力するよう結線されていることを意味している。除算・剰余算ユニット45は、(x>>m)/f[s]と(x>>m)%f[s]との整数演算をそれぞれ行う。上記の通り、x>>mは、xをmビット右シフトさせることを意味する。
【0052】
除算・剰余算ユニット44を「第1演算処理ユニット」又は「第1除算ユニット及び第1剰余算ユニット」という場合がある。除算・剰余算ユニット44はレジスタ42に接続されている。除算・剰余算ユニット44が内部ステートxに対して実行する演算処理を「第1演算処理」という場合がある。除算・剰余算ユニット44が内部ステートxに対して第1演算処理を実行し、出力するものを「第1出力」という場合がある。
【0053】
除算・剰余算ユニット45を「第2演算処理ユニット」又は「第2除算ユニット及び第2剰余算ユニット」という場合がある。除算・剰余算ユニット45はレジスタ42に接続されている。除算・剰余算ユニット45が内部ステートxに対して実行する演算処理を「第2演算処理」という場合がある。上記のように、除算・剰余算ユニット45は、所定のビット数シフトした内部ステートxに対して第2演算処理を実行する。除算・剰余算ユニット45が内部ステートxに対して第2演算処理を実行し、出力するものを「第2出力」という場合がある。
【0054】
除算・剰余算ユニット44と除算・剰余算ユニット45とは、レジスタ42とセレクタ48との間で並列に接続されている。
【0055】
加算器46は、x/f[s]<<nとx%f[s]とCDF[s]とを加算する。除算・剰余算ユニット44のx/f[s]の出力と加算器46との間に、nビット左にシフトさせる回路(<<n)が設けられている。これはx/f[s]をnビットシフトさせたデータを加算器46に入力するよう結線されていることを意味している。加算器47は、((x>>m)/f[s])<<nと(x>>m)%f[s]とCDF[s]とを加算する。図除算・剰余算ユニット45の(x>>m)/f[s]の出力と加算器47との間に、nビットシフトを行う回路(<<n)が示されている。これは(x>>m)/f[s]をnビットシフトさせたデータを加算器47に入力するよう結線されていることを意味している。
【0056】
セレクタ48は、加算器46、47に接続されており、除算・剰余算ユニット44(第1演算処理ユニット)から出力された第1出力に基づき加算器46によって計算された値、及び除算・剰余算ユニット45(第2演算処理ユニット)から出力された第2出力に基づき加算器47によって計算された値を受信する。セレクタ48は、比較器43の出力に応じて、内部ステートxがオーバーフローするか否かを判断する。内部ステートxがオーバーフローしない、とセレクタ48が判断した場合、セレクタ48は加算器46の出力を選択する。一方、内部ステートxがオーバーフローする、とセレクタ48が判断した場合、セレクタ48は加算器47の出力を選択する。セレクタ48は、選択された出力を新たな内部ステートxとしてレジスタ42に供給する。つまり、セレクタ48は、内部ステートxの値の大きさに基づいて、上記の第1出力に基づいて計算された値及び第2出力に基づいて計算された値のいずれか一方を選択して、レジスタ42へ出力する。
【0057】
出力器49は、比較器43の出力に応じて、内部ステートxがオーバーフローする場合に内部ステートxの下位mビットを圧縮ストリームOUTに出力する。圧縮ストリームOUTに出力されたデータは、上記の通り、ランダマイザ14によってランダマイズされ、ECC回路15により誤り訂正符号化され、メモリインタフェース18を介して不揮発性メモリ20に書き込まれる。
【0058】
[1-3.復号装置50の構成]
図3を用いて、本発明の一実施形態に係る復号装置50について説明する。復号装置50は、エントロピー符号化装置40によってエントロピー符号化された圧縮ストリームを復号する。この復号装置50も圧縮・伸張回路16に含まれる。復号装置50は、算術符号化手法の一つであるrANS方式がハードウェアに実装された装置である。
【0059】
図3は復号装置50の回路図である。復号装置50は入力される圧縮ストリームINから出力シンボルsを生成する。復号装置50は、以下の演算D(x)を繰り返し行うように、ハードウェアに実装されている。圧縮ストリームINは、例えば、圧縮・伸張回路16がプロセッサ11から伸張を指示されたデータである。生成される出力シンボルsは、例えば、プロセッサ11によりRAM12に格納される。
【0060】
【数4】
【0061】
ここで、maskは2-1であり、下位に1がnビット並んだ値である。x&maskは内部ステートxから下位のnビットを取り出す操作をすることを意味する。-は減算である。symbol(y)は、yに対応するシンボルを出力する関数であり、以下の条件を満たす出力シンボルsを探す処理を意味する。
【0062】
【数5】
【0063】
前述した通り、CDF[s]は単調増加関数である。symbol(y)はCDF[s]の逆関数に相当する。
【0064】
内部ステートxは2*mビットの長さを有する。復号器が繰り返し処理を進める度に内部ステートxの値は小さくなる。内部ステートxの値が下位mビットのみになると、内部ステートxの値がmビットだけ左シフトされ、空いた下位mビットに圧縮ストリームINからmビット分のデータが取り込まれる。
【0065】
以上の数式で定義される演算を行う回路が実装される際に用いる擬似コードは以下の通りである。
【0066】
【数6】
【0067】
Mを1<<mと定義する。Mは、例えば、00・・・010・・・00という値であり、最下位ビット(LSB)からm+1ビット目に1が存在する値である。maskは2-1である。maskは、例えば、00・・・001・・・11という値であり、LSBからmビット全てに1が存在する値である。
【0068】
input_stream(2*m)は、入力された圧縮ストリームINからmビット入力する処理を行う関数表示である。x=input_stream(2*m)は、入力された圧縮ストリームINから2*mビットを取り出し内部ステートxに設定する処理である。do{}while(s!=EOF)は、出力シンボルsがデータ末尾に達するまで処理を繰り返すことを意味する。
【0069】
繰り返し対象となる処理は、以下に説明するように第1の処理、第2の処理、及び第3の処理を含む。
【0070】
第1の処理において、まず、symbol関数を用いて、内部ステートxの下位mビット(x&mask)に対応するシンボルsの取得が行われる。
【0071】
第2の処理において、f[s]と、内部ステートxをnビット右シフトしたx>>nと、を乗じたものに対して、内部ステートxの下位mビットを加算し、CDF[s]を減算することで、得られた値が新たな内部ステートxとして更新される。
【0072】
第3の処理において、xがmビット内に収まるか(アンダーフローするか)否かの判定が行われ、xがアンダーフローする場合には、内部ステートxをmビット左シフトさせ、内部ステートxの空いた下位mビットに圧縮ストリームINから取り込まれたmビットが挿入される。そして、最後に、シンボルsが出力される。
【0073】
以上説明した擬似コードがハードウェアに実装されたものが図3の復号装置50の回路図である。
【0074】
図3に示すように、復号装置50は、レジスタ51、比較器52、バイナリーエンコーダ53、セレクタ54、及び演算回路55を有する。
【0075】
レジスタ51の長さは2*mビットである。レジスタ51は内部ステートxを保持する。復号装置50の処理が繰り返される度に、内部ステートxの値が減少する。内部ステートxがmビットより小さくなると、外部から入力される圧縮ストリームINのmビット分が内部ステートxと結合される。
【0076】
復号装置50は、(G-1)個の比較器52とバイナリーエンコーダ53とを有する。各比較器52は、それぞれ、CDF[1]~CDF[G-1]と内部ステートxの下位nビットとを比較する(Gは2以上の自然数)。Gはシンボルの種類の数を示す。例えば、8bitのASCII(登録商標)文字列であれば、Gは256である。各比較器52の出力は、バイナリーエンコーダ53に入力され、バイナリーエンコーダ53はシンボルsを出力する。この回路がsymbol関数の実装に対応する。
【0077】
セレクタ54は、シンボルsに応じて、f[s]とCDF[s]とをそれぞれ出力する。
【0078】
演算回路55は、f[s]に(x>>n)を乗じたものに対して、xの下位mビット(x&mask)を加算し、CDF[s]を減算することで、暫定的内部ステートxtmpを算出し、出力する。x>>nは、内部ステートxをnビット右シフトした値であることを意味する。
【0079】
比較演算回路56は、暫定的内部ステートxtmpがMよりも小さいか否かを比較する。比較演算回路56は、この比較によって、暫定的内部ステートxtmpがmビット以下か否かを判断している。暫定的内部ステートxtmpがmビット以下の場合、比較演算回路56は、暫定的内部ステートxtmpをmビット左シフトさせ、空いたmビットの領域に圧縮ストリームINから取り込まれたmビットのデータを挿入することで、内部ステートxを更新する。暫定的内部ステートxtmpがmビット以下ではない場合、暫定的内部ステートxtmpがそのまま内部ステートxとして用いられる。そして、このようにして得られた内部ステートxは、レジスタ51に格納される。
【0080】
[2.第2実施形態]
第2実施形態に係るメモリシステムについて説明する。第2実施形態に係るメモリシステム1は、圧縮・伸張回路16に含まれるエントロピー符号化装置60の構成が、第1実施形態に係るメモリシステム1のエントロピー符号化装置40と相違する。それ以外の構成は、第1実施形態の構成と同様なので、説明を省略する。
【0081】
[2-1.エントロピー符号化装置60の構成]
以下、本発明の一実施形態に係るエントロピー符号化装置60について説明する。エントロピー符号化装置40には除算回路及び剰余算回路が含まれている。除算回路及び剰余算回路の回路規模は大きく、これらの回路による遅延があるため、エントロピー符号化装置としての動作周波数向上の律速になる場合がある。エントロピー符号化装置60では、除算回路及び剰余算回路を他の構成で代替することで、その動作周波数をさらに高めることが可能である。
【0082】
エントロピー符号化装置60は、除算回路の代わりに乗算回路を備える。そして、エントロピー符号化装置60は、除算を乗算に代えることに伴って発生する誤差を補正する回路をさらに備えている。
【0083】
図4はエントロピー符号化装置60の回路図である。エントロピー符号化装置60は圧縮・伸張回路16に含まれる。エントロピー符号化装置60は、算術符号化手法の一つであるrANS方式がハードウェアに実装された装置である。エントロピー符号化装置60はエンコード処理(圧縮)を行う。エントロピー符号化装置60は入力シンボルsから圧縮ストリームOUTを生成する。
【0084】
xは内部ステート値である。sはエンコード対象である入力シンボルである。f[s]は、シンボルsの出現確率を2倍した値であり、nビットの長さを有する。シンボルsの出現確率はf[s]/2と表現される。*は乗算(かけ算)である。CDF[s]は、f[s]の累積分布関数であり、単調増加関数である。入力シンボルsに対するf[s]とCDF[s]との値はあらかじめ計算され、それぞれテーブルに格納されている。
【0085】
エントロピー符号化装置60において、さらに、1/f[s]があらかじめ計算され、テーブルに格納されている。1/f[s]は浮動小数点形式のデータである。1/f[s]の有効桁は、(2*m-n+1)ビット以上である。
【0086】
図2に示すエントロピー符号化装置40のx/f[s]をx*(1/f[s])に置き換え、ハードウェアに実装されたものが、図4に示すエントロピー符号化装置60の回路図である。この回路でも、内部ステートxのオーバーフロー判定の比較と乗算とが同時に行われる。さらに、内部ステートxがオーバーフローする場合としない場合の乗算が投機的に並行して行われる。ただし、本実施形態では、当該投機的な計算(乗算)は必須ではない。
【0087】
図4に示すように、エントロピー符号化装置60は、テーブル61、レジスタ62、比較器63、乗算ユニット64、65、セレクタ66、67、比較演算回路68、及び出力器69を有する。
【0088】
テーブル61は、それぞれ入力シンボルsをエントリとする、CDF[s]テーブルと、f[s]テーブルと、1/f[s]テーブルと、を含む。CDF[s]の出力はmビットであり、f[s]の出力はnビットである。1/f[s]は、浮動小数点形式である。仮数部分の有効桁は、(2*m-n+1)ビット以上である。
【0089】
入力シンボルsに対するf[s]を「入力されるシンボルの出現頻度に対応する値」という場合があり、例えば「第1値」という場合がある。1/f[s]を「第1値に対する逆数」という場合があり、例えば「第2値」という場合がある。入力シンボルsに対するCDF[s]を「累積分布値」という場合がある。上記の表現を用いると、テーブル61は、入力されるシンボルの出現頻度に対応する第1値と、当該第1値に対する逆数である第2値と、をシンボルごとに保持する、ということができる。
【0090】
レジスタ62は、内部ステートxを保持する。レジスタ62は2*mビットの長さを有する。
【0091】
比較器63(cmp)は、f[s]<<(2*m-n)(f[s]を(2*m-n)ビット左シフトさせた値)と内部ステートxとを比較する。具体的には、比較器63は、f[s]と内部ステートxの上位(2*m-n)ビットとを比較する。その結果、比較器63によって(2*m-n)ビットの比較が行われる。これは、内部ステートxがf[s]<<(2*m-n)以上であれば、シンボルsについて演算を行った場合に内部ステートxがオーバーフローすることを意味する。
【0092】
エントロピー符号化装置60には、2つの乗算ユニット64、65が設けられている。乗算ユニット64はx*(1/f[s])の演算を行う。レジスタ62と乗算ユニット65との間に、mビット右にシフトさせる回路(>>m)が設けられている。これは内部ステートxのmビット目以上のデータを乗算ユニット65に入力するよう結線されていることを意味している。乗算ユニット65は(x>>m)*(1/f[s])の演算を行う。
【0093】
上記のように、乗算ユニット64に入力されるデータ及び乗算ユニット65に入力されるデータを、レジスタ62から出力された内部ステートxに基づく「第3値」という場合がある。また、乗算ユニット64、65の演算処理によって算出されたデータを「第4値」という場合がある。乗算ユニット64、65を「演算処理ユニット」という場合がある。上記の表現を用いると、乗算ユニット64、65では、テーブル61から出力された1/f[s](第2値)と、レジスタ62から出力された第3値と、を乗算して第4値を算出する、ということができる。
【0094】
乗算ユニット64を「第1演算処理ユニット」という場合がある。乗算ユニット64が内部ステートxに対して実行する演算処理を「第1演算処理」という場合がある。乗算ユニット64が内部ステートxに対して第1演算処理を実行し、出力するものを「第1出力」という場合がある。
【0095】
乗算ユニット65を「第2演算処理ユニット」という場合がある。乗算ユニット65が内部ステートxに対して実行する演算処理を「第2演算処理」という場合がある。乗算ユニット65が内部ステートxに対して第2演算処理を実行し、出力するものを「第2出力」という場合がある。
【0096】
乗算ユニット64と乗算ユニット65とは、レジスタ62とセレクタ66との間で並列に接続されている。
【0097】
エントロピー符号化装置60には、2つのセレクタ66、67が設けられている。セレクタ66は、比較器63の出力に応じて、内部ステートxがオーバーフローするか否かを判断する。内部ステートxがオーバーフローしない、とセレクタ66が判断した場合、セレクタ66は、乗算ユニット64の出力を選択し、乗算ユニット64からの出力(第4値)を商qとして出力する。一方、内部ステートxがオーバーフローする、とセレクタ66が判断した場合、セレクタ66は、乗算ユニット65の出力を選択し、乗算ユニット65からの出力を商qとして出力する。後述する誤差補正が正しく動作するためには、商qの有効桁は(2*m-n)ビット以上必要である。換言すると、セレクタ66は、内部ステートxの値の大きさに基づいて、上記の第1出力に基づいて計算された値及び第2出力に基づいて計算された値のいずれか一方を選択して、比較演算回路68へ出力する。
【0098】
ここで、qのデータの長さは(2*m-n)ビットである。セレクタ67は、比較器63の出力に応じて、内部ステートxがオーバーフローするか否かを判断する。内部ステートxがオーバーフローしない、とセレクタ67が判断した場合、セレクタ67は、xを暫定的内部ステートxtmpとして選択する。一方、内部ステートxがオーバーフローする、とセレクタ67が判断した場合、セレクタ67は、x>>mを暫定的内部ステートxtmpとして選択する。暫定的内部ステートxtmpのデータの長さは2*mビットである。
【0099】
エントロピー符号化装置60は、さらに、比較演算回路68を有する。比較演算回路68は、まず、q*f[s]を計算することでrを算出する。つまり、比較演算回路68は、テーブル61から出力されたf[s](第1値)と、乗算ユニット64、65(演算処理ユニット)から出力された商q(第4値)と、を乗算する。次いで、rが(xtmp-f[s])以下か否かの判定が行われる。rが(xtmp-f[s])以下の場合とは、f[s]による割り算と1/f[s]による乗算とを対比した結果、商qに-1の差が生じるということを意味する。したがって、正しい演算結果を得るためには、qに1を加算する必要がある。上記の構成を換言すると、比較演算回路68は、f[s](第1値)と商q(第4値)とを乗算した値(r)が所定の基準を満たしているか否か((xtmp-f[s])以下か否か)の判定を行い、当該基準を満たしていないと判定された場合、補正(qに1を加算)を行う。
【0100】
rが(xtmp-f[s])以下の場合(-1の誤差がある場合)、比較演算回路68は、(q+1)をnビット左にシフトしたものに対して、f[s]を減算し、CDF[s]を加算し、xtmpを加算し、rを減算することで、内部ステートxを算出する。一方、rが(xtmp-f[s])以下でない場合(誤差がゼロである場合)、qをnビット左にシフトしたものに対して、CDF[s]を加算し、xtmpを加算し、rを減算することで、内部ステートxを算出する。このように算出された内部ステートxはレジスタ62に格納される。つまり、上記のf[s](第1値)と商q(第4値)との乗算結果に基づいて、内部ステートxが更新される。
【0101】
出力器69は、比較器63の出力に応じて、内部ステートxがオーバーフローする場合に内部ステートxの下位mビットを圧縮ストリームに出力する。
【0102】
以上のように、本実形態に係るエントロピー符号化装置60によると、除算回路及び剰余算回路を用いずにrANSをハードウェアに実装することができる。その結果、エントロピー符号化装置60の動作周波数を向上させることができる。
【0103】
[3.第3実施形態]
第3実施形態に係るメモリシステムについて説明する。第3実施形態に係るメモリシステム1は、圧縮・伸張回路16に含まれるエントロピー符号化装置70の構成が、第1実施形態に係るメモリシステム1のエントロピー符号化装置40と相違する。それ以外の構成は、第1実施形態の構成と同様なので、説明を省略する。
【0104】
[3-1.エントロピー符号化装置70の構成]
以下、本発明の一実施形態に係るエントロピー符号化装置70について説明する。エントロピー符号化装置60では、入力シンボルsの全てのエントリに対して、それぞれf[s]及び1/f[s]に係るテーブルが設けられていた。一方、エントロピー符号化装置70では、これらのテーブルを省略することで、エントロピー符号化装置60と同様に高い動作周波数を維持しつつ、回路規模の減少を図ることが可能である。
【0105】
エントロピー符号化装置70は、図4のテーブル61に相当するテーブルが省略されている代わりに、f[s]を算出する差分演算回路715、及び1/f[s]を算出する逆数器718を備えている。エントロピー符号化装置70は、エントロピー符号化装置60と同様に、除算を乗算に代えることに伴って発生する誤差を補正する回路を備えている。上記を換言すると、逆数器718は、入力されるシンボルの出現頻度に対応するf[s](第1値)に基づいて、その逆数である1/f[s](第2値)を生成する、ということができる。
【0106】
図5はエントロピー符号化装置70の回路図である。エントロピー符号化装置70は圧縮・伸張回路16に含まれる。エントロピー符号化装置70は、算術符号化手法の一つであるrANS方式がハードウェアに実装された装置である。エントロピー符号化装置70はエンコード処理(圧縮)を行う。エントロピー符号化装置70は入力シンボルsから圧縮ストリームOUTを生成する。
【0107】
xは内部ステート値である。sはエンコード対象である入力シンボルである。f[s]はシンボルsの出現確率を2倍した値でありnビットの長さを有する。シンボルsの出現確率はf[s]/2と表現される。*は乗算(かけ算)である。CDF[s]はf[s]の累積分布関数であり単調増加関数である。入力シンボルsに対するCDF[s]の値はあらかじめ計算され、CDF[s]テーブル710に格納されている。
【0108】
図5に示すように、エントロピー符号化装置70は、テーブル710、セレクタ回路711、レジスタ712、713、716、717、セレクタ714、差分演算回路715、逆数器718を有する。これらは、内部ステートxを更新するループの外に配置されている。エントロピー符号化装置70は、上記の構成に加えて、レジスタ72、比較器73、乗算ユニット74、75、セレクタ76、77、比較演算回路78、及び出力器79を有する。これらは、内部ステートxを更新するループ内に配置されている。
【0109】
レジスタ72、比較器73、乗算ユニット74、75、セレクタ76、77、比較演算回路78、及び出力器79の各々の構成及び機能は、図4に示すレジスタ62、比較器63、乗算ユニット64、65、セレクタ66、67、比較演算回路68、及び出力器69と同じなので、説明を省略する。
【0110】
セレクタ回路711は、入力シンボルsに応じて、隣接するCDF[偶]とCDF[奇]とのペアを選択する。例えば、入力シンボルsがk番目のシンボルであれば、CDF[k-1]とCDF[k]とが選択される(kは2以上の自然数)。より具体的に、入力シンボルsが8番目のシンボルであれば、CDF[7]とCDF[8]とが選択され、入力シンボルsが9番目のシンボルであればCDF[8]とCDF[9]とが選択される。
【0111】
選択されたCDF[偶]はレジスタ712に格納され、選択されたCDF[奇]はレジスタ713に格納される。レジスタ712及び713は、いずれもnビットの長さを有するレジスタである。セレクタ714は、入力シンボルsが奇数番目か偶数番目かに応じて、レジスタ712及び713のうち1つを選択してレジスタ716に出力する。この結果、レジスタ716にはCDF[s]が格納される。レジスタ716もnビットの長さを有するレジスタである。このように、CDF[s]テーブルを偶数エントリ(k)と奇数エントリ(k-1)の2つに分けて構成することで、セレクタの入力数を半分に減らすことができる。
【0112】
差分演算回路715は、レジスタ712に格納されたCDF[偶]とレジスタ713に格納されたCDF[奇]との差分を計算する。[数2]に示されたCDF[s]の計算式から、CDF[s+1]-CDF[s]=f[s]なので、差分演算回路715は上記差分からf[s]を算出することができる。このように算出されたf[s]は、レジスタ717に格納される。レジスタ717の長さもnビットである。このように、CDF[偶]とCDF[奇]とのペアからf[s]を算出することで、f[s]テーブルを省略することができる。
【0113】
逆数器718は、差分演算回路715から出力されたf[s]の逆数(1/f[s])を算出し、出力する。1/f[s]は浮動小数点形式のデータであり仮数部分の有効桁を(2*m-n+1)ビットとするのが望ましい。逆数器718が備えられていることによって、1/f[s]テーブルを省略することができる。さらに、逆数器718は、内部ステートxを更新するループの外に配置することができる。したがって、逆数器718を独立にパイプライン化することが可能である。逆数器718の実装形態としていくつかの選択肢がある。例えば、m=12、n=11とすると、逆数器に必要な有効桁は14ビット程度である。この場合、折れ線近似と補正テーブルの組合せによって面積効率よく実装できる。
【0114】
以上のように、本実形態に係るエントロピー符号化装置70によると、エントロピー符号化装置60において、f[s]及び1/f[s]に係るテーブルを省略することができるため、エントロピー符号化装置60と同様に高い動作周波数を維持しつつ、回路規模を減少させることができる。
【0115】
[4.第4実施形態]
第4実施形態に係るメモリシステムについて説明する。第4実施形態に係るメモリシステム1は、圧縮・伸張回路16に含まれる復号装置80の構成が、第1実施形態に係るメモリシステム1の復号装置50と相違する。それ以外の構成は、第1実施形態の構成と同様なので、説明を省略する。
【0116】
[4-1.復号装置80の構成]
以下、本発明の一実施形態に係るエントロピー符号化された圧縮ストリームを復号する復号装置80について説明する。この復号装置80は圧縮・伸張回路16に含まれる。復号装置80は、算術符号化手法の一つであるrANS方式がハードウェアに実装された装置である。
【0117】
図6は復号装置80の回路図である。復号装置80は入力される圧縮ストリームINから出力シンボルsを生成する。図6に示すように、復号装置80は、レジスタ81、比較器82、バイナリーエンコーダ83、テーブル840、セレクタ回路841、セレクタ842、差分演算回路843、演算回路85、及び比較演算回路86を有する。テーブル840には、シンボルsに対するCDF[s]が格納されている。テーブル840には、総シンボル数Gに対するデータ(CDF[1]~CDF[G-1])が格納されている。
【0118】
レジスタ81、比較器82、バイナリーエンコーダ83、演算回路85、及び比較演算回路86の各々の構成及び機能は、図3に示すレジスタ51、比較器52、バイナリーエンコーダ53、演算回路55、及び比較演算回路56と同じなので、説明を省略する。
【0119】
セレクタ回路841は、セレクタ回路841に入力されたシンボルsに応じて、隣接するCDF[偶]とCDF[奇]とのペアを選択する。例えば、シンボルsがk番目のシンボルであれば、CDF[k]とCDF[k-1]とが選択される(kは2以上の自然数)。そして、選択されたCDF[偶]及び選択されたCDF[奇]はセレクタ842によって選択される。セレクタ842は、シンボルsが奇数番目か偶数番目かに応じて、選択されたCDF[偶]及び選択されたCDF[奇]のいずれか1つを選択してCDF[s]を出力する。このように、CDF[s]テーブルを偶数エントリ(k)と奇数エントリ(k-1)の2つに分けて構成することで、セレクタの入力数を半分に減らすことができる。
【0120】
差分演算回路843は、CDF[偶]とCDF[奇]との差分を計算し、計算結果であるf[s]を出力する。このようにして算出されたf[s]に基づいて、演算回路85によって内部ステートxの更新が行われる。このように、CDF[偶]とCDF[奇]とのペアからf[s]を算出することで、f[s]テーブル及びそれらを選択するセレクタを省略することができる。
【0121】
以上のように、本実形態に係る復号装置80によると、復号装置50において、f[s]に係るテーブル及びセレクタを省略することができるため、回路規模を減少させることができる。
【0122】
[5.第5実施形態]
第5実施形態に係るメモリシステムについて説明する。第5実施形態に係るメモリシステム1は、圧縮・伸張回路16に含まれる復号装置90の構成が、第4実施形態に係るメモリシステム1の復号装置80と相違する。それ以外の構成は、第4実施形態の構成と同様なので、説明を省略する。
【0123】
[5-1.復号装置90の構成]
以下、本発明の一実施形態に係るエントロピー符号化された圧縮ストリームを復号する復号装置90について説明する。この復号装置90も圧縮・伸張回路16に含まれる。復号装置90は、算術符号化手法の一つであるrANS方式がハードウェアに実装された装置である。
【0124】
図7は復号装置90の回路図である。復号装置90は、入力される圧縮ストリームINから出力シンボルsを生成する。復号装置90は、復号装置80を元に、シンボルsの値が偶数の場合と奇数の場合とについて、次の内部ステートを求める計算を投機的に行う。その結果、並列比較の数を低減することができる。これは2分岐探索と並列比較とを組み合わせた構成に相当する。
【0125】
図7に示すように、復号装置90は、レジスタ91、比較器92、バイナリーエンコーダ93、テーブル940、セレクタ941、942、943、944、945、演算回路951、セレクタ952、比較演算回路953、ビット連接器954、及び比較演算回路96を有する。テーブル940には、シンボルsに対するCDF[s]が格納されている。テーブル940には、総シンボル数Gに対するデータ(CDF[1]~CDF[G-1])が格納されている。比較器92を「第1比較器」という場合がある。
【0126】
レジスタ91の長さは2*mビットである。レジスタ91は内部ステートxを保持する。復号装置90の処理が繰り返される度に、内部ステートxの値が減少する。内部ステートxがmビットより小さくなると、外部から入力される圧縮ストリームINのmビット分と結合される。
【0127】
復号装置90は、(G/2-1)個の比較器92とバイナリーエンコーダ93とを有する。各比較器92は、それぞれ、偶数のシンボルsに対するCDF[2]~CDF[G-2]と内部ステートxの下位nビットとを比較する。各比較器92の出力は、バイナリーエンコーダ93に入力され、バイナリーエンコーダ93はシンボルsの下位1ビットを除いた値ssを出力する。この回路が、symbol関数の下位1ビットを除いた部分の実装に対応する。
【0128】
入力されたシンボルsの下位1ビット(例えば、最下位ビット)を除いた値ssに応じて、セレクタ941は奇数のシンボルsに対するCDF[奇]を選択し、セレクタ942及び943はCDF[4i]とCDF[4i+2]とを選択する(iは整数)。CDF[奇]は、セレクタ941に入力されるCDFのエントリ番号が奇数であることを意味する。CDF[4i]は、セレクタ942に入力されるCDFのエントリ番号が4i(4の倍数)であることを意味する。CDF[4i+2]は、セレクタ943に入力されるCDFのエントリ番号が4i+2(4の倍数に2を加算した数)であることを意味する。シンボルsと値ssとの具体的な関係は、図8に示すように、シンボルsが0又は1のとき値ssは0であり、シンボルsが2又は3のとき値ssは2である。
【0129】
CDF[奇]のエントリ番号は、(ss+1)である。CDF[4i]及びCDF[4i+2]の各々のエントリ番号は、(ss+1)に隣接する値である。具体的には、図8に示すように、シンボルsが0又は1であり値ssが0のとき、CDF[奇]のエントリ番号は1(CDF[1])であり、CDF[4i]のエントリ番号は0(CDF[0])であり、CDF[4i+2]のエントリ番号は2(CDF[2])である。シンボルsが2又は3であり値ssが2のとき、CDF[奇]のエントリ番号は3(CDF[3])であり、CDF[4i]のエントリ番号は4(CDF[4])であり、CDF[4i+2]のエントリ番号は2(CDF[2])である。シンボルsが4又は5であり値ssが4のとき、CDF[奇]のエントリ番号は5(CDF[5])であり、CDF[4i]のエントリ番号は4(CDF[4])であり、CDF[4i+2]のエントリ番号は6(CDF[6])である。シンボルsが6又は7であり値ssが6のとき、CDF[奇]のエントリ番号は7(CDF[7])であり、CDF[4i]のエントリ番号は8(CDF[8])であり、CDF[4i+2]のエントリ番号は6(CDF[6])である。上記のように、本実施形態では、隣接した3つのCDF[s]が選択される。ただし、選択されるCDF[s]の数は4つ以上であってもよい。
【0130】
セレクタ944は、値ssに応じて選択されたCDF[4i]及びCDF[4i+2]のうち小さい方を選択し、CDF0として出力する。セレクタ945は、値ssに応じて選択されたCDF[4i]及びCDF[4i+2]のうち大きい方を選択し、CDF2として出力する。具体的には、図8に示すように、シンボルsが0又は1であり値ssが0のとき、CDF0としてCDF[0]が出力され、CDF1としてCDF[1]が出力され、CDF2としてCDF[2]が出力される。シンボルsが2又は3であり値ssが2のとき、CDF0としてCDF[2]が出力され、CDF1としてCDF[3]が出力され、CDF2としてCDF[4]が出力される。このように、CDF[s]テーブルを偶数エントリと奇数エントリとの2つに分けて構成することで、セレクタの入力数を半分に低減することができる。
【0131】
演算回路951は、2つの演算を同時に投機的に行う。ひとつは暫定的内部ステートxtmp0を求める演算であり、もうひとつは暫定的内部ステートxtmp1を求める演算である。
【0132】
演算回路951のひとつの演算ユニットは、CDF1-CDF0の値と内部ステートxをnビット右シフトした値とを乗じたものに対して、xの下位nビット(x&mask)を加算し、CDF0を減算することで、暫定的内部ステートxtmp0を計算し、出力する。具体的には、図8に示すように、シンボルsが0のとき、f[0]はCDF[1]-CDF[0]によって求められる。
【0133】
演算回路951のもうひとつの演算ユニットは、CDF2-CDF1の値と内部ステートxをnビット右シフトした値とを乗じたものに対して、xの下位nビット(x&mask)を加算し、CDF1を減算することで、暫定的内部ステートxtmp1を計算し、出力する。具体的には、図8に示すように、シンボルsが1のとき、f[1]はCDF[2]-CDF[1]によって求められる。
【0134】
比較演算回路953は、内部ステートxの下位nビット(x&mask)とCDF1とを比較する。比較演算回路953は、内部ステートxの下位nビット(x&mask)がCDF1以上であれば、シンボルsの下位1ビットとして1を出力し、そうでなければ、シンボルsの下位1ビットとして0を出力する。比較演算回路953を「第2比較器」という場合がある。比較演算回路953は、セレクタ941~945によって選択されたCDF0~CDF2のうち少なくとも1つのCDFと内部ステートxとの比較を行う。
【0135】
ビット連接器954は、比較演算回路953によって出力された値と、バイナリーエンコーダ93によって出力されたシンボルsの下位1ビットを除いた値ssと、を連接することで、シンボルsを出力する。換言すると、ビット連接器954は、複数の比較器92(第1比較器)による比較結果と、比較演算回路953(第2比較器)による比較結果とに基づいて、出力シンボルを生成する。ビット連接器954を「シンボル生成器」という場合がある。
【0136】
セレクタ952は、比較演算回路953によって出力されたシンボルsの下位1ビットが0であれば暫定的内部ステートxtmp0を選択し、当該シンボルsの下位1ビットが1であれば暫定的内部ステートxtmp1を選択し、暫定的内部ステートxtmpとして比較演算回路96に供給する。
【0137】
比較演算回路96は、暫定的内部ステートxtmpがMよりも小さいか否かを比較する。比較演算回路96は、この比較によって、暫定的内部ステートxtmpがmビット以下か否かを判断している。暫定的内部ステートxtmpがmビット以下の場合、比較演算回路96は、暫定的内部ステートxtmpをmビット左シフトさせ、空いたmビットの領域に圧縮ストリームINから取り込まれたmビットのデータを挿入することで、内部ステートxを更新する。暫定的内部ステートxtmpがmビット以下ではない場合、暫定的内部ステートxtmpを内部ステートxとする。そして、このようにして得られた内部ステートxは、レジスタ91に格納される。
【0138】
以上、本発明について図面を参照しながら説明したが、本発明は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、本実施形態の圧縮・伸張回路を基にして、当業者が適宜構成要素の追加、削除もしくは設計変更を行ったものも、本発明の要旨を備えている限り、本発明の範囲に含まれる。さらに、上述した各実施形態は、相互に矛盾がない限り適宜組み合わせが可能であり、各実施形態に共通する技術事項については、明示の記載がなくても各実施形態に含まれる。
【0139】
上述した各実施形態の態様によりもたらされる作用効果とは異なる他の作用効果であっても、本明細書の記載から明らかなもの、又は、当業者において容易に予測し得るものについては、当然に本発明によりもたらされるものと解される。
【符号の説明】
【0140】
1:メモリシステム、 10:メモリコントローラ、 11:プロセッサ、 12:RAM、 13:ROM、 14:ランダマイザ、 15:ECC回路、 16:圧縮・伸張回路、 17:ホストインタフェース、 18:メモリインタフェース、 19:内部バス、 20:不揮発性メモリ、 21:メモリチップ、 22:ダイ、 23:メモリブロック、 30:ホスト、 40:エントロピー符号化装置、 50:復号装置、 51:レジスタ、 52:比較器、 53:バイナリーエンコーダ、 54:セレクタ、 55:演算回路、 56:比較演算回路、 60:エントロピー符号化装置、 61:テーブル、 62:レジスタ、 63:比較器、 64、65:乗算ユニット、 66、67:セレクタ、 68:比較演算回路、 69:出力器、 70:エントロピー符号化装置、 72:レジスタ、 73:比較器、 74、75:乗算ユニット、 76、77:セレクタ、 78:比較演算回路、 79:出力器、 80:復号装置、 81:レジスタ、 82:比較器、 83:バイナリーエンコーダ、 85:演算回路、 86:比較演算回路、 90:復号装置、 91:レジスタ、 92:比較器、 93:バイナリーエンコーダ、 96:比較演算回路、 710:テーブル、 711:セレクタ回路、 712、713、716、717:レジスタ、 714:セレクタ、 715:差分演算回路、 718:逆数器、 840:テーブル、 841:セレクタ回路、 842:セレクタ、 843:差分演算回路、 940:テーブル、 941~945、952:セレクタ、 951:演算回路、 953:比較演算回路、 954:ビット連接器
図1
図2
図3
図4
図5
図6
図7
図8