(57)【要約】      （修正有）【課題】ループ制御のシステムおよび方法を提供する。【解決手段】ハードウェアループ制御論理回路が、プログラムループのループ終了インジケータを検出するための検出ユニットを含む。ループカウントをデクリメントし、述語トリガカウンタをデクリメントするためのデクリメントユニットも含む。述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニットをさらに含む。【選択図】図３
2014170571.tif 000002
【特許請求の範囲】
【請求項１】
述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令を受け取ることに応答して、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含むループパラメータを自動的に初期化することと、なお、前記述語トリガカウントは、述語命令が実行される前に実行されるべきループ反復のカウントを示すように構成される；
パケットに含まれる１つまたは複数のループ命令の反復を実行することと、なお、前記パケットは前記述語命令を含む；
前記反復を実行した後で前記パケットに含まれるループ終了インジケータを検出することと、なお、前記ループ終了インジケータは前記パケットにおいて前記１つまたは複数のループ命令の後に配置される；および
前記ループ終了インジケータを検出することに応答して、
前記述語トリガカウントを修正するように、
前記述語トリガカウントを修正した後で述語値をいつセットするのか決定するように、なお、前記述語値をセットする決定は、前記述語トリガカウントと基準との比較に基づいており、および、前記述語命令は、前記述語値に基づいて連続的な次のループ反復の間に条件的に実行される、
ループ制御ハードウェアを自動的にトリガすること；
を備える、方法。
【請求項２】
前記基準はゼロ値を有し、前記ループ制御ハードウェアは、前記ループ終了インジケータを検出することに応答して前記述語トリガカウントをデクリメントする、請求項１に記載の方法。
【請求項３】
前記述語トリガカウントの値を前記述語トリガカウントの示された値に初期化すること、をさらに備え、前記示された値は前記単一の初期化命令によって示される、請求項１に記載の方法。
【請求項４】
前記１つまたは複数のループ命令はソフトウェアパイプライン化されたループとして実行され、前記述語トリガカウントは、前記ソフトウェアパイプライン化されたループのパイプラインステージのカウントを示す、請求項１に記載の方法。
【請求項５】
述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令を受け取ることに応答して、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含むループパラメータを初期化することと、なお、前記述語トリガカウントは、述語カウントレジスタ内で初期化される、
パケットに含まれる１つまたは複数のループ命令の反復を実行することと、なお、前記反復は前記述語トリガカウントを初期化した後で実行される、
前記パケットに含まれるループ終了インジケータを検出することと、なお、前記ループ終了インジケータは前記反復を実行した後で検出され、前記ループ終了インジケータは前記パケットにおいて前記１つまたは複数のループ命令の後に配置される、
前記ループ終了インジケータを検出することに応答して、前記述語トリガカウントを修正することと、
基準値に等しい第１の値を有する前記述語トリガカウントに応答して、前記１つまたは複数のループ命令うちの少なくとも１つの命令の、後続の実行に影響を及ぼす述語の第２の値を変更することと
を含む、方法。
【請求項６】
前記１つまたは複数のループ命令はプロログ命令を含まない、請求項５に記載の方法。
【請求項７】
前記１つまたは複数のループ命令は、ソフトウェアパイプライン化されたループの１組の命令を具備するカーネルコードを含む、請求項５に記載の方法。
【請求項８】
前記述語トリガカウントは、前記ループ終了インジケータを検出することに応答してデクリメントされる、請求項５に記載の方法。
【請求項９】
前記少なくとも１つの命令の実行は、前記述語に基づいて条件的にデータが記憶されることをもたらす、請求項５に記載の方法。
【請求項１０】
前記パケットは、ＶＬＩＷ（超長命令語）パケットである、請求項９に記載の方法。
【請求項１１】
述語トリガカウントを記憶するように構成された述語カウントレジスタと、
前記述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令の受け取りに応答して、プログラムループのループパラメータを初期化するように構成された初期化論理回路と、なお、前記ループパラメータは、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含む、
前記プログラムループの１つまたは複数のループ命令の反復を実行するように、および前記反復を実行した後でループ終了インジケータを検出するように、構成されたプロセッサと、なお、前記１つまたは複数のループ命令および前記ループ終了インジケータは、パケットに含まれ、前記ループ終了インジケータは前記パケットにおいて前記１つまたは複数のループ命令の後に配置される、
前記ループ終了インジケータに応答して、前記述語トリガカウントを修正するように構成された第１の論理回路と、
前記述語トリガカウントを基準値と比較するように構成された比較論理回路と、
前記比較の結果に少なくとも一部基づき、述語の値を変えるように構成された第２の論理回路と、なお、前記プログラムループの中の少なくとも１つの命令は、前記述語の前記値に条件づけられて実行される、
を備える、機器。
【請求項１２】
前記初期化論理回路は、前記１つまたは複数のループ命令を実行する前に前記述語を初期化するように構成される、請求項１１に記載の機器。
【請求項１３】
述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令の受け取りに応答して、プログラムループのループパラメータを初期化するように構成された初期化ユニットと、なお前記ループパラメータは、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含む、
前記プログラムループの１つまたは複数のループ命令の反復を実行した後で、ループ終了インジケータを検出するように構成された検出ユニットと、なお、前記１つまたは複数のループ命令および前記ループ終了インジケータはパケットに含まれ、前記ループ終了インジケータは前記パケットにおいて前記１つまたは複数のループ命令の後に配置される、
前記ループ終了インジケータの検出に応答して、前記述語トリガカウントをデクリメントするように構成されたデクリメントユニットと、
前記述語トリガカウントを基準と比較して述語値をセットするかどうか決定するように構成された比較ユニットと
を備える、ハードウェアループ制御論理回路。
【請求項１４】
前記プログラムループは、前記述語値に基づいて条件的に実行可能な少なくとも１つの命令を含む、請求項１３に記載のハードウェアループ制御論理回路。
【請求項１５】
システムであって、
ハードウェアループ制御論理回路の実行をトリガする特殊命令を実行するように構成されたプロセッサ、を備え、
前記ハードウェアループ制御論理回路は、
述語トリガカウント、開始アドレス、およびループカウントを示す前記特殊命令の受け取りに応答して、プログラムループのループパラメータを初期化するように構成された初期化ユニットと、なお、前記ループパラメータは、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含む、
前記プログラムループの１つまたは複数のループ命令の反復の実行の後でループ終了インジケータを検出するように構成された検出ユニットと、なお、前記１つまたは複数のループ命令および前記ループ終了インジケータはパケットに含まれ、前記ループ終了インジケータは前記パケットにおいて前記１つまたは複数のループ命令の後に配置される；
前記ループ終了インジケータに応答して、前記述語トリガカウントをデクリメントするように構成されたデクリメントユニットと、および
前記述語トリガカウントを基準と比較して述語値をセットするかどうか決定するように構成された比較ユニット
を備える、システム。
【請求項１６】
前記特殊命令は、ｓｐＮｌｏｏｐ型命令を含み、ただしＮは４より小さい正の整数であり、Ｎは前記述語値をセットする前に実行されるべき前記プログラムループのループ数を示す、請求項１５に記載のシステム。
【請求項１７】
前記ｓｐＮｌｏｏｐ型命令の実行に応答して、前記述語値をセットする前に前記プログラムループの命令に関連する値が計算され、前記値は記憶されない、請求項１６に記載のシステム。
【請求項１８】
前記ｓｐＮｌｏｏｐ型命令は、プログラムループセットアップ情報を含むデータフィールドを含む、請求項１６に記載のシステム。
【請求項１９】
前記検出ユニットは、前記ループ終了インジケータを検出するためにＶＬＩＷ（超長命令語）パケットを構文解析するように構成され、前記デクリメントユニットは、前記ループ終了インジケータを検出するときに前記述語トリガカウントを自動的にデクリメントするように構成されている、請求項１８に記載のシステム。
【請求項２０】
ソフトウェアパイプラインループアプリケーションに関連して前記ｓｐＮｌｏｏｐ型命令を使用する、請求項１６に記載のシステム。
【請求項２１】
前記プロセッサは、前記ハードウェアループ制御論理回路を含むＶＬＩＷ（超長命令語）型プロセッサであり、前記プロセッサにより、前記プログラムループの複数の命令が並列に実行される、請求項１５に記載のシステム。
【請求項２２】
Ｎは、整数であり、およびＮの値は、プロログカウントを示す、請求項１８に記載のシステム。
【請求項２３】
前記プログラムループの少なくとも１つの命令の実行は、前記述語値に基づいて条件的にデータが記憶されることをもたらす、請求項１５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にループ制御のシステムおよび方法に関する。
【背景技術】
【０００２】
技術の進歩は、より小型かつより高性能のコンピューティングデバイスをもたらした。例えば現在では、小型、軽量かつユーザが容易に持ち運べる、携帯無線電話、ＰＤＡ（携帯情報端末）、ページングデバイスなどの無線コンピューティングデバイスを含む、様々なポータブルパーソナルコンピューティングデバイスが存在する。より詳細には、セルラー電話やＩＰ電話などのポータブルコンピューティングデバイスは、音声およびデータパケットを無線ネットワークを介して伝達することができる。さらに、そうした多くのポータブル無線デバイスは他の種類のデバイスも組み込む。例えば、無線電話は、ディジタルスチルカメラ、ディジタルビデオカメラ、ディジタルレコーダ、およびオーディオファイルプレーヤを含むこともできる。さらに、そうした無線電話は、インターネットにアクセスするために使用することができるウェブブラウザアプリケーションなどのソフトウェアアプリケーションを含む、実行可能命令を処理することができる。そのため、これらの無線電話はかなりの計算能力を含むことができる。
【０００３】
ソフトウェアアプリケーション内で繰り返される実行可能命令は、ソフトウェアパイプライン化されたループとしてプロセッサによって実行することができ得る。ソフトウェアパイプライン化とは、プログラムループの様々な論理的反復の非依存命令をスケジューリングして同時に実行するための方法である。ループの様々な論理的反復の重複する命令は、効率的処理のための並列処理の量を増やす。例えば、第１のループ命令と第２のループ命令とを、無線移動体デバイスなどのコンピューティングデバイス内のプロセッサの別個の実行ユニットにおいて並列に実行することができ得、第１の命令は第１のループ反復に対応する一方、第２の命令は第２のループ反復に対応する。そうしたソフトウェアパイプライン化されたループはパイプライン化されていないループよりも効率的に実行することができ得るが、パイプラインを埋めるときの、命令間のデータ依存性に起因するデータハザードを防止するための追加命令（例えばプロログ命令）、およびパイプラインを空にするときのメモリアクセスハザードを防止するための追加命令（例えばエピログ命令）は、アプリケーションの実行に必要なメモリ量を増加させる可能性がある。そうした追加のメモリは、無線コンピューティングデバイスにおいて容易に使用可能ではない場合がある。
【発明の概要】
【０００４】
特定の実施形態において、ハードウェアループ制御論理回路を含むシステムを開示する。このハードウェアループ制御論理回路は、プログラムループのループ終了インジケータを検出するための検出ユニットと、ループカウントをデクリメントし、述語（predicate）トリガカウンタをデクリメントするためのデクリメントユニットと、その述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニットとを含む。このシステムは、ハードウェアループ制御論理回路の実行をトリガする特殊命令を実行するプロセッサも含む。このシステムをハードウェアループ制御論理回路とともに使用することは、ソフトウェアパイプラインループをプロログ命令なしで実行できるようにし、それによりメモリの使用量は減る。
【０００５】
別の特定の実施形態において、述語トリガカウントを記憶するための述語カウントレジスタを含む機器を開示する。この機器は、プログラムループのループパラメータを初期化するための初期化論理回路も含む。この機器は、プログラムループのループ命令を実行し、ループ終了インジケータを含むパケットを実行するためのプロセッサを含む。この機器は、述語トリガカウントを修正し、プログラムループのループカウントを修正するための論理回路も含む。この機器は、述語トリガカウントを基準値と比較するための比較論理回路も含む。この機器は、その比較の結果に基づき、プログラムループの中の少なくとも１つの命令に影響を及ぼす述語の値を変えるための論理回路をさらに含む。
【０００６】
別の特定の実施形態において、ループ命令を処理する方法を開示する。この方法は、特殊レジスタ内でループパラメータを初期化することを含み、その特殊レジスタは述語トリガカウントを含む。この方法は、ループ命令を実行し、ループ終了インジケータを有するパケットを実行することも含む。この方法は、述語トリガカウントを修正し、ループカウントを修正することをさらに含む。述語トリガカウントが基準値に等しい場合、この方法は、ループ命令のうちの少なくとも１つに影響を及ぼす述語の値を変更することを含む。
【０００７】
別の特定の実施形態において、ループ内の１組の命令を処理する方法を開示する。この方法は、特定の種類のループ命令の実行時に述語値をセットする前に、実行するループの反復回数を示すための述語トリガカウンタを自動的に初期化することを含む。この方法は、ループの反復中にその１組の命令を実行し、そのループのループ終了インジケータの検出時にループ制御ハードウェアを自動的にトリガして述語トリガカウンタを修正し、その述語トリガカウンタを基準と比較して述語値をいつセットするのか決定することも含む。その１組の命令の中の複数の命令のうちの少なくとも１つは、述語値に基づいて条件的に実行される。
【０００８】
開示する実施形態のうちの少なくとも１つが提供する、ある特定の利点は、符号サイズが小さくなること、より低い電力で動作すること、およびパイプライン化されたソフトウェアループとして実行される命令の処理がより高速になることである。以下の節、図面の簡単な説明、発明を実施するための形態、および特許請求の範囲を含む本出願の全体を検討した後、本開示の他の態様、利点、および特徴が明らかになろう。
【図面の簡単な説明】
【０００９】
【図１】ループ制御システムの、第１の説明のための実施形態のブロック図。
【図２】ループ制御システムの、第２の説明のための実施形態のブロック図。
【図３】ソフトウェアパイプライン化されたループの処理を示す概要図。
【図４】図１または図２のループ制御システムが実行することができ得るループ制御方法の、第１の説明のための実施形態の流れ図。
【図５】図１または図２のループ制御システムが実行することができ得るループ制御方法の、第２の説明のための実施形態の流れ図。
【図６】述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路を含む無線処理デバイスの、説明のための特定の実施形態のブロック図。
【発明を実施するための形態】
【００１０】
図１を参照すると、ループ制御システムの第１の説明のための実施形態が図示され、全体として１００で示されている。このシステム１００は、コンピュータ、ポータブル無線デバイス、無線電話、またはソフトウェア命令を実行する他の任意のデバイスの一部とすることができ得る。システム１００は、ハードウェアループ制御論理回路１０４を備えるプロセッサ１０２を含む。
【００１１】
プロセッサ１０２は、ループ命令１２０を実行するように構成される。ループ命令１２０は、述語論理回路１１０を使用する少なくとも１つの条件的に実行されるループ命令１２２を含む。例えば、プロセッサ１０２は、述語論理回路１１０が真に評価される述語値を記憶するとき、条件的に実行されるループ命令１２２を実行することができ得、述語論理回路１１０が偽に評価される述語値を記憶するとき、条件的に実行されるループ命令１２２を実行しないことができ得る。ループ命令１２０を実行することは、例えばマルチメディアソフトウェアアプリケーションや、ディジタル信号処理演算などのための繰り返し演算を、プロセッサ１０２が効率的に実行することを可能にする。
【００１２】
ループ制御値１０６は、ハードウェアループ制御論理回路１０４にとって、および述語セット論理回路１０８にとってアクセス可能である。述語セット論理回路１０８は、述語論理回路１１０に結合される。特定の実施形態では、この述語論理回路１１０は、偽の値（例えば論理的「０」値）または真の値（例えば論理的「１」値）を有するデータビットを記憶するように構成される、ラッチもしくは他の記憶デバイスを含むことができ得る。ハードウェアループ制御論理回路１０４および述語セット論理回路１０８を使用することにより、ソフトウェアパイプライン化されたループをコンパクトな形で符号化することができ得、以下に記載するように、ソフトウェアパイプラインを初期化するために使用されるパイプライン化されたループステージを、システム１００のハードウェアループ制御論理回路１０４と連動して動作する１つまたは複数の条件的に実行されるループ命令と置き換えることができ得る。
【００１３】
特定の実施形態では、ハードウェアループ制御論理回路１０４は、ループ命令１２０に対応するソフトウェアループの始まりを認識するように構成される回路を含む。プロセッサ１０２によるループ命令１２０の実行を初期化／制御するために、ループ制御値１０６を最初にセットし、修正するようにハードウェアループ制御論理回路１０４を構成することができ得る。具体的には、ハードウェアループ制御論理回路１０４は、ループ制御値１０６の述語カウンタ１２４を初期化するように構成される。述語カウンタ１２４に加え、ループ制御値１０６は、説明のための例としてループ開始アドレスやループ反復回数など、ループの演算を制御するための他の値を含むことができ得る。
【００１４】
ハードウェアループ制御論理回路１０４により、プロセッサ１０２におけるループ命令１２０を含む、ソフトウェアパイプライン化されたループを埋めるための処理サイクル数に一致する値に述語カウンタ１２４を初期化することができ得る。概して、プロセッサ１０２は、それぞれのループ反復を、複数の実行ユニット（不図示）において同時実行でき得る複数の連続するパイプラインステージとして、パイプライン化された方法で実行することができ得る。例えば、プロセッサ１０２が、３つのパイプラインステージの深さを有するソフトウェアパイプライン化されたループにおいてループ命令１２０を実行するとき、述語カウンタ１２４を３の値に初期化することができ得る。図３に、３つのパイプラインステージの深さを有するソフトウェアパイプライン化されたループの一例を示す。
【００１５】
ハードウェアループ制御論理回路１０４は、プロセッサ１０２におけるループの反復状態を検出し、ループの反復ごとに述語カウンタ１２４を修正するようにさらに構成することができ得る。例えば、述語カウンタ１２４は、述語カウンタ１２４の値が基準値に達するまで、ハードウェアループ制御論理回路１０４に応答して連続的にデクリメントされる初期化値を保持することができ得る。ソフトウェアパイプライン化されたループが完全にパイプライン化され、ソフトウェアループのすべての命令が、パイプラインの依存性により無効ではないデータを処理するとき、この基準値は述語カウンタ１２４の値に一致することができ得る。例えば、あるループ反復の中で、前の演算によってもたらされるデータを後の演算が使用し、前の演算を第１のパイプラインステージで行い、その第１のパイプラインステージと同時に実行される後のパイプラインステージで後の演算を行うようループをパイプライン化する場合、第１のパイプラインステージにおいてもたらされるデータに対する後のパイプラインステージの依存性は、第１のパイプラインステージにおいてもたらされるデータが後のパイプラインステージにおいて受け取られるまで、後のパイプラインステージに無効なデータを処理させる。説明すると、プロセッサはループ命令「Ａ＝Ａ＋１」および「Ａをメモリに記憶する」を別個の実行ユニットで実行することができるが、最初の命令「Ａ＝Ａ＋１」からのデータを受け取るまで、命令「Ａをメモリに記憶する」は無効な結果を記憶する。
【００１６】
述語セット論理回路１０８は、述語カウンタ１２４の値を検出することに応答して、述語論理回路１１０において記憶する述語値をセットするように構成することができ得る。特定の実施形態では、述語セット論理回路１０８は、述語カウンタ１２４の値と基準値との間の比較を行うための比較論理回路（不図示）を含む。述語カウンタ１２４における値が基準値に等しい値を有すると検出される場合、述語論理回路１１０に記憶される述語値を自動的にセットするよう、述語セット論理回路１０８を構成することができ得る。例えば、述語論理回路１１０を偽の状態で記憶するよう初期化することができ得、述語カウンタ１２４をソフトウェアパイプライン化されたループのパイプラインステージの数に初期化することができ得、基準値をゼロとすることができ得る。述語カウンタ１２４がゼロまでデクリメントされるとき、述語セット論理回路１０８は、述語論理回路１１０の述語値を真の状態に自動的に変更することができ得る。述語論理回路１１０において記憶される述語値の真の状態は、条件的に実行されるループ命令１２２に与えられ、プロセッサ１０２におけるループ命令１２０の処理に影響を及ぼすことができ得る。別の例として、述語カウンタ１２４をゼロにセットすることができ得、基準値をソフトウェアパイプライン化されたループのパイプラインステージの数にセットすることができ得、それぞれのループ反復に応答して述語カウンタ１２４をインクリメントすることができ得る。
【００１７】
したがって、プロセッサ１０２におけるループの初期化およびループの制御は、ハードウェアループ制御論理回路１０４、ループ制御値１０６を記憶し述語セット論理回路１０８を実装するためのラッチまたは他のデバイスを含むハードウェア要素によって実行することができ得る。ソフトウェアパイプライン化されたループのためのループ制御論理を、ハードウェアを使用して実装することにより、ソフトウェアループをコンパクトな形で符号化することができ得、プロログと呼ばれる、ソフトウェアパイプラインを初期化するために使用されるパイプライン化されたループステージを、システム１００のハードウェアと連動して動作する１つまたは複数の条件的に実行されるループ命令１２２と置き換えることができ得る。
【００１８】
図２を参照すると、ループ制御システムの第２の説明のための実施形態が図示され、全体として２００で示されている。このシステム２００は、プロセッサ２０２、ハードウェアループ制御論理回路２０４、およびループパラメータ制御レジスタ２０６を含む。ハードウェアループ制御論理回路２０４は、図１に示すハードウェアループ制御論理回路１０４に相当することができ得る。ループパラメータ制御レジスタ２０６に記憶されるデータは、図１に示すループ制御値１０６に相当することができ得、プロセッサ２０２は図１に示すプロセッサ１０２に相当することができ得る。
【００１９】
特定の実施形態では、ループパラメータ制御レジスタ２０６は、プロセッサ２０２において実行されようとするソフトウェアパイプライン化されたループの開始アドレスを表すデータを記憶する、開始アドレスレジスタ２１２を含む。このループパラメータ制御レジスタ２０６は、ソフトウェアパイプライン化されたループに対応するループカウント値を記憶する、ループカウントレジスタ２１４も含む。ループパラメータ制御レジスタ２０６は、プロセッサ２０２において実行されようとするソフトウェアパイプライン化されたループに関連する述語トリガカウント値を記憶する、述語トリガカウントレジスタ２１６をさらに含む。概して、このループパラメータ制御レジスタ２０６は、ハードウェア制御論理回路２０４から受け取る制御入力に応答する。
【００２０】
特定の実施形態では、ハードウェアループ制御論理回路２０４は、初期化ユニット２２０、デクリメントユニット２２２、比較ユニット２３０、検出ユニット２２８、および述語変更ユニット２３４を含む。初期化ユニット２２０は、プロセッサ２０２において実行される特殊命令２４０に応答することができ得る。初期化ユニット２２０は、開始アドレスを決定し、開始アドレスレジスタ２１２の値をセットするように構成することができ得る。初期化ユニット２２０は、デクリメントユニット２２２のループカウンタ２２４の初期値をセットするようにさらに構成することができ得る。初期化ユニット２２０は、デクリメントユニット２２２の述語トリガカウンタ２２６の初期値をセットするようにも構成することができ得る。
【００２１】
特定の実施形態では、デクリメントユニット２２２は、プロセッサ２０２においてループ反復が完了したことを示す検出ユニット２２８からの制御入力に応じて、ループカウンタ２２４および述語トリガカウンタ２２６の値をデクリメントするよう、検出ユニット２２８に応答する。具体的には、ループカウンタ２２４は、プロセッサ２０２において実行されようとするループ命令２５０の総反復回数に初期化することができ得、検出ユニット２２８において検出されるそれぞれのループ反復に応答してデクリメントすることができ得る。さらに、順次的パイプラインステージを、前のステージからの有効なデータを使用して実行するよう、述語トリガカウンタ２２６を、ソフトウェアパイプライン化されたループのパイプラインを完全に埋めるために必要とされる実行サイクル数に一致する値に初期化することができ得る。述語トリガカウンタ２２６は、検出ユニット２２８によって検出されるループ反復に応答してデクリメントすることができ得る。ループカウンタ２２４および述語トリガカウンタ２２６は、ループカウントレジスタ２１４および述語トリガカウントレジスタ２１６それぞれに値を書き込むことができ得、デクリメントユニット２２２の演算に応答してそれぞれの値を更新することができ得る。
【００２２】
特定の実施形態では、検出ユニット２２８は、プロセッサ２０２におけるループ終了状態を検出するように構成される。例えば、検出ユニット２２８は、ループ終了インジケータを伴うＶＬＩＷ（超長命令語）パケット２５４をプロセッサ２０２において構文解析するための、構文解析論理回路を含むことができ得る。特定の実施形態では、このループ終了インジケータは、ＶＬＩＷパケット２５４内の規定値を有する所定のビットフィールドを含む。ループ終了インジケータを検出すると、検出ユニット２２８はデクリメントユニット２２２に制御入力を与えて、カウンタ２２４およびカウンタ２２６のうちの一方または両方をデクリメントする。
【００２３】
特定の実施形態では、比較ユニット２３０は、述語トリガカウントレジスタ２１６に記憶される値に応答する。この比較ユニット２３０は、述語トリガカウントレジスタ２１６の値を基準値と比較し、その比較の出力を述語変更ユニット２３４に与えるように構成される比較器２３２を含むことができ得る。例えば、特定の実施形態では、基準値をゼロとすることができ得、述語トリガカウントレジスタ２１６がゼロ値または負の値を有するまで述語変更ユニット２３４にゼロ値出力を与えるよう、比較ユニット２３０を構成することができ得る。特定の実施形態では、比較器２３２は、述語トリガカウントレジスタ２１６などを介し、述語トリガカウンタ２２６の１値から０値への遷移を自動的に識別するように構成される。
【００２４】
特定の実施形態では、述語変更ユニット２３４は、述語論理回路２１０に記憶される述語値をセットしまたはリセットするための、比較ユニット２３０から受け取る制御信号に応答する。例えば、この述語変更ユニット２３４は、述語論理回路２１０に記憶される述語値を偽の状態に初期化するように構成することができ得る。述語変更ユニット２３４は、述語トリガカウントレジスタ２１６の値が基準値に等しいことを示す制御入力を比較ユニット２３０から受け取ると、述語論理回路２１０の述語値を真の値にセットすることができ得る。述語変更ユニット２３４は、ループ命令を実行する前に述語論理回路２１０に記憶されている述語値をクリアするために、初期化ユニット２２０に応答することもでき得る。
【００２５】
特定の実施形態では、述語論理回路２１０は、論理的な真の値または偽の値を記憶するように構成される１つまたは複数のハードウェアコンポーネントを含むことができ得る。この述語論理回路２１０は、ループ命令２５０を実行することに関連して使用されるプロセッサ２０２にとってアクセス可能とすることができ得る。
【００２６】
特定の実施形態では、プロセッサ２０２は、ソフトウェアパイプライン化されたループに関連する命令を受け取り、実行するように構成される。具体的には、プロセッサ２０２は、初期化値を指定することができ得る特殊命令２４０を実行し、後続のソフトウェアパイプライン化されたループに関連する値を制御するように構成される。この特殊命令２４０の初期化値および制御値は、ハードウェアループ制御論理回路２０４によって検出し、またはハードウェアループ制御論理回路２０４に与えることができ得る。
【００２７】
さらに、プロセッサ２０２は、ループ命令２５０をソフトウェアパイプライン化されたループとして受け取り、実行するように構成される。例えば、プロセッサ２０２は、プロセッサ２０２の複数の並列実行ユニットなどにおいて、ループ命令２５０のうちの１つまたは複数を並列に実行するように構成することができ得る。さらに、プロセッサ２０２は、ループ命令２５０の単一の反復をプロセッサ２０２における様々な順次的パイプラインステージで実行でき得るよう、ループ命令２５０をソフトウェアパイプライン化された命令として実行することができ得る。
【００２８】
特定の実施形態では、ループ命令２５０は、少なくとも１つの条件的に実行されるループ命令２５２を含む。この少なくとも１つの条件的に実行されるループ命令２５２は、実行条件を決定するために述語論理回路２１０に記憶される述語値に応答する。特定の実施形態では、この条件的に実行されるループ命令２５２は、述語論理回路２１０における述語値に基づいて条件的にデータを記憶し、そのためその述語値が「真」にセットされる前に計算される値は記憶されない。例えば、この条件的に実行されるループ命令２５２は、現在のループ命令２５０の反復において前に実行された計算に基づいて、出力レジスタ（不図示）などのメモリにデータを書き込むための書き込みコマンドを含むことができ得る。ループが完全にパイプライン化される前にこの条件的に実行されるループ命令２５２を実行することは、それより前の計算によって生成されるデータを受け取る前に書き込みを行うとき、無効なデータをメモリに書き込むことになる。したがって、条件的に実行されるループ命令２５２を実行することは、述語論理回路２１０に記憶される述語値を必要条件とすることができ得、この述語論理回路２１０に記憶される述語値は、ループ命令２５０に対応するソフトウェアパイプライン化されたループの状態を示す。説明すると、プロセッサ２０２はループ命令「Ａ＝Ａ＋１」および「Ａをメモリに記憶する」を実行することができるが、最初の命令「Ａ＝Ａ＋１」からのデータを受け取るまで、命令「Ａをメモリに記憶する」は無効な結果を記憶する。したがって、命令「Ａをメモリに記憶する」は、当初「偽」にセットされ、最初の命令「Ａ＝Ａ＋１」を完了したときに「真」に変更される述語値に基づいて条件的に実行することができ得る。
【００２９】
図３を参照すると、ソフトウェアパイプライン化されたループを処理する特定の説明のための実施形態が図示され、全体として３００で示されている。表現する命令パイプラインステージ３０２、３０４、３０６、および３０８は、ソフトウェアパイプライン化されたループのパイプラインステージを表す。述語値３１０は、「Ｐ３」と表し、命令パイプラインステージ３０２〜３０８で実行される命令のうちの１つまたは複数によってアクセスすることができ得る述語の値を示す。ハードウェア述語ループカウンタ３１２は、ソフトウェアパイプライン化されたループに対応するカウントダウン値を示す。命令パイプラインステージ３０２〜３０８のそれぞれ、述語値３１０、およびハードウェア述語ループカウンタ３１２に関連する値を、ループの開始期間におけるクロックサイクル１で始まり、後の期間におけるクロックサイクル２３に進む連続したクロックサイクルに関して図示する。特定の実施形態では、それぞれのクロックサイクルは、パイプライン化されたプロセッサにおける実行サイクルに対応する。
【００３０】
説明のための実施形態では、このシステム３００は、図１に示すプロセッサ１０２においてループ命令１２０を実行することを表し、述語値３１０は述語論理回路１１０に記憶される述語値を反映し、ハードウェア述語ループカウンタ３１２は述語カウンタ１２４に相当する。別の説明のための実施形態では、このシステム３００は、図２に示すプロセッサ２０２においてループ命令２５０を実行することを表し、述語値３１０は述語論理回路２１０に記憶される述語値に相当し、ハードウェア述語ループカウンタ３１２は、述語トリガカウントレジスタ２１６に記憶される述語トリガカウンタ２２６の出力に相当する。
【００３１】
特定の実施形態では、ソフトウェアパイプライン化されたループは、ループ初期化命令３３０として分解図で示す特殊命令によって開始される。このループ初期化命令３３０は、ｓｐＮＬｏｏｐの形式を有する命令名３３４を含み、ただし「Ｎ」は３の値を有する。ループ初期化命令３３０は、プログラムループセットアップ情報を含むデータフィールドを含む。例えば、ループ初期化命令３３０は、ソフトウェアループの開始アドレスに対応する第１のデータフィールド３３６を含む。ループ初期化命令３３０は、実行されるループの反復回数を示すループカウントに対応する第２のデータフィールド３３８も有する。このループ初期化命令３３０は、プロセッサによって実行されるとき、述語値３１０に対応する述語Ｐ３  ３３２の値など、述語の初期化に対応する初期値を返すことができ得る。
【００３２】
したがって、ループ初期化命令３３０は、ループの命令の開始アドレス、そのループの反復回数を示すことができ得、名前３３４の中の「Ｎ」の値により、ハードウェア述語ループカウンタ３１２の初期値をさらに示すことができ得る。図示する実施形態では、名前ｓｐ３ｌｏｏｐは、ハードウェア述語ループカウンタ３１２における３の初期値を示す。ハードウェア述語ループカウンタ３１２の他の初期値を示すために、他の「Ｎ」の値を使用することができ得る。説明のための例として、「ｓｐ１Ｌｏｏｐ」は１の初期値を示すことができ得、「ｓｐ２Ｌｏｏｐ」は２の初期値を示すことができ得る。ループが十分にパイプライン化されるまで、条件的演算が実行されることを防ぐために、ハードウェア述語ループカウンタ３１２の初期値をセットすることができ得る。特定の実施形態では、「Ｎ」は４より小さい正の整数とすることができ得、述語値３１０を変更する前に実行するプログラムループのプロログカウントまたはループ数を示すことができ得る。
【００３３】
ソフトウェアパイプライン化されたループ初期化命令３３０を処理した後、Ａ、Ｂ、Ｃ、およびＤとラベル付けした命令を有するＶＬＩＷパケットを含むものとして図示する、ソフトウェアパイプライン化されたループが開始する。これらの命令Ａ、Ｂ、Ｃ、およびＤは、単一のプロセッサの複数の実行ユニットにおいてなど、プロセッサにおいてそれぞれ並列に実行することができ得る。さらに、これらの命令Ａ、Ｂ、Ｃ、およびＤは、命令Ｂが命令Ａによって生成されるデータを使用することができ得るという点で順次的であり得る。同様に、命令Ｃは、命令Ａ、命令Ｂ、またはその任意の組合せによって生成されるデータを使用することができ得る。さらに、命令Ｄは、命令Ａ、Ｂ、Ｃ、またはそれらの任意の組合せのいずれかによって生成されるデータを使用することができ得る。命令Ｄは、個々のループ反復の出力を示すデータをメモリに書き込むことができ得る。例えば、命令Ｄは、演算Ａ、Ｂ、およびＣそれぞれの結果を使用して計算を行うことができ得、その結果生じる値を出力レジスタに記憶することができ得る。したがって、命令Ｄへの入力が有効な値で構成されることを確実にするために、命令Ａ、Ｂ、およびＣのそれぞれが命令Ｄの前に順次的に実行されるよう、ソフトウェアパイプライン化されたループが完全にパイプライン化されるまで命令Ｄを実行すべきではない。ソフトウェアパイプラインが完全に埋められる前に順次的に実行することができ得る命令を、全体としてプロログ３２０として示す。パイプラインが満杯の、ソフトウェアパイプラインループの実行部分をカーネル３２２として示す。最初の命令の最終実行を完了したが、他のパイプライン命令がまだ実行されていないソフトウェアパイプラインループの部分を、全体としてエピログ３２４と呼ぶ。
【００３４】
図示のように、クロックサイクル１で、「３」の初期値をハードウェア述語ループカウンタ３１２において記憶する。同様に、述語値Ｐ３  ３１０を偽の値に初期化する。このソフトウェアループは、ループの最初の反復のための命令Ａを実行することで開始する。命令Ｂ、Ｃ、およびＤもＡに並列に実行することができ得、カーネル部分３２２において実行されるが、命令Ｂ、Ｃ、およびＤは前の命令からのデータ出力に依拠し得るので、クロックサイクル１での命令Ｂ、Ｃ、およびＤの結果は無効であり得る。さらに、命令Ｄがメモリにデータを記憶するための書き込み命令を含む場合、書き込もうとするデータが、最初のサイクルの命令Ａ、Ｂ、およびＣの出力を示す有効なデータであるまで、命令Ｄは実行すべきではない。したがって命令Ｄは、特定のクロックサイクルにおいてこの命令を実行しないことを示すパイプラインステージの陰影として図示する、述語値３１０に基づいて条件的に実行することができ得る。述語値３１０が偽であるので、第４の命令パイプラインステージ３０８における条件的書き込み命令Ｄは実行されない。
【００３５】
クロックサイクル２に進むと、命令Ｂが命令Ａから出力を受け取り、Ｂ（１）として図示するループの最初の反復にわたり実行される。同様に、命令Ａが、Ａ（２）として図示するループの２番目の反復に関連するデータを使用して実行される。命令ＣおよびＤは実行することができ得るが、前の命令に対するデータ依存性のため、命令ＣおよびＤそれぞれの入力値および必然的に出力は未定義であり得る。図示のように、クロックサイクル２においてハードウェア述語ループカウンタが「３」の値から「２」の値にデクリメントされ、述語値３１０は偽のままである。述語値３１０が偽なので、第４の命令パイプラインステージ３０８における条件的書き込み命令Ｄは実行されない。
【００３６】
クロックサイクル３に進むと、第３の命令パイプラインステージ３０６における命令Ｃが、ループの最初の反復に対応して実行される。命令Ｂが、ループの２番目の反復に対応する第２の命令パイプラインステージ３０４において実行され、命令Ａが、ループの３番目の反復に対応する第１の命令パイプラインステージ３０２において実行される。ハードウェア述語ループカウンタ３１２が「２」の値から「１」の値にデクリメントされ、述語値３１０は偽のままである。述語値３１０が偽なので、条件的書き込み命令Ｄは実行されない。
【００３７】
クロックサイクル４において、このソフトウェアループのプロログ部分３２０が終了し、カーネル部分３２２が開始している。概して、このカーネル部分３２２ではソフトウェアパイプラインが埋められており、命令パイプラインステージ３０２〜３０８のそれぞれが有効なデータに対して演算を行う。ハードウェア述語ループカウンタ３１２は、パイプラインが満杯であり、プロログステージ３０２が終了したことを示す値「０」にデクリメントされる。ハードウェア述語ループカウンタ３１２が「０」に等しくなることに応答して、述語値３１０が真の状態にセットされる。特定の実施形態では、述語値３１０は、図２に示す比較器２３２など、述語ループカウンタ３１２の値を基準値と比較するように構成されるハードウェア論理回路によってセットされる。
【００３８】
クロックサイクル４からクロックサイクル２０まで、このループは実行のカーネル部分３２２にとどまり、このカーネル部分３２２ではパイプラインは満杯のままであり、すべてのパイプラインステージ３０２〜３０８が、命令間のデータ依存性に適合するために命令を順番に実行する。述語値３１０が真に評価されるので、命令Ｄを含むすべての命令が、クロックサイクル４からクロックサイクル２０を通して続く間に実行される。クロックサイクル２１においてエピログ部分３２４が開始し、このエピログ部分３２４では、第１のパイプラインステージ３０２が全２０のループ反復にわたる命令Ａの実行を完了しているが、残りのパイプラインステージ３０４、３０６、および３０８は、ソフトウェアループの前の反復に関連する命令を処理し続ける。例えば、クロックサイクル２１において、命令Ｂの実行は反復２０に対応し、命令Ｃは反復１９に対応し、命令Ｄは反復１８に対応する。したがって、クロックサイクル２１では、命令Ｂ、Ｃ、およびＤは実行されるが命令Ａは実行されない。クロックサイクル２２では、命令ＣおよびＤは実行されるが、命令ＡおよびＢは実行されない。クロックサイクル２３において、命令Ｄを実行してこのループの最後の反復を完了する。
【００３９】
図示のように、プロログ部分３２０およびカーネル部分３２２は、命令Ａ、Ｂ、Ｃ、およびＤを含む単一のＶＬＩＷパケットを使用して実行することができ得、命令Ｄの実行は、述語値Ｐ３  ３１０に基づいて条件的であり、「｛Ａ，Ｂ，Ｃ，ｉｆ（Ｐ３）Ｄ｝：ｅｎｄｌｏｏｐ」として示されるループ終了インジケータを含む。したがって、カーネルコード（すなわち命令Ａ、Ｂ、Ｃ、およびＤを含むＶＬＩＷパケット）は、プロログ部分３２０とカーネル部分３２２との両方において実行される。エピログ部分３２４の間、パイプラインは空になっていくため、｛ＮＯＰ，Ｂ，Ｃ，Ｄ｝、｛ＮＯＰ，ＮＯＰ，Ｃ，Ｄ｝、｛ＮＯＰ，ＮＯＰ，ＮＯＰ，Ｄ｝などのエピログＶＬＩＷパケットを使用することができ得、ただしＮＯＰは特定の実行ユニットにおいて演算しないことを示す。そうしたエピログ命令は、前のパイプライン命令が、最後のループ反復を超えて実行されるとき、メモリの許可されていない部分にアクセスしないことを確実にする。しかし、別の実施形態では、クロックサイクル２１、２２、および２３において命令Ａによって安全に実行することができ得る追加のメモリ読み取り操作など、ループ境界の外部で１つまたは複数の入力データソースに安全にアクセスでき得るとき、エピログ部分３２２が代わりにカーネル命令を実行することができ得る。
【００４０】
プロログ部分３２０およびカーネル部分３２２にわたり単一のＶＬＩＷパケットを使用することは、パイプラインを埋めるために特殊プロログ命令を実行する場合より少ないメモリを使用してソフトウェアループを実行することを可能にする。ハードウェア述語ループカウンタを、プロログ部分３２０の間は非ゼロ値に、およびループが完全にパイプライン化されるカーネル部分３２２ではゼロ値に一致するよう初期化／デクリメントすることにより、命令Ｄなどの条件的に実行されるデータ依存命令の実行をパイプラインが満杯のカーネルに制限するよう、述語値３１０をセットすることができ得る。そうしたソフトウェアパイプライン化されたループ処理は、図１のプロセッサ１０２とともに述語論理回路１１０および述語カウンタ１２４を使用して実行することができ得、または図２に示すプロセッサ２０２とともに述語論理回路２１０、述語トリガカウンタ２２６、および述語トリガカウントレジスタ２１６を使用することにより実行することができ得る。
【００４１】
図４を参照すると、ループ制御方法の第１の説明のための実施形態の流れ図が図示され、全体として４００で示されている。特定の実施形態では、ループ内の１組の命令を処理するこの方法４００は、図１および図２に示すシステムのうちの１つまたは複数を使用して実行することができ得る。４０２で、特定の種類のループ命令の実行時に述語値をセットする前に、ループの反復回数を示すための述語トリガカウンタを自動的に初期化する。この１組の命令はソフトウェアパイプライン化されたループとして実行することができ得、述語トリガカウンタは、そのソフトウェアパイプライン化されたループの、パイプラインステージの数に基づくことができ得る。説明のための実施形態では、特定の種類のループ命令は、図３に示すループ初期化命令３３０である。
【００４２】
４０４に移ると、ループの反復中にその１組の命令を実行する。その１組の命令の中の複数の命令のうちの少なくとも１つは、述語値に基づいて条件的に実行される。例えば、条件的に実行される１組の命令の中の複数の命令のうちの少なくとも１つは、述語値に基づいて条件的に出力レジスタにデータを書き込むことができ得る。
【００４３】
４０６に進むと、ループのループ終了インジケータの検出時に、述語トリガカウンタを修正するループ制御ハードウェアを自動的にトリガする。例えばこのループ制御ハードウェアは、ループ終了インジケータを検出することに応答して、述語トリガカウンタをデクリメントすることができ得る。４０８に進むと、ループのループ終了インジケータの検出時に、述語値をいつセットするのか決定するために、述語トリガカウンタを基準と比較する。特定の実施形態では、この基準はゼロ値である。
【００４４】
判定４１０において、述語トリガカウンタが基準に等しいかどうかについて判定を行う。述語トリガカウンタが基準に等しくない場合、処理は、その１組の命令を次のループ反復中に実行する４０４において続行する。述語トリガカウンタが基準に等しい場合、４１２で述語値をセットし、処理は、その１組の命令を次のループ反復中に実行する４０４に戻る。
【００４５】
したがって、条件的に実行される命令を実行することは、述語トリガカウンタを初期化し、述語トリガカウンタと基準とを比較することに応じて述語をセットすることによって制御することができ得る。したがって、図３に示すように、別個のプロログ命令およびカーネル命令なしでソフトウェアパイプライン化されたループを実行することが可能にされ、図１および図２に示すシステムを使用して実行することができ得る。
【００４６】
図５を参照すると、ループ制御方法の第２の説明のための実施形態の流れ図が図示され、全体として５００で示されている。特定の実施形態では、ループ命令を処理するこの方法５００は、図１および図２に示すシステムのうちの１つまたは複数を使用して実行することができ得る。５０２において、述語トリガカウントを含む特殊レジスタ内でループパラメータを初期化する。特定の実施形態では、述語値が偽の状態に初期化され、述語トリガカウントは、ソフトウェアパイプライン化されたループのパイプラインの深さに対応する。
【００４７】
５０４に進み、ループ命令を実行する。特定の実施形態では、このループ命令はカーネルコードを含むがプロログ命令は含まない。そのカーネルコードは、ソフトウェアパイプライン化されたループの１組の命令を含むことができ得る。５０６に進み、ループ終了インジケータを有する命令を実行する。５０８に移り、述語トリガカウントを修正し、ループカウントを修正する。５１０に進み、述語トリガカウントが基準値に等しい場合、ループ命令のうちの少なくとも１つに影響を及ぼす述語の値を変更する。
【００４８】
例えば、このループ命令は、述語に基づいて条件的に実行される少なくとも１つの命令を含むことができ得る。述語トリガカウンタがソフトウェアパイプラインの深さに初期化されるとき、基準値「０」に等しくなるよう述語トリガカウントをデクリメントすることは、ソフトウェアパイプライン化されたループのプロログ部分の終わり、およびパイプラインが埋まっているそのループのカーネル部分の始まりを示すことができ得る。したがって、述語に基づいて実行される条件的に実行される命令は、パイプラインが埋められるまで実行しなくてよい。よって、パイプラインが十分に埋められる前に有害な結果を引き起こす可能性がある命令の実行を防止するために述語が使用される場合、カーネル命令をプロログにおいて実行することもでき得る。
【００４９】
図１および図２に示すシステムは、方法５００を実行することができ得るシステムの例を与える。例えば、ループパラメータは、図２のループパラメータ制御レジスタ２０６内で初期化することができ得、ループカウントおよび述語トリガカウントは、デクリメントユニット２２２によってデクリメントすることができ得、述語２１０の値は、図２の述語変更ユニット２３４によって変更することができ得る。
【００５０】
図６を参照すると、述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路６６４を含む無線処理デバイスの、説明のための特定の実施形態のブロック図が図示され、全体として６００で示されている。このデバイス６００は、メモリ６３２に結合される、ディジタル信号プロセッサ（ＤＳＰ）６１０などのプロセッサを含む。述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路６６４は、図１および図２に示すシステムのうちの１つまたは複数を含むことができ得、図３〜５のうちの１つもしくは複数またはそれらの任意の組合せに従って動作することができ得る。説明のための実施形態では、このシステム６００は無線電話である。
【００５１】
図６は、ディジタル信号プロセッサ６１０およびディスプレイ６２８に結合される、ディスプレイコントローラ６２６も示す。ディジタル信号プロセッサ６１０には、ＣＯＤＥＣ（符号器／復号器）６３４も結合することができる。そのＣＯＤＥＣ６３４には、スピーカ６３６およびマイクロフォン６３８を結合することができる。モデム６４０を、ディジタル信号プロセッサ６１０に結合し、さらに無線アンテナ６４２に結合することができる。
【００５２】
特定の実施形態では、ＤＳＰ６１０、ディスプレイコントローラ６２６、メモリ６３２、ＣＯＤＥＣ６３４、およびモデム６４０が、システムインパッケージまたはシステムオンチップデバイス６２２に含まれる。特定の実施形態では、そのオンチップシステム６２２には、入力デバイス６３０および電源６４４が結合される。さらに、特定の実施形態では、図６に示すように、ディスプレイ６２８、入力デバイス６３０、スピーカ６３６、マイクロフォン６３８、無線アンテナ６４２、および電源６４４が、システムオンチップデバイス６２２にとって外部にある。しかし、そのそれぞれは、インターフェースやコントローラなど、システムオンチップデバイス６２２のコンポーネントに結合することができる。
【００５３】
演算中、ディジタル信号プロセッサ６１０において効率的なソフトウェアパイプライン化されたループ処理を可能にするために、述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理６６４を使用することができ得る。例えば、この述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路６６４は、ディジタル信号プロセッサ６１０においてループ初期化命令、ループ終了命令、またはその両方を検出するための回路もしくはデバイスを含むことができ得、プロログカウンタなどの１つまたは複数のループカウンタ、１つまたは複数の述語、またはそれらの任意の組合せの値を制御することにより、ディジタル信号プロセッサ６１０におけるループ演算を制御するように動作することができ得る。ディジタル信号プロセッサ６１０に含まれるものとして図示するが、この述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路６６４は、システムオンチップデバイス６２２の制御部などにある１個または複数個のプロセッサと分けることができ得る。概して、ソフトウェアパイプライン化されたループは、同一ソフトウェアループ内の命令を１つまたは複数の並列パイプラインにわたって実行でき得るようにする、１つまたは複数の並列パイプラインを有する任意のプロセッサで実施することができ得る。さらに、デバイス６００は、ＰＤＡ（携帯情報端末）、オーディオプレーヤ、ＩＰ（インターネットプロトコル）電話、セルラー電話、携帯電話、ラップトップコンピュータ、ノートブックコンピュータ、テンプレートコンピュータ、ソフトウェアパイプライン化されたループを処理することができ得る他の任意のシステム、またはそれらの任意の組合せなど、任意の無線処理デバイスであり得ることが理解されよう。
【００５４】
本明細書で開示した実施形態に関連して記載した様々な説明のための論理ブロック、構成、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装できることを当業者はさらに理解されよう。このハードウェアとソフトウェアとの互換性を明瞭に示すために、様々な説明のためのコンポーネント、ブロック、構成、モジュール、回路、およびステップを概してそれらの機能の観点から上述してきた。そうした機能をハードウェアとして実装するのかソフトウェアとして実装するのかは、個々の応用例およびシステム全体に課せられる設計制約によって決まる。当業者は、記載した機能を個々の応用例ごとに様々な方法で実装することができ得るが、そうした実装の決定は本開示の範囲からの逸脱を生じさせるものとして解釈すべきでない。
【００５５】
本明細書で開示した実施形態に関連して記載した方法またはアルゴリズムのステップは、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、もしくはその２つの組合せで直接実施することができ得る。ソフトウェアモジュールは、ＲＡＭ（ランダムアクセスメモリ）、フラッシュメモリ、ＲＯＭ（読み取り専用メモリ）、ＰＲＯＭ（プログラム可能読み取り専用メモリ）、ＥＰＲＯＭ（消去可能プログラム可能読み取り専用メモリ）、ＥＥＰＲＯＭ（電気的消去可能プログラム可能読み取り専用メモリ）、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ（コンパクトディスク読み取り専用メモリ）、または当技術分野で知られている他の任意の形式の記憶媒体の中にあることができ得る。プロセッサが記憶媒体との間で情報を読み取り、情報を書き込めるように、例示的記憶媒体はプロセッサに結合される。代替形態では、この記憶媒体はプロセッサの一部分をなすことができ得る。このプロセッサおよび記憶媒体はＡＳＩＣ（特定用途向け集積回路）の中にあることができ得る。そのＡＳＩＣはコンピューティングデバイスまたはユーザ端末の中にあることができ得る。代替形態では、このプロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末の中の個別コンポーネントとして存在することができ得る。
【００５６】
開示した実施形態についての前述の記載は、開示した実施形態を任意の当業者が作成し、または使用できるようにするために提供した。これらの実施形態に対する様々な修正は当業者に容易に明らかになり、本明細書に定める原理は、本開示の範囲から逸脱することなく他の実施形態に適用することができ得る。したがって本開示は、本明細書に示した実施形態に限定されることは意図せず、むしろ特許請求の範囲によって定義される原理および新規の特徴に一致する、可能な限り広い範囲が認められるべきである。
【００５７】
以下に本件出願当初の特許請求の範囲を付記する。
［Ｃ１］
ループ内の１組の命令を処理する方法であって、
特定の種類のループ命令の実行時に述語値をセットする前に、前記ループの反復回数を示すための述語トリガカウンタを自動的に初期化することと、
ループの反復中に前記１組の命令を実行することと、
前記ループのループ終了インジケータの検出時にループ制御ハードウェアを自動的にトリガして前記述語トリガカウンタを修正し、前記述語トリガカウンタを基準と比較して前記述語値をいつセットするのか決定することであって、前記１組の命令の中の前記複数の命令のうちの少なくとも１つは、前記述語値に基づいて条件的に実行される、前記述語値をいつセットするのか決定することと
を備える、方法。
［Ｃ２］
前記基準はゼロ値であり、前記ループ制御ハードウェアは、前記ループ終了インジケータに応答して前記述語トリガカウンタをデクリメントする、Ｃ１に記載の方法。
［Ｃ３］
条件的に実行される前記１組の命令の中の前記複数の命令のうちの前記少なくとも１つは、出力レジスタにデータを書き込む、Ｃ１に記載の方法。
［Ｃ４］
前記１組の命令はソフトウェアパイプライン化されたループとして実行され、前記述語トリガカウンタは、前記ソフトウェアパイプライン化されたループのパイプラインステージの数に基づく、Ｃ３に記載の方法。
［Ｃ５］
ループ命令を処理する方法であって、
述語トリガカウントを含む特殊レジスタ内でループパラメータを初期化することと、
前記ループ命令を実行することと、
ループ終了インジケータを伴う命令を実行することと、
前記述語トリガカウントを修正し、ループカウントを修正することと、
前記述語トリガカウントが基準値に等しい場合、前記ループ命令のうちの少なくとも１つの実行に影響を及ぼす述語の値を変更することと
を含む、方法。
［Ｃ６］
前記ループ命令はカーネルコードを含むが、前記ループ命令はプロログ命令を含まない、Ｃ５に記載の方法。
［Ｃ７］
前記カーネルコードは、ソフトウェアパイプライン化されたループの１組の命令を含む、Ｃ６に記載の方法。
［Ｃ８］
前記基準値はゼロに等しく、前記述語トリガカウントおよび前記ループカウントは、前記ループ終了インジケータを伴う前記命令を実行することに応答してデクリメントされる、Ｃ５に記載の方法。
［Ｃ９］
前記ループ命令は、前記述語に基づいて条件的に実行される少なくとも１つの命令を含む、Ｃ５に記載の方法。
［Ｃ１０］
前記ループ命令はカーネルコードを含むが、前記ループ命令はプロログ命令を含まない、Ｃ９に記載の方法。
［Ｃ１１］
述語トリガカウントを記憶するための述語カウントレジスタと、
プログラムループのループパラメータを初期化するための初期化論理回路と、
前記プログラムループのループ命令を実行し、ループ終了インジケータを含むパケットを実行するためのプロセッサと、
前記述語トリガカウントを修正し、前記プログラムループのループカウントを修正するための論理回路と、
前記述語トリガカウントを基準値と比較するための比較論理回路と、
前記比較の結果に基づき、前記プログラムループの中の少なくとも１つの命令に影響を及ぼす述語の値を変えるための論理回路と
を備える、機器。
［Ｃ１２］
前記初期化論理回路は、前記ループ命令を実行する前に前記述語をクリアする、Ｃ１１に記載の機器。
［Ｃ１３］
プログラムループのループ終了インジケータを検出するための検出ユニットと、
ループカウントをデクリメントし、述語トリガカウンタをデクリメントするためのデクリメントユニットと、
前記述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニットと
を備える、ハードウェアループ制御論理回路。
［Ｃ１４］
前記プログラムループは、前記述語値に基づいて条件的に実行可能な少なくとも１つの命令を含む、Ｃ１３に記載のハードウェアループ制御論理回路。
［Ｃ１５］
プログラムループのループ終了インジケータを検出するための検出ユニット、
ループカウントをデクリメントし、述語トリガカウンタをデクリメントするためのデクリメントユニット、および
前記述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニット
を備える、ハードウェアループ制御論理回路と、
前記ハードウェアループ制御論理回路の実行をトリガする特殊命令を実行するプロセッサと
を備える、システム。
［Ｃ１６］
前記特殊命令は、ｓｐＮｌｏｏｐ型命令を含み、ただしＮは４より小さい正の整数であり、Ｎは前記述語値を変更する前に実行する前記プログラムループのループ数を示す、Ｃ１５に記載のシステム。
［Ｃ１７］
前記ｓｐＮｌｏｏｐ型命令の実行時に、セットされている前記述語値に先立って値が計算され、前記計算される値は記憶されない、Ｃ１６に記載のシステム。
［Ｃ１８］
前記ｓｐＮｌｏｏｐ型命令は、プログラムループセットアップ情報を含むデータフィールドを含む、Ｃ１６に記載のシステム。
［Ｃ１９］
前記検出ユニットは、前記ループ終了インジケータを検出するためにＶＬＩＷ（超長命令語）パケットを構文解析するように構成され、前記デクリメントユニットは、前記ループ終了インジケータを検出するときに前記述語トリガカウンタを自動的にデクリメントするためのカウンタを含み、前記比較ユニットは、前記述語トリガカウンタの１値から０値への遷移を自動的に識別するための比較器を含む、Ｃ１８に記載のシステム。
［Ｃ２０］
ソフトウェアパイプラインループアプリケーションに関連して前記ｓｐＮｌｏｏｐ型命令を使用する、Ｃ１６に記載のシステム。
［Ｃ２１］
前記プロセッサは、前記ハードウェアループ制御論理回路を含むＶＬＩＷ（超長命令語）型プロセッサであり、前記プロセッサにより、前記プログラムループの中の複数の命令が並列に実行される、Ｃ１７に記載のシステム。
［Ｃ２２］
Ｎは、プロログカウントを示す、Ｃ１８に記載のシステム。
［Ｃ２３］
前記プログラムループの少なくとも１つの命令は、前記述語値に基づいて条件的にデータを記憶する、Ｃ１６に記載のシステム。
【図１】
2014170571.tif 000003
【図２】
2014170571.tif 000004
【図３】
2014170571.tif 000005
【図４】
2014170571.tif 000006
【図５】
2014170571.tif 000007
【図６】
2014170571.tif 000008
【手続補正書】
【提出日】平成26年5月26日(2014.5.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令を受け取ることに応答して、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含むループパラメータを自動的に初期化することと、なお、前記述語トリガカウントは、述語命令が実行される前に実行されるべきループ反復のカウントを示すように構成される；
パケットに含まれる１つまたは複数のループ命令の反復を実行することと、なお、前記パケットは前記述語命令を含む；
前記反復を実行した後で前記パケットに含まれるループ終了インジケータを検出することと；および
前記ループ終了インジケータを検出することに応答して、
前記述語トリガカウントを修正するように、
前記述語トリガカウントを修正した後で述語値をいつセットするのか決定するように、なお、前記述語値をセットする決定は、前記述語トリガカウントと基準との比較に基づいており、および、前記述語命令は、前記述語値に基づいて連続的な次のループ反復の間に条件的に実行される、
ループ制御ハードウェアを自動的にトリガすることと；
を備える、方法。
【請求項２】
前記基準はゼロ値を有し、前記ループ制御ハードウェアは、前記ループ終了インジケータを検出することに応答して前記述語トリガカウントをデクリメントする、請求項１に記載の方法。
【請求項３】
前記述語トリガカウントの値を前記述語トリガカウントの示された値に初期化すること、をさらに備え、前記示された値は前記単一の初期化命令によって示される、請求項１に記載の方法。
【請求項４】
前記１つまたは複数のループ命令はソフトウェアパイプライン化されたループとして実行され、前記述語トリガカウントは、前記ソフトウェアパイプライン化されたループのパイプラインステージのカウントを示す、請求項１に記載の方法。
【請求項５】
述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令を受け取ることに応答して、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含むループパラメータを初期化することと、なお、前記述語トリガカウントは、述語カウントレジスタ内で初期化される、
パケットに含まれる１つまたは複数のループ命令の反復を実行することと、なお、前記反復は前記述語トリガカウントを初期化した後で実行される、
前記パケットに含まれるループ終了インジケータを検出することと、なお、前記ループ終了インジケータは前記反復を実行した後で検出される、
前記ループ終了インジケータを検出することに応答して、前記述語トリガカウントを修正することと、
基準値に等しい第１の値を有する前記述語トリガカウントに応答して、前記１つまたは複数のループ命令うちの少なくとも１つの命令の、後続の実行に影響を及ぼす述語の第２の値を変更することと
を含む、方法。
【請求項６】
前記１つまたは複数のループ命令はプロログ命令を含まない、請求項５に記載の方法。
【請求項７】
前記１つまたは複数のループ命令は、ソフトウェアパイプライン化されたループの１組の命令を具備するカーネルコードを含む、請求項５に記載の方法。
【請求項８】
前記述語トリガカウントは、前記ループ終了インジケータを検出することに応答してデクリメントされる、請求項５に記載の方法。
【請求項９】
前記少なくとも１つの命令の実行は、前記述語に基づいて条件的にデータが記憶されることをもたらす、請求項５に記載の方法。
【請求項１０】
前記パケットは、ＶＬＩＷ（超長命令語）パケットである、請求項９に記載の方法。
【請求項１１】
述語トリガカウントを記憶するように構成された述語カウントレジスタと、
前記述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令の受け取りに応答して、プログラムループのループパラメータを初期化するように構成された初期化論理回路と、なお、前記ループパラメータは、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含む、
前記プログラムループの１つまたは複数のループ命令の反復を実行するように、および前記反復を実行した後でループ終了インジケータを検出するように、構成されたプロセッサと、なお、前記１つまたは複数のループ命令および前記ループ終了インジケータは、パケットに含まれる、
前記ループ終了インジケータに応答して、前記述語トリガカウントを修正するように構成された第１の論理回路と、
前記述語トリガカウントを基準値と比較するように構成された比較論理回路と、
前記比較の結果に少なくとも一部基づき、述語の値を変えるように構成された第２の論理回路と、なお、前記プログラムループの中の少なくとも１つの命令は、前記述語の前記値に条件づけられて実行される、
を備える、機器。
【請求項１２】
前記初期化論理回路は、前記１つまたは複数のループ命令を実行する前に前記述語を初期化するように構成される、請求項１１に記載の機器。
【請求項１３】
述語トリガカウント、開始アドレス、およびループカウントを示す単一の初期化命令の受け取りに応答して、プログラムループのループパラメータを初期化するように構成された初期化ユニットと、なお前記ループパラメータは、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含む、
前記プログラムループの１つまたは複数のループ命令の反復の実行の後で、ループ終了インジケータを検出するように構成された検出ユニットと、なお、前記１つまたは複数のループ命令および前記ループ終了インジケータはパケットに含まれる、
前記ループ終了インジケータの検出に応答して、前記述語トリガカウントをデクリメントするように構成されたデクリメントユニットと、
前記述語トリガカウントを基準と比較して述語値をセットするかどうか決定するように構成された比較ユニットと
を備える、ハードウェアループ制御論理回路。
【請求項１４】
前記プログラムループは、前記述語値に基づいて条件的に実行可能な少なくとも１つの命令を含む、請求項１３に記載のハードウェアループ制御論理回路。
【請求項１５】
システムであって、
ハードウェアループ制御論理回路の実行をトリガする特殊命令を実行するように構成されたプロセッサ、を備え、
前記ハードウェアループ制御論理回路は、
述語トリガカウント、開始アドレス、およびループカウントを示す前記特殊命令の受け取りに応答して、プログラムループのループパラメータを初期化するように構成された初期化ユニットと、なお、前記ループパラメータは、前記述語トリガカウント、前記開始アドレス、および前記ループカウントを含む、
前記プログラムループの１つまたは複数のループ命令の反復の実行の後でループ終了インジケータを検出するように構成された検出ユニットと、なお、前記１つまたは複数のループ命令および前記ループ終了インジケータはパケットに含まれる；
前記ループ終了インジケータに応答して、前記述語トリガカウントをデクリメントするように構成されたデクリメントユニットと、および
前記述語トリガカウントを基準と比較して述語値をセットするかどうか決定するように構成された比較ユニットと
を備える、システム。
【請求項１６】
前記特殊命令は、ｓｐＮｌｏｏｐ型命令を含み、ただしＮは４より小さい正の整数であり、Ｎは前記述語値をセットする前に実行されるべき前記プログラムループのループ数を示す、請求項１５に記載のシステム。
【請求項１７】
前記ｓｐＮｌｏｏｐ型命令の実行に応答して、前記述語値をセットする前に前記プログラムループの命令に関連する値が計算され、前記値は記憶されない、請求項１６に記載のシステム。
【請求項１８】
前記ｓｐＮｌｏｏｐ型命令は、プログラムループセットアップ情報を含むデータフィールドを含む、請求項１６に記載のシステム。
【請求項１９】
前記検出ユニットは、前記ループ終了インジケータを検出するためにＶＬＩＷ（超長命令語）パケットを構文解析するように構成され、前記デクリメントユニットは、前記ループ終了インジケータを検出するときに前記述語トリガカウントを自動的にデクリメントするように構成されている、請求項１８に記載のシステム。
【請求項２０】
ソフトウェアパイプラインループアプリケーションに関連して前記ｓｐＮｌｏｏｐ型命令を使用する、請求項１６に記載のシステム。
【請求項２１】
前記プロセッサは、前記ハードウェアループ制御論理回路を含むＶＬＩＷ（超長命令語）型プロセッサであり、前記プロセッサにより、前記プログラムループの複数の命令が並列に実行される、請求項１５に記載のシステム。
【請求項２２】
Ｎは、整数であり、およびＮの値は、プロログカウントを示す、請求項１８に記載のシステム。
【請求項２３】
前記プログラムループの少なくとも１つの命令の実行は、前記述語値に基づいて条件的にデータが記憶されることをもたらす、請求項１５に記載のシステム。