(57)【特許請求の範囲】
【請求項１】
過去の入力データによる第１のデータ列と、現在の入力データによる第２のデータ列とを比較し、該第２のデータ列に含まれるデータ列と最大長で一致する第３のデータ列が該第１のデータ列内に存在する場合に、該第３のデータ列の該第１のデータ列中の位置を示すアドレス値と、該第３のデータ列の長さを示すレングス値とで符号化し、該第２のデータ列が該第１のデータ列と一致する部分を含まない場合に、該第２のデータ列を構成するデータ値そのものを符号として符号化した符号化データを復号するデータ処理装置であって、
前記符号化データを解析して前記アドレス値、前記レングス値および前記データ値を出力し、複数の該データ値が連続している場合に該複数のデータ値を同時に出力する解析手段と、
それぞれ１のデータ値を記憶可能な直列接続された複数の記憶手段を備え、前記複数の記憶手段に含まれる各記憶手段は、前記解析手段から出力されるｐ個のデータ値を該直列接続の一方の端から連続して接続されるｐ個の該記憶手段に対してそれぞれ同時に記憶し、該複数の記憶手段に記憶されるデータ値をそれぞれｐ個分、該直列接続の他方の端側の記憶手段に向けて同時に移動させるスライド記憶手段と、
前記複数の記憶手段のうち、連続して接続される、前記レングス値に対応する個数の前記記憶手段を、前記アドレス値に対応する該記憶手段を基点として前記一方の端側へ向けて選択し、選択された該記憶手段からデータ値を同時に読み出して前記符号化データが復号された出力データ値として出力する選択手段と
を有する
ことを特徴とするデータ処理装置。
【請求項２】
前記スライド記憶手段は、
前記記憶手段が、
ｐ入力１出力のデータ値入力選択手段と、
前記データ値入力選択手段の出力が接続され、前記データ値が記憶されるデータ値記憶手段と
を備え、
前記データ値記憶手段の出力が、前記選択手段に接続されると共に、
該データ値記憶手段を備える前記記憶手段からｑ番目（ｑは１以上ｐ以下の整数）の前記記憶手段が備える前記データ値入力選択手段のｑ番目の入力に接続され、
前記解析手段から同時にｑ個の前記データ値が出力されるとき、前記複数の記憶手段のそれぞれで、前記データ値入力選択手段のｑ番目の入力を選択する
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記解析手段から出力されるデータ値と、前記選択手段から出力されるデータ値とのうち一方を選択する出力選択手段と、
前記出力選択手段から出力されるデータ値と、前記解析手段から出力されるデータ値とのうち一方を選択する入力選択手段と、
前記解析手段から前記アドレス値および前記レングス値が出力される場合と、前記データ値が出力される場合とで選択を切り替えるように前記出力選択手段と前記入力選択手段とを制御する制御手段と
をさらに有する
ことを特徴とする請求項１または請求項２に記載のデータ処理装置。
【請求項４】
前記制御手段は、
前記解析手段から前記データ値が出力される場合に、該解析手段からの出力を選択するように前記入力選択手段および前記出力選択手段を制御し、
前記解析手段から前記アドレス値および前記レングス値が出力される場合に、前記選択手段の出力を選択するように前記出力選択手段を制御すると共に該出力選択手段の出力を選択するように前記入力選択手段を制御する
ことを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
過去の入力データによる第１のデータ列と、現在の入力データによる第２のデータ列とを比較し、該第２のデータ列に含まれるデータ列と最大長で一致する第３のデータ列が該第１のデータ列内に存在する場合に、該第３のデータ列の該第１のデータ列中の位置を示すアドレス値と、該第３のデータ列の長さを示すレングス値とで符号化し、該第２のデータ列が該第１のデータ列と一致する部分を含まない場合に、該第２のデータ列を構成するデータ値そのものを符号として符号化した符号化データを復号するデータ処理方法であって、
解析手段が、前記符号化データを解析して前記アドレス値、前記レングス値および前記データ値を出力し、複数の該データ値が連続している場合に該複数のデータ値を同時に出力する解析ステップと、
スライド記憶手段が、それぞれ１のデータ値を記憶可能な直列接続された複数の記憶手段を備え、前記複数の記憶手段に含まれる各記憶手段は、前記解析ステップにより出力されるｐ個のデータ値を該直列接続の一方の端から連続して接続されるｐ個の該記憶手段に対してそれぞれ同時に記憶し、該複数の記憶手段に記憶されるデータ値をそれぞれｐ個分、該直列接続の他方の端側の記憶手段に向けて同時に移動させるスライド記憶ステップと、
選択手段が、前記複数の記憶手段のうち、連続して接続される、前記レングス値に対応する個数の前記記憶手段を、前記アドレス値に対応する該記憶手段を基点として前記一方の端側へ向けて選択し、選択された該記憶手段からデータ値を同時に読み出して前記符号化データが復号された出力データ値として出力する選択ステップと
を有する
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＬＺ７７系の符号化方式による符号化データを復号するデータ処理装置およびデータ処理方法に関する。
【背景技術】
【０００２】
データを効率よく圧縮する方法として、ユニバーサル符号により圧縮する方法が実用化されている。このユニバーサル符号は、情報保存型のデータ圧縮方法であり、データ圧縮時に情報源の統計的な性質を予め仮定しないため、種々のタイプ（文字コード、オブジェクトコードなど）のデータに適用することができる。
【０００３】
ユニバーサル符号の代表的な方法として、ジブ−レンペル(Ziv-Lempel)符号がある。Ziv-Lempel符号では、ユニバーサル型と、増分分解型(Incremental parsing) の２つのアルゴリズムが提案されている。これらのうち、ユニバーサル型アルゴリズムを用いた実用的な方法として、ＬＺＳＳ(Lempel-Ziv-Storer-Syzmanski)符号がある。一方、増分分解型アルゴリズムを用いた実用的な方法として、ＬＺＷ(Lempel-Ziv-Welch)符号がある。
【０００４】
ＬＺＳＳ符号のベースとなるＬＺ７７符号の符号化アルゴリズムは、符号化データを、過去のデータ系列の任意の位置から一致する最大長の系列に区切り、過去の系列の複製として符号化する。
【０００５】
より具体的には、符号化済みの入力データを格納する移動窓と、これから符号化するデータを格納する先読みバッファとを備え、先読みバッファのデータ系列と移動窓のデータ系列の全ての部分系列とを照合して、移動窓中で一致する最大長の部分系列を求める。そして、移動窓中でこの最大長の部分系列を指定するために、「その最大長の部分系列の開始位置」と「一致する長さ」と「不一致をもたらした次のシンボル」との組を符号化する。次に、先読みバッファ内の符号化したデータ系列を移動窓に移して、先読みバッファ内に符号化したデータ系列分の新たなデータ系列を入力する。以下、同様の処理を繰り返していくことで、データを部分系列に分解して符号化を実行していく。
【０００６】
一般的に、ＬＺＳＳ符号化は、符号化済の入力データを保存している移動窓数分、入力データ列との最長一致を検出する必要があるため、演算量が多くなる一方で、高圧縮率が得られるといわれている。
【０００７】
また、ＬＺＷ符号の符号化アルゴリズムは、書き換え可能な辞書を設け、入力文字列を相異なる文字列に分け、この文字列を出現した順に番号を付けて辞書に登録すると共に、現在入力している文字列を辞書に登録してある最長一致文字列の辞書番号だけで表す。このＬＺＷ符号によれば、圧縮率がＬＺＳＳ符号より劣る一方で、シンプルで計算が容易であり、高速処理が可能である。そのため、記憶装置におけるファイル圧縮、データ伝送などで多く使われる。
【０００８】
このようなＬＺ符号の復号方式も、従来から、様々に提案および実用化されている。例えば、特許文献１には、図１４に示されるように、入力データバッファ３２、復号手段３３、出力データバッファ３４およびずらし量取得手段３５から構成される復号装置３１が開示されている。復号手段３３は、符号化データから一致開始位置と一致長を取得し、ずらし量取得手段３５により取得されたずらし量Ｚ分をずらした後の、入力データバッファ３１の、復号済みデータが格納されるＰバッファ（移動窓）から、一致長に対応する復号済みデータの部分列を復号データとして出力する。
【０００９】
この特許文献１によれば、復号は、８個分のフラグビットの集まりである１バイトデータのフラグの中から、フラグビットを１ビットずつ処理し、このフラグビットに基づきシリアルに復号処理が行われる。
【００１０】
また、特許文献２には、辞書をＳＲＡＭ(Static Random Access Memory)に格納し、移動窓をＳＲＡＭで構成したデコーダ回路が開示されている（当該特許文献２の図１参照）。特許文献２では、ＳＲＡＭに対するリード／ライトのタイミング制御を工夫することで、最大で１データ／クロックの処理速度の達成を図っている。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１では、復号処理がシリアルに行われるため、処理速度が最大で１データ／クロックに制限されてしまうことになる。そのため、処理を高速化しようとする場合、クロック周波数を高くする必要がある。しかしながら、特に、回路をＡＳＩＣ(Application Specific Integrated Circuit)に組み込んで構成する場合、消費電力の増大や発熱などにより、クロック周波数を高くすることが困難であるという問題点があった。
【００１２】
特許文献２についても、処理を高速化するためにはクロック周波数を高くする必要があり、特許文献１の場合と同様の問題点があった。
【００１３】
本発明は、上記に鑑みてなされたものであって、ＬＺ７７系の符号化方式による符号化データをより高速に復号可能なデータ処理装置およびデータ処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するために、本発明は、過去の入力データによる第１のデータ列と、現在の入力データによる第２のデータ列とを比較し、第２のデータ列に含まれるデータ列と最大長で一致する第３のデータ列が第１のデータ列内に存在する場合に、第３のデータ列の第１のデータ列中の位置を示すアドレス値と、第３のデータ列の長さを示すレングス値とで符号化し、第２のデータ列が第１のデータ列と一致する部分を含まない場合に、第２のデータ列を構成するデータ値そのものを符号として符号化した符号化データを復号するデータ処理装置であって、符号化データを解析してアドレス値、レングス値およびデータ値を出力し、複数のデータ値が連続している場合に複数のデータ値を同時に出力する解析手段と、それぞれ１のデータ値を記憶可能な直列接続された複数の記憶手段を備え、複数の記憶手段に含まれる各記憶手段は、解析手段から出力されるｐ個のデータ値を直列接続の一方の端から連続して接続されるｐ個の記憶手段に対してそれぞれ同時に記憶し、複数の記憶手段に記憶されるデータ値をそれぞれｐ個分、直列接続の他方の端側の記憶手段に向けて同時に移動させるスライド記憶手段と、複数の記憶手段のうち、連続して接続される、レングス値に対応する個数の記憶手段を、アドレス値に対応する記憶手段を基点として一方の端側へ向けて選択し、選択された記憶手段からデータ値を同時に読み出して符号化データが復号された出力データ値として出力する選択手段とを有することを特徴とする。
【００１５】
また、本発明は、過去の入力データによる第１のデータ列と、現在の入力データによる第２のデータ列とを比較し、第２のデータ列に含まれるデータ列と最大長で一致する第３のデータ列が第１のデータ列内に存在する場合に、第３のデータ列の第１のデータ列中の位置を示すアドレス値と、第３のデータ列の長さを示すレングス値とで符号化し、第２のデータ列が第１のデータ列と一致する部分を含まない場合に、第２のデータ列を構成するデータ値そのものを符号として符号化した符号化データを復号するデータ処理方法であって、解析手段が、符号化データを解析してアドレス値、レングス値およびデータ値を出力し、複数のデータ値が連続している場合に複数のデータ値を同時に出力する解析ステップと、スライド記憶手段が、それぞれ１のデータ値を記憶可能な直列接続された複数の記憶手段を備え、複数の記憶手段に含まれる各記憶手段は、解析ステップにより出力されるｐ個のデータ値を直列接続の一方の端から連続して接続されるｐ個の記憶手段に対してそれぞれ同時に記憶し、複数の記憶手段に記憶されるデータ値をそれぞれｐ個分、直列接続の他方の端側の記憶手段に向けて同時に移動させるスライド記憶ステップと、選択手段が、複数の記憶手段のうち、連続して接続される、レングス値に対応する個数の記憶手段を、アドレス値に対応する記憶手段を基点として一方の端側へ向けて選択し、選択された記憶手段からデータ値を同時に読み出して符号化データが復号された出力データ値として出力する選択ステップとを有することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、ＬＺ７７系の符号化方式による符号化データをより高速に復号することができるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】図１は、本発明に係るデータ処理装置を適用可能なプリンタ装置の一例の構成を示すブロック図である。
【図２】図２は、エンコーダの一例の構成を概略的に示すブロック図である。
【図３】図３は、符号フォーマットの例を示す略線図である。
【図４】図４は、本発明の実施形態に係るデコーダの一例の構成を概略的に示すブロック図である。
【図５】図５は、デコーダの一例の構成をより詳細に示すブロック図である。
【図６】図６は、符号フォーマット解析部における一例の符号フォーマット解析処理を示すフローチャートである。
【図７】図７は、スライド展開部の一例の構成を示すブロック図である。
【図８】図８は、スライド記憶部の一例のハードウェア構成を示す回路図である。
【図９】図９は、スライド展開部における処理の概略を示す一例のフローチャートである。
【図１０】図１０は、スライド展開部におけるＰＡＳＳ符号に対する一例の処理を示すフローチャートである。
【図１１】図１１は、スライド展開部におけるスライド符号に対する一例の処理を示すフローチャートである。
【図１２】図１２は、スライド展開部における入出力と各スライド３５１mの状態の例を示す略線図である。
【図１３】図１３は、従来技術による、各スライドに対するデータの書き込みや、各スライドからのデータの読み出しを、スライド毎に逐次的に行う場合の一例の処理を示す略線図である。
【図１４】図１４は、従来技術による復号装置の一例の構成を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下に添付図面を参照して、この発明に係るデータ処理装置の一実施形態を詳細に説明する。図１は、本発明に係るデータ処理装置を適用可能なプリンタ装置２００の一例の構成を示す。図１の例では、プリンタ装置２００は、制御部２３０、メインメモリ２１０、プリンタエンジン２１１および不揮発性のメモリであるフラッシュメモリ２４０を備える。フラッシュメモリ２４０は、プリンタ装置２００に内蔵されていてもよいし、プリンタ装置２００に対して脱着可能とされていてもよい。
【００１９】
制御部２３０は、ＣＰＵ(Central Processing Unit)２００、ＣＰＵ  Ｉ／Ｆ２０１、メインメモリアービタ２０２、メモリコントローラ２０３、符号化部２０４、復号部２０５、階調処理部２０６、エンジンコントローラ２０７、フラッシュメモリコントローラ２４１、エンコーダ２４２およびデコーダ２４３を含む。
【００２０】
ＣＰＵ２１２は、メインメモリ２１０に格納されるプログラムに従い、このカラープリンタ２００の全体の動作を制御する。ＣＰＵ２１２は、ＣＰＵ  Ｉ／Ｆ２０１を介してメインメモリアービタ２０２に接続される。メインメモリアービタ２０２は、ＣＰＵ２１２、符号化部２０４、復号部２０５、通信コントローラ２０８、フラッシュメモリコントローラ２４１、エンコーダ２４２およびデコーダ２４３の、メインメモリ２１０に対するアクセスを調停する。
【００２１】
メインメモリ２１０は、メモリコントローラ２０３を介してメインメモリアービタ２０２に接続される。メモリコントローラ２０３は、メインメモリ２１０に対するアクセスの制御を行う。
【００２２】
メインメモリ２１０は、プログラム領域２１０Ａ、ＰＤＬデータ格納領域２１０Ｂ、ＣＭＹＫバンドデータ格納領域２１０Ｃ、ＣＭＹＫページ符号格納領域２１０Ｄおよびその他の領域２１０Ｅを有する。プログラム領域２１０Ａは、ＣＰＵ２１２が動作するためのプログラムが格納される。ＰＤＬデータ格納領域２１０Ｂは、例えばコンピュータ２２０から供給されたＰＤＬデータが格納される。ＣＭＹＫバンドデータ格納領域２１０Ｃは、ＣＭＹＫバンドデータが格納される。ＣＭＹＫページ符号格納領域２１０Ｄは、バンドデータが圧縮符号化された符号化データが格納される。領域２１０Ｅは、上述した以外のデータが格納される。
【００２３】
符号化部２０４は、メインメモリ２１０に格納されるバンドデータを符号化する。符号化されたバンドデータは、メインメモリアービタ２０２およびメモリコントローラ２０３を介してメインメモリ２１０に供給され、ＣＭＹＫページ符号格納領域２１０Ｄに書き込まれる。復号部２０５は、後述するプリンタエンジン２１１に同期して、符号化部２０４で符号化されメインメモリ２１０に書き込まれた符号化バンドデータをメインメモリ２１０から読み出して復号する。復号されたバンドデータは、階調処理部２０６に供給される。階調処理部２０６は、復号部２０５から供給されたバンドデータに対して階調処理を施してエンジンコントローラ２０７に転送する。
【００２４】
エンジンコントローラ２０７は、プリンタエンジン２１１を制御する。図１では、プリンタエンジン２１１としてＣＭＹＫ各色の版のうち１の版のものだけが記載され、その他の版については煩雑さを避けるために省略されている。
【００２５】
通信コントローラ２０８は、ネットワークを介しての通信を制御する。例えば、コンピュータ２２０から出力されたＰＤＬ(Page Description Language)データは、ネットワークを介して通信コントローラ２０８により受信される。通信コントローラ２０８は、受信したＰＤＬデータを、メインメモリアービタ２０２およびメインメモリコントローラ２０３を介してメインメモリ２１０に転送する。
【００２６】
なお、ネットワークは、ＬＡＮ(Local Area Network)などの所定の範囲内で通信を行うものでもよいし、インターネットなどより広範囲に通信可能なものでもよい。また、ネットワークは、有線通信に限らず無線通信を用いたものでもよいし、ＵＳＢ(Universal Serial Bus)やＩＥＥＥ(Institute Electrical and Electronics Engineers)１３９４といったシリアル通信を行うものでもよい。
【００２７】
フラッシュメモリ２４０は、ＣＰＵ２１２上で動作するためのプログラムや、当該プログラムに用いられる各種データが、本実施形態に適用される圧縮符号化方法により圧縮符号化されて格納される。例えば、このプリンタ装置２００に対して追加される機能を実現するためのプログラムが圧縮符号化されて、フラッシュメモリ２４０に格納される。これに限らず、このプリンタ装置２００の基本的な動作を実現するためのプログラムを、圧縮符号化してフラッシュメモリ２４０に格納してもよい。フラッシュメモリコントローラ２４１は、フラッシュメモリ２４０に対するアクセスの制御を行う。
【００２８】
エンコーダ２４２は、本実施形態に適用される圧縮符号化方法により、データの圧縮符号化を行う。また、デコーダ２４３は、当該圧縮符号化方法により圧縮符号化された圧縮データを、本実施形態による復号方法を用いて復号する。
【００２９】
このような構成において、例えば電源ＯＮなどプリンタ装置２００の起動時に、ＣＰＵ２１２の指示に従い、フラッシュメモリコントローラ２４１によりフラッシュメモリ２４０から圧縮符号化されたデータが読み出される。この圧縮データは、例えばプログラム（プログラムデータ）や各種データが圧縮符号化されたものである。読み出された圧縮データは、メモリアービタ２０２を介してデコーダ２４３に供給される。
【００３０】
デコーダ２４３は、供給された圧縮データを本実施形態の復号方法により復号し、圧縮符号を伸張する。圧縮符号が伸張されたプログラムデータや各種データは、メモリアービタ２０２およびメインメモリコントローラ２０３を介してメインメモリ２１０に供給され、プログラム領域２１０Ａに格納される。
【００３１】
一方、例えばプリンタ装置２００の電源ＯＦＦなど動作終了時には、ＣＰＵ２１２の指示に従い、メインメモリコントローラ２０３により、メインメモリ２１０からプログラムデータや各種データが読み出される。読み出されたこれらプログラムデータや各種データは、メインメモリアービタ２０２を介してエンコーダ２４２に供給される。
【００３２】
エンコーダ２４２は、供給されたプログラムデータや各種データを、本実施形態に適用される圧縮符号化方法を用いてそれぞれ圧縮符号化する。圧縮符号化された圧縮データは、メインメモリアービタ２０２を介してフラッシュメモリコントローラ２４１に供給され、フラッシュメモリ２４０に格納される。
【００３３】
フラッシュメモリ２４０は、メインメモリ２１０に用いられるＤＲＡＭ(Dynamic Random Access Memory)などに比べ、アクセス速度が遅い。そのため、このようにフラッシュメモリ２４０に格納されるデータを圧縮符号化してデータサイズを小さくし、アクセス速度の遅さを補う。
【００３４】
プリンタ装置２００の全体的な動作について、概略的に説明する。例えばコンピュータ２２０で生成されたＰＤＬデータがネットワークを介して通信コントローラ２０８に受信され、メインメモリ２１０のＰＤＬデータ格納領域２１０Ｂに記憶される。ＣＰＵ２１２は、メインメモリ２１０のＰＤＬデータ格納領域２１０ＢからＰＤＬデータを読み出し、ＰＤＬを解析して、解析結果に基づきＣＭＹＫのバンド画像を描画する。描画されたＣＭＹＫのバンド画像によるＣＭＹＫバンドデータは、メインメモリ２１０のＣＭＹＫバンドデータ格納領域２１０Ｃに格納される。
【００３５】
符号化部２０４は、ＣＭＹＫバンドデータ格納領域２１０ＣからＣＭＹＫバンドデータを読み出して、例えば予測符号化を用いて符号化する。ＣＭＹＫバンドデータが符号化された符号化データは、メインメモリ２１０のＣＭＹＫページ符号格納領域２１０Ｄに格納される。
【００３６】
復号部２０５は、ＣＭＹＫページ符号格納領域２１０ＤからＣＭＹＫバンドデータが符号化された符号化データを読み出して復号し、復号されたＣＭＹＫバンドデータを階調処理部２０６に供給する。階調処理部２０６は、復号部２０５から供給されたＣＭＹＫバンドデータに対して階調処理を施す。階調処理されたＣＭＹＫバンドデータは、プリンタエンジンコントローラ２０７を介してプリンタエンジン２１１に供給される。プリンタエンジン２１１は、供給されたＣＭＹＫバンドデータに基づきプリントアウトを行う。
【００３７】
＜エンコーダ＞
図２は、エンコーダ２４２の一例の構成を概略的に示す。エンコーダ２４２において、データ読み込み部３００により、メインメモリ２１０のプログラム領域２１０Ａから、プログラムデータや各種データ（以降、纏めてデータと呼ぶ）がメインメモリコントローラ２０３およびメモリアービタ２０２を介して読み出される。データ読み込み部３００に読み込まれたデータは、スライド／リスト生成処理部３０１に供給される。スライド／リスト生成処理部３０１は、入力されたデータ（原データ）を、ＬＺ７７系の符号化方式を用いて符号化する。
【００３８】
スライド／リスト生成処理部３０１は、入力されたデータを順次記憶するＦＩＦＯ方式のスライド記憶部を有する。スライド／リスト生成処理部３０１は、供給されたデータとスライド記憶部に記憶された過去の入力データとを順次比較する。そして、供給されたデータと過去の入力データとが一致した場合には、当該過去の入力データのスライド記憶部内の位置を示すアドレス値Addressと、一致した長さを示す値であるレングスLengthとで符号化する。両者が一致しない場合には、データ値そのものをＰＡＳＳ符号として符号化する。そして、これらＰＡＳＳ符号と、アドレス値AddressおよびレングスLengthと、両者が一致したか否かを示す一致フラグFLAGとを出力する。
【００３９】
このようにして符号化された符号化データは、原データ列中の２以上のデータ値を含む第１のデータ列と一致する原データ列中の第２のデータ列の第１のデータ列に対する位置を示すアドレス値と、第２のデータ列の長さを示すレングス値と、原データ列中に一致する他のデータ列が存在しない第３のデータ列および第１のデータ列を構成するデータ値とを含むことになる。
【００４０】
スライド／リスト生成処理部３０１のから出力された各値は、符号フォーマット生成処理部３０２に供給される。符号フォーマット生成処理部３０２は、供給されたＰＡＳＳ符号、アドレス値Address、レングスLengthおよび一致フラグFLAGとを、図３に例示されるようなフォーマットで符号化する。
【００４１】
図３において、ＰＡＳＳ符号は、データ長が１ビットで値が「０」の一致フラグFLAGをヘッダとして、後に８ビットのデータ長を持つデータ値が接続されてなる。スライド符号は、データ長が１ビットで値が「１」の一致フラグFLAGをヘッダとして、その後に、それぞれデータ長が８ビットのレングスLengthおよびアドレス値Addressが順次接続される。
【００４２】
符号フォーマット生成処理部３０２で生成されたＰＡＳＳ符号およびスライド符号は、符号書き込み部３０３に供給される。符号書き込み部３０３は、供給されたＰＡＳＳ符号およびスライド符号を、メインメモリアービタ２０２およびフラッシュメモリコントローラ２４１を介してフラッシュメモリ２４０に書き込む。
【００４３】
＜本発明の実施形態に係るデコーダ＞
図４は、本発明の実施形態に係るデコーダ２４３の一例の構成を概略的に示す。デコーダ２４３において、符号読み込み部４００により、上述したエンコーダ２４２で符号化された符号化データがフラッシュメモリ２４０から読み込まれる。符号読み込み部４００に読み込まれた符号化データは、符号フォーマット解析部４０１に供給される。
【００４４】
符号フォーマット解析部４０１は、図３を用いて説明した符号フォーマットに従い、供給された符号化データを解釈してデータ値、または、アドレス値AddressおよびレングスLengthを取り出すと共に、一致フラグFLAGを取り出す。取り出されたこれらのデータは、スライド展開部４０２に供給される。このとき、符号フォーマット解析部４０１は、複数のデータ値を同時に出力し、スライド展開部４０２に供給することができる。
【００４５】
スライド展開部４０２は、直列的に接続されＦＩＦＯ(First In First Out)構成とされた複数のレジスタを含む、スライド記憶部を持つ。各レジスタは、スライドと呼ばれ、それぞれ１単位（例えば１バイト）のデータを格納可能とされる。スライド展開部４０２は、供給されたデータ値、アドレス値Address、レングスLengthおよび一致フラグFLAGに基づき、スライド記憶部における各スライドに対してデータを展開し、符号化データを復号する。スライド展開部４０２は、符号フォーマット解析部４０１から同時に供給された一組のデータに対する処理が終了すると、その旨を符号フォーマット解析部４０１に通知する。スライド展開部４０２で復号されたデータは、データ書き込み部４０３に供給され、メインメモリ２１０のプログラム領域２１０Ａに書き込まれる。
【００４６】
図５は、デコーダ２４３の一例の構成をより詳細に示す。メインメモリアービタＩ／Ｆ１００は、メインメモリアービタ２０２に対するインターフェイスである。メインメモリアービタＩ／Ｆ１００は、メインメモリアービタ２０２に対して書き込み／読み出し要求やメモリアドレスを送信することで、メインメモリ２１０へのデータの書き込み、メインメモリ２１０からのデータの読み出しなどを行う。
【００４７】
符号読み込み部４００は、符号アドレス生成部１０２で生成されたアドレス情報に基づきメインメモリアービタＩ／Ｆ１００に対してメモリアドレスを送信する。メインメモリアービタＩ／Ｆ１００は、符号読み込み部４００から送信されたメモリアドレスに基づき、メインメモリ２１０のプログラム領域２１０Ａから符号化データを読み出すように、メインメモリアービタ２０２に対して要求する。この要求に応じてメインメモリ２１０のプログラム領域２１０Ａから読み出された符号化データが、メインメモリアービタＩ／Ｆ１００に受信され、符号読み込み部４００に供給される。符号読み込み部４００は、受信した符号化データを、例えばビット列として符号フォーマット解析部４０１に転送する。
【００４８】
符号フォーマット解析部４０１は、符号読み込み部４００から転送された符号化データを、図３に示した符号フォーマットに従い解析して、ＰＡＳＳ符号およびスライド符号を抽出する。そして、抽出したＰＡＳＳ符号をデータ値として出力する。また、符号フォーマット解析部４０１は、スライド符号からレングスLengthおよびアドレス値Addressをそれぞれ取り出して出力する。
【００４９】
ここで、符号フォーマット解析部４０１は、符号化データからｐ個（ｎは１以上の整数）のＰＡＳＳ符号が連続的に抽出された場合に、このｐ個のＰＡＳＳ符号によるデータ値を、１のタイミングで、同時並列的に出力することができる。図５の例では、ｐ＝４とされ、４のデータ値Ａ〜Ｄを同時に出力可能とされている。
【００５０】
一例として、符号フォーマット解析部４０１は、符号読み込み部４００から供給された符号化データによるビット列をビット毎にレジスタに格納する。そして、例えば論理回路を組み合わせた構成を用いて、レジスタに格納されたビット列から一致フラグFLAGを抽出し、抽出された一致フラグFLAGに基づきＰＡＳＳ符号が連続しているか否かを判定する。ＰＡＳＳ符号が連続していると判定された場合に、これら連続しているＰＡＳＳ符号によるデータ値をレジスタから同時に読み出させる。
【００５１】
符号フォーマット解析部４０１は、同時に出力するデータ値の数をデータ数として出力する。また、符号フォーマット解析部４０１は、１のタイミングに出力されるデータがＰＡＳＳ符号によるデータ値か、スライド符号によるレングスLengthおよびアドレス値Addressかを示す一致フラグFLAGを出力する。
【００５２】
図６は、符号フォーマット解析部４０１における一例の符号フォーマット解析処理を示すフローチャートである。先ず、ステップＳ１００で、ヘッダの読み込みを制御するためのフラグHFLGの値が「０」に初期化される。次のステップＳ１０１で、フラグHFLGの値が「０」であるか否かが判定される。
【００５３】
若し、フラグHFLGの値が「０」であると判定されたら、符号化データのヘッダを読み込むために、処理がステップＳ１０２に移行される。ステップＳ１０２では、符号読み込み部４００から供給された符号化データから、ヘッダである先頭の１ビットを読み込み、処理がステップＳ１０３に移行される。一方、ステップＳ１０１でフラグHFLGの値が「０」ではないと判定されたら、処理は直接的にステップＳ１０３に移行され、ヘッダの読み込みが行われない。
【００５４】
ステップＳ１０３では、ヘッダの値がＰＡＳＳ符号を示しているか否かを判定する。若し、ＰＡＳＳ符号ではないと判定されたら、処理はステップＳ１０４に移行される。この場合、ヘッダに続く符号化データはスライド符号であるので、ヘッダ直後から１６ビットを読み出し、スライド符号によるレングスLengthおよびアドレス値Addressを読み込む。処理はステップＳ１０５に移行され、一致フラグFLAGの値が「２」とされると共に、レングスLengthおよびアドレス値Addressをスライド展開部４０２に供給する。そして、次のステップＳ１０６でフラグHFLGの値が「０」とされて処理がステップＳ１３７に移行される。
【００５５】
一方、ステップＳ１０３で、読み込んだヘッダの値がＰＡＳＳ符号を示していると判定されたら、処理はステップＳ１１０に移行される。ステップＳ１１０では、ヘッダ直後から８ビットを読み出し、ＰＡＳＳ符号によるデータ値を読み込む。このステップＳ１０３で読み込まれたデータ値を、データ値Ａとする。
【００５６】
次のステップＳ１１１で、次のヘッダが読み込まれる。すなわち、ステップＳ１１１では、ステップＳ１１０で読み込まれたＰＡＳＳ符号の直後の１ビットが読み出される。次のステップＳ１１２で、読み込まれたヘッダがＰＡＳＳ符号を示しているか否かを判定する。これにより、２のＰＡＳＳ符号が連続しているか否かを判定できる。若し、ＰＡＳＳ符号を示していないと判定されたら、処理はステップＳ１３０に移行され、データ数の値が「１」とされる。そして、処理がステップＳ１３３に移行される。
【００５７】
ステップＳ１３３では、フラグHFLGの値が「１」とされ、後述するステップＳ１３８の判定で処理がステップＳ１０１に戻された際に、ヘッダを読まないことが示される。すなわち、ステップＳ１１２、ステップＳ１１５またはステップＳ１１８で、処理対象の符号化データがスライド符号であることが判明しているため、ステップＳ１０２で改めてヘッダを読み込む必要が無い。ステップＳ１３３でフラグHFLGの値が設定されると、処理は後述するステップＳ１３６に移行される。
【００５８】
一方、ステップＳ１１２で、読み込まれたヘッダがＰＡＳＳ符号を示していると判定されたら、処理はステップＳ１１３に移行される。この場合、少なくとも２のＰＡＳＳが連続していることになる。符号ステップＳ１１３では、ヘッダ直後から８ビットを読み出し、ＰＡＳＳ符号によるデータ値を読み込む。このステップＳ１１３で読み込まれたデータ値を、データ値Ｂとする。
【００５９】
次のステップＳ１１４で、次のヘッダが読み込まれる。すなわち、ステップＳ１１４では、ステップＳ１１３で読み込まれたＰＡＳＳ符号の直後の１ビットが読み出される。次のステップＳ１１５で、読み込まれたヘッダがＰＡＳＳ符号を示しているか否かを判定する。上述のステップＳ１１２同様、これにより、３のＰＡＳＳ符号が連続しているか否かが判定できる。若し、ＰＡＳＳ符号を示していないと判定されたら、処理はステップＳ１３１に移行され、データ数の値が「２」とされる。そして、処理がステップＳ１３３に移行される。
【００６０】
一方、ステップＳ１１５で、読み込まれたヘッダがＰＡＳＳ符号を示していると判定されたら、処理はステップＳ１１６に移行される。ステップＳ１１６では、ヘッダ直後から８ビットを読み出し、ＰＡＳＳ符号によるデータ値を読み込む。このステップＳ１１６で読み込まれたデータ値を、データ値Ｃとする。
【００６１】
次のステップＳ１１７で、次のヘッダが読み込まれる。すなわち、ステップＳ１１７では、ステップＳ１１６で読み込まれたＰＡＳＳ符号の直後の１ビットが読み出される。次のステップＳ１１８で、読み込まれたヘッダがＰＡＳＳ符号を示しているか否かが判定される。これにより、４のＰＡＳＳ符号が連続しているか否かが判定できる。若し、ＰＡＳＳ符号を示していないと判定されたら、処理はステップＳ１３２に移行され、データ数の値が「３」とされる。そして、処理がステップＳ１３３に移行される。
【００６２】
一方、ステップＳ１１８で、読み込まれたヘッダがＰＡＳＳ符号を示していると判定されたら、処理はステップＳ１１９に移行される。ステップＳ１１９では、ヘッダ直後から８ビットを読み出し、ＰＡＳＳ符号によるデータ値を読み込む。このステップＳ１１９で読み込まれたデータ値を、データ値Ｄとする。そして、次のステップＳ１３４でデータ数の値が「４」とされ、ステップＳ１３５でフラグHFLGの値が「０」とされ、処理がステップＳ１３６に移行される。
【００６３】
ステップＳ１３６では、一致フラグFLAGの値が「１」とされ、この一致フラグFLAGと、データ数と、データ値Ａ〜ＤのうちステップＳ１１０〜ステップＳ１１９で読み込まれたデータとがスライド展開部４０２に転送される。このとき、これら一致フラグFLAG、データ数およびデータ値Ａ〜Ｄは、１クロックで同時並列的に転送される。
【００６４】
ステップＳ１３６でデータ転送が行われると、処理はステップＳ１３７に移行される。ステップＳ１３７では、ステップＳ１３６で転送されたデータに対するスライド展開部４０２における処理が終了するまで待機される。
【００６５】
スライド展開部４０２からの処理が終了した旨の通知を受信すると、処理がステップＳ１３８に移行され、符号読み込み部４００から供給された一纏まりの符号化データに対する処理が全て終了したか否かが判定される。若し、終了したと判定されたら、図６のフローチャートによる一連の処理が終了される。一方、終了していないと判定されたら、処理はステップＳ１０１に戻される。
【００６６】
なお、上述では、符号フォーマット解析部４０１においてステップＳ１００〜ステップＳ１３６の処理が逐次的に実行されるように説明したが、実際には、これらの一連の処理は、例えば１クロックで実行可能なものである。これは、例えば、既に述べたように、符号フォーマット解析部４０１を論理回路の組み合わせで構成することで可能である。また、このように符号フォーマット解析部４０１を構成することは、当業者であれば容易である。
【００６７】
図５の説明に戻り、符号フォーマット解析部４０１から出力されたレングスLength、アドレス値Addressおよびデータ値Ａ〜Ｄ、ならびに、データ数および一致フラグFLAGは、それぞれスライド展開部４０２に転送される。スライド展開部４０２は、符号フォーマット解析部４０１から供給されたこれらのデータに基づき、後述するスライド記憶部における展開処理を行い、出力データを得る。このとき、スライド展開部４０２では、１のタイミングで複数の出力データを並列的に出力することができる。図５の例では、それぞれ１単位（例えば１バイト＝８ビット）の４個の出力データ値＃１〜＃４までを同時並列的に出力することができる。スライド展開部４０２から１のタイミングで出力される１単位のデータの個数は、データ数として出力される。
【００６８】
スライド展開部４０２から出力された出力データ値＃１〜＃４およびデータ数は、データ変換部１０３に供給される。データ変換部１０３は、データ数に基づき、スライド展開部からそれぞれ１単位（例えば８ビット）で供給された出力データを、例えば３２ビット単位、６４ビット単位などのようなワード単位の出力データに変換する。このワード単位の出力データは、パラレルデータとしてデータ変換部１０３から出力され、データ書き込み部４０３に供給される。
【００６９】
データアドレス生成部１０４は、データ変換部１０３から出力されたワード単位の出力データの、フラッシュメモリ２４０上の書き込みアドレスを生成する。データ書き込み部４０３は、データアドレス生成部１０４で生成されたアドレス情報に基づきメインメモリアービタＩ／Ｆ１００に対してメモリアドレスを送信する。メインメモリアービタＩ／Ｆ１００は、データ書き込み部４０３から送信されたメモリアドレスに基づき、フラッシュメモリ２４０に出力データを書き込むように、メインメモリアービタ２０２に対して要求する。この要求に応じて、メインメモリアービタ２０２は、データ書き込み部４０３から供給された出力データを、フラッシュメモリコントローラ２４１を介してフラッシュメモリ２４０に書き込む。
【００７０】
図７は、スライド展開部４０２の一例の構成を示す。スライド展開部４０２は、入力側のセレクタ５００、スライド記憶部５０１、出力側のセレクタ５０２、アドレス生成部５０３およびコントローラ５１０を有する。コントローラ５１０は、例えばマイクロプロセッサを有し、図示されないＲＯＭに予め格納されるプログラムに従い、セレクタ５００および５０２、スライド記憶部５０１、ならびに、アドレス生成部５０３の動作を制御する（制御信号の経路は省略する）。
【００７１】
スライド展開部４０２に転送されたレングスLengthおよびアドレス値Addressがアドレス生成部５０３に供給される。アドレス生成部５０３は、これらレングスLengthおよびアドレス値Addressから、スライド記憶部５０１から出力する出力データ値を選択するためのアドレス値を生成する。このアドレス値は、スライド記憶部５０１に供給される。
【００７２】
スライド展開部４０２に転送されたデータ数および一致フラグFLAGは、コントローラ５１０に供給される。コントローラ５１０は、データ数をスライド記憶部５０１に供給すると共に、スライド記憶部５０１内にＦＩＦＯ(First In First Out)構造で構成される複数のレジスタ（スライド）に対する書き込み許可／不許可を制御するシフト信号を生成する。シフト信号は、値が「１」で書き込み許可を示すものとする。
【００７３】
スライド展開部４０２に転送されたデータ値Ａ〜Ｄは、セレクタ５００およびセレクタ５０２にそれぞれ供給される。セレクタ５００には、さらに、セレクタ５０２から出力される出力データ値ａ〜ｄが供給される。セレクタ５００は、これらデータ値Ａ〜Ｄおよび出力データ値ａ〜ｄのうち一方を選択して、データ値Ａ〜Ｄとしてスライド記憶部５０１に供給する。
【００７４】
なお、実際には、データ値Ａ〜Ｄのうち図６のフローチャートにおけるステップＳ１１０〜ステップＳ１１９で読み込まれたデータ、すなわち、データ値Ａ、または、データ値ＡおよびＢ、または、データ値Ａ〜Ｃ、または、データ値Ａ〜Ｄがセレクタ５００に供給される。同様に、出力データ値ａ〜ｄについても、スライド記憶部５０１内部の処理に応じて、出力データ値ａ、または、出力データ値ａおよびｂ、または、出力データ値ａ〜ｃ、または、出力データ値ａ〜ｄが出力される。煩雑さを避けるため、以下では、特に記載のない限り、これらデータ値Ａ、または、データ値ＡおよびＢ、または、データ値Ａ〜Ｃ、または、データ値Ａ〜Ｄ、ならびに、出力データ値ａ、または、出力データ値ａおよびｂ、または、出力データ値ａ〜ｃ、または、出力データ値ａ〜ｄを、それぞれ纏めてデータ値Ａ〜Ｄおよび出力データ値ａ〜ｄとする。
【００７５】
スライド記憶部５０１は、セレクタ５００から供給されるデータ値Ａ〜Ｄ、アドレス生成部５０３から供給されるアドレス値、ならびに、コントローラ５１０から供給されるデータ数に基づきデータの展開を行い、出力データ値ａ〜ｄを生成する。出力データ値ａ〜ｄは、セレクタ５０２に供給される。セレクタ５０２は、スライド展開部４０２に転送され、セレクタ５０２に直接的に供給されたデータ値Ａ〜Ｄと、スライド記憶部５０１から出力された出力データ値ａ〜ｄとのうち一方を選択して、スライド展開部４０２の出力データ値＃１〜＃４として出力する。
【００７６】
図８は、スライド記憶部５０１の一例のハードウェア構成を示す。スライド記憶部５０１は、それぞれ４入力１出力のｎ個（例えば６４個）のセレクタ３５０1、３５０2、…、３５０m、…、３５０nと、各々がレジスタからなり、それぞれ１単位のデータが格納されるｎ個（例えば６４個）のスライド３５１1、３５１2、…、３５１n、…、３５１nと、複数の入力から隣接する１〜４個のデータを選択して出力する隣接データセレクタ３５２を有する。スライド３５１1、３５１2、…、３５１n、…、３５１nは、セレクタ３５０1、３５０2、…、３５０m、…、３５０nを介してＦＩＦＯを構成する。
【００７７】
なお、セレクタ３５０1、３５０2、…、３５０m、…、３５０nの入力数は、上述した符号フォーマット解析部４０１が同時並列的に出力可能なデータ値の個数ｐに対応するものとなる。同様に、隣接データセレクタ３５２が選択可能なデータ数の最大値も、当該個数ｐに対応する。
【００７８】
セレクタ３５０1、３５０2、…、３５０m、…、３５０nそれぞれに対して、コントローラ５１０からデータ数が供給される。スライド３５１1、３５１2、…、３５１m、…、３５１nそれぞれに対して、コントローラ５１０から、データの書き込みの許可／不許可を制御するシフト信号が供給される。また、隣接データセレクタ３５２に対して、アドレス生成部５０３からアドレス値が供給される。
【００７９】
なお、以下では、特に説明のない限り、個々のセレクタ３５０1、３５０2、…、３５０m、…、３５０nを、セレクタ３５０mで代表させて説明を行う。同様に、個々のスライド３５１1、３５１2、…、３５１n、…、３５１nを、スライド３５１mで代表させて説明を行う。
【００８０】
各セレクタ３５０mの出力は、直後に配置されるスライド３５１mに供給される。各スライド３５１mの出力は、隣接データセレクタ３５２に供給されると共に、当該スライド３５１mの後に配置される４のセレクタ３５０m+1、３５０m+2、３５０m+3およびセレクタ３５０m+4の４のセレクタに供給される。
【００８１】
例えば、スライド３５１1の出力は、隣接データセレクタ３５２に供給されると共に、セレクタ３５０2、３５０3、３５０4および３５０5に供給される。スライド３５１2の出力は、隣接データセレクタ３５２に供給されると共に、セレクタ３５０3、３５０4、３５０5および３５０6に供給される。
【００８２】
なお、最後尾側（隣接データセレクタ３５２側）のスライド３５１mで、後に配置されるセレクタ３５０mの数が４未満の場合は、スライド３５１mの出力が隣接データセレクタ３５２に供給されると共に、当該スライド３５１mの後に配置される１〜３のセレクタ３５０mそれぞれに供給される。最後尾のスライド３５１nの出力は、隣接データセレクタ３５２のみに供給される。
【００８３】
ここで、各セレクタ３５０mの４の入力をそれぞれ第１入力端、第２入力端、第３入力端および第４入力端とする。第１入力端には、セレクタ３５０m直前のスライド３５１m-1の出力が供給される。第２入力端には、２つ前のスライド３５１m-2の出力が供給される。第３入力端には、３つ前のスライド３５１m-3の出力が供給される。第４入力端には、４つ前のスライド３５１m-4の出力が供給される。
【００８４】
また、図８において左端に示される先頭（データ値入力側）のセレクタ３５０1の第１入力端〜第４入力端には、データ値Ａ〜Ｄがそれぞれ供給される。その後のセレクタ３５０2の第１入力端にはスライド３５１1の出力が入力され、第２〜第４入力端にはデータ値Ｂ〜Ｄがそれぞれ供給される。さらにその後のセレクタ３５０2の第１および第２入力端にはスライド３５１1および３５１2の出力がそれぞれ入力され、第３および第４入力端にはデータ値ＣおよびＤがそれぞれ入力される。次のセレクタ３５０3の第１〜第３入力端にはスライド３５１1〜３５１3の出力がそれぞれ入力され、第４入力端にはデータ値Ｄが入力される。
【００８５】
このように、各セレクタ３５０mの第１入力端〜第４入力端に、各データ値が符号化前の並び順に従って入力される。これは、隣接して配置される４のセレクタ３５０m〜３５０m+3の対応する入力端は、各データ値の符号化前の並び順に従って入力されることも意味する。このとき、データ値の入力側に配置されるセレクタ３５０mに、データ値の符号化前の並び順でより後のデータ値が入力される。
【００８６】
また、各セレクタ３５０mは、第１入力端〜第４入力端のうちデータ数が示す値に対応する入力端を選択し、当該入力端に供給されたデータ値を、スライド３５１mに書き込む。より具体的には、セレクタ３５０mは、データ数が「１」を示していれば、第１入力端に供給されたデータ値を選択して、スライド３５１mに書き込む。また、データ数が「４」を示していれば、セレクタ３５０mは、第４入力端に供給されたデータ値を選択して、スライド３５１mに書き込む。
【００８７】
このデータ数に従った動作は、セレクタ３５０1〜３５０nについて同時に行われる。これにより、スライド３５１1〜３５１nに書き込まれたデータ値を、データ数が示す個数のスライド分、出力側にシフトできる。
【００８８】
すなわち、データ数が「４」を示していれば、スライド３５１mに書き込まれたデータ値がスライド３５１m+4にシフトされる。また、データ数が「１」を示していれば、スライド３５１mに書き込まれたデータ値がスライド３５１m+1にシフトされる。
【００８９】
隣接データセレクタ３５２は、各スライド３５１1〜３５１nの出力のうち、アドレス値により指定されるスライド３５１mを基点として、スライド３５１mからデータ値の入力側のスライド３５１1に向けて順次隣接するスライドの出力を選択する。例えば、スライド３５１m、３５１m-1、３５１m-2および３５１m-3の出力が選択される。選択された出力は、出力データ値ａ〜ｄとしてスライド記憶部５０１から出力される。
【００９０】
上述のデータ値のシフトおよび隣接データセレクタ３５２からの出力データ値の出力は、図８に示される構成から明らかなように、例えば１クロックで行うことが可能である。
【００９１】
図９〜図１１のフローチャートを用いて、スライド展開部４０２における一例の処理について説明する。図９は、スライド展開部４０２における処理の概略を示す一例のフローチャートである。なお、上述したように、符号フォーマット解析部４０１は、複数のデータ値Ａ〜Ｄを同時並列的に出力することができる。以下では、この符号フォーマット解析部４０１から同時並列的に出力される１または複数のデータ値を、適宜、１組のデータ値として説明を行う。
【００９２】
先ず、コントローラ５１０は、符号フォーマット解析部４０１から供給された一致フラグFLAGに基づき、符号フォーマット解析部４０１で解析された符号化データがＰＡＳＳ符号であるか否かを判定する。なお、一致フラグFLAG＝１で、解析された符号化データがＰＡＳＳ符号であることを示し、一致フラグFLAG＝２で、当該符号化データがＰＡＳＳ符号以外、すなわちスライド符号であることを示すものとする。
【００９３】
若し、一致フラグFLAG＝１であって、解析された符号化データがＰＡＳＳ符号であると判定されたら、処理はステップＳ４０１に移行され、ＰＡＳＳ符号に対する処理が行われる。このとき、スライド展開部４０２において、コントローラ５１０は、セレクタ５００および５０２を、データ値Ａ〜Ｄが入力される入力端側を選択するように制御する。ＰＡＳＳ符号による１組のデータ値について処理が終了すると、処理はステップＳ４０３に移行される。
【００９４】
一方、ステップＳ４００で、一致フラグFLAG＝１ではない、すなわち、一致フラグFLAG＝２であって、解析された符号化データがスライド符号であると判定されたら、処理はステップＳ４０２に移行され、スライド符号に対する処理が行われる。このとき、スライド展開部４０２において、コントローラ５１０は、セレクタ５００および５０２を、出力データ値ａ〜ｄが入力される入力端側を選択するように制御する。処理が終了すると、処理はステップＳ４０３に移行される。
【００９５】
ステップＳ４０３では、コントローラ５１０は、解析された符号化データに対する処理が終了した旨を、フォーマット解析部４０１に通知する。そして、次のステップＳ４０４で、コントローラ５１０は、処理すべき一纏まりの符号化データに対する処理が全て終了したか否かを判定する。若し、全ての符号化データに対する処理が終了していないと判定されたら、処理はステップＳ４００に戻される。一方、全ての符号化データに対する処理が終了したと判定されたら、一連の処理が終了される。
【００９６】
図１０は、上述したステップＳ４０１による、スライド展開部４０２におけるＰＡＳＳ符号に対する一例の処理を示すフローチャートである。この図１０のフローチャートでは、ステップＳ４１０、ステップＳ４１４およびステップＳ４１８で、符号フォーマット解析部４０１から受け取ったデータ値のデータ数を判定し、判定結果に応じて、データ数に従った処理を行う。
【００９７】
ステップＳ４１０では、データ数が「１」であるか否かが判定される。若し、データ数が「１」であると判定されたら、処理がステップＳ４１１に移行される。ステップＳ４１１では、コントローラ５１０は、データ数を「１」としてスライド記憶部５０１に渡すと共に、符号フォーマット解析部４０１から受け取ったデータ値Ａをスライド記憶部５０１に供給する。また、コントローラ５１０は、書き込み許可を示すシフト信号「１」をスライド記憶部５０１に供給する。
【００９８】
スライド記憶部５０１では、データ数が「１」なので各セレクタ３５０mにおいて第１入力端が選択される。これにより、各スライド３５１mの記憶内容が１だけ後ろのスライド３５１m+1にシフトされると共に、先頭のスライド３５１1にデータ値Ａが書き込まれる。
【００９９】
処理はステップＳ４１２に移行され、コントローラ５１０によりセレクタ５０２が制御され、符号フォーマット解析部４０１から受け取ったデータ値Ａが出力データ値＃１として直接的に出力される。出力されたこの出力データ値＃１は、データ変換部１０３に供給される。出力データ値＃１は、さらに、セレクタ５００にも供給される。
【０１００】
次に、ステップＳ４１３で、出力データ数が「１」とされ、データ変換部１０３に渡される。そして、１組の符号化データに対する処理が終了され、処理が図９のフローチャートのステップＳ４０３に移行される。
【０１０１】
若し、上述のステップＳ４１０でデータ数が「１」ではないと判定されたら、処理はステップＳ４１４に移行される。ステップＳ４１４では、データ数が「２」であるか否かが判定される。若し、データ数が「２」であれば、処理がステップＳ４１５に移行される。ステップＳ４１５では、コントローラ５１０は、データ数を「２」としてスライド記憶部５０１に渡すと共に、符号フォーマット解析部４０１から供給された２のデータ値、すなわちデータ値Ａおよびデータ値Ｂをスライド記憶部５０１に供給する。また、コントローラ５１０は、書き込み許可を示すシフト信号「１」をスライド記憶部５０１に供給する。
【０１０２】
スライド記憶部５０１では、データ数が「２」なので各セレクタ３５０mにおいて第２入力端が選択される。これにより、各スライド３５１mの記憶内容が２だけ後のスライド３５１m+2にシフトされると共に、スライド３５１2にデータ値Ａが書き込まれ、スライド３５１1にデータ値Ｂが書き込まれる。
【０１０３】
処理はステップＳ４１６に移行され、コントローラ５１０によりセレクタ５０２が制御され、符号フォーマット解析部４０１から受け取ったデータ値ＡおよびＢが出力データ値＃１および＃２として直接的に出力される。出力されたこれら出力データ値＃１および＃２は、データ変換部１０３に供給される。出力データ値＃１および＃２は、さらに、セレクタ５００にも供給される。
【０１０４】
次に、ステップＳ４１７で、出力データ数が「２」とされ、データ変換部１０３に渡される。そして、１組の符号化データに対する処理が終了され、処理が図９のフローチャートのステップＳ４０３に移行される。
【０１０５】
若し、上述のステップＳ４１４でデータ数が「２」ではないと判定されたら、処理はステップＳ４１８に移行される。ステップＳ４１８では、データ数が「３」であるか否かが判定される。若し、データ数が「３」であれば、処理がステップＳ４１９に移行される。ステップＳ４１９では、コントローラ５１０は、データ数を「３」としてスライド記憶部５０１に渡すと共に、符号フォーマット解析部４０１から供給された３のデータ値、すなわちデータ値Ａ〜Ｃをスライド記憶部５０１に供給する。また、コントローラ５１０は、書き込み許可を示すシフト信号「１」をスライド記憶部５０１に供給する。
【０１０６】
スライド記憶部５０１では、データ数が「３」なので各セレクタ３５０mにおいて第３入力端が選択される。これにより、各スライド３５１mの記憶内容が３だけ後のスライド３５１m+3にシフトされると共に、スライド３５１3にデータ値Ａが書き込まれ、スライド３５１2にデータ値Ｂが書き込まれ、スライド３５１3にデータ値Ｃが書き込まれる。
【０１０７】
処理はステップＳ４２０に移行され、コントローラ５１０によりセレクタ５０２が制御され、符号フォーマット解析部４０１から受け取ったデータ値Ａ〜Ｃが出力データ値＃１〜＃３として直接的に出力される。出力されたこれら出力データ値＃１〜＃３は、データ変換部１０３に供給される。出力データ値＃１〜＃３は、さらに、セレクタ５００にも供給される。
【０１０８】
次に、ステップＳ４２１で、出力データ数が「３」とされ、データ変換部１０３に渡される。そして、１組の符号化データに対する処理が終了され、処理が図９のフローチャートのステップＳ４０３に移行される。
【０１０９】
若し、上述のステップＳ４１８でデータ数が「３」ではないと判定されたら、データ数が「４」であると判断でき、処理がステップＳ４２２に移行される。ステップＳ４２２では、コントローラ５１０は、データ数を「４」としてスライド記憶部５０１に渡すと共に、符号フォーマット解析部４０１から供給された４のデータ値、すなわちデータ値Ａ〜Ｄをスライド記憶部５０１に供給する。また、コントローラ５１０は、書き込み許可を示すシフト信号「１」をスライド記憶部５０１に供給する。
【０１１０】
スライド記憶部５０１では、データ数が「４」なので各セレクタ３５０mにおいて第４入力端が選択される。これにより、各スライド３５１mの記憶内容が４だけ後のスライド３５１m+4にシフトされると共に、スライド３５１1〜スライド３５１4に、それぞれデータ値Ａ〜Ｄが書き込まれる。
【０１１１】
処理はステップＳ４２３に移行され、コントローラ５１０によりセレクタ５０２が制御され、符号フォーマット解析部４０１から受け取ったデータ値Ａ〜Ｄが出力データ値＃１〜＃４として直接的に出力される。出力されたこれら出力データ値＃１〜＃４は、データ変換部１０３に供給される。出力データ値＃１〜＃４は、さらに、セレクタ５００にも供給される。
【０１１２】
次に、ステップＳ４２４で、出力データ数が「４」とされ、データ変換部１０３に渡される。そして、１組の符号化データに対する処理が終了され、処理が図９のフローチャートのステップＳ４０３に移行される。
【０１１３】
図１１は、上述したステップＳ４０２による、スライド展開部４０２におけるスライド符号に対する一例の処理を示すフローチャートである。この図１１のフローチャートでは、上述のＰＡＳＳ符号に対する処理で各スライド３５１mに書き込まれたデータ値と、スライド符号のレングスLengthおよびアドレス値Addressとに基づき出力データ値を生成する。
【０１１４】
先ず、ステップＳ４５０で、レングスLengthを４で除した際の商を求め、ループ変数WLengとする。例えば、レングスLengthを２ビット右シフトさせることで、このループ変数WLengが得られる。次のステップＳ４５１で、ループ変数WLengが「０」であるか否かが判定される。若し、「０」であると判定されたら、処理はステップＳ４６１に移行される。
【０１１５】
一方、ループ変数WLengが「０」ではないと判定されたら、処理はステップＳ４５２に移行される。ステップＳ４５２で、コントローラ５１０は、アドレス生成部５０３で生成されたアドレス値に従い、スライド記憶部５０１から出力データ値ａ〜ｄを読み出す。
【０１１６】
このアドレス値は、隣接データセレクタ３５２に対して、符号化データから抽出されたアドレス値Addressにより、スライド３５１1、３５１2、…のうち、データ値の入力側のスライド３５１1から、アドレス値Addressで示される数だけ進んだ位置のスライド３５１mの出力を指定する。以降、スライド３５１1からアドレス値Addressで示される数だけ進んだ位置のスライド３５１mを、スライド３５１Addressと呼ぶ。
【０１１７】
隣接データセレクタ３５２は、このアドレス値により指定されたスライド３５１Addressからスライド３５１1の側に向けて順次隣接する４のスライドである、スライド３５１Address、３５１Address-1、３５１Address-2および３５１Address-3の出力を選択する。選択された、スライド３５１Address、３５１Address-1、３５１Address-2および３５１Address-3の出力が、それぞれ出力データ値ａ〜ｄとして読み出され、セレクタ５０２に供給される。
【０１１８】
次のステップＳ４５３で、ステップＳ４５２で読み出された出力データ値ａ〜ｄがデータ値Ａ〜Ｄとしてセレクタ５００に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ５００は、出力データ値側が選択されている。
【０１１９】
次のステップＳ４５４で、コントローラ５１０は、スライド記憶部５０１に対し、データ数を「４」として供給すると共に、書き込み許可を示すシフト信号「１」を供給する。また、セレクタ５００から出力されたデータ値Ａ〜Ｄがスライド記憶部５０１に供給される。スライド記憶部５０１では、データ数が「４」なので各セレクタ３５０mにおいて第４入力端が選択される。これにより、各スライド３５１mの記憶内容が４だけ後のスライド３５１m+4にシフトされると共に、スライド３５１1〜スライド３５１4に、それぞれデータ値Ａ〜Ｄが書き込まれる。
【０１２０】
次のステップＳ４５５で、セレクタ５０２から出力データ値ａ〜ｄが出力データ値＃１〜＃４として出力され、さらに次のステップＳ４５６で、出力データ数「４」がコントローラ５１０から出力される。これら出力データ値＃１〜＃４および出力データ数「４」は、データ変換部１０３に供給される。そして、次のステップＳ４５７で、ループ変数WLengから「１」が減ぜられる。
【０１２１】
処理はステップＳ４５８に移行され、ループ変数WLengの値が「０」より大きいか否かが判定される。若し、「０」より大きいと判定されたら、処理がステップＳ４５２に戻される。
【０１２２】
一方、ステップＳ４５８で、ループ変数WLengの値が「０」以下であると判定されたら、処理はステップＳ４５９に移行される。ステップＳ４５９では、レングスLengthを４で除した際の余りが新たなレングスLengthとして求められる。例えば、上述のステップＳ４５０におけるレングスLengthの２ビット右シフトを再び行い、得られた変数WLengに対して２ビット左シフトを行う。レングスLengthからこの変数WLengを２ビット左シフトさせた値を減じて、新たなレングスLengthを得る。
【０１２３】
次のステップＳ４６０では、レングスLengthの値が「０」であるか否かが判定される。若し、「０」であると判定された場合、現在処理対象としているスライド符号に対する処理が全て終了したことを意味する。この場合、スライド符号に対する一連の処理が終了され、処理が図９のステップＳ４０３に移行される。
【０１２４】
一方、ステップＳ４６０で、レングスLengthの値が「０」ではないと判定されたら、処理はステップＳ４６１に移行され、レングスLengthの値が「１」であるか否かが判定される。若し、「１」であると判定されたら、処理はステップＳ４６２に移行される。ステップＳ４６２では、コントローラ５１０は、アドレス生成部５０３で生成されたアドレス値に従い、スライド記憶部５０１の隣接データセレクタ３５２に対してスライド３５１Addressの出力を指定して、このスライド３５１AddressからレングスLengthに示される長さだけ出力データ値を読み出す。ここでは、レングスLengthが「１」であるので、１の出力データ値ａを読み出す。
【０１２５】
次のステップＳ４６３で、ステップＳ４６２で読み出された出力データ値ａがデータ値Ａとしてセレクタ５００に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ５００は、出力データ値側が選択されている。
【０１２６】
次のステップＳ４６４で、コントローラ５１０は、スライド記憶部５０１に対して、データ数を「１」として供給すると共に書き込み許可を示すシフト信号「１」を供給する。また、セレクタ５００から出力されたデータ値Ａがスライド記憶部５０１に供給される。スライド記憶５０１では、データ数が「１」なので各セレクタ３５０mにおいて第１入力端が選択される。これにより、各スライド３５１mの記憶内容が１だけ後のスライド３５１m+1にシフトされると共に、スライド３５１1にデータ値Ａが書き込まれる。
【０１２７】
次のステップＳ４６５で、セレクタ５０２から出力データ値ａが出力データ値＃１として出力され、さらに次のステップＳ４６６で、出力データ数「１」がコントローラ５１０から出力される。これら出力データ値＃１および出力データ数「１」は、データ変換部１０３に供給される。そして、スライド符号に対する一連の処理が終了され、処理が図９のステップＳ４０３に移行される。
【０１２８】
上述のステップＳ４６１で、レングスLengthの値が「１」ではないと判定されたら、処理はステップＳ４６７に移行される。ステップＳ４６７では、レングスLengthの値が「２」であるか否かが判定される。若し、「２」であると判定されたら、処理はステップＳ４６８に移行される。ステップＳ４６８では、コントローラ５１０は、アドレス生成部５０３で生成されたアドレス値に従い。スライド記憶部５０１の隣接データセレクタ３５２に対してスライド３５１Addressの出力を指定して、このスライド３５１AddressからレングスLengthに示される長さだけ出力データ値を読み出す。ここでは、レングスLengthが「２」であるので、２の出力データ値ａおよびｂを読み出す。
【０１２９】
次のステップＳ４６９で、ステップＳ４６８で読み出された出力データ値ａおよびｂがデータ値ＡおよびＢとしてセレクタ５００に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ５００は、出力データ値側が選択されている。
【０１３０】
次のステップＳ４７０で、コントローラ５１０は、スライド記憶部５０１に対して、データ数を「２」として供給すると共に書き込み許可を示すシフト信号「１」を供給する。また、セレクタ５００から出力されたデータ値ＡおよびＢがスライド記憶部５０１に供給される。スライド記憶５０１では、データ数が「２」なので各セレクタ３５０mにおいて第２入力端が選択される。これにより、各スライド３５１mの記憶内容が２だけ後のスライド３５１m+2にシフトされると共に、スライド３５１1にデータ値Ａが書き込まれ、スライド３５１2にデータ値Ｂが書き込まれる。
【０１３１】
次のステップＳ４７１で、セレクタ５０２から出力データ値ａおよびｂが出力データ値＃１および＃２として出力され、さらに次のステップＳ４７２で、出力データ数「２」がコントローラ５１０から出力される。これら出力データ値＃１および＃２、ならびに、および出力データ数「２」は、データ変換部１０３に供給される。そして、スライド符号に対する一連の処理が終了され、処理が図９のステップＳ４０３に移行される。
【０１３２】
上述のステップＳ４６７で、レングスLengthの値が「２」ではないと判定されたら、レングスLengthの値が「３」に確定し、処理がステップＳ４７３に移行される。ステップＳ４７３では、コントローラ５１０は、アドレス生成部５０３で生成されたアドレス値に従い、スライド記憶部５０１の隣接データセレクタ３５２に対してスライド３５１Addressの出力を指定して、このスライド３５１AddressからレングスLengthに示される長さだけ出力データ値を読み出す。ここでは、レングスLengthが「３」であるので、３の出力データ値ａ〜ｃを読み出す。
【０１３３】
次のステップＳ４７４で、ステップＳ４７３で読み出された出力データ値ａ〜ｃがデータ値Ａ〜Ｃとしてセレクタ５００に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ５００は、出力データ値側が選択されている。
【０１３４】
次のステップＳ４７５で、コントローラ５１０は、スライド記憶部５０１に対して、データ数を「３」として供給すると共に書き込み許可を示すシフト信号「１」を供給する。また、セレクタ５００から出力されたデータ値Ａ〜Ｃがスライド記憶部５０１に供給される。スライド記憶５０１では、データ数が「３」なので各セレクタ３５０mにおいて第３入力端が選択される。これにより、各スライド３５１mの記憶内容が３だけ後のスライド３５１m+3にシフトされる。そして、スライド３５１1にデータ値Ａが、スライド３５１2にデータ値Ｂが、スライド３５１3にデータ値Ｃがそれぞれ書き込まれる。
【０１３５】
次のステップＳ４７６で、セレクタ５０２から出力データ値ａ〜ｃが出力データ値＃１〜＃３として出力され、さらに次のステップＳ４７７で、出力データ数「３」がコントローラ５１０から出力される。これら出力データ値＃１〜＃３、ならびに、および出力データ数「３」は、データ変換部１０３に供給される。そして、スライド符号に対する一連の処理が終了され、処理が図９のステップＳ４０３に移行される。
【０１３６】
次に、本実施形態による復号処理について、具体的な例を用いて説明する。図１２は、スライド展開部４０２における入出力と各スライド３５１mの状態の例を示す。図１２の左側がスライド展開部４０２に入力される、ＰＡＳＳ符号またはスライド符号から取り出されたデータの例を示す。また、図１２の右側がスライド展開部４０２から出力される出力データ値の例を示す。図１２の中央部は、スライド記憶部５０１の各スライド３５１mに格納されるデータの例を示す。
【０１３７】
図１２の例では、スライド記憶部５０１は、１６個のスライド３５１1〜スライド３５１16を持つものとする。図１２では、これらスライド３５１1〜スライド３５１16を、データ値入力側に近い方から、スライド＃０、スライド＃２、…、スライド＃Ａ、…、スライド＃Ｆの如く、１６進数の番号を付して示す。この番号は、アドレス値Addressに基づきアドレス生成部５０３で生成されるアドレス値に対応する。
【０１３８】
以下では、ＰＡＳＳ符号およびスライド符号から、データ値列「（Ａ）、（Ｂ）、（Ｃ）、（Ａ）、（Ｂ）、（Ｅ）、（Ａ）、（Ｂ）、（Ｃ）、（Ａ）」を復元する場合を例にとって説明する。
【０１３９】
処理＃１で、符号フォーマット解析部４０１からスライド展開部４０２に対して、図１２の左側に示されるように、ＰＡＳＳ符号によるデータ値（Ａ）、（Ｂ）および（Ｃ）が同時に転送される。このとき、ＰＡＳＳ符号であることを示す値「１」の一致フラグFLAGと、データ数「３」もスライド展開部４０２に転送される。
【０１４０】
一致フラグFLAG＝１なのでＰＡＳＳ符号が転送されたと判定され（図９のステップＳ４００）、スライド展開部４０２のセレクタ５００および５０２において、データ値側の入力端が選択される。また、図１０のステップＳ４１０、ステップＳ４１４およびステップＳ４１８でデータ数による判定が行われる。データ数＝３なので、データ値（Ａ）、（Ｂ）および（Ｃ）がスライド＃０、＃１および＃２に追加される（図１０のステップＳ４１９）と共に、データ値（Ａ）、（Ｂ）および（Ｃ）がセレクタ５０２から同時に出力される。また、出力データ数「３」も、出力される。
【０１４１】
処理＃２で、符号フォーマット解析部４０１からスライド展開部４０２に対して、スライド符号によるアドレス値AddressおよびレングスLengthが転送される。ここでは、アドレス値AddressおよびレングスLengthがそれぞれ値「２」であるものとする。このとき、スライド符号であることを示す値「２」の一致フラグFLAGもスライド展開部４０２に転送される。
【０１４２】
なお、処理＃２の時点では、上述の処理＃１によりスライド記憶部５０１においてスライド＃０、＃１および＃２に対してデータ値（Ａ）、（Ｂ）および（Ｃ）が格納されている。
【０１４３】
一致フラグFLAG＝２なのでスライド符号が転送されたと判定され（図９のステップＳ４００）、スライド展開部４０２のセレクタ５００および５０２において、出力データ値側が選択される。レングスLengthが値「２」なので、図１１のステップＳ４５０で求められたループ変数WLengは値「０」とされ、ステップＳ４６０、ステップＳ４６１およびステップＳ４６２でレングスLengthによる判定が行われる。
【０１４４】
この例では、アドレス値Address＝２、レングスLength＝２なので、図１１のステップＳ４６８により、アドレス値Addressに基づくアドレス値に示されるスライド＃２からデータ値入力側に向けて、レングスLengthに示される値に従い、２のスライド＃２および＃１のデータ値すなわちデータ値（Ａ）および（Ｂ）が読み出される。
【０１４５】
これら読み出されたデータ値（Ａ）および（Ｂ）は、セレクタ５０２からセレクタ５００に供給される（図１１のステップＳ４６９）。そして、データ数を「２」としてスライド記憶部５０１に供給する。このデータ数「２」に従い、スライド＃０〜＃１５それぞれの記憶内容が２スライド分出力側のスライドにシフトされると共に、ステップＳ４６８で読み出したデータ値（Ａ）および（Ｂ）がスライド＃０および＃１に追加される（図１１のステップＳ４７０）。これにより、スライド記憶部５０１では、データ値（Ｂ）、（Ａ）、（Ｃ）、（Ｂ）および（Ａ）がスライド＃０〜＃４に格納されている状態となる。
【０１４６】
当該データ値（Ａ）および（Ｂ）がセレクタ５０２から同時に出力される（図１１のステップＳ４７１）。また、出力データ数「２」も、出力される（図１１のステップＳ４７２）。
【０１４７】
処理＃３で、符号フォーマット解析部４０１からスライド展開部４０２に対してＰＡＳＳ符号によるデータ値（Ｅ）が転送される。このとき、ＰＡＳＳ符号であることを示す値「１」の一致フラグFLAGとデータ数「１」もスライド展開部４０２に転送される。
【０１４８】
一致フラグFLAG＝１なのでＰＡＳＳ符号が転送されたと判定され（図９のステップＳ４００）、スライド展開部４０２のセレクタ５００および５０２において、データ値側の入力端が選択される。また、図１０のステップＳ４１０、ステップＳ４１４およびステップＳ４１８でデータ数による判定が行われる。データ数「１」に従い、スライド＃０〜＃１５それぞれの記憶内容が１スライド分出力側のスライドにシフトされると共に、データ値（Ｅ）がスライド＃０に追加される（図１０のステップＳ４１１）。また、データ値（Ａ）がセレクタ５０２から出力されると共に、出力データ数「１」が出力される。
【０１４９】
以下、同様にして、スライド展開部４０２に転送されるデータ値、または、アドレス値AddressおよびレングスLengthに基づき、スライド＃０〜＃Ｆに格納される各データ値のシフトと、スライド＃０〜＃Ｆに対するデータ値の追加と、スライド展開部４０２からの出力データ値の出力とが行われる。
【０１５０】
処理＃４で、スライド符号によるアドレス値AddressおよびレングスLengthが、それぞれ値「５」として転送されると共に、スライド符号であることを示す値「２」の一致フラグFLAGがスライド展開部４０２に転送される。この処理＃４の時点では、上述の処理＃３まででスライド記憶部５０１においてスライド＃０〜＃５に対してデータ値（Ａ）、（Ｂ）、（Ｃ）、（Ａ）、（Ｂ）、（Ｅ）が格納されている。
【０１５１】
レングスLengthが値「５」なので図１１のステップＳ４５０で求められたループ変数WLengは値「１」とされ、図１１のステップＳ４５２により、アドレス値Addressに基づくアドレス値に示されるスライド＃５からデータ値入力側に向けて、４のデータ値、すなわち、スライド＃５、＃４、＃３および＃２のデータ値（Ａ）、（Ｂ）、（Ｃ）および（Ａ）が読み出される。読み出されたデータ値（Ａ）、（Ｂ）、（Ｃ）および（Ａ）は、セレクタ５０２からセレクタ５００に供給される（図１１のステップＳ４５３）。
【０１５２】
そして、データ数を「４」としてスライド記憶部５０１に供給する。このデータ数「４」に従い、スライド＃０〜＃Ｆそれぞれの記憶内容が４スライド分、出力側のスライドにシフトされると共に、ステップＳ４５２で読み出されセレクタ５００に供給されたデータ値（Ａ）、（Ｂ）、（Ｃ）および（Ａ）が、スライド＃０〜＃３に追加される（図１１のステップＳ４５４）。これにより、スライド記憶部５０１では、データ値（Ａ）、（Ｂ）、（Ｃ）、（Ａ）、（Ｂ）、（Ｅ）、（Ａ）、（Ｂ）、（Ｃ）、（Ａ）がスライド＃０〜＃９に格納されている状態となる。
【０１５３】
ステップＳ４５２で読み出されたデータ値（Ａ）、（Ｂ）、（Ｃ）および（Ａ）は、セレクタ５０２から同時に出力される（図１１のステップＳ４５５）。また、出力データ数「４」も、出力される（図１１のステップＳ４５６）。
【０１５４】
ループ変数WLengが「０」なので、ステップＳ４５８の判定により、ステップＳ４５９でレングスLengthを「４」で除した際の余りが新たなレングスLengthとされる。図１２の処理＃４の例では、元のレングスLengthが値「５」なので、この新たなレングスLengthの値が「１」とされる。そこで、図１１のステップＳ４６２で、アドレス値Addressに基づくアドレス値に示されるスライド＃５のデータ値（Ｂ）が読み出される（図１２の処理＃５）。
【０１５５】
この読み出されたデータ値（Ｂ）は、セレクタ５０２からセレクタ５００に供給される（図１１のステップＳ４６３）。データ数を「１」としてスライド記憶部５０１に供給する。このデータ数「１」に従いスライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側のスライドにシフトされると共に、ステップＳ４６２で読み出したデータ値（Ｂ）がスライド＃０に追加される（図１１のステップＳ４６４）。そして、図１１のステップＳ４６５で、当該データ値（Ｂ）がセレクタ５０２から出力されると共に、図１１のステップＳ４６６で、出力データ数「１」も出力される。
【０１５６】
本実施形態においては、多入力１出力のセレクタを用い、このセレクタの出力をスライドに接続する。また、スライドの出力を、複数のセレクタにそれぞれ接続する。これにより、複数のスライドに対するデータの書き込みや、複数のスライドからのデータの読み出しを同時に行うことができる。そのため、復号処理をより高速に行うことが可能となる。
【０１５７】
図１３は、従来技術による、各スライドに対するデータの書き込みや、各スライドからのデータの読み出しを、スライド毎に逐次的に行う場合の一例の処理を示す。この図１３の例でも、上述の図１２の例と同様に、ＰＡＳＳ符号およびスライド符号から、データ値列「（Ａ）、（Ｂ）、（Ｃ）、（Ａ）、（Ｂ）、（Ｅ）、（Ａ）、（Ｂ）、（Ｃ）、（Ａ）」を復元するものとする。
【０１５８】
処理＃１でＰＡＳＳ符号によるデータ値（Ａ）が出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ａ）がスライド＃０に追加される。処理＃２で、次のＰＡＳＳ符号によるデータ値（Ｂ）が出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ｂ）がスライド＃０に追加される。処理＃３で、次のＰＡＳＳ符号によりデータ値（Ｃ）が出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ｃ）がスライド＃０に追加される。
【０１５９】
次の処理＃４で、スライド符号によるアドレス値Address（値「２」）およびレングスLength（値「２」）に基づき、先ずアドレス値Addressに示されるスライド＃２からデータ値（Ａ）が読み出され出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ａ）がスライド＃０に追加される。次の処理＃５で、アドレス値Addressに示されるスライド＃２からデータ値（Ｂ）が読み出され出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ｂ）がスライド＃０に追加される。これら処理＃４および＃５で、レングスLength分の処理が終了する。
【０１６０】
次の処理＃６で、ＰＡＳＳ符号によるデータ値（Ｅ）が出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ｅ）がスライド＃０に追加される。
【０１６１】
次の処理＃７で、スライド符号によるアドレス値Address（値「５」）およびレングスLength（値「５」）に基づき、先ずアドレス値Addressに示されるスライド＃５からデータ値（Ａ）が読み出され出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ａ）がスライド＃０に追加される。次の処理＃８で、アドレス値Addressに示されるスライド＃５からデータ値（Ｂ）が読み出され出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ｂ）がスライド＃０に追加される。
【０１６２】
次の処理＃９で、アドレス値Addressに示されるスライド＃５からデータ値（Ｃ）が読み出され出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ｃ）がスライド＃０に追加される。次の処理＃１０で、アドレス値Addressに示されるスライド＃５からデータ値（Ａ）が読み出され出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ａ）がスライド＃０に追加される。次の処理＃１１で、アドレス値Addressに示されるスライド＃５からデータ値（Ａ）が読み出され出力されると共に、スライド＃０〜＃Ｆそれぞれの記憶内容が１スライド分、出力側にシフトされ、データ値（Ａ）がスライド＃０に追加される。
【０１６３】
このように、各スライドに対するデータ書き込みや読み出しを、スライド毎に逐次的に行う方法では、１０のデータ値からなるデータ値列を復号するのに、処理＃１〜処理＃１１の１１ステップが必要となる。これに対して、図１２を用いて説明した本実施形態による方法では、同じデータ値列を復号するのに、処理＃１〜処理＃５の５ステップで済み、処理が大幅に高速化される。
【０１６４】
なお、上述では、符号フォーマット解析部４０１が同時出力を行うデータ数を４としたが、これはこの例に限定されない。すなわち、符号フォーマット解析部４０１が同時出力するデータ数ｎが５、６、…のようにさらに多くてもよいし、４未満であってもよい。この場合、スライド展開部４０２におけるセレクタ５００および５０２の入力および出力数や、スライド展開部４０２内のスライド記憶部５０１におけるセレクタ３５０1、３５０2、…、３５０m、…、３５０nの入力数は、符号フォーマット解析部４０１が同時出力できるデータ数ｎと対応させるものとする。
【符号の説明】
【０１６５】
２１０  メインメモリ
２４０  フラッシュメモリ
２４３  デコーダ
３５０1〜３５０n  セレクタ
３５１1〜３５１n  スライド
３５２  隣接データセレクタ
４００  符号読み込み部
４０１  符号フォーマット解析部
４０２  スライド展開部
５００  セレクタ
５０１  スライド記憶部
５０２  セレクタ
５０３  アドレス生成部
５１０  コントローラ
【先行技術文献】
【特許文献】
【０１６６】
【特許文献１】特開２００８−１９３５６７号公報
【特許文献２】特開２００６−３３２９８２号公報
【図１】
0005454105.tif 000002
【図２】
0005454105.tif 000003
【図３】
0005454105.tif 000004
【図４】
0005454105.tif 000005
【図５】
0005454105.tif 000006
【図６】
0005454105.tif 000007
【図７】
0005454105.tif 000008
【図８】
0005454105.tif 000009
【図９】
0005454105.tif 000010
【図１０】
0005454105.tif 000011
【図１１】
0005454105.tif 000012
【図１２】
0005454105.tif 000013
【図１３】
0005454105.tif 000014
【図１４】
0005454105.tif 000015