(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
プログラム命令に応答してデータ処理演算を実行するメインプロセッサ、および
前記メインプロセッサに結合されたコプロセッサであって、前記メインプロセッサに対するコプロセッサ・ロード命令に応答して１または複数のロードされたデータ・ワードを前記コプロセッサへロードし、前記１または複数のロードされたデータ・ワードを用いて前記コプロセッサ・ロード命令によって指定される少なくとも１つのコプロセッサ処理演算を実行して、少なくとも１つの結果のデータ・ワードを生成するためのオペランド・データを提供するコプロセッサ
を含み、
前記コプロセッサ・ロード命令に応答して、ロードされたデータ・ワードの可変数個が、前記１または複数のロードされたデータ・ワード中での前記オペランド・データの先頭アドレスがワード境界と整列しているかどうかに依存して前記コプロセッサ中へロードされ、
前記コプロセッサは、前記オペランド・データと前記１または複数のロードされたデータ・ワードとの間の整列性を指定する値を記憶するための整列レジスタを含む
データ処理装置。
【請求項２】
請求項１に記載のデータ処理装置であって、前記コプロセッサが、前記少なくとも１つのコプロセッサ処理演算において前記１または複数のロードされたデータ・ワードと一緒にオペランドとして使用される１または複数のローカルに記憶されるデータ・ワードを記憶するためのコプロセッサ・メモリを含んでいるデータ処理装置。
【請求項３】
請求項１および請求項２のいずれかに記載のデータ処理装置であって、前記メインプロセッサに結合されたメモリを含み、前記１または複数のロードされたデータ・ワードが、前記メインプロセッサ中のレジスタに記憶されることなしに前記メインプロセッサを経由して前記メモリから前記コプロセッサへ取り出されるようになったデータ処理装置。
【請求項４】
請求項１〜請求項３のいずれかに記載のデータ処理装置であって、前記メインプロセッサが、前記１または複数のデータ・ワードを指すアドレス値を記憶するように動作するレジスタを含んでいるデータ処理装置。
【請求項５】
請求項１〜請求項４のいずれかに記載のデータ処理装置であって、前記少なくとも１つのコプロセッサ処理演算が、複数のバイト値間の差分絶対値の和の計算を含んでいるデータ処理装置。
【請求項６】
請求項２および請求項５のいずれかに記載のデータ処理装置であって、前記差分絶対値の和が、前記１または複数のロードされたデータ・ワード内のバイト値と、前記１または複数のローカルに記憶されたデータ・ワード内の複数のバイト値の対応するものとの間の差分絶対値の和として計算されるデータ処理装置。
【請求項７】
請求項６に記載のデータ処理装置であって、前記差分絶対値の和が前記コプロセッサの累算レジスタ中に累算されるようになったデータ処理装置。
【請求項８】
請求項４に記載のデータ処理装置であって、前記コプロセッサ・ロード命令が、実行時に前記アドレス値に対して加算されるべきオフセット値を含んでいるデータ処理装置。
【請求項９】
請求項１〜請求項８のいずれかに記載のデータ処理装置であって、前記少なくとも１つのコプロセッサ処理演算が、ブロックのピクセル値マッチングの一部として差分絶対値の和を計算するデータ処理装置。
【請求項１０】
データ処理の方法であって、
プログラム命令に応答して、メインプロセッサ中でデータ処理演算を実行する工程、および
前記メインプロセッサに対するコプロセッサ・ロード命令に応答して前記メインプロセッサに結合されたコプロセッサ中へ１または複数のロードされたデータ・ワードをロードし、また前記１または複数のロードされたデータ・ワードを使用して前記コプロセッサ・ロード命令によって指定される少なくとも１つのコプロセッサ処理演算を実行して少なくとも１つの結果のデータ・ワードを生成するためのオペランド・データを供給する工程
を含み、
前記コプロセッサ・ロード命令に応答して、ロードされたデータ・ワードの可変数個のものが前記コプロセッサ内の整列レジスタに記憶された値に依存して前記コプロセッサ中にロードされ、前記値は前記１または複数のロードされたデータ・ワード中での前記オペランド・データの先頭アドレスがワード境界と整列しているかどうかを示している
データ処理方法。
【発明の詳細な説明】
【０００１】
本発明はデータ処理システムに関する。更に詳細には、本発明はメインプロセッサおよびコプロセッサの両方を採用するデータ処理システムに関する。
【０００２】
メインプロセッサおよびコプロセッサの両方を採用したデータ処理システムを提供することについては既知である。例えば、そのようなデータ処理システムには、英国ケンブリッジのＡＲＭ社のものがあり、それはＡＲＭ７（Ｒ）あるいはＡＲＭ９（Ｒ）のようなメインプロセッサを提供するが、それは特殊なディジタル信号処理演算のような機能を実行するために、Ｐｉｃｃｏｌｏ（Ｒ）コプロセッサのようなコプロセッサと組み合わされよう。コプロセッサの別の例として、浮動小数点算術コプロセッサおよび同等品がある。
【０００３】
コプロセッサは、しばしば、データ処理システムの基本的なシステムでは必要とされない付加的な機能を提供するために使用されるが、しかし、適当なコプロセッサを備えることによるオーバヘッドが正当化されるような特別な状況においては有用であろう。特にそれを必要とするデータ処理環境は、ビデオ画像操作のようなディジタル信号処理を含む場合である。そのような応用では、処理すべきデータ量が多い。このことは、比較的低コストおよび低消費電力を同時に満たしながら、必要な処理量に対処できるデータ処理システムを開発するという課題を生み出す。
【０００４】
そのような計算集約的な応用に対処する１つのやり方は、特定用途向けのディジタル信号処理回路を提供するものである。そのような特定用途向けの回路は、比較的制限された範囲の処理演算を、しかも比較的高速に実行するのに特に適したアーキテクチャを有することができる。例えば、関連する回路部分へ並列的にデータを流し込んだりそこから取り出したりするために、多重データ・チャネルを設けることができる。そのような構成は必要とされる大量のデータを処理することができるものの、一般的に柔軟性に欠けるという欠点を有する。この柔軟性の欠如は、それが実行することが望ましいアルゴリズムの比較的些少な変更が高額なそれに対応するハードウエアの変更を要求するということを意味する。このことは、最初から非常に多くの異なるアルゴリズムを実行するように一般的に設計された汎用のプロセッサとは対照的である。
【０００５】
１つの態様から見ると、本発明はデータ処理装置であって：
データ処理演算を実行するためのプログラム命令に応答するメインプロセッサ；および
前記メインプロセッサへ結合され、前記メインプロセッサに対するコプロセッサ・ロード命令に応答するコプロセッサであって、１または複数のロードされたデータ・ワードを前記コプロセッサへロードし、また前記１または複数のロードされたデータ・ワードを用いて前記コプロセッサ・ロード命令によって指定される少なくとも１つのコプロセッサ処理演算を実行して少なくとも１つの結果のデータ・ワードを発生させるためのオペランド・データを提供するコプロセッサ；
を含み、
ここで、前記コプロセッサ・ロード命令に応答して、ロードされたデータ・ワードの可変数個のものが、前記１または複数のロードされたデータ・ワード中の前記オペランド・データの先頭アドレスがワード境界と揃っているかどうかに依存して前記コプロセッサへロードされるようになった；
データ処理装置を提供する。
【０００６】
本発明は、汎用のメインプロセッサを含むシステムでは、コプロセッサは非常に特殊な機能を配慮して備えられることを理解している。特に、このコプロセッサ・ロード命令によって、ロードされたデータ・ワード内のオペランドに対して実行して結果のデータ・ワードを発生させるためのデータ処理演算もトリガされるようにすることによって、速度と符号密度の点で非常に優れた特徴が実現される。そのようなコプロセッサはシステムの中で高度に特殊な役目を有しているが、汎用のメインプロセッサと組み合わせることによって、そのような組み合わせたものが、異なるアルゴリズムおよび環境に対処するという汎用プロセッサの能力を保ったままで、処理スループットを増加させるという利点を提供することができることが分かった。
【０００７】
メモリシステムおよびバス構造はしばしば便宜的にシステムのアドレス・ベースと特定な整列性を示す場合にのみ動作するように提供されるが、コプロセッサによって使用され、また操作されるべき所望のオペランド値は異なる整列性を有する場合がある。このように、進歩した性能を実現する目的で、コプロセッサにロードされるロード・データ・ワードの個数は整列性に依存する。一例として、ワード整列した３２ビットのデータ・ワードを用いて、コプロセッサ・ロード命令に応答して８個の８ビット・オペランドをロードしようとする場合、このことは、もしもオペランドがワード境界に揃っていれば２つのデータ・ワードで以て、あるいはオペランドがワード境界に揃っていなければ３個のデータ・ワードで以て達成されよう。
【０００８】
本発明の特に好適な実施の形態では、コプロセッサ・メモリがコプロセッサ内部に設けられて、ロードされたデータ・ワードと組み合わされてオペランドとして使用されるデータ・ワードをローカルに記憶するようになっている。そのような構成は、多くの現実世界での計算状況においては、比較的少数のデータ・ワードのサブセットが頻繁に必要とされ、それをより少ない頻度で必要とされるずっと多数のデータ・ワードのサブセットと組み合わせて使用することが分かっている。この特徴は、頻繁に必要とされるデータ・ワードをローカルに記憶しておき、メインプロセッサとコプロセッサとの間で必要とされるデータ・チャネル容量が有利に削減されるようにすることでこれを活用している。従来のディジタル信号処理システムとは対照的に、メインプロセッサのアーキテクチャはいろいろな要因によって制約を受けているため、必要に応じてメインプロセッサとコプロセッサとの間により多くのデータ・チャネルを単純に追加することは一般により困難である。
【０００９】
本システムの動作性能は、メインプロセッサへ結合されたメモリから取り出すべきロードされたデータ・ワードが、メインプロセッサのレジスタに記憶されることなくコプロセッサへ送られるようにすることで改善される。この状況では、明らかなように、メインプロセッサはアドレス発生器と、コプロセッサ用のメモリ・アクセス機構の両方の役目を提供することができる。
【００１０】
メインプロセッサが、コプロセッサへロードすべきデータ・ワードを指しているアドレス値を記憶するように動作するレジスタを含むのが特に便利である。これによって、メインプロセッサにはアドレス・ポインタの制御が与えられ、それによって、サポートできるアルゴリズムのタイプに関する柔軟性が増大する。
【００１１】
ロードおよび操作すべきデータ・ワードの幅は多様であることは理解されよう。例えば、データ・ワードは３２ビットのデータ・ワードでもよく、その場合、各々が８ビットのピクセル値を表す４個の８ビット・オペランドを含む。しかし、データ・ワードおよびオペランドは多様な異なるサイズ、例えば、１６ビット、６４ビット、１２８ビット、等々を取ることもできることは理解されよう。
【００１２】
多くの実際の状況では、整列性は変動するが、一般に大多数の逐次アクセスに対しては同じである。この状況では、好適な実施の形態はコプロセッサ中のレジスタ値を用いて、データ・オペランドとデータ・ワードとの間の整列性を指定する整列値を記憶し、それにコプロセッサが応答して各々のコプロセッサ・ロード命令に対していくつのデータ・ワードをロードするかを制御する。
【００１３】
コプロセッサは、特定のシステムに依存して、ロードされたデータ・ワード内のオペランドに対して多様な処理演算を実行することができるが、本発明は特に、複数のオペランド値間の差分絶対値の和を求めたいシステムにおいて有用である。大量のデータに対して差分絶対値の和を求めることはしばしば、画像処理の間のピクセル・ブロック一致のような演算を実行する場合に汎用プロセッサによって必要とされる処理負荷の大部分を占めることになる。差分絶対値の和という低レベルの計算の大部分をコプロセッサに譲ることによって、大幅な動作性能の向上が得られ、しかも差分絶対値の特別な目的の和計算を多様な異なるアルゴリズムの一部分として残すことによって汎用プロセッサの柔軟性を保持することができる。
【００１４】
差分絶対値の和を求めるシステムで、計算した差分絶対値の合計和を累算するための累算レジスタをコプロセッサの内部に設けることが有利である。このコプロセッサ内部の累算レジスタは、必要に応じてメインプロセッサへ値を取り戻してそれ以降の操作を施すこともできるし、あるいはコプロセッサとメインプロセッサとの間のデータ転送の必要性を減らして動作速度を高めるようにコプロセッサ内部にローカルに保持することもできる。
【００１５】
コプロセッサ用のアドレス発生器としてのメインプロセッサの役目を強化するために、コプロセッサ・ロード命令は、メインプロセッサ内にポインタとして記憶されるアドレス値に対して供給すべきオフセット値を含むのが有利である。オフセット値は、ポインタ値を利用する前、あるいは後にポインタ値を更新するためにオプションとして使用することができる。
【００１６】
本発明はまた、上述のようなコプロセッサ・ロード命令を含むコンピュータ・プログラム製品を提供する。このコンピュータ・プログラム製品はコンパクト・ディスク（Ｒ）やフロッピ・ディスク（Ｒ）のような配給可能な媒体の形を取ることもできるし、あるいはデバイス中に埋め込まれたファームウエアの一部とすることもできるし、あるいはネットワーク・リンクを介するなどして動的にダウンロードすることもできる。
【００１７】
ここで本発明の実施の形態について一例として添付図面を参照しながら説明する。
【００１８】
図１はそれに対する最良の一致を基準画像内で求めようとする現在のピクセル・ブロック２を示す。現在のピクセル・ブロックには８ビットのピクセル・バイト値の８＊８ブロックが１つ含まれる。現在のピクセル・ブロック２は、現在のピクセル・ブロック２から異なる変位ベクトルｖだけ離れて位置する複数のピクセル基準ブロック４と比較される。ベクトル変位ごとに一致を試すことが望ましく、図１に示す差分絶対値の和表現が計算される。この表現は２つのブロックに関するそれぞれ対応するピクセル値間の差分絶対値を決定し、得られた６４個の差分絶対値を加算する。良好な画像の一致は一般に差分絶対値の和が小さいことによって示される。ＭＰＥＧタイプの処理を実行するような画像データ処理システムにおいて、そのような差分絶対値の和の計算がしばしば必要になり、汎用プロセッサにとっては大きな処理オーバヘッドとなって不利である。
【００１９】
図２はデータ処理システム６を示しており、それはメインプロセッサ８、コプロセッサ１０、キャッシュ・メモリ１２、およびメインメモリ１４を含む。メインプロセッサ８は、メインプロセッサ８によって利用されるであろう汎用レジスタ値を記憶するレジスタ・バンク１６を含む。メインプロセッサ８は、例えば、英国、ケンブリッジのＡＲＭ社の設計になるメインプロセッサの１つでよい。
【００２０】
メインプロセッサ８はキャッシュ・メモリ１２へ結合され、後者は最も頻繁に必要とされるデータ値への高速アクセスを提供する。より低速ではあるが大容量のメインメモリ１４がキャッシュ１２の外部に設けられる。
【００２１】
コプロセッサ１０はメインプロセッサ８のコプロセッサ・バスへ結合され、またメインプロセッサ８によって受信および実行され、予め定められた演算を実行するためのコプロセッサ命令に応答する。ＡＲＭアーキテクチャには、コプロセッサへデータ値をロードするように機能するロード・コプロセッサ命令が備えられる。図２に示すコプロセッサ１０は、そのようなコプロセッサ・ロード命令の機能を拡張し、更にそれらを用いてコプロセッサに対して、コプロセッサ１０へロードされたデータ・ワード内のオペランド値に対して予め定められた特定の処理演算を実行すべきことを指示する。
【００２２】
更に詳細には、コプロセッサ１０は、コプロセッサ・メモリ１８、整列レジスタ２０、累算レジスタ２２、および制御および算術関数ユニット２４を含む。特殊なコプロセッサ・ロード命令が、コプロセッサ・メモリ１８へ１６個の３２ビットのデータ・ワードをロードするために用いられよう。それら１６個のデータ・ワードの各々は４個の８ビットのピクセル値を含み、図１に示した現在のブロック２である８＊８のピクセル・ブロック１つに対応する。現在のブロック２中のこれらのピクセル値は、差分絶対値の和を用いて、基準画像中の異なる多様な位置から取られたピクセルの基準ブロック４と１つのブロックとして比較されて、差分絶対値の最も小さい和を与える、すなわち最良の画像一致に対応する基準ブロック４を決定する。現在のブロック２の頻繁に使用されるピクセル値をコプロセッサ・メモリ１８中にローカルに記憶することで処理資源を効率的に使用することになる。コプロセッサ・メモリ１８に現在のブロック２が一旦ロードされると、特別なコプロセッサ・ロード命令（ＵＳＡＬＤ命令）がメインプロセッサ８によって実行され、それによって２つまたは３つのデータ・ワードをコプロセッサ１０へロードし、それらロードされたデータ・ワード内の８個のピクセル・オペランドに対する差分絶対値の和を計算する。メインプロセッサ８の命令の流れの中のＵＳＡＬＤ命令はコプロセッサ１０へも（直接に、あるいは１または複数の制御信号の形で）送られ、そこで制御および算術関数論理２４をトリガし、キャッシュ１２あるいはメインメモリ１４のいずれかからメインプロセッサ８を通して必要な数のデータ・ワードのローディングを制御し、更に、それらロードされた値とコプロセッサ・メモリ１８からの値とを用いて差分絶対値の和の計算を実行する。整列レジスタ２０は、メインプロセッサ８によって実行されるコプロセッサ・レジスタ・ロード命令によって予め設定された整列値を保持する。制御および算術関数論理２４はこの整列値に応答して、オペランドがワード境界と整列している場合には３２ビットのデータ・ワード２個を、あるいはそのような整列性がない場合は、３２ビットのデータ・ワード３個をロードする。図２のキャッシュ・メモリ１２のそばには、ワード境界と整列せず、またＣＲ＿ＢＹ０の整列オフセットを有する、キャッシュ・メモリ内に記憶された８個の所望のピクセル・オペランド値が示されている。図示された例では、レジスタ・バンク１６のレジスタのうちの１つの中に記憶され、図示のように整列したアドレスのワードを指しているアドレス値[Ｒｎ]に応答して、３２ビットのデータ・ワード３個がコプロセッサ１０へロードされよう。３２ビットのデータ・ワード３個が取り出されると、制御および算術関数論理２４は多重化演算を実行して、指定された整列値に依存して、ロードされたデータ・ワードのうちから必要なオペランドを選択する。ロードされたデータ・ワードから抽出されたオペランド値は、加算器や減算器のような標準的な算術処理論理を用いて、図１に示す計算の一部を構成する差分絶対値の和計算を施される。理解されるであろうように、図示された例では、８個のピクセル・バイト・オペランドが、図１に示す現在のピクセル���ブロック２と基準ピクセル・ブロック４との間のブロック比較において効果的に１つの行を表す。図１に示された全計算を実行するためには、８個のそのようなコプロセッサ・ロード命令を順番に実行する必要がある。それらのコプロセッサ命令の各々によって計算される差分絶対値の和は累算レジスタ２２中に累算される。従って、各々が差分絶対値の１つの行の和を指定する８個のコプロセッサ・ロード命令すべてを実行した後では、差分絶対値の１ブロック分の和が実行されており、その結果が累算レジスタ２２内に記憶されている。この記憶された値は次に、コプロセッサ・レジスタ値をレジスタ・バンク１６内のレジスタの１つへ戻すメインプロセッサ命令などによって、メインプロセッサ８へ戻される。
【００２３】
上で議論した例では、レジスタ・バンク１６のレジスタに保持されているアドレス・ポインタは、取り出すべき第１データ・ワードの先頭アドレスを直接指していた。しかし、この記憶されたポインタ値に、例えば１０ビットのオフセットのようなオフセットを適用して、それを記憶されたそのポインタ値に加えてアクセスすべき実際のアドレスを示すようにしてもよい。ある状況では、使用ごとにポインタ値を更新するためにそのようなオフセットを付加的に使用することが便利である。これによって、コプロセッサ・ロード命令は効果的に基準画像を指定するデータ中を適当な量ずつ段階的にたどって、ポインタを修正するための付加的なメインプロセッサ命令を必ずしも必要とすることなく、特定の基準ブロック４に対して必要な異なる８ピクセルの行を拾い出すことが可能になる。
【００２４】
図３は図２のシステムを用いて実行される処理の例を模式的に示すフロー図である。工程２６において、現在のピクセル・ブロック２を表す１６個のワードがキャッシュ１２、あるいはメインメモリ１４からコプロセッサ・メモリ１８へロードされる。工程２８では、メインプロセッサ８内のレジスタＲｎに、メモリ中の基準ブロック４の先頭を指すポインタ値がロードされる。工程３０では、コプロセッサ１０の整列レジスタ２０内の整列値がメインプロセッサ８に対するコプロセッサ・レジスタ・ロード命令を用いてロードされる。理解されるであろうように、工程２６、２８、および３０はコプロセッサ・ロードおよび差分絶対値の和命令を実行するためのデータ処理環境をセットアップする。多くの状況において、このセットアップは一度だけ実行すればよく、その後は非常に多数の基準ブロック４を特定の現在ブロック２に対してテストする間も最新のものに留まる。それらの状況において、工程２６、２８、および３０に付随する処理オーバヘッドは比較的小さい。
【００２５】
工程３２は先に説明した８個のＵＳＡＬＤコプロセッサ・ロード命令の実行を示している。これらの命令の各々は現在のブロック２および基準ブロック４内の１つの行の差分絶対値の和を計算し、累算レジスタ２２中の累算値を更新する。
【００２６】
工程３４では、基準ブロック４全体に対する差分絶対値の計算された和が、コプロセッサ・レジスタからメインプロセッサ・レジスタへの移動命令によって累算レジスタ２２からメインプロセッサ８へ取り出される。この累算された値は次に、先に計算されている累算値あるいはその他のパラメータと比較されて、最良の画像一致を特定するか、あるいはその他の目的に使用される。
【００２７】
図４はＵＳＡＬＤ命令の３種類の変形を示す。第１の変形はオフセットを使用せず、単にレジスタＲｎ中に保持されるポインタ経由のアドレスを指定し、条件コード｛ｃｏｎｄ｝に依存する条件付き実行に従う。第２の変形は１０ビットのオフセット値に従うアドレス・ポインタを使用するものであり、それはその値が使用される前または後のいずれかの時点で、フラグ｛！｝に依存して初期値に加えるかあるいは初期値から差し引かれる。第３の変形でもオフセット値が用いられて、それはそれが使用される前にレジスタＲｎ内のポインタ値に適用されるが、ポインタ値は変更されない。
【００２８】
本発明の例示実施の形態のこれ以上の説明は以下に見出されよう。
【００２９】
（１．１  用語および略語）
この明細書は次のような用語および略語を使用している。
用語      意味
ＡＳＩＣ  特定用途向け集積回路
ＢＩＳＴ  組み込み自己テスト
ＪＴＡＧ  ジョイント・テスト・アクション・グループ
【００３０】
（スコープ）
本明細書はＭＰＥＧ４エンコード応用の性能を強化するためのＡＲＭ９Ｘ６コプロセッサに関する技術的詳細を所載する。それはハードウエアおよびソフトウエアの両面からの機能的詳細をカバーする。それはハードウエアあるいはソフトウエアを実現することの詳細には触れない。
【００３１】
（はじめに）
Ｕｒｃｈｉｎ  ＣｏＰｒｏｃｅｓｓｏｒ（ＵＣＰ）（Ｒ）は差分絶対値の和（ＳＡＤ）演算の実行を加速するために設計されたＡＲＭ９Ｘ６コプロセッサである。ＳＡＤ演算は、基準フレームからの８×８ブロックを現在のフレームの８×８ブロックと比較するときに、ＭＰＥＧ４のモーション推定アルゴリズムにおいて使用される。これはＭＰＥＧ４ビデオ・エンコード応用の一部である。
【００３２】
（１．２  ＵＣＰ構造）
ＵＣＰはＡＲＭ命令セットの一部をなす１組のコプロセッサ命令を理解する。ＡＲＭのコプロセッサ命令はＡＲＭプロセッサが次のことを行なうのを許容する。
・ＵＣＰとメモリとの間のデータ転送（ロード・コプロセッサ，ＬＤＣ，および記憶コプロセッサ，ＳＴＣ，命令を用いて）
・ＵＣＰとＡＲＭレジスタとの間のデータ転送（コプロセッサへの移動，ＭＣＲ，およびＡＲＭへの移動，ＭＲＣ，命令を用いて）
ＡＲＭはＵＣＰ用のアドレス発生器およびデータ・ポンプとして動作する。
ＵＣＰは：レジスタ・バンク、データパス、および制御論理を含む。これは図５のＵＣＰオーバビューに示されている。
【００３３】
（１．３  コプロセッサ・インタフェース）
ＵＣＰへの唯一の接続はＡＲＭからのコプロセッサ・インタフェースである。その他のシステム接続（例えば、ＡＭＢＡや割り込み）はすべてＡＲＭを介して処理される。
【００３４】
（１．４  設計上の制約）
ＵＣＰの初期のインプリメンテーションは０．１８ｕｍライブラリをターゲットにするポイント・ソリューションである。これはＵＣＰをＡＲＭ９２６と統合しよう。ＵＣＰはシステム中の唯一のコプロセッサとなろう。設計に対する主要な制約は厳しい時間軸要求であり、従ってすべての設計上の決定はこのことに基づいて行なわれる。
その他の重要な設計上の制約は：ゲート・カウント、最大動作周波数（最悪の場合）、および電力消費である。
【００３５】
（１．４．１  ゲート・カウント）
このセクションは本発明の出願に関連しないため削除された。
【００３６】
（１．４．２  動作周波数）
このセクションは本発明の出願に関連しないため削除された。
【００３７】
（１．４．３  電力消費）
このセクションは本発明の出願に関連しないため削除された。
【００３８】
（プログラマ・モデル）
（１．５  レジスタ）
ＵＣＰコプロセッサは２つのタイプのデータ記憶を含む。
・レジスタ：それらはＡＲＭレジスタとコプロセッサとの間で直接的にデータ転送を行なうために用いられる。これらはＭＣＲおよびＭＲＣ演算によってアクセスできる。
・ブロック・バッファ：これは、メモリ・マッピングされた領域（すなわち、ＡＲＭレジスタではない）からのみ直接記憶されるか、ロードできる８バイト（６４ビット）で８行の記憶である。ブロック・バッファは１組の特殊なＵＣＰ命令によってアクセスされる（ＡＲＭはこれらをＬＤＣおよびＳＴＣ演算として見る）。
【００３９】
次はＵＣＰ中のレジスタの要約である。
0003729809.tif 000002
【００４０】
レジスタ読み出し時には、予約された、あるいは未定義のレジスタ・ビットはマスクしなければならず、レジスタ書き込みではゼロにセットしなければならない。これについての例外はＣＲ＿ＡＣＣおよびＣＲ＿ＢＹＯである。これらのレジスタは読み出しでは未使用ビットから常にゼロを返し、また書き込みでは未使用のビット位置に任意の値を書き込むことができる（ＵＣＰはそれらの値を無視する）。
【００４１】
（１．５．１  ＣＲ＿ＡＣＣ）
これは１４ビットの読み出し／書き込みレジスタである。それはＭＣＲによって直接的に更新することができ、またＳＡＤ演算によって間接的に更新できる。
【００４２】
（１．５．２  ＣＲ＿ＩＤＸ）
これは３ビットの読み出し／書き込みレジスタである。これはＭＣＲによって直接更新でき、行インデックスを増分させるブロック・バッファ・ロード／記憶あるいはＳＡＤ演算によって間接的に更新できる。
このレジスタはブロック・バッファの行インデックスを示す。これは、そのブロック・バッファにアクセスする次の演算によってどのラインが参照されるべきかをセットする（これらの演算はブロック・バッファの１本の行のみを使用する）。
このレジスタが値７を超えて増分されると、それはゼロへ戻る。
【００４３】
（１．５．３  ＣＲ＿ＢＹＯ）
これは２ビットの読み出し／書き込みレジスタである。これはＭＣＲによってのみ更新できる。
ＵＣＰはバイト整列したアドレスから基準フレームへのアクセスをサポートする。それらのロードのためのアドレス・バスの下位２ビットがこのレジスタに記憶される。
コプロセッサはメモリ・アクセスのためにＡＲＭによって使用されるアドレス値を直接知ることはできないことに注意されたい。それは、ソフトウエアがバイト・オフセットをＣＲ＿ＢＹＯ中へ別々にプログラムするようになっている理由である。更に、ＡＲＭはコプロセッサのためのワード不整列なロードを直接的にはサポートせず、従ってＵＣＰは３つのワード・ロードを実行し、次にそれが必要とする８バイトを抽出する必要がある。
【００４４】
（１．５．４  ＣＲ＿ＣＦＧ）
これは単一ビットの読み出し／書き込みレジスタである。それはＭＣＲによってのみ更新できる。
ＩＤＸ＿ＩＮＣビットは、ブロック・バッファのロード／記憶あるいはＳＡＤ演算の後で、ＣＲ＿ＩＤＸレジスタを増分させるかどうかを制御する。それがクリアのときは、増分しない。セットのときは、ＣＲ＿ＩＤＸはブロック・バッファまたはＳＡＤ演算が完了した後で増分される。
【００４５】
（１．５．５  ＣＲ＿ＩＤ）
これは１４ビットの読み出し専用レジスタであり、ＵＣＰアーキテクチャおよびリビジョン・コードを含む。
【００４６】
【表１】
0003729809.tif 000003
【００４７】
ビット［３：０］  そのインプリメンテーションのリビジョン番号を含む
ビット［７：４］  ＡＲＭ設計によるインプリメンテーションに関する値０×Ｆにセットされる
ビット［１３：８］  ＵＣＰアーキテクチャ・バージョンを含む  ０×００＝バージョン１
【００４８】
（１．６  命令セット）
ＵＣＰコプロセッサのアセンブラ・シンタックスはＡＲＭと同じフォーマットを使用する。
｛  ｝はオプション・フィールドを示す。
ｃｏｎｄ  はＡＲＭ命令状態コードフィールドである。
ｄｅｓｔ  はＵＣＰデスティネーション・レジスタを指定する。
Ｒｎ  はＡＲＭレジスタである。
ＣＲｎ  レジスタである。
！  は計算されたアドレスがベース・レジスタへ書き戻されるべきであることを示す。
ＵＣＰ  はＵＣＰコプロセッサ番号である。
１０＿Ｂｉｔ＿Ｏｆｆｓｅｔ  は１０ビットのワード・オフセットを評価する表現である。このオフセットはベース・レジスタに加算されてロード・アドレスが得られる。このオフセットは４の倍数であることに注意されたい。
６＿Ｂｉｔ＿Ｏｆｆｓｅｔ  は６ビットのワード・オフセットを評価する表現である。このオフセットはベース・レジスタに加算されてロード・アドレスが得られる。このオフセットは４の倍数であることに注意されたい。
【００４９】
注意：ライトバック付き、あるいはライトバックなしのポスト・インデックスが許可されている。
以下のページはＵＣＰの命令セットを説明している。
【００５０】
（１．６．１  命令セット要約）
0003729809.tif 000004
【００５１】
（１．６．２  命令エンコーディング）
ＵＣＰの命令は次のコプロセッサ命令クラスに属する
【００５２】
0003729809.tif 000005
【００５３】
コプロセッサ命令は次のようにエンコードされる。
【００５４】
【表２】
0003729809.tif 000006
【００５５】
ｃｏｎｄ：  条件コード
ＵＣＰ：  ＵＣＰコプロセッサ番号
Ｒｎ：  ＡＲＭレジスタ・ソース
ＣＲｎ：  ＵＣＰレジスタ・ソース
Ｒｄ：  ＡＲＭレジスタ・デスティネーション
ＣＲｄ：  ＵＣＰレジスタ・デスティネーション
８＿Ｂｉｔ＿ｏｆｆｓｅｔ：  ８ビット数（０−２５５）；アドレス・オフセットを表示するために使用される。
Ｐ：  プレ／ポスト・インデックス・ビット  ０＝ポスト；転送後にオフセットを加算
１＝プレ；転送前にオフセットを加算
Ｕ：  アップ／ダウン・ビット  ０＝ダウン；ベースから差し引く
１＝アップ；ベースに加える
Ｗ：ライトバック・ビット  ０＝ライトバックなし    １＝アドレスをベースに書き込む
【００５６】
注意：ＵＣＰに関しては前記のオペレーション・コードのみが有効であることに注意されたい。これらのオペレーション・コード（ＵＣＰをビット１１からビット８に保持する）に対する任意の変形は予期せぬ振る舞いの原因となろう。
【００５７】
（１．６．３  ＵＭＣＲ）
ＵＭＣＲ命令はＵＣＰレジスタへの書き込みで使用される。ＵＭＣＲはＡＲＭレジスタＲｎからＵＣＰレジスタＣＲｄへデータを移動させる。
【００５８】
【表３】
0003729809.tif 000007
【００５９】
（動作）
１  ＡＲＭレジスタＲｎからＵＣＰレジスタＣＲｄへの移動
（ニーモニック）
ＵＭＣＲ  ＣＲｄ，Ｒｎ，｛ｃｏｎｄ｝
（例）
ＵＭＣＲ  ＣＲ＿ＡＣＣ，Ｒ０    ；Ｒ０の内容をＣＲ＿ＡＣＣへロード
【００６０】
（１．６．４  ＵＭＲＣ）
ＵＭＲＣ命令はＵＣＰレジスタからの読み出しで使用される。ＵＭＣＲはＵＣＰレジスタＣＲｎからＡＲＭレジスタＲｄへデータを移動させる。
【００６１】
【表４】
0003729809.tif 000008
【００６２】
（動作）
１  ＵＣＰレジスタＣＲｎからＡＲＭレジスタＲｄへ移動
（ニーモニック）
ＵＭＣＲ  Ｒｄ，ＣＲｎ，｛ｃｏｎｄ｝
（例）
ＵＭＣＲ  Ｒ６，ＣＲ＿ＩＤ    ；ＩＤレジスタをＲ６へロードする
【００６３】
（１．６．５  ＵＢＢＬＤ）
ＵＢＢＬＤ命令はデータをブロック・バッファへロードするときに使用される。
【００６４】
【表５】
0003729809.tif 000009
【００６５】
（動作）
【表６】
0003729809.tif 000010
【００６６】
（ニーモニック）
【表７】
0003729809.tif 000011
【００６７】
（例）
ＵＢＢＬＤ    [Ｒ０］，＃３２０！    ；ｍｅｍ（Ｒ０）からブロック・バッファへ２ワードをロードし、Ｒ０を次のラインへ事後増分する
【００６８】
（１．６．６  ＵＢＢＳＴ）
ＵＢＢＳＴ命令はブロック・バッファからデータを記憶するときに使用される。この演算は認証のみを目的としており、応用コードでは使用すべきでない。
【００６９】
【表８】
0003729809.tif 000012
【００７０】
（動作）
【表９】
0003729809.tif 000013
【００７１】
（ニーモニック）
【表１０】
0003729809.tif 000014
【００７２】
（例）
ＵＢＢＳＴ    [Ｒ３］，＃８！    ；ブロック・バッファからの２ワードをｍｅｍ（ｒ３）から始まるメモリに記憶
【００７３】
注意：ＵＣＰは、ＩＤＸ＿ＩＮＣ＝＝１のとき、バック・ツー・バックＵＢＢＳＴをサポートしない。各ＵＢＢＳＴは少なくとも１個のＮＯＰによって隔てられるべきである。ＵＢＢＳＴバック・ツー・バックを使用すると、予期しない振る舞いが生ずるであろう。
【００７４】
（１．６．７  ＵＳＡＬＤ）
ＵＳＡＬＤ命令は基準ブロックからデータをロードして、ＳＡＤ累算演算を実行する。
【００７５】
【表１１】
0003729809.tif 000015
【００７６】
（動作）
【表１２】
0003729809.tif 000016
【００７７】
（注意）
算術は符号なしである。ＣＲ＿ＡＣＣのオーバフローを検出／処理する機能は含まれていない。ＣＲ＿ＡＣＣのサイズは８×８のブロック比較でオーバフローが発生しないように選ばれる。
【００７８】
（ニーモニック）
【表１３】
0003729809.tif 000017
【００７９】
（例）
ＵＳＡＬＤ  [Ｒ０］，＃３２０！    ；ｍｅｍ（Ｒ０）からの２ワードを処理して、ＳＡＤを実行し、次の行へＲ０を事後増分する
【００８０】
（１．７  命令のサイクルタイム）
次の表は各命令が完了するまでに取るサイクル数を示している。
【００８１】
0003729809.tif 000018
注意：もしＣＲ＿ＢＹＯがゼロなら、Ｎ＝２サイクルであり、そうでなければＮ＝３サイクルである。
【００８２】
（１．８  データ・ハザード）
データ・ハザードは命令同士の間のデータ依存性が予期しない振る舞いを引き起こす状況である。
ＵＣＰにはデータ・ハザードに対処するためのハードウエア的なインターロックはない。その代わりに、ソフトウエハは必要な場所に、非コプロセッサ命令を、必要であればＮＯＰを含まなければならない。
【００８３】
0003729809.tif 000019
【００８４】
（機能の説明）
（１．９  コプロセッサの概観）
コプロセッサはＡＲＭ９Ｘ６と緊密につながっている。ＵＣＰ向けの各命令は、ＡＲＭコアがそれ自身でその命令を実行するように直ちに処理される。ＵＣＰはＦｉｒｅ−ａｎｄ−Ｆｏｒｇｅｔ（ファイヤ・アンド・フォゲット）式のコプロセッサではなく、ＵＣＰ命令は直ちに実行され、その結果は後続の命令のために利用可能である（特定の状態に従う、１．８セクションを参照）。これはＡＲＭがコプロセッサの状態をポールする必要がなく、またコプロセッサがＡＲＭに割り込みを掛ける必要がないことを意味する。
【００８５】
（１．１０  機能ダイヤグラム）
ＵＣＰの接続は図６に示されている。
【００８６】
（１．１１  ブロックダイヤグラム）
ＵＣＰの主要ブロックは図７に示されている。
制御倫理は各命令がメモリから到着次第読み取って、パイプライン・フォロワを含み、それによってＵＣＰとＡＲＭが同調するようになっている。コプロセッサのパイプラインは次のようなステージを含む：フェッチ、デコード、実行、メモリ、書き込み、およびＳＡＤ累算。
レジスタ・バンクはブロック・バッファおよびＭＣＲ／ＭＲＣケイパブル・レジスタを保有する。このレジスタはまたＲＣ＿ＩＤＸを増分させる論理を保有する。
データパスは、バイト操作、ＳＡＤ、および累算を含むＵＳＡＬＤ演算用の論理を含む。データパスはまた、レジスタ読み出し選択を処理し、内部演算、ＵＭＲＣおよびＵＢＢＳＴのために結果を順送りする。
【００８７】
（システム接続）
ＵＣＰはＡＲＭ９Ｘ６へ直接接続されるように設計されている。この構成では、ＣＨＳＤＥ＿ＣおよびＣＨＳＥＸ＿Ｃ出力は未使用である。ＡＲＭ９６６（Ｒ）およびＡＲＭ９４６（Ｒ）プロセッサのために、ＣＰＡＢＯＲＴ入力は低レベルに固定しておくべきである。この構成で、ＵＣＰはロード演算中のデータ・アボートから復帰するために特殊なアボート・ハンドラ・コードを必要としよう。
【００８８】
（１．１２  ＡＲＭ９２０Ｔ（Ｒ）への接続）
ＡＲＭ９２０Ｔコプロセッサのインタフェースは機能的に９Ｘ６コプロセッサのインタフェースと同一である。しかし、このインタフェースは信号のタイミングに関しては大いに異なっている。ＵＣＰがＡＲＭ９２０（Ｒ）と一緒に使用できるためには、別になった外部リタイミング・ブロックが必要である。しかし、このリタイミング・ブロックに関する詳細仕様は本発明のスコープから外れるので、この場合のコンフィギュレーションについて次に簡単に触れてみよう。
ＡＲＭ９２０によって提供されるクロックはＵＣＰ用のＣＰＣＬＫへ渡される前に反転される。ＣＨＳＤＥおよびＣＨＳＥＸ出力は未使用で、その代わりに、ＣＨＳＤＥ＿ＣおよびＣＨＳＥＸ＿Ｃが、９２０クロックによってイネーブルされるトランスペアレント・ラッチへ渡される。
ＣＰＡＢＯＲＴ信号はＥＴＭインタフェースから取り出される。
【００８９】
（１．１３  付加的なコプロセッサの接続）
デフォルトで、ＵＣＰは多重外部コプロセッサを用いるシステム用として構成されていない。これをサポートするためには、付加的な論理が必要である。
もし多重コプロセッサをインタフェースに追加するのであれば、ＡＮＤ用ビット１、およびＯＲ用ビット０によってハンドシェイキング信号を組み合わせることができる。ハンドシェイキング信号ＣＨＳＤＥ１、ＣＨＳＥＸ１、およびＣＨＳＥＸ２をそれぞれ有する２コプロセッサの場合には：
【００９０】
【表１４】
0003729809.tif 000020
【００９１】
（ＡＣタイミング）
このセクションは現時点で完全なものでない。ＡＣタイミングは９２０Ｔに関して、Ｐｈｉｌｉｐｓプロセスで利用可能である。
【００９２】
（付録）
（１．１４  信号の説明）
次の表はＵＣＰがＡＲＭ９ＴＤＭＩとインタフェースを取るための信号を説明する。注意すべき点は、これはインプリメンテーションが開始されるに伴い、変更の対象となることである。最終的なバージョンは次のリストとは異なるかもしれない。
【００９３】
（１．１４．１  ＵＣＰ命令フェッチ・インタフェース信号）
0003729809.tif 000021
【００９４】
（１．１４．２  ＵＣＰデータバス）
0003729809.tif 000022
【００９５】
（１．１４．３  ＵＣＰコプロセッサ・インタフェース信号）
0003729809.tif 000023
【００９６】
（１．１４．４  ＵＣＰの諸々の信号）
0003729809.tif 000024
【図面の簡単な説明】
【図１】  差分絶対値の所望の和計算を示す模式図。
【図２】  メインプロセッサとコプロセッサの組み合わせを示す模式図。
【図３】  図２のシステムによって実行される動作タイプの例を示す模式図。
【図４】  コプロセッサ・ロード命令の４つの例を示す図表。
【図５−図７】  実施の形態の一例に従うコプロセッサの詳細を示す図。
【図１】
0003729809.tif 000025
【図２】
0003729809.tif 000026
【図３】
0003729809.tif 000027
【図４】
0003729809.tif 000028
【図５】
0003729809.tif 000029
【図６】
0003729809.tif 000030
【図７】
0003729809.tif 000031