(57)【特許請求の範囲】
【請求項１】
印字用紙に対応する画像データが書き込まれるフレームメモリにコンピュータから受信したコマンドに基づいて、画像データを描画する画像形成装置において、画像データをキャッシュメモリを介して前記フレームメモリに描画する描画処理と、前記キャッシュメモリを介さず直接前記フレームメモリに描画する描画処理とを備え、前記コンピュータから受信したコマンドが文字描画コマンドもしくは横線描画コマンドか否かを判別する判別手段と、該判別手段により受信したコマンドが前記文字描画コマンドもしくは前記横線描画コマンドであると判別された場合には、該コマンドに基づく前記フレームメモリに対する描画を前記キャッシュメモリを用いて行うことを特徴とする画像形成装置。
【請求項２】
印字用紙に対応する画像データが書き込まれるフレームメモリにコンピュータから受信したコマンドに基づいて、画像データを描画する画像形成装置において、
前記描画コマンドに応じて前記フレームメモリのロウアドレス及びカラムアドレスを順次更新しながら前記描画コマンドに応じた画像データを生成する処理手段と、
単一の前記ロウアドレスを格納する領域を有するロウアドレス格納手段と、
前記更新毎に前記カラムアドレスを格納する複数の領域を有するカラムアドレス格納手段と、
前記カラムアドレスの個数分の前記画像データの格納領域を有するデータ格納手段と、
前記処理手段が更新し格納された前記カラムアドレスが前記カラムアドレス格納手段の格納領域を越える時、または前記処理手段が異なるロウアドレスを前記ロウアドレス格納手段に書き込んだ時に、前記データ格納手段に格納されている画像データを前記フレームメモリの前記ロウアドレス格納手段及び前記カラムアドレス格納手段に格納されたアドレスで指定される領域に転送する転送手段とを備えるとともに、
前記データ格納手段は、画像データの格納の有無を示すフラグを格納するフラグ格納手段を備え、前記転送手段は、前記フラグが立っている格納領域のデータをフレームメモリに転送することを特徴とする画像形成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は画像形成装置に関し、特に、描画速度を高速化する場合に適用して好適なものである。
【０００２】
【従来の技術】
従来のプリンタには、フレームメモリのメモリ領域をＲＩＳＣプロセッサのデータキャッシュに割り当てることにより、描画速度を高速化したものがある。
【０００３】
【発明が解決しようとする課題】
しかしながら、従来のデータキャッシュの割り当て方法では、連続したメモリアドレスを順次アクセスしていく場合、すなわち、横線などを描画する場合には、データキャッシュが有効に働き、描画速度を高速化することができるが、不連続なメモリアドレスを順次アクセスしていく場合、すなわち、縦線や斜め線などを描画する場合には、描画速度が逆に遅くなってしまうという問題があった。
【０００４】
図２０は、フレームメモリのメモリ領域をデータキャッシュに割り当てて描画した場合と、フレームメモリのメモリ領域をデータキャッシュに割り当てないで描画した場合について、画像の種類別に描画時間を表した表である。図２０から明らかなように、横線や矩形（塗り潰し）の描画の場合は、フレームメモリのメモリ領域をデータキャッシュに割り当てて描画した方が描画速度が速くなるが、縦線や斜線などの描画の場合は、フレームメモリのメモリ領域をデータキャッシュに割り当てて描画すると、描画速度が逆に遅くなる。また、文字（横書き、縦書き）やイメージの描画の場合は、描画速度にほとんど差がない。
【０００５】
そこで、本発明の第１の目的は、キャッシュメモリを用いて描画を行った場合においても、画像の種類による描画速度の遅れの影響のない画像形成装置を提供することである。
【０００６】
そこで、本発明の第２の目的は、画像の種類に影響されることなく、描画速度を向上させることが可能な画像形成装置を提供することである。
【０００７】
【課題を解決するための手段】
上述した課題を解決するために、請求項１の発明によれば、印字用紙に対応する画像データが書き込まれるフレームメモリにコンピュータから受信したコマンドに基づいて、画像データを描画する画像形成装置において、画像データをキャッシュメモリを介して前記フレームメモリに描画する描画処理と、前記キャッシュメモリを介さず直接前記フレームメモリに描画する描画処理とを備え、前記コンピュータから受信したコマンドが文字描画コマンドもしくは横線描画コマンドか否かを判別する判別手段と、該判別手段により受信したコマンドが前記文字描画コマンドもしくは前記横線描画コマンドであると判別された場合には、該コマンドに基づく前記フレームメモリに対する描画を前記キャッシュメモリを用いて行うことを特徴とする画像形成装置を提供することにより達成される。
【０００８】
このことにより、キャッシュメモリを用いてフレームメモリへの描画を行うと、描画速度が速くなる横線描画の場合には、キャッシュメモリを用いてフレームメモリへの描画を行うことが可能となるとともに、キャッシュメモリを用いてフレームメモリへの描画を行うと、描画速度が逆に遅くなる縦線描画の場合には、キャッシュメモリを用いることなく、フレームメモリに対して描画を直接行うことが可能となり、画像の種類による描画速度の遅れを防止することが可能となる。
【０００９】
また、請求項２の発明によれば、印字用紙に対応する画像データが書き込まれるフレームメモリにコンピュータから受信したコマンドに基づいて、画像データを描画する画像形成装置において、前記描画コマンドに応じて前記フレームメモリのロウアドレス及びカラムアドレスを順次更新しながら前記描画コマンドに応じた画像データを生成する処理手段と、単一の前記ロウアドレスを格納する領域を有するロウアドレス格納手段と、前記更新毎に前記カラムアドレスを格納する複数の領域を有するカラムアドレス格納手段と、前記カラムアドレスの個数分の前記画像データの格納領域を有するデータ格納手段と、前記処理手段が更新し格納された前記カラムアドレスが前記カラムアドレス格納手段の格納領域を越える時、または前記処理手段が異なるロウアドレスを前記ロウアドレス格納手段に書き込んだ時に、前記データ格納手段に格納されている画像データを前記フレームメモリの前記ロウアドレス格納手段及び前記カラムアドレス格納手段に格納されたアドレスで指定される領域に転送する転送手段とを備えるとともに、前記データ格納手段は、画像データの格納の有無を示すフラグを格納するフラグ格納手段を備え、前記転送手段は、前記フラグが立っている格納領域のデータをフレームメモリに転送することを特徴とする画像形成装置を提供することにより達成される。
【００１０】
このことにより、横線を描画する場合などのように、アドレスが連続している場合においても、縦線や斜線を描画する場合などのように、アドレスが不連続な場合においても、データ格納手段を介してフレームメモリにデータを転送することが可能となり、横線を描画する場合と縦線や斜線を描画する場合とで、データ格納手段を使い分ける必要がなくなることから、横線と縦線や斜線とを区別するためのソフトウェアの負担をなくすことが可能となる。
【００１１】
また、ロウアドレスが異なるデータが入力された場合には、データが入力されるごとにそのデータをフレームメモリに転送することが可能となるとともに、ロウアドレスが一致するデータが入力された場合には、複数のデータを連続してフレームメモリに転送することが可能となり、描画の種類の判断を行うことなく、描画の種類に応じた最適な転送方法を選択してデータ転送を行うことが可能となることから、描画速度を向上させることが可能となる。
【００１２】
さらに、前記データ格納手段は、データの格納の有無を示すフラグを格納するフラグ格納手段を備え、前記転送手段は、前記ロウアドレス格納手段に異なるロウアドレスが書き込まれる時に、前記フラグが立っている格納領域のデータをフレームメモリに転送するようにしている。
【００１３】
このことにより、異なるロウアドレスがロウアドレス格納手段に書き込まれる時に、データ格納手段に実際にデータが格納されている領域を判別することが可能となり、データ格納手段に格納されている複数のデータをフレームメモリに連続して転送する際に、実際にデータが格納されている領域のデータのみについてフレームメモリへの転送動作を行い、データが格納されていない領域についての転送動作を省略することが可能となることから、転送時間を削減することが可能となる。
【００１４】
【発明の実施の形態】
以下、本発明の一実施例に係わる画像形成置について図面を参照しながら説明する。図１は、本発明の一実施例に係わる画像形成置のメモリ構成を示すブロック図である。図１において、ＲＩＳＣ（ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｅｒ）プロセッサなどのＣＰＵ１にはレジスタ２が設けられるとともに、メインメモリ５とのリード／ライトを高速化するための命令キャッシュ３及びデータキャッシュ４が設けられている。命令キャッシュ３を使うことで命令フェッチが高速化され、データキャッシュ４を使うことで変数（ソフトカウンタ、フラグなど）へのアクセスが高速化される。すなわち、命令キャッシュ３やデータキャッシュ４などのメモリは、ＤＲＡＭなどのメインメモリ５、またはハードディスクやＣＤ−ＲＯＭなどの周辺メモリ６に比べて、アクセス時間は速いがデータ容量は小さい。
【００１５】
命令キャッシュ３を使用して描画を行うと、メインメモリ５から読み出した命令は命令キャッシュ３に保存され、メインメモリ５の同一アドレスから次回に命令を読み出す際は、メインメモリ５からでなく、命令キャッシュ３から命令を読み出すことができるので、アクセスを高速化できる。
【００１６】
一方、データキャッシュ４を使用して描画を行う場合は、描画内容により、データキャッシュ４を使用した方が速い場合と、データキャッシュ４を使用しない方が速い場合とがある。このため、描画内容を描画コマンド別に分類し、この分類結果に基づいてデータキャッシュ４の使用と不使用とを使い分けることで、描画を高速化する。
【００１７】
以下、データキャッシュ４の使用と不使用とを使い分ける際の描画内容の分類方法について説明する。
図２は、本発明の一実施例に係わるフレームメモリのメモリアドレスの配列順序を示す図である。図２において、フレームメモリ上の各ビットは、印刷データの各ドットに対応し、印刷用紙の各ドットに対応する。
【００１８】
印刷用紙の左上がフレームメモリの先頭アドレスに対応し、印刷用紙の右方向へ１ライン分のデータが並び、これらのデータはフレームメモリのアドレス‘００００’〜‘０３７Ｆ’に対応している。次のアドレス‘０３８０’は、印刷用紙の２ライン目の先頭となり、フレームメモリのアドレス‘０３８０’〜‘０６ＦＦ’に対応して、印刷用紙の右方向へ２ライン目のデータが並んでいる。同様に、フレームメモリのアドレス‘０７００’〜‘０Ａ７Ｆ’に対応して、印刷用紙の３ライン目のデータが並び、フレームメモリのアドレス‘０Ａ８０’〜‘ＤＤＦＦ’に対応して、印刷用紙の４ライン目のデータが並んでいる。
【００１９】
１バイト中のビット（Ｄ０〜Ｄ７）の並び方は、エンディアンにより異なる。図２の例では、ビッグエンディアンの場合であり、ビットＤ７が先頭、ビットＤ０が最後になる。なお、リトルエンディアンではビットＤ０が先頭、ビットＤ７が最後になる。
【００２０】
今、用紙の先頭から１ライン分の横線を引く場合を考えてみる。用紙の先頭がフレームメモリの先頭に対応するものとすると、アドレス‘００００’、‘０００１’、‘０００２’、・・・、‘０３７Ｆ’の各ビットを“１”にすることが、用紙に横線を引くことに相当する。この場合、“１”に設定されている各ビットのアドレスがアドレス‘００００’から順次１づつ増加し、“１”に設定されている各ビットのアドレスが連続したものとなっている。
【００２１】
次に、用紙の左端に縦線を引く場合を考えてみる。用紙の先頭がフレームメモリの先頭に対応するものとすると、アドレス‘００００’のビットＤ７、アドレス‘０３８０’のビットＤ７、アドレス‘０７００’のビットＤ７、アドレス‘０Ａ８０’のビットＤ７、・・・の各ビットを“１”にすることが、用紙に縦線を引くことに相当する。この場合、“１”に設定されている各ビットのアドレスは飛び飛びになり、“１”に設定されている各ビットのアドレスは不連続になる。
【００２２】
横線を引く場合のように、“１”に設定されている各ビットのアドレスが連続していると、横線に対応する複数のデータを連続して転送することができるので、キャッシュが有効に働き、描画速度を高速化することができるが、縦線を引く場合のように、“１”に設定されている各ビットのアドレスが不連続の場合、キャッシュは有効に働かず、キャッシュを使用しないで描画した場合にくらべて、描画速度は逆に遅くなる。
【００２３】
次に、用紙に文字を印字する場合を考えてみる。この場合は、キャッシュを用いた方が描画速度が若干速くなるが、その差は少ない。これは文字の場合、文字フォント（ＲＯＭ）から文字コードに該当するデータを検索する時間が処理時間の大半を占め、この検索にかかる時間はキャッシュの使用または不使用と関連しないためである。
【００２４】
また、用紙にイメージを印字する場合を考えてみる。この場合は、キャッシュを用いても、キャッシュを用いなくても、描画速度の差はほとんどない。これはイメージの場合、データ転送にかかる時間の割合が大きく、描画は短い時間で済んでしまうことによる。データ転送時間は、パーソナルコンピュータやインターフェース（セントロインターフェース、ＬＡＮ（ローカルエリアネットワーク）、またはＳｉｏ）の送受信能力により左右されるが、インターフェースコントローラでの内部処理の方が数倍速い。このため、データ受信時間がボトルネックとなり、結局キャッシュの使用または不使用による描画速度の差はほとんど発生しない。
【００２５】
このように、キャッシュを使用して描画すると、キャッシュを使用しないで描画した場合に比べて、描画内容によって描画速度が速くなったり遅くなったりすることから、描画内容によってキャッシュの使用または不使用を使い分けることにより、描画速度を向上させる。
【００２６】
図３は、本発明の一実施例に係わるキャッシュを使用した場合のアドレス空間の構成を示す図である。図３において、ＤＲＡＭは物理アドレスの０x ００００００００〜０x １０００００００番地に割り付けられ、Ｉ／Ｏデバイスは物理アドレスの０x １０００００００〜０x ２０００００００番地に割り付けられている。また、キャッシュエリアが仮想アドレスの０x ８０００００００〜０x Ａ０００００００番地（ｋｓｅｇ０）に割り付けられ、非キャッシュエリアが仮想アドレスの０x Ａ０００００００〜０x Ｃ０００００００番地（ｋｓｅｇ１）に割り付けられている。
【００２７】
ＣＰＵがキャッシュを使ってＤＲＡＭにアクセスする場合、キャッシュの初期化を行った後、仮想アドレスの０x ８０００００００〜０x ９０００００００番地（キャッシュエリア）にアクセスする。この結果、ＤＲＡＭの物理アドレスにキャッシュを介してアクセスすることが可能となる。
【００２８】
ＣＰＵがキャッシュを使わないでＤＲＡＭをアクセスする場合、仮想アドレスの０x Ａ０００００００〜０x Ｂ０００００００番地（非キャッシュエリア）にアクセスする。この結果、ＤＲＡＭの物理アドレスに直接アクセスすることが可能となる。なお、ＣＰＵがＩ／Ｏデバイスにアクセスする場合、キャッシュを使わず、Ｉ／Ｏデバイスに直接アクセスするため、仮想アドレスの０x Ｂ０００００００〜０x Ｃ０００００００（非キャッシュエリア）にアクセスする。
【００２９】
図４は、本発明の一実施例に係わる描画方法を示すフローチャートである。図４において、パーソナルコンピュータからコマンドを受信し（ＳＴ１）、描画関係のコマンドかどうかをチェックする（ＳＴ２）。そして、環境設定関係（例えば、給紙装置選択）や印字位置設定（例えば、ＣＲ，ＬＦ）などのコマンドの場合は、それらの処理を行う。
【００３０】
一方、描画関係のコマンドの場合、縦線描画コマンドかどうかをチェックする（ＳＴ３）。そして、縦線描画コマンドの場合、縦線はデータキャッシュを使わない方が高速に描画できるので、フレームメモリの非キャッシュエリアへ縦線を描画する（ＳＴ４）。一方、縦線描画コマンドでない場合、斜線描画コマンドかどうかをチェックする（ＳＴ５）。斜線の場合も、データキャッシュを使わない方が高速に描画できるので、フレームメモリの非キャッシュエリアへ描画する（ＳＴ６）。
【００３１】
一方、斜線描画コマンドでない場合、横線描画コマンドかどうかをチェックする（ＳＴ７）。そして、横線描画コマンドの場合、横線はデータキャッシュを使った方が高速に描画できるので、フレームメモリのキャッシュエリアへ横線を描画する（ＳＴ８）。フレームメモリのキャッシュエリアへ横線を描画した後、データは未だキャッシュ内に残っている可能性があるので、データキャッシュの内容をメインメモリへフラッシュアウト（ライトバック）する（ＳＴ９）。
【００３２】
一方、横線描画コマンドでない場合、イメージ描画コマンドかどうかをチェックする（ＳＴ１０）。そして、イメージ描画コマンドの場合、イメージはデータキャッシュを使っても、データキャッシュを使わなくても描画速度は変わらないので、フレームメモリの非キャッシュエリアへイメージを描画する（ＳＴ１１）。
【００３３】
一方、イメージ描画コマンドでない場合、文字描画コマンドかどうかをチェックする（ＳＴ１２）。そして、文字描画コマンドの場合、文字はデータキャッシュを使った方が高速に描画できるので、フレームメモリのキャッシュエリアへ文字を描画する（ＳＴ１３）。キャッシュエリアへ文字を描画した後、データキャッシュの内容をメインメモリへフラッシュアウト（ライトバック）する（ＳＴ１４）。
【００３４】
なお、矩形（塗り潰し）は、横線描画を間隔なしで複数回行ったものであり、横線描画に含まれる。
図５は、本発明の一実施例に係わる描画方法の評価に用いた画像パターンを示す図である。図５（ａ）は塗り潰された矩形、図５（ｂ）は縦線、図５（ｃ）は塗り潰された矩形及び縦線の混在画像を示している。
【００３５】
図６は、フレームメモリをデータキャッシュに割り当てて描画した場合、フレームメモリをデータキャッシュに割り当てないで描画した場合及び図４の方法で描画した場合のそれぞれについて、図５の各画像パターンの描画時間（データ転送から描画完了までの時間）を示す表である。
【００３６】
図６において、図５（ａ）の塗り潰された矩形については、フレームメモリをデータキャッシュに割り当てて描画した場合の描画時間が２１．２秒、フレームメモリをデータキャッシュに割り当てないで描画した場合の描画時間が４４．６秒であるのに対し、図４の方法で描画した場合の描画時間が２１．０秒となる。また、図５（ｂ）の縦線については、フレームメモリをデータキャッシュに割り当てて描画した場合の描画時間が１３．８秒、フレームメモリをデータキャッシュに割り当てないで描画した場合の描画時間が７．５秒であるのに対し、図４の方法で描画した場合の描画時間が７．６秒となる。また、図５（ｃ）の混在画像については、フレームメモリをデータキャッシュに割り当てて描画した場合の描画時間が２３．６秒、フレームメモリをデータキャッシュに割り当てないで描画した場合の描画時間が２９．５秒であるのに対し、図４の方法で描画した場合の描画時間が１７．４秒となる。
【００３７】
このように、描画内容によってキャッシュの使用または不使用を使い分けることにより、キャッシュを常に使用して描画した場合や、キャッシュを常に使用しないで描画した場合に比べて、描画速度を向上させることが可能となる。
【００３８】
図７は、本発明の第１実施例に係わる画像形成装置の制御部の構成を示すブロック図である。なお、ＣＰＵ１１はＭｉｐｓ系のＶＲ５０００であるものとする。図７において、ＣＰＵ１１からＤＲＡＭ１３へのシングルリードアクセス要求があると、ＤＲＡＭコントローラ１２はＳＹＳＡＤとして出力されたアドレスをラッチ１４にラッチさせ、ＳＥＬ＋カウンタ１５でアドレスをセレクトして、ロウアドレスをＤＲＡＭ１３に出力し、／ＲＡＳをアクティブレベルにする。続いて、ＳＥＬ＋カウンタ１５でアドレスをセレクトして、カラムアドレスをＤＲＡＭ１３に出力し、／ＣＡＳをアクティブレベルにする。ＤＲＡＭ１３は、このアクセス動作により、ＳＤＡＴＡとしてデータを出力する。
【００３９】
次に、ＤＲＡＭコントローラ１２は、ＳＹＳａｄｅｎをイネーブルにして、ＤＲＡＭ１３から出力されたＳＤＡＴＡの内容をバッファ１８を介してＳＹＳＡＤとして出力させ、ＣＰＵ１１にデータを受け取ってもらうための信号／ＶａｌｉｄＩｎをアクティブにする。ＣＰＵ１１は、／ＶａｌｉｄＩｎがアクティブになると、ＳＹＳＡＤとして出力されたデータを受け取る。
【００４０】
ＣＰＵ１１からＤＲＡＭ１３へのブロックリードアクセス要求があると、ＤＲＡＭコントローラ１２は上記動作に加えて、／ＣＡＳをインアクティブにすると同時に、ＳＥＬ＋カウンタ１５でアドレスをアップし、／ＣＡＳを再度アクティブにすることを繰り返して、４回分のリードアクセスを連続して行う。
【００４１】
ＣＰＵ１１からＤＲＡＭ１３へのシングルライトアクセス要求があると、ＤＲＡＭコントローラ１２は、ＳＹＳＡＤとして出力されたアドレスをラッチ１４にラッチさせるとともに、ＳＹＳＡＤとして出力されたデータをラッチ１６にラッチさせる。そして、ＳＥＬ＋カウンタ１５でアドレスをセレクトして、ロウアドレスをＤＲＡＭ１３に出力し、／ＲＡＳをアクティブレベルにする。また同時に、／ＷＥ及びラッチ１６がラッチしたデータをＳＤＡＴＡとして出力するためのＳＤＡＴＡｅｎ０〜３をイネーブルにし、バッファ１７を介してＳＤＡＴＡとしてデータを出力する。続いて、ＳＥＬ＋カウンタ１５でアドレスをセレクトして、カラムアドレスをＤＲＡＭ１３に出力し、／ＣＡＳをアクティブにすることにより、ＳＤＡＴＡとして出力されたデータがＤＲＡＭ１３にライトされる。
【００４２】
ＣＰＵ１１からＤＲＡＭ１３へのブロックライトアクセス要求があると、ＤＲＡＭコントローラ１２は、ＳＹＳＡＤとして出力されたデータをラッチする時に、／Ｗｌｅｎ０〜３の４つを使用して、ラッチ１６に４つのデータを連続してラッチさせる。以下、ブロックリードと同様に、／ＣＡＳをインアクティブにする時に、ＳＥＬ＋カウンタ１５でアドレスをアップさせ、同時に、データのイネーブルを切り替えて、４回分のライトアクセスを連続して行う。
【００４３】
図８は、本発明の一実施例に係わるデータキャッシュを使用しない場合（フレームメモリをデータキャッシュに割り当てない場合）のＤＲＡＭのリード／ライト動作を示すタイムチャート図である。図８において、ＤＲＡＭコントローラ１２は、ＮＡＤＲＣＫＥＮをアクティブにし、ＳＹＳＡＤとして出力されたアドレスをラッチ１４にラッチさせる。また、／ＷＥをディセーブルにし、ラッチ１４にラッチされているアドレスのうち、ロウアドレスをＭＡとしてＤＲＡＭ１３に出力し、／ＲＡＳをアクティブレベルにする。次に、ラッチ１４にラッチされているアドレスのうち、カラムアドレスをＭＡとしてＤＲＡＭ１３に出力し、／ＣＡＳをアクティブにして、ＤＲＡＭ１３からデータをＳＤＡＴＡとして読み出す。そして、ＳＹＳａｄｅｎをアクティブにして、ＤＲＡＭ１３からＳＤＡＴＡとして読み出されたデータをバッファ１８を介してＳＹＳＡＤとして出力し、／ＶａｌｉｄＩｎをアクティブにして、ＳＹＳＡＤとして出力されたデータをＣＰＵ１１に取り込ませる。
【００４４】
次に、ＤＲＡＭコントローラ１２は、ｎＷｌｅｎをアクティブにして、ＣＰＵ１１からＳＹＳＡＤとして出力されたデータをラッチ１６にラッチさせる。次に、ＳＤＡＴＡｅｎをイネーブルにし、ラッチ１６にラッチされているデータをバッファ１８を介してＤＲＡＭ１３に出力する。また、ＮＡＤＲＣＫＥＮをアクティブにし、ＳＹＳＡＤとして出力されたアドレスをラッチ１４にラッチさせる。そして、／ＷＥをイネーブルにし、ラッチ１４にラッチされているアドレスのうち、ロウアドレスをＭＡとしてＤＲＡＭ１３に出力し、／ＲＡＳをアクティブレベルにする。次に、ラッチ１４にラッチされているアドレスのうち、カラムアドレスをＭＡとしてＤＲＡＭ１３に出力し、／ＣＡＳをアクティブにして、ＳＤＡＴＡとして出力されたデータをＤＲＡＭ１３に書き込む。
【００４５】
ここで、データキャッシュを使用しない場合は、１サイクルが１５ＣＬＫで、６４ｂｉｔデータのリード／ライトが１回行われる。このため、横線でも縦線でも、１ドットの描画に１５ＣＬＫだけ要する。すなわち、データキャッシュを使わない横１ドットの描画に１５ＣＬＫだけ要し、データキャッシュを使わない縦１ドットの描画にも１５ＣＬＫだけ要する。
【００４６】
図９、本発明の一実施例に係わるデータキャッシュを使用した場合（フレームメモリをデータキャッシュに割り当てた場合）のＤＲＡＭのリード／ライト動作を示すタイムチャートである。図９おいて、ＤＲＡＭコントローラ１２は、ＮＡＤＲＣＫＥＮをアクティブにし、ＳＹＳＡＤとして出力されたアドレスをラッチ１４にラッチさせる。また、／ＷＥをディセーブルにし、ラッチ１４にラッチされているアドレスのうち、ロウアドレスをＭＡとしてＤＲＡＭ１３に出力し、／ＲＡＳをアクティブレベルにする。次に、ラッチ１４にラッチされているアドレスのうち、カラムアドレスをＳＥＬ＋カウンタ１５でカウントアップさせながら、ＭＡとしてＤＲＡＭ１３に４回出力する。この４つのカラムアドレスの出力に伴って、／ＣＡＳを４回連続してアクティブにし、ＤＲＡＭ１３から４つのデータをＳＤＡＴＡとして連続して読み出す。そして、ＳＹＳａｄｅｎをアクティブにして、ＤＲＡＭ１３からＳＤＡＴＡとして読み出された４つのデータをバッファ１８を介してＳＹＳＡＤとして出力し、／ＶａｌｉｄＩｎをアクティブにして、ＳＹＳＡＤとして出力された４つのデータをＣＰＵ１１に連続して取り込ませる。
【００４７】
次に、ＤＲＡＭコントローラ１２は、ｎＷｌｅｎ０〜３をアクティブにして、ＣＰＵ１１からＳＹＳＡＤとして連続して出力された４つのデータをラッチ１６にラッチさせる。次に、ＳＤＡＴＡｅｎ０〜３をイネーブルにし、ラッチ１６にラッチされている４つのデータをバッファ１８を介してＤＲＡＭ１３に出力する。また、ＮＡＤＲＣＫＥＮをアクティブにし、ＳＹＳＡＤとして出力されたアドレスをラッチ１４にラッチさせる。そして、／ＷＥをイネーブルにし、ラッチ１４にラッチされているアドレスのうち、ロウアドレスをＭＡとしてＤＲＡＭ１３に出力し、／ＲＡＳをアクティブレベルにする。次に、ラッチ１４にラッチされているアドレスのうち、カラムアドレスをＳＥＬ＋カウンタ１５でカウントアップさせながら、ＭＡとしてＤＲＡＭ１３に４回出力する。この４つのカラムアドレスの出力に伴って、／ＣＡＳを４回連続してアクティブにし、ＳＤＡＴＡとして出力された４つのデータをＤＲＡＭ１３に連続して書き込む。
【００４８】
ここで、データキャッシュを使用した場合は、１サイクルが２７ＣＬＫで、連続したアドレスの６４ｂｉｔのデータのリード／ライトが４回行われる。このため、横線描画と縦線描画で１ドットの描画に要する時間が異なる。
【００４９】
まず、横線を描画しようとした場合、１ドットの描画がデータキャッシュに対して順次行われていく。データキャッシュに空きエリアが無くなるか、プログラムでキャッシュのライトバック命令が発行されると、データキャッシュからメインメモリに対し、ブロックリード／ライトが行われる。この時、１サイクルに２７ＣＬＫかかるが、この１サイクルで横線の４ドット分の描画が一度に行われる。
【００５０】
次に、縦線を描画しようとした場合、横線の時と同様、１ドットの描画がデータキャッシュに対して順次行われていく。データキャッシュに空き領域が無くなるか、プログラムでキャッシュのライトバック命令が発行されると、データキャッシュからメインメモリに対し、ブロックリード／ライトが行われる。この時、横線の時と同様、１サイクルに２７ＣＬＫかかるが、この１サイクルで描画されるドットは１ドット分しかない。
【００５１】
すなわち、データキャッシュを使った横１ドットの描画に２７／４≒７ＣＬＫ程度要するのに対し、データキャッシュを使った縦１ドットの描画には２７ＣＬＫだけ要する。
【００５２】
以上の結果により、横線を引く場合は、データキャッシュを使うと、１ドットの描画に７ＣＬＫ程度必要となるのに対し、データキャッシュを使わないと、１ドットの描画に１５ＣＬＫだけ必要となる。このため、横線を引く場合は、データキャッシュを使った方が速い。一方、縦線を引く場合は、データキャッシュを使うと、１ドットの描画に２７ＣＬＫだけ必要となるのに対し、データキャッシュを使わないと、１ドットの描画に１５ＣＬＫだけ必要となる。このため、縦線を引く場合は、データキャッシュを使わない方が速い。
【００５３】
次に、本発明の第２実施例に係わる画像形成装置について図面を参照しながら説明する。
図１０は、上述した第１実施例に係わるキャッシュの内容の更新方法を説明する図である。図１０（ａ）において、ＣＰＵが、例えば、ＲＡＭのＡ，Ｂ，Ｃ，Ｄのエリアにデータ「１，２，３」を書き込む場合、高速アクセスが可能なキャッシュを使用できる時には、キャッシュに「１，２，３」を書き込む。その後、キャッシュへの新たな書き込みが発生して、キャッシュがＦＵＬＬになったり、次にアクセスするＲＡＭのアドレスが離れたりしている場合には、キャッシュに既に書き込まれている内容「１，２，３」をＲＡＭに移す必要が生じる。キャッシュの更新は、ＶＲ５０００の場合、４ダブルワードを連続して更新する仕様であるが、図１０（ｂ）のＲＡＭのＤのエリアのように、更新してはいけない場合がある。このため、キャッシュの更新時には、ＲＡＭのＡ，Ｂ，Ｃ，Ｄのエリアの内容「４、５、６、７」を一旦リードする。そして、ＲＡＭのＡ，Ｂ，Ｃのエリアの内容「４、５、６」をキャッシュの内容「１，２，３」と入れ替え、ＲＡＭのＤのエリアについては、ＲＡＭのＤのエリアからリードした内容「７」のまま、ＲＡＭのＡ，Ｂ，Ｃ，Ｄのエリアにライトする。この結果、ＲＡＭのＡ，Ｂ，Ｃ，Ｄのエリアには、図１０（ｃ）のデータ「１、２、３、７」が書き込まれる。
【００５４】
このように、キャッシュを用いてＲＡＭにデータを書き込む方法では、ＲＡＭにデータを書き込む前に、ＲＡＭからデータを読み出す動作が必ず行われる。また、キャッシュを用いてＲＡＭにデータを書き込む方法では、縦線や斜線などを描画すると、キャッシュを用いないで描画する場合に比べて、描画速度が却って遅くなることから、描画内容をソフトウェアで判断し、キャッシュを使い分ける必要がある。
【００５５】
そこで、本発明の第２実施例では、データキャッシュを使用する代わりに、単一のロウアドレスと複数のカラムアドレス及びカラムアドレス分のデータを一時保管するバッファを設ける。そして、同一ロウアドレス（アドレスが連続する場合）のデータをフレームメモリに書き込む際には、複数カラムアドレス分のデータを一旦バッファに保管し、まとめてフレームメモリへライトする。異なるロウアドレス（アドレスが飛ぶ場合）のデータをフレームメモリに書き込む際には、１つのカラムアドレス分のデータがバッファに保管された状態でも、フレームメモリへライトする。
【００５６】
このことにより、横線などを描画する場合には、複数カラムアドレス分のデータが一旦バッファに保管され、そのバッファがＦＵＬＬになった時に、それらのデータがまとめてフレームメモリへライトされる。また、縦線など描画する場合には、ロウアドレスがデータごとに異なることから、１つのカラムアドレス分のデータがバッファに保管された時に、その１つのデータがフレームメモリへライトされる。
【００５７】
この結果、横線などを描画する場合においても、縦線などを描画する場合においても、フレームメモリへの書き込みがバッファを介して常に行われ、横線などを描画する場合と縦線などを描画する場合とで、バッファを使い分ける必要がなくなることから、横線と縦線や斜線とを区別するためのソフトウェアの負担をなくすことが可能となる。
【００５８】
図１１は、本発明の第２実施例に係わる画像形成装置の制御部の構成を示すブロック図である。図１１において、例えば、８バイト分のデータ（Ｄ０〜Ｄ６３）を保管する一時保管メモリ２７が４ブロック分（Ｂｌｏｃｋ１〜Ｂｌｏｃｋ４）設けられ、ＤＲＡＭ２３の書き込み時のアドレスを保管するアドレスラッチ２８が各ブロックごとに設けられている。ここで、アドレスラッチ２８は、ＤＲＡＭ２３のロウアドレスとカラムアドレスとを別個に保管し、ＤＲＡＭ２３のカラムアドレスに相当する部分は、一時保管メモリ２７の各ブロックごとに個別に設けられ、ＤＲＡＭ２３のロウアドレスに相当する部分は、一時保管メモリ２７の４ブロックに共通に１つだけ設けられる。また、一時保管メモリ２７のデータビットは、バイト単位でライトされることを考慮し、そのバイトに書き込みがあったことを１バイトごとに示すフラグビットの格納領域が、一時保管メモリ２７に設けられる。
【００５９】
ＣＰＵ２１からＤＲＡＭ２３への書き込みを行う場合、ＤＲＡＭコントローラ２２は、ＣＰＵ２１からＳＹＳＡＤとして出力されたアドレスをラッチ２６にラッチさせるとともに、ＣＰＵ２１からＳＹＳＡＤとして出力されたデータをバッファ２５を介して一時保管メモリ２７に記憶させ、データが格納された領域のフラグビットを‘１’にする。ラッチ２６は、ラッチしたアドレスのうち、ロウアドレスとカラムアドレスをアドレスラッチ２８に別々に出力するとともに、ロウアドレスとカラムアドレスを比較回路３０に出力する。アドレスラッチ２８は、ラッチ２６から出力されたロウアドレスとカラムアドレスとを別々にラッチし、ラッチしたロウアドレスとカラムアドレスとをＳＥＬ２９に出力するとともに、比較回路３０に出力する。
【００６０】
比較回路３０は、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８から出力されたロウアドレスとを比較するとともに、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８から出力されたカラムアドレスとを比較する。そして、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８から出力されたロウアドレスとが異なっている場合、そのことをＤＲＡＭコントローラ２２に通知する。ＤＲＡＭコントローラ２２は、比較回路３０からその通知を受けると、一時保管メモリ２７に記憶されているフラグを参照し、フラグが‘１’になっている領域のデータをＳＤＡＴＡとしてＤＲＡＭ２３に出力する。
【００６１】
また、ＤＲＡＭコントローラ２２は、アドレスラッチ２８に記憶されているロウアドレスと異なるロウアドレスが入力されると、ＤＲＡＭ２３及びＳＥＬ２９に／ＲＡＳを出力する。また、一時保管メモリ２７に記憶されているフラグが‘１’になっている領域のブロック数を算出し、そのブロック数に対応した個数の／ＣＡＳをＤＲＡＭ２３及びＳＥＬ２９に連続して出力する。
【００６２】
ＳＥＬ２９は、ＤＲＡＭコントローラ２２から／ＲＡＳが出力されると、アドレスラッチ２８に記憶されているロウアドレスをＭＡとしてＤＲＡＭ２３に出力し、ＤＲＡＭコントローラ２２から、／ＣＡＳが出力されると、アドレスラッチ２８に記憶されているカラムアドレスをＭＡとしてＤＲＡＭ２３に出力する。
【００６３】
ＤＲＡＭ２３は、ＤＲＡＭコントローラ２２から、／ＷＥが出力され、／ＲＡＳが出力された時にＳＥＬ２９から出力されたロウアドレスを取り込み、／ＣＡＳが出力された時にＳＥＬ２９から出力されたカラムアドレスを取り込む。そして、一時保管メモリ２７から出力されたデータをＳＤＡＴＡとして取り込み、ＳＥＬ２９から出力されたロウアドレス及びカラムアドレスで示される領域に記憶する。
【００６４】
また、ＤＲＡＭコントローラ２２は、アドレスラッチ２８に４つの異なるカラムアドレスが記憶され、アドレスラッチ２８に記憶されているカラムアドレスと異なる新たなカラムアドレスが入力されると、ＣＰＵ２１に／ＲＷｒｄｙを出力する。ここで、／ＲＷｒｄｙは、／ＷｒＲｄｙ（ＣＰＵ２１に対してライト可を示す信号）と／ＲｄＲｄｙ（ＣＰＵ２１に対してリード可を示す信号）との論理和をとった信号である。また、ＤＲＡＭコントローラ２２は、ＤＲＡＭ２３及びＳＥＬ２９に／ＲＡＳを出力するとともに、／ＣＡＳをＤＲＡＭ２３及びＳＥＬ２９に４回連続して出力する。
【００６５】
ＳＥＬ２９は、ＤＲＡＭコントローラ２２から／ＲＡＳが出力されると、アドレスラッチ２８に記憶されているロウアドレスをＭＡとしてＤＲＡＭ２３に出力し、ＤＲＡＭコントローラ１２から、／ＣＡＳが出力されると、アドレスラッチ２８に記憶されている４つのカラムアドレスをＭＡとして、ＤＲＡＭ２３に４回連続して出力する。
【００６６】
ＤＲＡＭ２３は、ＤＲＡＭコントローラ２２から／ＷＥが出力され、／ＲＡＳが出力された時にＳＥＬ２９から出力されたロウアドレスを取り込み、／ＣＡＳが出力された時にＳＥＬ２９から出力された４つのカラムアドレスを連続して取り込む。そして、一時保管メモリ２７から出力された４つのデータをＳＤＡＴＡとして連続して取り込み、ＳＥＬ２９から出力されたロウアドレス及び４つのカラムアドレスで示される領域に連続して記憶する。
【００６７】
ＣＰＵ２１がＤＲＡＭ２３からデータを読み出す場合、比較回路３０は、ＣＰＵ２１がリードアクセスをする時に出力したロウアドレスとアドレスラッチ２８に格納されているロウアドレスとを比較するとともに、ＣＰＵ２１がリードアクセスをする時に出力したカラムアドレスとアドレスラッチ２８に格納されているカラムアドレスとを比較する。そして、ＣＰＵ２１がリードアクセスをする時に出力したロウアドレスとアドレスラッチ２８に格納されているロウアドレスとが一致し、かつＣＰＵ２１がリードアクセスをする時に出力したカラムアドレスとアドレスラッチ２８に格納されているカラムアドレスとが一致するブロックが検出されたら、ＤＲＡＭコントローラ２２は、一時保管メモリ２７のフラグの内容を調べる。そして、ＤＲＡＭコントローラ２２は、一時保管メモリ２７のフラグの立っている領域の内容を一時保管メモリ２７から読み出すとともに、フラグの立っていないデータビットに対応する／ＣＡＳをアクティブにすることにより、一時保管メモリ２７のフラグの立っていない領域の内容をＤＲＡＭ２３から読み出す。
【００６８】
一方、ＣＰＵ２１がリードアクセスをする時に出力したロウアドレスとアドレスラッチ２８に格納されているロウアドレスとが一致し、かつＣＰＵ２１がリードアクセスをする時に出力したカラムアドレスとアドレスラッチ２８に格納されているカラムアドレスとが一致するブロックが検出されなかったなら、ＣＰＵ２１がリードアクセスをする時に出力したロウアドレスとカラムアドレスで指定される領域の内容をＤＲＡＭ２３から読み出す。
【００６９】
図１２及び図１３は、本発明の第２実施例に係わるキャッシュの内容の更新方法を説明する図である。
図１２において、例えば、ロウアドレス‘１２３４’がアドレスラッチ２８に記憶されるとともに、カラムアドレス‘５６７０’が、アドレスラッチ２８のＢｌｏｃｋ１の領域に記憶されているものとし、一時保管メモリ２７のＢｌｏｃｋ１の（Ｄ１５〜Ｄ０）の領域に２バイトのデータ「ＡＢｈ，ＣＤｈ」がライトされ、一時保管メモリ２７のＢｌｏｃｋ１の（Ｄ７〜Ｄ０）の領域のフラグ及び（Ｄ１５〜Ｄ８）の領域のフラグが‘１’に設定されているものとする。
【００７０】
さらに、図１３において、ロウアドレス‘１２３４’及びカラムアドレス‘５６７０’がアドレスラッチ２８に入力され、一時保管メモリ２７のＢｌｏｃｋ１の（Ｄ６３〜Ｄ５６）の領域に１バイトのデータ「ＥＦ」がライトされ、一時保管メモリ２７のＢｌｏｃｋ１の（Ｄ６３〜Ｄ５６）の領域のフラグが‘１’に設定されたものとする。
【００７１】
さらに、ロウアドレス‘１２３４’及びカラムアドレス‘５６８０’がアドレスラッチ２８に入力され、カラムアドレス‘５６８０’が、アドレスラッチ２８のＢｌｏｃｋ２の領域に記憶され、一時保管メモリ２７のＢｌｏｃｋ２の（Ｄ１５〜Ｄ０）の領域に２バイトのデータ「ＡＣｈ，ＡＣｈ」がライトされ、一時保管メモリ２７のＢｌｏｃｋ２の（Ｄ７〜Ｄ０）の領域のフラグ及び（Ｄ１５〜Ｄ８）の領域のフラグが‘１’に設定されたものとする。
【００７２】
次に、ロウアドレス‘１２４４’及びカラムアドレス‘５６７０’がアドレスラッチ２８に入力され、Ｄ１５〜Ｄ０の領域に２バイトのデータ「ＢＢｈ，ＣＣｈ」をライトする場合、この新たに入力されたロウアドレス‘１２４４’とアドレスラッチ２８に記憶されているロウアドレス‘１２３４’とは異なっているので、比較回路３０はこのことをＤＲＡＭコントローラ２２に通知する。ＤＲＡＭコントローラ２２は、比較回路３０からこの通知を受けると、フラグ‘１’を含むブロックを検出する。この結果、一時保管メモリ２７のＢｌｏｃｋ１及びＢｌｏｃｋ２にフラグ‘１’が含まれているので、／ＲＡＳをアクティブにしてロウアドレス‘１２３４’をＤＲＡＭ２３に取り込ませた後、／ＣＡＳを２回連続してアクティブにすることにより、Ｂｌｏｃｋ１のカラムアドレス‘５６７０’及びＢｌｏｃｋ２のカラムアドレス‘５６８０’をＤＲＡＭ２３に連続して取り込ませる。
【００７３】
この際、ＤＲＡＭコントローラ２２は、一時保管メモリ２７のＢｌｏｃｋ１及びＢｌｏｃｋ２のフラグ‘１’の領域のデータを連続して読み出して、ＤＲＡＭ２３に供給する。この結果、ＤＲＡＭ２３のロウアドレスが１２３４’、カラムアドレスが‘５６７０’の（Ｄ１５〜Ｄ０）の領域に２バイトのデータ「ＡＢｈ，ＣＤｈ」が書き込まれ、（Ｄ６３〜Ｄ５６）の領域に１バイトのデータ「ＥＦｈ」が書き込まれる。また、ＤＲＡＭ２３のロウアドレスが１２３４’、カラムアドレスが‘５６８０’の（Ｄ１５〜Ｄ０）の領域に２バイトのデータ「ＡＣｈ，ＡＣｈ」が書き込まれる。
【００７４】
以下、同様の動作を繰り返し、ロウアドレスが異なるごと、またはカラムアドレスが４ブロックを越えるごとに、一時保管メモリ２７から、ＤＲＡＭ２３へのデータコピーを行う。なお、ロウアドレスは同一なので、ファーストページモードやＥＤＯモードなどでメモリライト動作を行うことができる。
【００７５】
このように、異なるカラムアドレスに対応した複数のデータを格納する領域を一時保管メモリ２７に設け、異なるロウアドレスがアドレスラッチ２７に入力された場合、一時保管メモリ２７に記憶されているデータをＤＲＡＭ２３に書き込むようにすることにより、横線を描画する場合には、複数の横線のデータを一時保管メモリ２７に一旦格納し、その複数の横線のデータをＤＲＡＭ２３に連続して書き込むことが可能となるとともに、縦線を描画する場合には、縦線のデータが入力されるごとに縦線のデータをＤＲＡＭ２３に書き込むことが可能となり、縦線か横線かを判断してキャッシュを使い分ける必要がなくなることから、ソフトウェアの負担を軽くすることが可能となる。
【００７６】
また、データの保管の有無を示すフラグビットを各領域ごとに設け、フラグビットの内容を判断することにより、データが保管されている領域を検出することが可能となり、データが保管されている領域のみについてＤＲＡＭ２３への転送動作を行うことが可能となることから、描画速度を向上させることが可能となる。
図１４は、図１１の一時保管メモリを用いた２ブロック分のデータのＤＲＡＭ２３への書き込み動作を示すタイムチャートである。なお、以下の実施例では、ＣＰＵのモードはビッグエンディアンで、ライト再発行モード（アドレスサイクル中に、／ＷｒＲｄｙがディアサートされると、ライトリクエストは無効になり、、／ＷｒＲｄｙがディアサートされた２サイクル後にもう一度ライトリクエストを発行する）であるものとする。
【００７７】
図１４において、ＣＬＫの立ち上がりに同期して、２Ｂ Ｗｒｉｔｅ＝２ＢｙｔｅのライトリクエストコマンドがＳＹＳＣＭＤとして発行され、‘１２３４５６７６’というアドレスがＳＹＳＡＤとして出力されたものとすると、ＤＲＡＭコントローラ２２は、ＳＹＳＣＭＤで示されるバイト数とＳＹＳＡＤで示されるアドレスの下位３ビットから、ＳＹＳＡＤとして出力されるデータの有効部分を調べる。
【００７８】
図１５は、図１１のＳＹＳＣＭＤで示されるバイト数とアドレスの下位３ビットで示される有効データの対応関係を示す図である。図１５において、ＳＹＳＣＭＤで示されるバイト数が１であって、ＳＹＳＡＤで示されるアドレスの下位３ビットが０の場合、使用されるＳＹＳＡＤの有効データはＤ６３〜Ｄ５６である。また、ＳＹＳＡＤで示されるアドレスの下位３ビットが１の場合、使用されるＳＹＳＡＤの有効データはＤ５５〜Ｄ４８、ＳＹＳＡＤで示されるアドレスの下位３ビットが２の場合、使用されるＳＹＳＡＤの有効データはＤ４７〜Ｄ４０、ＳＹＳＡＤで示されるアドレスの下位３ビットが３の場合、使用されるＳＹＳＡＤの有効データはＤ３９〜Ｄ３２、ＳＹＳＡＤで示されるアドレスの下位３ビットが４の場合、使用されるＳＹＳＡＤの有効データはＤ３１〜Ｄ２４、ＳＹＳＡＤで示されるアドレスの下位３ビットが５の場合、使用されるＳＹＳＡＤの有効データはＤ２３〜Ｄ１６、ＳＹＳＡＤで示されるアドレスの下位３ビットが６の場合、使用されるＳＹＳＡＤの有効データはＤ１５〜Ｄ８、ＳＹＳＡＤで示されるアドレスの下位３ビットが７の場合、使用されるＳＹＳＡＤの有効データはＤ７〜Ｄ０である。
【００７９】
ＳＹＳＣＭＤで示されるバイト数が２であって、ＳＹＳＡＤで示されるアドレスの下位３ビットが０の場合、使用されるＳＹＳＡＤの有効データはＤ６３〜Ｄ４８である。また、ＳＹＳＡＤで示されるアドレスの下位３ビットが２の場合、使用されるＳＹＳＡＤの有効データはＤ４７〜Ｄ３２、ＳＹＳＡＤで示されるアドレスの下位３ビットが４の場合、使用されるＳＹＳＡＤの有効データはＤ３１〜Ｄ１６、ＳＹＳＡＤで示されるアドレスの下位３ビットが６の場合、使用されるＳＹＳＡＤの有効データはＤ１５〜Ｄ０である。
【００８０】
ＳＹＳＣＭＤで示されるバイト数が４であって、ＳＹＳＡＤで示されるアドレスの下位３ビットが０の場合、使用されるＳＹＳＡＤの有効データはＤ６３〜Ｄ３２、ＳＹＳＡＤで示されるアドレスの下位３ビットが４の場合、使用されるＳＹＳＡＤの有効データはＤ３１〜Ｄ０である。また、ＳＹＳＣＭＤで示されるバイト数が８であって、ＳＹＳＡＤで示されるアドレスの下位３ビットが０の場合、使用されるＳＹＳＡＤの有効データはＤ６３〜Ｄ０である。
【００８１】
図１４の例では、ＳＹＳＣＭＤで示されるバイト数は‘２’で、ＳＹＳＡＤで示されるアドレスの下位３ビットは‘６’なので、使用されるＳＹＳＡＤの有効データはＤ１５〜Ｄ０と判断される。
【００８２】
ＣＰＵ２１から‘１２３４５６７６’というアドレスが出力されると、‘１２３４５６７０’というアドレスがラッチ２６にラッチされ、‘１２３４’というロウアドレスと‘５６７０’というカラムアドレスとがアドレスラッチ２８に別々に保管される。アドレスラッチ２８に保管された‘１２３４’というロウアドレスは、ＳＥＬ２９を介しＭＡとしてＤＲＡＭ２３に出力される。
【００８３】
続いて、次のＣＬＫの立ち上がりで、‘ＡＢＣＤ’という２バイトのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤ（最後のデータに対する識別子）がＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ１のＤ７〜Ｄ０の領域に‘ＣＤ’という１バイトのデータを格納し、Ｂｌｏｃｋ２のＤ１５〜Ｄ８の領域に‘ＡＢ’という１バイトのデータを格納する。
【００８４】
続いて、次のＣＬＫの立ち上がりで、ＣＰＵ２１から‘１２３４５６７０’というアドレスが出力されると、‘１２３４５６７０’というアドレスがラッチ２６にラッチされる。ここで、ＤＲＡＭコントローラ２２は、ＳＹＳＣＭＤで示されるバイト数が‘１’で、ＳＹＳＡＤで示されるアドレスの下位３ビットが‘０’なので、使用されるＳＹＳＡＤの有効データはＤ６３〜Ｄ５６と判断する。
【００８５】
ラッチ２６にラッチされた‘１２３４５６７０’というアドレスのうち、ロウアドレス‘１２３４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２３４５６７０’というアドレスのうち、カラムアドレス‘５６７０’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致し、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８に保管されているＢｌｏｃｋ１のカラムアドレスとが一致すると判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【００８６】
続いて、次のＣＬＫの立ち上がりで、‘ＥＦ’という１バイトのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤがＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ１のＤ６３〜Ｄ５６の領域に‘ＥＦ’という１バイトのデータを格納する。
【００８７】
続いて、次のＣＬＫの立ち上がりで、ＣＰＵ２１から‘１２３４５６８６’というアドレスがＳＹＳＡＤとして出力されると、‘１２３４５６８０’というアドレスがラッチ２６にラッチされる。ここで、ＤＲＡＭコントローラ２２は、ＳＹＳＣＭＤで示されるバイト数が‘２’で、ＳＹＳＡＤで示されるアドレスの下位３ビットが‘６’なので、使用されるＳＹＳＡＤの有効データはＤ１５〜Ｄ０と判断する。
【００８８】
ラッチ２６にラッチされた‘１２３４５６８０’というアドレスのうち、ロウアドレス‘１２３４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２３４５６８０’というアドレスのうち、カラムアドレス‘５６８０’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致するが、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８に保管されているＢｌｏｃｋ１のカラムアドレスとは一致しないと判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【００８９】
続いて、次のＣＬＫの立ち上がりで、‘ＡＣＡＣ’という２バイトのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤがＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、新たに入力されたカラムアドレスがＢｌｏｃｋ１のカラムアドレスと一致しないため、新たに入力されたデータの格納領域として、Ｂｌｏｃｋ２を選択する。そして、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ２のＤ１５〜Ｄ０の領域に‘ＡＣＡＣ’という２バイトのデータを格納する。
【００９０】
続いて、次のＣＬＫの立ち上がりで、ＣＰＵ２１から‘１２４４５６７６’というアドレスがＳＹＳＡＤとして出力されると、‘１２４４５６７０’というアドレスがラッチ２６にラッチされる。ここで、ＤＲＡＭコントローラ２２は、ＳＹＳＣＭＤで示されるバイト数が‘２’で、ＳＹＳＡＤで示されるアドレスの下位３ビットが‘６’なので、使用されるＳＹＳＡＤの有効データはＤ１５〜Ｄ０と判断する。
【００９１】
ラッチ２６にラッチされた‘１２４４５６７０’というアドレスのうち、ロウアドレス‘１２４４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２４４５６７０’というアドレスのうち、カラムアドレス‘５６８０’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとが一致しないと判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【００９２】
ＤＲＡＭコントローラ２２は、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとが一致しないという判断結果を受け取ると、一時保管メモリ２７へのデータの書き込み動作を終了し、一時保管メモリ２７へ書き込まれたデータをＤＲＡＭ２３に書き込む動作を行う。すなわち、ＤＲＡＭコントローラ２２は、一時保管メモリ２７でフラグの立っている領域を調べることにより、データが格納されている一時保管メモリ２７の領域を検出する。この結果、ＤＲＡＭコントローラ２２は、データが格納されている領域として、一時保管メモリ２７のＢｌｏｃｋ１のＤ１５〜Ｄ０及びＤ６３〜Ｄ５６とＢｌｏｃｋ２のＤ１５〜Ｄ０を検出する。そして、一時保管メモリ２７のＢｌｏｃｋ１に格納されているデータ‘ＥＦＸＸＸＸＸＸＸＸＸＸＡＢＣＤ’をＳＤＡＴＡとしてＤＲＡＭ２３に出力する。
【００９３】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＲＡＳをアクティブにして、ＳＥＬ２９からＭＡとして出力されているロウアドレス‘１２３４’をＤＲＡＭ２３に取り込ませる。
【００９４】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、Ｂｌｏｃｋ１のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ１のカラムアドレス‘５６７０’をＤＲＡＭ２３に出力し、次のＣＬＫの立ち上がりで、／ＣＡＳ０、／ＣＡＳ１及び／ＣＡＳ７をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６７０’をＤＲＡＭ２３に取り込ませる。そして、一時保管メモリ２７のＢｌｏｃｋ１からＳＤＡＴＡとして出力されているデータ‘ＥＦＸＸＸＸＸＸＸＸＸＸＡＢＣＤ’をＤＲＡＭ２３に書き込む。
【００９５】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０、／ＣＡＳ１及び／ＣＡＳ７をインアクティブにし、一時保管メモリ２７のＢｌｏｃｋ２に格納されているデータ‘ＸＸＸＸＸＸＸＸＸＸＸＸＡＣＡＣ’をＳＤＡＴＡとしてＤＲＡＭ２３に出力するとともに、Ｂｌｏｃｋ２のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ２のカラムアドレス‘５６８０’をＤＲＡＭ２３に出力する。
【００９６】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０及び／ＣＡＳ１をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６８０’をＤＲＡＭ２３に取り込ませる。そして、一時保管メモリ２７のＢｌｏｃｋ２からＳＤＡＴＡとして出力されているデータ‘ＸＸＸＸＸＸＸＸＸＸＸＸＡＣＡＣ’をＤＲＡＭ２３に書き込む。
【００９７】
続いて、ＤＲＡＭコントローラ２２は、次のＣＬＫの立ち上がりで、／ＣＡＳ０及び／ＣＡＳ１をインアクティブにし、／ＲＡＳをインアクティブにして、一時保管メモリ２７に保管されていたデータのＤＲＡＭ２３への書き込みを終了する。
【００９８】
図１６は、図１１の一時保管メモリを用いた４ブロック分のデータのＤＲＡＭ２３への書き込み動作を示すタイムチャートである。図１６において、ＳＹＳＣＭＤとして、８Ｂ  Ｗｒｉｔｅ＝８Ｂｙｔｅのライトリクエストコマンドが発行され、‘１２３４５６７０’というアドレスがＳＹＳＡＤとして出力されたものとすると、‘１２３４５６７０’というアドレスはラッチ２６にラッチされ、‘１２３４’というロウアドレスと‘５６７０’というカラムアドレスとがアドレスラッチ２８に別々に保管される。アドレスラッチ２８に保管された‘１２３４’というロウアドレスは、ＳＥＬ２９を介しＭＡとしてＤＲＡＭ２３に出力される。
【００９９】
続いて、次のＣＬＫの立ち上がりで、６４ｂｉｔのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤがＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ１に６４ｂｉｔのデータを格納する。
【０１００】
続いて、次のＣＬＫの立ち上がりで、ＣＰＵ２１から‘１２３４５６７８’というアドレスが出力されると、‘１２３４５６７８’というアドレスがラッチ２６にラッチされる。ラッチ２６にラッチされた‘１２３４５６７８’というアドレスのうち、ロウアドレス‘１２３４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２３４５６７０’というアドレスのうち、カラムアドレス‘５６７８’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致するが、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致しないと判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【０１０１】
続いて、次のＣＬＫの立ち上がりで、６４ｂｉｔのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤがＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、新たに入力されたカラムアドレスがＢｌｏｃｋ１のカラムアドレスと一致しないため、新たに入力されたデータの格納領域として、Ｂｌｏｃｋ２を選択する。そして、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ２に６４ｂｉｔのデータを格納する。
【０１０２】
続いて、次のＣＬＫの立ち上がりで、ＣＰＵ２１から‘１２３４５６８０’というアドレスが出力されると、‘１２３４５６８０’というアドレスがラッチ２６にラッチされる。ラッチ２６にラッチされた‘１２３４５６８０’というアドレスのうち、ロウアドレス‘１２３４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２３４５６８０’というアドレスのうち、カラムアドレス‘５６８０’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致するが、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８に保管されているカラムアドレスとは一致しないと判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【０１０３】
続いて、次のＣＬＫの立ち上がりで、６４ｂｉｔのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤがＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、新たに入力されたカラムアドレスがＢｌｏｃｋ１及びＢｌｏｃｋ２のカラムアドレスと一致しないため、新たに入力されたデータの格納領域として、Ｂｌｏｃｋ３を選択する。そして、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ３に６４ｂｉｔのデータを格納する。
【０１０４】
続いて、次のＣＬＫの立ち上がりで、ＣＰＵ２１から‘１２３４５６８８’というアドレスが出力されると、‘１２３４５６８８’というアドレスがラッチ２６にラッチされる。ラッチ２６にラッチされた‘１２３４５６８８’というアドレスのうち、ロウアドレス‘１２３４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２３４５６８８’というアドレスのうち、カラムアドレス‘５６８８’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致するが、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８に保管されているカラムアドレスとは一致しないと判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【０１０５】
続いて、次のＣＬＫの立ち上がりで、６４ｂｉｔのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤがＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、新たに入力されたカラムアドレスがＢｌｏｃｋ１〜Ｂｌｏｃｋ３のカラムアドレスと一致しないため、新たに入力されたデータの格納領域として、Ｂｌｏｃｋ４を選択する。そして、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ４に６４ｂｉｔのデータを格納する。ここで、ＤＲＡＭコントローラ２２は、一時保管メモリ２７のＢｌｏｃｋ４に６４ｂｉｔのデータを格納すると、一時保管メモリ２７の書き込み領域は充満状態になったと判断し、一時保管メモリ２７へのデータの書き込み動作を終了し、一時保管メモリ２７へ書き込まれたデータをＤＲＡＭ２３に書き込む動作を行う。
【０１０６】
すなわち、ＤＲＡＭコントローラ２２は、一時保管メモリ２７でフラグの立っている領域を調べることにより、データが格納されている一時保管メモリ２７の領域を検出する。この結果、ＤＲＡＭコントローラ２２は、データが格納されている領域として、一時保管メモリ２７のＢｌｏｃｋ１〜Ｂｌｏｃｋ４の領域を検出する。そして、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、一時保管メモリ２７のＢｌｏｃｋ１に格納されている６４ｂｉｔのデータをＳＤＡＴＡとしてＤＲＡＭ２３に出力し、／ＲＡＳをアクティブにして、ＳＥＬ２９からＭＡとして出力されているロウアドレス‘１２３４’をＤＲＡＭ２３に取り込ませる。
【０１０７】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、Ｂｌｏｃｋ１のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ１のカラムアドレス‘５６７０’をＤＲＡＭ２３に出力し、次のＣＬＫの立ち上がりで、／ＣＡＳ０〜／ＣＡＳ７をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６７０’をＤＲＡＭ２３に取り込ませる。そして、一時保管メモリ２７のＢｌｏｃｋ１からＳＤＡＴＡとして出力されている６４ｂｉｔのデータをＤＲＡＭ２３に書き込む。
【０１０８】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０〜／ＣＡＳ７をインアクティブにし、一時保管メモリ２７のＢｌｏｃｋ２に格納されている６４ｂｉｔのデータをＳＤＡＴＡとしてＤＲＡＭ２３に出力するとともに、Ｂｌｏｃｋ２のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ２のカラムアドレス‘５６７８’をＤＲＡＭ２３に出力する。そして、次のＣＬＫの立ち上がりで、／ＣＡＳ０〜／ＣＡＳ７をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６７８’をＤＲＡＭ２３に取り込ませ、一時保管メモリ２７のＢｌｏｃｋ２からＳＤＡＴＡとして出力されている６４ｂｉｔのデータをＤＲＡＭ２３に書き込む。
【０１０９】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０〜／ＣＡＳ７をインアクティブにし、一時保管メモリ２７のＢｌｏｃｋ３に格納されている６４ｂｉｔのデータをＳＤＡＴＡとしてＤＲＡＭ２３に出力するとともに、Ｂｌｏｃｋ３のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ３のカラムアドレス‘５６８０’をＤＲＡＭ２３に出力する。そして、次のＣＬＫの立ち上がりで、／ＣＡＳ０〜／ＣＡＳ７をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６８０’をＤＲＡＭ２３に取り込ませ、一時保管メモリ２７のＢｌｏｃｋ３からＳＤＡＴＡとして出力されている６４ｂｉｔのデータをＤＲＡＭ２３に書き込む。
【０１１０】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０〜／ＣＡＳ７をインアクティブにし、一時保管メモリ２７のＢｌｏｃｋ４に格納されている６４ｂｉｔのデータをＳＤＡＴＡとしてＤＲＡＭ２３に出力するとともに、Ｂｌｏｃｋ４のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ４のカラムアドレス‘５６８８’をＤＲＡＭ２３に出力する。そして、次のＣＬＫの立ち上がりで、／ＣＡＳ０〜／ＣＡＳ７をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６８８’をＤＲＡＭ２３に取り込ませ、一時保管メモリ２７のＢｌｏｃｋ４からＳＤＡＴＡとして出力されている６４ｂｉｔのデータをＤＲＡＭ２３に書き込む。
【０１１１】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０〜／ＣＡＳ７をインアクティブにし、次のＣＬＫの立ち上がりで、／ＲＡＳをインアクティブにする。
【０１１２】
このように、横線を描画する場合などで、ロウアドレスが一致するアドレスがＣＰＵ２１から連続して出力される場合には、４つのデータの書き込みを１３ＣＬＫで行うことが可能となり、縦線か横線かをソフトウェアで判断することなく、横線の描画を高速に行うことが可能となる。
【０１１３】
図１７は、図１１の一時保管メモリを用いた１ブロック分のデータのＤＲＡＭ２３への書き込み動作を示すタイムチャートである。図１７において、ＳＹＳＣＭＤとして、８Ｂ  Ｗｒｉｔｅ＝８Ｂｙｔｅのライトリクエストコマンドが発行され、‘１２３４５６７０’というアドレスがＳＹＳＡＤとして出力されたものとすると、‘１２３４５６７０’というアドレスはラッチ２６にラッチされ、‘１２３４’というロウアドレスと‘５６７０’というカラムアドレスとがアドレスラッチ２８に別々に保管される。アドレスラッチ２８に保管された‘１２３４’というロウアドレスは、ＳＥＬ２９を介し、ＭＡとしてＤＲＡＭ２３に出力される。
【０１１４】
続いて、次のＣＬＫの立ち上がりで、６４ｂｉｔのデータがＳＹＳＡＤとしてＣＰＵ２１から出力され、ＮＥＯＤがＳＹＳＣＭＤとして出力されると、ＤＲＡＭコントローラ２２は、バッファ２５を介し、一時保管メモリ２７のＢｌｏｃｋ１に６４ｂｉｔのデータを格納する。
【０１１５】
続いて、次のＣＬＫの立ち上がりで、ＣＰＵ２１から‘１２４４５６７０’というアドレスが出力されると、‘１２４４５６７０’というアドレスがラッチ２６にラッチされる。ラッチ２６にラッチされた‘１２４４５６７０’というアドレスのうち、ロウアドレス‘１２４４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２３４５６７０’というアドレスのうち、カラムアドレス‘５６７０’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとが一致しないと判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【０１１６】
ＤＲＡＭコントローラ２２は、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとが一致しないという判断結果を受け取ると、一時保管メモリ２７へのデータの書き込み動作を終了し、一時保管メモリ２７へ書き込まれたデータをＤＲＡＭ２３に書き込む動作を行う。すなわち、ＤＲＡＭコントローラ２２は、一時保管メモリ２７のフラグの立っている領域を調べることにより、データが格納されている一時保管メモリ２７の領域を検出する。この結果、ＤＲＡＭコントローラ２２は、データが格納されている領域として、一時保管メモリ２７のＢｌｏｃｋ１の領域を検出する。そして、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、一時保管メモリ２７のＢｌｏｃｋ１に格納されている６４ｂｉｔのデータをＳＤＡＴＡとしてＤＲＡＭ２３に出力し、／ＲＡＳをアクティブにして、ＳＥＬ２９からＭＡとして出力されているロウアドレス‘１２３４’をＤＲＡＭ２３に取り込ませる。
【０１１７】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、Ｂｌｏｃｋ１のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ１のカラムアドレス‘５６７０’をＤＲＡＭ２３に出力し、次のＣＬＫの立ち上がりで、／ＣＡＳ０〜／ＣＡＳ７をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６７０’をＤＲＡＭ２３に取り込ませる。そして、一時保管メモリ２７のＢｌｏｃｋ１からＳＤＡＴＡとして出力されている６４ｂｉｔのデータをＤＲＡＭ２３に書き込む。
【０１１８】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０〜／ＣＡＳ７をインアクティブにし、次のＣＬＫの立ち上がりで、／ＲＡＳをインアクティブにする。
【０１１９】
このように、縦線を描画する場合などで、ＣＰＵ２１からアドレスが出力されるごとに、ロウアドレスが異なっている場合においては、１つのデータの書き込みを７ＣＬＫで行うことが可能となり、縦線か横線かをソフトウェアで判断することなく、縦線の描画を効率的に行うことが可能となる。
【０１２０】
以上説明したように、フレームメモリに横線を書く時のメモリアクセスは、図１６のように４ダブルワード分が１３ＣＬＫで済み、また、縦線を書く時のメモリアクセスは図１７のように７ＣＬＫで済む。
【０１２１】
ただし、実際には、既にメモリ上にあるデータとのＯＲをとって重ね書きすることがあり、この場合には、１ダブルワードあたり８ＣＬＫ分のリードアクセスが追加され、横線を書く時の平均アクセスクロック数は、１３（ＣＬＫ）／４＋８（ＣＬＫ）＝１１．２５（ＣＬＫ）、横線を書く時の平均アクセスクロック数は７（ＣＬＫ）＋８（ＣＬＫ）＝１５（ＣＬＫ）となる。
【０１２２】
図１８は、図１１の一時保管メモリにフラグ‘１’が存在する場合のＤＲＡＭ２３からのデータの読み出し動作を示すタイムチャートである。図１８において、一時保管メモリ２７のＢｌｏｃｋ１のＤ７〜Ｄ０の領域には‘ＡＢ’というデータが格納され、Ｄ１５〜Ｄ８の領域には‘ＣＤ’というデータが格納され、Ｄ６３〜Ｄ５６の領域には‘ＥＦ’というデータが格納され、アドレスラッチ２８には‘１２３４’というロウアドレスが格納され、一時保管メモリ２７のＢｌｏｃｋ１のＤ７〜Ｄ０の領域、Ｄ１５〜Ｄ８の領域及びＤ６３〜Ｄ５６の領域のフラグが‘１’に設定されているものとする。また、アドレスラッチ２８のＢｌｏｃｋ１の領域には‘５６７０’というカラムアドレスが格納されているものとする。そして、ＣＬＫの立ち上がりに同期して、ＳＹＳＣＭＤとして、８ＢＲｅａｄ＝８Ｂｙｔｅのリードリクエストコマンドが発行され、‘１２３４５６７０’というアドレスがＳＹＳＡＤとして出力されたものとすると、‘１２３４５６７０’というアドレスはラッチ２６にラッチされる。
【０１２３】
ラッチ２６にラッチされた‘１２３４５６７０’というアドレスのうち、ロウアドレス‘１２３４’は比較回路３０に出力され、アドレスラッチ２８に保管されているロウアドレス‘１２３４’と比較される。また、ラッチ２６にラッチされた‘１２３４５６７０’というアドレスのうち、カラムアドレス‘５６７０’も比較回路３０に出力され、アドレスラッチ２８に保管されているカラムアドレスと比較される。この結果、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致し、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８に保管されているカラムアドレスも一致すると判断され、この判断結果がＤＲＡＭコントローラ２２に送られる。
【０１２４】
ＤＲＡＭコントローラ２２は、ラッチ２６から出力されたロウアドレスとアドレスラッチ２８に保管されているロウアドレスとは一致し、ラッチ２６から出力されたカラムアドレスとアドレスラッチ２８に保管されているカラムアドレスも一致するという判断結果を受け取ると、一時保管メモリ２７のフラグの状態を調べる。この結果、一時保管メモリ２７のＢｌｏｃｋ１のＤ７〜Ｄ０の領域、Ｄ１５〜Ｄ８の領域及びＤ６３〜Ｄ５６の領域のフラグが‘１’であることを検出する。
【０１２５】
ＤＲＡＭコントローラ２２は、フラグ‘１’の領域を検出すると、次のＣＬＫの立ち上がりで、フラグ‘１’の領域のデータを一時保管メモリ２７から読み出し、一時保管メモリ２７から読み出した‘ＥＦＸＸＸＸＸＸＸＸＸＸＣＤＡＢ’というデータをＳＤＡＴＡとして出力するとともに、／ＲＡＳをアクティブにし、ＳＥＬ２９からＭＡとして出力されているロウアドレス‘１２３４’をＤＲＡＭ２３に取り込ませる。
【０１２６】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、Ｂｌｏｃｋ１のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ１のカラムアドレス‘５６７０’をＤＲＡＭ２３に出力する。そして、ＤＲＡＭコントローラ２２は、次のＣＬＫの立ち上がりで、／ＣＡＳ２〜／ＣＡＳ６をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６７０’をＤＲＡＭ２３に取り込ませ、Ｄ５５〜Ｄ１６の領域の‘ＸＸＡＡＢＢＣＣＤＤＥＥＸＸＸＸ’というデータをＤＲＡＭ２３から読み出し、ＳＤＡＴＡとして出力する。
【０１２７】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ２〜／ＣＡＳ６をインアクティブにし、一時保管メモリ２７から読み出した‘ＥＦＸＸＸＸＸＸＸＸＸＸＣＤＡＢ’というデータとＤＲＡＭ２３から読み出した‘ＸＸＡＡＢＢＣＣＤＤＥＥＸＸＸＸ’というデータとをバッファ２４を介し、ＳＹＳＡＤとして出力する。そして、ＮＥＯＤをＳＹＳＣＭＤとして出力し、／ＶａｌｉｄＩｎをイネーブルにし、ＳＹＳＡＤとして出力された‘ＥＦＡＡＢＢＣＣＤＤＥＥＣＤＡＢ’というデータをＣＰＵ２１に取り込ませる。
【０１２８】
続いて、次のＣＬＫの立ち上がりで、／ＲＡＳをインアクティブにし、／ＶａｌｉｄＩｎをディネーブルにする。
このように、ＤＲＡＭ２３からデータを読み出す場合において、指定されたアドレスに対応するデータが一時保管メモリ２７に保管されている場合には、そのアドレスに対応するデータとして一時保管メモリ２７に格納されているデータを用いることが可能となり、そのアドレスに対応するデータについてはＤＲＡＭ２３からの読み出しを省略することが可能となる。
【０１２９】
この結果、一時保管メモリ２７に保管されているデータをＤＲＡＭ２３に書き込む際に、ＤＲＡＭ２３に既に記憶されているデータと重ね書きする場合においても、一時保管メモリ２７に既に保管されているデータについては、ＤＲＡＭ２３からの読み出し動作を省略することが可能となり、描画速度を向上させることが可能となる。
【０１３０】
図１９は、図１１の一時保管メモリのフラグが‘０’の場合のＤＲＡＭ２３からのデータの読み出し動作を示すタイムチャートである。図１９において、一時保管メモリ２７にはデータが保管されておらず、一時保管メモリ２７のフラグの状態はいずれの領域においても‘０’となっているものとする。そして、ＣＬＫの立ち上がりに同期して、ＳＹＳＣＭＤとして、８Ｂ Ｒｅａｄ＝８Ｂｙｔｅのリードリクエストコマンドが発行され、‘１２３４９８７０’というアドレスがＳＹＳＡＤとして出力されたものとすると、ＤＲＡＭコントローラ２２は、‘１２３４９８７０’というアドレスをラッチ２６にラッチさせ、一時保管メモリ２７のフラグの状態を調べる。この結果、一時保管メモリ２７のフラグの状態はいずれの領域においても‘０’となっているものと判断すると、‘１２３４’というロウアドレスと‘９８７０’というカラムアドレスとをアドレスラッチ２８に別々に保管する。ここで、アドレスラッチ２８に保管された‘１２３４’というロウアドレスは、ＳＥＬ２９を介しＭＡとしてＤＲＡＭ２３に出力される。
【０１３１】
続いて、ＤＲＡＭコントローラ２２は、次のＣＬＫの立ち上がりで、／ＲＡＳをアクティブにし、ＳＥＬ２９からＭＡとして出力されているロウアドレス‘１２３４’をＤＲＡＭ２３に取り込ませる。
【０１３２】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、Ｂｌｏｃｋ１のカラムアドレスにＳＥＬ２９を切り替え、Ｂｌｏｃｋ１のカラムアドレス‘９８７０’をＤＲＡＭ２３に出力する。そして、ＤＲＡＭコントローラ２２は、次のＣＬＫの立ち上がりで、／ＣＡＳ０〜／ＣＡＳ７をアクティブにして、ＳＥＬ２９からＭＡとして出力されているカラムアドレス‘５６７０’をＤＲＡＭ２３に取り込ませ、８バイトの‘ＡＡ００ＢＢ１１ＣＣ２２ＤＤ３３’というデータをＤＲＡＭ２３から読み出し、ＳＤＡＴＡとして出力する。
【０１３３】
続いて、次のＣＬＫの立ち上がりで、ＤＲＡＭコントローラ２２は、／ＣＡＳ０〜／ＣＡＳ７をインアクティブにし、ＤＲＡＭ２３から読み出した８バイトの‘ＡＡ００ＢＢ１１ＣＣ２２ＤＤ３３’というデータをバッファ２４を介し、ＳＹＳＡＤとして出力する。そして、ＮＥＯＤをＳＹＳＣＭＤとして出力し、／ＶａｌｉｄＩｎをイネーブルにし、ＳＹＳＡＤとして出力された８バイトの‘ＡＡ００ＢＢ１１ＣＣ２２ＤＤ３３’というデータをＣＰＵ２１に取り込ませる。
【０１３４】
続いて、次のＣＬＫの立ち上がりで、／ＲＡＳをインアクティブにし、／ＶａｌｉｄＩｎをディネーブルにする。
なお、上述した実施例では、８バイト分の幅を持った一時保管メモリ２７を例にとって説明したが、この幅はＣＰＵ２１のアクセス可能なビット幅に対応して設定するようにしてもよい。
【０１３５】
また、上述した実施例では、一時保管メモリ２７のブロックを４つとしたが、ＤＲＡＭ２３のＲＡＳ幅の制限時間を越えない限りのアクセスが可能なだけ、複数ブロックを持っても良い。
【０１３６】
【発明の効果】
以上説明したように、本発明によれば、描画コマンドの描画内容に基づいて、キャッシュメモリを用いた描画を行うか、フレームメモリに直接描画を行うかを決定することにより、キャッシュメモリを用いてフレームメモリへの描画を行うと、描画速度が速くなる場合には、キャッシュメモリを用いてフレームメモリへの描画を行うことが可能となるとともに、キャッシュメモリを用いてフレームメモリへの描画を行うと、描画速度が逆に遅くなる場合には、キャッシュメモリを用いることなく、フレームメモリに対して描画を直接行うことが可能となり、画像の種類による描画速度の遅れを防止することが可能となる。
【０１３７】
また、本発明の一態様によれば、複数のデータを格納するデータ格納手段を設け、データ格納手段に新たなデータを格納する領域がなくなった時、または異なるロウアドレスのデータが入力された時に、データ格納手段に格納されているデータをフレームメモリに転送することにより、ロウアドレスが異なるデータが入力された場合には、データが入力されるごとにそのデータをフレームメモリに転送することが可能となるとともに、ロウアドレスが一致するデータが入力された場合には、複数のデータを連続してフレームメモリに転送することが可能となり、描画の種類の判断を行うことなく、描画の種類に応じた最適な転送方法を選択してデータ転送を行うことが可能となることから、描画速度を向上させることが可能となることに加えて、横線と縦線や斜線とを区別するためのソフトウェアの負担をなくすことが可能となる。
【０１３８】
また、本発明の一態様によれば、データの格納の有無を示すフラグを各領域ごとに設定することにより、データ格納手段に実際にデータが格納されている領域を判別することが可能となり、データ格納手段に格納されている複数のデータをフレームメモリに連続して転送する際に、実際にデータが格納されている領域のデータのみについてフレームメモリへの転送動作を行い、データが格納されていない領域についての転送動作を省略することが可能となることから、転送時間を削減することが可能となる。
【図面の簡単な説明】
【図１】本発明の一実施例に係わる画像形成装置のメモリ構成を示すブロック図である。
【図２】本発明の一実施例に係わるフレームメモリのメモリアドレスの配列順序を示す図である。
【図３】本発明の一実施例に係わるキャッシュを使用した場合のアドレス空間の構成を示す図である。
【図４】本発明の一実施例に係わる描画方法を示すフローチャートである。
【図５】本発明の一実施例に係わる描画方法の評価に用いた画像パターンを示す図である。
【図６】フレームメモリをデータキャッシュに割り当てて描画した場合、フレームメモリをデータキャッシュに割り当てないで描画した場合及び図４の方法で描画した場合のそれぞれについて、図５の画像パターンの描画時間を示す表である。
【図７】本発明の第１実施例に係わる画像形成装置の制御部の構成を示すブロック図である。
【図８】本発明の一実施例に係わるデータキャッシュを使用しない場合のＤＲＡＭのリード／ライト動作を示すタイムチャート図である。
【図９】本発明の一実施例に係わるデータキャッシュを使用した場合のＤＲＡＭのリード／ライト動作を示すタイムチャートである。
【図１０】本発明の一実施例に係わるキャッシュの内容の更新方法を説明する図である。
【図１１】本発明の第２実施例に係わる画像形成装置の制御部の構成を示すブロック図である。
【図１２】本発明の第２実施例に係わるキャッシュの内容の更新方法を説明する図である。
【図１３】本発明の第２実施例に係わるキャッシュの内容の更新方法を説明する図である。
【図１４】図１１の一時保管メモリを用いた２ブロック分のデータのＤＲＡＭ２３への書き込み動作を示すタイムチャートである。
【図１５】図１１のＳＹＳＣＭＤで示されるバイト数とアドレスの下位３ビットで示される有効データの対応関係を示す図である。
【図１６】図１１の一時保管メモリを用いた４ブロック分のデータのＤＲＡＭ２３への書き込み動作を示すタイムチャートである。
【図１７】図１１の一時保管メモリを用いた１ブロック分のデータのＤＲＡＭ２３への書き込み動作を示すタイムチャートである。
【図１８】図１１の一時保管メモリのフラグが‘１’の場合のＤＲＡＭ２３からのデータの読み出し動作を示すタイムチャートである。
【図１９】図１１の一時保管メモリのフラグが‘０’の場合のＤＲＡＭ２３からのデータの読み出し動作を示すタイムチャートである。
【図２０】フレームメモリをデータキャッシュに割り当てて描画した場合、フレームメモリをデータキャッシュに割り当てないで描画した場合のそれぞれについての描画時間を画像の種類別に示す表である。
【符号の説明】
１、１１、２１  ＣＰＵ
２  レジスタ
３  命令キャッシュ
４  データキャッシュ
５  メインメモリ
６  周辺メモリ
１２、２２  ＤＲＡＭコントローラ
１３、２３  ＤＲＡＭ
１４、１６、２６  ラッチ
１５  ＳＥＬ＋カウンタ
１７、１８、２４、２５  バッファ
２７  一時保管メモリ
２８  アドレスラッチ
２９  ＳＥＬ
３０  比較回路
【図１】
0003788034.tif 000002
【図２】
0003788034.tif 000003
【図３】
0003788034.tif 000004
【図４】
0003788034.tif 000005
【図５】
0003788034.tif 000006
【図６】
0003788034.tif 000007
【図７】
0003788034.tif 000008
【図８】
0003788034.tif 000009
【図９】
0003788034.tif 000010
【図１０】
0003788034.tif 000011
【図１１】
0003788034.tif 000012
【図１２】
0003788034.tif 000013
【図１３】
0003788034.tif 000014
【図１４】
0003788034.tif 000015
【図１５】
0003788034.tif 000016
【図１６】
0003788034.tif 000017
【図１７】
0003788034.tif 000018
【図１８】
0003788034.tif 000019
【図１９】
0003788034.tif 000020
【図２０】
0003788034.tif 000021