(57)【要約】【課題】より小規模なハードウェア構成で、より高速に符号化処理を行うことを可能とする。【解決手段】スライド記憶部は、それぞれ１バイトのデータを格納するスライドが直列に接続され、ＦＩＦＯを構成する。スライド記憶部における各スライドの出力は、スライド探索部の各比較器にそれぞれ供給され、入力データと比較されると共に、リスト探索部の各比較器にそれぞれ供給される。リスト探索部では、スライド探索時には、スライド探索部で入力データとスライドのデータが一致した比較器の出力に基づき対応する比較器が比較動作を行う。そして、スライド探索時に少なくとも１の比較器で入力データとスライドのデータとが一致すると、リスト探索に移行し、リスト探索部の比較器のうち直前の比較動作で入力データとスライドのデータとが一致した比較器で、比較動作を行う。【選択図】図１１
2011066557.tif 000002
【特許請求の範囲】
【請求項１】
一方の端から入力される入力データを順次記憶し、記憶されたデータを該入力データの入力毎に他方の端側に順次移動させるスライド記憶手段と、
前記スライド記憶手段の前記一方の端から入力される入力データを、該スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、該入力データと一致する該データの該スライド記憶手段内での位置を求める第１の比較手段と、
前記第１の比較手段による比較結果に基づき、前記スライド記憶手段に記憶されるデータのうち少なくとも１つが該第１の比較手段に比較された入力データと一致するか否かを判定する第１の判定手段と、
前記スライド記憶手段の前記一方の端から入力される入力データを、該スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、該入力データと一致する該データの該スライド記憶手段内での位置を求める第２の比較手段と、
前記第２の比較手段による比較結果に基づき、前記スライド記憶手段に記憶されるデータのうち少なくとも１つが該第２の比較手段に比較された入力データと一致するか否かを判定する第２の判定手段と、
前記第１の判定手段および前記第２の判定手段の判定結果に基づき、前記第１の比較手段の比較結果と、前記第２の比較手段の比較結果とのうち何れか一方を保持する保持手段と、
前記第２の判定手段による判定結果に応じて、前記保持手段に保持される前記第１または前記第２の比較手段による比較結果に基づき、前記入力データと一致する前記データが記憶される前記スライド記憶手段内での位置を示すアドレス値を生成するアドレス値生成手段と、
前記第２の判定手段による判定結果に応じて、前記スライド記憶手段に記憶されるデータのうち前記第２の比較手段に比較された入力データと一致しているデータの、該スライド記憶手段内での位置が該スライド記憶手段に対する入力データの入力毎に連続する最長の長さを求め、該長さを示すレングス値を生成するレングス値生成手段と、
前記第１の判定手段および前記第２の判定手段による判定結果に応じて、前記入力データをそのまま用いたデータ値を生成するデータ値生成手段と、
前記アドレス値、前記レングス値および前記データ値を含む符号を生成する符号生成手段と
を有し、
前記第２の比較手段は、
前記保持手段に保持される前記第１の比較手段または前記第２の比較手段の比較結果に基づき、前記スライド記憶手段に記憶されるデータのそれぞれと、該スライド記憶手段の前記一方の端から入力される入力データとを比較する動作を制御される
ことを特徴とするデータ処理装置。
【請求項２】
前記アドレス値生成手段は、
前記第２の比較手段に比較された入力データと一致しているデータのうち、前記スライド記憶手段の前記一方の端により近いデータについて、前記最長の長さを求める
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記保持手段は、
前記第１の判定手段により、前記スライド記憶手段に記憶されたデータに、前記第１の比較手段に比較された入力データと一致するデータが存在しないと判定された場合に、前記第１の比較手段の比較結果を保持し、
前記第１の判定手段により、前記スライド記憶手段に記憶されるデータのうち少なくとも１つが該第１の比較手段に比較された入力データと一致すると判定されるか、または、前記第２の判定手段により、前記スライド記憶手段に記憶されるデータのうち少なくとも１つが該第２の比較手段に比較された入力データと一致すると判定された場合に、前記第２の比較手段の比較結果を保持する
ことを特徴とする請求項１または請求項２に記載のデータ処理装置。
【請求項４】
前記アドレス値生成手段は、
少なくとも、前記第２の判定手段により、前記第２の比較手段に比較された入力データに対して前記スライド記憶手段に記憶される全てのデータが一致しないと判定されたときに前記アドレス値を生成する
ことを特徴とする請求項１乃至請求項３の何れか１項に記載のデータ処理装置。
【請求項５】
前記レングス値生成手段は、
少なくとも、前記第２の判定手段により、前記第２の比較手段に比較された入力データに対して前記スライド記憶手段に記憶される全てのデータが一致しないと判定されたときに前記レングス値を生成する
ことを特徴とする請求項１乃至請求項４の何れか１項に記載のデータ処理装置。
【請求項６】
前記データ値生成手段は、
前記第１の判定手段により前記第１の比較手段に比較された入力データに対して前記スライド記憶手段に記憶される全てのデータが一致しないと判定されると共に、前記第２の判定手段により前記第２の比較手段に比較された入力データに対して前記スライド記憶手段に記憶される全てのデータが一致しないと判定されたときに、前記データ値を生成する
ことを特徴とする請求項１乃至請求項５の何れか１項に記載のデータ処理装置。
【請求項７】
前記第２の比較手段は、
前記保持手段に保持される前記第１または前記第２の比較手段の比較結果が、比較に用いた入力データに対して前記スライド記憶手段に記憶される全てのデータが一致しないことを示す場合に、前記比較する動作を行わないように制御される
ことを特徴とする請求項１乃至請求項６の何れか１項に記載のデータ処理装置。
【請求項８】
前記スライド記憶手段は、前記入力データを１バイト毎に記憶する
ことを特徴とする請求項１乃至請求項７の何れか１項に記載のデータ処理装置。
【請求項９】
一方の端から入力される入力データを順次記憶し、記憶されたデータを該入力データの入力毎に他方の端側に順次移動させるスライド記憶手段の該一方の端から入力される入力データを、該スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、該入力データと一致する該データの該スライド記憶手段内での位置を求める第１の比較ステップと、
前記第１の比較ステップによる比較結果に基づき、前記スライド記憶手段に記憶されるデータのうち少なくとも１つが該第１の比較ステップに比較された入力データと一致するか否かを判定する第１の判定ステップと、
前記スライド記憶手段の前記一方の端から入力される入力データを、該スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、該入力データと一致する該データの該スライド記憶手段内での位置を求める第２の比較ステップと、
前記第２の比較ステップによる比較結果に基づき、前記スライド記憶手段に記憶されるデータのうち少なくとも１つが該第２の比較ステップに比較された入力データと一致するか否かを判定する第２の判定ステップと、
前記第１の判定ステップおよび前記第２の判定ステップの判定結果に基づき、前記第１の比較ステップによる比較結果と、前記第２の比較ステップによる比較結果とのうち何れか一方を保持手段に保持する保持ステップと、
前記第２の判定ステップによる判定結果に応じて、前記保持手段に保持される前記第１の比較ステップまたは前記第２の比較ステップによる比較結果に基づき、前記入力データと一致する前記データが記憶される前記スライド記憶手段内での位置を示すアドレス値を生成するアドレス値生成ステップと、
前記第２の判定ステップによる判定結果に応じて、前記スライド記憶手段に記憶されるデータのうち前記第２の比較ステップに比較された入力データと一致しているデータの、該スライド記憶手段内での位置が該スライド記憶手段に対する入力データの入力毎に連続する最長の長さを求め、該長さを示すレングス値を生成するレングス値生成ステップと、
前記第１の判定ステップおよび第２の判定ステップによる判定結果に応じて、前記入力データをそのまま用いたデータ値を生成するデータ値生成ステップと、
前記アドレス値、前記レングス値および前記データ値を含む符号を生成する符号生成ステップと
を有し、
前記第２の比較ステップは、
前記保持手段に保持される前記第１の比較ステップまたは前記第２の比較ステップの比較結果に基づき、前記スライド記憶手段に記憶されるデータのそれぞれと、該スライド記憶手段の前記一方の端から入力される入力データとを比較する動作を制御される
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの可逆的な圧縮符号化を行うデータ処理装置およびデータ処理方法に関する。
【背景技術】
【０００２】
連長圧縮（ランレングス圧縮、RLE：Run Length Encoding）は、データ圧縮アルゴリズムの一つで、可逆圧縮に分類される。連長圧縮では、ある連続したデータを、１の当該データと、当該データの連続数とで表現することで符号化し、データの圧縮を行う。
【０００３】
例えば、データ列「A A A A A B B B B B B B B B A A A」は、符号化後のデータ列「A 5 B 9 A 3」と表せる。これは、データ「A」が５回連続し、その後にデータ「B」が９回連続し、さらにデータ「A」が３回連続していることを表す。この例では、１のデータの連続数を、当該１のデータの後に配置していが、連続数を先に配置し、その後に当該連続数のデータを配置することもできる。この場合には、上述の符号化後のデータ列は、「5 A 9 B 3 A」と表される。
【０００４】
さらに、上述の例で、データが「A」と「B」の２種類だけで、且つ、最初にデータ「A」が来ることに決めておけば、上述のデータ列は、「5 9 3」だけで表せる。このルールに従ったときにデータ「B」が最初に見つかった場合は、最初にデータ「A」が０回連続していることにすればよい。例えば、データ列「B B B A A A A A B B B B B A A A」は、符号化後のデータ列「0 3 5 5 3」で表せることになる。
【０００５】
ところで、データを効率よく圧縮する方法として、ユニバーサル符号により圧縮する方法が実用化されている。このユニバーサル符号は、情報保存型のデータ圧縮方法であり、データ圧縮時に情報源の統計的な性質を予め仮定しないため、種々のタイプ（文字コード、オブジェクトコードなど）のデータに適用することができる。
【０００６】
ユニバーサル符号の代表的な方法として、ジブ−レンペル(Ziv-Lempel)符号がある。Ziv-Lempel符号では、ユニバーサル型と、増分分解型(Incremental parsing) の２つのアルゴリズムが提案されている。これらのうち、ユニバーサル型アルゴリズムを用いた実用的な方法として、ＬＺＳＳ(Lempel-Ziv-Storer-Syzmanski)符号がある。一方、増分分解型アルゴリズムを用いた実用的な方法として、ＬＺＷ(Lempel-Ziv-Welch)符号がある。
【０００７】
ＬＺＳＳ符号のベースとなるＬＺ７７符号の符号化アルゴリズムは、符号化データを、過去のデータ系列の任意の位置から一致する最大長の系列に区切り、過去の系列の複製として符号化する。
【０００８】
より具体的には、符号化済みの入力データを格納する移動窓と、これから符号化するデータを格納する先読みバッファとを備え、先読みバッファのデータ系列と移動窓のデータ系列の全ての部分系列とを照合して、移動窓中で一致する最大長の部分系列を求める。そして、移動窓中でこの最大長の部分系列を指定するために、「その最大長の部分系列の開始位置」と「一致する長さ」と「不一致をもたらした次のシンボル」との組を符号化する。
【０００９】
次に、先読みバッファ内の符号化したデータ系列を移動窓に移して、先読みバッファ内に符号化したデータ系列分の新たなデータ系列を入力する。以下、同様の処理を繰り返していくことで、データを部分系列に分解して符号化を実行していく。
【００１０】
一般的に、ＬＺＳＳ符号化は、符号化済の入力データを保存している移動窓数分、入力データ列との最長一致を検出する必要があるため、演算量が多くなる一方で、高圧縮率が得られるといわれている。
【００１１】
また、ＬＺＷ符号の符号化アルゴリズムは、書き換え可能な辞書を設け、入力文字列を相異なる文字列に分け、この文字列を出現した順に番号を付けて辞書に登録すると共に、現在入力している文字列を辞書に登録してある最長一致文字列の辞書番号だけで表す。このＬＺＷ符号によれば、圧縮率がＬＺＳＳ符号より劣る一方で、シンプルで計算が容易であり、高速処理が可能である。そのため、記憶装置におけるファイル圧縮、データ伝送などで多く使われる。
【００１２】
上述したＬＺ７７符号では、符号化時における最長一致文字列の探索に最も時間がかかる。そのため、ＬＺ７７符号の符号化を高速化するためには、この最長一致文字列の探索の高速化が必要である。
【００１３】
特許文献１には、ハッシュ法と連結リストの組み合わせにより、２文字の一致位置を求め、３文字以降の一致は１文字ずつ照合し、最終的に最長一致位置を検出する２バイトハッシュ法が開示されている。
【００１４】
また、ハードウェア処理において高速化を行う手法として、特許文献２では、図１５に示されるように、入力ＦＩＦＯ(First In First Out)６００およびスライドＦＩＦＯ６０１と、スライドのサイズと同じ数の比較器を持つサーチ回路６０２とを備えた構成が開示されている。この構成において、サーチ回路６０２において入力ＦＩＦＯ６００に格納される複数のデータと、スライドＦＩＦＯ６０１に格納される過去の複数の入力データとを並列的に比較することにより、順次最長一致位置と一致長さとを同時に検出する。
【００１５】
さらに、特許文献３には、相関のありそうな場所（真上、左など）に限定的に比較器を備えることで、移動窓数分の比較器を並列に持った場合のハード負荷を削減し、処理速度およびハード規模が考慮されたデータ圧縮装置が開示されている。
【００１６】
さらにまた、特許文献４においては、小さい動的な辞書をＭＴＦ(Move To Front)制御することにより、辞書と一致したインデクス値をランレングス符号化する方法が提案されている。
【００１７】
また、特許文献５においては、並列比較ユニットを使用して複数データを一度に比較することで一致する長さを得ることができる方式が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、上述した特許文献１の、ハッシュ法と連結リストの組み合わせを用いた方法では、２文字、１６ビットのハッシュは、約６４０００ワードのハッシュテーブルを必要とする。これは、ソフトウエアでは有効であるが、ハードウエアでは大きな容量が必要とされる。そのため、特許文献１を小規模なハードウェアで実現する場合には、例えば３文字目以降を１文字づつ照合していくことになり、処理時間が多くかかってしまうという問題点があった。
【００１９】
また、少ない辞書を用いてＭＴＦ制御する特許文献４では、辞書に登録するワード数が小さい場合、例えば１ワードが１バイトであって、辞書の深さが６４ワードの場合は、一致したとしても８ビットが６ビットに変換されるだけである。そのため、辞書に登録するワード数を大きくする必要があるが、その場合、辞書との一致が難しくなってしまう。
【００２０】
特許文献４では、これを解決するために、同文献の図５に示されるように、周期検出を行ない、周期検出で辞書のワード数を求めている。ここで、この周期検出を行なうには、２パス方式を行うか、若しくは、ワークメモリを使用して周期検出と符号化処理とをパイプライン処理するかの何れかの方法を採る必要がある。
【００２１】
２パス方式は、処理を周期検出処理と符号化処理との２ステージに分け、符号化するデータに対してまず周期検出処理を行い、そこで求めた周期を用いて、再度、当該符号化するデータを符号化処理する。そのため、処理時間が余計にかかってしまうという問題点があった。また、ワークメモリを用いる方法でも、周期検出と符号化処理とをパイプライン処理するため、大きなメモリ領域が必要になってしまうという問題点があった。
【００２２】
さらに、特許文献３では、比較器を相関のありそうな場所のみに限定して持つために、比較器の数を抑制することができる。しかしながら、複数のラインメモリを持つ必要があり、ハードウェア規模が大きくなってしまうという問題点があった。
【００２３】
さらにまた、特許文献２では、同文献の図９に示されるように一致長さを求める回路をスライド数と同数用意すると共に、同図１０に示されるように入力ＦＩＦＯと同数のデータを比較する回路を用意する必要がある。そのため、スライド長さが３２個、入力ＦＩＦＯが８個という比較的小規模な構成であれば容易に実現可能であるが、圧縮率を向上させるためには、例えば２５６個以上のスライド長さを必要とし、規模が大きくなってしまうという問題点があった。
【００２４】
また、特許文献２では、入力ＦＩＦＯ１１やスライドＦＩＦＯは、一致長さにより一度に複数データ分のシフトを行わなくてはならない。この処理をハードウェアにより実現すると、構成が複雑化してしまうという問題点があった。すなわち、このような一致長さ分の非定型なシフト処理や比較処理は、このハードウェア全体を複雑化してしまう。したがって、スライド数を増やして圧縮率を向上させることは、特許文献２の構成では困難であるという問題点があった。
【００２５】
さらに、特許文献２において、スライドと入力データとの最長一致位置と長さとを求めるためには、スライド探索とリスト探索との２種類の処理を行う必要がある。すなわち、最初はスライド探索でスライド全体を探索し、次に、スライド探索の探索結果に基づき複数の一致したリストから探索を行うリスト探索に処理が切り替わる。そして、入力データがリストに一致しない場合にそれまでの最長一致長を求め、その入力データで再びスライド探索を開始する。
【００２６】
このように、特許文献２の方法では、リスト探索で一致しない場合にスライド探索に切り替わる際に、符号化が行われない期間が少なくとも１クロック発生してしまい、処理速度の低下を招いてしまうという問題点があった。
【００２７】
さらにまた、特許文献５では、図１６に例示されるように、ラッチ７００およびラッチ７０１で構成されるヒストリバッファと、入力バッファ７０２に入力された複数のデータを、ヒストリバッファに対して垂直方向に比較する、比較ユニット７０３をヒストリバッファ長と入力バッファ長とのマトリクスで並べたマトリクスアレイ７０４を用いて複数データを一度に比較することで、処理速度を高速化している。
【００２８】
しかしながら、特許文献５の方法では、一度に処理できるデータ数が、並列比較ユニットの構成により決まるデータ数に限定されてしまうという問題点があった。図１５の例では、並列処理可能なデータ数は、入力バッファ７０２の入力バイト長の１２バイトに従い、１２個に制限される。一度に処理できるデータ数を増やすには、並列比較ユニットを大規模とすればよいが、この場合ハードウェア規模が大きくなることになり、ＡＳＩＣなどに搭載する場合に制約が生じる。
【００２９】
本発明は、上記に鑑みてなされたものであって、より小規模なハードウェア構成で、より高速に符号化処理を行うことが可能なデータ処理装置およびデータ処理方法を提供することを目的とする。
【課題を解決するための手段】
【００３０】
上述した課題を解決し、目的を達成するために、本発明は、一方の端から入力される入力データを順次記憶し、記憶されたデータを入力データの入力毎に他方の端側に順次移動させるスライド記憶手段と、スライド記憶手段の一方の端から入力される入力データを、スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、入力データと一致するデータのスライド記憶手段内での位置を求める第１の比較手段と、第１の比較手段による比較結果に基づき、スライド記憶手段に記憶されるデータのうち少なくとも１つが第１の比較手段に比較された入力データと一致するか否かを判定する第１の判定手段と、スライド記憶手段の一方の端から入力される入力データを、スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、入力データと一致するデータのスライド記憶手段内での位置を求める第２の比較手段と、第２の比較手段による比較結果に基づき、スライド記憶手段に記憶されるデータのうち少なくとも１つが第２の比較手段に比較された入力データと一致するか否かを判定する第２の判定手段と、第１の判定手段および第２の判定手段の判定結果に基づき、第１の比較手段の比較結果と、第２の比較手段の比較結果とのうち何れか一方を保持する保持手段と、第２の判定手段による判定結果に応じて、保持手段に保持される第１または第２の比較手段による比較結果に基づき、入力データと一致するデータが記憶されるスライド記憶手段内での位置を示すアドレス値を生成するアドレス値生成手段と、第２の判定手段による判定結果に応じて、スライド記憶手段に記憶されるデータのうち第２の比較手段に比較された入力データと一致しているデータの、スライド記憶手段内での位置がスライド記憶手段に対する入力データの入力毎に連続する最長の長さを求め、長さを示すレングス値を生成するレングス値生成手段と、第１の判定手段および第２の判定手段による判定結果に応じて、入力データをそのまま用いたデータ値を生成するデータ値生成手段と、アドレス値、レングス値およびデータ値を含む符号を生成する符号生成手段とを有し、第２の比較手段は、保持手段に保持される第１の比較手段または第２の比較手段の比較結果に基づき、スライド記憶手段に記憶されるデータのそれぞれと、スライド記憶手段の一方の端から入力される入力データとを比較する動作を制御されることを特徴とする。
【００３１】
また、本発明は、一方の端から入力される入力データを順次記憶し、記憶されたデータを入力データの入力毎に他方の端側に順次移動させるスライド記憶手段の一方の端から入力される入力データを、スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、入力データと一致するデータのスライド記憶手段内での位置を求める第１の比較ステップと、第１の比較ステップによる比較結果に基づき、スライド記憶手段に記憶されるデータのうち少なくとも１つが第１の比較ステップに比較された入力データと一致するか否かを判定する第１の判定ステップと、スライド記憶手段の一方の端から入力される入力データを、スライド記憶手段に記憶されるデータのそれぞれと並列的に比較し、入力データと一致するデータのスライド記憶手段内での位置を求める第２の比較ステップと、第２の比較ステップによる比較結果に基づき、スライド記憶手段に記憶されるデータのうち少なくとも１つが第２の比較ステップに比較された入力データと一致するか否かを判定する第２の判定ステップと、第１の判定ステップおよび第２の判定ステップの判定結果に基づき、第１の比較ステップによる比較結果と、第２の比較ステップによる比較結果とのうち何れか一方を保持手段に保持する保持ステップと、第２の判定ステップによる判定結果に応じて、保持手段に保持される第１の比較ステップまたは第２の比較ステップによる比較結果に基づき、入力データと一致するデータが記憶されるスライド記憶手段内での位置を示すアドレス値を生成するアドレス値生成ステップと、第２の判定ステップによる判定結果に応じて、スライド記憶手段に記憶されるデータのうち第２の比較ステップに比較された入力データと一致しているデータの、スライド記憶手段内での位置がスライド記憶手段に対する入力データの入力毎に連続する最長の長さを求め、長さを示すレングス値を生成するレングス値生成ステップと、第１の判定ステップおよび第２の判定ステップによる判定結果に応じて、入力データをそのまま用いたデータ値を生成するデータ値生成ステップと、アドレス値、レングス値およびデータ値を含む符号を生成する符号生成ステップとを有し、第２の比較ステップは、保持手段に保持される第１の比較ステップまたは第２の比較ステップの比較結果に基づき、スライド記憶手段に記憶されるデータのそれぞれと、スライド記憶手段の一方の端から入力される入力データとを比較する動作を制御されることを特徴とする。
【発明の効果】
【００３２】
本発明によれば、より小規模なハードウェア構成で、より高速に符号化処理を行うことが可能となる効果がある。
【図面の簡単な説明】
【００３３】
【図１】図１は、本発明に係るデータ処理装置を適用可能なプリンタ装置の一例の構成を示すブロック図である。
【図２】図２は、エンコーダの一例の構成を示すブロック図である。
【図３】図３は、符号フォーマットの例を示す略線図である。
【図４】図４は、本実施形態に適用可能な符号化処理について説明するための略線図である。
【図５−１】図５−１は、スライド探索処理およびリスト探索処理におけるフラグ処理を説明するための略線図である。
【図５−２】図５−２は、スライド探索処理およびリスト探索処理におけるフラグ処理を説明するための略線図である。
【図６−１】図６−１は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図６−２】図６−２は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図６−３】図６−３は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図６−４】図６−４は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図６−５】図６−５は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図６−６】図６−６は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図６−７】図６−７は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図６−８】図６−８は、フラグ処理を行った場合のスライド探索処理およびリスト探索処理を説明するための略線図である。
【図７】図７は、本実施形態による符号化処理の全体的な流れを示す一例のフローチャートである。
【図８】図８は、スライド探索処理をより詳細に示すフローチャートである。
【図９】図９は、リスト探索処理をより詳細に示すフローチャートである。
【図１０】図１０は、スライド追加処理をより詳細に示す一例のフローチャートである。
【図１１】図１１は、スライド／リスト生成処理部の一例のハードウェア構成を示す回路図である。
【図１２】図１２は、デコーダの一例の構成を示すブロック図である。
【図１３】図１３は、デコーダでの復号処理を示す一例のフローチャートである。
【図１４】図１４は、スライド展開部の一例のハードウェア構成を示す回路図である。
【図１５】図１５は、従来技術による符号化装置の一例の構成を示すブロック図である。
【図１６】図１６は、従来技術による符号化装置の一例の構成を示すブロック図である。
【発明を実施するための形態】
【００３４】
以下に添付図面を参照して、この発明に係るデータ処理装置の一実施形態を詳細に説明する。図１は、本発明に係るデータ処理装置を適用可能なプリンタ装置２００の一例の構成を示す。図１の例では、プリンタ装置２００は、制御部２３０、メインメモリ２１０、プリンタエンジン２１１および不揮発性のメモリであるフラッシュメモリ２４０を備える。フラッシュメモリ２４０は、プリンタ装置２００に内蔵されていてもよいし、プリンタ装置２００に対して脱着可能とされていてもよい。
【００３５】
制御部２３０は、ＣＰＵ(Central Processing Unit)２００、ＣＰＵ  Ｉ／Ｆ２０１、メインメモリアービタ２０２、メモリコントローラ２０３、符号化部２０４、復号部２０５、階調処理部２０６、エンジンコントローラ２０７、フラッシュメモリコントローラ２４１、エンコーダ２４２およびデコーダ２４３を含む。
【００３６】
ＣＰＵ２１２は、メインメモリ２１０に格納されるプログラムに従い、このカラープリンタ２００の全体の動作を制御する。ＣＰＵ２１２は、ＣＰＵ  Ｉ／Ｆ２０１を介してメインメモリアービタ２０２に接続される。メインメモリアービタ２０２は、ＣＰＵ２１２、符号化部２０４、復号部２０５、通信コントローラ２０８、フラッシュメモリコントローラ２４１、エンコーダ２４２およびデコーダ２４３の、メインメモリ２１０に対するアクセスを調停する。
【００３７】
メインメモリ２１０は、メモリコントローラ２０３を介してメインメモリアービタ２０２に接続される。メモリコントローラ２０３は、メインメモリ２１０に対するアクセスの制御を行う。
【００３８】
メインメモリ２１０は、プログラム領域２１０Ａ、ＰＤＬデータ格納領域２１０Ｂ、ＣＭＹＫバンドデータ格納領域２１０Ｃ、ＣＭＹＫページ符号格納領域２１０Ｄおよびその他の領域２１０Ｅを有する。プログラム領域２１０Ａは、ＣＰＵ２１２が動作するためのプログラムが格納される。ＰＤＬデータ格納領域２１０Ｂは、例えばコンピュータ２２０から供給されたＰＤＬデータが格納される。ＣＭＹＫバンドデータ格納領域２１０Ｃは、ＣＭＹＫバンドデータが格納される。ＣＭＹＫページ符号格納領域２１０Ｄは、バンドデータが圧縮符号化された符号データが格納される。領域２１０Ｅは、上述した以外のデータが格納される。
【００３９】
符号化部２０４は、メインメモリ２１０に格納されるバンドデータを符号化する。符号化されたバンドデータは、メインメモリアービタ２０２およびメモリコントローラ２０３を介してメインメモリ２１０に供給され、ＣＭＹＫページ符号格納領域２１０Ｄに書き込まれる。復号部２０５は、後述するプリンタエンジン２１１に同期して、符号化部２０４で符号化されメインメモリ２１０に書き込まれた符号化バンドデータをメインメモリ２１０から読み出して復号する。復号されたバンドデータは、階調処理部２０６に供給される。階調処理部２０６は、復号部２０５から供給されたバンドデータに対して階調処理を施してエンジンコントローラ２０７に転送する。
【００４０】
エンジンコントローラ２０７は、プリンタエンジン２１１を制御する。図１では、プリンタエンジン２１１としてＣＭＹＫ各色の版のうち１の版のものだけが記載され、その他の版については煩雑さを避けるために省略されている。
【００４１】
通信コントローラ２０８は、ネットワーク２２１を介しての通信を制御する。例えば、コンピュータ２２０から出力されたＰＤＬ(Page Description Language)データは、ネットワークを介して通信コントローラ２０８により受信される。通信コントローラ２０８は、受信したＰＤＬデータを、メインメモリアービタ２０２およびメインメモリコントローラ２０３を介してメインメモリ２１０に転送する。
【００４２】
なお、ネットワークは、ＬＡＮ(Local Area Network)などの所定の範囲内で通信を行うものでもよいし、インターネットなどより広範囲に通信可能なものでもよい。また、ネットワークは、有線通信に限らず無線通信を用いたものでもよいし、ＵＳＢ(Universal Serial Bus)やＩＥＥＥ(Institute Electrical and Electronics Engineers)１３９４といったシリアル通信を行うものでもよい。
【００４３】
フラッシュメモリ２４０は、ＣＰＵ２１２上で動作するためのプログラムや、当該プログラムに用いられる各種データが、本実施形態による圧縮符号化方法により圧縮符号化されて格納される。例えば、このプリンタ装置２００に対して追加される機能を実現するためのプログラムが圧縮符号化されて、フラッシュメモリ２４０に格納される。これに限らず、このプリンタ装置２００の基本的な動作を実現するためのプログラムを、圧縮符号化してフラッシュメモリ２４０に格納してもよい。フラッシュメモリコントローラ２４１は、フラッシュメモリ２４０に対するアクセスの制御を行う。
【００４４】
エンコーダ２４２は、本実施形態による圧縮符号化方法により、データの圧縮符号化を行う。また、デコーダ２４３は、当該圧縮符号化方法により圧縮符号化された圧縮データの復号を行う。
【００４５】
このような構成において、例えば電源ＯＮなどプリンタ装置２００の起動時に、ＣＰＵ２１２の指示に従い、フラッシュメモリコントローラ２４１によりフラッシュメモリ２４０から圧縮符号化されたデータが読み出される。この圧縮データは、例えばプログラム（プログラムデータ）や各種データが圧縮符号化されたものである。読み出された圧縮データは、メモリアービタ２０２を介してデコーダ２４３に供給される。
【００４６】
デコーダ２４３は、供給された圧縮データを復号し、圧縮符号を伸張する。圧縮符号が伸張されたプログラムデータや各種データは、メモリアービタ２０２およびメインメモリコントローラ２０３を介してメインメモリ２１０に供給され、プログラム領域２１０Ａに格納される。
【００４７】
一方、例えばプリンタ装置２００の電源ＯＦＦなど動作終了時には、ＣＰＵ２１２の指示に従い、メインメモリコントローラ２０３により。メインメモリ２１０からプログラムデータや各種データが読み出される。読み出されたこれらプログラムデータや各種データは、メインメモリアービタ２０２を介してエンコーダ２４２に供給される。
【００４８】
エンコーダ２４２は、供給されたプログラムデータや各種データを、本実施形態による圧縮符号化方法を用いてそれぞれ圧縮符号化する。圧縮符号化された圧縮データは、メインメモリアービタ２０２を介してフラッシュメモリコントローラ２４１に供給され、フラッシュメモリ２４０に格納される。
【００４９】
フラッシュメモリ２４０は、メインメモリ２１０に用いられるＤＲＡＭ(Dynamic Random Access Memory)などに比べ、アクセス速度が遅い。そのため、このようにフラッシュメモリ２４０に格納されるデータを圧縮符号化してデータサイズを小さくし、アクセス速度の遅さを補う。
【００５０】
プリンタ装置２００の全体的な動作について、概略的に説明する。例えばコンピュータ２２０で生成されたＰＤＬデータがネットワーク２２１を介して通信コントローラ２０８に受信され、メインメモリ２１０のＰＤＬデータ格納領域２１０Ｂに記憶される。ＣＰＵ２１２は、メインメモリ２１０のＰＤＬデータ格納領域２１０ＢからＰＤＬデータを読み出し、ＰＤＬを解析して、解析結果に基づきＣＭＹＫのバンド画像を描画する。描画されたＣＭＹＫのバンド画像によるＣＭＹＫバンドデータは、メインメモリ２１０のＣＭＹＫバンドデータ格納領域２１０Ｃに格納される。
【００５１】
符号化部２０４は、ＣＭＹＫバンドデータ格納領域２１０ＣからＣＭＹＫバンドデータを読み出して、例えば予測符号化を用いて符号化する。ＣＭＹＫバンドデータが符号化された符号データは、メインメモリ２１０のＣＭＹＫページ符号格納領域２１０Ｄに格納される。
【００５２】
復号部２０５は、ＣＭＹＫページ符号格納領域２１０ＤからＣＭＹＫバンドデータが符号化された符号データを読み出して復号し、復号されたＣＭＹＫバンドデータを階調処理部２０６に供給する。階調処理部２０６は、復号部２０５から供給されたＣＭＹＫバンドデータに対して階調処理を施す。階調処理されたＣＭＹＫバンドデータは、プリンタエンジンコントローラ２０７を介してプリンタエンジン２１１に供給される。プリンタエンジン２１１は、供給されたＣＭＹＫバンドデータに基づきプリントアウトを行う。
【００５３】
＜エンコーダ＞
図２は、エンコーダ２４２の一例の構成を示す。エンコーダ２４２において、データ読み込み部３００により、メインメモリ２１０のプログラム領域２１０Ａから、プログラムデータや各種データ（以降、纏めてデータと呼ぶ）がメインメモリコントローラ２０３およびメモリアービタ２０２を介して読み出される。データ読み込み部３００に読み込まれたデータは、スライド／リスト生成処理部３０１に供給される。
【００５４】
スライド／リスト生成処理部３０１は、入力されたデータを順次記憶するＦＩＦＯ方式のスライド記憶部を有する。スライド／リスト生成処理部３０１は、供給されたデータとスライド記憶部に記憶された過去の入力データとを順次比較する。そして、供給されたデータと過去の入力データとが一致した場合には、当該過去の入力データのスライド記憶部内の位置を示すアドレス値Addressを保持すると共に、一致した長さを示す値であるレングスLengthをカウントアップする。両者が一致しない場合には、データ値そのものをPASS符号として符号化する。そして、これらPASS符号と、アドレス値AddressおよびレングスLengthと、両者が一致したか否かを示す一致フラグFLAGとを出力する。
【００５５】
スライド／リスト生成処理部３０１のから出力された各値は、符号フォーマット生成処理部３０２に供給される。符号フォーマット生成処理部３０２は、供給されたPASS符号、アドレス値Address、レングスLengthおよび一致フラグFLAGとを、図３に例示されるようなフォーマットで符号化する。
【００５６】
図３において、PASS符号は、データ長が１ビットで値が「０」の一致フラグFLAGをヘッダとして、後に８ビットのデータ長を持つデータ値が接続されてなる。スライド符号は、データ長が１ビットで値が「１」の一致フラグFLAGをヘッダとして、その後に、それぞれデータ長が８ビットのレングスLengthおよびアドレス値Addressが順次接続される。なお、この図３に例示される符号フォーマットは、一例であって、これ限られるものではない。
【００５７】
符号フォーマット生成処理部３０２で生成されたPASS符号およびスライド符号は、符号書き込み部３０３に供給される。符号書き込み部３０３は、供給されたPASS符号およびスライド符号を、メインメモリアービタ２０２およびフラッシュメモリコントローラ２４１を介してフラッシュメモリ２４０に書き込む。
【００５８】
＜符号化処理の概略＞
次に、本実施形態に適用可能な、スライド／リスト生成処理部３０１における符号化処理について説明する。本実施形態では、スライド探索処理とリスト探索処理とを繰り返すことによって、データの符号化を行う。スライド探索処理は、１単位（例えば１バイト）の入力データと一致する、所定単位分の長さを持つスライド記憶部に記憶される過去の入力データを探索する。スライド記憶部内の過去の入力データに、入力データと一致するデータが探索されなかった場合には、入力データそのものをPASS符号として用いる。
【００５９】
スライド探索処理において、入力データに一致するスライド記憶部内の過去の入力データが探索された場合、その一致した過去の入力データをルートとして、リスト探索処理が行われる。リスト探索処理は、ルートとされた入力データに対して連続的に入力された入力データ列と一致する、スライド記憶部内の過去の入力データ列（リストと呼ぶ）を探索する。
【００６０】
リスト探索処理時に、入力データと一致するリストが無くなると、直前のリストから１を選び、選択されたリストのルートとなる過去の入力データのスライド記憶部内での位置をアドレス値Addressとし、当該リストの長さをレングスLengthとして出力する。
【００６１】
すなわち、スライド／リスト生成処理部３０１では、スライド探索処理でリスト探索処理のルートとなる過去の入力データを形成する。そして、リスト探索処理で、ルートに基づくリストの成長および淘汰を行い、最終的に残ったリストに基づき符号化を行う。
【００６２】
図４を用いてより具体的に説明する。図４の例では、スライド記憶部は、番号＃０〜＃１５で示されるように、直列に接続された１６個のレジスタを持ち、ＦＩＦＯ(First In First Out)として構成される。各レジスタは、それぞれ１単位（例えば１バイト）のデータを格納可能であるものとする。なお、以下では、このスライド記憶部が有するレジスタをスライドと呼ぶ。
【００６３】
処理＃１において、スライド記憶部の各スライドには、入力の新しい順、すなわち図４の右側から左側に向けて、「ａ，ｂ，ｃ，ａ，ａ，ｂ，ｃ，ａ，ｂ，ｃ，ｄ，ｂ，ｃ，ａ，ｃ，ａ」と、１６個の過去に入力されたデータが既に格納されているものとする。最初に、スライド／リスト生成処理部３０１に対して入力データ「ａ」が入力される。スライド探索処理により、この入力データ「ａ」と、各スライドに記憶された過去の入力データのそれぞれとを比較し、一致しているデータを探索する。図４の例では、番号＃０、＃３、＃４、＃７、＃１３および＃１５のスライドに格納されているデータが入力データと一致していることが分かる。したがって、これらの番号のスライドに格納されているデータが、リスト探索処理におけるルートとなる。
【００６４】
スライド探索処理によって、各スライドに記憶された過去の入力データから、入力データ「ａ」と一致しているデータが探索されたので、処理＃２のリスト探索処理が行われる。
【００６５】
処理＃２では、各スライドに記憶される過去の入力データを左に１だけシフトさせて、処理＃１で入力された入力データ「ａ」をスライド記憶部の番号＃０のスライドに追加する。それと共に、次の入力データ「ｃ」がスライド／リスト生成処理部３０１に対して入力される。リスト探索処理では、各スライドに記憶される過去の入力データのうち、直前の処理＃１において入力データが一致した各スライド内の過去の入力データが格納されていたスライドから、新たな入力データ「ｃ」と一致するデータを探索する。
【００６６】
図４の例では、処理＃１において入力データと一致した番号＃０および＃４のスライドに格納される過去の入力データは、処理＃２において入力データと一致していない。一方、処理＃１において入力データと一致した番号＃３、＃７、＃１３および＃１５のスライドに格納された過去の入力データは、データ「ｃ」であって、新たな入力データ「ｃ」と一致する。
【００６７】
処理＃２のリスト探索処理によって、直前の処理＃１において入力データが一致した各スライド内の過去の入力データが格納されたスライドから、処理＃２における入力データ「ｃ」と一致するデータが探索されたので、次の処理はリスト探索処理となる。なお、処理＃２は、リスト探索処理の開始点であるので、リストの長さを示すレングスLengthは、値「０」とされる。
【００６８】
処理＃３では、上述の処理＃２と同様にして、各スライドに記憶される過去の入力データを左に１だけシフトさせて、処理＃２で入力された入力データ「ｃ」をスライド記憶部の番号＃０のスライドに追加する。それと共に、次の入力データ「ｂ」がスライド／リスト生成処理部３０１に対して入力される。そして、各スライドに記憶される過去の入力データのうち、直前の処理＃２において入力データが一致した各スライド内の過去の入力データが格納されたスライドから、新たな入力データ「ｂ」と一致するデータを探索する。
【００６９】
図４の例では、処理＃２において探索された番号＃１５のスライドに格納される過去の入力データは、処理＃３において入力データと一致していない。一方、処理＃２において探索された番号＃３、＃７および＃１３のスライドに格納される、処理＃３における過去の入力データはデータ「ｂ」であって、新たな入力データ「ｂ」と一致する。次の処理＃４では、この番号＃３、＃７および＃１３のスライドに格納される過去の入力データが、リスト探索の対象となる。すなわち、この処理＃３の段階では、番号＃３、＃７および＃１３に係るリストが残っている。処理＃３では、リストの長さが「１」となり、レングスLengthが値「１」とされる。
【００７０】
このような処理を繰り返していき、リストが最も長くなるデータ列を求める。図４の例では、処理＃５において、直前の処理＃４においてリスト探索された番号＃１３のスライドに格納される過去の入力データ「ｃ」と、新たな入力データ「ｇ」とが一致しなくなり、リストが途切れる。そこで、処理＃５では、１つ前の処理＃４において残っているリストから１を選択し、そのスライドのスライド記憶部における位置（番号）をアドレス値Addressとし、リストの長さをレングスLengthとしてスライド符号に符号化する。図４の例では、アドレス値Addressが「１３」、レングスLengthが「３」とされる。
【００７１】
さらに、処理＃５では、入力データ「ｇ」についてスライド探索処理を行う。この例では、各スライドに過去の入力データとしてデータ「ｇ」が記憶されていないため、一致するデータがないとされる。この場合、処理は処理＃６に移行され、入力データ「ｇ」がそのまま用いられてPASS符号に符号化される。
【００７２】
PASS符号への符号化が行われると、処理＃７で、各スライドに記憶される過去の入力データが左に１だけシフトされると共に、直前のリスト探索処理（処理＃５）で入力された入力データ「ｇ」がスライド記憶部の番号＃０のスライドに追加される。そして、次の入力データ「b」に対してスライド探索処理が行われる。
【００７３】
ここで、スライド記憶部は、ＦＩＦＯ方式により各スライドに格納されたデータのシフトを行うことができるため、入力データとの一致を記憶したリストをそのままの状態で保持しながら、次の入力データの処理に移行することができる。
【００７４】
例えば、図４の例では、入力データが、処理＃１において番号＃０、＃３、＃４、＃７、＃１３および＃１５のスライドに格納される過去の入力データと一致している。各スライドに格納されたデータを、新たなデータの入力に伴い順次シフトさせることで、例えば処理＃２の当該番号＃０、＃３、＃４、＃７、＃１３および＃１５のスライドに対して次のデータが格納されることになる。したがって、スライド記憶部において、スライド探索処理で一致が探索された番号のスライドに格納されるデータを、リスト探索処理毎に入力データと比較していくことで、入力データのデータ列と一致する、過去の入力データのデータ列を探索することができる。
【００７５】
このように、スライド記憶部をＦＩＦＯ方式とすることで、リスト探索処理を簡易に行うことができる。
【００７６】
なお、上述の処理によれば、リスト探索処理において入力データと一致するリストが無く、処理がリスト探索処理からスライド探索処理に移行する際に、１処理分、符号化が進行しない時間が生じることになる。すなわち、１処理を１クロックで行うとした場合、リスト探索処理からスライド探索処理に移行する際に、１クロック分の無駄が生じてしまうことになる。
【００７７】
＜フラグ処理＞
上述したスライド探索処理およびリスト探索処理は、フラグによって制御される。このスライド探索処理およびリスト探索処理におけるフラグ処理について、図５−１、図５−２を用いて説明する。
【００７８】
図５−１は、スライド探索処理の結果を示すＲフラグRFLGmを示す。図５−１に例示されるように、スライド記憶部の各スライドに対して、図の右側から左側へ向けて「ａ，ｂ，ｃ，ａ，ａ，ｂ，ｃ，ａ，ｂ，ｃ，ｄ，ｂ，ｃ，ａ，ｃ，ａ」のように過去の入力データが格納された状態で、入力データ「ａ」が入力された場合、番号＃０、＃３、＃４、＃７、＃１３および＃１５のスライドで、入力データと各スライドに記憶される過去の入力データとが一致する。そこで、これらの番号のスライドに対応するＲフラグRFLG0、RFLG3、RFLG4、RFLG7、RFLG13およびRFLG15を、それぞれ一致したことを示す値「１」とする。
【００７９】
このように、入力データと、各スライドに記憶される過去の入力データとが一致する場合は、符号化処理を行わずにリスト探索処理が行われる。このとき、ＲフラグRFLGmの各スライドに対する位置は、固定的である。入力データと一致する、各スライドに記憶される過去の入力データが無い場合は、入力データをそのまま用いてPASS符号に符号化し、次の入力データに対してスライド探索処理を行う。
【００８０】
図５−２は、リスト探索処理の結果を示すＷフラグWFLGmの例を示す。リスト探索処理では、新たに入力された入力データと一致するデータが、各スライドのうちＲフラグRFLGmが「１」とされたスライドに格納されるデータから探索される。若し、一致するデータが探索されたら、当該スライドに対するＷフラグWFLGmの値を、一致したことを示す値「１」とする。
【００８１】
図５−２の例では、各スライドに記憶される過去の入力データのうち、ＲフラグRFLGmが値「１」である番号＃０、＃３、＃４、＃７、＃１３および＃１５のスライドに格納されるデータに対してリスト探索処理が行われる。これらのうち、入力データ「ｃ」に対して、番号＃３、＃７、＃１３および＃１５のスライドに格納されるデータが一致するので、対応するＷフラグWFLG3、WFLG7、WFLG13およびWFLG15の値を、一致したことを示す値「１」とする。各スライドに記憶される過去の入力データのうち、このＷフラグWFLGmの値が「１」とされたスライドに格納されるデータは、直前に入力データと一致したスライドに格納される過去の入力データと、現在入力データと一致した過去の入力データとが連なっていることを示す。
【００８２】
次に、値が「１」のＷフラグWFLGmを探索する。この値「１」のＷフラグWFLGmが存在する場合は、各ＷフラグWFLGmを新たなＲフラグRFLGmとし、上述と同様にして次の入力データに対してリスト探索処理を行う。
【００８３】
一方、探索の結果、値が「１」のＷフラグWFLGmが存在しないとされた場合は、リストが途絶えたことを意味する。この場合は、値が「１」のＲフラグRFLGmを１つ選択し、選択したＲフラグRFLGmに対応するスライドのアドレス値Addressと、そのときのレングスLengthとをスライド符号に符号化する。
【００８４】
次に、ＲフラグRFLGmおよびＷフラグWFLGmを用いた場合の、スライド探索処理およびリスト探索処理について、図６−１〜図６−８を用いて説明する。図６−１〜図６−８は、上述した図４と同様に、スライド記憶部は、番号＃０〜＃１５で示される１６個のスライドを持っているものとする。各スライドには、新しい順すなわち番号の小さい順に、「ａ，ｂ，ｃ，ａ，ａ，ｂ，ｃ，ａ，ｂ，ｃ，ｄ，ｂ，ｃ，ａ，ｃ，ａ」と、過去に入力された１６個のデータが既に格納されているものとする。
【００８５】
本実施形態においては、符号化を、スライド探索処理とリスト探索処理とを繰り返すことで行う。先ず、入力データ「ａ」が入力され、スライド探索処理が行われる（図６−１）。入力データ「ａ」と一致するデータを、スライド記憶部の各スライドから探索する。各スライドから入力データに一致するデータが探索されなかった場合は、当該入力データをそのまま用いて、PASS符号に符号化する。
【００８６】
入力データに一致するデータが格納されるスライドが探索されたら、そのスライドに対応するＲフラグRFLGmの値を「１」とし、他のＲフラグRFLGmの値を「０」とする。図６−１の例では、番号＃０、＃３、＃４、＃７、＃１３および＃１５のスライドに格納されるデータが入力データと一致している。このスライド探索処理において、入力データに一致したデータをルートとして、次からのリスト探索処理においてリストの生成が行われる。
【００８７】
次に、各スライドの記憶内容を左シフトし、直前に入力された入力データ「ａ」を、番号＃０のスライドに追加する。このように、スライド探索処理において入力データと一致するデータが格納されたスライドが探索されたら、符号化処理を行わずに、リスト探索処理（図６−２）に移り、レングスLengthの値を「０」とする。また、入力データと一致するデータが格納されたスライド（番号＃０、＃３、＃４、＃７、＃１３および＃１５のスライド）に対応するＲフラグRFLGm（ＲフラグRFLG0、RFLG3、RFLG4、RFLG7、RFLG13およびRFLG15）の値が「１」とされ、他のＲフラグRFLGmの値が「０」とされる。
【００８８】
次に、入力データ「ｃ」が入力される。リスト探索処理では、対応するＲフラグRFLGmの値が「１」のスライドのうち、入力データ「ｃ」と一致するデータが格納されるスライドが探索される。図６−２の例では、ＲフラグRFLGmの値が「１」のスライドのうち番号＃３、＃７、＃１３および＃１５のスライドに格納されるデータが入力データと一致している。一方、番号＃０および＃４のスライドは、脱落している。入力データと一致するデータが格納されたスライドに対応するＷフラグWFLGm（ＷフラグWFLG3、WFLG7、WFLG13およびWFLG15）の値が「１」とされ、他のＷフラグWFLGmの値が「０」とされる。
【００８９】
次に、各スライドの記憶内容を左シフトし、直前に入力された入力データ「ｃ」を、番号＃０のスライドに追加する。この場合も符号化処理を行わずに、次のリスト探索処理（図６−３）に移り、レングスLengthの値を「１」とする。ＷフラグWFLGmの値をＲフラグRFLGmに設定して、ＲフラグRFLGmを更新する。
【００９０】
次に、入力データ「ｂ」が入力される。リスト探索処理では、対応するＲフラグRFLGの値が「１」のスライドのうち、入力データ「ｂ」と一致するデータが格納されるスライドが探索される。図６−３の例では、ＲフラグRFLGmの値が「１」のスライドのうち番号＃３、＃７および＃１３のスライドに格納されるデータが入力データと一致している。一方、番号＃１５のスライドは、脱落している。入力データと一致するデータが格納されたスライドに対応するＷフラグWFLGm（ＷフラグWFLG3、WFLG7およびWFLG13）の値が「１」とされ、他のＷフラグWFLGmの値が「０」とされる。
【００９１】
次に、各スライドの記憶内容を左シフトし、直前に入力された入力データ「ｂ」を、番号＃０のスライドに追加する。この場合も符号化処理を行わずに、次のリスト探索処理（図６−４）に移り、レングスLengthの値を「２」とする。ＷフラグWFLGmの値をＲフラグRFLGmに設定して、ＲフラグRFLGmを更新する。
【００９２】
次に、入力データ「ｄ」が入力される。リスト探索処理では、対応するＲフラグRFLGmの値が「１」のスライドのうち、入力データ「ｄ」と一致するデータが格納されるスライドが探索される。図６−４の例では、番号＃１３のスライドに格納されるデータが入力データと一致している。一方、番号＃３および＃７のスライドは、脱落している。入力データと一致するデータが格納されたスライドに対応するＷフラグWFLG13の値が「１」とされる。
【００９３】
次に、各スライドの記憶内容を左シフトし、直前に入力された入力データ「ｄ」を、番号＃０のスライドに追加する。この場合も符号化処理を行わずに、次のリスト探索処理（図６−５）に移り、レングスLengthの値を「３」とする。ＷフラグWFLGmの値をＲフラグRFLGmに設定して、ＲフラグRFLGmを更新する。
【００９４】
次に、入力データ「ａ」が入力される。リスト探索処理では、対応するＲフラグRFLGmの値が「１」のスライドのうち、入力データ「ａ」と一致するデータが格納されるスライドが探索される。図６−５の例では、番号＃１３のスライドが脱落し、入力データ「ａ」と一致するデータが格納されるスライドが存在しない。すなわち、継続するリストが存在しなくなる。そのため、ＲフラグRFLGmの値が「１」であるスライドのスライド記憶部内での位置（図６−５の例では番号＃１３の位置）をアドレス値Addressとし、レングスLengthの値が「３」、一致フラグFLAGの値が「１」とされて、これらの値を図３に示したようにスライド符号に符号化する。ＷフラグWFLGの値は、全て「０」とされ、処理はスライド探索処理に移る（図６−６）。
【００９５】
リストが途切れた後のスライド探索処理は、直前のリスト探索処理における入力データ「ａ」に対して行われる（図６−６）。入力データ「ａ」と一致するデータを、スライド記憶部の各スライドから探索する。各スライドから入力データに一致するデータが探索されなかった場合は、当該入力データをそのまま用いて、PASS符号に符号化する。
【００９６】
入力データに一致するデータが格納されるスライドが探索されたら、そのスライドに対応するＲフラグRFLGmの値を「１」とする。図６−６の例では、番号＃３、＃４、＃７、＃８および＃１１のスライドに格納されるデータが入力データと一致している。このスライド探索処理において、入力データに一致したデータをルートとして、次からのリスト探索処理においてリストの生成が行われる。
【００９７】
次に、各スライドの記憶内容を左シフトし、入力データ「ａ」を、番号＃０のスライドに追加する。このように、スライド探索処理において入力データと一致するデータが格納されたスライドが探索されたら、符号化処理を行わずに、リスト探索処理（図６−７）に移り、レングスLengthの値を「０」とする。また、入力データと一致するデータが格納されたスライド（番号＃３、＃４、＃７、＃８および＃１１のスライド）に対応するＲフラグRFLGm（ＲフラグRFLG3、RFLG4、RFLG7、RFLG8およびRFLG13）の値が「１」とされ、他のＲフラグRFLGmの値が「０」とされる。
【００９８】
次に、入力データ「ｆ」が入力される。リスト探索処理では、対応するＲフラグRFLGmの値が「１」のスライドのうち、入力データ「ｆ」と一致するデータが格納されるスライドが探索される。図６−７の例では、入力データ「ｆ」と一致するデータが格納されるスライドが存在しない。この時点ではレングスLengthの値が「０」であるため、ＷフラグWFLGmの値が全て「０」とされ、処理はスライド探索処理に移る（図６−８）。
【００９９】
ここでのスライド探索処理は、直前のリスト探索処理における入力データ「ｆ」に対して行われる（図６−８）。入力データ「ｆ」と一致するデータを、スライド記憶部の各スライドから探索する。図６−８の例では、各スライドから入力データに一致するデータが探索されないため、当該入力データをそのまま用いて、PASS符号に符号化する。また、ＲフラグRFLGmの値が全て「０」とされる。
【０１００】
そして、各スライドの記憶内容を左シフトし、入力データ「ｆ」を番号＃０のスライドに追加して次の入力データの符号化に進む。
【０１０１】
＜符号化処理の詳細＞
次に、スライド／リスト生成処理部３０１における符号化処理について、より詳細に説明する。図７は、本実施形態による符号化処理の全体的な流れを示す一例のフローチャートである。なお、図７のフローチャートの処理に先立って、符号読み出し部３００は、ある長さのデータを処理対象のデータとして予め保持しているものとする。
【０１０２】
最初のステップＳ１０で、スライド／リスト生成処理部３０１は、スライド探索処理およびリスト探索処理のうち何れが有効かを示すフラグListFLGを、スライド探索処理を行っていることを示す値「０」に初期化する。次に、ステップＳ１１で、スライド／リスト生成処理部３０１は、符号読み出し部３００から１単位分のデータを入力データとして読み込む。読み込んだ入力データは、スライド記憶部に格納される。
【０１０３】
入力データがスライド記憶部に格納されると、ステップＳ１２で、１単位分のデータに対するスライド探索処理が行われると共に、ステップＳ１３で、１単位分のデータに対するリスト探索処理が行われる。詳細は後述するが、本実施形態においては、スライド探索処理を行うスライド探索部と、リスト探索処理を行うリスト探索部とが別個の構成とされているので、ステップＳ１２およびステップＳ１３の処理を並列的に行うことが可能である。
【０１０４】
処理はステップＳ１４に移行され、スライド／リスト生成処理部３０１は、フラグListFLGの値が「０」か否かを判定する。若し、「０」であると判定されたら、現在スライド探索処理が有効であるとされ、処理はステップＳ１５に移行される。ステップＳ１５では、フラグSFINDFLGの値が「１」であるか否かが判定される。若し、値が「１」であれば、スライド記憶部１０１において入力データと一致する過去の入力データが探索されたとされ、ステップＳ１６でフラグListFLGの値がリスト探索処理が有効であることを示す「１」とされる。
【０１０５】
そして、処理がステップＳ２５に移行され、スライド記憶部に対して入力データが追加される。次のステップＳ２６で、処理対象のデータ全てに対する処理が終了したか否かが判定される。若し、終了していないと判定されたら、処理はステップＳ１１に戻され、次の１単位分のデータが入力データとして読み込まれる。一方、終了していると判定されたら、一連の符号化処理が終了される。
【０１０６】
一方、ステップＳ１５で、フラグSFINDFLGの値が「０」であると判定されたら、スライド記憶部１０１において入力データと一致する過去の入力データが探索されなかったとされ、処理はステップＳ１７に移行される。ステップＳ１７では、フラグListFLGの値が「０」とされてスライド探索処理が有効であるとされ、次のステップＳ１８で入力データがPASS符号に符号化される。また、一致フラグFLAGが値「０」とされる。そして、処理はステップＳ２５に移行される。
【０１０７】
また、上述のステップＳ１４において、フラグListFLGの値が「０」ではない、すなわち「１」であると判定されたら、現在リスト探索処理が有効であるとされ、処理がステップＳ１９に移行される。ステップＳ１９では、フラグLFINDFLGの値が「１」か否かを判定する。若し、「１」であると判定されたら、処理はステップＳ２５に移行される。
【０１０８】
一方、ステップＳ１９で、フラグLFINDFLGの値が「１」ではない、すなわち、フラグLFINDFLGの値が「０」であると判定されたら、処理はステップＳ２０に移行される。ステップＳ２０では、アドレス値Address、レングスLengthおよび一致フラグFLAGが、図３に例示されるスライド符号に符号化される。そして、処理はステップＳ２１に移行され、フラグSFINDFLGの値が「１」であるか否かが判定される。若し、「１」であると判定されたら、リスト探索処理においてリストが継続されたとされて処理がステップＳ２２に移行され、フラグListFLGの値が「１」とされる。そして、処理がステップＳ２５に移行される。
【０１０９】
一方、ステップＳ２０でフラグSFINDFLGの値が「０」であると判定されたら、リスト探索処理においてリストが途切れたとされ、処理がステップＳ２３に移行され、フラグListFLGの値が「０」とされる。次のステップＳ２４で入力データがそのままPASS符号に符号化され、レジスタ１４１に格納される。そして、処理はステップＳ２５に移行される。
【０１１０】
図８は、図７のステップＳ１２における一例のスライド探索処理をより詳細に示すフローチャートである。なお、この図８、ならびに、以下の図９および図１０では、スライド記憶部におけるスライドを、スライドの番号を含めるように、スライド[x]のように表す。また、ＦＩＦＯ構成とされるスライド記憶部において先頭のスライドを、スライド[0]とする。
【０１１１】
先ず、ステップＳ３０〜ステップＳ３２で、レングスLength、フラグSFIINDFLGおよび変数IWがそれぞれ値「０」に初期化される。処理はステップＳ３３に移行され、入力データとスライド[IW]に格納された過去の入力データとが一致するか否かが判定される。若し、一致すると判定されたら、処理はステップＳ３４に移行され、フラグSFINDFLGの値が「１」とされ、次のステップＳ３５で、ＲフラグRFLG[IW]の値が「１」とされる。
【０１１２】
そして、処理はステップＳ３７に移行され、変数IWがスライドサイズ未満、すなわち、スライド記憶部が有するスライド数未満であるか否かが判定される。若し、変数IWがスライドサイズ未満であると判定されたら、ステップＳ３８で変数IWに「１」が加えられ、処理がステップＳ３３に戻される。一方、ステップＳ３７で、変数IWがスライドサイズ以上であると判定されたら、一連の処理が終了される。
【０１１３】
一方、ステップＳ３３で入力データとスライド[IW]に格納された過去の入力データとが一致しないと判定されたら、処理はステップＳ３６に移行され、ＲフラグRFLG[IW]の値が「０」とされる。そして、処理がステップＳ３７に移行される。
【０１１４】
図９は、図７のステップＳ１３による一例のリスト探索処理をより詳細に示すフローチャートである。先ず、ステップＳ４０およびステップＳ４１で、フラグLFINDFLGおよび変数IWがそれぞれ値「０」に初期化される。
【０１１５】
ステップＳ４２で、入力データとスライド[IW]に格納された過去の入力データとが一致し、且つ、ＲフラグRFLG[IW]の値が「１」であるか否かが判定される。若し、それぞれの条件を満たすと判定されたら、処理はステップＳ４３に移行され、ＷフラグWFLG[IW]の値が「１」とされ、次のステップＳ４４で、フラグLFINDFLGの値が「１」とされる。そして、処理がステップＳ４６に移行される。
【０１１６】
一方、ステップＳ４２で、上述の条件を満たさない、すなわち、入力データとスライド[IW]に格納された過去の入力データとが一致しない、または、ＲフラグRFLG[IW]の値が「１」でないと判定されたら、処理はステップＳ４５に移行され、ＷフラグWFLG[IW]の値が「０」とされる。そして、処理がステップＳ４６に移行される。
【０１１７】
ステップＳ４６では、変数IWがスライドサイズ未満であるか否かが判定される。若し、変数IWがスライドサイズ未満であると判定されたら、ステップＳ４７で変数IWに「１」が加えられ、処理がステップＳ４２に戻される。一方、変数IWがスライドサイズ以上であると判定されたら、処理がステップＳ４８に移行される。
【０１１８】
ステップＳ４８では、フラグLFINDFLGの値が「０」であるか否かが判定される。若し、値が「０」であると判定されたら、処理がステップＳ４９に移行されて変数IWが値「０」に初期化され、次のステップＳ５０でＲフラグRFLG[IW]の値が「１」であるか否かが判定される。若し、「１」であると判定されたら、処理はステップＳ５１に移行される。
【０１１９】
ステップＳ５１では、変数IWがアドレス値Addressとされ、次のステップＳ５２で、スライドサイズを変数IWに代入する。そして、処理がステップＳ５３に移行される。ステップＳ５３では、変数IWがスライドサイズ未満であるか否かが判定される。若し、変数IWがスライドサイズ未満であると判定されたら、ステップＳ５４で変数IWに「１」が加算されて処理がステップＳ５０に戻される。
【０１２０】
一方、ステップＳ５３で、変数IWがスライドサイズ以上であると判定されたら、一連の処理が終了される。例えば、上述したステップＳ５２を経由してこのステップＳ５３に到達した場合、ステップＳ５２で変数IWにスライドサイズが代入されているため、必ず処理が終了される。
【０１２１】
上述したステップＳ４８で、フラグLFINDFLGの値が「０」ではないと判定されたら、処理はステップＳ５５に移行され、変数IWが値「０」に初期化される。次のステップＳ５６で、ＲフラグRFLG[IW]に対してＷフラグWFLG[IW]が設定される。そして、ステップＳ５７で、変数IWがスライドサイズ未満であるか否かが判定される。若し、変数IWがスライドサイズ未満であると判定されたら、ステップＳ５８で変数IWに「１」が加算されて処理がステップＳ５６に戻される。一方、ステップＳ５７で変数IWがスライドサイズ以上であると判定されたら、処理は次のステップＳ５９に移行され、レングスLengthに対して１が加算され、一連の処理が終了される。
【０１２２】
図１０は、図７のステップＳ２５による一例のスライド追加処理をより詳細に示す一例のフローチャートである。先ず、ステップＳ７０で、変数IWがスライド数から１を減じた値に設定される。次のステップＳ７１で、スライド[IW]に、スライド[IW−１]の値が格納され、ステップＳ７２で、変数IWが「０」を超えるか否かが判定される。若し、変数IWが「０」を超えると判定されたら、処理はステップＳ７３に移行され、変数IWから「１」が減じられる。そして、処理がステップＳ７１に戻される。一方、ステップＳ７２で、変数IWが「０」以下であると判定されたら、処理はステップＳ７４に移行され、スライド[0]に対して入力データが格納される。
【０１２３】
＜スライド／リスト生成処理部のハードウェア構成例＞
図１１は、上述したスライド探索処理、リスト探索処理および符号化処理を実行するスライド／リスト生成処理部３０１の、一例のハードウェア構成を示す。スライド／リスト生成処理部３０１は、スライド探索部１００、スライド記憶部１０１、リスト探索部１０２およびコントローラ１０３を有する。
【０１２４】
コントローラ１０３は、例えばマイクロプロセッサからなり、図７のフローチャートを用いて説明した、ステップＳ１２およびステップＳ１３の処理を除いた、ステップＳ１１〜ステップＳ２６による処理を行い、スライド／リスト生成処理部３０１の動作を制御する。例えば、コントローラ１０３は、上述した現在スライド探索処理およびリスト探索処理のうち何れが有効かを示すフラグListFLGによる動作制御を行う。
【０１２５】
スライド／リスト生成処理部３０１に対して、例えば１クロック毎に１単位の入力データが入力され、スライド探索部１００、スライド記憶部１０１およびリスト探索部１０２にそれぞれ供給される。入力データは、さらに、出力側のレジスタ１４１にも格納される。レジスタ１４１に格納される入力データは、PASS符号の符号化の際のデータ値として用いられる。以下では、データの１単位を１バイトとする。
【０１２６】
スライド記憶部１０１は、各々がレジスタからなり、それぞれ１単位のデータが格納されるｎ個（例えば２５６個）のスライド１２０1、１２０2、…、１２０nが直列に接続されて構成される。また、各スライド１２０1、１２０2、…、１２０nの出力は、次のレジスタに供給されると共に、後述するスライド探索部１００の対応する比較器１１１mの一方の入力端と、リスト探索部１０２の対応する比較器１３０mの一方の入力端にそれぞれ供給される。
【０１２７】
なお、図３を用いて説明したスライド符号における、アドレス値AddressおよびレングスLengthのデータ長は、スライド記憶部１０１が有するスライド数ｎに応じて決められる。すなわち、スライド数ｎ＝２５６であれば、アドレス値AddressおよびレングスLengthが「２５６」までの値を表現可能に、それぞれのデータ長が８ビットに決められる。
【０１２８】
スライド記憶部１０１は、これらｎ個のスライド１２０1、１２０2、…、１２０nによりＦＩＦＯが構成され、入力されたデータがスライド１２０1からスライド１２０2、スライド１２０3、…と１クロック毎に順次送られていく。
【０１２９】
スライド探索部１００は、ｎ個の比較器１１１1、１１１2、…、１１１nと、ｎ入力の論理和回路１１０とを有する。比較器１１１1、１１１2、…、１１１nのそれぞれは、一方および他方の入力端に入力されたデータを比較し、両者が一致していれば値「１」を出力し、一致していなければ値「０」を出力する。
【０１３０】
比較器１１１1、１１１2、…、１１１nの一方の入力端には、上述したように、スライド記憶部１０１が有するスライド１２０1、１２０2、…、１２０nの出力がそれぞれ入力される。また、比較器１１１1、１１１2、…、１１１nそれぞれの他方の入力端には、入力データが入力される。
【０１３１】
比較器１１１1、１１１2、…、１１１nそれぞれの出力は、ｎ入力の論理和回路１１０に入力されると共に、後述するリスト探索部１０２のセレクタ（ＳＥＬ）１３１1、１３１2、…、１３１nの一方の入力端にそれぞれ入力される。論理和回路１１０の出力は、フラグSFINDFLGとしてコントローラ１０３に供給される。このフラグSFINDFLGは、スライド１２０1、１２０2、…、１２０nのデータのうち少なくとも１が入力データと一致しているか否かを示す。
【０１３２】
リスト探索部１０２は、それぞれｎ個の比較器１３０1、１３０2、…、１３０n、セレクタ１３１1、１３１2、…、１３１n、ならびに、レジスタ１３２1、１３２2、…、１３２nと、アドレス値生成部１３３と、ｎ入力の論理和回路１８とを有する。比較器１３０1、１３０2、…、１３０nのそれぞれは、一方および他方の入力端に入力されたデータを比較し、両者が一致していれば値「１」を出力し、一致していなければ値「０」を出力する。
【０１３３】
比較器１３０1、１３０2、…、１３０nの一方の入力端には、上述したように、スライド記憶部１０１が有するスライド１２０1、１２０2、…、１２０nの出力がそれぞれ入力される。また、比較器１３０1、１３０2、…、１３０nそれぞれの他方の入力端には、入力データが入力される。
【０１３４】
比較器１３０1、１３０2、…、１３０nの出力は、ＷフラグWFLGmであって、ｎ入力の論理和回路１８にそれぞれ入力されると共に、セレクタ１３１1、１３１2、…、１３１nの他方の入力端にそれぞれ入力される。論理和回路１８の出力は、フラグLFINDFLGとしてコントローラ１０３に供給される。フラグLFINDFLGは、ＷフラグWFLG1、WFLG2、…、WFLGnのうち少なくとも１の値が「１」であることを示す。
【０１３５】
セレクタ１３１1、１３１2、…、１３１nの出力は、ＲフラグRFLGmとされて、それぞれレジスタ１３２1、１３２2、…、１３２nに格納される。セレクタ１３１1、１３１2、…、１３１nは、コントローラ１０３から図示しない経路を経て供給されるフラグListFLGにより、一方および他方の端子のうち何れを選択するかが制御される。
【０１３６】
若し、フラグListFLGの値が「０」であって、現在スライド探索処理が有効であることが示されていれば、セレクタ１３１1、１３１2、…、１３１nは、それぞれの一方の入力端に入力された、スライド探索部１００における比較器１１１1、１１１2、…、１１１nの出力をレジスタ１３２1、１３２2、…、１３２nに供給するように制御される。例えば、セレクタ１３１m（なお、１≦ｍ≦ｎとする）は、対応するレジスタ１３２mに格納される値が「０」のときに入力端が選択されるように制御される。
【０１３７】
一方、フラグListFLGの値が「１」であって、現在リスト探索処理が有効であることが示されていれば、セレクタ１３１1、１３１2、…、１３１nは、それぞれの他方の入力端に入力された、リスト探索部１０２における比較器１３０1、１３０2、…、１３０nを選択してレジスタ１３２1、１３２2、…、１３２nに供給するように制御される。例えば、セレクタ１３１mは、対応するレジスタ１３２mに格納される値が「１」のときに他方の入力端が選択されるように制御される。
【０１３８】
レジスタ１３２1、１３２2、…、１３２nは、セレクタ１３１1、１３１2、…、１３１nからの出力が供給されると、格納されているＲフラグRFLG1、RFLG2、…、RFLGnを出力する。すなわち、レジスタ１３２1、１３２2、…、１３２nに格納されるＲフラグRFLG1、RFLG2、…、RFLGnは、供給されたセレクタ１３１1、１３１2、…、１３１nからの出力により更新される。
【０１３９】
レジスタ１３２1、１３２2、…、１３２nから出力されたＲフラグRFLG1、RFLG2、…、RFLGnは、比較器１３０1、１３０2、…、１３０nの動作を制御する制御信号として、比較器１３０1、１３０2、…、１３０nの制御端にそれぞれ供給される。例えば、例えば比較器１３０mは、対応するレジスタ１３２mから供給された制御信号が値「１」を示していれば比較動作を行い、値「０」を示していれば比較動作を行わない。これは、比較器１３０1、１３０2、…、１３０nそれぞれの動作は、比較器１３０1、１３０2、…、１３０n自身の出力により絞り込まれていくことを意味する。
【０１４０】
レジスタ１３２1、１３２2、…、１３２nから出力されたＲフラグRFLG1、RFLG2、…、RFLGnは、さらにアドレス値生成部１３３にも供給される。アドレス値生成部１３３は、図４の処理＃５で説明したように、リスト探索処理が終了した際に、レジスタ１３２1、１３２2、…、１３２nから供給されるＲフラグRFLG1、RFLG2、…、RFLGnのうち、値が「１」であるＲフラグRFLGmを選択し、選択されたＲフラグRFLGmの番号をアドレス値Addressとして出力する。アドレス値生成部１３３から出力されたアドレス値Addressは、レジスタ１４０に格納されると共に、コントローラ１０３に供給される。
【０１４１】
ここで、アドレス値生成部１３３は、値が「１」であるＲフラグRFLGmが複数存在する場合に、スライドの番号が小さい、すなわち、スライド記憶部１０１においてより入力側に近いスライド１２０mに基づくＲフラグRFLGmから優先的に選択する。これは、入力に近いスライド１２０mの方が、入力データと一致する可能性が高いからである。このとき、図３を用いて説明した符号フォーマットにおいて、アドレス値Addressが小さい方が短い符号となるように構成すると、圧縮効率が高くなり、好ましい。
【０１４２】
コントローラ１０３は、スライド探索部１００から供給されたフラグSFINDFLGと、リスト探索部１０２から供給されたフラグLFINDFLGと、アドレス値生成部１３３から供給されたアドレス値Address値とに基づき、レングスLengthおよび一致の有無を示す一致フラグFLAGを生成する。レングスLengthおよび一致フラグFLAGは、それぞれレジスタ１４３および１４２に格納される。
【０１４３】
なお、レジスタ１４０〜１４３にそれぞれ格納されたアドレス値Address、データ値、一致フラグFLAGおよびレングスLengthは、それぞれ符号フォーマット生成処理部３０２に読み出され、図３に例示する符号フォーマットに従い符号化され符号データが生成される。
【０１４４】
このような構成において、スライド探索処理は、以下のように行われる。すなわち、比較器１１１1、１１１2、…、１１１nによる、入力データと、スライド１２０1、１２０2、…、１２０nに格納された過去の入力データとの比較処理が行われる。比較結果がそれぞれ論理和回路１１０に供給され、フラグSFINDFLGが出力される。比較結果は、セレクタ１３１1、１３１2、…、１３１nにも供給され、スライド探索処理の間は、レジスタ１３２1、１３２2、…、１３２nに格納される。図１１の構成によれば、この一連の処理を１クロックで実行可能である。
【０１４５】
また、リスト探索処理は、以下のように行われる。すなわち、比較器１３０1、１３０2、…、１３０nによる、入力データと、スライド１２０1、１２０2、…、１２０nに格納された過去の入力データとの比較処理が行われる。このとき、レジスタ１３２1、１３２2、…、１３２nに格納されるＲフラグRFLG1、RFLG2、…、RFLGnの値に基づき、比較器１３０1、１３０2、…、１３０nの比較動作が制御される。例えば、ＲフラグRFLG1、RFLG2、…、RFLGnの値が全て「０」であれば、比較器１３０1、１３０2、…、１３０n全ての比較動作が行われないことになる。この状態を、リスト探索処理が行われていない状態とする。
【０１４６】
比較器１３０1、１３０2、…、１３０nによる比較結果がそれぞれ論理和回路１８に供給され、フラグLFINDFLGが出力される。また、各比較結果は、セレクタ１３１1、１３１2、…、１３１nに供給され、リスト探索処理の間は、レジスタ１３２1、１３２2、…、１３２nに格納される。また、レジスタ１３２1、１３２2、…、１３２nに格納されるＲフラグRFLG1、RFLG2、…、RFLGnは、アドレス値生成部１３３にも保持される。
【０１４７】
アドレス値生成部１３３は、レジスタ１３２1、１３２2、…、１３２nに格納される値が全て「０」であれば、保持しているＲフラグRFLG1、RFLG2、…、RFLGnのうち値が「１」のＲフラグRFLGmの位置を、アドレス値Addressとしてコントローラ１０３に渡す。図１１の構成によれば、このリスト探索処理による一連の処理を１クロックで実行可能である。
【０１４８】
図１１の構成によれば、スライド探索部１００と、リスト探索部１０２とがそれぞれ別個の構成とされると共に、スライド探索部１００とリスト探索部１０２とでスライド記憶部１００を共有する。そのため、スライド探索部１００によるスライド探索処理と、リスト探索部１０２によるリスト探索処理とを並列的に実行することが可能である。したがって、図４を用いて説明したような、リスト探索処理からスライド探索処理へと移行する際の１クロック分の無駄が生じず、符号化処理をより高速化できる。また、図１１の構成によれば、先読みバッファや大規模なマトリクスアレイなどの構成が不要なので、ハードウェア規模を小さくできる。
【０１４９】
＜デコーダ＞
図１２は、デコーダ２４３の一例の構成を示す。デコーダ２４３において、符号読み込み部４００により、上述したエンコーダ２４２で符号化された符号データがフラッシュメモリ２４０から読み込まれる。符号読み込み部４００に読み込まれた符号データは、符号フォーマット解析部４０１に供給される。符号フォーマット解析部４０１は、図３を用いて説明した符号フォーマットに従い、供給された符号データを解釈してデータ値、アドレス値Address、レングスLengthおよび一致フラグFLAGを取り出す。取り出されたこれらのデータは、スライド展開部４０２に供給される。
【０１５０】
スライド展開部４０２は、図４を用いて説明したように、直列に接続された複数のレジスタがＦＩＦＯとして構成される、スライド記憶部を持つ。各レジスタは、スライドと呼ばれ、それぞれ１単位（例えば１バイト）のデータを格納可能とされる。スライド展開部４０２は、供給されたデータ値、アドレス値Address、レングスLengthおよび一致フラグFLAGに基づき、スライド記憶部における各スライドに対してデータを展開し、符号データを復号する。復号されたデータは、データ書き込み部４０３に供給され、メインメモリ２１０のプログラム領域２１０Ａに書き込まれる。
【０１５１】
＜復号処理の詳細＞
図１３は、上述した本実施形態の符号化方法により符号化された符号データを、デコーダ２４３で復号する一例の処理を示すフローチャートである。なお、符号読み込み部４００により、フラッシュメモリ２４０から予め符号データが読み込まれているものとする。先ず、ステップＳ１００で、符号フォーマット解析部４０１は、符号読み込み部４００に読み込まれている圧縮データのヘッダを読み込み、後続する符号がPASS符号およびスライド符号のうち何れであるかを判定する（ステップＳ１０１）。
【０１５２】
若し、ヘッダすなわち一致フラグFLAGの値が「０」であれば、当該ヘッダを含む符号がPASS符号であると判定され、処理がステップＳ１０２に移行される。ステップＳ１０２で、符号フォーマット解析部４０１は、次のステップＳ１０２でヘッダに続く８ビットをデータ値として読み込む。読み込まれたデータ値は、そのまま出力データとして出力される（ステップＳ１０３）と共に、スライド展開部４０２に供給されスライドに追加される（ステップＳ１０４）。データ値のスライドに対する追加処理は、図１０のフローチャートで説明したのと同様の手順により行われる。そして、処理がステップＳ１１１に移行される。
【０１５３】
ステップＳ１１１では、例えば符号読み込み部４００により、読み込まれている符号データに対する処理が全て終了したか否かが判定される。全て終了したと判定されたら、一連の復号処理が終了される。一方、符号読み込み部４００に読み込まれている全ての符号データに対する処理が終了していないと判定されたら、処理はステップＳ１００に戻され、次の符号に対する処理が行われる。
【０１５４】
ステップＳ１０１で、読み込んだヘッダがPASS符号ではない、すなわち、スライド符号であると判定されたら、処理はステップＳ１０５に移行される。ステップＳ１０５では、符号フォーマット解析部４０１が、ヘッダに続く１６ビットをレングスLengthおよびアドレス値Addressとして読み込む。読み込んだレングスLengthおよびアドレス値Addressは、スライド展開部４０２に供給される。
【０１５５】
次のステップＳ１０６で、スライド展開部４０２は、スライド記憶部のアドレス値Addressで示されるスライドに格納されるデータを読み込む。読み込まれたデータは、出力データとして出力される（ステップＳ１０７）と共に、スライド展開部４０２に供給されスライドに追加される（ステップＳ１０８）。
【０１５６】
処理はステップＳ１１０に移行され、レングスLengthが「０」より大きいか否かが判定される。若し、レングスLengthが「０」以下であると判定されたら、処理はステップＳ１１１に移行される。一方、レングスLengthが「０」より大きいと判定されたら、処理はステップＳ１０６に戻される。
【０１５７】
＜スライド展開部のハードウェア構成＞
図１４は、スライド展開部４０２の一例のハードウェア構成を示す。スライド展開部４０２は、スライド記憶部５００、コントローラ５０１、セレクタ５０２および５０３を有する。
【０１５８】
コントローラ５０１は、例えばマイクロプロセッサからなり、アドレス値Address、レングスLengthおよび一致フラグFLAGが供給され、供給されたこれらのデータに基づきこのスライド展開部４０２の全体の動作を制御する。例えばコントローラ５０１は、スライド記憶部５００におけるデータ値のスライドに対する追加処理や、セレクタ５０２および５０３の動作などを制御する。
【０１５９】
スライド記憶部５００は、各々がレジスタからなり、それぞれ１単位のデータが格納されるｎ個のスライド５１１1、５１１2、…、５１１nが直列に接続されて構成されたＦＩＦＯと、当該ＦＩＦＯの先頭に接続されるセレクタ５１０とを有する。
【０１６０】
各スライド５１０1、５１０2、…、５１０nの出力は、さらに、それぞれセレクタ５０２に供給される。セレクタ５０２の出力は、セレクタ５０３に供給されると共に、セレクタ５１０にも供給される。
【０１６１】
符号フォーマット解析部４０１から読み込まれたデータ値がセレクタ５１０に供給されると共に、セレクタ５０３にも供給される。セレクタ５１０は、図１３のステップＳ１０４のスライド追加処理時には、入力されたデータ値をスライド５１１1に追加する。また、図１３のステップＳ１０８のスライド追加処理時には、ステップＳ１０６においてスライド符号のアドレス値Addressに基づき選択されたスライドから出力されたデータを、スライド５１１1に追加する。
【０１６２】
セレクタ５０２は、図１３のステップＳ１０６の処理時に、コントローラ５０１から供給されるアドレス値Addressに従い、スライド記憶部５００の各スライド５１１1、５１１2、…、５１１nの出力からスライド５１１Addressの出力を選択し、選択した出力を、セレクタ５０３および５１０にそれぞれ供給する。
【０１６３】
セレクタ５０３は、図１３のステップＳ１０３において、ステップＳ１０２で読み込まれたデータ値を出力する。また、図１３のステップＳ１０７のデータ出力処理時に、セレクタ５０２から供給されたデータを出力する。
【０１６４】
なお、上述では、本発明がプリンタ装置に適用されるように説明したが、これは一例でありこの例に限定されない。すなわち、本発明は、データの可逆符号化をハードウェアを用いて行う他の装置にも適用することが可能である。
【符号の説明】
【０１６５】
１００  スライド探索部
１０１  スライド記憶部
１０２  リスト探索部
１０３  コントローラ
１１０，１３４  論理和回路
１１１1〜１１１n，１３０1〜１３０n  比較器
１２０1〜１２０n  スライド
１３１1〜１３１n  セレクタ
１３２1〜１３２n  レジスタ
１３３  アドレス値生成部
２００  プリンタ装置
２１０  メインメモリ
２１０Ａ  プログラム領域
２４０  フラッシュメモリ
２４２  エンコーダ
２４３  デコーダ
３０１  スライド／リスト生成処理部
４０２  スライド展開部
５００  スライド記憶部
５０１  コントローラ
５０２，５０３，５１０  セレクタ
５１１1〜５１１n  スライド
【先行技術文献】
【特許文献】
【０１６６】
【特許文献１】特許第２７１３３６９号公報
【特許文献２】特許第３６１０３８１号公報
【特許文献３】特許第３７３０３８５号公報
【特許文献４】特許第４０００２６６号公報
【特許文献５】特許第３９２２３８６号公報
【図１】
2011066557.tif 000003
【図２】
2011066557.tif 000004
【図３】
2011066557.tif 000005
【図４】
2011066557.tif 000006
【図５−１】
2011066557.tif 000007
【図５−２】
2011066557.tif 000008
【図６−１】
2011066557.tif 000009
【図６−２】
2011066557.tif 000010
【図６−３】
2011066557.tif 000011
【図６−４】
2011066557.tif 000012
【図６−５】
2011066557.tif 000013
【図６−６】
2011066557.tif 000014
【図６−７】
2011066557.tif 000015
【図６−８】
2011066557.tif 000016
【図７】
2011066557.tif 000017
【図８】
2011066557.tif 000018
【図９】
2011066557.tif 000019
【図１０】
2011066557.tif 000020
【図１１】
2011066557.tif 000021
【図１２】
2011066557.tif 000022
【図１３】
2011066557.tif 000023
【図１４】
2011066557.tif 000024
【図１５】
2011066557.tif 000025
【図１６】
2011066557.tif 000026