(57)【要約】データ・プロセッサ（２００）は、プログラム計数器（２２０）で指示された命令メモリ（２１０）からの命令を実行する演算実行ユニット（２２５）を含む。ループ制御回路（２３０）は、レジスタ・バンク（２３２）に複数の命令ループのためのそれぞれの関連ループ情報を格納する。ループ情報は、少なくともループの終了の指示およびそのループが実行されるべき回数を指示するループ回数を含む。ループ制御回路（２３０）は、ループの１つを実行する必要があることを検出し、前記検出に応答して、対応するループのためのループ情報をロードし、さらにロードされたループ情報に従ってその対応するループを実行するようにプログラム計数器を制御する。ループ情報はループ初期化命令（２４０）に応答して初期化され、そして、初期化命令は、ループ情報によって初期化されるループの開始の前に、この開始と無関係に発行される。
2006508447.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリに格納されかつプログラム計数器で指定された命令を実行するデータ・プロセッサであって、
前記プログラム計数器で指示された命令を実行する演算実行ユニットと、
複数の命令ループのためのそれぞれの関連ループ情報であって、前記ループの終了の指示と前記ループが実行されるべき回数を指示するループ回数とを少なくとも含む前記ループ情報を格納し、
前記ループの１つを実行する必要があることを検出し、前記検出に応答して対応するループのループ情報をロードし、さらに前記ロードされたループ情報に従って前記対応するループを実行するように前記プログラム計数器を制御し、
ループ初期化命令に応答して前記ループ情報を初期化するように動作する、
ループ制御回路と、を含み、
前記初期化命令が、前記ループ情報によって初期化される前記ループの開始の前に、この前記ループの開始と無関係に発行されるデータ・プロセッサ。
【請求項２】
前記ループ制御回路が、入れ子の形をした複数の前記命令ループを実行するように動作し、内側のループが、隣接して囲むループの実行を開始する前に初期化される、請求項１に記載のデータ・プロセッサ。
【請求項３】
前記演算実行ユニットのための各命令は、前記命令が前記演算実行ユニットで実行されるべき命令ループを形成する命令のシーケンスの１番目の命令であることを、指示することをイネーブルにするループ開始フィールドを含む、前記請求項のいずれか一項に記載のデータ・プロセッサ。
【請求項４】
前記ループ制御回路は、前記ループ開始フィールドが命令ループの開始を指示することの検出に応答して、前記ループの開始アドレスの指示を前記ループに関連したループ情報に格納するように動作する、請求項３に記載のデータ・プロセッサ。
【請求項５】
前記ループ情報が、前記ループの連続した入れ子のレベルに従って格納され、そして、前記入れ子のレベルのそれぞれの１つに対して、せいぜい１つのループを各瞬間に指定することができ、前記ループ制御回路が、実行される命令の現在入れ子レベルを格納し、かつ
前記ループ開始フィールドを検査することによるループの開始の検出と、
前記プログラム計数器を、前記ループのために格納された前記ループの終了の指示と比較することによるループの終了の検出と、に応答して、前記入れ子のレベルを更新するように動作する、請求項２および３に記載のデータ・プロセッサ。
【請求項６】
前記ループ開始フィールドが、複数の指定可能なループのうちのどの１つを開始する必要があるかを指示することをイネーブルにする、請求項３または４に記載のデータ・プロセッサ。
【請求項７】
前記ループ情報が、前記ループの始まりの指示を含む、請求項１に記載のデータ・プロセッサ。
【請求項８】
前記ループ制御回路が、前記プログラム計数器を、前記ループ情報に格納されたループの始まりの指示と比較して、ループの開始を検出するように動作する、請求項７に記載のデータ・プロセッサ。
【請求項９】
前記ループ初期化命令が、複数のループのループ情報を１つの演算で初期化する複数のフィールドを含む、前記請求項のいずれか一項に記載のデータ・プロセッサ。
【請求項１０】
前記請求項のいずれか一項に記載のループ制御回路。
【請求項１１】
プログラム計数器で指定された命令ループをプロセッサに実行させる方法であって、
複数の命令ループのためのそれぞれの関連ループ情報であって、前記ループの終了の指示とループ回数とを少なくとも含むループ情報を、前記ループの開始の前に、前記ループの開始と無関係に格納することと、
前記ループのうちの１つを実行する必要があることを検出し、前記検出に応答して、対応するループの情報をロードし、さらに前記ロードされたループ情報に従って前記対応するループを実行するように前記プログラム計数器を制御することを含む方法。
【請求項１２】
複数の前記命令ループを入れ子の形で実行することができ、さらに前記方法が、隣接して囲むループの実行を開始する前に、内側のループのためのループ情報を格納することを含む、請求項１１に記載の方法。
【請求項１３】
請求項１１に記載のステップをプロセッサに行わせるように動作するコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ・プロセッサ用のループ制御回路、ループ制御回路を有するデータ・プロセッサ、およびデータ・プロセッサでループを実行する方法に関する。
【背景技術】
【０００２】
プロセッサの性能は絶えず向上している。これによって、従来ハードウェアを使用して実現された機能が、適切なプログラムの制御の下でのプロセッサによる実行の範囲に入っている。また、新しい機能または既存の機能のソフトウェアをベースにした信号処理が、向上した品質で可能になった。新しい機能の例は、ＵＭＴＳ／ＦＤＤ、ＴＤＤ、ＩＳ２０００、およびＴＤ−ＳＣＤＭＡ標準に基づくような第３世代の無線通信である。これらのシステムは、非常に高い周波数で動作する。ＵＭＴＳのような３Ｇ移動通信標準用のモデム（トランシーバ）は、ＧＳＭのほぼ１００倍のデジタル信号処理電力を必要とする。異なる標準に対処することができ、かつ新しい標準に柔軟に適合することができるために、プログラム可能なアーキテクチャを使用するそのような標準用のトランシーバを実現することが望ましい。従来の周波数で動作する従来のＤＳＰ技術を使用すると、必要な性能を実現するためにほぼ３０個ものＤＳＰが必要になるかもしれない。単一標準用トランシーバの従来のハードウェアをベースにした方式に比べて、そのような方式は経済的でないしまた電力効率も良くないことは明らかであろう。プロセッサのデジタル信号処理能力は、パイプライン処理を使用して高めることができる。
【０００３】
米国特許第４，７９２，８９２号には、パイプライン処理プロセッサが記載されている。「Ｉ」個の命令のシーケンスのＮ回繰返し実行を指定するループ制御命令を実行するために、プロセッサは、ループ・シーケンスでの命令の実行を計数しかつループの各完成時にシーケンス終了信号を生成する命令計数器を有するループ回路を含む。各シーケンス終了信号に応答してループの１番目の命令のアドレスでプログラム計数器を再生するレジスタが使用される。ループ計数器は、ループの完成の数を計数するために使用され、全プログラムの中のループ部分の終了を示す信号を送り出し、さらに、プログラム計数器がプログラムの残りの部分に関して継続できるようにする。パイプライン計算は特に重要であり、引き数および結果は、狭い構成と一致して与えられかつ読み出されなければならない。開示されたパイプライン・プロセッサは、ループの開始前に「Ｄ」個の命令を、ループを初期化するループ制御命令に実行させる。ループ制御回路は、ループ・シーケンス実行を「Ｎ」回起動する前に、「Ｄ」個の命令を計数するために計数器を内蔵する。知られているシステムは、１ループを含んだパイプライン演算により大きなスケジューリング自由度を与える。
【０００４】
プロセッサの性能を改善するさらに他の方法は、ベクトル・プロセッサを使用することである。ベクトルは、１より多いデータ要素、例えば１６個の１６ビット要素から成る。プロセッサの機能ユニットは、１つの命令で起動され、並行して、ベクトルの個々のデータ要素すべてに対して動作する。従来のベクトル・プロセッサのアーキテクチャは、高度にベクトル化することができない用途では効果的でない。民生用電子機器での使用、特に移動通信で使用するためには、相当な高速化を実現できる場合にだけ、ベクトル・プロセッサの追加のコストは正当と認められ得る。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、プロセッサ、ループ制御回路、および高性能処理をより適切に支援するループを実行する方法を提供することである。
【課題を解決するための手段】
【０００６】
本発明の目的を満たすために、命令メモリに格納され、かつプログラム計数器で指定された命令を実行するデータ・プロセッサは、プログラム計数器で指示された命令を実行する演算実行ユニットとループ制御回路とを含み、このループ制御回路は、複数の命令ループのためのそれぞれの関連ループ情報であって、前記ループの終了の指示と前記ループが実行されるべき回数を指示するループ回数とを少なくとも含む前記ループ情報を格納し、ループの１つを実行する必要があることを検出し、前記検出に応答して、対応するループのループ情報をロードし、さらにロードされたループ情報に従って前記対応するループを実行するようにプログラム計数器を制御し、さらに、ループ初期化命令に応答してループ情報を初期化するように動作する。ここで、この初期化命令は、ループ情報によって初期化されるループの開始の前に、この開始と無関係に発行される。
【０００７】
本発明によれば、複数のループを初期化することができ、ここでループ初期化はループの開始と無関係である。各ループで、少なくともループ回数と、（例えば、ループ・シーケンスの最後の命令のアドレスの形か、またはシーケンス中の命令の番号の形かで、シーケンスの開始アドレスに対してシーケンスの終了を指定する）ループの終了の指示とが格納される。米国特許第４，７９２，８９２号の従来技術システムでは、ループ初期化命令以来「Ｄ」個の命令が実行された後で、ループは自動的に開始される。何個の命令の後で第２のループを開始する必要があるかは知られていないかもしれないので、そのような方式は、１つより多いループで使用するのに、不可能でないとしても、特に困難である。また、留意すべきことであるが、ゼロ−オーバヘッド・ルーピングの実現は、複数のループを指定することを可能にするＰｈｉｌｉｐｓ  ＥｌｅｃｔｒｏｎｉｃｓのＲ．Ｅ．Ａ．Ｌ．ＤＳＰで知られている。このＤＳＰは、ループ初期化命令を使用してループ終了アドレスを指定することによって、ループの事前初期化を可能にしている。ループの初期化（すなわち、開始）は、ループ計数器が指定されるループ初期化の残り部分に結合される。ループ計数器を設けることで、対応するループが自動的に初期化される。このことは、ループの開始には、常に、１つの専用ループ初期化／起動命令を命令の流れに挿入することが必要であることを意味する。
【０００８】
従属請求項２に明記されるような好ましい実施の形態では、ループ制御回路は、入れ子の形をした複数の命令ループを実行するように動作し、内側のループは、隣接して囲むループの実行を開始する前に初期化される。このことによって、実行ループを初期化する際に必要とされるオーバヘッドは減少する。好ましくは、すべてのループ初期化は、最も外側のループ以外で行われる。この場合、命令サイクルは、入れ子のループの内側でのループ初期化に振り向けられない。本発明者は、特にデジタル信号処理が通常短いループの頻繁な実行を必要とすることを実感した。深さ２または３レベルのループ入れ子は通常行われる。例えば、像の処理では、最も外側のループは、像のフレームまたはフィールドの処理を含む可能性があり、次のレベルのループはフレーム／フィールドのピクセルのブロックの処理を含み、そして第３のレベルはブロック内のピクセルの処理を含むかもしれない。従来、ループ初期化は、ループの開始に先行する同じ入れ子のレベルにある。各ループが１０回実行される（そして、結果として、最も内側のループが１０００回実行される）３つの入れ子のレベルを有するプログラムでは、最も外側のループは一度初期化され、２番目のループは１０回初期化され、そして内側のループは１００回初期化される。本発明によるシステムでは、１番目のループの実行開始前に、すべてのループを最も高いレベルで初期化することができる。このことは、知られているシステムでの１１１回の代わりに、たった３回のループ初期化だけが必要であることを暗示している。また、これによって、ループ回路はベクトル・プロセッサに非常に適したものになる。ループ内で命令をベクトル化することが可能であるかもしれないが、ループの初期化はベクトル化するのが困難である。本発明による方法を使用すると、一般的なプログラムで、ベクトル化されない命令の数を減少することができる。
【０００９】
実際は、様々な方法を使用して、ループの開始を決定／指示することができる。従属請求項３に記載されるように、演算実行ユニットのための各命令は、その命令が演算実行ユニットで実行されるべき命令ループを形成する命令のシーケンスの１番目の命令であることを、指示することをイネーブルにするループ開始フィールドを含む。例えば、通常の命令（一般に、命令ループで発生し得るもの）に１ビットを追加して、この命令がループの開始であるか否かを指示することができる。このようにして、ループの開始位置および／または時間の指示を与える必要はない。理解されることであろうが、少なくとも１つの追加ビットを命令で使用することを犠牲にして、このことは得られる。命令サイズのこの増加は、命令圧縮を使用して減らすことができる。
【００１０】
従属請求項４に記載されるような手段によれば、ループ制御回路は、ループ開始フィールドが命令ループの開始を指示することの検出に応答して、ループの開始アドレスの指示をそのループに関連したループ情報に格納するように動作する。例えば、ループ制御回路は、現在命令のアドレスをプログラム計数器から取り出し、それをレジスタに格納することができる。ループの終了を受け取る度に（そのループのために格納された終了情報で指示されるように）、開始アドレスをレジスタから取り出すことができる。そのように望まれる場合には、例えばループでの命令の番号を指示することで、（ループ情報で指示されるように）ループの終了に対するオフセットの形で開始アドレスを格納することもできる。
【００１１】
従属請求項５に記載されるような手段によれば、ループ情報は、ループの連続した入れ子のレベルに従って格納され、そしてそこで、入れ子のレベルのそれぞれの１つに対して、せいぜい１つのループを各瞬間に指定することができ、ループ制御回路は、実行される命令の現在入れ子レベルを格納し、かつループ開始フィールドを検査することによるループの開始の検出と、プログラム計数器をループのために格納されたループの終了の指示と比較することによるループの終了の検出とに応答して入れ子のレベルを更新するように動作する。ただ１ビットのループ開始標識を使用して、入れ子のループを開始することができ、そして、各入れ子のレベルにせいぜい１ループだけが存在できる。そして、開始フィールドの指示は、どのループを開始すべきか（すなわち、次のより深いレベルのループ）を暗黙的に指示する。同様に、ループを出ることは、次のより高いレベルに制御が戻されることを意味する（最も高いレベルで、ループは実行されないが、通常の連続した処理（これは、パイプライン処理され、および／またはベクトル化されるかもしれない）が行われる）。より深いループがより大きな数で表されると仮定すると、ループに入ることで、結果として、入れ子のレベル（または、同様にループ番号）をインクリメントすることになり、またループを出ることで、結果として、入れ子のレベルをディクリメントすることになる。
【００１２】
各入れ子のレベルで１つのループを初期化することができるだけという制限を克服するために、従属請求項６の手段は、ループ開始フィールドは、複数の指定可能なループのうちのどの１つを開始する必要があるかを指示することをイネーブルにする。例えば、各ループは、開始フィールドがそのような数を含むことができる特有の連続した数に関連しているかもしれない。ループ入れ子のレベルの最大数がＭＡＸである場合、合計で「２ｌｏｇ（ＭＡＸ）」ビットを使用可能な命令に追加する必要がある。
【００１３】
従属請求項７に記載されるような手段によれば、ループ情報はまた、ループの始まりの指示を含む。基本的には、この指示は、絶対的なメモリ・アドレスまたは、メモリ・ページのアドレス指定可能な範囲内のまたは知られている位置に対する相対的なメモリ・アドレスのような任意の適切な形をとることができる。特に、ループ開始アドレスかループ終了アドレスかのどちらかがそれらの方法の１つで指定される場合、他方のアドレスは、その指定されたアドレスに対するオフセットとして指定することができる。そのようなオフセットは、ループ内での命令の番号を表す。
【００１４】
従属請求項８に記載されるような手段によれば、ループ制御回路は、プログラム計数器をループ情報に格納されたループの始まりの指示と比較して、ループの開始を検出するように動作する。ループ開始命令と初期化されたループの開始の間に時間または位置の関係がない状況では、（プログラム計数器に存在するような、またはプログラム計数器から導き出すことができるような）現在アドレスをループ情報に格納されたようなループの開始アドレスと比較する。この比較は、一致が見出されるかまたはすべてのループ開始アドレスが比較されてしまうまで、プログラム計数器を各格納されたループ開始アドレスと比較することによって行うことができる。このプロセスは、例えば開始アドレスを分類して比較プロセスを簡単化および／または高速化することで、最適化することができる。
【００１５】
従属請求項９に記載されるような手段によれば、ループ初期化命令は、複数のループのループ情報を１つの演算で初期化する複数のフィールドを含む。特に、ＶＬＩＷ命令を格納するメモリのような広いメモリが使用される場合、ただ１つの命令だけを使用していくつかのループを初期化することができる。これによって、ループ初期化のオーバヘッドはさらにいっそう減少する。
【００１６】
本発明の目的を満たすために、プログラム計数器で指示される命令を実行する演算実行ユニットを有するプロセッサで使用するためのループ制御回路は、複数の命令ループのためのそれぞれの関連ループ情報であって、前記ループの終了の指示と前記ループが実行されるべき回数を指示するループ回数とを少なくとも含む前記ループ情報を格納し、ループの１つを実行する必要があることを検出し、前記検出に応答して、対応するループのループ情報をロードし、さらにロードされたループ情報に従って対応するループを実行するようにプログラム計数器を制御し、ループ初期化命令に応答してループ情報を初期化するように動作する。ここで、初期化命令は、ループ情報によって初期化されるループの開始の前に、この開始と無関係に発行される。
【００１７】
本発明の目的を満たすために、プログラム計数器で指定された命令ループをプロセッサに実行させる方法は、複数の命令ループのためのそれぞれの関連ループ情報であって、前記ループの終了の指示とループ回数とを少なくとも含むループ情報を、ループの開始の前にループの開始と無関係に格納することを含み、さらに、本方法は、ループの１つを実行する必要があることを検出し、前記検出に応答して、対応するループの情報をロードし、ロードされたループ情報に従って対応するループを実行するようにプログラム計数器を制御することを含む。
【００１８】
本発明のこれらおよび他の態様は、以下で説明する実施の形態から明らかになり、またこの実施の形態を参照して説明する。
【発明を実施するための最良の形態】
【００１９】
本発明によるループ制御回路は、特にデジタル信号プロセッサ（ＤＳＰ）で使用するのに適しているが、これに限定されない。デジタル信号処理の用途では、ループ内の命令が比較的少なくかつループの割込み処理が通常無い状態で、ループおよび入れ子のループが生じることが多い。そのようなシステムは、ループ初期化命令を実行する必要のある回数を減少させる本発明によるアーキテクチャの恩恵を受けることができる。ループ制御回路は、また、（ループがそのループの開始前に初期化される限りで）ループ初期化命令の自由なスケジューリングを可能にするので、パイプライン・プロセッサに特に適している。そのようなものとして、ループの開始の直前の命令は、例えばパイプラインの高い充填度を維持するために最適であるようなどんな目的にも使用することができる。
【００２０】
また、ループ回路は、ベクトル・プロセッサで有利に使用することができる。ベクトル・プロセッサは、通常の「重い／デューティな（ｄｕｔｙ）」処理、特に内側ループの処理に使用することができる。そのようなものとして、ベクトル・プロセッサは、実行されるべきコードのベクトル化可能部分で大規模な並行処理を実現することができる。しかし、この並行処理を十分に活用することは、必ずしも実現可能でないが、これは、多くのアルゴリズムが正しい形の十分なデータ並行処理を示さないからである。Ｐ個の処理要素を有するベクトル・プロセッサでのベクトル化で得られる全体的な高速化は、ベクトル化することができるコードの割合（ｆｒａｃｔｉｏｎ）（ｆ）の関数として、（１−ｆ＋ｆ／Ｐ）−１に等しいことを、いわゆる「アムダールの法則」は示す。このことは、コードの５０％をベクトル化することができるとき、（３２の理論的な最大高速化ではなく）２未満の全体的な高速化が実現されることを意味する。これは、コードの残り５０％をベクトル化することができず、したがってコードのこの部分で高速化が達成されないからである。たとえコードの９０％をベクトル化することができても、高速化は８の係数よりもさらに少ない。コードの直接ベクトル化可能部分をベクトル化した後で、ほとんどの時間は残りのコードで費やされる。残りのコードは４つの分類に分けることができる。すなわち、
−  アドレス関連命令（例えば、ポインタを循環バッファにインクリメントすること、モジュロ・アドレス指定を使用すること）
−  通常のスカラ演算（すなわち、ベクトル・プロセッサの主ループに対応するスカラ演算）
−  ルーピング
−  変則的なスカラ演算。
【００２１】
ループ制御回路は、ルーピングで費やされる時間を減少し、そのようなものとして、ベクトル処理を民生用電子機器用途、特に移動通信により適したものにするのに寄与し、相当な高速化を達成することができる場合に、ベクトル・プロセッサの追加のコストを正当と認めることができるだけである。
【００２２】
図１は、本発明によるループ初期化を使用する例示のプログラムを示す。この例示のプログラムは、３つの入れ子のレベルで編成されたＮ１からＮ４として示す４つのループを含む。ループＮ０は最高レベルである。Ｎ２はより深い１つのレベルであり、Ｎ３およびＮ４は、より深い１つのレベルの２つの連続したループである。プログラムは、１０１から１０９として示す任意の番号の命令で始まる。これに、１１０から１１３として示す４つのループすべての初期化が続く。本発明によれば、ループ初期化が対応するループの開始アドレス（この図で、開始＿アドレス）の前である限りで、ループ初期化は、プログラムの任意の点で行うことができる。そのようなものとして、内側ループを初期化する前により高いレベルのループを初期化する厳密な理由はない。初期化ステップにおいて、少なくともループ回数、およびループの終了の指示（以下でループ終了アドレスと呼ぶ）が指定される。また、具体化に依存して、以下でループ開始アドレスと呼ばれるループの始めの指示も指定されるかもしれない。これら３つのパラメータは、各ループを完全に指定するので、その結果、プログラム実行中に開始アドレスに達したとき、いかなる開始命令も必要としないで、すなわち、ループの実行の開始を起動するための別個の命令を必要としないで、自動的にループを開始することができる。そのように行うことができる詳細な実施の形態は、図３に関連して説明する。図１で理解することができるように、この原理は、入れ子のループに適用することができ、また１つより多いループが１つの入れ子のレベルに存在する場合にも働く。初期化命令でループ開始アドレスが（明示的かまたは暗黙的かどちらかで）与えられない場合、ループを開始させるトリガは、ループの第１の命令に組み込むことができるが、このことは以下でより詳細に説明する。
【００２３】
図１に与える実施例では、すべての初期化は一番外側のループＮ０以外で行われる。入れ子のループの内側のループ初期化に命令サイクルが当てられないので、ループ・オーバヘッドは実質的に減少する。外側ループの内側で内側ループの初期化のいくつかを行うこともできるが、これでは本発明の有利点が減少する。入れ子のループでは、少なくとも１つの内側ループが、隣接して囲むループの実行の開始前に初期化される場合に、有利点が実現される。示したように、好ましくは、すべてのループは、任意のループの外側の主実行レベルで初期化される。
【００２４】
図２は、本発明によるデータ・プロセッサ２００の基本的なブロック図を示す。データ・プロセッサ２００は、命令メモリ２１０に格納された命令を実行することができる。実行されるべき命令は、プログラム計数器２２０によって指定される。命令メモリは、全体的にまたは（例えば、命令キャッシュの形で）部分的に、プロセッサに組み込むことができる。そのようにすることが望ましい場合には、命令メモリはプロセッサと別個であることができる。プロセッサは、プログラム計数器で指定された通常の命令を実行する演算実行ユニット２２５を含む。プロセッサ構成命令のような特別な命令は、別個に扱うことができる。これは、本発明の部分ではなく、これ以上は説明しない。ループ制御回路２３０は、複数の命令ループのためのそれぞれの関連ループ情報を格納することができる。命令ループのためのループ情報は、少なくともループ終了の指示およびループが実行されるべき回数を指示するループ回数を含む。ループ情報は、また、ループの開始の指示を含むこともできる。（例えば、１つまたは複数のレジスタ・ユニットの形の）実際の記憶装置２３２は、ループ制御ユニット２３０の中にあるかもしれないし、またはそれに接続されているかもしれない。図２は、記憶装置２３２を配列する例示の方法を示す。記憶装置は、開始アドレス、終了アドレス、およびループ回数をそれぞれ格納する３個のレジスタ・バンク２３５、２３６、および２３７に分割される。図において、各バンクは、４つの値を格納することができる。開始アドレスのための２４１、２４２、２４３および２４４、終了アドレスのための２５１、２５２、２５３、および２５４、並びにループ回数のための２６１、２６２、２６３および２６４が示されている。そのようなものとして、この実施例では、最大４個のループを各瞬間に初期化することができる。ループ制御ユニットは、（例えば、値を初期化するための、およびループを実行するために値を使用するための）１つのループの値を識別することができる。それぞれのループのうちの１つのループの値は、例えば、ループ番号で指示することができる。例えば、ループ０番は値２４１、２５１、および２６１を含み、ループ２番は値２４２、２５２、および２６２を含むなどである。ループ制御回路は、ループの１つを実行する必要があることを検出することができる。以下で、これを検出するいくつかの方法をより詳細に説明する。ループを開始する必要があることの検出に応答して、ループ制御回路は、対応するループのためのループ情報をロードし、かつロードされたループ情報に従って対応するループを実行するようにプログラム計数器を制御することができる。この点で、ループ制御回路は、知られているループ制御回路と同じように作用し、この態様はより詳細に説明しない。本発明によれば、演算制御ユニット２３０は、２４０として示すループ初期化命令に応答してループ情報を初期化することができる。ループ制御ユニットは、供給された情報が、後で使用するために記憶装置２３２の適切な記憶場所に格納されることを保証する。初期化命令は、ループ情報によって初期化されるループの開始前に発行さなければならないし、またこのループの開始と無関係である。ループ初期化命令は、プログラム計数器２２０の制御の下で命令メモリ２１０からロードすることができる。命令デコード・ユニット（図示しない）は、実行ユニット２３０に命令を与えないで、ループ制御ユニットへの命令で情報を供給することができる。
【００２５】
本発明をさらに説明するために、Ｐｈｉｌｉｐｓ  Ｒ．Ｅ．Ａ．Ｌ  ＤＳＰのような従来のゼロ−オーバヘッド・ループ・プロセッサの命令シーケンスを、次の表（表１）の左欄に示すが、一方で、本発明による命令シーケンスを右欄に示す。
【表１】
2006508447.tif 000003
【００２６】
上に示すように、ループ初期化命令は、少なくともループ回数およびループ終了アドレスを与える。ループ制御回路がループを開始すべきであると決定するために、演算実行ユニットのための各命令は、その命令が、演算実行ユニットで実行されるべき命令ループを形成する命令のシーケンスの１番目の命令であることを指示することをイネーブルにするループ開始フィールドを含む。実際には、すべての命令は、すべての命令に一貫した命令構造を維持するように、そのようなループ開始フィールドを有することができる。しかし、このことは必須ではないことは理解されるであろう。例えば、ある特定の命令は、プロセッサを構成するために使用されるだけで、ループ内で使用するのに適していないかもしれない。基本的に、そのような命令は、フィールドを必要としない。簡単な形では、ループ開始フィールドは、命令の１ビット・フィールドであるかもしれない。予め決められた値（例えば、２進の「１」）を使用して、命令がループの１番目の命令であることを指示することができ、一方で、他方の２進値（例えば、「０」）は、ループの１番目の命令でないシーケンスのすべての命令に使用される。次の表で、命令ごとに左に、例示の開始フィールド値を示す。
【表２】
2006508447.tif 000004
【００２７】
命令がループの１番目の命令であることをループ制御回路が決定することができる限り、フィールドの他のコード化もまた可能であることは理解されるであろう。好ましくは、ループ開始フィールドが命令ループの開始を指示したことの検出に応答して、ループ制御回路２３０は、そのループに関連したループ情報２３２にそのループの開始アドレスの指示を格納する。実際は、例えば完全絶対アドレスを使用して、アドレス指定可能な範囲内の相対的アドレス（範囲の始めに対してそのように）を使用して、またはループの終了アドレスに対するアドレスを使用して（例えば、ループ内の命令の番号の数を使用して）、任意の適切な指示を格納することができる。
【００２８】
ただ１ビット開始フィールドを使用して、表２に示したように、複数の入れ子のループを支援することができる。制限は、ループの各入れ子のレベルでたった１つのループだけを指定することができることである。図１を参照して、１ビットの標識は同じレベルの２つのループを区別することができないので、同じ入れ子のレベルに２つの連続したループＮ２およびＮ３を有することはできないかもしれない。この制限で、ループ制御回路がループの入れ子のレベルを知っていることがさらに必要になる。これは、例えばループ番号が入れ子のレベルを表すようにして（連続したより大きなループ番号がより深いループを指示する）、簡単な方法で達成することができる。ループ制御回路は、実行される命令の現在ループ番号／入れ子のレベルを、例えばレジスタに格納する。ループ／入れ子のレベルの指示された連続した順序付けを想定して、ループ制御回路は、ループの開始の検出に応答して現在ループ番号／入れ子のレベルをインクリメントする。上で説明したように、ループ制御回路は、プロセッサによって次に実行されるべき命令のループ開始フィールドを検査して、ループの開始を検出することができる。ループの出口の検出に応答して、ループ制御回路は現在ループ番号／入れ子のレベルをディクリメントする。ループ制御回路は、プログラム計数器を現在ループ指示の格納された終了アドレスと比較してループの終了を検出することができる。ループの終了が検出され、かつ格納されたループ回数に従ってループが実行された場合に、ループの出口が発生する。
【００２９】
本発明によるさらに他の実施の形態では、ループ開始フィールドは、複数の指定可能なループのうちのどの１つを開始させる必要があるかを指示することをイネーブルにする。例えば、各命令のループ番号を指定することで、ループ制御回路は、２つの連続した命令の間のループ番号の変化を決定して、新しいループに入ったこと、または新しいループから出たことを、することができる。主実行レベル（どんなループの部分でもない）は、例えば、レベル０（ゼロ）を使用して指示することができる。他のすべてのループは、プログラムに現れる順番で番号を付けることができるが、このことは必須ではない。基本的には、任意の順番が可能である。３つのループを有するプログラムでは、３つのループと主レベルの区別をしなければならないが、これには２ビットが必要である。表３において、命令ごとに左に、例示の２ビットの開始フィールド値が指示されている。左欄は、３つの入れ子のレベルの作業を示すが、右欄は、２つの連続したループがレベル２である場合の２つの入れ子のレベルの作業を示す。
【表３】
2006508447.tif 000005
2006508447.tif 000006
【００３０】
図３は、図１に関連して説明した原理に従ったプログラム制御装置の中のゼロ−オーバヘッド・ループ（０ＯＨＬ）ユニットの好ましい実施の形態のブロック図を示す。０ＯＨＬユニットの唯一の主な入力はループ命令３００である。この命令は、全命令流れのうちのループ関連部分から成り、ループ命令が存在しないとき、信号ループ＿命令は無演算（ＮＯＰ）に等しい。ループ初期化命令が発行されたとき、入力信号ループ＿命令は、ループ回数、開始アドレスおよび終了アドレスを指定する。好ましいゼロ−オーバヘッド・ループのハードウェアは、２個のアドレス・レジスタ・ユニット（図において、開始アドレス・ユニット３１０および終了アドレス・ユニット３２０）、ループ計数器ユニット３３０、ループ制御ユニット３４０、および３個の比較器ユニット３５０、３６０、および３７０を含む。ハードウェアはＭ個のループを支援する。すなわち、各入れ子のレベルがただ１つのループを含むとき、最大の入れ子のレベルはＭである。結果として、開始および終了アドレス・ユニット３１０、３２０は、ループごとにループ開始アドレスおよびループ終了アドレスを格納するために、Ｍ個のレジスタを有する。また、Ｍ個のループ計数器がループ制御器ユニット３３０に含まれている。ループ初期化が行われるとき、ループ・パラメータ（開始アドレス、終了アドレスおよびループ回数）が整合レジスタに書き込まれる。ループ命令は、初期化されるループの指示を、好ましくはレジスタ＿選択信号（およびループ計数器ユニットのための計数器＿選択信号）に直接変換可能な形で含む。ループ制御ユニット３４０は、この情報を使用して、レジスタ＿選択信号および計数器＿選択信号によって整合レジスタを選択する。それぞれのレジスタ値および計数器値は、それぞれの入力信号によって与えられる。それぞれの書込み＿イネーブル信号および設定＿計数器信号は、指示されたレジスタ／計数器フィールドへのレジスタ／計数器値の書込みを制御するために使用される。
【００３１】
現在ループは、プログラムが入った最新のループとして定義される。ループ制御ユニット３４０は、信号レジスタ＿選択を生成するために現在ループ・ポインタ３４２を使用し、この信号レジスタ＿選択は現在ループのループ・パラメータを選択する。開始アドレス・ユニットおよび終了アドレス・ユニットの出力のそれぞれの比較器３１０および３２０は、プログラム計数器３８０の値をこれらのユニットに既に格納されている値と比較することに対して責任がある。比較器は、並行して、それのレジスタ・ユニットのＭ個のレジスタ値すべてをプログラム計数器の現在値と比較することができる。比較器が整合値を検出した場合、比較器は同等（ｅｑｕａｌｉｔｙ）を指示する。１つより多い開始アドレス値がプログラム計数器に一致したとき、現在ループは、最小終了アドレスに対応するループを現在ループとして選ぶことによって決定される。１つより多い終了アドレス値がプログラム計数器に一致するとき、ループは現在ループから始まる順序で処理される。好ましい実施の形態では、ループ制御ユニット３４０は、また、開始アドレスの順序付けを行い、さらに現在プログラム計数器値の後で予期される次の開始アドレス（図において、開始アドレス・ユニットの出力「次」）を選択する信号（図において、次＿選択）を生成する。同様に、２以上のループが同じアドレスで開始するとき、最小終了アドレスを有するループが信号次＿選択によって自動的に選択される。このようにして、同じアドレスで開始する複数のループは、また、余分なオーバヘッドなしに処理することができる。
【００３２】
プログラムの任意の点で（また、プログラム計数器が最も外側のループ以外のアドレスに対応するとき）、１つの開始アドレス（図において、次）が選択され、プログラム計数器値と比較される。その上、プログラム計数器が少なくとも１つのループの内側にあるとき、プログラム計数器は、現在ループの構成に対応する１つの終了アドレス（図において、終了アドレス・ユニットの出力）と比較される。開始アドレス比較器３１０で同等が検出されたとき、ループ制御ユニット３４０は現在ループ・ポインタ３４２を更新し、現在ループは新しい開始アドレスで指定され、終了アドレスは対応する終了アドレス・レジスタにあり、そして、繰返し数が対応する計数器の影レジスタにある。
【００３３】
同等が終了アドレス比較器３２０で検出されたとき、ループ制御ユニット３３０は対応するループ計数器をイネーブルにする（図において、計数＿イネーブル）。信号計数＿選択によって既に選択されたループ計数器は、それから、ディクリメントされ、０と比較される。計数器値が０である場合、ループ制御ユニットは現在ループ・ポインタを更新し（プログラムは現在ループから出て行く）、プログラム計数器はインクリメントされ、そしてプログラムの実行は、現在ループの新しい値を上で説明したように続ける。この点で、ちょうど今出たばかりのループに対応する最も外側のループが、まだ進むべきもっと多くの繰返しを有する場合、ループ計数器値は、外側ループの次の繰返し中にループが再び開始されるように、元の値に再初期化されなければならない。このために、このような場合かどうかを決定するために、ループ制御ユニットに検査が含まれなければならない。検査が肯定的（すなわち、対応する最も外側のループが依然として活動状態）である場合、ループ制御ユニットは、再設定＿計数器信号を生成する。この再設定＿計数器信号は、影レジスタからループ・レジスタにそのループのループ繰返しの元の数を（再）複写する。影レジスタのそのような使用は、米国特許第６０６４７１２号から知られている。図４は、影レジスタ４００のあるループ計数器回路を示す。計数器４１０に格納された値は、ブロック４２０でディクリメントすることができる。多重化装置は、ディクリメントされた値か、影レジスタに格納された値か、または入力値４４０かのどれかを計数器４１０にロードするように制御することができる。信号選択４５０は、設定＿計数器、再設定＿計数器および計数＿イネーブルの信号を使用して生成され（図２に示す）、多重化装置を制御するように使用される。ループ構成命令が受け取られたとき（設定＿計数器）、新しいループ構成のために指定された繰返しの数は、入力値４４０によってロードすることができる。他の２つのオプションは、図２で理解されるように、影レジスタからループを更新し（再設定＿計数器）、さらにループ計数器をディクリメントする（計数＿イネーブル）。同等が終了アドレスで検出されるが、ディクリメント計数値がゼロでない場合、（開始アドレス・ユニット３１０のレジスタ＿選択入力で選択される）対応するループの開始アドレスは、プログラム計数器３８０に複写され、ループが繰り返されるようにする。
【００３４】
ループ制御回路は、好ましくは、信号処理に最適化されたプロセッサで使用される。そのようなプロセッサは、ＤＳＰであるかもしれないし、または任意の他の適切なプロセッサ／マイクロ−コントローラであるかもしれない。この説明の残りで、非常に高性能なスカラ／ベクトル・プロセッサでの回路の使用を説明する。スカラ／ベクトル・プロセッサは、通常の「重い／デューティな」処理、特に内側ループの処理に主に使用される。すべての信号処理の大多数は、スカラ／ベクトル・プロセッサのベクトル部で実行される。通常のスカラ演算の演算は、スカラ処理とベクトル処理を１つのプロセッサに緊密に一体化することによって、最適化することができる。別個のマイクロ−コントローラまたはＤＳＰ１３０は、変則的なタスクを行うために使用することができ、好ましくは、スカラ／ベクトル・プロセッサも制御する。
【００３５】
図５は、本発明によるループ制御回路を使用することができるプロセッサの主構造を示す。このプロセッサは、パイプライン・ベクトル処理部５１０を含む。ベクトル部の演算を支援するために、スカラ／ベクトル・プロセッサは、ベクトル部と並行して演算するように配列されたスカラ処理部５２０を含む。好ましくは、スカラ処理部もパイプライン処理である。ベクトル部の演算を支援するために、ベクトル部の少なくとも１つの機能ユニットは、また、スカラ部の対応する部分の機能も実現する。例えば、シフト機能ユニットのベクトル部は機能的にベクトルをシフトすることができ、そして、スカラ成分は、シフト機能ユニットのスカラ部によって供給される（または、このスカラ部に送られる）。そのようなものとして、シフト機能ユニットは、ベクトル部とスカラ部の両方を対象として含む。したがって、少なくともいくつかの機能ユニットはベクトル部だけでなくスカラ部も有し、そして、ベクトル部とスカラ部はスカラ・データを交換して協働することができる。機能ユニットのベクトル部は生の処理能力（ｒａｗ  ｐｒｏｃｅｓｓｉｎｇ  ｐｏｗｅｒ）を与え、そして、対応するスカラ部（すなわち、同じ機能ユニットのスカラ部）は、スカラ・データを供給しておよび／または消費して、ベクトル部の演算を支援する。ベクトル部のベクトル・データは、ベクトル・パイプラインによって供給される。
【００３６】
図５の好ましい実施の形態では、スカラ／ベクトル・プロセッサは以下の７つの専用機能ユニットを含む。  
−  命令分配ユニット（ｉｄｕ５５０）。ｉｄｕは、プログラム・メモリ５５２を含み、連続したｖｌｉｗ命令を読取り、さらに各命令の７つのセグメントを７つの機能ユニットに分配する。好ましくは、ｉｄｕは、本発明によるゼロ−オーバヘッド・ルーピングを支援するループ・ユニットを含む。  
−  ベクトル・メモリ・ユニット（ｖｍｕ５６０）。ｖｍｕはベクトル・メモリ（図５に示されない）を含む。  
−  コード生成ユニット（ｃｇｕ５６２）。ｃｇｕは、例えば、チャネル・コーディングおよびＣＲＣのような関連機能と同様にｃｄｍａコード・チップのベクトルを生成する有限体演算に特化されている。  
−  ＡＬＵ−ＭＡＣユニット（ａｍｕ５６４）。ａｍｕは、正則な整数および固定小数点演算に特化されている。  
−  ＳｈｕＦｆｌｅユニット（ｓｆｕ５６６）。ｓｆｕは、指定されたシャフル・パターンに従ってベクトルの要素を再配列することができる。  
−  左シフト・ユニット（ｓｌｕ５６８）。ｓｌｕは、語、倍長語または４倍語のような単位でベクトルの要素を左にシフトすることができる。生成されたスカラは、ｓｌｕのスカラ部に提供される。  
−  右シフト・ユニット（ｓｒｕ５７０）。ｓｒｕはｓｌｕと同様であるが、右にシフトする。その上、ａｍｕでのベクトル間演算の連続した結果を組み合わせる能力を有する。
【００３７】
上で示したように、多くの異なる方法を使用して、ループの開始および終了を指示することができる。好ましい実施の形態では、開始アドレスおよび終了アドレスは、それぞれの１６ビットアドレスを使用して指定することができる。ループ計数器は、同じく１６ビットを使用して指定することができる。結果として、ループ初期化命令のパラメータを指定するのに４８ビットが必要である。最大３個のループを指定することができると仮定すると、ループを指示するためにさらに２ビット必要になり、合計５０ビットになる。その上、可能な命令とループ初期化命令を識別するためにビットが必要である。命令幅が許す場合、有利なことには、ループ初期化命令は、１つの演算で複数のループのループ情報を初期化するために、複数のフィールドを含む。特に、ループ制御回路が、例えば図５に示すようなＶＬＩＷ（非常に大きな命令語）プロセッサで使用される場合、１つの命令で１つより多いループを構成することができる。図５のＶＬＩＷプロセッサでは、好ましくは、１２８ビット幅の命令が使用される。命令は、（実行ユニットで実行されるべき）通常のＶＬＩＷ命令とＩＤＵ命令を区別するために１ビットが使用されるように構造化されている。ＩＤＵ命令は、２ビットを使用して、（呼出し、戻り、ループ、またはプログラムの終了である）４つのＩＤＵ命令を区別することができる。１６ビットのアドレス幅を有する命令メモリ、１１ビット・ループ計数器、ループを識別するための２ビットを上述のように使用して、１つの命令で２個のループを構成することができる。そのとき、命令のフィールドは、表４に示す通りであるかもしれない。第２欄はフィールド幅を示す。
【表４】
2006508447.tif 000007
【００３８】
理解されることであろうが、ループを初期化する示された様々な方法は、（例えば、命令を圧縮して）コードを短縮する技術と組み合わせて使用することができる。そのような短縮に対して本発明の原理をはっきりさせることが示された。
【００３９】
留意すべきことであるが、上述の実施形態は、本発明を制限するのではなく例示し、そして、当業者は添付の特許請求の範囲の範囲から逸脱することなく多くの他の実施形態を立案することができる。特許請求の範囲で、カッコ間に入れられた参照符号は、請求項を制限するものとして解さないものとする。「備える」および「含む」という語は、請求項に列挙されたもの以外に他の要素またはステップが存在することを除外しない。
【図面の簡単な説明】
【００４０】
【図１】本発明によるループ初期化を使用する例示のプログラムを示す図である。
【図２】本発明によるプロセッサおよび回路を示すブロック図である。
【図３】本発明によるプロセッサおよび回路の実施の一形態を示す図である。
【図４】ループ制御回路で使用するのに適した計数器を示す図である。
【図５】ループ制御回路が使用される好ましいプロセッサを示す図である。
【図１】
2006508447.tif 000008
【図２】
2006508447.tif 000009
【図３】
2006508447.tif 000010
【図４】
2006508447.tif 000011
【図５】
2006508447.tif 000012
【国際調査報告】
2006508447.tif 000013
2006508447.tif 000014
2006508447.tif 000015