(57)【要約】プロセッサはアドレスの制御下で物理メモリにアクセスするメモリポートを含む。処理ユニットは、メモリに記憶された命令を実行するか、および／または、メモリに記憶されたデータに作用する。アドレス発生ユニット（ＡＧＵ）はメモリへのアクセスを制御するアドレスを発生し、ＡＧＵは、アドレス発生メカニズムの制御下でＡＧＵにアドレスを発生させることができる複数のＮ個のレジスタが関連付けられる。メモリユニットは、２＜＝ｋ＜＝Ｎであるとき、１回の演算によってトリガーされたＮ個のうちのｋ個のレジスタをセーブ／ロードするため機能する。このため、メモリユニットは、ｋ個のレジスタを、メモリポートを介してメモリへ書き込むことができる１個のメモリワードに連結する連結部と、メモリポートを介してメモリから読み出されたワードをｋ個のレジスタに分離するスプリッタと、を含む。
2005527036.tif 000002
【特許請求の範囲】
【請求項１】
アドレスの制御下で物理メモリにアクセスするメモリポートと、
前記メモリに格納された命令を実行する、および／または、前記メモリに格納されたデータを処理する少なくとも一つの処理ユニットと、
前記メモリへのアクセスを制御するアドレスを発生するアドレス発生ユニットであって、複数のＮ個のレジスタからなる少なくとも第１のレジスタセットと関連付けられ、前記レジスタセットによってアドレス発生メカニズムの制御下で前記アドレスを発生することができる少なくとも一つのアドレス発生ユニットと、
２＜＝ｋ＜＝Ｎが成り立つとき、１オペレーションによってトリガーされ、前記Ｎ個のレジスタのうちのｋ個のレジスタをセーブ／ロードするために動作するメモリユニットであって、前記ｋ個のレジスタを、前記メモリポートを介して前記メモリへ書き込まれる１メモリワードに連結する連結部、および、前記メモリポートを介して前記メモリから読み出されたワードを前記ｋ個のレジスタに分離するスプリッタを備えたメモリユニットとを含むプロセッサ。
【請求項２】
前記メモリユニットが前記メモリの１回の書き込み／読み出しサイクルで前記セーブ／ロードを実行するために動作することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
ｋ＝Ｎであることを特徴とする請求項１に記載のプロセッサ。
【請求項４】
アドレス発生ユニットがアドレス発生メカニズムの制御下でアドレスを発生可能とする複数のレジスタからなる少なくとも一つの他のレジスタセットを含み、
前記連結部が、前記他のレジスタセットのうちの少なくとも一つの他のレジスタを、前記メモリポートを介して前記メモリへ書き込まれる前記１メモリワードに連結し、前記スプリッタが、前記メモリポートを介して前記メモリから読み出されたワードを、前記第１のレジスタセットのうちのそれぞれの前記ｋ個のレジスタと、前記少なくとも一つの他のレジスタセットのうちの少なくとも一つの他のレジスタとに分離するために動作することを特徴とする請求項１から請求項３のいずれかに記載のプロセッサ。
【請求項５】
少なくとも二つのアドレス発生ユニットを含み、各アドレス発生ユニットが前記メモリへのアクセスを制御するアドレスを発生し、前記アドレス発生ユニットのそれぞれが複数のレジスタからなる前記レジスタセットのうちの対応した一つのレジスタセットに関連付けられていることを特徴とする請求項４に記載のプロセッサ。
【請求項６】
前記アドレス発生ユニットが少なくとも二つのレジスタセットに選択的に接続可能であり、それぞれのレジスタセットが前記アドレス発生ユニットにアドレス発生メカニズムの制御下で対応したアドレスを発生させることを可能とすることを特徴とする請求項４に記載のプロセッサ。
【請求項７】
前記連結部が、少なくとも二つのレジスタセットのうちのすべてのそれぞれの関連付けられたレジスタを、前記メモリポートを介して前記メモリへ書き込まれる１メモリワードに連結するために動作し、前記スプリッタが前記メモリポートを介して前記メモリから読み出されたワードを、前記少なくとも二つのレジスタセットのうちのすべての前記それぞれの関連付けられたレジスタに分離するために動作することを特徴とする請求項３および請求項４に記載のプロセッサ。
【請求項８】
前記プロセッサは、各前記レジスタを１オペレーションでセーブまたは格納する必要がある個々のレジスタセットを選択可能であり、
前記メモリユニットは、前記選択されたレジスタセットに対する１メモリワードに連結するため、あるいは、当該メモリワードから分離するために動作することを特徴とする請求項４または請求項５に記載のプロセッサ。
【請求項９】
前記プロセッサは、１プロセッサワードの最小サイズを有するオペランドに作用するために動作し、
前記メモリワードが前記プロセッサワードのサイズの倍数の幅を有し、
前記連結部が当該プロセッサによってレジスタを直接変更することができるようにするために前記レジスタを前記プロセッサワードに対応する前記メモリの境界にマッピングするように動作することを特徴とする請求項１に記載のプロセッサ。
【請求項１０】
複数のＭ個のデータ要素を並列に処理するように動作し、
前記物理メモリが前記Ｍ個のデータ要素を格納するための幅を有することを特徴とする請求項１に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサのアドレス発生ユニットに関する。
【背景技術】
【０００２】
信号処理において、アルゴリズムの多くは、一般に多数の反復回数を有し、比較的少ない命令により構成され、および／または、一連の画素ブロックのような比較的少ないデータで動作するループを使用する。処理速度を向上させるため、ＤＳＰはいわゆるアドレス発生ユニット（ＡＧＵ）を具備している。これらのユニットは現在のアドレスから次のアドレスを発生する。一部のユニットは複数のアドレッシングモードをサポートする。ユニットは、アドレッシングモードに応じて、多数のレジスタを使用してアドレスを計算する。データアドレスを発生するアドレス発生ユニット（アドレス計算ユニット（ＡＣＵ）と称されることがある）、ならびに、命令アドレスを発生するアドレス発生ユニット（ループ制御ユニットと称されることがある）は公知である。
【０００３】
国際特許公開第０１／０４７６５号パンフレットは、信号処理用のＶＬＩＷプロセッサを開示している。このプロセッサは４個の同一の処理エレメントを含み、各処理エレメントは多数の機能ユニットを備える。各処理エレメントは、機能ユニットとしてアドレス発生ユニット（ＡＧＵ）を含む。ＡＧＵは、直接アドレッシング、ベースプラスオフセットアドレッシング、間接／インデックスアドレッシング、ベースプラスインデックスアドレッシング、循環インデックスアドレッシング、および、処理エレメント相対アドレッシングの７通りのアドレッシングモードをサポートする。これらのアドレッシングモードのそれぞれについて、レジスタがアドレスを計算するため使用される。アドレッシングモード、次のアドレスを計算するアルゴリズム、アルゴリズムによって使用されるレジスタ、および、例示的なハードウェア実施形態に関する詳細については、国際特許公開第０１／０４７６５号パンフレットを参照のこと。ＶＬＩＷ命令は、処理エレメント毎に命令スロットを含む。アドレッシングモードは命令の一部として指示される。レジスタは、プロセッサのコンテキストの一部であり、コンテキストの一部であるその他のレジスタと同じようにロード、セーブ、および、リストアが可能である。ＶＬＩＷプロセッサは、ＶＬＩＷを記憶する幅の広いメモリと組み合わせて使用される。各メモリラインは１個のＶＬＩＷ命令を格納する。メモリは、フェッチされた命令毎にアクセスされ、多数の実行ユニットの実行を並列式に制御するためデコードロジックへそのまま供給される。
【０００４】
公知のＶＬＩＷプロセッサの処理エレメントは、単一命令複数データストリーム（ＳＩＭＤ）プロセッサであり、ベクトルプロセッサとしても知られている。ＶＬＩＷベクトルプロセッサは、非常に高い信号処理性能を有する可能性がある。第３世代移動通信規格用のソフトウェアモデムのように、このような性能を必要とする信号処理タスクは、一般に、ベクトル化可能な多数のサブタスクにより構成される。ベクトル処理はこのようなサブタスクを比較的高速に完了させる。このコンテキストにおける「完了」は、また、データのブロックが処理され、処理が後の時点で新しいデータブロックに対して（一般に一定サイクルで）再開される状況を含んでいる。結果として、サブタスク間の切り替えは比較的頻繁に生ずる。コンテキスト切り替えは、現在停止されているタスクのため使用されている一つ以上のＡＣＵの現在レジスタがセーブされ、新たに起動されたタスクまたは再起動されたタスクのためにセーブされていたレジスタが、関連したＡＣＵの当該レジスタ内にロードされることを要求する。ＡＣＵ毎に、たとえば、４個のレジスタが関連し得る。従って、１個のＡＣＵに対し、このコンテキストの切り替えは、全部で８個のレジスタのセーブ／ロードを含む。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、高性能タスクにより良く適合し、特に、移動通信システム用の信号処理に関するプロセッサアーキテクチャを提供することである。他の目的は、ベクトルプロセッサ用のそのようなアーキテクチャを提供することである。
【課題を解決するための手段】
【０００６】
この目的に対処するために、プロセッサは、アドレスの制御下で物理メモリにアクセスするメモリポートと、
前記メモリに格納された命令を実行し、および／または、前記メモリに格納されたデータを処理する少なくとも一つの処理ユニットと、
前記メモリへのアクセスを制御するアドレスを発生するアドレス発生ユニット（以下、ＡＧＵという）であって、前記ＡＧＵがアドレス発生メカニズムの制御下で前記アドレスを発生可能にする複数のＮ個のレジスタと関連付けられたＡＧＵと、
２＜＝ｋ＜＝Ｎが成り立つとき、１オペレーションによってトリガーされ、前記Ｎ個のレジスタのうちのｋ個のレジスタをセーブ／ロードするために動作するメモリユニットであって、前記ｋ個のレジスタを、前記メモリポートを介して前記メモリへ書き込まれる１メモリワードに連結する連結部、および、前記メモリポートを介して前記メモリから読み出されたワードを前記ｋ個のレジスタに分離するスプリッタを含むメモリユニットと、を備えている。
【０００７】
本発明者は、このプロセッサの性能が向上すると、ＡＧＵのレジスタの設定に掛かる時間が次第にボトルネックとなることを認識した。従来のプロセッサアーキテクチャでは、１メモリサイクルで、たった１つのレジスタしかセーブまたはリストアすることができず、その結果、ＡＧＵを現在のデータで初期化（設定）するのに多大な時間を費やして待機していた。これを克服するために、ＡＧＵレジスタのいくつかまたは総てをセーブまたはリストアするためのコンテキスト切り替え命令またはコンテキスト明示命令のような１つのオペレーションによって、少なくとも２つのレジスタがトリガーされセーブされ得る。この目的のために、プロセッサのメモリユニットは、複数のＡＧＵレジスタを１つのメモリワードにマッピングするための連結部およびスプリッタを含む。本発明に従ったＡＧＵおよびメモリユニットは、原理的には、ＤＳＰのような任意のプロセッサで使用され得る。有利なことに、ＡＧＵおよびメモリユニットは、ベクトルプロセッサで用いられる。これまで、ベクトルプロセッサは、信号処理には広く使用されてはいなかった。これは、部分的には、従来のベクタプロセッサアーキテクチャが“アムダールの法則”として知られているものの影響のために１００％ベクトル化しないアプリケーションには効果的でない、という事実に基づく。この法則は、ベクトル化された（ｆ）となり得る（１−ｆ＋ｆ／Ｐ）−１に等しいコードのフラクションの関数として、Ｐ処理要素（P processing elements）を有するベクトルプロセッサでのベクトル化によって得られた全体の高速化を述べている。これは、コードの５０％がベクトル化されると、（３２という理論上の最大高速化の代わりに）２未満という全体の高速化が実現されることを意味する。これは、残りの５０％のコードはベクトル化されないからであり、従って、この部分のコードに対しては高速化が実現されない。コードの９０％がベクトル化されたとしても、高速化は、依然として８の因数未満である。消費者による電子機器、特に、移動通信機器の使用では、もし、大幅な高速化が実現されたとしたならば、ベクトルプロセッサの付加的なコストは正当化され得るであろう。本発明に従ったＡＧＵおよびメモリユニットは、データおよび／または命令ループの処理、並びに、ジャンプおよびコンテキストスイッチの効果的な取り扱いに対する最適なサポートを提供することによってアムダールの法則を打開するのに役立つ。
【０００８】
従属請求項２に記載されたように、前記メモリユニットは、前記メモリの１回の読み出し／書き込みサイクルでセーブ／ロードを実行するため動作する。このように、ＡＧＵの設定は高速に生じ得る。好ましくは、従属請求項３に記載されているように、総てのＡＧＵレジスタは、1回のオペレーションでセーブ／ロードされる。
【０００９】
従属請求項４に記載されているように、プロセッサは、レジスタのいくつかのセットを有し、各セットは、ＡＧＵにアドレスを生成させることができる。向上した性能で、プロセッサは、並列により多くのタスクを実行することができ、従って、１セットのレジスタよりも多くのレジスタを用いることによって利益を得ることができる。データまたは命令ループの効果的な処理のために、ループごとに１セットのレジスタを用いてもよい。複数のセットの設定を高速化するために、１セットよりも多くのレジスタが、レジスタのいくつかのセットを１つのメモリワードに連結することによって、１回のオペレーションでセーブされ得る。従属請求項５に記載されているように、プロセッサは、いくつかのＡＧＵを有してよい。各ＡＧＵは、独自のレジスタのセットを備えている。異なるＡＧＵは、機能的に同じでよい（よって、同数のレジスタを有する）。もし、このように所望されるならば、異なるＡＧＵは、異なるアドレス計算方法を割り当てられてもよく、その結果、異なる個数のレジスタを有してもよい。好ましくは、少なくとも２つのＡＧＵの総てのレジスタは、１つのメモリワードを用いて、１回のオペレーションでセーブ／ロードされ得る。代替的に、従属請求項６に記載されているように、ＡＧＵは、１セットより多くのレジスタを付随してもよい。レジスタの各セットは、アドレスの生成を可能にする。この場合、ＡＧＵは、新しいアドレス計算を実行するために、１セットのレジスタに選択的に接続され得る。好ましくは、少なくとも２つのセットのレジスタの総てのレジスタは、１メモリワードでセーブされ得る。
【００１０】
従属請求項８に記載されているように、有利なことには、設定されるのに必要なレジスタのセットが選択され得る。このように、ＡＧＵおよび／またはレジスタのセットは、タスクに最適に分割される。この場合、そのタスクに関連するコンテキストスイッチに応答して、関連するＡＧＵおよび／またはレジスタのセットは、簡単に選択され、並びに、再設定が達成される。選択を簡単にするために、ＡＧＵおよび／またはレジスタのセットは、別個に選択することができるように複数のグループに分けてもよい。さらに、このグループは、自由にタスクに分割され得る。再構成は、１回で少なくとも１つのグループに生じる。
【００１１】
従属請求項９に規定されているように、メモリワードの幅は、プロセッサが動作可能な最小ワードの倍数である。レジスタは、プロセッサワード境界上のメモリ内に格納されている。このように、ＡＧＵレジスタを設定するのに追加の命令を必要とすることなく、レジスタ値を簡単に変更することができる。
【００１２】
従属請求項８に規定されているように、好ましくは、プロセッサ（例えば、このプロセッサは、ＳＩＭＤ／ベクトルプロセッサである）は、複数のＭ個のデータ要素を並列に処理することができ、メモリは、１メモリワードで総てのＭ個のデータ要素を格納することができるように幅広い。このように、ＡＧＵの多くのレジスタは１回のオペレーションでセーブ／ロードされ得る。
【発明を実施するための最良の形態】
【００１３】
本発明のこれらのおよび他の形態は、以下に記載された実施形態に関連して説明され、明らかにされる。
【００１４】
アドレス発生ユニット（ＡＧＵ）およびメモリユニットは、好ましくは、信号処理のために最適化されたプロセッサで使用される。このようなプロセッサは、ＤＳＰまたはその他の適当なプロセッサ／マイクロコントローラでよい。以下の説明では、非常にパワフルなスカラ／ベクトルプロセッサのユニットの使用を記述する。このようなプロセッサは、スタンドアロンでも、他のプロセッサと組み合わせても使用される。図１は、スカラ／ベクトルプロセッサが使用される好ましい一構造を表す。この構造において、三つの主要部分がバス１１０によって接続されている。これらの三つのコンポーネントを接続するバス１１０は、たとえば、ＡＭＢＡ高速バス（ＡＨＢ）のような任意の適切なバスでよい。主要部分は、機能ユニットおよびローカルデータメモリ（図１ではベクトルメモリと呼ばれる）を含むプログラマブルスカラ／ベクトルプロセッサ１２０と、小規模のオンチッププログラムおよびデータメモリを含むマイクロコントローラまたはＤＳＰサブシステム１３０と、インタフェースブロック１４０と、を備える。
【００１５】
スカラ／ベクトルプロセッサ１２０は、主に通常の「重い（heavy/duty）」処理、特に、インナループ（inner-loops）の処理のため使用される。スカラ／ベクトルプロセッサは、ベクトル処理機能を含む。したがって、スカラ／ベクトルプロセッサは、実行すべきコードのベクトル化可能な部分を大規模並列化する。あらゆる信号処理の圧倒的多数はスカラ／ベクトルプロセッサのベクトルセクションで実行される。同一命令を実行する、たとえば、３２個の同一処理エレメントのアレイを用いると、大規模並列性が提供される。３２ワードの幅の広いメモリインタフェースと組み合わせることにより、低コストかつ妥当な電力消費で前例のないプログラマブル（programmable）性能レベルがもたらされる。しかし、多くのアルゴリズムは正しい形式の十分なデータ並列性を示さないので、この並列性を完全に利用することは常に可能であるとは限らない。アムダールの法則によれば、コードの直接ベクトル化可能な部分のベクトル化後、多くの時間が残りのコードに費やされる。残りのコードは、
アドレス関連命令（たとえば、循環バッファ内のポインタのインクリメント、モジュローアドレッシングの使用）
規則的なスカラ演算（すなわち、ベクトルプロセッサの主ループに対応するスカラ演算）
ルーピング
変則的なスカラ演算
の４通りのカテゴリに分類できる。
【００１６】
これらのカテゴリのそれぞれのコードの一部分は、実行されるアルゴリズムへの依存度が高い。たとえば、（Ｐ−ＳＣＨ検索のため使用される）Ｇｏｌａｙ相関器は、多数のアドレス関連命令を必要とするが、Ｒａｋｅのような他のアルゴリズムの場合には状況が異なる。アドレス関連命令およびルーピングの性能は、本発明によるＡＧＵ／メモリユニットを使用することにより最適化することができる。規則的なスカラ演算スキャンの動作は、一つのプロセッサでスカラ処理とベクトル処理を緊密に統合することによって最適化可能である。本発明者による第３世代モデムに関連したあらゆるアルゴリズムの研究によって、変則的なスカラ演算の一部は非常に制限されることがわかった。この特性は、スカラ／ベクトルプロセッサ１２０とマイクロコントローラまたはＤＳＰ１３０との間のタスクの分離を可能にし、別個のマイクロコントローラまたはＤＳＰ１３０が変則的なタスクを実行し、好ましくは、スカラ／ベクトルプロセッサを同様に制御する。この好ましい構成において、スカラ／ベクトルプロセッサ１２０は、プログラマブルなコプロセッサ（以下では、コベクトルプロセッサ、すなわち、ＣＶＰのように称される）として機能する。スカラ／ベクトルプロセッサ１２０とマイクロコントローラ１３０との間のインタフェースは、（たとえば、共有メモリを介した）通信と、（たとえば、共有メモリおよび状態信号を介した）同期を取り扱う。このインタフェースは、好ましくは、メモリマップ型である。
【００１７】
インタフェースブロック１４０は、プロセッサがシステムの残りの部分と相互作用できるようにする。好適な実施形態において、スカラ／ベクトルプロセッサは、第２世代／第３世代移動ネットワーク用のソフトウェアモデム（トランシーバ）として使用される。このようなソフトウェアモデム機能に対し、インタフェースブロック１４０は、マイクロコントローラ１３０の制御下で、メインタスクとして制御およびデータワードをベクトルメモリ、たとえば、ＤＭＡへ通過させるためのフロントエンドとして専用ハードウェアを含んでよい。ベクトルメモリのデータは、次に、スカラ／ベクトルプロセッサによって処理される。
【００１８】
スカラ／ベクトルプロセッサ１２０はバス１１０のスレーブでもよく、一方、マイクロコントローラ１３０およびインタフェースブロック１４０（ＤＭＡユニットを含んでもよい）はマスタとして機能してもよい。ＣＶＰとのあらゆる通信は、プログラム、データ、または、制御の何れであるとしても、好ましくは、メモリマップされる。メモリは、オフチップＤＲＡＭでもよく、このＤＲＡＭはまた、スカラ／ベクトルプロセッサによってインターリーブ（デインターリーブ）メモリとして使用されてもよい。
【００１９】
本明細書中、「アドレス計算ユニット」すなわちＡＣＵという表現が主として使用される。説明の目的のため、この表現は、「アドレス発生ユニット」すなわちＡＧＵと同じであると考えられる。本明細書の記述はデータアドレスを計算するためこのようなユニットを使用することに焦点を当てている。当業者は、命令アドレス（ループ制御）を計算するためにも同じ機能を使用することができるであろう。
【００２０】
図２は、本発明によるプロセッサの主要な構造を示す。プロセッサはパイプライン方式ベクトル処理セクション２１０を含む。ベクトルセクションの演算をサポートするため、スカラ／ベクトルプロセッサは、ベクトルセクションと並列に動作するように構成されたスカラ処理セクション２２０を含む。好ましくは、スカラ処理セクションもパイプライン方式である。ベクトルセクションの演算をサポートするため、ベクトルセクションの少なくとも一つの機能ユニットは、スカラセクションの対応部分の機能をも提供する。たとえば、シフト機能ユニットのベクトルセクションはベクトルを機能的にシフトし、スカラ成分はシフト機能ユニットのスカラセクションによって供給される（あるいはスカラセクションへ供給される）。このようにして、シフト機能ユニットはベクトルセクションとスカラセクションの両方を対象とする。したがって、少なくともいくつかの機能ユニットは、ベクトルセクションだけでなく、スカラセクションを有し、ベクトルセクションおよびスカラセクションはスカラデータを交換することにより協働する。機能ユニットのベクトルセクションは実際の処理能力（raw processing power）を与え、対応したスカラセクション（すなわち、同じ機能ユニットのスカラセクション）は、スカラデータを供給および／または使用することによりベクトルセクションの演算をサポートする。ベクトルセクションのベクトルデータはベクトルパイプラインを介して供給される。
【００２１】
図２の好適な実施形態において、スカラ／ベクトルプロセッサは以下の７個の専門機能ユニットを含む。
【００２２】
命令分配ユニット（ＩＤＵ２５０）：ＩＤＵは、プログラムメモリ２５２を含み、連続的なＶＬＩＷ命令を読出し、各命令の７個のセグメントを７個の機能ユニットへ分配する。好ましくは、ＩＤＵは、ゼロオーバーヘッドループの最大で３重のネストレベルをサポートするループユニットを含む。好適な実施形態において、ＩＤＵは、分岐、ジャンプ、または、割り込みをサポートしない。初期プログラムカウンタは、以下で詳述される割当ディスクリプタからロードされる。
【００２３】
ベクトルメモリユニット（ＶＭＵ２６０）：ＶＭＵは（図２に示されない）ベクトルメモリを含む。各命令中に、ＶＭＵは、ベクトルメモリからラインまたはベクトルを送信し、或いは、ラインをベクトルメモリ内へ受信することが可能である。同じ命令は、さらに、スカラ送信演算および／または受信演算を特定してよい。ＶＭＵは、外界、すなわち、外部バス１１０に接続された唯一の機能ユニットである。
【００２４】
コード発生ユニット（ＣＧＵ２６２）：ＣＧＵは有限領域演算（finite-field arithmetic）に特化される。たとえば、ＣＧＵは、ＣＤＭＡコードチップのベクトルを、チャネル符号化およびＣＲＣのような関連した関数と共に発生するために使用することができる。
【００２５】
ＡＬＵ−ＭＡＣユニット（ＡＭＵ２６４）：ＡＭＵは、通常の整数および固定小数点演算に特化される。ＡＭＵは、演算が多数のベクトルの要素に関して実行されるベクトル間演算をサポートする。好適な一実施形態において、ＡＭＵは、また、演算が１ベクトル内の要素に関して実行される、ある種のベクトル内演算を行う。
【００２６】
シャッフルユニット（ＳＦＵ２６６）：ＳＦＵは特定されたシャッフルパターンに従ってベクトルの要素を再配置することができる。
【００２７】
左シフトユニット（ＳＬＵ２６８）：ＳＬＵは、ワード、ダブルワード、クワッドワードのような単位でベクトルの要素を左へシフト可能である。生成されたスカラはそのスカラセクションへ与えられる。発生したＳＬＵベクトル演算のタイプに依存して、使用されるスカラは、ゼロであるか、または、そのスカラセクションから選ばれる。
【００２８】
右シフトユニット（ＳＲＵ２７０）：ＳＲＵはＳＬＵに類似しているが、右へシフトする。その上、ＳＲＵは、ＡＭＵ上のベクトル内演算からの連続した結果を統合する能力を有する。
【００２９】
以下の表は、すべての機能ユニットが機能ベクトルセクション２１０を具備し、一部の機能ユニットが制御セクション２３０またはスカラセクション２２０を具備しないことを示す。
【表１】
2005527036.tif 000003
【００３０】
本発明によるスカラ／ベクトルプロセッサは以下の二つの主要な方式で命令レベル並列化を適用する。
【００３１】
ベクトル処理：単一命令が（スカラ）データのベクトルに作用する。このアプローチは、単一命令ストリーム、複数データストリーム、すなわち、ＳＩＭＤとしても知られている。
【００３２】
各機能ユニットがベクトルに作用する複数機能ユニットの並列処理：これは、ＶＬＩＷ命令レベルの並列化の（制限された）形式と考えることができる。
【００３３】
これらの二つの命令レベル並列化の形式は独立であり、これらの効果は累積的である。
【００３４】
（ＦＵ間通信）
機能ユニット（ＦＵ）は並列に動作する。各ＦＵはベクトルデータを送受信する能力を備えている。多数のＦＵはまたスカラデータを送受信する能力を備えている。
【表２】
2005527036.tif 000004
【００３５】
すべての機能ユニット（ＦＵ）は並列に動作する。命令のセグメントを受信したとき、機能ユニットは、ベクトルデータと、該当する場合にはスカラデータの両方のデータを入力し、処理し、出力する。ＦＵ間の通信は、厳密にスカラセクションの間、または、ベクトルセクションの間の通信である（ＦＵ間通信）。すなわち、ＩＤＵを除くすべてのＦＵのベクトルセクションはパイプラインによって接続される。好適な一実施形態において、このパイプラインは命令に基づいて設定可能である。このため、好ましくは、ＦＵは、原理的に各ベクトルセクションが各サイクル中に他の何れのベクトルセクションからでもベクトルを受信可能にさせる相互連結ネットワークによって相互接続される。この特徴は、特に、ＦＵ（ＩＤＵを除く）の任意のパイプラインの作成を可能にする。ベクトルパスに寄与する６個の機能ユニットは、各クロックサイクル中に並列に、ベクトルを出力しベクトルを他のユニットへ送信することが可能である。これらの機能ユニットは他のユニットからベクトルを受信することも可能である。ネットワークはほぼ全体に接続される。意味のないリンクだけが省かれる。ＡＭＵは２個のベクトルを同時に受信可能である。図２に示されるように、ネットワークは、好ましくは、（円によって示される）単一ソースとして一つのネットワークパスに接続されている各ＦＵによって形成される。各ＦＵは、他のすべてのパスに（三角形によって示される）単一シンクとして接続される。ＦＵのためのＶＬＩＷ命令のセクションは、そのＦＵがどのパスからのベクトルを使用するかを示す。このようにして、パイプラインは命令に基づいて設定可能である。各パスは、たとえば、２５６本の並列ワイヤを使用してベクトル全部を転送可能である。同様に、ＦＵのスカラセクションの少なくとも一部は別個のパイプラインによって接続される。好ましくは、このパイプラインも命令に基づいて設定可能である。ＦＵのスカラセクションの間の相互接続ネットワークは、少なくとも一つのＦＵとの間ではスカラを送受信できないという意味で不完全である。したがって、より少数のパイプライン順序付けしか特定できない。スカラパイプラインとベクトルパイプラインは独立に設定可能である。たとえば、関連したＶＬＩＷセクションにおいて指定することにより、スカラパイプラインとベクトルパイプラインの両方は機能ユニットによって読み出しされる。
【００３６】
異なる機能ユニットの制御セクションの間に接続は特定されない。これらの制御ユニットは、ＩＤＵからＶＬＩＷ命令のセグメントを受信し、それらの固有の状態を更新し、それぞれのスカラセクションおよびベクトルセクションを制御する。
【００３７】
（ＦＵ内通信）
ＦＵ内には、セクション間に緊密な相互作用（ＦＵ内通信）が存在する。この相互作用はＦＵの動作の不可欠な部分である。その例には、生成されたスカラがＦＵの対応したスカラセクションへ供給され、使用されるスカラがＦＵの対応したスカラセクションから取り出されるＳＬＵおよびＳＲＵが含まれる。
【００３８】
命令は代表的には単一サイクルで実行される。ベクトルメモリにおける混雑によって例外が生じ、ストールサイクルとなって現れる。
【００３９】
（データ幅）
好適な一実施形態において、スカラ／ベクトルプロセッサは、図３に示されるように複数のデータ幅およびデータタイプをサポートする。メモリアドレッシングの基本単位はワードであり、シングルワードとも呼ばれる。好ましくは、データ幅は、シングルワード（Ｗ）、ダブルワード（ＤＷすなわち２Ｗ＝１６ビット）、または、クワッドワード（ＱＷすなわち４Ｗ＝３２ビット）である。ワードのサイズは、Ｗ＝８ビットである。好ましくは、スカラには、（シングル）ワードと、ダブルワードと、クワッドワードの三つのサイズの形式がある。ベクトルは、ＰＱクワッドワードの固定サイズを有する。ベクトルは、好ましくは、
サイズがクワッドワードであるＰＱ個の要素
サイズがダブルワードであるＰＤ＝２ＰＱ個の要素
サイズが（シングル）ワードであるＰＳ＝２ＰＤ＝４ＰＱ個の要素
のうちのいずれか一つの形式で構成可能である。
【００４０】
ベクトル要素のインデックス範囲は［０．．．４ＰＱ−１］である。したがって、ダブルワードは偶数インデックスをもち、クワッドワードのインデックスは４の倍数である。図３には、データサイズの概要が示される。このアーキテクチャはＰＱに関して完全に拡大縮小可能であり、ＰＱ≧１である任意のベクトルサイズに対して定義される。しかし、殆どの状況において、ＰＱとして２のべき乗を選択する方が好ましい。好適な一実施形態において、ＰＱは８であり、データパス幅およびメモリ幅は３２ワードであることを示す。
【００４１】
（命令）
ＣＶＰ命令は制御命令またはＶＬＩＷ命令である。制御命令は、たとえば、ゼロオーバーヘッドループ初期化である。分岐、ジャンプまたはサブルーチンは存在しない。ＶＬＩＷ命令はセグメントに分割され、各命令セグメントは対応した機能ユニットによって実行されるべき演算を特定する。セグメントは、さらに、ベクトルセクションと（もし存在するならば）スカラセクションの部分に細分される。セグメントは、また、両方の部分のために、データ（ベクトルセクションのための一つ以上のベクトルおよびスカラセクションのための一つ以上のスカラ）を受信するため使用するネットワーク部分に関する情報を含む。
【００４２】
（スカラ／ベクトルプロセッサの状態）
ＣＶＰの状態はその機能ユニットの状態と組み合わされる。好適な実施形態において、ＣＶＰの状態は、
ベクトルメモリ（ＶＭＵの一部）と、
プログラムメモリ（ＩＤＵの一部）と、
ベクトルレジスタ（すべての機能ユニット）と、
スカラレジスタ（殆どの機能ユニット）と、
プログラムカウンタを含む制御レジスタと、
アドレスオフセットレジスタと、
を備えている。
【００４３】
プログラマから見えるレジスタに加え、現実のＣＶＰには、代表的に、パイプライン化およびキャッシュ化のための補助レジスタ（ベクトル、スカラおよび制御）が含まれる。これらは、ＣＶＰ命令セットアーキテクチャの一部ではない。
【００４４】
一部の（ベクトル、スカラおよび制御）レジスタは、いわゆる、コンフィギュレーションレジスタである。コンフィギュレーションレジスタの内容はベクトルメモリだけからロード可能であり、コンフィギュレーションレジスタの値を変更するその他の方法はない。コンフィギュレーションレジスタは、機能ユニットのコンフィギュレーションをサポートし、代表的には、機能パラメータを定義する。これらの「準固定」機能パラメータをコンフィギュレーションレジスタに格納することにより、命令幅とメモリトラフィックの両方がかなり低減される。
【００４５】
ＣＶＰ状態の成分の概要は以下の表に記載される。
【表３】
2005527036.tif 000005
【００４６】
プログラマから見えるすべてのレジスタはベクトルメモリからロード可能である。コンフィギュレーションレジスタを除くすべてのレジスタはベクトルメモリにセーブ可能である。期間の最後にＣＶＰレジスタをセーブし、後の時点でＣＶＰレジスタをリストアすることにより、ＣＶＰは、あたかも他の期間が途中で実行されていないかのように、特定のタスクを継続することができる。これらのセーブ動作およびリストア動作は、随意的であり、不完全でもよく、明示的にプログラムされなければならない。
【００４７】
（メモリユニットおよびＡＧＵ）
図４はメモリユニット（ＶＭＵ４００）のブロック図である。以下の好適な実施形態において、メモリユニットは、ベクトル全体を格納することができる幅のある物理メモリと組み合わせてベクトルプロセッサで使用される。同じ考え方が、従来型のＤＳＰのようなスカラプロセッサにも適用できることは明らかであろう。ＶＭＵはベクトルメモリ４１０を収容し制御し、ベクトルメモリ４１０は他の機能ユニットに巨大なデータ帯域幅を提供する。物理ベクトルメモリ４１０は、好ましくは、シングルポートＳＲＡＭに基づく。幅がＰｓ＊Ｗである内蔵式ＳＲＡＭは一般には利用されていないので、物理メモリは、並列に配置された幅の広いランダムアクセスメモリ（ＲＡＭ）の一つ以上のバンクにより形成する場合がある。
【００４８】
ＶＭＵ４００は、自動アドレス発生をサポートする少なくとも一つのアドレス計算ユニット（ＡＣＵ）４２０を含む。図２の全体的なアーキテクチャを参照すると、ＡＣＵはＶＭＵ２６０の制御セクション２３０に位置するものと考えられる。ＡＣＵが物理的にＶＭＵ内に位置せず、ＶＭＵに接続されても構わないことは明らかであろう。好ましくは、ＡＣＵは、従来型のＤＳＰと同様のアドレッシングモード（アドレス発生アルゴリズム）をサポートする。ＡＣＵは、プロセッサの主データパスを用いることなく、１命令当たりに１回以上のアドレス計算を実行する。たとえば、スカラのアドレスは、各スカラ読み出しアクセス後に、ポストインクリメントされる。これにより、アドレス計算がデータに関する算術演算と並列に実行できるようになり、プロセッサの性能が向上する。サポートされるアドレッシングモードのセットに応じて、このようなＡＣＵは多数のレジスタにアクセスすることが必要である。たとえば、相対アドレッシング、すなわち、いわゆるベースアドレスに相対的なアドレッシングは、
ベースレジスタｂａｓｅと、
オフセットレジスタｏｆｆｓに格納されたベースアドレスに対するオフセットと、
インクリメントレジスタｉｎｃｒに格納された値を用いたオフセットのプリインクリメント／ポストインクリメントと、
境界レジスタｂｏｕｎｄに記憶されたアドレスに関するモジュロアドレッシングと、
を必要とする。
【００４９】
このアドレッシングモードのセットを用いて、次のようにサポートすることができる。オフセットレジスタをｏｆｆｓと仮定する。アドレスｂａｓｅ＋ｏｆｆｓにおける各メモリアクセス（読み出しまたは書き込み）の後、レジスタｏｆｆｓは、ｏｆｆｓ：＝（ｏｆｆｓ＋ｉｎｃｒ）  モジュロ  ｂｏｕｎｄ  に従って更新される。したがって、ｏｆｆｓは（各アクセス後に）頻繁に変化し、一方、ｂａｓｅ、ｉｎｃｒ、および、ｂｏｕｎｄに格納された値は低頻度でしか変化しない。代表的に、これらの３個のレジスタは、プログラムループよりも前に初期化される。レジスタセットの初期化は、「ＡＣＵのコンフィギュレーション」の欄でも説明されている。過度に長い命令を回避し、できる限りアドレス計算に関して別個の命令を回避するために、ＶＭＵの制御セクションは、好ましくは、多数のアドレス計算ユニットを含む。各アドレス計算ユニット（ＡＣＵ）は、（アドレス）レジスタセット、および、アドレス計算（インクリメント）演算と関連付けられている。ＡＣＵとレジスタセットとの間の関連性は、固定（ハードウェア組み込み）でも、設定可能でもよく、必要であれば命令レベルで設定可能でもよい。
【００５０】
ベクトルメモリは２Ｌ本のラインを含み、スカラまたはベクトルアドレスは、Ｌ＋２ｌｏｇ４ＰＱビットを必要とする。たとえば、ＰＱ＝８およびＬ＝１２とすると、これは１７ビットを表す。ＡＣＵのレジスタはアドレスと同じサイズを有してよい。必要に応じて、一部のレジスタがこれより小さくてもよい。たとえば、インクリメントは、比較的小さいステップ、たとえば、８ビットに限定される。好ましくは、すべてのレジスタは等しいサイズである。好適な一実施形態は以下の表に示され、ここで、ＡＣＵレジスタセットは４個のアドレスレジスタを収容する。
【表４】
2005527036.tif 000006
【００５１】
好ましいアドレス範囲およびタイプ（符号付き／符号無し）も表に示されている。この構成において、各ＡＣＵレジスタは２４ビットである。以下で詳述されるように、ＡＣＵレジスタはメモリ４１０へストアされメモリ４１０からロードされ得る。レジスタがメモリにストアされているときにレジスタの変更を簡単化するために、レジスタ幅は、メモリにアクセスする基本ユニット、すなわち、８−ビットワード境界と揃うように選択される。したがって、例示的なメモリサイズとして十分である１７ビットの代わりに、２４ビットレジスタが使用される。ある種のアドレス計算の場合、３個未満のレジスタで足りることは明らかであろう。したがって、レジスタの一つ以上のセットをこのような計算だけのために使用し、レジスタを節約することが可能である。
【００５２】
好適な実施形態において、ＶＭＵは８セットのＡＣＵレジスタを含む。これにより、機能ユニットのベクトルセクションとスカラセクションとについて異なるアドレス計算が可能になる。また、一つのアルゴリズムにおいて、各データストリームが固有のポインタを有する多重データストリーム（したがって、ポインタを計算し更新するためのアドレス計算）が十分にサポートされる。従来、ＡＣＵレジスタの個別のセットの設定は、１セット当たり数クロックサイクルを必要とした。したがって、ＡＣＵレジスタの設定のための所要時間がボトルネックになる可能性がある。このような設定による遅延を解決するため、１セットのＡＣＵレジスタに属する少なくとも２個のレジスタが単一オペレーションで設定され得る。これは、これらのすべてのＡＣＵレジスタを、ベクトルのような単一メモリワードにマッピングし、ベクトルメモリからＡＣＵメモリまでの専用ロードおよびストア命令を使用することにより実現可能である。好ましくは、１セットのＡＣＵレジスタの関連したレジスタセット全体を好ましくは１クロックサイクルの単一オペレーションで設定することができる。メモリ幅が許容するならば、有利的には、２セット以上のＡＣＵレジスタを１オペレーションで設定することできる。本例において、４個のレジスタからなるセットは４＊２４＝９６ビットを必要とする。上述のように、好ましくは、ベクトルは２５６ビット幅である。この場合、ＡＣＵ設定速度は、複数のセットのレジスタを一つのメモリライン（ベクトル）にマッピングすることによりさらに加速される。この実施形態において、ＡＣＵレジスタの２つのセットは、１つのベクトルにマッピングされる。これは、図５にも示されている。ベクトルは番号５００によって示され、クワッドワード境界が示されている。２セットのＡＣＵレジスタ５１０および５２０が示されている。本例において、ＡＣＵレジスタは２４ビットであるので、ベクトルの標準的なデータサイズのうちの一つと一致しない。ベクトルメモリを介して個々のＡＣＵレジスタへ容易にアクセス可能にするために、ＡＣＵレジスタをメモリとの間でロード／セーブする特別な命令は、個別のＡＣＵレジスタがワード境界に基づいて揃えられることを確実にする（本例では、２４ビットレジスタはクワッドワード境界で揃えられる）。当業者は、ＡＣＵレジスタのサイズおよびベクトルサイズに応じて最適なマッピングを定義可能である。たとえば、１６ビットのＡＣＵレジスタと２５６ビットのベクトルを使用すると、４セットのＡＣＵレジスタを１個のベクトルにマッピングすることが可能になる。命令には、ストア／ロードされるＡＣＵレジスタセット数を指定することが必要である。別個、または、組み合わされた命令が、単一のＡＣＵレジスタセット、または、ＡＣＵレジスタセットのグループをロードするために使用されてもよい。ロード／ストアの対象であるＡＣＵレジスタセットのグループは固定されてもよい。たとえば、そのセットが番号０〜７によって識別されるならば、グループ番号がセットの最上位２ビットである４個の固定グループが形成される。この場合、必要に応じて、グループは、たとえば、ロード／ストア命令で２セット以上を指定できるようにすることによって動的に形成してもよい。
【００５３】
図６は、ＡＣＵ６２０に常に接続された４個のＡＣＵレジスタからなるレジスタセット６１０を表す。パス６３０および６３２によって、レジスタのデータがＡＣＵへ供給される。ＡＣＵは、出力６４０に計算されたアドレスを供給し、出力６４２に更新されたレジスタのデータを供給する。独立した８セットのＡＣＵレジスタを備えた好適な実施形態において、これは、８回繰り返される（図示されてはない）。図７は代替的な配置を表す。この配置には、７１０〜７１７の番号が付された８セットのＡＣＵレジスタが示されている。様々な個数のＡＣＵが使用されている。本例では、７２０、７２１および７２２の番号が付けられた３個のＡＣＵが使用されている。ＡＣＵは、レジスタセットのうちの一つに動的に接続される。この場合、必要に応じて、完全な相互接続部７３０が設けられ、ＡＣＵのそれぞれをレジスタの何れか一つのセットに接続することができる。勿論、相互接続部７３０は完全でなくてもよい（たとえば、ＡＣＵは３または４セットだけに接続されていてもよい）。この相互接続部７４０は、更新されたレジスタ値が希望のセットへ確実に戻されるようにする。相互接続部７４０は相互接続部７３０を反映する。
【００５４】
以下、好ましいＶＭＵおよびＡＣＵを詳細に説明する。この記載では、各ＡＣＵが或るＡＣＵレジスタセットに固定して関連付けられる場合を考える。ＶＭＵは、制御セクション、スカラセクションおよびベクトルセクションに分割可能である。これらのセクションは、入力、出力、状態、次の状態関数、および、出力関数の５個の要素からなるムーアマシンモデルに従ってモデル化される。ムーアマシンの状態は、利用可能なメモリおよび／またはレジスタによって決定される。機能ユニット毎に、すべての許容された遷移を規定するテーブルが与えられ、テーブルは対応したガード条件（guards）を含む。ガード条件は、遷移を発生させるためには真であることを必要とする条件である。遷移は、ムーアマシンの次の状態関数および出力関数を決定する。テーブル中、角括弧はベクトル内の要素を選択するため使用される。たとえば、ｖ［ｐ］はベクトルｖの要素ｐを表す。
【００５５】
ベクトルメモリユニットは、単一ＶＭＵ命令において最大で、次の４個の同時の「サブオペレーション」をサポート可能である。
【００５６】
ベクトル送信、または、ＶＭロケーションとの間のライン送受信（ベクトルサブオペレーション）と、
ＶＭロケーションからのスカラ送信（スカラ送信サブオペレーション）と、
ＶＭロケーションへのスカラ受信（スカラ受信サブオペレーション）と、
アドレス計算ユニットの状態／出力変更（ＡＣＵサブオペレーション）。
【００５７】
これらの４個の同時の命令のそれぞれのパラメータは、すべて、以下のＶＭＣコマンド（ＶＭＵ＿ｃｍｄ）に与えられ、ベクトルサブオペレーションは、ｖｏｐｃ、ａｉｄ＿ｖ、およびａｉｎｃ＿ｖによって特定され、スカラ送信サブオペレーションは、ｓｏｐｃ、ａｉｄ＿ｓ、およびａｉｎｃ＿ｓ、ｓｉｚｅによって特定され、３番目のスカラ受信サブオペレーションは、ｓｒｃｖ、ａｉｄ＿ｒ、およびａｉｎｃ＿ｒによって特定され、ＡＣＵサブオペレーションは、ａｏｐｃ、ａｉｄ＿ａ、およびｉｍｍ＿ａｄｄｒによって特定される。４番目のオペレーションは、ＡＣＵのうちの一つを直接的に制御するが、他の三つのオペレーションは、以下で詳述されるように、副作用としてＡＣＵを制御する。
【数１】
2005527036.tif 000007
【００５８】
ＶＭＵ命令は、サブオペレーションの数とアドレスシーケンスの連続性とに応じて、可変クロックサイクル数をとる。
【００５９】
ＶＭＵ入力／出力は次の通りである。
【表５】
2005527036.tif 000008
【表６】
2005527036.tif 000009
【００６０】
さらに、外部バスに接続されるべき二つのスカラポート（１送信、１受信）がある。これらのメモリアクセスのＣＶＰ命令との同期はマイクロコントローラ１３０の役目である。
【００６１】
ＶＭＵベクトルセクションは物理ベクトルメモリ４１０を収容する。
【表７】
2005527036.tif 000010
【００６２】
（ベクトルサブオペレーション）
ベクトルサブオペレーションはスカラメモリにアクセスできないことに注意する必要がある。したがって、最上位アドレスビットはベクトルサブオペレーションに関して無視される。ＶＭＵのベクトルセクションは、命令のＶＯＰＣフィールドにエンコードされた７種類のサブオペレーション、すなわち、ベクトル送信（ＳＥＮＤＶ）、ライン送信（ＳＥＮＤＬ）、および、５個のライン受信サブオペレーション（ＲＣＶＬ＿ＣＧＵ，  ＲＣＶＬ＿ＡＭＵ，  ＲＣＶＬ＿ＳＦＵ，  ＲＣＶＬ＿ＳＬＵ，および  ＲＣＶＬ＿ＳＲＵ）をサポートする。７個のサブオペレーションは同時には実行できない。１個のサブオペレーションだけが一度に指定され得る。受信のソースである機能ユニットは、対応したライン受信サブオペレーションに明示的にエンコードされる。各サブオペレーションの読み出しアドレスまたは書き込みアドレスは、対応したアドレス計算ユニットによって指定される。ＡＩＮＣ＿Ｖフィールドはすべてのベクトルサブオペレーションの間で共用される。ＡＩＮＣ＿ＶフィールドはＡＩＤ＿ＶフィールドにエンコードされたＡＣＵへ通過する。このようにして、指定されたＡＣＵは、ベクトルサブオペレーションの副作用として制御される。ＡＩＮＣ＿Ｖフィールドは、影響されたアドレス計算ユニットがポストインクリメント演算を実行すべきかどうかを指定する。
【表８】
2005527036.tif 000011
【００６３】
尚、オペレーションは、宛先（またはソース）を伴うロード（またはストア）動作としてではなく、送信（または受信）動作としてキャスティングされる。ロード（またはストア）動作は他の機能ユニットにおけるオペレーションによって指定される。ライン送信は、同じアドレスを用いたベクトル送信と機能的に等価的である。ライン送信サブオペレーションは、典型的に、機能ユニットを設定するため、または、種々のレジスタのタスクの状態をリストアするために使用される。ライン送信のための特殊なモードを導入することにより、連続的なベクトル送信（ベクトルストリーミング）のアクセス時間は、キャッシュの効率的な使用によって最適化可能である。
【００６４】
ＶＭＵのスカラ送信サブオペレーションは命令のＳＯＰＣフィールドにエンコードされる。スカラ送信サブオペレーションは、唯一のサブオペレーション、すなわち、スカラ送信（ＳＥＮＤ）をサポートする。読み出しアドレスは、ＡＩＤ＿Ｓフィールド内でアドレス計算ユニットによって指定される。命令のＡＩＮＣ＿Ｓフィールドは、このアドレス計算ユニットがポストインクリメント演算を実行すべきかどうかを指定する。このようにして、第２のＡＣＵは間接的に制御可能である（第１のＡＣＵはベクトルサブオペレーションによって制御される）。スカラサブオペレーションのオペランドサイズ（ＷＯＲＤ、ＤＷＯＲＤまたはＱＷＯＲＤ）は命令のＳＩＺＥフィールドによって決定される。
【表９】
2005527036.tif 000012
【００６５】
ＶＭＵのスカラ受信サブオペレーションは命令のＳＲＣＶフィールドにエンコードされる。ＳＲＣＶの値がＮＯＮＥであるならば、スカラ受信は実行されない。さもなければ、命令のＳＲＣＶフィールドは、どの機能ユニットがスカラ受信のソースとして使用されるかを決定する。書き込みアドレスはＡＩＤ＿Ｒフィールドで指定されたアドレス計算ユニットによって指定される。このようにして、第３のＡＣＵは間接的に制御可能である。命令のＡＩＮＣ＿Ｒフィールドは、このアドレス計算ユニットがポストインクリメント演算を実行すべきかどうかを指定する。スカラ受信サブオペレーションのオペランドサイズ（ＷＯＲＤ、ＤＷＯＲＤまたはＱＷＯＲＤ）はソーススカラのサイズによって決定される。
【表１０】
2005527036.tif 000013
【００６６】
送信および受信サブオペレーションは、一方のＶＭロケーションから別のＶＭロケーションへのスカラ移動オペレーションに組み込むことができる。各アクセスのアドレスは対応したアドレス計算ユニットによって指定される。
【００６７】
上述のように、このようにしてＡＣＵのそれぞれは、ベクトル、スカラ送信およびスカラ受信のＶＭＵサブオペレーションの何れかに固定的に割り当てられることができる。このように、３個のＡＣＵが各命令で動作させられ得る。衝突を回避するため、各ＡＣＵがこれらのＶＭＵサブオペレーションのうちの一つだけのために使用されるように、すなわち、ＡＩＤ＿Ｖ≠ＡＩＤ＿Ｓ≠ＡＩＤ＿Ｒと制限される。当業者は、必要に応じて４個以上のＡＣＵをサポートするため、または、ＡＣＵとＡＣＵレジスタセットとの間でその他のコンフィギュレーションをサポートするために命令および基礎となるハードウェアを調整することができる。たとえば、レジスタセットがＡＣＵに固定的に割り当てられていない場合、命令は使用されるセットの識別情報も伝達する。
【００６８】
ＡＣＵサブオペレーションは、ＶＭＵ制御セクションによって与えられ、ＶＭＵ命令のＡＯＰＣフィールドにエンコードされる。ＡＣＵサブオペレーションは、ＡＣＵの出力を直接アドレス値（ＩＭＭ）にセットするために１個のサブオペレーションをサポートし、直接アドレスをＡＣＵレジスタのうちの一つへロードするため４個のサブオペレーション（ＬＤＢＡＳＥ，ＬＤＯＦＦＳ，ＬＤＩＮＣＲ，ＬＤＢＯＵＮＤ）をサポートする。直接アドレッシングの目的は、規則的なアドレッシングを回避し、命令から直接的にアドレスを「素早く」取り出すことである。この直接アドレッシングは、特に、シングルワードをロードするため有効である。対応した直接アドレスはＩＭＭ＿ＡＤＤＲフィールドでエンコードされる。ＡＩＤ＿Ａフィールドは、ＡＯＰＣサブオペレーションによって影響されるＡＣＵを指定し、ＶＭＵ命令からのＡＯＰＣフィールドおよびＩＭＭ＿ＡＤＤＲフィールドはこの特定のＡＣＵへ直接伝達され、他のすべてのＡＣＵのＡＯＰＣフィールドにはノーオペレーション（ＮＯＰ）がセットされる。
【００６９】
アドレス計算ユニット（ＡＣＵ）は、単一ＡＣＵオペレーション中に二つの「サブオペレーション」、すなわち、ポストインクリメントサブオペレーションと、直接アドレス操作サブオペレーションをサポートすることができる。
【数２】
2005527036.tif 000014
【００７０】
ポストインクリメントサブオペレーションは命令のＡＩＮＣフィールドにエンコードされる。ポストインクリメントサブオペレーションは唯一のサブオペレーション、すなわち、ポストインクリメント（ＩＮＣ）だけをサポートする。このサブオペレーションは、過剰な明示的アドレス計算命令を回避するため使用される。
【表１１】
2005527036.tif 000015
【００７１】
直接アドレス操作サブオペレーションは命令のＡＯＰＣフィールドにエンコードされる。このサブオペレーションは、直接アドレス（ＩＭＭ）を出力するための１個のサブオペレーションと、直接アドレスをＡＣＵレジスタ（ＬＤＢＡＳＥ，  ＬＤＯＦＦＳ，  ＬＤＩＮＣＲ，  ＬＤＢＯＵＮＤ）のうちの一つへロードするため４個のサブオペレーションをサポートする。直接アドレスは命令のＩＭＭ＿ＡＤＤＲフィールドにエンコードされる。
【表１２】
2005527036.tif 000016
【００７２】
ＡＣＵの入力／出力は以下の通りである。
【表１３】
2005527036.tif 000017
【表１４】
2005527036.tif 000018
【００７３】
好適な実施形態において、ベクトルはメモリ内でベクトル境界と揃える必要がない。したがって、ＰＳ個のワードにより構成されたベクトルは任意のメモリアドレスを取り得る。メモリラインは同じサイズをもつが、そのスタートアドレスは、定義上、ＰＳの倍数である。（ラインアクセスに関して、アドレスの最下位の２ｌｏｇＰＳビットは無視される。）ベクトルの任意の配列（代表的に、最小ワード境界に基づく配列）を可能にすることによって、メモリは、空のロケーションが減少するので、より有効に利用可能である。スカラ／ベクトルプロセッサが個々のベクトルを読み出し／書き込みすることを可能にさせ、一方、ベクトルが物理メモリの二つの連続したラインに格納される手段を採用してもよい。好ましくは、スカラデータはベクトルデータをストアするため使用されたメモリと同じメモリに格納される。このようなシステムにおいて、スカラは、スカラに対応するベクトルと混合可能である。費用効率およびメモリアクセス時間の最適化のために、メモリは、好ましくは、ベクトルライン全体の読み出しおよび書き込みだけを許可する。したがって、論理的に、物理メモリはラインにより構成され、各ラインはベクトルのサイズからなる。スカラの読み出しおよび書き込みをサポートするため、付加的なハードウェア（ラインキャッシュ４３０と、ライン内のスカラ選択のための補助手段４４０）が、スカラ形式でベクトル幅の物理メモリをアクセスするため使用される。
【００７４】
尚、以上の実施形態は本発明を限定するのではなく例示するものであり、当業者は請求項に記載された事項の権利範囲を逸脱することなく多くの代替的な実施形態を設計可能であることに注意すべきである。請求項において、括弧内に記載された参照符号は請求項を限定する事項として解釈されるべきでない。「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」のような用語は、請求項に列挙されていないその他の要素若しくはステップが存在することを排除しない。
【図面の簡単な説明】
【００７５】
【図１】本発明に従ったスカラ／ベクトルプロセッサが使用され得る好ましい一構造を表す。
【図２】本発明によるスカラ／ベクトルプロセッサの主要な構造を示す。
【図３】複数のデータ幅およびデータタイプのサポートを示す。
【図４】ベクタメモリユニットのブロック図。
【図５】１つのベクタレジスタへの２セットのＡＣＵレジスタのマッピングを示す。
【図６】ＡＣＵとＡＣＵレジスタセットとの間の固定された関係を示す。
【図７】ＡＣＵとＡＣＵレジスタセットとの間の設定可能な関係を示す。
【図１】
2005527036.tif 000019
【図２】
2005527036.tif 000020
【図３】
2005527036.tif 000021
【図４】
2005527036.tif 000022
【図５】
2005527036.tif 000023
【図６】
2005527036.tif 000024
【図７】
2005527036.tif 000025
【国際調査報告】
2005527036.tif 000026
2005527036.tif 000027