(57)【要約】命令長を長くせずに多くのレジスタを扱えて、パイプライン処理においてストールが発生しにくくすることを課題とする。プロセッサ（１００）が、命令デコーダと、演算器（１２）と、外部メモリ（１９）との間でデータ入出力を行なうメモリアクセス手段（１３等）と、該演算器および該メモリアクセス手段からアクセス可能なレジスタをそれぞれ備えた複数のレジスタバンク（１１）と、レジスタバンク指定命令に基づく該命令デコーダからのレジスタバンク指定制御信号により、該演算器が該レジスタバンクのいずれにアクセスするか、および、該メモリアクセス手段が該レジスタバンクのいずれにアクセスするかを制御するものであるバンクスイッチ手段とを備えている。またこのプロセッサ（１００）を用いたマルチプロセッサシステムや、プロセッサ（１００）の制御方法を提供する。
2004036416.tif 000002
【特許請求の範囲】
【請求項１】
レジスタバンク指定命令と通常の命令とを含む命令をデコードして制御信号を生成する命令デコーダと、
該命令デコーダからの該制御信号に基づいて演算処理を行なう演算器と、
該演算器の信号に基づいて外部メモリとの間でデータ入出力を行なうメモリアクセス手段と、
該演算器および該メモリアクセス手段からアクセス可能なレジスタをそれぞれ備えた複数のレジスタバンクと、
前記レジスタバンク指定命令に基づいて前記命令デコーダが生成するレジスタバンク指定制御信号により制御されるバンクスイッチ手段であって、該演算器がどのレジスタバンクにアクセスするかを定め、かつ、該メモリアクセス手段がどのレジスタバンクにアクセスするかを定めるバンクスイッチ手段と
を備えてなり、
該レジスタバンク指定命令は、該バンクスイッチ手段を制御することにより、該レジスタバンク指定命令より後にある通常の命令をオペランドを用いて実行するために、該オペランドが用いるレジスタに割り当てるレジスタバンクを切り換える命令である、マルチバンクレジスタを有するプロセッサ。
【請求項２】
前記バンクスイッチ手段は、前記レジスタバンク指定制御信号により制御され、前記演算器が前記レジスタバンクのいずれかへアクセスするかを定めるとともに、前記メモリアクセス手段が他のいずれかの前記レジスタバンクへアクセスするかを定めるものであり、
前記演算器によるレジスタへのアクセスと前記メモリアクセス手段によるレジスタへのアクセスとの同時アクセスが可能である、請求の範囲第１項に記載のプロセッサ。
【請求項３】
前記レジスタバンク指定命令は、レジスタバンク設定修飾命令であり、
前記レジスタバンク設定修飾命令は、前記バンクスイッチ手段を制御することにより、該レジスタバンク設定修飾命令の直後にある通常の命令をオペランドを用いて実行するために、該直後にある通常の命令の該オペランドについてのレジスタに割り当てるレジスタバンクを切り換える命令である、請求の範囲第１項または第２項に記載のプロセッサ。
【請求項４】
前記レジスタバンク設定修飾命令が直前にある場合には命令長が通常の命令の命令長から延長されて、該レジスタバンク設定修飾命令と直後の該通常の命令とが該延長された命令長を有する一命令になる、請求の範囲第３項に記載のプロセッサ。
【請求項５】
前記レジスタバンク指定命令はレジスタバンク設定命令であり、
該レジスタバンク設定命令より後にある通常の命令においては、明示的なレジスタバンクの指定を必要とせずに、前記オペランドが用いるレジスタに対して該レジスタバンク指定命令に基づくレジスタバンクの割り当てが適用される、請求の範囲第１項または第２項に記載のプロセッサ。
【請求項６】
命令記憶手段と、第１のプロセッサと、第２のプロセッサと、外部メモリとを少なくとも備えてなるマルチプロセッサシステムであって、
該第１のプロセッサおよび該第２のプロセッサは、
該命令記憶手段からのレジスタバンク指定命令と、通常の命令とを含む命令をデコードして制御信号を生成する命令デコーダと、
該命令デコーダからの該制御信号に基づいて演算処理を行なう演算器と、
該演算器の信号に基づいて該外部メモリとの間でデータ入出力を行なうメモリアクセス手段と、
該演算器および該メモリアクセス手段からアクセス可能なレジスタをそれぞれ備えた複数のレジスタバンクと、
前記レジスタバンク指定命令に基づいて前記命令デコーダが生成するレジスタバンク指定制御信号により制御されるバンクスイッチ手段であって、該演算器がどのレジスタバンクにアクセスするかを定め、かつ、該メモリアクセス手段がどのレジスタバンクにアクセスするかを定めるバンクスイッチ手段と
をそれぞれ備えてなり、
該レジスタバンク指定命令は、該バンクスイッチ手段を制御することにより、該レジスタバンク指定命令より後にある通常の命令をオペランドを用いて実行するために、該オペランドが用いるレジスタに割り当てるレジスタバンクを切り換える命令であり、
該外部メモリは、該第１のプロセッサの該メモリアクセス手段と、該第２のプロセッサの該メモリアクセス手段とのいずれからもアクセス可能に接続されている、マルチプロセッサシステム。
【請求項７】
前記バンクスイッチ手段は、前記レジスタバンク指定制御信号により制御され、前記演算器が前記レジスタバンクのいずれかへアクセスするかを定めるとともに、前記メモリアクセス手段が他のいずれかの前記レジスタバンクへアクセスするかを定めるものであり、
前記演算器によるレジスタへのアクセスと前記メモリアクセス手段によるレジスタへのアクセスとの同時アクセスが可能である、請求の範囲第６項に記載のマルチプロセッサシステム。
【請求項８】
請求の範囲第６項または第７項に記載のマルチプロセッサシステムであって、前記外部メモリにおいて前記第１のプロセッサがアクセスするメモリ領域と、前記第２のプロセッサがアクセスするメモリ領域との少なくとも一部が共有されているマルチプロセッサシステム。
【請求項９】
レジスタバンク指定命令と通常の命令とを含む命令をデコードして制御信号を生成する命令デコーダと、該命令デコーダからの該制御信号に基づいて演算処理を行なう演算器と、該演算器の信号に基づいて外部メモリとの間でデータ入出力を行なうメモリアクセス手段と、該演算器および該メモリアクセス手段からアクセス可能なレジスタをそれぞれ備えた複数のレジスタバンクと、該演算器および該メモリアクセス手段がそれぞれどのレジスタバンクにアクセスするかを定めるバンクスイッチ手段とを備えてなるプロセッサの制御方法であって、
該命令デコーダが該レジスタバンク指定命令に基づいてレジスタバンク指定制御信号を生成するステップと、
該レジスタバンク指定制御信号により該バンクスイッチ手段を制御することにより、該レジスタバンク指定命令より後にある通常の命令のオペランドが用いるレジスタに割り当てるレジスタバンクを切り換えて、該演算器がどのレジスタバンクにアクセスするかを制御するステップと、
該レジスタバンク指定制御信号により該バンクスイッチ手段を制御することにより、該オペランドが用いるレジスタに割り当てるレジスタバンクを切り換えて、該メモリアクセス手段がどのレジスタバンクにアクセスするかを制御するステップと、
該通常の命令をオペランドを用いて実行するステップと
を含むマルチバンクレジスタを有するプロセッサの制御方法。
【請求項１０】
該通常の命令をオペランドを用いて実行する前記ステップは、
あるレジスタバンクのレジスタへの前記演算器によるアクセスと、他のレジスタバンクのレジスタへの前記メモリアクセス手段によるアクセスとが同時に行なわれるステップを含むものである、請求の範囲第９項に記載のマルチバンクレジスタを有するプロセッサの制御方法。
【請求項１１】
前記レジスタバンク指定命令は、レジスタバンク設定修飾命令であり、
前記レジスタバンク設定修飾命令は、前記バンクスイッチ手段を制御することにより、該レジスタバンク設定修飾命令の直後にある通常の命令をオペランドを用いて実行するために、該直後にある通常の命令の該オペランドについての該オペランドのレジスタに割り当てるレジスタバンクを切り換える命令である、請求の範囲第９項または第１０項に記載のプロセッサの制御方法。
【請求項１２】
前記レジスタバンク設定修飾命令が直前にある場合には命令長が通常の命令の命令長から延長されて、該レジスタバンク設定修飾命令と直後の該通常の命令とが該延長された命令長を有する一命令になる、請求の範囲第１１項に記載のプロセッサの制御方法。
【請求項１３】
前記レジスタバンク指定命令は、レジスタバンク設定命令であり、
前記レジスタバンク指定命令より後にある通常の命令においては、明示的なレジスタバンクの指定を必要とせずに、前記オペランドが用いるレジスタに対して該レジスタバンク指定命令に基づくレジスタバンクの割り当てが適用される、請求の範囲第９項または第１０項に記載のプロセッサの制御方法。
【発明の詳細な説明】
【技術分野】  本発明は、コンピュータ機器の演算装置であるＣＰＵ（中央演算装置）やＤＳＰ（デジタルシグナルプロセッサ）などのプロセッサのアーキテクチャに関し、特に命令セットアーキテクチャを実装するマイクロプロセッサ及びその制御方法に関する。
【背景技術】  様々な機器に用いられているプロセッサ、特にマイクロプロセッサは、近年の半導体微細加工技術の進歩を背景に、クロック周波数を高める等の手法によって演算処理能力の向上が図られている。一方、主記憶装置として働く外部メモリとプロセッサの間の転送速度も各種の技術を利用することにより向上しているが、接続ピンの数やメモリの応答速度などの物理的な制約があり、プロセッサの性能向上には追いついていない。このため、プロセッサは、メモリへのアクセス時には、内部レジスタへのアクセスに比べて余分なクロック数（通常、レイテンシーと呼ばれている）を消費してしまう。プロセッサの内部バスとメモリ間のバスとの間にあるこのようなデータ転送バンド幅のギャップを埋めるために、最近のプロセッサではキャッシュメモリがよく用いられている。
また、複数のプロセッサを連携動作させて、全体として高い演算処理能力を得る手法として、マルチプロセッサシステムが知られている。このマルチプロセッサシステムにおいては、各プロセッサの演算を連携させるために、それぞれに内蔵されるキャッシュメモリ間のデータにコヒーレンシー（一貫性）を保証しなければならない。
キャッシュメモリをそれぞれ備えた複数のプロセッサによりマルチプロセッサシステムを構築する場合には、各プロセッサのメモリへのアクセスを他のプロセッサが監視するスヌーピング（バススヌープ）によって上記コヒーレンシーを保証する方法が知られている。しかし、このスヌーピングは、プロセッサとメモリ間のバスのデータ転送バンド幅を低下させてしまう作用を有している。したがって、マルチプロセッサシステムを用いても、使用するプロセッサ数に比例してシステム全体での演算性能を向上させることは困難である。
マルチプロセッサシステムでは、プロセッサ間でメモリを共有する共有メモリシステムを用いてデータのコヒーレンシーを保証する方法もある。しかし共有メモリシステムでは、共有メモリとプロセッサ間のバスのデータ転送バンド幅が、マルチプロセッサシステムの性能を制限する要因となる。
プロセッサ単体での演算処理能力の向上を並列処理を用いて高める手法として、スーパーパイプラインやスーパースケーラ、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）といった方法が知られている。スーパーパイプラインやスーパースケーラはインプリメンテーション（実装）レベルで並列処理を行なうことにより演算処理能力を向上させる手法である。ＶＬＩＷは、内部に演算器を複数備えたプロセッサにおいて命令レベルで並列処理を行なうことにより、演算処理能力を向上させる手法である。いずれの並列処理方法においても、本来順次実行するプログラムを並列して処理させるために、必然的に、命令、オペランド、制御といった面からの依存関係が避けられない。例えば、メモリからレジスタへのデータ転送命令であるロード命令と、そのデータがロードされている当該レジスタをオペランドとする演算命令との間には、強い依存関係が生じてしまう。このロード命令においては、キャッシュにロードされるデータが無い場合（キャッシュミスが発生した場合）には外部メモリへのアクセスを伴う。この例のように、前述の依存関係は大きなレイテンシーを伴う可能性がある。その場合には、命令実行パイプラインがストールし、並列処理本来の演算性能が得られなくなってしまうという問題がある。
この並列処理の問題を解決するためには、実行する命令を動的にスケジューリングするリオーダリングバッファを用いたダイナミックスケジューリングが用いられる場合もある。しかし、この場合であっても、その効果があるのは、一般的には、１０数命令の範囲に限定されてしまう。したがって、キャッシュミスが発生した場合には、命令実行パイプラインがストールを埋め切れず、並列処理の利点が十分には発揮されない。また、ダイナミックスケジューリングにはハードウエアが複雑で回路規模が膨大になってしまうという問題もある。
プロセッサが所望のソフトウエアを実行する際に必要とする変数は、プロセッサ内のレジスタあるいはシステム上のメモリに置かれる。メモリへのアクセスは、前述のキャッシュミスの場合はもとより、キャッシュメモリにアクセスする変数が存在している場合であっても、レジスタへのアクセスに比べて遅い。
１つのプログラムに必要とされる変数の数は、プログラムに依存するものの、一般的には、数十から百数十程度である。従来のプロセッサでは、物理的な実装上の制限や、プロセッサを動作させる命令セットアーキテクチャ上での命令長の制限から、８〜３２個のレジスタを実装する例が多い。例えば、レジスタを３２個用いて演算の対象を２つ用いる２オペランドの命令セットアーキテクチャとした場合には、一命令を構成するビットのうち、各レジスタやオペランドの特定に５ビット、計１０ビットを必要とする。同じくレジスタを３２個用いて演算結果を演算の対象と異なるレジスタに格納する３オペランドの場合には、オペランドの特定に計１５ビットを必要とする。これらに、演算のタイプなどを示すオペコードを示すビットを加えたものが命令長となる。
ここで、命令長が長くなるとプログラム用のメモリサイズ、およびメモリとプロセッサの間においてプログラムの実行に用いるバスバンド幅をともに増やす必要が生じる。したがって、一般に、プロセッサ内部のインプリメンテーションの点からは、命令長を短くすることが演算性能を向上させるために有効である。
一方、レジスタ数を増やすと、キャッシュメモリや外部メモリへのアクセスを減らすことが可能となる。さらに、外部メモリとレジスタとのデータ転送を行なうロード命令やストア命令を削減することができるので、プログラムのステップの数が減少する。これらから、扱えるレジスタ数を増加させると、演算性能の低下が防止できるという側面もあるが、レジスタを指定するために、命令長は長くなってしまう。
実際のプロセッサのアーキテクチャにおいては、これらの相反する関係と使用目的等を考慮して、命令長が適宜設定されている。典型的には、レジスタ数を少なく設定する場合には、命令長は１６ビットとされ、レジスタ数を多く設定する場合には、命令長は３２ビットとされる。
また、命令セット上のレジスタ数はそのままで仮想的なレジスタ数を増やすテクニックとして「レジスタリネーミング」が知られている。
さらに、レジスタの有効活用を目的として、個々のレジスタごとに切り換えを行なう手法が、例えば特許文献１に開示されている。
特許文献１：特開平７−８４７８５号公報
【発明の開示】
【発明が解決しようとする課題】  本発明は、プロセッサ単体で使用する際には、命令長を可能な限り短くして演算性能を高めつつ、メモリアクセスによるレイテンシーの発生を抑えることができるプロセッサアーキテクチャを提供することにより、上記問題の少なくともいくつかを解決することを課題とする。
これに加えて、本発明は、マルチプロセッサ構成においても、メモリのコヒーレンシーを保証しつつ、プロセッサとメモリ間のデータ転送バンド幅がスヌーピングによって低下することを防止することができるプロセッサアーキテクチャを提供することにより、上記問題の少なくともいくつかを解決することを課題とする。
【課題を解決するための手段】  本発明では、プロセッサ内のレジスタが複数のレジスタバンクに構成される。そして、そのプロセッサに備えられた演算装置およびメモリアクセス装置が、それぞれ異なる上記レジスタバンクに動的に接続される機構を実現することにより、上記プロセッサアーキテクチャを実現する。本発明では、全般に、レジスタバンクのスイッチ手段と、レジスタバンク設定命令、またはレジスタバンク設定修飾命令などからなるレジスタバンク指定命令とを用いることにより、例えば１６ビット等の短い命令長で、数多くのレジスタを扱うことを可能にしている。
具体的には、本発明では、レジスタバンク指定命令と通常の命令とを含む命令をデコードして制御信号を生成する命令デコーダと、該命令デコーダからの該制御信号に基づいて演算処理を行なう演算器と、該演算器の信号に基づいて外部メモリとの間でデータ入出力を行なうメモリアクセス手段と、該演算器および該メモリアクセス手段からアクセス可能なレジスタをそれぞれ備えた複数のレジスタバンクと、前記レジスタバンク指定命令に基づいて前記命令デコーダが生成するレジスタバンク指定制御信号により制御されるバンクスイッチ手段であって、該演算器がどのレジスタバンクにアクセスするかを定め、かつ、該メモリアクセス手段がどのレジスタバンクにアクセスするかを定めるバンクスイッチ手段とを備えてなり、該レジスタバンク指定命令は、該バンクスイッチ手段を制御することにより、該レジスタバンク指定命令より後にある通常の命令をオペランドを用いて実行するために、該オペランドが用いるレジスタに割り当てるレジスタバンクを切り換える命令である、マルチバンクレジスタを有するプロセッサが提供される。
命令デコーダは、本プロセッサの外部に備えられている命令記憶装置からフェッチされた命令を受け取りデコードして制御信号を生成する。また、メモリアクセス手段とは、外部メモリとのアクセスを提供する手段であり、外部バス、キャッシュメモリ、アドレス生成器等の当分野で周知の手段によってメモリとプロセッサのアクセスを提供し、データの転送が可能な任意の技術とすることができる。このメモリアクセス手段は、プロセッサのレジスタと外部メモリとのアクセスを提供する。
それぞれのレジスタバンクは、適当な単位のバンクにまとめられている複数のレジスタを含んでいる。各レジスタバンクは、例えば適当なビット数の数字であるようなバンク識別子によって区別される。本発明では複数のレジスタバンクが含まれているプロセッサが用いられるため、任意のレジスタを特定するには、バンク識別子とレジスタアドレスとを指定する。しかし、本プロセッサで実行される各命令においては、詳細を後述するように、バンクを切り換えるためのバンク設定命令やバンク設定修飾命令を用いることにより、それら以外の命令（通常の命令）においては、バンク識別子を指定する必要が無い。
レジスタバンク指定命令は、明示的にバンクを指定するバンク識別子を何らかの形で含むものである。例えば、このレジスタバンク指定命令は、オペランド数２の命令のソースオペランドやデスティネーションオペランドのバンクを指定するバンク識別子をオペランドとして持つような命令（本明細書において「バンク設定命令」という）とすることができる。このレジスタバンク指定命令は、例えば汎用レジスタのあるもの、といった個々のレジスタのみを指定するものではなく、オペコードと共に用いられるソースオペランドやデスティネーションオペランドといったオペランドの位置ごとにレジスタバンクの割り当てを指定するものとすることができる。このレジスタバンク指定命令は命令デコーダによりレジスタバンク指定制御信号となって演算器を動作させる。
本プロセッサで実行される命令のうち、レジスタバンク指定命令以外のものは、バンク識別子を含まない。このような命令をレジスタバンク指定命令と区別して、「通常の命令」と呼ぶ。通常の命令は、オペランドを用いるものとすることができる。本プロセッサで実行される通常の命令のオペランドには、基本的には、その命令に到達するまでにレジスタバンク指定命令によって明示的に指定されたレジスタバンクが割り当てられているものとすることができる。例えば、ソースオペランドにはバンク０、デスティネーションオペランドにはバンク３、というように割り当てられる。このため、通常の命令の命令長は、レジスタバンクを用いるからといって特に長くする必要はない。
このレジスタバンクの割り当ては、バンクスイッチ手段によって実現される。バンクスイッチ手段は、レジスタバンク指定命令に基づくレジスタバンク指定制御命令によって制御される。このバンクスイッチ手段は、例えば、それ以降の全ての命令に用いられるソースオペランドやデスティネーションオペランドのバンクを指定するレジスタである。この指定は、オペランドごとに変更しても良く、同じであっても良い。なお、レジスタバンク指定命令が明示的に含まれていない際のバンクスイッチ手段の動作は、適当な既定値に基づいているものとすることができる。また、レジスタバンク指定命令は、サブルーチン単位でレジスタバンクを指定するような命令には限られない。
本発明のようにして、必要に応じて付加的な命令による切り換えを行って複数のレジスタバンクを用いると、通常の命令に用いる命令長を短く保ったまま、多数のレジスタを使用することができる。このようにして多数のレジスタを使用できるために、これまでキャッシュメモリを用いて行なわれてきたように、データの局所性を利用したメモリアクセス頻度の抑制も可能になる。しかも、キャッシュメモリに比べてレジスタのほうが転送バンド幅を大きくとることができる。レジスタをより多く利用した方が、キャッシュメモリを多用するより高速な演算が可能となる。
本発明において、前記バンクスイッチ手段は、前記レジスタバンク指定制御信号により制御され、前記演算器が前記レジスタバンクのいずれかへアクセスするかを定めるとともに、前記メモリアクセス手段が他のいずれかの前記レジスタバンクへアクセスするかを定めるものであり、前記演算器によるレジスタへのアクセスと前記メモリアクセス手段によるレジスタへのアクセスとの同時アクセスが可能とすることができる。
この構成により、演算装置に接続されるレジスタバンクと異なるレジスタバンクをメモリアクセス装置に接続することができる。このように構成すれば、演算命令とメモリアクセス命令によるメモリとレジスタ間のデータ転送を並行して行うことが可能となる。プロセッサがあるレジスタバンクのレジスタを用いる演算の処理中に、別のレジスタバンクに対するメモリからのデータを読込んだり、演算結果が格納されているレジスタバンク内のデータをメモリに格納する、という処理をソフトウエアから明示的に行うことができる。その結果、ロード命令と演算命令とのデータの依存関係に起因するパイプラインのストールによるプロセッサの処理性能の低下を、簡便なハードウエア構成で容易に押さえることができる。なお、メモリアクセス手段は命令デコーダからの命令に基づいて外部メモリとレジスタとのアクセスを提供するものとすることができる。
本発明のプロセッサにおいて、前記レジスタバンク指定命令は、レジスタバンク設定修飾命令であり、前記レジスタバンク設定修飾命令は、前記バンクスイッチ手段を制御することにより、該レジスタバンク設定修飾命令の直後にある通常の命令をオペランドを用いて実行するために、該直後にある通常の命令の該オペランドについてのレジスタに割り当てるレジスタバンクを切り換える命令とすることができる。
この場合、レジスタバンク設定修飾命令がそれに後続する直後の命令のみのオペランドについてのレジスタに割り当てるレジスタバンクを切り換える。つまり、レジスタバンク設定修飾命令とは、直後の命令にのみ影響する修飾する作用を有するようなレジスタバンクを指定するための命令である。このレジスタバンク設定修飾命令は、レジスタバンク設定プリフィクスとも呼ぶ。レジスタバンク設定修飾命令により、プログラム中で柔軟にレジスタバンクの指定をすることが可能となり、命令長を抑えつつプログラミングの自由度を確保することができる。
本発明では、前記レジスタバンク設定修飾命令が直前にある場合には命令長が通常の命令の命令長から延長されて、該レジスタバンク設定修飾命令と直後の該通常の命令とが該延長された命令長を有する一命令になるようにするものとできる。ここで、レジスタバンク指定命令がレジスタバンク設定修飾命令であるときには、そのレジスタバンク設定修飾命令と通常の命令とが組み合わせて構成されて命令の一単位となる。レジスタバンク設定修飾命令のみでは一単位にはならない。なぜなら、レジスタバンク設定修飾命令は直後にある通常の命令のオペランドについてのレジスタを修飾するもので、それのみでは実行可能な命令ではないからである。
命令長を延長することとは、レジスタバンク設定修飾命令の直後の命令の動作を、そのレジスタバンク設定修飾命令に従って修飾して実行する動作を実行可能な一命令として認識させることの出来る命令セットアーキテクチャを構成すること、あるいはそういう命令セットアーキテクチャをデコードし得るデコーダを構成することであり、単に形式的に命令の区切りを変更するだけではない。また、アセンブラコードを一行に記載することと直接に対応するものでもない。
これら本発明のプロセッサにおいて、前記レジスタバンク指定命令がレジスタバンク設定命令であり、該レジスタバンク設定命令より後にある通常の命令においては、明示的なレジスタバンクの指定を必要とせずに、前記オペランドが用いるレジスタに対して該レジスタバンク指定命令に基づくレジスタバンクの割り当てが適用されることができる。レジスタバンク設定命令は、レジスタバンク指定命令の一種であり、その後の通常の命令におけるオペランドのバンクの割り当てを指定する。それより後にある通常の命令においては、レジスタバンクを特に指定することなく、レジスタバンク設定命令によって割り当てられたレジスタバンクが用いられる。
このようなレジスタバンク設定命令を用いると、通常の命令の命令長を、レジスタがレジスタバンクに構成されていないプロセッサアーキテクチャと同様の短い命令長としておいて、必要に応じてレジスタバンク設定命令を用いることができる。これにより、複数の命令から構成されるプログラム全体の平均命令長を短く保ちつつ、多数のレジスタを扱うことが可能となる。
本発明の別の態様として、命令記憶手段と、第１のプロセッサと、第２のプロセッサと、外部メモリとを少なくとも備えてなるマルチプロセッサシステムであって、該第１のプロセッサおよび該第２のプロセッサは、該命令記憶手段からのレジスタバンク指定命令と、通常の命令とを含む命令をデコードして制御信号を生成する命令デコーダと、該命令デコーダからの該制御信号に基づいて演算処理を行なう演算器と、該演算器の信号に基づいて該外部メモリとの間でデータ入出力を行なうメモリアクセス手段と、該演算器および該メモリアクセス手段からアクセス可能なレジスタをそれぞれ備えた複数のレジスタバンクと、前記レジスタバンク指定命令に基づいて前記命令デコーダが生成するレジスタバンク指定制御信号により制御されるバンクスイッチ手段であって、該演算器がどのレジスタバンクにアクセスするかを定め、かつ、該メモリアクセス手段がどのレジスタバンクにアクセスするかを定めるバンクスイッチ手段とをそれぞれ備えてなり、該レジスタバンク指定命令は、該バンクスイッチ手段を制御することにより、該レジスタバンク指定命令より後にある通常の命令をオペランドを用いて実行するために、該オペランドが用いるレジスタに割り当てるレジスタバンクを切り換える命令であり、該外部メモリは、該第１のプロセッサの該メモリアクセス手段と、該第２のプロセッサの該メモリアクセス手段とのいずれからもアクセス可能に接続されている、マルチプロセッサシステムが提供される。
この外部メモリは、マルチプロセッサシステムを構成する少なくとも二つ含まれるプロセッサからアクセスされる。これにより、例えば、ＳＭＰ（Ｓｙｍｍｅｔｒｉｃａｌ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ）構成のマルチプロセッサシステム、ＣＰＵコアとＤＳＰコアとを連携させるマルチプロセッサの構成を実現することができる。本特徴により、マルチプロセッサシステムを構成する各プロセッサにおいてレジスタバンクを用いることが可能となる。プロセッサとメモリ間のバスによるデータ転送バンド幅のギャップを数多くのローカルレジスタで補うことを可能としている。また、各バンクのレジスタは、ソフトウエアから観測および制御可能であるため、データのコヒーレンシーの問題は発生しない。従って、プロセッサとメモリ間のバスのデータ転送バンド幅は、スヌーピングのために失われることは無い。このため、ＳＭＰ構成でプロセッサ数を増やして演算性能を向上させることや、特定目的の信号処理用演算回路を内蔵するＤＳＰとＣＰＵとの連携処理の能力を高めることが可能となる。
このようなマルチプロセッサシステムにおいて、前記バンクスイッチ手段は、前記レジスタバンク指定制御信号により制御され、前記演算器が前記レジスタバンクのいずれかへアクセスするかを定めるとともに、前記メモリアクセス手段が他のいずれかの前記レジスタバンクへアクセスするかを定めるものであり、前記演算器によるレジスタへのアクセスと前記メモリアクセス手段によるレジスタへのアクセスとの同時アクセスが可能であるものとすることができる。
同時アクセスを用いると、マルチプロセッサシステムを構成する各プロセッサの処理能力が向上するだけでなく、複数のプロセッサを連携させて演算処理を行なう場合にしばしば問題となる、プロセッサ間のデータ転送に起因するストールが減少する。
本発明では、このようなマルチプロセッサシステムであって、前記外部メモリにおいて前記第１のプロセッサがアクセスするメモリ領域と、前記第２のプロセッサがアクセスするメモリ領域との少なくとも一部が共有されているものとすることができる。
いわゆる共有メモリを用いた場合であっても、レジスタ数を増やすことにより、データの局所性を用いたデータのキャッシングと同様の効果で、プロセッサとメモリ間に必要とされるデータ転送を少なくすることができる。これにより、マルチプロセッサシステムで共有メモリを用いた場合であっても、メモリバンクを用いない場合に比べて演算性能が向上する。
本発明の他の態様として、レジスタバンク指定命令と通常の命令とを含む命令をデコードして制御信号を生成する命令デコーダと、該命令デコーダからの該制御信号に基づいて演算処理を行なう演算器と、該演算器の信号に基づいて外部メモリとの間でデータ入出力を行なうメモリアクセス手段と、該演算器および該メモリアクセス手段からアクセス可能なレジスタをそれぞれ備えた複数のレジスタバンクと、該演算器および該メモリアクセス手段がそれぞれどのレジスタバンクにアクセスするかを定めるバンクスイッチ手段とを備えてなるプロセッサの制御方法であって、該命令デコーダが該レジスタバンク指定命令に基づいてレジスタバンク指定制御信号を生成するステップと、該レジスタバンク指定制御信号により該バンクスイッチ手段を制御することにより、該レジスタバンク指定命令より後にある通常の命令のオペランドが用いるレジスタに割り当てるレジスタバンクを切り換えて、該演算器がどのレジスタバンクにアクセスするかを制御するステップと、該レジスタバンク指定制御信号により該バンクスイッチ手段を制御することにより、該オペランドが用いるレジスタに割り当てるレジスタバンクを切り換えて、該メモリアクセス手段がどのレジスタバンクにアクセスするかを制御するステップと、該通常の命令をオペランドを用いて実行するステップとを含むマルチバンクレジスタを有するプロセッサの制御方法が提供される。
本発明のプロセッサは、レジスタバンク指定制御信号により、演算器やメモリアクセス手段がアクセスするレジスタバンクを切り換え、その命令を実行する。これを適切に行なうには、上記各ステップを含む制御方法を行なうことができる。これにより、その後の命令のオペランドのレジスタに割り当てられるレジスタバンクが定められるので、このような制御方法によって命令長を短く保って多くのレジスタを扱うことが可能となる。
なお、上記の各ステップは、必ずしもこの順序を保って行なう必要はない。プログラムの各命令の配列等の結果として、様々な順序で実行されることができる。また、同時に行なわれるステップがあったり、各ステップの実行頻度が大きく異なっていても良い。
この制御方法において、該通常の命令を、オペランドを用いて実行する前記ステップが、あるレジスタバンクのレジスタへの前記演算器によるアクセスと、他のレジスタバンクのレジスタへの前記メモリアクセス手段によるアクセスとが同時に行なわれるステップを含むものとすることができる。
演算器があるレジスタバンクにアクセスする際に、メモリアクセス手段は、他のレジスタバンクにアクセスすることができる。これらのアクセスはともに命令の実行ステップに含まれている。この実行ステップの範囲は、例えば、プロセッサが動作するクロックを単位として、通常の命令を実行するのに要する最初のクロックから最後のクロックまでというように、時間によって定めることが出来る。この範囲において、演算器とメモリアクセス手段は、別々のレジスタバンクのそれぞれが用いるレジスタに並行してアクセスすることができる。従来のプロセッサにおいては、この演算器がレジスタにアクセスすることと、メモリにアクセスすることとを並行して行なうために、マルチポートのレジスタファイルを用いる必要があった。しかし、本発明の特徴であるレジスタをバンクに分けることによって、通常のレジスタファイルでこのように並行にアクセスすることが可能となる。これにより、メモリアクセスのレイテンシーが命令実行を一時停止させる時間においても他の演算を行なうことが可能となり、演算処理能力が向上する。また、パイプライン処理のストールの頻度や時間が減少する。
本発明のプロセッサの制御方法において、前記レジスタバンク指定命令は、レジスタバンク設定修飾命令であり、前記レジスタバンク設定修飾命令は、前記バンクスイッチ手段を制御することにより、該レジスタバンク設定修飾命令の直後にある通常の命令をオペランドを用いて実行するために、該直後にある通常の命令の該オペランドについての該オペランドのレジスタに割り当てるレジスタバンクを切り換える命令とすることができる。
レジスタバンク設定修飾命令は、直後の命令にのみ影響する修飾する作用を有するようなレジスタバンクを指定するための前述した命令である。プロセッサの制御方法においても、レジスタバンク設定修飾命令により、プログラム中で柔軟にレジスタバンクの指定をすることが可能となり、命令長を抑えつつプログラミングの自由度を確保することができる。
本発明のプロセッサの制御方法は、前記レジスタバンク設定修飾命令が直前にある場合には命令長が通常の命令の命令長から延長されて、該レジスタバンク設定修飾命令と直後の該通常の命令とが該延長された命令長を有する一命令になるものであってもよい。
また、この制御方法において、前記レジスタバンク指定命令がレジスタバンク設定命令であり、前記レジスタバンク指定命令より後にある通常の命令においては、明示的なレジスタバンクの指定を必要とせずに、前記オペランドが用いるレジスタに対して該レジスタバンク指定命令に基づくレジスタバンクの割り当てが適用される制御方法が提供される。
レジスタバンク指定命令を有することで、通常の命令にはバンク識別子を含めずに、短い命令長を保つことが可能となる。レジスタバンク指定命令もこの命令長に合わせることで、アーキテクチャ全体の最大命令長を短く保って多くのレジスタを取り扱うことが可能となる。
本発明のプロセッサの制御方法は、別の態様として、判定条件によって後にある命令を実行するかしないかの動作を制御する条件付実行切り換え修飾命令を有する制御方法とすることができる。
この条件付実行切り換え修飾命令とは、コンディショナルエグゼキューションプリフィクスということもある。この条件付実行切り替え修飾命令とは、分岐命令を伴わずに、判定条件に応じてその後の命令を実行するかしないかを切り換えることの出来る修飾命令（プリフィクス）である。この修飾命令を用いると、プログラム自体の分岐を削減することができ、並列処理時の分岐命令に伴うストールを回避できる効果がある。
また、本発明のプロセッサの制御方法は、レジスタバンク指定命令と、前記条件付実行切り換え修飾命令とを用いる制御方法とすることができる。
コンディショナルエグゼキューションプリフィクスと本発明のレジスタバンク指定命令を組み合わせて用いると、ほとんどストールなく並列処理することが出来るプログラムを記述することが出来るので、命令長を抑えつつ、処理速度が速いプロセッサを実現することが出来る。
さらに、本発明の制御方法でレジスタバンク指定修飾命令や条件付実行切り換え修飾命令は、命令デコーダにより実行される命令を先読みするプリフィクスデコーダによってデコードされ、該修飾命令に基づいて該プリフィクスデコーダが生成する命令デコーダ制御信号に応じて、該命令デコーダのデコード動作が変更されるものとすることが出来る。各修飾命令はそれ自身のみでは命令デコーダが命令として認識する一命令を構成するものではない。先読みした修飾命令がその修飾命令の直後の命令と組み合わされて一命令として命令の実行ステップを行なえば、命令の実行ステップを増やさずに目的とする動作が可能となる。この動作は、命令を先読みするプリフィクスデコーダを用いることで適切に実行することが出来る。
なお、本出願全体を通じて、「同時」という表現を用いているが、これは、コンピュータ分野で通常用いられるクロックパルスによる時刻の単位や数クロックからなるステップにおいて実質的に同時刻といい得る範囲内で２以上の事象が起きたり重なったりしているという意味である。ずれたタイミングで行なわれても次のクロックパルスまでに対象となっている二つの事象が行われること、あるステップ開始から終了までに対象となっている二つの事象が起きて終了すること、対象となっている事象同士の期間に重なりがあること、などが含まれる。これらの意味で両事象が実質的に同時であると認められれば「同時」に該当するものとする。
【図面の簡単な説明】  図１は、本発明の実施の形態のプロセッサの概略を示す構成図である。
図２は、本発明の実施の形態のバンク指定命令を含むアセンブラコードを示す説明図である。
図３は、図２のアセンブラコードによるバンク切り換えの様子を示す説明図である。
図４は、本発明の実施の形態のバンク指定命令の実現例を表わす説明図である。
図５は、本発明の実施の形態によるプロセッサ構成例における命令フェッチステージの構成を示す機能ブロックレベルの構成図である。
図６は、本発明の実施の形態によるプロセッサ構成例における命令デコードステージおよび命令実行ステージの構成を示す機能ブロックレベルの構成図である。
図７は、本発明の実施の形態によるプロセッサ構成例におけるライトバックステージの構成を示す機能ブロックレベルの構成図である。
図８は、本発明の実施の形態によるプロセッサ構成例におけるバンクスイッチ手段の構成を示す機能ブロックレベルの構成図である。
【発明を実施するための最良の形態】［アーキテクチャの実施の形態］
以下、図面を参照して本発明の実施の形態を説明する。
図１に本発明のプロセッサの概略を示す。演算器が使用するレジスタは、本発明では、例えばバンク０からバンクｎ−１までのｎ個のレジスタバンクと呼ばれる複数の単位にまとめられている。このレジスタバンクのいずれのバンクであるかを指定するには、バンク識別子を用いる。バンク識別子は適当なビット数を有している数字であり、例えば、ｎを表現するのに十分なビット数を有している。プロセッサ内にある任意のレジスタを特定するには、バンク識別子とレジスタアドレスとを指定する。
演算器は、命令デコーダ（図示せず）によってデコードされた命令に基づいて演算を実行する。この命令には、大別して２種類の命令が含まれている。
命令の第１の種類は、通常のプロセッサにおける命令と同様の命令である。例えば、外部メモリからデータをロードするロード命令（ニーモニック：ＬＤ）、加算を行なう加算（ＡＤＤ）や減算（ＳＵＢ）等、プロセッサの分野で周知の命令が含まれる。本明細書ではこの命令を「通常の命令」と呼ぶ。
命令の第２の種類は、アクセスするレジスタバンクを切り換える為の命令である。これらは、本発明に特有の命令であり、レジスタバンク指定命令と呼んでいる。この命令によって、それ以降の通常の命令に基づいて演算器がアクセスするレジスタバンクがいずれであるか、を決定することができる。例えば、プロセッサのアーキテクチャがオペランドを２つ用いるものである場合において、第１のオペランドと第２のオペランドがいずれのレジスタをアクセスするものであるかを独立して指定することができる。このレジスタバンクを切り換えるためのレジスタバンク指定命令は、特にその形式を問うものではない。通常のストアードプログラム方式の命令として、例えば、明示的なバンク識別子をオペランドとして有する命令（バンク設定命令）や、直後に後続する命令のオペランドが示すバンクを切り換えるプリフィクス（バンク設定修飾命令）とすることもできる。
このバンク切り換えのためのアセンブラコードにおける命令の例を図２に示す。行２０２は、バンク設定命令の一つであり、それ以降のプログラムで用いるバンクを指定するバンクセット命令（ニーモニック：ＢＳ）である。このバンクセット命令の第１および第２オペランドであるＢ０およびＢ１は、それぞれバンク０とバンク１を表わす。つまり、行２０２は、以降のプログラムにおいて、第１オペランド（デスティネーションオペランド）を「バンク０」とし、かつ、第２オペランド（ソースオペランド）を「バンク１」に設定する命令である。このように、行２０２に例示されるバンクセット命令は、このニーモニックＢＳに対応するオペコードと、上記オペランドによって構成される命令である。このバンクセット命令を代表とするバンク設定命令は、次にバンク設定命令が明示的に指定されるまでのレジスタバンクを割り当てる。なお、バンク設定命令が明示的にプログラムに現れるまでの命令行においてどのようなレジスタバンクの設定が行なわれるかは任意である。バンクが不定であるとしてそのような命令を受け付けないようにすること、バンクに何らかの既定値を割り当てるたり（例えば全てバンク０とする）、全てのバンクに対して並列して処理することや、デスティネーションオペランドとソースオペランドをそれぞれ別に割り当てること、などが可能である。
図２の行２０４は、直後に後続する命令に対してのみ有効なバンク設定プリフィクス（ニーモニック：ＢＰ）である。この例に記載のバンク設定プリフィクスは、オペランドとしてではなく、オペコードそれ自体にバンク識別子を内包している。バンク設定プリフィクス「ＢＰ１０」は、その直後に後続する命令（行２０６）にのみ影響し、デスティネーションオペランドをバンク１に、ソースオペランドをバンク０にする命令である。つまり、ｉ，ｊをバンク識別子を表わす添え字とすると、「ＢＰｉｊ」は、後続する命令のデスティネーションオペランドをバンクｉに、ソースオペランドをバンクｊに設定する。もちろん、前述のバンクセット命令のように、オペコードと、バンク識別子を表わすオペランドとを用いるようなものであって直後の命令行のみに影響するものでも良い。このバンク設定プリフィクスは、直後の命令にしか影響しないため、前述のバンク設定命令で指定されたバンクの割り当てを一時的にのみ上書きする。そして、バンク設定プリフィクスが影響しなくなる命令行（行２０８）では、バンク指定命令の指定が再び有効となる。
なお、バンク設定命令においては、その時点でのバンクの設定を保持しているバンクセレクトレジスタ（図示せず）というレジスタを用意しておいて、Ｂ０およびＢ１をそれらのレジスタとすることができる。そしてバンクセレクトレジスタの値は、明示的な命令によってプログラムの指定により参照することが可能である。バクセレクトレジスタの内容は、例えばサブルーチン構成のプログラムにおいては、グローバル変数としてサブルーチン間で共有されていても、ローカル変数としてサブルーチンごとに書き換えられても良い。ローカル変数である場合には、適当なデータ転送命令によって、メモリバンクに構成されたいずれかの汎用レジスタや外部メモリ等に書き出して保持されることができる。本発明のアーキテクチャにおいては、この転送を実現する命令を含んでいることができる。
図３に、図２に示したプログラムにおけるレジスタバンク指定命令の動作を模式的に示す。行２０６の命令（ＡＤＤ）は、直前の行２０４におけるバンク設定プリフィクスＢＰ１０の影響を受けるため、ソースオペランドとしてバンク１にあるＲ１を用い、デスティネーションオペランドとしてバンク０にあるＲ２１を用いて、Ｒ１とＲ２１の和の結果をＲ２１に書き戻す。行２０８の命令（ＳＵＢ）は、行２０２におけるバンク設定命令で指定されているように、ソースオペランドとしてバンク０にあるＲ２を用い、デスティネーションオペランドとしてバンク１にあるＲ１９を用いて、Ｒ２からＲ１９を減算してその結果をＲ１９に書き戻す。行２０８には、行２０４のバンク設定プリフィクスは影響しない。なお、図３ではソースオペランドを示す「ソースレジスターバンク」と「デスティネーションレジスターバンク」とを理解のために図の左右に分けて記載しているが、同じレジスタ識別子のレジスタバンクは、同じレジスタバンクを指し示しているものとすることができる。
以上のように、バンク指定命令を用いて、一連の命令のシーケンスから構成される任意のプログラムにおいて、少ない命令数でソースオペランドやデスティネーションオペランドのポイントするバンクを切り換えることが可能となる。また、直後の命令にのみ有効なバンク設定プリフィクス等を用いることで、柔軟にバンクを切り換えることが可能となる。
また、オペランドが２つの２オペランド命令である場合を例としているが、オペランドが１つのみの場合にはデスティネーションオペランドのみを利用することができる。また、オペランドを３つ用いる３オペランドのアーキテクチャであっても同様にバンク設定命令やバンク設定プリフィクスを定義することが可能である。
このようにして切り換えられるバンクは、図１における演算器からはアクセスするバンクを切り換えることにより、また、外部メモリとはメモリアクセス手段であるデータ転送装置１３、内部バス１４、外部バス１５によってアクセスすることができる。データ転送装置１３の動作は、命令に基づく制御信号によって変更することができる。
次に、本発明の命令長について説明する。以下、１６ビットを特に１ワードと呼ぶことがある。
図４に本発明の命令構成をビット配列にして示す。図４の通常の命令４０２とは、例えば、図２に説明した加算（ＡＤＤ）や減算（ＳＵＢ）等の命令であり、先に第１の種類の命令として説明した通常の命令であり、図２における行２０８に対応している。例えば、この命令４１２は、８ビットのオペコードと各４ビットの二つのオペランドによって構成され、１６ビットの命令長を有している。
また、図４のバンク設定修飾つき命令４０４は、バンク設定修飾命令であるバンク設定プリフィクス４１４と、それに後続する命令４１５から構成される。命令４１５は通常の命令である。図２においては、バンク設定修飾つき命令４０４は行２０４と行２０６の２行で表現されている。命令長は、バンク設定プリフィクス４１４、命令４１５ともに１６ビットであり、バンク設定修飾つき命令４０４は全体としては３２ビット（２ワード）である。このバンク設定修飾つき命令４０４に基づいて、バンク指定命令が命令デコーダで発行される。
また、図４のバンク設定命令４０６とは、例えば１６ビットのバンク設定命令４１６であり、図２における行２０２に対応する。例えば、通常の命令と同様に、４ビットのバンク設定命令オペコードと、各６ビットのバンク識別子オペランド２つを含む。バンク設定命令４０６に基づいて、バンク指定命令が命令デコーダで発行される。
以上に示したようなバンク設定命令やバンク設定修飾命令の命令長の設定は、バンク指定命令が必要でない演算が大部分を占める場合に特に好適である。つまり、バンク指定命令が発行されるときは命令長を２ワード等に長くして、通常は１ワード（１６ビット）等の短い命令を実行することにすれば、レジスタバンクの切り換えを要する場合以外の命令長を短くできる。これにより、プログラムコードの短縮や、プロセッサの実装における面積の縮小が可能としつつ、多数のレジスタが扱える。
なお、バンク設定命令が明示的に現れるまでに何らかの命令が実行される場合にどのようなバンクの割り当てを行なうかは、特に限定されない。バンクは不定であるとしてそのような命令を受け付けないようにすることや、既定のバンクの割り当てを用いて例えば全てバンク０を割り当てること、全てのバンクに対して並列して処理すること、デスティネーションオペランドとソースオペランドをそれぞれ別々に割り当てること、などが可能である。
本発明は、以上のような１ワードと２ワードの命令のみで構成されるものに限られない。例えば、最大命令長を３ワードとすることができる。この場合、第２ワードがバンク設定プリフィクス、第３ワードが通常の命令とすることができるが、第１ワードは他のプリフィクスとすることが出来る。このプリフィクスとしては、例えばコンディショナルエグゼキューションプリフィクスとすることができる。このコンディショナルエグゼキューションプリフィクスとは、分岐命令を伴わずに、判定条件に応じてその後の命令を実行するかしないかを切り換えることの出来るプリフィクスである。このプリフィクスは、これのみで、分岐命令を削減することができ、並列処理時の分岐命令に伴うストールを回避できる効果がある。また、コンディショナルエグゼキューションプリフィクスと本発明のレジスタバンク指定命令を組み合わせて用いると、ほとんどストールなく並列処理することが出来るプログラムを記述することが出来るので、命令長を抑えつつ、処理速度が速いプロセッサを実現することが出来る。なお、最大命令長が２ワードや３ワードであるときに最終ワードがレジスタ設定プリフィクスであると、一般不当命令であると認識されて演算処理されない。
以上のように、本発明により、プログラム全体の命令長を短く保ちつつ、レジスタ指定命令にかかわる命令にのみより長い命令長を割り当てて、多くのレジスタを扱うことできる。
［プロセッサ構成例］
図５〜８に、本発明のアーキテクチャを実装するプロセッサの構成例１０１を、機能ブロックレベルの構成図を各部分ごとに示す。図５は、命令フェッチステージ、図６は命令デコードステージと命令実行ステージ、図７はライトバックステージとその中に含まれるメモリアクセスステージをそれぞれ表わしている。
図５の命令フェッチステージは、命令記憶手段（図示せず）から命令フェッチブバッファ５４を含み、命令をロードする命令フェッチユニット５２と、進行するプログラムのカウントをしているプログラムカウンタ５８の値に基づいて、命令記憶手段をアクセスするアドレスを生成するフェッチアドレスユニット５６とからなる。
図６の命令デコードステージは、命令フェッチブバッファ５４としてロードされる命令を制御信号であるマイクロコード（マイクロ命令）へとデコードするメインデコーダ６２と、そのメインデコーダ６２に対してプリフィクスをデコードして出力するプリフィクスデコーダ６０とを含むデコーダを有する。本構成例では、１６ビットの命令長を有する各命令が９６ビット単位でデコーダに送られる。メインデコーダがある命令をデコードしている時に、その命令の後に続く命令はプリフィクスデコーダ６０でデコードされる。つまり、プリフィクスデコーダ６０は、事前に命令の先読みを行なうことにより、プリフィクスデコーダ６０は命令がプリフィクスを含むものかどうかを検出する。このプリフィクスデコーダ６０がプリフィクスを検出すると、そのプリフィクスの内容に応じて、メインデコーダ６２に制御信号を出力する。この制御信号により、メインデコーダ６０は、当該プリフィクスの後の命令についてのデコードの動作を切り換える。このように、プリフィクスデコーダとメインデコーダは、協働してプリフィクスの動作を実現する。そして、このプリフィクスが本発明のバンク設定プリフィクスであれば、メインデコーダ６２は直後にデコードする命令に含まれるオペランドに用いられるレジスタのバンクを切り換える。その結果、レジスタファイルのバンク割り当てを保持しているレジスタ（バンクセレクトレジスタ６６、図８）が変更される。このレジスタが本発明のバンクスイッチ手段となる。このように、バンク設定プリフィクスを用いることにより、後続する命令のオペランドのポイントするレジスタバンクが切り換えられる。つまり、プリフィクスデコーダとメインデコーダは、バンク指定命令となるマイクロ命令を生成することができる。
バンク設定プリフィクスではなくバンクセット命令等のバンク設定命令による場合には、メインデコーダでそのバンク設定命令がデコードされて、バンクセレクトレジスタを書き換えて、レジスタファイルのバンク割り当てを変更する。これにより、以後の命令におけるデスティネーションオペランドとソースオペランドが指し示すレジスタバンクが切り換わる。
命令デコードステージにはさらに、本発明の複数のレジスタバンクを含むレジスタファイル６４が含まれている。本実施の形態では、レジスタバンクは４個のバンクに整理されているデータ処理用レジスタとして記載されている。各レジスタバンクは、通常の命令において６ビットのフィールドで指定可能な６４ビット長を有するデータレジスタを１６本備えている。
命令デコードステージには、前述のように、バンクセレクトレジスタ６６が含まれている（図８）。このバンクセレクトレジスタは、例えばバンクセット命令による現在のバンク割り当てのステータスを保持している。
命令実行ステージには、命令デコードステージでデコードされた命令を具体的に実行するマイクロコード（マイクロ命令）制御装置６１０と、演算論理ユニット（ＡＬＵ）と、積和演算ユニット（ＭＡＵ）と、データプロセスユニット（ＤＰＵ）とを含んでなる演算器６８が含まれている。演算器６８は、マイクロ命令に基づいて、イミディエイト値、いずれかのレジスタバンク内のレジスタ値等に指定された演算処理を実行して、ライトバックステージに受け渡す。
命令デコードステージと命令実行ステージには、さらに、本発明の特徴的な要素が含まれている。レジスタファイルからの出力は信号６０１の一部であるソースレジスタＳＲＣ０とＳＲＣ１、デスティネーションレジスタＤＳＴ０とＤＳＴ１が用いられる。このうち、レジスタＳＲＣ０およびＤＳＴ０に接続されたレジスタファイルの各ポートは、通常のプロセッサにおいて用いられるものであり、レジスタＳＲＣ０およびＤＳＴ０を介して演算器と接続されている。一方、レジスタＳＲＣ１およびＤＳＴ１に接続されたレジスタファイルのポートは本発明の特徴的なポートであり、レジスタＳＲＣ１およびＤＳＴ１を介して外部メモリ（図示せず）への出力となるストア命令実行装置６２０に接続されている。本構成例ではＳＲＣ１およびＤＳＴ１の二つのレジスタを記載しているが、本発明は、このようなレジスタを少なくとも一つ有していれば良い。このストア命令実行装置６２０は、後述するメモリ出力装置７４（図７）と協働して本発明のメモリアクセス装置の一部をなすものである。これにより、レジスタバンク構成を有するレジスタファイルの一部のレジスタバンクに対してレジスタＳＲＣ０およびＤＳＴ０を介して演算器がアクセスし、同時に、他の一部のレジスタバンクに対しては、レジスタＳＲＣ１およびＤＳＴ１を介して外部メモリがアクセスすることができる。なお、以上の記載ではマイクロ命令を用いるプロセッサ構成を説明したが、ハードワイアード構成としても実現可能である。
図７のライトバックステージは、演算器６８の出力をレジスタファイルへとライトバックするライトバック装置７２や、演算器６８の出力をデータとして外部メモリ（図示せず）に書き出す３状態ドライバーを含むメモリ出力装置７４、当該外部メモリ内からデータを読み出してレジスタファイル６４にロードするメモリ入力装置７６を有している。この時、バンクが異なるので、メモリ入力装置７６は、ライトバックステージと並行してレジスタファイル６４にデータを書き込むことが出来る。
図８に、図５〜７に記載されていないが本発明のプロセッサで用いられるバンクスイッチ手段の構成例を示す。本構成例のバンクスイッチ手段は、バンクセレクトレジスタ６６と、ＳＳＲ（システムステータスレジスタ）８２中に含まれている、ソースオペランドのレジスタに割り当てられるレジスタバンクを保持するレジスタＳＲＣＢ（８４）と、デスティネーションオペランドのレジスタに割り当てられるレジスタバンクを保持するレジスタＤＳＴＢ（８６）とから構成されている。バンクセレクトレジスタ６６は、命令デコードステージにおけるソースオペランドとデスティネーションオペランドのそれぞれのレジスタに割り当てられるレジスタバンクを保持するレジスタＩＤ．ＳＲＣＢ（８４ａ）とＩＤ．ＤＳＴＢ（８６ａ）からなる。
まず、バンク指定命令がバンク設定命令である場合についてこれらのバンクスイッチ手段の動作について説明する。メインデコーダ６２からの直接書き換えられるレジスタＩＤ．ＳＲＣＢ（８４ａ）とＩＤ．ＤＳＴＢ（８６ａ）は、命令実行ステージを経ることなく書き換えられる。このため、これらは最新のレジスタバンクを保持しており、レジスタ・リード時に使用される。同じレジスタバンクの割り当ては、制御レジスタのレジスタファイル中のＳＳＲ８２の中にあるＳＲＣＢ（８４）とＤＳＴＢ（８６）にもその後に書き込まれる。このように動作させると、命令デコードステージの終了時には既にその命令に含まれるレジスタバンクの割り当てが反映されるため、例えば１クロックといった短時間でレジスタバンクの割り当てが可能となり、直後の命令についてもこのレジスタバンクの割り当てが有効となり、レジスタファイル６４にあるどのレジスタバンクのレジスタにアクセスするかを、ソースオペランド、デスティネーションオペランドごとに定めることができる。また、ライトバックステージの終了とともにレジスタファイル中のＳＳＲ８２にもこれが書き込まれるので、システムステータスとしてのレジスタバンクの割り当ての保持が可能となる。
次に、バンク指定命令がバンク設定修飾命令であり、直後の通常の命令と組み合わせて一命令となる場合について説明する。この場合には、その直後の命令にしかバンク設定修飾命令の作用が及ばないので、ＳＳＲ８２にレジスタバンクの一時的な割り当てを書き込む必要が無い。そこで、命令デコードステージでバンクセレクトレジスタ６６を書き換えるが、その書き込まれた内容は命令実行ステージ、ライトバックステージと伝えられることは無い。このようにして、バンク設定修飾命令の直後にある通常の命令にのみ有効な一時的なバンクの割り当てが実現する。
以上のようなプロセッサの構成によって、本発明のレジスタバンク構成されたレジスタバンクを用いることができる。つまり、レジスタバンク設定命令によるレジスタ切り換え動作や、レジスタバンク設定プリフィクスにより後続命令のオペランドポイント先のレジスタを切り換える動作を実装し得るプロセッサが、具体的なハードウエアとして提供される。また、演算器の演算中であっても外部メモリにアクセスすることができ、メモリのレイテンシーに起因する処理の停滞を防止することができる。
なお、図には示していないが、メモリ出力装置７４やメモリ入力装置７６には、周知のキャッシュメモリを用いて、外部メモリに起因するレイテンシーを削減することができる。
［マルチプロセッサシステム構成例］
図１〜図７を用いて説明した単体のプロセッサを複数用いて、マルチプロセッサ構成を実現することができる。この際、協働させる個々のプロセッサは命令記憶手段に接続されている。この命令記憶手段はそれぞれのマルチプロセッサを協働させる命令を記憶している。各プロセッサは、個々のプロセッサの持つプログラムカウンタに応じて、フェッチステージでそれぞれのプロセッサ自身が必要とする命令のみをフェッチする。この各プロセッサの命令には、本発明の単体のプロセッサで用いられるのと同様のレジスタバンク設定命令や、レジスタバンク修飾命令とすることができる。
また、外部メモリは、いくつかのプロセッサからアクセスされるものでも良い。すなわち、外部メモリを共有メモリシステムとして構成し、外部メモリ中のあるデータ領域を複数のプロセッサで共有してプロセッサ間でレジスタを共有することができる。この構成では、レイテンシーが大きい外部メモリにアクセスするため、例えば、各プロセッサのレジスタうち他のプロセッサと値を共有するレジスタ（以下「共有レジスタ」という）と、各プロセッサのみで用いるレジスタとを別々のレジスタバンクに割り当てることができる。各プロセッサは、例えば、共有レジスタに対する演算をするときのみ、その共有レジスタを含むレジスタバンクをデスティネーションオペランドまたはソースオペランドとしてアクセスし、他の演算ではそれ以外のレジスタバンクにアクセスする。そして、共有レジスタが書き換えられたときのみ、共有メモリにアクセスする。このようにマルチプロセッサを構成する各プロセッサが動作すると、各プロセッサで共有すべきレジスタの書き換え結果のみが、レイテンシーの大きな共有メモリを介してアクセスされる。そして、その共有メモリへのアクセスの間も、各プロセッサの演算器は、共有レジスタを扱わない命令を実行できる。このように、本発明における複数のプロセッサからなるマルチプロセッサシステムでは、データのコヒーレンシーを保証しつつ、各プロセッサにおける演算が外部メモリアクセスによるレイテンシーの影響を受けにくいマルチプロセッサシステムが実現する。
【産業上の利用の可能性】
本発明のプロセッサ構成によって、命令長を短く保ったまま、多数のレジスタを用いることができる。また、メモリのレイテンシーに起因する処理の停滞を防止することができる。
本発明における複数のプロセッサからなるマルチプロセッサシステムでは、データのコヒーレンシーを保証しつつ、各プロセッサにおける演算が外部メモリアクセスによるレイテンシーの影響を受けにくいマルチプロセッサシステムを実現することができる。
【図１】
2004036416.tif 000003
【図２】
2004036416.tif 000004
【図３】
2004036416.tif 000005
【図４】
2004036416.tif 000006
【図５】
2004036416.tif 000007
【図６】
2004036416.tif 000008
【図７】
2004036416.tif 000009
【図８】
2004036416.tif 000010
【手続補正書】
【提出日】平成14年11月27日(2002.11.27)
【手続補正００１】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2004036416.tif 000011
【手続補正００２】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2004036416.tif 000012
【手続補正００３】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2004036416.tif 000013
【国際調査報告】
2004036416.tif 000014
2004036416.tif 000015
2004036416.tif 000016
2004036416.tif 000017