(57)【要約】プログラマブルプロセッサは、命令形態にコード化したプログラム情報に基づいて入力データを出力データに変換するのに用いられる。これにて得られる出力データの値は、とりわけ、いつでもプロセッサの瞬時状態に依存する。この状態は、レジスタに格納される一時的なデータ値、例えばフラグのようなもので作られる。フラグの原理の欠点は、これらフラグがプロセッサ、特に並列プロセッサに副次的な悪影響をもたらすと云うことにある。しかしながら、フラグのこれまでの概念を取り除けば、残っている問題はブランチングの実施にある。本発明による処理システムは、実行ユニット（ＥＸ１，ＥＸ２）と、データを格納するための第1レジスタファイル（ＲＦ１，ＲＦ２）と、命令メモリ（ＰＭ）と、プログラムカウンタの値を格納するための第2レジスタファイル（ＲＦ３）とを具えている。実行ユニットはプログラムカウンタの値を第2レジスタに書き込むための専用命令を条件付きで実行する。その結果、本発明による処理システムは、フラグを用いることなく条件付きのブランチングを行うことができる。
2006525583.tif 000002
【特許請求の範囲】
【請求項１】
プログラムカウンタ（ＰＣ）の制御下で一式の命令を実行するために配置した処理システムであって：
実行ユニット（ＥＸ１，ＥＸ２）と；
実行ユニットによりアクセス可能で、データを格納するための第１のレジスタファイル（ＲＦ１，ＲＦ２）と；
前記一式の命令を格納するためのプログラムメモリ（ＰＭ）と；
実行ユニット（ＥＸ２）によりアクセス可能で、プログラムカウンタの値を格納するための第２のレジスタファイル（ＲＦ３）と；
を具え、且つ実行ユニット（ＥＸ２）は、プログラムカウンタの値を第２のレジスタファイルに書き込むための専用命令を条件付きで実行すべく構成配置されるようにしたことを特徴とする、命令実行用の処理システム。
【請求項２】
前記処理システムがさらにコントローラ（ＣＴＲ）も具え；
第２のレジスタファイルはコントローラによりアクセス可能であり；
且つコントローラは、第２のレジスタファイルに格納されたプログラムカウンタの値を用いて、プログラムメモリから命令を取り込むべく構成配置されるようにしたことを特徴とする請求項１記載の処理システム。
【請求項３】
前記コントローラはさらに、プログラムカウンタの値を増分させ、且つプログラムカウンタの増分値を第２のレジスタファイルに書き込むべく構成配置されるようにしたことを特徴とする請求項２記載の処理システム。
【請求項４】
前記処理システムはさらに、ブランチ条件の評価に応じて、コントローラによって増分されたプログラムカウンタの値を第２のレジスタに書き込むか、実行ユニットによって生成されたプログラムカウンタの値を第２のレジスタファイルに書き込むべく構成配置されるようにしたことを特徴とする請求項３記載の処理システム。
【請求項５】
前記実行ユニット（ＥＸ２）はさらに、ブランチ条件を評価し、その後、該評価の結果をガード（ＧＵ２）として用いて、プログラムカウンタの値を第２のレジスタファイルに書き込むための第１の専用命令を条件付きで実行すべく構成配置されるようにしたことを特徴とする請求項１記載の処理システム。
【請求項６】
前記実行ユニット（ＥＸ２）はさらに、第２の専用命令を実行すべく構成配置され；
第２の専用命令は少なくとも第１アーギュメントと第２アーギュメントを有し、第２アーギュメントはプログラムカウンタの値とし；
第２の専用命令は、第１アーギュメントの値に応じて、プログラムカウンタの値を第２のレジスタファイルに書き込むべく編成されるようにしたことを特徴とする請求項１記載の処理システム。
【請求項７】
前記処理システムはさらに、前記専用命令の複数個を並列に実行すべく構成配置され、且つコンパイルのステップ中に、複数専用命令のうちの、１つの命令だけが条件付きで実行されるようにしたことを特徴とする請求項１記載の処理システム。
【請求項８】
前記処理システムをデータ−静止型の超大命令語（VLIW）プロセッサとし、該VLIWプロセッサが：
複数の実行ユニット（ＥＸ１，ＥＸ２）と；
これらの実行ユニットと第１のレジスタファイルを結合させるための通信デバイス（CN）と；
を具えていることを特徴とする請求項１記載の処理システム。
【請求項９】
前記処理システムを時間−静止型の超大命令語（VLIW）プロセッサとし、該VLIWプロセッサが：
複数の実行ユニット（ＥＸ１，ＥＸ２）と；
これらの実行ユニットと第１のレジスタファイルを結合させるための通信デバイス（CN）と；
を具え、且つ
VLIWプロセッサはさらに、複数の実行ユニットのうち、或る１つの実行ユニットから得たデータを前記一式の命令から取り出した制御情報に基づいて、第１のレジスタファイル及び第２のレジスタファイルに転送するのをダイナミックに制御すべく構成されるようにしたことを特徴とする請求項１記載の処理システム。
【請求項１０】
請求項８又は９記載のVLIWプロセッサにおいて、前記第1レジスタファイルを分散レジスタファイル（RF1,RF2）としたことを特徴とするVLIWプロセッサ。
【請求項１１】
通信デバイスを部分接続される通信ネットワークとしたことを特徴とする請求項請求項８又は９記載のVLIWプロセッサ。
【請求項１２】
実行ユニット（ＥＸ１，ＥＸ２）と；
実行ユニットによりアクセス可能で、データを格納するための第１のレジスタファイル（ＲＦ１，ＲＦ２）と；
一式の命令を格納するためのプログラムメモリ（ＰＭ）と；
実行ユニット（ＥＸ２）によりアクセス可能で、プログラムカウンタの値を格納するための第２のレジスタファイル（ＲＦ３）と；
を具えている処理システムによって前記一式の命令を実行する方法であって、当該方法が：
前記プログラムカウンタの値を前記第２のレジスタファイルに書き込むための専用命令を実行するステップと；
前記プログラムメモリから命令を取り出すために前記プログラムカウンタの値を用いるステップと；
前記命令を実行するステップと；
を具えている、処理システムによる命令実行方法。
【請求項１３】
コンピュータに実行させるコンパイラプログラムプロダクトであって、請求項１２に記載の処理システムをプログラミングする方法の全てのステップを実行するために編成したコンパイラプログラムプロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にはデジタル処理の改善、特に、並列プロセッサにおける条件付きのブランチング並びにルーピングをサポートする方法、装置及びコンパイラに関する。
【背景技術】
【０００２】
プログラマブルプロセッサは、命令形態にコード化したプログラム情報に基づいて入力データを出力データに変換するのに用いられる。これにて得られる出力データの値は、如何なる瞬時でも入力データ、プログラム情報及びプロセッサの瞬時状態に依存する。従来のプロセッサにおけるこの瞬時状態は、例えば所謂フラグはもとより、レジスタに格納された一時的なデータ値で作られる。これらのフラグは通常、２〜３例を挙げると、計算中に特定の丸めモードを設定したり、或る演算のセマンティクスに影響を与えたり、プログラムの流れを変えたりするのに用いられる。フラグは通常、特殊なフラグレジスタに格納され、このレジスタにおけるフラグは、１つ以上のフラグを変えることのできる各命令の後に書き換えられる。通常、プロセッサ内で如何なる瞬時でも同じフラグに多数の値を持たせて活用することはできない。
【０００３】
高性能演算の需要が高まるにつれて、何らかの形態の同時処理、即ち並列処理をプロセッサのアーキテクチャに導入した幾つかの解決策が紹介されるようになった。２つの主だった概念、即ち、プログラムの幾つかのスレッドを並列に実行するマルチスレッディング概念と、超大型命令語（ＶＬＩＷ : Very Large Instruction Word）概念とが採用されている。ＶＬＩＷプロセッサの場合には、複数の命令を１つの長い命令、所謂ＶＬＩＷ命令にパッケージする。ＶＬＩＷプロセッサは、複数の独立した実行ユニットを用いて、これら複数の命令を並列に実行する。プロセッサは、プログラムの命令レベルでの並列処理を活用して、一度に１つ以上の命令を実行することができる。この同時処理形態により、プロセッサの性能が向上する。ソフトウェアプログラムをＶＬＩＷプロセッサで実行するためには、それをＶＬＩＷ命令のセットの形に変えなければならない。コンパイラは並列処理を最適化することによってプログラムを実行させるのに必要とされる時間を最少にしようと努める。コンパイラは、単一ＶＬＩＷ命令に割り当てられた命令を並列に実行することができると云う制約の下で、しかもデータ依存の制約の下で、複数の命令をＶＬＩＷ命令に合成する。並列命令をＶＬＩＷ命令にコード化することは、コードサイズをかなり大きくすることになる。このような大きなコードサイズは、必要とされるメモリサイズと、必要とされるメモリ帯域幅との双方によってプログラムメモリのコストが増大することになる。最近のＶＬＩＷプロセッサでは、コードサイズを低減させるために種々の手段が採られている。１つの重要な例に、データ静止（data stationary）型のプロセッサでのno operation（ＮＯＰ）演算をコンパクトに表現するもの、即ち、ＮＯＰ演算をＶＬＩＷ命令の前に付加した特別なヘッダーにおける単一ビットによってコード化するものがある。
【０００４】
プロセッサのデータパイプラインでの演算を制御するために、通常はコンピュータアーキテクチャにて２つの異なるメカニズムを用いるのが普通であり、それは、G. Goossens, J. van Praet, D. Lanneer, W. Geurts, A. Kifli, C. Liem 及びP. Paulinによる「Proceedings of the IEEE」（vol. 85.no. 3, １９９７年３月）の“Embedded software in real-time signal processing systems: design technologies”に開示されているような、データ−静止型及び時間−静止型のコード化である。データ−静止型のコード化の場合には、プロセッサの命令セットの一部であるどの命令も、それがデータパイプラインを移動する際に、特定のデータアイテムを実行しなければならない演算の完全系列を制御する。命令が一旦プログラムメモリから取り出されて、デコードされたら、プロセッサコントローラのハードウェアは、合成演算が正しいマシーンサイクルで実行されるようにする。時間−静止型コード化の場合には、プロセッサの命令セットの一部であるどの命令も、単一のマシーンサイクルで実行しなければならない演算の完全セットを制御する。これらの演算はデータパイプラインを移動する幾つか異なるデータアイテムにについて云えることである。この場合に、データパイプラインを設定し、且つ維持することはプログラマ又はコンパイラの責任である。斯様にして得られるパイプラインのスケジュールはマシーンコードプログラムにて完全に見ることができる。時間−静止型のコード化は、アプリケーション特有のプロセッサによく用いられる。これは、斯様なコード化が、大きなコードサイズを犠牲にして、命令中に存在する制御情報を遅延させるのに必要なハードウェアのオーバヘッドをセーブするからである。データ−静止型のプロセッサの場合には、演算の条件付き実行を飛越し動作を用いることなく実施することができる。しかしながら、従来の時間−静止型プロセッサの場合には、演算の条件付き実行を飛越し動作を用いることなく実施することはできない。先の特許出願（欧州特許出願第０３１０１０３８．２号〔代理人の整理番号PHNL030384EPP〕）には、飛越し動作を用いることなく演算を条件付きで実行可能にする時間−静止型プロセッサが開示されている。
【０００５】
フラグの原理及びこれらフラグの格納並びに更新の仕方の欠点は、これらフラグがプロセッサに所謂副作用、即ちプログラムでははっきり見ることができない作用を生じさせることにある。それよりも、副作用は、先に行った演算に応じて、プログラムの異なる部分における同じ演算が違ったセマンティックスを示すことになる一種の絶対的な作用を引き起こす。プログラムは、フラグの更新をプログラムによってより良好に制御し得るようにする場合に、より効率的に作られることになる。例えば、ブランチ（分岐）がゼロの減算結果を生じさせなければならい場合には、条件としてゼロ−フラグを用いるブランチを用いることができる。しかし、この場合には、減算演算とブランチ演算との間にて、ゼロ−フラグを変える演算をスケジュールすることができない。通常は多くの演算がフラグを更新するから、減算演算はブランチ演算の直前にスケジュールしなければならないことがよくある。こうした種類の制約は、プログラムのスケジュール自由度をかなり制限することになり、潜在的に有効なスケジュールを無視することになる。一般に、フラグはＣプログラミング言語のような高レベル言語に対してパワフルなコンパイラを非常に生成し難くすると云える。特に、ＶＬＩＷプロセッサのような並列プロセッサでは、フラグは追加の問題を負わすことになる。その理由は、多数の演算を並列に実行し得るようにする場合に、フラグレジスタを更新させるのにどんな演算をすべきかはっきりしないからである。理想的には、コンパイラ馴染みのＶＬＩＷプロセッサが最少の副作用しか呈さないようにする。従来のフラグの概念を取り除くことによって、斯様な多くの副作用を除外することができる。例えば、特殊な丸めモード又は他の特殊な演算セマンティックスを、特殊な演算コード、例えば正規の加算命令のデータ入力に続く第３のデータ入力としてとられるキャリーでの加法のための特殊なaddc命令を用いることにより実施することができる。しかしながら、通常はフラグを用いて、例えば、branch-on-equalを決定するのにゼロフラグをとることによって取り扱われるブランチングの実施に関わる問題が残っている。
【発明の開示】
【０００６】
本発明の目的は、フラグを用いることなく、プロセッサ、特に並列プロセッサにブランチング及びルーピングの使用を可能にすることにある。
【０００７】
上記本発明の目的は、プログラムカウンタの制御下で一式の命令を実行するために配置した処理システムであって：実行ユニットと、この実行ユニットによりアクセス可能で、データを格納するための第１のレジスタファイルと、前記一式の命令を格納するためのプログラムメモリと、前記実行ユニットによりアクセス可能で、前記プログラムカウンタの値を格納するための第２のレジスタファイルとを具え、且つ前記実行ユニットが前記プログラムカウンタの値を前記第２のレジスタファイルに書き込むための専用命令を条件付きで実行すべく構成配置されるようにした、命令実行用の処理システムで達成される。計算手段は、加算器、乗算器、論理演算、例えばＡＮＤ，ＯＲ，ＸＯＲ等や、ルックアップテーブル演算、メモリアクセス等を行うための手段で構成することができる。
【０００８】
命令の正規の逐次実行中に、プログラムカウンタの値はサイクル毎に増分される。しかしながら、命令実行中のブランチング及びルーピングには、次に実行すべき目標命令を指示するために、プログラムカウンタはその増分値とは異なる値に切り換えられるようにする必要がある。専用命令を条件付きで実行することにより、実行ユニットは、条件が真である場合に、プログラムカウンタの値を第２レジスタファイルに書き込むことができる。条件が真でない場合には、プログラムカウンタの値は第２レジスタファイルに書き込まれない。最初の場合には、プログラムカウンタが、次に実行すべきブランチ又はループ目標命令を指示する。第２の場合には、プログラムカウンタを通常通り増分させることができ、ブランチングや、ルーピングは行われない。従って、フラグを必要とすることなく、条件付きのブランチング及びルーピングを行うことができる。
【０００９】
米国特許第６，３６６，９９９号には、超大型命令語プロセッサにおける条件付き実行をサポートする方法及び装置が開示されている。実行命令によって発生される条件付きの状態は、所謂算術条件フラグ（ＡＣＦｓ）にてセーブされる。ＡＣＦｓは、条件付きブランチングと条件付き実行との双方に用いられる。さらに、ＡＣＦｓは、命令実行の結果として設定されるか、又は状態情報のブール結合の結果として設定される状態情報を包含する。これらのＡＣＦｓは、条件付き命令によって特定し、且つ使用することができ、これにより条件付きブランチの使用を最少にすることができる。しかし、上記米国特許には、フラグを用いることなく、プロセッサにて条件付きのブランチングを如何にして行うかについては開示されておらず、斯様なプロセッサを如何にして実現し得るかについても開示されていない。
【００１０】
本発明の好適例では、実行ユニットをさらに、ブランチ条件を評価した後に、該評価の結果をガードとして用いて、プログラムカウンタの値を第２のレジスタファイルに書き込むための第１の専用命令を条件付きで実行すべく構成配置する。ブランチ条件は前もって計算することができ、その専用の命令を用いて、第2レジスタファイルへのプログラムカウンタの値の条件付き書き戻しが実施される。
【００１１】
本発明のさらに他の好適例では、実行ユニットをさらに、第２の専用命令を実行すべく構成配置し、該第２の専用命令は少なくとも第１アーギュメントと第２アーギュメントを有し、第２アーギュメントはプログラムカウンタの値とし、第２の専用命令は、第１アーギュメントの値に応じて、プログラムカウンタの値を第２のレジスタファイルに書き込むべく編成されるようにする。第１アーギュメントは、ブランチ条件の値、又は他のいずれかのデータ値とすることができる。原則として、どんな種類の演算及びどんな種類の実行ユニットでも、このようにしてプログラムカウンタの値を変え、従って条件付きのブランチング又はルーピングを行うことができる。
【００１２】
本発明の他の好適例は従属請求項に記載した通りである。本発明によれば、前記処理システムをプログラミングする方法並びに処理システムをプログラミングする前記方法の全てのステップをコンピュータシステムに実行させるために編成したコンパイラプログラムプロダクトも同じく請求される。
【発明を実施するための最良の形態】
【００１３】
図１及び図２の概略図は、複数の実行ユニットＥＸ１及びＥＸ２と、レジスタファイルＲＦ１及びＲＦ２を含む分散レジスタファイルとを具えている時間−静止型のＶＬＩＷプロセッサを示す。レジスタファイルＲＦ１及びＲＦ２には、これらのレジスタファイルから入力データＩＤを取り出すために、実行ユニットＥＸ１及びＥＸ２がそれぞれアクセス可能である。実行ユニットＥＸ１及びＥＸ２はまた、通信ネットワークＣＮ及びマルチプレクサＭＰ１及びＭＰ２を介してレジスタファイルＲＦ１及びＲＦ２に結合され、前記実行ユニットからの結果データＲＤ１及びＲＤ２を書き込みデータWD1及びWD2として分散レジスタファイルに送出する。プロセッサはさらに、プログラムカウンタＰＣの値を格納するためのレジスタファイルＲＦ３も具えている。実行ユニットＥＸ２は、結果データＲＤ２を書き込みデータとしてレジスタファイルＲＦ３に書き込むために、通信ネットワークＣＮ及びマルチプレクサＭＰ３，ＭＰ４を介してレジスタファイルＲＦ３にも結合されている。実行ユニットＥＸ２は、レジスタファイルＲＦ３からのプログラムカウンタＰＣの値を実行ユニットＥＸ２とレジスタファイルＲＦ３との間の直接接続を介して読み取ることもできる。コントローラＣＴＲはレジスタファイルＲＦ３からのプログラムカウンタＰＣの値を読み取る。プログラムカウンタのこの値は、次に実行すべき命令が格納されているプログラムメモリＰＭにおけるアドレスを提示する。プログラムカウンタＰＣの値を用いることにより、コントローラＣＴＲはプログラムメモリＰＭから命令ＩＮを取り出す。この命令ＩＮは命令レジスタＩＲに格納される。次に、命令ＩＮはコントローラＣＴＲによって命令レジスタＩＲから検索され、コントローラＣＴＲはこの命令ＩＮをデコードする。コントローラＣＴＲはまた、レジスタファイルＲＦ３から読み取ったプログラムカウンタＰＣの値を、ユニットＩＮＣＲを用いて増分し、プログラムカウンタＰＣのこの増分値をマルチプレクサＭＰ４に送出する。マルチプレクサＭＰ４を介して、プログラムカウンタＰＣの増分値か、書き込みデータＷＤ３に対応するプログラムカウンタの値のいずれかが、書き込み可能指標ＷＥ３に応じてレジスタファイルＲＦ３に格納される。書き込み可能指標ＷＥ３が真に等しい場合には、書き込みデータＷＤ３に対応するプログラムカウンタの値がレジスタファイルＲＦ３に書き込まれ、そうでない場合には、プログラムカウンタＰＣの増分値がレジスタファイルＲＦ３に書き込まれる。一般に、実行される命令は、２つのオペランドだけを必要として１つの結果のみを発生するＲＩＳＣのような演算、並びに２つよりも多いオペランドを消費でき、及び/又は１つ以上の結果を生成し得る特注の演算を含んでいる。幾つかの命令は、オペランドデータとして小さいか、又は大きい即値(immediate value)を必要とすることがある。デコーディングステップの結果は、書き込み選択指標ＷＳ１，ＷＳ２及びＷＳ３と、書き込みレジスタファイル指標ＷＲ１及びＷＲ２と、読み取りレジスタ指標ＲＲ１及びＲＲ２と、演算妥当性指標ＯＰＶ１及びＯＰＶ２と、演算コードＯＣ１及びＯＣ２である。書き込み選択指標ＷＳ１，ＷＳ２及びＷＳ３は、コントローラＣＴＲと、マルチプレクサＭＰ１，ＭＰ２及びＭＰ３との間の結合を介してそれぞれマルチプレクサＭＰ１，ＭＰ２及びＭＰ３に供給される。書き込み選択指標ＷＳ１，ＷＳ２及びＷＳ３は、レジスタファイルＲＦ１，ＲＦ２及びＲＦ３にそれぞれ書き込まなければならないデータＷＤ１，ＷＤ２及びＷＤ３に対する必要な入力チャネルを通信ネットワークＣＮから選択するために対応するマルチプレクサによって用いられる。書き込み選択指標ＷＳ１，ＷＳ２及びＷＳ３はまた、対応するレジスタファイルＲＦ１，ＲＦ２又はＲＦ３へのデータＷＤ１，ＷＤ２及びＷＤ３の実際の書き込みを可能にしたり、不能にしたりするのに用いられる書き込み可能指標ＷＥ１，ＷＥ２及びＷＥ３に対する入力チャネルを通信ネットワークＣＮから選択するために対応するマルチプレクサによって用いられる。コントローラＣＴＲは、データを書き込まなければならないレジスタを対応するレジスタファイルから選択するために、書き込みレジスタ指標ＷＲ１及びＷＲ２を与えるためにレジスタファイルＲＦ１及びＲＦ２に結合される。コントローラＣＴＲはレジスタファイルＲＦ１及びＲＦ２に読み取りレジスタ指標ＲＲ１及びＲＲ２もそれぞれ供給して、実行ユニットＥＸ１及びＥＸ２によってそれぞれ入力データＩＤを読み出さなければならないレジスタを対応するレジスタファイルから選択する。レジスタファイルＲＦ３だけは１つのレジスタしか有しておらず、従ってこのレジスタは読み取りレジスタ指標も書き込みレジスタ指標も必要としない。コントローラＣＴＲは実行ユニットＥＸ１及びＥＸ２にも結合されて、実行ユニットＥＸ１又はＥＸ２が対応する入力データＩＤに成すべき演算のタイプを規定する演算コードＯＣ１及びＯＣ２をそれぞれ供給する。演算妥当性指標ＯＰＶ１及びＯＰＶ２も実行ユニットＥＸ１及びＥＸ２にそれぞれ供給され、これらの指標は、対応する演算コードＯＣ１，ＯＣ２によって妥当な演算が規定されるかどうかを示す。演算妥当性指標ＯＰＶ１及びＯＰＶ２の値はＶＬＩＷ命令のデコーディング中に決定される。コントローラは、このデコーディング後にプログラムから書き込み選択指標を得て、これらの書き込み選択指標を対応するマルチプレクサＭＰ１，ＭＰ２又はＭＰ３に直接供給する。
【００１４】
図１を参照するに、コントローラＣＴＲはレジスタ１０５に結合されている。コントローラＣＴＲはデコーディングステップ中にプログラムから演算妥当性指標ＯＰＶ１及びＯＰＶ２を取り出し、これらの演算妥当性指標をレジスタ１０５に供給する。コード化演算がＮＯＰ演算である場合には、演算妥当性指標は偽に設定され、そうでなければ、演算妥当性指標は真に設定される。演算妥当性指標ＯＰＶ１及びＯＰＶ２は、レジスタ１０５，１０７及び１０９を用いる対応する実行ユニットＥＸ１及びＥＸ２のパイプラインにより遅延される。別の例では、対応する実行ユニットのパイプライン深度に応じてレジスタの個数を変えることができる。実行ユニットＥＸ１及びＥＸ２によるそれぞれ演算コードＯＣ１及びＯＣ２によりそれぞれ規定されるような演算の実行後には、対応する結果データＲＤ１及びＲＤ２並びに対応する出力妥当性指標ＯＶ１及びＯＶ２が生成される。出力妥当性指標ＯＶ１又はＯＶ２は、対応する結果データＲＤ１又はＲＤ２が妥当な場合には真であり、そうでなければ偽である。ユニット１０１は遅延した演算妥当性指標ＯＰＶ１と出力妥当性指標ＯＶ１とで論理ＡＮＤ演算を行って、結果妥当性指標ＲＶ１を得る。ユニット１０３は、遅延した演算妥当性指標ＯＰＶ２と出力妥当性指標ＯＶ２とで論理ＡＮＤ演算を行って、結果妥当性指標ＲＶ２を得る。ユニット１０１及び１０３は共に、部分的に接続されたネットワークＣＮを介してマルチプレクサＭＰ１及びＭＰ２に結合されて、結果妥当性指標ＲＶ１及びＲＶ２をマルチプレクサＭＰ１及びＭＰ２に送出する。ユニット１０３だけは、部分的に接続されたネットワークＣＮを介してマルチプレクサＭＰ３にも結合されて、結果妥当性指標ＲＶ２をマルチプレクサＭＰ３にも送出する。書き込み選択指標ＷＳ１及びＷＳ２は、対応するマルチプレクサＭＰ１及びＭＰ２によって用いられて、接続ネットワークＣＮから、結果データを対応するレジスタファイルに書き込みデータＷＤ１又はＷＤ２としてそれぞれ書き込まなければならないチャネルを選択する。結果データチャネルがマルチプレクサＭＰ１又はＭＰ２によって選択される場合には、結果妥当性指標ＲＶ１及びＲＶ２が書き込み可能指標ＷＥ１及びＷＥ２を設定するのに用いられて、レジスタファイルＲＦ１及びＲＦ２への結果データＲＤ１及びＲＤ２の書き込みをそれぞれ制御する。マルチプレクサＭＰ１又はＭＰ２が結果データＲＤ１に対応する入力チャネルを選択した場合には、結果妥当性指標ＲＶ１がそのマルチプレクサに対応する書き込み可能指標を設定するために用いられ、また、結果データＲＤ２対応する入力チャネルが選択される場合には、結果妥当性指標ＲＶ２が、対応する書き込み可能指標を設定するために用いられる。マルチプレクサＭＰ３が結果データＲＤ２に対応する入力チャネルを選択した場合には、結果妥当性指標ＲＶ２が書き込み可能指標ＷＥ３を設定するのに用いられ、レジスタファイルＲＦ３への書き込みデータＷＤ３の格納を制御する。結果妥当性指標ＲＶ１又はＲＶ２が真である場合には、適切な書き込み可能指標ＷＥ１，ＷＥ２又はＷＥ３が、対応するマルチプレクサＭＰ１，ＭＰ２又はＭＰ３によって真に設定される。書き込み可能指標ＷＥ１又はＷＥ２が真に等しい場合には、レジスタファイルＲＦ１又はＲＦ２に対応する書き込みレジスタ指標ＷＲ１又はＷＲ２により選択されたレジスタにおけるレジスタファイルＲＦ１又はＲＦ２に結果データＲＤ１又はＲＤ２が書き込まれる。書き込み可能指標ＷＥ１又はＷＥ２が偽に設定される場合には、対応する書き込み選択指標ＷＳ１又はＷＳ２により、対応するレジスタファイルＲＦ１又はＲＦ２へのデータ書き込み用の入力チャネルが選択されているも、データはそのレジスタファイルには書き込まれない。書き込み可能指標ＷＥ３が真に設定される場合には、マルチプレクサＭＰ４が書き込みデータＷＤ３に対応するチャネルを入力として選択し、結果データＲＤ２がレジスタファイルＲＦ３に書き込まれる。書き込み可能指標ＷＥ３が偽に設定される場合には、マルチプレクサＭＰ４がプログラムカウンタＰＣに対応するチャネルを入力として選択し、プログラムカウンタＰＣの値がレジスタファイルＲＦ３に書き込まれる。レジスタファイルＲＦ１，ＲＦ２及びＲＦ３の所定の書き込みポートを経てのいずれかの結果データＲＤ１又はＲＤ２の書き戻しをそれぞれ不能にするために、当該レジスタファイルに対応する書き込み選択指標ＷＳ１，ＷＳ２又はＷＳ３を用いて、対応するマルチプレクサＭＰ１，ＭＰ２又はＭＰ３からデフォルト入力１１１を選択することができ、この場合に、対応する書き込み可能指標ＷＥ１，ＷＥ２又はＷＥ３は偽に設定される。
【００１５】
図２を参照するに、コントローラＣＴＲは論理ユニット２０１及び２０５に結合される。コントローラＣＴＲは、デコーディングステップ中にプログラムから演算妥当性指標ＰＯＶ１及びＰＯＶ２を検索して、これらの演算妥当性指標を論理ユニット２０１及び２０５にそれぞれ供給する。コード化演算がＮＯＰ演算である場合には、演算妥当性指標は偽に設定され、そうでない場合には、真に設定される。レジスタファイルＲＦ１及びＲＦ２はそれぞれユニット２０１及び２０５に結合され、対応するガードＧＵ１及びＧＵ２の値を、レジスタファイルＲＦ１及びＲＦ２からユニット２０１及び２０５にそれぞれ書き込むことができる。ガードＧＵ１及びＧＵ２は、そのガードを表すデータの値を決定した演算の結果に応じて、真か、偽のいずれかとなり得る。ユニット２０１及び２０５は、対応する演算妥当性指標ＯＰ１又はＯＰ２と、対応するＧＵ１又はＧＵ２とで論理ＡＮＤ演算を行う。その結果指標は、レジスタ２０９，２１１及び２１３を用いる対応する実行ユニットＥＸ１及びＥＸ２のパイプラインにより遅延される。演算コードＯＣ１又はＯＣ２により規定された演算が実行ユニットＥＸ１及びＥＸ２によってそれぞれ実行された後には、それに対応する結果データＲＤ１及びＲＤ２並びに対応する出力妥当性指標ＯＶ１及びＯＶ２が生成される。出力妥当性指標ＯＶ１及びＯＶ２は、対応する結果データＲＤ１又はＲＤ２が妥当な出力データである場合には真であり、そうでなければ偽である。ユニット２０３は、ガードＧＵ１及び演算妥当性指標ＯＰＶ１からの遅延した指標と、出力妥当性指標ＯＶ１との論理ＡＮＤ演算を行って、結果妥当性指標ＲＶ１を得る。ユニット２０７は、ガードＧＵ２及び演算妥当性指標ＯＰＶ２からの遅延した指標と、出力妥当性指標ＯＶ２との論理ＡＮＤ演算を行って、結果妥当性指標ＲＶ２を得る。ユニット２０３及び２０７は、部分的に接続されたネットワークＣＮを介してマルチプレクサＭＰ１及びＭＰ２にそれぞれ結合されて、結果妥当性指標ＲＶ１及びＲＶ２をマルチプレクサＭＰ１及びＭＰ２に送出する。ユニット２０７だけは、部分的に接続されたネットワークＣＮを介してマルチプレクサＭＰ３にも結合されて、結果妥当性指標ＲＶ２をマルチプレクサＭＰ３にも送出する。書き込み選択指標ＷＳ１及びＷＳ２は対応するマルチプレクサＭＰ１及びＭＰ２によって用いられて、接続ネットワークＣＮから、結果データを対応するレジスタファイルに書き込みデータＷＤ１又はＷＤ２としてそれぞれ書き込まなければならないチャネルを選択する。結果データチャネルがマルチプレクサによって選択される場合には、結果妥当性指標ＲＶ１及びＲＶ２を用いて書き込み可能指標ＷＥ１及びＷＥ２を設定して、結果データＲＤ１及びＲＤ２をレジスタファイルＲＦ１及びＲＦ２にそれぞれ書き込むのを制御する。マルチプレクサＭＰ１又はＭＰ２が結果データＲＤ１に対応する入力チャネルを選択した場合には、結果妥当性指標ＲＶ１を用いてそのマルチプレクサに対応する書き込み可能指標を設定し、また、結果データＲＤ２に対応する入力チャネルが選択される場合には、結果妥当性指標ＲＶ２を用いて、対応する書き込み可能指標を設定する。マルチプレクサＭＰ３が結果データＲＤ２に対応する入力チャネルを選択した場合には、結果妥当性指標ＲＶ２を用いて、書き込み可能指標ＷＥ３を設定して、レジスタファイルＲＦ３への書き込みデータＷＤ３の格納を制御する。結果妥当性指標ＲＶ１又はＲＶ２が真である場合には,適切な書き込み可能指標ＷＥ１，ＷＥ２又はＷＥ３が対応するマルチプレクサＭＰ１，ＭＰ２又はＭＰ３によって真に設定される。書き込み可能指標ＷＥ１又はＷＥ２が真に等しい場合には、結果データＲＤ１又はＲＤ２が、レジスタファイルＲＦ１又はＲＦ２に対応する書き込みレジスタ指標WR1又はWR2を介して選択されたレジスタにおけるレジスタファイルＲＦ１又はＲＦ２に書き込まれる。書き込み可能指標ＷＥ１又はＷＥ２が偽に設定される場合には、対応する書き込み選択指標ＷＳ１又はＷＳ２を介して、対応するレジスタファイルＲＦ１又はＲＦ２へのデータ書き込み用の入力チャネルが選択されているも、当該レジスタファイルにはデータは書き込まれない。書き込み可能指標ＷＥ３が真に設定される場合には、マルチプレクサＭＰ４が書き込みデータＷＤ３に対応するチャネルを入力として選択し、結果データＲＤ２をレジスタファイルＲＦ３に書き込む。書き込み可能指標ＷＥ３が偽に設定される場合には、マルチプレクサＭＰ４がプログラムカウンタＰＣに対応するチャネルを入力として選択し、このプログラムカウンタＰＣの値をレジスタファイルＲＦ３に書き込まれる。レジスタファイルＲＦ１，ＲＦ２又はＲＦ３の所定の書き込みポートを経てのいずれかの結果データＲＤ１又はＲＤ２の書き戻しをそれぞれ不能にするために、当該レジスタファイルに対応する書き込み選択指標ＷＳ１，ＷＳ２又はＷＳ３を用いて、対応するマルチプレクサＭＰ１，ＭＰ２又はＭＰ３からデフォルト入力２１５を選択することができ、この場合には、対応する書き込み可能指標ＷＥ１，ＷＥ２又はＷＥ３が偽に設定される。
【００１６】
図１及び図２による時間−静止型ＶＬＩＷプロセッサは、レジスタファイルＲＦ１，ＲＦ２及びＲＦ３への結果データの書き戻しをダイナミックに制御することができる。実行した演算の結果データをレジスタファイルＲＦ１，ＲＦ２又はＲＦ３に書き戻さなければならないかどうかは、ランタイム中に決定することができる。結果として、命令の時間−静止式コード化を用いたままで、これらのプロセッサによって演算の条件付き実行を実施することができる。
【００１７】
下記に本発明によるプロセッサによって実行すべきプログラムコードの一部の例を示す。各ラインは、並列に実行し得る命令文で構成し得る単一のＶＬＩＷ命令、この命令は、例えば命令Ａ０とＡ１から成るＶＬＩＷ命令を示す。このプログラムコードにおける文字Ａ０，Ａ１，Ｂ０，Ｂ１，Ｃ０及びC1は命令を示し、Ｚ及びＰは変数を示し、Ｘは偽か真のいずれかとし得る条件を示す。Ｌ１はプログラムメモリＰＭのアドレスを示す。略語braはブランチ命令を示し、これは条件付きのブランチング用に用いられる専用の命令である。
【００１８】
…
Ａ０，Ａ１；
Ｚ＝bra（Ｘ，Ｐ）；
Ｂ０，Ｂ１；
…
Ｌ１：Ｃ０，Ｃ１；
…
【００１９】
プログラムコードは次のようにして本発明によるプロセッサによって実行することができる。図１を参照するに、コントローラＣＴＲはＶＬＩＷ命令をデコードして、その結果得られた書き込み選択指標ＷＳ１，ＷＳ２及びＷＳ３を対応するマルチプレクサＭＰ１，ＭＰ２及びＭＰ３に送り、書き込みレジスタ指標ＷＲ１及びＷＲ２並びに読み取りレジスタ指標ＲＲ１及びＲＲ２を対応するレジスタファイルＲＦ１及びＲＦ２に、演算コードＯＣ１及びＯＣ２を対応する実行ユニットＥＸ１及びＥＸ２に、演算妥当性指標ＯＰＶ１及びＯＰＶ２を対応するレジスタ１０５にそれぞれ送出する。これらの演算妥当性指標ＯＰＶ１及びＯＰＶ２は“真”に相当する。命令は、実行ユニットＥＸ１か、ＥＸ２のいずれかによって実行されて、条件Ｘの値を決定する。この命令は、結果“真”を生成し、この結果はレジスタファイルＲＦ２に格納される。パラメータＰの値も同じくレジスタファイルＲＦ２に格納される。パラメータＰの値はプログラムカウンタの値に等しく、この値は、条件付きのブランチを行う際に実行させるべき命令をプログラムメモリの何処に格納させるかのアドレス、即ちプログラムメモリのアドレスＬ１を示す。プログラムのコンパイル中に、コンパイラはこのアドレス値をパラメータＰに割り当てるようにする。ブランチ命令braは実行ユニットＥＸ２によって実行される。条件Ｘ並びにパラメータＰの値は実行ユニットＥＸ２によって入力データIDとして受信される。命令braの実行中に、条件Ｘの値が実行ユニットＥＸ２によって評価され、この値が真に相当する場合には、出力妥当性指標ＯＶ２が真として設定される。条件Ｘの値が偽に相当する場合には、出力妥当性指標ＯＶ２が偽として設定される。この例では、条件Ｘの値は真に相当し、従って、出力妥当性指標ＯＶ２も同じく真として設定される。さらに、実行ユニットＥＸ２はパラメータＰの値をパラメータＺに割り当て、即ち、この際のパラメータＺは、条件付きブランチを行う際に実行させるべき命令をプログラムメモリの何処に格納するかのアドレスを示すプログラムカウンタの値に相当する。ユニット１０３は、ブランチ命令braに対応する演算妥当性指標ＯＰＶ２と出力妥当性指標ＯＶ２との論理ＡＮＤ演算を行う。演算妥当性指標ＯＰＶ２は真に等しいから、ＡＮＤ演算により得られる結果妥当性指標ＲＶ２も同じく真に相当する。パラメータＺの値形式の結果妥当性指標ＲＶ２及び結果データＲＤ２は、部分的に接続されたネットワークＣＮを介してマルチプレクサＭＰ１，ＭＰ２及びＭＰ３に転送される。マルチプレクサＭＰ３は、書き込み選択指標ＷＳ３を用いることにより、結果データＲＤ２に対応するチャネルを入力チャネルとして選択する。マルチプレクサＭＰ３は、結果妥当性指標ＲＶ２を用いて書き込み可能指標ＷＥ３を真に設定し、パラメータＺの値を書き込みデータＷＤ３としてマルチプレクサＭＰ４に書き込む。マルチプレクサＭＰ４は、書き込み可能指標ＷＥ３の値が真に相当するから、ＷＤ３に対応するチャネルを入力チャネルとして選択する。次に、パラメータＺの値、即ち、プログラムカウンタＰＣの値がレジスタファイルＲＦ３に書き込まれる。その結果、レジスタファイルＲＦ３に格納されたプログラ���カウンタはプログラムメモリのアドレスＬ１を指示し、そのアドレスに格納されている命令Ｃ０及びＣ１から成るＶＬＩＷ命令が次のサイクルでプログラムメモリＰＭから取り出され、その後、デコードされ、且つ実行される。
【００２０】
条件Ｘが偽に相当する場合には、出力妥当性指標ＯＶ２も同じく偽に設定される。ユニット１０３は、ブランチ命令braに対応する演算妥当性指標ＯＰＶ２と出力妥当性指標ＯＶ２との論理ＡＮＤ演算を行う。演算妥当性指標ＯＰＶ２は真に相当するけれども、出力妥当性指標ＯＶ２は偽に相当するから、ユニット１０３によるＡＮＤ演算の結果妥当性指標ＲＶ２は偽に相当する。パラメータＺの値形式の結果妥当性指標ＲＶ２及び結果データＲＤ２は、部分的に接続されたネットワークＣＮを介してマルチプレクサＭＰ１，ＭＰ２及びＭＰ３に転送される。マルチプレクサＭＰ３は、書き込み選択指標ＷＳ３を用いて、結果データＲＤ２に対応するチャネルを入力チャネルとして選択する。マルチプレクサＭＰ３は、結果妥当性指標ＲＶ２を用いて書き込み可能指標ＷＥ３を真に設定し、パラメータＺの値を書き込みデータＷＤ３としてマルチプレクサＭＰ４に書き込む。しかし、マルチプレクサＭＰ４は、書き込み可能指標ＷＥ３の値が偽に相当するから、プログラムカウンタＰＣに対応するチャネルを入力チャネルとして選択する。次に、条件付きブランチ命令braのパラメータＺに相当するプログラムカウンタＰＣの値の代わりに、プログラムカウンタＰＣの増分値がレジスタファイルＲＦ３に書き込まれる。その結果、次のサイクルでは、ステートメントＢ０及びＢ１から成るＶＬＩＷ命令がプログラムメモリＰＭから取り出され、その後、デコードされ、且つ実行される。
【００２１】
下記に本発明によるプロセッサによって実行すべき他の例のプログラムコードの一部を示す。このプログラムコードにおける文字Ａ０，Ａ１，Ｂ０，Ｂ１，Ｃ０及びC1は命令を示し、Ｚ及びＰは変数を示し、Ｘは偽か真のいずれかとし得る条件を示す。Ｌ１はプログラムメモリＰＭのアドレスを示す。各ラインは、並列に実行することができるステートメントで構成し得る単一のＶＬＩＷ命令、例えば命令Ａ０とＡ１とから成るＶＬＩＷ命令を示す。
【００２２】
…
Ａ０，Ａ１；
If(X)Z=jmp L1；
Ｂ０，Ｂ１；
…
Ｌ１：Ｃ０，Ｃ１；
…
【００２３】
図２を参照するに、コントローラＣＴＲはＶＬＩＷ命令をデコードして、その結果の書き込み選択指標ＷＳ１，ＷＳ２及びＷＳ３を対応するマルチプレクサＭＰ１，ＭＰ２及びＭＰ３に送り、書き込みレジスタ指標ＷＲ１及びＷＲ２並びに読み取りレジスタ指標ＲＲ１及びＲＲ２を対応するレジスタファイルＲＦ１及びＲＦ２に送り、演算コードＯＣ１及びＯＣ２を対応する実行ユニットＥＸ１及びＥＸ２に送り、演算妥当性指標ＯＰＶ１及びＯＰＶ２を対応するユニット２０１及び２０５に送る。これらの演算妥当性指標ＯＰＶ１及びＯＰＶ２は“真”に相当する。命令は実行ユニットＥＸ１か、ＥＸ２のいずれかによって実行されて、条件Ｘの値を決定する。この命令が結果“真”を生成し、この結果はレジスタファイルＲＦ２に格納される。ユニット２０５も条件Ｘの値を対応するガードＧＵ２として受け取って、このガードＧＵ２と演算妥当性指標ＰＯＶ２との論理ＡＮＤ演算を行う。ユニット２０５はその結果として、ガードＧＵ１と演算妥当性指標ＰＯＶ２との双方が真に相当するから、“真”を生成する。ステートメントＺ＝jmp L1が実行ユニットＥＸ２によって実行されている間、即ちプログラムカウンタの値Ｌ１がパラメータＺに割り当てられている間は、論理ＡＮＤ演算の結果が実行ユニットＥＸ２のレジスタ２０９，２１１及び２１３を経てクロックされる。出力妥当性指標ＯＶ２は真に等しい。ユニット２０７は、出力妥当性指標ＯＶ２とユニット２０５によって行われた論理ＡＮＤ演算の結果との論理ＡＮＤ演算を行うことになる。この論理ＡＮＤ演算の結果は真となり、従って、結果妥当性指標ＲＶ２は真に相当する。結果妥当性指標ＲＶ２並びに対応する結果データＲＤ２の値、即ちパラメータＺの値は、部分的に接続されたネットワークＣＮを経てマルチプレクサＭＰ１，ＭＰ２及びＭＰ３に転送される。マルチプレクサＭＰ３は、書き込み選択指標ＷＳ３を用いて結果データＲＤ２に対応する入力チャネルを選択する。その後、書き込み可能指標ＷＥ３が、結果妥当性指標ＲＶ２を用いて真に設定されて、結果データＲＤ２が書き込みデータＷＤ３としてマルチプレクサＭＰ４に書き込まれる。マルチプレクサＭＰ４は、書き込み可能指標ＷＥ３の値が真に相当するから、ＷＤ３に対応するチャネルを入力チャネルとして選択する。次に、パラメータＺの値、即ちプログラムカウンタＰＣの値がレジスタファイルＲＦ３に書き込まれる。次のサイクルでは、命令Ｃ０及びＣ１を含むＶＬＩＷ命令がプログラムメモリＰＭから取り出され、その後、デコードされて、実行される。
【００２４】
条件Ｘが偽に等しい場合には、ガードＧＵ２の値も同じく偽に等しく設定される。ユニット２０５は、ガードＧＵ２と演算妥当性指標ＯＰＶ２との論理ＡＮＤ演算を行う。ユニット２０５はこの際結果として“偽”を生成し、これは、ガードＧＵ２が偽に等しいからである。ステートメントＺ＝jmp L1が実行ユニットＥＸ２によって実行される間、即ちプログラムカウンタの値Ｌ１がパラメータＺに割り当てられている間は、論理ＡＮＤ演算の結果が実行ユニットＥＸ２のレジスタ２０９，２１１及び２１３を経てクロックされる。出力妥当性指標ＯＶ２は真に等しい。ユニット２０７は、出力妥当性指標ＯＶ２とユニット２０５によって行われた論理ＡＮＤ演算の結果との論理ＡＮＤ演算を行うことになる。この論理ＡＮＤ演算の結果は偽となり、従って、結果妥当性指標ＲＶ２は偽に相当する。結果妥当性指標ＲＶ２並びに対応する結果データＲＤ２の値、即ちパラメータＺの値は、部分的に接続されたネットワークＣＮを経てマルチプレクサＭＰ１，ＭＰ２及びＭＰ３に転送される。マルチプレクサＭＰ３は、書き込み選択指標ＷＳ３を用いて結果データＲＤ２に対応する入力チャネルを選択する。書き込み可能指標ＷＥ３は、その後結果妥当性指標ＲＶ２を用いて偽に設定され、結果データＲＤ２が書き込みデータＷＤ３としてマルチプレクサＭＰ４に書き込まれる。しかし、マルチプレクサＭＰ４は、プログラムカウンタＰＣに対応するチャネルを入力チャネルとして選択する。これは、書き込み可能指標ＷＥ３の値が偽に等しいからである。次に、プログラムカウンタＰＣの増分値が、パラメータＺに等しいプログラムカウンタの値の代わりにレジスタファイルＲＦ３に書き込まれる。次のサイクルでは、命令Ｂ０及びＢ１を含むＶＬＩＷ命令がプログラムメモリＰＭから取り出され、その後、デコードされて、実行される。
【００２５】
これらの実施例から明らかなように、本発明によれば条件付きのブランチングを、フラグを必要とすることなく行うことができる。ブランチ条件は前もって計算することができ、この条件は、プログラムカウンタの新規の値をレジスタファイルＲＦ３に書き込む操作を条件付きで実行させるガードとしてか、プログラムカウンタの新規の値をレジスタファイルＲＦ３に書き込むための条件付き操作におけるアーギュメント（引き数）として用いることができる。ブランチ条件が真に相当する場合には、プログラムカウンタＰＣの新規の値がレジスタファイルＲＦ３に書き込まれる。コントローラＣＴＲは、レジスタファイルＲＦ３に格納されているプログラムカウンタの値を読み取り、この値を用いて命令をプログラムメモリＰＭから取り出す。コントローラＣＴＲはまたプログラムカウンタの値を増分する。プログラムカウンタＰＣの増分値はマルチプレクサＭＰ４に送られる。プログラムカウンタの増分値か、又は書き込みデータＷＤ３に対応するプログラムカウンタの値のいずれをレジスタファイルＲＦ３に書き込まなければならいかは、書き込み可能指標ＷＥ３の値によって決定される。実行ユニットＥＸ２によってレジスタファイルＲＦ３に系統だった書き込みが成されている限り、プログラムはプログラムメモリにリストされた命令を順次実行することにより単に進められる。プログラムカウンタの新規の値が実行ユニットＥＸ２によってレジスタファイルＲＦ３に書き込まれる場合に、プログラムカウンタのこの書き込み値は、命令実行がこの書き込み値に対応するプログラムメモリにおけるアドレスから続行するようにプログラムの流れを変更する。
【００２６】
他の実施例では、処理システムをデータ−静止型のＶＬＩＷプロセッサとする。データ−静止型ＶＬＩＷプロセッサは、レジスタファイルへの結果データの書き戻しをダイナミックに直接制御することができる。それは、命令セットの一部である各命令が、或る特定のデータアイテムで実行させなければならない操作順序を完全に制御するからである。従って、データ−静止型ＶＬＩＷプロセッサは種々の演算を条件付きで実行することもできる。結果として、本発明によるこのようなプロセッサは、フラグを必要としなくても、条件付きのブランチング及びルーピングを行うことができる。
【００２７】
実施例によっては、実行ユニットＥＸ２が、レジスタファイルＲＦ３の読み取りポートコネクションを介して、プログラムカウンタＰＣの値をレジスタファイルＲＦ３から直接読み取ることができる。このようにして、実行ユニットＥＸ２は位置独立コードに対して“プログラムカウンタ関連ブランチング”を実施することができる。例えば、レジスタファイルＲＦ３から読み取ったプログラムカウンタＰＣの値にオフセット値を加え、これによりプログラムカウンタ関連のジャンプターゲットアドレスを生成することができる。さらに他の実施例では、プログラムカウンタＰＣの値を読み取るための、レジスタファイルＲＦ３と実行ユニットＥＸ２との間の接続は、プログラムカウンタ関連ブランチングを適用しない場合には、未使用のままとするか、あるいはその接続をなくすことができる。
【００２８】
他の実施例では、コンパイラ又はアセンブルプログラマが、僅か１つのガードされるか、又は条件付きの演算によって任意所定のサイクルにて正しい出力を発生、即ちプログラムカウンタの１つの値だけがレジスタファイルＲＦ３に書き込まれるようにする限り、多数のガードされるか、又は条件付きの演算が、レジスタファイルＲＦ３に格納されているプログラムカウンタの値を更新すべく並列に実行されるようにする。これは、条件がばらばらになるかぎり、保証することができる。結果的に、ブランチターゲットと、ブランチ条件の妥当性検査との並列実行は、例えば所謂ケースステートメントを実行するのに用いることができる。
【００２９】
プロセッサの遂行を十分高いクロック周波数で運転し得るようにするために、プロセッサのコントローラはパイプライン式にすることができる。図１及び図２を参照するに、プログラムメモリＰＭの出力端には、このプログラムメモリからロードされる命令を格納するための１つの命令レジスタＩＲがある。結果的に、レジスタファイルＲＦ３へのプログラムカウンタの新規値の書き込みと、その新規値に対応するプログラムメモリのアドレスから検索した命令の実行との間の遅延は少なくとも２サイクルである。この遅延はブランチ遅延と称され、これはプロセッサのパイプライン化の度合いに応じてゼロでない値になる。ブランチ遅延は、このブランチ遅延の一部のサイクル（ブランチシャドウと称される）を他の演算（操作）を実行するのに用いることができない限り、実行時間のオーバヘッドになり得る。これら他の演算は、この場合には、プログラムによって表される本来のアルゴリズムにて、プログラムの流れが変更される前に行うべき演算である。他の実施例では、プロセッサが遅延ブランチングとして既知の構想を遂行し、非ブランチ演算をまだブランチシャドウにて実行できるようにする。結果的に、プログラムのブランチ演算は、ブランチが実際に行われる箇所に先んじてブランチ待ち時間をスケジュールする。このこのプログラム構成を下記に示す。各ラインは単一のＶＬＩＷ命令を示し、z，x，y，u，d及びeは変数、pcはプログラムカウンタの値を表す変数、Ａはプログラムメモリのアドレス、addは２つの値を加算する演算、mulは２つの値を乗じる演算、jmpはブランチ演算をそれぞれ示す。
【００３０】
…
pc=jmp A;     /*待ち時間２でのブランチ演算*/
z=add x y;    /*加算演算がまだ実行されるブランチシャドウ*/
/*Aへのジャンプ行われる点*/
u= mul d e   /*このステートメントは、ブランチが行われたためにスキップされる*/
…
A: …            /*ブランチターゲット*/
…
【００３１】
遅延ブランチングは実際には、従来の殆どのデジタル信号プロセッサで通例のループスタック等のような追加の他のハードウェアなしでゼロオーバヘッドのブランチングを行うことができる。
【００３２】
他の実施例では、ブランチシャドウにおけるブランチ演算のスケジューリングを可能にする。本発明はこのような構想も同じくサポートし、これには、ゼロ−オーバヘッドのブランチング構想をさらに拡張して、ブランチ待ち時間よりも短い多数の命令又はサイクルから成るループ本体を作成可能にすることを含めることができる。これは、例えば下記のプログラム構成によって得られ、そのプログラム構成では、ブランチ待ち時間を２サイクルとし、且つ各ラインは単一のＶＬＩＷ命令を、z，x，y，u，d及びeは変数を、iはループカウンタを、pcはプログラムカウンタの値を表す変数を、Ａはプログラムメモリのアドレスを、addは２つの値を加算する演算を、decは或る値を減分する演算を、mulは２つの値を乗じる演算を、brnzは条件付きブランチを非ゼロで実施する演算をそれぞれ示す。
【００３３】
…
z=add x y, i=dec i, pc=brnz i A;
A : u= mul d e, i=dec i, pc= brnz i A
…
【００３４】
上述した例では、ループは、幾つかの他の演算に対して並列にループカウンタｉが減少されるプリアンブルによって先行され、非ゼロ、即ちループカウンタｉがゼロでない条件付きブランチを取ってアドレスＡでループを開始する。アドレスＡにおける次の命令はループ本体の開始であり、ここではループカウンタｉをさらに減少させ、且つ条件付きブランチをアドレスＡに向けるためにゼロに対してチェックする。このような構成による結果、プリアンブルからのサイクルの開始毎に、レジスタファイルＲＦ３に書き込まれるプログラムカウンタｐｃの値がアドレスＡに等しくなり、このアドレスに固定されたプログラムカウンタｐｃを、ループカウンタｉがゼロに達するまで有効に維持する。結果として、この例におけるブランチ待ち時間が１よりも大きくなるも、単一の命令ループが生成される。上述した構成に似た他の構成のものは、ブランチ待ち時間を２に等しいか、又はそれ以上で機能させ、しかもその待ち時間よりも短い多数の命令をループ本体に包含させる。
【００３５】
他の実施例では、通信ネットワークＣＮを部分接続の通信ネットワークとすることができる。即ち、各実行ユニットＥＸ１及びＥＸ２が必ずしも全てのレジスタファイルＲＦ１及びＲＦ２に結合されるようにすることはない。実行ユニットが多数ある場合、完全に接続される通信ネットワークのオーバヘッドは、シリコン領域、遅延及び電力消費によってかなりのものとなる。ＶＬＩＷプロセッサの設計中には、実行させなければならないアプリケーションの範囲に応じて、実行ユニットをどの程度レジスタファイルに結合させるのかを決定する。
【００３６】
別の例では、より多くの実行ユニットがプログラムカウンタの新規の値をレジスタファイルＲＦ３に書き込めるようにする。より多くの実行ユニットがレジスタファイルＲＦ３にプログラムカウンタの値を書き込むための演算を条件付きで実行可能にすることにより、これら演算のスケジューリングによって有効プログラムが潜在的に多くなる。これは、多数のガードされるか、又は条件付きの演算を並列に実行し得るからである。
【００３７】
他の実施例では、レジスタファイルＲＦ１及びＲＦ２を具えている分散レジスタファイルを単一のレジスタファイルとする。ＶＬＩＷプロセッサの実行ユニットの個数が比較的少ない場合には、単一レジスタファイルのオーバヘッドも同じく比較的短くなる。
【００３８】
他の例では、ＶＬＩＷプロセッサにおける実行ユニットの個数を変えることができる。実行ユニットの個数はＶＬＩＷプロセッサがとりわけ実行しなければならないアプリケーションのタイプに依存する。プロセッサは前記実行ユニットに接続される多くのレジスタファイルを持つこともできる。
【００３９】
さらに他の例では、実行ユニットＥＸ１及びＥＸ２が行わなければならない演算、即ち、２つ以上のオペランドを必要とし、及び/又は１つよりも多い結果を生成する演算のタイプに応じて、これらの実行ユニットＥＸ１及びＥＸ２は多数の入力端及び/又は多数の出力端を持つことができる。分散レジスタファイルにもレジスタファイル毎に多数の読み取り及び/又は書き込みポートを持たせることができる。
【００４０】
スーパースカラプロセッサも、ＶＬＩＷプロセッサの場合のように、多数の演算を並列に実行し得る多数の送出スロットを具えている。しかし、そのプロセッサのハードウェア自体は、実行時間にどんな演算従属性が存在するのかを決めて、これらの従属性に基づいてどの演算を並列に実行させるのかを、リソースコンフリクトが生じないようにしながら決定する。この節にて述べたＶＬＩＷプロセッサに対する実施例の原理はスーパースカラプロセッサについても云えることである。一般に、ＶＬＩＷプロセッサにはスーパースカラプロセッサに比べて多くの送出スロットを持たせることができる。ＶＬＩＷプロセッサのハードウェア構成は、スーパースカラプロセッサに比べてそれほど複雑でないため、優れた拡大縮小可能構造となる。送出スロットの数及び特に各送出スロット複雑性が、本発明を用いて達成し得る特典の量を決めることになる。
【００４１】
なお、本発明は上述した例のみに限定されるものでなく、当業者が特許請求の範囲の記載を逸脱することなく幾多の変更を加え得ることは明らかである。特許請求の範囲における括弧内の参照記号は請求の範囲を限定するものとして解釈されるべきではない。「具える」と云う用語は請求の範囲に掲げたもの以外の要素又はステップの存在を除外するものではない。或る要素の単数表現は、そのような要素の複数の存在を除外するものではない。装置の請求項に列記している幾つかの手段は、ハードウェアの同一のアイテムで実現することができる。互いに異なる従属請求項にて所定の手段のみを引用していることは、こうした手段の組み合わせが有利に使用できないと云うことを示しているのではない。
【図面の簡単な説明】
【００４２】
【図１】本発明による第１のＶＬＩＷプロセッサの概略図である。
【図２】本発明による第２のＶＬＩＷプロセッサの概略図である。
【図１】
2006525583.tif 000003
【図２】
2006525583.tif 000004
【国際調査報告】
2006525583.tif 000005
2006525583.tif 000006
2006525583.tif 000007