説明

バス制御方法

【課題】効率的にバスを使用すること。
【解決手段】バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、を含む、バス制御方法。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、バス制御方法に関する。
【背景技術】
【0002】
CPUを用いたDCモータ制御では、一般に、ROMからCPUと同一クロック周波数で動作するCPUの内部RAMにモータ制御プログラムが展開され実行される。このようにすることで、CPUのモータ制御処理を短時間で実行することができる。しかしながら、インクジェットプリンタなどには、キャリッジモータ、紙送りモータ、及び、オートドキュメントフィード用モータなど、多くのDCモータが搭載される。そうすると、CPU内部における高速なRAMの容量を増やす必要があり、このことはCPUコストを増大させる要因となっている。
【0003】
ところで近年の高周波数対応のメモリーは、CPUの内部RAMと比較して遜色ない処理速度にまで到達している。しかしながら、システムのメモリーには、CPU以外にもアクセスするバスマスターが多数有り、これらのバスマスターの処理を効率的に行うために、CPUからのアクセスは一定のアクセス制限を行わなければならないという事情がある。その一方で、モータ制御割り込み処理はできる限り短時間で終了し、画像処理など他の処理へCPUを割り当てる必要がある。つまり、これら両者をできる限り両立させる必要がある。
【0004】
このためには、効率的にCPU及び各バスマスターにバス権を割り当てる必要がある。特許文献1には、各バスマスターにバス権を割り当てる方法が示されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−351815号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1の手法では、各バスマスターにバス権を割り当てることは可能であるが、所定時間毎に各バスマスターにバス権を割り当てるため、バスマスターからのリクエストがない場合にはバスに空き時間が生じてしまい、効率的にバスを使用することができないという問題がある。
本発明は、このような事情に鑑みてなされたものであり、効率的にバスを使用することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するための主たる発明は、
バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、
前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、
を含む、バス制御方法である。
【0008】
本発明の他の特徴については、本明細書及び添付図面の記載により明らかにする。
【図面の簡単な説明】
【0009】
【図1】本実施形態におけるメモリーコントローラー720の動作を説明するための概略図である。
【図2】プログラムの配置を説明する図である。
【図3】本実施形態におけるシステム構成の概略図である。
【図4】調停ユニット730の構成を説明する図である。
【図5】第iリクエストマスク回路741を説明する図である。
【図6】保証帯域とリクエスト許可数レジスタの設定値との関係を説明する図(その1)である。
【図7】第1バスマスターのリクエストが発生したときの動作を説明する図である。
【図8】バス競合カウンタの動作について説明する図である。
【図9】保証帯域とリクエスト許可数レジスタの設定値との関係を説明する図(その2)である。
【図10】高優先順位マスターグループの複数のバスマスターからリクエストが発生したときの動作を説明する図である。
【発明を実施するための形態】
【0010】
本明細書及び添付図面の記載により、少なくとも、以下の事項が明らかとなる。
【0011】
バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、
前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、
を含む、バス制御方法。
このようにすることで、効率的にバスを使用することができる。
【0012】
かかるバス制御方法であって、前記注目バスマスター以外のアクセス要求の処理は、前記バスにアクセスする優先度が高いバスマスターの順に行われることが望ましい。また、前記リクエスト許可数は、前記注目バスマスターの保証帯域に対応するクロック数から1回のデータ転送に要するクロック数を減じた値を、前記1回のデータ転送に要するクロック数で除した値であることが望ましい。また、前記注目バスマスター以外のアクセス要求が処理される毎に前記リクエスト数を減算し、該リクエスト数が0になったときに前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理されたと判定することが望ましい。また、前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することは、前記注目バスマスターの前回分のアクセス要求が処理された後に行われることが望ましい。
【0013】
また、前記注目バスマスター以外のバスマスターのアクセス要求が前記リクエスト数と同数処理された後であって前記注目バスマスターのアクセス要求の処理が行われる前に、前記注目バスマスターよりも前記優先度が高い上位バスマスターの処理が行われた場合、該上位バスマスターの処理が行われた数だけ前記注目バスマスターのリクエスト許可数を減らすことをさらに含むことが望ましい。また、前記バスマスターのアクセス要求は、DMA転送を行うためにバス権を獲得するためのアクセス要求であることが望ましい。また、前記複数のバスマスターのうち少なくとも一つのバスマスターは、CPUに関連するバスマスターであることが望ましい。
このようにすることで、効率的にバスを使用することができる。
【0014】
===実施形態===
図1は、本実施形態におけるメモリーコントローラー720の動作を説明するための概略図である。図には、メモリーコントローラー720を中心として、メモリー80と複数のバスマスター711〜713が示されている。各バスマスターは、メモリーコントローラー720に接続されている。そして、バスマスター711〜713はメモリーコントローラー720にリクエストReq、アドレスAdd、及び、データを送出可能となっている。メモリーコントローラー720は、バスマスター711〜713に対して肯定応答Ackを適宜返し、メモリー80に対してはバスマスター711〜713からのデータを適切なアドレスに記憶させる。
【0015】
図2は、プログラムの配置を説明する図である。図には、CPU10、ROM20、CPUバス30、メモリーインターフェース40、CPUインターフェース50、内部バス60、ASIC70、メモリー80、及び、ローカルメモリーバス90が示されている。CPU10及びROM20はCPUバス30に接続されている。メモリーインターフェース40は、CPUバス30及びASIC70に接続されている。CPUインターフェース50は、CPUバス30及び内部バス60に接続されている。ASIC70は、さらにメモリー80に接続されている。
【0016】
本実施形態では、ROM20に記憶された複数のプログラムがメモリー80上に展開され実行される。そのために、ROM20に記憶されたプログラムは、CPUバス30、メモリーインターフェース40、及び、ASIC70を介してメモリー80にロードされる。
【0017】
図3は、本実施形態におけるシステム構成の概略図である。図には、CPU10、ROM20、CPUバス30、メモリーインターフェース40、CPUインターフェース50、内部バス60、メモリーコントローラー720、メモリー80、及び、ローカルメモリーバス90が示されている。また、内部バス60とメモリーコントローラー720との間には、複数のモジュール714〜718が示されている。
【0018】
図における複数のモジュール714〜718は、前述の図1における複数のバスマスターに対応する。そして、これらモジュール714〜718、及び、メモリーコントローラー720は、図2におけるASIC70に配置される。
【0019】
図4は、調停ユニット730の構成を説明する図である。図には、CPU10、ROM20、CPUバス30、メモリーインターフェース40、CPUインターフェース50、内部バス60、バスマスター群71、メモリー80、ローカルメモリーバス90、及び、メモリーコントローラー720が示されている。またメモリーコントローラー720は、調停ユニット730及びメモリーコアコントローラー760を含むことが示されている。また、ここでは、前述の複数のバスマスターがバスマスター群71として示されているが、図4に示される各部位の接続は前述の図3のものと同様である。
【0020】
メモリーコントローラー720に含まれる調停ユニット730は、リクエストマスク回路群740、プライオリティエンコーダ750、及び、複数のリクエスト許可数レジスタ770を含んでいる。
【0021】
リクエストマスク回路群740に含まれる各リクエストマスク回路は、対応するバスマスターからのリクエストをプライオリティエンコーダに出力する。この際、各リクエストマスク回路は、後述するリクエスト許可数及びバス競合カウンタの値に基づいてプライオリティエンコーダに出力するリクエストを所定期間マスクする。この期間は、リクエスト許可数及びバス競合カウンタの値に基づいて動的に変化する。そして、マスク期間が経過した後、各リクエストマスク回路は対応するリクエストをマスク後リクエストReq[i]_oとしてプライオリティエンコーダ750に出力する。
【0022】
プライオリティエンコーダ750は、各リクエストマスク回路から出力されるマスク後リクエストReq[i]_oに応じて、バス権を承認する肯定応答Ackを対応するバスマスターに返す。この際、同時に複数のリクエストがあるときには、優先度の高いバスマスターに対してバス権が承認される。バス権を獲得したバスマスターは、肯定応答Ackを受信し、メモリー80へのデータの読み書きが実行されたことになる。このようにして、プライオリティエンコーダ750は、リクエストマスク回路から出力されるマスク後リクエストReq1_o〜Req[n]_oに基づいてメモリーにアクセスする順位付けをする機能を有する。
【0023】
このようにマスク期間が経過するまでプライオリティエンコーダ750にリクエストを出力しないことにより、その間、他のバスマスターにバス権を譲ることができる。そうすることによって、他のバスマスターの帯域も確保することができるようになる。尚、マスクする期間は、リクエストがマスクされるバスマスターの帯域が確実に確保できるだけの期間となっている。
【0024】
次に、リクエストマスク回路群740に含まれる各リクエストマスク回路について説明を行う。リクエストマスク回路群740は、第1リクエストマスク回路(ReqMask1)から第nリクエストマスク回路(ReqMask[n])までの複数のリクエストマスク回路を含む。
【0025】
図5は、第iリクエストマスク回路741を説明する図である。第iリクエストマスク回路741は、後述する高優先順位マスターグループのi番目の優先度を有するバスマスターの制御に用いられるリクエストマスク回路である。第iリクエストマスク回路741は、第iリクエストカウンタ(Req[i]_Counter)7411とマスク回路7412と、第iバス競合カウンタ(Req[i]_olap_cnt)7413と、減算器7414を含む。
【0026】
マスク回路7412には、第iバスマスターからのリクエストReq[i]が入力される。またマスク回路7412には、第iリクエストカウンタ(Req[i]_Counter)からの出力値(第iリクエストカウンタのカウント値)が入力される。そして、マスク回路7412は、第iバスマスターの前回のリクエストが処理された直後から第iリクエストカウンタのカウント値を他バスマスタのリクエスト処理が行なわれる毎に減算し、値が0になるまでプライオリティエンコーダへの第iバスマスターからのリクエストReq[i]をマスクする。尚、マスクするとは、第iバスマスターのリクエストReq[i]のプライオリティエンコーダ750への出力を待機することということもできる。
【0027】
第iリクエストカウンタ(Req[i]_Counter)7411には、減算器7414からの出力と、プライオリティエンコーダ750から出力されたリクエストマスター信号(Req_Master)と、メモリーコアコントローラー760から出力されたコア肯定応答(Ack_core)が入力される。
【0028】
リクエストマスター信号(Req_Master)は、どのバスマスターに肯定応答Ackを送出したかを示すための信号である。これにより、自己のリクエストが処理されたのか、又は、他のバスマスターのリクエストが処理されたのかを判別することができるようになっている。コア肯定応答(Ack_core)は、メモリーコアコントローラー760がプライオリティエンコーダ750からのリクエストを処理するときに出力される信号である。
【0029】
第iリクエストカウンタ7411は、リクエストマスター信号とコア肯定応答により、第iバスマスターを含め、全てのバスマスタの処理が完了したタイミングを知ることができるようになっている。そして、第iリクエストカウンタ7411は、第iバスマスターの前回の処理が完了した直後における減算器の値を設定されることができるようになっている。
【0030】
減算器7414には、第iバス競合カウンタ(Req[i]_olap_cnt)7413からの出力と第iリクエスト許可数レジスタの第iバスマスターのリクエスト許可数(Req[i]_Num)が入力される。第iバスマスターのリクエスト許可数については後述する。減算器7414は、第iバスマスターリクエスト許可数から第iバス競合カウンタの値を減算した値を、第iバスマスターの前回の処理が完了した直後に第iリクエストカウンタ7411に設定する。
【0031】
第iバス競合カウンタ7413は、リクエストマスター信号とコア肯定応答信号に基づいて、第iバスマスターよりも優先度の高いバスマスターがバス権を先んじて取得してしまったために第iバスマスターがバス権を取得できなかった分のリクエスト処理数をカウントする。そして、その後、第iバスマスターがバス権を取得したタイミングで、このカウント値を減算器7414に送る。
【0032】
このようにすることで、第iバスマスターよりも優先度が高いバスマスターが先んじてバス権を獲得した場合には、第iバスマスターが次回にバス権を取得できるタイミングを早めるように第iリクエストカウンタの値を設定することができ、その分、第iバスマスターのマスク期間を短くすることができる。
【0033】
尚、最高の優先順位を有する第1バスマスターの第1リクエストマスク回路においては、バス競合カウンタを備えない構成としてもよい。バス競合カウンタは、自己よりも優先度が高いバスが先んじてバス権を取得した場合に、自己が次回に取得するバス権のタイミングを早めるためのものであるが、最高優先順位を有する第1バスマスターの場合には、自己よりも優先度が高いバスマスターに先んじてバス権が取得されることがないからである。
【0034】
次に、第iバスマスターのリクエスト許可数(Req[i]_Num)レジスタ設定値の算出方法と、各バスマスターからのリクエストReqに対する肯定応答Ackのタイミングについて説明する。
【0035】
図6は、保証帯域とリクエスト許可数レジスタ設定値との関係を説明する図(その1)である。本システムにおいて、バスマスター1つあたりのメモリー処理時間は、バス周波数100MHzであり、5クロックで16Byteのアクセスが可能であるとする。この場合、バス帯域としては、320MByte/s(=100MHz×16Byte/5クロック))が確保されることになる。
【0036】
図には、バスマスター番号と、各バスマスターの保証帯域、対応するリクエスト許可数レジスタ設定値、及び、制御における優先度グループが示されている。
【0037】
バスマスター番号は、複数のバスマスターの中における優先度を示すものであり、番号が小さい方がバスにアクセスする優先度が高い。尚、バスマスター番号に後続して括弧書きで割り当てられているバスマスターが示されている。例えば、スキャナシェーディング補正テーブルリードでは、画像データをスキャンしつつ補正データを取得するために比較的多くの帯域を確実に確保する必要があるため、最も高い優先度が設定されている。また、印字データリードは印字ヘッドが一端から他端へ移動しつつ印刷を行うために多くの帯域を確実に確保する必要があるため、2番目の優先度が設定されている。
【0038】
保証帯域は、対応するバスマスターが必要とする帯域を示すものであり、例えば第1バスマスター(マスターNo.1)では50Mbyte/sが必要であるということを示している。右隣に括弧書きで示されている数字はクロック数を示しており、例えば32clkと示されていた場合、32クロックに1回リクエスト処理がなされると、50MByte/sの帯域が確保されることを示している。
【0039】
リクエスト許可数レジスタ設定値はマスク期間に関連する値であり、マスク期間はリクエスト許可数レジスタ設定値の範囲内で設定される。リクエスト許可数レジスタの値は、対応するバスマスターの保証帯域から求めることができる。算出式は、以下のようになる。
Req[i]_Num=int[(Ws_clk−Ac_clk)/Ac_clk]

