(57)【要約】【課題】  ランレングス符号による符号データの復号化を最低スループット６以上で処理可能な低コストの構成を提供すること。【解決手段】  復号化の前にデータ変換装置によって符号データを変換し、符号データを構成する単位符号の並びの種類数を削減することで、復号化装置が復号すべき単位符号の並びパターンを少なく制限し、復号化装置の回路規模を小さく、かつ、処理遅延時間を小さくする。【選択図】  図１
2011055422.tif 000002
【特許請求の範囲】
【請求項１】
レングス情報とデータ情報からなる単位符号を複数入力する入力手段と、前記入力手段によって入力された１つまたは複数の単位符号を１つまたは複数の単位符号に変換して出力する変換手段とを備え、前記変換手段は、複数の変換方法の中から、処理する単位符号のレングス情報が持つ属性の繰り返し回数の大きさに応じて選択した１つの変換方法で変換を行うことを特徴とし、また、変換前の単位符号の並びの種類数よりも、変換後の単位符号の並びの種類数の方が少なくなる様に変換を行うことを特徴とするデータ変換装置。
【請求項２】
請求項１のデータ変換装置で、前記変換手段は、単位符号の並びを先頭から順に復号化したときに、１つの単位符号を復号することで（N×Ｍｉ）個のデータが得られるか（Ｎ：既定数、Ｍｉ：自然数）、または、複数の単位符号を復号化することでＮ個のデータが得られることが繰り返される単位符号の並びになるように、１つの単位符号を複数の単位符号に分割変換することで生成することを特徴とするデータ変換装置。
【請求項３】
請求項１のデータ変換装置で、前記変換手段は、「繰り返しなし」または「繰り返し回数が１」という属性を有するレングス情報を含む単位符号が複数個連続して並ぶ場合に、それらを１つの単位符号に結合することを特徴とするデータ変換装置。
【請求項４】
請求項１のデータ変換装置で、さらに、入力されるデータを符号化して複数の単位符号の並びである符号データを出力する符号化手段と、符号データを記憶する記憶手段とを備え、前記符号化手段の出力する符号データが前記入力手段に入力され、前記変換手段の出力する変換後の符号データが前記記憶手段に記憶されることを特徴とするデータ変換装置。
【請求項５】
請求項１のデータ変換装置で、さらに、符号データを記憶する記憶手段と、入力される符号データを復号化する復号化手段とを備え、前記記憶手段によって記憶されている符号データが前記入力手段に入力され、前記変換手段の出力する変換後の符号データが前記復号化手段により復号化されることを特徴とするデータ変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号データ変換装置、符号化装置ならびに復号化装置に関する。
【背景技術】
【０００２】
データ列を扱うシステムにおいて、データ転送に必要なバス帯域やデータ記憶に必要な領域を削減するために、データの転送や記憶を行う前に符号化（エンコード処理）によるデータ圧縮を行う技術がある。符号化によって転送・記憶するデータ量を削減して、データの内容が必要となったときに復号化（デコード処理）によるデータ伸張を行う技術である。符号化形式は様々な種類が存在するが、同じ値を持つデータが連続することの多い文書画像データに関しては、単純かつ低コストなハードウェア構成で実現が可能なランレングス符号化の形式が採用されることがある。このとき、一つのデータが１バイトから成る場合、レングス情報も１バイトを使用したバイト単位でのランレングス圧縮を行うことが一般的である。一方、プリンタでの印刷動作に利用される画像データにおいても上記のデータ符号化・復号化処理によるデータ量削減が行われている。この場合、符号化された画像データはプリンタがデータを要求するタイミングに間に合うように復号化されて順次プリンタに転送されるというリアルタイム処理が行われる。そのため、プリンタ動作で利用するデータに欠損を発生させないためには、復号化の処理速度はプリンタがデータを要求する速度よりも常に上回っているかちょうど等しい必要がある。ここで、ランレングス符号化された符号データを復号化する処理は、符号データ単位毎の逐次処理となる。その理由は、ランレングス符号の符号データはレングス情報とデータ情報の組（以下、単位符号）が複数連続したもので、レングス情報の内容によりそれに続くデータ情報のデータ数が決定する可変長の符号化方式であるためである。次のレングス情報を見つけるためには前のレングス情報を評価する必要があり、単純な並列処理ができないことによる。一方、一つのレングス情報の評価によって出力できるデータ数は可変であるが、通常、最小の場合で１になる。従って、クロック同期で動作する復号化回路の処理速度は最小の場合で１データ／サイクル、例えば１バイト単位でランレングス符号化された符号データを復号化する場合には最小の場合で１バイト／サイクル、となるのが一般的である。スループット（単位時間内に処理可能なデータ量）で表現すれば、最低スループットが１、または単に、スループットが１、となる。近年、プリンタ技術が向上することによって、従来より高解像なプリントや高速なプリントが可能なプリンタが登場してきている。解像度やプリント速度が高まると単位時間内のプリントに必要となるデータ量も多くなり、必然的にプリンタに転送するデータ量が多くなる。高解像や高速のプリンタの中には、例えば１サイクルの内に６データのデータ転送を要求するものがある。この場合、ランレングス復号化の処理速度（スループット１）が、プリンタがデータを要求する速度（スループット６）を下回る。そのため、単純にリアルタイムで復号化を行ってプリンタに対して転送する構成では、プリンタへのデータ転送速度が間に合わないという問題がある。そのため、あらかじめ符号データは復号化して中間バッファに蓄えておき、プリンタの要求に応じて中間バッファからの読み出しとデータ転送を行うことでデータ欠損を防ぐ技術が考えられる。または、復号化回路をデータ転送回路に対して６倍の周波数を持つクロック信号で駆動して、データ転送１サイクルあたり６データの復号化が可能となるように回路を構成する手法が考えられる。または、目的のスループット達成のために必要な数だけ、複数の単位符号（レングス情報とデータ情報の組）を同時に復号化する技術が提案されている（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−１８９５２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、前述した従来の技術における中間バッファは、プリンタが一度のプリント動作に必要とするデータ量を記憶するページメモリ装置により実現されるために、大幅なコスト増加となってしまう。また、前述した従来の技術における６倍の周波数を持つクロック信号による駆動は、コストの高いものとなってしまう。なぜなら、データ転送回路の動作周波数の６倍の周波数を利用することは、半導体物理設計と製造技術および製造の面において技術的な難易度が高くなるためである。また、前述した従来の技術における目的のスループット達成のために必要な数だけ、複数の単位符号（レングス情報とデータ情報の組）を同時に伸張処理する技術では、スループット６を実現する構成にした場合に回路規模と動作速度に問題が出る。なぜなら、上記技術では入力される符号データのレングス情報の並び方をあらかじめ記憶した複数のパターンに照合して動作を決定しているが、このパターン数が組み合わせ論的に増加するためである。具体的には、スループット４を実現する構成でパターン数は４１であるが、例えばスループット６を実現する構成ではパターン数は２３９となり、入力データとのパターンマッチング回路の回路規模および処理遅延時間が大きくなってしまう。回路規模が大きくなるとコストが増加し、また、処理遅延時間が大きくなると１サイクル以内に処理することが技術的に難しくなりコスト増加につながる。
【課題を解決するための手段】
【０００５】
上記課題を解決するため、本発明によれば、レングス情報とデータ情報からなる単位符号を複数入力する入力手段（例えば１０１に相当）と、前記入力手段によって入力された１つまたは複数の単位符号を１つまたは複数の単位符号に変換して出力する変換手段（例えば１０２、１０３に相当）とを備え、前記変換手段は、複数の変換方法の中から、処理する単位符号のレングス情報が持つ属性の繰り返し回数の大きさに応じて選択（例えば２１１９に相当）した１つの変換方法で変換を行うことを特徴とし、また、変換前の単位符号の並びの種類数（例えば図８に相当）よりも、変換後の単位符号の並びの種類数（例えば図２４に相当）の方が少なくなる様に変換を行うことを特徴とする。また、上記データ変換装置で、前記変換手段は、単位符号の並びを先頭から順に復号化したときに、１つの単位符号を復号することで（N×Ｍｉ）個のデータが得られるか（Ｎ：既定数、Ｍｉ：自然数）、または、複数の単位符号を復号化することでＮ個のデータが得られることが繰り返される単位符号の並びになるように、１つの単位符号を複数の単位符号に分割変換する（例えば２１１２、２１１５、２１２２に相当）ことで生成することを特徴とする。また、上記データ変換装置で、前記変換手段は、「繰り返しなし」または「繰り返し回数が１」という属性を有するレングス情報を含む単位符号が複数個連続して並ぶ場合に、それらを１つの単位符号に結合する（例えば２２０６に相当）ことを特徴とする。また、上記データ変換装置で、さらに、入力されるデータを符号化して複数の単位符号の並びである符号データを出力する符号化手段（例えば２０１に相当）と、符号データを記憶する記憶手段（例えば２０２に相当）とを備え、前記符号化手段の出力する符号データが前記入力手段に入力され、前記変換手段の出力する変換後の符号データが前記記憶手段に記憶されることを特徴とする。また上記データ変換装置で、さらに、符号データを記憶する記憶手段（例えば３０１に相当）と、入力される符号データを復号化する復号化手段（例えば３０２に相当）とを備え、前記記憶手段によって記憶されている符号データが前記入力手段に入力され、前記変換手段の出力する変換後の符号データが前記復号化手段により復号化されることを特徴とする。
【発明の効果】
【０００６】
本発明によって、コスト増加の要因となるページメモリ装置による中間バッファを持つことや、６倍以上の周波数での回路駆動や、２３９以上のパターン数を処理するパターンマッチング回路を持つことなく、スループット６以上の符号データの復号化を低コストで実現することが可能である。
【図面の簡単な説明】
【０００７】
【図１】本実施の形態のデータ変換装置（以下、データ変換装置１）の内部構成図。
【図２】データ変換装置１が扱う符号データに含まれるレングス情報に関する仕様表。
【図３】データ変換装置１が扱う符号データの一例。
【図４】図３に示す符号データの各バイトに識別のための番号ｃ０〜ｃ２３を付けて、また、符号データのレングス情報に太線で囲みを付けた図。
【図５】図３および図４に示す符号データを復号化して得られるデータを示した図。
【図６】データ変換装置１が扱う符号データの復号化の一つの手順を示すフローチャート。
【図７】データ変換装置１が扱う符号データを復号化して４バイト以上のデータが得られる符号データのパターンを列挙したリスト。
【図８】データ変換装置１が扱う符号データを復号化して６バイト以上のデータが得られる符号データのパターンを列挙したリスト。
【図９】データ変換装置１内部のレングス情報抽出部１０２の内部構成を示すブロック図。
【図１０】レングス情報判別部１０２１において、バイト０がレングス情報か否か判別するための回路を示した模式図。
【図１１】レングス情報判別部１０２１において、バイト０がレングス情報か否か判別するための回路を示した模式図。
【図１２】レングス情報判別部１０２１において、バイト１がレングス情報か否か判別するための回路を示した模式図。
【図１３】レングス情報判別部１０２１において、バイト１がレングス情報か否か判別するための回路を示した模式図。
【図１４】レングス情報判別部１０２１において、バイト２がレングス情報か否か判別するための回路を示した模式図。
【図１５】レングス情報判別部１０２１において、バイト２がレングス情報か否か判別するための回路を示した模式図。
【図１６】レングス情報判別部１０２１において、バイト３がレングス情報か否か判別するための回路を示した模式図。
【図１７】レングス情報判別部１０２１において、バイト３がレングス情報か否か判別するための回路を示した模式図。
【図１８】レングス情報判別部１０２１において、バイト１１がレングス情報か否か判別するための回路を示した模式図。
【図１９】レングス情報判別部１０２１において、バイト１１がレングス情報か否か判別するための回路を示した模式図。
【図２０】データ変換装置１内部の符号データ変換部１０３の内部構成を示すブロック図。
【図２１】レングス情報分割部１０３１におけるレングス情報の分割処理の手順を示すフローチャート。
【図２２】レングス情報結合部１０３２におけるレングス情報の結合処理の手順を示すフローチャート。
【図２３】図８で示した符号データのパターンのうち、データ変換装置１が変換の対象とするパターンを網掛けにしたリスト。
【図２４】図２３で示した符号データのパターンのうち、データ変換装置１から出力されるパターンのみを列挙したリスト。
【図２５】図３に示す符号データをデータ変換装置が変換して符号データ出力部１０４から出力する符号データを示した図。
【図２６】本実施の形態に係るデータ変換装置（以下、データ変換装置２）の内部構成を示すブロック図。
【図２７】本実施の形態に係るデータ変換装置（以下、データ変換装置３）の内部構成を示すブロック図。
【図２８】図２５で示した符号データを復号化部３０２が復号化して出力するデータのタイミングチャート。
【発明を実施するための形態】
【０００８】
（実施例１）
本発明の少なくとも一部は以下の特徴を有する。即ち、
（特徴１）レングス情報とデータ情報からなる単位符号を複数入力する入力手段と、前記入力手段によって入力された１つまたは複数の単位符号を１つまたは複数の単位符号に変換して出力する変換手段とを備え、前記変換手段は、複数の変換方法の中から、処理する単位符号のレングス情報が持つ属性の繰り返し回数の大きさに応じて選択した１つの変換方法で変換を行うことを特徴とし、また、変換前の単位符号の並びの種類数よりも、変換後の単位符号の並びの種類数の方が少なくなる様に変換を行うこと。
【０００９】
（特徴２）上記特徴１のデータ変換装置で、前記変換手段は、単位符号の並びを先頭から順に復号化したときに、１つの単位符号を復号することで（N×Ｍｉ）個のデータが得られるか（Ｎ：既定数、Ｍｉ：自然数）、または、複数の単位符号を復号化することでＮ個のデータが得られることが繰り返される単位符号の並びになるように、１つの単位符号を複数の単位符号に分割変換することで生成すること。
【００１０】
（特徴３）上記特徴１のデータ変換装置で、前記変換手段は、「繰り返しなし」または「繰り返し回数が１」という属性を有するレングス情報を含む単位符号が複数個連続して並ぶ場合に、それらを１つの単位符号に結合すること。
【００１１】
以下、上記特徴１〜３におけるデータ変換装置の一実施の形態を図面に基づき説明する。
【００１２】
図１は本実施の形態に係るデータ変換装置（以下、データ変換装置１）の内部構成を示すブロック図である。１０１は符号データ入力部で、１０２はレングス情報抽出部で、１０３は符号データ変換部で、１０４は符号データ出力部である。
【００１３】
符号データ入力部１０１はレングス情報抽出部１０２と接続されており、受信した符号データを１２バイト毎にレングス情報抽出部１０２に対して転送する。
【００１４】
レングス情報抽出部１０２は符号データ入力部１０１および符号データ変換部１０３と接続されている。レングス情報抽出部１０２は、符号データ入力部１０１から受信した符号データをバイト毎にレングス情報とデータ情報とに分けて、符号データ変換部１０３に転送する。符号データをレングス情報とデータ情報とに分ける手順は後述する。
【００１５】
符号データ変換部１０３はレングス情報抽出部１０２および符号データ出力部１０４に接続されている。符号データ変換部１０３は、レングス情報抽出部１０２からレングス情報およびデータ情報を受信して符号データに変換し、符号データ出力部１０４に対して転送する。受信したレングス情報およびデータ情報を変換する手順は後述する。
【００１６】
符号データ出力部１０４は符号データ変換部１０３に接続されており、符号データ変換部１０３から受信した符号データを出力する。
【００１７】
図２はデータ変換装置１が扱う符号データに含まれるレングス情報に関する仕様表である。符号データは本仕様表に従って復号化することができる。ここで、データ変換装置１が扱う符号データはバイト単位のデータをランレングス符号化したものである。ランレングス符号化による符号データはレングス情報（１バイト）とその直後に続くデータ情報（可変長バイト）とを一組の単位符号としてその単位符号が複数個連続したものである。各単位符号はその先頭に１バイトのレングス情報を必ず含む。そしてそのレングス情報の直後に可変長バイトのデータ情報が続く。レングス情報はデータ情報のバイト数情報、および、繰り返し回数情報を持っており、図２に示すレングス情報仕様表を用いて解釈することでデータ情報のバイト数と、復号化するときにデータ情報の繰り返し出力すべき回数がわかる。また、単位符号の直後には次の単位符号が続くので、データ情報のバイト数がわかると次の単位符号のバイト位置がわかり、次の単位符号のレングス情報を抽出することができる。ここまで示したように、ランレングス符号化による符号データは、データの先頭から順にレングス情報を解釈して可変長のデータ情報を処理していくことで、一意に復号処理が行われる符号データである。
【００１８】
図３はデータ変換装置１が扱う符号データの一例である。図中の四角は１バイトのデータを表しており、記載されている数字は１６進数でデータの内容を示している。
【００１９】
図４は図３に示す符号データの各バイトに識別のための番号ｃ０〜ｃ２３を付けて、また、符号データのレングス情報に太線で囲みを付けた図である。バイト０、６、８、１３、１５、２２がレングス情報である。ただし、符号データはレングス情報の位置を各バイト値の他に持っているわけではなく、本図はあくまで説明のための図である。符号データ中の各バイトがレングス情報なのかデータ情報なのかについては、前述した通り、符号データの先頭バイトから順に解析処理していくことにより判別することが可能である。
【００２０】
図５は図３および図４に示す符号データを復号化して得られるデータを示した図である。図中の四角は１バイトのデータを表しており、記載されている数字は１６進数でデータの内容を示している。また、各バイトデータには説明のための識別番号ｄ０〜ｄ３１を順に付けてある。
【００２１】
図６はデータ変換装置１が扱う符号データの復号化の一つの手順を示すフローチャートである。符号データを先頭バイトから順に１バイトずつ処理する手順となっている。手順６０１では、未処理の符号データの先頭に位置するバイトデータを１バイト取得する。手順６０２では、取得したバイトデータをレングス情報として図２で示したテーブルに照合して解析し、データ情報のバイト数および出力の繰り返し回数を得る。また、すでに取得済みのバイト数を記憶する内部カウンタであるバイトカウンタの値を０に初期化する。手順６０３では、未処理の符号データの先頭に位置するバイトデータを１バイト取得して、バイトカウンタを１増やし、また、出力の繰り返し回数を記憶する内部カウンタである繰り返しカウンタの値を０に初期化する。手順６０４では、取得したバイトデータをデータ情報として１バイト出力し、繰り返しカウンタを１増やす。手順６０５では、繰り返しカウンタの値と手順６０２で得た出力の繰り返し回数とを比較して、繰り返し回数分だけすでに出力が終了されていれば手順６０６へ、まだ出力されていなければ手順６０４へ進む。手順６０６では、バイトカウンタの値と手順２で得た出力のデータ情報のバイト数とを比較して、バイト数だけすでに出力が終了されていれば手順６０７へ、まだ出力されていなければ手順６０３へ進む。手順６０７では、符号データのすべてのバイトについての処理が終了していれば終了し、終了していなければ手順６０１へ進む。
【００２２】
ここで、図４に示す符号データを復号化して図５で示すデータが得られる手順を、図６に示すフローチャートに沿って、図中の手順番号および識別番号を使って説明する。
【００２３】
手順６０１では、符号データ未処理部分の先頭の１バイト（ｃ０）をレングス情報として取得する。手順６０２では、レングス情報（ｃ０）の値０４ｈ（後付きのｈは１６進数を表す）を図２で示すテーブルと照合し、バイト数５、繰り返し数１を得る。また、バイトカウンタを０に初期化する。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１）をデータ情報として取得し、バイトカウンタを１増やして１とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１）の値０１ｈを出力し（ｄ０）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値１とバイト数５とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ２）をデータ情報として取得し、バイトカウンタを１増やして２とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ２）の値０２ｈを出力し（ｄ１）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値２とバイト数５とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ３）をデータ情報として取得し、バイトカウンタを１増やして３とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ３）の値０３ｈを出力し（ｄ２）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値３とバイト数５とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ４）をデータ情報として取得し、バイトカウンタを１増やして４とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ４）の値０４ｈを出力し（ｄ３）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値４とバイト数５とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ５）をデータ情報として取得し、バイトカウンタを１増やして５とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ５）の値０５ｈを出力し（ｄ４）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値５とバイト数５とを比較して、バイト数出力終了と判断し、手順６０７に進む。手順６０７では、まだ未処理の符号データが残っているため（ｃ６）、手順６０１に進む。
【００２４】
手順６０１では、符号データ未処理部分の先頭の１バイト（ｃ６）をレングス情報として取得する。手順６０２では、レングス情報（ｃ６）の値ＦＥｈ（後付きのｈは１６進数を表す）を図２で示すテーブルと照合し、バイト数１、繰り返し数３を得る。また、バイトカウンタを０に初期化する。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ７）をデータ情報として取得し、バイトカウンタを１増やして１とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ７）の値０６ｈを出力し（ｄ５）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数３とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ７）の値０６ｈを出力し（ｄ６）、繰り返しカウンタを１増やして２にする。手順６０５では、繰り返しカウンタの値２と繰り返し数３とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ７）の値０６ｈを出力し（ｄ７）、繰り返しカウンタを１増やして３にする。手順６０５では、繰り返しカウンタの値３と繰り返し数３とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値１とバイト数１とを比較して、バイト数出力終了と判断し、手順６０７に進む。手順６０７では、まだ未処理の符号データが残っているため（ｃ８）、手順６０１に進む。手順６０１では、符号データ未処理部分の先頭の１バイト（ｃ８）をレングス情報として取得する。手順６０２では、レングス情報（ｃ８）の値０３ｈ（後付きのｈは１６進数を表す）を図２で示すテーブルと照合し、バイト数４、繰り返し数１を得る。また、バイトカウンタを０に初期化する。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ９）をデータ情報として取得し、バイトカウンタを１増やして１とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ９）の値０７ｈを出力し（ｄ８）、繰り返しカウンタを１増やして１にする。
【００２５】
（手順６０５）繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値１とバイト数４とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１０）をデータ情報として取得し、バイトカウンタを１増やして２とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１０）の値０８ｈを出力し（ｄ９）、繰り返しカウンタを１増やして１にする。
【００２６】
（手順６０５）繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値２とバイト数４とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１１）をデータ情報として取得し、バイトカウンタを１増やして３とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１１）の値０９ｈを出力し（ｄ１０）、繰り返しカウンタを１増やして１にする。
【００２７】
（手順６０５）繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値３とバイト数４とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１２）をデータ情報として取得し、バイトカウンタを１増やして４とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１２）の値０Ａｈを出力し（ｄ１１）、繰り返しカウンタを１増やして１にする。
【００２８】
手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値４とバイト数４とを比較して、バイト数出力終了と判断し、手順６０７に進む。手順６０７では、まだ未処理の符号データが残っているため（ｃ１３）、手順６０１に進む。手順６０１では、符号データ未処理部分の先頭の１バイト（ｃ１３）をレングス情報として取得する。手順６０２では、レングス情報（ｃ１３）の値ＦＡｈ（後付きのｈは１６進数を表す）を図２で示すテーブルと照合し、バイト数１、繰り返し数７を得る。また、バイトカウンタを０に初期化する。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１４）をデータ情報として取得し、バイトカウンタを１増やして１とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１４）の値０Ｂｈを出力し（ｄ１２）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ１４）の値０Ｂｈを出力し（ｄ１３）、繰り返しカウンタを１増やして２にする。手順６０５では、繰り返しカウンタの値２と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ１４）の値０Ｂｈを出力し（ｄ１４）、繰り返しカウンタを１増やして３にする。手順６０５では、繰り返しカウンタの値３と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ１４）の値０Ｂｈを出力し（ｄ１５）、繰り返しカウンタを１増やして４にする。手順６０５では、繰り返しカウンタの値４と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ１４）の値０Ｂｈを出力し（ｄ１６）、繰り返しカウンタを１増やして５にする。手順６０５では、繰り返しカウンタの値５と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ１４）の値０Ｂｈを出力し（ｄ１７）、繰り返しカウンタを１増やして６にする。手順６０５では、繰り返しカウンタの値６と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ１４）の値０Ｂｈを出力し（ｄ１８）、繰り返しカウンタを１増やして７にする。手順６０５では、繰り返しカウンタの値７と繰り返し数７とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値１とバイト数１とを比較して、バイト数出力終了と判断し、手順６０７に進む。手順６０７では、まだ未処理の符号データが残っているため（ｃ１５）、手順６０１に進む。手順６０１では、符号データ未処理部分の先頭の１バイト（ｃ１５）をレングス情報として取得する。手順６０２では、レングス情報（ｃ５）の値０５ｈ（後付きのｈは１６進数を表す）を図２で示すテーブルと照合し、バイト数６、繰り返し数１を得る。また、バイトカウンタを０に初期化する。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１６）をデータ情報として取得し、バイトカウンタを１増やして１とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１６）の値０Ｃｈを出力し（ｄ１９）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値１とバイト数６とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１７）をデータ情報として取得し、バイトカウンタを１増やして２とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１７）の値０Ｄｈを出力し（ｄ２０）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値２とバイト数６とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１８）をデータ情報として取得し、バイトカウンタを１増やして３とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１８）の値０Ｅｈを出力し（ｄ２１）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値３とバイト数６とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ１９）をデータ情報として取得し、バイトカウンタを１増やして４とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ１９）の値０Ｆｈを出力し（ｄ２２）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値４とバイト数６とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ２０）をデータ情報として取得し、バイトカウンタを１増やして５とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ２０）の値１０ｈを出力し（ｄ２３）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値５とバイト数６とを比較して、バイト数出力未終了と判断し、手順６０３に進む。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ２１）をデータ情報として取得し、バイトカウンタを１増やして６とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ２１）の値１１ｈを出力し（ｄ２４）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数１とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値６とバイト数６とを比較して、バイト数出力終了と判断し、手順６０７に進む。手順６０７では、まだ未処理の符号データが残っているため（ｃ２２）、手順６０１に進む。手順６０１では、符号データ未処理部分の先頭の１バイト（ｃ２２）をレングス情報として取得する。手順６０２では、レングス情報（ｃ２２）の値ＦＡｈ（後付きのｈは１６進数を表す）を図２で示すテーブルと照合し、バイト数１、繰り返し数７を得る。また、バイトカウンタを０に初期化する。手順６０３では、符号データ未処理部分の先頭の１バイト（ｃ２３）をデータ情報として取得し、バイトカウンタを１増やして１とし、また、繰り返しカウンタを０に初期化する。手順６０４では、データ情報（ｃ２３）の値１２ｈを出力し（ｄ２５）、繰り返しカウンタを１増やして１にする。手順６０５では、繰り返しカウンタの値１と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ２３）の値１２ｈを出力し（ｄ２６）、繰り返しカウンタを１増やして２にする。手順６０５では、繰り返しカウンタの値２と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ２３）の値１２ｈを出力し（ｄ２７）、繰り返しカウンタを１増やして３にする。手順６０５では、繰り返しカウンタの値３と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ２３）の値１２ｈを出力し（ｄ２８）、繰り返しカウンタを１増やして４にする。手順６０５では、繰り返しカウンタの値４と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ２３）の値１２ｈを出力し（ｄ２９）、繰り返しカウンタを１増やして５にする。手順６０５では、繰り返しカウンタの値５と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ２３）の値１２ｈを出力し（ｄ３０）、繰り返しカウンタを１増やして６にする。手順６０５では、繰り返しカウンタの値６と繰り返し数７とを比較して、繰り返し出力未終了と判断し、手順６０４に進む。手順６０４では、データ情報（ｃ２３）の値１２ｈを出力し（ｄ３１）、繰り返しカウンタを１増やして７にする。手順６０５では、繰り返しカウンタの値７と繰り返し数７とを比較して、繰り返し出力終了と判断し、手順６０６に進む。手順６０６では、バイトカウンタの値１とバイト数１とを比較して、バイト数出力終了と判断し、手順６０７に進む。手順６０７では、もう未処理の符号データが残っていないため、手順を終了する。なお、復号化の手順はこのフローチャートで示したものだけに限られるわけではない。
【００２９】
図７はデータ変換装置１が扱う符号データを復号化して４バイト以上のデータが得られる符号データのパターンを列挙したリストである。復号化して４バイト以上のデータが得られる符号データは数多く存在するが、それを下記の分類方法により複数のパターンに分類すると、このリストにある４１パターンに分けることができる。ここで、分類方法の一つは、４バイト以上のデータを得るのに必要十分な複数個のレングス情報について、レングス情報のバイト位置が同一の符号データを同じパターンとして分類する方法である。また、分類方法の一つは、４バイト以上のデータを得るのに必要十分な複数個のレングス情報について、レングス情報のバイト数情報と繰り返し回数のいずれかが同一の符号データを同じパターンとして分類する方法である。また、分類方法の一つは、復号化により得られるバイト数がちょうど４バイトになる符号データと、５バイト以上になる符号データを別のパターンとして分類する方法である。こうしてパターンに分類した符号データを表現するために、各パターンの各バイトは当てはまる範囲値で表記している箇所がある。特に「＊」マークのバイトは、範囲「００ｈ〜ＦＦｈ」を表し、あらゆるバイト値に当てはまる。パターン数は全部で４１あり、復号化時には符号データが４１パターンのどれに当てはまるかを判別して、該パターンに対応した処理を行うことで４バイトのスループットでの復号化を行うことができる。この復号化の手順については、特許文献１に記載されている。
【００３０】
図８はデータ変換装置１が扱う符号データを復号化して６バイト以上のデータが得られる符号データのパターンを列挙したリストである。復号化して６バイト以上のデータが得られる符号データは数多く存在するが、それを下記の分類方法により複数のパターンに分類すると、このリストにある２３９パターンに分けることができる。ここで、分類方法の一つは、６バイト以上のデータを得るのに必要十分な複数個のレングス情報について、レングス情報のバイト位置が同一の符号データを同じパターンとして分類する方法である。また、分類方法の一つは、６バイト以上のデータを得るのに必要十分な複数個のレングス情報について、レングス情報のバイト数情報と繰り返し回数のいずれかが同一の符号データを同じパターンとして分類する方法である。また、分類方法の一つは、復号化により得られるバイト数がちょうど６バイトになる符号データと、７バイト以上になる符号データを別のパターンとして分類する方法である。この２３９パターンについて、特許文献１と同様の手順によって復号化し、６バイトのスループットでの復号化を行うことができる。しかしながら前述の通り、入力データとのパターンマッチング回路の回路規模および処理遅延時間が大きくなってしまう。回路規模が大きくなるとコストが増加し、また、処理遅延時間が大きくなると１サイクル以内に処理することが技術的に難しくなりコスト増加につながるという問題がある。
【００３１】
図９はデータ変換装置１内部のレングス情報抽出部１０２の内部構成を示すブロック図である。１０２１はレングス情報判別部で、１０２２はレングス情報バッファで、１０２３はデータ情報バッファである。
【００３２】
レングス情報判別部１０２１は符号データ入力部１０１、レングス情報バッファ１０２２、および、データ情報バッファ１０２３に接続されている。レングス情報判別部１０２１は、符号データ入力部１０１から受信する符号データをレングス情報とデータ情報とに分離する。レングス情報判別部１０２１は処理クロックに同期して動作し、処理サイクル毎に、符号データ入力部１０１から１２バイトの符号データを受信して、各バイト（バイト０〜バイト１１）についてレングス情報か否か判断する。各バイトの判断は、それぞれに用意された判別回路を用いた方法で、各バイトの判別回路についての詳細は後述する。レングス情報判別部１０２１は、レングス情報と判断されたバイトをレングス情報バッファ１０２２に、レングス情報ではないと判断されたバイトをデータ情報バッファ１０２３に転送する。レングス情報バッファ１０２２は、レングス情報判別部１０２１、および、符号データ変換部１０３に接続されている。レングス情報バッファ１０２２は、レングス情報判別部１０２１から受信したレングス情報を内部に格納する。また、レングス情報バッファ１０２２は、内部に格納したレングス情報を符号データ変換部１０３に対して転送する。データ情報バッファ１０２３は、レングス情報判別部１０２１、および、符号データ変換部１０３に接続されている。データ情報バッファ１０２３は、レングス情報判別部１０２１から受信したデータ情報を内部に格納する。また、データ情報バッファ１０２３は、内部に格納したデータ情報を符号データ変換部１０３に対して転送する。
【００３３】
図１０および図１１はレングス情報判別部１０２１において、バイト０がレングス情報か否か判別するための回路を示した模式図である。ここで、レングス情報となるバイトの条件というのは、２つある。１つは、そのバイトが符号データ全体で一番最初のバイトであるという条件である。もう１つは、そのバイトの直前のバイトでデータ情報が終わっているバイトであるという条件である。前者の条件は一意に決まる。後者の条件は、直前のバイトでデータ情報が終わっているかどうかの判断により決まる。この判断は、２つ前のバイトがレングス情報でかつバイト数情報が１の場合や、３つ前のバイトがレングス情報でかつバイト数情報が２の場合、などといった、先行するレングス情報を利用した論理で実現される。図１１の「この処理サイクルでバイト０はレングス情報」という論理は、前者の条件を表している。また、図１１の「１つ後の処理サイクルでバイト０はレングス情報」から「１１後の処理サイクルでバイト０はレングス情報」までの条件は、後者の条件を表している。後者の条件がサイクル毎に別れているのは、レングス情報判別部１０２１が同時に判断するのが１サイクルあたり１２バイトずつということが理由である。レングス情報のバイト数情報が最小１から最大１２８のいずれの場合にも、次のレングス情報となるバイトを識別するために、最大１１サイクル後の処理において参照できるようにフリップフロップを使った構成としている。なお、「３つ後の処理サイクルでバイト０はレングス情報」から「９つ後の処理サイクルでバイト０はレングス情報」までの条件および構成は、他と同様のルールに基づいて構成できるため、本実施例では図示と説明を省略する。
【００３４】
図１２および図１３はレングス情報判別部１０２１において、バイト１がレングス情報か否か判別するための回路を示した模式図である。３つ後の処理サイクルから９つ後の処理サイクルにおいてレングス情報か否かの判断条件および構成は、他と同様のルールに基づいて構成できるため、本実施例では図示と説明を省略している。
【００３５】
図１４および図１５はレングス情報判別部１０２１において、バイト２がレングス情報か否か判別するための回路を示した模式図である。３つ後の処理サイクルから９つ後の処理サイクルにおいてレングス情報か否かの判断条件および構成は、他と同様のルールに基づいて構成できるため、本実施例では図示と説明を省略している。
【００３６】
図１６および図１７はレングス情報判別部１０２１において、バイト３がレングス情報か否か判別するための回路を示した模式図である。３つ後の処理サイクルから９つ後の処理サイクルにおいてレングス情報か否かの判断条件および構成は、他と同様のルールに基づいて構成できるため、本実施例では図示と説明を省略している。また、バイト４からバイト１０がレングス情報か否かを判断するための回路は他と同様のルールに基づいて構成できるため、本実施例では図示と説明を省略している。
【００３７】
図１８および図１９はレングス情報判別部１０２１において、バイト１１がレングス情報か否か判別するための回路を示した模式図である。３つ後の処理サイクルから９つ後の処理サイクルにおいてレングス情報か否かの判断条件および構成は、他と同様のルールに基づいて構成できるため、本実施例では図示と説明を省略している。
【００３８】
図２０はデータ変換装置１内部の符号データ変換部１０３の内部構成を示すブロック図である。１０３１はレングス情報分割部で、１０３２はレングス情報結合部で、１０３３はデータ情報混合部である。レングス情報分割部１０３１は、レングス情報抽出部１０２のレングス情報バッファ１０２２と、レングス情報結合部１０３２とに接続されている。レングス情報分割部１０３１は、レングス情報抽出部１０２のレングス情報バッファ１０２２から受信するレングス情報の分割処理を行う。分割処理の内容は後述する。レングス情報分割部１０３１は、分割したレングス情報をレングス情報結合部１０３２に対して転送する。レングス情報結合部１０３２は、レングス情報分割部１０３１と、データ情報混合部１０３３とに接続されている。レングス情報結合部１０３２は、レングス情報分割部１０３１から受信するレングス情報の結合処理を行う。結合処理の内容は後述する。レングス情報結合部１０３２は、結合したレングス情報をデータ情報混合部１０３３に対して転送する。データ情報混合部１０３３は、レングス情報抽出部１０２のデータ情報バッファ１０２３と、レングス情報結合部１０３２に接続されている。データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報を受信して符号データ出力部１０４に対してレングス情報を転送し、また、そのレングス情報からバイト数情報を読み取る。データ情報混合部１０３３は、バイト数情報の数だけデータ情報バッファ１０２３からデータ情報を受信して、符号データ出力部１０４に対してデータ情報を転送する。ここで、レングス情報結合部１０３２から転送されるレングス情報には、リピート属性が付加されている場合がある。データ情報混合部１０３３は、リピート属性が付加されているレングス情報の場合には、直前に転送したデータ情報の最後の１バイトを再利用して残りのバイト数分のデータ情報のみをデータ情報バッファ１０２３から受信する。この場合、データ情報混合部１０３３は、再利用の１バイトと受信した残りのバイト数とを合わせて符号データ出力部１０４に対して転送する。
【００３９】
図２１はレングス情報分割部１０３１におけるレングス情報の分割処理の手順を示すフローチャートである。手順２１０１では、内部レジスタである積算復号後バイト数を０に初期化する。手順２１０２では、レングス情報抽出部１０２のレングス情報バッファ１０２２からのレングス情報転送が終了したかどうかを判断し、終了の場合は処理を終了する。
【００４０】
手順２１０３では、レングス情報抽出部１０２のレングス情報バッファ１０２２からレングス情報を１バイト受信して取得する。または、内部バッファに次に取得するレングス情報が記憶されている場合には、レングス情報抽出部１０２から受信せずに、内部バッファに記憶されているレングス情報を取得する。手順２１０４では、取得したレングス情報を図２で示したテーブルに照合して解析し、データ情報のバイト数および出力の繰り返し回数を得る。手順２１１９では、積算復号後バイト数が０と等しく、かつ、繰り返し回数が６より大きいかどうかの条件を判断し、条件が真の場合は手順２１２０に進み、偽の場合は手順２１０５に進む。手順２１０５では、積算復号後バイト数に（バイト数×繰り返し回数）を積算する。手順２１０６では、積算復号後バイト数が６より小さいかどうか判断し、小さい場合は手順２１０７に進み、小さくない場合は手順２１０８に進む。手順２１０７では、取得したレングス情報をレングス情報結合部１０３２に転送して、手順２１０２に進む。手順２１０８では、積算復号後バイト数が６と等しいかどうか判断し、等しい場合は手順２１０９に進み、等しくない場合は手順２１１１に進む。手順２１０９では、取得したレングス情報をレングス情報結合部１０３２に転送して、手順２１１０に進む。
【００４１】
手順２１１０では、区切り信号をレングス情報結合部１０３２に転送して、手順２１０１に進む。手順２１１１では、繰り返し回数が１と等しいかどうか判断して、等しい場合は手順２１１２に進み、等しくない場合は手順２１１５に進む。手順２１１２では、レングス情報を前部と後部とに分割する。具体的には、元のレングス情報の値を使って、別の新たな２つのレングス情報を生成する処理となる。レングス情報（後部）はバイト数情報として（６−積算復号後バイト数）を持ち、繰り返し回数として１を持つように生成する。レングス情報（前部）はバイト数情報として（元のバイト数情報−レングス情報（後部）のバイト数情報）を持ち、繰り返し回数として１を持つように生成する。手順２１１３では、レングス情報（前部）をレングス情報結合部１０３２に転送する。手順２１１４では、レングス情報（後部）を次に取得するレングス情報として内部バッファに記憶する。手順２１１５では、レングス情報を前部と後部とに分割する。具体的には、元のレングス情報の値を使って、別の新たな２つのレングス情報を生成する処理となる。レングス情報（後部）はバイト数情報として１を持ち、繰り返し回数として（６−積算復号後バイト数）を持つように生成する。レングス情報（前部）はバイト数情報として１を持ち、繰り返し回数として（元の繰り返し回数−レングス情報（後部）の繰り返し回数）を持つように生成する。手順２１１６では、レングス情報（前部）をレングス情報結合部１０３２に転送する。手順２１１７では、レングス情報（後部）にリピート属性を付加する。手順２１１８では、レングス情報（後部）を次に取得するレングス情報として内部バッファに記憶して、手順２１１０に進む。手順２１２０では、繰り返し回数が６の倍数かどうか判断し、判断が真の場合は手順２１２１に進み、偽の場合は手順２１２２に進む。手順２１２１では、取得したレングス情報をレングス情報結合部１０３２に転送して、手順２１１０に進む。
【００４２】
手順２１２２では、レングス情報を前部と後部とに分割する。具体的には、元のレングス情報の値を使って、別の新たな２つのレングス情報を生成する処理となる。レングス情報（後部）はバイト数情報として１を持ち、繰り返し回数として（元の繰り返し回数を６で割った余り）を持つように生成する。レングス情報（前部）はバイト数情報として１を持ち、繰り返し回数として（元の繰り返し回数−レングス情報（後部）の繰り返し回数）を持つように生成する。手順２１２３では、レングス情報（前部）をレングス情報結合部１０３２に転送する。手順２１２４では、レングス情報（後部）にリピート属性を付加する。
【００４３】
手順２１２５では、レングス情報（後部）を次に取得するレングス情報として内部バッファに記憶して、手順２１１０に進む。
【００４４】
図２２はレングス情報結合部１０３２におけるレングス情報の結合処理の手順を示すフローチャートである。手順２２０１では、内部バッファである一時バッファを初期化してなにも格納されていない状態にする。手順２２０２では、レングス情報分割部１０３１からレングス情報を１バイト受信する。手順２２０３では、受信したレングス情報を一時バッファに追加して記憶する。手順２２０４では、レングス情報分割部１０３１から区切り信号を受信したか、レングス情報分割部１０３１からのレングス情報が終了したかどうかを判断する。区切り信号を受信したかレングス情報が終了した場合は手順２２０５に進み、それ以外の場合は手順２２０２に進む。手順２２０５では、一時バッファに記憶されているレングス情報を先頭から調べて、既定の条件に当てはまるかどうかを判断する。規定の条件とは、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在するかどうかである。条件に当てはまる場合は手順２２０６に進み、当てはまらない場合は手順２２０７に進む。手順２２０６では、２つ隣り合っている繰り返し回数１のレングス情報を結合して、別の新しい１つのレングス情報に変換する。そして、一時バッファから２つのレングス情報を削除して、その代わりにその位置に新しい１つのレングス情報を記憶させ、手順２２０５に進む。ここで、２つのレングス情報の内、前に位置するものにリピート属性が付加されている場合は、新しい１つのレングス情報にもリピート属性を付加する。なお、レングス情報分割部１０３１の構成上、２つのレングス情報の内、後に位置するものにリピート属性が付加されることはない。手順２２０７では、一時バッファに記憶されているレングス情報をデータ情報混合部１０３３に対して転送する。このとき、レングス情報にリピート属性が付加されている場合は、リピート属性を付加したまま転送する。手順２２０８では、レングス情報分割部１０３１からのレングス情報の入力が終了したかどうかを判断して、終了した場合は処理を終了し、終了していない場合は手順２２０１に進む。
【００４５】
図２３は、図８で示した符号データのパターンのうち、データ変換装置１が変換の対象とするパターンを網掛けにしたリストである。具体的には、データ変換装置１は、パターン番号２で表される７バイト以上の連続データを表す符号データを、復号化により得られるバイト数が６の倍数バイトになる符号データと復号化により得られるバイト数が６未満バイトになる符号データとに分割する。また、その後者の６未満バイトになる符号データと、パターン番号２以外の網掛けで示したパターンの符号データを、復号化により得られるバイト数がちょうど６バイトになるパターンに当てはまる符号データに変換する。さらに、データ変換装置１は、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在している場合はそれらの符号データを、別の１つの符号データに変換する。つまり、リストでは、特定の変換を行うパターン番号２の他に、復号化により得られるバイト数が７バイト以上になるパターン、および、繰り返し回数１のレングス情報が２つ以上隣り合っているパターンが網掛けになっている。
【００４６】
図２４は、図２３で示した符号データのパターンのうち、データ変換装置１から出力されるパターンのみを列挙したリストである。パターン数は全部で３３パターンであり、かつ、６バイトの復号化に必要な符号データは最大でも８バイトである。ここで、パターン番号２以外のパターンを復号化した結果はちょうど６バイトになるため、復号化を行うときに単位符号の分割を考慮する必要がない。また、パターン番号２のパターンを復号化した結果は、ちょうど６バイトの倍数になるため、復号化を行うときにバイト単位での単位符号の分割を行うことなく６バイト単位での単純な繰り返しのみで復号化することができる。このため、データ変換装置１の出力する符号データだけを復号化する復号装置は、任意の符号データを復号化する復号装置と比較して回路規模が小さく、処理遅延時間が小さく、かつ、低コストで実現することが可能である。なお、パターン番号２のパターンで表される符号データは圧縮率が高い単位符号であり、この単位符号だけは６バイト毎に区切ることなく６の倍数バイトでの区切りとすることで、変換装置１の出力する符号データ全体の圧縮率をなるべく高く保っている。
【００４７】
図２５は、図３に示す符号データをデータ変換装置が変換して符号データ出力部１０４から出力する符号データを示した図である。
【００４８】
以上の構成において、データ変換装置１の動作を、図３に示す符号データを例に説明する。符号データ入力部１０１は、前述の通り、受信した符号データを１２バイト毎にレングス情報抽出部１０２に対して転送する。したがって、符号データはまず「０４，０１，０２,０３，０４，０５，ＦＥ，０６，０３，０７，０８，０９」が転送され、次に「０Ａ，ＦＡ，０Ｂ，０５，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，ＦＡ，１２」が転送される。
【００４９】
レングス情報抽出部１０２は、１２バイトの符号データ「０４，０１，０２,０３，０４，０５，ＦＥ，０６，０３，０７，０８，０９」を受信すると、レングス情報とデータ情報とに分けて内部バッファに格納する。また、レングス情報抽出部１０２は、続く１２バイトの符号データ「０Ａ，ＦＡ，０Ｂ，０５，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，ＦＡ，１２」を受信すると、レングス情報とデータ情報とに分けて内部バッファに格納する。そして、レングス情報抽出部１０２は、前述の通り符号データをレングス情報とデータ情報とに分けて符号データ変換部１０３に対して転送する。ここでの分割の手順については後述するが、まず分割した結果だけを説明すると以下の通りである。この符号データの場合、レングス情報は「０４，ＦＥ，０３，ＦＡ，０５，ＦＡ」である。また、データ情報は「０１，０２，０３，０４，０５，０６，０７，０８，０９，０Ａ，０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，１２」である。レングス情報およびデータ情報は、レングス情報抽出部１０２内部のレングス情報バッファ１０２２およびデータ情報バッファ１０２３にそれぞれ一時的に記憶されて、符号データ変換部１０３の要求に応じて転送される。したがって、符号データ変換部１０３はレングス情報として「０４，ＦＥ，０３，ＦＡ，０５，ＦＡ」の先頭からバイト単位で受信することになる。また、符号データ変換部１０３はデータ情報として「０１，０２，０３，０４，０５，０６，０７，０８，０９，０Ａ，０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，１２」の先頭からバイト単位で受信することになる。符号データ変換部１０３は、前述の通りレングス情報およびデータ情報をレングス情報抽出部１０２から受信して、変換した符号データを符号データ出力部１０４に対して転送する。ここでの変換の手順は後述するが、まず出力結果だけを説明すると以下の通りである。ここでの符号データ転送は、復号後のバイト数が６バイトになる毎に行われるため、数回に分かれて転送が行われる。１サイクルめは「０５，０１，０２，０３，０４，０５，０６」が転送される。この符号データは図２４におけるパターン３に該当する。２サイクルめは「ＦＦ，０６，０３，０７，０８，０９，０Ａ」が転送される。この符号データは図２４におけるパターン１５に該当する。３サイクルめは「ＦＢ，０Ｂ」が転送される。この符号データは図２４におけるパターン１に該当する。４サイクルめは「０５，０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０」が転送される。この符号データは図２４におけるパターン３に該当する。５サイクルめは「００，１１，ＦＣ，１２」が転送される。この符号データは図２４におけるパターン２６に該当する。６サイクルめは「ＦＦ，１２」が転送される。６サイクルめの符号データは入力の符号データが途中で終了したため、例外的に復号後のバイト数が６未満で転送が行われている。この符号データは２バイトのみであるため、図２４における複数のパターン１４・１５・１７・１９・２０・２１・２４・２５に該当する。
【００５０】
符号データ出力部１０４は、前述の通り符号データ変換部１０３から受信した符号データを出力する。出力は符号データ変換部１０３からの転送と同じ内容であり、すべての転送サイクルにおける符号データをつなげると図２５に示した符号データとなる。この符号データは、図２４で示したパターンのみを含む符号データとなっており、前述した通り、この符号データを復号化する復号装置は回路規模が小さく、処理遅延時間が小さく、かつ、低コストで実現することが可能である。
【００５１】
以下に、レングス情報抽出部１０２および符号データ変換部１０３の詳細な動作手順について説明する。以下、図９におけるレングス情報抽出部１０２の動作を、図３に示す符号データを例に説明する。前述の通り、符号データ入力部１０１は、受信した符号データを１２バイト毎にレングス情報抽出部１０２内のレングス情報判別部１０２１に対して転送する。したがって、符号データはまず「０４，０１，０２，０３，０４，０５，ＦＥ，０６，０３，０７，０８，０９」が転送され、次に「０Ａ，ＦＡ，０Ｂ，０５，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，ＦＡ，１２」が転送される。最初の処理サイクルでは、レングス情報判別部１０２１は「０４，０１，０２，０３，０４，０５，ＦＥ，０６，０３，０７，０８，０９」を受信して、この符号データの各バイトをバイト０からバイト１１までに割り当てる。そして、「最初の処理サイクル」であるため、図１１で示した判別回路により、「この処理サイクルでバイト０はレングス情報」と判断される。また、図１０で示した判別回路により、「バイト０はレングス情報」と判断される。そして、バイト０の値は０４であり、図２により「バイト０のバイト数情報が５」であることから、図示しない判別回路により「このサイクルでバイト６はレングス情報」と判断される。また、図示しない判別回路により「バイト６はレングス情報」と判断される。そして、バイト６の値はＦＥであり、図２により「バイト６のバイト数情報が１」であることから、図示しない判別回路により「このサイクルでバイト８はレングス情報」と判断される。また、図示しない判別回路により「バイト８はレングス情報」と判断される。そして、バイト８の値は０３であり、図２により「バイト８のバイト数情報が４」であることから、図１３で示した判別回路により「１つ後の処理サイクルでバイト１はレングス情報」と判断される。ここまでの処理により、バイト０、バイト６、および、バイト８がレングス情報であると判断され、これらのバイトはレングス情報バッファ１０２２に転送され、これら以外のバイトはデータ情報バッファ１０２３に転送される。したがって、この処理サイクルで、レングス情報バッファ１０２２には「０４，ＦＥ，０３」が転送される。また、この処理サイクルで、データ情報バッファ１０２３には「０１，０２，０３，０４，０５，０６，０７，０８，０９」が転送される。次の処理サイクルでは、レングス情報判別部１０２１は「０Ａ，ＦＡ，０Ｂ，０５，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，ＦＡ，１２」を受信して、この符号データの各バイトをバイト０からバイト１１までに割り当てる。ここで、前の処理サイクルにおいて、図１３で示した判別回路により「１つ後の処理サイクルでバイト１はレングス情報」と判断された。そのため、図１２で示した判別回路により「バイト１はレングス情報」と判断される。そして、バイト１の値はＦＡであり、図２により「バイト１のバイト数情報が１」であることから、図１７で示した判別回路により「この処理サイクルでバイト３はレングス情報」と判断される。また、図１６で示した判別回路により「バイト３はレングス情報」と判断される。そして、バイト３の値は０５であり、図２により「バイト３のバイト数情報が６」であることから、図示しない判別回路により「この処理サイクルでバイト１０はレングス情報」と判断される。また、図示しない判別回路により「バイト１０はレングス情報」と判断される。そして、バイト１０の値はＦＡであり、図２により「バイト１０のバイト数情報が１」であることから、図１１で示した判別回路により「１つ後の処理サイクルでバイト０はレングス情報」と判断される。ここまでの処理により、バイト１、バイト３、および、バイト１０がレングス情報であると判断され、これらのバイトはレングス情報バッファ１０２２に転送され、これら以外のバイトはデータ情報バッファ１０２３に転送される。したがって、この処理サイクルで、レングス情報バッファ１０２２には「ＦＡ，０５，ＦＡ」が転送される。また、この処理サイクルで、データ情報バッファ１０２３には「０Ａ，０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，１２」が転送される。したがって、レングス情報バッファ１０２２には「０４，ＦＥ，０３，ＦＡ，０５，ＦＡ」が格納される。また、データ情報バッファ１０２３には「０１，０２，０３，０４，０５，０６，０７，０８，０９，０Ａ，０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，１２」が格納される。
【００５２】
以下、図２０における符号データ変換部１０３の動作を、図３に示す符号データを例に説明する。前述の通り、レングス情報抽出部１０２は、符号データをレングス情報とデータ情報とに分けて内部バッファに格納し、符号データ変換部１０３の要求に応じて転送する。前述の通り、レングス情報は「０４，ＦＥ，０３，ＦＡ，０５，ＦＡ」である。また、データ情報は「０１，０２，０３，０４，０５，０６，０７，０８，０９，０Ａ，０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１，１２」である。レングス情報分割部１０３１は、前述の通り図２１で示したフローチャートに従って動作する。以下に図中の手順番号を使って説明する。
【００５３】
以下に、１サイクルめの動作を示す。手順２１０１では、積算復号後バイト数を０に初期化する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、１バイトのレングス情報（０４）を取得する。手順２１０４では、レングス情報（０４）を解析して、データ情報のバイト数（５）と繰り返し回数（１）を取得する。手順２１１９では、積算復号後バイト数（０）は０で、繰り返し回数（１）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（０）に５×１＝５を積算して、積算復号後バイト数は５になる。手順２１０６では、積算復号後バイト数（５）は６より小さいので、手順２１０７に進む。手順２１０７）では、レングス情報（０４）をレングス情報結合部１０３２に対して出力する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、１バイトのレングス情報（ＦＥ）を取得する。手順２１０４では、レングス情報（ＦＥ）を解析して、データ情報のバイト数（１）と繰り返し回数（３）を取得する。手順２１１９では、積算復号後バイト数（５）は０ではなく、繰り返し回数（３）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（５）に１×３＝３を積算して、積算復号後バイト数は８になる。手順２１０６では、積算復号後バイト数（８）は６より小さくないので、手順２１０８に進む。手順２１０８では、積算復号後バイト数（８）は６と等しくないので、手順２１１１に進む。手順２１１１では、繰り返し回数（３）は１と等しくないので、手順２１１５に進む。手順２１１５では、レングス情報（ＦＥ）を前部と後部とに分割する。前述の通り計算して、レングス情報（前部）はバイト数情報が１で繰り返し回数が１のレングス情報（００）となる。また、レングス情報（後部）はバイト数情報が１で繰り返し回数が２のレングス情報（ＦＦ）となる。手順２１１６では、レングス情報（前部）（００）をレングス情報結合部１０３２に対して出力する。手順２１１７では、レングス情報（後部）（ＦＦ）にリピート属性を付加する。手順２１１８では、レングス情報（後部）（ＦＦ・リピート）を次に取得するレングス情報として内部バッファに記憶して、手順２１１０に進む。手順２１１０では、区切り信号をレングス情報結合部１０３２に転送して、手順２１０１に進む。
【００５４】
以下に、２サイクルめの動作を示す。手順２１０１では、積算復号後バイト数を０に初期化する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、内部バッファに次に取得するレングス情報（ＦＦ・リピート）が記憶されているため、１バイトのレングス情報としてこのレングス情報（ＦＦ・リピート）を取得する。手順２１０４では、レングス情報（ＦＦ・リピート）を解析して、データ情報のバイト数（１）と繰り返し回数（２）を取得する。手順２１１９では、積算復号後バイト数（０）は０で、繰り返し回数（２）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（０）に１×２＝２を積算して、積算復号後バイト数は２になる。手順２１０６では、積算復号後バイト数（２）は６より小さいので、手順２１０７に進む。手順２１０７では、レングス情報（ＦＦ・リピート）をレングス情報結合部１０３２に対して出力する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、１バイトのレングス情報（０３）を取得する。手順２１０４では、レングス情報（０３）を解析して、データ情報のバイト数（４）と繰り返し回数（１）を取得する。手順２１１９では、積算復号後バイト数（２）は０ではなく、繰り返し回数（１）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（２）に４×１＝４を積算して、積算復号後バイト数は６になる。手順２１０６では、積算復号後バイト数（６）は６より小さくないので、手順２１０８に進む。手順２１０８では、積算復号後バイト数（６）は６と等しいので、手順２１０９に進む。手順２１０９では、レングス情報（０３）をレングス情報結合部１０３２に対して出力して、手順２１１０に進む。手順２１１０では、区切り信号をレングス情報結合部１０３２に転送して、手順２１０１に進む。
【００５５】
以下に、３サイクルめの動作を示す。手順２１０１では、積算復号後バイト数を０に初期化する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、１バイトのレングス情報（ＦＡ）を取得する。手順２１０４では、レングス情報（ＦＡ）を解析して、データ情報のバイト数（１）と繰り返し回数（７）を取得する。手順２１１９では、積算復号後バイト数（０）は０で、繰り返し回数（７）は６より大きいので、条件は真となり、手順２１２０に進む。手順２１２０では、繰り返し回数（７）は６の倍数ではないので、手順２１２２に進む。手順２１２２では、レングス情報（ＦＡ）を前部と後部とに分割する。前述の通り計算して、レングス情報（前部）はバイト数情報が１で繰り返し回数が６のレングス情報（ＦＢ）となる。また、レングス情報（後部）はバイト数情報が１で繰り返し回数が１のレングス情報（００）となる。手順２１２３では、レングス情報（前部）（ＦＢ）をレングス情報結合部１０３２に対して出力する。手順２１２４では、レングス情報（後部）（００）にリピート属性を付加する。手順２１２５では、レングス情報（後部）（００・リピート）を次に取得するレングス情報として内部バッファに記憶して、手順２１１０に進む。手順２１１０では、区切り信号をレングス情報結合部１０３２に転送して、手順２１０１に進む。
【００５６】
以下に、４サイクルめの動作を示す。手順２１０１では、積算復号後バイト数を０に初期化する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、内部バッファに次に取得するレングス情報（００・リピート）が記憶されているため、１バイトのレングス情報としてこのレングス情報（００・リピート）を取得する。手順２１０４では、レングス情報（００・リピート）を解析して、データ情報のバイト数（１）と繰り返し回数（１）を取得する。手順２１１９では、積算復号後バイト数（０）は０で、繰り返し回数（１）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（０）に１×１＝１を積算して、積算復号後バイト数は１になる。手順２１０６では、積算復号後バイト数（１）は６より小さいので、手順２１０７に進む。手順２１０７では、レングス情報（００・リピート）をレングス情報結合部１０３２に対して出力する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、１バイトのレングス情報（０５）を取得する。手順２１０４では、レングス情報（０５）を解析して、データ情報のバイト数（６）と繰り返し回数（１）を取得する。手順２１１９では、積算復号後バイト数（１）は０ではなく、繰り返し回数（１）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（１）に６×１＝６を積算して、積算復号後バイト数は７になる。手順２１０６では、積算復号後バイト数（７）は６より小さくないので、手順２１０８に進む。手順２１０８では、積算復号後バイト数（７）は６と等しくないので、手順２１１１に進む。手順２１１１では、繰り返し回数（１）は１と等しいので、手順２１１２に進む。手順２１１２では、レングス情報（０５）を前部と後部とに分割する。前述の通り計算して、レングス情報（前部）はバイト数情報が５で繰り返し回数が１のレングス情報（０４）となる。また、レングス情報（後部）はバイト数情報が１で繰り返し回数が１のレングス情報（００）となる。手順２１１３では、レングス情報（前部）（０４）をレングス情報結合部１０３２に対して出力する。手順２１１４では、レングス情報（後部）（００）を次に取得するレングス情報として内部バッファに記憶して、手順２１１０に進む。手順２１１０では、区切り信号をレングス情報結合部１０３２に転送して、手順２１０１に進む。
【００５７】
以下に、５サイクルめの動作を示す。手順２１０１では、積算復号後バイト数を０に初期化する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、内部バッファに次に取得するレングス情報（００）が記憶されているため、１バイトのレングス情報としてこのレングス情報（００）を取得する。手順２１０４では、レングス情報（００）を解析して、データ情報のバイト数（１）と繰り返し回数（１）を取得する。手順２１１９では、積算復号後バイト数（０）は０で、繰り返し回数（１）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（０）に１×１＝１を積算して、積算復号後バイト数は１になる。手順２１０６では、積算復号後バイト数（１）は６より小さいので、手順２１０７に進む。手順２１０７では、レングス情報（００）をレングス情報結合部１０３２に対して出力する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、１バイトのレングス情報（ＦＡ）を取得する。手順２１０４では、レングス情報（ＦＡ）を解析して、データ情報のバイト数（１）と繰り返し回数（７）を取得する。手順２１１９では、積算復号後バイト数（１）は０ではなく、繰り返し回数（７）は６より大きいので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（１）に１×７＝７を積算して、積算復号後バイト数は８になる。手順２１０６では、積算復号後バイト数（８）は６より小さくないので、手順２１０８に進む。手順２１０８では、積算復号後バイト数（８）は６と等しくないので、手順２１１１に進む。手順２１１１では、繰り返し回数（７）は１と等しくないので、手順２１１５に進む。手順２１１５では、レングス情報（ＦＡ）を前部と後部とに分割する。前述の通り計算して、レングス情報（前部）はバイト数情報が１で繰り返し回数が５のレングス情報（ＦＣ）となる。また、レングス情報（後部）はバイト数情報が１で繰り返し回数が２のレングス情報（ＦＦ）となる。手順２１１６では、レングス情報（前部）（ＦＣ）をレングス情報結合部１０３２に対して出力する。手順２１１７では、レングス情報（後部）（ＦＦ）にリピート属性を付加する。手順２１１８では、レングス情報（後部）（ＦＦ・リピート）を次に取得するレングス情報として内部バッファに記憶して、手順２１１０に進む。手順２１１０では、区切り信号をレングス情報結合部１０３２に転送して、手順２１０１に進む。
【００５８】
以下に、６サイクルめの動作を示す。手順２１０１では、積算復号後バイト数を０に初期化する。手順２１０２では、レングス情報の入力は終了していないため、手順２１０３に進む。手順２１０３では、内部バッファに次に取得するレングス情報（ＦＦ・リピート）が記憶されているため、１バイトのレングス情報としてこのレングス情報（ＦＦ・リピート）を取得する。手順２１０４では、レングス情報（ＦＦ・リピート）を解析して、データ情報のバイト数（１）と繰り返し回数（２）を取得する。手順２１１９では、積算復号後バイト数（０）は０で、繰り返し回数（２）は６より大きくないので、条件は偽となり、手順２１０５に進む。手順２１０５では、積算復号後バイト数（０）に１×２＝２を積算して、積算復号後バイト数は２になる。手順２１０６では、積算復号後バイト数（２）は６より小さいので、手順２１０７に進む。手順２１０７では、レングス情報（ＦＦ・リピート）をレングス情報結合部１０３２に対して出力する。手順２１０２では、レングス情報の入力は終了したため、処理を終了する。
【００５９】
以上に示したように、レングス情報分割部１０３１はレングス情報結合部１０３２に対して以下のようにレングス情報および区切り信号を転送する。
１サイクルめ：０４，００，区切り信号
２サイクルめ：ＦＦ・リピート，０３，区切り信号
３サイクルめ：ＦＢ，区切り信号
４サイクルめ：００・リピート，０４，区切り信号
５サイクルめ：００，ＦＣ，区切り信号
６サイクルめ：ＦＦ・リピート
レングス情報結合部１０３２は、前述の通り図２２で示したフローチャートに従って動作する。以下に図中の手順番号を使って説明する。以下に、１サイクルめの動作を示す。手順２２０１では、一時バッファを初期化してなにも格納されていない状態にする。手順２２０２では、レングス情報分割部１０３１からレングス情報（０４）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（０４）。手順２２０３では、レングス情報分割部１０３１からの区切り信号の入力がなく、かつ、レングス情報の入力は終了していないため、手順２２０２に進む。
【００６０】
手順２２０２では、レングス情報分割部１０３１からレングス情報（００）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（０４，００）。
【００６１】
手順２２０３では、レングス情報分割部１０３１からの区切り信号が入力されるため、手順２２０５に進む。手順２２０５では、一時バッファ（０４，００）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在している（０４，００）ため、手順２２０６に進む。手順２２０６では、２つ隣り合っている繰り返し回数１のレングス情報（０４，００）を結合して、別の新しい１つのレングス情報（０５）に変換する。一時バッファを更新して（０５）とし、手順２２０５に進む。手順２２０５では、一時バッファ（０５）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在していないため、手順２２０７に進む。手順２２０７では、一時バッファ（０５）に記憶されているレングス情報（０５）をデータ情報混合部１０３３に対して転送する。手順２２０８では、レングス情報分割部１０３１からのレングス情報の入力は終了していないため、手順２２０１に進む。
【００６２】
以下に、２サイクルめの動作を示す。手順２２０１では、一時バッファを初期化してなにも格納されていない状態にする。手順２２０２では、レングス情報分割部１０３１からレングス情報（ＦＦ・リピート）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（ＦＦ・リピート）。手順２２０３では、レングス情報分割部１０３１からの区切り信号の入力がなく、かつ、レングス情報の入力は終了していないため、手順２２０２に進む。手順２２０２では、レングス情報分割部１０３１からレングス情報（０３）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（ＦＦ・リピート，０３）。手順２２０３では、レングス情報分割部１０３１からの区切り信号が入力されるため、手順２２０５に進む。手順２２０５では、一時バッファ（ＦＦ・リピート，０３）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在していないため、手順２２０７に進む。
【００６３】
手順２２０７では、一時バッファ（ＦＦ・リピート，０３）に記憶されているレングス情報（ＦＦ・リピート，０３）をデータ情報混合部１０３３に対して転送する。このとき、１つめのレングス情報（ＦＦ・リピート）にはリピート属性が付加されており、転送時にもリピート属性を付加したまま転送する。手順２２０８では、レングス情報分割部１０３１からのレングス情報の入力は終了していないため、手順２２０１に進む。
【００６４】
以下に、３サイクルめの動作を示す。手順２２０１では、一時バッファを初期化してなにも格納されていない状態にする。手順２２０２では、レングス情報分割部１０３１からレングス情報（ＦＢ）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（ＦＢ）。手順２２０３では、レングス情報分割部１０３１からの区切り信号が入力されるため、手順２２０５に進む。手順２２０５では、一時バッファ（ＦＢ）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在していないため、手順２２０７に進む。手順２２０７では、一時バッファ（ＦＢ）に記憶されているレングス情報（ＦＢ）をデータ情報混合部１０３３に対して転送する。手順２２０８では、レングス情報分割部１０３１からのレングス情報の入力は終了していないため、手順２２０１に進む。
【００６５】
以下に、４サイクルめの動作を示す。手順２２０１では、一時バッファを初期化してなにも格納されていない状態にする。手順２２０２では、レングス情報分割部１０３１からレングス情報（００・リピート）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（００・リピート）。手順２２０３では、レングス情報分割部１０３１からの区切り信号の入力がなく、かつ、レングス情報の入力は終了していないため、手順２２０２に進む。手順２２０２では、レングス情報分割部１０３１からレングス情報（０４）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（００・リピート，０４）。手順２２０３では、レングス情報分割部１０３１からの区切り信号が入力されるため、手順２２０５に進む。手順２２０５では、一時バッファ（００・リピート，０４）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在している（００・リピート，０４）ため、手順２２０６に進む。手順２２０６では、２つ隣り合っている繰り返し回数１のレングス情報（００・リピート，０４）を結合して、別の新しい１つのレングス情報（０５・リピート）に変換する。ここで、元の１つめのレングス情報（００・リピート）にリピート属性が付加されているため、新しい１つのレングス情報（０５・リピート）にもリピート属性を付加している。そして、一時バッファを更新して（０５・リピート）とし、手順２２０５に進む。手順２２０５では、一時バッファ（０５・リピート）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在していないため、手順２２０７に進む。手順２２０７では、一時バッファ（０５・リピート）に記憶されているレングス情報（０５・リピート）をデータ情報混合部１０３３に対して転送する。このとき、レングス情報（０５・リピート）にはリピート属性が付加されており、転送時にもリピート属性を付加したまま転送する。手順２２０８では、レングス情報分割部１０３１からのレングス情報の入力は終了していないため、手順２２０１に進む。
【００６６】
以下に、５サイクルめの動作を示す。手順２２０１では、一時バッファを初期化してなにも格納されていない状態にする。手順２２０２では、レングス情報分割部１０３１からレングス情報（００）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（００）。手順２２０３では、レングス情報分割部１０３１からの区切り信号の入力がなく、かつ、レングス情報の入力は終了していないため、手順２２０２に進む。
【００６７】
手順２２０２では、レングス情報分割部１０３１からレングス情報（ＦＣ）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（００，ＦＣ）。手順２２０３では、レングス情報分割部１０３１からの区切り信号が入力されるため、手順２２０５に進む。手順２２０５では、一時バッファ（００，ＦＣ）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在していないため、手順２２０７に進む。手順２２０７では、一時バッファ（００，ＦＣ）に記憶されているレングス情報（００，ＦＣ）をデータ情報混合部１０３３に対して転送する。手順２２０８では、レングス情報分割部１０３１からのレングス情報の入力は終了していないため、手順２２０１に進む。
【００６８】
以下に、６サイクルめの動作を示す。手順２２０１では、一時バッファを初期化してなにも格納されていない状態にする。手順２２０２では、レングス情報分割部１０３１からレングス情報（ＦＦ・リピート）を１バイト受信する。手順２２０３では、レングス情報を一時バッファに格納する（ＦＦ・リピート）。手順２２０３では、レングス情報の入力は終了したため、手順２２０５に進む。手順２２０５では、一時バッファ（ＦＦ・リピート）に記憶されているレングス情報を先頭から調べると、繰り返し回数１のレングス情報が２つ隣り合った位置に連続して存在していないため、手順２２０７に進む。手順２２０７では、一時バッファ（ＦＦ・リピート）に記憶されているレングス情報（ＦＦ・リピート）をデータ情報混合部１０３３に対して転送する。このとき、レングス情報（ＦＦ・リピート）にはリピート属性が付加されており、転送時にもリピート属性を付加したまま転送する。手順２２０８では、レングス情報分割部１０３１からのレングス情報の入力は終了したため、処理を終了する。
【００６９】
以上に示したように、レングス情報結合部１０３２はデータ情報混合部１０３３に対して以下のようにレングス情報を転送する。
１サイクルめ：０５
２サイクルめ：ＦＦ・リピート，０３
３サイクルめ：ＦＢ
４サイクルめ：０５・リピート
５サイクルめ：００，ＦＣ
６サイクルめ：ＦＦ・リピート
データ情報混合部１０３３の動作を以下に説明する。以下に、１サイクルめの動作を示す。データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（０５）を受信して、符号データ出力部１０４に対して出力する（０５）。データ情報混合部１０３３は、受信したレングス情報（０５）のバイト数情報（６）を読み取り、バイト数情報（６）の数だけデータ情報バッファ１０２３からデータ情報（０１，０２，０３，０４，０５，０６）を受信して、符号データ出力部１０４に対して出力する（０１，０２，０３，０４，０５，０６）。
【００７０】
以下に、２サイクルめの動作を示す。データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（ＦＦ・リピート）を受信して、符号データ出力部１０４に対して出力する（ＦＦ）。データ情報混合部１０３３は、受信したレングス情報（ＦＦ・リピート）のバイト数情報（１）を読み取るが、レングス情報にはリピート属性が付加されているため、直前に転送したデータ情報の最後の１バイト（０６）を再利用して残りのバイト数分（０）のデータ情報のみをデータ情報バッファ１０２３からデータ情報（なし）を受信して結合し、符号データ出力部１０４に対して出力する（０６）。さらに、データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（０３）を受信して、符号データ出力部１０４に対して出力する（０３）。データ情報混合部１０３３は、受信したレングス情報（０３）のバイト数情報（４）を読み取り、バイト数情報（４）の数だけデータ情報バッファ１０２３からデータ情報（０７，０８，０９，０Ａ）を受信して、符号データ出力部１０４に対して出力する（０７，０８，０９，０Ａ）。
【００７１】
以下に、３サイクルめの動作を示す。データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（ＦＢ）を受信して、符号データ出力部１０４に対して出力する（ＦＢ）。データ情報混合部１０３３は、受信したレングス情報（ＦＢ）のバイト数情報（１）を読み取り、バイト数情報（１）の数だけデータ情報バッファ１０２３からデータ情報（０Ｂ）を受信して、符号データ出力部１０４に対して出力する（０Ｂ）。
【００７２】
以下に、４サイクルめの動作を示す。データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（０５・リピート）を受信して、符号データ出力部１０４に対して出力する（０５）。データ情報混合部１０３３は、受信したレングス情報（０５・リピート）のバイト数情報（６）を読み取るが、レングス情報にはリピート属性が付加されているため、直前に転送したデータ情報の最後の１バイト（０Ｂ）を再利用して残りのバイト数分（５）のデータ情報のみをデータ情報バッファ１０２３からデータ情報（０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０）を受信して結合し、符号データ出力部１０４に対して出力する（０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０）。
【００７３】
以下に、５サイクルめの動作を示す。データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（００）を受信して、符号データ出力部１０４に対して出力する（００）。データ情報混合部１０３３は、受信したレングス情報（００）のバイト数情報（１）を読み取り、バイト数情報（１）の数だけデータ情報バッファ１０２３からデータ情報（１１）を受信して、符号データ出力部１０４に対して出力する（１１）。さらに、データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（ＦＣ）を受信して、符号データ出力部１０４に対して出力する（ＦＣ）。データ情報混合部１０３３は、受信したレングス情報（ＦＣ）のバイト数情報（１）を読み取り、バイト数情報（１）の数だけデータ情報バッファ１０２３からデータ情報（１２）を受信して、符号データ出力部１０４に対して出力する（１２）。
【００７４】
以下に、６サイクルめの動作を示す。データ情報混合部１０３３は、レングス情報結合部１０３２からレングス情報（ＦＦ・リピート）を受信して、符号データ出力部１０４に対して出力する（ＦＦ）。データ情報混合部１０３３は、受信したレングス情報（ＦＦ・リピート）のバイト数情報（１）を読み取るが、レングス情報にはリピート属性が付加されているため、直前に転送したデータ情報の最後の１バイト（１２）を再利用して残りのバイト数分（０）のデータ情報のみをデータ情報バッファ１０２３からデータ情報（なし）を受信して結合し、符号データ出力部１０４に対して出力する（１２）。
【００７５】
以上に示したように、データ情報混合部１０３３は符号データ出力部１０４に対して以下のように符号データを転送する。
１サイクルめ：０５，０１，０２，０３，０４，０５，０６
２サイクルめ：ＦＦ，０６，０３，０７，０８，０９，０Ａ
３サイクルめ：ＦＢ，０Ｂ
４サイクルめ：０５，０Ｂ，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０
５サイクルめ：００，１１，ＦＣ，１２
６サイクルめ：ＦＦ，１２
以上で、レングス情報抽出部１０２および符号データ変換部１０３の詳細な動作手順についての説明を終了する。ここで、本実施例においてはスループット６を一例として説明したが、同様に他のスループットに対しても本発明は適用可能である。
【００７６】
（実施例２）
（特徴４）上記特徴１のデータ変換装置で、さらに、入力されるデータを符号化して複数の単位符号の並びである符号データを出力する符号化手段と、符号データを記憶する記憶手段とを備え、前記符号化手段の出力する符号データが前記入力手段に入力され、前記変換手段の出力する変換後の符号データが前記記憶手段に記憶されること。
【００７７】
以下、上記特徴４におけるデータ変換装置の一実施の形態を図面に基づき説明する。
【００７８】
図２６は、本実施の形態に係るデータ変換装置（以下、データ変換装置２）の内部構成を示すブロック図である。１０１は符号データ入力部で、１０２はレングス情報抽出部で、１０３は符号データ変換部で、１０４は符号データ出力部で、２０１は符号化部で、２０２は記憶部である。符号データ入力部１０１、レングス情報抽出部１０２、符号データ変換部１０３、符号データ出力部１０４は、実施例１におけるデータ変換装置１における各処理部と同じであるため、説明を省略する。符号化部２０１は符号データ入力部１０１と接続されており、受信したデータを図２に示した仕様表に適合するようにランレングス符号により符号化し、符号データ入力部１０１に対して転送する。記憶部２０２は符号データ出力部１０４と接続されており、符号データ出力部１０４から受信した符号データを内部に記憶する。記憶した符号データは、出力要求に応じて出力することができる。
【００７９】
以上の構成において、データ変換装置２の動作を、図５に示すデータを例に説明する。
【００８０】
符号化部２０１は、図５のデータを受信すると、受信したデータを先頭から順番に符号化して符号データ入力部１０１に対して出力する。符号化部２０１は、同じ値を持つバイトが２つ以上連続しない限り、なるべく多くのバイト数情報を持つ単位符号となるように符号化する。図５においては、ｄ０からｄ４の５バイトは同じ値を持つバイトが２つ以上連続していないので、この５バイトを単位符号（０４，０１，０２，０３，０４，０５）に符号化する。また、符号化部２０１は、同じ値を持つバイトが２つ以上連続する場合は、なるべく多くの繰り返し回数を持つ単位符号になるように符号化を行う。図５においては、ｄ５からｄ７の３バイトが同じ値０６を持つので、この３バイトを単位符号（ＦＥ，０６）に符号化する。同様に、符号化部２０１は、ｄ８からｄ１１の４バイトは同じ値を持つバイトが２つ以上連続していないので、この４バイトを単位符号（０３，０７，０８，０９，０Ａ）に符号化する。また、符号化部２０１は、ｄ１２からｄ１８の７バイトが同じ値０Ｂを持つので、この７バイトを単位符号（ＦＡ，０Ｂ）に符号化する。また、符号化部２０１は、ｄ１９からｄ２４の６バイトは同じ値を持つバイトが２つ以上連続していないので、この５バイトを単位符号（０５，０Ｃ，０Ｄ，０Ｅ，０Ｆ，１０，１１）に符号化する。また、符号化部２０１は、ｄ２５からｄ３１の７バイトが同じ値１２を持つので、この７バイトを単位符号（ＦＡ，１２）に符号化する。したがって、符号化部２０１の出力は、図３で示した符号データとなる。符号データ入力部１０１の動作で、図３で示した符号データの例は、実施例１で説明しているため省略する。同様に、続くレングス情報抽出部１０２、符号データ変換部１０３、および、符号データ出力部１０４の動作についての説明も実施例１に記載したため省略する。記憶部２０２に転送される符号データは、図２５で示した符号データとなる。記憶部２０２は、この符号データを内部に記憶し、出力要求に応じて出力することが可能である。
【００８１】
以上、示したように、データ変換装置２は、任意のデータ入力から、図２４で示したパターンだけを考慮して復号化することができる符号データを生成することができる。また、その符号データを記憶して、要求に応じて出力することができる。これにより、データ変換装置２から出力される符号データを復号化する復号化装置は、任意の符号データを復号化する復号装置と比較して回路規模が小さく、処理遅延時間が小さく、かつ、低コストで実現することが可能である。
【００８２】
（実施例３）
（特徴５）上記特徴１のデータ変換装置で、さらに、符号データを記憶する記憶手段と、入力される符号データを復号化する復号化手段とを備え、前記記憶手段によって記憶されている符号データが前記入力手段に入力され、前記変換手段の出力する変換後の符号データが前記復号化手段により復号化されること。
【００８３】
以下、上記５におけるデータ変換装置の一実施の形態を図面に基づき説明する。図２７は、本実施の形態に係るデータ変換装置（以下、データ変換装置３）の内部構成を示すブロック図である。１０１は符号データ入力部で、１０２はレングス情報抽出部で、１０３は符号データ変換部で、１０４は符号データ出力部で、３０１は記憶部で、３０２は復号化部である。記憶部３０１は符号データ出力部１０４と接続されており、入力された符号データを内部に記憶し、記憶した符号データを符号データ入力部１０１に転送する。
【００８４】
符号データ入力部１０１、レングス情報抽出部１０２、符号データ変換部１０３、符号データ出力部１０４は、実施例１におけるデータ変換装置１における各処理部と同じであるため、説明を省略する。復号化部３０２は符号データ出力部１０４と接続されており、符号データ出力部１０４が出力する符号データを受信し、受信したデータを図２に示した仕様表に適合するようにランレングス符号により復号化して出力する。復号化部３０２は、スループット６となるように構成されている。内部構成および動作手順は、特許文献１に示されているスループット４の復号化をパターン数を変更することでスループット６に拡張したものであるため、詳細説明は省略する。ただし、復号化部３０２が復号化できる符号データは、任意の符号データではなく、パターン数が限定されたものである。具体的には、図８で示した２３９パターンすべてではなく、図２４で示した３３パターンのみを復号化するように構成している。そのため、回路規模と遅延時間が小さくできる。
【００８５】
図２８は、図２５で示した符号データを復号化部３０２が復号化して出力するデータのタイミングチャートである。以上の構成において、データ変換装置３の動作を、図３に示すデータを例に説明する。  記憶部３０１に、図３で示す符号データが転送されてくると、記憶部３０１はこの符号データを内部に記憶す。記憶部３０１は、内部に記憶されている符号データを読み出して、符号データ入力部１０１に対して転送する。したがって、記憶部３０１の出力は、図３で示した符号データとなる。符号データ入力部１０１の動作で、図３で示した符号データの例は、実施例１で説明しているため省略する。同様に、続くレングス情報抽出部１０２、符号データ変換部１０３、および、符号データ出力部１０４の動作についての説明も実施例１に記載したため省略する。復号化部３０２に転送される符号データは、図２５で示した符号データとなる。復号化部３０２は、この符号データを復号化して、スループット６で出力する。出力されるデータは図２８のタイミングチャートで示すように、クロックに同期して１サイクルあたり６バイトが転送される。
【００８６】
以上、示したように、データ変換装置３は、任意の符号データ入力から、スループット６で復号化したデータを出力することができる。また、復号化を行う復号化部３０２は、任意の符号データを復号化する復号装置と比較して回路規模が小さく、処理遅延時間が小さく、かつ、低コストで実現することが可能である。
【符号の説明】
【００８７】
１０１  符号データ入力部
１０２  レングス情報抽出部
１０３  符号データ変換部
１０４  符号データ出力部
【図１】
2011055422.tif 000003
【図２】
2011055422.tif 000004
【図３】
2011055422.tif 000005
【図４】
2011055422.tif 000006
【図５】
2011055422.tif 000007
【図６】
2011055422.tif 000008
【図７】
2011055422.tif 000009
【図８】
2011055422.tif 000010
【図９】
2011055422.tif 000011
【図１０】
2011055422.tif 000012
【図１１】
2011055422.tif 000013
【図１２】
2011055422.tif 000014
【図１３】
2011055422.tif 000015
【図１４】
2011055422.tif 000016
【図１５】
2011055422.tif 000017
【図１６】
2011055422.tif 000018
【図１７】
2011055422.tif 000019
【図１８】
2011055422.tif 000020
【図１９】
2011055422.tif 000021
【図２０】
2011055422.tif 000022
【図２１】
2011055422.tif 000023
【図２２】
2011055422.tif 000024
【図２３】
2011055422.tif 000025
【図２４】
2011055422.tif 000026
【図２５】
2011055422.tif 000027
【図２６】
2011055422.tif 000028
【図２７】
2011055422.tif 000029
【図２８】
2011055422.tif 000030