以下に添付図面を参照して、この発明に係るデータ処理装置の一実施形態を詳細に説明する。図1は、本発明に係るデータ処理装置を適用可能なプリンタ装置200の一例の構成を示す。図1の例では、プリンタ装置200は、制御部230、メインメモリ210、プリンタエンジン211および不揮発性のメモリであるフラッシュメモリ240を備える。フラッシュメモリ240は、プリンタ装置200に内蔵されていてもよいし、プリンタ装置200に対して脱着可能とされていてもよい。
制御部230は、CPU(Central Processing Unit)200、CPU I/F201、メインメモリアービタ202、メモリコントローラ203、符号化部204、復号部205、階調処理部206、エンジンコントローラ207、フラッシュメモリコントローラ241、エンコーダ242およびデコーダ243を含む。
CPU212は、メインメモリ210に格納されるプログラムに従い、このカラープリンタ200の全体の動作を制御する。CPU212は、CPU I/F201を介してメインメモリアービタ202に接続される。メインメモリアービタ202は、CPU212、符号化部204、復号部205、通信コントローラ208、フラッシュメモリコントローラ241、エンコーダ242およびデコーダ243の、メインメモリ210に対するアクセスを調停する。
メインメモリ210は、メモリコントローラ203を介してメインメモリアービタ202に接続される。メモリコントローラ203は、メインメモリ210に対するアクセスの制御を行う。
メインメモリ210は、プログラム領域210A、PDLデータ格納領域210B、CMYKバンドデータ格納領域210C、CMYKページ符号格納領域210Dおよびその他の領域210Eを有する。プログラム領域210Aは、CPU212が動作するためのプログラムが格納される。PDLデータ格納領域210Bは、例えばコンピュータ220から供給されたPDLデータが格納される。CMYKバンドデータ格納領域210Cは、CMYKバンドデータが格納される。CMYKページ符号格納領域210Dは、バンドデータが圧縮符号化された符号化データが格納される。領域210Eは、上述した以外のデータが格納される。
符号化部204は、メインメモリ210に格納されるバンドデータを符号化する。符号化されたバンドデータは、メインメモリアービタ202およびメモリコントローラ203を介してメインメモリ210に供給され、CMYKページ符号格納領域210Dに書き込まれる。復号部205は、後述するプリンタエンジン211に同期して、符号化部204で符号化されメインメモリ210に書き込まれた符号化バンドデータをメインメモリ210から読み出して復号する。復号されたバンドデータは、階調処理部206に供給される。階調処理部206は、復号部205から供給されたバンドデータに対して階調処理を施してエンジンコントローラ207に転送する。
エンジンコントローラ207は、プリンタエンジン211を制御する。図1では、プリンタエンジン211としてCMYK各色の版のうち1の版のものだけが記載され、その他の版については煩雑さを避けるために省略されている。
通信コントローラ208は、ネットワークを介しての通信を制御する。例えば、コンピュータ220から出力されたPDL(Page Description Language)データは、ネットワークを介して通信コントローラ208により受信される。通信コントローラ208は、受信したPDLデータを、メインメモリアービタ202およびメインメモリコントローラ203を介してメインメモリ210に転送する。
なお、ネットワークは、LAN(Local Area Network)などの所定の範囲内で通信を行うものでもよいし、インターネットなどより広範囲に通信可能なものでもよい。また、ネットワークは、有線通信に限らず無線通信を用いたものでもよいし、USB(Universal Serial Bus)やIEEE(Institute Electrical and Electronics Engineers)1394といったシリアル通信を行うものでもよい。
フラッシュメモリ240は、CPU212上で動作するためのプログラムや、当該プログラムに用いられる各種データが、本実施形態に適用される圧縮符号化方法により圧縮符号化されて格納される。例えば、このプリンタ装置200に対して追加される機能を実現するためのプログラムが圧縮符号化されて、フラッシュメモリ240に格納される。これに限らず、このプリンタ装置200の基本的な動作を実現するためのプログラムを、圧縮符号化してフラッシュメモリ240に格納してもよい。フラッシュメモリコントローラ241は、フラッシュメモリ240に対するアクセスの制御を行う。
エンコーダ242は、本実施形態に適用される圧縮符号化方法により、データの圧縮符号化を行う。また、デコーダ243は、当該圧縮符号化方法により圧縮符号化された圧縮データを、本実施形態による復号方法を用いて復号する。
このような構成において、例えば電源ONなどプリンタ装置200の起動時に、CPU212の指示に従い、フラッシュメモリコントローラ241によりフラッシュメモリ240から圧縮符号化されたデータが読み出される。この圧縮データは、例えばプログラム(プログラムデータ)や各種データが圧縮符号化されたものである。読み出された圧縮データは、メモリアービタ202を介してデコーダ243に供給される。
デコーダ243は、供給された圧縮データを本実施形態の復号方法により復号し、圧縮符号を伸張する。圧縮符号が伸張されたプログラムデータや各種データは、メモリアービタ202およびメインメモリコントローラ203を介してメインメモリ210に供給され、プログラム領域210Aに格納される。
一方、例えばプリンタ装置200の電源OFFなど動作終了時には、CPU212の指示に従い、メインメモリコントローラ203により、メインメモリ210からプログラムデータや各種データが読み出される。読み出されたこれらプログラムデータや各種データは、メインメモリアービタ202を介してエンコーダ242に供給される。
エンコーダ242は、供給されたプログラムデータや各種データを、本実施形態に適用される圧縮符号化方法を用いてそれぞれ圧縮符号化する。圧縮符号化された圧縮データは、メインメモリアービタ202を介してフラッシュメモリコントローラ241に供給され、フラッシュメモリ240に格納される。
フラッシュメモリ240は、メインメモリ210に用いられるDRAM(Dynamic Random Access Memory)などに比べ、アクセス速度が遅い。そのため、このようにフラッシュメモリ240に格納されるデータを圧縮符号化してデータサイズを小さくし、アクセス速度の遅さを補う。
プリンタ装置200の全体的な動作について、概略的に説明する。例えばコンピュータ220で生成されたPDLデータがネットワークを介して通信コントローラ208に受信され、メインメモリ210のPDLデータ格納領域210Bに記憶される。CPU212は、メインメモリ210のPDLデータ格納領域210BからPDLデータを読み出し、PDLを解析して、解析結果に基づきCMYKのバンド画像を描画する。描画されたCMYKのバンド画像によるCMYKバンドデータは、メインメモリ210のCMYKバンドデータ格納領域210Cに格納される。
符号化部204は、CMYKバンドデータ格納領域210CからCMYKバンドデータを読み出して、例えば予測符号化を用いて符号化する。CMYKバンドデータが符号化された符号化データは、メインメモリ210のCMYKページ符号格納領域210Dに格納される。
復号部205は、CMYKページ符号格納領域210DからCMYKバンドデータが符号化された符号化データを読み出して復号し、復号されたCMYKバンドデータを階調処理部206に供給する。階調処理部206は、復号部205から供給されたCMYKバンドデータに対して階調処理を施す。階調処理されたCMYKバンドデータは、プリンタエンジンコントローラ207を介してプリンタエンジン211に供給される。プリンタエンジン211は、供給されたCMYKバンドデータに基づきプリントアウトを行う。
<エンコーダ>
図2は、エンコーダ242の一例の構成を概略的に示す。エンコーダ242において、データ読み込み部300により、メインメモリ210のプログラム領域210Aから、プログラムデータや各種データ(以降、纏めてデータと呼ぶ)がメインメモリコントローラ203およびメモリアービタ202を介して読み出される。データ読み込み部300に読み込まれたデータは、スライド/リスト生成処理部301に供給される。スライド/リスト生成処理部301は、入力されたデータ(原データ)を、LZ77系の符号化方式を用いて符号化する。
スライド/リスト生成処理部301は、入力されたデータを順次記憶するFIFO方式のスライド記憶部を有する。スライド/リスト生成処理部301は、供給されたデータとスライド記憶部に記憶された過去の入力データとを順次比較する。そして、供給されたデータと過去の入力データとが一致した場合には、当該過去の入力データのスライド記憶部内の位置を示すアドレス値Addressと、一致した長さを示す値であるレングスLengthとで符号化する。両者が一致しない場合には、データ値そのものをPASS符号として符号化する。そして、これらPASS符号と、アドレス値AddressおよびレングスLengthと、両者が一致したか否かを示す一致フラグFLAGとを出力する。
このようにして符号化された符号化データは、原データ列中の2以上のデータ値を含む第1のデータ列と一致する原データ列中の第2のデータ列の第1のデータ列に対する位置を示すアドレス値と、第2のデータ列の長さを示すレングス値と、原データ列中に一致する他のデータ列が存在しない第3のデータ列および第1のデータ列を構成するデータ値とを含むことになる。
スライド/リスト生成処理部301のから出力された各値は、符号フォーマット生成処理部302に供給される。符号フォーマット生成処理部302は、供給されたPASS符号、アドレス値Address、レングスLengthおよび一致フラグFLAGとを、図3に例示されるようなフォーマットで符号化する。
図3において、PASS符号は、データ長が1ビットで値が「0」の一致フラグFLAGをヘッダとして、後に8ビットのデータ長を持つデータ値が接続されてなる。スライド符号は、データ長が1ビットで値が「1」の一致フラグFLAGをヘッダとして、その後に、それぞれデータ長が8ビットのレングスLengthおよびアドレス値Addressが順次接続される。
符号フォーマット生成処理部302で生成されたPASS符号およびスライド符号は、符号書き込み部303に供給される。符号書き込み部303は、供給されたPASS符号およびスライド符号を、メインメモリアービタ202およびフラッシュメモリコントローラ241を介してフラッシュメモリ240に書き込む。
<本発明の実施形態に係るデコーダ>
図4は、本発明の実施形態に係るデコーダ243の一例の構成を概略的に示す。デコーダ243において、符号読み込み部400により、上述したエンコーダ242で符号化された符号化データがフラッシュメモリ240から読み込まれる。符号読み込み部400に読み込まれた符号化データは、符号フォーマット解析部401に供給される。
符号フォーマット解析部401は、図3を用いて説明した符号フォーマットに従い、供給された符号化データを解釈してデータ値、または、アドレス値AddressおよびレングスLengthを取り出すと共に、一致フラグFLAGを取り出す。取り出されたこれらのデータは、スライド展開部402に供給される。このとき、符号フォーマット解析部401は、複数のデータ値を同時に出力し、スライド展開部402に供給することができる。
スライド展開部402は、直列的に接続されFIFO(First In First Out)構成とされた複数のレジスタを含む、スライド記憶部を持つ。各レジスタは、スライドと呼ばれ、それぞれ1単位(例えば1バイト)のデータを格納可能とされる。スライド展開部402は、供給されたデータ値、アドレス値Address、レングスLengthおよび一致フラグFLAGに基づき、スライド記憶部における各スライドに対してデータを展開し、符号化データを復号する。スライド展開部402は、符号フォーマット解析部401から同時に供給された一組のデータに対する処理が終了すると、その旨を符号フォーマット解析部401に通知する。スライド展開部402で復号されたデータは、データ書き込み部403に供給され、メインメモリ210のプログラム領域210Aに書き込まれる。
図5は、デコーダ243の一例の構成をより詳細に示す。メインメモリアービタI/F100は、メインメモリアービタ202に対するインターフェイスである。メインメモリアービタI/F100は、メインメモリアービタ202に対して書き込み/読み出し要求やメモリアドレスを送信することで、メインメモリ210へのデータの書き込み、メインメモリ210からのデータの読み出しなどを行う。
符号読み込み部400は、符号アドレス生成部102で生成されたアドレス情報に基づきメインメモリアービタI/F100に対してメモリアドレスを送信する。メインメモリアービタI/F100は、符号読み込み部400から送信されたメモリアドレスに基づき、メインメモリ210のプログラム領域210Aから符号化データを読み出すように、メインメモリアービタ202に対して要求する。この要求に応じてメインメモリ210のプログラム領域210Aから読み出された符号化データが、メインメモリアービタI/F100に受信され、符号読み込み部400に供給される。符号読み込み部400は、受信した符号化データを、例えばビット列として符号フォーマット解析部401に転送する。
符号フォーマット解析部401は、符号読み込み部400から転送された符号化データを、図3に示した符号フォーマットに従い解析して、PASS符号およびスライド符号を抽出する。そして、抽出したPASS符号をデータ値として出力する。また、符号フォーマット解析部401は、スライド符号からレングスLengthおよびアドレス値Addressをそれぞれ取り出して出力する。
ここで、符号フォーマット解析部401は、符号化データからp個(nは1以上の整数)のPASS符号が連続的に抽出された場合に、このp個のPASS符号によるデータ値を、1のタイミングで、同時並列的に出力することができる。図5の例では、p=4とされ、4のデータ値A〜Dを同時に出力可能とされている。
一例として、符号フォーマット解析部401は、符号読み込み部400から供給された符号化データによるビット列をビット毎にレジスタに格納する。そして、例えば論理回路を組み合わせた構成を用いて、レジスタに格納されたビット列から一致フラグFLAGを抽出し、抽出された一致フラグFLAGに基づきPASS符号が連続しているか否かを判定する。PASS符号が連続していると判定された場合に、これら連続しているPASS符号によるデータ値をレジスタから同時に読み出させる。
符号フォーマット解析部401は、同時に出力するデータ値の数をデータ数として出力する。また、符号フォーマット解析部401は、1のタイミングに出力されるデータがPASS符号によるデータ値か、スライド符号によるレングスLengthおよびアドレス値Addressかを示す一致フラグFLAGを出力する。
図6は、符号フォーマット解析部401における一例の符号フォーマット解析処理を示すフローチャートである。先ず、ステップS100で、ヘッダの読み込みを制御するためのフラグHFLGの値が「0」に初期化される。次のステップS101で、フラグHFLGの値が「0」であるか否かが判定される。
若し、フラグHFLGの値が「0」であると判定されたら、符号化データのヘッダを読み込むために、処理がステップS102に移行される。ステップS102では、符号読み込み部400から供給された符号化データから、ヘッダである先頭の1ビットを読み込み、処理がステップS103に移行される。一方、ステップS101でフラグHFLGの値が「0」ではないと判定されたら、処理は直接的にステップS103に移行され、ヘッダの読み込みが行われない。
ステップS103では、ヘッダの値がPASS符号を示しているか否かを判定する。若し、PASS符号ではないと判定されたら、処理はステップS104に移行される。この場合、ヘッダに続く符号化データはスライド符号であるので、ヘッダ直後から16ビットを読み出し、スライド符号によるレングスLengthおよびアドレス値Addressを読み込む。処理はステップS105に移行され、一致フラグFLAGの値が「2」とされると共に、レングスLengthおよびアドレス値Addressをスライド展開部402に供給する。そして、次のステップS106でフラグHFLGの値が「0」とされて処理がステップS137に移行される。
一方、ステップS103で、読み込んだヘッダの値がPASS符号を示していると判定されたら、処理はステップS110に移行される。ステップS110では、ヘッダ直後から8ビットを読み出し、PASS符号によるデータ値を読み込む。このステップS103で読み込まれたデータ値を、データ値Aとする。
次のステップS111で、次のヘッダが読み込まれる。すなわち、ステップS111では、ステップS110で読み込まれたPASS符号の直後の1ビットが読み出される。次のステップS112で、読み込まれたヘッダがPASS符号を示しているか否かを判定する。これにより、2のPASS符号が連続しているか否かを判定できる。若し、PASS符号を示していないと判定されたら、処理はステップS130に移行され、データ数の値が「1」とされる。そして、処理がステップS133に移行される。
ステップS133では、フラグHFLGの値が「1」とされ、後述するステップS138の判定で処理がステップS101に戻された際に、ヘッダを読まないことが示される。すなわち、ステップS112、ステップS115またはステップS118で、処理対象の符号化データがスライド符号であることが判明しているため、ステップS102で改めてヘッダを読み込む必要が無い。ステップS133でフラグHFLGの値が設定されると、処理は後述するステップS136に移行される。
一方、ステップS112で、読み込まれたヘッダがPASS符号を示していると判定されたら、処理はステップS113に移行される。この場合、少なくとも2のPASSが連続していることになる。符号ステップS113では、ヘッダ直後から8ビットを読み出し、PASS符号によるデータ値を読み込む。このステップS113で読み込まれたデータ値を、データ値Bとする。
次のステップS114で、次のヘッダが読み込まれる。すなわち、ステップS114では、ステップS113で読み込まれたPASS符号の直後の1ビットが読み出される。次のステップS115で、読み込まれたヘッダがPASS符号を示しているか否かを判定する。上述のステップS112同様、これにより、3のPASS符号が連続しているか否かが判定できる。若し、PASS符号を示していないと判定されたら、処理はステップS131に移行され、データ数の値が「2」とされる。そして、処理がステップS133に移行される。
一方、ステップS115で、読み込まれたヘッダがPASS符号を示していると判定されたら、処理はステップS116に移行される。ステップS116では、ヘッダ直後から8ビットを読み出し、PASS符号によるデータ値を読み込む。このステップS116で読み込まれたデータ値を、データ値Cとする。
次のステップS117で、次のヘッダが読み込まれる。すなわち、ステップS117では、ステップS116で読み込まれたPASS符号の直後の1ビットが読み出される。次のステップS118で、読み込まれたヘッダがPASS符号を示しているか否かが判定される。これにより、4のPASS符号が連続しているか否かが判定できる。若し、PASS符号を示していないと判定されたら、処理はステップS132に移行され、データ数の値が「3」とされる。そして、処理がステップS133に移行される。
一方、ステップS118で、読み込まれたヘッダがPASS符号を示していると判定されたら、処理はステップS119に移行される。ステップS119では、ヘッダ直後から8ビットを読み出し、PASS符号によるデータ値を読み込む。このステップS119で読み込まれたデータ値を、データ値Dとする。そして、次のステップS134でデータ数の値が「4」とされ、ステップS135でフラグHFLGの値が「0」とされ、処理がステップS136に移行される。
ステップS136では、一致フラグFLAGの値が「1」とされ、この一致フラグFLAGと、データ数と、データ値A〜DのうちステップS110〜ステップS119で読み込まれたデータとがスライド展開部402に転送される。このとき、これら一致フラグFLAG、データ数およびデータ値A〜Dは、1クロックで同時並列的に転送される。
ステップS136でデータ転送が行われると、処理はステップS137に移行される。ステップS137では、ステップS136で転送されたデータに対するスライド展開部402における処理が終了するまで待機される。
スライド展開部402からの処理が終了した旨の通知を受信すると、処理がステップS138に移行され、符号読み込み部400から供給された一纏まりの符号化データに対する処理が全て終了したか否かが判定される。若し、終了したと判定されたら、図6のフローチャートによる一連の処理が終了される。一方、終了していないと判定されたら、処理はステップS101に戻される。
なお、上述では、符号フォーマット解析部401においてステップS100〜ステップS136の処理が逐次的に実行されるように説明したが、実際には、これらの一連の処理は、例えば1クロックで実行可能なものである。これは、例えば、既に述べたように、符号フォーマット解析部401を論理回路の組み合わせで構成することで可能である。また、このように符号フォーマット解析部401を構成することは、当業者であれば容易である。
図5の説明に戻り、符号フォーマット解析部401から出力されたレングスLength、アドレス値Addressおよびデータ値A〜D、ならびに、データ数および一致フラグFLAGは、それぞれスライド展開部402に転送される。スライド展開部402は、符号フォーマット解析部401から供給されたこれらのデータに基づき、後述するスライド記憶部における展開処理を行い、出力データを得る。このとき、スライド展開部402では、1のタイミングで複数の出力データを並列的に出力することができる。図5の例では、それぞれ1単位(例えば1バイト=8ビット)の4個の出力データ値#1〜#4までを同時並列的に出力することができる。スライド展開部402から1のタイミングで出力される1単位のデータの個数は、データ数として出力される。
スライド展開部402から出力された出力データ値#1〜#4およびデータ数は、データ変換部103に供給される。データ変換部103は、データ数に基づき、スライド展開部からそれぞれ1単位(例えば8ビット)で供給された出力データを、例えば32ビット単位、64ビット単位などのようなワード単位の出力データに変換する。このワード単位の出力データは、パラレルデータとしてデータ変換部103から出力され、データ書き込み部403に供給される。
データアドレス生成部104は、データ変換部103から出力されたワード単位の出力データの、フラッシュメモリ240上の書き込みアドレスを生成する。データ書き込み部403は、データアドレス生成部104で生成されたアドレス情報に基づきメインメモリアービタI/F100に対してメモリアドレスを送信する。メインメモリアービタI/F100は、データ書き込み部403から送信されたメモリアドレスに基づき、フラッシュメモリ240に出力データを書き込むように、メインメモリアービタ202に対して要求する。この要求に応じて、メインメモリアービタ202は、データ書き込み部403から供給された出力データを、フラッシュメモリコントローラ241を介してフラッシュメモリ240に書き込む。
図7は、スライド展開部402の一例の構成を示す。スライド展開部402は、入力側のセレクタ500、スライド記憶部501、出力側のセレクタ502、アドレス生成部503およびコントローラ510を有する。コントローラ510は、例えばマイクロプロセッサを有し、図示されないROMに予め格納されるプログラムに従い、セレクタ500および502、スライド記憶部501、ならびに、アドレス生成部503の動作を制御する(制御信号の経路は省略する)。
スライド展開部402に転送されたレングスLengthおよびアドレス値Addressがアドレス生成部503に供給される。アドレス生成部503は、これらレングスLengthおよびアドレス値Addressから、スライド記憶部501から出力する出力データ値を選択するためのアドレス値を生成する。このアドレス値は、スライド記憶部501に供給される。
スライド展開部402に転送されたデータ数および一致フラグFLAGは、コントローラ510に供給される。コントローラ510は、データ数をスライド記憶部501に供給すると共に、スライド記憶部501内にFIFO(First In First Out)構造で構成される複数のレジスタ(スライド)に対する書き込み許可/不許可を制御するシフト信号を生成する。シフト信号は、値が「1」で書き込み許可を示すものとする。
スライド展開部402に転送されたデータ値A〜Dは、セレクタ500およびセレクタ502にそれぞれ供給される。セレクタ500には、さらに、セレクタ502から出力される出力データ値a〜dが供給される。セレクタ500は、これらデータ値A〜Dおよび出力データ値a〜dのうち一方を選択して、データ値A〜Dとしてスライド記憶部501に供給する。
なお、実際には、データ値A〜Dのうち図6のフローチャートにおけるステップS110〜ステップS119で読み込まれたデータ、すなわち、データ値A、または、データ値AおよびB、または、データ値A〜C、または、データ値A〜Dがセレクタ500に供給される。同様に、出力データ値a〜dについても、スライド記憶部501内部の処理に応じて、出力データ値a、または、出力データ値aおよびb、または、出力データ値a〜c、または、出力データ値a〜dが出力される。煩雑さを避けるため、以下では、特に記載のない限り、これらデータ値A、または、データ値AおよびB、または、データ値A〜C、または、データ値A〜D、ならびに、出力データ値a、または、出力データ値aおよびb、または、出力データ値a〜c、または、出力データ値a〜dを、それぞれ纏めてデータ値A〜Dおよび出力データ値a〜dとする。
スライド記憶部501は、セレクタ500から供給されるデータ値A〜D、アドレス生成部503から供給されるアドレス値、ならびに、コントローラ510から供給されるデータ数に基づきデータの展開を行い、出力データ値a〜dを生成する。出力データ値a〜dは、セレクタ502に供給される。セレクタ502は、スライド展開部402に転送され、セレクタ502に直接的に供給されたデータ値A〜Dと、スライド記憶部501から出力された出力データ値a〜dとのうち一方を選択して、スライド展開部402の出力データ値#1〜#4として出力する。
図8は、スライド記憶部501の一例のハードウェア構成を示す。スライド記憶部501は、それぞれ4入力1出力のn個(例えば64個)のセレクタ3501、3502、…、350m、…、350nと、各々がレジスタからなり、それぞれ1単位のデータが格納されるn個(例えば64個)のスライド3511、3512、…、351n、…、351nと、複数の入力から隣接する1〜4個のデータを選択して出力する隣接データセレクタ352を有する。スライド3511、3512、…、351n、…、351nは、セレクタ3501、3502、…、350m、…、350nを介してFIFOを構成する。
なお、セレクタ3501、3502、…、350m、…、350nの入力数は、上述した符号フォーマット解析部401が同時並列的に出力可能なデータ値の個数pに対応するものとなる。同様に、隣接データセレクタ352が選択可能なデータ数の最大値も、当該個数pに対応する。
セレクタ3501、3502、…、350m、…、350nそれぞれに対して、コントローラ510からデータ数が供給される。スライド3511、3512、…、351m、…、351nそれぞれに対して、コントローラ510から、データの書き込みの許可/不許可を制御するシフト信号が供給される。また、隣接データセレクタ352に対して、アドレス生成部503からアドレス値が供給される。
なお、以下では、特に説明のない限り、個々のセレクタ3501、3502、…、350m、…、350nを、セレクタ350mで代表させて説明を行う。同様に、個々のスライド3511、3512、…、351n、…、351nを、スライド351mで代表させて説明を行う。
各セレクタ350mの出力は、直後に配置されるスライド351mに供給される。各スライド351mの出力は、隣接データセレクタ352に供給されると共に、当該スライド351mの後に配置される4のセレクタ350m+1、350m+2、350m+3およびセレクタ350m+4の4のセレクタに供給される。
例えば、スライド3511の出力は、隣接データセレクタ352に供給されると共に、セレクタ3502、3503、3504および3505に供給される。スライド3512の出力は、隣接データセレクタ352に供給されると共に、セレクタ3503、3504、3505および3506に供給される。
なお、最後尾側(隣接データセレクタ352側)のスライド351mで、後に配置されるセレクタ350mの数が4未満の場合は、スライド351mの出力が隣接データセレクタ352に供給されると共に、当該スライド351mの後に配置される1〜3のセレクタ350mそれぞれに供給される。最後尾のスライド351nの出力は、隣接データセレクタ352のみに供給される。
ここで、各セレクタ350mの4の入力をそれぞれ第1入力端、第2入力端、第3入力端および第4入力端とする。第1入力端には、セレクタ350m直前のスライド351m-1の出力が供給される。第2入力端には、2つ前のスライド351m-2の出力が供給される。第3入力端には、3つ前のスライド351m-3の出力が供給される。第4入力端には、4つ前のスライド351m-4の出力が供給される。
また、図8において左端に示される先頭(データ値入力側)のセレクタ3501の第1入力端〜第4入力端には、データ値A〜Dがそれぞれ供給される。その後のセレクタ3502の第1入力端にはスライド3511の出力が入力され、第2〜第4入力端にはデータ値B〜Dがそれぞれ供給される。さらにその後のセレクタ3502の第1および第2入力端にはスライド3511および3512の出力がそれぞれ入力され、第3および第4入力端にはデータ値CおよびDがそれぞれ入力される。次のセレクタ3503の第1〜第3入力端にはスライド3511〜3513の出力がそれぞれ入力され、第4入力端にはデータ値Dが入力される。
このように、各セレクタ350mの第1入力端〜第4入力端に、各データ値が符号化前の並び順に従って入力される。これは、隣接して配置される4のセレクタ350m〜350m+3の対応する入力端は、各データ値の符号化前の並び順に従って入力されることも意味する。このとき、データ値の入力側に配置されるセレクタ350mに、データ値の符号化前の並び順でより後のデータ値が入力される。
また、各セレクタ350mは、第1入力端〜第4入力端のうちデータ数が示す値に対応する入力端を選択し、当該入力端に供給されたデータ値を、スライド351mに書き込む。より具体的には、セレクタ350mは、データ数が「1」を示していれば、第1入力端に供給されたデータ値を選択して、スライド351mに書き込む。また、データ数が「4」を示していれば、セレクタ350mは、第4入力端に供給されたデータ値を選択して、スライド351mに書き込む。
このデータ数に従った動作は、セレクタ3501〜350nについて同時に行われる。これにより、スライド3511〜351nに書き込まれたデータ値を、データ数が示す個数のスライド分、出力側にシフトできる。
すなわち、データ数が「4」を示していれば、スライド351mに書き込まれたデータ値がスライド351m+4にシフトされる。また、データ数が「1」を示していれば、スライド351mに書き込まれたデータ値がスライド351m+1にシフトされる。
隣接データセレクタ352は、各スライド3511〜351nの出力のうち、アドレス値により指定されるスライド351mを基点として、スライド351mからデータ値の入力側のスライド3511に向けて順次隣接するスライドの出力を選択する。例えば、スライド351m、351m-1、351m-2および351m-3の出力が選択される。選択された出力は、出力データ値a〜dとしてスライド記憶部501から出力される。
上述のデータ値のシフトおよび隣接データセレクタ352からの出力データ値の出力は、図8に示される構成から明らかなように、例えば1クロックで行うことが可能である。
図9〜図11のフローチャートを用いて、スライド展開部402における一例の処理について説明する。図9は、スライド展開部402における処理の概略を示す一例のフローチャートである。なお、上述したように、符号フォーマット解析部401は、複数のデータ値A〜Dを同時並列的に出力することができる。以下では、この符号フォーマット解析部401から同時並列的に出力される1または複数のデータ値を、適宜、1組のデータ値として説明を行う。
先ず、コントローラ510は、符号フォーマット解析部401から供給された一致フラグFLAGに基づき、符号フォーマット解析部401で解析された符号化データがPASS符号であるか否かを判定する。なお、一致フラグFLAG=1で、解析された符号化データがPASS符号であることを示し、一致フラグFLAG=2で、当該符号化データがPASS符号以外、すなわちスライド符号であることを示すものとする。
若し、一致フラグFLAG=1であって、解析された符号化データがPASS符号であると判定されたら、処理はステップS401に移行され、PASS符号に対する処理が行われる。このとき、スライド展開部402において、コントローラ510は、セレクタ500および502を、データ値A〜Dが入力される入力端側を選択するように制御する。PASS符号による1組のデータ値について処理が終了すると、処理はステップS403に移行される。
一方、ステップS400で、一致フラグFLAG=1ではない、すなわち、一致フラグFLAG=2であって、解析された符号化データがスライド符号であると判定されたら、処理はステップS402に移行され、スライド符号に対する処理が行われる。このとき、スライド展開部402において、コントローラ510は、セレクタ500および502を、出力データ値a〜dが入力される入力端側を選択するように制御する。処理が終了すると、処理はステップS403に移行される。
ステップS403では、コントローラ510は、解析された符号化データに対する処理が終了した旨を、フォーマット解析部401に通知する。そして、次のステップS404で、コントローラ510は、処理すべき一纏まりの符号化データに対する処理が全て終了したか否かを判定する。若し、全ての符号化データに対する処理が終了していないと判定されたら、処理はステップS400に戻される。一方、全ての符号化データに対する処理が終了したと判定されたら、一連の処理が終了される。
図10は、上述したステップS401による、スライド展開部402におけるPASS符号に対する一例の処理を示すフローチャートである。この図10のフローチャートでは、ステップS410、ステップS414およびステップS418で、符号フォーマット解析部401から受け取ったデータ値のデータ数を判定し、判定結果に応じて、データ数に従った処理を行う。
ステップS410では、データ数が「1」であるか否かが判定される。若し、データ数が「1」であると判定されたら、処理がステップS411に移行される。ステップS411では、コントローラ510は、データ数を「1」としてスライド記憶部501に渡すと共に、符号フォーマット解析部401から受け取ったデータ値Aをスライド記憶部501に供給する。また、コントローラ510は、書き込み許可を示すシフト信号「1」をスライド記憶部501に供給する。
スライド記憶部501では、データ数が「1」なので各セレクタ350mにおいて第1入力端が選択される。これにより、各スライド351mの記憶内容が1だけ後ろのスライド351m+1にシフトされると共に、先頭のスライド3511にデータ値Aが書き込まれる。
処理はステップS412に移行され、コントローラ510によりセレクタ502が制御され、符号フォーマット解析部401から受け取ったデータ値Aが出力データ値#1として直接的に出力される。出力されたこの出力データ値#1は、データ変換部103に供給される。出力データ値#1は、さらに、セレクタ500にも供給される。
次に、ステップS413で、出力データ数が「1」とされ、データ変換部103に渡される。そして、1組の符号化データに対する処理が終了され、処理が図9のフローチャートのステップS403に移行される。
若し、上述のステップS410でデータ数が「1」ではないと判定されたら、処理はステップS414に移行される。ステップS414では、データ数が「2」であるか否かが判定される。若し、データ数が「2」であれば、処理がステップS415に移行される。ステップS415では、コントローラ510は、データ数を「2」としてスライド記憶部501に渡すと共に、符号フォーマット解析部401から供給された2のデータ値、すなわちデータ値Aおよびデータ値Bをスライド記憶部501に供給する。また、コントローラ510は、書き込み許可を示すシフト信号「1」をスライド記憶部501に供給する。
スライド記憶部501では、データ数が「2」なので各セレクタ350mにおいて第2入力端が選択される。これにより、各スライド351mの記憶内容が2だけ後のスライド351m+2にシフトされると共に、スライド3512にデータ値Aが書き込まれ、スライド3511にデータ値Bが書き込まれる。
処理はステップS416に移行され、コントローラ510によりセレクタ502が制御され、符号フォーマット解析部401から受け取ったデータ値AおよびBが出力データ値#1および#2として直接的に出力される。出力されたこれら出力データ値#1および#2は、データ変換部103に供給される。出力データ値#1および#2は、さらに、セレクタ500にも供給される。
次に、ステップS417で、出力データ数が「2」とされ、データ変換部103に渡される。そして、1組の符号化データに対する処理が終了され、処理が図9のフローチャートのステップS403に移行される。
若し、上述のステップS414でデータ数が「2」ではないと判定されたら、処理はステップS418に移行される。ステップS418では、データ数が「3」であるか否かが判定される。若し、データ数が「3」であれば、処理がステップS419に移行される。ステップS419では、コントローラ510は、データ数を「3」としてスライド記憶部501に渡すと共に、符号フォーマット解析部401から供給された3のデータ値、すなわちデータ値A〜Cをスライド記憶部501に供給する。また、コントローラ510は、書き込み許可を示すシフト信号「1」をスライド記憶部501に供給する。
スライド記憶部501では、データ数が「3」なので各セレクタ350mにおいて第3入力端が選択される。これにより、各スライド351mの記憶内容が3だけ後のスライド351m+3にシフトされると共に、スライド3513にデータ値Aが書き込まれ、スライド3512にデータ値Bが書き込まれ、スライド3513にデータ値Cが書き込まれる。
処理はステップS420に移行され、コントローラ510によりセレクタ502が制御され、符号フォーマット解析部401から受け取ったデータ値A〜Cが出力データ値#1〜#3として直接的に出力される。出力されたこれら出力データ値#1〜#3は、データ変換部103に供給される。出力データ値#1〜#3は、さらに、セレクタ500にも供給される。
次に、ステップS421で、出力データ数が「3」とされ、データ変換部103に渡される。そして、1組の符号化データに対する処理が終了され、処理が図9のフローチャートのステップS403に移行される。
若し、上述のステップS418でデータ数が「3」ではないと判定されたら、データ数が「4」であると判断でき、処理がステップS422に移行される。ステップS422では、コントローラ510は、データ数を「4」としてスライド記憶部501に渡すと共に、符号フォーマット解析部401から供給された4のデータ値、すなわちデータ値A〜Dをスライド記憶部501に供給する。また、コントローラ510は、書き込み許可を示すシフト信号「1」をスライド記憶部501に供給する。
スライド記憶部501では、データ数が「4」なので各セレクタ350mにおいて第4入力端が選択される。これにより、各スライド351mの記憶内容が4だけ後のスライド351m+4にシフトされると共に、スライド3511〜スライド3514に、それぞれデータ値A〜Dが書き込まれる。
処理はステップS423に移行され、コントローラ510によりセレクタ502が制御され、符号フォーマット解析部401から受け取ったデータ値A〜Dが出力データ値#1〜#4として直接的に出力される。出力されたこれら出力データ値#1〜#4は、データ変換部103に供給される。出力データ値#1〜#4は、さらに、セレクタ500にも供給される。
次に、ステップS424で、出力データ数が「4」とされ、データ変換部103に渡される。そして、1組の符号化データに対する処理が終了され、処理が図9のフローチャートのステップS403に移行される。
図11は、上述したステップS402による、スライド展開部402におけるスライド符号に対する一例の処理を示すフローチャートである。この図11のフローチャートでは、上述のPASS符号に対する処理で各スライド351mに書き込まれたデータ値と、スライド符号のレングスLengthおよびアドレス値Addressとに基づき出力データ値を生成する。
先ず、ステップS450で、レングスLengthを4で除した際の商を求め、ループ変数WLengとする。例えば、レングスLengthを2ビット右シフトさせることで、このループ変数WLengが得られる。次のステップS451で、ループ変数WLengが「0」であるか否かが判定される。若し、「0」であると判定されたら、処理はステップS461に移行される。
一方、ループ変数WLengが「0」ではないと判定されたら、処理はステップS452に移行される。ステップS452で、コントローラ510は、アドレス生成部503で生成されたアドレス値に従い、スライド記憶部501から出力データ値a〜dを読み出す。
このアドレス値は、隣接データセレクタ352に対して、符号化データから抽出されたアドレス値Addressにより、スライド3511、3512、…のうち、データ値の入力側のスライド3511から、アドレス値Addressで示される数だけ進んだ位置のスライド351mの出力を指定する。以降、スライド3511からアドレス値Addressで示される数だけ進んだ位置のスライド351mを、スライド351Addressと呼ぶ。
隣接データセレクタ352は、このアドレス値により指定されたスライド351Addressからスライド3511の側に向けて順次隣接する4のスライドである、スライド351Address、351Address-1、351Address-2および351Address-3の出力を選択する。選択された、スライド351Address、351Address-1、351Address-2および351Address-3の出力が、それぞれ出力データ値a〜dとして読み出され、セレクタ502に供給される。
次のステップS453で、ステップS452で読み出された出力データ値a〜dがデータ値A〜Dとしてセレクタ500に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ500は、出力データ値側が選択されている。
次のステップS454で、コントローラ510は、スライド記憶部501に対し、データ数を「4」として供給すると共に、書き込み許可を示すシフト信号「1」を供給する。また、セレクタ500から出力されたデータ値A〜Dがスライド記憶部501に供給される。スライド記憶部501では、データ数が「4」なので各セレクタ350mにおいて第4入力端が選択される。これにより、各スライド351mの記憶内容が4だけ後のスライド351m+4にシフトされると共に、スライド3511〜スライド3514に、それぞれデータ値A〜Dが書き込まれる。
次のステップS455で、セレクタ502から出力データ値a〜dが出力データ値#1〜#4として出力され、さらに次のステップS456で、出力データ数「4」がコントローラ510から出力される。これら出力データ値#1〜#4および出力データ数「4」は、データ変換部103に供給される。そして、次のステップS457で、ループ変数WLengから「1」が減ぜられる。
処理はステップS458に移行され、ループ変数WLengの値が「0」より大きいか否かが判定される。若し、「0」より大きいと判定されたら、処理がステップS452に戻される。
一方、ステップS458で、ループ変数WLengの値が「0」以下であると判定されたら、処理はステップS459に移行される。ステップS459では、レングスLengthを4で除した際の余りが新たなレングスLengthとして求められる。例えば、上述のステップS450におけるレングスLengthの2ビット右シフトを再び行い、得られた変数WLengに対して2ビット左シフトを行う。レングスLengthからこの変数WLengを2ビット左シフトさせた値を減じて、新たなレングスLengthを得る。
次のステップS460では、レングスLengthの値が「0」であるか否かが判定される。若し、「0」であると判定された場合、現在処理対象としているスライド符号に対する処理が全て終了したことを意味する。この場合、スライド符号に対する一連の処理が終了され、処理が図9のステップS403に移行される。
一方、ステップS460で、レングスLengthの値が「0」ではないと判定されたら、処理はステップS461に移行され、レングスLengthの値が「1」であるか否かが判定される。若し、「1」であると判定されたら、処理はステップS462に移行される。ステップS462では、コントローラ510は、アドレス生成部503で生成されたアドレス値に従い、スライド記憶部501の隣接データセレクタ352に対してスライド351Addressの出力を指定して、このスライド351AddressからレングスLengthに示される長さだけ出力データ値を読み出す。ここでは、レングスLengthが「1」であるので、1の出力データ値aを読み出す。
次のステップS463で、ステップS462で読み出された出力データ値aがデータ値Aとしてセレクタ500に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ500は、出力データ値側が選択されている。
次のステップS464で、コントローラ510は、スライド記憶部501に対して、データ数を「1」として供給すると共に書き込み許可を示すシフト信号「1」を供給する。また、セレクタ500から出力されたデータ値Aがスライド記憶部501に供給される。スライド記憶501では、データ数が「1」なので各セレクタ350mにおいて第1入力端が選択される。これにより、各スライド351mの記憶内容が1だけ後のスライド351m+1にシフトされると共に、スライド3511にデータ値Aが書き込まれる。
次のステップS465で、セレクタ502から出力データ値aが出力データ値#1として出力され、さらに次のステップS466で、出力データ数「1」がコントローラ510から出力される。これら出力データ値#1および出力データ数「1」は、データ変換部103に供給される。そして、スライド符号に対する一連の処理が終了され、処理が図9のステップS403に移行される。
上述のステップS461で、レングスLengthの値が「1」ではないと判定されたら、処理はステップS467に移行される。ステップS467では、レングスLengthの値が「2」であるか否かが判定される。若し、「2」であると判定されたら、処理はステップS468に移行される。ステップS468では、コントローラ510は、アドレス生成部503で生成されたアドレス値に従い。スライド記憶部501の隣接データセレクタ352に対してスライド351Addressの出力を指定して、このスライド351AddressからレングスLengthに示される長さだけ出力データ値を読み出す。ここでは、レングスLengthが「2」であるので、2の出力データ値aおよびbを読み出す。
次のステップS469で、ステップS468で読み出された出力データ値aおよびbがデータ値AおよびBとしてセレクタ500に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ500は、出力データ値側が選択されている。
次のステップS470で、コントローラ510は、スライド記憶部501に対して、データ数を「2」として供給すると共に書き込み許可を示すシフト信号「1」を供給する。また、セレクタ500から出力されたデータ値AおよびBがスライド記憶部501に供給される。スライド記憶501では、データ数が「2」なので各セレクタ350mにおいて第2入力端が選択される。これにより、各スライド351mの記憶内容が2だけ後のスライド351m+2にシフトされると共に、スライド3511にデータ値Aが書き込まれ、スライド3512にデータ値Bが書き込まれる。
次のステップS471で、セレクタ502から出力データ値aおよびbが出力データ値#1および#2として出力され、さらに次のステップS472で、出力データ数「2」がコントローラ510から出力される。これら出力データ値#1および#2、ならびに、および出力データ数「2」は、データ変換部103に供給される。そして、スライド符号に対する一連の処理が終了され、処理が図9のステップS403に移行される。
上述のステップS467で、レングスLengthの値が「2」ではないと判定されたら、レングスLengthの値が「3」に確定し、処理がステップS473に移行される。ステップS473では、コントローラ510は、アドレス生成部503で生成されたアドレス値に従い、スライド記憶部501の隣接データセレクタ352に対してスライド351Addressの出力を指定して、このスライド351AddressからレングスLengthに示される長さだけ出力データ値を読み出す。ここでは、レングスLengthが「3」であるので、3の出力データ値a〜cを読み出す。
次のステップS474で、ステップS473で読み出された出力データ値a〜cがデータ値A〜Cとしてセレクタ500に供給される。このとき、現在の処理がスライド符号に対する処理であるので、セレクタ500は、出力データ値側が選択されている。
次のステップS475で、コントローラ510は、スライド記憶部501に対して、データ数を「3」として供給すると共に書き込み許可を示すシフト信号「1」を供給する。また、セレクタ500から出力されたデータ値A〜Cがスライド記憶部501に供給される。スライド記憶501では、データ数が「3」なので各セレクタ350mにおいて第3入力端が選択される。これにより、各スライド351mの記憶内容が3だけ後のスライド351m+3にシフトされる。そして、スライド3511にデータ値Aが、スライド3512にデータ値Bが、スライド3513にデータ値Cがそれぞれ書き込まれる。
次のステップS476で、セレクタ502から出力データ値a〜cが出力データ値#1〜#3として出力され、さらに次のステップS477で、出力データ数「3」がコントローラ510から出力される。これら出力データ値#1〜#3、ならびに、および出力データ数「3」は、データ変換部103に供給される。そして、スライド符号に対する一連の処理が終了され、処理が図9のステップS403に移行される。
次に、本実施形態による復号処理について、具体的な例を用いて説明する。図12は、スライド展開部402における入出力と各スライド351mの状態の例を示す。図12の左側がスライド展開部402に入力される、PASS符号またはスライド符号から取り出されたデータの例を示す。また、図12の右側がスライド展開部402から出力される出力データ値の例を示す。図12の中央部は、スライド記憶部501の各スライド351mに格納されるデータの例を示す。
図12の例では、スライド記憶部501は、16個のスライド3511〜スライド35116を持つものとする。図12では、これらスライド3511〜スライド35116を、データ値入力側に近い方から、スライド#0、スライド#2、…、スライド#A、…、スライド#Fの如く、16進数の番号を付して示す。この番号は、アドレス値Addressに基づきアドレス生成部503で生成されるアドレス値に対応する。
以下では、PASS符号およびスライド符号から、データ値列「(A)、(B)、(C)、(A)、(B)、(E)、(A)、(B)、(C)、(A)」を復元する場合を例にとって説明する。
処理#1で、符号フォーマット解析部401からスライド展開部402に対して、図12の左側に示されるように、PASS符号によるデータ値(A)、(B)および(C)が同時に転送される。このとき、PASS符号であることを示す値「1」の一致フラグFLAGと、データ数「3」もスライド展開部402に転送される。
一致フラグFLAG=1なのでPASS符号が転送されたと判定され(図9のステップS400)、スライド展開部402のセレクタ500および502において、データ値側の入力端が選択される。また、図10のステップS410、ステップS414およびステップS418でデータ数による判定が行われる。データ数=3なので、データ値(A)、(B)および(C)がスライド#0、#1および#2に追加される(図10のステップS419)と共に、データ値(A)、(B)および(C)がセレクタ502から同時に出力される。また、出力データ数「3」も、出力される。
処理#2で、符号フォーマット解析部401からスライド展開部402に対して、スライド符号によるアドレス値AddressおよびレングスLengthが転送される。ここでは、アドレス値AddressおよびレングスLengthがそれぞれ値「2」であるものとする。このとき、スライド符号であることを示す値「2」の一致フラグFLAGもスライド展開部402に転送される。
なお、処理#2の時点では、上述の処理#1によりスライド記憶部501においてスライド#0、#1および#2に対してデータ値(A)、(B)および(C)が格納されている。
一致フラグFLAG=2なのでスライド符号が転送されたと判定され(図9のステップS400)、スライド展開部402のセレクタ500および502において、出力データ値側が選択される。レングスLengthが値「2」なので、図11のステップS450で求められたループ変数WLengは値「0」とされ、ステップS460、ステップS461およびステップS462でレングスLengthによる判定が行われる。
この例では、アドレス値Address=2、レングスLength=2なので、図11のステップS468により、アドレス値Addressに基づくアドレス値に示されるスライド#2からデータ値入力側に向けて、レングスLengthに示される値に従い、2のスライド#2および#1のデータ値すなわちデータ値(A)および(B)が読み出される。
これら読み出されたデータ値(A)および(B)は、セレクタ502からセレクタ500に供給される(図11のステップS469)。そして、データ数を「2」としてスライド記憶部501に供給する。このデータ数「2」に従い、スライド#0〜#15それぞれの記憶内容が2スライド分出力側のスライドにシフトされると共に、ステップS468で読み出したデータ値(A)および(B)がスライド#0および#1に追加される(図11のステップS470)。これにより、スライド記憶部501では、データ値(B)、(A)、(C)、(B)および(A)がスライド#0〜#4に格納されている状態となる。
当該データ値(A)および(B)がセレクタ502から同時に出力される(図11のステップS471)。また、出力データ数「2」も、出力される(図11のステップS472)。
処理#3で、符号フォーマット解析部401からスライド展開部402に対してPASS符号によるデータ値(E)が転送される。このとき、PASS符号であることを示す値「1」の一致フラグFLAGとデータ数「1」もスライド展開部402に転送される。
一致フラグFLAG=1なのでPASS符号が転送されたと判定され(図9のステップS400)、スライド展開部402のセレクタ500および502において、データ値側の入力端が選択される。また、図10のステップS410、ステップS414およびステップS418でデータ数による判定が行われる。データ数「1」に従い、スライド#0〜#15それぞれの記憶内容が1スライド分出力側のスライドにシフトされると共に、データ値(E)がスライド#0に追加される(図10のステップS411)。また、データ値(A)がセレクタ502から出力されると共に、出力データ数「1」が出力される。
以下、同様にして、スライド展開部402に転送されるデータ値、または、アドレス値AddressおよびレングスLengthに基づき、スライド#0〜#Fに格納される各データ値のシフトと、スライド#0〜#Fに対するデータ値の追加と、スライド展開部402からの出力データ値の出力とが行われる。
処理#4で、スライド符号によるアドレス値AddressおよびレングスLengthが、それぞれ値「5」として転送されると共に、スライド符号であることを示す値「2」の一致フラグFLAGがスライド展開部402に転送される。この処理#4の時点では、上述の処理#3まででスライド記憶部501においてスライド#0〜#5に対してデータ値(A)、(B)、(C)、(A)、(B)、(E)が格納されている。
レングスLengthが値「5」なので図11のステップS450で求められたループ変数WLengは値「1」とされ、図11のステップS452により、アドレス値Addressに基づくアドレス値に示されるスライド#5からデータ値入力側に向けて、4のデータ値、すなわち、スライド#5、#4、#3および#2のデータ値(A)、(B)、(C)および(A)が読み出される。読み出されたデータ値(A)、(B)、(C)および(A)は、セレクタ502からセレクタ500に供給される(図11のステップS453)。
そして、データ数を「4」としてスライド記憶部501に供給する。このデータ数「4」に従い、スライド#0〜#Fそれぞれの記憶内容が4スライド分、出力側のスライドにシフトされると共に、ステップS452で読み出されセレクタ500に供給されたデータ値(A)、(B)、(C)および(A)が、スライド#0〜#3に追加される(図11のステップS454)。これにより、スライド記憶部501では、データ値(A)、(B)、(C)、(A)、(B)、(E)、(A)、(B)、(C)、(A)がスライド#0〜#9に格納されている状態となる。
ステップS452で読み出されたデータ値(A)、(B)、(C)および(A)は、セレクタ502から同時に出力される(図11のステップS455)。また、出力データ数「4」も、出力される(図11のステップS456)。
ループ変数WLengが「0」なので、ステップS458の判定により、ステップS459でレングスLengthを「4」で除した際の余りが新たなレングスLengthとされる。図12の処理#4の例では、元のレングスLengthが値「5」なので、この新たなレングスLengthの値が「1」とされる。そこで、図11のステップS462で、アドレス値Addressに基づくアドレス値に示されるスライド#5のデータ値(B)が読み出される(図12の処理#5)。
この読み出されたデータ値(B)は、セレクタ502からセレクタ500に供給される(図11のステップS463)。データ数を「1」としてスライド記憶部501に供給する。このデータ数「1」に従いスライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側のスライドにシフトされると共に、ステップS462で読み出したデータ値(B)がスライド#0に追加される(図11のステップS464)。そして、図11のステップS465で、当該データ値(B)がセレクタ502から出力されると共に、図11のステップS466で、出力データ数「1」も出力される。
本実施形態においては、多入力1出力のセレクタを用い、このセレクタの出力をスライドに接続する。また、スライドの出力を、複数のセレクタにそれぞれ接続する。これにより、複数のスライドに対するデータの書き込みや、複数のスライドからのデータの読み出しを同時に行うことができる。そのため、復号処理をより高速に行うことが可能となる。
図13は、従来技術による、各スライドに対するデータの書き込みや、各スライドからのデータの読み出しを、スライド毎に逐次的に行う場合の一例の処理を示す。この図13の例でも、上述の図12の例と同様に、PASS符号およびスライド符号から、データ値列「(A)、(B)、(C)、(A)、(B)、(E)、(A)、(B)、(C)、(A)」を復元するものとする。
処理#1でPASS符号によるデータ値(A)が出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(A)がスライド#0に追加される。処理#2で、次のPASS符号によるデータ値(B)が出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(B)がスライド#0に追加される。処理#3で、次のPASS符号によりデータ値(C)が出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(C)がスライド#0に追加される。
次の処理#4で、スライド符号によるアドレス値Address(値「2」)およびレングスLength(値「2」)に基づき、先ずアドレス値Addressに示されるスライド#2からデータ値(A)が読み出され出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(A)がスライド#0に追加される。次の処理#5で、アドレス値Addressに示されるスライド#2からデータ値(B)が読み出され出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(B)がスライド#0に追加される。これら処理#4および#5で、レングスLength分の処理が終了する。
次の処理#6で、PASS符号によるデータ値(E)が出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(E)がスライド#0に追加される。
次の処理#7で、スライド符号によるアドレス値Address(値「5」)およびレングスLength(値「5」)に基づき、先ずアドレス値Addressに示されるスライド#5からデータ値(A)が読み出され出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(A)がスライド#0に追加される。次の処理#8で、アドレス値Addressに示されるスライド#5からデータ値(B)が読み出され出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(B)がスライド#0に追加される。
次の処理#9で、アドレス値Addressに示されるスライド#5からデータ値(C)が読み出され出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(C)がスライド#0に追加される。次の処理#10で、アドレス値Addressに示されるスライド#5からデータ値(A)が読み出され出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(A)がスライド#0に追加される。次の処理#11で、アドレス値Addressに示されるスライド#5からデータ値(A)が読み出され出力されると共に、スライド#0〜#Fそれぞれの記憶内容が1スライド分、出力側にシフトされ、データ値(A)がスライド#0に追加される。
このように、各スライドに対するデータ書き込みや読み出しを、スライド毎に逐次的に行う方法では、10のデータ値からなるデータ値列を復号するのに、処理#1〜処理#11の11ステップが必要となる。これに対して、図12を用いて説明した本実施形態による方法では、同じデータ値列を復号するのに、処理#1〜処理#5の5ステップで済み、処理が大幅に高速化される。
なお、上述では、符号フォーマット解析部401が同時出力を行うデータ数を4としたが、これはこの例に限定されない。すなわち、符号フォーマット解析部401が同時出力するデータ数nが5、6、…のようにさらに多くてもよいし、4未満であってもよい。この場合、スライド展開部402におけるセレクタ500および502の入力および出力数や、スライド展開部402内のスライド記憶部501におけるセレクタ3501、3502、…、350m、…、350nの入力数は、符号フォーマット解析部401が同時出力できるデータ数nと対応させるものとする。