Req[i]_Num:第iバスマスターのリクエスト許可数
Ws_clk:第iバスマスターの保証帯域に対応するクロック数
Ac_clk:メモリーアクセスに必要なクロック数
【0040】
例えば、第1バスマスター(スキャナシェーディング補正テーブルリード)の保証帯域は、50MByte/sであり、この転送帯域を確実に確保するためには、32(=100MHz×16Byte/50MByte)クロックに1回の割合でリクエストが処理される必要がる。このため、保証帯域に対応するクロック数は、32クロックとなる。本実施形態におけるシステムは、5クロックで16Byteアクセスを可能とするシステムであるので、メモリーアクセスに必要なクロック数は5クロックとなる。そうすると、リクエスト許可数は、5(=int((32−5)/5))となる。
【0041】
制御における優先度グループは、高優先順位マスターグループに属するか低優先順位マスターグループに属するのかを示すものである。高優先順位マスターグループに属するバスマスターは、システムとして帯域保証すべきバスマスターである。一方、低優先順位マスターグループに属するバスマスターは、帯域保証は必須ではないバスマスターである。
【0042】
前述のように、第1バスマスターが50MByte/sの転送帯域を確実に確保するためには、32(=100MHz×16Byte/50MByte/s)クロックに1回リクエストが処理される必要がある。この場合、リクエストの発生からDMA転送終了まで32クロック以内であれば、確実にこの帯域が保証される。第1バスマスターのDMA転送を5クロックで処理した場合、残りの27クロックを他のマスター転送で使用可能である。よって、これを5クロックで除した値が他のバスマスターに割り振ることができるリクエスト数となり、第1バスマスターのリクエスト許可数レジスタとして設定されることとなっていた。
【0043】
そして、このとき仮に、第1バスマスターのDMA転送終了時に他のバスマスターのリクエストが20発生していた場合には、優先順位の高い方から5バスマスター分のリクエストを処理することができることになる。よって、第1リクエストカウンタには5が設定される。第1リクエストカウンタの値は、リクエストが処理されるごとにデクリメントされ、第1リクエストカウンタの値が0になったときに第1バスマスターのリクエストのマスクが解除される。
【0044】
また、例えば、第3バスマスターが、16MByte/sの転送帯域を確実に確保するためには、100(=100MHz×16Byte/16MByte/s)クロックに1回リクエストが処理される必要がある。この場合、リクエスト発生からDMA転送終了まで100クロック以内であれば、確実にこの帯域が保証される。第3バスマスターのDMA転送を5クロックで処理した場合、残りの95クロックを他のバスマスターの転送で使用可能である。よって、これを5クロックで除した値が第3バスマスターのリクエスト許可数レジスタとして設定される。
【0045】
そして、このとき仮に、高優先順位マスターに属するバスマスターのリクエストの発生がなく、低優先順位マスターのリクエスト数が20発生していた場合は、その中でも優先順位の高い方から19マスター分のリクエストを処理することができることになる。よって、第3リクエストカウンタには19が設定される。第3リクエストカウンタの値は、リクエストが処理されるごとにデクリメントされ、第3リクエストカウンタの値が0になったときに第3バスマスターのリクエストのマスクが解除される。
【0046】
尚、仮に、リクエスト許可数レジスタ設定値の範囲内のリクエスト処理中に、高優先順位マスターグループに属するバスマスターのリクエストが処理された場合にも、第3リクエストカウンタの値はデクリメントされる。つまり、第3バスマスターのDMA転送時には、19バスマスター分のリクエストが許可されているが、高優先順位マスターに属するバスマスターのリクエストが発生して、それが処理された場合には、処理される低優先順位マスターに属するバスマスターのリクエストの数は減っていることになる。
【0047】
図7は、第1バスマスターのリクエストが発生したときの動作を説明する図である。図には、各バスマスターのリクエストReqの発生と、これに対応する肯定応答Ackが示されている。符号Req及びAckに後続する数字は対応するバスマスターの番号である。また、図には、リクエストが処理されているバスマスターのリクエストの番号が「調停」として示されている。例えば、第1バスマスターのリクエストが処理されているタイミングでは、「調停」にReq1が示される。また、図には、第1バスマスターのリクエスト許可数レジスタ設定値と、第1バスマスターのリクエストカウンタの値が示されている。
【0048】
図では、最も優先度が高い第1バスマスターからの第1リクエストReq1が発生し、その間に、低優先順位マスターグループに属するバスマスターからのリクエストReq6、Req8、Req9、Req11、Req12、及び、Req13が発生している。第1リクエストReq1は、Ack1がHiレベルになったことを受けて、Lowレベルとなる(図の小円で示した部分)。このとき、第1バスマスターのリクエスト許可数レジスタ設定値は5であるので、Req6からReq[N]までのうち優先順位が高いものから5リクエスト分、すなわち、Req6,Req8、Req9、Req11、Req12の処理が可能ということになる。よって、処理可能なリクエスト数である5が第1リクエストカウンタに設定される。第1リクエストカウンタは、各リクエストが処理される毎にデクリメントされるが、第1リクエストReq1は第1バスマスターのリクエストカウンタが0以外である限りマスクされる。
【0049】
この例では、第12バスマスターの第12リクエストReq12のメモリーアクセスが完了することで、第1バスマスターのリクエストカウンタが0となり、第1リクエストReq1のマスクが解除される。第13バスマスターのリクエストである第13リクエストReq13は、他のバスマスターのリクエストと同様のタイミングでHiレベルとなっているが、許可されているリクエスト数は5であるため処理されなかった。その後、第12リクエストReq12のメモリーアクセス完了時に第1バスマスターのリクエストReq1が発生しているため、再びReq1の処理が実行されてしまうが、その後、他のバスマスターからのリクエストがないため、第13リクエストReq13が処理される。
【0050】
ところで、本システムでは、高優先順位マスターグループの一つとしてCPUが割り当てられている。通常、CPUは、メモリーアクセスの頻度も多く、特段の制御がされないアクセスを頻繁に発生させるため、このようにしてしまうとより下位のバスマスターのメモリーへのアクセスが効率よく行えない。
【0051】
本システムにおけるCPUは、画像処理等のアプリケーション的な機能、システム制御、及び、プリンタのメカニカルコントロールに関する機能を担っている。特に、メカニカルコントロールでのDCモータコントロール制御においては、一定周期内にDCモータ制御に必要なパラーメータを計算し、DCモータ制御部へ信号を出力して制御を行わなければならない。このとき、プログラム、及び、制御で使用されるパラーメータがメモリー80におかれて実行される場合、CPUが低優先順位マスターグループに属することとしてしまうと、メモリー80へのデータアクセスに時間を要してしまう。そして、CPUにおいてメカ制御が占有する割合が多くなることで、画像処理等のアプリケーション的な機能が占有できる割合が少なくなり、処理が遅くなるばかりか、最悪の場合、メカの周期制御が間に合わなくなる可能性さえある。
【0052】
そこで、多種類の処理を担うCPUは高優先順位マスターグループに属することとし、画像処理、システム処理等では、相対的にリクエスト許可数レジスタには大きい値(この例では、CPUに割り当てる帯域を64Mbyte/sとしているので、25クロックに1回リクエスト処理が行われればよい。よって、(25−5)/5=4をリクエスト許可数レジスタに設定)を設定し、メカの周期制御に入るタイミングで、リクエスト許可数を最小値0に設定し、周期制御終了時にリクエスト許可数レジスタを元の値に戻すこととしてもよい。
【0053】
このような処理を行うことで、メカの周期制御では低優先順位マスターグループのバスマスターからのリクエストが発生していたとしても、自己のリクエストをマスクすることがなくなり、バス権が与えられるため、最小限のメモリーアクセスサイクルで処理を完了することができる。
【0054】
<高優先順位マスターグループに属する複数のバスマスターからリクエストがあったときの動作について>
前述では説明の容易のために、高優先順位マスターグループにおけるバスマスターからのリクエストは最も優先順位の高い第1バスマスターからのもののみで、高優先順位マスターグループに属するその他のバスマスターからのリクエストReq2〜Req5が発生していない場合について説明を行った。しかしながら、実際には、高優先順位マスターグループに属するバスマスターからのリクエストReq2〜Req5が発生することがある。そうすると、より優先順位の高いバスマスターのリクエストのみが処理され、高優先順位マスターグループの中でも優先順位の低いリクエストが処理されないことが生じうる。このような問題に対応するために、前述のバス競合カウンタが動作する。
【0055】
図8は、バス競合カウンタの動作について説明する図である。図には、第4バスマスター以外のバスマスターへの肯定応答Ack、第4バスマスターのリクエストReq4、第4バスマスターのリクエストReq4に対する肯定応答Ack4、第4バスマスターのバス競合カウンタ(Req4_olap_cnt)の値、及び、第4バスマスターのリクエストカウンタ(Req4_Counter)の値が示されている。これらを参照しつつ、ここでは第4バスマスターのバス競合カウンタの動作について説明する。
【0056】
リクエストReq4がHiレベルの期間において、他のバスマスターへの肯定応答Ackが発生すると、第4バスマスターのバス競合カウンタ(Req4_olap_cnt)がカウントアップ(インクリメント)される。第4バスマスターへの肯定応答Ack4が発生すると、次の式で求められる値にリクエストカウンタが設定されると同時に、第4バスマスターのバス競合カウンタ(Req4_olap_cnt)の値はクリアされる。
Req[i]_Counter=Req[i]_Num−Req[i]_olap_cnt

