(57)【特許請求の範囲】
【請求項１】
複数のプロセッサとバスとアービタとメモリＩ／Ｆとを備え、
前記複数のプロセッサは、プロセッサ間に固定された順序関係を有し、
前記メモリＩ／Ｆは、メモリＩ／Ｆ内で発生した待ちサイクルに関する情報を待ちサイクル情報として前記アービタへと通知し、
前記アービタは、前記メモリＩ／Ｆからの待ちサイクル情報に応じて、優先度の高いプロセッサの待ちサイクル数が閾値を超えた場合に、前記優先度の高いプロセッサよりも優先度の低いプロセッサからの要求を、前記優先度が高いプロセッサで動作するソフトウェアに応じて予め定めた該プロセッサの待ちサイクルの周期が過ぎるまで受理しない
ことを特徴とする半導体集積回路。
【請求項２】
前記メモリＩ／Ｆは、前記複数のプロセッサの優先度に基づいたメモリアクセスの中断と再開を行う手段を有することを特徴とした請求項１に記載の半導体集積回路。
【請求項３】
プロセッサ間に固定された順序関係を有する複数のプロセッサと、
メモリへのアクセスの中断および再開する手段を有し、更に、前記メモリへのアクセス、中断、および再開に関して生ずる待ちサイクルをプロセッサ毎にカウントして、閾値を超えたプロセッサの通知に用いる待ちサイクル情報を送出するメモリＩ／Ｆと、
前記メモリＩ／Ｆからの待ちサイクル情報に基づき、通知された待ちサイクル数が閾値を超えた所定優先度のプロセッサよりも優先度の低いプロセッサからの要求を、前記所定優先度のプロセッサで動作するソフトウェアに応じて予め定めた該プロセッサの待ちサイクルの周期が過ぎるまで受理しないようにアクセス権を制御するアービタと、
前記複数のプロセッサと前記メモリＩ／Ｆと前記アービタとを接続するバスとを備え、
前記メモリＩ／Ｆに、中断および再開が不能なメモリを接続していることを特徴とする情報処理装置。
【請求項４】
前記メモリＩ／Ｆは、個々のプロセッサ毎に、夫々のプロセッサで動作するタスクの動作周期の最大公倍数の周期に準じて、前記メモリとの通信で生ずる待ちサイクルを計測し、各々の計測結果が所定の閾値を越えた場合に待ちサイクル情報を前記アービタに送出すると共に、前記夫々のプロセッサで動作するタスクの動作周期の最大公倍数の周期期間経過毎に、各々積算中の待ちサイクルをリセット処理する
ことを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記メモリＩ／Ｆは、所定のプロセッサから受理したリード要求が、前記所定のプロセッサと異なるプロセッサからの既に発行しているリード要求よりも優先度が高いことを識別した場合に、先に発行したリード要求で完了したところまでの情報を中断バッファへ保存すると共に、要求の中断にあたり生ずる待ちサイクルを計測する待ちサイクルカウンタ回路を有する
ことを特徴とする請求項３又は４記載の情報処理装置。
【請求項６】
前記メモリＩ／Ｆは、所定のプロセッサから受理したライト要求が、前記所定のプロセッサと異なるプロセッサからの既に発行しているライト要求よりも優先度が高いことを識別した場合に、先に発行したライト要求で完了したところまでの情報を中断バッファへ保存すると共に、要求の中断にあたり生ずる待ちサイクルを計測する待ちサイクルカウンタ回路を有する
ことを特徴とする請求項３又は４記載の情報処理装置。
【請求項７】
前記メモリＩ／Ｆに、ＤＲＡＭ又はＤＤＲＳＲＡＭを接続したことを特徴とする請求項３ないし６の何れか一項に記載の情報処理装置。
【請求項８】
複数のプロセッサに、プロセッサ間に固定された順序関係を設定し、
前記複数のプロセッサの夫々について、メモリＩ／Ｆ内で発生した待ちサイクルを計測し、
計測した値に基づき、優先度の高いプロセッサの待ちサイクル数が閾値を超えた場合に該プロセッサよりも優先度の低いプロセッサからの要求を、前記優先度が高いプロセッサで動作するソフトウェアに応じて予め定めた該プロセッサの待ちサイクルの周期が過ぎるまで受理しないように、アービタを用いて前記複数のプロセッサ毎のメモリへのアクセスを制御する
ことを特徴とするプロセッサ性能保証方法。
【請求項９】
前記メモリＩ／Ｆは、前記複数のプロセッサの優先度に基づいたメモリへのアクセスの中断および再開を行い、中断および再開に伴う待ちサイクルを計測する
ことを特徴とした請求項８に記載のプロセッサ性能保証方法。
【請求項１０】
複数のプロセッサに、プロセッサ間に固定された順序関係を設定し、
メモリＩ／Ｆに、メモリへのアクセスの中断および再開する手段と、前記メモリへのアクセス、中断、および再開に関して生ずる待ちサイクルをプロセッサ毎にカウントして、閾値を超えたプロセッサを示す情報を待ちサイクル情報として送出する回路を付与し、
アービタに、前記メモリＩ／Ｆからの待ちサイクル情報に基づき、通知された待ちサイクル数が閾値を超えた所定優先度のプロセッサよりも優先度の低いプロセッサからの要求を、前記所定優先度のプロセッサで動作するソフトウェアに応じて予め定めた該プロセッサの待ちサイクルの周期が過ぎるまで受理しないようにバスへのアクセス権を制御する回路を付与し、
前記メモリＩ／Ｆに、メモリを接続する
ことを特徴とするプロセッサ性能保証方法。
【請求項１１】
前記メモリＩ／Ｆは、個々のプロセッサ毎に、夫々のプロセッサで動作するタスクの動作周期の最大公倍数の周期に準じて、前記メモリとの通信で生ずる待ちサイクルを計測し、各々の計測結果が所定の閾値を越えた場合に待ちサイクル情報を前記アービタに送出すると共に、前記夫々のプロセッサで動作するタスクの動作周期の最大公倍数の周期期間経過毎に、各々積算中の待ちサイクルをリセット処理する
ことを特徴とする請求項１０記載のプロセッサ性能保証方法。
【請求項１２】
前記メモリＩ／Ｆは、所定のプロセッサから受理したリード要求が、前記所定のプロセッサと異なるプロセッサからの既に発行しているリード要求よりも優先度が高いことを識別した場合に、先に発行したリード要求で完了したところまでの情報を中断バッファへ保存すると共に、要求の中断にあたり生ずる待ちサイクルを計測する
ことを特徴とする請求項１０又は１１記載のプロセッサ性能保証方法。
【請求項１３】
前記メモリＩ／Ｆは、所定のプロセッサから受理したライト要求が、前記所定のプロセッサと異なるプロセッサからの既に発行しているライト要求よりも優先度が高いことを識別した場合に、先に発行したライト要求で完了したところまでの情報を中断バッファへ保存すると共に、要求の中断にあたり生ずる待ちサイクルを計測する
ことを特徴とする請求項１０又は１１記載のプロセッサ性能保証方法。
【請求項１４】
前記メモリとして、ＤＲＡＭ又はＤＤＲＳＲＡＭを接続されることを特徴とする請求項８ないし１３の何れか一項に記載のプロセッサ性能保証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アービタを有する半導体集積回路、情報処理装置およびプロセッサの性能を統一的に保証する方法に関する。
【背景技術】
【０００２】
近年、リアルタイム制御が必要となる装置においても複数のプロセッサを有する半導体集積回路が用いられている。しかしながら、あるプロセッサで任意のソフトウェアを動作させ、一方、その他のプロセッサでは新規に追加したソフトウェアを動作させた場合、新規に追加したソフトウェアが既に動作中のソフトウェアによる処理に干渉してしまう場合がある。その結果、単独プロセッサでは劣化することのなかったリアルタイム性が、複数プロセッサ構成では満足させることができなくなってしまう、という課題があった。
【０００３】
図１１は、関連する半導体集積回路を示す図である。図１１に例示した半導体集積回路では、複数のプロセッサ１０１００Ｐ１〜Ｐｎと、バス１０３００と、アービタ１０２００と、メモリＩ／Ｆ１０４００と、１０５００とから構成される。アービタ１０２００は、バス１０３００での、複数のプロセッサによる性能干渉を防ぐために、あるプロセッサのアクセスを優先的に認める（後記特許文献１）。また、メモリＩ／Ｆ１０４００は、ある優先度の高いプロセッサからのアクセスが来て、かつ、前記プロセッサよりは優先度の低いプロセッサからのアクセスが既にメモリ１０５００を参照している場合、優先度の低いアクセスを中断して、優先度の高いプロセッサのアクセスを先行させる（後記特許文献２と３）。これにより、メモリアクセスに関わる性能干渉を低減することが可能である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特願２００５−１９０４３７号公報
【特許文献２】特願平０９−１７９７７３号公報
【特許文献３】特許３１０８０８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、図１１に示した方式は、以下の問題点を有している。  
全種類のメモリにおいて、アクセスの中断・再開が可能であるわけではないので、もし可能でないメモリの場合には、メモリアクセス動作が保証できない。このような中断・再開が不能であるメモリの一例としては、ＤＲＡＭ、ＤＤＲＳＲＡＭ、一部のＳＲＡＭなどが挙げられる。
【０００６】
即ち、全ての種類のメモリや全ての種類のメモリアクセスに対して、統一的に、プロセッサの性能保証を実現することは上記技術では不可能である。
【０００７】
本発明の目的は、上記課題を解決し、全ての種類のメモリや全ての種類のメモリアクセスに対して、アービタとメモリＩ／Ｆが協調することで、サイクル単位という、細粒度でのプロセッサ性能保証を統一的に実現する装置及び方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の半導体集積回路は、複数のプロセッサとバスとアービタとメモリＩ／Ｆとを備え、前記複数のプロセッサは、プロセッサ間に固定された順序関係を有し、前記メモリＩ／Ｆは、メモリＩ／Ｆ内で発生した待ちサイクルに関する情報を待ちサイクル情報として前記アービタへと通知し、前記アービタは、前記メモリＩ／Ｆからの待ちサイクル情報に応じて、優先度の高いプロセッサの待ちサイクル数が閾値を超えた場合に、前記優先度の高いプロセッサよりも優先度の低いプロセッサからの要求を、前記優先度が高いプロセッサで動作するソフトウェアに応じて予め定めた該プロセッサの待ちサイクルの周期が過ぎるまで受理しないことを特徴とする。
【０００９】
本発明のプロセッサ性能保証方法は、複数のプロセッサに、プロセッサ間に固定された順序関係を設定し、前記複数のプロセッサの夫々について、メモリＩ／Ｆ内で発生した待ちサイクルを計測し、計測した値に基づき、優先度の高いプロセッサの待ちサイクル数が閾値を超えた場合に該プロセッサよりも優先度の低いプロセッサからの要求を、前記優先度が高いプロセッサで動作するソフトウェアに応じて予め定めた該プロセッサの待ちサイクルの周期が過ぎるまで受理しないように、アービタを用いて前記複数のプロセッサ毎のメモリへのアクセスを制御することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、全ての種類のメモリや全ての種類のメモリアクセスに対して、サイクル単位という、非常にきめ細かい単位でのプロセッサ性能保証を実現する装置及び方法を提供できる。  
尚、無論、中断・再開が可能なメモリに対しては、優先度の高いプロセッサの性能を上記技術と同等に保証することが可能である。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施例の装置の構成を示す図である。
【図２】本発明の一実施例のメモリＩ／Ｆの構成を示す図である。
【図３】本発明の一実施例のメモリＩ／Ｆの動作を説明する図である。
【図４】本発明の一実施例のメモリＩ／Ｆの動作を説明する図である。
【図５】本発明の一実施例のメモリＩ／Ｆの動作を説明する図である。
【図６】本発明の一実施例のメモリＩ／Ｆの動作を説明する図である。
【図７】本発明の一実施例のアービタの構成を示す図である。
【図８】本発明の一実施例のアービタの動作を説明する図である。
【図９】本発明の一実施例のアービタの動作を説明する図である。
【図１０】本発明の別の実施例のアービタの構成を示す図である。
【図１１】関連する技術を用いる半導体装置の構成を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施の形態について説明する。  
本発明は、その好ましい一実施の形態の半導体集積回路（半導体集積装置）によれば、複数のプロセッサと、バスと、アービタと、メモリＩ／Ｆとを備え、アービタとメモリＩ／Ｆとが接続されている。メモリＩ／Ｆには、優先度に基づいたメモリアクセスの中断と再開を行う回路が設けられている。また、半導体集積回路は、メモリＩ／Ｆに所望のメモリを接続し、情報処理装置として使用される。
【００１３】
半導体集積回路は、動作時に、メモリＩ／Ｆで発生した待ちサイクルに応じて、プロセッサのアクセス権を制御するアービタのポリシーを変更する。
【００１４】
上記のように半導体集積装置を構成および動作させることによって、サイクル単位での、きめ細かいプロセッサの性能保証を実現する。
【００１５】
以下、実施例に即して説明する。  
【実施例】
【００１６】
図１は、本発明の一実施例の装置の構成を説明する図である。図１における装置は、複数のプロセッサ１００Ｐ０〜Ｐｎ、アービタ２００、バス３００、メモリＩ／Ｆ４００、メモリ５００とを有する。
【００１７】
プロセッサ１００は、ここではロジックで構成された演算装置として定義する。したがって、ＣＰＵ、アクセラレータやＦＰＧＡなど演算装置であれば何でも構わない。このプロセッサには動作させるソフトウェア（プログラム）に応じて、優先度で順位付けられる。優先度を例示すれば、エンジン制御において、プロセッサ１００Ｐ０が燃焼制御を担当し、かつ、プロセッサ１００Ｐ１が燃費改善計算を行うとした場合、プロセッサ１００Ｐ０はプロセッサ１００Ｐ１よりも優先度が高いとされる。その結果、この装置では、プロセッサ１００Ｐ０の性能をサイクル単位で保証する。以降では、Ｐ０，Ｐ１，Ｐ２の順で優先度が高いと仮定する。
【００１８】
バス３００とメモリ５００は、一般のバス及びメモリであれば何でも構わない。
【００１９】
メモリＩ／Ｆ４００は、メモリ５００へのアクセスを制御し、さらに、メモリアクセスの中断・再開機能を備える。  
装置は、中断・再開に関し、例えば、読出しから書込みへの切替に１サイクル必要であるといった、待ちサイクルを仕様として必要とされるメモリを利用する場合がある。あるいは、ロックアクセスなど、アクセスによっては待ちが生じる可能性がある。  
メモリＩ／Ｆ４００は、このような待ちが発生する場合において、その待ちサイクルをプロセッサ毎にカウントする。そして、そのカウントがある閾値になると、アービタ２００へその情報（待ちサイクル情報）を通知する。当該通知は、バスラインと異なるラインから情報として送っても良いし、プロセッサ毎に要求不受理信号のラインを設けて電圧のhigh又はLowを用いて通知するようにしてもよい。
【００２０】
ここで、この待ちサイクルは、ある時間間隔で測定される。無論、移動平均などの処理を行った値でもよい。いずれにしても待ちサイクルは最高優先度のプロセッサに性能影響を与えるパラメータとして定義される。例えば、リアルタイムシステムにおいては、プロセッサで実行されるタスク周期の最大公倍数として知られるハイパー周期を持つため、それぞれのカウンタは、ハイパー周期毎に待ちサイクルをカウントすることとしてもよい。
【００２１】
すなわち、ある繰り返し周期において、待ちサイクルをカウントすることで、その周期内における待ち情報をサイクル単位できめ細かく測定することができる。  
その結果、性能保証を行いたいプロセッサをサイクル単位で制御することが可能となる。  
また、上記周期がすぎれば、その待ちをゼロにリセットし、待ちサイクル情報（又は要求不受理信号）を用いて通知を行なっている場合にはアービタ２００への通知も取り消す。その後、新たな周期における待ちサイクルの計測を同様に繰り返す。周期や閾値の設定、待ちのリセットは、一般のタイマー装置をそのまま利用することができる。なお、アービタ２００への通知タイミングは、閾値を超えた場合について説明したものの、無論、それより早めたりするなど、システムに応じて、いかようにも変更可能である。
【００２２】
アービタ２００は、プロセッサからのアクセス要求に応じて、どのプロセッサにバスを割り当てるかを決める機能に加え、図１１に示したアービタと異なり、メモリＩ／Ｆ４００からの指示によって、その要求選択ポリシーを変更する。具体的には、メモリＩ／Ｆ４００から指示（通知）があった場合に、閾値を超えたカウンタに対応するプロセッサの持つ優先度より低いプロセッサからのアクセス要求を受理しないように、バス３００を制御する。
【００２３】
すなわち、優先度の低いプロセッサについては、バスへの入り口でアクセスを拒否する機能を持つことが大きな特徴である。これにより、バス以降であるメモリＩ／Ｆ内に、優先度の低いプロセッサからのアクセスが存在しないこととなる。このため、どのようなメモリであっても、優先度の高いプロセッサのアクセスが、それより低いプロセッサからのアクセスによって干渉されることなく、あらかじめ指定された閾値以上での待ちが発生することはない。
【００２４】
図２は、発明の一実施例のメモリＩ／Ｆ４００の構成を示すブロック図である。メモリＩ／Ｆ４００は、個々のプロセッサ（ＣＰＵ）に対して、リード応答バッファ４１０Ｐ０〜Ｐｎ、リード要求バッファ４２０Ｐ０〜Ｐｎ、ライト要求バッファ４３０Ｐ０〜Ｐｎ、ライト応答バッファ４４０Ｐ０〜Ｐｎを備え、加えて、リード要求選択部４５０、リード中断バッファ４５１、ライト要求選択部４６０、ライト中断バッファ４６１、待ちサイクルカウンタ４７０を備える。
【００２５】
リード要求バッファ４２０Ｐ０〜Ｐｎ、ライト要求バッファ４３０Ｐ０〜Ｐｎは、各プロセッサからのバスアクセスを保存する。一方、リード応答バッファ４１０Ｐ０〜Ｐｎ、ライト応答バッファ４４０Ｐ０〜Ｐｎは、受理したバスアクセスに対する応答を保存する。とりわけリードアクセスに関しては、メモリ５００から読み出した値も保存する。これらのバッファは、一般のメモリＩ／Ｆが備える通常のバッファと同様である。
【００２６】
リード要求選択部４５０は、リード要求バッファ４２０Ｐ０〜Ｐｎからの要求を優先度に基づいて選択して、実際にメモリ５００へリードアクセスを発行する。つまり、リード要求選択部４５０では、ＣＰＵ０（プロセッサ１００Ｐ０）の要求は、ＣＰＵ１（プロセッサ１００Ｐ１）やＣＰＵ２（プロセッサ１００Ｐ２）の要求よりも優先的に選択される。このとき、もし仮にＣＰＵ１のアクセスが既にメモリへ発行されている場合、リード要求選択部４５０は、そのアクセスをリード中断バッファ４５１へと保存し、そして、ＣＰＵ０のアクセス要求を発行する。ＣＰＵ０のアクセス要求の発行が終わったら、リード中断バッファ４５１の中で最大の優先度を持つアクセス、すなわち、さきほど保存したＣＰＵ１のアクセスを再開する。ここで、もし中断するにあたって待ちサイクルが必要となった場合には、待ちサイクル数を、待ちサイクルカウント４７０へと通知する。なお、メモリ５００から読み出されたデータは、リード応答バッファ４１０Ｐ０〜Ｐｎに蓄えられて、全てのデータの読出し完了後に該当するプロセッサに応答される。
【００２７】
ライト要求選択部４６０は、ライト要求バッファ４３０Ｐ０〜Ｐｎからの要求を優先度に基づいて選択して、実際にメモリ５００へライトアクセスを発行する。つまり、ライト要求選択部４６０では、ＣＰＵ０の要求は、ＣＰＵ１やＣＰＵ２の要求よりも優先的に選択される。このとき、もし仮にＣＰＵ１のアクセスが既にメモリへ発行されている場合、ライト要求選択部４６０は、そのアクセスをライト中断バッファ４６１へと保存し、そして、ＣＰＵ０のアクセス要求を発行する。ＣＰＵ０のアクセス要求の発行が終わったら、ライト中断バッファ４６１の中で最大の優先度を持つアクセス、すなわち、さきほど保存したＣＰＵ１のアクセスを再開する。ここで、もし中断するにあたって待ちサイクルが必要となった場合には、待ちサイクル数を、待ちサイクルカウント４７０へと通知する。なお、リード要求とは異なり、ライト要求選択部４６０は、ライト要求を受理した段階で、ライト応答バッファ４４０Ｐ０〜Ｐｎに応答を保存する。無論、ライト要求バッファ４３０Ｐ０〜Ｐｎで要求を受理した段階で応答を返してもよいし、ライト要求が実際に完了した段階で応答を返しても良い。いずれにせよ、従来と同じタイミングでライト応答を返せばよい。
【００２８】
リード中断バッファ４５１は、読出しアクセスに関し、例えば、残りの読出し長、読み出しサイズ、どこまでの読出しを終えたかを示すアドレス等の情報をプロセッサ毎に記憶する。一方、ライト中断バッファ４６１は、書込みアクセスに関し、例えば、残りの書込み長、書込みサイズ、どこまでの書込みを終えたかを示すアドレス等の情報をプロセッサ毎に記憶する。
【００２９】
待ちサイクルカウンタ４７０は、どのプロセッサ（ＣＰＵ）からのアクセスにどれだけの待ちサイクルが生じているかを、それぞれのプロセッサ毎にカウントする。もしそのカウントがある閾値を越えた場合には、アービタ２００へその情報を通知する。なお、先に述べたように、このカウンタは、それぞれのプロセッサ独立のある周期（例：ハイパー周期）で、その待ちサイクルをカウントする。即ち、ある周期を経過したら、待ちサイクルはリセットされ、その結果、もしアービタ２００へ低優先度のプロセッサの要求を受理しないように通知している場合には 何も通知されなくなる。また、リード要求バッファ４２０Ｐ０〜Ｐｎ、ライト要求バッファ４３０Ｐ０〜Ｐｎ、に既に該当するプロセッサの要求が入っている場合には、その閾値の前にアービタ２００へ通知してもよい。いずれにしても、指定された閾値が保証できるように、閾値以下の値を維持できるようなタイミングで通知する。なお、この周期や閾値は、事前に装置側が決めても良いし、ユーザからの設定で決めても良い。
【００３０】
図３は、メモリＩ／Ｆ４００の動作の例を示す図である。図３において、矢印脇のＳと数字からなる符合は、ステップ番号を表している。この例では、ＣＰＵｎからのリード要求を処理する場合について説明する。  
ステップ１（Ｓ１）：メモリＩ／Ｆ４００は、バス３００を介してＣＰＵｎからリード要求を受理し、リード要求バッファ４２０Ｐｎへと保存する。  
ステップ２（Ｓ２）：リード要求バッファ４２０Ｐｎは、リード要求選択部４５０へ当該要求を渡す。  
ステップ３（Ｓ３）：リード要求選択部４５０は、メモリ５００へ当該リード要求を発行する。  
ステップ４（Ｓ４）：メモリ５００からの読出データを、リード応答バッファ４１０Ｐｎへと保存する。  
ステップ５（Ｓ５）：リード応答バッファ４１０Ｐｎは、当該要求への応答を、バス３００を介してＣＰＵｎへと返す。
【００３１】
図４は、メモリＩ／Ｆ４００の動作の例を示す図である。図４において、矢印脇のＳと数字からなる符合は、ステップ番号を表している。この例では、ＣＰＵｎからのリード要求を処理している最中に、優先度の高いＣＰＵ０からの要求を受理した場合について説明する。
【００３２】
ステップ１（Ｓ１）：メモリＩ／Ｆ４００は、バス３００を介してＣＰＵｎからリード要求を受理し、リード要求バッファ４２０Ｐｎへと保存する。  
ステップ２（Ｓ２）：リード要求バッファ４２０Ｐｎは、リード要求選択部４５０へ当該要求を渡す。  
ステップ３（Ｓ３）：リード要求選択部４５０は、ＣＰＵｎのリード要求をメモリへ発行する。  
ステップ４（Ｓ４）：メモリＩ／Ｆ４００は、ＣＰＵ０からリード要求を受理し、そして、リード要求バッファ４２０Ｐ０へと保存する。  
ステップ５（Ｓ５）：リード要求バッファ４２０Ｐ０は、リード要求選択部４５０へ当該要求を渡す。
【００３３】
ステップ６（Ｓ６）：リード要求選択部４５０は、受理したリード要求が、既に発行しているリード要求よりも優先度が高いことを識別する。リード要求選択部４５０は、識別結果に基づき、先に発行したリード要求（ＣＰＵｎの要求）で完了したところまでの情報をリード中断バッファ４５１へと保存する。  
ステップ７（Ｓ７）：リード要求選択部４５０は、要求の中断にあたり、待ちサイクルを待ちサイクルカウンタ４７０へと通知する。このとき、待ちサイクルがなければ通知は省略できる。このタイミングで閾値を超えた場合には、サイクルカウンタ４７０は、閾値を超えたプロセッサについてアービタ２００へ通知を行う。
【００３４】
ステップ８（Ｓ８）：リード要求選択部４５０は、ＣＰＵ０のリード要求をメモリへ発行する。  
ステップ９（Ｓ９）：メモリ５００からの読出データを、リード応答バッファ４１０Ｐ０へと保存する。  
ステップ１０（Ｓ１０）：リード応答バッファ４１０Ｐ０は、当該要求への応答を、バス３００を介してＣＰＵ０へと返す。  
ステップ１１（Ｓ１１）：リード要求選択部４５０は、リード中断バッファ４５１からさきほど保存したＣＰＵｎのリード要求情報を受理する。  
ステップ１２（Ｓ１２）：リード要求選択部４５０は、プロセッサ１００Ｐｎのリード要求をメモリへ発行する。  
ステップ１３（Ｓ１３）：メモリ５００からの読出データを、リード応答バッファ４１０Ｐｎへと保存する。  
ステップ１４（Ｓ１４）：リード応答バッファ４１０Ｐｎは、当該要求への応答を、バス３００を介してＣＰＵｎへと返す。
【００３５】
図５は、メモリＩ／Ｆ４００の動作の例を示す図である。図５において、矢印脇のＳと数字からなる符合は、ステップ番号を表している。この例では、ＣＰＵｎからのライト要求を処理する場合について説明する。
【００３６】
ステップ１（Ｓ１）：メモリＩ／Ｆ４００は、バス３００を介してＣＰＵｎからライト要求を受理し、ライト要求バッファ４３０Ｐｎへと保存する。  
ステップ２（Ｓ２）：ライト要求バッファ４３０Ｐｎは、ライト要求選択部４６０へ当該要求を渡す。  
ステップ３（Ｓ３）：ライト要求選択部４６０は、メモリ５００へ当該ライト要求を発行する。  
ステップ４（Ｓ４）：ライト要求選択部４６０の受理に伴い、当該ライト要求への応答をライト応答バッファ４４０Ｐｎへと保存する。  
ステップ５（Ｓ５）：ライト応答バッファ４４０Ｐｎは、当該要求への応答を、バス３００を介してＣＰＵｎへと返す。
【００３７】
図６は、メモリＩ／Ｆ４００の動作の例を示す図である。図６において、矢印脇のＳと数字からなる符合は、ステップ番号を表している。この例では、ＣＰＵｎからのライト要求を処理している最中に、優先度の高いＣＰＵ０からの要求を受理した場合について説明する。また、その受理によって、ＣＰＵ０の待ちサイクルが規定値を超えてしまう場合を想定する。
【００３８】
ステップ１（Ｓ１）：メモリＩ／Ｆ４００は、バス３００を介してＣＰＵｎからライト要求を受理し、そして、ライト要求バッファ４３０Ｐｎへと保存する。  
ステップ２（Ｓ２）：ライト要求バッファ４３０Ｐｎは、ライト要求選択部４６０へ当該要求を渡す。  
ステップ３（Ｓ３）：ライト要求選択部４６０は、ＣＰＵｎのライト要求をメモリへ発行する。  
ステップ４（Ｓ４）：ライト要求選択部４６０の受理に伴い、当該ライト要求への応答をライト応答バッファ４４０Ｐｎへと保存する。  
ステップ５（Ｓ５）：ライト応答バッファ４４０Ｐｎは、当該要求への応答を、バス３００を介して、ＣＰＵｎへと返す。  
ステップ６（Ｓ６）：メモリＩ／Ｆ４００は、ＣＰＵ０からライト要求を受理し、そして、ライト要求バッファ４３０Ｐ０へと保存する。  
ステップ７（Ｓ７）：ライト要求バッファ４３０Ｐ０は、ライト要求選択部４６０へ当該要求を渡す。
【００３９】
ステップ８（Ｓ８）：ライト要求選択部４６０は、受理したライト要求が、既に発行しているライト要求よりも優先度が高いことを識別する。ライト要求選択部４６０は、識別結果に基づき、先に発行したライト要求（ＣＰＵｎの要求）で完了したところまでの情報をライト中断バッファ４６１へと保存する。  
ステップ９（Ｓ９）：ライト要求選択部４６０は、要求の中断にあたり、待ちサイクルを待ちサイクルカウンタ４７０へと通知する。このとき、待ちサイクルがなければ通知は省略できる。  
ステップ１０（Ｓ１０）：待ちサイクルカウント４７０は、ここでＣＰＵ０の待ちサイクルが規定の閾値以上になったことを検知してアービタ２００へ通知する。無論、規定した値以下であれば、このステップは必要ない。
【００４０】
ステップ１１（Ｓ１１）：ライト要求選択部４６０は、ＣＰＵ０のライト要求をメモリ５００へ発行する。  
ステップ１２（Ｓ１２）：ライト要求選択部４６０の受理に伴い、当該ライト要求への応答をライト応答バッファ４４０Ｐ０へと保存する。  
ステップ１３（Ｓ１３）：ライト応答バッファ４４０Ｐ０は、当該要求への応答を、バス３００を介してＣＰＵ０へと返す。  
ステップ１４（Ｓ１４）：ライト要求選択部４６０は、ライト中断バッファ４６１からさきほど保存したＣＰＵｎのライト要求情報を受理する。  
ステップ１５（Ｓ１５）：ライト要求選択部４６０は、ＣＰＵｎのライト要求をメモリ５００へ発行する。
【００４１】
図７は、発明の一実施例のアービタ２００の構成を示す図である。図７を参照すると、アービタ２００は、要求受理部２１０と、選択部２２０とから構成される。
【００４２】
要求受理部２１０は、バス３００を介して、プロセッサからのアクセス要求を受理して、選択部２２０によって定められるポリシーに応じて、バスの使用権を認めるプロセッサを決める。また、要求受理部２１０は、使用権を設定するプロセッサへその認可を通知する。
【００４３】
選択部２２０は、メモリＩ／Ｆ４００からの通知を受理することに特徴を有する。即ち、選択部２２０は、図１０に示した選択部と、メモリＩ／Ｆからの通知を受理するか否かに違いがある。  
通常動作時、選択部２２０は、優先度の高いプロセッサを選択的に選ぶように要求受理部２１０へと通知する。一方、メモリＩ／Ｆ４００から通知を受けると、選択部２２０は、該当する優先度未満のプロセッサからの要求は常時拒否するよう、要求受理部２１０へと通知する。したがって、要求受理部２１０が通知を受けた以降、該当する優先度未満のプロセッサは、バスに対する使用権の発行を受けられない。これにより、低優先度のプロセッサによって、高優先度のプロセッサのメモリＩ／Ｆでの待ちサイクルの発生を防ぐことができる。なお、この選択部２２０に、ラウンドロビンのような公平型の選択ポリシーを導入して、最高優先度のプロセッサが動的に切り替えてもよい。
【００４４】
図８は、アービタ２００の動作の例を示す図である。図８において、矢印脇のＳと数字からなる符合は、ステップ番号を表している。この例では、メモリＩ／Ｆ４００（待ちサイクルカウンタ４７０）から通知がない場合の動作について説明する。
【００４５】
ステップ１（Ｓ１）：アービタ２００は、バス３００を介してプロセッサ群からアクセス要求を受理する。
【００４６】
ステップ２（Ｓ２）：選択部２２０は、アクセス要求の中で最高優先度を持つプロセッサへバスの使用権を許可するように、要求受理部２１０へと通知する。
【００４７】
ステップ３（Ｓ３）：要求受理部２１０は、そのアクセス要求の中で最高優先度を持つプロセッサへバスの使用権を許可する。  
図９は、アービタ２００の動作の例を示す図である。図９において、矢印脇のＳと数字（英字）からなる符合は、ステップ番号を表している。この例では、メモリＩ／Ｆ４００（待ちサイクルカウンタ４７０）から通知があった場合の動作について説明する。
【００４８】
ステップin（Ｓ in）：選択部２２０は、メモリＩ／Ｆ４００から待ちサイクルが規定値を超えたとき通知を受理する。
【００４９】
ステップ１（Ｓ１）：アービタ２００は、バス３００を介してプロセッサ群からアクセス要求を受理する。
【００５０】
ステップ２（Ｓ２）：選択部２２０は、アクセス要求の中で最高優先度を持つプロセッサで、かつ、待ちサイクルの閾値を超えたプロセッサの持つ優先度以上であるプロセッサであれば、バスの使用権を許可するように、要求受理部２１０へと通知する。
【００５１】
ステップ３（Ｓ３）：要求受理部２１０は、前記選択部２２０のポリシーに従って、プロセッサへバスの使用権を許可する。
【００５２】
具体例を説明すれば、アービタ２００は、ＣＰＵ１の待ちサイクルが閾値を超えてメモリＩ／Ｆ４００から通知を受けた場合、ＣＰＵ２からしかアクセス要求（Ｓ１）がない場合でも、ＣＰＵ１の待ちサイクルの閾値を超えているため、ＣＰＵ２からの要求を受理しない（Ｓ３）。他方、ＣＰＵ０からのアクセス要求であれば、ＣＰＵ０の優先度はＣＰＵ１よりも高いため、その要求は受理される。
【００５３】
以上に述べた実施例において、バス３００の優先度制御によりバス３００の出力結果を絞り、かつ、メモリＩ／Ｆ４００での中断・再開機能により、万一メモリ５００へと抜け出たアクセスも対処することができる。さらに、そのアクセスの中断・再開にオーバヘッドが発生する場合でも、アービタ２００を制御することで、そもそもバス３００の入り口でアクセスを絞ることが可能となる。即ち、サイクル単位での制御が可能である。
【００５４】
尚、上記実施例では、メモリＩ／Ｆ４００内で、複数のプロセッサの夫々について、発生した待ちサイクルを計測し、アービタ２００に待ちサイクル情報を通知することとしたが、図１０に示すように計測をアービタ２００内で行なってもよい。この場合は、メモリＩ／Ｆから待ちサイクルの有無を示す待ちサイクル情報がアービタ２００に通知されるようにメモリＩ／Ｆを構成する。このように、アービタでプロセッサ毎に待ちサイクルを計測すれば、例えば、複数のプロセッサが接続された複数のメモリＩ／Ｆに対する統一的な優先度制御を実現できる。
【００５５】
以上説明したように、本発明によれば、全ての種類のメモリや全ての種類のメモリアクセスに対して、サイクル単位という、非常にきめ細かい単位でのプロセッサ性能保証を実現する装置及び方法を提供できる。  
具体的には、中断・再開が不可能なメモリに対しても、優先度の高いプロセッサの性能を保証できる。また、中断・再開が可能なメモリに対しては、優先度の高いプロセッサの性能を劣化させることなく性能を保証できる。
【００５６】
なお、前記各実施例では、サイクル単位で、きめ細かい性能保証を統一的に行う装置及び方法を例に説明したが、本発明は、かかる装置および方法に限定されるものではなく、任意の装置および方法に適用可能である。
【００５７】
また、本発明を上記実施例に即して説明したが、本発明は、上記実施例の構成や動作にのみ限定されるものではなく、本発明の範囲内で当業者であればなしうることが可能な各種変形、修正を含むことはもちろんである。
【産業上の利用可能性】
【００５８】
本発明は、産業機器、車載システム、飛行機など、リアルタイム性が必要になる装置のマイコンに利用できる。また、ＭＰＵにも適用できる。
【符号の説明】
【００５９】
１００Ｐ０,１００Ｐ１,１００Ｐｎ  プロセッサ
２００  アービタ
２１０  要求受理部
２２０  選択部
３００  バス
４００  メモリＩ／Ｆ
４１０Ｐ０,４１０Ｐｎ  リード応答バッファ
４２０Ｐ０,４２０Ｐｎ  リード要求バッファ
４３０Ｐ０,４３０Ｐｎ  ライト要求バッファ
４４０Ｐ０,４４０Ｐｎ  ライト応答バッファ
４５０  リード要求選択部
４５１  リード中断バッファ
４６０  ライト要求選択部
４６１  ライト中断バッファ
４７０  待ちサイクルカウンタ
５００  メモリ
１０１００Ｐ０,１０１００Ｐ１,１０１００Ｐｎ  プロセッサ
１０２００  アービタ
１０３００  バス
１０４００  メモリＩ／Ｆ
１０５００  メモリ
【図１】
0005494925.tif 000002
【図２】
0005494925.tif 000003
【図３】
0005494925.tif 000004
【図４】
0005494925.tif 000005
【図５】
0005494925.tif 000006
【図６】
0005494925.tif 000007
【図７】
0005494925.tif 000008
【図８】
0005494925.tif 000009
【図９】
0005494925.tif 000010
【図１０】
0005494925.tif 000011
【図１１】
0005494925.tif 000012