(57)【特許請求の範囲】
【請求項１】
コプロセッサバス（３０）を介して結合されたコプロセッサ（１４，１６）と協働するよう構成されたプロセッサ（１２）を動作させる方法であって、前記コプロセッサバスはシステムバスから分離されておりかつ前記プロセッサは前記システムバスを使用することなく前記コプロセッサバスを介して前記コプロセッサと通信することが可能であり、前記プロセッサ（１２）は前記コプロセッサ（１４，１６）と、前記コプロセッサに転送されるべきアーギュメントの数を規定するカウントフィールドおよびコードフィールドを備えた少なくとも１つの命令（Ｈ＿ＣＡＬＬ）の実行において協働し、前記方法は、
前記命令を受ける段階、
前記コプロセッサバスにより第１のサイクルを介して、前記コプロセッサに前記カウントおよびコードフィールドを提供する段階、
もし前記カウントフィールドがゼロより大きなある値、ｎ、を有していれば、前記コプロセッサに、前記コプロセッサバスによって第２のサイクルを介して、第１のオペランドを提供する段階、そして
前記命令を完了する段階、
を具備することを特徴とするプロセッサ（１２）を動作させる方法。
【請求項２】
コプロセッサバス（３０）を介して結合されたコプロセッサ（１４，１６）と協働するよう構成されたプロセッサ（１２）を動作させる方法であって、前記コプロセッサバスはシステムバスから分離されておりかつ前記プロセッサは前記システムバスを使用することなく前記コプロセッサバスを介して前記コプロセッサと通信可能であり、前記プロセッサ（１２）は前記コプロセッサ（１４，１６）と、前記コプロセッサから受信すべきアーギュメントの数を規定するカウントフィールドおよびコードフィールドを備えた少なくとも１つの命令（Ｈ＿ＲＥＴ）の実行において協働し、前記方法は、
前記命令を受ける段階、
前記コプロセッサバスにより第１のサイクルを介して、前記コプロセッサに前記カウントおよびコードフィールドを提供する段階、
もし前記カウントフィールドがゼロより大きなある値、ｎ、を有していれば、前記コプロセッサバスによって第２のサイクルを介して、前記コプロセッサから第１のオペランドを受ける段階、そして
前記命令を完了する段階、
を具備することを特徴とするプロセッサ（１２）を動作させる方法。
【請求項３】
複数のレジスタを備えたレジスタファイルを有する、プロセッサによって、コプロセッサ通信バスを介して、前記レジスタファイルにおける全ての書き込み処理を放送する方法であって、
前記レジスタファイルに書き込まれるべきオペランドを受ける段階、
前記レジスタファイルにおける前記複数のレジスタの内の１つを選択する段階、そして
前記レジスタファイルにかつ前記コプロセッサ通信バスを介して、
前記レジスタファイルに書き込まれるべき前記オペランド、
前記レジスタファイルにおける前記複数のレジスタの内の前記選択された１つを示す第１の制御信号、および
前記オペランドが前記複数のレジスタの内の前記選択された１つに書き込まれることを要求する第２の制御信号、
を提供する段階、
を具備することを特徴とする方法。
【請求項４】
第１のプロセッサによって、コプロセッサ通信バスを介して、前記第１のプロセッサとは別個の第２のプロセッサにおける、複数のレジスタを備えた、レジスタファイルへの全ての書き込み処理を監視する方法であって、
前記第２のプロセッサから、前記コプロセッサ通信バスを介して、
前記レジスタファイルに書き込まれるべきオペランド、
前記レジスタファイルにおける前記複数のレジスタの内の選択された１つを示す第１の制御信号、および
前記オペランドが前記複数のレジスタの内の前記選択された１つに書き込まれることを要求する第２の制御信号、
を受ける段階、そして
前記オペランド、前記第１の制御信号および前記第２の制御信号を受けたことに応じて所定の操作を行なう段階、
を具備することを特徴とする方法。
【請求項５】
プロセッサによって、コプロセッサバスを介して、実行のために前記プロセッサによって受けた命令のコプロセッサによる実行を開始する方法であって、
前記命令を受ける段階、
前記命令をデコードする段階、
少なくとも部分的に前記デコードと一致した時間に、前記コプロセッサに対し、
前記コプロセッサバスの第１の部分を介して、前記命令の少なくとも所定の部分、および
前記命令が前記コプロセッサバスの第２の部分を介して前記プロセッサによりデコードされていることを示す第１の制御信号、
を提供する段階、
前記命令の実行が進行していることを示すために前記コプロセッサバスに第２の制御信号を提供する段階、そして
もし前記第１の制御信号が前記第２の制御信号が肯定される前に否定されれば、前記命令の処理を中断する段階、
を具備することを特徴とする方法。
【請求項６】
プロセッサによって、実行のために前記プロセッサによって受けた命令のコプロセッサによる実行を開始する方法であって、
前記命令を受ける段階、
前記命令をデコードする段階、
少なくとも部分的に前記デコードと一致した時間に、前記コプロセッサに対し、
前記コプロセッサバスの第１の部分を介して、前記命令の少なくとも所定の部分、および
前記命令が前記プロセッサによって前記コプロセッサバスの第２の部分を介してデコードされていることを示す第１の制御信号、
を提供する段階、そして
もし前記命令に先立ち、より前の命令の実行が例外を引き起こせば、前記第１の制御信号を否定しかつ前記命令の処理を中断する段階、
を具備することを特徴とする方法。
【請求項７】
プロセッサによって、コプロセッサバスを介して、実行のために前記プロセッサによって受けた命令のコプロセッサによる実行を開始する方法であって、
前記命令を受ける段階、
前記命令をデコードする段階、
少なくとも部分的に前記デコードと一致する時間に、前記コプロセッサに対し、
前記コプロセッサバスの第１の部分を介して、前記命令の少なくとも所定の部分、および
前記命令が前記コプロセッサバスの第２の部分を介して前記プロセッサによりデコードされていることを示す第１の制御信号、
を提供する段階、そして
もし前記命令が前記プロセッサ内の命令レジスタから放棄されれば、前記第１の制御信号を否定しかつ前記命令の処理を中断する段階、
を具備することを特徴とする方法。
【請求項８】
プロセッサによって、コプロセッサバスを介して、実行のために前記プロセッサによって受けた命令のコプロセッサによる実行を開始する方法であって、
前記命令を受ける段階、
前記命令をデコードする段階、
少なくとも部分的に前記デコードと一致する時間に、前記コプロセッサに対し、
前記コプロセッサバスの第１の部分を介して、前記命令の少なくとも所定の部分、および
前記命令が前記コプロセッサバスの第２の部分を介して前記プロセッサによりデコードされていることを示す第１の制御信号、
を提供する段階、そして
前記コプロセッサバスから第２の制御信号を受ける段階であって、該第２の制御信号は前記コプロセッサが前記コプロセッサ内の命令バッファを充填することを可能にする、段階、
を具備することを特徴とする方法。
【請求項９】
プロセッサによって、コプロセッサバスを介して、実行のために前記プロセッサによって受けた命令のコプロセッサによる実行を開始する方法であって、
前記命令を受ける段階、
前記命令をデコードする段階、そして
少なくとも部分的に前記デコードと一致した時間に、前記コプロセッサに対し、
前記コプロセッサバスの第１の部分を介して、前記命令の少なくとも所定の部分、および
前記コプロセッサバスの第２の部分を介して前記プロセッサがスーパバイザモードで動作しているか否かを示す第１の制御信号、
を提供する段階、
を具備することを特徴とする方法。
【請求項１０】
プロセッサによって、コプロセッサバスを介して、実行のために前記プロセッサによって受けた命令のコプロセッサによる実行を開始する方法であって、
前記命令を受ける段階、
前記命令をデコードする段階、
少なくとも部分的に前記デコードと一致した時間に、前記コプロセッサに対し、
前記コプロセッサバスの第１の部分を介して、前記命令の少なくとも所定の部分、および
前記コプロセッサバスの第２の部分を介して前記命令が前記プロセッサによりデコードされていることを示す第１の制御信号、
を提供する段階、そして
前記コプロセッサから、前記命令の前記所定の部分が前記コプロセッサ内で例外を引き起こしたか否かを示す第２の制御信号を受ける段階、
を具備することを特徴とする方法。
【請求項１１】
コプロセッサによって、コプロセッサバスを介して前記コプロセッサに結合されたプロセッサにより受けた命令に応じて操作を行なう方法であって、
前記プロセッサから、前記コプロセッサバスの第１の部分を介して前記命令の少なくとも所定の部分および、前記コプロセッサバスの第２の部分を介して、前記命令が前記プロセッサによりデコードされていることを示す第１の制御信号を受ける段階、
前記命令の実行を開始する段階、そして
前記プロセッサに対し前記命令が例外を引き起こしたか否かを示す制御信号を提供する段階、
を具備することを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は一般的にはプロセッサおよび少なくとも１つのコプロセッサ（ｃｏｐｒｏｃｅｓｓｏｒ）を有するデータ処理システムに関し、かつより特定的には、該コプロセッサに対しプロセッサをインタフェースするための方法および装置に関する。
【０００２】
【従来の技術】
専用のかつ専門化されたハードウエア機能要素によって基礎（ベースライン：ｂａｓｅｌｉｎｅ）アーキテクチャプロセッサの機能性を拡張する能力は規模変更可能な（ｓｃａｌｅａｂｌｅ）および拡張性のあるアーキテクチャの重要な観点である。
【０００３】
基礎アーキテクチャプロセッサの機能を拡張するための１つの好ましい方法はコプロセッサを使用することによるものである。これらはプロセッサの指令で動作する専用の通常は単一目的のプロセッサである。コプロセッサの伝統的な用途の１つは浮動少数点能力をそのようなものを直接サポートしないアーキテクチャに対して選択的に提供するための数学的または数値演算コプロセッサとしてのものであった。そのような数学的コプロセッサのいくつかの例はインテル（Ｉｎｔｅｌ）社の８０８７型および８０２８７型のものである。コプロセッサのいくつかの他の可能性ある用途または形式は、乗算−累算器（ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｏｒｓ）、変調器／復調器（モデム）、デジタル信号プロセッサ（ＤＳＰ）、ビタービ計算機（ｖｉｔｔｕｒｂｉ  ｃａｌｃｕｌａｔｏｒｓ）、暗号プロセッサ、画像プロセッサ、およびベクトルプロセッサを含む。
【０００４】
【発明が解決しようとする課題】
コプロセッサに対する２つの異なる手法がある。一方においては、デジタル・イクイップメント・コーポレイション（ＤＥＣ）のＰＤＰ−１１型ファミリのコンピュータのための浮動小数点ユニットはその主プロセッサに対して非常に密接に（ｔｉｇｈｔｌｙ）結合された。発生した１つの問題はこの密接な結合が主プロセッサがコプロセッサの動作についてかなりの程度まで知っていることを必要としたことである。これは新しいコプロセッサを集積または統合システムに付加することが主たる工学技術上の問題になるほど回路設計を複雑にする。
【０００５】
別の構成はコプロセッサを主プロセッサに対してルーズに（ｌｏｏｓｅｌｙ）結合することであった。これは主プロセッサからコプロセッサの動作を引き離し（ａｂｓｔｒａｃｔｉｎｇ）かつ分離する利点を有し、かつ従って新しいコプロセッサを現存のプロセッサと共に集積または統合するのに必要な努力を実質的に軽減した。しかしながら、これは常にかなりの犠牲をはらって行われた。性能の喪失がこの手法の１つの問題である。このルーズな結合から生じる形式の性能ヒットをとることに伴う１つの問題はそのようなコプロセッサに頼ることに対する損益分岐点が相応じて増大することである。従って、コプロセッサに対するそうでなければ魅力的な数多くの応用はコスト効率がよくない。さらに、そのような手法はしばしば、すべての対応する付加的な回路およびチップ面積と共に、バスを使用することを必要とする。
【０００６】
従って、たとえ非常に簡単な機能に頼ることでも有利になるようにインタフェースを使用することが十分高速となるよう十分密接に結合され、一方プロセッサのアーキテクチャがいずれか与えられたコプロセッサのできるだけ多くの細部から分離できるようにインタフェースを引き離すようなコプロセッサインタフェースをもつことが重要である。この後者の一部はハードウエアに代えてソフトウエアで新しいコプロセッサのアプリケーションをあつらえることができるようにするためインタフェースのプログラマが親しみ易くする（ｆｒｉｅｎｄｌｙ）ことを含む。
【０００７】
【課題を解決するための手段】
本発明の一態様では、通信バス（３０）を介して結合されたコプロセッサ（１４，１６）とカウントフィールドおよびコードフィールドを備えた少なくとも１つの命令（Ｈ＿ＣＡＬＬ）の実行において協働するよう構成されたプロセッサ（１２）における、前記命令を実行をする方法が提供され、該方法は、前記命令を受ける段階、前記通信バスにより第１のサイクルを介して、前記コプロセッサに前記カウントおよびコードフィールドを提供する段階、もし前記カウントフィールドがゼロより大きなある値、ｎ、を有していれば、前記コプロセッサに、前記通信バスによって第２のサイクルを介して、第１のオペランドを提供する段階、そして前記命令を完了する段階、を具備することを特徴とする。
【０００８】
本発明の別の態様では、通信バス（３０）を介して結合されたコプロセッサ（１４，１６）と実効アドレス計算フィールドを備えた少なくとも１つの命令（Ｈ＿ＬＤ）の実行において協働するよう構成されたプロセッサ（１２）における、前記命令を実行する方法が提供され、該方法は、前記命令を受ける段階、前記通信バスによって第１のサイクルを介して、前記コプロセッサに前記実効アドレス計算フィールドを提供する段階、前記実効アドレス計算フィールドに従って実効アドレスを計算する段階、前記計算された実効アドレスに格納されたオペランドをフェッチする段階、前記通信バスによって第２のサイクルを介して、前記コプロセッサに前記フェッチされたオペランドを提供する段階、そして前記命令を完了する段階、を具備することを特徴とする。
【０００９】
本発明のさらに別の態様では、通信バス（３０）を介して結合されたコプロセッサ（１４，１６）と実効アドレス計算フィールドを備えた少なくとも１つの命令（Ｈ＿ＳＴ）の実行において協働するよう構成されたプロセッサ（１２）における、前記命令を実行する方法が提供され、該方法は、前記命令を受ける段階、前記通信バスによって第１のサイクルを介して、前記コプロセッサに前記実効アドレス計算フィールドを提供する段階、前記実効アドレス計算フィールドに従って実効アドレスを計算する段階、前記通信バスによって第２のサイクルを介して、前記コプロセッサからオペランドを受ける段階、前記計算された実効アドレスに前記受けたオペランドを格納する段階、そして前記命令を完了する段階、を具備することを特徴とする。
【００１０】
【発明の実施の形態】
本発明の特徴および利点は添付の図面と共に以下の詳細な説明を参照することによりさらに明瞭に理解され、図面においては同じまたは同様の参照数字は同じかつ対応する部分を示している。
【００１１】
以下の説明においては、数多くの特定の細部は特定のワードまたはバイト長などで説明され本発明の完全な理解を与えている。しかしながら、当業者には本発明はそのような特定の細部なしで実施できることが明らかであろう。他の場合には、本発明を不必要な細部によって不明確にすることのないよう回路がブロック図形式で示されている。たいていの場合、タイミングの考慮事項その他に関する詳細は本発明の完全な理解を得るのに必要でない限り省略されておりかつ関連する技術に習熟した当業者の技術の範囲内にある。
【００１２】
用語「バス（ｂｕｓ）」は、データ、アドレス、制御またはステータスのような、１つまたはそれ以上の種々の形式の情報を転送するために使用できる複数の信号または導体に言及している。用語「肯定する（ａｓｓｅｒｔ）」および「否定する（ｎｅｇａｔｅ）」は信号、ステータスビットまたは同様の装置をそれぞれその論理的に真のまたは論理的に偽の状態にすることに言及する場合に使用される。もし論理的に真の状態が論理レベル“１”であれば、論理的に偽の状態は論理レベル“０”である。また、もし論理的に真の状態が論理レベル“０”であれば、論理的に偽の状態は論理レベル“１”である。
【００１３】
図１は、データ処理システム１０の一実施形態を示すブロック図であり、該データ処理システム１０はプロセッサ１２、コプロセッサ１４、コプロセッサ１６、メモリ１８、他のモジュール２０および外部バスインタフェース２２を含みこれらはすべてバス２８によって双方向的に結合されている。本発明の別の実施形態は１個だけのコプロセッサ１４、２つのコプロセッサ１４および１６、またはさらに多くのコプロセッサ（図示せず）をもつものとすることができる。外部バスインタフェース２２は集積回路端子３５によって外部バス２６に双方向的に結合されている。メモリ２４は双方向的に外部バス２６に結合されている。プロセッサ１２は任意選択的に集積回路端子３１によってデータ処理システム１０の外部に結合することができる。コプロセッサ１４は任意選択的に集積回路端子３２によってデータ処理システム１０の外部に接続することができる。メモリ１８は任意選択的に集積回路端子３３を介してデータ処理システム１０の外部に接続することができる。他のモジュール２０も任意選択的に集積回路端子３４を介してデータ処理システム１０の外部に結合することができる。プロセッサ１２はコプロセッサインタフェース３０によってコプロセッサ１４およびコプロセッサ１６の双方に双方向的に接続されている。
【００１４】
図２は、図１のプロセッサ１２の一部を示すブロック図である。一実施形態では、プロセッサ１２は制御回路４０、命令デコード回路４２、命令パイプ４４、レジスタ４６、演算論理ユニット（ＡＬＵ）４８、ラッチングマルチプレクサ（ｌａｔｃｈｉｎｇ  ｍｕｌｔｉｐｌｅｘｅｒ：ＭＵＸ）５０、ラッチングマルチプレクサ（ＭＵＸ）５２、およびマルチプレクサ（ＭＵＸ）５４を含む。本発明の一実施形態では、コプロセッサインタフェース３０は信号６０〜７１を含む。クロック信号６０は制御回路４０によって発生される。コプロセッサオペレーション信号６１は制御回路４０によって発生されかつコプロセッサ１４および１６に与えられる。
【００１５】
スーパバイザモード信号６２は制御回路４０によって発生されかつコプロセッサ１４および１６に提供される。デコード信号６３は制御回路４０によって発生されかつコプロセッサ１４および１６に提供される。コプロセッサビジー信号（ｂｕｓｙ  ｓｉｇｎａｌ）６４はコプロセッサ１４またはコプロセッサ１６から制御回路４０によって受信される。実行信号（Ｅｘｅｃｕｔｅ  ｓｉｇｎａｌ）６５は制御回路４０によって発生されかつコプロセッサ１４および１６に提供される。例外信号（Ｅｘｃｅｐｔｉｏｎ  ｓｉｇｎａｌ）６６はコプロセッサ１４またはコプロセッサ１６から制御回路４０によって受信される。レジスタ書込み（ＲＥＧＷＲ＊）信号６７は制御回路４０によって発生されかつコプロセッサ１４および１６に提供される。レジスタ信号（ＲＥＧ｛４：０｝）６８は制御回路４０によって発生されかつコプロセッサ１４および１６に提供される。エラー信号（Ｈ＿ＥＲＲ＊）６９は制御回路４０によって発生されかつコプロセッサ１４および１６に提供される。データストローブ信号（Ｈ＿ＤＳ＊）７０は制御回路４０によって発生されかつコプロセッサ１４および１６に提供される。データアクノレッジ（肯定応答）信号（Ｈ＿ＤＡ＊）７１は制御回路４０によってコプロセッサ１４およびコプロセッサ１６から受信される。コプロセッサインタフェース７０の一部とも考えられる、ハードウエアデータポート信号（ＨＤＰ｛３１：０｝）７２はコプロセッサ１４および１６とプロセッサ１２内の内部回路との間で双方向的なものである。
【００１６】
本発明の一実施形態では、複数の信号がバス２８に対しまたはバス２８から提供されてメモリ１８および／またはメモリ２４に対しデータをロードしまたは格納（ストア）する。一実施形態では、これらの信号は制御回路４０によって発生されかつバス２８に提供される転送要求信号（ＴＲＥＱ＊）７３を含む。転送エラーアクノレッジ信号（ＴＥＡ＊）７４はバス２８によって制御回路４０に提供される。転送アクノレッジ信号（ＴＡ＊）７５はバス２８によって制御回路４０に提供される。命令はバス２８から導体７６によって命令パイプ（ｉｎｓｔｒｕｃｔｉｏｎ  ｐｉｐｅ）４４に提供される。データは導体７６によってＭＵＸ５４に提供される。
【００１７】
ドライブデータ信号７９はトライステートバッファ９５をイネーブルして導体８８および７６によってラッチングＭＵＸ５２からデータを提供できるようにする。アドレス選択信号７８はラッチングＭＵＸ５０が導体７７によってバス２８にアドレスを提供できるようにする。ＭＵＸ５４への他の入力はＨＤＰ信号（ＨＤＰ｛３１：０｝）７２によって提供される。ＭＵＸ５４への他の入力はＡＬＵ結果導体８６によって提供される。ＭＵＸ５４の出力、結果信号（ｒｅｓｕｌｔｓｉｇｎａｌ）８３、はレジスタ４６にかつトライステートバッファ９６の入力に提供される。ドライブＨＤＰ信号８２はトライステートバッファ９６がＨＤＰ信号７２によって結果信号８３をドライブできるようにする。トライステートバッファ９６の出力はまたラッチングＭＵＸ５２の入力に結合されている。
【００１８】
本発明の別の実施形態はレジスタ４６に任意の数のレジスタを含めることができる。結果信号８３はラッチングＭＵＸ５０への入力として提供される。結果信号８３はＭＵＸ５４によってレジスタ４６に提供される。結果選択信号（結果＿選択：ＲＥＳＵＬＴ＿ＳＥＬＥＣＴ）８１はＭＵＸ５４のどの入力が結果導体８３にドライブされるべきかを選択する。ソース選択信号（ソース＿選択：ＳＯＵＲＣＥ＿ＳＥＬＥＣＴ）８０はラッチングＭＵＸ５２に提供されてどの信号が導体８８によってトライステートバッファ９５にドライブされるかを選択する。
【００１９】
制御回路４０は導体９１によって制御情報を提供しかつレジスタ４６からステータス情報を受信する。制御回路４０は導体９２によって制御信号を提供しかつ演算論理ユニット４８からステータス信号を受信する。制御回路４０は導体９３によって制御信号を提供しかつ命令パイプ４４および命令デコード回路４２からステータス信号を受信する。命令パイプ４４は導体８９によって命令デコード回路４２に命令を提供するよう結合されている。命令デコード回路４２は導体９０によって制御回路４０に対しデコードされた命令情報を提供する。レジスタ４６は導体８４によってソースオペランドを演算論理ユニット４８に提供する。レジスタ４６は導体８０、ラッチングＭＵＸ５２、トライステートバッファ９５および導体７６によってメモリ１８またはメモリ２４に格納されるべきデータを提供する。レジスタ４６は導体８４、ラッチングＭＵＸ５０およびアドレス導体７７によってメモリ１８またはメモリ２４にアドレス情報を提供する。レジスタ４６は導体８５によって演算論理ユニット４８に第２のソースオペランドを提供する。
【００２０】
図３は、コプロセッサ１４の一部の一実施形態を示すブロック図である。一実施形態では、コプロセッサ１４は制御回路１００、計算回路１０２および任意選択的な記憶回路１０４を含む。制御回路１００は信号６０〜７２を含むコプロセッサインタフェース３０によってプロセッサ１２に双方向的に結合されている。本発明の一実施形態では、制御回路１００はデコード回路１０６を含み、該デコード回路１０６はプロセッサ１２からオペレーション信号６１およびデコード信号６３を受信する。制御回路１００は導体１０８によって制御情報を提供しかつ任意選択的な記憶回路１０４からステータス情報を受信する。制御回路１００は導体１０９によって制御情報を提供しかつ計算回路１０２からステータス情報を受信する。計算回路１０２および任意選択的な記憶回路１０４は導体１１０によって双方向的に結合されている。信号１１０の１つまたはそれ以上はバス２８または集積回路端子３２に対しまたはこれらから提供できる。制御回路１００は導体１１２によってバス２８または集積回路端子３２に対し情報を受信しあるいは情報を提供することができる。信号７２は計算回路１０２および任意選択的な記憶回路１０４に双方向的に結合されている。さらに、信号７２は双方向的にバス２８または集積回路端子３２に結合することができる。本発明の別の実施形態では、任意選択的な記憶回路１０４は実施しなくてもよい。任意選択的な記憶回路１０４が実施されない本発明の実施形態においては、それはレジスタ、任意の種類のメモリ、ラッチまたはプログラマブル論理アレイ、その他を含む任意の種類の記憶回路を使用して構成できる。本発明の別の実施形態では、計算回路１０２は任意の種類の論理または計算機能を行うことができる。
【００２１】
本システムは特定の用途に関連する動作のために最適化された外部コプロセッサ１４（またはハードウエアアクセラレータ）によるタスク加速のためのサポートを提供する。これらの外部コプロセッサ１４，１６は人口または母集団（ｐｏｐｕｌａｔｉｏｎ）のカウントを行うためのコプロセッサ１４としての簡単なものでもよく、あるいはＤＳＰ加速コプロセッサ１４または高速乗算／累算操作が可能なコプロセッサ１４のようなより複雑な機能のものとすることもできる。
【００２２】
データは特定の構成に対して適切な１つまたはそれ以上のいくつかのメカニズムによってプロセッサ１２とコプロセッサ１４との間で転送される。これらはコプロセッサ１４への転送、およびコプロセッサ１４からの転送へと分割できる。
【００２３】
コプロセッサ１４へのデータの転送のための１つのメカニズムはレジスタスヌーピングメカニズム（Ｒｅｇｉｓｔｅｒ  Ｓｎｏｏｐｉｎｇ  ｍｅｃｈａｎｉｓｍ）であり、これは命令プリミティブ（ｉｎｓｔｒｕｃｔｉｏｎ  ｐｒｉｍｉｔｉｖｅ）を含まないが、通常のプロセッサ１２の動作の副産物である。これはコプロセッサ１４が１つまたはそれ以上のプロセッサ１２のレジスタへの更新を監視できるようにインタフェースにわたってプロセッサ１２の汎用目的のレジスタ（“ＧＰＲ”）４６に対する更新を反映することを含む。これはもしコプロセッサ１４が内部レジスタまたは機能に対してＧＰＲ４６を「オーバレイ（ｏｖｅｒｌａｙｓ）」する場合に適切であろう。この場合、プロセッサ１２からコプロセッサ１４への明確な（ｅｘｐｌｉｃｉｔ）受け渡しは必要とされないであろう。
【００２４】
命令プリミィティブ（Ｉｎｓｔｒｕｃｔｉｏｎ  ｐｒｉｍｉｔｉｖｅｓ）は外部コプロセッサ１４，１６およびプロセッサ１２の間でオペランドおよび命令の明確な転送のためにベースプロセッサ１２において提供される。命令およびデータ転送のレートに対する制御を可能にするためハンドシェイクメカニズムが提供される。
【００２５】
コプロセッサ１４の機能は構成に特有の（ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｓｐｅｃｉｆｉｃ）ユニットとなるよう設計され、従って与えられたユニットの正確な機能は、同じ命令マッピングが存在しても、異なる構成にわたり自由に変更できる。
【００２６】
図４は、レジスタスヌーピング動作を示すタイミング図である。コプロセッサ１４または外部モニタへのパラメータの受け渡しの性能オーバヘッドを避けるため、レジスタスヌーピングメカニズムが提供される。これはコプロセッサ１４がプロセッサ１２の汎用レジスタ４６の１つまたはそれ以上のシャドウコピー（ｓｈａｄｏｗ  ｃｏｐｙ）を実施できるようにする。この能力はプロセッサのＧＰＲ４６の１つへ書き込まれる値を転送しかつどのレジスタ４６が各々のＧＰＲの更新に対して更新されるかを指示することによって実施される。ストローブ信号ＲＥＧＷＲ＊６７が各々のレジスタの更新に対して肯定される。この値は３２ビットの双方向データパスＨＤＰ［３１：０］７２にわたって転送され、かつ５ビットのレジスタナンババスが更新される（ＲＥＧ［４：０］）６８の実際のプロセッサレジスタ４６へのポインタを提供する。前記レジスタナンバは通常のファイル（ｎｏｒｍａｌ  ｆｉｌｅ）におけるあるいは代わりのファイル（ａｌｔｅｒｎａｔｅ  ｆｉｌｅ）におけるレジスタ４６に言及または参照することができる。好ましい実施形態では、オルタネイトまたは代わりのファイルのレジスタはＲＥＧ［４］＝＝１によって示されかつノーマルまたは通常のファイルのレジスタはＲＥＧ［４］＝＝０によって示される。しかしながら、この発明はレジスタセットの実際の区分（ｐａｒｔｉｔｉｏｎｉｎｇ）には依存しないことに注意を要する。
【００２７】
専用の１２ビット命令バス（Ｈ＿ＯＰ［１１：０］）６１は外部コプロセッサ１４に対して発行されるコプロセッサインタフェース３０のオペコード（ｏｐｃｏｄｅ）を提供する。このバスはプロセッサのオペコードの下位（ｌｏｗ  ｏｒｄｅｒ）１２ビットを反映する。上位（ｈｉｇｈ−ｏｒｄｅｒ）４ビットはそれらは常に０ｂ０１００であるため反映されない。スーパバイザモード指示子（Ｈ−ＳＵＰ）６２もまたＰＳＲ（Ｓ）ビットの現在の状態を示すために提供され、プロセッサがスーパバイザまたはユーザモードのいずれで動作しているかを示す。これはあるコプロセッサ機能をスーパバイザモードに限定するのに有用なものとすることができる。プロセッサ１２と外部コプロセッサ１４，１６の間の一組のハンドシェイク信号はコプロセッサインタフェース３０の命令実行を調整する。
【００２８】
プロセッサ１２によって発生される制御信号はプロセッサ１２の内部パイプライン構造の反映である。プロセッサパイプライン４４は命令フェッチ、命令デコード４２、実行、および結果の書き戻し（ｗｒｉｔｅｂａｃｋ）のステージから構成される。それは１つまたはそれ以上の命令レジスタ（ＩＲ）を含む。プロセッサ１２はまた命令プリフェッチバッファを含みデコードステージ４２の前に命令のバッファリングを可能にする。命令は命令デコードレジスタＩＲに入ることによりこのバッファから命令デコードステージ４２へと進行する。
【００２９】
命令デコーダ４２はＩＲから入力を受け、かつＩＲに保持された値に基づき出力を発生する。これらのデコード４２の出力は常に有効であるとは限らず、かつ例外条件または命令フローの変更により捨てられることがある。有効な場合でも、命令はそれらが命令パイプラインの実行ステージへ進行することができるまでＩＲに保持することができる。これは前の命令が実行を完了するまで（これは複数クロックを必要とするであろう）生じ得ないから、デコーダはＩＲが更新されるまでＩＲに含まれる値をデコードし続けることになる。
【００３０】
図５は、命令ハンドシェイクのための基本的な命令インタフェース動作を示すタイミング図である。命令デコードストローブ（Ｈ＿ＤＥＣ＊）信号６３はプロセッサ１２によってコプロセッサインタフェース３０のオペコードのデコードを示すために与えられる。この信号は、たとえ命令が実行されずに捨てられる場合でも、コプロセッサインタフェース３０のオペコードがＩＲに存在する場合に肯定されることになる。前記Ｈ＿ＤＥＣ＊６３の出力は命令が実際に発行されまたは捨てられるまで同じ命令に対して複数クロックの間肯定された状態に留まることができる。
【００３１】
ビジー信号（Ｈ＿ＢＵＳＹ＊）６４は外部コプロセッサ１４がコプロセッサインタフェース３０の命令を受け入れることができるか否かを判定するためプロセッサ１２によって監視され、かつ命令の発行が生じる場合に対し部分的に制御を行う。もし前記Ｈ＿ＢＵＳＹ＊６４信号が、Ｈ＿ＤＥＣ＊６３が肯定されている間に、否定されれば、命令実行はインタフェースによってストールされず、かつＨ＿ＥＸＥＣ＊６５信号が命令実行が進行できるや否や肯定できるようになる。もしＨ＿ＢＵＳＹ＊６４信号がプロセッサ１２がコプロセッサインタフェース３０のオペコードをデコードする場合に（Ｈ＿ＤＥＣ６３＊の肯定によって示される）肯定されれば、コプロセッサインタフェース３０のオペコードの実行は強制的にストールされることになる。いったんＨ＿ＢＵＳＹ＊６４信号が否定されると、プロセッサ１２はＨ＿ＥＸＥＣ＊６５を肯定することにより命令を発行することができる。もしコプロセッサ１４が命令をバッファリングできれば、Ｈ＿ＢＵＳＹ＊６４信号はバッファの充填を助けるために使用することができる。
【００３２】
図６は、Ｈ＿ＢＵＳＹ＊６４がコプロセッサインタフェース３０の命令実行を制御するために使用される場合の命令インタフェース動作を示すタイミンク図である。いったん何らかの内部インストール条件が解消されると、かつＨ＿ＢＵＳＹ＊６４信号が否定されると、プロセッサはＨ＿ＥＸＥＣ＊６５を肯定してコプロセッサインタフェース３０の命令がパイプラインの実行ステージに入ったことを示す。外部コプロセッサ１４は命令の実際の実行を制御するためにＨ＿ＥＸＥＣ＊６５信号を監視すべきであり、その理由はプロセッサがある状況において実行する前にその命令を放棄できるからである。もし前の命令の実行が結果として例外（ｅｘｃｅｐｔｉｏｎ）が取られることになれば、Ｈ＿ＥＸＥＣ＊６５信号は肯定されず、かつＨ＿ＤＥＣ＊６３出力は否定されることになる。同様のプロセスはＩＲにおける命令がプログラムフローの変化の結果として廃棄されれば生じ得る。
【００３３】
図７は、命令廃棄または命令放棄（ｉｎｓｔｒｕｃｔｉｏｎ  ｄｉｓｃａｒｄ）を示すタイミング図である。もしある命令が廃棄されれば、Ｈ＿ＤＥＣ＊６３信号は他のコプロセッサインタフェース３０のオペコードがＨ＿ＯＰ［１１：０］６１のバスに与えられる前に否定されることになる。
【００３４】
図８は、命令パイプラインストールの例を示すタイミング図である。Ｈ＿ＤＥＣ＊６３が肯定されかつＨ＿ＢＵＳＹ＊６４が否定されてもプロセッサ１２がＨ＿ＥＸＥＣ＊６５の肯定を遅らせることができる状況がある。これは前の命令が完了するのを待機している間に生じる得る。
【００３５】
図９は、ストールのないバック−バック（ｂａｃｋ−ｔｏ−ｂａｃｋ）実行の例を示すタイミング図である。バック−バックコプロセッサインタフェース３０の命令に対しては、Ｈ＿ＯＰ［１１：０］６１バスが新しい命令がＩＲに入る際に更新されても、否定されることなく肯定された状態に留まることができる。一般に、Ｈ＿ＥＸＥＣ＊６５の肯定は前のクロックに際してデコードされた命令の実行に対応する。
【００３６】
図１０は、内部パイプラインストールを有するバック−バック動作を示すタイミング図である。この場合、Ｈ＿ＢＵＳＹ＊６４は否定されるが、プロセッサは内部ストール条件が消えるまで第２のコプロセッサインタフェース３０の命令に対してＨ＿ＥＸＥＣ＊６５を肯定しない。
【００３７】
図１１は、Ｈ＿ＢＵＳＹ＊６４ストールを有するバック−バックコプロセッサインタフェース３０の命令を示すタイミング図である。この例では、外部コプロセッサ１４はビジーであり、かつ直ちに第２の命令を受け入れることはできない。Ｈ＿ＢＵＳＹ＊６４は第２の命令がプロセッサ１２によって発行されることを防止するため肯定する。いったんコプロセッサ１４が自由になると、Ｈ＿ＢＵＳＹ＊６４が否定され、かつ次のコプロセッサインタフェース３０の命令が実行ステージへと進む。
【００３８】
コプロセッサインタフェース３０のオペコードのデコードに関連する例外は外部コプロセッサ１４によってＨ＿ＥＸＣＰ＊６６信号によって通知することができる。プロセッサ１２へのこの入力はＨ＿ＤＥＣ＊６３が肯定されかつＨ＿ＢＵＳＹ＊６４が否定されるクロックサイクルの間にサンプルされ、かつもしコプロセッサインタフェース３０のオペコードが前に述べたように廃棄されなければハードウエアコプロセッサ１４の例外に対して例外処理を生じる結果となる。この例外処理の詳細は以下に説明する。
【００３９】
図１２は、コプロセッサインタフェース３０のオペコードのデコードおよび試みられた実行に応じてコプロセッサ１４により肯定されるＨ＿ＥＸＣＰ＊６６信号の例を示すタイミング図である。Ｈ＿ＥＸＣＰ＊６６信号はＨ＿ＤＥＣ＊６３が肯定されかつＨ＿ＢＵＳＹ＊６４が否定されるクロックの間にプロセッサ１２によってサンプルされる。Ｈ＿ＥＸＥＣ＊６５信号は例外がインタフェースによって通知されるか否かにかかわりなく肯定され、この肯定は例外が取られる場合を命令廃棄の場合と区別する。
【００４０】
前記例外は前のクロックサイクルにデコードされた命令に対応し、かつ実際の実行は行われるべきでないことに注意を要する。コプロセッサ１４は違背（ｏｆｆｅｎｄｉｎｇ）命令を受け入れかつそれに対するプロセッサパイプラインの実行ステージが認識される前に例外を通知しなければならない。前記Ｈ＿ＥＸＣＰ＊６６信号はＨ＿ＤＥＣ＊６３が否定されあるいはＨ＿ＢＵＳＹ＊６４が肯定されるすべてのクロックサイクルに対して無視される。
【００４１】
図１３は、コプロセッサインタフェース３０のオペコードのデコードおよび試みられた実行に応じてコプロセッサ１４によって肯定される前記Ｈ＿ＥＸＣＰ＊６６信号の例を示すタイミング図である。これを図１４のタイミング図と比較すると、この例では、コプロセッサインタフェース３０の命令は廃棄され、従ってＨ＿ＥＸＥＣ＊６５信号は肯定されず、かつＨ＿ＤＥＣ＊６３は否定される。
【００４２】
図１４は、Ｈ＿ＢＵＳＹ＊６４が肯定されて例外を生じる結果となるコプロセッサインタフェース３０のオペコードの実行を遅らせる例を示すタイミング図である。
【００４３】
Ｈ＿ＢＵＳＹ＊６４およびＨ＿ＥＸＣＰ＊６６信号はすべてのコプロセッサ１４，１６によって共有され、従ってそれらは調整された方法でドライブされなければならない。これらの信号はＨ＿ＤＥＣ＊６３が肯定されるクロックサイクルに際してＨ＿ＯＰ［１１：１０］６１に対応してコプロセッサ１４，１６により（ハイまたはローに、いずれか適切なものに）ドライブされるべきである。出力をクロックのローの部分の間にのみドライブすることにより、これらの信号は競合なしに複数のコプロセッサ１４，１６によって共有することができる。ラッチをプロセッサ１２の内部に保持することはこの入力に対してそれを何らのユニットもそれをドライブしていない間にクロックのハイのフェーズに対して有効な状態に保持するために提供される。
【００４４】
コプロセッサインタフェース３０の命令プリミティブのいくつかはまたプロセッサ１２および外部コプロセッサ１４の間でデータ項目またはデータアイテムの転送を行うことを含む。オペランドはコプロセッサインタフェース３０にわたって実行されている特定のプリミティブの関数として転送することができる。プロセッサ１２のＧＰＲの１つまたはそれ以上を３２ビットの双方向のデータパスにわたってコプロセッサ１４からあるいはコプロセッサ１４へ転送するための備えが設けられている。さらに、データシンク／ソース（ｓｉｎｋ／ｓｏｕｒｃｅ）がコプロセッサインタフェース３０として単一データ項目をメモリ１８にロードしあるいはメモリ１８からストアするための備えも設けられている。プロセッサ１２はパラメータをＣＬＫ６０のハイ部分の間にＨＤＰ［３１：０］７２を介して外部コプロセッサ１４に受け渡し、オペランドはクロックのローフェーズの間にプロセッサ１２によってコプロセッサインタフェース３０から受信されかつラッチされる。小さな期間のバスハンドオフを可能にするためドライブが行われる前にクロックがハイに遷移する際に遅延が与えられる。コプロセッサ１４のインタフェースは立下りクロックエッジにおいて同じ小さな遅延を提供しなければならない。データ項目のハンドシェイクはデータストローブ（Ｈ＿ＤＳ＊７０）出力、データアクノレッジ（Ｈ＿ＤＡ＊７１）入力、およびデータエラー（Ｈ＿ＥＲＲ＊６９）出力信号によってサポートされる。
【００４５】
プロセッサ１２はソフトウエアサブルーチンが呼び出され（ｃａｌｌｅｄ）または戻る（ｒｅｔｕｒｎｅｄ）のとほぼ同じ方法でコプロセッサインタフェース３０に対し呼出しまたはコール（ｃａｌｌ）または戻り（ｒｅｔｕｒｎ）パラメータのリストを転送する能力を提供する。アーギュメント（ａｒｇｕｍｅｎｔｓ）のカウントは渡されるパラメータの数を制御するためＨ＿ＣＡＬＬまたはＨ＿ＲＥＴプリミティブに示される。プロセッサ１２のレジスタＲ４の内容で始まるレジスタ値はＨ＿ＣＡＬＬ（Ｈ＿ＲＥＴ）プリミティブの実行の一部として外部コプロセッサ１４へ（から）転送される。７つまでのレジスタパラメータが受け渡しできる。この規約はソフトウエアサブルーチンコールの規約と同様のものである。
【００４６】
オペランド転送のハンドシェイクはデータストローブ（Ｈ＿ＤＳ＊７０）出力およびデータアクノレッジ（Ｈ＿ＤＡ＊７１）入力信号によって制御される。データストローブは転送の期間の間プロセッサ１２によって肯定され、かつ転送はプロセッサ１２のインタフェース動作とほぼ同様に、重複した方法で行われることになる。データアクノレッジ（Ｈ＿ＤＡ＊７１）はデータエレメントがコプロセッサ１４によって受け入れられまたはドライブされたことを示すために使用される。
【００４７】
図１５は、前記Ｈ＿ＣＡＬＬプリミティブに関連するレジスタ４６の転送の例を示すタイミング図である。命令プリミティブは複数のプロセッサレジスタを転送するために提供されかつ該転送は理想的にはクロックごとに行うことができる。外部コプロセッサ１４への転送のために、プロセッサは現在のアイテムのアクノレッジの前に（または同時に）次のオペランドを自動的にドライブし始める（もし必要であれば）。外部論理はデータの喪失がないことを保証するため１つのレベルのバッファリングが可能でなくてはならない。この図はコプロセッサインタフェース３０へのＨ＿ＣＡＬＬ転送のシーケンシングまたは順序付けを示しており、この場合２つのレジスタが転送されるべきものである。第２の転送は否定されたデータアクノレッジ（Ｈ＿ＤＡ＊）７１により反復される。
【００４８】
外部コプロセッサ１４からプロセッサレジスタ４６への転送のために、プロセッサ１２はＨ＿ＤＳ＊７０が肯定された後のクロックサイクルごとに外部コプロセッサ１４から値を受け入れることができ、かつこれらの値はそれらが受信される際にレジスタファイル４６へと書き込まれ、従ってバッファリングは必要とされない。
【００４９】
図１６は、前記Ｈ＿ＲＥＴプリミティブに関連するレジスタ４６の転送の例を示すタイミング図である。この例では、２つのレジスタ４６の値が転送される。コプロセッサ１４はＨ＿ＥＸＥＣ＊６５信号の肯定に続くクロックで始まりデータを駆動することができ、それはこれがＨ＿ＤＳ＊７０が始めに肯定されるクロックであるためである。Ｈ＿ＤＳ＊７０の出力はＣＬＫ６０の立上がりエッジで遷移し、一方Ｈ＿ＤＡ＊７１の入力はＣＬＫ６０のローフェーズの間にサンプルされる。
【００５０】
プロセッサ１２はＨ＿ＬＤまたはＨ＿ＳＴ命令プリミティブによってコプロセッサインタフェース３０へあるいはから単一命令オペランドを転送する能力を提供する。
【００５１】
Ｈ＿ＬＤプリミティブはメモリ１８からコプロセッサ１４へデータを転送するために使用される。コプロセッサ１４へのオペランド転送のハンドシェイクはデータストローブ（Ｈ＿ＤＳ＊）７０信号によって制御される。データストローブはプロセッサ１２によって肯定されて有効なオペランドがＨＤＰ［３１：０］７２バス上に与えられたことを示す。データアクノレッジ（Ｈ＿ＤＡ＊）７１入力はこの転送に対しては無視される。
【００５２】
図１７は、コプロセッサインタフェース３０へのＨ＿ＬＤ転送のシーケンシングを示すタイミング図である。この場合、１つのノーウエイト状態（ｎｏ−ｗａｉｔ  ｓｔａｔｅ）のメモリ１８のアクセスがある。ｎのウエイト状態を有するメモリ１８のアクセスに対しては、オペランドおよびＨ＿ＤＳ＊７０はｎクロック後にドライブされる。もしベースレジスタ４６をロードの実効アドレスによって更新するためのオプションが選択されれば、更新値はそれが計算された後の最初のクロック（Ｈ＿ＥＸＥＣ＊６５の肯定に続くクロック）でＨＤＰ［３１：０］７２においてドライブされる。
【００５３】
図１８は、メモリ１８のアクセスが結果としてアクセス例外になる場合のプロトコルを示すタイミング図である。そのような場合、Ｈ＿ＥＲＲ＊６９信号は外部コプロセッサ１４へと肯定し戻される。
【００５４】
Ｈ＿ＳＴプリミティブはデータをコプロセッサ１４からメモリ１８に転送するために使用できる。もし前記ストアの実効アドレスによってベースレジスタ４６を更新するオプションが選択されれば、該更新値はそれが計算された後の最初のクロック（Ｈ＿ＥＸＥＣ＊６５の肯定に続くクロック）でＨＤＰ［３１：０］７２においてドライブされる。
【００５５】
図１９は、Ｈ＿ＳＴプリミティブに関連する転送の例を示すタイミング図である。Ｈ＿ＳＴプリミティブに関連するハンドシェイクは２つの部分からなり、すなわちストアのためのデータを提供しなければならない、コプロセッサ１４からの初期ハンドシェイク、およびいったんメモリ１８へのストアが完了した場合のプロセッサ１２からの完了ハンドシェイクである。
【００５６】
前記初期ハンドシェイクはコプロセッサ１４がストアデータをプロセッサ１２へとドライブしたことを通知するためプロセッサ１２へのＨ＿ＤＡ＊７１入力を使用する。Ｈ＿ＤＡ＊７１信号はコプロセッサ１４によってデータがＨＤＰ［３１：０］７２へとドライブされるのと同じクロックで肯定される。ストアデータはハーフワードサイズのストアに対してはバスの下半分（ｌｏｗｅｒ  ｈａｌｆ）から取られ、上位１６ビットはメモリ１８に書き込まれない。前記Ｈ＿ＤＡ＊７１信号はＨ＿ＥＸＥＣ＊６５信号が肯定されたクロックと共に始まりサンプルされることになる。メモリサイクルはＨ＿ＤＡ＊７１が認識されるクロックの間要求され、かつストアデータは引き続くクロックに際してメモリ１８にドライブされる。いったんストアが完了すると、プロセッサ１２はＨ＿ＤＳ＊７０信号を肯定する。
【００５７】
図２０は遅延されたストアデータを備えた転送の例を示すタイミング図である。
【００５８】
図２１は、ストアがアクセスエラーの結果となる場合のプロトコル信号を示すタイミング図である。ここでは、Ｈ＿ＥＲＲ＊６９信号が肯定されることに注意を要する。もしハードウエアユニットがＨ＿ＥＸＥＣ＊６５が肯定されるクロックでＨ＿ＥＸＣＰ＊６６を肯定することにより命令を中止すれば、Ｈ＿ＤＡ＊７１信号は肯定されるべきではない。
【００５９】
図２２〜２６はハードウエアアクセラレータ（またはコプロセッサ）１４へのインタフェースのために命令セットの一部として提供される命令を示す。プロセッサ１２が前記プリミティブのフィールドのいくつかを解釈し、他のものはコプロセッサ１４のみによって解釈される。
【００６０】
図２２は、Ｈ＿ＣＡＬＬプリミティブに対する命令フォーマットを示す。この命令はコプロセッサ１４によって実施される機能を「コール」するまたは「呼び出す」（ｃａｌｌ）ために使用される。パラダイム（ｐａｒａｄｉｇｍ）は、ハードウエアコンテクストにおけるものを除き、標準的なソフトウエアコール規約と同様である。Ｈ＿ＣＡＬＬプリミティブはプロセッサ１２およびコプロセッサ１４の双方によって解釈されて「コールパラメータ（ｃａｌｌ  ｐａｒａｍｅｔｅｒｓ）」またはアーギュメントのリストをプロセッサ１２から転送しかつコプロセッサ１４において特定の機能を開始する。
【００６１】
命令ワードのＵＵおよびＣＯＤＥ（コード）フィールドはプロセッサ１２によって解釈されず、これらはコプロセッサ１４の特定の機能を示すために使用される。ＵＵフィールドは特定のコプロセッサ１４，１６を特定することができ、かつＣＯＤＥフィールドは特定の動作または操作を特定することができる。ＣＮＴフィールドはプロセッサ１２およびコプロセッサ１４の双方によって解釈され、かつコプロセッサ１４に受け渡すためにレジスタアーギュメントの数を特定する。
【００６２】
アーギュメントは汎用レジスタ４６からＲ４で始まりかつＲ（４＋ＣＮＴ−１）へと続いて受け渡される。７個までのパラメータまたはレジスタ４６が単一のＨ＿ＣＡＬＬの実施または発動において受け渡すことができる。
【００６３】
Ｈ＿ＣＡＬＬ命令はモジュール方式のモジュール発動（ｍｏｄｕｌａｒ  ｍｏｄｕｌｅ  ｉｎｖｏｃａｔｉｏｎ）を実施するために使用できる。この種のインタフェースを使用することは長い間より高い信頼性およびより少ないバグを備えたソフトウエアシステムを生み出すために知られてきている。通常、機能パラメータは値（ｖａｌｕｅ）によって最もよく受け渡される。これは副作用を大幅に低減する。多くの場合、ＣおよびＣ＋＋のようなブロック構造言語に対する近代のコンパイラは短いシーケンスのパラメータまたはアーギュメントをレジスタ４６における発動された機能またはサブルーチンに渡す。この技術はＨ＿ＣＡＬＬ命令と共に実施することができる。コンパイラは７個までのパラメータまたはアーギュメントをＲ４で始まり引き続くレジスタ４６にロードするよう構成でき、次にＨ＿ＣＡＬＬ命令を発生し、これは標準的なコンパイラ発生サブルーチンリンケージ命令を置き換える。
【００６４】
図２３は、Ｈ＿ＲＥＴプリミティブに対する命令フォーマットを示す。この命令はコプロセッサ１４によって実施される機能「からの戻り（ｒｅｔｕｒｎ  ｆｒｏｍ）」のために使用される。パラダイムは、ハードウエアコンテクストにおけるものを除き、プロセッサ１２によって使用されるソフトウエアコール規約と同様である。Ｈ＿ＲＥＴプリミティブはプロセッサ１２およびコプロセッサ１４の双方によって解釈されて「戻りパラメータ（ｒｅｔｕｒｎ  ｐａｒａｍｅｔｅｒｓ）」または値のリストをコプロセッサ１４からプロセッサ１２へと転送する。
【００６５】
前記命令ワードのＵＵおよびＣＯＤＥ（コード）フィールドはプロセッサ１２によって解釈されず、これらはコプロセッサ１４の特定の機能を示すために使用される。ＵＵフィールドはハードウエアユニットを特定することができ、かつＣＯＤＥフィールドは戻りのためにコプロセッサ１４における特定の動作または一組のレジスタ４６を特定することができる。ＣＮＴフィールドはプロセッサ１２およびコプロセッサ１４の双方によって解釈され、かつコプロセッサ１４からプロセッサ１２へと渡すレジスタ４６のアーギュメントの数を特定する。
【００６６】
アーギュメントはＲ４で始まりかつＲ（４＋ＣＮＴ−１）へとプロセッサ１２の一般または汎用レジスタ４６へ渡される。７個までのパラメータ（またはレジスタ内容）を戻すことができる。
【００６７】
Ｈ＿ＣＡＬＬ命令と同様に、Ｈ＿ＲＥＴ命令はまたモジュール方式のプログラミングを実施するために使用できる。構造プログラミング（ｓｔｒｕｃｔｕｒｅｄ  ｐｒｏｇｒａｍｍｉｎｇ）は機能戻り値が値によってコーリングルーチンへと最もよく渡し戻されることを要求する。これはしばしばコンパイラによって１つまたはそれ以上の戻り値をサブルーチンまたは機能戻りのためのレジスタに与えることによって効率的に行われる。しかしながら、伝統的な構造プログラミングはサブルーチンまたは機能が該サブルーチンまたは機能の発動の直後に戻ることを期待することに注目すべきである。コプロセッサ１４の場合には、実行はしばしば発動プロセッサ１２のものと非同期である。Ｈ＿ＲＥＴ命令はプロセッサ１２およびコプロセッサ１４を再同期するために使用できる。従って、プロセッサ１２は１つまたはそれ以上のレジスタ４６をロードし、コプロセッサ１４を１つまたはそれ以上のＨ＿ＣＡＬＬ命令によってアクティベイトまたは活性化し、関連のない命令を実行し、かつ次にコプロセッサ１４と再同期し一方でＨ＿ＲＥＴ命令を発行することによりコプロセッサ１４から結果としての値（単数または複数）を受けることができる。
【００６８】
図２４は、Ｈ＿ＥＸＥＣプリミティブに対する命令フォーマットを示す。この命令は機能を開始しあるいはアクセラレータによって実施される動作モードに入るために使用できる。Ｈ＿ＥＸＥＣ命令はＵＵフィールドによって特定される特定のコプロセッサ１４，１６における機能を制御するために使用できる。コードフィールドはプロセッサ１２によって解釈されずむしろ指定されたコプロセッサ１４，１６のために確保される。該命令ワードのＵＵおよびＣＯＤＥフィールドはプロセッサ１２によって解釈または変換処理されず、これらはコプロセッサ１４の特定の機能を特定するために使用される。ＵＵフィールドは特定のコプロセッサ１４，１６を指定することができ、かつＣＯＤＥフィールドは特定の動作を示すことができる。
【００６９】
図２５は、Ｈ＿ＬＤ命令のための命令フォーマットを示す。この命令はメモリオペランドを汎用目的のレジスタ（ＧＰＲ）４６に一時的に格納することなくある値をメモリ１８からコプロセッサ１４に受け渡すために使用される。メモリオペランドはベースポインタおよびオフセットを使用してアドレスされる。
【００７０】
Ｈ＿ＬＤ命令はメモリ１８へのある値のロードを行い、かつメモリオペランドをそれをレジスタ４６に格納することなくコプロセッサ１４に渡す。Ｈ＿ＬＤ動作は３つのオプション、ｗ−ワード、ｈ−ハーフワードおよびｕ−更新（ｕｐｄａｔｅ）を有する。ＤＩＳＰはＩＭＭ２フィールドをロードのサイズでスケーリングし、かつゼロ拡張（ｚｅｒｏ−ｅｘｔｅｎｄｉｎｇ）を行うことによって得られる。この値はレジスタＲＸの値に加えられかつ特定されたサイズのロードはこのアドレスから行われ、ロードの結果はハードウエアインタフェース２８に渡される。ハーフワードのロードに対しては、フェッチされたデータは３２ビットへとゼロ拡張される。もしｕオプションが特定されれば、ロードの実効アドレスはそれが計算された後にレジスタＲＸ４６に入れられる。
【００７１】
前記命令ワードのＵＵフィールドはプロセッサ１２によって解釈されず、このフィールドは特定のコプロセッサ１４，１６を特定することができる。Ｓｚフィールドはオペランドのサイズ（ハーフワードまたはワードのみ）を特定する。ＤｉｓｐフィールドはＲｂａｓｅフィールドによって特定されるレジスタの内容に加えられるべき符号なしの（ｕｎｓｉｇｎｅｄ）オフセット値を特定してロードのための実効アドレスを形成する。Ｄｉｓｐフィールドの値は転送されるべきオペランドのサイズによってスケーリングされる。Ｕｐフィールドは前記Ｒｂａｓｅレジスタ４６がロードの実効アドレスによってそれが計算された後に更新されるべきか否かを特定する。このオプションまたは選択肢は「自動更新（ａｕｔｏ−ｕｐｄａｔｅ）」アドレシングモードを可能にする。
【００７２】
図２６は、Ｈ＿ＳＴ命令に対する命令フォーマットを示す。この命令はプロセッサ１２のレジスタ４６にメモリオペランドを一時的に記憶することなくある値をコプロセッサ１４からメモリ１８に渡すために使用される。前記メモリオペランドはベースポインタおよびオフセットを使用してアドレスされる。
【００７３】
前記命令ワードのＵＵフィールドはプロセッサ１２によって解釈されない。むしろ、このフィールドは特定のコプロセッサ１４，１６を特定することができる。Ｓｚフィールドはオペランドのサイズ（ハーフワードまたはワードのみ）を特定する。ＤｉｓｐフィールドはＲｂａｓｅフィールドによって特定されるレジスタ４６の内容に加えられるべき符号なしのオフセット値を特定しストアのための実効アドレスを形成する。Ｄｉｓｐフィールドの値は転送されるべきオペランドのサイズによってスケーリングまたは尺度変更される。Ｕｐフィールドは前記Ｒｂａｓｅレジスタが前記ストアの実効アドレスによってそれが計算された後に更新されるべきか否かを特定する。このオプションは「自動更新」アドレシングモードを可能にする。
【００７４】
Ｈ＿ＳＴ命令はメモリ１８へのコプロセッサ１４からのオペランドのストアを、それをレジスタ４６に格納することなく、達成する。Ｈ＿ＳＴ動作は３つのオプション、ｗ−ワード、ｈ−ハーフワード、およびｕ−更新を有する。ＤｉｓｐはＩＭＭ２フィールドをストアのサイズによってスケーリングすることおよびゼロ拡張により得られる。この値はレジスタＲＸの値に加えられかつ特定されたサイズのストアはこのアドレスに対して行なわれ、該ストアのためのデータはハードウェアインタフェースから得られる。もし前記ｕオプションが特定されれば、ロードの実効アドレスがそれが計算された後にレジスタＲＸに入れられる。
【００７５】
前記Ｈ＿ＬＤ命令およびＨ＿ＳＴ命令はデータがレジスタ４６を通って導き移動されることなくオペランドをメモリ１８からコプロセッサ１４へかつコプロセッサ１４からメモリ１８へ移動するための効率的なメカニズムを提供する。オフセットおよびインデクスの備えはアレイを効率的に歩進するためのメカニズムを提供する。したがって、これらの命令は特にループ内で有用である。両方の命令はプロセッサ１２をコプロセッサ１４とロードまたはストアされるそれぞれのオペランドに対して同期させることに注目すべきである。もしこれが必要ではないかあるいは好ましい場合には、あるいは、指定されたレジスタ（単数または複数）４６をメモリ１８からのデータによって反復的にロードすることによりデータをコプロセッサ１４に流し、かつコプロセッサインタフェースバス３０もまたレジスタスヌーピングのために使用されるからコプロセッサ１４がこれらのロードを検出するようにすることができる。
【００７６】
当業者は本発明の精神から離れることなく修正および変更を行なうことができることを理解するであろう。したがって、この発明は添付の特許請求の範囲に含まれるすべてのそのような変更および修正を含むものと考える。
【００７７】
【発明の効果】
以上のように、本発明によれば、プロセッサおよび少なくとも１つのコプロセッサを有するデータ処理システムにおいて、プロセッサとコプロセッサとの間のインタフェースにおける従来技術の欠点を克服し高性能のデータ処理システムが実現できる。
【図面の簡単な説明】
【図１】本発明に係わるデータ処理システムの一実施形態を示すブロック図である。
【図２】図１のプロセッサの一部を示すブロック図である。
【図３】図１のコプロセッサの一部の一実施形態を示すブロック図である。
【図４】本発明に係わるレジスタスヌーピング動作を示すタイミング図である。
【図５】命令ハンドシェイクのための基本的な命令インタフェース動作を示すタイミング図である。
【図６】Ｈ＿ＢＵＳＹ＊信号がコプロセッサインタフェース命令の実行を制御するために使用される場合の命令インタフェース動作を示すタイミング図である。
【図７】命令放棄を示すタイミング図である
【図８】命令パイプラインストールの例を示すタイミング図である。
【図９】ストールのないバック−バック実行の例を示すタイミング図である。
【図１０】内部パイプラインストールを有するバック−バック動作を示すタイミング図である。
【図１１】Ｈ＿ＢＵＳＹ＊ストールを有するバック−バックコプロセッサインタフェース３０の命令を示すタイミング図である。
【図１２】コプロセッサインタフェースオペコードのデコードおよび試みられた実行に応じてコプロセッサにより肯定されるＨ＿ＥＸＣＰ＊信号の例を示すタイミング図である。
【図１３】コプロセッサインタフェース命令が放棄された場合のコプロセッサインタフェースオペコードのデコードおよび試みられた実行に応じてコプロセッサにより肯定されるＨ＿ＥＸＣＰ＊信号の例を示すタイミング図である。
【図１４】コプロセッサインタフェースオペコードの実行を遅延するためにＨ＿ＢＵＳＹ＊が肯定された例を示すタイミング図である。
【図１５】Ｈ＿ＣＡＬＬプリミティブに関連するレジスタ転送の例を示すタイミング図である。
【図１６】Ｈ＿ＲＥＴプリミティブに関連するレジスタ転送の例を示すタイミング図である。
【図１７】コプロセッサインタフェースへのＨ＿ＬＤ転送のシーケンシングを示すタイミング図である。
【図１８】メモリアクセスが結果としてアクセス例外となるプロトコルを示すタイミング図である。
【図１９】Ｈ＿ＳＴプリミティブに関連する転送の例を示すタイミング図である。
【図２０】遅延されたストアデータを有する転送の例を示すタイミング図である。
【図２１】ストアが結果としてアクセスエラーとなる場合のプロトコル信号を示すタイミング図である。
【図２２】本発明に係わるＨ＿ＣＡＬＬプリミティブのための命令フォーマットを示す説明図である。
【図２３】本発明に係わるＨ＿ＲＥＴプリミティブのための命令フォーマットを示す説明図である。
【図２４】本発明に係わるＨ＿ＥＸＥＣプリミティブのための命令フォーマットを示す説明図である。
【図２５】本発明に係わるＨ＿ＬＤ命令に対する命令フォーマットを示す説明図である。
【図２６】本発明に係わるＨ＿ＳＴ命令のための命令フォーマットを示す説明図である。
【符号の説明】
１０  データ処理システム
１２  プロセッサ
１４，１６  コプロセッサ
１８  メモリ
２０  他のモジュール
２２  外部バスインタフェース
２４  メモリ
２６  外部バス
２８  バス
３０  コプロセッサインタフェース
３１，３２，３３，３４，３５  集積回路端子
【図１】
0003920994.tif 000002
【図２】
0003920994.tif 000003
【図３】
0003920994.tif 000004
【図４】
0003920994.tif 000005
【図５】
0003920994.tif 000006
【図６】
0003920994.tif 000007
【図７】
0003920994.tif 000008
【図８】
0003920994.tif 000009
【図９】
0003920994.tif 000010
【図１０】
0003920994.tif 000011
【図１１】
0003920994.tif 000012
【図１２】
0003920994.tif 000013
【図１３】
0003920994.tif 000014
【図１４】
0003920994.tif 000015
【図１５】
0003920994.tif 000016
【図１６】
0003920994.tif 000017
【図１７】
0003920994.tif 000018
【図１８】
0003920994.tif 000019
【図１９】
0003920994.tif 000020
【図２０】
0003920994.tif 000021
【図２１】
0003920994.tif 000022
【図２２】
0003920994.tif 000023
【図２３】
0003920994.tif 000024
【図２４】
0003920994.tif 000025
【図２５】
0003920994.tif 000026
【図２６】
0003920994.tif 000027