Req[i]_Counter:第iバスマスターのリクエストカウンタ
Req[i]_Num:第iバスマスターのリクエスト許可数
Req[i]_olap_cnt:第iバスマスターのバス競合カウンタ値
【0057】
このようにすることによって、他のバスマスターが優先して処理されたために第4バスマスターのリクエストが処理されなかった分、第4バスマスターのバス競合カウンタがカウントアップされ、第4バスマスターのリクエストカウンタ値がこのバス競合カウンタの値分だけ減らされることになる。よって、第4バスマスターの次回のリクエストにおいてバス競合カウンタのカウントアップ分だけ早くリクエストを発生することができるようになる。そして、高優先順位マスターグループのバスマスター全体の帯域を保証することができるようになる。
【0058】
図9は、保証帯域とリクエスト許可数レジスタの設定値との関係を説明する図(その2)である。ここでは、説明の都合上、図9に示す保証帯域、及び、リクエスト許可数レジスタの設定値で説明を行う。各数値は図6のものと異なっているが、表の各項目の意味するものは図6のものと同様である。
【0059】
図10は、高優先順位マスターグループの複数のバスマスターからリクエストが発生したときの動作を説明する図である。
【0060】
第5バスマスターからのリクエストReq5に着目する。図において「A」で示された時点で第5バスマスターのリクエストReq5がHiレベルになる。しかしながら、本クロックでは、このリクエストが処理されなかったため、「B」の時点でもReq5がHiレベルになっている。このとき、リクエストReq5が処理されなかったため、バス競合カウンタ(Req5_olap_cnt)は1にカウントアップ(不図示)されることになる。
【0061】
その後、「C]で示された時点で第5バスマスターのリクエストReq5が処理される。処理された後、第5バスマスターのリクエストカウンタには、リクエスト許可数レジスタ設定値からバス競合カウンタの値が減算された値が設定される。よって、第5バスマスターのリクエストカウンタ(Req5_Counter)には「4」が設定されることとなる。
【0062】
このようにすることで、第5バスマスターのリクエストカウンタには、リクエスト許可数レジスタ設定値「5」よりも小さい「4」が設定される。よって、第5バスマスターのマスク期間をリクエスト許可数レジスタ設定値より小さい値に設定することができる。そして、リクエスト処理に待たされた期間分、次回のリクエスト時により早くマスクを解除(「D」の時点)してリクエストを行うことができる。
【0063】
このようにすることで、高優先順位マスターグループの各バスマスターに対して帯域保証を行いつつ、バスの空き時間には低優先順位のバスマスターに対してもバス権を授与でき、効率的なバスリクエスト処理を行うことができる。
【符号の説明】
【0064】
10 CPU、11 命令RAM、12 データRAM、
20 ROM、21 プログラムA、22 プログラムB、
23 プログラムC、プログラムD、
30 CPUバス、40 メモリーインターフェース、
50 CPU インターフェース、60 内部バス、
70 ASIC、80 メモリー、
711 第1バスマスター、712 第2バスマスター、713 第nバスマスター、
714 スキャナシェーディングリードモジュール、
715 印字データリードモジュール、
716 USBホストリード/ライトモジュール、
717 イーサマックリード/ライトモジュール、
718 二値化処理リード/ライトモジュール、
720 メモリーコントローラー、
730 調停ユニット、740 メモリーコアコントローラー、
750 プライオリティコントローラー、760 メモリーコアコントローラー、
7411 リクエストカウンタ、7412 マスク、
7413 バス競合カウンタ、7414 減算器

