(57)【特許請求の範囲】
【請求項１】
投入されたコマンドを処理する処理部と、
前記処理部が処理したコマンドを優先順位が割り当てられた複数のキューのいずれかに保持する保持部と、
前記複数のキューのうち優先順位が最も高いキューを除いて、保持されたコマンドが選択されなかった非選択回数をキュー毎に計数する計数部と、
乱数を発生する乱数部と、
前記乱数部が生成した乱数が所定数に合致した場合、前記複数のキューに割り当てられた優先順位を、前記計数部が計数した非選択回数が所定値に達したキューの優先順位が最も高くなるように変更する変更部と、
前記複数のキューに保持されたコマンドのいずれかを、優先順位に基づいて選択する選択部を有することを特徴とする演算処理装置。
【請求項２】
前記処理部はさらに、
投入されたコマンドを処理できない場合にリトライを発生し、
前記演算処理装置はさらに、
コマンドを前記処理部に入力するとともに、優先度が割り当てられた複数の入力ポートと、
前記処理部に投入されたコマンドにリトライが発生したかを入力ポート毎に監視する監視部と、
コマンドを遅延させる遅延時間を入力ポート毎に指定する遅延部と、
いずれかの入力ポートから前記処理部に投入されたコマンドにリトライが発生した旨を前記監視部が検出した場合、前記遅延部が指定する遅延時間に基づき、前記入力ポートからのコマンドを遅延させる調整部と、
前記調整部が遅延させたコマンドを、前記優先度に基づいて前記処理部に投入する投入部を有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
投入されたコマンドを処理する処理部と、前記処理部が処理したコマンドを優先順位が割り当てられた複数のキューのいずれかに保持する保持部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する計数部が、前記複数のキューのうち優先順位が最も高いキューを除いて、保持されたコマンドが選択されなかった非選択回数をキュー毎に計数し、
前記演算処理装置が有する乱数部が、乱数を発生し、
前記乱数部が生成した乱数が所定数に合致した場合、前記演算処理装置が有する変更部が、前記複数のキューに割り当てられた優先順位を、前記計数部が計数した非選択回数が所定値に達したキューの優先順位が最も高くなるように変更し、
前記演算処理装置が有する選択部が、前記複数のキューに保持されたコマンドのいずれかを、優先順位に基づいて選択することを特徴とする演算処理装置の制御方法。
【請求項４】
前記処理部はさらに、
投入されたコマンドを処理できない場合にリトライを発生し、
前記演算処理装置の制御方法はさらに、
前記演算処理装置が有する優先度が割り当てられた複数の入力ポートに、コマンドを入力し、
前記演算処理装置が有する監視部が、前記処理部に投入されたコマンドにリトライが発生したかを入力ポート毎に監視し、
前記演算処理装置が有する調整部が、いずれかの入力ポートから前記処理部に投入されたコマンドにリトライが発生した旨を前記監視部が検出した場合、指定されたコマンドを遅延させる遅延時間に基づき、前記入力ポートからのコマンドを遅延させ、
前記演算処理装置が有する投入部が、前記調整部が遅延させたコマンドを、前記優先度に基づいて前記処理部に投入することを特徴とする請求項３記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサにコマンドをより適切に処理させるための技術に関する。
【背景技術】
【０００２】
近年、プロセッサでは、より効率的に資源を利用できるように、処理対象とするコマンドに優先順位を設け、優先順位に分けて待ち行列（コマンド・キュー）を生成することが行われている。例えば複数のプロセッサを接続したマルチ・プロセッサ・システムでは、他のプロセッサへデータを送出するためのコマンドには高い優先度を割り当てるのが普通である。【０００３】
コマンド（コマンド・キュー）に優先順位を設けることにより、キューに存在するコマンドは優先順位に従って選択されるようになる。それにより、優先順位の高いコマンドの発行頻度が高くなると、優先順位の低いコマンドは選択され難くなる。プロセッサを動作させるクロックの周波数が外部バスのクロックの周波数と比較して大きな差がある、或いは外部バスの幅が小さいような場合、外部にリクエストとしてコマンドを出力するのにかなり多くのクロック数が必要である。このため、外部にリクエストとして出力するコマンドを選択する場合には、優先順位の高いコマンドの発行頻度がそれほど高くなくとも、優先順位の低いコマンドが選択されない状況が生じやすくなる。【０００４】
図１は、優先順位の異なる２つのコマンド・キューにそれぞれ存在するコマンド数によって選択されるコマンドを示すタイムチャートである。その図１では、（Ａ）に優先順位の高いコマンド・キュー（図中「high-priority-queue」と表記）、（Ｂ）にそれより優先順位の低いコマンド・キュー（図中「low-priority-queue」と表記）、をそれぞれ示している。また、４〜８の数値はコマンド数（cmd-num）、bus-enは外部バスにコマンドの出力を開始したタイミング、rlsはコマンドのリリース（キューからの削除）、setはコマンドのセット（キューへの登録）、をそれぞれ表している。バス（ｂｕｓ）に出力されるコマンド（データ）に表記した（Ａ）はコマンドを選択したキューが優先順位の高いほうであることを表している。そのようにして、優先順位の異なる２つのコマンド・キューにのみ注目する形で、それらから選択されてバスに出力されるコマンドを示している。【０００５】
図１に示すように、コマンド・キューへのコマンドの登録は、バスにコマンドを出力するのに要する時間より短時間で行うことが可能である。このため、コマンド・キューに多数のコマンドが滞留している状況が生じやすい。その状況が優先順位の高いコマンド・キューで生じると、優先順位の低いコマンド・キューからはかなり長い期間、コマンドが選択されなくなる。【０００６】
優先順位の低いコマンドであっても、そのコマンドを長い期間、選択しないことによって処理の進行に支障が生じる可能性がある。性能が低下するだけでなく、ハングしてしまう可能性もある。このようなことから、優先順位が低いコマンドが長い期間、選択されない状況となるのを回避することが重要と考えられる。【０００７】
現在のプロセッサの大部分には、コマンドの待ち時間をより短くして高速化するために、パイプラインが搭載されている。そのパイプラインには、準備ができたコマンドから順次、投入される。しかし、コマンドによっては、再投入（リトライ）となることがある。そのリトライは、先行するコマンドとの競合や、利用可能な資源の状況などによって行われることとなる。【０００８】
例えばコマンドの実行に必要なデータが格納されたレジスタを他のコマンドの実行でアクセスしている、或いは実行のためにアクセスする必要があるような場合、そのレジスタへのアクセスは制限され、コマンドを実行完了させることができなくなる。このため、そのような場合には、コマンドはリトライとなる。アクセスを制限すべきレジスタを示す情報（例えばアドレス値）の保持用には専用のレジスタ（ロックレジスタ）が用いられる。【０００９】
リトライとなったコマンドは、元のキューに戻され、再度、パイプラインに投入される。しかし、そのリトライされたコマンドが再び、同様の理由でリトライとなり、そのリトライを繰り返してしまう場合がある。【００１０】
図２は、パイプラインによるコマンド処理の進行を示すタイムチャートである。横軸は時間、縦軸はステージをそれぞれ示している。縦軸と平行な直線の間隔は、動作用クロック１周期分の時間を表している。そのパイプラインのステージ数は８であり、階段状の太線は、時間の経過に伴うステージの遷移を表している。横軸と平行な太線は、コマンドの実行によって或るレジスタがロック（アクセス制限）される期間を表している。（Ａ）はリトライされるコマンド、（Ｂ１）、（Ｂ２）はリトライされない他のコマンドを表している。【００１１】
図２に示すように、コマンド（Ａ）は、先行するコマンドによるレジスタのロックによりリトライとなり、その後の投入でも、先行するコマンド（Ｂ１）（Ｂ２）によるロックによってリトライとなっている。そのように、同じ資源（ここではレジスタ）を利用するコマンドが一定の周期で交互に投入されるような場合、同じコマンドのみがリトライを繰り返すような状況となる。その周期が一定でなくとも、同じコマンドのみがリトライを繰り返すような状況となる可能性がある。そのリトライは利用可能な資源の制約によって生じることから、コマンドの優先順位とは無関係である。つまり、例えばコマンド（Ａ）がコマンド（Ｂ１）（Ｂ２）より高い優先順位のキューから選択したものであっても、コマンド（Ａ）のみリトライを繰り返す状況となる場合がある。そのような状況は、コア部を複数、搭載したマルチ・コア・プロセッサで発生しやすい。【００１２】
同じコマンドのリトライを繰り返すことは、そのコマンドを長い期間、実行しないことに相当する。このことから、優先順位に従ってコマンドを選択する場合と同様に、処理の進行に支障が生じ、性能の低下やハングが発生してしまうことになる。このことから、コマンドのリトライを繰り返す状況となるのを回避することが重要と考えられる。
【発明の開示】
【００１３】
本発明は、優先順位が低いコマンドが長い期間、選択されない状況となるのを回避するための技術を提供することを第１の目的とする。
また、本発明は、パイプラインへのコマンドのリトライ（再投入）を繰り返す状況となるのを回避するための技術を提供することを第２の目的とする。
【００１４】
本発明の第１の態様の演算処理装置は、投入されたコマンドを処理する処理部と、処理部が処理したコマンドを優先順位が割り当てられた複数のキューのいずれかに保持する保持部と、複数のキューのうち優先順位が最も高いキューを除いて、保持されたコマンドが選択されなかった非選択回数をキュー毎に計数する計数部と、乱数を発生する乱数部と、乱数部が生成した乱数が所定数に合致した場合、複数のキューに割り当てられた優先順位を、計数部が計数した非選択回数が所定値に達したキューの優先順位が最も高くなるように変更する変更部と、複数のキューに保持されたコマンドのいずれかを、優先順位に基づいて選択する選択部を有する。
【００１５】
本発明の第２の態様の演算処理装置は、上記第１の態様において、処理部はさらに、投入されたコマンドを処理できない場合にリトライを発生し、演算処理装置はさらに、コマンドを処理部に入力するとともに、優先度が割り当てられた複数の入力ポートと、処理部に投入されたコマンドにリトライが発生したかを入力ポート毎に監視する監視部と、コマンドを遅延させる遅延時間を入力ポート毎に指定する遅延部と、いずれかの入力ポートから処理部に投入されたコマンドにリトライが発生した旨を監視部が検出した場合、遅延部が指定する遅延時間に基づき、入力ポートからのコマンドを遅延させる調整部と、調整部が遅延させたコマンドを、優先度に基づいて処理部に投入する投入部を有する。
【００１８】
本発明の第１の態様の演算処理装置の制御方法は、投入されたコマンドを処理する処理部と、処理部が処理したコマンドを優先順位が割り当てられた複数のキューのいずれかに保持する保持部とを有する演算処理装置に適用されるものであり、演算処理装置が有する計数部が、複数のキューのうち優先順位が最も高いキューを除いて、保持されたコマンドが選択されなかった非選択回数をキュー毎に計数し、演算処理装置が有する乱数部が、乱数を発生し、乱数部が生成した乱数が所定数に合致した場合、演算処理装置が有する変更部が、複数のキューに割り当てられた優先順位を、計数部が計数した非選択回数が所定値に達したキューの優先順位が最も高くなるように変更し、演算処理装置が有する選択部が、複数のキューに保持されたコマンドのいずれかを、優先順位に基づいて選択する。
【００１９】
本発明の第２の態様の演算処理装置の制御方法は、上記第１の態様において、処理部はさらに、投入されたコマンドを処理できない場合にリトライを発生し、演算処理装置の制御方法はさらに、演算処理装置が有する優先度が割り当てられた複数の入力ポートに、コマンドを入力し、演算処理装置が有する監視部が、処理部に投入されたコマンドにリトライが発生したかを入力ポート毎に監視し、演算処理装置が有する調整部が、いずれかの入力ポートから処理部に投入されたコマンドにリトライが発生した旨を監視部が検出した場合、指定されたコマンドを遅延させる遅延時間に基づき、入力ポートからのコマンドを遅延させ、演算処理装置が有する投入部が、調整部が遅延させたコマンドを、優先度に基づいて処理部に投入する。
【００２１】
本発明では、複数のコマンド・キューに割り当てた優先順位を動的に変更し、その変更後の優先順位に従って、複数のコマンド・キューのなかからコマンドを選択させる。優先順位の動的な変更により、本来、優先順位が低いコマンド・キューからコマンドを選択できるようになる。その結果、優先順位がより高いコマンド・キューに存在するコマンドによってコマンドが長期間、選択されないコマンド・キューが発生するのを回避することができる。
【００２２】
本発明では、パイプライン処理部に投入されたコマンドの優先順位別に、そのコマンドの再投入を監視し、その監視結果を基に、パイプライン処理部にコマンドを投入するタイミングを一時的、且つ強制的に変更する。その変更により、再投入（リトライ）を繰り返していたコマンドはそれまでとは異なるタイミングで再投入されることになる。それにより、リトライとならないタイミングで再投入される可能性が高くなる。その結果、リトライを繰り返す状況となるのを回避することができることとなる。
【図面の簡単な説明】
【００２３】
【図１】優先順位の異なる２つのコマンド・キューにそれぞれ存在するコマンド数によって選択されるコマンドを示すタイムチャートである。
【図２】パイプラインによるコマンド処理の進行を示すタイムチャートである。
【図３】本実施の形態によるコマンド選択装置、及びコマンド投入装置を搭載したプロセッサの構成を説明する図である。
【図４】ＭＯ−ＢＵＳコントローラ２４の回路構成を説明する図である。
【図５】調停回路２１の回路構成を説明する図である。
【図６】優先順位の異なる２つのコマンド・キューから選択されるコマンドを示すタイムチャートである。
【図７】パイプライン部２２に投入されるコマンド、及びその処理の進行を示すタイムチャートである。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図３は、本実施の形態によるコマンド選択装置、及びコマンド投入装置を搭載したプロセッサの構成を説明する図である。【００２５】
そのプロセッサは、マルチ・プロセッサ・システムに対応した、２つのコア部１０ａ、１０ｂを搭載したマルチ・コア・プロセッサである。図３に示すように、それらのコア部１０ａ、１０ｂの他には、それらとコマンドやデータをやり取りする２次キャッシュ（Ｌ２−ＣＡＣＨＥ）部２０を備えている。【００２６】
２次キャッシュ部２０は、調停回路２１、パイプライン部２２、ＭＩ（Moving In）−ＢＵＳコントローラ（以降「ＭＩコントローラ」）２３、ＭＯ（Moving Out）−ＢＵＳコントローラ（以降「ＭＯコントローラ」）２４、及びロックレジスタ群２５を備えている。【００２７】
上記調停回路２１は、優先順位の異なる複数のコマンド・キューからコマンドを選択してパイプライン部２２に投入する。パイプライン部２２は、調停回路２１が投入したコマンドを実行する。その実行中、リトライが必要か否かのチェックを行い、その必要があるとチェックした場合、その旨を調停回路２１に通知する。また、アクセスを制限すべきレジスタが発生した場合には、そのレジスタを示す情報をロックレジスタ群２５の何れかのロックレジスタに格納する。ここではその情報としてアドレス値を想定する。【００２８】
ＭＩコントローラ２３は、システムバスに出力されたコマンドやデータを取り込むためのものである。ＭＯコントローラ２４は、システムバスにコマンドやデータを出力するためのものである。本実施の形態によるコマンド選択装置はＭＯコントローラ２４上で実現され、コマンド投入装置は上記調停回路２１として実現されている。【００２９】
図４は、ＭＯコントローラ２４の回路構成を説明する図である。
そのコントローラ２４は、コマンド・キュー格納用の４つのバッファ４０１ａ〜ｄを備えている。それにより、パイプライン部２２の実行結果として出力されるコマンドは、その優先度に応じて何れかのバッファ４０１に格納される。各バッファ４０１ａ〜ｄに格納されたコマンドは、ＦＩＦＯ（First-In First-Out ）方式で取り出される。ここでは、各バッファ４０１ａ〜ｄに格納されたコマンド・キューの優先順位は、図中、上方に位置するほど高いと想定する。その想定により、バッファ４０１ａに格納されたコマンド・キューが最も優先順位が高いことになる。【００３０】
コマンド選択（PRIORITY-LOGIC）部４０２は、各バッファ４０１ａ〜ｄからコマンドを入力し、そのうちの一つを選択してパケット・ジェネレータ４０３に出力する。そのジェネレータ４０３は、入力したコマンドを所定のパケット・フォーマットに整形して出力する。【００３１】
乱数発生部４０５は、疑似的に乱数を発生させ、その乱数値に応じた信号を出力するものである。ハングカウンタ４０６ｂ〜ｄの３つのハングカウンタ４０６は、対応するコマンド・キューにコマンドが存在しながら選択されなかった回数を計数するためのものである。符号の最後の「ａ」〜「ｄ」は、対応関係の把握をより容易とするために付したものである。それにより、バッファ４０１ｂのコマンド・キュー用のハングカウンタ４０６には符号として「４０６ｂ」を付している。バッファ４０１ａのコマンド・キュー用のハングカウンタが存在しないのは、そのキューの優先順位が最も高いためである。各カウンタ４０６ｂ〜ｄは、予め定めた値に達した場合にＨの信号を出力する。【００３２】
バッファ４０１ａから読み出されたコマンドはＡＮＤ（＆）ゲート４２１にそのまま入力される。各カウンタ４０６ｂ〜ｄの信号は反転されて入力される。それにより、そのコマンドは、各カウンタ４０６ｂ〜ｄが出力する信号がＬであることを条件に選択される。【００３３】
ＡＮＤゲート４２１は、コマンドを入力するビット数分、存在する。しかし、ここでは混乱を避けるために、特に断らない限り、そのことは無視することにする。
バッファ４０１ｂから読み出されたコマンドはＡＮＤゲート４２２にそのまま入力される。各カウンタ４０６ｃ〜ｄの信号（例えばキャリービットの信号）は反転されて入力される。このことから、そのコマンドは、各カウンタ４０６ｃ〜ｄが出力する信号がＬであればＡＮＤゲート４２２から出力される。【００３４】
バッファ４０１ｃから読み出されたコマンドはＡＮＤゲート４２３にそのまま入力される。カウンタ４０６ｄの信号は反転されて入力される。このことから、そのコマンドは、カウンタ４０６ｄの信号がＬであればＡＮＤゲート４２２から出力される。【００３５】
バッファ４０１ｄから読み出されたコマンドはＡＮＤゲート４２６にそのまま入力される。そのＡＮＤゲート４２６には、ＡＮＤゲート４２１、４２２、及び４２３の各出力信号が反転されて入力される。このため、そのコマンドは、ＡＮＤゲート４２１、４２２、及び４２３の各出力信号が共にＬであればＡＮＤゲート４２６から出力される。【００３６】
それらＡＮＤゲート４２１、４２２、及び４２３には、ハングカウンタ４０６ｄの信号が反転入力される。このため、そのカウンタ４０６ｄの信号がＨとなった場合、バッファ４０１ｄから読み出されたコマンドが選択され、パケット・ジェネレータ４０３に出力される。その選択によってカウンタ４０６ｄはリセット（ＲＳＴ）される。【００３７】
ＡＮＤゲート４２３の出力信号はＡＮＤゲート４２５に入力される。そのＡＮＤゲート４２５には、ＡＮＤゲート４２１、及び４２２の出力信号が反転入力される。このため、ＡＮＤゲート４２１、及び４２２の各出力信号が共にＬであった場合、ＡＮＤゲート４２３の出力信号がそのままＡＮＤゲート４２５から出力される。【００３８】
ＡＮＤゲート４２３に反転入力されるカウンタ４０６ｄの出力信号は、ＡＮＤゲート４２１、及び４２２にそれぞれ反転入力される。カウンタ４０６ｃの出力信号は、それらにそれぞれ反転入力される。これらのことから、カウンタ４０６ｄの出力信号がＬ、カウンタ４０６ｃの出力信号がＨの条件下では、バッファ４０１ｃから読み出されたコマンドが選択、つまりＡＮＤゲート４２５から出力されてパケット・ジェネレータ４０３に入力されることとなる。【００３９】
ＡＮＤゲート４２２の出力信号はＡＮＤゲート４２４に入力される。そのＡＮＤゲート４２４には、ＡＮＤゲート４２１の出力信号が反転入力される。このため、ＡＮＤゲート４２１の出力信号がＬであった場合、ＡＮＤゲート４２２の出力信号がそのままＡＮＤゲート４２４から出力される。【００４０】
ＡＮＤゲート４２２に反転入力されるカウンタ４０６ｄの出力信号は、ＡＮＤゲート４２１、及び４２３にそれぞれ反転入力される。反転入力されるカウンタ４０６ｃの出力信号は、ＡＮＤゲート４２１に反転入力される。これらのことから、カウンタ４０６ｃ、ｄの出力信号が共にＬ、カウンタ４０６ｂの出力信号がＨの条件下では、バッファ４０１ｂから読み出されたコマンドが選択、つまりＡＮＤゲート４２４から出力されてパケット・ジェネレータ４０３に入力されることとなる。【００４１】
各カウンタ４０６ｂ〜ｄのカウントアップは、対応するバッファ４０１から読み出したコマンドが選択されなかった場合に行う。つまりカウンタ４０６ｂでは、バッファ４０１ｂから読み出したコマンドが存在し、且つ、ＡＮＤゲート４２４からそれが出力されていない場合に行う。このことから、例えばバッファ４０１ｂから読み出したコマンドの各ビットの論理和、及びＡＮＤゲート４２４の各出力信号の論理和をそれぞれ計算し、それらの排他的論理和を計算して得られる信号をカウントアップ用としてカウンタ４０６ｂに出力しても良い。その排他的論理和の値は、コマンドが選択されなかった場合のみ１（Ｈ）となる。一方、リセット用の信号としては、ＡＮＤゲート４２４の各出力信号の論理和を計算して得られる信号を出力しても良い。その値は、コマンドが選択された場合のみ１（Ｈ）となる。そのような信号によってリセットすることにより、バッファ４０１ｂに格納されたコマンド・キューは一時的に１回のみ最も優先順位が高くなる。これらは他のカウンタ４０６ｃ、ｄでも同様である。【００４２】
このようにして、本実施の形態では、優先順位が最も高いコマンド・キューを除くコマンド・キュー毎に、続けて選択されなかった回数を計数し、その計数値が予め定めた値に達すると、対応するコマンド・キューの優先順位を最も高くする形で選択され易くさせる。このため、より高い優先順位のコマンド・キューが存在するコマンド・キューでコマンドが長い期間、処理されないという状況が発生するのを確実に回避することができる。その結果、そのような状況の発生による性能の低下やハングの発生も確実に回避できることとなる。【００４３】
図６は、優先順位の異なる２つのコマンド・キューから選択されるコマンドを示すタイムチャートである。その図６では、図１との比較を容易とするために、その図１と同じ状況下で選択されるコマンドを示している。【００４４】
その状況下では、図１に示すように、従来ではコマンド・キュー（Ａ）のコマンドが続けて選択される。しかし、一時的にコマンド・キュー（Ｂ）の優先順位を高くしたことにより、図６に示すように、その状況下でコマンド・キュー（Ｂ）のコマンドが１回、選択されている。【００４５】
上述したように本実施の形態では、バッファ４０１ｂ〜ｄに格納されたコマンド・キューの何れかを一時的に１回のみ最も優先順位を高くさせる。これは、本来、より高い優先順位のコマンドの処理を行わないことによって別の悪影響が発生するのを回避するためである。その理由から、本来の優先順位の変更については、長期間に渡って行う、一定周期で行う、或いは予め定めた条件を満たすまで行う、といったようなことを採用しないのが望ましい。【００４６】
上記カウンタ４０６ｂ〜ｄによる優先順位の一時的な変更は、或るコマンド・キューのコマンドを選択しない状況が長期間、継続するのを確実に回避するために行っている。本実施の形態では、そのような状況が継続しないように、ランダムに優先順位の一時的な変更を行うようにしている。乱数発生部４０５は、そのためのものである。【００４７】
乱数発生部４０５は、図４に示すように、２つのレジスタ４１１、４１２、乱数値を例えば線形合同法の漸化式により更新する２つの更新部４１３、４１４、パリティチェックを行う２つのチェック部４１５、４１６、２つのセレクタ４１７、４１８、及び演算回路４１９を備えた構成となっている。【００４８】
レジスタ４１１、４１２は例えばデータ保持用に８ビット、パリティチェック用に１ビットを持つものである。それらは共に乱数値の保持に用いられる。その初期値として保持させる値は任意であるが、マルチ・プロセッサ・システムでは、システム側から一定周期で送信される論理ＣＰＵ番号を初期値として保持させても良い。【００４９】
レジスタ４１１に保持された乱数値は更新部４１３、及びチェック部４１５に出力される。セレクタ４１７は、更新部４１３、４１４からそれぞれ更新後の乱数値を入力し、チェック部４１５が出力する信号に応じて、それらのうちの一方を選択し出力する。チェック部４１５は、チェックによりパリティエラーを検出した場合、例えば信号をアクティブにして、更新部４１４から入力される乱数値を選択させる。出力した乱数値はレジスタ４１１に保持される。【００５０】
一方、レジスタ４１２に保持された乱数値は更新部４１４、及びチェック部４１６に出力される。セレクタ４１８は、更新部４１３、４１４からそれぞれ更新後の乱数値を入力し、チェック部４１６が出力する信号に応じて、それらのうちの一方を選択し出力する。チェック部４１６は、チェックによりパリティエラーを検出した場合、例えば信号をアクティブにして、更新部４１３から入力される乱数値を選択させる。出力した乱数値はレジスタ４１２に保持される。そのようにして、パリティエラーの影響を回避できるようにしている。【００５１】
演算回路４１９は、レジスタ４１１に保持された乱数値を入力し、その値に応じた信号を、各カウンタ４０６ｂ〜ｄとそれぞれ接続された配線に出力するものである。各カウンタ４０６ｂ〜ｄとそれぞれ接続された配線に出力する信号は、以下のような乱数値の場合にＨとする。ここでは、８ビットで表現された乱数値をＲ（ｉ）（ｉ＝７〜０。７は最上位ビットに相当）と表現する。【００５２】
カウンタ４０６ｂと接続された配線に出力する信号は、Ｒ（７）＝１＆Ｒ（６）＝１＆Ｒ（５）＝０のときにＨとする。カウンタ４０６ｃと接続された配線に出力する信号は、Ｒ（７）＝１＆Ｒ（６）＝１＆Ｒ（５）＝１＆Ｒ（４）＝０のときにＨとする。カウンタ４０６ｄと接続された配線に出力する信号は、Ｒ（７）＝１＆Ｒ（６）＝１＆Ｒ（５）＝１＆Ｒ（４）＝１のときにＨとする。【００５３】
上述したような条件で出力される信号は、全てＬか、或いはそのうちの１つのみがＨとなる。このため、優先順位を変更する場合は、各バッファ４０１ｂ〜ｄに格納されたコマンド・キューのなかの一つのみ、コマンドを選択できる状態にさせることとなる。【００５４】
図５は、上記調停回路２１の回路構成を説明する図である。次に図５を参照して、その回路構成、及び動作について詳細に説明する。その調停回路２１は、上述したように、優先順位の異なる複数のコマンド・キューからコマンドを選択してパイプライン部２２に投入するものである。【００５５】
パイプライン部２２に投入すべきコマンドは、その優先順位で分けられ、ポートＡ〜Ｄの何れかから入力される。各ポートＡ〜Ｄ用に、図中５０１ａ〜ｄを付した４つの調整回路５０１を用意してあり、ポートＡからのコマンドは調整回路５０１ａに入力される。同様に、ポートＢからのコマンドは調整回路５０１ｂ、ポートＣからのコマンドは調整回路５０１ｃ、ポートＤからのコマンドは調整回路５０１ｄにそれぞれ入力される。そのように符号の最後に「ａ」〜「ｄ」を付けることにより、ポートと調整回路５０１の対応関係の把握をより容易とさせている。ここでもコマンドの優先順位は、図中、上方に位置するほど高いと想定する。その想定により、ポートＡからのコマンドが最も優先順位が高いことになる。例えばポートＡのコマンドは、システム（プラットホーム）側からの要求に対するコア部１０ａ、或いは１０ｂの応答によるものである。ポートＢのコマンドは、システム側からの要求に係わるもの、ポートＣのコマンドは、コア部１０ａ、或いは１０ｂの何れかからの新規要求に係わるもの、ポートＤのコマンドは、コア部１０ａ、或いは１０ｂの何れかからの投機的フェッチに係わるもの、である。【００５６】
各調整回路５０１は、入力したコマンドをそれぞれコマンド選択（PRIORITY-LOGIC）部５０２に出力する。そのコマンド選択部５０２は、複数の調整回路５０１からコマンドを入力した場合、予め定められた優先順位に従って一つを選択してパイプライン部２２に投入する。【００５７】
調整回路５０１ａには、リトライ・カウンタ５０４ａは、パイプライン部２２に投入された、ポートＡからのコマンドのリトライが発生した回数を計数するためのものである。待ち時間発生部５０３ａは、調整回路５０１ａからコマンド選択部５０２にコマンドを出力するタイミングを遅延させる待ち時間を指定するためのものである。【００５８】
リトライ・カウンタ５０４ａは、図４に示す各カウンタ４０６と同様に、予め定めた値に達した場合にＨの信号（例えばキャリービットの信号）を出力するものである。調整回路５０１ａは、その信号がＨとなると、待ち時間発生部５０３ａによって指定される時間だけ、コマンド選択部５０２にコマンドを出力するタイミングを遅らせる。それにより、そのコマンドがコマンド選択部５０２によって選択・投入されるタイミングも本来より遅くなることになる。【００５９】
対応するリトライ・カウンタ５０４、及び待ち時間発生部５０３は、特には図示していないが、他のポートにも存在している。それにより他の調整回路５０１ｂ〜ｄも同様な動作を行うようになっている。【００６０】
図７は、パイプライン部２２に投入されるコマンド、及びその処理の進行を示すタイムチャートである。その図７では、図７との比較を容易とするために、その図１と同じ状況下で投入されるコマンドを示している。【００６１】
図７では、リトライとなったコマンド（Ａ）を再度、投入するタイミングを、動作用クロックで２周期分、遅らせている。その遅延により、再投入したコマンド（Ａ）は処理を完了することができている。それによって次に投入されたコマンド（Ｂ２）はリトライとなって、再投入されている。【００６２】
このように、リトライとなって再投入可能となったコマンドの再投入タイミングを強制的に遅延させることにより、そのコマンドのリトライが長期間、繰り返されるのを確実に回避させることができる。その遅延により、状況によっては投入されるコマンドの順序が変化する可能性がある。その順序の変更によってもリトライが長期間、繰り返されるのを回避できるようになる。遅延させる時間（強制的に発生させる待ち時間）は動作用クロックの１周期分の時間〜その時間にパイプラインの長さ（段数）の２倍を掛けた時間までの間にするのが望ましい。【００６３】
なお、本実施の形態では、ポート毎にコマンドの再投入タイミングを遅延させているが、これは他のポートへの影響をより低減させて、処理するコマンドが少なくなるのを抑えるためである。しかし、再投入タイミングを遅延させることにより、同じコマンドのリトライが長期間、繰り返されるのを回避できることから、ポート全体で待ち時間を発生させても良い。また、同じコマンドのリトライが長期間、繰り返すことのみを回避させる場合には、そのリトライが所定の期間、発生しないことを条件に、対応するリトライ・カウンタ５０４のリセットを行うようにしても良い。コマンド選択装置、或いはコマンド投入装置を搭載する対象はＡＳＩＣなどであっても良い。
【図１】
0004801725.tif 000002
【図２】
0004801725.tif 000003
【図３】
0004801725.tif 000004
【図４】
0004801725.tif 000005
【図５】
0004801725.tif 000006
【図６】
0004801725.tif 000007
【図７】
0004801725.tif 000008