(57)【特許請求の範囲】
【請求項１】
メモリアービタを介してメモリから読み出した命令又はデータをＣＰＵに供給する半導体集積回路であって、
前記メモリアービタにメモリアクセス要求を発行する周辺回路の有無を監視するアービタアクセス監視手段と、
前記周辺回路がメモリアービタにメモリアクセス要求を発行してない場合に、前記メモリアービタにメモリアクセス要求を発行し、命令又はデータをバーストリードするバーストリード手段と、
メモリからバーストリードされた命令又はデータを前記メモリアービタよりも前記ＣＰＵ側で記憶するバッファ手段と、
前記ＣＰＵから取得した命令のアドレスをデコードするアドレスデコード手段と、
前記アドレスデコード手段がデコードしたアドレスの命令又はデータが前記バッファ手段に記憶されているか否かを判定するアドレス判別手段と、を有し、
命令又はデータが前記バッファ手段に記憶されてない場合は、前記メモリアービタにメモリアクセス要求を発行し、命令又はデータが前記バッファ手段に記憶されている場合は、前記バッファ手段に記憶されている命令又はデータを前記ＣＰＵに供給する、
ことを特徴とする半導体集積回路。
【請求項２】
命令又はデータが前記バッファ手段に記憶されてない場合、前記バーストリード手段よりも優先して、前記アドレスデコード手段がデコードしたアドレスの命令又はデータのメモリアクセス要求を前記メモリアービタに発行するセレクタ手段、を有することを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記アドレス判別手段が、前記ＣＰＵに供給された命令又はデータが前記バッファ手段における最後のアドレスの命令又はデータでないことを検出した場合、前記バーストリード手段が前記メモリアービタにメモリアクセス要求を発行することを禁止するセレクタ手段、を有することを特徴とする請求項１又は２記載の半導体集積回路。
【請求項４】
前記バッファ手段は、命令用とデータ用に区分されている、ことを特徴とする請求項1〜３いずれか１項記載の半導体集積回路。
【請求項５】
前記アドレス判別手段は、前記ＣＰＵと前記アドレスデコード手段を接続する信号線の状態、又は、前記アドレスデコード手段がデコードしたアドレスに基づき、前記バーストリード手段が読み出した信号が命令かデータかを判定し、判定結果に基づき前記バーストリード手段が読み出した信号を命令用又はデータ用の前記バッファ手段に格納する、ことを特徴とする請求項４記載の半導体集積回路。
【請求項６】
前記アービタアクセス監視手段は、前記メモリアービタが前記ＣＰＵよりも優先的にメモリアクセスを許可する周辺回路の有無を監視し、
前記ＣＰＵよりも優先順位の高い周辺回路から前記メモリアービタにメモリアクセス要求が発行されていない場合のみ、前記バーストリード手段は前記メモリアービタにメモリアクセス要求を発行する、ことを特徴とする請求項1〜５いずれか１項記載の半導体集積回路。
【請求項７】
前記アービタアクセス監視手段が監視する周辺回路の設定を受けつける監視周辺回路設定受け付け手段を有する、ことを特徴とする請求項1〜６いずれか１項記載の半導体集積回路。
【請求項８】
前記バッファ手段を前記ＣＰＵのコアの数以上有する、ことを特徴とする請求項1〜７いずれか１項記載の半導体集積回路。
【請求項９】
前記バーストリード手段は、メモリから読み出した命令又はデータを、前記バッファ手段の最後のアドレスの命令又はデータが読み出された前記バッファ手段に記憶する、ことを特徴とする請求項８記載の半導体集積回路。
【請求項１０】
前記バーストリード手段がメモリから読み出した命令又はデータを、
前記ＣＰＵから最も長い時間参照されていない前記バッファ手段に格納することを特徴とする、請求項８記載の半導体集積回路。
【請求項１１】
請求項１〜１０いずれか１項記載の半導体集積回路が搭載された画像形成装置。
【請求項１２】
前記周辺回路は、メモリに記憶された画像データを読み出し、記録媒体に印刷する画像形成部に出力するＤＭＡＣ（Direct Memory Access Controller）である、ことを特徴とする、請求項１０記載の半導体集積回路。
【請求項１３】
メモリには、前記ＣＰＵがＰＤＬデータをレンダリングした画像データ、又は、スキャナが原稿を光学的に読み取った画像データが、前記ＤＭＡＣにより記憶される、請求項１２記載の半導体集積回路。
【請求項１４】
アドレスデコード手段が、ＣＰＵから取得した命令のアドレスをデコードするステップと、
アドレス判別手段が、前記アドレスデコード手段がデコードしたアドレスの命令又はデータがバッファ手段に記憶されているか否かを判定するステップと、
アービタアクセス監視手段が、メモリアービタにメモリアクセス要求を発行する周辺回路の有無を監視するステップと、
バーストリード手段が、命令又はデータが前記バッファ手段に記憶されておらず、かつ、前記周辺回路が前記メモリアービタにメモリアクセス要求を発行してない場合に、前記メモリアービタにメモリアクセス要求を発行し、命令又はデータをバーストリードするステップと、
前記バーストリード手段が、前記メモリアービタからメモリへのアクセス許可を受けてメモリから読み出した命令又はデータを前記バッファ手段に記憶するステップと、
命令又はデータが前記バッファ手段に記憶されている場合、前記バッファ手段に記憶されている命令又はデータを、命令又はデータが前記バッファ手段に記憶されてない場合、メモリから読み出した命令又はデータを前記ＣＰＵに供給するステップと、
を有することを特徴とする情報記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリからデータなどを読み出す半導体集積回路に関し、特に、データ等をプリフェッチする半導体集積回路及び情報記憶方法に関する。
【背景技術】
【０００２】
ＣＰＵがデータをメモリからＣＰＵのキャッシュにプリフェッチする高速化技術が知られている。一般的なプリフェッチは、アプリケーションによってデータ（命令を含め）が必要になる前に、メモリから高速なキャッシュにデータをロードしておくことをいう。プリフェッチの動作はＣＰＵのアーキテクチャによって様々であるが、大きく、ハード的なプリフェッチとソフト的なプリフェッチに分けられる（いずれの場合もＣＰＵがプリフェッチするものとして説明する）。また、プリフェッチを行うことで特にパイプラインの処理効率の向上に効果がある。
【０００３】
しかし、今までのプリフェッチ機能では、ＣＰＵがプリフェッチする際、より優先順位の高いＤＭＡＣ（Direct Memory Access Controller）のメモリアクセスによって、メモリアービタからメモリアクセス権が付与されるまで待たされる等、メモリからのデータ読み出しに時間がかかることがあった。このため、パイプライン処理の効率を十分に向上させることができない場合があった。
【０００４】
また、プリフェッチ命令は投機的に行われるため、プリフェッチされたデータが後続のLoad命令で参照されない場合（分岐予測ミスや分岐した場合）がある。この場合、プリフェッチ命令が再度実行されることがあり、後続のLoad命令を実行するためのＣＰＵによるメモリアクセスを妨げ、プリフェッチを行っているにもかかわらず、ＣＰＵの処理効率が下がってしまう場合がある。
【０００５】
そこで、メモリアービタにおけるＣＰＵの優先順位を上げることにより、ＣＰＵとメモリ間のアクセスの時間を最小化させる技術が開示されている（例えば、特許文献１参照。）。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示されているように、メモリアービタにおけるＣＰＵの優先順位を上げて待ち時間の短縮を図ると、他の処理において不都合が生じるという問題がある。
【０００７】
図１は、メモリアービタにおけるＣＰＵの優先順位を上げた場合の不都合を説明する図の一例である。ＣＰＵとＤＭＡＣはメモリへのアクセスの際メモリアービタの調停を受け、優先順位に従ってメモリにアクセスできるようになる。
【０００８】
このＣＰＵが画像処理装置に搭載されているとして説明する。ＣＰＵはＰＣから送信されたＰＤＬデータをメモリから読み出し画像データ（ラスタデータ）に変換し、メモリに記憶する。または、エンジン部のスキャナが原稿を読み取り、画像処理ＡＳＩＣが画像処理した画像データを、ＤＭＡＣがメモリに記憶する。例えば、ＣＰＵがメモリからＰＤＬデータを読み出す際に、ＤＭＡＣの方が優先順位が高いためメモリアービタに待たされることがある。
【０００９】
ＤＭＡＣは、画像処理ＡＳＩＣに、特定の間隔で一定量のデータをメモリから読み出し転送する。一定量のデータが所定のタイミングで画像処理ＡＳＩＣに送出されないと、一部の画像が欠落するなど異常画像が発生するため、画像データを読み出すＤＭＡＣの優先順位は高く設定されている。
【００１０】
このため、メモリアービタにおけるＣＰＵの優先順位を上げてプリフェッチを優先させると、画像処理のためにＤＭＡＣが画像データをメモリから画像処理ＡＳＩＣに送信する処理の優先順位が下がり、異常画像が発生するおそれを生じさせる。このように、メモリアービタにおける優先順位の変更だけではＣＰＵがメモリからデータをプリフェッチする際の遅延を解決できない。
【００１１】
本発明は、上記課題に鑑み、異常画像を発生させることなく、プリフェッチの読み出し時間を短縮することができる半導体集積回路及び情報記憶方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題に鑑み、本発明は、メモリアービタを介してメモリから読み出した命令又はデータをＣＰＵに供給する半導体集積回路であって、前記メモリアービタにメモリアクセス要求を発行する周辺回路の有無を監視するアービタアクセス監視手段と、前記周辺回路がメモリアービタにメモリアクセス要求を発行してない場合に、前記メモリアービタにメモリアクセス要求を発行し、命令又はデータをバーストリードするバーストリード手段と、メモリからバーストリードされた命令又はデータを前記メモリアービタよりも前記ＣＰＵ側で記憶するバッファ手段と、前記ＣＰＵから取得した命令のアドレスをデコードするアドレスデコード手段と、前記アドレスデコード手段がデコードしたアドレスの命令又はデータが前記バッファ手段に記憶されているか否かを判定するアドレス判別手段と、を有し、命令又はデータが前記バッファ手段に記憶されてない場合は、前記メモリアービタにメモリアクセス要求を発行し、命令又はデータが前記バッファ手段に記憶されている場合は、前記バッファ手段に記憶されている命令又はデータを前記ＣＰＵに供給する、ことを特徴とする。
【発明の効果】
【００１３】
異常画像を発生させることなく、プリフェッチの読み出し時間を短縮することができる半導体集積回路及び情報記憶方法を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】メモリアービタにおけるＣＰＵの優先順位を上げた場合の不都合を説明する図の一例である。
【図２】画像形成装置の概略的な特徴を説明する図の一例である。
【図３】画像形成装置の構成図の一例である。
【図４】ユーザがＤＭＡＣ０〜３の優先順位を設定するレジスタの一例を示す図である。
【図５】代理リードアクセス回路の構成図の一例である。
【図６】命令について連続したアドレス順にプリフェッチするアドレスを算出する手順を説明する図の一例である。
【図７】メモリの構造を模式的に説明する図の一例である。
【図８】代理リードアクセス回路の動作手順の一例を示すフローチャート図である。
【図９】メモリアクセスのタイミングチャート図の一例である。
【図１０】代理リードアクセス回路の構成図の一例である（実施例２）。
【図１１】代理リードアクセス回路の動作手順の一例を示すフローチャート図である（実施例２）。
【図１２】処理手順とデータバッファの状態を模式的に示す図の一例である。
【図１３】処理手順とデータバッファの状態を模式的に示す図の一例である。
【発明を実施するための形態】
【００１５】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【００１６】
図２は、本実施形態の画像形成装置の概略的な特徴を説明する図の一例である。画像形成装置は、従来と比べ、代理リードアクセス回路１８を有する点に特徴の１つがある。代理リードアクセス回路１８は、ＣＰＵ１９が将来必要とすると思われるデータをメモリ２３からバーストリードし、保持しておく（以下、バーストリードのことを「プリフェッチ」という場合がある）。代理リードアクセス回路１８は、データのプリフェッチの前、ＤＭＡＣ（Direct Memory Access Controller）１４のリードアクセス要求を監視し、優先順位の高いＤＭＡＣ１４からの要求がない場合のみ、メモリアービタ１５にリードアクセス要求を発行する。
【００１７】
優先順位の高いＤＭＡＣ１４の転送を代理リードアクセス回路１８の読み出しよりも優先するので異常画像を発生させることがなく、また、ＣＰＵ１９のリードアクセス要求に対して、代理リードアクセス回路１８はＣＰＵ１９の近いところにデータを保持しているので、メモリアービタ１５による調停を受けることなく高速に応答できる。
【００１８】
また、代理リードアクセス回路１８は「とにかく先読み」するのではなく、プリフェッチされたデータがＬｏａｄ命令の対象にならない場合（ヒットミス）、ＣＰＵ１９のリードアクセスを優先させる。このため、従来、生じえた、「先読みされたデータ又は命令が、分岐命令のために次のＣＰＵ１９の命令フェッチでは参照されなかった」という不都合を極力回避することができる。
【実施例１】
【００１９】
〔構成〕
図３は、画像形成装置１００の構成図の一例を示す。画像形成装置１００はネットワークを介してＰＣ２００と接続されている。ＰＣ２００は、ユーザの操作を受け付けてワープロソフトなどが作成した文書をプリンタドライバに送出する。プリンタドライバは、画像形成装置１００が解釈してラスタデータを生成するためのＰＤＬデータを生成する。また、画像形成装置１００がＰＣ２００に画像データを送信することもできる。
【００２０】
画像形成装置１００は、コントローラボード５０、エンジンボード４０、画像読取部３０、及び、画像書き込み部２０を有する。コントローラボード５０、エンジンボード４０の区分や、コントローラボード５０におけるブロックの配置は一例に過ぎない。
【００２１】
図示するように、エンジンボード４０は画像処理ＡＳＩＣ（Application Specific Integrated Circuit）１１を有し、画像処理ＡＳＩＣ１１には画像読取部３０及び画像書き込み部２０が接続されている。
【００２２】
画像読取部３０は、スキャナ装置などであり、画像形成装置１００の主に上部に搭載されている。画像読取部３０は、原稿を載置するためのコンタクトガラスと、露光ランプと、ミラー系、撮像素子（フルカラーＣＣＤ）及び駆動系（ステッピングモータ）等を有する。原稿を読み取る際、露光ランプとミラー系が移動することによって、原稿の画像面の全体が光学的に走査される。原稿の画像面の像はミラー系によって撮像素子に導かれ光電変換され、カラー又は白黒の画像データが生成される。
【００２３】
画像書き込み部２０は、電子写真方式又はインクジェット方式の画像形成を行う。電子写真方式の場合、画像書き込み部２０には、光書き込み部と画像形成部があり、光書き込み部はポリゴンミラー、レンズ、反射ミラー、レンズ等により、感光体が帯電した状態で光を照射して静電潜像を形成する。
【００２４】
画像形成部２０は、感光体の周囲に配置された帯電部、現像部、クリーニング部等を有し、感光体の外周面に色画像データに応じて形成された静電潜像に、トナーを付着させ顕像化する。この後、トナー画像は記録媒体に転写され定着装置で記録媒体に定着される。なお、画像読取部３０と画像書き込み部２０の他、エンジンボード４０にはＦＡＸ装置が接続されていてもよい。
【００２５】
画像処理ＡＳＩＣ１１は、画像読取部３０が読み取って生成した画像データにスキャナγ変換、シェーディング補正などを施しPCI Expressバス１２を介してコントローラボード５０に送信する。また、コントローラボード５０からPCI Expressバス１２を介して送信された画像データに、後述するディスクリプタ情報に基づき画像処理を施す。画像処理は例えば、像域分離判定処理、空間フィルタ、色空間変換処理、変倍処理、プリンタγ変換処理、ディザ処理等である。
【００２６】
コントローラボード５０は、ＣＰＵ１９、ＡＳＩＣ２２及びメモリ２３を有し、ＡＳＩＣ２２はレジスタアクセス回路２１、代理リードアクセス回路１８、ＰＣＩ Express  I/F回路１３、ＤＭＡＣ１４（区別する場合、ＤＭＡＣ０〜３という）、メモリアービタ１５、メモリＩ／Ｆ回路１７、及び、ネットワークI/F回路１６を有する。
【００２７】
ＣＰＵ１９は、画像形成装置１００の全体を制御する。ＣＰＵ１９は、ユーザの操作に応じてアプリケーションを実行してＡＳＩＣ２２及び画像処理用ＡＳＩＣ１１の処理を制御する。アプリケーションは不図示のＲＯＭやＨＤＤ等の不揮発メモリに記憶されている。
【００２８】
メモリ２３は、例えばＤＩＭＭなどの高速なメモリ２３であるがＨＤＤやフラッシュメモリを用いてもよい。
【００２９】
レジスタアクセス回路２１は、ＡＳＩＣ２２内部のレジスタにアクセスする。レジスタアクセス回路２１はコンフィギュレーションレジスタにアクセスし、画像形成装置１００が備える機能を参照したり、省電力モードにおける状態を制御したりする。なお、ＣＰＵ１９はメモリ２３と各種のレジスタを区別しないでアクセスする（同じメモリ空間にある）。
【００３０】
ＰＣＩ Express Ｉ／Ｆ回路１３はコントローラボード５０とエンジンボード４０を高速に接続するシリアルポートである。ＤＭＡＣ１４はＣＰＵ１９を介さずに、周辺機器からのデータをメモリ２３に書き込む、また、メモリ２３から読み出したデータを周辺機器に転送する。４つのＤＭＡＣ０〜３のうち、本実施例ではＤＭＡＣ０、１がメモリ２３から画像データを読み出し画像処理ＡＳＩＣ１１に送信し、ＤＭＡＣ２、３が画像処理ＡＳＩＣ１１から受信した画像データをメモリ２３に書き込む。
【００３１】
ネットワークI/F回路１６は、ＬＡＮ等のネットワークに接続するＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）であり、ＰＣ２００から受信したＰＤＬで記述されたＰＤＬデータをメモリ２３に記憶する。
【００３２】
代理リードアクセス回路１８について詳しくは後述するが、代理リードアクセス回路１８は、メモリ２３から命令又はデータをバーストリード（プリフェッチ）する回路である。
【００３３】
メモリアービタ１５は、予め定められた優先順位に基づき、ＤＭＡＣ０〜３、ＣＰＵ１９、及びネットワークI/F回路１６からのメモリアクセス要求を調停する。メモリアービタ１５は、優先順位に従いラウンドロビンなどの調停方法で、ＤＭＡＣ０〜３やＣＰＵ１９をメモリ２３へのアクセスを許可する。本実施例では、ＤＭＡＣ０，１の優先順位が最も高く、次に、ＣＰＵ１９が高いものとする。ＤＭＡＣ２，３、及び、ネットワークI/F回路１６の優先順位は、本実施例ではどちらが高くてもよいが、例えばＤＭＡＣ２，３の方が高いとする。
【００３４】
〔ＤＭＡＣ０〜３の優先順位〕
ここでどのＤＭＡＣ０〜３の優先順位が高いと見なすかをユーザが設定可能としてもよい。図４は、ＤＭＡＣ０〜３の優先順位を設定するためのレジスタの一例を示す図である。レジスタ０〜３は例えば、メモリアービタ１５に配置されている。ＣＰＵ１９は、電源オン時の初期処理として、レジスタ０〜３にＤＭＡＣ０〜３の優先順位を設定する。初期処理のプログラムは不図示の不揮発メモリに記憶されている。
【００３５】
ＣＰＵは初期処理のプロラムに記述された又は不揮発メモリにパラメータとして記憶されているＤＭＡＣ０〜３の優先順位を、レジスタ０〜３に設定する。優先順位の設定の仕方は、優先順位のそのものを設定する方法や、ＣＰＵ１９に対する相対的な優先順位を設定する方法がある。
【００３６】
前者では、ＣＰＵ１９は例えば優先順位が高いほど小さな値をレジスタ０〜３に設定する。また、ＣＰＵ１９はＣＰＵ１９の優先順位をＣＰＵ用のレジスタに設定してもよいし、ＣＰＵ１９の優先順位はある数値として固定として登録されていてもよい。
【００３７】
後者では、ＣＰＵ１９は、例えば、ＣＰＵ１９よりも優先順位が高いＤＭＡＣ０〜３のレジスタ０〜３にのみフラグ（例えばＦＦ）を設定する。
【００３８】
ユーザは初期処理のプログラムを記述できるので、このようにしてＣＰＵ１９に対するＤＭＡＣ０〜３の優先順位を設定することができる。また、レジスタでなく、画像形成装置１００のオペレーションパネルからＤＭＡＣ０〜３の優先順位の設定を受け付けてもよい。
【００３９】
〔メモリ２３へのアクセス例〕
メモリ２３がアクセスされるのは、例えば、以下のような場合である。本実施例では主にｃ）ＰＤＬデータや命令又はデータ等の読み出しと、ｄ）画像データを読み出しの競合に着目して説明している。
ａ）画像読取部３０が読み取った画像データをＤＭＡＣ２，３がメモリ２３に記憶する場合。
ｂ）ＰＣ２００から送信されたＰＤＬデータをネットワークI/F回路１６がメモリ２３に記憶する場合。
ｃ）ＣＰＵ１９がメモリ２３からＰＤＬデータや命令又はデータ等を読み出す場合、又は、レンダリングした（ラスタデータにした）画像データ等をメモリ２３に書き込む場合。
ｄ）ＤＭＡＣ０，１がメモリ２３から画像データを読み出し、PCI Express I/F回路１３を経由して、画像処理ＡＳＩＣ１１に送信する場合。
【００４０】
〔代理リードアクセス回路〕
図５は、代理リードアクセス回路１８の構成図の一例を示す。本実施例の代理リードアクセス回路１８は、命令又はデータをメモリ２３から読み出す（リードする）回路であり、メモリ２３に書き込む（ライトする）場合は、作動しない。ライトアクセス要求はＣＰＵ１９からメモリアービタ１５に直接出力される。
【００４１】
アドレスデコード部３１は、ＣＰＵ１９からのＬｏａｄ命令又はＷｒｉｔｅ命令（Ｌｏａｄ命令がリードアクセス要求の一例である）のアドレスを解析し、ＡＳＩＣ２２内のレジスタへのアクセスか、又は、メモリ２３へのアクセスであるかを判定する。例えば、アドレスデコード部３１は、相対アドレス指定方式やインデックスアドレス指定のアドレス指定方式に基づき、オペランドから物理的なアドレスを求める。ＡＳＩＣ２２内のレジスタのアドレスは既知なので、求められた物理的なアドレスがレジスタとメモリ２３のどちらを指定するかは容易に判定できる。または、ＣＰＵ１９の命令セットにレジスタアクセス用の命令が搭載されている場合、所定の信号線の常態から判定することもできる。
【００４２】
ＣＰＵ１９からのリード／ライトアクセス要求がレジスタへのアクセスの場合、アドレスデコード部３１は解析したアドレスをレジスタアクセス回路２１に通知する。また、メモリ２３へのアクセスの場合、アドレスデコード部３１は、解析したアドレスをメモリアクセス判定部３２に通知する。このアドレスに記憶されている命令又はデータをリード対象の命令又はデータという。
【００４３】
メモリアクセス判別部３２は、ＣＰＵ１９からのリードアクセス要求が命令リードアクセスなのか、データリードアクセスなのかを判定する。この判定は、例えば、ＣＰＵ１９がＲＩＳＣ型のＣＰＵの場合、ＲＩＳＣ型のＣＰＵ１９のピンである「System Interface  RdType」の信号の状態により判定される。または、メモリ２３における命令（プログラム）のアドレス範囲が固定であれば、アドレスデコード部３１が解析したアドレスが、メモリ２３のデータ領域内か命令領域内かにより判定できる。
【００４４】
また、メモリアクセス判別部３２は、リード対象の命令又はデータが命令バッファ３４又はデータバッファ３３に保持されているかを判別する。このため代理リードアクセス回路１８は、メモリ２３から読み出し、データバッファ３３又は命令バッファ３４に記憶している命令又はデータのアドレスを不図示のレジスタ等に記憶する。メモリアクセス判別部３２は、アドレスデコード部３１が解析したアドレスが、レジスタに記憶された範囲に含まれるか否かに基づき、リード対象の命令又はデータが命令バッファ３４又はデータバッファ３３に保持されているかを判別する。リード対象の命令又はデータが命令バッファ３４又はデータバッファ３３に保持されていない場合、セレクタ３８にセレクタ信号を送出する。
【００４５】
また、メモリアクセス判別部３２は、ＣＰＵ１９がリード対象としたデータが、命令バッファ３４又はデータバッファ３３に記憶されているアドレスの最後の命令又はデータか否かを判定する。次述する代理ＤＭＡＣ３７にとって、命令バッファ３４又はデータバッファ３３に格納された命令又はデータのアドレスは全てが明らかなので、命令バッファ３４又はデータバッファ３３に格納されている最後の命令又はデータのアドレスも明らかである。したがって、ＣＰＵ１９がリード対象としたデータが、最後の命令又はデータのアドレスと一致するか否かにより判定される。
【００４６】
ＣＰＵ１９がリード対象としたデータが、命令バッファ３４又はデータバッファ３３に記憶されている命令又はデータのうち、最後のアドレスの命令又はデータの場合、メモリアクセス判定部３２はセレクタ３８にセレクタ信号を送出せず、代理ＤＭＡＣ３７にバーストリードを許可する。換言すると、ＣＰＵ１９がリード対象としたデータが、命令バッファ３４又はデータバッファ３３に記憶されている命令又はデータのうち、最後のアドレスの命令又はデータでない場合、メモリアクセス判定部３２はセレクタ３８にセレクタ信号を出力する。
【００４７】
なお、命令バッファ３４とデータバッファ３３の２種類のバッファを備える理由は、プログラムの局所性により、命令専用のバッファを設けることでＣＰＵ１９が命令をフェッチする際の処理効率を向上させるためである。すなわち、ＣＰＵ１９は、命令を読み出す際は命令バッファ３４の命令にほぼ連続して読み出すことができる。データバッファ３３についても同様である。例えば、ＣＰＵ１９が命令のリードアクセス要求とデータのリードアクセス要求を交互に発行した場合にも、毎回バッファの内容を更新する必要を無くすことができ、極力、データバッファ３３又は命令バッファ３４の中からＣＰＵ１９にデータを供給できる。
【００４８】
なお、データバッファ３３と命令バッファ３４は、ＦＦ（フリップフロップ回路）、ＳＲＡＭなどの比較的高速な記憶手段であるが、構成手段は問わない。
【００４９】
アービタアクセス状況監視部３５は、ＡＳＩＣ２２内部の各ＤＭＡＣ０〜３とメモリアービタ１５間のリードアクセス要求の有無を監視する。すなわち、ＣＰＵ１９よりも優先順位の高いＤＭＡＣ０，１からのリードアクセス要求の有無を判定する。アービタアクセス状況監視部３５は、代理リードアクセス回路１８より優先順位が高い周辺機器がリード／ライトアクセス要求を出していない場合に限り、代理ＤＭＡＣ３７にメモリ２３からのリードアクセスを許可する。
【００５０】
プリフェッチアドレス算出部３６は、過去のＣＰＵ１９からのリードアクセスを基に、代理リードアクセス回路１８が読み出すべきアドレスを算出する。
図６は、アドレスの算出方法を模式的に説明する図の一例である。よく知られている算出方法は、すでに読み出した命令のアドレスに連続するアドレスを読み出すアドレスとする算出方法、一定間隔のデータのアドレスの読み込みが継続すると次も同じ間隔を空けたアドレスを読み出すアドレスとして算出する方法、過去にＣＰＵ１９が不連続に読み出した命令のアドレスを記憶しておきそれを参考に次に読み出すアドレスを算出する方法、等がある（分岐の学習）。
【００５１】
図６では命令について、連続したアドレス順にプリフェッチするアドレスを算出する手順を説明する図の一例である。命令バッファ３４にはメモリ２３のアドレス１００〜２００の命令が記憶されている。よって、命令バッファ３４のサイズは１００バイトである。この場合、プリフェッチアドレス算出部３６は、アドレス２００に連続したアドレス２００から３００をプリフェッチするアドレスとして算出する。
【００５２】
また、図６ではデータについて、一定間隔のアドレス毎にプリフェッチするアドレスを算出する手順を示す。データバッファ３３にはアドレス１１００〜１２００のデータ（Ｄ４）が記憶されている。また、サイズは１００バイトである。さらに、プリフェッチアドレス算出部３６は、不図示のレジスタにＣＰＵ１９がアクセスした過去のいくつかのアドレスを記憶している。図ではＣＰＵ１９がアドレス７００と１１００のデータにアクセスした。この場合、プリフェッチアドレス算出部３６は、ＣＰＵ１９が一定間隔でメモリ２３にアクセスするとしてアドレス１１００＋４００を先頭アドレスに、１５００から１６００をプリフェッチするアドレスとして算出する。
【００５３】
プリフェッチアドレス算出部３６は、算出したアドレスを代理ＤＭＡＣ３７に通知する。代理ＤＭＡＣ３７は、アービタアクセス状況監視部３５がメモリ２３からのリードアクセスを許可した場合に限り、メモリアービタ１５に対してリードアクセス要求を発行する。この時、代理リードアクセス回路１８の代理ＤＭＡＣ３７はメモリ２３に対してバーストアクセスを行うため、通常のＣＰＵ１９アクセスに比べてメモリ利用効率が上がるという点でも、処理速度の向上に効果がある。
【００５４】
代理ＤＭＡＣ３７はメモリ２３から読み出した命令又はデータを、命令バッファ３４又はデータバッファ３３に格納する。本実施例では、命令バッファ３４又はデータバッファ３３のサイズはバーストリードの読み込みサイズと同じとする。よって、代理ＤＭＡＣ３７はバーストリードした命令又はデータをそのまま命令バッファ３４又はデータバッファ３３に上書きする。
【００５５】
命令バッファ３４又はデータバッファ３３のサイズがバーストリードの読み込みサイズより大きい場合（かつ、命令バッファ３４又はデータバッファ３３に空きがない場合）、代理ＤＭＡＣ３７は、ＣＰＵ１９が参照してから最も時間の経過した命令又はデータ、プリフェッチされてから最も時間の経過した命令又はデータ等を排除する。
【００５６】
セレクタ３８は、セレクタ信号に基づき、代理ＤＭＡＣ３７又はアドレスデコード部３１のいずれかのリードアクセス要求を選択的にメモリアービタ１５に出力する。
・メモリアクセス判別部３２からのセレクト信号が出力された場合、従来通りにＣＰＵ１９からのリードアクセス要求をメモリアービタ１５に直接出力する。
・メモリアクセス判別部３２からのセレクト信号が出力されない場合、代理ＤＭＡＣ３７のリードアクセス要求をメモリアービタ１５に直接出力する。
【００５７】
したがって、代理ＤＭＡＣ３７は、リードアクセスにおいて、ＣＰＵ１９の次の優先順位を持っているとも言える。
【００５８】
〔メモリ２３の構成例〕
図７は、本実施例のメモリ２３の構造を模式的に説明する図の一例である。メモリ２３にはディスクリプタ情報を記憶するためのディスクリプタ領域が設けられている。ディスクリプタ情報は、処理されるべき画像データのアドレスと、処理されるべき画像データに使用する画像処理パラメータが格納されているアドレス等が記述される。
【００５９】
なお、画像処理パラメータは、例えば帯電電位、現像バイアス値、定着温度設定値、中間調処理、カラー補正など、ＣＰＵ１９が装置の動作のために設定する各種のパラメータである。
【００６０】
ＣＰＵ１９は、例えば起動時に、各ＤＭＡＣ０〜３用のディスクリプタ情報をメモリ２３に書き込む。ＣＰＵ１９にとってディスクリプタ領域は既知であり、必要であれば領域を拡大・縮小できる。ＣＰＵ１９は、ＤＭＡＣ０〜３にそれぞれのディスクリプタ情報のアドレスを書き込む等で通知する。
【００６１】
ＤＭＡＣ０〜３はそれぞれディスクリプタ情報を読み出して自身のレジスタに設定する。例えば、ユーザがコピーする場合、画像読取部３０に原稿をセットして、コピー条件を設定する。ユーザがスタートボタンを押下すると、コピーのアプリケーションで定まるＤＭＡＣ２，３のいずれかが、メモリアービタ１５の調停を受けた後、生成された画像データをディスクリプタ情報に基づきメモリ２３に記憶する。ＤＭＡＣ２，３は画像データをメモリ２３に記憶したことをＤＭＡＣ０，１に割り込みなどにより通知する（ＣＰＵ１９に通知してもよい）。
【００６２】
これによりＤＭＡＣ０，１はメモリアービタ１５による調停を受けた後、ディスクリプタ情報に基づきメモリ２３から画像データを読み出すことができる。
【００６３】
〔動作手順〕
図８は、代理リードアクセス回路１８の動作手順の一例を示すフローチャート図である。まず、代理リードアクセス回路１８はＣＰＵ１９からリードアクセス要求を受け付ける（Ｓ1）。
【００６４】
アドレスデコード部３１は、リードアクセス要求のアドレスを解析して、ＣＰＵ１９のアクセス対象空間がレジスタ空間か又はメモリ空間であるかを判定する（Ｓ２）。
【００６５】
メモリ空間へのアクセスでない場合（Ｓ２のＮｏ）、レジスタ空間へのアクセスなので、レジスタアクセス回路２１にリードアクセス要求とアドレスを出力する（Ｓ１４）。レジスタアクセス回路２１はＡＳＩＣ２２内部の各レジスタにアクセスする。
【００６６】
メモリ空間へのアクセスの場合（Ｓ２のＹｅｓ）、アドレスデコード部３１はメモリアクセス判別部３２にリードアクセス要求とアドレスを出力する（Ｓ３）。
【００６７】
メモリアクセス判別部３２は、アクセス内容を解析する（Ｓ４）。この解析結果に基づき、メモリアクセス判別部３２は、ＣＰＵ１９からのリードアクセスが命令リードアクセスなのか、データリードアクセスなのか、及び、命令バッファ３４又はデータバッファ３３にリード対象の命令又はデータが記憶されているか否か判定する（Ｓ５）。
【００６８】
命令バッファ３４又はデータバッファ３３にリード対象のデータが記憶されていない場合（Ｓ５のＮｏ）、メモリアクセス判別部３２は、セレクタ３８にセレクタ信号を出力することで、メモリアービタ１５にリードアクセス要求を出力する（Ｓ６）。すなわちセレクタ３８は、ＣＰＵ１９からのリードアクセスをそのままメモリアービタ１５に出力する。
【００６９】
メモリアービタ１５によりメモリ２３へのアクセス権が得られると、代理リードアクセス回路１８はメモリ２３から命令又はデータを読み出し、ＣＰＵ１９に出力する（Ｓ７）。
【００７０】
ここまででＣＰＵ１９からの１つのリードアクセス要求の処理が終了したことになり、ＣＰＵ１９からは次のリードアクセス要求が出力される可能性がある。
【００７１】
ステップＳ７の時点でＣＰＵ１９から次のリードアクセス要求が出力された場合（Ｓ８のＹｅｓ）、処理はステップＳ１に戻り、次のリードアクセス要求に対し同様の処理が施される。
【００７２】
ステップＳ７の時点でＣＰＵ１９から次のリードアクセス要求が出力されない場合（Ｓ８のＮｏ）、アービタアクセス状況監視部３５は、ＣＰＵ１９よりも優先順位の高いＤＭＡＣ０，１がメモリアービタ１５にリードアクセス要求を発行しているか否かを判定する（Ｓ９）。
【００７３】
ＣＰＵ１９よりも優先順位の高いＤＭＡＣ０，１がメモリアービタ１５にリードアクセス要求を発行している場合（Ｓ９のＹｅｓ）、代理ＤＭＡＣ３７はメモリアービタ１５にアクセスできないので、処理はステップＳ８に戻る。この待機状態により、出力画像が異常になることを防止できる。
【００７４】
また、優先順位の高いＤＭＡＣ０，１からのリードアクセス要求がなくならないまま、ＣＰＵ１９が次のリードアクセス要求を出力した場合（Ｓ８のＹｅｓ）、代理リードアクセス回路１８はリードアクセス要求を受け付ける（Ｓ１に戻る）。
【００７５】
このように、次のリードアクセス要求が発行されている場合には代理リードアクセス回路１８がメモリアービタ１５にリードアクセス要求を発行しないのは、ＣＰＵ１９のリードアクセス要求が分岐命令によるものであることを考慮したためである。分岐命令が実行されると、分岐先のアドレスが後続のアドレス部分に包含されている可能性は低く、代理リードアクセス回路１８の発行するリードアクセス要求が、分岐命令により本来アクセスすべき領域へのリードアクセスの邪魔をするおそれがある。この場合、代理リードアクセス回路１８の発行したリードアクセス要求は冗長なものとなり、命令バッファ３４又はデータバッファ３３の利用効率を下げるばかりでなく、ＣＰＵ１９のリードアクセス要求の処理の遅延を引き起こす。本実施例の代理リードアクセス回路１８はＣＰＵ１９のリードアクセスを優先するので、ＣＰＵ１９による分岐先のアドレスのリードアクセスを邪魔することがない。
【００７６】
ＣＰＵ１９よりも優先順位の高いＤＭＡＣ０，１がメモリアービタ１５にリードアクセス要求を発行していない場合（Ｓ９のＮｏ）、ステップＳ６のＣＰＵ１９がリードアクセス要求した際のアドレスに基づき、プリフェッチアドレス算出部３６が、ＣＰＵ１９が次にアクセスするであろうアドレスを算出する。このアドレスは、例えば、「ＣＰＵ１９がリードアクセス要求した際のアドレス＋１００」である。
【００７７】
プリフェッチアドレス算出部３６は、算出したアドレスを代理ＤＭＡＣ３７に出力する。これにより、代理ＤＭＡＣ３７は、リードアクセス要求をメモリアービタ１５に出力する（Ｓ１０）。
【００７８】
メモリアービタ１５は、ＤＭＡＣ１，０がリードアクセスを発行しないので、代理リードアクセス回路１８にアクセス権を与える。よって、代理ＤＭＡＣ３７は、ＤＭＡＣ１，０からリードアクセス要求がないタイミングで、ＣＰＵ１９が要求するアドレスから算出されたアドレスに対するプリフェッチのためのリードアクセス要求を発行することができる。
【００７９】
バーストリードを行うことで、ＣＰＵ１９のシングルアクセスに比べてメモリ２３の利用効率をよくすることができ、極力、多くのデータをＣＰＵ１９に近いバッファに保持しておくことができる。
【００８０】
次に、代理ＤＭＡＣ３７は、メモリ２３から読み出した命令又はデータを、命令バッファ３４又はデータバッファ３３のいずれかに格納する（Ｓ１１）。
【００８１】
ステップＳ５に戻り、命令バッファ３４又はデータバッファ３３にリード対象のデータが記憶されている場合（Ｓ５のＹｅｓ）、代理リードアクセス回路１８は命令バッファ３４又はデータバッファ３３に記憶されている命令又はデータをＣＰＵ１９に出力する（Ｓ１２）。これにより、ＣＰＵ１９は、メモリアービタ１５がリードアクセス要求を受付けまでの待ち時間、メモリアクセスにおけるリード時間を削減できるため、ＣＰＵ１９の処理効率を向上させることができる。
【００８２】
次に、メモリアクセス判別部３２は、ＣＰＵ１９がリードした命令又はデータのアドレスが、命令バッファ３４又はデータバッファ３３に記憶されているアドレスの最後の命令又はデータか否かを判定する（Ｓ１３）。
【００８３】
この判定により、代理リードアクセス回路１８は新たに後続の命令又はデータを命令バッファ３４又はデータバッファ３３に記憶するか否かを判定することができる。すなわち、Ｓ１３の判定がＹｅｓならば、命令バッファ３４又はデータバッファ３３に命令又はデーは全て読み出された可能性が高いので、バーストリードにより置き換えることが好ましい。
【００８４】
命令バッファ３４又はデータバッファ３３に記憶されているアドレスの最後の命令又はデータが参照されていない場合（Ｓ１３のＮｏ）、図８の処理は終了する。
【００８５】
命令バッファ３４又はデータバッファ３３に記憶されているアドレスの最後の命令又はデータが参照されている場合（Ｓ１３Ｙｅｓ）、処理はステップＳ８に進む。したがって、以降はＣＰＵ１９から次のリードアクセス要求がなく（Ｓ８のＮｏ）、かつ、ＣＰＵ１９よりも優先順位の高いＤＭＡＣ０，１がメモリアービタ１５にリードアクセス要求を発行していない場合（Ｓ９のＮｏ）、プリフェッチが可能になる。したがって、Ｓ５で命令バッファ又はデータバッファに記憶されていないと判定される前に、プリフェッチすることが可能になる。
【００８６】
図９は、メモリアクセスのタイミングチャート図の一例を示す。このタイミングチャート図は図８のステップＳ９において、ＣＰＵ１９からのリードアクセス要求に対し、代理ＤＭＡＣ３７がメモリアービタ１５にリードアクセス要求を発行可能か否かを、アービタアクセス状況監視部３５が判定する処理に相当する。
【００８７】
図９の「System I/F」は、ＣＰＵ１９とＡＳＩＣ２２間のI/Fの状態を示し、「メモリアービタの入出力信号」は、メモリアービタ１５に入力される信号とメモリアービタ１５が出力する信号を示す。なお、図の1〜１４の整数値はクロックの経過を示す。
【００８８】
「SysAD」はリード又はライトのアドレスを示し、「SysCmd」はＣＰＵ１９からのリード／ライトのアクセス内容（コマンド）であり、「ValidOut」はＣＰＵ１９から有効なコマンド及びアドレスが出力されていることを示すＬｏｗアクティブな信号であり、「RdRdy」はＡＳＩＣ２２がＣＰＵ１９からのリードアクセス要求を受付け可能であることを示すＬｏｗアクティブな信号である。
【００８９】
ＤＭＡＣ_ｎ（ｎ：０〜３）、及び、代理ＤＭＡＣ３７に対応づけられた「MCmd」、「SCmdAccept」は、ＤＭＡＣ０〜３とメモリアービタ１５間の信号である。知られた信号体系としてOCP（Open Core Protocol）I/Fに準拠した信号が知られている。「MCmd」は、ＤＭＡＣ０〜３がメモリアービタ１５に対して発行するリード／ライトのアクセス内容（コマンド）を、「SCmdAccept」はメモリアービタ１５がリード／ライトのアクセスを受け付けたことを示す信号である。
【００９０】
なお、ＤＭＡＣ０、ＤＭＡＣ１は画像データの出力に関わるＤＭＡＣ１４で最も優先順位が高く、次に、ＣＰＵ１９、代理リードアクセス回路１８、ＤＭＡＣ２、ＤＭＡＣ３という順に優先順位が高いものとする。
【００９１】
以下、クロック番号の順番にタイミングチャートの説明をする。
２：ＣＰＵ１９が、「SysCmd」に"Read"を、「SysAD」に"Addr"を出力しているので、ＣＰＵ１９がメモリ２３のリードアクセス要求をＡＳＩＣ２２に発行している。
３：ＡＳＩＣ２２はリードアクセス要求を受け付け、一旦、RdRdyをディアサートする。これにより、ＡＳＩＣ２２はＣＰＵ１９から次のリードアクセスを受け付けられなくなる。RdRdyのディアサートにより、SysAdに出力されたアドレス情報は代理リードアクセス回路１８のプリフェッチアドレス算出部３６に保持される。
４：遅延クロック
５：「DMAC_0 MCmd」等の"Read Req"に示すように、ＤＭＡＣ０、ＤＭＡＣ１、ＤＭＡＣ２、及び、ＤＭＡＣ３がリードアクセス要求を発行する。説明の便宜上、４つのＤＭＡＣ０〜３のアクセス要求のタイミングを同一タイミングとしたが、各ＤＭＡＣ０〜３のアクセス要求の発行タイミングに特に、制約はない。
６：アービタは優先順位の高いＤＭＡＣ０のリードアクセス要求を受け付け、「DMAC_0 SCmdAccept」に"Ack"を出力する。
７：このクロック７の間にＤＭＡＣ０がメモリ２３からデータを読み出したとする。
８：次に、メモリアービタ１５は次に優先順位の高いＤＭＡＣ１のリードアクセス要求を受け付け、「DMAC_1 SCmdAccept」に"Ack"を出力する。
９：この時点で、ＣＰＵ１９からのリードアクセス要求はなく（図８のＳ８）、アービタアクセス状況監視部３５は、エンジンボード４０に出力されるデータに関わるＤＭＡＣ０、ＤＭＡＣ１のリードアクセス要求は存在しないと判定する（図８のＳ９）。
【００９２】
そして、アービタアクセス状況監視部３５は代理ＤＭＡＣ３７にリードアクセス要求の発行を許可し、代理ＤＭＡＣ３７はメモリアービタ１５にリードアクセス要求を発行する（図８のＳ１０）。代理ＤＭＡＣ３７がアクセスするアドレスは上記プリフェッチアドレス算出部３６が算出したアドレスが使用される。
１０：次に、メモリアービタ１５は次に優先順位の高いＤＭＡＣ２のリードアクセス要求を受け付け、「DMAC_2 SCmdAccept」に"Ack"を出力する。
１１：このクロック１１の間にＤＭＡＣ２がメモリ２３からデータを読み出したとする。
１２：次に、メモリアービタ１５は次に優先順位の高い代理ＤＭＡＣ３７のリードアクセス要求を受け付け、「代理DMAC SCmdAccept」に"Ack"を出力する。
１３：このクロック１３の間に代理ＤＭＡＣ３７がメモリ２３からデータを読み出したとする。
１４：最後に、メモリアービタ１５は一番優先順位の低いＤＭＡＣ３のリードアクセス要求を受け付け、「DMAC_3 SCmdAccept」に"Ack"を出力する。
【００９３】
以上説明したように、本実施例の画像形成装置１００は、優先順位の高いＤＭＡＣ０，１のメモリアクセスを代理リードアクセス回路１８の読み出しよりも優先するので異常画像を発生させることがない。また、ＣＰＵ１９のリードアクセス要求に対して、代理リードアクセス回路１８はＣＰＵ１９の近いところにデータを保持しているので、メモリアービタ１５による調停を受けることなく高速に応答できる。また、代理リードアクセス回路１８にデータがない場合、ＣＰＵ１９のアクセスを優先するので、代理リードアクセス回路１８がプリフェッチすることによりＣＰＵ１９のアクセスが阻害されることがない。
【実施例２】
【００９４】
本実施例ではＣＰＵ１９がマルチコアの場合の画像形成装置１００について説明する。
図１０は、代理リードアクセス回路１８の構成図の一例を示す。図１０において図５と同一部の説明は省略する。アドレスデコード部３１には１つのＣＰＵ１９が接続されているがこのＣＰＵ１９が２つのコアを有する。
【００９５】
また、コアの数に合わせて、データバッファ３３及び命令バッファ３４も２つずつ存在する。コアの数だけデータバッファ３３及び命令バッファ３４があることで、それぞれのコアから交互にメモリリードアクセスが来ても、バッファの中身を入れ替える必要がなく、ＣＰＵ１９の処理効率を向上させることができる。
【００９６】
ＣＰＵ１９のコアが３つ以上の場合は、データバッファ３３及び命令バッファ３４も３つ以上にすればよい。なお、コアと命令バッファ３４又はデータバッファ３３の対応は固定でなく、コア０がデータバッファ１及び命令バッファ１からデータ又は命令を読み出すことも、データバッファ０及び命令バッファ０から命令又はデータを読み出すこともある。コア１についても同様である。
【００９７】
図１１は、代理リードアクセス回路１８の動作手順の一例を示すフローチャート図である。図１１において図８と同等のステップには同じステップ番号を付した。主に実施例１と異なる点を説明する。
【００９８】
図１１のフローチャート図はステップＳ５以下で大きく２つに処理が分かれている点で図８と異なる。
【００９９】
ステップＳ５のＮｏ以下では、データバッファ０，１及び命令バッファ０，１が参照されない。そして、ステップＳ８とＳ９の条件をクリアすると、ステップＳ１０で代理ＤＭＡＣ３７がプリフェッチする。
【０１００】
この後、本実施例の代理ＤＭＡＣ３７は、メモリアクセス判別部３２によるデータリードか命令リードかの判定結果に基づき、データバッファ０，１又は命令バッファ０，１に空きがあるか否かを判定する（Ｓ２１）。
【０１０１】
そして、データバッファ０，１又は命令バッファ０，１に空きがある場合（Ｓ１１のＹｅｓ）、すでに命令又はデータが格納されているデータバッファ０，１又は命令バッファ０，１に、命令又はデータを格納する必要がないので、代理ＤＭＡＣ３７は空いているデータバッファ０，１又は命令バッファ０，１にプリフェッチした命令又はデータを格納する（Ｓ１１）。よって、コア０又はコア１のどちらかが停止状態の場合、コア０又はコア１のどちらかがデータバッファ０，１の全て又は命令バッファ０，１を、占有することもある。
【０１０２】
データバッファ０，１又は命令バッファ０，１に空きがない場合（Ｓ１１のＮｏ）、すでに命令又はデータが格納されているデータバッファ０，１又は命令バッファ０，１のいずれかにプリフェッチした命令又はデータを格納するため、代理ＤＭＡＣ３７は、最も長い時間ＣＰＵ１９が参照していない命令バッファ３４又はデータバッファ３２に、メモリ２３から読み出した命令又はデータを格納する（Ｓ２２）。
【０１０３】
ステップＳ５に戻り、Ｓ５のＹｅｓ以下では、データバッファ０，１及び命令バッファ０，１が参照され、代理リードアクセス回路１８が命令バッファ０，１又はデータバッファ０，１からリード対象のデータをＣＰＵ１９に出力する（Ｓ１２）。
【０１０４】
次に、ステップＳ１３で最後の命令又はデータが参照された場合、バッファ内に保持されているデータが必要ないと判断されるのは同じだが、本実施例ではステップＳ２３〜Ｓ２６が実行される。ステップＳ２３〜２５はＳ８〜Ｓ１０と同等であるが、ステップＳ２１とＳ２６の処理が異なるため、ステップＳ２３〜２６が分岐されている。これは、複数あるデータバッファ０、１及び命令バッファ０，１を、ステップＳ２２の処理により、コア０又はコア１が占有することを回避するためである。
【０１０５】
すなわち、ステップＳ２５によって、代理ＤＭＡＣ３７は、リードアクセス要求を発行して命令又はデータをバーストリードし、最後に参照したデータバッファ０、１及び命令バッファ０，１に格納することができる（Ｓ２６）。
【０１０６】
以上のような処理により、ＣＰＵ１９にコアが複数あり、代理リードアクセス回路１８が複数のデータバッファ０，１及び命令バッファ０，１を有する場合、データバッファ０，１及び命令バッファ０，１を有効に利用できる。
【０１０７】
図１２は、処理手順とデータバッファの状態を模式的に示す図の一例である。図１２では時間の経過に対するコア０，１の動作を示す。命令バッファについては省略するが、フローが同じなので命令バッファの状態も図１２と同じである。
【０１０８】
まず、データバッファ０にコア０のリードアクセスに起因して算出されたアドレスのデータ（Ｓ１０）が格納され、データバッファ１にコア１のリードアクセスに起因して算出されたアドレスのデータ（Ｓ１０）が格納されているものとする。
【０１０９】
図１２（ａ）では、時刻ｔ１にコア０がデータバッファ０からデータを読み出す（Ｓ１２）。読み出されたデータがデータバッファ０の最後のデータでない場合、処理はＳ１に戻るので、コア０の処理は終了する。一方、時刻ｔ２にコア１がデータバッファ１からデータを読み出す（Ｓ１２）。読み出されたデータがデータバッファ１の最後のデータでない場合、処理はＳ１に戻るので、コア１の処理は終了する。
【０１１０】
次に、図１２（ｂ）に示すように、コア０がメモリ２３からデータを読み出したとする（Ｓ６）。そして、ステップＳ８，９の条件を満たしコア０がプリフェッチ（バーストリード）した場合（Ｓ１０）、代理ＤＭＡＣ３７は参照した時刻が最も古いデータバッファ０にデータを格納する（Ｓ２２）。コア１についても同様であり、代理ＤＭＡＣ３７は参照した時刻が最も古いデータバッファ１にデータを格納する（Ｓ２２）。
【０１１１】
一方、図１２（a）の後、図１２（ｃ）に示すように、コア１がコア０よりも先にメモリ２３からデータを読み出したとする（Ｓ６）。この場合は、代理ＤＭＡＣ３７は参照した時刻が最も古いデータバッファ０に、コア１のリードアクセスに起因して算出されたアドレスのデータを格納する（Ｓ２２）。したがって、この時（時刻ｔ５）ではデータバッファ０，１のどちらもコア１が占有する形になる。
【０１１２】
しかし、次に、コア０がメモリ２３からデータを読み出すことによって（Ｓ６）、代理ＤＭＡＣ３７は参照した時刻が最も古いデータバッファ１に、コア０のリードアクセスに起因して算出されたアドレスのデータを格納する（Ｓ２２）。したがって、コア０，１がそれぞれ交互に(図１２（ｂ）のように)リードアクセスを発行する場合には、コア０はデータバッファ０を、コア１はデータバッファ１を使用でき、プリフェッチしたデータを読み出せるので処理効率が向上する。
【０１１３】
また、図１２（ｃ）のように、ある期間はコア０がデータバッファ０、１を占有し、ある期間はコア１がデータバッファ０，１を占有する場合は、ヒット率が向上するので、処理効率が向上する。処理効率が低下するのは、コア０とコア１が２回ずつリードアクセスを発行し、かつ、３回目のリードアクセスでＳ５でＮｏと判定されるような特殊な状況だけである。
【０１１４】
次に、データバッファ０、１の最後のデータがリードされた場合を説明する。
図１３（ａ）では、時刻ｔ１にコア０がデータバッファ０から最後のデータを読み出す（Ｓ１２）。読み出されたデータがデータバッファ０の最後のデータの場合、処理はＳ２３〜Ｓ２５に移るので、ステップＳ２３，２４の条件を満たしコア０がプリフェッチ（バーストリード）した場合（Ｓ２５）、代理ＤＭＡＣ３７はコア０のリードアクセスに起因して算出されたアドレスのデータをデータバッファ０に格納する（Ｓ２６）。
【０１１５】
仮に、Ｓ２５の後、ステップ２１に移動したと仮定すると、代理ＤＭＡＣ３７は、データがリードされた時刻が最も古いデータバッファ１にデータを格納してしまうが、Ｓ２３〜Ｓ２５の処理により、必要なくなったデータを適切に書き換え、かつ、コア１が読み出す可能性の高いデータをデータバッファ１に残しておくことができる。
【０１１６】
図１３（ｂ）は、コア１がデータバッファ１から最後のデータを読み出した場合を示すが、この場合も同じである。すなわち、代理ＤＭＡＣ３７はコア１のリードアクセスに起因して算出されたアドレスのデータをデータバッファ１に格納する（Ｓ２６）。
【０１１７】
以上説明したように本実施例の画像形成装置１００は、実施例１の効果加え、コアが複数の場合には、コアの数だけデータバッファ及び命令バッファを備えるので、それぞれのコアから交互にリードアクセス要求が発行されても、バッファの中身を入れ替える必要がなく、ＣＰＵ１９の処理効率を向上させることができる。
【符号の説明】
【０１１８】
１４      ＤＭＡＣ
１５      メモリアービタ
１６      ネットワークI/F回路
１７      メモリI/F回路
１８      代理リードアクセス回路
１９      ＣＰＵ
２０      画像書き込み部
２２      ＡＳＩＣ
２３      メモリ
３０      画像読取部
３１      アドレスデコード部
３２      メモリアクセス判定部
３３      データバッファ
３４      命令バッファ
３５      アービタアクセス状況監視部
３６      プリフェッチアドレス算出部
３７      代理ＤＭＡＣ
３８      セレクタ
１００    画像形成装置
【先行技術文献】
【特許文献】
【０１１９】
【特許文献１】特開２０００−４７９７５号公報
【図１】
0005540979.tif 000002
【図２】
0005540979.tif 000003
【図３】
0005540979.tif 000004
【図４】
0005540979.tif 000005
【図５】
0005540979.tif 000006
【図６】
0005540979.tif 000007
【図７】
0005540979.tif 000008
【図８】
0005540979.tif 000009
【図９】
0005540979.tif 000010
【図１０】
0005540979.tif 000011
【図１１】
0005540979.tif 000012
【図１２】
0005540979.tif 000013
【図１３】
0005540979.tif 000014