(57)【要約】デジタルメモリバッファを補助するデジタル情報プロセッサにおいて使用される方法および装置が提供される。本発明の一側面において、デジタル信号プロセッサは、スワップ命令を受信し、このスワップ命令に対して、第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップすることによって応答する。別の側面において、デジタル信号プロセッサは、スワップ命令を受信して、フューチャファイルの第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップし、スワップ命令に応答して１または２以上の制御信号をパイプラインの下流ステージの構造ファイルに生成し、そして１または２以上の制御信号に応答して、構造ファイルの第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップする。
2005524169.tif 000002
【特許請求の範囲】
【請求項１】
第１のアドレスを格納するための第１のアドレスレジスタおよび第２のアドレスを格納するための第２のアドレスレジスタを有する、デジタル情報プロセッサにおける使用の方法であって、
明示的または暗示的に特定される少なくとも２つのアドレスレジスタのためのスワップ動作を指定するスワップ命令に対して、前記第１のアドレスレジスタおよび前記第２のアドレスレジスタの内容をスワップすることによって応答することを含む、前記方法。
【請求項２】
請求項１に記載の方法であって、応答することが、
該スワップ命令を復号化し、スワップ命令を示す信号を生成すること、および
スワップ命令を示す前記信号に対して、第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップすることによって応答することを含む、前記方法。
【請求項３】
請求項２に記載の方法であって、信号に対して応答することが、
第１のアドレスレジスタから第２のアドレスレジスタに第１のアドレスを供給すること、および第２のアドレスレジスタから第１のアドレスレジスタに第２のアドレスを供給することを含む、前記方法。
【請求項４】
請求項２に記載の方法であって、信号に応答することが、
スワップ命令を示す信号を受信し、少なくともそれに応答して制御信号を生成すること、
１または２以上の前記制御信号に応答して、第１のアドレスレジスタから第２のアドレスレジスタに第１のアドレスを供給すること、
１または２以上の前記制御信号に応答して、第２のアドレスレジスタから第１のアドレスレジスタに第２のアドレスを供給すること、および
第２のアドレスレジスタに第１のアドレスを格納し、第１のアドレスレジスタに第２のアドレスを格納することを含む、前記方法。
【請求項５】
第１のアドレスレジスタが第１のメモリバッファに関連付けられ、第２のアドレスレジスタが第２のメモリバッファに関連付けられる、請求項１に記載の方法。
【請求項６】
スワップ命令が、スワップ動作を特定するｏｐコード、第１のアドレスレジスタを特定する第１のオペランド、および第２のアドレスレジスタを特定する第２のオペランドを含む、請求項１に記載の方法。
【請求項７】
第１のアドレスレジスタおよび第２のアドレスレジスタが、それぞれ第１のメモリバッファのためのベースレジスタ、第２のメモリバッファのためのベースレジスタを含む、請求項５に記載の方法。
【請求項８】
第１のアドレスレジスタおよび第２のアドレスレジスタが、それぞれ第１のメモリバッファのためのインデックスレジスタ、第２のメモリバッファのためのインデックスレジスタを含む、請求項５に記載の方法。
【請求項９】
スワップ命令に応答することが、第１のメモリバッファのためのベースレジスタおよび第２のメモリバッファのためのベースレジスタの内容をスワップすることをさらに含む、請求項８に記載の方法。
【請求項１０】
第１のアドレスを格納するための第１のアドレスレジスタ、
第２のアドレスを格納するための第２のアドレスレジスタ、および
明示的または暗示的に特定される少なくとも２つのアドレスレジスタのためのスワップ動作を指定するスワップ命令を受信する回路であって、該スワップ命令に対して、前記第１のアドレスレジスタの内容を前記第２のアドレスレジスタの内容とスワップすることによって応答する、前記スワップ命令を受信する回路
を含む、デジタル情報プロセッサ。
【請求項１１】
請求項１０に記載のデジタル情報プロセッサであって、回路が、
命令を受信し、復号化するため、およびスワップ命令を示す信号を生成するための命令復号器、および
スワップ命令を示す信号に対して、第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップすることによって応答するためのデータアドレス生成器
を含む、前記デジタル情報プロセッサ。
【請求項１２】
データアドレス生成器が、第１のアドレスレジスタから第２のアドレスレジスタに第１のアドレスを供給するため、および第２のアドレスレジスタから第１のアドレスレジスタに第２のアドレスを供給するためのスワップユニットを含む、請求項１１に記載のデジタル情報プロセッサ。
【請求項１３】
請求項１１に記載のデジタル情報プロセッサであって、データアドレス生成器が、
スワップ命令を示す信号を受信し、少なくともそれに応答して制御信号を生成するための制御ユニット、および
第１のアドレスレジスタから第１のアドレスを受信し、また、第２のアドレスレジスタから第２のアドレスを受信し、１または２以上の前記制御信号に対して、第１のアドレスを第２のアドレスレジスタに供給すること、および第２のアドレスを第１のアドレスレジスタに供給することによって応答する、レジスタスワップユニットを含み、
第１のアドレスが第２のアドレスレジスタに格納され、第２のアドレスが第１のアドレスレジスタに格納される、前記デジタル情報プロセッサ。
【請求項１４】
第１のアドレスレジスタが第１のメモリバッファに関連付けられ、第２のアドレスレジスタが第２のメモリバッファに関連付けられる、請求項１０に記載のデジタル情報プロセッサ。
【請求項１５】
スワップ命令が、スワップ動作を特定するｏｐコード、第１のアドレスレジスタを特定する第１のオペランド、および第２のアドレスレジスタを特定する第２のオペランドを含む、請求項１０に記載のデジタル情報プロセッサ。
【請求項１６】
第１のアドレスレジスタからのアドレスおよび第２のアドレスレジスタからのアドレスが、それぞれロード／格納ユニットに供給される、請求項１０に記載のデジタル情報プロセッサ。
【請求項１７】
第１のアドレスレジスタおよび第２のアドレスレジスタが、第１のメモリバッファのためのベースレジスタ、第２のメモリバッファのためのベースレジスタをそれぞれ含む、請求項１４に記載のデジタル情報プロセッサ。
【請求項１８】
第１のアドレスレジスタおよび第２のアドレスレジスタが、第１のメモリバッファのためのインデックスレジスタ、第２のメモリバッファのためのインデックスレジスタをそれぞれ含む、請求項１４に記載のデジタル情報プロセッサ。
【請求項１９】
スワップ命令に対して、第１のメモリバッファのためのベースレジスタの内容および第２のメモリバッファのためのベースレジスタの内容をスワップすることによって応答することをさらに含む、請求項１８に記載のデジタル情報プロセッサ。
【請求項２０】
第１のアドレスを格納するための第１のアドレスレジスタ、
第２のアドレスを格納するための第２のアドレスレジスタ、および
明示的または暗示的に特定される少なくとも２つのアドレスレジスタのためのスワップ動作を指定するスワップ命令に応答して、前記第１のアドレスレジスタおよび前記第２のアドレスレジスタの内容をスワップする手段を含む、デジタル情報プロセッサ。
【請求項２１】
第１のサーキュラバッファの場所に対応する第１のアドレスを含む、第１のアドレスレジスタ；
第２のサーキュラバッファの場所に対応する第２のアドレスを含む、第２のアドレスレジスタ；および
スワップ命令を示す信号を受信し、該信号に対して、前記第１のアドレスレジスタおよび前記第２のアドレスレジスタの内容をスワップすることによって応答する、回路
を含む、データアドレス生成器。
【請求項２２】
回路が、第１のインデックスレジスタから第１のアドレスを受信し、第２のインデックスレジスタから第２のアドレスを受信し、第１のアドレスを第２のインデックスレジスタに供給し、第２のアドレスを第１のインデックスレジスタに供給する、スワップユニットを含む、請求項２１に記載のデータアドレス生成器。
【請求項２３】
請求項２１に記載のデータアドレス生成器であって、一群のサーキュラバッファ内でターゲットアドレスを生成するための装置をさらに含み、各サーキュラバッファは、ベースアドレスと該ベースアドレスのサムおよび長さが等しいエンドアドレスによって画定される境界の間のメモリを広がり、前記装置は、前記バッファＩおよび指定されるオフセットＭ内でアクセスされる以前のアドレス応答し、前記装置は：
前記バッファＩ内でアクセスされる以前のアドレスを格納するためのレジスタ；
メモリ内の前記サーキュラバッファの位置およびサイズを確定する情報を格納するための１組のレジスタ；および
論理演算ユニットであって、Ｉ＋Ｍの値を計算することによって増大されるアドレスを生成し、バッファの長さでＩ＋Ｍの値を変更することによってアドレスを生成するため、および増大されるアドレスと前記サーキュラバッファの境界内のラップされたアドレスの１つを提供するための、前記論理演算ユニットを含む、前記データアドレス生成器。
【請求項２４】
フューチャファイルおよび構造ファイルを有するパイプラインを含むデジタル情報プロセッサにおける使用の方法であって、前記フューチャファイルは、前記構造ファイルに対して上流であり、第１のアドレスレジスタおよび第２のアドレスレジスタを含み、前記構造ファイルは、第１のアドレスレジスタおよび第２のアドレスレジスタを含み、前記方法は：
スワップ命令に応答して、前記フューチャファイルの第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップすること；
１または２以上の制御信号を受信し、スワップ命令に応答して、これを前記フューチャファイルから前記構造ファイルに送ること；および
前記１または２以上の制御信号に応答して、構造ファイルの第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップすることを含む、前記方法。
【請求項２５】
第１のパイプラインステージおよび第２のパイプラインステージを有するパイプラインを含むデジタル情報プロセッサにおける使用の方法であって、前記第１のパイプラインステージは、前記第２のパイプラインステージに対して上流であり、第１のパイプラインステージおよび第２のパイプラインステージは、それぞれ動作を実行可能であり、前記方法は：
命令の受信に応答して、第１のパイプラインステージにおける動作を実行すること；
１または２以上の制御信号を生成し、命令に応答して、これを第１のパイプラインステージから第２のパイプラインステージに送ること；および
前記１または２以上の制御信号の１または２以上に応答して、第２のパイプラインステージの動作を実行することを含む、前記方法。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
発明の分野
本発明はデジタル情報プロセッサに関し、より詳細には、デジタルメモリバッファを補助するデジタル情報プロセッサにおける使用のための方法及び装置に関する。
【０００２】
発明の背景
多くのデジタル情報プロセッサは、一時的に情報を格納するためのデジタルメモリバッファを備える。デジタルメモリバッファは、接続された専用のハードウェアレジスタにより構築されてもよく、またはより大容量のメモリの専用の区分であってもよい。
デジタルメモリバッファの一形態は、サーキュラバッファと呼ばれる。サーキュラバッファにおいて、バッファの第１の場所は、バッファの最近の（last）場所に続くように扱われる。すなわち、バッファ内の連続した場所にアクセスするとき、第１の場所は、自動的に最近の場所に続く。
【０００３】
サーキュラバッファに格納される情報に迅速にアクセスすることが望ましい。例えば、デジタル情報プロセッサは、処理能力を向上させるための実行パイプラインを有してもよいが、このパイプラインを最大限利用するために、情報に対して迅速にアクセスされなければならない。結果として、メモリアドレス（これは、バッファの場所にアクセスするために使用される）は、しばしばハードウェア実行アドレス生成器を使用して生成される。サーキュラバッファ用のハードウェア実行アドレス生成器の一形態は、各サーキュラバッファ用の４つのレジスタ：（１）バッファで一番小さい番号を付されたアドレスを含むベースレジスタＢ、（２）バッファでアクセスされる次のアドレスを含む、インデックスレジスタＩ、（３）増大（または減少）値を含む、変更バッファ（modify register）Ｍ、および（４）バッファの長さを含む、長さレジスタ（length register）Ｌを維持する。
【０００４】
図１は、より大容量のメモリの一部として組み込まれるサーキュラバッファ、およびメモリバッファに関連付けされて維持されうるアドレスレジスタの一例を示す。ベースアドレスは、ベースレジスタＢに格納される。このバッファにおける最も大きいアドレス、つまりアドレス２９は、エンドアドレスと呼ばれ、Ｅで示される。バッファの長さは、長さレジスタＬに格納される。Ｉで示されるインデックスレジスタは、バッファに対するポインタである。インデックスレジスタは、典型的にアクセスされる次の場所のアドレス、例えばアドレス２６を含む。各アクセスの後、ポインタは、所定の数のアドレスだけ増大されるか、または減少されて、サーキュラバッファの次のアクセスに用意される。ポインタが増大されるか、または減少されるアドレススペースの数は、変更量（modify amount）であり、変更レジスタＭに格納される。変更量が変化しうる適用例もあるが、変更量は、変化しない固定された数であるのが普通である。
【０００５】
多くのデジタル情報処理ルーチンは、メモリバッファを利用している。このようなルーチンの１つは、一般に高速フーリエ変換（ＦＦＴ）と呼ばれる。ＦＦＴルーチンは、結果を出すために一連の“バタフライ”演算を用いる。１つのバタフライ演算のこの結果は、次のバタフライ演算の入力データとして使用される。
ほとんどのＦＦＴルーチンは、各バタフライ演算の入力データが特定のメモリバッファ（本明細書において入力バッファと呼ぶ）から読み出されるように書かれ、各バタフライ演算の結果は、別のメモリバッファ（本明細書において出力バッファと呼ぶ）に格納される。各バタフライ演算の結果は、次のバタフライ演算の入力データとして使用されるので、この結果は、次のバタフライ演算が始まる前に入力バッファに“ロード”されなければならない。
【０００６】
結果を入力バッファに“ロード”することができる多種の方法がある。１つの方法は、出力バッファから入力バッファに単純に結果をコピーすることである。しかしながら、１つのバッファから別のバッファに結果をコピーすることは、比較するとかなりの時間が必要となり、多大のオーバーヘッドを付加し、そのためＦＦＴルーチンの性能が下がる。
別の方法においては、以前のバタフライ演算の結果が格納されている出力バッファを指示するように、入力バッファに関連づけされたアドレスレジスタをリダイレクトする（redirect）。併せて、出力バッファに関連づけされたレジスタは、入力バッファに以前使用されたアドレスを指示するように、典型的にリダイレクトされる。これは、バタフライ演算用の入力データを上書きすることなく、所定のバタフライ演算の結果が格納されうるようになされる。入力および出力バッファに関連づけされたアドレスレジスタをリダイレクトすることの全体の効果は、入力バッファの内容が出力バッファの内容とスワップされた場合と同じである。
【０００７】
アドレスレジスタのリダイレクトは、通常以下のように実行される：（１）入力バッファのベースレジスタの内容が出力バッファのベースレジスタの内容とスワップされる（２）入力バッファのインデックスレジスタの内容が出力バッファのインデックスレジスタとスワップされる。
図２Ａは、その内容がスワップされる前の、入力バッファおよび出力バッファのベースレジスタおよびインデックスレジスタの内容を表している。内容がスワップされる前に、
この例において入力バッファと関連付けられるベースレジスタＢ０およびインデックスレジスタＩ０は、バタフライ演算＃１で使用される入力データを指示する。出力バッファと関連付けられるベースレジスタＢ１およびインデックスレジスタＩ１は、バタフライ演算＃１の結果を指示する。
【０００８】
図２Ｂは、その内容がスワップされた後の、入力バッファおよび出力バッファのベースレジスタおよびインデックスレジスタの内容を表している。レジスタの内容がスワップされた後に、入力バッファと関連付けられるベースレジスタＢ０およびインデックスレジスタＩ０は、バタフライ演算＃１の結果を指示する。出力バッファと関連付けられるベースレジスタＢ１およびインデックスレジスタＩ１は、バタフライ演算＃１に使用される入力データを指示する。
図３は、入力バッファのインデックスレジスタおよびベースレジスタの内容を出力バッファのインデックスレジスタおよびベースレジスタの内容とスワップするために広く使用されるルーチンを示す。このルーチンは、６つの命令を含み、一時レジスタＲ０，Ｒ１を使用する。
現在のデジタル情報プロセッサの性能レベルであってもさらなる改善が必要とされる。
【０００９】
発明の要約
本発明の一側面にしたがって、第１のアドレスを格納するための第１アドレスレジスタおよび第２のアドレスを格納するための第２のアドレスレジスタを有するデジタル情報プロセッサにおいて、ある方法が使用される。この方法は、明示的または暗示的に特定される少なくとも２つのアドレスレジスタのためのスワップ動作を指定する、スワップ命令に対して、前記第１のアドレスレジスタおよび前記第２のアドレスレジスタの内容をスワップすることによって応答することを含む。
本発明の別の側面にしたがって、デジタル情報プロセッサは、第１のアドレスを格納するための第１のアドレスレジスタ、第２のアドレスを格納するための第２のアドレスレジスタ、および明示的または暗示的に特定される少なくとも２つのアドレスレジスタのためのスワップ動作を指定するスワップ命令を受信する回路であって、該スワップ命令に対して、前記第１のアドレスレジスタの内容を前記第２のアドレスレジスタの内容とスワップすることによって応答する、前記スワップ命令を受信する回路を含む。
【００１０】
本発明の別の側面にしたがって、デジタル情報プロセッサは、第１のアドレスを格納するための第１のアドレスレジスタ、第２のアドレスを格納するための第２のアドレスレジスタ、および明示的または暗示的に特定される少なくとも２つのアドレスレジスタのためのスワップ動作を指定するスワップ命令に応答して、前記第１のアドレスレジスタおよび前記第２のアドレスレジスタの内容をスワップする手段を含む。
本発明の別の側面にしたがって、データアドレス生成器（ＤＡＧ）は、第１のサーキュラバッファの場所に対応する第１のアドレスを含む、第１のアドレスレジスタ、第２のサーキュラバッファの場所に対応する第２のアドレスを含む、第２のアドレスレジスタ、およびスワップ命令を示す信号を受信し、該信号に対して、前記第１のアドレスレジスタおよび前記第２のアドレスレジスタの内容をスワップすることによって応答する、回路を含む。
【００１１】
実施態様に依存して、スワップ命令は、スワップを実行するための一時レジスタの必要性を完全に排除することができ、これはすなわちレジスタプレッシャー（register pressure）を減少させて、過度のレジスタ要求を原因とする遅延の可能性を減らすことを助ける（この遅延は、実行速度およびプロセッサ上で動くルーチンの性能レベルを減少させる）。また、実施態様に依存して、スワップ命令は、図３のルーチンのようなデータ依存性および関連付けされたいずれの待ちサイクル（wait cycle）を減少させるか、または完全に排除する（データ依存性および待ちサイクルは、実行速度およびプロセッサ上で動くルーチンの性能レベルを減少させうる）。
本発明の別の側面にしたがって、デジタル情報プロセッサにおいて使用される方法は、スワップ命令に応答して、フューチャファイル（future file）における第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップさせること、スワップ命令に応答して、１または２以上の制御信号を生成し、前記フューチャファイルから構造ファイル（architecture file）に送ること、および前記１または２以上の制御信号に応答して、構造ファイルにおける第１のアドレスレジスタおよび第２のアドレスレジスタの内容をスワップすることを含む。
【００１２】
後半に述べられた本発明の側面は、スワップ命令に限定されず、一般にパイプライン化されたデータプロセッサに、特に、動作の結果がパイプラインの１ステージより多く必要とされる状況において適用されうることが理解される。例えば、１ステージでの動作を実行して、結果を後のステージ（単数または複数）にパイプライン化するよりも、実際にこの動作を実行する能力は、パイプラインの１ステージより多くにおいて提供されうる。その後、制御信号のみが、後のステージ（単数または複数）に提供される必要がある（結果は提供される必要がない）。態様に依存して、これは、必要な領域および／またはパワーの減少をもたらす。
上記されたような本発明の１または２以上の側面の１または２以上の態様の潜在的な利点にも拘わらず、本発明のいずれの側面のいずれの態様も従来技術の欠点に対処する上で、絶対的に必要なものはないと理解されるべきである。
【００１３】
詳細な説明
図３に示されるルーチンは、いくつかの欠点を有していると判断されている。第１に、一時レジスタの必要性は、プロセッサ内のレジスタプレッシャ（一時レジスタを要求するレベルの尺度）を増大させる。一時レジスタに対する要求が過剰になると、不足が生じて遅延をもたらし、そして実行速度およびプロセッサで動くルーチンの性能レベルを減少させる。この問題は、比較的少ない一時レジスタを有するプロセッサにおいて特に顕著である。
第２に、このルーチンにおける最後の４つの命令は、１または２以上の以前の命令が完了されるまで実行されえない（本明細書においてデータ依存性と呼ぶ状態）。プロセッサが非常に深いパイプライン（つまり、多数のステージに分割されるパイプライン）を有する場合、待ちサイクルは、これらの依存性のために（つまり、先の命令が完了される前に特定の命令が実行されないことを確認するために）、追加される必要がありうる。したがって、図３のルーチンは６つのみ命令を有するが、８〜１０（またはそれ以上）の命令サイクルがルーチンを完了するために必要とされてもよい。このような時間の間、他の命令は、パイプラインに入力されず、これは、パイプラインを通ずる全体の処理量を減少させ、実行速度およびプロセッサで動くルーチンの性能レベルを減少させる。
【００１４】
したがって、図３のルーチンを用いる必要性を排除することが望ましい。
これは、スワップ命令を提供することで達成されうることが確定的である。
図４Ａは、本発明の一態様にしたがうスワップ命令フォーマット１００の例を示す。この命令フォーマットはｏｐコード、例えば命令をスワップ命令として特定し、１０１で示されるＳＷＡＰ、を有する。また、この命令フォーマットは、２つのオペランド領域を有し、これは例えば、内容がスワップされるアドレスレジスタを特定するアドレスレジスタｉｄ１、アドレスレジスタｉｄ２であり、１０２，１０３で示される。
【００１５】
本明細書で用いられるように、用語スワップは、内容の交換を意味する。これは、いずれの形態でも実行されうる。用語アドレスレジスタは、データアドレスレジスタを指し、メモリ場所にアクセスする際に使用するためのメモリアドレスを含む、いずれかのレジスタとして、またはメモリ場所にアクセスする際に使用するためのメモリアドレスを生成する際に使用するデータを含む、いずれかのレジスタとして定義される。アドレスレジスタの例は、これらに限定されないが、ベースレジスタＢ、インデックスポインタレジスタ（または単にインデックスレジスタ）Ｉ、変更レジスタＭ、長さレジスタＬおよびエンドレジスタＥを含む。アドレスレジスタは、以下に説明されるように、多くの場合データアドレス生成器（ＤＡＧ）に一体化される。
【００１６】
図４Ａの命令フォーマットを用いるスワップ命令の例は：
ＳＷＡＰＩ０，Ｉ１
である。
この命令は、インデックスレジスタＩ１の内容とスワップされるインデックスレジスタＩ０の内容を要求する。
図４Ａの命令フォーマットを用いるスワップ命令の別の例は：
ＳＷＡＰＢ０１，Ｂ０２
である。
この命令は、ベースレジスタＢ１の内容とスワップされるベースレジスタＢ０の内容を要求する。
【００１７】
スワップ命令が利用可能になることで、アドレスレジスタの内容をスワップするために必要な命令の数および命令サイクルの数を減少させ、それによってデジタル情報プロセッサの速度および性能レベルが増大する。またスワップ命令は、一時レジスタの必要性を低減させて、レジスタプレッシャーを減少させ、それにより過度のレジスタ要求を原因とする遅延の可能性を減少させうる（遅延は実行速度およびプロセッサ上で動くルーチンの性能レベルを減少させうることに留意せよ）。
【００１８】
本発明は、図４Ａに示されるスワップ命令フォーマットに限定されず、他のスワップ命令フォーマットが用いられてもよいことが認識されるべきである。
例えば、いくつかの態様において、アドレスレジスタは、命令において指定されずに、例えばｏｐコードに基づいて暗に示される。このような態様において、デジタル情報プロセッサは、例えばスワップ命令が供給されるといつでも自動的に特定のアドレスレジスタをスワップするように構成されてもよい。代替的に、例えば各々が異なるｏｐコードを有する、異なる複数のスワップ命令がサポートされてもよい。異なるｏｐコードは、スワップされる特定のアドレスレジスタを暗示的に特定してもよい。例えば、命令：
ＳＷＡＰ０１
は、アドレスレジスタＩ１の内容とスワップされるアドレスレジスタＩ０の内容を要求してもよい。命令：
ＳＷＡＰ２３
は、アドレスレジスタＩ３の内容とスワップされるアドレスレジスタＩ２の内容を要求してもよい。
【００１９】
いくつかの態様において、単一のスワップ命令は、実行すべき２以上のスワップ動作を起こす。追加のアドレスレジスタは、ｏｐコードに基づいて（例えば上記説明されたように）暗に示されてもよい。代替として、例えば追加のアドレスは、供給されたオペランドに基づいて暗に示されてもよい。例えば、デジタル情報プロセッサは、２つのインデックスレジスタがスワップ命令のオペランドとして供給される場合に、プロセッサがこの２つのインデックスレジスタをスワップし、また、この２つのインデックスレジスタに関連付けられたベースレジスタをスワップするように構成される。例えば一態様において、スワップ命令：
ＳＷＡＰＩ０，Ｉ１
は、（１）Ｉ０レジスタの内容をＩ１レジスタの内容とスワップさせてもよく、また、（２）Ｂ０レジスタの内容をＢ１レジスタの内容とスワップさせてもよい。このような態様の１つが以下に図７Ｂに関連して説明される。
【００２０】
実行されるべき２以上のスワップ動作を起こすスワップ命令を実行するための別の方法は、３以上のオペランド領域を含む命令フォーマットを提供することである。図４Ｂは、３以上のオペランド領域を伴う命令フォーマット１０４の例を示す。命令フォーマット１０４は、ｏｐコード、例えばＳＷＡＰ、を有し、これは命令をスワップ命令として特定し、１０５で示される。命令フォーマットは、４つのオペランド領域、例えばアドレスレジスタｉｄ１、アドレスレジスタｉｄ２、アドレスレジスタｉｄ３およびアドレスレジスタｉｄ４、を有し、これらは、内容がスワップされるアドレスレジスタを特定するものであり、１０６，１０７，１０８，１０９で示される。
【００２１】
図４Ｂの命令フォーマットを用いるスワップ命令の例は：
ＳＷＡＰＩ０，Ｉ１，Ｂ０，Ｂ１
である。
この命令は、インデックスレジスタＩ１の内容とスワップされるインデックスレジスタＩ０の内容を要求し、ベースレジスタＢ１の内容とスワップされるベースレジスタＢ０の内容を要求する。
２以上のスワップ動作を起こすために単一のスワップ命令を使用することは、アドレスレジスタの内容をスワップするために必要なサイクルの数をさらに減少させ、それによりデジタル情報プロセッサの速度および性能レベルを増大させる。いくつかの態様において、アドレスレジスタの内容をスワップするために必要な命令の数は、６つから１つに減少し、命令サイクルの数は、８つ（または９つ以上）から１つにまで減少する。
【００２２】
次に、スワップ命令を実行するデジタル情報プロセッサについて説明する。
図５は、本発明の一態様にしたがって、スワップ命令を受信し、実行するデジタル情報プロセッサ１１０の一部のブロック図である。デジタル情報プロセッサ１１０は、命令復号器１１２、データアドレス生成器（ＤＡＧ）１１４、実行制御ユニット１１６およびロード／格納ユニット１１８を含む。ＤＡＧ１１４は、メモリバッファ（図示せず）にロードし、格納する際に使用するアドレスを提供する。デジタル情報プロセッサ１１０は、単一のモノリシック集積回路として構成されてもよいが、この構成に限定されない。
命令復号器１１２への入力は、ライン１２０で示されるバスに接続される。１２２で示される信号ラインは、命令復号器をＤＡＧに接続する。１２４で示される信号ラインは、命令復号器１１２を実効制御ユニット１１６に接続する。１２６で示される信号ラインは、ＤＡＧ１１４をロード／格納ユニット１１８に接続する。１２８で示される信号ラインは、ロード／格納ユニット１１８を実行制御ユニット１１６に接続する。
【００２３】
動作の際に、命令はフェッチされ（例えば命令キャッシュまたは他のメモリ（図示せず）から）、バス１２０上の命令復号器１１２に提供される。命令がＤＡＧ命令（つまり、ＤＡＧに関係する命令）の場合、命令復号器１１２は、復号化されたＤＡＧ命令および／または他の制御信号を出力し、これらは、信号ライン１２２を通じてＤＡＧ１１４に供給される。命令がＤＡＧ命令ではない（つまり、ＤＡＧと関係がない命令）場合、命令復号器１１２は、復号化された復号化された命令および／または信号ライン１２４を通じて実行／制御ユニット１１６に供給される他の制御信号を出力する。
ＤＡＧ１１４は、ＤＡＧ命令を実行し、適当であれば、メモリバッファでアクセスされるデータのアドレスを出力する。このアドレスは、適宜データをメモリバッファのアドレスへ／アドレスからロードおよび／または格納する、ロード／格納ユニット１１８に向かって信号ライン１２６に供給される。ロード／格納ユニット１１８は、信号ライン１２８によって、データを実行制御ユニット１１６へ／実行制御ユニットから通過させる。
多くの異なるタイプのＤＡＧがあると解されるべきである。本発明は、いずれかの特定のタイプのＤＡＧに関連する使用に限定されない。
【００２４】
図６は、ＤＡＧ１１４（図５）の一態様のブロック図である。この態様は、ＤＡＧ制御ユニット１３０、ＤＡＧ論理演算ユニット（ＤＡＧ  ＡＬＵ）１３２およびＤＡＧレジスタユニット１３４を含む。ＤＡＧレジスタユニット１３４は、４つのレジスタバンク１３６〜１４２、および１または２以上のスワップユニット１１４を含む。この４つのレジスタバンクは、各メモリバッファの長さを示すデータを格納するためのＬレジスタ１３６、各メモリバッファのベースアドレスを格納するためのＢレジスタ１３８、各メモリバッファのインデックスアドレスを格納するためのＩレジスタ、および増大（減少）値を格納するための変更レジスタを含む。インデックスアドレスは、例えば、現在アクセスされているアドレス、またはアクセスされる次のアドレス示す。スワップユニット１４４は、典型的にハードウェアで実行され、さらに以下に説明される。
【００２５】
ＤＡＧ制御ユニット１３０は、信号ライン１２２を介して命令復号器１１２（図５）に接続される。１４６で示される信号ラインは、ＤＡＧ制御ユニット１３０をＬ，Ｂ，Ｉ，Ｍレジスタ１３６〜１４２に接続する。１４８で示される信号ラインは、ＤＡＧ制御ユニット１３０をスワップユニット１４４に接続する。１５０で示される信号ライン、および１５２で示される信号ラインは、ＤＡＧレジスタユニット１３４をＤＡＧ  ＡＬＵ１３２に接続する。またいくつかの態様において、Ｌ，Ｂ，Ｉ，Ｍレジスタ１３６〜１４２は、メモリへ／メモリからロードおよび／または格納するために、アドレスおよび／またはデータバス（図示せず）と接続してもよい。
【００２６】
動作の際に、ＤＡＧ制御ユニット１３０は、命令復号器１１２（図５）から復号化されたＤＡＧ命令および／または制御信号を受信する。このような命令および／または制御信号に応答して、ＤＡＧ制御信号１３０は、ＤＡＧ命令を実行するために使用される制御信号を生成する。用語“応答する”は、“少なくとも応答する”の意であり、２以上のものに応答することを排除しない。ここで、例えばＤＡＧ制御ユニット１３０は、Ｌ，Ｂ，Ｉ，Ｍレジスタ１３６〜１４２に供給されるＬ，Ｂ，Ｉ，Ｍレジスタ制御信号を生成する。また、ＤＡＧ制御ユニット１３０は、スワップ制御命令およびＡＬＵ制御信号を生成する。スワップ制御信号は、スワップユニット１４４に供給される。スワップユニット１４４は、スワップ制御命令に応答して適切なアドレスレジスタの内容をスワップする。ＡＬＵ制御命令は、ＤＡＧ  ＡＬＵ１３２に供給される。ＤＡＧレジスタユニット１３４は、Ｌ，Ｂ，Ｉ，Ｍレジスタそれぞれ１つの内容を示す出力信号Ｌ  ｏｕｔ、Ｂ  ｏｕｔ、Ｉ  ｏｕｔ、Ｍ  ｏｕｔを提供する。これらの信号はＤＡＧ  ＡＬＵ１３２およびロード／格納ユニット１１８（図５）に供給される。ＤＡＧ  ＡＬＵ１３２は、演算を実行して、ＤＡＧレジスタユニット１３２に供給され、Ｌ，Ｂ，Ｉ，Ｍレジスタ１３６〜１４３のそれぞれ１つに格納される、新しいアドレスＬ  ｉｎ、Ｂ  ｉｎ、Ｉ  ｉｎ、Ｍ  ｉｎを生成する。
【００２７】
図７Ａは、レジスタユニット１３４（図６）の一態様の一部のブロック図である。この態様において、レジスタユニットは、以下に説明されるように、Ｂレジスタ１３８の内容をスワップすることができ、Ｉレジスタ１４０の内容をスワップすることができる。
この態様において、レジスタユニットは、Ｂレジスタバンク１３８、Ｂレジスタスワップユニット１６０、Ｉレジスタバンク１４０およびＩレジスタスワップユニット１６２を含む。Ｂレジスタバンク１３８は、４つのレジスタＢ０〜Ｂ３を含む。Ｉレジスタバンク１４０は、４つのレジスタＩ０〜Ｉ３を含む。それぞれのＢレジスタおよびそれぞれのＩレジスタは、自身のＣＬＫ信号（図示せず）をＤＡＧ制御ユニット（図６）から受信するＣＬＫ入力を有する。
【００２８】
レジスタユニットは、Ｂ  ｏｕｔ  ｍｕｘ１６６およびＩ  ｏｕｔ  ｍｕｘ１７０をさらに含む。それぞれ、ＤＡＧ制御ユニット（図６）からの制御信号（図示せず）によって制御される。Ｂ  ｉｎ信号は、信号ライン１５０を介して、Ｂレジスタスワップユニット１６０の第１の組の入力（ｉｎ０）に供給される。Ｂレジスタスワップユニット１６０の出力は、１８２〜１８８で示される信号ラインを介して、Ｂレジスタバンク１３８の入力に接続される。Ｂレジスタバンク１３８の出力は、１９０〜１９６で示される信号ラインを介して、Ｂレジスタスワップユニット１６０の第２の組の入力（ｉｎ１）、およびＢ  ｏｕｔ  ｍｕｘ１６６の入力に接続される。Ｂ  ｏｕｔ  ｍｕｘ１６６の出力は、信号ライン１５２上にＢ  ｏｕｔ信号を提供する。
【００２９】
Ｉ  ｉｎ信号は、信号ライン１５０を介して、Ｉレジスタスワップユニット１６２の第１の組の入力（ｉｎ０）に供給される。Ｉレジスタスワップユニット１６２の出力は、２０６〜２１２で示される信号ラインを介して、Ｉレジスタバンク１４０の入力に接続される。Ｉレジスタバンク１４０の出力は、２１４〜２２０で示される信号ラインを介して、Ｉレジスタスワップユニット１６２の第２の組の入力（ｉｎ１）、およびＩ  ｏｕｔ  ｍｕｘ１７０の入力に接続される。Ｉ  ｏｕｔ  ｍｕｘ１７０の出力は、信号ライン１５２上にＩ  ｏｕｔ信号を提供する。
この態様のＢレジスタスワップユニット１６０は、Ｂ０／Ｂ１スワップユニット２２２およびＢ２／Ｂ３スワップユニット２２４を含む。Ｉレジスタスワップユニット１６２は、Ｉ０／Ｉ１スワップユニット２２６およびＩ２／Ｉ３スワップユニット２２８を含む。これら４つのスワップユニット２２２〜２２８は、互いに同一のものである。スワップユニットは、ＤＡＧ制御ユニット１３０（図６）から信号ライン１４８上のスワップ制御命令を受信するために、ラインを選択する。例えばこの態様において、ＤＡＧ制御ユニット（図６）からのスワップ制御信号は、以下の４つの制御信号：Ｂ０／Ｂ１スワップ信号、Ｂ２／Ｂ３スワップ信号、Ｉ０／Ｉ１スワップ信号およびＩ２／Ｉ３スワップ信号を含む。Ｂ０／Ｂ１スワップ信号は、Ｂ０／Ｂ１スワップユニット２２２の選択ラインｓｅｌに供給される。Ｂ２／Ｂ３スワップ信号は、Ｂ２／Ｂ３スワップユニット２２４の選択ラインｓｅｌに供給される。Ｉ０／Ｉ１スワップ信号は、Ｉ０／Ｉ１スワップユニット２２６の選択ラインｓｅｌに供給される。Ｉ２／Ｉ３スワップ信号は、Ｉ２／Ｉ３スワップユニット２２８の選択ラインｓｅｌに供給される。
【００３０】
次に、スワップユニットの動作が、Ｂ０／Ｂ１スワップユニット２２２を参照して説明される。Ｂ０／Ｂ１スワップユニット２２２は、２つの動作状態、具体的にはスワップ状態および非スワップ状態を有する。スワップ状態において、Ｂ０／Ｂ１スワップユニット２２２は、Ｂ０レジスタの内容がＢ１レジスタの内容とスワップされることを可能にする。非スワップ状態において、Ｂ０／Ｂ１スワップユニット２２２は、信号ライン１５０上のＢ  ｉｎ信号とＢレジスタ１３８との間に透過的な接続（transparent connection）を提供する。
動作状態の選択は、Ｂ０／Ｂ１スワップユニット２２２の選択入力に提供される、Ｂ０／Ｂ１スワップ信号の論理状態によって制御される。この態様において、Ｂ０／Ｂ１スワップ信号が第１の論理状態（例えば論理ｈｉｇｈ状態、‘‘１’’）を有する場合、Ｂ０／Ｂ１スワップユニットは、スワップ動作状態である。Ｂ０／Ｂ１スワップ信号が等しい第２の論理状態（例えば論理ｌｏｗ状態、‘‘０’’）を有する場合、Ｂ０／Ｂ１スワップユニットは、非スワップ動作状態である。
【００３１】
スワップ状態において、スワップユニット２２２のｍｕｘ０は、Ｂ１レジスタの出力を選択し、スワップユニット２２２のｍｕｘ１は、Ｂ０レジスタの出力を選択する。ＣＬＫラインにパルスが提供される場合、Ｂ０レジスタは、Ｂ１レジスタの内容を格納し、Ｂ１レジスタは、Ｂ０レジスタの内容を格納する、つまり、Ｂ０レジスタの内容とＢ１レジスタの内容がスワップされる。
非スワップ動作状態において、スワップユニット２２２のｍｕｘ０は、信号ライン１５０上のＢ  ｉｎ信号を選択し、スワップユニット２２２のｍｕｘ１は、信号ライン１５０上のＢ  ｉｎ信号を選択する。Ｂ０レジスタまたはＢ１レジスタにそのＣＬＫライン上のパルスが提供される場合、パルスが提供されたレジスタは、信号ライン１５０上のＢ  ｉｎ信号によって提供されるアドレスを格納する。
他のスワップユニット２２４〜２２８は、Ｂ０／Ｂ１スワップユニット２２２と同様にして動作する。したがって、Ｂ２／Ｂ３スワップユニット２２４は、Ｂ２レジスタの内容がＢ３レジスタの内容とスワップされることを可能にする。Ｉ０／Ｉ１スワップユニット２２６は、Ｉ０レジスタの内容がＩ１レジスタの内容とスワップされることを可能にする。Ｉ２／Ｉ３スワップユニット２２８は、Ｉ２レジスタの内容がＩ３レジスタの内容とスワップされることを可能にする。
【００３２】
上述したように、いくつかの態様において、単一のスワップ命令は、２以上のスワップ動作を実行させることを可能にする。いくつかの態様において、これは、追加のオペランド領域を含む（例えば図４Ｂのように）スワップ命令を提供することによって実行される。他の態様においては、追加のアドレスレジスタは暗に示される。
例えば、他の態様において、スワップ命令ＳＷＡＰＩ０，Ｉ１は、Ｉ０レジスタの内容とＩ１レジスタの内容とをスワップさせ、また、Ｂ０レジスタの内容とＢ１レジスタの内容とをスワップさせる。これは、スワップ命令ＳＷＡＰＩ０，Ｉ１がＤＡＧ制御ユニット１３０にＩＯ／Ｉ１スワップ信号およびＢ０／Ｂ１スワップ信号をアサートさせるように、ＤＡＧ制御ユニット１３０を構成することによって実行されてもよい。同様に、スワップ命令ＳＷＡＰＩ２，Ｉ３は、Ｉ２レジスタの内容とＩ３レジスタの内容とをスワップさせてもよく、また、Ｂ２レジスタの内容とＢ３レジスタの内容とをスワップさせてもよい。これは、スワップ命令ＳＷＡＰＩ２，Ｉ３がＤＡＧ制御ユニット１３０にＩ２／Ｉ３スワップ信号およびＢ２／Ｂ３スワップ信号の両方をアサートさせるように、ＤＡＧ制御ユニット１３０を構成することによって実行されてもよい。これは、図７Ａの態様において、適切な制御信号をアサートすることによって実行されうる。
【００３３】
図７Ｂは、このような態様の別の実施例を示す。図７Ｂの実施例では、ＤＡＧ制御ユニット１３０（図８）からの信号ライン１４８上のスワップ制御信号が、２つの制御信号、つまりＩ０／Ｉ１／Ｂ０／Ｂ１スワップ信号およびＩ２／Ｉ３／Ｂ２／Ｂ３スワップ信号を含む点を除いて、この実施例は、図７Ａの実施例と同一のものである。Ｉ０／Ｉ１／Ｂ０／Ｂ１スワップ信号は、Ｂ０／Ｂ１スワップユニット２２２の選択ラインおよびＩ０／Ｉ１スワップユニット２２６の選択ラインに供給される。Ｉ２／Ｉ３／Ｂ２／Ｂ３スワップ信号は、Ｂ２／Ｂ３スワップユニット２２４の選択ラインおよびＩ２／Ｉ３スワップユニット２２８の選択ラインに供給される。
上述したように、スワップ命令を実行するための能力を提供することは、アドレスレジスタの内容をスワップするために必要な命令サイクルの数を減少させ、それによりデジタル情報プロセッサの速度および性能レベルが増大する（データ依存性および待ちサイクルは、プロセッサ上で動くルーチンの実行速度および性能レベルを減少させることに留意せよ）。また、この能力を提供することは、一時レジスタの必要性を減少させ、これはレジスタプレッシャーを減らし、それにより過度のレジスタ要求を原因とする遅延の可能性が減少する（遅延は、プロセッサ上で動くルーチンの速度および性能レベルを減少させうることに留意せよ）。
【００３４】
図７Ａ，図７Ｂは、スワップユニットを有するＤＡＧレジスタユニットの多種の態様を示していると認識されるべきである。しかしながら、ＤＡＧレジスタユニットおよびスワップユニット（単数または複数）は、図示される実施例に限定されない。例えば、スワップユニットは、多くの方法で実施されうる。マルチプレクサを使用することは１つの方法にすぎない。例えば、マルチプレクサは、それぞれが異なるイネーブル信号（enable signal）を受信するトリステートドライバの群で置き換えられうる。トリステートドライバへのイネーブルは、例えばスワップ制御信号に基づいていることができる。またマルチプレクサは、組み合わせ論理によって置き換えられうる。したがって、例えば本発明は、どのようにスワップが実行されるかに限定されない。
【００３５】
図８は、パイプライン２４０の一態様を示す。このパイプライン２４０は、一連のステージ、７つが図示される、つまりＩＦ１，ＩＦ２，ＤＣ，ＡＣ，ＬＳ，ＥＸ１，ＷＢ、を有する。パイプライン２４０は、各アドレスレジスタの２つのバージョン（例えば２つのＬレジスタ、２つのＢレジスタ、２つのＩレジスタ、２つのＭレジスタ）を含むＤＡＧに関連して動作する。各レジスタの１つのバージョンは、本明細書において集合的にフューチャファイルと呼ばれ、２４２で示される。各レジスタのもう一方のバージョンは、本明細書において集合的に構造ファイルと呼ばれ、２４４で示される。フューチャファイル２４２および構造ファイル２４４は、ＤＡＧパイプライン２４６で接続される。以下にさらに説明されるように、フューチャファイル２４２は、メモリバッファにアクセスするために使用される一連の生成および変更アドレスにおいて読み込まれ、アップデートされる。フューチャファイル２４２は、アドレスレジスタの理論的な状態（speculative state）を示すことが多い。一方、構造ファイル２４４は、命令が実行を完了したときに、命令に準じてアップデートされる。各アドレスレジスタの２つのバージョンを使用することで、予想に誤りがあった場合のみ、ハードウェアが処理量を減少させて命令を理論的に実行することを可能にする。
【００３６】
命令は、パイプライン２４０に挿入され、命令の実行が完了されるまでパイプラインステージを介して処理される。より詳細には、２４８で示される命令は、ＩＦ１ステージでフェッチされる。ＩＦ２ステージにおいて、命令２４８は復号化され（２５０）、ＤＡＧ命令か、または非ＤＡＧ命令かが特定される。命令２４８がＤＡＧ命令２５２の場合、ＤＣステージでフューチャファイル２４２のＩレジスタおよびＭレジスタが読み出される（２５４で示される）。
ＡＣステージにおいて、ＤＡＧは、ロード／格納ユニット２６０に供給されるアドレス２５６を生成する。ＤＡＧスワップ命令は、例えば図４〜図７Ｂに関連して上述されたようにして実行される。ＬＳステージにおいて、ＤＡＧによって生成されたアドレスは、ロード／格納ユニット２６０に供給され（２５８）、これは、それに応答してデータをロードする。ＤＡＧによって生成されたアドレスは、フューチャファイル２４２に格納される。それに加えて、ＤＡＧ情報は、図９に関連して説明されたように、ＤＡＧ情報を構造ファイル２４４に送るために使用されるＤＡＧパイプライン２４６に入力される。
【００３７】
ＡＬＵ動作２６２は、ＥＸステージ（単数または複数）で実行される。ＷＢステージにおいて、ＡＬＣ動作の結果が格納され（２６４）、それにより命令の実行を完了する。完了すると、ＤＡＧパイプラインからの情報は、構造ファイル２４４をアップデートするために使用される。この方法において、構造ファイル２４４は、パイプライン２４０を脱するために最近の命令に順ずるアドレスレジスタの状態を示すが、現在のパイプライン２４０における命令の効果は示さない。
いくつかの態様において、ＤＡＧは、所定のいずれの命令サイクルにおいて、新しいアドレスを２つまで生成する。両方の新しいアドレスは、構造ファイルに転送され、そしてその結果、ＤＡＧパイプラインアドレスバスは、一度に２つのアドレスを転送するために十分に広い。
【００３８】
スワップ命令が、所定のいずれの命令サイクルにおいて３以上のアドレスレジスタ変更しない場合、２アドレス幅のバス（two-address-wide bus）は、スワップ命令の結果を転送するために十分に広いと認識されるべきである。しかしながら、スワップ命令が所定のいずれの命令サイクルにおいて２以上のスワップ動作を引き起こす場合（つまり、３以上のアドレスレジスタをスワップする場合）、この状態は複雑となる。例えば、図７Ｂに関連して上記説明されたスワップ命令は、Ｉ０レジスタの内容をＩ１レジスタの内容とスワップさせ、Ｂ０レジスタの内容をＢ１レジスタの内容とスワップさせる。このようなスワップ命令は、単一の命令サイクルで４つのアドレスレジスタ（Ｉ０レジスタ，Ｉ１レジスタ，Ｂ０レジスタおよびＢ１レジスタ）を変更する。
【００３９】
２アドレス幅のバスは、一度に４つのアドレスを転送するために十分な程広くない。アドレスバスの幅は、４つのアドレスを一度に転送するために２倍に（つまり、２つのアドレスの幅から４つのアドレスの幅に）される必要がある。アドレスバスの幅を２倍にすることは、ＤＡＧパイプラインで必要とされるレジスタの数を２倍にすることになり、それによりチップ領域および電力消費が増大することになる。
図９は、この状況に取り組むために適応するＤＡＧの一態様を示し、ここで、スワップ命令は、命令サイクルにおいて２以上のスワップ命令を引き起こす。この態様において、このようなスワップ命令の結果は、ＤＡＧパイプラインを通じて転送されない。それどころか２つのスワップユニットが利用され、１つのスワップユニットは、パイプラインの他方の下流（downstream）である。スワップ命令が受信されるとき、上流（upstream）のスワップユニットは、フューチャファイルのスワップ動作を実行する。制御信号（新しい４つのアドレスではなく）が生成され、パイプラインを介して下流のスワップユニットに転送され、そして構造ファイルのスワップ動作を実行する。全体の効果は、新しい４つのアドレスがパイプラインを介して転送された場合と同じであるが、アドレスバスのサイズを２倍にする必要がない。
【００４０】
この態様において、ＤＡＧは、上流部２７０、ＤＡＧパイプライン２７２および下流部２７４を含む。上流部２７０は、ＤＡＧ制御ユニット２７６、ＤＡＧ  ＡＬＵ２７８、ならびにＬ，Ｂ，Ｉ，Ｍレジスタ２８２（つまりフューチャファイル）および１または２以上のスワップユニットを含むレジスタユニット２８０を含む。ＤＡＧ制御ユニット２７６、ＤＡＧ  ＡＬＵ２７８、およびレジスタユニット２８０は、例えば、図５〜図７Ｂに関連して上記説明された、ＤＡＧ制御ユニット１３０、ＤＡＧ  ＡＬＵ１３２、およびレジスタユニット１３４にそれぞれ類似するものでもよい。
上流部は、２８５で示される信号ラインによって供給されるＤＡＧ命令を受信する。ＤＡＧ  ＡＬＵ２７８は、新しいアドレスを生成するために演算を実行し、スワップユニット２８４（単数または複数）は、アドレスレジスタの内容を適宜スワップする。ＤＡＧ制御ユニット２７６およびスワップユニット（単数または複数）２８４は、単一のスワップ命令が、単一の命令サイクルで２以上のスワップ動作を実行させるように構成される。このような構成は、スワップ命令が４つ（または５以上）のアドレスレジスタを単一の命令サイクルで変更してもよいことを意味する。
【００４１】
下流部２７４は、制御ユニット２８６、ならびにＬ，Ｂ，Ｉ，Ｍレジスタ２９０（つまり構造ファイル）および１または２以上のスワップユニット２９２を含むレジスタユニット２８８を含む。レジスタユニット２８８は、例えば、図６〜図７Ｂに関連して上記説明されたレジスタユニット１３４と類似のものでもよい。上記説明されたように、ＤＡＧの下流部２７４のレジスタユニット２８８の１または２以上のスワップユニット２９２を提供することは、スワップ命令の結果をＤＡＧの下流部２７４に転送することを不必要にする。
ＤＡＧパイプライン２７２は、上流部２７０を下流部２７４に接続する。この態様において、パイプライン２７２は、第１、第２および第３のパイプライン化されたデータパス２９４〜２９８を含む。それぞれのパイプライン化されたパス２９４〜２９８は、一連のパイプライン化されたレジスタステージを含む。つまり、第１のパイプライン化されたデータパスは、パイプライン化されたレジスタステージ２９４１〜２９４Ｎを含む。第２のパイプライン化されたデータパスは、パイプライン化されたレジスタステージ２９６１〜２９６Ｎを含む。第３のパイプライン化されたデータパスは、パイプライン化されたレジスタステージ２９８１〜２９８Ｎを含む。
【００４２】
上流部２７０からの結果を下流部２７４に送るためにパイプラインを提供することによって、システム設計者は、下流部２７４の複雑さを減少させることができる。例えば、ＤＡＧの上流部２７０とは異なり、ＤＡＧの下流部２７４は、ＤＡＧ命令を受信し、それに応答することができる制御ユニットを必要としない。新しいアドレスを生成するために演算を実行するＡＬＵもまた必要としない。
第１のデータパス２９４および第２のデータパス２９６は、ＤＡＧ  ＡＬＵ２７８によって生成されたアドレスを転送するためにそれぞれ使用される。結果的に、第１のデータパス２９４のレジスタステージ２９４１〜２９４Ｎおよび第２のデータパスのレジスタステージ２９６１〜２９６Ｎは、典型的に少なくともＤＡＧアドレスレジスタの幅と同じ広さの幅である。ＤＡＧの下流部２７４における制御ユニットは、第１および/または第２のデータパス２９４，２９６からアドレスを受信し、このアドレスは、構造ファイル２９０の適切なアドレスレジスタにコピーされる。
【００４３】
第３のデータパス２９８は、スワップ命令に関する情報を使用される。上述したように、ＤＡＧの上流部２７０およびＤＡＧの下流部２７４は、それぞれ１または２以上のスワップユニットを有するので、ＤＡＧの下流部２７４へのスワップ命令の結果をパイプライン化する必要がない。したがって、第３のデータパスのレジスタステージ２９８１〜２９８Ｎは、第１のデータパス２９４のレジスタステージ２９４１〜２９４Ｎ、第２のデータパス２９６のレジスタステージ２９６１〜２９６Ｎほど広い必要はない。いくつかの態様において、第３のデータパス２９８は、ＤＡＧの上流部２７０がスワップ命令を受信したかどうかを示す信号を単に転送する。他の態様において、第３のデータパス２９８は、内容がスワップされるアドレスレジスタを示す信号を転送するために使用されてもよい。レジスタユニットの適切なレジスタの内容がスワップされるように、ＤＡＧの下流部２７４が第３のデータパス２９８から信号（単数または複数）を受信するとき、制御ユニット２８６は、制御信号を下流部２７４のレジスタユニット２８８に提供する。
【００４４】
したがって、ＤＡＧの下流部のレジスタユニットにおける１または２以上のスワップユニットを提供することは、スワップ命令の結果をＤＡＧの下流部に転送する必要性を排除することを助ける。これは、２つのベースレジスタおよび２つのインデックスレジスタの内容をスワップするスワップ命令を、４つのアドレスを一度にパイプラインすることを必要とせずに実施することを可能にする。実際にこの態様においては、このスワップ命令に関連していずれのアドレスも転送する必要がないので、スワップ命令は構造ファイル上で、第１または第２のデータパス２９４，２９６を使用することを必要とせずとも実施される。４つのアドレスを一度にパイプライン化するために、２つの追加のデータパスが必要となり、これはデータ情報プロセッサのコスト、大きさおよび/または電力消費を増大させることに注意すべきである。
【００４５】
本発明の側面は、スワップ命令に限定されず、一般にパイプライン化された情報処理に適用されうること、特に、動作の結果がパイプラインの２以上で必要になる状況において適用されうることが認識される。例えば、１つのステージで動作が実行され、結果が後のステージ（単数または複数）にパイプライン化されるのではなく、実際に動作を実行する能力は、パイプラインの２以上のステージに提供される。これは、各ステージにオペレータ（つまり実行ユニット）を提供することによって達成される。その後、制御信号のみ（完了結果ではなく）がこれらのステージに提供される必要があり、ここで、制御信号がオペレータの各ステージにおける動作の実行を指示する。
【００４６】
上記のデータアドレス生成器は、制御ユニット、ＡＬＵ、およびアドレスレジスタの４つのバンクを備えたレジスタユニットを含むが、データ生成器はこの構成に限定されないと理解されるべきである。データアドレス生成器は、アドレスレジスタに格納されるアドレスを生成することができること、およびアドレスレジスタの内容を変更することを必要とするのみである。さらに、本発明は、データアドレス生成器に関連する使用に限定されないことが理解されるべきである。
多種の態様が示され、説明されるが、本発明はこれらの態様に限定されず、例示の目的により示されるのみであり、多種の改変および変更が、本発明の精神および範囲を逸脱することなくなされうることが当業者に理解されるだろう。したがって、本発明は、添付の請求の範囲およびそれに等価のものによってのみ限定される。
【図面の簡単な説明】
【００４７】
【図１】大容量メモリの一部として組み込まれるサーキュラバッファの例を示す図である。
【図２Ａ】入力バッファおよび出力バッファに関連するアドレスレジスタの内容をスワップする前の、入力バッファおよび出力バッファのためのベースレジスタおよびインデックスレジスタの内容を表す図である。
【図２Ｂ】入力バッファおよび出力バッファに関連するアドレスレジスタの内容をスワップする後の、入力バッファおよび出力バッファのためのベースレジスタおよびインデックスレジスタの内容を表す図である。
【図３】入力バッファのインデックスレジスタおよびベースレジスタの内容を出力バッファのインデックスレジスタおよびベースレジスタの内容とスワップするために広く用いられるルーチンを示す図である。
【図４Ａ】本発明の一態様にしたがうスワップ命令フォーマットの例を示す図である。
【図４Ｂ】本発明の一態様にしたがう別のスワップ命令フォーマットの例を示す図である。
【図５】本発明の一態様にしたがって、スワップ命令を受信し、実行するデジタル情報プロセッサの一部のブロック図である。
【図６】図５のＤＡＧの一態様のブロック図である。
【図７Ａ】図６のレジスタユニットの一態様の一部のブロック図である。
【図７Ｂ】図６のレジスタユニットの別の態様の一部のブロック図である。
【図８】本発明の一態様にしたがって、スワップ命令を受信し、実行することができるデジタル情報プロセッサパイプラインの一例を表す図である。
【図９】図８のパイプラインで使用されうるＤＡＧの一様のブロック図である。
【図１】
2005524169.tif 000003
【図２Ａ】
2005524169.tif 000004
【図２Ｂ】
2005524169.tif 000005
【図３】
2005524169.tif 000006
【図４Ａ】
2005524169.tif 000007
【図４Ｂ】
2005524169.tif 000008
【図５】
2005524169.tif 000009
【図６】
2005524169.tif 000010
【図７Ａ】
2005524169.tif 000011
【図７Ｂ】
2005524169.tif 000012
【図８】
2005524169.tif 000013
【図９】
2005524169.tif 000014
【国際調査報告】
2005524169.tif 000015
2005524169.tif 000016
2005524169.tif 000017