(57)【要約】【課題】効率的にバスを使用すること。【解決手段】バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、を含む、バス制御方法。【選択図】図７
2010272013.tif 000002
【特許請求の範囲】
【請求項１】
バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、
前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、
を含む、バス制御方法。
【請求項２】
前記注目バスマスター以外のアクセス要求の処理は、前記バスにアクセスする優先度が高いバスマスターの順に行われる、請求項１に記載のバス制御方法。
【請求項３】
前記リクエスト許可数は、前記注目バスマスターの保証帯域に対応するクロック数から１回のデータ転送に要するクロック数を減じた値を、前記１回のデータ転送に要するクロック数で除した値である、請求項１又は２に記載のバス制御方法。
【請求項４】
前記注目バスマスター以外のアクセス要求が処理される毎に前記リクエスト数を減算し、該リクエスト数が０になったときに前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理されたと判定する、請求項１〜３のいずれかに記載のバス制御方法。
【請求項５】
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することは、前記注目バスマスターの前回分のアクセス要求が処理された後に行われる、請求項１〜４のいずれかに記載のバス制御方法。
【請求項６】
前記注目バスマスター以外のバスマスターのアクセス要求が前記リクエスト数と同数処理された後であって前記注目バスマスターのアクセス要求の処理が行われる前に、前記注目バスマスターよりも前記優先度が高い上位バスマスターの処理が行われた場合、該上位バスマスターの処理が行われた数だけ前記注目バスマスターのリクエスト許可数を減らすことをさらに含む、請求項１〜５のいずれかに記載のバス制御方法。
【請求項７】
前記バスマスターのアクセス要求は、ＤＭＡ転送を行うためにバス権を獲得するためのアクセス要求である、請求項１〜６のいずれかに記載のバス制御方法。
【請求項８】
前記複数のバスマスターのうち少なくとも一つのバスマスターは、ＣＰＵに関連するバスマスターである、請求項１〜７のいずれかに記載のバス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バス制御方法に関する。
【背景技術】
【０００２】
ＣＰＵを用いたＤＣモータ制御では、一般に、ＲＯＭからＣＰＵと同一クロック周波数で動作するＣＰＵの内部ＲＡＭにモータ制御プログラムが展開され実行される。このようにすることで、ＣＰＵのモータ制御処理を短時間で実行することができる。しかしながら、インクジェットプリンタなどには、キャリッジモータ、紙送りモータ、及び、オートドキュメントフィード用モータなど、多くのＤＣモータが搭載される。そうすると、ＣＰＵ内部における高速なＲＡＭの容量を増やす必要があり、このことはＣＰＵコストを増大させる要因となっている。
【０００３】
ところで近年の高周波数対応のメモリーは、ＣＰＵの内部ＲＡＭと比較して遜色ない処理速度にまで到達している。しかしながら、システムのメモリーには、ＣＰＵ以外にもアクセスするバスマスターが多数有り、これらのバスマスターの処理を効率的に行うために、ＣＰＵからのアクセスは一定のアクセス制限を行わなければならないという事情がある。その一方で、モータ制御割り込み処理はできる限り短時間で終了し、画像処理など他の処理へＣＰＵを割り当てる必要がある。つまり、これら両者をできる限り両立させる必要がある。
【０００４】
このためには、効率的にＣＰＵ及び各バスマスターにバス権を割り当てる必要がある。特許文献１には、各バスマスターにバス権を割り当てる方法が示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−３５１８１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の手法では、各バスマスターにバス権を割り当てることは可能であるが、所定時間毎に各バスマスターにバス権を割り当てるため、バスマスターからのリクエストがない場合にはバスに空き時間が生じてしまい、効率的にバスを使用することができないという問題がある。  
本発明は、このような事情に鑑みてなされたものであり、効率的にバスを使用することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するための主たる発明は、
バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、
前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、
を含む、バス制御方法である。
【０００８】
本発明の他の特徴については、本明細書及び添付図面の記載により明らかにする。
【図面の簡単な説明】
【０００９】
【図１】本実施形態におけるメモリーコントローラー７２０の動作を説明するための概略図である。
【図２】プログラムの配置を説明する図である。
【図３】本実施形態におけるシステム構成の概略図である。
【図４】調停ユニット７３０の構成を説明する図である。
【図５】第ｉリクエストマスク回路７４１を説明する図である。
【図６】保証帯域とリクエスト許可数レジスタの設定値との関係を説明する図（その１）である。
【図７】第１バスマスターのリクエストが発生したときの動作を説明する図である。
【図８】バス競合カウンタの動作について説明する図である。
【図９】保証帯域とリクエスト許可数レジスタの設定値との関係を説明する図（その２）である。
【図１０】高優先順位マスターグループの複数のバスマスターからリクエストが発生したときの動作を説明する図である。
【発明を実施するための形態】
【００１０】
本明細書及び添付図面の記載により、少なくとも、以下の事項が明らかとなる。
【００１１】
バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、
前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、
を含む、バス制御方法。  
このようにすることで、効率的にバスを使用することができる。
【００１２】
かかるバス制御方法であって、前記注目バスマスター以外のアクセス要求の処理は、前記バスにアクセスする優先度が高いバスマスターの順に行われることが望ましい。また、前記リクエスト許可数は、前記注目バスマスターの保証帯域に対応するクロック数から１回のデータ転送に要するクロック数を減じた値を、前記１回のデータ転送に要するクロック数で除した値であることが望ましい。また、前記注目バスマスター以外のアクセス要求が処理される毎に前記リクエスト数を減算し、該リクエスト数が０になったときに前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理されたと判定することが望ましい。また、前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することは、前記注目バスマスターの前回分のアクセス要求が処理された後に行われることが望ましい。
【００１３】
また、前記注目バスマスター以外のバスマスターのアクセス要求が前記リクエスト数と同数処理された後であって前記注目バスマスターのアクセス要求の処理が行われる前に、前記注目バスマスターよりも前記優先度が高い上位バスマスターの処理が行われた場合、該上位バスマスターの処理が行われた数だけ前記注目バスマスターのリクエスト許可数を減らすことをさらに含むことが望ましい。また、前記バスマスターのアクセス要求は、ＤＭＡ転送を行うためにバス権を獲得するためのアクセス要求であることが望ましい。また、前記複数のバスマスターのうち少なくとも一つのバスマスターは、ＣＰＵに関連するバスマスターであることが望ましい。  
このようにすることで、効率的にバスを使用することができる。
【００１４】
＝＝＝実施形態＝＝＝
図１は、本実施形態におけるメモリーコントローラー７２０の動作を説明するための概略図である。図には、メモリーコントローラー７２０を中心として、メモリー８０と複数のバスマスター７１１〜７１３が示されている。各バスマスターは、メモリーコントローラー７２０に接続されている。そして、バスマスター７１１〜７１３はメモリーコントローラー７２０にリクエストＲｅｑ、アドレスＡｄｄ、及び、データを送出可能となっている。メモリーコントローラー７２０は、バスマスター７１１〜７１３に対して肯定応答Ａｃｋを適宜返し、メモリー８０に対してはバスマスター７１１〜７１３からのデータを適切なアドレスに記憶させる。
【００１５】
図２は、プログラムの配置を説明する図である。図には、ＣＰＵ１０、ＲＯＭ２０、ＣＰＵバス３０、メモリーインターフェース４０、ＣＰＵインターフェース５０、内部バス６０、ＡＳＩＣ７０、メモリー８０、及び、ローカルメモリーバス９０が示されている。ＣＰＵ１０及びＲＯＭ２０はＣＰＵバス３０に接続されている。メモリーインターフェース４０は、ＣＰＵバス３０及びＡＳＩＣ７０に接続されている。ＣＰＵインターフェース５０は、ＣＰＵバス３０及び内部バス６０に接続されている。ＡＳＩＣ７０は、さらにメモリー８０に接続されている。
【００１６】
本実施形態では、ＲＯＭ２０に記憶された複数のプログラムがメモリー８０上に展開され実行される。そのために、ＲＯＭ２０に記憶されたプログラムは、ＣＰＵバス３０、メモリーインターフェース４０、及び、ＡＳＩＣ７０を介してメモリー８０にロードされる。
【００１７】
図３は、本実施形態におけるシステム構成の概略図である。図には、ＣＰＵ１０、ＲＯＭ２０、ＣＰＵバス３０、メモリーインターフェース４０、ＣＰＵインターフェース５０、内部バス６０、メモリーコントローラー７２０、メモリー８０、及び、ローカルメモリーバス９０が示されている。また、内部バス６０とメモリーコントローラー７２０との間には、複数のモジュール７１４〜７１８が示されている。
【００１８】
図における複数のモジュール７１４〜７１８は、前述の図１における複数のバスマスターに対応する。そして、これらモジュール７１４〜７１８、及び、メモリーコントローラー７２０は、図２におけるＡＳＩＣ７０に配置される。
【００１９】
図４は、調停ユニット７３０の構成を説明する図である。図には、ＣＰＵ１０、ＲＯＭ２０、ＣＰＵバス３０、メモリーインターフェース４０、ＣＰＵインターフェース５０、内部バス６０、バスマスター群７１、メモリー８０、ローカルメモリーバス９０、及び、メモリーコントローラー７２０が示されている。またメモリーコントローラー７２０は、調停ユニット７３０及びメモリーコアコントローラー７６０を含むことが示されている。また、ここでは、前述の複数のバスマスターがバスマスター群７１として示されているが、図４に示される各部位の接続は前述の図３のものと同様である。
【００２０】
メモリーコントローラー７２０に含まれる調停ユニット７３０は、リクエストマスク回路群７４０、プライオリティエンコーダ７５０、及び、複数のリクエスト許可数レジスタ７７０を含んでいる。
【００２１】
リクエストマスク回路群７４０に含まれる各リクエストマスク回路は、対応するバスマスターからのリクエストをプライオリティエンコーダに出力する。この際、各リクエストマスク回路は、後述するリクエスト許可数及びバス競合カウンタの値に基づいてプライオリティエンコーダに出力するリクエストを所定期間マスクする。この期間は、リクエスト許可数及びバス競合カウンタの値に基づいて動的に変化する。そして、マスク期間が経過した後、各リクエストマスク回路は対応するリクエストをマスク後リクエストＲｅｑ［ｉ］＿ｏとしてプライオリティエンコーダ７５０に出力する。
【００２２】
プライオリティエンコーダ７５０は、各リクエストマスク回路から出力されるマスク後リクエストＲｅｑ［ｉ］＿ｏに応じて、バス権を承認する肯定応答Ａｃｋを対応するバスマスターに返す。この際、同時に複数のリクエストがあるときには、優先度の高いバスマスターに対してバス権が承認される。バス権を獲得したバスマスターは、肯定応答Ａｃｋを受信し、メモリー８０へのデータの読み書きが実行されたことになる。このようにして、プライオリティエンコーダ７５０は、リクエストマスク回路から出力されるマスク後リクエストＲｅｑ１＿ｏ〜Ｒｅｑ［ｎ］＿ｏに基づいてメモリーにアクセスする順位付けをする機能を有する。
【００２３】
このようにマスク期間が経過するまでプライオリティエンコーダ７５０にリクエストを出力しないことにより、その間、他のバスマスターにバス権を譲ることができる。そうすることによって、他のバスマスターの帯域も確保することができるようになる。尚、マスクする期間は、リクエストがマスクされるバスマスターの帯域が確実に確保できるだけの期間となっている。
【００２４】
次に、リクエストマスク回路群７４０に含まれる各リクエストマスク回路について説明を行う。リクエストマスク回路群７４０は、第１リクエストマスク回路（ＲｅｑＭａｓｋ１）から第ｎリクエストマスク回路（ＲｅｑＭａｓｋ［ｎ］）までの複数のリクエストマスク回路を含む。
【００２５】
図５は、第ｉリクエストマスク回路７４１を説明する図である。第ｉリクエストマスク回路７４１は、後述する高優先順位マスターグループのｉ番目の優先度を有するバスマスターの制御に用いられるリクエストマスク回路である。第ｉリクエストマスク回路７４１は、第ｉリクエストカウンタ（Ｒｅｑ［ｉ］＿Ｃｏｕｎｔｅｒ）７４１１とマスク回路７４１２と、第ｉバス競合カウンタ（Ｒｅｑ［ｉ］＿ｏｌａｐ＿ｃｎｔ）７４１３と、減算器７４１４を含む。
【００２６】
マスク回路７４１２には、第ｉバスマスターからのリクエストＲｅｑ［ｉ］が入力される。またマスク回路７４１２には、第ｉリクエストカウンタ（Ｒｅｑ［ｉ］＿Ｃｏｕｎｔｅｒ）からの出力値（第ｉリクエストカウンタのカウント値）が入力される。そして、マスク回路７４１２は、第ｉバスマスターの前回のリクエストが処理された直後から第ｉリクエストカウンタのカウント値を他バスマスタのリクエスト処理が行なわれる毎に減算し、値が０になるまでプライオリティエンコーダへの第ｉバスマスターからのリクエストＲｅｑ［ｉ］をマスクする。尚、マスクするとは、第ｉバスマスターのリクエストＲｅｑ［ｉ］のプライオリティエンコーダ７５０への出力を待機することということもできる。
【００２７】
第ｉリクエストカウンタ（Ｒｅｑ［ｉ］＿Ｃｏｕｎｔｅｒ）７４１１には、減算器７４１４からの出力と、プライオリティエンコーダ７５０から出力されたリクエストマスター信号（Ｒｅｑ＿Ｍａｓｔｅｒ）と、メモリーコアコントローラー７６０から出力されたコア肯定応答（Ａｃｋ＿ｃｏｒｅ）が入力される。
【００２８】
リクエストマスター信号（Ｒｅｑ＿Ｍａｓｔｅｒ）は、どのバスマスターに肯定応答Ａｃｋを送出したかを示すための信号である。これにより、自己のリクエストが処理されたのか、又は、他のバスマスターのリクエストが処理されたのかを判別することができるようになっている。コア肯定応答（Ａｃｋ＿ｃｏｒｅ）は、メモリーコアコントローラー７６０がプライオリティエンコーダ７５０からのリクエストを処理するときに出力される信号である。
【００２９】
第ｉリクエストカウンタ７４１１は、リクエストマスター信号とコア肯定応答により、第ｉバスマスターを含め、全てのバスマスタの処理が完了したタイミングを知ることができるようになっている。そして、第ｉリクエストカウンタ７４１１は、第ｉバスマスターの前回の処理が完了した直後における減算器の値を設定されることができるようになっている。
【００３０】
減算器７４１４には、第ｉバス競合カウンタ（Ｒｅｑ［ｉ］＿ｏｌａｐ＿ｃｎｔ）７４１３からの出力と第ｉリクエスト許可数レジスタの第ｉバスマスターのリクエスト許可数（Ｒｅｑ［ｉ］＿Ｎｕｍ）が入力される。第ｉバスマスターのリクエスト許可数については後述する。減算器７４１４は、第ｉバスマスターリクエスト許可数から第ｉバス競合カウンタの値を減算した値を、第ｉバスマスターの前回の処理が完了した直後に第ｉリクエストカウンタ７４１１に設定する。
【００３１】
第ｉバス競合カウンタ７４１３は、リクエストマスター信号とコア肯定応答信号に基づいて、第ｉバスマスターよりも優先度の高いバスマスターがバス権を先んじて取得してしまったために第ｉバスマスターがバス権を取得できなかった分のリクエスト処理数をカウントする。そして、その後、第ｉバスマスターがバス権を取得したタイミングで、このカウント値を減算器７４１４に送る。
【００３２】
このようにすることで、第ｉバスマスターよりも優先度が高いバスマスターが先んじてバス権を獲得した場合には、第ｉバスマスターが次回にバス権を取得できるタイミングを早めるように第ｉリクエストカウンタの値を設定することができ、その分、第ｉバスマスターのマスク期間を短くすることができる。
【００３３】
尚、最高の優先順位を有する第１バスマスターの第１リクエストマスク回路においては、バス競合カウンタを備えない構成としてもよい。バス競合カウンタは、自己よりも優先度が高いバスが先んじてバス権を取得した場合に、自己が次回に取得するバス権のタイミングを早めるためのものであるが、最高優先順位を有する第１バスマスターの場合には、自己よりも優先度が高いバスマスターに先んじてバス権が取得されることがないからである。
【００３４】
次に、第ｉバスマスターのリクエスト許可数（Ｒｅｑ［ｉ］＿Ｎｕｍ）レジスタ設定値の算出方法と、各バスマスターからのリクエストＲｅｑに対する肯定応答Ａｃｋのタイミングについて説明する。
【００３５】
図６は、保証帯域とリクエスト許可数レジスタ設定値との関係を説明する図（その１）である。本システムにおいて、バスマスター１つあたりのメモリー処理時間は、バス周波数１００ＭＨｚであり、５クロックで１６Ｂｙｔｅのアクセスが可能であるとする。この場合、バス帯域としては、３２０ＭＢｙｔｅ／ｓ（＝１００ＭＨｚ×１６Ｂｙｔｅ／５クロック））が確保されることになる。
【００３６】
図には、バスマスター番号と、各バスマスターの保証帯域、対応するリクエスト許可数レジスタ設定値、及び、制御における優先度グループが示されている。
【００３７】
バスマスター番号は、複数のバスマスターの中における優先度を示すものであり、番号が小さい方がバスにアクセスする優先度が高い。尚、バスマスター番号に後続して括弧書きで割り当てられているバスマスターが示されている。例えば、スキャナシェーディング補正テーブルリードでは、画像データをスキャンしつつ補正データを取得するために比較的多くの帯域を確実に確保する必要があるため、最も高い優先度が設定されている。また、印字データリードは印字ヘッドが一端から他端へ移動しつつ印刷を行うために多くの帯域を確実に確保する必要があるため、２番目の優先度が設定されている。
【００３８】
保証帯域は、対応するバスマスターが必要とする帯域を示すものであり、例えば第１バスマスター（マスターＮｏ．１）では５０Ｍｂｙｔｅ／ｓが必要であるということを示している。右隣に括弧書きで示されている数字はクロック数を示しており、例えば３２ｃｌｋと示されていた場合、３２クロックに１回リクエスト処理がなされると、５０ＭＢｙｔｅ／ｓの帯域が確保されることを示している。
【００３９】
リクエスト許可数レジスタ設定値はマスク期間に関連する値であり、マスク期間はリクエスト許可数レジスタ設定値の範囲内で設定される。リクエスト許可数レジスタの値は、対応するバスマスターの保証帯域から求めることができる。算出式は、以下のようになる。  
Ｒｅｑ［ｉ］＿Ｎｕｍ＝ｉｎｔ［（Ｗｓ＿ｃｌｋ−Ａｃ＿ｃｌｋ）／Ａｃ＿ｃｌｋ］
Ｒｅｑ［ｉ］＿Ｎｕｍ：第ｉバスマスターのリクエスト許可数
Ｗｓ＿ｃｌｋ：第ｉバスマスターの保証帯域に対応するクロック数
Ａｃ＿ｃｌｋ：メモリーアクセスに必要なクロック数
【００４０】
例えば、第１バスマスター（スキャナシェーディング補正テーブルリード）の保証帯域は、５０ＭＢｙｔｅ／ｓであり、この転送帯域を確実に確保するためには、３２（＝１００ＭＨｚ×１６Ｂｙｔｅ／５０ＭＢｙｔｅ）クロックに１回の割合でリクエストが処理される必要がる。このため、保証帯域に対応するクロック数は、３２クロックとなる。本実施形態におけるシステムは、５クロックで１６Ｂｙｔｅアクセスを可能とするシステムであるので、メモリーアクセスに必要なクロック数は５クロックとなる。そうすると、リクエスト許可数は、５（＝ｉｎｔ（（３２−５）／５））となる。
【００４１】
制御における優先度グループは、高優先順位マスターグループに属するか低優先順位マスターグループに属するのかを示すものである。高優先順位マスターグループに属するバスマスターは、システムとして帯域保証すべきバスマスターである。一方、低優先順位マスターグループに属するバスマスターは、帯域保証は必須ではないバスマスターである。
【００４２】
前述のように、第１バスマスターが５０ＭＢｙｔｅ／ｓの転送帯域を確実に確保するためには、３２（＝１００ＭＨｚ×１６Ｂｙｔｅ／５０ＭＢｙｔｅ／ｓ）クロックに１回リクエストが処理される必要がある。この場合、リクエストの発生からＤＭＡ転送終了まで３２クロック以内であれば、確実にこの帯域が保証される。第１バスマスターのＤＭＡ転送を５クロックで処理した場合、残りの２７クロックを他のマスター転送で使用可能である。よって、これを５クロックで除した値が他のバスマスターに割り振ることができるリクエスト数となり、第１バスマスターのリクエスト許可数レジスタとして設定されることとなっていた。
【００４３】
そして、このとき仮に、第１バスマスターのＤＭＡ転送終了時に他のバスマスターのリクエストが２０発生していた場合には、優先順位の高い方から５バスマスター分のリクエストを処理することができることになる。よって、第１リクエストカウンタには５が設定される。第１リクエストカウンタの値は、リクエストが処理されるごとにデクリメントされ、第１リクエストカウンタの値が０になったときに第１バスマスターのリクエストのマスクが解除される。
【００４４】
また、例えば、第３バスマスターが、１６ＭＢｙｔｅ／ｓの転送帯域を確実に確保するためには、１００（＝１００ＭＨｚ×１６Ｂｙｔｅ／１６ＭＢｙｔｅ／ｓ）クロックに１回リクエストが処理される必要がある。この場合、リクエスト発生からＤＭＡ転送終了まで１００クロック以内であれば、確実にこの帯域が保証される。第３バスマスターのＤＭＡ転送を５クロックで処理した場合、残りの９５クロックを他のバスマスターの転送で使用可能である。よって、これを５クロックで除した値が第３バスマスターのリクエスト許可数レジスタとして設定される。
【００４５】
そして、このとき仮に、高優先順位マスターに属するバスマスターのリクエストの発生がなく、低優先順位マスターのリクエスト数が２０発生していた場合は、その中でも優先順位の高い方から１９マスター分のリクエストを処理することができることになる。よって、第３リクエストカウンタには１９が設定される。第３リクエストカウンタの値は、リクエストが処理されるごとにデクリメントされ、第３リクエストカウンタの値が０になったときに第３バスマスターのリクエストのマスクが解除される。
【００４６】
尚、仮に、リクエスト許可数レジスタ設定値の範囲内のリクエスト処理中に、高優先順位マスターグループに属するバスマスターのリクエストが処理された場合にも、第３リクエストカウンタの値はデクリメントされる。つまり、第３バスマスターのＤＭＡ転送時には、１９バスマスター分のリクエストが許可されているが、高優先順位マスターに属するバスマスターのリクエストが発生して、それが処理された場合には、処理される低優先順位マスターに属するバスマスターのリクエストの数は減っていることになる。
【００４７】
図７は、第１バスマスターのリクエストが発生したときの動作を説明する図である。図には、各バスマスターのリクエストＲｅｑの発生と、これに対応する肯定応答Ａｃｋが示されている。符号Ｒｅｑ及びＡｃｋに後続する数字は対応するバスマスターの番号である。また、図には、リクエストが処理されているバスマスターのリクエストの番号が「調停」として示されている。例えば、第１バスマスターのリクエストが処理されているタイミングでは、「調停」にＲｅｑ１が示される。また、図には、第１バスマスターのリクエスト許可数レジスタ設定値と、第１バスマスターのリクエストカウンタの値が示されている。
【００４８】
図では、最も優先度が高い第１バスマスターからの第１リクエストＲｅｑ１が発生し、その間に、低優先順位マスターグループに属するバスマスターからのリクエストＲｅｑ６、Ｒｅｑ８、Ｒｅｑ９、Ｒｅｑ１１、Ｒｅｑ１２、及び、Ｒｅｑ１３が発生している。第１リクエストＲｅｑ１は、Ａｃｋ１がＨｉレベルになったことを受けて、Ｌｏｗレベルとなる（図の小円で示した部分）。このとき、第１バスマスターのリクエスト許可数レジスタ設定値は５であるので、Ｒｅｑ６からＲｅｑ［Ｎ］までのうち優先順位が高いものから５リクエスト分、すなわち、Ｒｅｑ６，Ｒｅｑ８、Ｒｅｑ９、Ｒｅｑ１１、Ｒｅｑ１２の処理が可能ということになる。よって、処理可能なリクエスト数である５が第１リクエストカウンタに設定される。第１リクエストカウンタは、各リクエストが処理される毎にデクリメントされるが、第１リクエストＲｅｑ１は第１バスマスターのリクエストカウンタが０以外である限りマスクされる。
【００４９】
この例では、第１２バスマスターの第１２リクエストＲｅｑ１２のメモリーアクセスが完了することで、第１バスマスターのリクエストカウンタが０となり、第１リクエストＲｅｑ１のマスクが解除される。第１３バスマスターのリクエストである第１３リクエストＲｅｑ１３は、他のバスマスターのリクエストと同様のタイミングでＨｉレベルとなっているが、許可されているリクエスト数は５であるため処理されなかった。その後、第１２リクエストＲｅｑ１２のメモリーアクセス完了時に第１バスマスターのリクエストＲｅｑ１が発生しているため、再びＲｅｑ１の処理が実行されてしまうが、その後、他のバスマスターからのリクエストがないため、第１３リクエストＲｅｑ１３が処理される。
【００５０】
ところで、本システムでは、高優先順位マスターグループの一つとしてＣＰＵが割り当てられている。通常、ＣＰＵは、メモリーアクセスの頻度も多く、特段の制御がされないアクセスを頻繁に発生させるため、このようにしてしまうとより下位のバスマスターのメモリーへのアクセスが効率よく行えない。
【００５１】
本システムにおけるＣＰＵは、画像処理等のアプリケーション的な機能、システム制御、及び、プリンタのメカニカルコントロールに関する機能を担っている。特に、メカニカルコントロールでのＤＣモータコントロール制御においては、一定周期内にＤＣモータ制御に必要なパラーメータを計算し、ＤＣモータ制御部へ信号を出力して制御を行わなければならない。このとき、プログラム、及び、制御で使用されるパラーメータがメモリー８０におかれて実行される場合、ＣＰＵが低優先順位マスターグループに属することとしてしまうと、メモリー８０へのデータアクセスに時間を要してしまう。そして、ＣＰＵにおいてメカ制御が占有する割合が多くなることで、画像処理等のアプリケーション的な機能が占有できる割合が少なくなり、処理が遅くなるばかりか、最悪の場合、メカの周期制御が間に合わなくなる可能性さえある。
【００５２】
そこで、多種類の処理を担うＣＰＵは高優先順位マスターグループに属することとし、画像処理、システム処理等では、相対的にリクエスト許可数レジスタには大きい値（この例では、ＣＰＵに割り当てる帯域を６４Ｍｂｙｔｅ／ｓとしているので、２５クロックに１回リクエスト処理が行われればよい。よって、（２５−５）／５＝４をリクエスト許可数レジスタに設定）を設定し、メカの周期制御に入るタイミングで、リクエスト許可数を最小値０に設定し、周期制御終了時にリクエスト許可数レジスタを元の値に戻すこととしてもよい。
【００５３】
このような処理を行うことで、メカの周期制御では低優先順位マスターグループのバスマスターからのリクエストが発生していたとしても、自己のリクエストをマスクすることがなくなり、バス権が与えられるため、最小限のメモリーアクセスサイクルで処理を完了することができる。
【００５４】
＜高優先順位マスターグループに属する複数のバスマスターからリクエストがあったときの動作について＞
前述では説明の容易のために、高優先順位マスターグループにおけるバスマスターからのリクエストは最も優先順位の高い第１バスマスターからのもののみで、高優先順位マスターグループに属するその他のバスマスターからのリクエストＲｅｑ２〜Ｒｅｑ５が発生していない場合について説明を行った。しかしながら、実際には、高優先順位マスターグループに属するバスマスターからのリクエストＲｅｑ２〜Ｒｅｑ５が発生することがある。そうすると、より優先順位の高いバスマスターのリクエストのみが処理され、高優先順位マスターグループの中でも優先順位の低いリクエストが処理されないことが生じうる。このような問題に対応するために、前述のバス競合カウンタが動作する。
【００５５】
図８は、バス競合カウンタの動作について説明する図である。図には、第４バスマスター以外のバスマスターへの肯定応答Ａｃｋ、第４バスマスターのリクエストＲｅｑ４、第４バスマスターのリクエストＲｅｑ４に対する肯定応答Ａｃｋ４、第４バスマスターのバス競合カウンタ（Ｒｅｑ４＿ｏｌａｐ＿ｃｎｔ）の値、及び、第４バスマスターのリクエストカウンタ（Ｒｅｑ４＿Ｃｏｕｎｔｅｒ）の値が示されている。これらを参照しつつ、ここでは第４バスマスターのバス競合カウンタの動作について説明する。
【００５６】
リクエストＲｅｑ４がＨｉレベルの期間において、他のバスマスターへの肯定応答Ａｃｋが発生すると、第４バスマスターのバス競合カウンタ（Ｒｅｑ４＿ｏｌａｐ＿ｃｎｔ）がカウントアップ（インクリメント）される。第４バスマスターへの肯定応答Ａｃｋ４が発生すると、次の式で求められる値にリクエストカウンタが設定されると同時に、第４バスマスターのバス競合カウンタ（Ｒｅｑ４＿ｏｌａｐ＿ｃｎｔ）の値はクリアされる。  
Ｒｅｑ［ｉ］＿Ｃｏｕｎｔｅｒ＝Ｒｅｑ［ｉ］＿Ｎｕｍ−Ｒｅｑ［ｉ］＿ｏｌａｐ＿ｃｎｔ
Ｒｅｑ［ｉ］＿Ｃｏｕｎｔｅｒ：第ｉバスマスターのリクエストカウンタ
Ｒｅｑ［ｉ］＿Ｎｕｍ：第ｉバスマスターのリクエスト許可数
Ｒｅｑ［ｉ］＿ｏｌａｐ＿ｃｎｔ：第ｉバスマスターのバス競合カウンタ値
【００５７】
このようにすることによって、他のバスマスターが優先して処理されたために第４バスマスターのリクエストが処理されなかった分、第４バスマスターのバス競合カウンタがカウントアップされ、第４バスマスターのリクエストカウンタ値がこのバス競合カウンタの値分だけ減らされることになる。よって、第４バスマスターの次回のリクエストにおいてバス競合カウンタのカウントアップ分だけ早くリクエストを発生することができるようになる。そして、高優先順位マスターグループのバスマスター全体の帯域を保証することができるようになる。
【００５８】
図９は、保証帯域とリクエスト許可数レジスタの設定値との関係を説明する図（その２）である。ここでは、説明の都合上、図９に示す保証帯域、及び、リクエスト許可数レジスタの設定値で説明を行う。各数値は図６のものと異なっているが、表の各項目の意味するものは図６のものと同様である。
【００５９】
図１０は、高優先順位マスターグループの複数のバスマスターからリクエストが発生したときの動作を説明する図である。
【００６０】
第５バスマスターからのリクエストＲｅｑ５に着目する。図において「Ａ」で示された時点で第５バスマスターのリクエストＲｅｑ５がＨｉレベルになる。しかしながら、本クロックでは、このリクエストが処理されなかったため、「Ｂ」の時点でもＲｅｑ５がＨｉレベルになっている。このとき、リクエストＲｅｑ５が処理されなかったため、バス競合カウンタ（Ｒｅｑ５＿ｏｌａｐ＿ｃｎｔ）は１にカウントアップ（不図示）されることになる。
【００６１】
その後、「Ｃ］で示された時点で第５バスマスターのリクエストＲｅｑ５が処理される。処理された後、第５バスマスターのリクエストカウンタには、リクエスト許可数レジスタ設定値からバス競合カウンタの値が減算された値が設定される。よって、第５バスマスターのリクエストカウンタ（Ｒｅｑ５＿Ｃｏｕｎｔｅｒ）には「４」が設定されることとなる。
【００６２】
このようにすることで、第５バスマスターのリクエストカウンタには、リクエスト許可数レジスタ設定値「５」よりも小さい「４」が設定される。よって、第５バスマスターのマスク期間をリクエスト許可数レジスタ設定値より小さい値に設定することができる。そして、リクエスト処理に待たされた期間分、次回のリクエスト時により早くマスクを解除（「Ｄ」の時点）してリクエストを行うことができる。
【００６３】
このようにすることで、高優先順位マスターグループの各バスマスターに対して帯域保証を行いつつ、バスの空き時間には低優先順位のバスマスターに対してもバス権を授与でき、効率的なバスリクエスト処理を行うことができる。
【符号の説明】
【００６４】
１０  ＣＰＵ、１１  命令ＲＡＭ、１２  データＲＡＭ、
２０  ＲＯＭ、２１  プログラムＡ、２２  プログラムＢ、
２３  プログラムＣ、プログラムＤ、
３０  ＣＰＵバス、４０  メモリーインターフェース、
５０  ＣＰＵ  インターフェース、６０  内部バス、
７０  ＡＳＩＣ、８０  メモリー、
７１１  第１バスマスター、７１２  第２バスマスター、７１３  第ｎバスマスター、
７１４  スキャナシェーディングリードモジュール、
７１５  印字データリードモジュール、
７１６  ＵＳＢホストリード／ライトモジュール、
７１７  イーサマックリード／ライトモジュール、
７１８  二値化処理リード／ライトモジュール、
７２０  メモリーコントローラー、
７３０  調停ユニット、７４０  メモリーコアコントローラー、
７５０  プライオリティコントローラー、７６０  メモリーコアコントローラー、
７４１１  リクエストカウンタ、７４１２  マスク、
７４１３  バス競合カウンタ、７４１４  減算器
【図１】
2010272013.tif 000003
【図２】
2010272013.tif 000004
【図３】
2010272013.tif 000005
【図４】
2010272013.tif 000006
【図５】
2010272013.tif 000007
【図６】
2010272013.tif 000008
【図７】
2010272013.tif 000009
【図８】
2010272013.tif 000010
【図９】
2010272013.tif 000011
【図１０】
2010272013.tif 000012