(57)【要約】【課題】本発明はメモリに記憶された圧縮データに関する圧縮情報を参照し、圧縮データを効率よく復元することによって、圧縮データの伸長処理を高速に行うことができるデータ伸長装置を提供するものである。【解決手段】画像データ等の圧縮データを伸長するデータ伸長装置であって、圧縮データ及び該圧縮データの圧縮情報を記憶する第１の記憶手段と、該第１の記憶手段に記憶された上記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データの連続を検出する検出手段と、該検出手段によって検出した連続する非圧縮データをまとめて記憶する第２の記憶手段と、該第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う出力手段とを有することを特徴とする。【選択図】  図１
2010147671.tif 000002
【特許請求の範囲】
【請求項１】
圧縮データ及び該圧縮データの圧縮情報を記憶する第１の記憶手段と、
該第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データの連続を検出する検出手段と、
該検出手段によって検出した連続する非圧縮データをまとめて記憶する第２の記憶手段と、
該第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う出力手段と、
を有することを特徴とするデータ伸長装置。
【請求項２】
圧縮データ及び該圧縮データの圧縮情報を記憶する第１の記憶手段と、
前記第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データと該非圧縮データに続く該非圧縮データと同じデータの連続を検出する検出手段と、
該検出手段によって検出した連続する非圧縮データをまとめて記憶する第２の記憶手段と、
該第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う出力手段と、
を有することを特徴とするデータ伸長装置。
【請求項３】
前記圧縮データの圧縮情報は、フラグデータとして前記第１の記憶手段に記憶されることを特徴とする請求項１、又は２に記載のデータ伸長装置。
【請求項４】
前記圧縮データは、前記圧縮情報に連続して前記第１の記憶手段に記憶されることを特徴とする請求項１、２、又は３に記載のデータ伸長装置。
【請求項５】
圧縮データ及び該圧縮データの圧縮情報を第１の記憶手段に記憶する処理と、
前記第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データの連続を検出する処理と、
該処理によって検出した連続する非圧縮データをまとめて第２の記憶手段に記憶する処理と、
前記第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う処理と、
をコンピュータに実行させるプログラム。
【請求項６】
圧縮データ及び該圧縮データの圧縮情報を第１の記憶手段に記憶する処理と、
前記第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データと該非圧縮データに続く該非圧縮データと同じデータの連続を検出する処理と、
該処理によって検出した連続する非圧縮データをまとめて第２の記憶手段に記憶する処理と、
前記第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像データを圧縮してメモリに記憶し、該メモリから圧縮データを読み出し、伸長処理を行うデータ伸長装置に関する。
【背景技術】
【０００２】
例えば、プリンタ装置等の印刷装置において、メモリを有効利用するため、画像データに対して圧縮処理を行い、メモリに圧縮データを記憶した後、メモリからデータを読み出し、伸長処理を行うデータ伸長装置が使用されている。このデータの伸長処理を行う際、どのような圧縮形式であるか、また圧縮データであるか、又は非圧縮データであるかを、データを圧縮した単位、例えば１バイト単位で判断し、メモリから読み出したデータ順序に従って伸長処理を行っている。
【０００３】
尚、圧縮データを復元する方法として、特許文献１も提案されている。
【特許文献１】特開２００６−２６８２５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のデータ伸長処理（復元処理）において、処理速度を向上させるためには、伸長回路の構成を変更する必要がある。例えば、配線の引き回しを考慮し、また制御回路を搭載したＡＳＩＣのプロセスを変更する等の高速化対応が必要となる。さらに、伸長回路の変更を行った場合、消費電力が増加する。
【０００５】
そこで、本発明はメモリに記憶された圧縮データに関する圧縮情報を参照し、圧縮データを効率よく復元することによって、消費電力を増加させることなく、圧縮データの伸長処理を高速で行うデータ伸長装置を提供するものである。
【課題を解決するための手段】
【０００６】
上記課題は第１の発明によれば、圧縮データ及び該圧縮データの圧縮情報を記憶する第１の記憶手段と、該第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データの連続を検出する検出手段と、該検出手段によって検出した連続する非圧縮データをまとめて記憶する第２の記憶手段と、該第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う出力手段とを有するデータ伸長装置を提供することによって達成できる。
【０００７】
また、上記課題は第２の発明によれば、圧縮データ及び該圧縮データの圧縮情報を記憶する第１の記憶手段と、前記第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データと該非圧縮データに続く該非圧縮データと同じデータの連続を検出する検出手段と、該検出手段によって検出した連続する非圧縮データをまとめて記憶する第２の記憶手段と、該第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う出力手段とを有するデータ伸長装置を提供することによって達成できる。
【０００８】
また、上記課題は第３の発明によれば、前記圧縮データの圧縮情報は、フラグデータとして前記第１の記憶手段に記憶されるデータ伸長装置を提供することによって達成できる。
【０００９】
また、上記課題は第４の発明によれば、前記圧縮データは、前記圧縮情報に連続して前記第１の記憶手段に記憶されるデータ伸長装置を提供することによって達成できる。
【００１０】
また、上記課題は第５の発明によれば、圧縮データ及び該圧縮データの圧縮情報を第１の記憶手段に記憶する処理と、前記第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データの連続を検出する処理と、該処理によって検出した連続する非圧縮データをまとめて第２の記憶手段に記憶する処理と、前記第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う処理とをコンピュータに実行させるプログラムを提供することによって達成できる。
【００１１】
さらに、上記課題は第６の発明によれば、圧縮データ及び該圧縮データの圧縮情報を第１の記憶手段に記憶する処理と、前記第１の記憶手段に記憶された前記圧縮情報を参照し、該圧縮情報に基づいて非圧縮データと該非圧縮データに続く該非圧縮データと同じデータの連続を検出する処理と、該処理によって検出した連続する非圧縮データをまとめて第２の記憶手段に記憶する処理と、前記第２の記憶手段に記憶されたデータを読み出し、伸長データの出力を行う処理とをコンピュータに実行させるプログラムを提供することによって達成できる。
【発明の効果】
【００１２】
本発明によれば、連続する非圧縮データをまとめて復元することができ、また直前の非圧縮データと同じデータの連続という並びを検出した際、この非圧縮データを含めて連続データとして、まとめて伸長することができ、データの復元速度を高速化することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態を図面に基づいて説明する。
図１は、本実施形態のデータ伸長回路のブロック図である。尚、本例のデータ伸長回路は、ＰＣＩバスを介してＣＰＵ２に接続され、更にＣＰＵ２はメモリ３に接続されている。メモリ３には、例えば圧縮された画像データが記憶されており、ＣＰＵ２はメモリコントローラとして機能し、メモリ３から画像データを読み出し、データ伸長回路に送信する。
【００１４】
データ伸長回路１は大きく４つの回路ブロックに分かれており、前段ＦＩＦＯ（First-In First-Out）４とデータセレクタ５、参照テーブル６が接続された伸長回路７、データ生成バッファ８、及び後段ＦＩＦＯ９で構成されている。
前段ＦＩＦＯ４は、ＣＰＵ２の制御によってメモリ３から読み出された画像データを一時的に保持するバッファであり、メモリ３から読み出された伸長すべき圧縮データが格納される。
【００１５】
図２は、上記前段ＦＩＦＯ４とデータセレクタ５の回路構成を示す図である。前段ＦＩＦＯ４は伸長入力ＦＩＦＯコントローラ１３の制御に従ってデータを取り込む。尚、前段ＦＩＦＯ４の入力ビット幅と出力ビット幅は同じである必要はなく、本例の場合前段ＦＩＦＯ４の入力は、前段ＦＩＦＯ４が接続されたバス幅、即ち３２ｂｉｔ幅のＰＣＩバスに対応し、３２ｂｉｔ幅のデータを取得する。一方、前段ＦＩＦＯ４の出力は伸長回路７が要求するデータ幅、例えば８バイト幅とするのが一般的である。しかし、本例では出力幅は８バイトではなく、９バイト分即ち７２ｂｉｔ幅であり、以後この９バイトで説明する。尚、この理由は、フラグ部分の１バイトと符号化されたデータ部分８バイトに対応させる構成である。すなわち、フラグ部と符号化されたデータ部を合わせたデータを一度に読み出し可能なデータ幅としている。
【００１６】
また、前段ＦＩＦＯ４に入力するデータは８ｂｉｔ単位で並んでおり、フラグ１バイトとそれに続く符号化されたデータ８バイトを図３に示すように順次選択して、７２ｂｉｔ幅のデータに変換する。
【００１７】
図４は伸長回路７の回路構成であり、伸長回路７はデータセレクタ５から供給される符号化されたデータ（圧縮データ）を伸長（復元）する回路である。伸長回路７には、参照テーブル６に接続され、データセレクタ５から８ｂｉｔ構成のフラブデータ、及び圧縮データ「１」〜「８」が入力する。尚、圧縮データ「１」〜「８」の圧縮形式は、非圧縮タイプ、直前データの連続を示すリピートタイプ、及び数バイト前と同一データの並びを示すポインタタイプの３種類である。
【００１８】
非圧縮タイプとは上記参照テーブル６に参照すべきデータが存在しないデータであり、符号化される前と同じデータである。また、リピートタイプとは最後にテーブルに保管されたデータを連続して参照するデータであり、同じデータが何回くり返されているかの情報を符号化したデータである。さらに、ポインタタイプとはテーブルの特定箇所から数バイト分の同一データが存在するものであり、上記特定箇所と同一データ数を示す情報を符号化したデータである。
【００１９】
図５は伸長回路７に入力する圧縮データのデータ構成を示す図である。同図（ａ）は、圧縮データの具体的な構成を示す図である。最初の１バイトはフラグデータであり、フラグデータの後に８個の圧縮データ（及び非圧縮データ）が記録されている。フラグデータは同図（ｂ）に示すように、１バイト８ビットのデータであり、データ“０”が非圧縮データを示し、データ“１”が圧縮データを示す。
【００２０】
例えば、最初のフラグデータ（＃１）がフラグ“０”である場合、８個の圧縮データ（及び非圧縮データ）の最初の（＃１）のデータは、１バイト（８ビット）の非圧縮データである。同図（ｃ）に示すデータ構成は、この非圧縮データの例を示し、原データのまま記述される。
【００２１】
一方、最初のフラグデータ（＃１）がフラグ“１”である場合、８個の圧縮データ及び非圧縮データの最初の（＃１）のデータは、１バイト（８ビット）の圧縮データである。この場合、２種類のタイプがあり、圧縮データの上位２ビットが“１１”の場合前述のリピートタイプであり、上位２ビットが“１１”ではない場合ポインタタイプである。
【００２２】
ポインタタイプは、同図（ｄ）に示すように、上位５ビットが一致開始位置のデータを記録し、下位３ビットが一致文字列の長さデータを記録する。一方、リピートタイプの場合、同図（ｅ）に示すように、上位２ビットが“１１”であり、下位６ビットは同一データが連続する長さ情報である。
【００２３】
図６は、データ生成バッファ８の回路構成を示す図である。データ生成バッファ８は、Ｆ/Ｆ８ａ−１〜８ａ−８、４つのセレクタ１０ａ〜１０ｄ、データ生成バッファコントローラ１１、及びカウンタ１２で構成され、伸長回路７によって伸長されたデータをＦ/Ｆ８ａ−１〜８ａ−８に格納すると共に、データ生成バッファコントローラ１１の制御によって伸長されたデータを後段ＦＩＦＯ９に転送する。
【００２４】
図７は後段ＦＩＦＯ９の構成を示す図であり、バイト単位で書き込んだデータを、ワード単位で読み出す構成であり、デュアルポートメモリ１４ａ〜１４ｄ、ライトアドレスカウンタ１５ａ〜１５ｄ、リードアドレスカウンタ１６、及び比較器１７で構成されている。尚、上記それぞれの回路の処理動作については後述する。
【００２５】
以上の構成において、以下に本例の処理動作を説明する。
先ず、メモリ３から読み出した圧縮データを前段ＦＩＦＯ４に入力する。伸長入力ＦＩＦＯコントローラ１３は、３２ｂｉｔ単位で入力する圧縮データの入力制御を行い、伸長入力ＦＩＦＯコントローラ１３からのライト信号（ＷＲ）の入力に従って３２ｂｉｔの圧縮データを前段ＦＩＦＯ４に入力し、リード信号（ＲＤ）の入力に従って８ｂｉｔ×４（４バイト）のデータをデータセレクタ５を構成するセレクタ５−０〜５−８に出力する。
尚、上記圧縮データの入力処理は、後述するEmpty(エンプティ)の信号の入力に基づいて行われる。
【００２６】
図４は伸長入力ＦＩＦＯコントローラ１３から出力されるセレクト信号に従って各セレクタ５−０〜５−８に圧縮データが入力する際の入力論理を示す。伸長入力ＦＩＦＯコントローラ１３は３２ｂｉｔの圧縮データを入力する毎にカウントアップする不図示のカウンタを有し、同図に示す０〜８のリングカウントを行う。伸長入力ＦＩＦＯコントローラ１３は、上記カウント値に対応してセレクタ５ａ−０〜５ａ−８に順次セレクト信号を出力し、８ｂｉｔ（１バイト）のデータを対応するＦ/Ｆ（フリップフロップ）５ｂ−０〜５ｂ−８に転送する。
【００２７】
例えば、同図に示す０〜７ｂｉｔ（３２ｂｉｔの中の最初の８ｂｉｔ）のデータは、セレクタ５ａ−０を介してＦ/Ｆ５ｂ−０に入力し、８〜１５ｂｉｔ（３２ｂｉｔの中の次の８ｂｉｔ）のデータは、セレクタ５ａ−１を介してＦ/Ｆ５ｂ−１に入力し、以下１６〜２３ｂｉｔ（３２ｂｉｔの中の次の８ｂｉｔ）、及び２４〜３１ｂｉｔ（３２ｂｉｔの中の最後の８ｂｉｔ）のデータは、セレクタ５ａ−２、及び５ａ−３を介してＦ/Ｆ５ｂ−２、及び５ｂ−３に入力する（図３に示すａ）。
【００２８】
次に、メモリ３から供給された次の３２ｂｉｔのデータは、０〜７ｂｉｔ（３２ｂｉｔの中の最初の８ｂｉｔ）のデータが、セレクタ５ａ−４を介してＦ/Ｆ５ｂ−４に入力し、８〜１５ｂｉｔ（３２ｂｉｔの中の次の８ｂｉｔ）のデータが、セレクタ５ａ−５を介してＦ/Ｆ５ｂ−５に入力し、以下１６〜２３ｂｉｔ（３２ｂｉｔの中の次の８ｂｉｔ）、及び２４〜３１ｂｉｔ（３２ｂｉｔの中の最後の８ｂｉｔ）のデータが、セレクタ５ａ−６、及び５ａ−７を介してＦ/Ｆ５ｂ−６、及び５ｂ−７に入力する（図３に示すｂ）。
【００２９】
さらに、メモリ３から供給された次の３２ｂｉｔのデータは、０〜７ｂｉｔ（３２ｂｉｔの中の最初の８ｂｉｔ）のデータが、セレクタ５ａ−８を介してＦ/Ｆ５ｂ−８に入力し（図３に示すｃ）、７２ｂｉｔ（９バイト）のデータがＦ/Ｆ５ｂ−０〜Ｆ/Ｆ５ｂ−８に揃う。尚、図３に示すＦ/Ｆ５ｂ−０〜５ｂ−８内の「フラグ」、圧縮データ「１」〜「８」の意味は、最初の上記処理によってＦ/Ｆ５ｂ−０〜５ｂ−８に保持されるデータを示す。尚、以後Ｆ/Ｆ５ｂ−０〜５ｂ−８には、図３に示す論理に従ったデータが入力する。
【００３０】
次に、伸長回路７は上記Ｆ/Ｆ５ｂ−０〜５ｂ−８に入力したデータの伸長処理を行う。図８〜図１０は、伸長回路７の処理を説明するフローチャートである。先ず、図８に示すフローチャートに従って、Ｆ/Ｆ５ｂ−０〜５ｂ−８に９バイトのデータが保持されたか判断する（ステップ（以下、Ｓで示す）１）。ここで、Ｆ/Ｆ５ｂ−０〜５ｂ−８に９バイトのデータが保持されると（Ｓ１がＹＥＳ）、初期値（ｎ＝１）の設定を行う（Ｓ２、State01）。
【００３１】
次に、ｎ、ｎ＋１番目が非圧縮＋リピートタイプであるか判断する（Ｓ３）。すなわち、Ｆ/Ｆ５ｂ−０に保持された最初の１バイト（８ｂｉｔ）のデータであるフラグ情報を参照し、ｎとｎ＋１ビット目のデータを解析し、非圧縮＋リピートタイプのデータであるか判断する。最初の処理では、８ｂｉｔの中の１ビット目と２ビット目のデータが参照され、非圧縮＋リピートタイプのデータであるか判断する。
【００３２】
ここで、１ビット目と２ビット目のデータが非圧縮＋リピートタイプのデータであれば（Ｓ３がＹＥＳ）、後述する図９に示す処理に移行する。一方、１ビット目と２ビット目のデータが非圧縮＋リピートタイプのデータでなければ（Ｓ３がＮＯ）、ｎビット目（１ビット目）のデータ（フラグ）が圧縮を示しているか判断する（Ｓ４）。
【００３３】
ここで、１ビット目のデータ（フラグ）が圧縮を示していれば（Ｓ４がＹＥＳ）、後述する図１０に示す処理に移行する。一方、１ビット目のデータが圧縮を示していなければ（Ｓ４がＮＯ）、判断（Ｓ５）に移行する。すなわち、ｎビット目（１ビット目）が非圧縮データであることを示す場合、判断（Ｓ５）以降の処理を実行し、連続する非圧縮データを伸長回路７に読み出し、伸長処理を行う。
【００３４】
例えば、判断（Ｓ５）において、ｎ＋１ビット目（２ビット目）が圧縮データであることを示している場合（Ｓ５がＹＥＳ）、ｎバイト目（１バイト目）のデータをデータ生成バッファ８に書き込み、ｎをｎ＋１とする（Ｓ６、State02）。
【００３５】
すなわち、伸長回路７はＦ/Ｆ５ｂ−１から圧縮データ「１」を読み出し、データ生成バッファ８に圧縮データ「１」（但し、このデータは非圧縮データである）を書き込む。
【００３６】
一方、判断（Ｓ５）において、ｎ＋１ビット目（２ビット目）も非圧縮データであることを示している場合（Ｓ５がＮＯ）、更にｎ＋２ビット目（３ビット目）のデータが圧縮データであるか判断し（Ｓ７）、ｎ＋２ビット目（３ビット目）も圧縮データである場合（Ｓ７がＹＥＳ）、ｎ〜ｎ＋１バイト目（１、２バイト目）のデータをデータ生成バッファ８に書き込み、ｎをｎ＋２とする（Ｓ８、State03）。すなわち、伸長回路７はＦ/Ｆ５ｂ−１及び５ｂ−２から圧縮データ「１」、「２」を読み出し、データ生成バッファ８に圧縮データ「１」、「２」（但し、このデータも非圧縮データである）を書き込む。
【００３７】
さらに、判断（Ｓ７）において、ｎ＋２ビット目（３ビット目）も非圧縮データである場合（Ｓ７がＮＯ）、更にｎ＋３ビット目（４ビット目）のデータが圧縮データであるか判断し（Ｓ９）、ｎ＋３ビット目（４ビット目）も圧縮データである場合（Ｓ９がＹＥＳ）、ｎ〜ｎ＋２バイト目（１〜３バイト目）のデータをデータ生成バッファ８に書き込み、ｎをｎ＋４とする（Ｓ１０、State04）。すなわち、伸長回路７はＦ/Ｆ５ｂ−１乃至５ｂ−３から圧縮データ「１」〜「３」を読み出し、データ生成バッファ８に圧縮データ「１」〜「３」（但し、このデータも非圧縮データである）を書き込む。
【００３８】
以後同様の処理を行い、連続する非圧縮データをデータ生成バッファ８に書き込む（Ｓ１１〜Ｓ１８、State05〜08）。また、圧縮データ「１」〜「８」全てが非圧縮データである場合（Ｓ１７がＮＯ）、Ｆ/Ｆ５ｂ−１乃至５ｂ−８から圧縮データ「１」〜「８」を読み出し、データ生成バッファ８に圧縮データ「１」〜「８」を書き込む（Ｓ１９、State09）。尚、データ生成バッファ８に書き込まれる上記非圧縮データは、具体的には図６に示すＦ/Ｆ８ａ−１〜８ａ−８に書き込まれる。
このように処理することにより、連続する非圧縮データの伸長処理を迅速に行うことができる。
【００３９】
また、上記判断（Ｓ５、Ｓ７、・・Ｓ１７）において、各判断時点のｎ値が８、７、・・・２であるか判断し、一致する数値である場合、対応する処理（Ｓ６、Ｓ８、・・Ｓ１８）を実行する。この場合、一致する数値を越えて参照すべきデータ（フラグ）が存在しないためである。したがって、例えば判断（Ｓ５）において、ｎ＝８の場合、８バイト目の非圧縮データをデータ生成バッファ８（Ｆ/Ｆ８ａ−８）に書き込み、処理（Ｓ６）によってｎ＋１の処理が行われた後のｎ＝９を判断し（Ｓ２０）、処理（Ｓ３）に戻る。また、例えば判断（Ｓ７）において、ｎ＝７の場合７、８バイト目の非圧縮データをデータ生成バッファ８（Ｆ/Ｆ８ａ−７、８ａ−８）に書き込み、処理（Ｓ８）によってｎ＋２の処理が行われた後のｎ＝９を判断し（Ｓ２０）、処理（Ｓ３）に戻る。以下、同様に処理を行う。
【００４０】
一方、前述の判断（Ｓ４）において、ｎビット目（１ビット目）が圧縮を示していれば（Ｓ４がＹＥＳ）、図１０に示す処理に移行する。尚、図１０に示すフローチャートにおいて、Ｓ１〜Ｓ４の処理は前述の図８に示すフローチャートと同様の処理である。したがって、判断（Ｓ４）以降の処理について説明する。すなわち、判断（Ｓ４）において、ｎビット目（１ビット目）が圧縮を示していれば（Ｓ４がＹＥＳ）、ｎ番目の圧縮データの上位２ｂｉｔが“１１”であるか判断する（Ｓ２１）。ここで、上位２ｂｉｔが“１１”であれば（Ｓ２１がＹＥＳ）、リピートタイプの伸長処理を行う（Ｓ２２、State11）。
【００４１】
例えば、２番目の圧縮データの上位２ｂｉｔが“１１”であれば、直前の圧縮データ「１」を使用して伸長処理を行う。この場合、Ｆ/Ｆ５ｂ−１から圧縮データ「１」を読み出し、データ生成バッファ８（Ｆ/Ｆ８ａ−２）に圧縮データ「１」を書き込む。また、３番目の圧縮データの上位２ｂｉｔが“１１”であれば、直前の圧縮データ「２」のデータの伸長処理を繰り返し、Ｆ/Ｆ５ｂ−２から圧縮データ「２」を読み出し、データ生成バッファ８（Ｆ/Ｆ８ａ−３）に圧縮データ「２」を書き込む。以下、ｎの値に対応して、直前の圧縮データを繰り返しデータ生成バッファ８に書き込み、伸長データの作成処理を行う。
【００４２】
このように処理することによって、直前のデータと同じデータが繰り返す場合、効率よくデータの伸長処理を行うことができる。尚、上記リピートタイプの伸長処理を実行する毎にｎをｎ＋１し（Ｓ２４）、ｎ＝９の判断を行い（Ｓ２５）、ｎ＝９になるまで処理を繰り返す。
【００４３】
次に、フラグデータのｎビット目が圧縮を指示している場合でも（Ｓ４がＹＥＳ）、ｎ番目の圧縮データの上位２ｂｉｔが“１１”ではない場合（Ｓ２１がＮＯ）、ポインタタイプの伸長処理を行う（Ｓ２３、State12）。
【００４４】
例えば、ｎ番目の圧縮データの上位２ｂｉｔが“１０”である場合、該ｎ番目の下位５ビットのデータを参照し、上位５ビットのデータが指示する一致開始位置のデータを参照し、対応する一致開始位置から下位３ビットのデータが指示するバイト分のデータを伸長回路７に読み出し、データ生成バッファ８に書き込む。例えば、下位３ビットのデータが“０００”である場合、一致開始位置から２バイト分のデータをデータ生成バッファ８に書き込む。また、下位３ビットのデータが“１１１”である場合、一致開始位置から９バイト分のデータをデータ生成バッファ８に書き込む。
【００４５】
このように処理することによって、前の連続するデータと同じ連続するデータが繰り返す場合、効率よくデータの伸長処理を行うことができる。
【００４６】
次に、前述の判断（Ｓ３）において、ｎビット目とｎ＋１ビット目のデータが非圧縮＋リピートタイプのデータである場合（Ｓ３がＹＥＳ）について説明する。この場合、図９に示す処理に移行する。尚、図９に示すフローチャートにおいて、Ｓ１〜Ｓ３の処理は前述の図８に示すフローチャートと同様の処理である。したがって、判断（Ｓ３）以降の処理について説明する。すなわち、判断（Ｓ３）において、ｎ、ｎ＋１ビット目（例えば、１、２ビット目）が非圧縮＋リピートタイプのデータである場合、ｎ番目のデータを圧縮されたデータで示される連続回数＋１だけのバイト数をデータ生成バッファ８に書き込む（Ｓ２６）。
【００４７】
例えば、上記ｎ＝１の場合、１番目のデータを圧縮されたデータで示される連続回数（１回）だけデータ生成バッファ８（Ｆ/Ｆ８ｂ−２）に書き込む。また、例えばｎ＝２の場合、２番目のデータを圧縮されたデータで示される連続回数（１回）だけデータ生成バッファ８（Ｆ/Ｆ８ｂ−２）に書き込む（Ｓ２７、Ｓ２８がＮＯ）。上記処理をｎが９になるまで繰り返し実行する（State10、Ｓ２８がＹＥＳ）。
【００４８】
このように処理することにより、非圧縮データに続きリピートタイプのデータの伸長処理を効率よく行うことができる。
上記処理によってデータ生成バッファ８（Ｆ/Ｆ８ａ−１〜８ａ−８）には、伸長回路７によって伸長処理されたデータが入力し、以後セレクタ１０ａ〜１０ｄを介して伸長された画像データが後段ＦＩＦＯ９に送信される。
【００４９】
図１１は上記送信処理を説明するフローチャートであり、データ生成バッファコントローラ１１の処理を説明するものである。また、図１２はデータ生成バッファコントローラ１１の制御に従ったセレクタ１０ａ〜１０ｄの選択論理を説明する図である。
先ず、伸長回路７からのデータ書き込み指示を判断し（ステップ（以下、ＳＴで示す）１）、カウンタ１２の値と伸長回路７から読み出したデータのバイト数より、後段ＦＩＦＯ９へのデータをセレクトし、後段ＦＩＦＯ９にデータを書き込む（ＳＴ２）。この処理は、１回目のデータ転送であり、後段ＦＩＦＯ９に書き込むバイト数によって伸長入力ＦＩＦＯコントローラ１３は選択するセレクタ１０ａ〜１０ｄを決定する。
【００５０】
例えば、１回目に１バイトのデータのみを転送する場合、セレクタ１０ａが選択され、Ｆ/Ｆ８ａ−１からデータがデュアルポートメモリ１４ａに転送される（図１２に示すａ）。また、１回目に２バイトのデータを転送する場合、セレクタ１０ａ及び１０ｂが選択され、Ｆ/Ｆ８ａ−１及び８ａ−２からデータがデュアルポートメモリ１４ａ、１４ｂに転送される（図１２に示すｂ）。同様に、１回目に３バイトのデータを転送する場合、及び４バイトのデータを転送する場合についても、図１２に示すｃ及びｄに示す通りである。
【００５１】
次に、データを書き込むバイト数が“４”以下であるか判断する（ＳＴ３）。上記のように、１回目に４バイト以下のデータを転送する場合には（ＳＴ３がＹＥＳ）、カウンタ値を現在のカウンタ値＋伸長回路７から入力したバイト数とする（ＳＴ５）。例えば、上記図１２に示すａの場合、カウンタ１２のカウンタ値は“１”（０＋１）となる。また、同図に示すｂの場合、カウンタ値は“２” （０＋２）となり、同図に示すｃの場合、カウンタ値は“３” （０＋３）となり、同図に示すｄの場合、カウンタ値は“０”に戻る。
【００５２】
一方、前述の判断（ＳＴ３）において、データを書き込むバイト数が“４”以上である場合（ＳＴ３がＮＯ）、２回目のデータを転送するため、カウンタ１２の値と伸長回路７から読み出したデータのバイト数より、後段ＦＩＦＯ９へのデータをセレクトする（ＳＴ４）。
【００５３】
この場合、図１２に示すように、例えば２回目に１バイトのみのデータを転送する場合、セレクタ１０ａが選択され、Ｆ/Ｆ８ａ−１からデータがデュアルポートメモリ１４ａに１バイトのデータが転送される（図１１に示すｆ）。また、２回目に２バイトのデータを転送する場合、セレクタ１０ａ及び１０ｂが選択され、Ｆ/Ｆ８ａ−１及び８ａ−２からデータがデュアルポートメモリ１４ａ、１４ｂに転送される（図１１に示すｇ）。尚、１回目に３バイトのデータを転送する場合、及び４バイトのデータを転送する場合についても、同図にｈ及びｉで示す通りである。
【００５４】
尚、上記説明はカウンタ値が“０”の場合であるが、カウンタ値が“１”の場合については図１２のｊに示す通りであり、カウンタ値が“２”の場合については同図のｋに示す通りであり、カウンタ値が“３”の場合については同図のｌに示す通りである。
【００５５】
図１３は伸長回路７からデータを転送し、後段ＦＩＦＯ９にデータを書き込む際のタイムチャートである。尚、同図の例は、伸長回路７から読み出すバイト数を「１」バイト、「２」バイト、「３」バイト、「４」バイト、・・・とした場合の処理を示す。この場合、先ずカウンタ１２のカウント値は最初の「１」バイトのデータ転送によって“１”にカウントアップし、次の「２」バイトのデータ転送によって“３”にカウントアップし、更に次の「３」バイトのデータ転送によって“２”（３＋３−４）となる。
【００５６】
また、ライトアドレスカウンタ１５ａ〜１５ｄは対応するデュアルポートメモリ１４ａ〜１４ｄにデータが転送される毎にカウントアップし、例えば「３」バイトのデータが転送された時点では、ライトアドレスカウンタ１５ａのカウンタ値は“２”であり、ライトアドレスカウンタ１５ｂのカウンタ値も“２”であり、ライトアドレスカウンタ１５ｃのカウンタ値は“１”であり、ライトアドレスカウンタ１５ｂのカウンタ値も“１”である。
【００５７】
また、デュアルポートメモリ１４ａ〜１４ｄの全てにデータが転送されると、デュアルポートメモリ１４ａ〜１４ｄに入力されたデータは、例えば不図示のエンジン制御部に転送される。この時、ＲＤアドレスカウンタ１６は＋１される。
【００５８】
比較器１７はＷＲアドレスカウンタ１５ｄ及びＲＤアドレスカウンタ１６のカウント値を比較し、Full（フル）又はEmpty(エンプティ)の信号を出力する。Empty信号はＷＲアドレスカウンタ１５ｄのカウント値がＲＤアドレスカウンタ１６のカウント値に一致した時出力され、デュアルポートメモリ１４ａ〜１４ｄのデータが読み出され、デュアルポートメモリ１４ａ〜１４ｄが空であることをデータ生成バッファコントローラ１１及び伸長入力ＦＩＦＯコントローラ１３に通知する。一方、Full信号はＷＲアドレスカウンタ１５ｄのカウント値をプラス（＋）１した値がＲＤアドレスカウンタ１６のカウント値に一致した時出力され、全てのデュアルポートメモリ１４ａ〜１４ｄにデータが入力し、デュアルポートメモリ１４ａ〜１４ｄからのデータ読み出しを要求する際出力される。
【００５９】
以上のように処理することによって、非圧縮データが連続する場合、連続する非圧縮データをまとめて後段ＦＩＦＯ９に転送することができ、また非圧縮データに続くデータが直前の非圧縮データと同じである場合、同じ非圧縮データが続く回数分後段ＦＩＦＯ９に転送することによって、データ伸長処理を効率よく実行することができる。したがって、圧縮データの伸長処理をより高速に行うことができる。
また、伸長回路を変更する必要もなく、消費電力の増加を抑えることができる。
【００６０】
尚、図１３に示すフローチャートにおいては、伸長回路からのデータ読み出しを４バイト以下の場合について説明したが、実際には非圧縮データの連続や、同一データの連続は４バイトを越えることもある。その場合のタイムチャートとして、８バイトデータが連続する例を図１４に示す。
【００６１】
この場合、カウンタ１２のカウント値は“８”を繰り返し、ライトアドレスカウンタ１５ａ〜１５ｄは対応するデュアルポートメモリ１４ａ〜１４ｄに８バイト毎のデータが転送されるため、ライトアドレスカウンタ１５ａ〜１５ｄは全て同じカウント値を繰り返す。
【００６２】
図１５に示すタイムチャートは、更に後段ＦＩＦＯ９へのデータの書き込み速度のみを２倍にしたタイミングを示す。この場合、上記図１３及び図１４に示す例と比較すると、全体の処理速度が向上していることが分かる。すなわち、後段ＦＩＦＯ９へのデータ書き込み速度のみを向上させるだけで、全体のデータ転送速度を向上されることができ、これは回路の一部のみの高速対応なので、例えばＡＳＩＣ化した時などでも回路全体を高速化するよりも制約条件を緩和することができ、更に高速で動作する部分が絞られるため、消費電力への影響も最小限に抑えることが可能である。
【００６３】
尚、上記実施形態の説明では、前段ＦＩＦＯ４の出力幅を９バイト分、即ち７２ｂｉｔ幅としたが、前述のように、これはフラグ部を１バイトと符号化されたデータ８バイト分であるので、フラグと符号化されたデータ部を合わせたデータを一度にリード可能なデータ幅であれば何バイトでもよい。さらに、複数のフラグと複数の符号化されたデータ群としてもよい。
【００６４】
また、上記実施形態の説明では、入力や出力のデータバスが３２ｂｉｔ幅のＰＣＩバスに接続される構成としたが、どのようなアクセス形式のデータバスとしてもよい。
【図面の簡単な説明】
【００６５】
【図１】本実施形態の印刷装置のデータ伸長回路のブロック図である。
【図２】前段ＦＩＦＯとデータセレクタの回路構成を示す図である。
【図３】フラグ１バイトとそれに続く符号化されたデータ８バイトを順次セレクトするデータ変換例を説明する図である。
【図４】伸長回路を説明する回路ブロック図である。
【図５】圧縮データのデータフォーマットを説明する図である。
【図６】データ生成バッファの回路構成を示す図である。
【図７】後段ＦＩＦＯの構成を示す図である。
【図８】伸長処理を説明するフローチャートである。
【図９】伸長処理を説明するフローチャートである。
【図１０】伸長処理を説明するフローチャートである。
【図１１】データ生成バッファコントローラの処理を説明するフローチャートである。
【図１２】データ生成バッファコントローラの制御に従ってセレクタが選択するデータを説明する図である。
【図１３】伸長回路からデータを転送し、後段ＦＩＦＯにデータを書き込む際のタイムチャートである。
【図１４】伸長回路からデータを転送し、後段ＦＩＦＯに連続する８バイトのデータを書き込む際のタイムチャートである。
【図１５】後段ＦＩＦＯへのデータの書き込み速度のみを２倍にした場合のタイムチャートである。
【符号の説明】
【００６６】
１・・・データ伸長回路
２・・・ＣＰＵ
３・・・メモリ
４・・・前段ＦＩＦＯ
５・・・データセレクタ
５ａ−０〜５ａ−８・・セレクタ
５ｂ−０〜５ｂ−８・・Ｆ/Ｆ
７・・・伸長回路
８・・・データ生成バッファ
８ａ−０〜８ａ−８・・Ｆ/Ｆ
９・・・後段ＦＩＦＯ
１０ａ〜１０ｄ・・セレクタ
１１・・データ生成バッファコントローラ
１２・・カウンタ
１３・・伸長入力ＦＩＦＯコントローラ
１４ａ〜１４ｄ・・デュアルポートメモリ
１５ａ〜１５ｄ・・ライトアドレスカウンタ
１６・・リードアドレスカウンタ
１７・・比較器
【図１】
2010147671.tif 000003
【図２】
2010147671.tif 000004
【図３】
2010147671.tif 000005
【図４】
2010147671.tif 000006
【図６】
2010147671.tif 000007
【図７】
2010147671.tif 000008
【図８】
2010147671.tif 000009
【図９】
2010147671.tif 000010
【図１０】
2010147671.tif 000011
【図１１】
2010147671.tif 000012
【図１２】
2010147671.tif 000013
【図５】
2010147671.tif 000014
【図１３】
2010147671.tif 000015
【図１４】
2010147671.tif 000016
【図１５】
2010147671.tif 000017