【特許請求の範囲】
【請求項1】
バスにアクセスする優先度がそれぞれ異なる複数のバスマスターのうちの一つの注目バスマスターの保証転送帯域に対応するリクエスト許可数を記憶することと、
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することと、
前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理された後に、前記注目バスマスターのアクセス要求を処理することと、
を含む、バス制御方法。
【請求項2】
前記注目バスマスター以外のアクセス要求の処理は、前記バスにアクセスする優先度が高いバスマスターの順に行われる、請求項1に記載のバス制御方法。
【請求項3】
前記リクエスト許可数は、前記注目バスマスターの保証帯域に対応するクロック数から1回のデータ転送に要するクロック数を減じた値を、前記1回のデータ転送に要するクロック数で除した値である、請求項1又は2に記載のバス制御方法。
【請求項4】
前記注目バスマスター以外のアクセス要求が処理される毎に前記リクエスト数を減算し、該リクエスト数が0になったときに前記リクエスト数と同数の前記注目バスマスター以外のアクセス要求が処理されたと判定する、請求項1〜3のいずれかに記載のバス制御方法。
【請求項5】
前記バスにアクセス要求している前記注目バスマスター以外のバスマスターの数を、前記注目バスマスターのリクエスト許可数以内でリクエスト数として記憶することは、前記注目バスマスターの前回分のアクセス要求が処理された後に行われる、請求項1〜4のいずれかに記載のバス制御方法。
【請求項6】
前記注目バスマスター以外のバスマスターのアクセス要求が前記リクエスト数と同数処理された後であって前記注目バスマスターのアクセス要求の処理が行われる前に、前記注目バスマスターよりも前記優先度が高い上位バスマスターの処理が行われた場合、該上位バスマスターの処理が行われた数だけ前記注目バスマスターのリクエスト許可数を減らすことをさらに含む、請求項1〜5のいずれかに記載のバス制御方法。
【請求項7】
前記バスマスターのアクセス要求は、DMA転送を行うためにバス権を獲得するためのアクセス要求である、請求項1〜6のいずれかに記載のバス制御方法。
【請求項8】
前記複数のバスマスターのうち少なくとも一つのバスマスターは、CPUに関連するバスマスターである、請求項1〜7のいずれかに記載のバス制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate