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

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

<>
  • -メモリシステム 図1
  • -メモリシステム 図2
  • -メモリシステム 図3
  • -メモリシステム 図4
  • -メモリシステム 図5
  • -メモリシステム 図6
  • -メモリシステム 図7
  • -メモリシステム 図8
  • -メモリシステム 図9
  • -メモリシステム 図10
  • -メモリシステム 図11
  • -メモリシステム 図12
  • -メモリシステム 図13
  • -メモリシステム 図14
  • -メモリシステム 図15
  • -メモリシステム 図16
  • -メモリシステム 図17
  • -メモリシステム 図18
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022047426
(43)【公開日】2022-03-24
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/04 20060101AFI20220316BHJP
   H03M 7/42 20060101ALI20220316BHJP
【FI】
G06F12/04 530
H03M7/42
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2020153340
(22)【出願日】2020-09-11
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110000408
【氏名又は名称】特許業務法人高橋・林アンドパートナーズ
(72)【発明者】
【氏名】住吉 正人
(72)【発明者】
【氏名】中西 圭里
(72)【発明者】
【氏名】小玉 翔
(72)【発明者】
【氏名】及川 恒平
【テーマコード(参考)】
5B160
5J064
【Fターム(参考)】
5B160DA08
5J064BA09
5J064BB13
5J064BD03
(57)【要約】      (修正有)
【課題】圧縮・伸張回路における符号化及び復号のスループットを向上させるメモリシステムを提供する。
【解決手段】メモリシステムは、メモリとメモリコントローラとを備える。メモリコントローラは、符号化部100と復号部200とを有する圧縮・伸長回路16を備える。符号化部は、シンボルの出現パターンに応じて符号化用符号表を更新する第1符号表更新部130と、入力シンボルに基づいて計算された、入力シンボルのデータ量を示す第1データ量を用いて、第1符号表更新部への入力を制御する符号化用フロー制御部190と、を有する。復号部は、シンボルの出現パターンに応じて復号用符号表を更新する第2符号表更新部230と、第1データ量の計算と同じ方法で出力シンボルに基づいて計算された、出力シンボルのデータ量を示す第2データ量を用いて、第2符号表更新部への入力を制御する復号用フロー制御部290と、を有する。
【選択図】図2
【特許請求の範囲】
【請求項1】
メモリと、前記メモリを制御し且つ圧縮されたデータを伸張するメモリコントローラと、を備えるメモリシステムであって、
前記メモリコントローラは、符号化用符号表を用いて、入力シンボルを符号語に変換する符号化部と、復号用符号表を用いて前記符号語を出力シンボルに変換する復号部と、を有し、
前記符号化部は、
シンボルの出現パターンに応じて前記符号化用符号表を更新する第1符号表更新部と、
前記入力シンボルに基づいて計算された、前記入力シンボルのデータ量を示す第1データ量を用いて、前記第1符号表更新部への入力を制御する符号化用フロー制御部と、を有し、
前記復号部は、
シンボルの出現パターンに応じて前記復号用符号表を更新する第2符号表更新部と、
前記第1データ量の計算と同じ方法で前記出力シンボルに基づいて計算された、前記出力シンボルのデータ量を示す第2データ量を用いて、前記第2符号表更新部への入力を制御する復号用フロー制御部と、を有するメモリシステム。
【請求項2】
前記符号化部に入力された前記入力シンボルは圧縮されたシンボルであり、
前記第1データ量は、前記入力シンボルの圧縮前のデータ量であり、
前記第2データ量は、前記出力シンボルの伸張後のデータ量である、請求項1に記載のメモリシステム。
【請求項3】
前記符号化部に入力された前記入力シンボルは辞書式圧縮によって圧縮されたシンボルである、請求項2に記載のメモリシステム。
【請求項4】
前記符号化用フロー制御部は、第1仮復号部及び第1シンボル数算出部を有し、
前記第1仮復号部は、前記復号部から出力された前記出力シンボルが伸張される方法と同じ方法で伸張した場合のデータサイズを算出し、
前記第1シンボル数算出部は、前記第1仮復号部によって算出されたデータサイズに基づいて、次のサイクルで処理される前記入力シンボルの位置を特定し、
前記復号用フロー制御部は、第2仮復号部及び第2シンボル数算出部を有し、
前記第2仮復号部は、前記第1仮復号部と同じ方法で前記出力シンボルを伸張した場合のデータサイズを算出し、
前記第2シンボル数算出部は、前記第2仮復号部によって算出されたデータサイズに基づいて、次のサイクルで処理される前記出力シンボルの位置を特定する、請求項1乃至3のいずれか一に記載のメモリシステム。
【請求項5】
前記符号化部は、前記符号化用フロー制御部と前記第1符号表更新部との間に設けられた、前記入力シンボルが存在しないサイクルを検出する第1空サイクル検出部をさらに有し、
前記復号部は、前記復号用フロー制御部と前記第2符号表更新部との間に設けられた、前記出力シンボルが存在しないサイクルを検出する第2空サイクル検出部をさらに有する、請求項1乃至4のいずれか一に記載のメモリシステム。
【請求項6】
メモリと、前記メモリを制御し且つ圧縮されたデータを伸張するメモリコントローラと、を備えるメモリシステムであって、
前記メモリコントローラは、符号化用符号表を用いて、入力シンボルを符号語に変換する符号化部と、復号用符号表を用いて前記符号語を出力シンボルに変換する復号部と、を有し、
前記符号化部は、
シンボルの出現パターンに応じて前記符号化用符号表を更新する第1符号表更新部と、
前記入力シンボルのタイプを示す第1タイプに基づいて見積もられた、前記入力シンボルのデータ量を反映した第1データ量を用いて、前記第1符号表更新部への入力を制御する符号化用フロー制御部と、を有し、
前記復号部は、
シンボルの出現パターンに応じて前記復号用符号表を更新する第2符号表更新部と、
前記符号語のタイプを示す第2タイプに基づいて見積もられた、前記出力シンボルのデータ量を反映した第2データ量を用いて、前記第2符号表更新部への入力を制御する復号用フロー制御部と、を有するメモリシステム。
【請求項7】
前記第1タイプは、前記符号化部に入力された前記入力シンボルが圧縮されているか否かを示す情報を含み、
前記第2タイプは、前記符号語に基づいて得られる前記出力シンボルが圧縮されているか否かを示す情報を含み、
前記第1データ量は、前記入力シンボルの圧縮前のデータ量を反映したデータ量であり、
前記第2データ量は、前記出力シンボルの伸張後のデータ量を反映したデータ量である、請求項6に記載のメモリシステム。
【請求項8】
前記符号化部に入力された前記入力シンボルは辞書式圧縮によって圧縮されたシンボルである、請求項7に記載のメモリシステム。
【請求項9】
前記符号化用フロー制御部は、第1近似計算部及びシンボル数算出部を有し、
前記第1近似計算部は、前記入力シンボルが圧縮されているか否かを判定し、前記入力シンボルが圧縮されていると判定した場合の前記入力シンボルの前記第1データ量を第1の値に設定し、前記第1の値に基づいて、次のサイクルで処理される前記入力シンボルの位置を特定し、
前記復号用フロー制御部は、第2近似計算部及び符号語数算出部を有し、
前記第2近似計算部は、前記符号語が変換された前記出力シンボルが圧縮されているか否かを判定し、前記符号語が変換された前記出力シンボルが圧縮されていると判定した場合の前記出力シンボルの前記第2データ量を前記第1の値と同じ値である第2の値に設定し、前記第2の値に基づいて、次のサイクルで出力される前記出力シンボルの出力位置を特定する、請求項6乃至8のいずれか一に記載のメモリシステム。
【請求項10】
前記復号部は、前記復号用フロー制御部から出力された前記符号語からエントリ番号を抽出し、前記エントリ番号を前記第2符号表更新部に入力するエントリ番号抽出部をさらに有し、
前記第2符号表更新部は、前記エントリ番号に基づいて前記復号用符号表を更新する、請求項6乃至9のいずれか一に記載のメモリシステム。
【請求項11】
前記符号化部は、
前記符号化用フロー制御部から出力された前記入力シンボルを、前記符号化用符号表に基づいて前記符号語に変換する符号化論理部と、
前記符号化用フロー制御部と前記符号化論理部との間に設けられ、入力された前記入力シンボルを遅延させる第1遅延バッファと、をさらに有し、
前記復号部は、
前記復号用フロー制御部から出力された前記符号語を、前記復号用符号表に基づいて前記出力シンボルに変換する復号論理部と、
前記復号用フロー制御部と前記復号論理部との間に設けられ、入力された前記符号語を遅延させる第2遅延バッファと、をさらに有する、請求項10に記載のメモリシステム。
【請求項12】
前記第1遅延バッファによって遅延されるサイクル数は、前記第2遅延バッファによって遅延されるサイクル数と同じである、請求項11に記載のメモリシステム。
【請求項13】
前記第1遅延バッファによって遅延されるサイクル数は、前記第1符号表更新部におけるレイテンシによって遅延されるサイクル数よりも1サイクル小さく、
前記第2遅延バッファによって遅延されるサイクル数は、前記第2符号表更新部におけるレイテンシによって遅延されるサイクル数よりも1サイクル小さい、請求項11に記載のメモリシステム。
【請求項14】
複数の前記入力シンボルが変換された複数の前記符号語が、1サイクルで前記符号化部から出力される、請求項1乃至13のいずれか一に記載のメモリシステム。
【請求項15】
前記符号化部に前記入力シンボルを出力する辞書式圧縮部をさらに有し、
前記辞書式圧縮部は、前記辞書式圧縮部に入力された第1シンボル列が過去に入力された第2シンボル列と最小マッチ長以上一致するときに、前記第1シンボル列を圧縮し
前記第1近似計算部は、前記第1の値を前記最小マッチ長に設定する、請求項9に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の一実施形態は不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
上記のメモリシステムにおいて、符号化テーブル及び復号テーブルを逐次更新しながらデータの符号化及び復号を行う適応型エントロピー符号化及び復号方式が用いられている。この方式において、符号化されたデータを正しく復号するためには、復号テーブルにおいて符号化テーブルの状態を正しく再現する必要がある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許第6188338号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本開示は、メモリシステムの圧縮・伸張回路における符号化及び復号のスループットを向上させることを目的とする。
【課題を解決するための手段】
【0006】
一実施形態に係るメモリシステムは、メモリと、前記メモリを制御し且つ圧縮されたデータを伸張するメモリコントローラと、を備える。前記メモリコントローラは、符号化用符号表を用いて、入力シンボルを符号語に変換する符号化部と、復号用符号表を用いて前記符号語を出力シンボルに変換する復号部と、を有する。前記符号化部は、シンボルの出現パターンに応じて前記符号化用符号表を更新する第1符号表更新部と、前記入力シンボルに基づいて計算された、前記入力シンボルのデータ量を示す第1データ量を用いて、前記第1符号表更新部への入力を制御する符号化用フロー制御部と、を有する。前記復号部は、シンボルの出現パターンに応じて前記復号用符号表を更新する第2符号表更新部と、前記第1データ量の計算と同じ方法で前記出力シンボルに基づいて計算された、前記出力シンボルのデータ量を示す第2データ量を用いて、前記第2符号表更新部への入力を制御する復号用フロー制御部と、を有する。
【図面の簡単な説明】
【0007】
図1】一実施形態に係るメモリシステムの構成を示すブロック図である。
図2】一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。
図3】一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号化用フロー制御部の構成を示すブロック図である。
図4】一実施形態に係る圧縮・伸張回路の復号部に含まれる復号用フロー制御部の構成を示すブロック図である。
図5】一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。
図6】一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号化用フロー制御部の構成を示すブロック図である。
図7】一実施形態に係る圧縮・伸張回路の復号部に含まれる復号用フロー制御部の構成を示すブロック図である。
図8】一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。
図9】一実施形態に係る圧縮・伸張回路の復号部に含まれる符号表更新部の構成を示すブロック図である。
図10】一実施形態に係る圧縮・伸張回路の復号部において行われるエントリ番号抽出に用いられる符号表の一例である。
図11】一実施形態に係る圧縮・伸張回路の符号化部又は復号部に含まれる符号表の状態遷移の一例を示す図である。
図12】一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号表更新部の動作を示すタイミングチャートである。
図13】一実施形態に係る圧縮・伸張回路の復号部に含まれる符号表更新部の動作を示すタイミングチャートである。
図14】一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。
図15】一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号表更新部の動作を示すタイミングチャートである。
図16】一実施形態に係る圧縮・伸張回路の復号部に含まれる符号表更新部の動作を示すタイミングチャートである。
図17】一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。
図18】一実施形態に係る圧縮・伸張回路の符号表更新部の構成を示すブロック図である。
【発明を実施するための形態】
【0008】
以下、実施形態にかかるメモリシステムについて、図面を参照して具体的に説明する。以下の説明において、略同一の機能及び構成を有する構成要素について、同一符号が付されており、必要な場合にのみ重複する説明が行われる。以下に示す各実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示する。実施形態の技術思想は、構成要素の材質、形状、構造、配置等を下記のものに限定されない。実施形態の技術的思想は、特許請求の範囲に対して、種々の変更を加えたものであってもよい。
【0009】
以下の説明において、1バイト(Byte)の情報を「データ」といい、当該データが入力された順に並べられたものを「データ列」という。ただし、「データ」は1バイトの情報に限定されない。後述する圧縮・伸張回路16に入力されるデータ列を「入力データ列」といい、圧縮・伸張回路16から出力されるデータ列を「出力データ列」という。
【0010】
上記のデータが後述する辞書式圧縮部300によって辞書式圧縮された情報を「シンボル」という。圧縮・伸張回路16の符号化部100に入力されるシンボルを「入力シンボル」という。圧縮・伸張回路16の復号部200から出力されるシンボルを「出力シンボル」という。「入力シンボル」と「出力シンボル」とを特に区別する必要がない場合、単に「シンボル」という。1つの「シンボル」は、1つの「データ」に対応してもよく、複数の「データ」が圧縮された圧縮データに対応してもよい。以下の実施形態において、圧縮されていないデータに対応するシンボルを「リテラルシンボル」といい、圧縮されたデータに対応するシンボルを「マッチシンボル」という。
【0011】
「マッチシンボル」は、圧縮対象のデータ列を、過去に同じパターンのデータ列が出現した位置を示す情報と、圧縮対象のデータ列と過去に出現したパターンとが一致するデータ列の長さに係る情報と、に置き換えたものである。例えば、マッチシンボルは、過去に伸張されたデータ列が格納されているヒストリーバッファにおけるアドレスを示す「位置情報」と、当該アドレスに格納されたデータ列の先頭からのデータ数を示す「長さ情報」と、を含む。
【0012】
「圧縮する」とは、対象のデータ列の情報量(例えばビット数)を小さくすることを意味し、「符号化する」又は「エンコードする」ということもできる。「伸張する」とは、圧縮されたデータ列の情報量を圧縮前の状態に復元することを意味し、「復号する」又は「デコードする」ということもできる。
【0013】
以下の説明において、符号化部100に入力シンボルを入力する制御を行うクロック信号の1周期、又は復号部200から出力シンボルを出力する制御を行うクロック信号の1周期を「1サイクル」という。符号化部100及び復号部200には複数のバッファ(例えば、フリップフロップ回路)が設けられており、あるバッファに格納されたデータは、1サイクルの間に当該バッファから送出されて、後段のバッファに格納される。以下の実施形態において、複数の入力シンボルが1サイクルで符号化部100に入力される構成、かつ当該複数の入力シンボルが変換された複数の符号語が1サイクルで符号化部100から送信される構成について説明する。
【0014】
<第1実施形態>
第1実施形態に係るメモリシステムについて説明する。第1実施形態に係るメモリシステムは、例えば、半導体記憶装置としてのNAND型フラッシュメモリと、当該NAND型フラッシュメモリを制御するメモリコントローラと、を含む。本実施形態において、メモリコントローラは、データを圧縮・伸張する機能を有する。
【0015】
[メモリシステム1の全体構成]
図1は、一実施形態に係るメモリシステムの構成を説明するためのブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と、不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能である。図1では、メモリシステム1とホスト30とが接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
【0016】
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の半導体記憶装置を用いることができる。不揮発性メモリ20が半導体記憶装置であることは必須ではない。半導体記憶装置以外の種々の記憶媒体に対して本実施形態を適用することができる。
【0017】
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよく、SSD(Solid State Drive)等であってもよい。
【0018】
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成される半導体集積回路である。以下で説明するメモリコントローラ10の各構成要素の動作の一部又は全部はハードウエアによって実現されるが、CPU(Central Processing Unit)がファームウエアを実行することによって実現されてもよい。
【0019】
メモリコントローラ10は、ホスト30からの書き込み要求に従って不揮発性メモリ20への書き込みを制御し、ホスト30からの読み出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、プロセッサ11、RAM(Random Access Memory)12、ROM(Read Only Memory)13、ランダマイザ14、ECC回路15、圧縮・伸張回路(Compression/Decompression Circuit)16、ホストI/F(ホストインタフェース)17、及びメモリI/F(メモリインタフェース)18を備える。これらの機能ブロックは内部バス19で相互に接続されている。
【0020】
圧縮・伸張回路16は、不揮発性メモリ20へ書き込むデータを圧縮する符号化器として動作する。圧縮・伸張回路16は、不揮発性メモリ20から読み出されたデータを伸張する復号器としても動作する。圧縮・伸張回路16の詳細な構成及び動作は後述する。
【0021】
ホストI/F17は、ホスト30とホストI/F17との間のインタフェース規格に従った処理を実行する。ホストI/F17は、ホスト30から受信した要求及び書き込み対象のデータなどを内部バス19に出力する。ホストI/F17は、不揮発性メモリ20から読み出され、圧縮・伸張回路16によって伸張されたデータをホスト30へ送信する。ホストI/F17は、プロセッサ11からの応答などをホスト30へ送信する。
【0022】
メモリI/F18は、プロセッサ11の指示に基づいて、不揮発性メモリ20への書き込み処理を行う。メモリI/F18は、プロセッサ11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
【0023】
プロセッサ11は、メモリシステム1の各機能ブロックを統括的に制御する制御部である。プロセッサ11は、ホスト30からの要求をホストI/F17経由で受け付けた場合に、その要求に応じた制御を行う。例えば、プロセッサ11は、ホスト30からの書き込み要求に応じて、不揮発性メモリ20へのデータの書き込みをメモリI/F18へ指示する。プロセッサ11は、ホスト30からの読み出し要求に応じて、不揮発性メモリ20からのデータの読み出しをメモリI/F18へ指示する。
【0024】
プロセッサ11は、ホスト30から書き込み要求を受信した場合、RAM12に保持されているデータに対して、不揮発性メモリ20上の格納領域(メモリ領域)を決定する。すなわち、プロセッサ11は、データの書き込み先を管理する。ホスト30から受信したデータの論理アドレスと当該データが格納された不揮発性メモリ20上の格納領域を示す物理アドレスとの対応はアドレス変換テーブルに格納される。
【0025】
プロセッサ11は、ホスト30から読み出し要求を受信した場合、読み出し要求によって指定された論理アドレスを、上述のアドレス変換テーブルを用いて物理アドレスに変換し、当該物理アドレスからの読み出しをメモリI/F18へ指示する。
【0026】
NANDメモリでは、一般に、ページと呼ばれるデータ単位で書き込み及び読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。同一のワード線に接続される複数のメモリセルをメモリセルグループという。メモリセルがSLC(Single Level Cell)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがMLC、TLC、又はQLCなどの多ビットセルである場合、1つのメモリセルグループが複数ページに対応する。各メモリセルはワード線及びビット線の両方に接続される。したがって、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとを用いて識別することが可能である。
【0027】
RAM12は、例えばデータバッファとして使用され、メモリコントローラ10がホスト30から受信したデータを不揮発性メモリ20へ記憶させるまでに一時的に保持する。RAM12は、不揮発性メモリ20から読み出したデータをホスト30へ送信するまでの間に一時的に保持する。RAM12として、例えば、SRAM(Static Random Access Memory)又はDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
【0028】
RAM12は、アドレス変換テーブル、起動時等に不揮発性メモリ20の特定の領域から読み出されて展開されるマスタテーブル(スナップショット)などの各種管理テーブル、又は各種管理テーブルの変更差分であるログ情報などを記憶するワーキングメモリとして使用されてもよい。
【0029】
ROM13は、メモリコントローラ10を動作させるための種々のプログラムやパラメータ等を記憶する。ROM13に格納されているプログラムやパラメータ等は、必要に応じてプロセッサ11に読み出されて実行される。
【0030】
ランダマイザ14は、例えば線形帰還シフトレジスタ等を含み、入力されたシード値に対して一義的に求められる擬似乱数を生成する。ランダマイザ14によって生成された擬似乱数は、例えばプロセッサ11において書き込みデータとの排他的論理和が計算される。これにより、不揮発性メモリ20に書き込まれる書き込みデータがランダマイズされる。
【0031】
ホスト30からホストI/F17へ送信されたデータは、内部バス19に転送されてRAM12に一時的に保持される。当該データは、圧縮・伸張回路16によって圧縮され、ECC回路15により誤り訂正符号化される。その後、当該データは、メモリI/F18を介して不揮発性メモリ20に書き込まれる。一方、不揮発性メモリ20から読み出されたデータは、ECC回路15によって誤り訂正復号が行われる。その後、当該データが圧縮・伸張回路16によって伸張されることで、オリジナルのデータに復元される。復元されたデータは、例えばRAM12に一時的に保持された後、ホストI/F17を介してホスト30へ転送される。圧縮・伸張回路16及び/又はECC回路15によって符号化されるデータには、上記のデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
【0032】
以上のような構成を備えるメモリシステム1における書き込み処理では、プロセッサ11は、不揮発性メモリ20への書き込み時に、圧縮・伸張回路16に対してデータの圧縮を指示する。その際、プロセッサ11は、不揮発性メモリ20における書き込みデータの格納場所(格納アドレス)を決定し、決定した格納場所をメモリI/F18へ指示する。圧縮・伸張回路16は、プロセッサ11からの指示に基づいて、RAM12上のデータを圧縮する。そして、ECC回路15は、プロセッサ11からの指示に基づいて、RAM12上の圧縮されたデータをさらにECC符号化する。これにより生成された書き込みデータは、メモリI/F18を介して不揮発性メモリ20の指定された格納場所に書き込まれる。ECC回路15の符号化方式として、例えば、LDPC(Low-Density Parity-Check)符号、BCH(Bose-Chaudhuri-Hocquenghem)符号、又はRS(Reed-Solomon)符号を用いた符号化方式を採用することができる。
【0033】
一方、読み出し処理では、プロセッサ11は、不揮発性メモリ20からの読み出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F18へ読み出しを指示する。プロセッサ11は、ECC回路15へECC復号の開始を指示するとともに、圧縮・伸張回路16へ伸張の開始を指示する。メモリI/F18は、プロセッサ11の指示に従って、不揮発性メモリ20の指定されたアドレスに対する読み出しを実行し、この読み出しによって得られた読み出しデータをECC回路15に入力する。ECC回路15は入力された読み出しデータをECC復号化する。圧縮・伸張回路16はECC復号化されたデータを伸張する。この伸張に成功した場合、プロセッサ11は、伸張されたオリジナルのデータをRAM12に格納する。一方、ECC復号化及び伸張に失敗した場合、プロセッサ11は、例えば、ホスト30へリードエラーを通知する。
【0034】
[圧縮・伸張回路16の構成]
図2は、一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。図2に示すように、圧縮・伸張回路16は、符号化部100、復号部200、辞書式圧縮部300、及び辞書式伸張部400を備える。符号化部100の入力端子101は辞書式圧縮部300に接続されている。符号化部100の出力端子103及び復号部200の入力端子201は、ともに内部バス19接続されている。復号部200の出力端子203は辞書式伸張部400に接続されている。辞書式圧縮部300の入力端子及び辞書式伸張部400の出力端子は内部バス19に接続されている。符号化部100は、後述する符号化用符号表を用いて、入力シンボルを符号語に変換する。復号部200は、後述する復号用符号表を用いて符号化部100から出力された符号語を出力シンボルに変換する。
【0035】
圧縮・伸張回路16では、例えばLZ77圧縮など、データ列の類似性を利用した辞書式圧縮及び辞書式伸張を用いた圧縮・伸張技術が用いられる。圧縮対象の入力データ列(data string)が過去に入力された入力済みデータ列を用いて表現できる場合、辞書式圧縮部300によって、入力データ列は入力済みデータ列を参照する情報である入力シンボル(symbol)に圧縮される。辞書式圧縮部300によって圧縮された入力シンボルは符号化部100に入力される。符号化部100に入力された入力シンボルは、さらに符号語(code)に符号化されて内部バス19に送信される。当該符号語は、内部バス19を介して復号部200に入力され、復号部200によって出力シンボル(symbol)に復号され、復号された出力シンボルが復号部200から出力される。復号部200から出力された出力シンボルは、辞書式伸張部400によって出力データ列(data string)に伸張される。
【0036】
以下の説明では、上記の圧縮・伸張回路16のうち符号化部100及び復号部200の構成及び機能について説明する。辞書式圧縮部300及び辞書式伸張部400として一般的な回路を用いることができるため、ここでは説明を省略する。
【0037】
符号化部100(encode)は、シンボルバッファ110、シンボル数算出部120、符号表更新部130(code table)、符号化論理部140(encode logic)、及びパック部150(pack)を有する。符号化部100の入力端子101はシンボルバッファ110の入力端子に接続されている。シンボルバッファ110の出力端子はシンボル数算出部120の入力端子に接続されている。シンボル数算出部120の出力端子はシンボルバッファ110、符号表更新部130、及び符号化論理部140の各々の入力端子に接続されている。シンボル数算出部120はシンボルバッファ110をフィードバック制御する。符号表更新部130の出力端子は符号化論理部140の入力端子に接続されている。符号化論理部140の出力端子はパック部150の入力端子に接続されている。パック部150の出力端子は符号化部100の出力端子103に接続されている。なお、符号表更新部130を「第1符号表更新部」という場合がある。
【0038】
シンボルバッファ110は、符号化部100に入力された入力シンボルを一時的に格納する。シンボルバッファ110の容量は、1サイクルで処理されるシンボルの数に応じて設定される。本実施形態では、1サイクルで4つのシンボルが処理されるので、シンボルバッファ110は少なくとも4つのシンボルを格納できる容量を有している。ただし、1サイクルで処理されるシンボルの数は3より小さくてもよく、5より大きくてもよい。
【0039】
シンボル数算出部120は、シンボルバッファ110に一時的に格納された入力シンボルに基づいて、当該入力シンボルに圧縮される前の入力データ列のデータ量(第1データ量)を計算し、計算されたデータ量に対応するシンボル数を算出する。このように算出されたシンボル数を「第1消費シンボル数」という。シンボル数算出部120は、第1消費シンボル数に基づいて、シンボルバッファ110に格納された入力シンボルのうち、後段の符号表更新部130及び符号化論理部140に出力するシンボルを選択する。また、シンボル数算出部120は、上記の第1消費シンボル数に基づいてシンボルバッファ110を制御する。具体的には、シンボル数算出部120は、上記の第1消費シンボル数に基づいて、次のサイクルで処理される入力シンボルの位置(シンボルバッファ110のアドレス)を特定する。
【0040】
シンボルバッファ110及びシンボル数算出部120を符号化用フロー制御部190という場合がある。上記の構成を換言すると、符号化用フロー制御部190は、入力シンボルに基づいて計算された、入力シンボルのデータ量を示す第1データ量を用いて、符号表更新部130への入力を制御する。なお、シンボルバッファ110及びシンボル数算出部120の詳細な構成は後述する。
【0041】
符号表更新部130は符号化用符号表を有する。詳細は後述するが、符号化用符号表はエントリ番号、符号語、入力シンボル、及び入力シンボルの出現頻度を関連付けて格納する表である(後述する図10及び図11を参照)。
【0042】
符号化用符号表において、相対的に小さいエントリ番号には相対的に短い符号語が割り当てられており、相対的に大きいエントリ番号には相対的に長い符号語が割り当てられている。符号化用符号表では、入力シンボルの出現頻度に応じて入力シンボルの順序が決定され、決定された順序の入力シンボルに対してエントリ番号及び符号語が割り当てられる。出現頻度が相対的に高い入力シンボルには相対的に短い符号語が割り当てられ、出現頻度が相対的に低い入力シンボルには相対的に長い符号語が割り当てられる。
【0043】
符号表更新部130は、入力された入力シンボルに基づいて出現頻度を更新し、当該出現頻度に基づいて入力シンボルを並び替える。つまり、符号表更新部130は、シンボルの出現パターンに応じて符号化用符号表を更新する。
【0044】
符号化論理部140は、符号化用フロー制御部190のシンボル数算出部120から出力された入力シンボルを、符号表更新部130の符号化用符号表に基づいて符号語に変換する。詳細は後述するが、符号化論理部140は、符号化用フロー制御部190から出力された入力シンボルをキーとして、符号表更新部130から入力シンボルに関連付けられた符号語を読み出す。符号化論理部140は、当該入力シンボルを符号表更新部130から読み出された符号語に変換する。
【0045】
パック部150は、符号化論理部140から出力された1つ以上の符号語をまとめて、特定のデータサイズ単位の符号化データとして出力端子103に出力する。
【0046】
復号部200(decode)は、シンボルバッファ210、シンボル数算出部220、符号表更新部230(code table)、復号論理部240(decode logic)、及びアンパック部250(unpack)を有する。復号部200の入力端子201はアンパック部250の入力端子に接続されている。アンパック部250の出力端子はシンボルバッファ210の入力端子に接続されている。シンボルバッファ210の出力端子は復号論理部240の入力端子に接続されている。復号論理部240の出力端子はシンボル数算出部220の入力端子に接続されている。シンボル数算出部220の出力端子は、シンボルバッファ210及び符号表更新部230の各々の入力端子、並びに復号部200の出力端子203に接続されている。シンボル数算出部220は、シンボルバッファ210をフィードバック制御する。符号表更新部230の出力端子は復号論理部240の入力端子に接続されている。なお、符号表更新部230を「第2符号表更新部」という場合がある。
【0047】
アンパック部250は、復号部200の入力端子201に入力された、特定のサイズのデータサイズ単位の符号語データから符号語単位のデータを切り出す。アンパック部250によって切り出された符号語は、入力シンボルが変換された符号語に対応する。つまり、アンパック部250によって切り出された1つの単位の符号語が変換された出力シンボルは入力シンボルに対応する。
【0048】
シンボルバッファ210は、アンパック部250によって切り出された符号語を一時的に格納する。シンボルバッファ210の容量は、1サイクルで処理される符号語の数に応じて設定される。本実施形態では、1サイクルで4つの符号語が処理されるので、シンボルバッファ210は少なくとも4つの符号語を格納できる容量を有している。ただし、1サイクルで処理される符号語の数は3より小さくてもよく、5より大きくてもよい。
【0049】
復号論理部240は、シンボルバッファ210から出力された符号語を、復号用符号表に基づいて出力シンボルに変換する。詳細は後述するが、復号論理部240は、シンボルバッファ210から出力された符号語をキーとして、符号表更新部230から符号語に関連付けられた出力シンボルを読み出す。復号論理部240は、当該符号語を符号表更新部230から読み出された出力シンボルに変換する。
【0050】
シンボル数算出部220は、復号論理部240によって符号語から変換された出力シンボルに基づいて、当該出力シンボルが伸張された後の出力データ列のデータ量(第2データ量)を計算し、計算されたデータ量に対応するシンボル数を算出する。当該第2データ量の計算方法は、上記の第1データ量の計算方法と同じである。このように算出されたシンボル数を「第2消費シンボル数」という。シンボル数算出部220は、第2消費シンボル数に基づいて、復号論理部240から出力された出力シンボルのうち、符号表更新部230及び出力端子203に出力する出力シンボルを選択する。また、シンボル数算出部220は、第2消費シンボル数に基づいてシンボルバッファ210を制御する。具体的には、シンボル数算出部220は、第2消費シンボル数に基づいて、次のサイクルで処理される出力シンボルの位置(シンボルバッファ210のアドレス)を特定する。
【0051】
シンボルバッファ210及びシンボル数算出部220を復号用フロー制御部290という場合がある。上記の構成を換言すると、復号用フロー制御部290は、出力シンボルに基づいて計算された、出力シンボルのデータ量を示す第2データ量を用いて、符号表更新部230への入力を制御する。なお、シンボルバッファ210及びシンボル数算出部220の詳細な構成は後述する。
【0052】
符号表更新部230は復号用符号表を有する。詳細は後述するが、復号用符号表は符号語、エントリ番号、出力シンボル、及び出力シンボルの出現頻度を関連付けて格納する表である(後述する図10及び図11を参照)。
【0053】
復号用符号表において、相対的に小さいエントリ番号には相対的に短い符号語が割り当てられており、相対的に大きいエントリ番号には相対的に長い符号語が割り当てられている。復号用符号表では、出力シンボルの出現頻度に応じて出現シンボルの順序が決定され、決定された順序の出力シンボルに対してエントリ番号及び符号語が割り当てられる。出現頻度が相対的に高い出力シンボルには相対的に短い符号語が割り当てられ、出現頻度が相対的に低い出力シンボルには相対的に長い符号語が割り当てられる。
【0054】
符号表更新部230は、入力された符号語に対応する出力シンボルに基づいて出現頻度を更新し、当該出現頻度に基づいて出力シンボルを並び替える。つまり、符号表更新部230は、符号語又は符号語に対応するシンボルの出現パターンに応じて復号用符号表を更新する。
【0055】
詳細は後述するが、符号表更新部230によって行われる復号用符号表の更新内容は、符号表更新部130によって行われる符号化用符号表の更新内容と同じである。したがって、復号用符号表において符号化用符号表の状態を正しく再現することができる。
【0056】
[符号化用フロー制御部190の構成]
図3は、一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号化用フロー制御部の構成を示すブロック図である。図3に示すように、符号化用フロー制御部190は、シンボルバッファ110及びシンボル数算出部120を有する。シンボルバッファ110は、データ保持部111、デマルチプレクサ112(DeMUX)、マルチプレクサ113(MUX)、ライトポインタ114、及びリードポインタ115を有する。シンボル数算出部120は、辞書式仮復号部121(dict. decode)、消費シンボル数算出部122(consumption symbol cal.)、及び出力シンボル選択部123(output symbol select.)を有する。以下の説明において、辞書式仮復号部121を「第1仮復号部」といい、消費シンボル数算出部122を「第1シンボル数算出部」という場合がある。
【0057】
シンボルバッファ110の構成について説明する。デマルチプレクサ112はシンボルバッファ110の入力端子に接続されている。デマルチプレクサ112の出力端子はデータ保持部111の入力端子に接続されている。データ保持部111の出力端子はマルチプレクサ113の入力端子に接続されている。マルチプレクサ113の出力端子はシンボルバッファ110の出力端子に接続されている。ライトポインタ114はデマルチプレクサ112に接続されている。リードポインタ115はマルチプレクサ113に接続されている。また、リードポインタ115は消費シンボル数算出部122に接続されている。図3に示すように、本実施形態では1サイクルで4つの入力シンボルが符号語に変換されるため、シンボルが伝送される信号線は4本ずつ設けられている。
【0058】
シンボル数算出部120の構成について説明する。辞書式仮復号部121は、4つの信号線の各々に応じて設けられている。つまり、シンボル数算出部120は、個別の4つの辞書式仮復号部121を備えている。4つの辞書式仮復号部121を特に区別する必要がない場合、単に辞書式仮復号部121という。一方、4つの辞書式仮復号部121を区別して表現する場合は、それぞれ辞書式仮復号部121-1、121-2、121-3、121-4と表現する。
【0059】
4つの辞書式仮復号部121はシンボルバッファ110のマルチプレクサ113に接続されている。各辞書式仮復号部121の出力端子は消費シンボル数算出部122の入力端子に接続されている。消費シンボル数算出部122の出力端子は出力シンボル選択部123の入力端子及びリードポインタ115に接続されている。シンボルバッファ110から出力された4つの入力シンボルは、それぞれ対応する辞書式仮復号部121に入力される。辞書式仮復号部121に入力される入力シンボルと同じ入力シンボルが出力シンボル選択部123に入力される。
【0060】
シンボルバッファ110に入力された入力シンボルは、デマルチプレクサ112を介してデータ保持部111に送信され、データ保持部111において一時的に格納される。データ保持部111において入力シンボルが格納される位置(シンボルバッファ110のアドレス)はライトポインタ114によって管理される。データ保持部111に格納された入力シンボルは、マルチプレクサ113を介してシンボル数算出部120に出力される。マルチプレクサ113がデータ保持部111に格納された入力シンボルを読み出す位置はリードポインタ115によって管理される。
【0061】
シンボル数算出部120に入力された入力シンボルが伝達される信号線は、2つに分岐される。一方の入力シンボルは辞書式仮復号部121に入力され、他方の入力シンボルは出力シンボル選択部123に入力される。辞書式仮復号部121は、辞書式仮復号部121に入力された入力シンボルについて、辞書式圧縮部300によって圧縮される前の入力データ列のデータ量(つまり、入力シンボルが伸張された場合の第1データ量)を再現する。
【0062】
消費シンボル数算出部122は、辞書式仮復号部121によって再現された第1データ量に基づいて、出力シンボル選択部123が出力するシンボル数及びリードポインタ115が読み出す位置を計算する。具体的には、消費シンボル数算出部122は、辞書式仮復号部121から出力される「各シンボルが伸張された場合のデータ量(現サイクルで出力されるデータ量)」と、「サイクル0から現在のサイクルの1つ前のサイクルまでにシンボル数算出部120から出力された、シンボルの圧縮前のデータ量(過去に出力したデータ量)」と、を用いて、これらのデータ量の合計から各サイクル(サイクル0から現サイクルまで)における出力データ量の平均値を計算する。さらに、消費シンボル数算出部122は、計算した平均値が一定以上(本実施形態では4以上)になるために必要な最小の第1消費シンボル数」を計算する。上記の計算は、各サイクルの入力シンボル毎に順次行われる。以下の説明において、サイクル0の先頭は圧縮対象の入力データ列の先頭のデータである。
【0063】
消費シンボル数算出部122は、計算した第1消費シンボル数を出力シンボル選択部123に出力する。さらに、消費シンボル数算出部122は、当該第1消費シンボル数をリードポインタ115に出力する。詳細は後述するが、消費シンボル数算出部122は、辞書式仮復号部121によって再現された、入力シンボルが伸張された場合のデータ量に基づいて、次のサイクルで処理される入力シンボルの位置を特定する。
【0064】
出力シンボル選択部123は、第1消費シンボル数に基づいてシンボル数算出部120が出力する入力シンボルを選択する。例えば、ある入力シンボル列について計算された第1消費シンボル数が3の場合、出力シンボル選択部123は、マルチプレクサ113から出力シンボル選択部123へ送信された入力シンボルのうち、先頭の3つの入力シンボルを選択して出力する。
【0065】
上記の第1消費シンボル数はリードポインタ115に送信される。リードポインタ115は第1消費シンボル数に基づいてインクリメントされる。つまり、リードポインタ115は、次のサイクルで出力される入力シンボルのマルチプレクサ113上の位置を第1消費シンボル数に基づいて制御する。
【0066】
上記の動作を具体的な例を用いて説明する。図3に示す例では、1サイクルで4つの入力シンボルが符号化用フロー制御部190に入力される。図3において、入力シンボル「A」、「B」、「C」、「D」は辞書式圧縮部300によって圧縮されていないリテラルシンボルである。入力シンボル「M」は辞書式圧縮部300によって圧縮されたマッチシンボルである。入力シンボル「M」の圧縮前の入力データ列のデータ量は8バイトである。以下の説明において、符号化部100に入力シンボル列「ABCDMAAAA」が入力された場合について説明する。
【0067】
図3に示すように、サイクル0(cycle 0)で入力シンボル列「ABCD」がシンボル数算出部120に入力される。上記のように、入力シンボル「A」、「B」、「C」、「D」はリテラルシンボルなので、辞書式仮復号部121-1、121-2、121-3、121-4は、それぞれ入力シンボル「A」、「B」、「C」、「D」が伸張された場合のデータ量として、それぞれ「1」を消費シンボル数算出部122に出力する。
【0068】
消費シンボル数算出部122は、上記の現サイクルで出力されるデータ量「4」(入力シンボル「A」~「D」のデータ量の合計)と、過去に出力したデータ量「0」(サイクル0が最初のサイクルなのでデータ量は0)と、を用いて第1消費シンボル数を計算する。サイクル0では各シンボルのデータ量が「1」なので、サイクル0における出力データ量が4以上になるために必要な最小の第1消費シンボル数は「4」である。したがって、消費シンボル数算出部122は出力シンボル選択部123に「4」を出力する。その結果、出力シンボル選択部123からは入力シンボル列「ABCD」が出力される。
【0069】
消費シンボル数算出部122から出力された第1消費シンボル数「4」はリードポインタ115にも送信される。リードポインタ115は、受信した第1消費シンボル数「4」に基づいて、現在のリードポインタの値に第1消費シンボル数「4」を加算する(「4」インクリメントする)。その結果、次のサイクルでシンボル数算出部120に出力されるマルチプレクサ113の位置は入力シンボル列「ABCD」の次の入力シンボル列「MAAA」に設定される。
【0070】
上記のサイクル0に続き、サイクル1で入力シンボル列「MAAA」がシンボル数算出部120に入力される。上記のように、入力シンボル「M」はマッチシンボル、「A」はリテラルシンボルなので、辞書式仮復号部121-1~4は、それぞれ入力シンボル「M」、「A」、「A」、「A」が伸張した場合のデータ量として「8」、「1」、「1」、「1」を消費シンボル数算出部122に出力する。
【0071】
消費シンボル数算出部122は、サイクル1の各シンボルが伸張された場合のデータ量「8」、「1」、「1」、「1」と、過去(サイクル0)に出力したデータ量「4」と、を用いて第1消費シンボル数を計算する。サイクル1では先頭の入力シンボル「M」のデータ量が「8」なので、現サイクルで出力されるデータ量と過去に出力したデータ量との合計は「12」であり、各サイクルにおける出力データ量の平均値は「6」である。したがって、サイクル0~1において、出力データ量の平均値が4以上になるために必要な最小の第1消費シンボル数は「1」(サイクル1の先頭の入力シンボル「M」を消費シンボル数としてカウントした値)である。したがって、消費シンボル数算出部122は出力シンボル選択部123に「1」を出力する。
【0072】
出力シンボル選択部123は、消費シンボル数算出部122から第1消費シンボル数「1」を受信すると、入力データ列の先頭の1シンボルを出力する。図3の例では、第1消費シンボル数「1」に基づいて、入力シンボル「M」のみを出力し、残りの出力へ空のシンボルを出力する。サイクル1において入力シンボル「M」の下に縦に3つ並んだ点線の四角は空のシンボルを示す。
【0073】
その結果、サイクル1において、出力シンボル選択部123からは入力シンボル「M」と空シンボル列「□□□」(□:空の入力シンボル)とが出力される。
【0074】
サイクル1において、消費シンボル数算出部122から出力された第1消費シンボル数「1」はリードポインタ115にも送信される。第1消費シンボル数「1」を受信したリードポインタ115は、受信した第1消費シンボル数「1」に基づいて「1」インクリメントし、マルチプレクサ113が出力する位置を1つ進める。その結果、次のサイクルでシンボル数算出部120に出力されるマルチプレクサ113の位置は入力シンボル「M」の次の入力シンボル列「AAAA」に設定される。
【0075】
サイクル1に続き、サイクル2で入力シンボル列「AAAA」がシンボル数算出部120に入力される。上記のように、入力シンボル「A」はリテラルシンボルなので、辞書式仮復号部121-1~4は、それぞれの入力シンボル「A」が伸張した場合のデータ量として、それぞれ「1」を消費シンボル数算出部122に出力する。
【0076】
消費シンボル数算出部122は、サイクル2の各シンボルが伸張された場合のデータ量「1」、「1」、「1」、「1」と、過去(サイクル0~1)に出力したデータ量「12」(サイクル0で出力された4バイト、及びサイクル1で出力された8バイト)と、を用いて第1消費シンボル数を計算する。サイクル2ではデータ量が既に「12」なので、各サイクルにおける出力データ量の平均値は「4」である。したがって、サイクル0~2において、出力データ量の平均値が4以上になるために必要な最小の第1消費シンボル数は「0」である。したがって、消費シンボル数算出部122は出力シンボル選択部123に「0」を出力する。
【0077】
その結果、サイクル2において、出力シンボル選択部123からは空シンボル「□□□□」が出力される。
【0078】
サイクル2において、消費シンボル数算出部122から出力された第1消費シンボル数「0」はリードポインタ115にも送信される。リードポインタ115はインクリメントせず、マルチプレクサ113が出力する位置はサイクル1から変わらない。その結果、次のサイクルでシンボル数算出部120に出力されるマルチプレクサ113の位置は入力シンボル列「AAAA」のままである。
【0079】
したがって、サイクル1~2において、シンボル数算出部120から入力シンボル列「M□□□□□□□」が出力されている間は、入力シンボル「M」の後続の入力シンボル列「AAAA」はシンボルバッファ110からシンボル数算出部120に出力されない。サイクル3で、当該入力シンボル列「AAAA」がシンボルバッファ110からシンボル数算出部120に出力される。
【0080】
[復号用フロー制御部290の構成]
図4は、一実施形態に係る圧縮・伸張回路の復号部に含まれる符号化用フロー制御部の構成を示すブロック図である。図4に示すように、復号用フロー制御部290は、シンボルバッファ210及びシンボル数算出部220を有する。シンボルバッファ210は、データ保持部211、デマルチプレクサ212(DeMUX)、マルチプレクサ213(MUX)、ライトポインタ214、及びリードポインタ215を有する。シンボル数算出部220は、辞書式仮復号部221(dict. decode)、消費シンボル数算出部222(consumption symbol cal.)、及び出力シンボル選択部223(output symbol select.)を有する。以下の説明において、辞書式仮復号部221を「第2仮復号部」といい、消費シンボル数算出部222を「第2シンボル数算出部」という場合がある。
【0081】
シンボルバッファ210の構成について説明する。デマルチプレクサ212はシンボルバッファ210の入力端子に接続されている。デマルチプレクサ212の出力端子はデータ保持部211の入力端子に接続されている。データ保持部211の出力端子はマルチプレクサ213の入力端子に接続されている。マルチプレクサ213の出力端子はシンボルバッファ210の出力端子に接続されている。ライトポインタ214はデマルチプレクサ212に接続されている。リードポインタ215はマルチプレクサ213に接続されている。また、リードポインタ215は消費シンボル数算出部222に接続されている。図4に示すように、本実施形態では1サイクルで4つの符号語が符号化部100から復号部200に送信され、復号部200において4つの符号語及び出力シンボルが処理されるため、符号語又はシンボルが伝送される信号線は4本ずつ設けられている。
【0082】
シンボルバッファ210には符号語が入力される。後述する消費シンボル数算出部222から出力された第2消費シンボル数によってシンボルバッファ210が制御され、当該符号語は復号論理部240に出力される。当該符号語は、復号論理部240によって出力シンボルに変換される。変換された出力シンボルはシンボル数算出部220に入力される。
【0083】
シンボル数算出部220の構成について説明する。辞書式仮復号部221は、4つの信号線の各々に応じて設けられている。つまり、シンボル数算出部220は、個別の4つの辞書式仮復号部221を備えている。4つの辞書式仮復号部221を特に区別する必要がない場合、単に辞書式仮復号部221という。一方、4つの辞書式仮復号部221を区別して表現する場合は、それぞれ辞書式仮復号部221-1、221-2、221-3、221-4と表現する。
【0084】
辞書式仮復号部221-1、221-2、221-3、221-4は、復号論理部240-1、240-2、240-3、240-4にそれぞれ接続されている。各辞書式仮復号部221の出力端子は消費シンボル数算出部222の入力端子に接続されている。消費シンボル数算出部222の出力端子は出力シンボル選択部223の入力端子及びリードポインタ215に接続されている。復号論理部240から出力された4つの出力シンボルは、それぞれ対応する辞書式仮復号部221に入力される。上記のように辞書式仮復号部221に入力される出力シンボルと同じシンボルが出力シンボル選択部223に入力される。4つの復号論理部240を特に区別する必要がない場合、単に復号論理部240という。一方、4つの復号論理部240を区別して表現する場合は、それぞれ復号論理部240-1、240-2、240-3、240-4と表現する。
【0085】
シンボルバッファ210に入力された符号語は、デマルチプレクサ212を介してデータ保持部211に送信され、データ保持部211において一時的に格納される。データ保持部211において符号語が格納される位置(シンボルバッファ210のアドレス)はライトポインタ214によって管理される。データ保持部211に格納された符号語は、マルチプレクサ213を介して復号論理部240に出力される。マルチプレクサ213がデータ保持部211に格納された符号語を読み出す位置はリードポインタ215によって管理される。
【0086】
シンボル数算出部220に入力された出力シンボルが伝達される信号線は、2つに分岐される。一方の出力シンボルは辞書式仮復号部221に入力され、他方の出力シンボルは出力シンボル選択部223に入力される。辞書式仮復号部221(第2仮復号部)は、図3の辞書式仮復号部121(第1仮復号部)と同じ方法で、辞書式伸張部400によって伸張された後の出力データ列のデータ量(つまり、出力シンボルが伸張された場合の第2データ量)を再現する。
【0087】
消費シンボル数算出部222は、辞書式仮復号部221によって再現された第2データ量に基づいて、出力シンボル選択部223が出力するシンボル数及びをリードポインタ215が読み出す位置を計算する。具体的には、消費シンボル数算出部222は、消費シンボル数算出部122と同様に、辞書式仮復号部221から出力される「現サイクルで出力されるデータ量」と「過去に出力したデータ量」とを用いて、これらのデータ量の合計から各サイクル(サイクル0から現サイクルまで)における出力データ量の平均値を計算する。さらに、消費シンボル数算出部222は、計算した平均値が一定以上(本実施形態では4以上)になるために必要な最小の第2消費シンボル数」を計算する。上記の計算は、各サイクルの出力シンボル毎に順次行われる。以下の説明において、サイクル0の先頭は伸張対象の出力シンボル(又は、当該出力シンボルに対応する符号語)の先頭のデータである。
【0088】
消費シンボル数算出部222は、計算した第2消費シンボル数を出力シンボル選択部223に出力する。さらに、消費シンボル数算出部222は、当該第2消費シンボル数をリードポインタ215に出力する。詳細は後述するが、消費シンボル数算出部222は、辞書式仮復号部221によって再現された、出力シンボルが伸張された場合のデータ量に基づいて、次のサイクルで処理される出力シンボルの位置を特定する。
【0089】
出力シンボル選択部223は、上記の第2消費シンボル数に基づいて復号論理部240から出力される出力シンボルを選択する。例えば、ある出力シンボルについて計算された第2消費シンボル数が3の場合、出力シンボル選択部223は、復号論理部240から出力シンボル選択部223へ送信される出力シンボルのうち、先頭の3つの出力シンボルを選択して出力する。
【0090】
上記の第2消費シンボル数はリードポインタ215に送信される。リードポインタ215は第2消費シンボル数に基づいてインクリメントされる。つまり、リードポインタ215は、次のサイクルで出力される出力シンボルのマルチプレクサ213上の位置を第2消費シンボル数に基づいて制御する。
【0091】
上記の動作を具体的な例を用いて説明する。図4に示すように、サイクル0’で入力シンボル列「ABCD」が変換された符号語がシンボルバッファ210に入力される。符号表更新部230の復号用符号表は、符号表更新部130の符号化用符号表を再現している。したがって、復号論理部240において上記の符号語が出力シンボルに変換されるときに参照された復号用符号表は、符号化論理部140において入力シンボル「ABCD」が符号語に変換されたときに参照された符号化用符号表と同じである。その結果、復号論理部240は、サイクル0’で上記の符号語を出力シンボル列「ABCD」に変換する。
【0092】
出力シンボル「A」、「B」、「C」、「D」はリテラルシンボルなので、辞書式仮復号部221-1、221-2、221-3、221-4は、それぞれ出力シンボル「A」、「B」、「C」、「D」が伸張された場合のデータ量として、それぞれ「1」を消費シンボル数算出部222に出力する。
【0093】
消費シンボル数算出部222は、上記の現サイクルで出力されるデータ量「4」(出力シンボル「A」~「D」のデータ量の合計)と、過去に出力したデータ量「0」(サイクル0’が最初のサイクルなのでデータ量は0)と、を用いて第2消費シンボル数を計算する。サイクル0’では各シンボルのデータ量が「1」なので、サイクル0’において、出力データ量が4以上になるために必要な最小の第2消費シンボル数は「4」である。したがって、消費シンボル数算出部222は出力シンボル選択部223に「4」を出力する。その結果、出力シンボル選択部223からは出力シンボル列「ABCD」が出力される。
【0094】
消費シンボル数算出部222から出力された第2消費シンボル数「4」はリードポインタ215にも送信される。リードポインタ215は、受信した第2消費シンボル数「4」に基づいて、現在のリードポインタの値に第2消費シンボル数「4」を加算する(「4」インクリメントする)。その結果、次のサイクルでシンボル数算出部220に出力されるマルチプレクサ213の位置は出力シンボル列「ABCD」の次の出力シンボル列「MAAA」に設定される。
【0095】
なお、図2に示すように、シンボル数算出部220から出力された出力シンボル「ABCD」は符号表更新部230に入力される。符号表更新部230は、入力された出力シンボルに基づいて出現頻度を更新し、当該出現頻度に基づいて出力シンボルを並び替える。
【0096】
上記のサイクル0’に続き、サイクル1’で入力シンボル列「MAAA」が変換された符号語がシンボルバッファ210から出力されると、復号論理部240-1~4において当該符号語は出力シンボル「M」、「A」、「A」、「A」に変換される。出力シンボル「M」はマッチシンボル、「A」はリテラルシンボルなので、辞書式仮復号部221-1は、それぞれ出力シンボル「M」、「A」、「A」、「A」が伸張した場合のデータ量として「8」、「1」、「1」、「1」を消費シンボル数算出部222に出力する。
【0097】
消費シンボル数算出部222は、サイクル1’の各シンボルが伸張された場合のデータ量「8」、「1」、「1」、「1」と、過去(サイクル0’)に出力したデータ量「4」と、を用いて第2消費シンボル数を計算する。サイクル1’では先頭の出力シンボル「M」のデータ量が「8」なので、現サイクルで出力されるデータ量と過去に出力したデータ量との合計は「12」であり、各サイクルにおける出力データ量の平均値は「6」である。したがって、サイクル0’~1’において、出力データ量の平均値が4以上になるために必要な最小の第2消費シンボル数は「1」(サイクル1’の先頭の出力シンボル「M」を消費シンボル数としてカウントした値)である。したがって、消費シンボル数算出部222は出力シンボル選択部223に「1」を出力する。
【0098】
出力シンボル選択部223は、消費シンボル数算出部222から第2消費シンボル数「1」を受信すると、出力シンボル列の先頭の1シンボルを出力する。図4の例では、第2消費シンボル数「1」に基づいて、出力シンボル「M」のみを出力し、残りの出力へ空のシンボルを出力する。サイクル1において出力シンボル「M」の下に縦に3つ並んだ点線の四角、及びサイクル2において縦に4つ並んだ点線の四角は、それぞれ空のシンボルを示す。
【0099】
その結果、サイクル1’において、出力シンボル選択部223からは出力シンボル「M」と空シンボル列「□□□」(□:空の入力シンボル)とが出力される。
【0100】
サイクル1’において、消費シンボル数算出部222から出力された第2消費シンボル数「1」はリードポインタ215にも送信される。第2消費シンボル数「1」を受信したリードポインタ215は、受信した第1消費シンボル数「1」に基づいて「1」インクリメントし、マルチプレクサ213が出力する位置を1つ進める。その結果、次のサイクルでシンボル数算出部220に出力されるマルチプレクサ213の位置は入力シンボル「M」の次の出力シンボル列「AAAA」に設定される。
【0101】
サイクル1’に続き、サイクル2’で出力シンボル列「AAAA」がシンボル数算出部220に入力される。上記のように、出力シンボル「A」はリテラルシンボルなので、辞書式仮復号部221-1~4は、それぞれの出力シンボル「A」が伸張した場合のデータ量として、それぞれ「1」を消費シンボル数算出部222に出力する。
【0102】
消費シンボル数算出部222は、サイクル2’の各シンボルが伸張された場合のデータ量「1」、「1」、「1」、「1」と、過去(サイクル0’~1’)に出力したデータ量「12」(サイクル0’で出力された4バイト、及びサイクル1’で出力された8バイト)と、を用いて第2消費シンボル数を計算する。サイクル2’ではデータ量が既に「12」なので、各サイクルにおける出力データ量の平均値は「4」である。したがって、サイクル0’~2’において、出力データ量の平均値が4以上になるために必要な最小の第2消費シンボル数は「0」である。したがって、消費シンボル数算出部222は出力シンボル選択部223に「0」を出力する。
【0103】
その結果、サイクル2’において、出力シンボル選択部223からは空シンボル「□□□□」が出力される。
【0104】
サイクル2’において、消費シンボル数算出部222から出力された第2消費シンボル数「0」はリードポインタ215にも送信される。リードポインタ215はインクリメントせず、マルチプレクサ213が出力する位置はサイクル1’から変わらない。その結果、次のサイクルでシンボル数算出部220に出力されるマルチプレクサ213の位置は出力シンボル列「AAAA」のままである。
【0105】
したがって、サイクル1’~2’において、シンボル数算出部220から出力シンボル列「M□□□□□□□」が出力されている間は、出力シンボル「M」の後続の出力シンボル列「AAAA」はシンボルバッファ210からシンボル数算出部220に出力されない。サイクル3’で、当該出力シンボル列「AAAA」がシンボルバッファ210からシンボル数算出部220に出力される。
【0106】
上記の構成によって、サイクル0~3の各々のサイクルにおいて符号化用フロー制御部190から出力される入力シンボルと、サイクル0’~3’の各々のサイクルにおいて復号用フロー制御部290から出力される出力シンボルとを一致させることができる。図3において符号化用フロー制御部190から出力された入力シンボルは符号表更新部130に入力される。図2及び図4において復号用フロー制御部290から出力された出力シンボルは符号表更新部230に入力される。したがって、符号表更新部130における符号化用符号表の更新内容と、符号表更新部230の復号用符号表の更新内容とを一致させることができる。
【0107】
本実施形態のように、1サイクルで複数のシンボルが処理され、当該シンボルが圧縮されている場合、各サイクルにおける入力シンボルと出力シンボルとが一致しなくなってしまうケースがある。例えば、以下に符号化用フロー制御部190及び復号用フロー制御部290が存在しない場合の問題点を説明する。この場合、まず、符号化部において、サイクル0で入力シンボル「ABCD」が出力され、サイクル1で入力シンボル「M」が出力され、サイクル2で入力シンボル「AAAA」が出力される。しかし、入力データ「M」がマッチシンボルであるという情報が復号部に伝達されない。
【0108】
したがって、復号部において、サイクル0で出力シンボル「ABCD」が出力され、サイクル1で入力シンボル「MAAA」が出力され、サイクル2で入力シンボル「A」が出力されてしまう。このような現象が発生すると、符号化部の符号化用符号表の更新内容と、復号部の復号用符号表の更新内容とが一致しなくなる。その結果、復号用符号表において符号化用符号表の状態を正しく再現することができなくなってしまう。
【0109】
しかし、本実施形態に係る符号化部100及び復号部200によると、上記のようなケースであっても復号用符号表において符号化用符号表の状態を正しく再現することができる。つまり、圧縮・伸張回路16において、復号化されたデータを正しく復号することを確保しつつ、1サイクルで複数のシンボルを処理することができる。その結果、圧縮・伸張回路16における符号化及び復号のスループットを向上させることができる。
【0110】
<第2実施形態>
以下、第2実施形態に係るメモリシステムの圧縮・伸張回路16Aについて説明する。圧縮・伸張回路16Aは、第1実施形態に係る圧縮・伸張回路16と類似しているが、圧縮・伸張回路16Aの符号化用フロー制御部190A及び復号用フロー制御部290Aの構成が圧縮・伸張回路16の符号化用フロー制御部190及び復号用フロー制御部290の構成と相違する。以下の符号化用フロー制御部190A及び復号用フロー制御部290Aの説明において、圧縮・伸張回路16の符号化用フロー制御部190及び復号用フロー制御部290と同様の構成については説明を省略し、主にこれらとの相違点について説明する。
【0111】
[圧縮・伸張回路16Aの構成]
図5は、一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。図5に示す圧縮・伸張回路16Aの構成は、図2に示す圧縮・伸張回路16の構成と類似している。ただし、図5に示す復号部200Aの構成が図2の復号部200の構成と相違する。
【0112】
図5に示すように、復号部200Aでは、図2の復号部200のシンボル数算出部220の代わりに、符号語数算出部260Aが設けられている。符号語数算出部260Aはアンパック部250Aと復号論理部240Aとの間に設けられている。図2に示すシンボル数算出部220は復号論理部240よりも後段に設けられているため、シンボル数算出部220には復号論理部240で変換された出力シンボルが入力されていた。一方、図5に示す符号語数算出部260Aは復号論理部240Aの前段に設けられているため、符号語数算出部260Aには復号論理部240Aで変換される前の符号語が入力される。
【0113】
図2に示すシンボル数算出部220は、出力シンボルに基づいて出力シンボルが伸張された場合の第2データ量を再現し、当該第2データ量を用いて第2消費シンボル数を計算していた。しかし、図5に示す符号語数算出部260Aは、符号語数算出部260Aに入力された符号語に基づいて、上記の第2消費シンボル数に対応する符号語数を見積もる。このようにして見積もられた符号語数を「消費符号語数」という。なお、シンボルバッファ210A及び符号語数算出部260Aを復号用フロー制御部290Aという場合がある。
【0114】
[符号化用フロー制御部190Aの構成]
図6は、一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号化用フロー制御部の構成を示すブロック図である。図6に示す符号化用フロー制御部190Aの構成は、図3に示す符号化用フロー制御部190の構成と類似している。ただし、図6に示す符号化用フロー制御部190Aに含まれるシンボル数算出部120Aの構成が図3に示す符号化用フロー制御部190に含まれるシンボル数算出部120の構成と相違する。図6に示すシンボルバッファ110Aの構成は図3に示すシンボルバッファ110の構成と同じなので、説明を省略する。
【0115】
図6に示すように、シンボル数算出部120Aは、近似計算部124A(approx. cal.)、消費シンボル数算出部122A、及び出力シンボル選択部123Aを有する。図6図3とを対比すると、図6のシンボル数算出部120Aは、図3の辞書式仮復号部121が近似計算部124Aに置き換えられた構成を有している。その他の構成については、図3の構成と同じである。以下の説明において、近似計算部124Aを「第1近似計算部」といい、消費シンボル数算出部122Aを「シンボル数算出部」という場合がある。以下の説明において、4つの近似計算部124Aを特に区別する必要がない場合、単に近似計算部124Aという。一方、4つの近似計算部124Aを区別して表現する場合は、それぞれ近似計算部124A-1、124A-2、124A-3、124A-4と表現する。
【0116】
近似計算部124Aは、入力シンボルのタイプ(第1タイプ)に基づいて、近似計算部124Aに入力された入力シンボルについて、辞書式圧縮部300Aによって圧縮される前の入力データ列のデータ量(第1データ量)を見積もる。本実施形態における第1データ量は、上記入力データ列のデータ量を正確に再現したデータ量ではないが、当該入力データ列のデータ量を反映するデータ量である。
【0117】
当該入力シンボルの形式によって入力シンボルがリテラルシンボルなのかマッチシンボルなのかを判別することができる。例えば、入力シンボルは、当該入力シンボルが過去に入力された入力シンボルの「参照位置」及び「マッチ長」の情報を有しているか否かを区別するフラグを有している。当該フラグに基づいて、当該入力シンボルがリテラルシンボルなのかマッチシンボルなのかを判別することができる。つまり、入力シンボルのタイプ(第1タイプ)に基づいて、入力シンボルが圧縮されているか否かを判定することができる。換言すると、第1タイプは、符号化部100Aに入力された入力シンボルが圧縮されているか否かを示す情報を含む。
【0118】
なお、参照位置は、過去に入力されたシンボルがバッファ(ヒストリーバッファ)に格納された位置(アドレス)を示す。マッチ長は、辞書式圧縮部300Aに入力されたシンボル(第1シンボル)がヒストリーバッファに格納されたシンボル(第2シンボル)と一致するデータ量を示す値である。辞書式圧縮部300Aが圧縮処理を実行するか否かを判断するための指標を最小マッチ長という。辞書式圧縮部300Aは、辞書式圧縮部300Aに入力されたシンボル列(第1シンボル列)と、過去に入力されてヒストリーバッファに格納されたシンボル列(第2シンボル列)とを比較し、第1シンボル列と一致する第2シンボル列の有無を評価する。そして、第1シンボル列と第2シンボル列とが最小マッチ長以上一致する場合に、辞書式圧縮部300Aは第1シンボルを圧縮する。
【0119】
なお、入力シンボルのタイプを判別する方法として、入力シンボルの先頭から数ビットの値によってシンボルのタイプを判別することができる。例えば、リテラルシンボルの場合は先頭から8ビットの値が0~255に設定され、マッチシンボルの場合は当該先頭から8ビットの値が256以上に設定されてもよい。この場合、9ビット目以降に「参照位置」及び「マッチ長」の情報が格納される。
【0120】
近似計算部124Aは、入力シンボルのタイプに基づいて、入力シンボルが圧縮されていないリテラルシンボルである場合、入力シンボルのデータ量を1バイトと見積もり、入力シンボルが圧縮されたマッチシンボルである場合、入力シンボルのデータ量を4バイトと見積もる。
【0121】
上記のように、近似計算部124A(第1近似計算部)は、入力シンボルが圧縮されていると判定した場合の当該入力シンボルのデータ量(マッチシンボルの第1データ量)を、入力シンボルが圧縮されていないと判定した場合の当該入力シンボルのデータ量(リテラルシンボルの第1データ量)よりも大きい第1の値(例えば、上記の4バイト)に設定する。そして、消費シンボル数算出部122Aは、当該第1の値に基づいてリードポインタ115Aを制御することで、次のサイクルで処理される入力シンボルの位置を特定することができる。なお、本実施形態では、マッチシンボルの第1データ量がリテラルシンボルの第1データ量より大きい構成を例示したが、この構成に限定されない。近似計算部124A(第1近似計算部)によって得られる第1の値は、後述する近似計算部261A(第2近似計算部)によって得られる第2の値と同じであればよい。つまり、マッチシンボルの第1データ量がリテラルシンボルの第1データ量より小さくてもよく、マッチシンボルの第1データ量とリテラルシンボルの第1データ量とが同じ値であってもよい。なお、上記のマッチシンボルの第1データ量を最小マッチ長と同じ値にすることができる。つまり、本実施形態の場合、最小マッチ長もマッチシンボルの第1データ量と同じ4バイトである。
【0122】
図6に示すように、サイクル0で入力シンボル列「ABCD」が入力される。上記のように、入力シンボル「A」、「B」、「C」、「D」はリテラルシンボルなので、近似計算部124A-1、124A-2、124A-3、及び124A-4は、それぞれの入力シンボル「A」、「B」、「C」、「D」を1バイトと見積もる。これらの近似計算部124Aは、「A」~「D」が伸張された場合のデータ量として、それぞれ「1」を消費シンボル数算出部122Aに出力する。
【0123】
消費シンボル数算出部122Aは、第1実施形態の消費シンボル数算出部122と同様に、第1消費シンボル数として「4」を算出し、出力シンボル選択部123A及びリードポインタ115Aに第1消費シンボル数「4」を出力する。その結果、出力シンボル選択部123Aからは入力シンボル列「ABCD」が出力され、リードポインタ115Aは「4」インクリメントし、マルチプレクサ113Aの位置が入力シンボル列「ABCD」の次の入力シンボル列「MAAA」に設定される。
【0124】
上記のサイクル0に続き、サイクル1で入力シンボル列「MAAA」がシンボル数算出部120Aに入力される。上記のように、入力シンボル「M」はマッチシンボル、「A」はリテラルシンボルなので、近似計算部124A-1~4は、それぞれ入力シンボル「M」、「A」、「A」、「A」が伸張した場合のデータ量として「4」、「1」、「1」、「1」を消費シンボル数算出部122Aに出力する。
【0125】
消費シンボル数算出部122Aは、サイクル1の各シンボルが伸張された場合のデータ量「4」、「1」、「1」、「1」と、過去(サイクル0)に出力したデータ量「4」と、を用いて第1消費シンボル数を計算する。サイクル1では先頭の入力シンボル「M」のデータ量が「4」なので、現サイクルで出力されるデータ量と過去に出力したデータ量との合計は「8」であり、各サイクルにおける出力データ量の平均値は「4」である。したがって、サイクル0~1において、出力データ量の平均値が4以上になるために必要な最小の第1消費シンボル数は「1」(サイクル1の先頭の入力シンボル「M」を消費シンボル数としてカウントした値)である。したがって、消費シンボル数算出部122Aは出力シンボル選択部123Aに「1」を出力する。
【0126】
出力シンボル選択部123Aは、消費シンボル数算出部122Aから第1消費シンボル数「1」を受信すると、入力データ列の先頭の1シンボルを出力する。図6の例では、第1消費シンボル数「1」に基づいて、入力シンボル「M」のみを出力し、残りの出力へ空のシンボルを出力する。その結果、出力シンボル選択部123Aからは、入力シンボル列「M□□□」(□:空の入力シンボル)が出力される。
【0127】
サイクル1において、消費シンボル数算出部122Aから出力された第1消費シンボル数「1」はリードポインタ115Aにも送信される。第1消費シンボル数「1」を受信したリードポインタ115Aは、受信した第1消費シンボル数「1」に基づいて「1」インクリメントし、マルチプレクサ113Aが出力する位置を1つ進める。その結果、次のサイクルでシンボル数算出部120Aに出力されるマルチプレクサ113Aの位置は入力シンボル「M」の次の入力シンボル列「AAAA」に設定される。
【0128】
サイクル1に続き、サイクル2で入力シンボル列「AAAA」がシンボル数算出部120Aに入力される。上記のように、入力シンボル「A」はリテラルシンボルなので、近似計算部124A-1~4は、それぞれの入力シンボル「A」が伸張した場合のデータ量として、それぞれ「1」を消費シンボル数算出部122Aに出力する。
【0129】
消費シンボル数算出部122Aは、サイクル2の各シンボルが伸張された場合のデータ量「1」、「1」、「1」、「1」と、過去(サイクル0~1)に出力したデータ量「8」(サイクル0で出力された4バイト、及びサイクル1で出力された4バイト)と、を用いて第1消費シンボル数を計算する。サイクル2では各シンボルのデータ量が「1」なので、サイクル0~2において、出力データ量の平均値が4以上になるために必要な最小の第1消費シンボル数は「4」である。したがって、消費シンボル数算出部122Aは出力シンボル選択部123Aに「4」を出力する。その結果、出力シンボル選択部123Aからは入力シンボル列「AAAA」が出力される。
【0130】
したがって、サイクル1において入力シンボル「M□□□」が出力されている間は、入力シンボル「M」の後続の入力シンボル「AAAA」はシンボルバッファ110Aからシンボル数算出部120Aに出力されず、サイクル2で、当該入力シンボル「AAAA」がシンボルバッファ110Aからシンボル数算出部120Aに出力される。
【0131】
[復号用フロー制御部290Aの構成]
図7は、一実施形態に係る圧縮・伸張回路の復号部に含まれる符号化用フロー制御部の構成を示すブロック図である。図7に示す復号用フロー制御部290Aの構成は、図4に示す復号用フロー制御部290の構成と類似している。ただし、図7に示す復号用フロー制御部290Aは、図4の復号用フロー制御部290のシンボル数算出部220の代わりに、符号語数算出部260Aが設けられている点において相違する。
【0132】
さらに、図4に示す復号用フロー制御部290では、シンボルバッファ210とシンボル数算出部220との間に復号論理部240が設けられ、シンボル数算出部220に出力シンボルが入力されているのに対して、図7に示す復号用フロー制御部290Aでは、シンボルバッファ210Aから出力された符号語がそのまま符号語数算出部260Aに入力されている。図7に示すシンボルバッファ210Aの構成は図4に示すシンボルバッファ210の構成と同じなので、説明を省略する。
【0133】
図7に示すように、符号語数算出部260Aは、近似計算部261A(approx. cal.)、消費符号語数算出部262A(consumption code cal.)、及び出力符号語選択部263A(output code select.)を有する。図7図4とを対比すると、図7の符号語数算出部260Aは、図4の辞書式仮復号部221、消費シンボル数算出部222、及び出力シンボル選択部223が、それぞれ近似計算部261A、消費符号語数算出部262A、及び出力符号語選択部263Aに置き換えられた構成を有している。また、符号語数算出部260Aには、シンボルバッファ210Aから出力された符号語が入力される。
【0134】
以下の説明において、近似計算部261Aを「第2近似計算部」といい、消費符号語数算出部262Aを「符号語数算出部」という場合がある。以下の説明において、4つの近似計算部261Aを特に区別する必要がない場合、単に近似計算部261Aという。一方、4つの近似計算部261Aを区別して表現する場合は、それぞれ近似計算部261A-1、261A-2、261A-3、261A-4と表現する。
【0135】
近似計算部261Aは、符号語のタイプ(第2タイプ)に基づいて、近似計算部261Aに入力された符号語について、出力シンボルに変換され、辞書式伸張部400Aによって伸張された後の出力データ列のデータ量(第2データ量)を見積もる。本実施形態における第2データ量は、上記出力データ列のデータ量を正確に再現したデータ量ではないが、当該出力データ列のデータ量を反映するデータ量である。
【0136】
符号語の形式によって当該符号語がリテラルシンボルから変換された符号語(以下、「リテラル符号語」という)なのか、マッチシンボルから変換された符号語(以下、「マッチ符号語」という)なのかを判別することができる。例えば、符号語が特定のパターンを含むか否かによって、近似計算部124Aに入力された符号語がリテラル符号語なのかマッチ符号語なのかを判別することができる。つまり、符号語のタイプ(第2タイプ)に基づいて、符号語が変換された出力シンボルが圧縮されているか否かを判定することができる。換言すると、第2タイプは、復号部200Aに入力された符号語が復号された出力シンボルが圧縮されているか否かを示す情報を含む。
【0137】
近似計算部261Aは、符号語がリテラル符号語である場合、当該符号語のデータ量を1バイトと見積もり、符号語がマッチ符号語である場合、当該符号語のデータ量を4バイトと見積もる。
【0138】
上記のように、近似計算部261A(第2近似計算部)は、符号語が変換された出力シンボルが圧縮されていると判定した場合の当該出力シンボルのデータ量(マッチ符号語が変換された出力シンボルの第2データ量)を、当該出力シンボルが圧縮されていないと判定した場合の当該出力シンボルのデータ量(リテラル符号語が変換された出力シンボルの第2データ量)よりも大きい第2の値(例えば、上記の4バイト)に設定する。そして、消費符号語数算出部262Aは、当該第2の値に基づいてリードポインタ215Aを制御することで、次のサイクルで処理される符号語の位置を特定することができる。なお、本実施形態では、マッチ符号語の第2データ量がリテラル符号語の第2データ量より大きい構成を例示したが、この構成に限定されない。近似計算部261A(第2近似計算部)によって得られる第2の値は、上記の近似計算部124A(第1近似計算部)によって得られる第1の値と同じであればよい。つまり、マッチ符号語の第2データ量がリテラル符号語の第2データ量より小さくてもよく、マッチ符号語の第2データ量とリテラル符号語の第2データ量とが同じ値であってもよい。
【0139】
上記のように、本実施形態では、近似計算部124A(第1近似計算部)によって入力シンボルのタイプ(第1タイプ)に基づいて得られる第1の値は、近似計算部261A(第2近似計算部)によって符号語のタイプ(第2タイプ)に基づいて得られる第2の値と同じである。
【0140】
図7において、符号語「A’」、「B’」、「C’」、「D’」、「M’」は、それぞれ入力シンボル「A」、「B」、「C」、「D」、「M」が符号化されたものである。図7に示すように、サイクル0’で符号語列「A’B’C’D’」が符号語数算出部260Aに入力される。上記のように、符号語「A’」、「B’」、「C’」、「D’」はリテラル符号語なので、近似計算部261A-1、261A-2、261A-3、261A-4は、それぞれの符号語「A’」、「B’」、「C’」、「D’」を1バイトと見積もる。これらの近似計算部261Aは、「A’」~「D’」が伸張された場合のデータ量として、それぞれ「1」を消費符号語数算出部262Aに出力する。
【0141】
消費符号語数算出部262Aは、第1実施形態の消費シンボル数算出部222と同様の方法で、消費符号語数として「4」を算出し、出力符号語選択部263A及びリードポインタ215Aに消費符号語数「4」を出力する。その結果、出力符号語選択部263Aからは符号語列「A’B’C’D’」が出力され、リードポインタ215Aは「4」インクリメントし、マルチプレクサ213Aの位置が符号語列「A’B’C’D’」の次の符号語列「M’A’A’A’」に設定される。
【0142】
上記のサイクル0’に続き、サイクル1’で符号語列「M’A’A’A’」が符号語数算出部260Aに入力される。上記のように、符号語「M’」はマッチ符号語、「A’」はリテラル符号語なので、近似計算部261A-1~4は、それぞれ符号語「M’」、「A’」、「A’」、「A’」が伸張した場合のデータ量として「4」、「1」、「1」、「1」を消費符号語数算出部262Aに出力する。
【0143】
消費符号語数算出部262Aは、サイクル1’の各シンボルが伸張された場合のデータ量「4」、「1」、「1」、「1」と、過去(サイクル0’)に出力したデータ量「4」と、を用いて消費符号語数を計算する。サイクル1’では先頭の符号語「M’」のデータ量が「4」なので、現サイクルで出力されるデータ量と過去に出力したデータ量との合計は「8」であり、各サイクルにおける出力データ量の平均値は「4」である。したがって、サイクル0’~1’において、出力データ量の平均値が4以上になるために必要な最小の消費符号語数は「1」(サイクル1の先頭の符号語「M’」を消費符号語数としてカウントした値)である。したがって、消費符号語数算出部262Aは出力符号語選択部263Aに「1」を出力する。
【0144】
出力符号語選択部263Aは、消費符号語数算出部262Aから消費符号語数「1」を受信すると、符号語列の先頭の1つの符号語を出力する。図7の例では、消費符号語数「1」に基づいて、符号語「M’」のみを出力し、残りの出力へ空の符号語を出力する。その結果、出力符号語選択部263Aからは、出力符号語列「M’□□□」(□:空の符号語)が出力される。
【0145】
サイクル1’において、消費符号語数算出部262Aから出力された消費符号語数「1」はリードポインタ215Aにも送信される。消費符号語数「1」を受信したリードポインタ215Aは、受信した消費符号語数「1」に基づいて「1」インクリメントし、マルチプレクサ213Aが出力する位置を1つ進める。その結果、次のサイクルで符号語数算出部260Aに出力されるマルチプレクサ213Aの位置は入力シンボル「M’」の次の符号語列「A’A’A’A’」に設定される。
【0146】
サイクル1’に続き、サイクル2’で符号語列「A’A’A’A’」が符号語数算出部260Aに入力される。上記のように、符号語「A’」はリテラル符号語なので、近似計算部261A-1~4は、それぞれの符号語「A’」が伸張した場合のデータ量として、それぞれ「1」を消費符号語数算出部262Aに出力する。
【0147】
消費符号語数算出部262Aは、サイクル2’の各符号語が伸張された場合のデータ量「1」、「1」、「1」、「1」と、過去(サイクル0’~1’)に出力したデータ量「8」(サイクル0’で出力された4バイト、及びサイクル1’で出力された4バイト)と、を用いて消費符号語数を計算する。サイクル2’では各符号語のデータ量が「1」なので、サイクル0’~2’において、出力データ量の平均値が4以上になるために必要な最小の消費符号語数は「4」である。したがって、消費符号語数算出部262Aは出力符号語選択部263Aに「4」を出力する。その結果、出力符号語選択部263Aからは符号語列「A’A’A’A’」が出力される。
【0148】
したがって、サイクル1’において符号語「M’□□□」が出力されている間は、出力符号語「M’」の後続の符号語列「A’A’A’A’」はシンボルバッファ210Aから符号語数算出部260Aに出力されず、サイクル2’で、当該符号語列「A’A’A’A’」がシンボルバッファ210Aから符号語数算出部260Aに出力される。
【0149】
上記の構成によって、第1実施形態と同様の効果を得ることができる。さらに、本実施形態の復号部200Aは、シンボルバッファ210Aと符号語数算出部260Aとの間に復号論理部240Aが存在していないため、第1実施形態の復号部200に比べてフィードバックループ(消費符号語数算出部262Aからリードポインタ215Aへのフィードバックによって発生するループ)を短くすることができる。
【0150】
<第3実施形態>
以下、第3実施形態に係る圧縮・伸張回路16Bについて説明する。圧縮・伸張回路16Bは第2実施形態に係る圧縮・伸張回路16Aと類似しているが、圧縮・伸張回路16Bの復号部200Bの構成が圧縮・伸張回路16Aの復号部200Aの構成と相違する。以下の復号部200Bの説明において、圧縮・伸張回路16Aの復号部200Aと同様の構成については説明を省略し、主に相違点について説明する。
【0151】
[圧縮・伸張回路16Bの構成]
図8は、一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。図8に示す圧縮・伸張回路16Bの構成は、図5に示す圧縮・伸張回路16Aの構成と類似している。ただし、図8に示す復号部200Bの構成が図5の復号部200Aの構成と相違する。
【0152】
図8に示すように、復号部200Bでは、符号語数算出部260Bと復号論理部240Bとの間にエントリ番号抽出部270Bが設けられている。エントリ番号抽出部270Bは、復号用フロー制御部290Bから出力された符号語からエントリ番号を抽出する。エントリ番号抽出部270Bは、抽出したエントリ番号(Entry ID)を符号表更新部230Dに入力し、当該エントリ番号に基づいて符号表更新部230Bの復号用符号表を更新する。
【0153】
[符号表更新部230Bの構成]
図9は、一実施形態に係る圧縮・伸張回路の復号部に含まれる符号表更新部の構成を示すブロック図である。図9に示すように、符号表更新部230Bは、アドレスデコーダ231B(address decoder)、エントリ(entry)の数に応じたN個の加算器232B、及びN個のマルチプレクサ233Bを有する。
【0154】
アドレスデコーダ231Bにはエントリ番号抽出部270Bによって抽出されたエントリ番号(Entry ID)が入力される。N個の加算器232B及びマルチプレクサ233Bの各々に対して出力シンボル(symbol)及び頻度値(freq. value)が割り当てられている。アドレスデコーダ231Bの出力は加算器232B及びマルチプレクサ233Bに入力される。アドレスデコーダ231Bが入力されたエントリ番号に基づいてマルチプレクサ233Bを選択すると、入力された頻度値は加算器232Bによって1インクリメントされて、当該マルチプレクサ233Bから出力される。上記のように、エントリ番号抽出部270Bによって抽出されたエントリ番号に基づいて、符号表更新部230Bの復号用符号表が更新される。
【0155】
図10は、一実施形態に係る圧縮・伸張回路の復号部において行われるエントリ番号抽出に用いられる符号表の一例である。図10に示すように、復号用符号表では、符号語(Code)、エントリ番号(Entry ID)、出力シンボル(Symbol)、及び出力シンボルの出現頻度を示す頻度値(Freq.)が関連付けられている。復号用符号表において、符号語及びエントリ番号は固定されている。相対的に小さいエントリ番号には相対的に短い符号語が割り当てられており、相対的に大きいエントリ番号には相対的に長い符号語が割り当てられている。
【0156】
図10の例では、符号語「0」、エントリ番号「0」に対して出力シンボル「A」が割り当てられている。出力シンボル「A」の頻度値は「10」である。符号語「10」、エントリ番号「1」に対して出力シンボル「B」が割り当てられている。出力シンボル「B」の頻度値は「9」である。符号語「1100」、エントリ番号「2」に対して出力シンボル「C」が割り当てられている。出力シンボル「C」の頻度値は「8」である。上記のように、出力シンボルは頻度値に基づいて並べられている。
【0157】
[符号表の更新動作]
図11図13を用いて、符号表更新部130B及び符号表更新部230Bによって符号表を更新する動作を説明する。図11は、一実施形態に係る圧縮・伸張回路の符号化部又は復号部に含まれる符号表の状態遷移の一例を示す図である。図12は、一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号表更新部の動作を示すタイミングチャートである。図13は、一実施形態に係る圧縮・伸張回路の復号部に含まれる符号表更新部の動作を示すタイミングチャートである。
【0158】
図11図13では、サイクルT0~T4の各サイクルで符号化部100Bに入力シンボル「D」が入力される。なお、各サイクルにおける符号化部100Bの符号表更新部130Bが有する符号化用符号表の状態は、復号部200Bの符号表更新部230Bが有する復号用符号表の状態と同じなので、図11を用いて両者の状態を説明する。
【0159】
なお、本実施形態において、符号表更新部130B及び符号表更新部230Bのレイテンシは「1」である。つまり、あるサイクルにおいて入力された入力シンボルによって、符号表更新部130Bの符号化用符号表は更新されるが、更新された情報が符号表更新部130Bから出力されるタイミングは、上記入力シンボルが入力されたサイクルの1サイクル後である。同様に、あるサイクルにおいて入力された符号語によって符号表更新部230Bの復号用符号表は更新されるが、更新された情報が符号表更新部230Bから出力されるタイミングは、上記符号語が入力されたサイクルの1サイクル後である。
【0160】
図11には5つの状態の符号表500Bが表示されている。符号表510B~550Bは、それぞれサイクルT0~T4又はサイクルT0’~T4’における符号表である。
【0161】
図12を用いて、符号化部100Bに入力された入力シンボルに基づいて出力される符号語を導出する方法を説明する。図12に示すように、サイクルT0の前に入力シンボルの入力(input valid)及び符号語の出力(output valid)が有効になり、サイクルT0~T4の各々で、入力シンボル(input symbol)としてシンボル「D」が入力される。
【0162】
図12のタイミングチャートには、各サイクルにおけるシンボル「D」の頻度値(D's frequency)、シンボル「D」の順位(D's rank)、シンボル「D」の符号語(D's code)、及び符号化部100Bから出力される符号語(output code)が示されている。
【0163】
サイクルT0で符号化部100Bにシンボル「D」が入力されると、図11のサイクルT0の符号表510Bに基づいて、頻度値「8」、順位「3」、及び符号語「1101」が導出される。そして、シンボル「D」の頻度値が「8」から「9」に更新され、頻度値に基づいて表が並べ替えられる。その結果、符号表510Bが符号表520Bに更新され、次のサイクルT1では符号表520Bが適用される。なお、符号表510Bは、サイクルT0で入力された入力シンボルによる更新が行われる前の状態である。
【0164】
サイクルT1でシンボル「D」が入力されると、サイクルT1の符号表520Bに基づいて、頻度値「9」、順位「2」、及び符号語「1100」が導出される。そして、シンボル「D」の頻度値が「9」から「10」に更新され、頻度値に基づいて表が並べ替えられる。その結果、符号表520Bが符号表530Bに更新され、次のサイクルT2では符号表530Bが適用される。なお、符号表520Bは、サイクルT0で入力された入力シンボルによる更新が行われた後、かつサイクルT1で入力された入力シンボルによる更新が行われる前の状態である。
【0165】
サイクルT2でシンボル「D」が入力されると、サイクルT2の符号表530Bに基づいて、頻度値「10」、順位「1」、及び符号語「10」が導出される。そして、シンボル「D」の頻度値が「10」から「11」に更新され、頻度値に基づいて表が並べ替えられる。その結果、符号表530Bが符号表540Bに更新され、次のサイクルT3では符号表540Bが適用される。なお、符号表530Bは、サイクルT1で入力された入力シンボルによる更新が行われた後、かつサイクルT2で入力された入力シンボルによる更新が行われる前の状態である。
【0166】
サイクルT3でシンボル「D」が入力されると、サイクルT3の符号表540Bに基づいて、頻度値「11」、順位「0」、及び符号語「0」が導出される。そして、シンボル「D」の頻度値が「11」から「12」に更新される。その結果、符号表540Bが符号表550Bに更新され、次のサイクルT4では符号表550Bが適用される。なお、符号表540Bは、サイクルT2で入力された入力シンボルによる更新が行われた後、かつサイクルT3で入力された入力シンボルによる更新が行われる前の状態である。
【0167】
サイクルT4でシンボル「D」が入力されると、サイクルT4の符号表550Bに基づいて、頻度値「12」、順位「0」、及び符号語「0」が導出される。なお、符号表550Bは、サイクルT3で入力された入力シンボルによる更新が行われた後、かつサイクルT4で入力された入力シンボルによる更新が行われる前の状態である。
【0168】
上記の結果、サイクルT0で符号語「1101」が出力され、サイクルT1で符号語「1100」が出力され、サイクルT2で符号語「10」が出力され、サイクルT3及びT4で符号語「0」が出力される。
【0169】
図13を用いて、復号部200Bに入力された符号語に基づいて出力される出力シンボルを導出する方法を説明する。図13に示すように、サイクルT0’の前に符号語の入力(input valid)及び出力シンボルの出力(output valid)が有効になり、サイクルT0’~T4’の各々で、図12のサイクルT0~T4で出力された符号語(input code)が入力される。
【0170】
図13のタイミングチャートには、各サイクルにおいて入力された符号語のエントリ番号(Entry ID)、シンボル「D」の頻度値(D's frequency)、シンボル「D」の順位(D's rank)、シンボル「D」の符号語(D's code)、及び復号部200Bから出力される出力シンボル(output symbol)が示されている。
【0171】
サイクルT0’で復号部200Bに符号語「1101」が入力されると、図11のサイクルT0’の符号表510Bに基づいて、エントリ番号「3」、頻度値「8」、順位「3」、及び符号語「1101」が導出される。したがって、サイクルT0’では入力された符号語「1101」に対応する出力シンボル「D」が出力される。そして、シンボル「D」の頻度値を「8」から「9」に更新し、頻度値に基づいて表を並べ替える。その結果、符号表510Bが符号表520Bに更新され、次のサイクルT1’では符号表520Bが適用される。
【0172】
サイクルT1’で復号部200Bに符号語「1100」が入力されると、サイクルT1’の符号表520Bに基づいて、エントリ番号「2」、頻度値「9」、順位「2」、及び符号語「1100」が導出される。したがって、サイクルT1’では入力された符号語「1100」に対応する出力シンボル「D」が出力される。そして、シンボル「D」の頻度値を「9」から「10」に更新し、頻度値に基づいて表を並べ替える。その結果、符号表520Bが符号表530Bに更新され、次のサイクルT2’では符号表530Bが適用される。
【0173】
サイクルT2’で復号部200Bに符号語「10」が入力されると、サイクルT2’の符号表530Bに基づいて、エントリ番号「1」、頻度値「10」、順位「1」、及び符号語「10」が導出される。したがって、サイクルT2’では入力された符号語「10」に対応する出力シンボル「D」が出力される。そして、シンボル「D」の頻度値を「10」から「11」に更新し、頻度値に基づいて表を並べ替える。その結果、符号表530Bが符号表540Bに更新され、次のサイクルT3’では符号表540Bが適用される。
【0174】
サイクルT3’で復号部200Bに符号語「0」が入力されると、サイクルT3’の符号表540Bに基づいて、エントリ番号「0」、頻度値「11」、順位「0」、及び符号語「0」が導出される。したがって、サイクルT3’では入力された符号語「0」に対応する出力シンボル「D」が出力される。そして、シンボル「D」の頻度値を「11」から「12」に更新する。その結果、符号表540Bが符号表550Bに更新され、次のサイクルT4’では符号表550Bが適用される。
【0175】
サイクルT4’で復号部200Bに符号語「0」が入力されると、サイクルT4’の符号表550Bに基づいて、エントリ番号「0」、頻度値「12」、順位「0」、及び符号語「0」が導出される。したがって、サイクルT4’では入力された符号語「0」に対応する出力シンボル「D」が出力される。
【0176】
上記のように、サイクルT0’~T4’の出力シンボルとして「DDDDD」が得られる。また、上記のように、サイクルT0’~T4’の各々における符号表500Bの状態は、サイクルT0~T4の各々における符号表500Bの状態を正確に再現している。
【0177】
上記の構成によって、第2実施形態と同様の効果を得ることができる。さらに、本実施形態の復号部200Bは、エントリ番号を用いて符号表更新部230Bの符号表500Bを更新することができるため、図9に示すように、第2実施形態の復号部200Aよりも回路規模を小さくすることができる。
【0178】
<第4実施形態>
以下、第4実施形態に係る圧縮・伸張回路16Cについて説明する。圧縮・伸張回路16Cは、第3実施形態に係る圧縮・伸張回路16Bと類似しているが、圧縮・伸張回路16Cの符号化部100C及び復号部200Cにおいて、遅延バッファが追加されている点において、圧縮・伸張回路16Bと相違する。以下の符号化部100C及び復号部200Cの説明において、圧縮・伸張回路16Bの符号化部100B及び復号部200Bと同様の構成については説明を省略し、主に相違点について説明する。
【0179】
[圧縮・伸張回路16Cの構成]
図14は、一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。図14に示す圧縮・伸張回路16Cの構成は、図8に示す圧縮・伸張回路16Bの構成と類似している。ただし、図14に示す符号化部100C及び復号部200Cにおいて、それぞれ第1遅延バッファ180C及び第2遅延バッファ280Cが設けられている点において、図8に示す符号化部100B及び復号部200Bと相違する。
【0180】
図14に示すように、符号化部100Cにおいて、符号化用フロー制御部190Cのシンボル数算出部120Cと符号化論理部140Cとの間に第1遅延バッファ180Cが設けられている。第1遅延バッファ180Cは、入力された入力シンボルを遅延させる。第1遅延バッファ180Cによって遅延されるサイクル数は、符号表更新部130Cのレイテンシによって遅延されるサイクル数よりも1サイクル小さい。
【0181】
図14に示すように、復号部200Cにおいて、復号用フロー制御部290Cの符号語数算出部260Cと復号論理部240Cとの間に第2遅延バッファ280Cが設けられている。具体的には、エントリ番号抽出部270Cと復号論理部240Cとの間に第2遅延バッファ280Cが設けられている。第2遅延バッファ280Cは、入力された符号語を遅延させる。第2遅延バッファ280Cによって遅延されるサイクル数は、符号表更新部230Cのレイテンシによって遅延されるサイクル数よりも1サイクル小さい。
【0182】
本実施形態では、符号表更新部130C、230Cの各々のレイテンシが「2」であり、第1遅延バッファ180C及び第2遅延バッファ280Cによって遅延されるサイクル数は「1」である場合について説明する。第1遅延バッファ180Cによって遅延されるサイクル数は、第2遅延バッファ280Cによって遅延されるサイクル数と同じである。
【0183】
[符号表の更新動作]
図11図15、及び図16を用いて、符号表更新部130C及び符号表更新部230Cによって符号表を更新する動作を説明する。図15は、一実施形態に係る圧縮・伸張回路の符号化部に含まれる符号表更新部の動作を示すタイミングチャートである。図16は、一実施形態に係る圧縮・伸張回路の復号部に含まれる符号表更新部の動作を示すタイミングチャートである。
【0184】
以下の説明では、サイクルT0~T4の各サイクルで符号化部100Cに入力シンボル「D」が入力される。なお、各サイクルにおける符号化部100Cの符号表更新部130Cが有する符号化用符号表の状態は、復号部200Cの符号表更新部230Cが有する復号用符号表の状態と同じなので、図11を用いて両者の状態を説明する。
【0185】
なお、上記のように、符号表更新部130C及び符号表更新部230Cのレイテンシは「2」である。つまり、あるサイクルにおいて入力された入力シンボルによって、符号表更新部130Cの符号化用符号表は更新されるが、更新された情報が符号表更新部130Cから出力されるタイミングは、上記入力シンボルが入力されたサイクルの2サイクル後である。同様に、あるサイクルにおいて入力された符号語によって符号表更新部230Cの復号用符号表は更新されるが、更新された情報が符号表更新部230Cから出力されるタイミングは、上記符号語が入力されたサイクルの1サイクル後である。
【0186】
図15を用いて、符号化部100Cに入力された入力シンボルに基づいて出力される符号語を導出する方法を説明する。図15に示すように、サイクルT0の前に入力シンボルの入力(input valid)が有効になり、サイクルT0~T4の各々で、入力シンボル(input symbol)としてシンボル「D」が入力される。続いて、サイクルT1の前に遅延バッファの出力(delay buffer output valid)及び符号語の出力(output valid)が有効になり、入力シンボルが変換され、符号語が出力される。
【0187】
図15のタイミングチャートには、各サイクルにおけるシンボル「D」の頻度値(D's frequency)、シンボル「D」の順位(D's rank)、シンボル「D」の符号語(D's code)、第1遅延バッファ180Cから出力される入力シンボル(delay buffer output symbol)、及び符号化部100Cから出力される符号語(output code)が示されている。
【0188】
サイクルT0で符号化部100Cにシンボル「D」が入力されると、当該入力シンボルは第1遅延バッファ180Cに格納され、1サイクル遅延される。したがって、サイクルT0では符号語は出力されない。また、上記入力シンボルは符号表更新部130Cにも入力され、符号化用符号表が更新される。つまり、シンボル「D」の頻度値が「8」から「9」に更新され、頻度値に基づいて表が並べ替えられる。その結果、図11の符号表510Bが符号表520Bに更新される。ただし、符号表520Bは2サイクル後のサイクルT2で適用される。
【0189】
サイクルT1でシンボル「D」が入力されると、当該入力シンボルは第1遅延バッファ180Cに格納され、サイクルT0で入力されたシンボル「D」が第1遅延バッファ180Cから出力される。第1遅延バッファ180Cから出力されたシンボル「D」が符号化論理部140Cに入力されると、2サイクル前に更新された符号表510B(図11参照)に基づいて、頻度値「8」、順位「3」、及び符号語「1101」が導出される。
【0190】
なお、上記のようにサイクルT0で符号化用符号表が更新されているが、符号表更新部130Cのレイテンシが「2」なので、サイクルT1において使用される符号表はサイクルT0で入力された入力シンボルによる更新が行われる前の符号表510Bである。
【0191】
また、上記入力シンボルは符号表更新部130Cにも入力され、符号化用符号表が更新される。つまり、シンボル「D」の頻度値が「9」から「10」に更新され、頻度値に基づいて表が並べ替えられる。その結果、符号表520Bが符号表530Bに更新される。ただし、符号表530Bは2サイクル後のサイクルT3で適用される。
【0192】
サイクルT2でシンボル「D」が入力されると、当該入力シンボルは第1遅延バッファ180Cに格納され、サイクルT1で入力されたシンボル「D」が第1遅延バッファ180Cから出力される。第1遅延バッファ180Cから出力されたシンボル「D」が符号化論理部140Cに入力されると、サイクルT0で更新された符号表520B(図11参照)に基づいて、頻度値「9」、順位「2」、及び符号語「1100」が導出される。
【0193】
なお、上記のようにサイクルT1で符号化用符号表が更新されているが、符号表更新部130Cのレイテンシが「2」なので、サイクルT2において使用される符号表はサイクルT1で入力された入力シンボルによる更新が行われる前の符号表520Bである。
【0194】
また、上記入力シンボルは符号表更新部130Cにも入力され、符号化用符号表が更新される。つまり、シンボル「D」の頻度値が「10」から「11」に更新され、頻度値に基づいて表が並べ替えられる。その結果、符号表530Bが符号表540Bに更新される。ただし、符号表540Bは2サイクル後のサイクルT4で適用される。
【0195】
サイクルT3でシンボル「D」が入力されると、当該入力シンボルは第1遅延バッファ180Cに格納され、サイクルT2で入力されたシンボル「D」が第1遅延バッファ180Cから出力される。第1遅延バッファ180Cから出力されたシンボル「D」が符号化論理部140Cに入力されると、サイクルT1で更新された符号表530B(図11参照)に基づいて、頻度値「10」、順位「1」、及び符号語「10」が導出される。
【0196】
なお、上記のようにサイクルT2で符号化用符号表が更新されているが、符号表更新部130Cのレイテンシが「2」なので、サイクルT3において使用される符号表はサイクルT2で入力された入力シンボルによる更新が行われる前の符号表530Bである。
【0197】
また、上記入力シンボルは符号表更新部130Cにも入力され、符号化用符号表が更新される。つまり、シンボル「D」の頻度値が「11」から「12」に更新される。その結果、符号表540Bが符号表550Bに更新される。ただし、符号表550Bは2サイクル後のサイクルT5で適用される。
【0198】
サイクルT4でシンボル「D」が入力されると、当該入力シンボルは第1遅延バッファ180Cに格納され、サイクルT3で入力されたシンボル「D」が第1遅延バッファ180Cから出力される。第1遅延バッファ180Cから出力されたシンボル「D」が符号化論理部140Cに入力されると、サイクルT2で更新された符号表540B(図11参照)に基づいて、頻度値「11」、順位「0」、及び符号語「0」が導出される。なお、上記のようにサイクルT3で符号化用符号表が更新されているが、符号表更新部130Cのレイテンシが「2」なので、サイクルT4において使用される符号表はサイクルT3で入力された入力シンボルによる更新が行われる前の符号表540Bである。また、上記入力シンボルは符号表更新部130Cにも入力され、符号化用符号表が更新される。
【0199】
サイクルT5でシンボルが入力されていないが、第1遅延バッファ180CからサイクルT4で入力されたシンボル「D」が出力される。第1遅延バッファ180Cから出力されたシンボル「D」が符号化論理部140Cに入力されると、サイクルT4の符号表550B(図11参照)に基づいて、頻度値「12」、順位「0」、及び符号語「0」が導出される。なお、上記のようにサイクルT4で符号化用符号表が更新されているが、符号表更新部130Cのレイテンシが「2」なので、サイクルT5において使用される符号表はサイクルT4で入力された入力シンボルによる更新が行われる前の符号表550Bである。
【0200】
上記の結果、サイクルT1で符号語「1101」が出力され、サイクルT2で符号語「1100」が出力され、サイクルT3で符号語「10」が出力され、サイクルT4及びT5で符号語「0」が出力される。
【0201】
図16を用いて、復号部200Cに入力された符号語に基づいて出力される出力シンボルを導出する方法を説明する。図16に示すように、サイクルT0’の前に符号語の入力(input valid)が有効になり、サイクルT0’~T4’の各々で、図15のサイクルT0~T4で出力された符号語(input code)が入力される。続いて、サイクルT1’の前に遅延バッファの出力(delay buffer output valid)及び出力シンボルの出力(output valid)が有効になり、符号語が変換され、出力シンボルが出力される。
【0202】
図16のタイミングチャートには、各サイクルにおいて入力された符号語のエントリ番号(Entry ID)、符号表のエントリ番号(Entry ID (code table))、シンボル「D」の頻度値(D's frequency)、シンボル「D」の順位(D's rank)、シンボル「D」の符号語(D's code)、及び復号部200Cから出力される出力シンボル(output symbol)が示されている。
【0203】
サイクルT0’で復号部200Cに符号語「1101」が入力されると、当該入力シンボルは第2遅延バッファ280Cに格納され、1サイクル遅延される。したがって、サイクルT0’では出力シンボルは出力されない。また、上記符号語は符号表更新部230Cにも入力され、上記のサイクルT0と同様に復号用符号表が更新される。
【0204】
サイクルT1’で復号部200Cに符号語「1100」が入力されると、当該符号語は第2遅延バッファ280Cに格納され、サイクルT0’で入力された符号語「1101」が第2遅延バッファ280Cから出力される。第2遅延バッファ280Cから出力された符号語「1101」が復号論理部240Cに入力されると、2サイクル前に更新された符号表510B(図11参照)に基づいて、符号表のエントリ番号「3」、頻度値「8」、順位「3」、及び符号語「1101」が導出される。したがって、サイクルT1’では、サイクルT0’で入力された符号語「1101」に対応する出力シンボル「D」が出力される。
【0205】
なお、上記のようにサイクルT0’で復号用符号表が更新されているが、符号表更新部230Cのレイテンシが「2」なので、サイクルT1’において使用される符号表はサイクルT0’で入力された符号語による更新が行われる前の符号表510Bである。また、上記符号語は符号表更新部230Cにも入力され、符号化用符号表が更新される。
【0206】
サイクルT2’で復号部200Cに符号語「10」が入力されると、当該符号語は第2遅延バッファ280Cに格納され、サイクルT1’で入力された符号語「1100」が第2遅延バッファ280Cから出力される。第2遅延バッファ280Cから出力された符号語「1100」が復号論理部240Cに入力されると、サイクルT0’で更新された符号表520B(図11参照)に基づいて、符号表のエントリ番号「2」、頻度値「9」、順位「2」、及び符号語「1100」が導出される。したがって、サイクルT2’では、サイクルT1’で入力された符号語「1100」に対応する出力シンボル「D」が出力される。
【0207】
なお、上記のようにサイクルT1’で復号用符号表が更新されているが、符号表更新部230Cのレイテンシが「2」なので、サイクルT2’において使用される符号表はサイクルT1’で入力された符号語による更新が行われる前の符号表520Bである。また、上記符号語は符号表更新部230Cにも入力され、符号化用符号表が更新される。
【0208】
サイクルT3’で復号部200Cに符号語「0」が入力されると、当該符号語は第2遅延バッファ280Cに格納され、サイクルT2’で入力された符号語「10」が第2遅延バッファ280Cから出力される。第2遅延バッファ280Cから出力された符号語「10」が復号論理部240Cに入力されると、サイクルT1’で更新された符号表530B(図11参照)に基づいて、符号表のエントリ番号「1」、頻度値「10」、順位「1」、及び符号語「10」が導出される。したがって、サイクルT3’では、サイクルT2’で入力された符号語「10」に対応する出力シンボル「D」が出力される。
【0209】
なお、上記のようにサイクルT2’で復号用符号表が更新されているが、符号表更新部230Cのレイテンシが「2」なので、サイクルT3’において使用される符号表はサイクルT2’で入力された符号語による更新が行われる前の符号表530Bである。また、上記符号語は符号表更新部230Cにも入力され、符号化用符号表が更新される。
【0210】
サイクルT4’で復号部200Cに符号語「0」が入力されると、当該符号語は第2遅延バッファ280Cに格納され、サイクルT3’で入力された符号語「0」が第2遅延バッファ280Cから出力される。第2遅延バッファ280Cから出力された符号語「0」が復号論理部240Cに入力されると、サイクルT2’で更新された符号表540B(図11参照)に基づいて、符号表のエントリ番号「0」、頻度値「11」、順位「0」、及び符号語「0」が導出される。したがって、サイクルT4’では、サイクルT3’で入力された符号語「0」に対応する出力シンボル「D」が出力される。
【0211】
なお、上記のようにサイクルT3’で復号用符号表が更新されているが、符号表更新部230Cのレイテンシが「2」なので、サイクルT4’において使用される符号表はサイクルT3’で入力された符号語による更新が行われる前の符号表540Bである。また、上記符号語は符号表更新部230Cにも入力され、符号化用符号表が更新される。
【0212】
サイクルT5’で符号語が入力されていないが、サイクルT4’で入力された符号語「0」が第2遅延バッファ280Cから出力される。第2遅延バッファ280Cから出力された符号語「0」が復号論理部240Cに入力されると、サイクルT3’で更新された符号表550B(図11参照)に基づいて、符号表のエントリ番号「0」、頻度値「12」、順位「0」、及び符号語「0」が導出される。したがって、サイクルT5’では、サイクルT4’で入力された符号語「0」に対応する出力シンボル「D」が出力される。
【0213】
なお、上記のようにサイクルT4’で復号用符号表が更新されているが、符号表更新部230Cのレイテンシが「2」なので、サイクルT5’において使用される符号表はサイクルT4’で入力された符号語による更新が行われる前の符号表550Bである。また、上記符号語は符号表更新部230Cにも入力され、符号化用符号表が更新される。
【0214】
上記のように、サイクルT0’~T4’の出力シンボルとして「DDDDD」が得られる。また、上記のように、サイクルT0’~T4’の各々における符号表500Cの状態は、サイクルT0~T4の各々における符号表500Cの状態を正確に再現している。
【0215】
上記の構成によって、第3実施形態と同様の効果を得ることができる。さらに、本実施形態の符号化部100C及び復号部200Cのそれぞれに設けられた第1遅延バッファ180C及び第2遅延バッファ280Cによって、相対的に新しい符号表を用いることができる。
【0216】
<第5実施形態>
以下、第5実施形態に係るメモリシステム1Dについて説明する。メモリシステム1Dは、第1実施形態に係るメモリシステム1と類似しているが、メモリシステム1Dの符号化部100D及び復号部200Dにおいて、空サイクル検出部が追加されている点において、メモリシステム1と相違する。以下の符号化部100D及び復号部200Dの説明において、メモリシステム1の符号化部100及び復号部200と同様の構成については説明を省略し、主に相違点について説明する。
【0217】
[圧縮・伸張回路16Dの構成]
図17は、一実施形態に係る圧縮・伸張回路の構成を示すブロック図である。図17に示す圧縮・伸張回路16Dの構成は、図2に示す圧縮・伸張回路16の構成と類似している。ただし、図17に示す符号化部100Dに第1空サイクル検出部185D(empty cycle detect.)が設けられており、復号部200Dに第2空サイクル検出部285D(empty cycle detect.)が設けられている点において、図2に示す符号化部100及び復号部200と相違する。
【0218】
第1空サイクル検出部185Dは、符号化用フロー制御部190D(又は、シンボル数算出部120D)と符号表更新部130Dとの間に設けられている。第1空サイクル検出部185Dは、符号化用フロー制御部190D(又は、シンボル数算出部120D)の出力を監視し、符号表更新部130Dへの入力シンボルの入力がないサイクルを検出する。つまり、第1空サイクル検出部185Dは入力シンボルが存在しない空サイクル(empty cycle)を検出する。
【0219】
具体的には、第1空サイクル検出部185Dは、各サイクルで入力される入力シンボルの圧縮前の入力データ列のデータ量(第1データ量)の累計値と、入力シンボルの入力が行われたサイクル数(入力サイクル数)の累計値とを記憶する。そして、以下の「式1」が成り立つ場合に、次のサイクルを空サイクルとして検出する。
【0220】
[第1データ量の累計値]≧[(入力サイクル数)+1]×4 (式1)
【0221】
第2空サイクル検出部285Dは、復号用フロー制御部290D(又は、シンボル数算出部220D)と符号表更新部230Dとの間に設けられている。第1空サイクル検出部185Dと同様に、第2空サイクル検出部285Dは、復号用フロー制御部290D(又は、シンボル数算出部220D)の出力を監視し、符号表更新部230Dへの出力シンボルの入力がなくなるサイクルを検出する。つまり、第2空サイクル検出部285Dは出力シンボルが存在しない空サイクルを検出する。
【0222】
具体的には、第2空サイクル検出部285Dは、各サイクルで入力される出力シンボルの伸張後の出力データ列のデータ量(第2データ量)の累計値と、出力シンボルの出力が行われたサイクル数の累計値とを記憶する。そして、以下の「式2」が成り立つ場合に、次のサイクルを空サイクルとして検出する。
【0223】
[第2データ量の累計値]≧[(出力サイクル数)+1]×4 (式2)
【0224】
[符号表更新部130Dの構成]
図18は、一実施形態に係る圧縮・伸張回路の符号表更新部の構成を示すブロック図である。符号表更新部130Dは、頻度値削減変換部33D(reduction conversion)、頻度値更新部34D(update)、複数のグループ内並替部35D、及びルーティング部36D(routing)を備える。グループ内並替部35Dは、グループ0内並替部350D(Group 0)、グループ1内並替部351D(Group 1)、及びグループ(K-1)内並替部352D(Group (K-1))を含む。なお、以下の説明では、符号化部100Dの符号表更新部130Dについて説明するが、復号部200Dの符号表更新部230Dも同様の構成を備えている。
【0225】
頻度値削減変換部33Dには、入力シンボル(symbol)と、符号表(例えば、図10に示す符号表)を構成する複数のエントリ番号(本実施形態では、「頻度エントリ31D(freq. entry)」という)とが入力される。符号表を構成する頻度エントリ31Dの総数は、例えばN個である。頻度値削減変換部33Dへの頻度エントリ31Dの入力は、例えば頻度エントリの内容を保持するフリップフロップ回路が、その内容を頻度値削減変換部33Dに出力することで実現される。フリップフロップ回路は、頻度エントリの内容を、符号表更新部130D内の、頻度値削減変換部33Dとは別の構成に出力してもよい。つまり、フリップフロップ回路は、符号表更新部130Dによるループ処理のいずれの位置に挿入されてもよい。符号表更新部130Dによって更新された頻度エントリの内容は、このフリップフロップ回路に書き戻される。
【0226】
図18において、垂直方向に並べて図示された複数の頻度エントリ31Dの順序は、これら頻度エントリ31Dが符号表内で並んでいる順序と一致している。以下、符号表を構成するN個の頻度エントリ31Dを頻度エントリ群31Dという場合がある。
【0227】
符号表内の頻度エントリ群31Dは、符号表に並んだ順序に基づいて、連続する幾つかの頻度エントリを含む複数のグループ(ここではK個のグループ)に分けられる。図18に示す例では、頻度エントリ310D~313Dは、グループ0に属している。頻度エントリ314D~317Dは、グループ0よりも下位のグループ1に属している。頻度エントリ318D~321Dは、グループ1よりも下位のグループ(K-1)に属している。
【0228】
頻度値削減変換部33Dは、入力された入力シンボルの数をカウントする。頻度値削減変換部33Dは、カウントされた入力シンボル数が閾値以上である場合、各頻度エントリ31D内の頻度値を削減する変換を行う。これにより、頻度値のオーバーフローを回避できる。頻度値削減変換部33Dは、削減された頻度値を含む頻度エントリ31Dを頻度値更新部34Dに出力する。なお、入力シンボルの数が閾値未満である場合、頻度値削減変換部33Dは、入力された頻度エントリ群31Dをそのまま頻度値更新部34Dに出力する。
【0229】
頻度値更新部34Dは、頻度値削減変換部33Dから出力された頻度エントリ31D群のうち、入力シンボルを含む頻度エントリの頻度値を更新(例えばインクリメント)し、その頻度エントリをグループ内並替部35Dに出力する。より詳しくは、頻度値更新部34Dは、入力シンボルを含む頻度エントリの頻度値に、第1の値(例えば1)を加算して、その頻度エントリをグループ内並替部35Dに出力する。また、頻度値更新部34Dは、頻度値削減変換部33Dから出力された頻度エントリ群31Dのうち、入力シンボルを含まない頻度エントリを、そのままグループ内並替部35Dに出力する。
【0230】
なお、符号表は、グループ1よりも下位のグループ2(図示せず)に属する頻度エントリであって、シンボルと頻度値を含まない空の頻度エントリをさらに含んでもよい。つまり、空サイクルが発生してもよい。頻度値更新部34Dは、符号表内の頻度エントリ群31Dに、入力シンボルを含む頻度エントリが含まれていない場合、グループ1の最下位の頻度エントリに含まれるシンボルを、この入力シンボルに変更する。頻度値更新部34Dは、このグループ1の最下位の頻度エントリの頻度値として、第1の値を設定してもよい。
【0231】
符号表は、グループ1よりも下位のグループ2(中位グループ)に属する頻度エントリであって、入力シンボルを含み、頻度値を含まない頻度エントリと、グループ2よりも下位のグループ3(図示せず)(下位グループ)に属する頻度エントリであって、シンボルと頻度値を含まない空の頻度エントリと、をさらに含んでいてもよい。頻度値更新部34Dは、頻度エントリ群31Dに、入力シンボルを含む頻度エントリが含まれていない場合、グループ2(中位グループ)の最上位に、入力シンボルを含む頻度エントリを追加すると共に、グループ2の最上位、およびこれより下位にあった各頻度エントリを1つずつ下位に並べ替える。頻度値更新部34Dは、この追加された頻度エントリの頻度値として、例えば第1の値を設定してもよい。
【0232】
グループ内並替部35Dは、頻度値更新部34Dから出力された頻度エントリ群31Dを、頻度値をキーとして、グループ毎に並べ替える。グループ内並替部35Dは、対応するグループに属する頻度エントリ群のうち、最大の頻度値を含む頻度エントリが最上位に位置し、最小の頻度値を含む頻度エントリが最下位に位置するように、その頻度エントリ群を並べ替える。なお、グループ内並替部35Dは、最大の頻度値を含む頻度エントリと最小の頻度値を含む頻度エントリ以外の頻度エントリを、例えば並べ替え前の元の順序に維持する。あるいは、グループ内並替部35Dは、最上位の頻度エントリと最大の頻度値を含む頻度エントリとを入れ替え、最下位の頻度エントリと最小の頻度値を含む頻度エントリとを入れ替え、その他の頻度エントリの位置を維持してもよい。また、グループ内並替部35Dは、頻度エントリ群を頻度値の降順にソートしてもよい。
【0233】
符号表更新部130Dには、頻度エントリ群31Dが分けられたグループの数に応じて、その数のグループ内並替部35Dが設けられる。図18に示す例では、符号表更新部130Dに、K個のグループにそれぞれ対応するK個のグループ内並替部350D、351D、352Dが設けられている。
【0234】
より具体的には、グループ0内並替部350Dは、グループ0に属する頻度エントリ310D~313Dを、頻度値を用いて並べ替える。グループ0内並替部350Dは、頻度エントリ310D~313Dのうち、最大の頻度値を含む頻度エントリが最上位に位置し、最小の頻度値を含む頻度エントリが最下位に位置するように、それら頻度エントリ310D~313Dを並べ替える。また、グループ0内並替部350Dは、頻度エントリ310D~313Dを頻度値の降順にソートしてもよい。グループ0内並替部350Dは、並べ替えた頻度エントリ310D~313Dをルーティング部36Dに出力する。
【0235】
なお、最上位のグループ0に対しては、その上位にグループがないので、上位に隣接するグループとの間の頻度エントリのスワップが行われない。そのため、グループ0内並替部350Dは、最小の頻度値を含む頻度エントリが最下位に位置するように、頻度エントリ310D~313Dを並べ替えてもよい。つまり、並べ替えた頻度エントリ310D~313Dにおいて、最大の頻度値を含む頻度エントリが最上位に位置していなくてもよい。
【0236】
グループ1内並替部351Dは、グループ1に属する頻度エントリ314D~317Dを、頻度値を用いて並べ替える。グループ1内並替部351Dは、頻度エントリ314D~317Dのうち、最大の頻度値を含む頻度エントリが最上位に位置し、最小の頻度値を含む頻度エントリが最下位に位置するように、頻度エントリ314D~317Dを並べ替える。なお、グループ1内並替部351Dは、頻度エントリ314D~317Dを頻度値の降順にソートしてもよい。グループ1内並替部351Dは、並べ替えた頻度エントリ314D~317Dをルーティング部36Dに出力する。
【0237】
グループ(K-1)内並替部352Dは、グループ(K-1)に属する頻度エントリ318D~321Dを、頻度値を用いて並べ替える。グループ(K-1)内並替部352Dは、頻度エントリ318D~321Dのうち、最大の頻度値を含む頻度エントリが最上位に位置し、最小の頻度値を含む頻度エントリが最下位に位置するように、頻度エントリ318D~321Dを並べ替える。また、グループ(K-1)内並替部352Dは、頻度エントリ318D~321Dを頻度値の降順にソートしてもよい。グループ(K-1)内並替部352Dは、並べ替えた頻度エントリ318D~321Dをルーティング部36Dに出力する。
【0238】
なお、最下位のグループ(K-1)に対しては、その下位にグループがないので、下位に隣接するグループとの間の頻度エントリのスワップが行われない。そのため、グループ(K-1)内並替部352Dは、最大の頻度値を含む頻度エントリが最上位に位置するように、頻度エントリ318D~321Dを並べ替えてもよい。つまり、並べ替えた頻度エントリ318D~321Dにおいて、最小の頻度値を含む頻度エントリが最下位に位置していなくてもよい。
【0239】
ルーティング部36Dは、隣接するグループ間で頻度エントリをスワップ(交換)する。つまり、ルーティング部36Dは、あるグループの頻度エントリと、このグループに隣接する別のグループの頻度エントリとを並べ替える。並べ替えられる2つの頻度エントリは、例えばグループを跨って隣接(連続)している。
【0240】
具体的には、ルーティング部36Dは、グループ0の最下位の頻度エントリと、グループ0の下位に隣接するグループ1の最上位の頻度エントリとを交換して出力する。ルーティング部36Dは、グループ1の最下位の頻度エントリと、グループ1の下位に隣接するグループ(例えばグループ(K-1))の最上位の頻度エントリとを交換して出力する。また、ルーティング部36Dは、スワップの対象ではない他の頻度エントリをそのまま出力する。なお、ルーティング部36Dによって交換される頻度エントリは、前述した例に限定されず、例えばルーティング部36Dの構成を書き換えるためのインタフェースを介して、任意に指定されてもよい。つまり、ルーティング部36Dによるルーティングの動作は、このインタフェースを介して、任意に変更されてもよい。
【0241】
ルーティング部36Dによって出力された、ある順序にソート(In-Place Sort)された頻度エントリ群31Dは、符号表に書き戻される。この符号表は、次のシンボル入力に応じて、入力シンボルを符号化するために用いられると共に、さらに更新される。つまり、ルーティング部36Dによって出力された頻度エントリ群31Dは、次のシンボル入力の際の、頻度値削減変換部33Dへの入力となる。符号表更新部130Dではシンボル入力毎に、このような符号表の更新が行われる。
【0242】
上記の構成によって、第1実施形態と同様の効果を得ることができる。さらに、頻度値削減変換部33Dは、符号表の更新を待つことなく、カウントした入力シンボル数を用いて頻度値削減の要否を判定し、入力シンボル数が閾値以上である場合に各頻度エントリ31D内の頻度値を削減する。また、グループ内並替部35Dとルーティング部36Dとは、グループ毎の頻度エントリの局所的なソートと、隣接するグループ間での頻度エントリのスワップを行う。これにより、適応型エントロピー符号化のスループットを向上しつつ、回路規模を小さくできる。さらに、上記のような回路において、符号表更新部130Dに入力される頻度エントリが空である空サイクルが発生した場合、当該空サイクルを検出して上記のソート処理を行うことで、当該ソート処理の回数を多くすることができ、ソート処理の結果がより正確なソート結果に近づく。これにより符号化効率の高い符号表を得ることができる。
【0243】
以上、本発明について図面を参照しながら説明したが、本発明は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、本実施形態の圧縮・伸張回路を基にして、当業者が適宜構成要素の追加、削除もしくは設計変更を行ったものも、本発明の要旨を備えている限り、本発明の範囲に含まれる。さらに、上述した各実施形態は、相互に矛盾がない限り適宜組み合わせが可能であり、各実施形態に共通する技術事項については、明示の記載がなくても各実施形態に含まれる。
【0244】
上述した各実施形態の態様によりもたらされる作用効果とは異なる他の作用効果であっても、本明細書の記載から明らかなもの、又は、当業者において容易に予測し得るものについては、当然に本発明によりもたらされるものと解される。
【符号の説明】
【0245】
1:メモリシステム、 10:メモリコントローラ、 11:プロセッサ、 12:RAM、 13:ROM、 14:ランダマイザ、 15:ECC回路、 16:圧縮・伸張回路、 17:ホストI/F、 18:メモリI/F、 19:内部バス、 20:不揮発性メモリ、 30:ホスト、 31D:頻度エントリ、 33D:頻度値削減変換部、 34D:頻度値更新部、 35D:グループ内並替部、 36D:ルーティング部、 100:符号化部、 101:入力端子、 103:出力端子、 110:シンボルバッファ、 111:データ保持部、 112:デマルチプレクサ、 113:マルチプレクサ、 114:ライトポインタ、 115:リードポインタ、 120:シンボル数算出部、 121:辞書式仮復号部、 122:消費シンボル数算出部、 123:出力シンボル選択部、 124A:近似計算部、 130:符号表更新部、 140:符号化論理部、 150:パック部、 180C:第1遅延バッファ、 185D:第1空サイクル検出部、 190:符号化用フロー制御部、 200:復号部、 201:入力端子、 203:出力端子、 210:シンボルバッファ、 211:データ保持部、 212:デマルチプレクサ、 213:マルチプレクサ、 214:ライトポインタ、 215:リードポインタ、 220:シンボル数算出部、 221:辞書式仮復号部、 222:消費シンボル数算出部、 223:出力シンボル選択部、 230:符号表更新部、 231:アドレスデコーダ、 232:加算器、 233:マルチプレクサ、 240:復号論理部、 250:アンパック部、 260A:符号語数算出部、 261A:近似計算部、 262A:消費符号語数算出部、 263A:出力符号語選択部、 270B:エントリ番号抽出部、 280C:第2遅延バッファ、 285D:第2空サイクル検出部、 290:復号用フロー制御部、 300:辞書式圧縮部、 310D、313D、314D、317D、318D、321D:頻度エントリ、 350D、351D、352D:グループ内並替部、 400:辞書式伸張部、 500B、510B、520B、530B、540B、550B:符号表
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18