(57)【要約】【課題】ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションに関しては、ベクタ命令およびスケーラ命令の両方に関してデータのコヒーレンシを確認するデータ・コヒーレンシ技術およびメカニズムが必要になり、それにはソフトウェア経費が最小限で済み、最小限の回路構成を用いて実現できることが必要とされる。【解決手段】データ処理システムおよびその方法は、１つ以上のデータ・プロセッサを含む。データ・プロセッサは、ベクトル動作とスカラー動作の両方を行うことができる。１台のマイクロシーケンサ２２を用いて、データ・プロセッサ１０はベクトル命令とスカラー命令の両方を実行することができる。またデータ・プロセッサはベクトル・オペランドとスカラー・オペランドの両方を記憶することのできるメモリ回路を有する。【選択図】  図７８
2006012182.tif 000002
【特許請求の範囲】
【請求項１】
第１ポート；
第２ポート；
複数の制御値を記憶する第１記憶回路；
第２記憶回路；
第１ポートと第２ポートとの間に結合された第１スイッチ回路であって、複数の制御値の第１番目の制御値に応答して導電モードまたは非導電モードのいずれか一方にある第１スイッチ回路；および
第１ポートと第２記憶回路との間に結合された第１タップ回路であって、複数の制御値の第２番目の制御値に応答して導電モードまたは非導電モードのいずれかにある第１タップ回路；
であって、
第１の情報が前記第１のポートを介してデータ・プロセッサに移送される場合、前記第１のタップ回路は、前記第１の情報の少なくとも一部分が前記データ・プロセッサ中に記憶されているか否かを判断するための何らのアドレス情報も含んでいる必要がない、
データ・プロセッサ。
【請求項２】
いかなる宛先も有しないデジタル・データを通信する第１ポート；
該デジタル・データを通信する第２ポート；
制御値を記憶する第１記憶回路；
第２記憶回路；
第１ポートと第２ポートとの間に結合された第１スイッチ回路であって、制御値の第１部分に応答して導電モードおよび非導電モードのうちの１つになる第１スイッチ回路；および
第１ポートと第２記憶回路の間に結合された第１タップ回路であって、制御値の第２部分に応答して、導電モードおよび非導電モードのうちの１つになる第１タップ回路；
によって構成され、
同第１タップ回路の動作はデジタル・データのすべての宛先とは独立していることを特徴とするデータ・プロセッサ。
【請求項３】
デジタル・データを通信する第１ポート、デジタル・データを通信する第２ポート、制御値を記憶する第１記憶回路、およびデジタル・データを記憶する第２記憶回路、を有するデータ・プロセッサ内でデジタル・データを通信する方法であって：
デジタル・データのための対応する宛先が一切ないデジタル・データをデータ・プロセッサに供給する段階；
第１ポートと第２ポートとの間に第１のスイッチ回路を結合する段階；
第１ポートと第２ポートとの間に第１スイッチ回路を結合する段階；
制御値の第１部分に応答して、デジタル・データのための対応する宛先とは独立の、第１スイッチ回路の導電モードおよび非導電モードのいずれか１つを選択する段階；、
第１ポートと第２記憶回路との間に第１タップ回路を結合する段階；および
制御値の第２部分に応答して、デジタル・データのための対応する宛先とは独立の、第１タップ回路の導電モードおよび非導電モードのいずれか１つを選択する段階；
によって構成されることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にデータ処理に関し、さらに詳しくは、データ処理システムとその方法とに関する。
【背景技術】
【０００２】
ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションは、データ処理において非常に普及してきており、重要になりつつある。現在のデジタル・データ処理システムの多くは、ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションを特に念頭において設計されたものではない。そのため、ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションの要件を満足させるように特に適用および設計されたデジタル・データ処理システムを設計することで、大きな性能および価格上の利点を得られる。
【０００３】
飽和保護加算および減算などの一定の算術演算動作は、正または負の方向にオーバーフローを起こすことがある。「オーバーフロー」とは、算術演算動作の結果の値がデスティネーション・レジスタが記憶することのできる最大値を越えている状況を指す（たとえば、％１０００００００１を８ビットのレジスタに記憶しようとする）。「飽和」または「飽和保護」とは、オーバーフローの状態を処理するための方法を指し、レジスタ内の値を上位または下位の境界値と置き換える、たとえば＄ＦＦを８ビットの符号なしの上位境界値に置き換えることである。一般には、オーバーフローを処理するには２つの一般的な方法がある。第１は、結果をロールオーバーさせること、すなわち＄０１をデスティネーション・レジスタに記憶させることである（不飽和法）。第２は、結果を上位の境界値または下位の境界値と置き換える（飽和法）。
【０００４】
データ・プロセッサにおける共通の問題は、使用可能なレジスタにより、また使用可能な算術演算論理ユニット（ＡＬＵ）回路構成により対応することができるよりも幅の広い、すなわちビット数の多いデータ値に関して算術計算を実行する必要があることである。たとえば、データ・プロセッサが、１６ビットのＡＬＵを用いて２個の３２ビットのデータ値を加えることを求められることは珍しいことではない。延長動作（extended length operations）に関して有効に飽和保護を行う方法が必要であった。
【０００５】
データ・プロセッサ間の通信ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションにとって、多次元アレイの集積回路を利用することが望ましい。そのため、ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションにおける集積回路間での通信がきわめて重要であることが多い。
【０００６】
たとえばトランスピュータなどのいくつかの従来の技術によるデータ処理システムにおいては、集積回路間の通信は集積回路内における命令の実行により対話式に制御されている。そのため、他の集積回路に対してデータを転送するには１つ以上の命令が必要になり、他の集積回路からデータを受け取るには１つ以上の命令が必要になる。また、電話交換網やある種のコンピュータ・ネットワークなどの別の従来技術によるデータ処理システムにおいては、転送されるデータそのものに、どの集積回路が目的のデータ受信者であるかに関する経路情報が含まれる。
【０００７】
ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションの目的は、集積回路通信技術と、集積回路間の融通性のあるデータ伝達機能を可能にする集積回路ピン・アーキテクチャを開発することである。また、これは（１）集積回路の
アレイの外部に大量の回路構成を必要とするものでないこと；（２）データ伝達機能に関して大きなソフトウェアの費用を必要とするものでないこと；および（３）できるだけ少数の専用の集積回路ピンしか必要としないものである。
【０００８】
データ・プロセッサにおける延長動作データ・プロセッサにおける共通の問題点は、使用可能な算術演算論理ユニット（ＡＬＵ）回路構成により１回のＡＬＵサイクルで処理することができるよりも幅の広い、すなわちビット数の多いデータ値に関して算術計算を行う必要があることである。たとえば、１６ビットのＡＬＵを用いて２個の３２ビットのデータ値を加算することが求められることは珍しいことではない。従来技術によるデータ・プロセッサは、１つの「キャリー（繰上げ）」または「拡張」ビットを設け、２つのバージョンの計算命令を設けることによりこのような延長算術演算に対応することが一般的で、キャリー・ビットを命令に対する入力として用いるか否かを指定する（たとえば「加算する」および「繰上げて加える」，「減算する」および「借りて減算する」，「右にずらす」および「延長して右にずらす」など）。このような伝統的な方法は、限られた範囲の動作には充分であるが、その他の延長動作には有効に対応しない。拡大した範囲の延長動作に有効に対応する方法が必要とされた。
【０００９】
データ・プロセッサにおけるデータの移動ベクタを用いるデータ・プロセッサにおける共通の問題点は、ベクタの要素の和または合計を計算する必要があることである。あるアプリケーションにおいては、スケーラ結果（すなわち全ベクタ要素の合計）だけが必要とされる。別のアプリケーションでは、累積和のベクタを計算しなければならない。ベクタ要素を１つの全体集合値または累積部分集合のベクタに合成する必要性は加算に限られない。最小値および最大値などの他の集合動作も、アプリケーションによっては必要とされる。ベクタ要素を１つの全体集合値に合成するためのより効率的な方法およびメカニズムが必要とされる。
【００１０】
命令の多重レベル条件付き実行命令の条件付き実行は、あらゆる種類のデータ・プロセッサにおいて非常に有用な機能である。多くのデータ・プロセッサにおいては、条件付き分岐命令を用いて命令の条件付き実行を実現してきた。しかし、ＳＩＭＤ（単一命令複数データ）プロセッサにおいては、イネーブル・ビットまたはマスク・ビットだけでは、一連の複雑な論理動作を用いてイネーブルまたはマスク・ビットの次の状態を計算することが必要とされる複雑な意志決定ツリーには適切でない。より直接的な方法で命令の条件付き実行を実現することができる解決策が必要とされる。
【００１１】
データ・プロセッサのアーキテクチャＳＩＳＤ（単一命令単一データ）プロセッサは、特定の種類のデータ処理作業を実行するためには大変有用である。ＳＩＭＤ（単一命令複数データ）プロセッサは、その他の種類のデータ処理作業を実行するのに大変有用である。ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションなどのアプリケーションは、ＳＩＳＤプロセッサにより実行されることが最良であるデータ処理作業だけでなくＳＩＭＤプロセッサにより実行されることが最良であるデータ処理作業を利用することが多い。
【００１２】
着信データをデータ・プロセッサにロードするファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションは、かなりの量のデータの転送を必要とする多次元アレイの集積回路を利用することが望ましい。そのため集積回路によって着信データを選択および記憶するために用いられる方法が、ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションにおいては大きな重要性を持つ。データ処理システムの特定の要件により、着信データを様々なパターンで選択および記憶することができるようにするためには、集積回路により着信データを選択および記憶するために用いられる方法は融通がきくものでなければならない。
【００１３】
関連の従来技術では、ＤＭＡ（直接メモリ・アクセス）が、入力／出力デバイスに、アドレスおよびデータ・バスを通じてメモリに直接のアクセスが与えられる技術である；そのため入力／出力デバイスは、プロセッサを用いてメモリにアクセスする必要がない。また従来の技術では、種々のプロセッサは、種々のアドレッシング・モードを利用する命令に応答して内部でアドレスを生成する。
【００１４】
データ・プロセッサのための休止技術およびメカニズムファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションで用いられる集積回路は、集積回路が外部ソースからデータを受け取るのと同時に命令を実行することがある。その際に起こる問題は、データのコヒーレンシ（coherency ）である。集積回路は、ある命令の実行中に用いられるデータの有効性を判定するためのメカニズムを持たねばならない。無効なデータを用いることは一般的に壊滅的な問題となるので、多くのデータ処理システムにおいて認められない。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
関連の従来技術においては、データのコヒーレンシを確認するために多くの技術が用いられている。たとえば信号機（semaphore ）など、多くのソフトウェア・データ伝達または同期法がある。また、データ・インターフェースにおけるステータス・ビットなど、多くのハードウェア・データ伝達法もある。残念ながら、ハードウェア・ステータス・ビットでは、ポーリングまたは割り込みソフトウェア・ルーチンが必要とされるか、あるいは待行列（queing）法が必要になる。ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションに関しては、ベクタ命令およびスケーラ命令の両方に関してデータのコヒーレンシを確認するデータ・コヒーレンシ技術およびメカニズムが必要になり、それにはソフトウェア経費が最小限で済み、最小限の回路構成を用いて実現できることが必要とされる。
【００１６】
最大値および最小値の決定ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションにより必要とされる通常の動作は、どのデータ値または２つ以上のデータ値のグループ内のどのデータ値が最大値に等しいかを決定するための比較動作である。同様に、ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションにより必要とされる通常の動作は、どのデータ値または２つ以上のデータ値のグループ内のどのデータ値が最小値に等しいかを決定するための比較動作である。
【００１７】
符号つきの数（２の補数）と符号なしの数の両方に対応することが望ましい。また、延長（多重バイト）オペランドに対応することが望ましい。ファジー論理，ニューラル・ネットワークやその他の並行なアレイ準拠アプリケーションに関しては、多次元アレイの集積回路を利用することが望ましいので、集積回路の境界を越えてこのような最大値および最小値の比較を実行できることがさらに望ましい。
【００１８】
あるいは、最大値決定または最小値決定を実行するソフトウェア・ルーチンは、従来の技術によるソフトウェア命令を用いて実現することもできる。しかしこのようなソフトウェア・ルーチンには、長いシーケンスの命令が必要になり、実行するのに長い時間がかかる。また、異なるソフトウェア・プログラムを実行する集積回路の境界を越えてソフトウェアを拡張することは困難である。
【課題を解決するための手段】
【００１９】
上記の必要性は、本発明により達成される。従って、集積回路とその方法とがある形態
で提供される。本集積回路には、ベクタ命令を実行することのできるベクタ・エンジンが含まれる。また、本集積回路には、スケーラ命令を実行することのできるスケーラ・エンジンも含まれる。シーケンサは、ベクタ・エンジン内のベクタ命令とスケーラ・エンジン内のスケーラ命令の両方の実行を制御する。シーケンサは、ベクタ・エンジンに接続されてベクタ制御情報を通信する。シーケンサは、スケーラ・エンジンに接続されてスケーラ制御情報を通信する。ベクタ・オペランドおよびスケーラ・オペランドを記憶するための共有メモリ回路も、この集積回路には含まれる。共有メモリ回路は、ベクタ・エンジンに接続されてベクタ・オペランドを通信する。共有メモリ回路は、スケーラ・エンジンに接続されてスケーラ・オペランドを通信する。
【００２０】
これらとその他の特徴，利点は、以下の詳細な説明と、添付の図面とによりさらに明確に理解されるだろう。
【発明を実施するための最良の形態】
【００２１】
【目次】
【００２２】
セクション１概要１．１ 主な特徴１．２ アソシエーション・エンジン・アーキテクチャの目標値１．３ 表記法  セクション２機能説明２．１ アソシエーション・エンジン・システムの概要２．１．１ 概要２．１．２ マッピング２．１．３ 全体的なデータの流
れ２．１．４ データの流れ２．１．５ 初期化２．１．６ 入力データ２．１．７ 部分シナプス結果計算２．１．８ 出力データ
２．２ アソシエーション・エンジン信号の説明２．２．１ アソシエーション・エンジン・ピン・アウト２．２．２ アソシエーション・エンジン・ラン／ストップ・モードの
動作２．２．３ ポート信号
ノース・データ・ポート（ＮＤ［７：０］）
ノース制御出力（反転ＮＣＯ）
ノース制御入力（反転ＮＣＩ）
サウス・データ・ポート（ＳＤ［７：０］）
サウス制御出力（反転ＳＣＯ）
サウス制御入力（反転ＳＣＩ）
イースト・データ・ポート（ＥＤ［７：０］）
イースト制御出力（反転ＥＣＯ）
イースト制御入力（反転ＥＣＩ）
ウェスト・データ・ポート（ＷＤ［７：０］）
ウェスト制御出力（反転ＷＣＯ）
ウェスト制御入力（反転ＷＣＩ）
２．２．４ ホスト・アクセス制御ラインリード／ライト制御（Ｒ／反転Ｗ）
データ・イネーブル（反転ＥＮ）
アクセス・タイプ（ＯＰ）
２．２．５ システム・オーケストレーション・ラインラン／ストップ（Ｒ／反転Ｓ）
ビジー（ＢＵＳＹ）
２．２．６ 行列信号
行信号（反転ＲＯＷ）
列信号（反転ＣＯＬ）
２．２．７ その他の信号
システム・バス・クロック（ＣＬＫ）
システム・リセット（反転ＲＥＳＥＴ）
割込（反転ＩＮＴＲ）
汎用ポートＩ／Ｏ（ＰＡ［１：０］）
プロセッサ・ステータス（ＰＳＴＡＴ［２：０］）
２．２．８ テスト信号
テスト・クロック（ＴＣＫ）
テスト・データ入力（ＴＤＩ）
テスト・データ出力（ＴＤＯ）
テスト・モード選択（ＴＭＳ）
テスト・リセット（反転ＴＲＳＴ）
２．２．９ Ｄ．Ｃ．電気特性２．２．１０ アソシエーション・エンジン・ピン・アウト２．３ アソシエーション・エンジン・ホストがアクセスできるレジスタ２．３．１ アソシエーション・エンジン識別レジスタ（ＡＩＲ）
２．３．２ 算術演算制御レジスタ（ＡＣＲ）
２．３．３ 例外ステータス・レジスタ（ＥＳＲ）
２．３．４ 例外マスク・レジスタ（ＥＭＲ）
２．３．５ 処理要素選択レジスタ（ＰＥＳＲ）
２．３．６ ポート制御レジスタ（ＰＣＲ）
２．３．７ アソシエーション・エンジン・ポート・モニタ・レジスタ（ＡＰＭＲ）
２．３．８ 汎用ポート・レジスタ（ＧＰＰＲ）
２．３．９ 汎用方向レジスタ（ＧＰＤＲ）
２．３．１０ ＩＤＲポインタ・レジスタ（ＩＰＲ）
２．３．１１ ＩＤＲカウント・レジスタ（ＩＣＲ）
２．３．１２ ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）
２．３．１３ ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）
２．３．１４ ホスト・ストリーム選択レジスタ（ＨＳＳＲ）
２．３．１５ ホスト・ストリーム・オフセット・レジスタ（ＨＳＯＲ）
２．３．１６ ノース−サウス保持レジスタ（ＮＳＨＲ）
２．３．１７ イースト−ウェスト保持レジスタ（ＥＷＨＲ）
２．３．１８ オフセット・アドレス・レジスタ＃１（ＯＡＲ１）
２．３．１９ 深さ制御レジスタ＃１（ＤＣＲ１）
２．３．２０ オフセット・アドレス・レジスタ＃２（ＯＡＲ２）
２．３．２１ 深さ制御レジスタ＃２（ＤＣＲ２）
２．３．２２ 割込ステータス・レジスタ＃１（ＩＳＲ１）
２．３．２３ 割込マスク・レジスタ＃１（ＩＭＲ１）
２．３．２４ 割込ステータス・レジスタ＃２（ＩＳＲ２）
２．３．２５ 割込マスク・レジスタ＃２（ＩＭＲ２）
２．３．２６ マイクロシーケンサ制御レジスタ（ＭＣＲ）
２．３．２７ マイクロシーケンサ・ステータス・レジスタ（ＭＳＲ）
２．３．２８ スケーラ・プロセス制御レジスタ（ＳＰＣＲ）
２．３．２９ 命令レジスタ（ＩＲ）
２．３．３０ 命令キャッシュ・ライン有効レジスタ（ＩＣＶＲ）
２．３．３１ プログラム・カウンタ（ＰＣ）
２．３．３２ ＰＣ境界レジスタ（ＰＢＲ）
２．３．３３ 命令キャッシュ・タッグ＃０（ＩＣＴ０）
２．３．３４ 命令キャッシュ・タッグ＃１（ＩＣＴ１）
２．３．３５ 命令キャッシュ・タッグ＃２（ＩＣＴ２）
２．３．３６ 命令キャッシュ・タッグ＃３（ＩＣＴ３）
２．３．３７ スタック・ポインタ（ＳＰ）
２．３．３８ 第１レベル・スタック（ＦＬＳ）
２．３．３９ リピート開始レジスタ（ＲＢＲ）
２．３．４０ リピート終了レジスタ（ＲＥＲ）
２．３．４１ リピート・カウント・レジスタ（ＲＣＲ）
２．３．４２ グローバル・データ・レジスタ（Ｇ［０］〜Ｇ［７］）
２．３．４３ グローバル・ポインタ・レジスタ（Ｐ［０］〜Ｐ［７］）
２．３．４４ 例外ポインタ表２．３．４５ 入力データ・レジスタ（ＩＤＲ）
２．３．４６ ベクタ・データ・レジスタ（Ｖ［０］〜Ｖ［７］）
２．３．４７ ベクタ・プロセス制御レジスタ（ＶＰＣＲ）
２．３．４８ 入力タッグ・レジスタ（ＩＴＲ）
２．３．４９ 命令キャッシュ（ＩＣ）
２．３．５０ 係数メモリ・アレイ（ＣＭＡ）
２．４ アソシエーション・エンジン・マイクロコードがアクセス可能なレジスタ２．
４．１ 入力データ・レジスタ（ＩＤＲ）
２．４．２ ベクタ・エンジン・レジスタ係数メモリ・アレイ（ＣＭＡ）
ベクタ・データ・レジスタ（Ｖ［０］〜Ｖ［７］）
ベクタ・プロセス制御レジスタ（ＶＰＣＲ）
２．４．３ マイクロシーケンサ制御レジスタ命令レジスタ（ＩＲ）
プログラム・カウンタ（ＰＣ）
スタック・ポインタ（ＳＰ）
第１レベル・スタック（ＦＬＳ）
リピート開始レジスタ（ＲＢＲ）
リピート終了レジスタ（ＲＥＲ）
リピート・カウント・レジスタ（ＲＣＲ）
２．４．４ スケーラ・エンジン・レジスタグローバル・ポインタ・レジスタ（Ｐ［０
］〜Ｐ［７］）
グローバル・データ・レジスタ（Ｇ［０］〜Ｇ［７］）
スケーラ・プロセス制御レジスタ（ＳＰＣＲ）
２．４．５ アソシエーション・エンジン制御レジスタアソシエーション・エンジン識
別レジスタ（ＡＩＲ）
算術演算制御レジスタ（ＡＣＲ）
例外ステータス・レジスタ（ＥＳＲ）
例外マスク・レジスタ（ＥＭＲ）
処理要素選択レジスタ（ＰＥＳＲ）
ポート制御レジスタ（ＰＣＲ）
アソシエーション・エンジン・ポート・モニタ・レジスタ（ＡＰＭＲ）
汎用ポート・レジスタ（ＧＰＰＲ）
汎用方向レジスタ（ＧＰＤＲ）
ＩＤＲポインタ・レジスタ（ＩＰＲ）
ＩＤＲカウント・レジスタ（ＩＣＲ）
ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）
ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）
２．５ アソシエーション・エンジン・マイクロコード命令セットの概要２．５．１ 命令のタイプ２．５．２ 使用されるノーテイション２．５．３ マイクロコード命令フォーマットデータ・フォーマットレジスタの選択２．５．４ スタック・ポインタ用例２．５
．５ ＩＤＲへのアクセス２．５．６ ベクタ・プロセス制御レジスタ２．５．７ スケー
ラ・プロセス制御レジスタ２．５．８ 符号つきの動作と符号なしの動作２．５．９ 飽和動作と不飽和動作２．５．１０ アソシエーション・エンジン・システム制御動作２．５
．１１ ベクタ・エンジン・データ移動drotmov 命令の説明dsrot 命令の説明２．５．１
２ ベクタ・エンジン・データ動作右ローテイト／左シフト命令のまとめ下向きシフト動
作の説明vmin/vmax 命令の説明２．５．１３ ベクタ・エンジン条件付き動作ＶＴビット
およびＶＨビットに関する条件付き命令の効果右ローテイト命令および左シフト命令のまとめ２．５．１４ スケーラ・エンジン・データ移動２．５．１５ スケーラ・エンジン・データ動作２．５．１６ スケーラ・エンジン・プログラムの流れ制御動作２．５．１７ 
repeatおよびrepeate 命令の説明repeatループ終了時の流れの変更repeatループ終了時のベクタ条件２．５．１８ 拡張ビットと多重バイト動作の実行２．５．１９ 多重バイト動作の説明多重バイト加算多重バイト減算多重バイト比較ｘＸ０およびｘＸ１に関するＶＩＦの依存性多重バイト最大値多重バイト最小値多重バイト左算術演算シフト多重バイト右算術演算シフト多重バイト・ネゲーション多重バイト・ポインタの増分多重バイト・ポインタの減分２．５．２０ プロセス計算制御２．５．２１ ＰＥ処理に対するＶＰＣＲ Ｖ
ＨビットとＶＴビットの効果２．５．２２ 命令実行回数２．５．２３ アソシエーション・エンジン・ミッシング命令セクション３アソシエーション・エンジンの動作原理３．１
情報の流れと編成３．２ 命令パイプライン３．２．１ 命令パイプラインの休止３．２
．２ 命令パイプラインの休止優先順位３．３ 命令およびデータ・メモリ３．３．１ 命
令キャッシング３．３．２ ＣＭＡとＭＭＡのマッピング３．３．３ ＣＭＡに対する直接アクセスと反転アクセス３．３．４ ＣＭＡ空間の配置例＃１：データ記憶のみに用いら
れるＣＭＡ例＃２：命令キャッシュ，ＰＣおよびＣＭＡページ例＃３：プログラムおよびデータに用いられるＣＭＡ例＃４：シフトしたプログラム例＃５：例＃４にジャンプ・テーブルを追加例＃６：例＃４にＣＭＡスタックを追加例＃７：例＃４にベクタおよびスケーラ記憶を追加例＃８：全部を一緒にする３．４ アソシエーション・エンジンの初期化
３．５ ポート動作３．５．１ ホスト転送モードランダム・アクセス・モードホスト・ストリーム・アクセス・モード３．５．２ アソシエーション・エンジン転送モード入力イ
ンデックス付けＩＬＭＲを用いる例入力タッグ付け３．５．３ アソシエーション・エン
ジンのためのホスト・メモリ・マップ３．６ アソシエーション・エンジン動作３．６．
１ アソシエーション・エンジンの概観３．６．２ ホストとアソシエーション・エンジンの対話の詳細な説明入力有効ビット充てん後計算充てん中計算アソシエーション・エンジンとアソシエーション・エンジン’との対話３．６．３ 命令の流れのアソシエーション
・エンジンの詳細３．６．４ アソシエーション・エンジン例外モデルリセット例外スケ
ーラ例外ベクタ例外ポート・エラー例外複数ポート割込エラー例外３．６．５ マイクロ
コード・プログラム構造初期化とルーピング複数ループ２つのアソシエーション・エンジン間での信号機伝達条件付き実行３．７ マイクロコードにより開始されたポート・ライ
ト動作 ３．８ アソシエーション・エンジン・バス・コンフィギュレーション３．８．１
アソシエーション・エンジン・ポート・スイッチおよびタップ３．８．２ バス・ポート衝突およびエラーアソシエーション・エンジン衝突条件アソシエーション・エンジン競合条件アソシエーション・エンジン挟み込みアソシエーション・エンジン・スイッチ競合３．８．３ アソシエーション・エンジン・リング・コンフィギュレーション３．８．４ 二次元アソシエーション・エンジン・コンフィギュレーションセクション４アソシエーション・エンジン・バス動作４．１ アソシエーション・エンジン・ポート・タイミング４．
１．１ ホスト・ランダム・アクセス４．１．２ ホスト・ランダム・アドレス転送ウェストからイーストへ４．１．３ ホスト・ランダム・アドレスおよびデータ転送ノースとサ
ウス４．１．４ ホスト・ランダム・アドレス／早期終了のあるデータ転送ノース／サウ
ス４．１．５ ホスト・ストリーム・リード４．１．６ ホスト・ストリーム・ライト・アクセス ４．２ アソシエーション・エンジン・マスタ動作４．２．１ 全有効データのア
ソシエーション・エンジン・ライト動作４．２．２ 部分有効データのアソシエーション
・エンジン・ライト動作４．２．３ アソシエーション・エンジン・ライト衝突タイミン
グ ４．３ その他のタイミング４．３．１ アソシエーション・エンジン反転ＢＵＳＹ出
力タイミング４．３．２ ラン／ストップ介入のあるアソシエーション・エンジン・ライ
ト・タイミング４．３．３ 割込タイミング４．３．４ リセット・タイミング４．３．５
ＩＥＥＥ１１４９．１テスト・アクセス・ポート（ＴＡＰ）タイミング セクション５特定のトピックスの概要５．１ 飽和保護５．２ データ・プロセッサ間の通信：スイッチとタップ５．３ 多重ポート・データ・プロセッサ５．４ データ・プロセッサにおける延長動作５．５ データ・プロセッサにおけるデータ移動動作５．５．１ 命令dadd, daddp, dmin, dminp, dmaxおよびdmaxp５．５．２ 命令dsrot ５．６ 命令の多重レベル条件付き
実行５．６．１ 命令vif, velseおよびvendif５．６．２ 命令dskip およびdskipe５．６
．３ 命令repeatおよびrepeate ５．７ データ・プロセッサ・アーキテクチャ５．８ 着
信データをデータ・プロセッサにロードする５．９ データ・プロセッサのための休止技
術およびメカニズム ５．１０ 最大値と最小値の決定５．１０．１ 命令co lmax, rowmax, locmax, colmin, rowminおよびlocmin５．１０．２ 命令vmaxp, vmax, vminpとvmin, maxp, max, minp とmin ５．１１ 係数メモリ・アレイ（ＣＭＡ）１４に対する反転アクセス
【用語集】
【００２３】
アソシエーション・エンジン：アソシエーション・エンジン。
アソシエーション・エンジン’：２台以上のアソシエーション・エンジンを持つシステムにおいては、各アソシエーション・エンジンが異なるマイクロコードを持つことができる。プライム記号（ダッシュ）は、マイクロコードのこの差異を表すために用いられる。
【００２４】
アソシエーション・エンジン（複数形）：アソシエーション・エンジンの複数形。２台以上のアソシエーション・エンジン。
アソシエーション・エンジン・チェーン：反転ｘＣＯ／反転ｘＣＩデイジー・チェーン制御信号によりリンクされているアソシエーション・エンジンのグループ。
【００２５】
バンク：入力ベクタを処理するアソシエーション・エンジンのグループ。バンクの数を増やすと、出力ニューロンの数が増える。アソシエーション・エンジンがｘ−ｙマトリクスに配列されているとすると、バンクはそのマトリクス内の行と類似のものである。スライスの定義と比較されたい。
【００２６】
ブロードキャスト：この用語は、ラン・モード・ストリーム・ライト動作と同義語である。すなわち、データは１つのソース（アソシエーション・エンジンまたは外部のデータ・ソース）から、複数のアソシエーション・エンジンに、ストリームの形で（外部転送アドレスなし）転送される。この用語はラン・モード・ストリーム・ライトのみに適用され、ラン・モード・ストリーム・リードには適用されないので注意すること。これは、ラン・モード中は、データは、アソシエーション・エンジン内に書き込む、あるいはアソシエーション・エンジンから書き出すことができるが、アソシエーション・エンジンから読むことはできないためである。アソシエーション・エンジンからデータを読むためには、デバイスをストップ・モード（Ｒ／反転Ｓ＝０）にしなければならない。
【００２７】
ラン・モード動作中（Ｒ／反転Ｓ＝１）は、ブロードキャスト動作のデスティネーションは、受信デバイス（群）の入力データ・レジスタ（ＩＤＲ）である。ストップ・モード動作中（Ｒ／反転Ｓ＝０）は、ブロードキャスト動作のデスティネーションは、ホスト・ストリーム選択レジスタ（ＨＳＳＲ）内のＬＳ［３：０］ビットの指定により示される。
【００２８】
衝突：アソシエーション・エンジンの衝突は、外部ポートのアクセスがwrite マイクロコード命令と衝突したときに起こる（ラン・モードのみ）。この条件は、衝突のあるポートに関するタップ設定に依存する。write マイクロコード命令は常に中断される。衝突が検出されると、ポート・エラー例外処理が行われる。
【００２９】
充てん中計算：マイクロシーケンサ入力データに計算を重複させながら、入力データ・レジスタ（ＩＤＲ）を入力データで充てんする方法である。
競合：アソシエーション・エンジンの競合は、２つ以上のソースが同時にＩＤＲにアクセスしようとしたときに起こる。現在異なるソースには：１）１つ以上のポート；２）vstorei, vwritelまたはwritel命令が含まれる。この条件は主に、ラン・モード中に問題になり、タップ設定に依存する。競合が検出されると、ポート・エラー例外処理が起こる。
【００３０】
例外：アソシエーション・エンジン例外（ラン・モードのみ）は、通常のシステム内で起こりうるいくつかのシステム・イベントの１つである。アソシエーション・エンジンが応答する例外のタイプは、オーバーフロー，ゼロによる除算およびポート・エラーである。例外ベクタ表が、命令メモリの最初の部分に含まれている。
【００３１】
ホスト：アソシエーション・エンジンのハウスキーピング機能の責を負うアソシエーション・エンジンの外部にある制御メカニズム。これらの関数には、アソシエーション・エンジンの初期化，データの入力，アソシエーション・エンジンが発生した割込の処理などが含まれる。
【００３２】
入力フレーム：入力データのセット全体。出力前に必要な量のデータを生成することができる。パイプライン化を適切に用いることにより、入力フレームを重複させてより大きなスループットを得ることができる。
【００３３】
入力インデックス付け：連続シーケンスの入力サンプルを入力データ・レジスタ（ＩＤＲ）にロードすることができる入力捕捉メカニズム。
入力タグ付け：非連続シーケンスの入力サンプルを入力データ・レジスタ（ＩＤＲ）にロードすることができる入力捕捉メカニズム。
【００３４】
入力ベクタ：アソシエーション・エンジン・サブシステムが結果を生成するために必要とする入力サンプルの総数。
出力関数：フィードフォワード・ニューラル・ネットワーク内の各ニューロンの出力に適用される関数。この関数はＳ字形スカッシュ関数の形をとることが多い。この関数は、他のすべてのアソシエーション・エンジンの部分シナプス結果が収集されたときに１つのアソシエーション・エンジンにより実行することができる。単一のアソシエーション・エンジンによりこの関数が実行される様子の詳細については、セクション３．６．２．４アソシエーション・エンジンとアソシエーション・エンジン’との対話を参照のこと。
【００３５】
部分シナプス結果：入力フレームの一部に伝播関数を適用することにより得られる結果。ネットワーク内に入る入力サンプルの総数が６４未満（１つのアソシエーション・エンジンが処理することのできる最大数）である場合は、１つのアソシエーション・エンジンが入力フレーム全体に関して動作することができ（１つのニューロンに適用される）、そのために総シナプス結果を計算することができる。
【００３６】
入力サンプルの総数が６４より大きい場合は、アソシエーション・エンジンは入力フレームの一部に伝播関数を適用することができるので、各ニューロンについて部分シナプス結果が計算される。各ニューロンについて総シナプス結果を生成するためにこれらの部分シナプス結果をすべて収集することは、単一のアソシエーション・エンジンの責務である。
【００３７】
ポート：アソシエーション・エンジン上の４個の可能な外部バス・ポートのうちの１つ。ノース，サウス，イーストおよびウェストがある。
伝播関数：ネットワークの出力を計算するために用いられる関数。最も簡単な例は、入力と連結重み（connecting weights）の積の和、すなわちモＩｉＸＷｉｊである。
【００３８】
アソシエーション・エンジン・システムにおいては、アソシエーション・エンジンは部分伝播関数を実行する（各アソシエーション・エンジンは入力の一部しか用いることができないため）。これらの部分伝播関数（部分シナプス結果ともいう）をすべて収集し、それらを合計して完全な伝播関数を形成することが１つのアソシエーション・エンジンの責務である。この関数の詳細については、セクション３．６．２．４アソシエーション・エ
ンジンとアソシエーション・エンジン’との対話を参照のこと。
【００３９】
飽和：アソシエーション・エンジンにおける多くの算術演算命令は結果を飽和させる。これは結果をロールオーバーさせる命令と対比される。このような２つの異なる動作モードを持つ利点の１つに、多重バイト動作があり、この場合はより下位のバイトが飽和を起こさない命令を用いて（すなわちより下位のバイトが、結果をロールオーバーさせるような動作を実行する）、最上位バイトにおける動作により結果が飽和する。次のような符号なしの演算を考える。
【００４０】
飽和：＄ＦＦ＋＄０２＝＝＞＄ＦＦ（オーバーフローがセットされる）
不飽和：＄ＦＦ＝＄０２＝＝＞＄０１（オーバーフローがセットされる）
符号つきのモードでは飽和は別の動作をするので留意すること。詳細については、セクション２．５．９飽和動作と不飽和動作を参照のこと。
【００４１】
シャドウ・レジスタ：アソシエーション・エンジン・レジスタのいくつかは、初期値を指定するために用いられる。これらのレジスタには、隠された（シャドウ）レジスタが備えられ、初期値を定期的に持つ。シャドウ・レジスタに対するアソシエーション・エンジン・レジスタには：ＩＰＲ，ＩＣＲ，ＯＡＲ１，ＤＣＲ１，ＯＡＲ２，ＤＣＲ２がある。ＩＰＲとＩＣＲとは、ラン・モード・ストリーミング動作中に用いられる一次レジスタである。ＯＡＲ１，ＤＣＲ１，ＯＡＲ２およびＤＣＲ２は、ストップ・モード・ストリーミング動作中に用いられる一次レジスタである。シャドウ・レジスタの概念により、ストリーミング動作中に用いられるレジスタの再初期化が迅速にできる。
【００４２】
シェルフ：１つのＳＩＭＤエンジンとその関連係数値の一般的な名前。ニューラル・ネットワーク・アプリケーションでアソシエーション・エンジンが用いられる場合は、シェルフをニューロンと考えることができる。アソシエーション・エンジンをファジー論理アプリケーションで用いる場合は、シェルフはファジー・メンバーシップ関数と考えることができる。
【００４３】
ＳＩＭＤ：単一命令複数データ。この言葉は、アソシエーション・エンジンの状態制御メカニズムを説明するための形容詞として用いられる。この言葉は、アソシエーション・エンジンのすべてのＡＬＵセクションの行動を調整する単一の命令ストリームがあることを示す。
【００４４】
ＳＩＭＤベクタ・エンジン：アソシエーション・エンジンのＡＬＵセクション。アソシエーション・エンジンには、６４個の計算ブロックがあり、これらは入力データ・レジスタ（ＩＤＲ）および係数メモリ・アレイ（ＣＭＡ）に置かれたデータに関して動作する。これらの動作の結果はベクタ・レジスタ（Ｖ０〜Ｖ７）に記憶することができる。ＳＩＭＤスケーラ・エンジン：アソシエーション・エンジンの状態制御部分。ＳＩＭＤスケーラ・エンジンは、命令キャッシュ（ＩＣ）から命令を読んで、これらの命令を用いてＳＩＭＤスケーラ・エンジンとＳＩＭＤベクタ・エンジンで実行される動作を制御する。
【００４５】
スライス：２つ以上のバンクを有するアソシエーション・エンジン・サブシステムにおいては、スライスとは入力ベクタの同じ部分を同時に受け入れるアソシエーション・エンジンのグループである。スライスの数を増やすと、入力の数が増える。アソシエーション・エンジンがｘ−ｙマトリクスに配列されているとすると、スライスはマトリクス内の列と類似のものである。バンクの定義と比較されたい。
【００４６】
ストリーミング：アドレス・バス上で明確なアドレッシングを行わずにアソシエーション・エンジン・サブシステム内に情報を「注ぎ込む」あるいはサブシステムから「吸い出
す」ことができるアクセス・モード。その代わりにアドレス情報は、ＯＡＲ，ＤＣＲおよびＨＳＯＲレジスタから来る。この動作により、ソフトウェア上では、アソシエーション・エンジン・サブシステムのよりトランスペアレントな成長が可能になる。
【００４７】
スイッチ：２つの対向ポートを接続する内部回路。データがスイッチを通過すると、データの伝送に１クロック・サイクルの遅延が加わる。
タップ：現在のリードまたはライト・サイクル（ポートにおける）が、ＩＤＲレジスタのロケーションにアクセスすることを可能にする内部回路。また、このメカニズムにより、アソシエーション・エンジンは、ポート・スイッチ接続によりアソシエーション・エンジン内を通過する可能性のあるデータ転送をスヌープすることもできる。
【００４８】
セクション１ 概要
アソシエーション・エンジン（アソシエーション・エンジン）は、モトローラ社により開発され、ニューラル・ネットワーク，ファジー論理および種々の並行計算アプリケーションに対する完ぺきに統一されたアプローチを形成する単一チップ・デバイスである。本書は、スタンドアロン・デバイスおよび複数のアソシエーション・エンジンにより構成されるシステムの一部としてのアソシエーション・エンジンの機能説明および動作を説明する。マイクロコード化されたＳＩＭＤ（単一命令複数データ）エンジンとして実現されると、アソシエーション・エンジンは、既存のニューラル・ネットワーク・パラダイム，ファジー論理アプリケーションおよび並行計算アルゴリズムの多くを、最低限のホストＣＰＵの介入により支援できるだけの充分な融通性を持つ。このチップは、初期の開発段階において、特定のニューラル・ネットワークおよびファジー論理アプリケーションを行うために顧客により用いられる構築ブロックとして開発されている。長期的な目標は、オンチップ相互接続のためのインターモジュール・バス（ＩＭＢ）上で、アソシエーション・エンジンの全部または一部を用いて、特定のアプリケーションを適切なＭＣＵに統合することである。
【００４９】
セクション１．１ 主な特徴
・単一レイヤ・アプリケーションに関してスケーリングが可能：アーキテクチャは、入力フレーム幅と、出力数の両方においてスケーリングが可能である。
【００５０】
・複数レイヤ・アプリケーションに関してスケーリングが可能：アソシエーション・エンジンのグループを、共に継目なしに（最小限の外部相互接続論理部で）縦続接続して、最小限のＣＰＵ介入によりレイヤ間データを伝達することができる。
【００５１】
・各アソシエーション・エンジンは、ＣＰＵ／ＭＣＵと直接通信を行いながら、別のアソシエーション・エンジンに供給することができる。
・独自のバス・スイッチとタップ構造により、効率的なデータ転送を行う。
【００５２】
・最大６４個の８ビット入力ｘ６４出力まで対応。
・個々のアプリケーションに「カスタム・フィット」するモジュラー設計。
・オンチップ学習に対応。
【００５３】
・ファジー論理アルゴリズムに対応。
・共通ＣＰＵインターフェース。
・マイクロコード化されたＳＩＭＤエンジンで電力を供給して、汎用性を得る。
【００５４】
・ユーザによるプログラミング可能なマイクロコード。
・標準インターフェース・プロトコルに対応して、ＣＰＵまたはＭＣＵに対する直接接続が可能。
【００５５】
・すべての内部ロケーションとの単一クロックのリードおよびライト・サイクル（ストリーム・モード）に対応。
・すべての内部ロケーションとの３個のクロックのリードおよびライト・サイクル（ランダム・モード）に対応。
【００５６】
・アソシエーション・エンジン群をチェーン化して、最大２１６−１ ８ビット・サン
プルの入力データ・フレーム幅に対応することができる。
・各処理要素には、専用のＡＬＵハードウェアが含まれ、すべてのデータに関して同時に並行計算が可能になっている。
【００５７】
・ＩＥＥＥ１１４９．１境界スキャン・アーキテクチャ（ＪＴＡＧ）に対応。
セクション１．２ アソシエーション・エンジン・アーキテクチャの目標値・最小クロ
ック周波数：ＤＣ・最大クロック周波数：２０ＭＨｚ・最大ワット損：４００ｍｗ＠５ｖ・３．３ｖ動作・パッケージ・タイプ：８４ピン・リードレス・チップ・キャリア（ＬＣＣ）
・パッケージ寸法：２８ｍｍ ｘ ２８ｍｍセクション１．３ 表記法
本書で用いられる用例は、以下のとおりである：・バイト順序−−レジスタ・セットに関する説明の場合は（グループに２つ以上のレジスタが含まれている場合）、レジスタ・セットは、ＩＤＲ［６３：０］のように、アレイ・ノーテイション内に最上位のレジスタが最初に書き込まれ、最下位のレジスタが最後に書き込まれる。６４個の入力データ・レジスタのセット全体は、通常ＩＤＲと呼ばれる。
【００５８】
・ビット順序−−信号ピンのグループまたはレジスタ・ビットのグループに関する説明の場合は、最上位ビットが最大値を有し、最下位ビットが最小値を有する。そのため、ＰＳＴＡＴ［２：０］のようなノーテイションは、ＰＳＴＡＴ信号ラインが３個あり、そのうち最上位のものはＰＳＴＡＴ［２］であることを示す。
【００５９】
・名前の表記法信号名は、大文字のボールド体で表す。ビット名は、大文字のイタリック体で表す。レジスタ名は、大文字のボールドイタリック体で表す。マイクロコード命令名は、小文字のボールド体で表す。
【００６０】
・ポート名の表記法Ｎ，Ｓ，Ｅ，Ｗの４個のポートがある。ポートの一部である信号には、前にｘがつく。そのため、ｘＣＩというノーテイションは、すべてのｘＣＩ信号（ＮＣＩ，ＳＣＩ，ＥＣＩ，ＷＣＩ）を指す。
【００６１】
セクション２ 機能説明セクション２．１ アソシエーション・エンジン・システムの概要セクション２．１．１ 概要本セクションでは、アソシエーション・エンジン動作の高
度な概要を示す。また、このチップにより支援されるデータの流れとパイプライン化の背景にある概念も説明する。本書は、このチップ・セットが用いられるアプリケーションの種類について読者が一般的な理解を持っているという前提で書かれている。アソシエーション・エンジンは、並行アルゴリズム，ファジー論理およびニューラル・ネットワークの処理に効果的に用いることのできる汎用計算エンジンとして設計されている。しかし、本セクションでは、ニューラル・ネットワークのアーキテクチャとアソシエーション・エンジンのアーキテクチャとの関連について述べる。これは、基本的なニューラル・ネットワーク構造が比較的単純であるためである。また、これは本来スケーリングが可能で、アソシエーション・エンジンのスケーリング性能を評価しやすくしている。
【００６２】
ファジー論理およびニューラル・ネットワークの理解と実現とは、いくつかの興味深い、難しい問題を提示する傾向がある。多くの参加者がそれぞれの用語と概念の定義を発明
して用いているために、これらの問題は主に用語と概念の標準化がなされていないために起こって来る。この理由により、従来のニューラル・ネットワークからアソシエーション・エンジン・チップへのマッピングを簡単に説明すると役立つだろう。その後で、ホスト（アソシエーション・エンジン・チップの動作を制御する任意のインテリジェント・ソース）とアソシエーション・エンジン・チップとの間のデータの流れと、多重レイヤ・ニューラル・ネットワークにおけるレイヤ間の転送に関して説明する。
【００６３】
セクション２．１．２ マッピングアソシエーション・エンジン・チップの能力と融通
性をよりよく理解するために、従来のニューラル・ネットワークとアソシエーション・エンジン・アーキテクチャとの間のマッピングを説明する。この説明は、種々の複雑さを持つ４つの異なる例に焦点をあて、読者の理解を得ようとする。これらの例のために選択された入力および出力の数は任意であり、サイズの感覚を与えるためだけのものである。
【００６４】
アソシエーション・エンジンは、最大６４個の８ビット入力に対応し、最大６４個の出力を生成するように編成されている。６４未満の入力と６４未満の出力とを必要とするアプリケーションについては、単一のアソシエーション・エンジンで必要な構造を充分に実現する。これらの要件を越えるアプリケーション（６４個の８ビット入力および／または６４個の出力よりも大きい）については、構造を実現するために、アソシエーション・エンジンの数を変えることが必要になる。以下の例は、これらのアプリケーションを実現するために必要な異なるアソシエーション・エンジンの編成を示すために用いられる。
【００６５】
例１：４２入力ｘ３５出力のフィードフォワード・ネットワーク図１ないし図３は、従来のニューラル・ネットワーク図，論理的アソシエーション・エンジン図および物理的アソシエーション・エンジン図を用いて、４３入力と３５出力を必要とする単一のレイヤのフィードフォワード・ネットワークを図示する。この実行例は、ただ１つのアソシエーション・エンジンしか必要としない。ホストは、４２バイトのデータをアソシエーション・エンジンに転送し、伝播関数が適用されて、３５個の出力が生成される。１つのアソシエーション・エンジンは、最大６４出力に対応することができる。図１および本書の中ではどこでも、入力レイヤは何の計算関数も実行しない点に留意すること。これは分配レイヤとして機能するに過ぎない。
【００６６】
例２：１０２入力ｘ３５出力のフィードフォワード・ネットワーク図４ないし図６は、１０２入力と３５出力を持つフィードフォワード・ネットワークの従来図，論理図および物理図である。図６に示されるように、２機のアソシエーション・エンジンが必要とされる。これらのアソシエーション・エンジン群は、入力データ・ストリームと直列に接続され、アソシエーション・エンジン０がデータ入力０〜６３を処理し、アソシエーション・エンジン１がデータ入力６４〜１０１を処理する。アソシエーション・エンジン１はまた、部分シナプス結果の集合（アソシエーション・エンジン０とそれ自身からの）を実行し、３５の出力を生成する。アソシエーション・エンジン０およびアソシエーション・エンジン１は、バンクを形成する。マイクロコード・プログラミングを容易にするために、第３のアソシエーション・エンジンを配置して集合および出力関数を実行することが望ましい。
【００６７】
例３：４２入力ｘ６９出力のフィードフォワード・ネットワーク図７ないし図９は、４２入力および６９出力を必要とするフィードフォワード・ネットワークを示す。この実行例は、２機のアソシエーション・エンジンを必要とする。アソシエーション・エンジン群は入力データ・ストリームと並列に接続され、両方のアソシエーション・エンジンが入力データを同時に受け取る。図９に示されるように、アソシエーション・エンジン０とアソシエーション・エンジン１とが１つのスライスを形成する。
【００６８】
例４：７３入力ｘ６９出力のフィードフォワード・ネットワーク図１０ないし図１２は、７３入力と６０出力を必要とする実行例を示す。この実行例は、作業を行うために４機のアソシエーション・エンジンを必要とする。スライス０では、アソシエーション・エンジン０とアソシエーション・エンジン２とが接続されて入力データ０〜６３を処理する。スライス１では、アソシエーション・エンジン１とアソシエーション・エンジン３が接続されて入力データ６４〜７２を処理する。スライス０は、スライス１と効果的に直列に接続されて、６４入力を越える入力データ・ストリームを処理する。アソシエーション・エンジン０とアソシエーション・エンジン１とが接続されてバンク０を形成し、これが出力０〜６３に対応する。アソシエーション・エンジン２とアソシエーション・エンジン３とが接続されてバンク１を形成し、これが出力６４〜６８に対応する。
【００６９】
例５：６３入力ｘ２０の隠されたレイヤｘ８出力のフィードフォワード・ネットワーク図１３ないし図１５は、２レイヤ・フィードフォワード・ネットワークを示す。入力レイヤは、隠されたレイヤに対する入力データの分配点としてのみ機能する。隠されたレイヤは６３個の入力と２０個の出力とで構成される。隠されたレイヤからの２０の出力は、出力レイヤのすべての入力に等分に分配される。出力レイヤは、２０個の入力と８個の出力とで構成される。アソシエーション・エンジン０は１つのバンク（バンク０）を形成し、これが入力レイヤと隠されたレイヤとを実現する。これらのレイヤは、ホストから６３の入力サンプルを取り出し、データに関してネットワーク変形関数を実行し、次に２０の出力を出力レイヤに転送する。レイヤ３は、１つのバンク（バンク１）で構成される。バンク１（アソシエーション・エンジン１）は、隠されたレイヤにより供給される２０の入力に関して動作し、そのデータに別のネットワーク変形関数を実行し、出力０〜７を生成する。アソシエーション・エンジンとその動作についての詳細は、セクション３のアソシエーション・エンジンの動作原理を参照されたい。
【００７０】
セクション２．１．３ 全体的なデータの流れアソシエーション・エンジンは、前述の
例に見られるように、種々の方法で構築することができる。最も単純な構造（アソシエーション・エンジン１機）からより複雑な実行例まで、データの流れは一貫している。データは、ホストからアソシエーション・エンジンへ、アソシエーション・エンジンからアソシエーション・エンジン・ダッシュ（アソシエーション・エンジン’）へ、アソシエーション・エンジン’からホストへ、あるいは多重レイヤ・アプリケーションでは別のレイヤへと流れる。各アソシエーション・エンジン・デバイスは独自の番号を持っているが、ダッシュ・ノーテイション（アソシエーション・エンジン’）を用いて、異なるマイクロプログラム内容または関数をもつアソシエーション・エンジンを区別する。異なるマイクロコードをもつ複数のアソシエーション・エンジンを用いることは、１つのチップ・タイプを広範囲のアプリケーションおよび関数に用いることができるために、非常に強力な特徴であることを再度述べる。
【００７１】
アソシエーション・エンジンには、それぞれＮ，Ｓ，Ｅ，Ｗとラベルのついたノース，サウス，イーストおよびウェストの専用ポートがある。アソシエーション・エンジン・アレイにホストがアクセスする間、ポートはアソシエーション・エンジン／ホストに対してアドレスおよびデータ情報を供給する専門の関数を行う。プログラム制御のもとでは、すべてのポートが同一の基本的な転送プロトコルを用いて、レイヤ間またはレイヤ内での通信を実行する際に互いに相互接続されるようになっている。次のセクションでは、これらのポートを通じたデータの流れの概要について説明する。図１６がデータの流れに説明に関して参照される。
【００７２】
セクション２．１．４ データの流れサブシステム内の各アソシエーション・エンジン
は、外部インターフェース回路を通じてホスト・システムからアドレス，データおよび制御刺激を受け取る。すべての初期化，ステータス監視および入力は、このインターフェー
スを通過する。図１６では、ホスト・インターフェースはウェスト・ポートおよびサウス・ポートに接続されている。アソシエーション・エンジン群とホストとの間でデータを転送するためのいくつかのプログラミング可能なモードがあるが、これらについては後のセクションで詳細に説明する。あるデータ転送モードは、初期化，ステータス・チェック，係数メモリ・アレイ（ＣＭＡ）の準備または計算を行う動作用データの入力など特定の関数を行うために他のモードよりも適している。本セクションでは、動作用データの入力に関する説明を除き、各関数に適した転送モードについては述べない。これらの転送モードの詳細は、セクション２．２，アソシエーション・エンジン信号の説明およびセクション３，アソシエーション・エンジンの動作原理に説明する。またアソシエーション・エンジンには他の多くのプログラミング可能な機能が含まれるが、これらについても後述する。
【００７３】
セクション２．１．５ 初期化動作用データをアソシエーション・エンジンに入力する
前に、デバイスの主要部分の多くを初期化しなければならない。アソシエーション・エンジンのデフォルト値の定義については、ホストがアソシエーション・エンジンを動作状態に入れるために必要とされる労力を最小限に留めるよう注意が払われている。ホストにより初期化を必要とする部分のより詳細な定義については、セクション３，アソシエーション・エンジンの動作原理を参照されたい。
【００７４】
セクション２．１．６ 入力データサブシステム内の各アソシエーション・エンジンは
、適切な数の入力データ・ベクタを取り入れ、ニューロンに関して部分シナプス結果を計算し、その結果を関連のアソシエーション・エンジン’に転送する責を負う。入力データ・ベクタは、通常ホストからアソシエーション・エンジン群に転送され、その間にアソシエーション・エンジン群がマイクロプログラムを実行する。これらのデータ・ストリーミングのモードは、他のアクセス・モードと共に、セクション３．５．１，ホスト転送モードおよびセクション３．５．２，アソシエーション・エンジン転送モードに説明されている。
【００７５】
図１６に示されるアソシエーション・エンジン・サブシステムは、２５６バイトの入力データ・ベクタ・ストリームを支援し、これらは図１７に示されるように４つの部分入力ベクタと見なすことができる。各アソシエーション・エンジンは、６４バイトの入力データ・ベクタ・ストリームを支援する。各アソシエーション・エンジンの関連の制御信号および内部構造により、いつアソシエーション・エンジンがそのデータのセグメントをホストから受け取るかが決定される。アソシエーション・エンジン０およびアソシエーション・エンジン１は、最初の６４バイトの入力ベクタ（または部分入力ベクタ＃１）を受け取り、アソシエーション・エンジン２およびアソシエーション・エンジン３は部分入力ベクタ＃２を受け取り、アソシエーション・エンジン４およびアソシエーション・エンジン５が部分入力ベクタ＃３を受け取り、アソシエーション・エンジン６およびアソシエーション・エンジン７が部分入力ベクタ＃４を受け取る。
【００７６】
前述のように、各アソシエーション・エンジンは、最高６４個の入力サンプルを受け取ることができ、各アソシエーション・エンジンが最高６４個の部分シナプス結果を計算する。アソシエーション・エンジン群は、共にチェーン化されて、より広い入力データ・ベクタに対応することができる。チェーン内のすべてのアソシエーション・エンジンの部分シナプス結果を集合して、出力を形成するためには、１つ以上のアソシエーション・エンジンのチェーンをアソシエーション・エンジン’に接続しなければならない。アソシエーション・エンジン’に接続されたアソシエーション・エンジンのチェーンは、バンクと呼ばれる。各バンクは、６４のニューロンを処理することができる。図１６では、２つのバンク、すなわちバンク０とバンク１がある。そのため、図示されたサブシステムは、１２８のニューロンを処理することができる。
【００７７】
バンク０では、アソシエーション・エンジン０の第１部分出力値が、アソシエーション・エンジン２，４，６の第１部分出力値と合成されて、そのバンクの第１ニューロンの出力を生成する。合計のニューロン出力値の集合は、アソシエーション・エンジン８’内で行われる。すべての部分出力値（またはニューラル・ネットワーク・アーキテクチャの部分シナプス結果）は、アソシエーション・エンジン群からアソシエーション・エンジン’にイースト／ウェスト・ポートを通じて伝えられる。
【００７８】
セクション２．１．７ 部分シナプス結果計算アソシエーション・エンジンには、広範
囲の算術演算および論理演算を実行することのできる単一命令，複数データ（ＳＩＭＤ）計算エンジンが含まれる。６４の処理要素はすべて、ロックステップでそのデータ値を計算する。多くの実行例では、アソシエーション・エンジン群は対応されるアルゴリズムの複雑さのために計算に拘束される。アソシエーション・エンジンは、そのパイプライン化された内部アーキテクチャのために、計算オーバーヘッドのかなりの部分を入力データ転送時間に隠すことができる。これはアソシエーション・エンジンが、入力データ・ベクタの最初のサンプルが到着すると計算関数を開始することができ、入力データ・ベクタ全体を受け取るまで計算を開始するのを待たなくてもよいためである。ユーザは、マイクロコード命令セットを用いてマイクロコード・メモリ・アレイにダウンロードすることができ、入力データに関する計算を実行する（セクション２．５，アソシエーション・エンジン・マイクロコード命令セットの概要を参照）。
【００７９】
セクション２．１．８ 出力データ部分シナプス結果が６４すべてのニューロンに関し
て計算される（計算関数は、６４すべてのニューロンに関して並行に行われる）と、６４個のニューロンのそれぞれの部分シナプス結果がアソシエーション・エンジンから関連のアソシエーション・エンジン’に対して、イースト−ウェスト・ポートを通り、マイクロプログラムの制御下で転送される。アソシエーション・エンジンからアソシエーション・エンジン’に転送された部分シナプス結果は、実行された計算の種類やその計算の精度により幅にばらつきがある。ホスト転送のための制御ラインと同様の適切な制御ラインが用いられて、各アソシエーション・エンジンからアソシエーション・エンジン’に対するデータの流れを整理する。アソシエーション・エンジン群が関連のデータに関する計算を終了すると、これらの制御ラインを監視して、適当なときにその結果をバスに入れる。ネットワークの寸法と複雑さとによっては、適切なバス動作のために外部分離およびバッファ回路構成が必要になることもある。しかし多くの場合は、アソシエーション・エンジンとアソシエーション・エンジン’によりバスを制御するために用いられる制御信号は、この外部回路構成を制御するのに充分である。すべての部分シナプス結果が（アソシエーション・エンジン’で）合計されると、出力関数がその和に適用される。
【００８０】
セクション２．２ アソシエーション・エンジン信号の説明本セクションは、アソシエ
ーション・エンジン入力および出力信号ピンの説明を行う。これらの信号は、いくつかの異なるグループに分類される：すなわちポート信号；ホスト・アクセス制御信号；システム・オーケストレーション信号；行列信号；その他の信号；およびテスト信号である。表２．１は、アソシエーション・エンジン・ピンのまとめを行う。
【００８１】
本セクションで用いられる表記法は、セクション１．３，表記法で説明されたものと同じである。
セクション２．２．１ アソシエーション・エンジン・ピン・アウトアソシエーション
・エンジンから外に出るピンは、図１８に示される。
【００８２】
セクション２．２．２ アソシエーション・エンジン・ラン／ストップ・モードの動作
アソシエーション・エンジンは、２つのモード：ラン・モードまたはストップ・モードのいずれか一方で動作するように設計されている。モードは、Ｒ／反転Ｓ信号により選択さ
れる。この信号により、アソシエーション・エンジンがラン・モード（ＶＤＤでＲ／反転Ｓ）にあるか、ストップ・モード（Ｒ／反転Ｓ＝０）にあるかが決定する。動作モードにより、アソシエーション・エンジン上の信号は異なる行動をとる。表２．２は、各モードの機能を説明する。それぞれのタイミング情報については、セクション４，アソシエーション・エンジン・バス動作を参照のこと。アソシエーション・エンジンによる異なるデータ転送の説明については、セクション３．５，ポート動作を参照のこと。
【００８３】
ラン・モードは、アソシエーション・エンジンのマイクロプログラムを実行するために用いられる。ストップ・モードは、アソシエーション・エンジン内部リソースに対する外部アクセスを行って、システム・ホストによる初期化およびデバッグを可能にする。
【００８４】
セクション２．２．３ ポート信号
以下にアソシエーション・エンジンの４つのポート信号グループを説明する。４つのポートは、アソシエーション・エンジン・デバイスを見下ろしたときのそれぞれの物理的な位置により、ノース，サウス，イースト，ウェストとラベルがつけられている。
【００８５】
セクション２．２．３．１ ノース・データ・ポート（ＮＤ［７：０］（７１））
これらの信号は、動作がラン・モードであるかストップ・モードであるかによりアドレスまたはデータ情報を転送する。ラン・モードの場合は、この双方向ポートは、ライト・ノース・マイクロコード命令（writen, vwriten ）に応答して出力として駆動し、データがチップのノース−サウス・ポートを通り転送される場合は入力として働く。ストップ・モードの場合も、このポートは双方向である。ＯＰ信号がランダム・アクセス転送を示して、このデバイスが選択される（反転ＲＯＷおよび反転ＣＯＬの両方がアサートされる）と、このポートはランダム・アクセス・アドレスのＬＳＢを受け取り、すぐにサウス・ポートに伝えられる。このデバイスが選択されない場合は、このポート（入力としてのＮＤ）で受け取られたデータが、ＮＤ内外に伝えられる（出力としてのＮＤ）。アソシエーション・エンジンから出されたデータ値は、ＣＬＫ信号の立ち下がり端でイネーブルになる。アソシエーション・エンジン内に入れられたアドレス／データ値は、ＣＬＫ信号の立ち上がり端でラッチされる。
【００８６】
セクション２．２．３．２ ノース制御出力（反転ＮＣＯ（７３））
この出力信号は、有効なデータがＮＤ信号ラインから出て行くことを示す。この信号は、ＣＬＫ信号の立ち下がり端で移行する。
【００８７】
セクション２．２．３．３ ノース制御入力（反転ＮＣＩ（７５））
この入力信号は、有効なアドレス／データ信号がＮＤ信号ライン上に入ることを示す。この信号はＣＬＫ信号の立ち上がり端でラッチされる。
【００８８】
セクション２．２．３．４ サウス・データ・ポート（ＳＤ［７：０］）（８３）
これらの信号は、動作がラン・モードであるかストップ・モードであるかにより、アドレスまたはデータ情報を転送する。ラン・モードの場合は、この双方向ポートは、ライト・サウス・マイクロコード命令（writes, vwrites ）に応答して出力として駆動し、データがチップのノース−サウス・ポートを通り転送される場合は入力として働く。ストップ・モードの場合も、このポートは双方向である。ＯＰ信号がランダム・アクセス転送を示して、このデバイスが選択される（反転ＲＯＷおよび反転ＣＯＬが両方ともアサートされる）と、ＳＤはＣＬＫの立ち上がり端でランダム・アクセス・データをラッチするか（Ｒ／反転Ｗ＝０のとき）、あるいはランダム・アクセス・データがＣＬＫの立ち下がり端でＳＤから外に出される（Ｒ／反転Ｗ＝１のとき）。このデバイスが選択されない場合は、このポート（入力としてのＳＤ）で受信されたデータが、ノース・ポートに直接伝えられ、ノース・ポートで受信されたデータがＳＤ内外に伝えられる（出力としてのＳＤ）。ア
ソシエーション・エンジンから出されたデータ値は、ＣＬＫ信号の立ち下がり端でイネーブルにされる。アソシエーション・エンジン内に入れられたアドレス／データ値は、ＣＬＫ信号の立ち上がり端でラッチされる。ストップ・モード・アクセス中にＨＳＰ［１：０］ビットがこのポートの動作をどのように変更することができるかという情報に関してはセクション２．３．１４，ホスト・ストリーム選択レジスタ（ＨＳＳＲ）を参照のこと。
【００８９】
セクション２．２．３．５ サウス制御出力（反転ＳＣＯ（８５））
この出力信号は、有効なアドレス／データがＳＤ信号ラインから出されていることを示す。この信号は、ＣＬＫ信号の立ち下がり端で移行する。
【００９０】
セクション２．２．３．６ サウス制御入力（反転ＳＣＩ（８９））
この入力信号は、有効なデータ信号がＳＤ信号ライン上でに入れられることを示す。この信号はＣＬＫ信号の立ち上がり端でラッチされる。
【００９１】
セクション２．２．３．７ イースト・データ・ポート（ＥＤ［７：０］）（７７）
これらの信号は、動作がラン・モードであるかストップ・モードであるかにより、アドレスまたはデータ情報を転送する。ラン・モードの場合は、この双方向ポートは、ライト・イースト・マイクロコード命令（writee, vwritee ）に応答して出力として駆動し、データがチップのイースト−ウェスト・ポートを通り転送される場合は入力として働く。ストップ・モードの場合は、このポートで受信されたデータ（入力としてのＥＤ）は直ちにウェスト・ポートに伝えられ、ウェスト・ポートで受信されたデータはＥＤ内外に伝えられる（出力としてのＥＤ）。アソシエーション・エンジンから出されたデータ値は、ＣＬＫの立ち下がり端でイネーブルになる。アソシエーション・エンジン内に入れられたアドレス／データ値は、ＣＬＫ信号の立ち上がり端でラッチされる。ストリーム・モード・アクセス中にＨＳＰ［１：０］ビットがこのポートの動作をどのように変更することができるかという情報に関してはセクション２．３．１４，ホスト・ストリーム選択レジスタ（ＨＳＳＲ）を参照のこと。
【００９２】
セクション２．２．３．８ イースト制御出力（反転ＥＣＯ（７９））
この出力信号は、有効なアドレス／データがＥＤ信号ラインから出されていることを示す。この信号は、ＣＬＫ信号の立ち下がり端で移行する。
【００９３】
セクション２．２．３．９ イースト制御入力（反転ＥＣＩ（８１））
この入力信号は、有効なデータがＥＤ信号ライン上に入れられることを示す。この信号はＣＬＫ信号の立ち上がり端でラッチされる。
【００９４】
セクション２．２．３．１０ ウェスト・データ・ポート（ＷＤ［７：０］）（９１）
これらの信号は、動作がラン・モードであるかストップ・モードであるかにより、アドレスまたはデータ情報を転送する。ラン・モードの場合は、この双方向ポートは、ライト・ウェスト・マイクロコード命令（writew, vwritew ）に応答して出力として駆動し、データがチップのイースト−ウェスト・ポートを通り転送される場合は入力として働く。ストップ・モードの場合も、このポートは双方向である。ＯＰ信号がランダム・アクセス転送を示して、このデバイスが選択される（反転ＲＯＷおよび反転ＣＯＬが両方ともがアサートされる）と、このポートはランダム・アクセス・アドレスのＭＳＢを受け取り、すぐにイースト・ポートに伝えられる。このデバイスが選択されない場合は、このポート（入力としてのＷＤ）で受信されたデータが、直ちにイースト・ポートに伝えられ、イースト・ポートで受信されたデータがＷＤ内外に伝えられる（出力としてのＷＤ）。アソシエーション・エンジンから出されたデータ値は、ＣＬＫ信号の立ち下がり端でイネーブルになる。アソシエーション・エンジン内に入れられたアドレス／データ値は、ＣＬＫ信号の立ち上がり端でラッチされる。
【００９５】
セクション２．２．３．１１ ウェスト制御出力（反転ＷＣＯ（９３））
この出力信号は、有効なデータがＷＤ信号ラインから出されていることを示す。この信号は、ＣＬＫ信号の立ち下がり端で移行する。
【００９６】
セクション２．２．３．１２ ウェスト制御入力（反転ＷＣＩ（９５））
この入力信号は、有効なアドレス／データがＷＤ信号ライン上に入れられることを示す。この信号はＣＬＫ信号の立ち上がり端でラッチされる。
【００９７】
セクション２．２．４ ホスト・アクセス制御ライン以下の信号は、ストップ・モード
内で、アソシエーション・エンジン内部のリソースにアクセスするために用いられる。ホスト・アクセスは、ランダム・アクセスでもストリーム・アクセスでもよい。
【００９８】
セクション２．２．４．１ リード／ライト制御（Ｒ／反転Ｗ（６５））
この入力信号は、アソシエーション・エンジンに対するアクセス／アソシエーション・エンジンからのアクセスの方向を制御するために用いられる。この信号が高の場合、アクセスはリード（データがアソシエーション・エンジンから読み出される）であり、この信号が低の場合は、アクセスはライト（データがアソシエーション・エンジンに書き込まれる）である。Ｒ／反転Ｗピンは、ＣＬＫの立ち上がり端で内部ラッチされる。
【００９９】
セクション２．２．４．２ データ・イネーブル（反転ＥＮ（６７））
このアクティブな低入力信号は、ホスト・バス転送のためのデータ・イネーブルである。この信号がアサートされる（反転ＲＯＷおよび反転ＣＯＬ入力と共に）と、アドレスまたはデータがアソシエーション・エンジンに転送され、適当な数のバイト／ワードが転送されるか、あるいは反転ＥＮがネゲートされるまで続く。反転ＥＮ信号を用いて、アソシエーション・エンジンに流れ込む、あるいはアソシエーション・エンジンから流れ出す情報のデータ速度を制御することができる。反転ＲＯＷ，反転ＣＯＬラインをアクティブに保持し、反転ＥＮ信号をイネーブル／ディスエーブルにすることにより、データ転送の速度を変更することができる。反転ＥＮピンは、ＣＬＫの立ち上がり端でラッチされる。
【０１００】
セクション２．２．４．３ アクセス・タイプ（ＯＰ）（９４）
この入力信号は、どのようなタイプのホスト・アクセス（Ｒ／反転Ｓ＝０）が実行されるかを示すために用いられる。ＯＰピンは、ＣＬＫの立ち上がり端で内部ラッチされる。
【０１０１】
ＯＰ＝０のときは、ストリーム・アクセス・モードが選択される。このモードで動作しているときは、ＯＡＲｘ／ＤＣＲｘレジスタの組み合せを用いると、開始アドレスおよびカウントが内部生成される。このメカニズムにより、データのストリームは、アソシエーション・エンジン・システム内に書き込まれるか、あるいはアソシエーション・エンジン・システムから読み出される。開始アドレス（ＯＡＲｘ）と期間（ＤＣＲｘ）レジスタとを用いることにより、データのストリームはアドレスを供給せずにアソシエーション・エンジンのチェーンに送られる。このチェーンは、ｘＣＩおよびｘＣＯ信号（図１９参照）の相互接続により形成される。すべてのアソシエーション・エンジンは、同じデータに対してアクセスを有する。ストリーム転送の方向は、Ｒ／反転Ｗにより決まる。各データがロードされるたびに、内部アドレス・ポインタが自動的に増分する。ストリーム・アクセスをアソシエーション・エンジンのアレイにおいて実行する前に、ホスト・ストリーム・オフセット・レジスタ（ＨＳＯＲ）をロードしなければならない。ストリーミングに関する詳細は、セクション３．５．１，ホスト転送モードを参照のこと。
【０１０２】
ＯＰ＝１のときは、ランダム・アクセス・モードが選択される。このモードでは、ポートによりリードまたはライト動作が実行されるたびにアドレスが必要になる。アドレスは
、ウェスト・ポートおよびノース・ポート（それぞれ、１６ビット・アドレスのＭＳｂｙｔｅ，ＬＳｂｙｔｅ）に提示される。サウス・ポートでデータが取り出されるか、あるいは提示される（リード／ライトによる）。
【０１０３】
セクション２．２．５ システム・オーケストレーション・ライン以下の信号は、アソ
シエーション・エンジン・システムの調和を図るために用いられる。最も注目すべき信号は、ラン／ストップ・モードと、複数のアソシエーション・エンジンのための完了信号である。
【０１０４】
セクション２．２．５．１ ラン／ストップ（Ｒ／反転Ｓ）（８０）
この入力信号は、アソシエーション・エンジンの動作モードを決定する。この信号が高のとき（ＶＤＤ）は、ラン・モードが選択される。この信号が低のとき（ＶＳＳ）は、ストップ・モードが選択される。Ｒ／反転Ｓピンは、ＣＬＫ信号の立ち上がり端でラッチされる。
【０１０５】
ストップ・モードは主に、アソシエーション・エンジン（群）のホスト初期化およびコンフィギュレーションのためのものである。ラン・モードは主に、ホストを介入しない内部マイクロコードの実行と、アソシエーション・エンジン間でのデータ転送のためのものである。
【０１０６】
セクション２．２．５．２ ビジー（反転ＢＵＳＹ）（７８）
このアクティブ低，オープン・ドレーン出力信号は、アソシエーション・エンジンが現在命令を実行中であることを示すために用いられる。アソシエーション・エンジンがdone命令を実行したか、あるいは単一ステップ・モードで選択された命令を完了したときに、反転ＢＵＳＹピンがネゲートされる。反転ＢＵＳＹ信号は、反転ＲＥＳＥＴラインがアクティブになったとき、あるいはＲ／反転Ｓ信号がストップ・モードに移行するときにもネゲートされる。この出力は、外部のプルアップ・デバイスと共に用いられて、すべてのアソシエーション・エンジンがいつ「終了（done）」状態になったかを判定する。反転ＢＵＳＹピンは、ＣＬＫ信号の立ち下がり端でイネーブルになる。
【０１０７】
セクション２．２．６ 行列信号
反転ＲＯＷおよび反転ＣＯＬ信号は、ラン・モードであるかストップ・モードであるかにより２つの異なる関数を実行する。ラン・モードでは、これらの信号は、複数のアソシエーション・エンジンの間の最小値および最大値動作を補助するために用いられる。ストップ・モードでは、これらの信号はホスト転送のためのアソシエーション・エンジン・デバイスを選択するために用いられる。
【０１０８】
セクション２．２．６．１ 行信号（反転ＲＯＷ（８２））
このアクティブ低の双方向ワイヤＯＲ信号は、ある行のアソシエーション・エンジンを選択する場合と、マイクロプログラムの制御下で最小値および最大値関数を補助するためとに用いられる。
【０１０９】
ラン・モードでは、反転ＲＯＷ信号は、max およびmin マイクロコード命令のセットにより用いられて、共通の反転ＲＯＷラインを共有するチップ間でチップの境界を越えて最大値および最小値関数を行う。この命令の間に、テストされているレジスタからのデータ・ビットが、このワイヤＯＲ信号に書き込まれる。次の１／２クロック・サイクルの間に、この信号が検知されて、読み出されたデータが書き込まれたデータと同じものであるか否かが調べられる。チップの境界を越えてmin またはmax を実行するには、チップがロック・ステップ動作を行うことが必要とされるのはもちろんである（すなわち異なるチップ上の命令が同じクロックで実行される）。
【０１１０】
ストップ・モードでは、反転ＲＯＷ信号は、アソシエーション・エンジンに対するチップ選択入力として用いられ、ホスト・アクセスのための（行内の）アソシエーション・エンジンを選択する。
【０１１１】
セクション２．２．６．２ 列信号（反転ＣＯＬ（８４））
このアクティブ低の双方向ワイヤＯＲ信号は、ある列内でアソシエーション・エンジンを選択する場合と、マイクロプログラムの制御下で最小値および最大値関数を補助するために用いられる。
【０１１２】
ラン・モードでは、反転ＣＯＬ信号は、max およびmin マイクロコード命令のセットにより用いられて、共通の反転ＣＯＬラインを共有するチップ間でチップの境界を越えて最大値および最小値関数を行う。この命令の間に、テストされているレジスタからのデータ・ビットが、このワイヤＯＲ信号に書き込まれる。次の１／２クロック・サイクルの間に、この信号が検知されて、読み出されたデータが書き込まれたデータと同じものであるか否かが調べられる。ここでも、チップの境界を越えてmin またはmax を実行するには、チップがロック・ステップ動作を行うことが必要とされる（すなわち異なるチップ上の命令が同じクロックで実行される）。
【０１１３】
ストップ・モードでは、反転ＣＯＬ信号は、アソシエーション・エンジンに対するチップ選択入力として用いられ、ホスト・アクセスのための（列内の）アソシエーション・エンジンを選択する。
【０１１４】
セクション２．２．７ その他の信号
セクション２．２．７．１ システム・バス・クロック（ＣＬＫ）
この入力信号は、ネットワーク全体のためのシステム・クロックである。このクロックを用いてあるチップから外に出るデータ転送はすべて、クロックの立ち下がり端で出力データを転送し、クロックの立ち上がり端で入力データを捕捉する。全データおよび制御信号のための準備および保持時間は、このクロックに関連する。複数のアソシエーション・エンジン間でこの信号を同期させることは、特定のアソシエーション・エンジン命令の性能にとって重要な意味を持つ（特に、rowmin, rowmax, colmin, colmax, vwrite, write などの「外部から見える」命令に関して）。
【０１１５】
セクション２．２．７．２ システム・リセット（反転ＲＥＳＥＴ）
このアクティブ低入力信号は、内部システム・リセットと接続されていて、システム内のすべてのデバイスに適用されるシステム・リセットである。この信号がアサートされると、すべてのデバイスを強制的にデフォルト状態に戻す。リセットはＣＬＫの立ち上がり端と内部同期されている。詳細については、セクション４．３．４，リセット・タイミングを参照のこと。
【０１１６】
セクション２．２．７．３ 割込（反転ＩＮＴＲ（６６））
このアクティブ低のオープン・ドレーン出力信号は、ホスト・システムに割込条件が起こったことを知らせるために用いられる。ＩＭＲ１，ＩＭＲ２レジスタに設定されたビットにより、この信号は種々の理由でアサートされる。詳細については、セクション２．３．２３，割込マスク・レジスタ＃１（ＩＭＲ１），セクション２．３．２５，割込マスク・レジスタ＃２（ＩＭＲ２）およびセクション４．３．３，割込タイミングを参照のこと。
【０１１７】
セクション２．２．７．４ 汎用ポートＩ／Ｏ（ＰＡ［１：０］（６８））
これらのアクティブ高入力／出力信号は、アソシエーション・エンジン・マイクロプロ
グラムによる入力／出力全般に用いられる。これらのピンが入力としてプログラミングされている場合は、データはＣＬＫ信号の立ち上がり端でラッチされる。出力としてプログラミングされている場合は、これらの信号はＣＬＫ信号の立ち下がり端でデータをイネーブル・アウトする。これらの２つのピンは、入力または出力として独立してプログラミングすることができる。Ｉ／Ｏおよびデータ・プログラミングの詳細については、セクション２．３．８，汎用ポートレジスタ（ＧＰＰＲ）を参照のこと。
【０１１８】
セクション２．２．７．５ プロセッサ・ステータス（ＰＳＴＡＴ［２：０］（８６）
）
これらの出力信号は、アソシエーション・エンジン命令の状態を継続的に反映する。これらの出力信号は、ＣＬＫ信号の立ち下がり端で出される。ＰＳＴＡＴ［２：０］信号の可能な値については表２．３を参照のこと。
【０１１９】
セクション２．２．８ テスト信号
４つのテスト信号が、ボード相互接続の境界走査テストのためのＩＥＥＥ１１４９．１テスト・アクセス・ポート（ＴＡＰ）を支援するインターフェースとなる。
【０１２０】
セクション２．２．８．１ テスト・クロック（ＴＣＫ）
この入力信号は、テスト論理のための専用クロックとして用いられる。テスト論理のクロック動作はアソシエーション・エンジンの通常動作とは独立しているので、ボード上の他のすべてのアソシエーション・エンジン・コンポーネントは共通のテスト・クロックを共有することができる。
【０１２１】
セクション２．２．８．２ テスト・データ入力（ＴＤＩ）
この入力信号は、ＴＡＰおよび境界走査データ・レジスタに対するシリアル・データ入力となる。
【０１２２】
セクション２．２．８．３ テスト・データ出力（ＴＤＯ）
この３状態出力信号は、ＴＡＰまたは境界走査データ・レジスタからのシリアル・データ出力となる。ＴＤＯ出力を高インピーダンス・モードに入れると、ボードレベルのテスト・データ・パスを並列に接続することができる。
【０１２３】
セクション２．２．８．４ テスト・モード選択（ＴＭＳ）
この入力信号は、ＴＡＰコントローラにより解読されて、テスト支援回路構成の主要動作を区別する。
【０１２４】
セクション２．２．８．５ テスト・リセット（反転ＴＲＳＴ）
この入力信号は、ＴＡＰコントローラとＩＯ．Ｃｔｌセルを初期状態にリセットする。ＩＯ．Ｃｔｌセルの初期状態とは、双方向ピンを入力として構成するものである。境界走査チェーンの詳細については、セクション２．６．３，データ・レジスタを参照のこと。
【０１２５】
セクション２．２．９ Ｄ．Ｃ．電気特性表２．４は、入力および出力関数に関するア
ソシエーション・エンジンのｄ．ｃ．電気特性を示す。
セクション２．２．１０ アソシエーション・エンジン・ピン・アウト図２０は、アソ
シエーション・エンジン・パッケージの外に出るピンを詳細に示している。「ｎ．ｃ．」とラベルのつけられたピンは、無接続ピンで、アソシエーション・エンジン内部のアクティブな回路構成には接続されていない。
【０１２６】
セクション２．３ アソシエーション・エンジン・ホストがアクセスできるレジスタ本
セクションで説明されるレジスタは、ホスト・モード・アクセス中に（すなわちＲ／反転
Ｓ＝０）アソシエーション・エンジンに対してアクセスすることができる内部レジスタである。これらのレジスタには、ランダム・アクセス・モード（ＯＰ＝１）またはストリーム・アクセス・モード（ＯＰ＝０）のいずれかを用いてアクセスすることができる。しかし、アソシエーション・エンジン識別レジスタ内の値を変更することはできない。ホストがアクセスすることのできるレジスタのリストは、表２．６を参照のこと。
【０１２７】
セクション２．３．１ アソシエーション・エンジン識別レジスタ（ＡＩＲ）
アソシエーション・エンジン識別レジスタ（ＡＩＲ）３３０は、ホストまたはマイクロコードにより用いられて、デバイスのタイプと寸法とを決定することができる。このデバイスに対して行われた機能上の修正は、レジスタの減分により登録される（すなわち、このデバイスは＄ＦＦのＩＤを持ち、このデバイスの次のバージョンは＄ＦＥというＩＤとなる）。
【０１２８】
このレジスタは、ホストおよびマイクロコード・メモリ・マップの最初にあるので、アーキテクチャがどのように修正されても、このレジスタは常に同じ位置にある。
ＡＩＲは、読み込み専用レジスタであり、マイクロコード命令movfc によりアクセスすることができる。ＡＩＲは図２１により詳細に図示される。詳細についてはセクション２．４．５．１，アソシエーション・エンジン識別レジスタ（ＡＩＲ）を参照のこと。
【０１２９】
セクション２．３．２ 算術演算制御レジスタ（ＡＣＲ）
算術演算制御レジスタ（ＡＣＲ）１７２は、ベクタ・エンジンおよびスケーラ・エンジン内の数値の算術演算表現を制御する。表２．７にＡＣＲに関するより詳細な情報が示される。
【０１３０】
ＳＳＧＮおよびＶＳＧＮビットは、算術演算動作中の数値が、スケーラ・エンジンおよびベクタ・エンジン内でそれぞれ符号つきのものと見なされるのか、ないものと見なされるのかを制御する。これらのビットはまた、どのようなタイプのオーバーフロー（符号があるのかないのか）が生成されるかを制御する。これらのビットのデフォルト値は０であり、これはスケーラ・エンジンおよびベクタ・エンジン内ではデフォルトで符号つきの算術演算が用いられることを意味する。
【０１３１】
ＡＣＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。図２２に、ＡＣＲがより詳細に図示される。詳細についてはセクション２．４．５．２，算術演算制御レジスタ（ＡＣＲ）を参照のこと。
【０１３２】
セクション２．３．３ 例外ステータス・レジスタ（ＥＳＲ）
例外ステータス・レジスタ（ＥＳＲ）３３２は、すべての保留中の例外の発生を記録する。アソシエーション・エンジン例外モデルは、フラットであり（例外処理はネストされない；すなわち一度に１つの例外しか処理されない）、優先順位をつけられている（優先度の高い例外は、より低い優先度をもつ例外よりも先に処理される）。ホストによりこのレジスタが読まれるたびに、その内容はクリアされる。セクション２．４．５．３，例外ステータス・レジスタに説明されているrte 命令によるビットのクリアと比較されたい。表２．８にＥＳＲに関するより詳細な情報が示される。
【０１３３】
ＳＶＥビットは、スケーラ・エンジン内でオーバーフロー例外がいつ起こったかを示す。ＶＶＥビットは、ベクタ・エンジンでいつオーバーフロー例外が起こったかを示す。すなわち、６４の処理要素のいずれかでオーバーフローが起こると、このビットがセットされる。
【０１３４】
ＳＤＥビットは、スケーラ・エンジン内でゼロによる除算例外がいつ起こったかを示す
。ＶＤＥビットは、ベクタ・エンジン内でゼロによる除算例外がいつ起こったかを示す。ＶＶＥビットと同様に、ＶＤＥビットは、６４個の処理要素すべてのゼロによる除算ステータスを反映する。６４個の処理要素のいずれかでゼロによる除算が起こると、ＶＤＥビットがセットされる。
【０１３５】
ＰＣＥビットは、ＰＣ制限超過例外がいつ起こったかを示す。ＰＣ制限超過例外は、プログラム・カウンタ（ＰＣ）の内容がＰＣ境界レジスタ（ＰＢＲ）よりも大きいときに起こる。
【０１３６】
ＩＯＥビットは、不当なオペコードがアソシエーション・エンジンによりいつ実行されたかを示す。
ＰＥＥビットは、ポート・エラー例外がいつ起こったかを示す。可能性のあるポート・エラー例外は、セクション３．６．４．５，複数ポート割込エラー例外と、表３．６のポート・エラー例外に示される。
【０１３７】
ＩＣＥビットは、命令に基づくＩＤＲ競合がいつ起こったかを示す。この条件は、外部ストリーム・ライトがＩＤＲをロードしようとすると同時に、vstore,vwritel またはwritel命令が実行されたときに起こる。これも、ポート・エラー例外の１つと見なされる。
起こりうるポート・エラー例外は、セクション３．６．４．５，複数ポート割込エラー例外と、表３．６のポート・エラー例外に示される。
【０１３８】
例外処理の詳細な説明については、セクション３．６．４，アソシエーション・エンジン例外モデルを参照のこと。ＥＳＲは、読み込み専用レジスタで、マイクロコード命令movfc によってアクセスすることができる。ＥＳＲは、図２３により詳細に図示される。
【０１３９】
セクション２．３．４ 例外マスク・レジスタ（ＥＭＲ）
例外マスク・レジスタ（ＥＭＲ）３３４は、アソシエーション・エンジンの例外条件を選択的にイネーブル（およびディスエーブル）にすることができる。例外がマスク・オフされると、対応する例外ルーチンは呼び出されない。表２．９にＥＭＲに関するより詳細な情報が示される。
【０１４０】
ＶＶＥＭビットがセットされると、ベクタ・エンジン内にオーバーフロー条件があっても例外が起きない（すなわち例外処理が起こらない）。ベクタ・オーバーフローは、各処理要素のＶＰＣＲのＶＶビットにより表され、ＥＳＲのＶＶＥビットにより全体が表される。デフォルトではＶＶＥＭはクリアであり、これはベクタ・エンジンにオーバーフロー条件があるときに例外処理が行われることを意味する。
【０１４１】
ＳＤＥＭビットは、スケーラ・エンジン内のゼロによる除算条件によりプログラムの流れに変更が起こるか否かを決める。ＳＤＥＭビットがセットされていると、スケーラ・エンジンにゼロによる除算条件が起こっても、例外処理は行われない。デフォルトではＳＤＥＭはクリアであり、これはスケーラ・エンジンにゼロによる除算条件があるときに例外処理が行われることを意味する。
【０１４２】
ＶＤＥＭビットは、ベクタ・エンジン内のゼロによる除算条件によりプログラムの流れに変更が起こるか否かを決める。ＶＤＥＭビットがセットされると、ベクタ・エンジンにゼロによる除算条件が起こっても、例外処理は行われない。デフォルトではＶＤＥＭはクリアであり、これはベクタ・エンジンにゼロによる除算条件があるときに例外処理が行われることを意味する。
【０１４３】
ＰＣＥＭビットは、ＰＣ制限超過により例外処理が行われるか否かを決める。デフォル
トではＰＣＥＭはクリアであり、これはＰＣ制限超過により例外処理が行われることを意味する。ＰＣ制限超過は、「致命的に近い」動作条件と見なされるので、このビットは常にクリアにしておくことを強く勧める。
【０１４４】
ＩＯＥＭビットは、命令ストリームに不当なオペコードがある場合に例外処理が行われるか否かを決める。デフォルトでは、ＩＯＥＭはクリアであり、これは不当なオペコード条件があると例外処理が行われることを意味する。このビットがセットされると、不当なオペコードは単純に見過ごされて、例外処理は起こらない。
【０１４５】
ＰＥＥＭビットは、ポート・エラー（ラン・モード中）により例外処理が行われるか否かを決める。デフォルトでは、ＰＥＥＭはクリアであり、これはすべてのポート・エラーによりポート・エラー例外ルーチンが実行されることを意味する。ＰＥＥＭがセットされると、すべてのポート・エラーは無視される。これは勧められない。
【０１４６】
ＩＣＥＭビットは、命令に基づくＩＤＲ競合により例外処理が行われるか否かを決める。デフォルトではＩＣＥＭはクリアであり、すべての命令に基づくＩＤＲ競合により命令に基づくＩＤＲ競合例外ルーチンが実行されることを意味する。ＩＣＥＭがセットされると、すべての命令に基づくＩＤＲ競合は無視される。
【０１４７】
ＥＭＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細についてはセクション２．４．５．４，例外マスク・レジスタ（ＥＭＲ）を参照のこと。ＥＭＲは図２４に、より詳細に図示される。
【０１４８】
セクション２．３．５ 処理要素選択レジスタ（ＰＥＳＲ）
処理要素選択レジスタ（ＰＥＳＲ）２２０は、すべての下向きシフト命令（drotmov, dsrot, dadd, daddp, dmin, dminp, dmaxおよびdmaxp ）の間に用いられる。ＰＥＳＲに含まれる値により、どの処理要素が処理要素＃０にラップするデータを供給するかが示される。本質的には、ＰＥＳＲはシフト・チェーンの終点を表す。このレジスタのデフォルト値は＄３Ｆであり、すべての処理要素が下向きシフト動作に用いられることを示す。
【０１４９】
ＰＥＳＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細については、セクション２．４．５．５，処理要素選択レジスタ（ＰＥＳＲ）を参照のこと。ＰＥＳＲは図２５に、より詳細に図示される。
【０１５０】
セクション２．３．６ ポート制御レジスタ（ＰＣＲ）
ポート制御レジスタ（ＰＣＲ）５２は、ラン・モード（Ｒ／反転Ｓ＝１）中にアソシエーション・エンジン内をどのようにデータが流れるか、またラン・モード中に入力データ・レジスタがどのように充てんされるかを制御する。ＰＣＲは図２６に、より詳細に図示される。表２．１０に、ＰＣＲに関するより詳細な情報を示す。
【０１５１】
ラン・モード（Ｒ／反転Ｓ＝１）では、このレジスタの最初の４ビット（ＮＴ７０，ＥＴ６８，ＳＴ６６，ＷＴ６４）はタップ・ビットであり、あるポートに書き込まれた情報を入力データ・レジスタ（ＩＤＲ）に送るか否かを制御する。データが外部デバイスによりラン・モード中にポートの１つに書き込まれて、そのポートのタップ・ビットがセットされている場合は、そのポートに書き込まれたデータはＩＤＲにも書き込まれる。
【０１５２】
ラン・モード（Ｒ／反転Ｓ＝１）では、２個のスイッチ・ビット（ＮＳＳ７４，ＥＷＳ）７２が、あるポートに書き込まれた情報を対向ポートに書き込むか否かを制御する。たとえばＮＳＳ＝１で、データがノース・ポートにストリーミングされると、そのデータは１クロック後にサウス・ポートからストリーミング・アウトされる。同様にＮＳＳ＝１で
、データがサウス・ポートにストリーミングされると、そのデータは１クロック後にノース・ポートからストリーミング・アウトされる。
【０１５３】
ノース−サウス・スイッチが閉であり、ノース・タップとサウス・タップが両方とも閉であって、データがノース・ポートに書き込まれると、複写データはＩＤＲには書き込まれない（すなわちノース・ポートに書き込まれたデータは、スイッチを通じ、サウス・タップを通りＩＤＲまで進まない）。
【０１５４】
タップおよびスイッチの設定は、ラン・モード（Ｒ／Ｓ＝１）のときしか有効でない。アソシエーション・エンジンが停止されると（Ｒ／反転Ｓ＝０）、反転ＲＯＷ，反転ＣＯＬおよび反転ＥＮ信号およびアドレス情報によりデータのソース／デスティネーションが決まる。
【０１５５】
充てんモード・ビット（ＦＭ）７６は、ラン・モード中にどのようにＩＤＲが充てんされるかを制御する。ＦＭ＝０のときは、入力インデックス付けが用いられてＩＤＲを充てんする。入力インデックス付けを用いてＩＤＲを充てんする際には、ＩＰＲおよびＩＬＭＲにより、入力データがどこに記憶されるかが決まり、ＩＣＲによりいくつのバイトが記憶されるかが決まり、ＩＯＲによりブロードキャストされている入力データがいつ受け取られるかが決まる。図２７は、入力インデックス付けを実現するために用いられるレジスタを示す。
【０１５６】
ＦＭ＝１のときは、入力タグ付けが用いられる。入力タグ付けは、ＩＰＲおよびＩＬＭＲを用いて、入力データをどこに記憶するかを決め、ＩＣＲがいくつのバイトが記憶されるかを決め、ＩＴＲはブロードキャストされている入力データがいつ受け入れられるかを決める。図２８は、入力タグ付けを実現するために用いられるレジスタを示す。
【０１５７】
ラン・モードにある場合、データはチップからチップへと、ブロードキャストデータ転送を用いて伝送されることに留意されたい。またこれらの転送のデスティネーションは常にＩＤＲである。
【０１５８】
入力インデックス付けおよび入力タグ付けに関する説明は、セクション３．５．２．１，入力インデックス付けとセクション３．５．２．３，入力タグ付けにある。
ＰＣＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細は、セクション２．４．５．６，ポート制御レジスタ（ＰＣＲ）を参照のこと。
【０１５９】
セクション２．３．７ アソシエーション・エンジン・ポート・モニタ・レジスタ（Ａ
ＰＭＲ）
アソシエーション・エンジン・ポート・モニタ・レジスタ（ＡＰＭＲ）３３６は、アソシエーション・エンジン内のポート・エラー例外の原因を決めるために用いられる。ＥＳＲのＰＥＥビットがセットされているとき、これらのビットによりポート・エラー例外の原因が記述される。表２．１０は、ＡＰＭＲに関するより詳細な情報を示す。
【０１６０】
このレジスタの最初の４ビット（ＥＷ，ＥＳ，ＥＥ，ＥＮ）は、エラー条件が起こったときにデバイスを通じたラン・モード・ライトが進行中であるか否かを示す（ポート・エラー例外はラン・モード中にしか起こらないことに注意）。最後の４ビット（ＩＷ，ＩＳ，ＩＥ，ＩＮ）は、エラー条件が起こったときにマイクロコード・ライトが進行中であるか否かを示す。
【０１６１】
図３０にポート・エラー例が図で示される。
エラー・コードの説明については、セクション３．６．４．４，ポート・エラー例外およびセクション３．６．４．５，複数ポート・エラー例外を参照のこと。
【０１６２】
ＡＰＭＲは、読み込み専用レジスタであり、マイクロコード命令movfc によりアクセスすることができる。詳細についてはセクション２．４．５．７，アソシエーション・エンジン・ポート・モニタ・レジスタ（ＡＰＭＲ）を参照のこと。ＡＰＭＲは図２９により詳細に図示される。
【０１６３】
セクション２．３．８ 汎用ポート・レジスタ（ＧＰＰＲ）
汎用ポート・レジスタ（ＧＰＰＲ）３３８は、汎用方向レジスタ（ＧＰＤＲ）と共に用いられて、ＰＡ［１：０］信号ピンの状態を決める。ＰＡ［１：０］は、基本的には２ビットのパラレルＩ／Ｏポートである。このレジスタは、この２ビットのパラレルＩ／Ｏポートに対するインターフェースとして機能し、ホストにより用いられてシステム全体のパラメータ値を決めることも、あるいはアソシエーション・エンジンにより用いられて状態情報を示すこともできる。このレジスタは反転ＲＥＳＥＴ信号により変更されない。
【０１６４】
ＧＰＰＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細については、セクション２．４．５．８，汎用ポート・レジスタ（ＧＰＰＲ）を参照のこと。ＧＰＰＲは、図３１により詳細に図示される。
【０１６５】
セクション２．３．９ 汎用方向レジスタ（ＧＰＤＲ）
汎用方向レジスタ（ＧＰＤＲ）３４０は、汎用ポート・レジスタ（ＧＰＰＲ）と共に用いられて、ＰＡ［１：０］信号ピンの状態を決める。このレジスタは、各信号ピンの方向を制御する。これらのビットの定義については表２．１２を参照のこと。このレジスタのデフォルト（またはリセット）条件は、リセット時に＄００にセットされるが、これはＰＡ［１：０］信号が入力として動作することを示す。
【０１６６】
ＧＰＤＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細についてはセクション２．４．５．９，汎用方向レジスタ（ＧＰＤＲ）を参照のこと。ＧＰＤＲは、図３２により詳細に図示される。
【０１６７】
セクション２．３．１０ ＩＤＲポインタ・レジスタＩＤＲポインタ・レジスタ（ＩＰ
Ｒ）１３２は、ラン・モード（Ｒ／反転Ｓ＝１）中にＩＤＲをブロードキャスト動作にアドレスするために用いられる。このレジスタに含まれる値は、ブロードキャスト転送が開始されたときに転送される開始ＩＤＲロケーションを示す。ＩＰＲは、０（ＩＤＲの第１ロケーション）から６３（ＩＤＲの最終ロケーション）までの値をもつ。このレジスタのリセット時の値は０であり、ラン・モード中にデータを受け取る最初のＩＤＲロケーションがＩＤＲ［０］であることを示す。
【０１６８】
ＩＰＲレジスタは、ＩＰＲレジスタの内部バージョンにより隠されている。このシャドウ・レジスタにより、ＩＰＲで特定された初期値が修正されないまま残ることになり、ＩＰＲシャドウ・レジスタ内の値が修正されてデータをＩＤＲに入れる。ＩＰＲシャドウ・レジスタの内容は、ＩＤＲにデータがロードされるたびに増分される。シャドウ・レジスタがいくつまで増分されるかは、ＩＬＭＲレジスタの内容により決まる。
【０１６９】
ＩＰＲシャドウ・レジスタは、以下の条件下でＩＰＲからロードされる：１．レジスタがロードされたとき；
２．done命令が実行されたとき；
３．ＩＤＲＣアドレッシング・モードが用いられたとき；および４．反転ＲＥＳＥＴ信号がトグルされたとき（１−＞０−＞１）。
【０１７０】
ＩＤＲＣをベクタ命令のソース・オペランドとして指定すると、ＩＤＲの内容をベクタ・ソースとして用いる場合と同様に、ＩＤＲの有効ビットがクリアされる。可能なベクタ・レジスタ・ソースのリストは表２．３６を参照のこと。
【０１７１】
ハードウェア上の制約：ＩＤＲの境界を越えて書き込もうとしたり、ＩＰＲシャドウ・レジスタを通常の方法で増分して＄３ｆを越えると、「ＩＤＲは満杯」ということを示す内部フラッグがセットされる。ＩＤＲに対するその後のラン・モード・ライト（writel, vwritel または外部ライトによる）はすべて無視される。このフラッグは、done命令が実行されるたび、ＩＤＲＣアドレッシング・モードが用いられるたび、あるいは反転ＲＥＳＥＴ信号がアサートされるたびにクリアされる。
【０１７２】
ＩＰＲはホスト・モード・ストリーミング動作に用いられるＯＡＲ１レジスタと同様である。ＩＬＭＲがどのようにＩＤＲ入力インデックス付けに影響を与えるかについてはセクション３．５．２．２を参照のこと。図３３にＩＰＲをより詳細に図示する。
【０１７３】
ＩＤＲ，ＩＰＲ，ＩＣＲ，ＩＬＭＲがラン・モード入力インデックス付けの間にどのように協働するかの説明については、セクション２．３．６，ポート制御レジスタ（ＰＣＲ）のＦＭビットの説明を参照のこと。ＩＰＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細はセクション２．４．５．１０，ＩＤＲポインタ・レジスタ（ＩＰＲ）を参照のこと。
【０１７４】
セクション２．３．１１ ＩＤＲカウント・レジスタ（ＩＣＲ）
ＩＤＲカウント・レジスタ（ＩＣＲ）１３６は、ラン・モード（Ｒ／反転Ｓ＝１）ストリーム・ライト動作中にＩＤＲにより受け入れられるバイト数を決定するために用いられる。ＩＣＲは、０から６３までの値をもつことができ、０の値は１バイトがＩＤＲに書き込まれることを示し、６３は６４バイトがＩＤＲに書き込まれることを示す。ＩＤＲに０バイトをロードする必要がある場合は、ポート制御レジスタ（ＰＣＲ）のポート・タップを開くことができる。ＩＣＲは入力インデックス付け（ＰＣＲ：ＦＭ＝０）のときも入力タグ付け（ＰＣＲ：ＦＭ＝１）のときも用いられる。リセット後のこのレジスタの値は６３で、ラン・モード・ストリーム・ライトが開始すると６４バイトがＩＤＲに受け入れられることを示す。
【０１７５】
ＩＣＲレジスタは、ＩＣＲレジスタの内部バージョンにより隠されている。このシャドウ・レジスタにより、ＩＣＲで特定された初期値が修正されないまま残ることになり、ＩＣＲシャドウ・レジスタ内の値が修正されてデータをＩＣＲに入れる。ＩＣＲシャドウ・レジスタの内容は、ＩＤＲにデータがロードされるたびに減分される。シャドウ・レジスタがいくつまで減分されるかは、ＩＬＭＲレジスタの内容により決まる。
【０１７６】
ＩＣＲシャドウ・レジスタは、以下の条件下でＩＣＲからロードされる：１．レジスタがロードされたとき；
２．done命令が実行されたとき；
３．ＩＤＲＣアドレッシング・モードが用いられたとき；および４．反転ＲＥＳＥＴ信号がトグルされたとき（１−＞０−＞１）。
【０１７７】
ハードウェア上の制約：ＩＤＲの境界を越えて書き込もうとしたり、ＩＣＲシャドウ・レジスタを通常の方法で減分して＄００より小さくすると、「ＩＤＲは満杯」ということを示す内部フラッグがセットされる。ＩＤＲに対するその後のラン・モード・ライト（writel, vwritel または外部ライトによる）はすべて無視される。このフラッグは、done命令が実行されるたび、ＩＤＲＣアドレッシング・モードが用いられるたび、あるいは反転
ＲＥＳＥＴ信号がアサートされるたびにクリアされる。
【０１７８】
ＩＣＲはホスト・モード・ストリーミング動作に用いられるＤＣＲ１レジスタと同様である。シャドウ・レジスタがいくつまで減分されるかは、ＩＬＭＲレジスタの内容により制御される。ＩＬＭＲがＩＤＲインデックスにどのように影響を与えるかについては、セクション３．５．２．２を参照のこと。
【０１７９】
ＩＤＲ，ＩＰＲ，ＩＣＲ，ＩＬＭＲがラン・モード入力インデックス付けの間にどのように協働するかの説明については、セクション２．３．６，ポート制御レジスタ（ＰＣＲ）のＦＭビットの説明を参照のこと。ＩＣＲには、マイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細はセクション２．４．５．１１，ＩＤＲカウント・レジスタ（ＩＣＲ）を参照のこと。ＩＣＲは、図３４により詳細に図示される。
【０１８０】
セクション２．３．１２ ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）
ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）１３４は、ラン・モード（Ｒ／反転Ｓ＝１）中にデータがどのようにＩＤＲにロードされるかを決める。ランダム・アクセス・モードでは、ＩＤＲポインタ・レジスタ（ＩＰＲ）は用いられない（ＩＤＲの各ロケーションはそれぞれ明確にアドレッシングしなければならない）。ストリーム・ライト動作中はマスク・ビットが、どの内部生成されたＩＤＲアドレス・ビットが「無視される（don't cared ）」かを決める。ＩＬＭＲは、ストリーム・ライト・データを受け取ったときにＩＤＲポインタ・レジスタ（ＩＰＲ）がどれだけ増分するべきかを示す指標としても機能する。
【０１８１】
ＩＬＭＲの動作を制御する２つの原則は、次の通りである：・ＩＬＭＲのビットは内部生成されたアドレスに関して「無視する」として機能する。すなわち、データはアドレスが「無視される」ときに選択されたＩＤＲロケーションにロードされる。００１１００００のＩＬＭＲ値は、ＩＤＲアドレスのビット４および５を無視するが、これは同じビットがＩＤＲロケーション００００００００，０００１００００，００１０００００，００１１００００に送られることを意味する。
【０１８２】
・ＩＰＲは、ＩＬＭＲの最下位の「０」のロケーションにより増分される。すなわち、最下位の０がビット・ロケーション０にあるとすると、データがＩＤＲに入れられるたびに、ＩＰＲは２0 または１だけ増分される。最下位の０がビット・ロケーション３にあるとすると、ＩＰＲはそのたびに８ずつ増分される。
【０１８３】
ＩＬＭＲを用いる例については、セクション３．５．２．２，ＩＬＭＲを用いる例を参照のこと。またラン・モード中のＩＤＲのロードの詳細に関しては、セクション２．３．６，ポート制御レジスタ（ＰＣＲ）を参照のこと。
【０１８４】
ＩＬＭＲにはマイクロコード命令movci, movtcおよびmovfc によりアクセスすることができる。詳細についてはセクション２．４．５．１２，ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）を参照のこと。ＩＬＭＲは図３５により詳細に図示される。
【０１８５】
セクション２．３．１３ ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）
初期オフセット・レジスタ（ＩＯＲ）１３０は、ラン・モード専用レジスタ（Ｒ／反転Ｓ＝１）で、ＩＤＲにデータを入れる前にアソシエーション・エンジンが待たなければならない有効データの数（すなわちクロック・サイクルの数）のカウントを含む。たとえばＩＯＲに＄０Ｆが含まれるとすると、このデバイスは１５個のデータを通過させて、１６番目のデータがＩＰＲおよびＩＬＭＲによって指定されたロケーションにおいてＩＤＲに
入れられる。このカウントが満足されると、このレジスタの内容は次のラン・モード・ストリーム・ライト動作まで無視される。
【０１８６】
ＩＯＲには、マイクロコード命令movci, movtcおよびmovfc によってアクセスすることができる。詳細についてはセクション２．４．５．１３，ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）を参照のこと。ＩＯＲは図３６に、より詳細に図示される。
【０１８７】
セクション２．３．１４ ホスト・ストリーム選択レジスタ（ＨＳＳＲ）
ホスト・ストリーム選択レジスタ（ＨＳＳＲ）１００によりホストは、ストップ・モード（Ｒ／反転Ｓ＝０）中にストリーム・モード動作がアソシエーション・エンジンにどこで、どのように影響を与えるかを定義することができる。表２．１３は、ＨＳＳＲに関してより詳細な情報を示す。
【０１８８】
ＨＳＳＲの最初の４ビット（ＬＳ［３：０］）は、アソシエーション・エンジン・データ転送のどの論理空間がストリーム転送中にソースとなるか、あるいは書き込まれるかを選択するために用いられる。ストリーム・アクセス中にはアソシエーション・エンジンに対して明確なアドレスが伝えられないので、アクセス・アドレスはＨＳＳＲレジスタ，オフセット・アドレス・レジスタ（ＯＡＲ１，ＯＡＲ２）および深さ制御レジスタ（ＤＣＲ１，ＤＣＲ２）により指定される。表２．１４は、ＬＳビットにより定義されたロケーションを示す。ＨＳＳＲは、図３７に、より詳細に図示される。
【０１８９】
ホスト・ストリーム選択ポート・ビット（ＨＳＰ［１：０］）は、ホスト・モード・ストリーム動作中にデータがデバイスに、またはデバイスからどのように転送されるかを制御する。これらのビットは、ポート制御レジスタ（ＰＣＲ）内のスイッチおよびタップ・ビットと同様の動作を行うが、ホスト・モード・アクセスの間しか用いられない。これらのビットにより、アソシエーション・エンジン・アレイのランタイム・コンフィギュレーションを乱さずにホスト・モード転送を行うことができる（スイッチおよびタップ・ビットにより定義されたように）。
【０１９０】
ＨＳＰ［１：０］＝００のとき、このデバイスは提示すべき情報がないかのように振舞う。ＨＳＰビットは、反転ｘＣＩ／反転ｘＣＯ制御ラインと協同して働き、これらの制御ラインがデータ転送に関して適切な状態にあるときだけ、データが提示される。ＨＳＰビットは、ノース・ポートに提示されたストリーム・リード・データがサウス・ポートに提示されるか否かを制御することも、ウェスト・ポートに提示されたストリーム・リード・データがイースト・ポートに提示されるか否かを制御することもしない。これは単に、このデバイスから来たデータがどこに送られるかを制御する方法である。
【０１９１】
（デフォルト）ＨＳＰ［１：０］＝０１のとき、ホスト・ストリーム・データは、サウス・ポートを通って転送される。ホスト・リード動作に関しては、このデバイスはアクセスしたすべてのロケーションからデータをサウス・ポートに送る。ホスト・ライト・アクセスに関しては、このデバイスはサウス・ポートからすべてのデータを受け取る。
【０１９２】
ＨＳＰ［１：０］＝１０のとき、ホスト・ストリーム・データは、イースト・ポートを通って転送される。ホスト・リード動作に関しては、このデバイスはアクセスしたすべてのロケーションからデータをイースト・ポートに送る。ホスト・ライト・アクセスに関しては、このデバイスはイースト・ポートからすべてのデータを受け取る。
【０１９３】
ＨＳＰ［１：０］＝１１は、将来的な用途のために確保されている。この符号化によりアソシエーション・エンジンはＨＳＰ［１：０］＝００と同じように機能するが、モトローラ社はこの符号化を任意のときに変更する権利を保有する（従ってＨＳＰ［１：０］＝
００を用いて、ＨＳＰ［１：０］＝１１には頼らないこと）。表２．１５は、ＨＳＲビットに関するより詳細な情報を示す。
【０１９４】
セクション２．３．１５ ホスト・ストリーム・オフセット・レジスタ（ＨＳＯＲ）
ホスト・ストリーム・オフセット・レジスタ（ＨＳＯＲ）２２２は、ストップ・モード（Ｒ／反転Ｓ＝０）中のアソシエーション・エンジンに対するストリーム・ライト・アクセスを制御するために用いられる。ＨＳＯＲは図３８に、より詳細に図示される。この１６ビットのレジスタに含まれる値は、最初のデータがデバイスに到着した時刻（反転ｘＣＩがアサートされてから１サイクル後）と、デバイスがそのデータを受け入れ始めた時刻との間の遅延を示す。ＨＳＯＲは、ＤＣＲｘレジスタと共に働いて、データ・オフセットと、アソシエーション・エンジンに書き込まれるストリームの期間の両方を制御する。
【０１９５】
たとえば、４つのアソシエーション・エンジン（図３９に示されるようなＨＳＯＲとＤＣＲ１の値をもつ）と、２０個のデータのストリームとがあるとすると、データは図３９に示されるようにアソシエーション・エンジンに入れられる。
【０１９６】
第２の例として、アソシエーション・エンジンによりデータが受け入れられる順序を再配置して、チップの順序を再配置するように見せることもできる。図４０に示されるように、チェーン内の２つ以上のアソシエーション・エンジンが同じデータを受け取ることもできる。
【０１９７】
セクション２．３．１６ ノース−サウス保持レジスタ（ＮＳＨＲ）
ノース−サウス保持レジスタ（ＮＳＨＲ）９０には、ノース・ポートとサウス・ポートとの間の最近のブロードキャスト転送に関するステータスとデータとが含まれる。表２．１６は、ＮＳＨＲに関するより詳細な情報を示す。ＮＳＨＲは図４１に、より詳細に図示される。ＮＳＨＲの内容は、ラン・モード（Ｒ／反転Ｓ＝１）中にノース・ポートまたはサウス・ポートにデータが書き込まれるたびに更新される。アソシエーション・エンジンがストップ・モード（Ｒ／反転Ｓ＝０）に入ると、このレジスタにはノース・ポートとサウス・ポートとの間の最新のラン・モード・ストリーム・ライトのステータスが含まれる。このレジスタの内容は、ポート制御レジスタ（ＰＣＲ）のノース−サウス・スイッチ（ＮＳＳ）が閉（ＰＣＲ：ＮＳＳ＝１）になり、ラン・モード中にデータがノース・ポートまたはサウス・ポートのいずれかに書き込まれると変更される。このレジスタの内容は、ＰＣＲのノース・タップ（ＮＴ）およびサウス・タップ（ＳＴ）の設定とは独立している。
【０１９８】
ＮＳＨＲは、ＮＳＳ＝０で、データがイースト・ポートまたはウェスト・ポートに書き込まれる場合は変更されない。ＮＳＨＲの内容も、ＰＣＲのＮＴまたはＳＴの設定とは独立している。
【０１９９】
ＮＳＨＲのＶビットは、ＮＳＨＲのデータ・バイトに有効な情報が含まれるか否かを示す。
ＤＩＲビットは、データの方向を表す。データが、マイクロコードwriten, writes, vwriten またはvwrites の結果であると、このビットはどのポートからデータが書き込まれたかを示す。データがこのデバイスを通じて書き込まれた外部データの結果であると、このビットはどのポートからデータが書き込まれたのかを示す。
【０２００】
ＳＲＣビットは、ＮＳＨＲに含まれるデータがマイクロコードwriten, writes, vwriten またはvwrites の結果であるか否かを表す。このビットがセットされていないと、データはこのデバイスを通じてポートの１つに書き込まれた外部ライトの結果である。
【０２０１】
セクション２．３．１７ イースト−ウェスト保持レジスタ（ＥＷＨＲ）
イースト−ウェスト保持レジスタ（ＥＷＨＲ）９２には、イースト・ポートとウェスト・ポートとの間の最近のブロードキャスト転送に関するステータスとデータとが含まれる。表２．１７は、ＥＷＨＲに関するより詳細な情報を示す。ＥＷＨＲは図４２に、より詳細に図示される。ＥＷＨＲの内容は、ラン・モード（Ｒ／反転Ｓ＝１）中にイースト・ポートまたはウェスト・ポートにデータが書き込まれるたびに更新される。アソシエーション・エンジンがストップ・モード（Ｒ／反転Ｓ＝０）に入ると、このレジスタにはイースト・ポートとウェスト・ポートとの間の最新のラン・モード・ストリーム・ライトのステータスが含まれる。このレジスタの内容は、ポート制御レジスタ（ＰＣＲ）のイースト−ウェスト・スイッチ（ＥＷＳ）が閉（ＰＣＲ：ＥＷＳ＝１）になり、ラン・モード中にデータがイースト・ポートまたはウェスト・ポートのいずれかに書き込まれると変更される。このレジスタの内容は、ＰＣＲのイースト・タップ（ＥＴ）およびウェスト・タップ（ＷＴ）の設定とは独立している。
【０２０２】
ＥＷＨＲは、ＥＷＳ＝０で、データがイースト・ポートまたはウェスト・ポートに書き込まれる場合は変更されない。ＥＷＨＲの内容も、ＰＣＲのＥＴおよびＷＴの設定とは独立している。
【０２０３】
ＥＷＨＲのＶビットは、ＥＷＨＲのデータ・バイトに有効な情報が含まれるか否かを示す。
ＤＩＲビットは、データの方向を表す。データが、マイクロコードwritee, writew, vwritee またはvwritew の結果であると、このビットはどのポートからデータが書き込まれたかを示す。データがこのデバイスを通じて書き込まれている外部データの結果であると、このビットはどのポートからデータが書き込まれたかを示す。
【０２０４】
ＳＲＣビットは、ＥＷＨＲに含まれるデータがマイクロコードwritee, writew, vwritee またはvwritew （および内部ライト）の結果であるか、データがこのデバイスを通じてポートの１つに書き込まれた外部ライトの結果であるか否かを表す。
【０２０５】
セクション２．３．１８ オフセット・アドレス・レジスタ＃１（ＯＡＲ１）
オフセット・アドレス・レジスタ＃１（ＯＡＲ１）９６は、ストップ・モード（Ｒ／反転Ｓ＝０）ストリーム・アクセス中に用いられて、ＨＳＳＲのＬＳ［３：０］により定義される論理空間に関する開始内部アドレスを示す。図４３に、ＯＡＲ１をより詳細に図示する。
【０２０６】
ＯＡＲ１は、ＯＡＲ１の内部バージョンにより隠されている。このシャドウ・レジスタにより、ＯＡＲ１内で指定された初期値は修正されずに残り、ＯＡＲ１シャドウ・レジスタの値が修正されてアソシエーション・エンジンにデータを入れる。ＯＡＲ１シャドウ・レジスタの内容は、データがアソシエーション・エンジン内にロードされるたびに増分される。
【０２０７】
ＯＡＲ１シャドウ・レジスタは、以下の条件下でＯＡＲ１からロードされる：１．レジスタがロードされたとき；
２．アソシエーション・エンジンがストリーム・アクセスのために選択されたとき；
３．反転ＲＥＳＥＴ信号がトグルされたとき（１−＞０−＞１）。
【０２０８】
一次元アレイには、入力データ・レジスタ（ＩＤＲ），入力タッグ・レジスタ（ＩＴＲ），命令キャッシュ（ＩＣ），ベクタ・データ・レジスタ（Ｖ［０］〜Ｖ［７］）およびベクタ・プロセス制御レジスタ（ＶＰＣＲ）が含まれる。
【０２０９】
ＯＡＲ１は、二次元アレイ内でストリーム・モード・アクセスを実行する際にも用いられる。この場合は、アレイの第１次元にインデックス（列インデックス）するために用いられる。唯一の二次元アレイは、係数メモリ・アレイ（ＣＭＡ）である。
【０２１０】
セクション２．３．１９ 深さ制御レジスタ＃１（ＤＣＲ１）
深さ制御レジスタ＃１（ＤＣＲ１）９７の内容は、すべての一次元および二次元アレイに対するストップ・モード（Ｒ／反転Ｓ＝０）ストリーム・アクセス中に用いられる。内部アドレス生成論理がＤＣＲ１の内容を用いて、ストリーム転送に関して転送されるバイト数（ＨＳＳＲのＬＳ［３：０］により定義される論理空間の１つ）を決定する。ＤＣＲ１は図４４に、より詳細に図示される。
【０２１１】
ＤＣＲ１は、ＤＣＲ１の内部バージョンにより隠されている。このシャドウ・レジスタにより、ＤＣＲ１内で指定された初期値は修正されずに残り、ＤＣＲ１シャドウ・レジスタの値が修正されてアソシエーション・エンジンにデータを入れる。ＤＣＲ１シャドウ・レジスタの内容は、データがアソシエーション・エンジン内にロードされるたびに減分される。
【０２１２】
ＤＣＲ１シャドウ・レジスタは、以下の条件下でＤＣＲ１からロードされる：１．レジスタがロードされたとき；
２．アソシエーション・エンジンがストリーム・アクセスのために選択されたとき；
３．反転ＲＥＳＥＴ信号がトグルされたとき（１−＞０−＞１）。
【０２１３】
一次元アレイに関してこのレジスタは、制御がアソシエーション・エンジン・チェーンの次のアソシエーション・エンジンに渡される前に、ストリーミング動作中に書き込まれるあるいは読み出されるロケーションの数を制御する。ＤＣＲ１は１だけオフセットされるので、ＤＣＲ１＝０は正確に１バイトをストリーミングして、ＤＣＲ１＝６３で６４バイトがストリーミングされる。ストリーミング動作にアソシエーション・エンジンを関与させないようにするには、ＨＳＳＲ：ＳＨＰ［１：０］＝００をセットする。
【０２１４】
ランダム・アクセス・マップ全体をストリーミングする際には、有用なレジスタがないマップのホールをスキップする。そのため、ＤＣＲ１＋ＯＡＲ１は、マップ・ケース全体の終了アドレスに常に等しいとは限らない。スキップされるアドレスは、表２．１８にリストアップされている。
【０２１５】
このレジスタのリセット値は＄１４ＦＦであり、この値はＤＣＲ１がストリーミング動作の行われる前に変更されなければ、このアソシエーション・エンジンが、ランダム・アクセス・マップから未使用のロケーションを減じたサイズに等しいバイトのストリームを受け入れるかあるいは供給することを示す。
【０２１６】
一次元アレイには、入力データ・レジスタ（ＩＤＲ），入力タッグ・レジスタ（ＩＴＲ），命令キャッシュ（ＩＣ），ベクタ・データ・レジスタ（Ｖ［０］〜Ｖ［７］）およびベクタ・プロセス制御レジスタ（ＶＰＣＲ）が含まれる。
【０２１７】
ＤＣＲ１は、二次元アレイ内にストリーム・モード・アクセスを実行する際にも用いられる。この場合は、ＤＣＲ１は各行に入れられるエントリ数を制御するために用いられる。唯一の二次元アレイは、係数メモリ・アレイ（ＣＭＡ）である。
【０２１８】
ストップ・モード（Ｒ／反転Ｓ＝０）ストリーミング動作に関しては、次の場合に反転ｘＣＯ信号がアサートされる：すなわち１）ＤＣＲ１およびＤＣＲ２により指定されたデータ数が転送されたとき；または２）内部アドレス発生器がＨＳＳＲ：ＬＳ［３：０］に
より定義された空間を越えてストリーミングしようとするとき。
【０２１９】
セクション２．３．２０ オフセット・アドレス・レジスタ＃２（ＯＡＲ２）
二次元アレイのアドレッシングについてのみ用いられるオフセット・アドレス・レジスタ＃２（ＯＡＲ２）９８は、ＯＡＲ１レジスタと共に、ホスト・モード（Ｒ／反転Ｓ＝０）ストリーム・アクセス中に書き込まれるあるいは読み出される第１行ロケーションを制御する。このレジスタのリセット値は＄０であり、この値はこのレジスタがストリーム動作が行われる前に変更されない場合、ＣＭＡに対するストリーム・アクセスが第１行（行＃０）から始まることを示す。このレジスタの最大値は６３（＄３Ｆ）であり、これはＣＭＡが最大（そして唯一）の二次元アレイであり、ｙ方向には６４ロケーションしかないためである。＄３Ｆより大きな値がこのレジスタに書き込まれると、モジューロ６４値となる。
【０２２０】
ＯＡＲ２は、ＯＡＲ１の内部バージョンにより隠されている。このシャドウ・レジスタにより、ＯＡＲ２内で指定された初期値は修正されずに残り、ＯＡＲ２シャドウ・レジスタの値が修正されてアソシエーション・エンジンにデータを入れる。ＯＡＲ２シャドウ・レジスタの内容は、データがアソシエーション・エンジン内にロードされるたびに増分される。ＯＡＲ２は図４５に、より詳細に図示される。
【０２２１】
ＯＡＲ２シャドウ・レジスタは、以下の条件下でＯＡＲ２からロードされる：１．レジスタがロードされたとき；
２．アソシエーション・エンジンがストリーム・アクセスのために選択されたとき；
３．反転ＲＥＳＥＴ信号がトグルされたとき（１−＞０−＞１）。
【０２２２】
ＯＡＲｘおよびＤＣＲｘは、ストップ・モード専用レジスタであり、ラン・モード動作中は用いられないことに注意すること。
セクション２．３．２１ 深さ制御レジスタ＃２（ＤＣＲ２）
二次元アレイについてのみ用いられる深さ制御レジスタ＃２（ＤＣＲ２）９９は、ＤＣＲ１レジスタと共に、制御がチェーン内の次のアソシエーション・エンジンに渡される前のストリーミング動作中に、書き込まれるあるいは読み出すことのできる二次元アレイのロケーション数を制御する。このレジスタのリセット値は＄３Ｆまたは６３であり、この値はこのレジスタがＣＭＡに対するストリーム転送が行われる前に変更されない場合、ＣＭＡの６４行すべて（１つの列の）がアクセスされることを示す。反転ｘＣＯ信号をアサートすることにより、制御はアソシエーション・エンジン・チェーン内の次のアソシエーション・エンジンに渡される。ＤＣＲ２は１だけオフセットされているので、ＤＣＲ２＝０により、ＣＭＡの１行がアクセスされることに留意されたい。ＤＣＲ２は図４６に、より詳細に図示される。
【０２２３】
ストップ・モード（Ｒ／反転Ｓ＝０）ストリーミング動作に関しては、次の場合に反転ｘＣＯ信号がアサートされる：すなわち１）ＤＣＲ１およびＤＣＲ２により指定されたデータ数が転送されたとき；あるいは２）内部アドレス発生器がＨＳＳＲ：ＬＳ［３：０］により定義された空間を越えてストリーミングしようとするとき。
【０２２４】
ストップ・モード（Ｒ／反転Ｓ＝０）では、ＯＡＲ１，ＤＣＲ１，ＯＡＲ２およびＤＣＲ２は、ストリーム転送の開始時のレジスタを隠すために転送される（アソシエーション・エンジンの反転ＲＯＷおよび反転ＣＯＬが選択されたとき）。これらのシャドウ・レジスタに含まれる値は、アソシエーション・エンジンの選択が解除されるまで用いられる。言い換えれば、ＯＡＲレジスタまたはＤＣＲレジスタがストリーム動作中に修正されても、現在の転送が終了して新しいストリーム動作が開始されるまでは、この変更は反映されない。
【０２２５】
ＤＣＲ２は、ＤＣＲ２の内部バージョンにより隠されている。このシャドウ・レジスタにより、ＤＣＲ２内で指定された初期値は修正されずに残り、ＤＣＲ２シャドウ・レジスタの値が修正されてアソシエーション・エンジンにデータを入れる。ＤＣＲ２シャドウ・レジスタの内容は、データがアソシエーション・エンジン内にロードされるたびに減分される。
【０２２６】
ＤＣＲ２シャドウ・レジスタは、以下の条件下でＤＣＲ２からロードされる：１．レジスタがロードされたとき；
２．アソシエーション・エンジンがストリーム・アクセスのために選択されたとき；
３．反転ＲＥＳＥＴ信号がトグルされたとき（１−＞０−＞１）。
【０２２７】
ＯＡＲｘおよびＤＣＲｘは、ストップ・モード専用レジスタであり、ラン・モード動作中は用いられないことに注意すること。
ＯＡＲ１，ＤＣＲ１，ＯＡＲ２およびＤＣＲ２がストリーム・アクセス・モード中にどのように用いられるかについては、セクション３．５．１．２，ホスト・ストリーム・アクセス・モードを参照のこと。
【０２２８】
セクション２．３．２２ 割込ステータス・レジスタ＃１（ＩＳＲ１）
割込ステータス・レジスタ＃１（ＩＳＲ１）３４２は、ホストにより用いられて、アソシエーション・エンジンにより生成された流れに関する割込の原因を決定することができる。ＩＳＲ１のビットは、割込マスク・レジスタ＃１（ＩＭＲ１）のビットと、１対１の対応を有する。ＩＳＲ１のビットは、対応する（ＩＭＲ１）ビットの状態に関わらずにセットされる。これによりホストは、外部割込を発生させずに条件を調べる（ポーリングする）ことができる。ＩＳＲ１がホストに読まれると、すべてのビットがクリアになる。このように、ＩＳＲ１には最後のリード以降のステータス変更が含まれる。ＩＳＲ１は図４７に、より詳細に図示される。表２．１９は、ＩＳＲ１に関するより詳細な情報を示す。
【０２２９】
ＳＶＩビットがセットされた場合は、スケーラ・エンジン内のマイクロコード算術演算動作がオーバーフローを起こした。
ＶＶＩビットがセットされた場合は、ベクタ・エンジン内のマイクロコード算術演算動作がオーバーフローを起こした。
【０２３０】
ＳＤＩビットがセットされた場合は、スケーラ・エンジン内のマイクロコード算術演算動作がゼロによる除算を起こした。
ＶＤＩビットがセットされた場合は、ベクタ・エンジン内のマイクロコード算術演算動作がゼロによる除算を起こした。
【０２３１】
ＰＣＩビットがセットされた場合は、プログラム・カウンタ（ＰＣ）がその境界を越えて、マイクロシーケンサがデータ空間での実行を開始した。このメカニズムは、マイクロプロセッサ・メモリ管理ユニットのページ例外と同様である。
【０２３２】
ＩＯＩビットがセットされた場合は、不当オペコードが命令ストリーム内に検出された。
ＰＥＩビットがセットされた場合は、ポート動作中にエラーが検出された。ポート・エラーの原因を判定するには、アソシエーション・エンジン・ポート・モニタ・レジスタ（ＡＰＭＲ）を読まねばならない。
【０２３３】
ＩＣＩビットがセットされた場合は、命令に基づくＩＤＲ競合が起こった。この競合は、外部ストリーム・ライトがＩＤＲにロードしようとすると同時にvstore, vwritel また
はw ritel命令が実行されると起こる。
【０２３４】
このレジスタに含まれるビット値は、アソシエーション・エンジン割込マスク・レジスタ＃１（ＩＳＲ１）に含まれるビット値と共に、外部割込がいつ発生されるか、また発生されるか否かを最終的に決定する。
【０２３５】
セクション２．３．２３ 割込マスク・レジスタ＃１（ＩＭＲ１）
割込マスク・レジスタ＃１（ＩＭＲ１）３４４は、割込ステータス・レジスタ＃１（ＩＳＲ１）と共に、外部割込をイネーブルにする、あるいはディスエーブルにする働きをする。内部条件により、ＩＳＲ１でビットがセットされて、ＩＭＲ１の対応ビット（群）がセットされると、外部割込が発生する。ＩＭＲ１は図４８により詳細に図示される。表２．２０９にＩＭＲ１に関するより詳細な情報が示される。
【０２３６】
ＳＶＩＭがセットされると、スケーラ・エンジン・オーバーフローにより外部割込は発生しない。
ＶＶＩＭがセットされると、ベクタ・エンジン・オーバーフローにより外部割込は発生しない。
【０２３７】
ＳＤＩＭがセットされると、スケーラ・エンジンのゼロによる除算により外部割込は発生しない。
ＶＤＩＭがセットされると、ベクタ・エンジンのゼロによる除算により外部割込は発生しない。
【０２３８】
ＰＣＩＭビットがセットされると、ＰＣ制限超過により外部割込は発生しない。逆に、ＰＣＭビットがセットされると、ＰＣ制限超過により外部割込が発生する。
ＩＯＩＭビットがセットされると、不当オペコードにより外部割込は発生しない。
【０２３９】
ＰＥＩＭビットがセットされると、ポートのエラーにより外部割込は発生しない。ＰＥＩＭビットがセットされていない場合は、ポートに関するエラーがあると外部割込が発生する。ＰＥＩＭビットのデフォルト設定値は０である。外部割込を起こす可能性のあるポート条件のリストは、表３．６にある。
【０２４０】
ＩＣＩＭビットがセットされると、命令に基づくＩＤＲ競合により外部割込は発生しない。ＩＣＩＭビットがクリアされると、命令に基づくＩＤＲ競合により外部割込が発生する。外部ストリーム・ライトがＩＤＲにロードしようとすると同時にvstore, vwritel またはwritel命令が実行されると、この条件が起こる。セクション２．３．２４ 割込ステ
ータス・レジスタ＃２（ＩＳＲ２）
割込ステータス・レジスタ＃２（ＩＳＲ２）３４６は、ホストにより用いられて、スケーラ・エンジンまたはベクタ・エンジンの算術演算動作により割込条件が発生したか否かを判定することができる。このレジスタは、割込マスク・レジスタ＃２（ＩＭＲ２）と共に、外部割込が発生するか否かを最終的に決める。ＩＳＲ２は図４９に、より詳細に図示される。表２．２１および表２．２２は、ＩＳＲ２に関するより詳細な情報を示す。
【０２４１】
このレジスタのビットがアソシエーション・エンジンの特定の例外条件に対応しても、割込条件は例外条件に直交する点に留意されたい。
ＨＬＴＩビットがセットされると、halt命令が実行された。
【０２４２】
intr#n命令が実行されると、ＳＩ［２：０］ビットがセットされる。intr#6ソフトウェア割込は、ＳＩ［２：０］＝１１０をセットする。
セクション２．３．２５ 割込マスクレジスタ＃２（ＩＭＲ２）
割込マスク・レジスタ＃２（ＩＭＲ２）３４８により、ホストはベクタおよびスケーラ算術演算割込のマスキングを行うことができる。ＩＭＲ２のビットがセットされると、対応する割込条件があっても外部割込は発生しない。同様に、ＩＭＲ２内のクリアなビットそれぞれについて、対応する条件により外部割込が発生する。ＩＭＲ２は図５０に、より詳細に図示される。表２．２３および表２．２４はＩＭＲ２に関するより詳細な情報を示す。
【０２４３】
ＨＬＴＭビットがセットされると、halt命令が実行されても外部割込は発生しない。逆にＨＬＴＭビットがセットされると、halt命令の実行により外部割込が発生する。
ＳＩＭ［２：０］ビットにより、ある範囲のソフトウェア割込をマスクオフすることができる。優先順位の最も高いソフトウェア割込は、ソフトウェア割込＃７であり、これは命令intr#7により発生する。優先順位の最も低いソフトウェア割込は、ソフトウェア割込＃１で、命令intr#1により発生する。
【０２４４】
セクション２．３．２６ マイクロシーケンサ制御レジスタ（ＭＣＲ）
マイクロシーケンサ制御レジスタ（ＭＣＲ）１８８は、マイクロコード・シーケンサにより命令がどのように、いつ発行されるかを制御する。ＭＣＲは図５１に、より詳細に図示される。表２．２５および表２．２６は、ＭＣＲに関するより詳細な情報を示す。
【０２４５】
ＳＳビットにより、１つの命令がマイクロシーケンサにより実行される。ＳＳビットの状態は、各命令の開始時に調べられる。ＳＳの状態が命令実行中に変化すしても、その影響は次の命令の開始まで起こらない。各命令が実行された後で、ＰＣが増分され、反転ＢＵＳＹ信号がアクティブにセットされる。次の命令は、Ｒ／反転Ｓ信号が１−＞０−＞１からトグルするまで実行されない。
【０２４６】
ＲＳＡビットは、ホストにより用いられて、アソシエーション・エンジンを既知の状態にリセットすることができる。このビットの設定値は、係数メモリ（ＣＭＡ）をクリアしたり、命令キャッシュ（ＩＣ）に影響を与えることはない。このビットの設定値と、restart 命令の動作とを比較されたい（異なっている）。
【０２４７】
ＳＴＫＦビットは、ＣＭＡ内のスタックの状態を示す。スタックが空の場合は、このビットは１の値をもつ。ＣＭＡスタックに少なくとも１つの有効なリターン・アドレスがあると、ＳＴＫＦは０の値をもつ。
【０２４８】
ＦＬＳＦビットは、ＦＬＳレジスタが現在有効なリターン・アドレスをもっているか否かを示す。もっている場合は、ＦＬＳＦビットは１で、もっていなければ０になる。
ＲＥＬＦビットは、repeate ループが開始されたか否か、またアクティブであると考えられるか否かを示す。開始された場合はＲＥＬＦビットは１で、開始されていなければ０になる。
【０２４９】
ＲＰＬＦビットは、repeatループが開始されたか否かを示す。開始された場合はＲＰＬＦビットは１で、開始されていなければ０になる。
ＩＬＦビットは、マイクロシーケンサ内の命令の実行を制御する。このビットがセットされているとき、マイクロシーケンサは、事実上ディスエーブルであり、Ｒ／反転Ｓ信号をトグルしてもＰＣは進まない。doneまたはhalt命令が単一ステップ・モード中に実行されると、アソシエーション・エンジンによりＩＬＦビットがセットされる。これにより、異なるコード・サイズをもつ複数のアソシエーション・エンジンが単一ステップ中でも同期することができる。このビットがセットされている間は、アソシエーション・エンジンは、依然として、ＩＤＲにデータを受け入れて、ポート間で転送することができる。別の命令を実行するには、ＩＬＦをクリアしなければならない。
【０２５０】
ＦＬＳの動作と、ＦＬＳＦおよびＳＴＫＦビットとのスタックは、図５２に示される例でより明確になる。
コード・ブロック＃１が実行されているときは、ＦＬＳは空である（ＦＬＳＦビットが０のため）と見なされ、スタックにはリターン・アドレスは含まれない。
【０２５１】
bsr2 Ｃ２が実行されると、＄００４２（bsr Ｃ２命令に従うアドレス）がＦＬＳに入
れられ、ＰＣはラベルＣ２のアドレスにセットされる。
bsr Ｃ３が実行されると、＄００８２がスタック上に入れられる。ＳＴＫＦビットは、スタック上のリターン・アドレスのＬＳビット位置を取り込み、それによりスタック上の実際の値は＄００８３となる。ＰＣはラベルＣ３のアドレスにセットされる。
【０２５２】
bsr Ｃ４が実行されると、＄００ａ２がスタック上に入れられる。ＳＴＫＦビットは、スタック上のリターン・アドレスのＬＳビット位置を取り込み、それによりスタック上の実際の値は＄００ａ２となる。ＰＣはラベルＣ３のアドレスにセットされる。
【０２５３】
コード・ブロック＃４でreturnが実行されると、まずＳＰが増分され、リターン・アドレスがスタックから引き出される。スタックから引き出された値のＬＳビットが、ＳＴＫＦの新しい値となる。ＳＴＫＦ＝０は、ＣＭＡがさらに別のリターン・アドレスをもち、次のreturn命令によりスタックからリターン・アドレスを得ることに留意されたい。
【０２５４】
コード・ブロック＃３でreturnが実行されると、ＳＰがまた増分され、リターン・アドレスがスタックから引き出される。スタックから引き出された値のＬＳビットは１となり、これがＳＴＫＦの新しい値となる。ＳＴＫＦ＝１のとき、次のreturn命令によりＦＬＳからリターン・アドレスが得られる。
【０２５５】
コード・ブロック＃２でreturnが実行されると、リターン・アドレスがＦＬＳから引き出される（ＦＬＳＦ：ＳＴＫＦ＝１：０のため）。ここでＦＬＳＦがクリアされるが、これはＦＬＳの内容が無効であることを意味する。
【０２５６】
ＦＬＳＦが０の間にreturnが実行されると、ＦＬＳに含まれる値はそのＦＬＳ値が無効であってもＰＣに入れられる。
セクション２．３．２７ マイクロシーケンサ・ステータス・レジスタ（ＭＳＲ）
マイクロシーケンサ・ステータス・レジスタ（ＭＳＲ）３５０は、アソシエーション・エンジン・マイクロシーケンサの現在の動作ステータスを示す。ＭＳＲは図５３に、より詳細に図示される。表２．２７および表２．２８にＭＳＲに関するより詳細な情報が示される。
【０２５７】
Ｒビットは、アソシエーション・エンジンがストップ・モード（Ｒ／反転Ｓ＝０）に入れられたときの命令の実行中にマイクロコードが停止したか否かを示す。命令が実行された場合は、Ｒビットはセットされる。停止された場合はクリアされる。
【０２５８】
ＥＸＥ［２：０］ビットは、アソシエーション・エンジンのＰＳＴＡＴ信号ピンの現在のステータスを示す。これによりホストは、アソシエーション・エンジンがラン・モード（Ｒ／反転Ｓ＝１）からストップ・モード（Ｒ／反転Ｓ＝０）に移行したときに起こっていた動作のクラスを判定することができる。
【０２５９】
セクション２．３．２８ スケーラ・プロセス制御レジスタ（ＳＰＣＲ）
スケーラ・プロセス制御レジスタ（ＳＰＣＲ）２０８は、多重バイト算術演算動作および論理動作の流れを制御すると共に、最新の算術演算動作のステータスを示すことができ
る。ＳＰＣＲは図５４に、より詳細に図示される。表２．２９にＳＰＣＲに関するより詳細な情報が示される。
【０２６０】
スケーラ拡張ビット（ＳＸ［１：０］）は、特定の算術演算命令の精度を拡大するために用いられる。これらのビットがどのようにセットされ、どのように用いられるかについては、セクション２．５．１９，多重バイト動作の説明を参照のこと。
【０２６１】
スケーラ・オーバーフロー・ビット（ＳＶ）とスケーラ・オーバーフロー方向ビット（ＳＤ）は、前回の算術演算動作にオーバーフローが起こったか否かと、オーバーフローが起こった場合にオーバーフローが起こった方向とを示す。
【０２６２】
セクション２．３．２９ 命令レジスタ（ＩＲ）
命令レジスタ（ＩＲ）３５２は、現在実行されている命令を保持するために用いられる１６ビットのレジスタである。このレジスタは、反転ＲＥＳＥＴがアソシエーション・エンジンに与えられているときは変更されない。ＩＲは図５５に、より詳細に図示される。
【０２６３】
セクション２．３．３０ 命令キャッシュ・ライン有効レジスタ（ＩＣＶＲ）
命令キャッシュ・ライン有効レジスタ（ＩＣＶＲ）３５４は、命令キャッシュ（ＩＣ）および命令キャッシュ・タッグ（ＩＣＴ０〜ＩＣＴ３）のステータスを示す。ＩＣＶＲは図５６に、より詳細に図示される。表２．３０にＩＣＶＲに関するより詳細な情報が示される。
【０２６４】
ＩＣＶ０がセットされているときは、キャッシュ・ライン＃０に有効命令が含まれる。このビットがクリアされると、キャッシュ・ライン＃０の内容は不確定である。
ＩＣＶ１がセットされているときは、キャッシュ・ライン＃１に有効命令が含まれる。このビットがクリアされると、キャッシュ・ライン＃１の内容は不確定である。
【０２６５】
ＩＣＶ２がセットされているときは、キャッシュ・ライン＃２に有効命令が含まれる。このビットがクリアされると、キャッシュ・ライン＃２の内容は不確定である。
ＩＣＶ３がセットされているときは、キャッシュ・ライン＃３に有効命令が含まれる。このビットがクリアされると、キャッシュ・ライン＃３の内容は不確定である。
【０２６６】
セクション２．３．３１ プログラム・カウンタ（ＰＣ）
プログラム・カウンタ（ＰＣ）１８６は、現在実行されている命令のマイクロコード・メモリ・アレイ（ＭＭＡ）内のロケーションを示す１６ビットのレジスタである。リセット状態を出ると、例外ポインタ・プログラム・カウンタ（ＥＰＰＣ）に含まれる１６ビット・アドレスがＰＣにロードされる。ＰＣは図５７に、より詳細に図示される。
【０２６７】
ＰＣが命令キャッシュ・タッグ（ＩＣＴ０〜ＩＣＴ３）と共にどのように用いられるかについては、セクション３．３．４を参照のこと。ＣＭＡに関してＭＭＡがどのように定義されるかの詳細については、セクション３．３．２，ＣＭＡとＭＭＡのマッピングを参照のこと。例外ポインタ表の詳細については、セクション２．３．４４，例外ポインタ表を参照のこと。
【０２６８】
セクション２．３．３２ ＰＣ境界レジスタ（ＰＢＲ）
ＰＣ境界レジスタ（ＰＢＲ）３５６は、第１の命令非関連アドレスのアドレスを含む１５ビットのレジスタである。命令のプレフェッチ毎に、ＰＣはＰＢＲに対して照合される。ＰＣがＰＢＲよりも大きい場合は、ＰＣ制限超過条件がある。ＥＭＲのＰＣＥＭビットがセットされている（デフォルト）場合は、ＥＳＲはその条件を登録するが、例外は起こらない。ＰＣＥＭ＝１のとき、条件はＥＳＲに登録されて、ＥＰＯＢがＰＣに入れられ、
ＰＣ制限超過例外が起こる。ＰＣがＰＢＲよりも小さいときは、ＰＣにより指示された命令がマイクロシーケンサにロードされて実行される。ＰＢＲは図５８に、より詳細に図示される。
【０２６９】
ＰＢＲは、アルゴリズムのデバッグ中は、ＰＣを特定の最大値に制限するので便利である。このレジスタは、＄ＦＦＦＥの値で反転ＲＥＳＥＴから初期化され、これはＰＣに関するすべての可能な値が有効である（すなわちＰＣ境界チェックを事実上ディスエーブルにする）ことを示す。
【０２７０】
セクション２．３．３３ 命令キャッシュ・タッグ＃０（ＩＣＴ０）
命令キャッシュ・タッグ＃０（ＩＣＴ０）３５８は、ＣＭＡのどの列が現在命令キャッシュ（ＩＣ）のライン＃０にロードされているかを判断するために用いられる。ＩＣＴ０は図５９に、より詳細に図示される。
【０２７１】
キャッシュ・ヒットまたはキャッシュ・ミスを判定するには、各命令の実行前にＩＣＴ０をＰＣのＭＳバイトと比較する。ＰＣのＭＳバイトがタッグ・レジスタのどれにも一致しない場合は、次の命令を含む新しいライン（ＰＣにより指示される）を命令キャッシュにロードしなければならない。
【０２７２】
ＰＣのビット７および６が００に等しい場合は、ミスがあると、命令の新しいラインが命令キャッシュ・ライン＃０にロードされる。ＩＣＴ０には、ＰＣのＭＳバイトがロードされ、命令キャッシュ有効レジスタ（ＩＣＶＲ）内のキャッシュ・ライン＃０（ＩＣＶ０）のための有効なビットがセットされる。
【０２７３】
セクション２．３．３４ 命令キャッシュ・タッグ＃１（ＩＣＴ１）
命令キャッシュ・タッグ＃１（ＩＣＴ１）３６０は、ＣＭＡのどの列が現在命令キャッシュ（ＩＣ）のライン＃１にロードされているかを判断するために用いられる。ＩＣＴ１は図６０に、より詳細に図示される。
【０２７４】
キャッシュ・ヒットまたはキャッシュ・ミスを判定するには、各命令の実行前にＩＣＴ１をＰＣのＭＳバイトと比較する。ＰＣのＭＳバイトがタッグ・レジスタのどれにも一致しない場合は、次の命令を含む新しいライン（ＰＣにより指示される）を命令キャッシュにロードしなければならない。
【０２７５】
ＰＣのビット７および６が０１に等しい場合は、ミスがあると、命令の新しいラインが命令キャッシュ・ライン＃１にロードされる。ＩＣＴ１には、ＰＣのＭＳバイトがロードされ、命令キャッシュ有効レジスタ（ＩＣＶＲ）内のキャッシュ・ライン＃１（ＩＣＶ１）のための有効なビットがセットされる。
【０２７６】
セクション２．３．３５ 命令キャッシュ・タッグ＃２（ＩＣＴ２）
命令キャッシュ・タッグ＃２（ＩＣＴ２）３６２は、ＣＭＡのどの列が現在命令キャッシュ（ＩＣ）のライン＃２にロードされているかを判断するために用いられる。ＩＣＴ２は図６１に、より詳細に図示される。
【０２７７】
キャッシュ・ヒットまたはキャッシュ・ミスを判定するには、各命令の実行前にＩＣＴ２をＰＣのＭＳバイトと比較する。ＰＣのＭＳバイトがタッグ・レジスタのどれにも一致しない場合は、次の命令を含む新しいライン（ＰＣにより指示される）を命令キャッシュにロードしなければならない。
【０２７８】
ＰＣのビット７および６が１０に等しい場合は、ミスがあると、命令の新しいラインが
命令キャッシュ・ライン＃２にロードされる。ＩＣＴ２には、ＰＣのＭＳバイトがロードされ、命令キャッシュ有効レジスタ（ＩＣＶＲ）内のキャッシュ・ライン＃２（ＩＣＶ２）のための有効なビットがセットされる。
【０２７９】
セクション２．３．３６ 命令キャッシュ・タッグ＃３（ＩＣＴ３）
命令キャッシュ・タッグ＃３（ＩＣＴ３）３６４は、ＣＭＡのどの列が現在命令キャッシュ（ＩＣ）のライン＃３にロードされているかを判断するために用いられる。ＩＣＴ３は図６２に、より詳細に図示される。
【０２８０】
キャッシュ・ヒットまたはキャッシュ・ミスを判定するには、各命令の実行前にＩＣＴ３をＰＣのＭＳバイトと比較する。ＰＣのＭＳバイトがタッグ・レジスタのどれにも一致しない場合は、次の命令を含む新しいライン（ＰＣにより指示される）を命令キャッシュにロードしなければならない。
【０２８１】
ＰＣのビット７および６が１１に等しい場合は、ミスがあると、命令の新しいラインが命令キャッシュ・ライン＃３にロードされる。ＩＣＴ３には、ＰＣのＭＳバイトがロードされ、命令キャッシュ有効レジスタ（ＩＣＶＲ）内のキャッシュ・ライン＃３（ＩＣＶ３）のための有効なビットがセットされる。
【０２８２】
セクション２．３．３７ スタック・ポインタ（ＳＰ）
スタック・ポインタ（ＳＰ）３６６は、サブルーチン・リターン・アドレスが保持され、サブルーチン特有のデータがload/store命令を用いて入れられる係数メモリ・アレイ（ＣＭＡ）のロケーションを定義する１６ビットのレジスタである。ＳＰは図６３に、より詳細に図示される。
【０２８３】
反転ＲＥＳＥＴがあると、スタック・ポインタには、例外ポインタ表にあるレジスタの１つである例外ポインタ・スタック・ポインタ（ＥＰＳＰ）の内容がロードされる。例外ポインタ表の詳細については、セクション２．３．４４，例外ポインタ表を参照のこと。
【０２８４】
セクション２．３．３８ 第１レベル・スタック（ＦＬＳ）
第１レベル・スタック（ＦＬＳ）３６８により、単一レベルのサブルーチンの呼出を迅速に実行することができる。ＦＬＳに含まれる値は、サブルーチンへのジャンプ（jsr ）命令が実行されると、通常はスタックの最上部に置かれる。スタック処理に必要な時間（呼出中とリターンの）をなくするために、リターン・アドレスが第１レベル・スタック・レジスタに入れられる。ＦＬＳは図６４に、より詳細に図示される。
【０２８５】
return命令の介入なしに２回のbsr 命令がなされると、２回目のbsr は強制的にスタック上にリターン・アドレスを記憶する（ＳＰによる参照）。
セクション２．３．３９ リピート開始レジスタ（ＲＢＲ）
リピート開始レジスタ（ＲＢＲ）１８０は、repeatおよびrepeate 命令により用いられて、プログラムの内部ループの迅速な実行を可能にする。ＲＢＲは図６５に、より詳細に図示される。repeatまたはrepeate 命令が実行されると、ＰＣ＋２の値がＲＢＲにロードされる。ループの最後で（リピート終了レジスタ（ＲＥＲ）の値が現在実行されている命令のアドレスに一致すると）、プログラム・カウンタ（ＰＣ）にＲＢＲの内容がロードされる。
【０２８６】
repeatおよびrepeate 命令については、セクション２．５．１６，スケーラ・エンジン・プログラムの流れ制御動作を参照のこと。
セクション２．３．４０ リピート終了レジスタ（ＲＥＲ）
リピート終了レジスタ（ＲＥＲ）１８２は、repeatおよびrepeate 命令により用いられ
て、プログラムの内部ループの迅速な実行を可能にする。ＲＥＲは図６６に、より詳細に図示される。repeatまたはrepeate 命令が実行されると、ループ内の最終命令を示す命令がＲＥＲレジスタにロードされる。このレジスタの値が、現在実行されている命令のアドレスと比較される。その比較の結果が一致すると、リピート・カウント・レジスタ（ＲＣＲ）の内容が減分され、ＲＣＲがゼロに等しくなると、リピート・ループが終了される。ＲＣＲがゼロでない場合は、ＲＢＲの内容が開始カウンタ（ＰＣ）にロードされて、ループはもう一度繰り返される。
【０２８７】
repeatおよびrepeate 命令については、セクション２．５．１６，スケーラ・エンジン・プログラムの流れ制御動作を参照のこと。
セクション２．３．４１ リピート・カウント・レジスタ（ＲＣＲ）
リピート・カウント・レジスタ（ＲＣＲ）１８４は、repeatおよびrepeate 命令により用いられて、プログラムの内部ループの迅速な実行を可能にする。ＲＣＲは図６７に、より詳細に図示される。repeat(e) 命令が実行されると、カウント値が命令により指定されたＧレジスタ（Ｇ［０］〜Ｇ［７］）からＲＣＲレジスタ内にロードされる。ＲＣＲは、repeat(e) ループが何回実行されるかを制御する。リピート・ポインタ・レジスタ（ＲＢＲ）が現在実行中の命令のアドレスに一致するたびに、ＲＣＲの内容が１だけ減分される。ＲＣＲがゼロに等しくなると、ループは終了する。
【０２８８】
repeatおよびrepeate 命令については、セクション２．５．１６，スケーラ・エンジン・プログラムの流れ制御動作を参照のこと。
セクション２．３．４２ グローバル・データ・レジスタ（Ｇ［０］〜Ｇ［７］）
グローバル・データ・レジスタ（Ｇ［０］〜Ｇ［７］）３０２は、スケーラ処理エンジン内にあり、汎用データ・レジスタのセットである。これらのレジスタの使用法は交換可能であり、これはこれらのレジスタが汎用データ以外のものについてはアソシエーション・エンジンが用いないことを意味する。
【０２８９】
グローバル・データ・レジスタには、実際には図６８に示されるように３つの空のロケーションが詰め込まれている。これにより、メモリ・マップを変更せずに将来的な成長を図ることができる。これらのロケーションに対しての書き込みは正当な動作と考えられ、これらのロケーションが読み出されると＄００となる。
【０２９０】
セクション２．３．４３ グローバル・ポインタ・レジスタ（Ｐ［０］〜Ｐ［７］）
グローバル・ポインタ・レジスタ（Ｐ［０］〜Ｐ［７］）３００は、スケーラ処理エンジン内にある多目的レジスタである。これらのレジスタは、データ・レジスタとして用いることができ、その場合は、グローバル・データ・レジスタと全く同じ働きをする。また、間接的な形式のデータ・アクセスを使用する命令では間接ポインタとして用いることもできる。
【０２９１】
グローバル・ポインタ・レジスタは、実際には図６９に示されるように３つの空のロケーションが詰め込まれている。これにより、メモリ・マップを変更せずに将来的な成長を図ることができる。これらのロケーションに対しての書き込みは正当な動作と考えられ、これらのロケーションが読み出されると＄００となる。
【０２９２】
セクション２．３．４４ 例外ポインタ表図７０に示されるように、例外ポインタ表の
レジスタ３７０を用いると、ホストは例外の場合のアソシエーション・エンジンの正確な応答を決定することができる。
【０２９３】
例外ポインタ表は、ホストがアクセスすることのできるレジスタ・マップに入れられて、全体が命令キャッシュ（ＩＣ）に適合できるほど充分に小さい、小型のプログラムで係
数メモリ・アレイ（ＣＭＡ）全体をデータ記憶に割り当てることができる。
【０２９４】
ＥＰＰＣ（リセット初期プログラム・カウンタ）−−この１６ビットのレジスタに含まれる値は、アソシエーション・エンジンがリセット状態から出るとプログラム・カウンタ（ＰＣ）内にロードされる。
【０２９５】
ＥＰＳＣ（リセット初期スタック・ポインタ）−−この１６ビットのレジスタに含まれる値は、アソシエーション・エンジンがリセット状態から出るとスタック・ポインタ（ＳＰ）内にロードされる。
【０２９６】
ＥＰＳＶ（スケーラ・オーバーフロー例外ポインタ）−−スケーラ・エンジン内で算術演算オーバーフローが起こり、例外マスク・レジスタ（ＥＭＲ）のスケーラ・オーバーフロー例外マスク・ビット（ＳＶＥＭ）がクリアされると、ＥＰＳＶの内容が次のクロックでＰＣ内にロードされる。
【０２９７】
ＥＰＶＶ（ベクタ・オーバーフロー例外ポインタ）−−ベクタ・エンジン内で算術演算オーバーフローが起こり、例外マスク・レジスタ（ＥＭＲ）のベクタ・オーバーフロー例外マスク・ビット（ＶＶＥＭ）がクリアされると、ＥＰＶＶの内容が次のクロックでＰＣ内にロードされる。
【０２９８】
ＥＰＳＺ（スケーラ・ゼロによる除算例外ポインタ）−−スケーラ・エンジン内でゼロによる除算が起こり、例外マスク・レジスタ（ＥＭＲ）のスケーラ・ゼロによる除算例外マスク・ビット（ＳＤＥＭ）がクリアされると、ＥＰＳＺの内容が次のクロックでＰＣ内にロードされる。
【０２９９】
ＥＰＶＺ（ベクタ・ゼロによる除算例外ポインタ）−−ベクタ・エンジン内でゼロによる除算が起こり、例外マスク・レジスタ（ＥＭＲ）のベクタ・ゼロによる除算例外マスク・ビット（ＶＤＥＭ）がクリアされると、ＥＰＶＺの内容が次のクロックでＰＣ内にロードされる。
【０３００】
ＥＰＯＢ（ＰＣ制限超過例外ポインタ）−−プログラム・カウンタ（ＰＣ）がＰＣ境界レジスタ（ＰＢＲ）に含まれる値を越え、例外マスク・レジスタ（ＥＭＲ）のＰＣ制限超過例外マスク・ビット（ＰＣＥＭ）がクリアの場合は、ＥＰＯＢに含まれる値が次のクロックでＰＣ内にロードされる。
【０３０１】
ＥＰＩＯ（不当オペコード例外ポインタ）−−現在のバージョンのアソシエーション・エンジンで実現されないオペコードが検出されて、例外マスク・レジスタ（ＥＭＲ）の不当オペコード例外マスク・ビット（ＩＯＥＭ）がクリアの場合は、ＥＰＩＯに含まれる値が次のクロックでＰＣ内にロードされる。
【０３０２】
ＥＰＰＥ（ポート・エラー例外ポインタ）−−表３．６にリストアップされているいずれかのポート・エラー例外が起こり、例外マスク・レジスタ（ＥＭＲ）のポート・エラー例外マスク・ビット（ＰＥＥＭ）がクリアの場合は、ＥＰＰＥに含まれる値が次のクロックでＰＣ内にロードされる。
【０３０３】
例外のイネーブルおよびディスエーブルの詳細については、セクション２．３．４，例外マスク・レジスタ（ＥＭＲ）を参照のこと。
その他のすべての例外は、図７１の流れ図に従って処理される。例外が検出されると、マイクロシーケンサはプログラム・カウンタ（ＰＣ）の現在値をスタック上に押し出す。例外に対応するアドレスが、例外ポインタ表から読み出されて、ＰＣ内にロードされる。
次に、例外ポインタにより指示された例外ルーチンが実行される。例外ルーチンは、通常rte 命令で終了して、これによりマイクロシーケンサはスタックされたＰＣ値を検索して、例外条件の前のロケーションに戻る。
【０３０４】
最初の例外が完全に処理されないうちに第２の例外が起こった場合は、アソシエーション・エンジンはアイドル状態に移行して、アソシエーション・エンジンがリセットされるまでは事実上nop 命令を実行する。
【０３０５】
セクション２．３．４５ 入力データ・レジスタ（ＩＤＲ）
入力データ・レジスタ（ＩＤＲ）１８は、ラン・モード入力データ値を保持する６４ロケーションのアレイである。ＩＤＲは図７２に、より詳細に図示される。ＩＤＲは、ラン・モード中に外部から書き込むことのできる唯一のロケーションである。特定のポートに関してポート制御レジスタ（ＰＣＲ）のタップ・ビットがセットされて、そのポートにデータが書き込まれると、データはＩＤＲに入る。ＩＤＲの各ロケーションは、実際には９ビット幅である。すなわち、８ビットが実際のデータを保持するために用いられ、９番目のビットは有効ビットである。
【０３０６】
ＩＤＲ［０］の有効入力データ・ビット（ＶＩＤビット）は、ＰＥ［０］：ＶＰＣＲに含まれ、ＩＤＲ［１］のＶＩＤビットはＰＥ［１］：ＶＰＣＲに含まれる。ＩＤＲロケーションに各データが書き込まれると、対応する有効ビットがセットされる。有効ビットは、マイクロコード命令の実行を制御するために用いられる。ＩＤＲのロケーションがマイクロコード命令によりアクセス（リード）されて、対応する有効ビットがセットされないと、ＳＩＭＤ制御ブロックは外部ソースによりそのＩＤＲロケーションにデータが書き込まれるまで「休止」する。
【０３０７】
ストップ・モード（Ｒ／反転Ｓ＝０）の間は、ＩＤＲはランダムまたはストリーム・アクセス・モードのいずれかを用いてロードすることができる。ラン・モード（Ｒ／反転Ｓ＝１）の間は、データはストリーム・アクセスを用いて転送され、ＩＤＲは、入力インデックス付けまたは入力タグ付けのいずれかを用いてロードすることができる。ポート制御レジスタ（ＰＣＲ）のＦＭビットを用いて、どの方法（インデックスまたはタッギング）を用いるかを決める。
【０３０８】
ＩＤＲをどのようにロードするかについての詳細は、セクション３．５．２，アソシエーション・エンジン転送モードと、セクション３．５．１，ホスト転送モードを参照のこと。ＶＰＣＲのビットの詳細については、セクション２．３．４７，ベクタ・プロセス制御レジスタ（ＶＰＣＲ）を参照のこと。
【０３０９】
セクション２．３．４６ ベクタ・データ・レジスタ（Ｖ［０］〜Ｖ［７］）
ベクタ・エンジンの各処理要素には、８個のベクタ・データ・レジスタ（Ｖ［０］〜Ｖ［７］）１２８のセットが含まれる。ベクタ・データ・レジスタは図７３に、より詳細に図示される。これらのレジスタは、計算中に一時的な記憶装置および結果の記憶装置として用いることができる。これらのレジスタの使用法は交換可能である。すなわち、これらのレジスタは汎用データ以外のものについてはアソシエーション・エンジンにより用いられない。
【０３１０】
セクション２．３．４７ ベクタ・プロセス制御レジスタ（ＶＰＣＲ）
ベクタ・エンジンの各処理要素には、ベクタ・プロセス制御レジスタ（ＶＰＣＲ）１０２が含まれ、これは多重バイト算術演算および論理動作の流れを制御する。ＶＰＣＲはまた、最近の算術演算動作のステータスを表すために用いることもできる。ＶＰＣＲは図７４に、より詳細に図示される。表２．３１にＶＰＣＲに関するより詳細な情報が示される
。
【０３１１】
ベクタ拡張ビット（ＶＸ［１：０］）は、一定の算術演算命令の精度を拡大するために用いられる。これらのビットがどのようにセットされるか、またどのようにマイクロコードにより用いられるかについてはセクション２．５，アソシエーション・エンジン・マイクロコード命令セットの概要の表２．６４とセクション２．５．２０，プロセス計算制御を参照のこと。
【０３１２】
ベクタ・オーバーフロー・ビット（ＶＶ）とベクタ・オーバーフロー方向ビット（ＶＤ）は、前回の算術演算にオーバーフローが発生したことと、オーバーフローが起こった場合のオーバーフローの方向とを示すために用いられる。飽和保護を行う命令について、ＶＶは飽和が起こったか否かを表し、ＶＤは飽和が起こった方向を表す。ＶＶおよびＶＤビットがどのようにセットされ使用されるかというより完全な説明については、セクション２．５，アソシエーション・エンジン・マイクロコード命令セットの概要の表２．６４を参照のこと。
【０３１３】
ベクタ条件付きビット（ＶＴ，ＶＨ）により、条件付きvif-velse, vif-vendif 命令が、すべての処理要素上で適切に（そして独立して）機能する。処理要素のＶＴビットがセットされていないとき（ＶＴ＝０）は、シェルフ全体（処理要素とその６４個のＣＭＡロケーション）は、非アクティブであると見なされる。命令のデスティネーションがベクタ・レジスタ（Ｖ［０］〜Ｖ［７］）の１つまたはＣＭＡである場合は、デスティネーションは更新されない。ＶＨビットにより、条件構造のvelse-vif 部分が適切に機能することができる。これは、最後のvendif命令の実行以来、処理要素が条件付きifステートメントを得たか否かを示す。
【０３１４】
有効入力データ・ビット（ＶＩＤ）は、入力データ・レジスタ（ＩＤＲ）の対応するロケーションが有効であるか否かを表す。たとえば、ＩＤＲ［１３］が書き込まれると、処理要素＃１３のＶＩＤがセットされる（ＰＥ［１３］：ＶＩＤ＝１）。
【０３１５】
飽和の詳細については、セクション２．５．９，飽和動作と不飽和動作を参照のこと。ＶＰＣＲのビットをセットする命令については、表２．６４を参照のこと。
セクション２．３．４８ 入力タッグ・レジスタ（ＩＴＲ）
入力タッグ・レジスタ（ＩＴＲ）１３８は、ラン・モード（Ｒ／反転Ｓ＝１）中にデータが入力データ・レジスタ（ＩＤＲ）にいつ書き込まれるかを制御するためのメカニズムとなる。ＩＴＲは図７５に、より詳細に図示される。ＩＴＲの用途は、ポート制御レジスタ（ＰＣＲ）のＦＭビットにより制御される。ＦＭビットがクリアのときは、ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）が用いられ、ＦＭビットがセットされているときはＩＴＲが用いられる。
【０３１６】
ＦＭがクリアのラン・モード・データ・ブロードキャストの間は、入力データ・レジスタ（ＩＤＲ）がデータ・ストリームから昇順の連続バイトを受け取り、これは次のアソシエーション・エンジンに制御が渡されるまで続く。ＩＴＲを用いる際は、ＩＤＲは入力データ・ストリームから昇順の非連続バイトを受け取る。ＩＴＲに含まれる値により、入力サンプル・ストリームから捕捉すべきサンプル番号が指定される。
【０３１７】
ＩＴＲを使用する場合の注意は、以下のとおりである：１．ＩＴＲの内容は、ラン・モード（Ｒ／反転Ｓ＝１）でデータを転送する場合にのみ用いられる。
２．ＩＴＲの内容は、ＩＤＲに対する転送だけに効果をもつ（すなわち、ＩＤＲは、ラン・モード中のチップ間転送の暗黙のデスティネーションとなる）。
【０３１８】
３．ＩＴＲには昇順の値が含まれる；すなわち、タッグ＃２に含まれる値は、タッグ＃１に含まれる値よりも大きくなければならず、これはタッグ＃０の値よりも大きくなければならない。
【０３１９】
タッグ値の最大数は６４（ＩＤＲのロケーション数に等しい）である。
このグループのレジスタは、一般的なチップ間のデータ転送を支援するように設計されていないが、完全に接続されていないネットワークと、受け入れ可能なフィールドの概念を採用するネットワークとを支援するように設計されている。
【０３２０】
入力タグ付けモードを用いるには、まずＩＰＲレジスタに＄０をロードし、ＩＣＲレジスタに＄４０（または書き込まれるタッグの数）をロードし、ＩＴＲにタッグ値をストリーミングしなければならない。タッグがＩＴＲにロードされると、ＰＣＲのＦＭビットがセットされ、このデバイスはすべてのラン・モード・ブロードキャスト中はＩＴＲを用いることになる。
【０３２１】
より詳細な説明については、セクション３．５．２．１，入力インデックス付けと、セクション３．５．２．３，入力タグ付けを参照のこと。
セクション２．３．４９ 命令キャッシュ（ＩＣ）
命令キャッシュ（ＩＣ）２０は、それぞれ３２命令ワードの４つのキャッシュ・ラインで構成される。ＩＣは図７６に、より詳細に図示される。各命令キャッシュ・ラインには、それぞれのタッグと有効ビットとがある。各キャッシュ・ラインは、ＭＭＡからベクタとしてロードされるので、１つのクロック・サイクルで３２の命令ワードをロードすることができる。（注記：係数メモリ・アレイ（ＣＭＡ）空間を用いて命令を保持するときは、その空間をマイクロコード・メモリ・アレイまたはＭＭＡと呼ぶのが普通である）。
【０３２２】
ＭＭＡおよび命令キャッシュの詳細については、セクション３．３．１，命令キャッシングを参照のこと。
セクション２．３．５０ 係数メモリ・アレイ（ＣＭＡ）
係数メモリ・アレイ（ＣＭＡ）１４は、ネットワーク係数，マイクロコード命令および一時的なデータ値を含むことのできる６４ｘ６４アレイである。ＣＭＡは図７７に、より詳細に図示される。ＣＭＡがホストによりどのようにアクセスされるかにより、二次元アレイとして見なされるか、線形アレイとして見なされるかが決まる。以下の説明は、アソシエーション・エンジンがストップ・モード（Ｒ／反転Ｓ＝０）の場合のみに関するものである。ラン・モード（Ｒ／反転Ｓ＝１）中にＣＭＡがどのようにアクセスされるかについては、セクション３．３．２，ＣＭＡとＭＭＡのマッピングの説明を参照のこと。
【０３２３】
ＣＭＡがランダム・アクセスを用いてアクセスされると、ＣＭＡは線形アレイとなり、アドレスは１つの列のシェルフに沿って昇順に並べられる。すなわち、ＣＭＡの第１列には、最初の６４個のロケーションが含まれ、第２の列には次の６４個のロケーションが含まれるというように続く。
【０３２４】
ＣＭＡがストリーム・アクセスを用いてアクセスされると、ロケーションは二次元アレイまたは線形アレイのいずれかとして見なされる。ＨＳＳＲ：ＬＳ［３：０］＝０００１の場合、これはＣＭＡをアクセスすべき論理空間として示すが、ＣＭＡは二次元アレイとしてアクセスされる。この場合は、ＯＡＲ１が特定のシェルフのオフセットを表すために用いられ、ＯＡＲ２がアクセスが開始されるシェルフを表すために用いられ、ＤＣＲ１が各シェルフからいくつのＣＭＡロケーションをアクセスするかを表すために用いられ、ＤＣＲ２がいくつのシェルフをアクセスするかを表すために用いられる。
【０３２５】
ＨＳＳＲ：ＬＳ［３：０］＝１１１１のときは、ランダム・アクセス空間全体がアクセ
スされることが示され、ＣＭＡは４０９６個のロケーションの線形アレイとして扱われる。
【０３２６】
ＣＭＡに含まれるデータは、入力データを出力データに変形するために用いられる。また、学習が行われると変更されるのもＣＭＡに含まれるデータである。各ロケーションは８ビットの幅で、各シェルフには６４のロケーションがある。セクション２．４ アソシ
エーション・エンジン・マイクロコードがアクセス可能なレジスタ本セクションで説明されるレジスタは、ＳＩＭＤ命令セットの実行中にアクセスすることができるレジスタで、そのためにホストにより外部アクセスすることができるレジスタのサブセットを形成する。ホストによりアクセス可能なレジスタの完全な説明については、セクション２．３，アソシエーション・エンジン・ホストがアクセス可能な制御を参照のこと。
【０３２７】
ＳＩＭＤ命令セットによりアクセスおよび修正が可能な制御の数は、５つのグループに分類される：すなわちセクション２．４．１，入力データ・レジスタ（ＩＤＲ），セクション２．４．２，ベクタ・エンジン・レジスタ，セクション２．４．３，マイクロシーケンサ制御レジスタ，セクション２．４．４，スケーラ・エンジン・レジスタおよびセクション２．４．５，アソシエーション・エンジン制御レジスタである。これらのレジスタのグループ間の関係を、図７８に示す。
【０３２８】
セクション２．４．１ 入力データ・レジスタ（ＩＤＲ）
ＩＤＲは、ベクタ・ソース（処理要素に対して６４個のデータを同時に供給する）またはスケーラ・ソース（すべての処理要素が１つのＩＤＲロケーションに同時にアクセスすることを可能にする）のいずれかとして用いることができるので、それ自身が１つのカテゴリに入る。
【０３２９】
ＩＤＲには、このアソシエーション・エンジンのための入力ベクタが含まれる。このレジスタは、レジスタ間接モードのアドレッシングを用いるマイクロコード命令を通じてアクセスすることができる。すなわち、間接命令は、ポインタ・レジスタ（Ｐ［０］〜Ｐ［７］）の１つの内容を用いて、ＩＤＲ内の適切な値にアクセスする。
【０３３０】
（マイクロコード命令シーケンスを用いると）２つの異なる方法のうちどちらか１つでＩＤＲにアクセスすることができる。ＩＤＲにアクセスする１つの方法は、ＳＩＭＤベクタ・エンジンのすべての処理要素が同時にＩＤＲ内の１つのエントリを見ることができるようにする方法である。これがＩＤＲのスケーラ・アクセスである。ＩＤＲにアクセスするもう１つの方法は、ＩＤＲを処理要素と縦に整列されたものとして見る方法で、これによりベクタとしてのＩＤＲにアクセスする。言い換えれば、ＩＤＲ［０］は、処理要素＃０と関連をもち、ＩＤＲ［１］は処理要素＃１と関連をもつということである。この方法を用いると、計算を開始する前にＩＤＲ全体を充てんしなければならないが、ＩＤＲが一度充てんされると、ＩＤＲ全体を同時に処理することができる。それぞれのＶＰＣＲ Ｖ
ＩＤビットには、ＩＤＲの各要素に関する有効ステータスが含まれている。
【０３３１】
セクション２．４．２ ベクタ・エンジン・レジスタ以下に説明されるレジスタは、ベ
クタ・エンジンの６４個の処理要素のそれぞれにある。図７９および図８０が、ベクタ・・エンジン・レジスタを説明する。
【０３３２】
セクション２．４．２．１ 係数メモリ・アレイ（ＣＭＡ）
各処理要素は、各処理要素のためのマッピング係数を保持するために用いられる６４個の８ビットＣＭＡロケーションのセットにアクセスすることができる。グローバル・ポインタ・レジスタ（Ｐ［０］〜［７］）を用いることにより、ＣＭＡに間接的にアクセスすることができる。この種の間接アドレッシングのシンタクスは、セクション２．５．３，
マイクロコード命令フォーマットに見られる。レジスタ間接アドレッシング・モードを用いると、すべての処理要素は同じＣＭＡ列をインデックスする点に留意されたい。ＣＭＡの詳細については、セクション２．３．５０を参照のこと。
【０３３３】
セクション２．４．２．２ ベクタ・データ・レジスタ（Ｖ［０］〜Ｖ［７］）
各処理要素には、計算プロセス中に用いることのできる８個の８ビット汎用レジスタのセットが含まれる。ベクタ・データ・レジスタの詳細については、セクション２．３．４６を参照のこと。
【０３３４】
セクション２．４．２．３ ベクタ・プロセス制御レジスタ（ＶＰＣＲ）
ＶＰＣＲには、前回のベクタＡＬＵ動作から得た条件／処理ビットと、ベクタ・エンジンのデスティネーションのロードを制御するビットとが含まれる。これらのビットにリストは、表２．３２にある。ＶＰＣＲの詳細については、セクション２．３．４７を参照のこと。
【０３３５】
セクション２．４．３ マイクロコード制御レジスタ図８１は、マイクロコード・レジ
スタを示す。
セクション２．４．３．１ 命令レジスタ（ＩＲ）
この１６ビットのレジスタには、現在実行されているマイクロコードが含まれる。このレジスタは、命令にアクセスする際に用い、命令のオペランドとして用いることはできない。
【０３３６】
セクション２．４．３．２ プログラム・カウンタ（ＰＣ）
この１６ビットのレジスタは、現在実行されているマイクロコード命令のアドレスを保持する。このアドレスは、命令キャッシュ（ＩＣ）から新しいマイクロコード命令ワードを得るために用いられる。ＣＭＡまたはＩＣに対するアクセス（ＰＣを用いて）のそれぞれは、バイト・アクセスと見なされ、そのためにＰＣはいつも２ずつ増分される。ＰＣの詳細については、セクション２．３．３１を参照のこと。
【０３３７】
セクション２．４．３．３ スタック・ポインタ（ＳＰ）
ＳＰは、ＣＭＡ内にデータ・スタック動作を行うために用いられる。サブルーチン動作に関しては、このレジスタは（ＦＬＳと共に）、サブルーチン呼出およびリターンのためのメカニズムとなる。load/store動作に関しては、このレジスタはデータ・オペランドにアクセスするベース・ポインタとして用いられる。注記：スタック動作は、データ移動動作と見なされ、そのために命令キャッシュではなくＣＭＡに記憶される。ＳＰは、常に最初の自由ロケーションを指示する。pop 命令が実行されると、ＳＰが増分されてデータ・アクセスが実行される。push命令が実行されると、データはまずスタックに入れられ、その後ＳＰが減分される。
【０３３８】
セクション２．４．３．４ 第１レベル・スタック（ＦＬＳ）
ＦＬＳは、サブルーチン呼出のための第１レベル・リターンＰＣを保持する。このレジスタを用いると、１レベルの深さしかないサブルーチンに対する呼出およびリターン・アクセスがより迅速に行える。ネストされたサブルーチン呼出に関しては、第１呼出のリターン・アドレスがＦＬＳに記憶されて、その後のすべての呼出は、そのリターン・アドレスをスタック上に押し出すことになる（これはＳＰレジスタにより指示される）。ＦＬＳの詳細については、セクション２．３．３８を参照のこと。
【０３３９】
セクション２．４．３．５ リピート開始レジスタ（ＲＢＲ）
ＲＢＲは、repeat(e) 命令の実行中に用いられ、repeat(e) に続く命令のアドレスを保持する。repeat(e) 命令が実行されると、このレジスタが自動的にロードされる。repeat
(e) ループの底に達すると（ＰＣ＝＝ＲＥＲ）このレジスタの内容は、プログラム・カウンタ（ＰＣ）にロードされる。ＲＢＲに関する詳細については、セクション２．３．３９を参照のこと。
【０３４０】
セクション２．４．３．６ リピート終了レジスタ（ＲＥＲ）
ＲＥＲは、repeat(e) 命令の実行中に用いられる。ＲＥＲには、repeat(e) ループの最終命令のアドレスが含まれる。リピート・カウント・レジスタ（ＲＣＲ）がゼロでない場合は、ＰＣ＝＝ＲＥＲになるたびに、ＲＣＲが減分され、ＰＣにはＲＢＲに含まれる値がロードされる。ＲＥＲに関する詳細については、セクション２．３．４０を参照のこと。
【０３４１】
セクション２．４．３．７ リピート・カウント・レジスタ（ＲＣＲ）
ＲＣＲは、repeat(e) 命令の実行中に用いられる。このレジスタには、repeat(e) ループが実行される回数が含まれる。このレジスタに０がロードされると、repeat(e) 命令とＲＥＲにより指定されたアドレスとの間の命令がスキップされる。ＲＣＲに関する詳細については、セクション２．３．４１を参照のこと。
【０３４２】
セクション２．４．４ スケーラ・エンジン・レジスタＳＩＭＤスケーラ・エンジン・
レジスタは、ＳＩＭＤスケーラ・エンジンによりアクセスおよび修正が可能なレジスタである。図８２は、スケーラ・エンジン・レジスタをより詳細に図示する。これらのレジスタに含まれる値は、すべてのＳＩＭＤユニットの動作に影響を与える。ＳＩＭＤベクタ・エンジンの６４個の処理要素すべてについて１つのＳＩＭＤスケーラ・エンジンがあるので、ＳＩＭＤスケーラ・エンジン・レジスタのそれぞれのコピーが１つずつある。
【０３４３】
セクション２．４．４．１ グローバル・ポインタ・レジスタ（Ｐ［０］〜Ｐ［７］）
８個の８ビット・レジスタのこのセットには、ＩＤＲまたはＣＭＡのレジスタを選択するために用いられるアドレスが含まれている。これらのレジスタはまた、スケーラ算術演算のための汎用データ・レジスタとしても用いることができる。
【０３４４】
セクション２．４．４．２ グローバル・データ・レジスタ（Ｇ［０］〜Ｇ［７］）
グローバルな計算値を保持することができる８個の８ビット汎用データ・レジスタであり、あるいはＳＩＭＤベクタ・エンジンの特定の処理要素のためのデータを保持することができる。
【０３４５】
セクション２．４．４．３ スケーラ・プロセス制御レジスタ（ＳＰＣＲ）
ＳＰＣＲは、スケーラ・エンジン内の多重バイト算術演算動作の流れを制御する。このレジスタに含まれるビットの詳細については、表２．３３を参照のこと。
【０３４６】
セクション２．４．５ アソシエーション・エンジン制御レジスタ以下の説明は、movci, movtcおよびmovfc 命令を用いて、読み出し可能（Ｒ）または読み出しおよび書き込み
可能（Ｒ／反転Ｗ）なレジスタである。これらのレジスタにアクセスするために用いられるアドレスは、表２．５のレジスタのランダム・アクセス・アドレスと同じである。図８３は、スケーラ・エンジン・レジスタをより詳細に図示する。
【０３４７】
セクション２．４．５．１ アソシエーション・エンジン識別レジスタ（ＡＩＲ）
ＡＩＲはデバイス識別番号を含む読み込み専用レジスタである。アソシエーション・エンジンのプログラムにより、デバイスのタイプ（およびそれによりそのデバイス特有のコンフィギュレーション）が決まる。movfc 命令を用いるときのレジスタのアドレスは＄０である。ＡＩＲの詳細については、セクション２．３．１を参照のこと。
【０３４８】
セクション２．４．５．２ 算術演算制御レジスタ（ＡＣＲ）
ＡＣＲは、ベクタ・エンジンおよびスケーラ・エンジンの算術演算動作を制御するために用いられる。ＶＳＧＮビットおよびＳＳＧＮビットが、ベクタ・エンジンおよびスケーラ・エンジンが、符号つきの算術演算を行うか、符号なしの算術演算を行うかを制御する。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄１である。ＡＣＲの詳細については、セクション２．３．２を参照のこと。
【０３４９】
セクション２．４．５．３ 例外ステータス・レジスタ（ＥＳＲ）
例外ステータス・レジスタのビットは、すべての保留中の例外の発生を記録する。アソシエーション・エンジン例外モデルはフラットであり（一度に１つの例外しか処理されない）、優先順位をつけられている（優先順位の高い例外が、優先順位の低い例外よりも先に処理される）。ＰＥＥビットがセットされると、ポート・エラー例外が起こったことを表す。ＩＯＥビットがセットされると、不当オペコード例外が起こったことを表す。ＰＣＥビットがセットされると、ＰＣ制限超過例外が起こったことを表す。ＶＤＥビットおよびＳＤＥビットがセットされると、それぞれベクタ・エンジンおよびスケーラ・エンジンにゼロによる除算例外が起こったことを表す。ＶＶＥビットおよびＳＶＥビットがセットされると、それぞれベクタ・エンジンおよびスケーラ・エンジンにオーバーフロー例外が起こったことを表す。movfc を用いる際のこのレジスタのアドレスは、＄２である。ＥＳＲの詳細については、セクション２．３．３を参照のこと。
【０３５０】
rte 命令が実行されると、ＥＭＲの対応するマスク・ビットがクリアである場合は、処理されている例外に対応するビットがクリアされる。すなわち、ＥＳＲのビットをクリアするための唯一の方法は、rte 命令を実行することである（例外処理ルーチン内から行うことが望ましい）。また、例外処理ルーチンに入る唯一の方法は：１）例外が起こること；および２）ＥＭＲ内の対応するマスク・ビットがクリアされることに関するものである。この機能により、例外は「スタック」されることになる（複数の例外を保留できて、一度に１つしか処理できない）。このメカニズムにより、無視された例外のステータスを残すこともできる。
【０３５１】
セクション２．４．５．４ 例外マスク・レジスタ（ＥＭＲ）
例外マスク・レジスタにより、マイクロコードは、どの例外を処理するか、どの例外を無視するかを指定することができる。ＰＥＥＭビットがセットされると、ポート・エラーが起こっても例外が発生しないことを表す。ＩＯＥＭビットがセットされると、不当オペコードが起こっても例外が発生しないことを表す。ＰＣＥＭビットがセットされると、ＰＣ制限超過が起こっても例外が発生しないことを表す。ＶＤＥＭビットおよびＳＤＥＭビットがセットされると、それぞれベクタ・エンジンおよびスケーラ・エンジンにゼロによる除算が起こっても例外が発生しないことを表す。ＶＶＥＭビットおよびＳＶＥＭビットがセットされると、それぞれベクタ・エンジンおよびスケーラ・エンジンにオーバーフローが起こっても例外が発生しないことを表す。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄３である。ＥＭＲの詳細については、セクション２．３．４を参照のこと。
【０３５２】
セクション２．４．５．５ 処理要素選択レジスタ（ＰＥＳＲ）
ＰＥＳＲは、drotmov またはdsrot 命令に関与する最終処理要素を制御する。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄４である。ＰＥＳＲの詳細については、セクション２．３．５を参照のこと。
【０３５３】
セクション２．４．５．６ ポート制御レジスタ（ＰＣＲ）
ＰＣＲは、アソシエーション・エンジンの４つのポートでスイッチおよびタップ位置の設定値を制御する。このレジスタにより、マイクロコードは、ラン・モードでデータがチップ間で転送される場合にＩＤＲをどのように充てんするかを決定することができる。mo
vci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄５である。ＰＣＲの詳細については、セクション２．３．６を参照のこと。
【０３５４】
セクション２．４．５．７ アソシエーション・エンジン・ポート・モニタ・レジスタ
（ＡＰＭＲ）
ＡＰＭＲにより、マイクロコードは、ポート・エラーの原因を決定することができる。このレジスタは、一般に例外処理中のみに用いられる。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄６である。ＡＰＭＲの詳細については、セクション２．３．７を参照のこと。
【０３５５】
セクション２．４．５．８ 汎用ポート・レジスタ（ＧＰＰＲ）
ＧＰＰＲは、ＰＡ［１：０］信号ピンの状態を制御する２ビットのレジスタである。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄７である。ＧＰＰＲの詳細については、セクション２．３．８を参照のこと。
【０３５６】
セクション２．４．５．９ 汎用方向レジスタ（ＧＰＤＲ）
ＧＰＤＲは、ＰＡ［１：０］信号ピンの方向を制御する。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄８である。ＧＰＤＲの詳細については、セクション２．３．９を参照のこと。
【０３５７】
セクション２．４．５．１０ ＩＤＲポインタ・レジスタ（ＩＰＲ）
ＩＰＲは、データ・ブロードキャスト中にＩＤＲ内でデータが入れられる場所を制御する。このレジスタのリセット値は＄００であり、これはデータがレジスタが変更される前にブロードキャストされると、ロケーションＩＤＲ［０］から始まるＩＤＲに入れられることを意味する。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄９である。ＩＰＲの詳細については、セクション２．３．１０を参照のこと。
【０３５８】
セクション２．４．５．１１ ＩＤＲカウント・レジスタ（ＩＣＲ）
ＩＣＲは、データ・ブロードキャスト中にこの部分により受信されるデータの最大数を指定する。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄Ａである。ＩＣＲの詳細については、セクション２．３．１１を参照のこと。
【０３５９】
セクション２．４．５．１２ ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）
ＩＬＭＲは、ＩＰＲと共に用いられて、どのＩＰＲアドレス・ビットが「無視される」かを決める。これにより、ブロードキャスト中のデータをＩＤＲに複写することができる。movci, movtcおよびmovfc を用いる際のこのレジスタのアドレスは、＄Ｃである。ＩＬＭＲの詳細については、セクション２．３．１２を参照のこと。
【０３６０】
セクション２．４．５．１３ ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）
ＩＯＲにより、ブロードキャストの開始時のデータが無視される。このレジスタのリセット値は＄００００であり、これはブロードキャストの開始時にデータを無視せずにＩＤＲがロードされることを意味する。指定された数のバイトがスキップされると、ＩＤＲにロードされたバイトは、ブロードキャストからの連続ストリームのデータを表す。このレジスタは、ラン・モード・ストリーム・ライト動作中のみに用いられる。さらに詳しく述べると、入力インデックス付けモード（ＰＣＲ：ＦＭ＝０）の間だけ用いられる。セクション２．３．１２に説明された入力タグ付け（ＰＣＲ：ＦＭ＝１）と比較されたい。これは１６ビットのレジスタなので、２つの部分に分けてアドレスしなければならない。movci, movtcおよびmovfc を用いる際のこのレジスタのＭＳＢのアドレスは、＄Ｅである。ＩＯＲの詳細については、セクション２．３．１３を参照のこと。
【０３６１】
セクション２．５ アソシエーション・エンジン・マイクロコード命令セットの概要本
セクションは、アソシエーション・エンジンの動作をプログラミングするために用いることのできるコマンドについて説明する。セクション２．４，アソシエーション・エンジン・マイクロコードがアクセス可能なレジスタでは、アソシエーション・エンジン・マイクロコードのプログラマが用いることのできるレジスタが説明されている。本セクションでは、レジスタを用いて実行することのできる実際の動作を説明する。
【０３６２】
セクション２．５．１ 命令のタイプ命令は、種々の動作を実行するためのツールのセ
ットを形成する。表２．３４に命令とそのタイプの概要を示す。
セクション２．５．２ 使用されるノーテイション表２．３５に示されるノーテイショ
ンが本セクション全体を通じて用いられる。
【０３６３】
セクション２．５．３ マイクロコード命令フォーマット本セクションでは、アソシエ
ーション・エンジンのためのマイクロコード命令を構築するために用いられるフィールドを説明する。モナディック命令（bcnt srgD などの単一オペランド命令）のすべてのついて、指定されたレジスタが、その命令のソース・レジスタおよびデスティネーション・レジスタの両方の機能を果たす。ダイアディック命令（add sregS, sregDなど２つのオペランドを持つ命令）のすべてについて、最初に指定されたレジスタが動作の１ソースとして機能し、２番目に指定されたレジスタが動作のソースおよび動作のデスティネーション・レジスタとして機能する。
【０３６４】
セクション２．５．３．１ データ・フォーマットベクタ・エンジンおよびスケーラ・
エンジンのための基本的なデータ量は、バイトである。このデータ・サイズを多重バイト算術演算まで拡張する機能は、速度を犠牲にしてもたらされる。（浮動小数点フォーマットなどの）他のフォーマットに関しては、ユーザはスクラッチ記憶部のためのＣＭＡ部分を用いることが求められる。
【０３６５】
セクション２．５．３．２ レジスタの選択vreg1, vreg2およびsregフィールドは、マ
イクロコード動作で用いられるベクタ・エンジンおよびスケーラ・エンジンのレジスタ・セットを定義する。vreg1,vreg2およびsregという名前は、ソースまたはデスティネーシ
ョン情報を示すものではない。これらは、ベクタ・エンジンおよびスケーラ・エンジン内のレジスタのグループを伝えるためのものに過ぎない。vreg1 により伝えられるレジスタのセットを表２．３６に示す。vreg2 により伝えられるレジスタのセットを表２．３７に示す。sregにより伝えられるレジスタのセットを表２．３８に示す。
【０３６６】
セクション２．５．３．３ スタック・ポインタ用例アソシエーション・エンジンは、
サブルーチン呼出および例外処理のためにスタック・ポインタ（ＳＰ）レジスタを利用する。ＳＰに関して用いられる用例を、以下に示す。ＳＰレジスタは、データがスタックに入れられると減分され、データがスタックから取り出されると増分される（それぞれbsr,
return ）。スタック・ポインタの現在値は、スタック動作に使用することのできる最初のロケーションを指示する（すなわちＳＰは、空のロケーションを指示する）。
【０３６７】
セクション２．５．５ ＩＤＲへのアクセスＩＤＲには、２つの異なる方法でアドレス
することができる。６４個の単一バイト・スケーラ・エンティティとしてアドレスすること（スケーラ・アクセス）ができ、これはＩＤＲ内の単一のバイトがすべての処理要素にブロードキャストされることを意味する。また単一の６４バイトのベクタ・エンティティとしてアドレスすること（ベクタ・アクセス）もでき、これはＩＤＲのバイト＃０が処理要素＃０によりアクセスされ、ＩＤＲのバイト＃１が処理要素＃１によりアクセスされ、ＩＤＲのバイト＃６３が処理要素＃６３によりアクセスされることを意味する。
【０３６８】
ＩＤＲにスケーラ・アクセスを行う（すなわち単一のバイトがすべてのＰＥにブロードキャストされる）場合には、命令ノーテイションは、間接アドレス・ポインタを用いてＩＤＲ（ＩＤＲ［Ｐ０］またはＩＤＲ［Ｐ０＋＋］，すなわちvmovＩＤＲ［Ｐ０］，［Ｖ０］）にインデックスする。これは、アソシエーション・エンジン内部のブロードキャスト・バスを用いて行われる。ＩＤＲの単一の要素の内容は、このブロードキャスト・バスに入れられ、すべての処理要素により同時に受け入れられる。
【０３６９】
ＩＤＲにベクタ・アクセスを行う場合（すなわち６４バイトのベクタとして）は、命令ノーテイションは間接ポインタ・レジスタ（ＩＤＲまたはＩＤＲＣ，すなわちvmovＩＤＲ，Ｖ［０］）を用いない。ブロードキャスト・バスは、一緒にバイパスされて、ＩＤＲの各要素は対応する処理要素に同時に転送される。
【０３７０】
このような融通性により、異なるアルゴリズムの実現が容易になる。図８４は、ＩＤＲの概念的な実行例を示す。
ＩＤＲには、各ＩＤＲロケーションの関連する有効ビットもある。これは、アソシエーション・エンジン・プログラムが無効データに関して動作しないようにするためのものである。ＩＤＲロケーションが書き込まれると、有効ビットがセットされる。ＩＤＲに対してスケーラ・アクセスが行われる場合は、特定のＩＤＲロケーションの有効ビットを用いてデータの有効性を判定する。ＩＤＲに対してベクタ・アクセスが行われると、各有効ビットが処理マスク（ＶＴビット）と比較されて、ＩＤＲロケーションが有効であるか否かの判定が行われる。ＩＤＲそのものが有効であるか否かを判定するには、すべての有効ＩＤＲロケーションを合成する。そのため、処理マスクがセットされると、有効ビットを他の有効ＰＥ／ＩＤＲロケーションと共にベクタ全体の有効性をチェックする手段として用いる。いずれの場合にも、アソシエーション・エンジン・プログラムは、ＩＤＲロケーションが有効になるまで休止する。
【０３７１】
セクション２．５．６ ベクタ・プロセス制御レジスタＳＩＭＤ処理要素のそれぞれに
あるベクタ・プロセス制御レジスタ（ＶＰＣＲ）には、命令の結果に関する情報が含まれる。命令によっては、ＶＰＣＲビットの一部または全部を修正するものもあり、またＶＰＣＲビットまたはビットの組み合せの状態を単にテストするだけのものもある。ＶＰＣＲビットの詳細については表２．３９を参照のこと。
【０３７２】
セクション２．５．７ スケーラ・プロセス制御レジスタスケーラ・エンジンのスケー
ラ・プロセス制御レジスタ（ＳＰＣＲ）には、命令の結果に関する情報が含まれる。命令によっては、ＳＰＣＲビットの一部または全部を修正するものもあり、またＳＰＣＲビットまたはビットの組み合せの状態を単にテストするだけのものもある。ＳＰＣＲビットの詳細については表２．４０を参照のこと。
【０３７３】
セクション２．５．８ 符号つきの動作と符号なしの動作算術演算制御レジスタ（ＡＣ
Ｒ）ビットＳＳＧＮ，ＶＳＧＮは、いくつかの命令動作と、プロセス制御情報（ＳＰＣＲ，ＶＰＣＲ）がどのように生成されるかとを制御する。乗算と除算については、ｘＳＧＮビットは、符号つきの（２の補数）動作が実行されるのか、符号なしの動作が実行されるのかを直接的に制御する。加算，減算および乗算については、ｘＳＧＮビットは、オーバーフロー情報がどのように生成されるのかも制御する。符号つきの動作に関しては、オーバーフロー・ビット（加算および減算）は、動作の最上位ビット位置からのキャリーイン（繰上げ）およびキャリーアウト（繰下げ）の排他的ＯＲ演算として定義される。符号なしの動作に関しては、オーバーフローは結果の最上位ビット位置からのキャリーアウトとして定義される。
【０３７４】
セクション２．５．９ 飽和動作と不飽和動作結果が飽和する命令に関しては、その結
果が飽和する値は、算術演算制御レジスタ（ＡＣＲ）の符号（ＳＳＧＮ，ＶＳＧＮ）ビットに依存する。符号なしの動作に関しては、最も大きな正の値に飽和する結果は＄ＦＦ（２５５）となり、最小数は＄００（０）となる。符号つきの動作に関しては、最も大きな正の値に飽和する結果は＄７Ｆ（１２７）となり、最小数は＄８０（−１２８）となる。飽和命令sat およびvsatはオーバーフローを起こさないことに注意されたい（そのオペランドを飽和させる他の命令と同様に）。
【０３７５】
セクション２．５．１０ アソシエーション・エンジン・システム制御動作本セクショ
ンは、グローバルなレベルでアソシエーション・エンジンを制御する命令を説明する。スケーラ・データ・マイクロコード命令の詳細については表２．４１を参照のこと。
【０３７６】
セクション２．５．１１ ベクタ・エンジン・データ移動本セクションは、基本的なベ
クタ・エンジン・データ移動を実行する命令を説明する。ベクタ・エンジン・データ移動マイクロコード命令の詳細については表２．４２を参照のこと。
【０３７７】
セクション２．５．１１．１ drotmov 命令の説明前述のように、drotmov 命令は、Ｖ
レジスタを回転させてから、その結果に対してベクタ移動を行う。図８５は、限られた数の処理要素に関するケースの前後を図示する。この例では、図８５に４個のＰＥがある。ＰＥＳＲには値２が含まれる。これは、ＰＥ＃２を要素周囲のラップとしてピックアップし、ＰＥ＃０にデータを供給する。矢印は、データの移動を示す。
【０３７８】
セクション２．５．１１．２ dsrot 命令の説明アソシエーション・エンジンには、dsrot と呼ばれる下向きシフト命令が含まれる。この命令は、妥当な有効性をもつ帰納的倍
加スタイル（recursive-doubling-style）アルゴリズムと、他の可能な集合動作とを行う。この命令は、密度の小さい多重プレース下向き円形シフトを行う。命令dsrot #N, vreg2 は、以下のように機能する：各ＰＥは、ＰＥからローカル・レジスタまで伝えられた値をコピーする。処理マスク（ＶＴビット）が通常の方法で用いられて、ＰＥのいずれかに記憶する結果を抑制する。
【０３７９】
ＰＥがそのＰＥ番号のＮ個の最下位ビットにすべて１をもっている場合は、vreg2 レジスタからの値を下のＰＥに伝える。そうでない場合は、上のＰＥから受け取った値と共に伝える。Ｎ＝０のとき、各ＰＥはvreg2 レジスタからの値を下のＰＥに伝える。処理マスク（ＶＴビット）は、ＰＥがそのすぐ下のＰＥに伝える値に関しては影響をもたない。最後のＰＥは、円形に最初のＰＥ（ＰＥ数０）に値を伝える。どのＰＥがチェーン上の最後のＰＥとして機能するかは、ＰＥＳＲレジスタの値により決まる。
【０３８０】
一例として、表２．４３に、いくつかのdsrot 命令の実行の結果を示す。この例に関しては、ＰＥＳＲレジスタには値１５が含まれているものとする。表２．４３にこれらの例が説明される。
【０３８１】
セクション２．５．１２ ベクタ・エンジン・データ動作本セクションは、ベクタ・レ
ジスタについて動作する命令を説明する。ＶＳＧＮビットは、符号つきの動作および符号なしの動作に関する動作結果を制御することに留意されたい。符号つきの動作／符合のない動作および飽和動作の詳細については、セクション２．５．８，符合のある動作と符合のない動作およびセクション２．５．９，飽和動作と不飽和動作を参照のこと。ベクタ・データ・マイクロコード命令の詳細については、表２．４４を参照のこと。
【０３８２】
セクション２．５．１２．１ 右ローテイト／左シフト命令のまとめ表２．４５に、ア
ソシエーション・エンジン・プログラマが用いることのできる右ローテイトと左シフト命令の一覧表を示す。
【０３８３】
セクション２．５．１２．２ 下向きシフト動作の説明命令dadd, daddp, dmin, dminp,
dmaxおよびdmaxp は、下向きシフトと計算を組み合わせて、目的のアプリケーションで
最もよく行われると思われる帰納的倍加スタイル計算と集合演算の実行を容易にする。「ｐ」は、命令の予備スタイルを表し、「ｐ」がない場合は、終了命令である。予備命令タイプおよび非予備命令タイプの詳細については、セクション２．５．１８，拡張ビットと多重バイト動作の実行を参照のこと。
【０３８４】
これらの命令は、密度の小さい多重プレース下向き円形シフトと算術演算動作とを組み合せる。命令dadd ＃Ｎ, vreg2 は、以下のように機能する：・加算は、ＰＥの半分、す
なわちそれぞれのＰＥ番号の位置Ｎに１ビットをもつものでしか起こらない（最下位ビットを位置０とカウントする）。このタイプの各ＰＥは、上のＰＥから渡された値をローカルvreg2 レジスタに加える。このタイプでないＰＥは、vreg2 レジスタ値を変更しないままにする。処理マスク（ＶＴビット）を通常の方法で用いて、ＰＥに結果を記憶させないようにする。そうでないとvreg2 レジスタは修正されてしまう。
【０３８５】
・ＰＥがそのＰＥ番号のＮ個の最下位ビットにすべて１をもつ場合は、vreg2 レジスタからの値を下のＰＥに渡す。その他の場合は、上のＰＥから受け取った値と共に渡す。Ｎ＝０のとき、各ＰＥは、vreg2 レジスタからの値を下のＰＥに渡す。処理マスク（ＶＴビット）は、ＰＥがすぐ下のＰＥにどの値を渡すかについて影響を与えない。最後のＰＥが最初のＰＥに値を渡すか否かは問題ではない。これは上のＰＥから最初のＰＥに渡された値は、どの＃Ｎ値が指定されようと用いられないからである。
【０３８６】
一例として、次の表にいくつかのdadd命令の実行の結果を示す。この例については、１６個のＰＥがあるものとする。表２．４３はこれらの例を説明する。表２．４６は、dadd命令のいくつかの例を示す。
【０３８７】
セクション２．５．１２．３ vmin/vmax 命令の説明vmin命令およびvmax命令は、２つ
のベクタを１つのベクタにまとめるために用いられる。vmin命令の結果は、図８６に示されるように、この命令で指定された２つのベクタの最小要素を含む合成ベクタである。同様に、vmax命令の結果は、図８６に示されるように、この命令で指定された２つのベクタの最大要素を含む合成ベクタである。
【０３８８】
他のすべてのベクタ動作と同様に、その処理要素のＶＴビットがセットされていれば、またセットされている場合に限り、結果が記憶される点に留意すること。
セクション２．５．１３ ベクタ・エンジン条件付き動作本セクションは、条件付き動
作を実行する命令を説明する。条件付き動作は、ＶＰＣＲ ＶＴビットおよびＶＨビット
を用いて、各処理要素の後の命令の実行を制御する。ＶＰＣＲ ＶＴビットは、vif 命令
が真であると評価されたとき、またはvendif命令が実行されたときにセットされる。ＶＴビットは、（最後のvendif以来の）前回のvif が真であると評価されるとvelse 命令によりクリアされる。ＶＴビットがクリアされると、命令はベクタ・デスティネーションまたはベクタ・プロセス制御レジスタを更新しない。
【０３８９】
ＶＰＣＲ ＶＨビットには、vif-velseif またはvif-velseif-velseif-vendifシーケン
スの履歴が含まれる。（注記：velseif 命令はマイクロコード・レベルには存在しないが、２つの命令velse とvif とをつないだものに過ぎない）。ＶＨビットは、前回のvif 命令が真であると評価されるとvelse 命令の実行時にセットされる。ＶＨビットは、vendif命令の実行時にクリアされる。
【０３９０】
ＶＨビットおよびＶＴビットの命令の実行に与える影響の詳細については、セクション
２．５．２１，ＰＥ処理に対するＶＰＣＲ ＶＨビットとＶＴビットの効果を参照のこと
。ＳＩＭＤベクタ・エンジンの命令の条件付き実行を説明するコード・セグメントの例については、セクション３．６．５．４，条件付き実行を参照のこと。表２．４７に、使用可能な条件付きマイクロコード命令の簡単な説明を示す。
【０３９１】
セクション２．５．１３．１ ＶＴビットおよびＶＨビットに関する条件付き命令の効
果ＶＴビットおよびＶＨビットの機能を明確にするために、表２．４８と図８７に、それぞれＶＴビットおよびＶＨビットの次状態移行表と状態移行図とを示す。vif 命令は、ＶＴビットがセットされている場合にのみ実行されることに留意されたい。velse およびvendif命令は、ＶＴビットとは独立して実行される。リセットまたは初期条件は、ＶＴ＝１；ＶＨ＝０である。
【０３９２】
セクション２．５．１３．２ 右ローテイト命令および左シフト命令のまとめ表２．４
９に、アソシエーション・エンジンのプログラマが用いることのできる右ローテイト命令および左シフト命令の一覧表を示す。
【０３９３】
セクション２．５．１４ スケーラ・エンジン・データ移動本セクションは、基本的な
スケーラ・エンジン・データの移動を実行する命令を説明する。スケーラ・エンジン・データ移動マイクロコード命令の詳細については、表２．５０を参照のこと。
【０３９４】
セクション２．５．１５ スケーラ・エンジン・データ動作本セクションは、スケーラ
・レジスタに関して動作する命令を説明する。算術演算制御レジスタ（ＡＣＲ）ビットＳＳＧＮおよびＶＳＧＮは、符号つきの動作および符号なしの動作に関する命令の結果を制御することに留意されたい。符号つきの動作／符合のない動作および飽和動作の詳細については、セクション２．５．８，符合のある動作と符合のない動作およびセクション２．５．９，飽和動作と不飽和動作を参照のこと。スケーラ・データ・マイクロコード命令の詳細については、表２．５１を参照のこと。
【０３９５】
セクション２．５．１６ スケーラ・エンジン・プログラムの流れ制御動作本セクショ
ンは、ＳＩＭＤスケーラ・エンジンでプログラム制御を実行する命令を説明する。ＰＣをセーブオフしなければならない命令（bsr, jsrmiおよびjsrri ）については、単一レベルのハードウェア・スタックが設けられる（ＦＬＳ）。２レベル以上のスタックが必要な場合は、１つのスタックのための空間をＣＭＡに配置して、使用することのできる次のスタック・ロケーションをＳＰにより指示する。プログラム制御マイクロコード命令の詳細については、表２．５２を参照のこと。
【０３９６】
セクション２．５．１７ repeatおよびrepeate 命令の説明repeatおよびrepeate 命令
は、ループの終了時に一定の命令タイプが現れたときに境界条件を起動することができる（マイクロシーケンサが、もう一度ループを行うべきか、またはループの後直ちに命令を実行すべきかを計算しているとき）。明白な相互作用が行われると流れの命令（bra, bsr, jmpri, jmpmi, jsrriよびjsrmi ）が変更される。相互作用がそれほど明白でないと、
ベクタ条件付き命令（vif, velseおよびvendif）が行われる。これらの相互作用のそれぞれについて、以下に説明する。
【０３９７】
セクション２．５．１７．１ repeatループ終了時の流れの変更repeatループの終了時
に起こる流れの変更は、かなり直接的である。repeatループの暗示的な流れの変更よりも、明確な流れの変更（bra/jmpri/jmpmi またはbsr/jsrri/jsrmi ）のほうが常に好ましい。図８８および図８９に示された例については、repeatをrepeate と入れ替えることができる。言い換えれば、repeatループのタイプは、この２つの例では決定的ではない。
【０３９８】
セクション２．５．１７．２ repeatループ終了時のベクタ条件repeatループ終了時の
ベクタ条件命令の相互作用は、上述の流れの変更の例ほど明確ではない。問題の相互作用は、ＶＴビットおよびＶＨビットが（repeateープの終了時に起こった命令のために）、
ＶＴビットおよびＶＨビットの暗示的な修正に干渉する（repeate ループ終了時の暗黙のvendifのために）ときである。
【０３９９】
図９１および図９２では、ベクタ条件（ＶＴビットおよびＶＨビットに影響を与える命令）を、以下の命令のプレースホルダ（placeholder ）として用いている：その命令とは、locmin, locmax, colmin, colmax, rowmin, rowmax, dskipe, vifxx, velse, vendif, vlshfth, vlshftt, vrotrhおよびvrotv である。
【０４００】
表２．５２に説明されるように、repeate ループは、終了するvendifがあるrepeatループと同じである。その同一性を図９０に示す（右側のループがrepeateープである）。
ベクタ条件命令がrepeatループの最後にあると、条件付き命令は予測されるようにＶＴビットおよびＶＨビットに影響を与える（ベクタ条件がループ内部にあるかのように動作する）。これを図９１に示す。
【０４０１】
ベクタ条件付き命令がrepeate ループの最後にあると、repeate ループのvendif暗黙命令が支配して、ベクタ条件付き命令が実行されたことがないかのようになる。これを図９２に示す。
【０４０２】
セクション２．５．１８ 拡張ビットと多重バイト動作の実行アソシエーション・エン
ジンは、単一バイト動作および多重バイト動作に対応するように設計されている。アソシエーション・エンジンは、最後に実行された動作から拡張情報をセーブすることによりこれを行う。任意の動作に関して、２種類の基本的な命令、すなわち予備命令と終了命令とがある。実行される動作により、最上位バイトは、前者または後者に関して動作を行う。最終動作は、オーバーフローがありうる計算に関して飽和することに留意されたい。
【０４０３】
単一バイト動作については、アソシエーション・エンジンのプログラマは、アプリケーションにより、飽和動作（終了タイプ）と不飽和動作（予備タイプ）の命令のいずれかを選択することができる。単一バイトの動作に関して予備命令を用いる際には、予備命令により作成された拡張情報が後の命令に悪影響を与えないように注意をしなければならない。
【０４０４】
拡張ビットに関しては、アソシエーション・エンジン命令は３つのカテゴリに分類することができる。第１カテゴリは、動作には拡張ビットが用いられないが、動作の結果として常に拡張ビットがクリアされる場合である。２番目の種類の命令は、動作に拡張ビットを用いるもの（たとえばキャリーイン）と、動作の結果を反映させるために拡張ビットをセットするもの（たとえばキャリーアウト）である。３番目の種類の動作は、動作に拡張ビットを用いるが、動作の結果として拡張ビットを常にクリアするもの（たとえば飽和加算は、キャリーアウトを行わない）である。そのために、加算，減算およびシフトの場合には、拡張情報は常に動作に用いられる。多重バイト・シーケンスの最初の動作は、拡張ビットをクリアして開始するようにすることが重要である。そうでないと、誤った結果を生む。
【０４０５】
セクション２．５．１９ 多重バイト動作の説明以下のセクションで説明される拡張ビ
ットは、スケーラ・プロセス制御レジスタおよびベクタ・プロセス制御レジスタの両方に適用される。ここで説明される動作は、加算，減算，最大値，最小値，左シフト，右シフトおよびネゲーションである。以下の例も、２個の２４ビット数量が動作されることを前提とする（Ｖ０，Ｖ１，Ｖ２およびＶ３，Ｖ４，Ｖ５；Ｖ２およびＶ５は最下位バイトで
ある）。特定の例では、８ビットのオペランドを２４ビットのオペランドと共に用いる。
【０４０６】
また表２．５３ないし表２．６３では、ｘＸ０およびｘＸ１という用語は、スケーラ・エンジン内のＳＸ０およびＳＸ１ビット、またはベクタ・エンジン内のＶＸ０およびＶＸ１ビットのいずれかの短縮形として用いられる。
【０４０７】
セクション２．５．１９．１ 多重バイト加算多重バイト加算の場合は、動作は最下位
バイトから始まり、上向きに働く。たとえば（拡張ビットは００として開始する点に注意）：vaddp Ｖ２，Ｖ５vaddp Ｖ１，Ｖ４vadd Ｖ０，Ｖ３vadd命令（飽和する）は、キャ
リーアウトを生成することはないので、拡張ビットはvadd命令の終了時にクリアされる。しかしvaddp 命令により作成された拡張情報は、キャリーおよび符合情報を保持するために用いられる。拡張ｘＸ１ビットは、sregオペランドの符合情報を保持するために用いられる（これは符合拡張加算に対応するために用いられる。符合拡張加算については後述する）。拡張ｘＸ０ビットは、加算のためのキャリー情報を保持するために用いられる。表２．５３は、拡張ビットのありうる状態の詳細を示す。
【０４０８】
ユーザが最上位のvadd飽和を気にする場合は、vsat命令を用いて、プロセス制御レジスタに保持される最後のオーバーフローおよび飽和方向情報に基づき、多重バイト結果の最下位バイトを変更することができる。命令：vsat Ｖ４vsat Ｖ５は、vadd命令の後に続き、デスティネーション・レジスタの２つのより下位のバイトを飽和させる（最上位のadd で行われた場合）。
【０４０９】
オペランドが異なるサイズをもつ場合（バイトを２４ビットになるランニング和に加算する場合など）には、符合拡張のある加算を用いることができる。たとえば（Ｖ０がＶ３，Ｖ４，Ｖ５に加算されるとして）：vaddp Ｖ０，Ｖ５vaddsxp Ｖ４vaddsx Ｖ３拡張ビ
ットには最後の動作のソース・オペランドに関する情報が含まれる点に注意すること。ｘＸ１ビットは、特にvaddsxp 命令により用いられて、前回の動作をどのように符合をつけ拡張するかを決定する。ｘＸ１ビットがセットされると、vaddsxp 命令は任意のキャリー情報を加え、＄ＦＦの値を加算用の他のアーギュメントとして用いる。これは、Ｖ０値の符合拡張の効果をもつ。vadd命令と同様に、vaddsx命令は結果を飽和させ（オーバーフロー・ビットがセットされている場合）、拡張ビットをクリアする。表２．５４は、拡張ビットに対するvaddsxp 命令の効果を示す。
【０４１０】
前記の例と同様に、最高位の動作が飽和する可能性のある場合は、vsat命令を用いて結果の残りのバイトを飽和させたほうがよい。
セクション２．５．１９．２ 多重バイト減算多重バイト減算の場合には、動作は最下
位バイトから始まり上向きに働く。たとえば（拡張ビットは００として始まる点に注意）：vsubp Ｖ２，Ｖ５vsubp Ｖ１，Ｖ４vsub Ｖ０，Ｖ３vsub命令（飽和する）は、ボロー
アウトを生成することはないので、拡張ビットはvsub命令の終了時にクリアされる。しかしvsubp 命令により作成された拡張情報は、ボローおよび符合情報を保持するために用いられる。拡張ｘＸ１ビットは、ソース・オペランドの符合情報を保持するために用いられる（これは符合拡張減算に対応するために用いられる。符合拡張減算については後述する）。拡張ｘＸ０ビットは、減算のためのボロー情報を保持するために用いられる。表２．５５は、拡張ビットのありうる状態の詳細を示す。
【０４１１】
ユーザが最上位のvsub飽和を気にする場合は、vsat命令を用いて、プロセス制御レジスタに保持される最後のオーバーフローおよび飽和方向情報に基づき、多重バイト結果の最下位バイトを変更することができる。命令：vsat Ｖ４vsat Ｖ５は、vsub命令の後に続き、デスティネーション・レジスタの２つのより下位のバイトを飽和させる（最上位の減算で行われた場合）。
【０４１２】
オペランドが異なるサイズをもつ場合（バイトを２４ビットになるランニング差から減算する場合など）には、符合拡張のある減算を用いることができる。たとえば（Ｖ０をＶ３，Ｖ４，Ｖ５から減算するとして）：vsubp Ｖ０，Ｖ５vsubsxp Ｖ４vsubsx Ｖ３拡張
ビットには最後の動作のソース・オペランドに関する情報が含まれる点に注意すること。ｘＸ１ビットは、特にvsubsxp 命令により用いられて、前回の動作をどのように符合をつけ拡張するかを決定する。ｘＸ１ビットがセットされると、vsubsxp 命令は任意のボロー情報を減じ、＄ＦＦの値を減算のための他のアーギュメントとして用いる。これは、Ｖ０値の符合拡張の効果をもつ。vsub命令と同様に、vsubsx命令は結果を飽和させ（オーバーフロー・ビットがセットされている場合）、拡張ビットをクリアする。表２．５６は、拡張ビットに対するvsubsxp 命令の効果を示す。
【０４１３】
前記の例と同様に、最高位の動作が飽和する可能性のある場合は、vsat命令を用いて結果の残りのバイトを飽和させたほうがよい。
セクション２．５．１９．３ 多重バイト比較多重バイト比較の場合には、動作は最高
位バイトから始まり、下向きに働く。多くの場合、ベクタ比較の望ましい結果は、処理マスク（ＶＴビット）をセットすることである。スケーラ比較については、プログラムの流れの変更を行うことが多い。いずれの場合にも、比較はvif またはskipタイプの命令により最下位バイトで終了する。たとえば（拡張ビットは００から始まることに注意）：vcompp Ｖ０，Ｖ３vcompp Ｖ１，Ｖ４vifeq Ｖ２，Ｖ５vcompp命令は、加算および減算命令とは異なる方法で拡張ビットを用いる。拡張ビットは、最後の動作の結果がどのようなものであったか、またさらに比較が必要か否かを判定するために用いられる。表２．５７は、vcompp命令の前後の拡張ビットの定義を詳細に示す。
【０４１４】
最後のvcompp命令の終了時に、条件付きvif （またはskip）命令が実行される。vif 命令は、拡張情報を取り出して、それを所望の比較動作と組み合わせて、それに従って処理マスク（ＶＴビット）をセットするかあるいはクリアする（または流れの変更を実行する）。
【０４１５】
セクション２．５．１９．４ ｘＸ０およびｘＸ１に関する「ＶＩＦ」の依存性vif 命
令およびskip命令はＸ０ビットおよびＸ１ビット（スケーラ・エンジンの場合はＳＸ０：ＳＸ１；ベクタ・エンジンの場合はＶＸ０：ＶＸ１）の状態に直接依存するということを繰り返すことが重要である。この依存性は、多重バイト比較を容易にするために必要である。このために、多くの命令はＸ０，Ｘ１ビットをクリアする。vif およびskip命令を用いた場合にＸ０，Ｘ１ビットに影響を与える命令に注意すること。
【０４１６】
セクション２．５．１９．５ 多重バイト最大値多重バイト最大値の場合は、動作は最
上位バイトから始まり下向きに働く。多重バイト最大値の動作は、多重バイト比較と非常に似ている。動作の結果は異なる。sregレジスタが、２つのオペランドの最大値となる。たとえば（拡張ビットは００として始まることに注意）：vmaxp Ｖ０，Ｖ３vmaxp Ｖ１，Ｖ４vmax Ｖ２，Ｖ５vmaxp 命令は、拡張ビットを加算および減算命令とは異なる方法で
用いる。拡張ビットは、vmaxp 命令に対して、どのような行動をとるかを示すために用いられる。最後の最大値動作（最下位バイト）はvmax動作を用いて、拡張ビットがナル状態（００）に戻り、データの最終バイトが移動される（比較に基づき）ようにしなければならない。表２．５８は、vmaxp 命令前後の拡張ビットの定義を詳細に示す。
【０４１７】
セクション２．５．１９．６ 多重バイト最小値多重バイト最小値の場合は、動作は最
上位バイトから始まり下向きに働く。多重バイト最小値の動作は、多重バイト最大値と非常に似ている。動作の結果は異なる。sregレジスタが、２つのオペランドの最小値となる。たとえば（拡張ビットは００として始まることに注意）：vminp Ｖ０，Ｖ３vminp Ｖ１
，Ｖ４vmin Ｖ２，Ｖ５vminp 命令は、拡張ビットを加算および減算命令とは異なる方法
で用いる。拡張ビットは、vminp 命令に対して、どのような行動をとるかを示すために用いられる。最後の最小値動作（最下位バイト）はvmin動作を用いて、拡張ビットがナル状態（００）に戻り、データの最終バイトが移動される（比較に基づき）ようにしなければならない。表２．５９は、vminp 命令前後の拡張ビットの定義を詳細に示す。
【０４１８】
セクション２．５．１９．７ 多重バイト左シフト多重バイト左シフトの場合は、動作
は最下位バイトから始まり、上向きに働く。左シフト動作の場合は、特定の左シフト予備命令はない。この関数に関して、add 予備が用いられる。たとえば（拡張ビットは００として始まることに注意）：vaddp Ｖ２，Ｖ２vaddp Ｖ１，Ｖ１vlshft Ｖ０最初の２つの
動作は、Ｖ２レジスタとＶ１レジスタを左に１ビット位置だけシフトさせて、拡張ビットｘＸ０にキャリー結果をセーブする。この場合、拡張ビットｘＸ１は無視する。最後の命令vlshftは、拡張情報を取り出して最終（最上位）バイトにシフトさせ、拡張ビットをナル状態（００）にクリアする。
【０４１９】
セクション２．５．１９．８ 多重バイト右シフト多重バイト右シフトの場合は、動作
は最上位バイトから始まり、下向きに働く。前のケースと同様に、予備右シフト命令を最上位バイトに用いて、最後の（最下位）バイトに通常の右シフト命令を用いる。たとえば（拡張ビットは００として始まることに注意）：vrshftp Ｖ２vrshftp Ｖ１vrshft Ｖ０
最初の２つの動作は、Ｖ２レジスタとＶ１レジスタを１ビット位置だけシフトさせて、拡張ビットｘＸ０に最下位ビット結果をセーブする。ｘＸ１拡張ビットを用いて、命令に対して、可能な符合拡張が必要とされることを示す（表２．６０）。最後の命令vrshftは、拡張情報を取り出して最終（最下位）バイトにシフトさせ、それから拡張ビットをナル状態（００）にクリアする。これにより最後の動作で最下位ビットは廃棄される。
【０４２０】
セクション２．５．１９．９ 多重バイト・ネゲーション多重バイト・ネゲーションの
場合は、動作は最下位バイトで始まり、上向きに働く。より下位のバイトについて予備ネゲーション命令が用いられる。最終（最上位）バイトについては、通常のネゲーション命令が用いられる。最も大きな負の数（−１２８）をネゲートするとオーバーフロー条件（１２７）が起こるので注意すること。拡張ｘＸ０ビットが、ネゲーションからのボロー情報を保持するために用いられ、Ｘ１ビットは無視される。たとえば（拡張ビットは００として始まることに注意）：vnegp Ｖ２vnegp Ｖ１vneg Ｖ０vneg命令（飽和する）は、ボ
ローアウトを生成しないので、拡張ビットはvneg命令の終了時にクリアされる。表２．６１に拡張ビットの可能な状態を詳細に示す。
【０４２１】
セクション２．５．１９．１０ 多重バイト・ポインタの増分多重バイト・ポインタ加
算の場合は、動作は最下位バイトで始まり、上向きに働く。たとえば（拡張ビットは００として始まることに注意）：incp ＃３，Ｐ６inc ＃０，Ｐ７inc 命令は、キャリーアウ
トを生成することはないので、拡張ビットはinc 命令の終了時にクリアされる。しかしincp命令により作成された拡張情報は、キャリーおよび符合情報を保持するために用いられる。拡張ＳＸ１ビットは、sregオペランドの符合情報を保持するために用いられる（これは符合拡張加算に対応するために用いられる）。ソース・オペランドは命令の一定のフィールドであるが、他のアソシエーション・エンジン命令との一貫性を図るためにＳＸ１ビットがクリアされる。ＳＸ１ビットは、inc 命令またはincp命令の入力としては用いられない。拡張ＳＸ０ビットが、加算のためのキャリー情報を保持するために用いられる。表２．５３は、拡張ビットのありうる状態を詳細に示す。表２．６２は、増分予備（incp）の拡張ビットの説明を行う。
【０４２２】
セクション２．５．１９．１１ 多重バイト・ポインタの減分多重バイト・ポインタ減
算の場合は、動作は最下位バイトで始まり、上向きに働く。たとえば（拡張ビットは００
として始まることに注意）：decp ＃３，Ｐ６dec ＃０，Ｐ７dec 命令は、ボローアウト
を生成することはないので、拡張ビットはdec 命令の終了時にクリアされる。しかしdecp命令により作成された拡張情報は、ボローおよび符合情報を保持するために用いられる。拡張ＳＸ１ビットは、sregオペランドの符合情報を保持するために用いられる（これは符合拡張加算に対応するために用いられる）。ソース・オペランドは命令の一定のフィールドであるが、他のアソシエーション・エンジン命令との一貫性を図るためにＳＸ１ビットがクリアされる。ＳＸ１ビットは、dec またはdecp命令の入力としては用いられない。拡張ＳＸ０ビットは、減算のためのボロー情報を保持するために用いられる。表２．５５は、拡張ビットのありうる状態を詳細に示す。表６３は、減分予備（decp）の拡張ビットの説明を行う。
【０４２３】
セクション２．５．２０ プロセス計算制御本セクションは、それぞれの命令によりＶ
ＰＣＲ／ＳＰＣＲビットがどのように影響を受けるかを説明する。多くの動作はソース・オペランドとデスティネーション・オペランドを取り出し、動作を実行し、結果をデスティネーション・オペランドに記憶する。単一オペランド動作は、デスティネーション・オペランドを取り出し、デスティネーション・オペランドに関する動作を実行し、その結果をデスティネーション・オペランドに記憶する。表２．６４は、各命令と、それが処理コードにどのように影響を与えるかをリストアップしている。ＶＸ［１：０］，ＶＴ，ＶＶ，ＶＤおよびＶＨビットは、各処理要素にあり、ＳＸ［１：０］，ＳＶおよびＳＤビットはスケーラ・エンジン・プロセッサ制御レジスタにあることに留意されたい。
【０４２４】
セクション２．５．２１ ＰＥ処理に対するＶＰＣＲ ＶＨビットとＶＴビットの効果ＶＴビットがセットされると、現在の命令はデスティネーション・レジスタを更新することができる。しかしＶＴビットがクリアされると、デスティネーション・レジスタは更新されない。この阻止関数は、ＶＰＣＲレジスタ・ビットの更新にも適用される。ＶＨビットの関数は、ＶＴビットの履歴をセーブして、ＶＰＣＲ ＶＴビットが修正できる場合を制
御することである。そのため、ＶＴビットとＶＨビットとを組み合わせることにより、ＳＩＭＤベクタ・エンジンの命令の実行の制御の階層ができる。表２．６５は、ＶＨビットとＶＴビットがアソシエーション・エンジン命令の実行に対して与える効果を示す。
【０４２５】
セクション２．５．２２ 命令実行回数本セクションでは、各命令のサイクル回数の説
明を行う。これらの命令回数に対する可能な調整は、多重位置動作または多重ビット動作に対応する。表２．６６は、各命令とそのサイクル回数が最小値から最大値までどのように変わるかをリストアップしている。
【０４２６】
セクション２．５．２３ アソシエーション・エンジン・ミッシング命令アソシエーシ
ョン・エンジンには、２つの関数を実行することのできる命令がいくつかある。これらの命令を表２．６７に示す。
【０４２７】
セクション３ アソシエーション・エンジンの動作原理
本セクションでは、アソシエーション・エンジンの動作のより詳細な説明を行う。アソシエーション・エンジンの主な機能は、入力データを取り込み、ユーザが定義した転送関数を実行することである。
【０４２８】
アソシエーション・エンジンの機能の主要な側面を、論理部分に分割する。
セクション３．１，情報の流れと編成では、典型的なフィードフォワード・ネットワークを通る情報の流れを説明し、ネットワークをアソシエーション・エンジン／アソシエーション・エンジン’のアーキテクチャに対してマッピングする。セクション３．２，命令パイプラインでは、命令がフェッチされ実行されるメカニックを説明する。セクション３．３，命令およびデータ・メモリでは、アソシエーション・エンジンの主要メモリがどの
ように配列されて、マイクロコード，ベクタ・データおよびスケーラ・データを保持するかを説明する。セクション３．４，アソシエーション・エンジンの初期化では、アソシエーション・エンジンの準備および初期化に関する問題を説明する。最小限のコンフィギュレーションおよび初期化などの問題も論じる。セクション３．５，ポート動作では、ポート動作モードと、アソシエーション・エンジンのユーザが、どのようにしてホスト側からアソシエーション・エンジンとのデータ転送を制御することができるかということとを説明する。さらに、異なるデータ転送モードに対応するために、ホスト・メモリ・マップの説明を行う。セクション３．６，アソシエーション・エンジン動作では、ＳＩＭＤ処理要素と計算関数の制御とを説明する。この説明には、ベクタ・エンジンおよびスケーラ・エンジンの包括的説明と詳細な説明が含まれる。マイクロコード・プログラム構造の説明もいくつか行われる。セクション３．７，マイクロコードにより開始されたポート・ライト動作では、マイクロコード制御下でアソシエーション・エンジンから支援側のアソシエーション・エンジン’デバイスに対する計算済みデータの転送のための動作モードを説明する。二次元および一次元のアソシエーション・エンジン・コンフィギュレーションが論じられる。セクション３．８，アソシエーション・エンジン・バス・コンフィギュレーションでは、問題を解決するために複数のアソシエーション・エンジンをどのように配列したらよいのか、、アレイ構造でアソシエーション・エンジンを用いる際にどのようなエラー条件に注意すべきかを説明する。
【０４２９】
セクション３．１ 情報の流れと編成高レベルのアプローチを行うと、ニューラル・ネ
ットワーク・アーキテクチャをアソシエーション・エンジン・ブロックのセットにマッピングして、必要な関数を実行することができる。情報の流れもまたマッピング関数と考えることができる。図９３は、典型的な完全に接続されたフィードフォワード・ニューラル・ネットワークを示す。様々なタイプのニューラル・ネットワーク・アルゴリズムに対応するために、アソシエーション・エンジン’と呼ばれる（異なるマイクロコードをもつ）別のアソシエーション・エンジンを用いて、アソシエーション・エンジンからの部分シナプス値を取り入れ、それらを集合させて総合的なニューロン出力を形成することができる。
【０４３０】
このネットワークでは、入力レイヤ（ｉ）は、分配関数のみを実行する。このネットワークには１１９個の入力がある。隠されたレイヤ（ｈ）は、これらの入力を取り入れて、積の和モ（ｉ＊ｃih）などの伝播関数を用いてネットワーク係数ｃihをかける。相互接続係数を説明する際には、第１の下付き文字（ｉ）が入力インデックス付けまたは「元の」ニューロンを示し、最後の下付き文字（ｈ）が「行先の」ニューロンを示す。隠されたレイヤは、積の和に関して出力関数を実行して、隠されたレイヤからの出力を生成する。この例では、隠されたレイヤは８０個のニューロンを有する。出力レイヤ（ｏ）は、隠されたレイヤからの出力を取り入れて、伝播関数モ（ｈ＊ｗho）を用いてネットワーク係数ｗhoをかける。隠されたレイヤと同様に、出力レイヤは積の和に対して出力関数を実行して、ネットワーク出力を生成する。この例では出力レイヤには２０個のニューロンをもつ。６４個の入力と６４個の出力とをもつアソシエーション・エンジン・アーキテクチャに関して、この例のマッピングを行うには数個のアソシエーション・エンジンが必要になる。図９４は、図９３の隠されたレイヤに関して可能なマッピングの一例を示す。図９４では、アソシエーション・エンジン０，アソシエーション・エンジン１およびアソシエーション・エンジン２’がバンク０を形成し、アソシエーション・エンジン３，アソシエーション・エンジン４およびアソシエーション・エンジン５’がバンク１を形成する。同様にアソシエーション・エンジン０とアソシエーション・エンジン３がスライス０を形成し、アソシエーション・エンジン１とアソシエーション・エンジン４がスライス１を、アソシエーション・エンジン２’とアソシエーション・エンジン５’がスライス２を形成する。図９３に示されるネットワークのマッピングでは、入力レイヤと隠されたレイヤの両方が図９４にマッピングされている点に留意されたい。この理由は、入力レイヤが分配レイヤと
してしか働かないためである。
【０４３１】
アソシエーション・エンジンの組合せに関する情報の流れは、以下のようになる：最初の６３個の入力サンプルがスライス０のＩＤＲにロードされる。残りのサンプルはスライス１のＩＤＲにロードされる。スライス１がロードされると同時に、スライス０はその入力サンプルに関して積の和の計算を開始することができる。
【０４３２】
スライス０が計算を終了すると、部分シナプス結果（ベクタ小計を表す）をアソシエーション・エンジン’に転送することができる。スライス１が小計を転送すると、アソシエーション・エンジン’スライス（スライス２）は出力関数を実行して、出力レイヤに対する隠されたレイヤのデータ転送を開始することができる。アソシエーション・エンジン’は、同じバンクの多くのアソシエーション・エンジンに対応することができる。
【０４３３】
図９４では、スライス２によりアソシエーション・エンジンを異なる機能ブロック（異なるマイクロコードをもつ）として用いることができることが示される。またＣＭＡを異なる方法で用いることができることも示される。トレーニング・ベクタがＴ０ないしＴ７９としてＣＭＡにロードされる。Ｓベクタ（Ｓ０ないしＳ７９）は、スライス０とスライス１のアソシエーション・エンジン群に関して合計された部分シナプス結果である。アソシエーション・エンジン２’とアソシエーション・エンジン５’に示されるＣＯＦ値を用いて、シナプス合計にスカッシュ関数（squashing function）を実行して、ネットワークの出力を生成する。
【０４３４】
図９５は、アソシエーション・エンジン／アソシエーション・エンジン’ユニットの論理図を示す。アソシエーション・エンジン・デバイスは、相互接続関数をもつ前レイヤからの出力を受け持ち、アソシエーション・エンジン’デバイスが集合と出力関数とを実行する点に留意されたい。
【０４３５】
図９４および図９５に示されたマッピングは、図９３に示されたネットワークの可能なマッピングのうち１つしか表していないことに注意すること。スライス２をセクション２．１，アソシエーション・エンジン・システムの概要で説明されたように全面的になくして、部分結果をスライス１内に蓄積することもできる。
【０４３６】
セクション３．２ 命令パイプラインアソシエーション・エンジンは、３段階のパイプ
ラインをもつ命令シーケンサを実現する。これは、各命令が３つの異なる機能ユニットを通過しないと完了しないことを示す。これを図９６に示し、詳細を表３．１に説明する。
【０４３７】
パイプラインが充てんされると、命令がステージ１とステージ２とを通過するためにかかる時間を無視することができる。図９７ではパイプは時刻ｔ３で充てんされ、ｔ３とｔ７との間でクロック毎に新しい命令が実行される。言い換えれば、各命令は、完了するまでに最低３クロック・サイクルを必要とするが、この特定のパイプラインを用いると、各命令は１クロックの有効実行時間を有する。
【０４３８】
多重サイクル命令タイミングは、図９７に示される単一サイクル・タイミングとそれほど違わない。しかし、各命令は、新たに来る命令のプレフェッチを実行する責任があるので、多重サイクル命令は終了から１サイクルたたないとプレフェッチを実行しない。多重サイクルのタイミングを図９８に図示する。
【０４３９】
セクション３．２．１ 命令パイプラインの休止パイプラインの休止は、２種類の条件
：すなわちキャッシュ・ミスとリソース・コンフリクトによるものである。
パイプのステージ＃１の休止は、全面的にキャッシュ・ミス（ＰＣのアドレスが有効キ
ャッシュ・ライン内で見つからない）によるものである。キャッシュ・ミスによりパイプ内に休止が起こるたびに、現在パイプ内にある命令の実行時間にクロック・サイクルが１つ追加される。
【０４４０】
ステージ＃２における休止は、図９９に示されるようなデータの依存性によるものである。
間接アドレッシング・モード（図９９に見られるＣＭＡ［Ｐ１］などの）は、パイプのステージ＃２で処理される。図９９に示される命令は両方とも単一サイクル命令であり、パイプのステージ＃３でadd go, ｖ０が実行されているときは、ＣＭＡ［Ｐ１］のデータ・プレフェッチはステージ＃２で実行される。そのためここで問題が発生する。パイプのステージ＃２で用いられるポインタは、パイプ３のステージ３と同時に更新される。そのため、ポインタの更新（ステージ＃３の）が終了するまでの１クロックの間パイプを休止させないと、そのポインタを用いることができない。
【０４４１】
ステージ＃３の休止は、ＩＤＲ有効ビット（ＶＩＤ）に直接関係している。vadd ＩＤ
Ｒ「Ｐ１］，ｖ０などの命令が、まだ充てんされていないＩＤＲロケーションを指示すると、参照されたＩＤＲロケーションが充てんされる（そしてさらにＶＩＤビットがＩＤＲロケーションが有効であることを示す）まで、ステージ＃３の休止がパイプ内に誘導される。ステージ＃３の休止は、外部ソースに依存するので、指定された数のクロックだけ続かず、外部ソースがアソシエーション・エンジンに対して期待されるデータ量を与えない場合には、アソシエーション・エンジンは無期限に休止することもある（ＩＣＲが、ラン・モードでアソシエーション・エンジンがどの程度の量のデータを期待するかを指定する）。ステージ＃３の休止がＰＳＴＡＴピン上で外部から見えるのはこのためである（ＰＳＴＡＴ［２：０］＝０００はステージ＃３パイプの休止を示す）。この表示はマイクロシーケンサ・ステータス・レジスタのＥＸＥ符号化でも同様に見ることができる（ＭＳＲ：ＥＸＥ［２：０］＝０００は、ステージ＃３パイプの休止を示す）。
【０４４２】
セクション３．２．２ 命令パイプラインの休止優先順位同時に２つ以上の休止が起こ
った場合には、表３．２により休止が解消される順番が決まる。
セクション３．３ 命令およびデータ・メモリ各アソシエーション・エンジンのＣＭＡ
は、プログラム命令とプログラム・データの両方を保持するために用いられる。そのため、ＣＭＡおよびＭＭＡという用語は両方とも、ＣＭＡと呼ばれる同一の物理的なＲＡＭを指す。アソシエーション・エンジンがこのメモリ内のデータにアクセスすると、これはＣＭＡと呼ばれる。アソシエーション・エンジンがこのメモリ内の命令にアクセスすると、これはＭＭＡと呼ばれる。主な違いは、ＭＭＡアクセスに関して実行される特殊アドレッシングである。
【０４４３】
図９４のアソシエーション・エンジン０，アソシエーション・エンジン１，アソシエーション・エンジン３およびアソシエーション・エンジン４については、プログラム記憶部（ＭＭＡ）に配置されたＣＭＡの２つの列がある。アプリケーションにより、ＭＭＡ記憶部のために用いられるＣＭＡの数はもっと多くなることもある。アプリケーションの要件に基づいて、データと命令空間の折り合いをつけるのはプログラマの役割である。
【０４４４】
セクション３．３．１ 命令キャッシング各アソシエーション・エンジンには１２８ワ
ードの命令キャッシュが含まれ、命令に対するアクセスの高速化を図っている。この命令キャッシュは、４つの３２ワードの直接マッピングされたキャッシュ・ラインとして編成される（各命令は１６ビット幅である）。
【０４４５】
キャッシュ・ヒットまたはキャッシュ・ミスを決定するには、各命令の実行前に、命令タッグ（ＩＣＴ０ないしＩＣＴ３）をＰＣのビット８ないし１５と比較する。ＰＣがタッ
グ・レジスタのいずれとも一致しないと判定されると、次の命令を含む新しいライン（ＰＣにより指示される）を命令キャッシュにロードしなければならない。
【０４４６】
ＰＣのビット７および６により、どのキャッシュ・ラインがロードされるかが決まる。命令キャッシュは直接マッピングされているので、これらの２つのビットはロードすべきキャッシュ・ラインを明確に決定する。ＰＣのビット７および６が００であるときは、キャッシュ・ライン＃０がロードされる。同様にＰＣのビット７および６が０１である場合は、キャッシュ・ライン＃１がロードされる。ロードされているキャッシュ・ラインに対応するキャッシュ・タッグ・レジスタ（ＩＣＴ０ないしＩＣＴ３）には、ＰＣの最上位バイトがロードされる。また、命令キャッシュ有効レジスタ（ＩＣＶＲ）内の対応するキャッシュ・ライン有効ビットがセットされる。
【０４４７】
ＣＭＡからキャッシュ・ラインをロードすると、命令の実行に１クロックの遅延が起こる。命令キャッシュがロードされてしまうと、キャッシュ・ミスの場合を除き、ＣＭＡからデータと命令の両方が同時にアクセスされても時間的なペナルティは起こらない。アプリケーションがキャッシュに全体的に適合することができれば、ＣＭＡ全体をデータ記憶部として用いることができる。アプリケーションは、キャッシュがミスを起こさないようになっているものでなければならない。
【０４４８】
セクション３．３．２ ＣＭＡとＭＭＡのマッピングＣＭＡ空間とＭＭＡ空間との間の
マッピングは、初期のバージョンのアソシエーション・エンジンと比較すると簡素化されている。わずか４Ｋバイトの物理的メモリしかないので、命令およびデータ・アクセスで４Ｋの空間全体を見ることができる。各領域（命令またはデータ）を４Ｋの空間に配置して管理するのは、プログラマの役割である。図１００に命令空間またはデータ空間としての４Ｋ空間の最初の７０バイトを示す。
【０４４９】
セクション３．３．３ ＣＭＡに対する直接アクセスと反転アクセスＣＭＡには、ＣＭ
Ａに対して直接アクセスと反転アクセスの両方を行うことができるメカニズムが備えられている。図１０１は、直接ＣＭＡアクセスおよび反転ＣＭＡアクセスの図を示す。ＣＭＡに対する直接アクセスの間は、ＰＥ＃０はＣＭＡ行＃０からのデータを用い、ＰＥ＃１がＣＭＡ行＃１のデータを用いるというようになる。ＣＭＡに対する反転アクセスの間は、ＰＥ＃０がＣＭＡ行＃６３からのデータを用いて、ＰＥ＃１がＣＭＡ行＃６２のデータを用いるというようになる。
【０４５０】
ＣＭＡに対するアクセスはすべて、ポインタ間接アドレッシング（ＣＭＡ［Ｐｎ］）またはポインタ間接ポスト増分（ＣＭＡ［Ｐｎ＋＋］）のいずれかを用いる。いずれのアドレッシング・モードにおいても、ポインタ・レジスタＰｎを用いてＣＭＡ内の列を指定する。ＣＭＡには６４列あるので、各列に直接アクセスするためには、ポインタ・レジスタの６ビット（ビット５ないし０）しか必要とされない。ＣＭＡに対する直接アクセス中には、ポインタ・レジスタのビット６は０となる。ＣＭＡに対する反転アクセスは、ビット６を１の値にセットすることにより行われる。ポインタ・レジスタのビット７は用いられない。
【０４５１】
このメカニズムには、１２８バイトのデータに処理要素がアクセスを行うことができるという利点がある。またベクタ群を１つのクロック内に「フリップ」させて、上向きシフトを妥当に行うこともできる。上向きシフトは、以下のコード・セグメントにより実行される：；フリップされるベクタはＣＭＡの第５列（０を基準として）
movi ＃＄４４，ｐ０ ；＄４４は６４＋４（すなわちｐ０のビット６をセットしてアクセス）；列５（０を基準として）
vmov ＣＭＡ［ｐ０］，ｖｏ ；「フリップ」された列をｖ０に移動dromov ｖ０，ｖ０ 
；ｖ０を１ＰＥだけ下向きシフトvstore ｖ０，ＣＭＡ［ｐ０］ ；ｖ０をフリップしてＣＭＡの列４に戻す．
このメカニズムは、ＣＭＡに対するすべてのデータ・アクセス（リードおよびライト・アクセス）について有効であるが、ＣＭＡに対する命令アクセスに関しては効果をもたない。
【０４５２】
セクション３．３．４ ＣＭＡ空間の配置ＣＭＡは、必要に応じてプログラマにより配
置されるメモリ・ロケーションのセットである。本セクションでは、プログラマに最大限の融通性を提供するために、どのようにＣＭＡ空間を配置したらよいかという例をいくつか示す。
【０４５３】
セクション２．３および２．４の説明では、ＣＭＡは１０２４個の連続したメモリ・ロケーションまたは処理要素あたり６４個の８ビットのメモリ・ロケーションとなることができる。この考えは両方とも正しいが、命令の実行中にアソシエーション・エンジンによりＣＭＡがどのように用いられるかを見なければどちらも完全とは言えない。
【０４５４】
以下の例では、例＃１が最も簡単で、議論の開始点となる。そこから、連続する例のそれぞれは段階を追って複雑になり、前の例に含まれる情報に依存することになる。そのため、進む前に各例を研究することが賢い方法である。
【０４５５】
セクション３．３．４．１ 例１：データ記憶のみに用いられるＣＭＡ図１０２に示さ
れる第１の例は、全コンフィギュレーションの中で最も簡単なものである。この例は、以下のことを前提としている：すなわち１）すべての計算用データがＣＭＡに保持されている；２）プログラム全体は命令キャッシュ内にある（そのためにプログラムはＣＭＡ空間を占有しない）；３）命令pus h, pop, bsr, jsrri およびjsrmi は用いられず、例外は
オフになる（そのためにＣＭＡはスタック・エリアを含む必要がない）；４）jsrmi もjmpmi も用いられていない（そのためＣＭＡはジャンプ・テーブルをもつ必要がない）。
【０４５６】
初期プログラム・カウンタ（ＥＰＰＣ）は＄００００にセットされていることに注目されたい。これによりアソシエーション・エンジンはＩＣからプログラムの実行を開始する（ＩＣＴ０ないしＩＣＴ４＝＄００，ＩＣＶＲ＝＄０Ｆ，ＰＢＲ＝＄００とする）。スタック・ポインタ（ＥＰＳＰ）の初期値は、「無視される」である。これはこの例ではスタックを用いないからである。
【０４５７】
セクション３．３．４．２ 例２：命令キャッシュ，ＰＣおよびＣＭＡページ命令キャ
ッシュ（ＩＣ）は、ＣＭＡを主要なメモリ記憶部として用いる直接マッピングされたキャッシュである。ＩＣは、４つのラインで構成され、各ラインはＣＭＡの１つの列と等しい。ＣＭＡの列は、４つのグループにまとめられ、４列の各グループはページと呼ばれる（図１０３に示される）。各ページの第１列は、キャッシュ・ライン＃０に相当し、２番目がキャッシュ・ライン＃１，３番目がキャッシュ・ライン＃２に、そして４番目がキャッシュ・ライン＃３に相当する。
【０４５８】
ＣＭＡから列がＩＣのラインにロードされると、その列のページ番号がキャッシュ・ラインに関連するキャッシュ・タッグ・レジスタ（ＩＣＴ０ないしＩＣＴ３）に入る。また、そのラインに関連するキャッシュ・タッグ有効ビット（ＩＣＶ０ないしＩＣＶ３）がＩＣＶＲにセットされる。
【０４５９】
図１０４に示されるように、プログラム・カウンタ（ＰＣ）は、論理的に３つの部分に分割される：すなわちＰＣの最上位の８ビットが現在の命令のページを示す；ＰＣのビット７および６が現在の命令のラインに相当する；そしてＰＣのビット５ないし０がそのラ
インの中の現在の命令に相当する。
【０４６０】
命令プレフェッチが起こると、ＰＣの上位８ビットがＰＣのビット７および６により示されるラインのＩＣタッグ（ＩＣＴ０ないしＩＣＴ３）と比較される。正しいキャッシュ・タッグがＰＣビット１５ないし８と等しくない場合、または適切なラインのためのキャッシュ有効ビット（ＩＣＶＲのＩＣＶ０ないしＩＣＶ３）がセットされていない場合は、キャッシュ・ミスとなり、現在のＰＣを含むＣＭＡ列がＰＣビット７および６により示されるＩＣラインにロードされ、ＰＣビット１５ないし８はＰＣビット７および６により指定されたキャッシュ・ライン・タッグに入れられる。
【０４６１】
セクション３．３．４．３ 例＃３：プログラムおよびデータに用いられるＣＭＡこの
例は、プログラムが命令キャッシュ（ＩＣ）よりも多少大きい場合を想定している。この場合には、プログラムの一部をＣＭＡに保管しなければならないが、プログラムの大部分はＩＣ内にある。前記の例のその他すべての前提（命令と例外に関する）は、この例にも適用される。
【０４６２】
図１０５の目的とする解釈（ＩＣに関して）は、以下のとおりである：１）プログラムには１２９から１６０までの命令（５キャッシュ・ラインに等しい）が含まれる；
２）アソシエーション・エンジンには４つのキャッシュ・ラインしかなく、そのためプログラムから「あふれ出た」分はＣＭＡに記憶しなければならない。
【０４６３】
アソシエーション・エンジンは直接マッピングされたキャッシュを用いるので、ＣＭＡのどの列がＩＣ内外と交換されるかはあらかじめわかっている。この例では、列００および０４はいずれもキャッシュ・ライン＃０を用いる必要があるが、キャッシュ・ライン＃１，＃２および＃３はオーバーライトされることはない（そのために直接ＩＣに入れることができる）ので、ＣＭＡ内の空間をそのために確保する必要はない。
【０４６４】
セクション３．３．４．４ 例＃４：シフトしたプログラム前記の例に対する別の方法
として、プログラムを１２８バイト前方に移動させる。これは、プログラムが＄００ではなく＄８０で始まることを意味する（アソシエーション・エンジンではプログラムはロケーション＄００００から始まる必要がないことに注意）。そのためプログラム・カウンタ（ＥＰＰＣ）の初期値は＄００８０になる。これは、プログラムをＣＭＡの２列にわたりシフトさせる効果ももつ。
【０４６５】
図１０６から、入れ替えられるキャッシュ・ラインは今度はキャッシュ・ライン＃２になる（前記の例のようにキャッシュ・ライン＃０を入れ替えるのではなく）ことに注目することが重要である。これは、キャッシュ・ライン＃０，＃１および＃３が入れ替えられることはないことを意味する。スタック・ポインタ（ＥＰＳＰ）の初期値は依然として無視されるであるが、これはスタックする命令と例外がイネーブルになっていないためである。
【０４６６】
セクション３．３．４．５ ＃５：例＃４にジャンプ・テーブルを追加jsrmi およびjmpmi などのメモリ間接命令に関しては、ＣＭＡの最初の１２８バイトにジャンプ・テーブ
ルを構築しなければならない。この例では、ジャンプ・テーブルは８個の間接的な１６ビット・アドレスで構成され、図１０７に示される。
【０４６７】
ジャンプ・テーブルに含まれる情報は、データであって命令ではないと見なされるので、jsrmi またはjmpmi 命令が実行されるたびに、間接アドレスが命令キャッシュからではなくＣＭＡから取り出される（命令キャッシュ内で「ヒット」が起こるためには、マイクロシーケンサは命令アクセスを実行していなければならない）。テーブルは、ダイナミッ
クに更新される。しかし、jsrmi またはjmpmi 命令が用いられると、少なくともＣＭＡの１ラインが使われる。
【０４６８】
セクション３．３．４．６ 例＃６：例＃４にＣＭＡスタックを追加２レベル以上のス
タッキングを必要とするアプリケーションは、ＣＭＡにスタック空間を配置しなければならない。第１レベル・スタック（ＦＬＳ）により１つのスタック・ロケーションが設けられるが、それ以上の場合はＣＭＡを用いる必要がある。図１０８の上部に見られるように、スタック・ポインタ（ＥＰＳＰ）の初期値は＄００３ｆである。これは、アソシエーション・エンジンがリセット状態から出たときに、最初に用いることができるＣＭＡスタック・ロケーションは＄３ｆにあることを意味する。
【０４６９】
図１０８は、プログラムの実行中のＣＭＡスタックの状態を表そうとしている。いくつかのエントリがＣＭＡスタックに入れられ（黒い影の部分）、スタック・エントリのいくつかはまだ用いられていない（斜線部）。
【０４７０】
セクション３．３．４．７ 例＃７：ベクタおよびスケーラ記憶を例＃４に追加１７バ
イト以上のスケーラ記憶部（Ｇ０〜Ｇ７，Ｐ０〜Ｐ７）を必要とするアプリケーションまたは９バイト以上のベクタ記憶部（Ｖ０〜Ｖ７）を必要とするアプリケーションにおいては、ＣＭＡを採用していずれのタイプのデータについても一時的な記憶装置を提供することができる。図１０９を参照のこと。
【０４７１】
列０１はスケーラ記憶部のために用いられ、列＄３ｅと＄３ｆとはベクタ記憶部のために用いられる。
セクション３．３．４．８ 例＃８：全部を一緒にする最後の例として、前記の例の要
件すべてを組み合わせた。これにはジャンプ・テーブル，ＣＭＡスタック，１２８バイトのベクタ記憶部のための空間（２列），６４バイトのスケーラ記憶部，２列のプログラム・コードのための空間および５８個の６４バイト・ベクタが含まれる。図１１０を参照のこと。
【０４７２】
セクション３．４ アソシエーション・エンジンの初期化動作データがアソシエーショ
ン・エンジンに入力される前に、デバイスの主要なエリアを初期化しなければならない。反転ＲＥＳＥＴ信号がアサートされ、次にネゲートされた後で、アソシエーション・エンジンの内部レジスタはすべてセクション２．３，アソシエーション・エンジン・ホストがアクセスできるレジスタに指定される状態にデフォルト設定される。ホストにより初期化することが必要な内部ロケーションは、係数メモリ・アレイ（ＣＭＡ），マイクロコード・メモリ・アレイ（ＭＭＡ）およびその他の希望する制御関数である（アソシエーション・エンジン・プログラムに１２８未満の命令が含まれる場合には、命令キャッシュ，タッグ・レジスタおよび有効ビットをＭＭＡの代わりに初期化する必要がある）。制御レジスタのリセット状態は、ネットワーク処理前に最小限の準備しか必要としない状態であるようにすること。内部では、マイクロコード命令セットが、ルーピング部と共に初期化部をもつ機能を提供する。詳細については、セクション３．６．３，命令の流れのアソシエーション・エンジンの詳細を参照のこと。
【０４７３】
最小限の初期化要件は、マイクロコード・メモリ・アレイと、ポートのストリーム転送を管理するためのいくつかのその他の制御レジスタとを含む。
セクション３．５ ポート動作アソシエーション・エンジンには４つのポートがあり、
制御側のホストおよびアソシエーション・エンジン’などの他のシステム・コンポーネントの両方に関する情報の効率的な並行転送を容易にしている。ポートは、Ｎ，Ｓ，Ｅ，Ｗとラベルがつけられ、それぞれノース，サウス，イーストおよびウェストを表す。アソシエーション・エンジンは、ポートを用いて統一のとれた働きをし、複数のアソシエーショ
ン・エンジンを１つに接続するように設計されている。またアソシエーション・エンジンは、一次元および二次元アレイでスケーリング可能に設計されている。以下の説明に関しては、アソシエーション・エンジン・システムは二次元アレイに構築されることを前提としている。
【０４７４】
すべてのコンフィギュレーション，ステータス，入力および出力値は、これらのポートを通じてホストによりアクセスすることができる。アソシエーション・エンジンは、２つのモードのうち一方で動作するように設計されている。モードはＲ／反転Ｓ入力により選択される。この入力は、アソシエーション・エンジンがラン・モード（ＶＤＤのＲ／反転Ｓ）にあるのか、ストップ・モード（ＧＮＤのＲ／反転Ｓ）にあるのかを決定する。動作モードにより、アソシエーション・エンジンのポートは異なる働きをする。特定のタイミング情報についてはセクション４，アソシエーション・エンジン・バス動作を参照のこと。アソシエーション・エンジンに関する異なる信号の詳細についてはセクション２．２，アソシエーション・エンジン信号の説明を参照のこと。
【０４７５】
ラン・モードは、アソシエーション・エンジン・マイクロプログラムを実行するために用いられる。ストップ・モード（ホスト・モードとも呼ばれる）は、アソシエーション・エンジンの内部リソースに対して外部アクセスを行い、システム・ホストによる初期化およびデバッグを行うために用いられる。ポートは、ラン・モードではニューラル・ネットワークのレイヤ間通信またはアソシエーション・エンジン・デバイス間のレイヤ内通信のための接続バスとして用いることができる。
【０４７６】
セクション３．５．１ ホスト転送モードストップ・モードでは、アソシエーション・
エンジンは２つの異なるタイプの転送モードに対応する。これはランダム・アクセスとストリーム・アクセスである。ランダム・アクセス・モードでは、ホストがアドレスおよびデータ情報を供給してリードおよびライトを実行する。ストリーム・モードでは、データはホストにより供給され、アソシエーション・エンジン・デバイスが、アクセスされたロケーションのアドレスを内部で生成する。アソシエーション・エンジン・バス・ポート動作の詳細なタイミングについては、セクション４．１，アソシエーション・エンジン・ポート・タイミングを参照のこと。
【０４７７】
アソシエーション・エンジンのアレイには、チップ選択として用いられる２つの信号がある。これらの信号（反転ＲＯＷおよび反転ＣＯＬ）は、アソシエーション・エンジンのアレイから１つのデバイスを選択するためのメカニズムを提供する。
【０４７８】
ランダム・アクセス動作に関しては、反転ＲＯＷ信号および反転ＣＯＬ信号は、アクセスすべき１つのアソシエーション・エンジンを選択するために用いられる。ウェスト・ポートおよびノース・ポートにアドレス情報が提示される。アドレス情報はイーストとサウスの方向に流れて、選択された（すなわち反転ＲＯＷおよび反転ＣＯＬの両方がアサートされた）デバイスに収束する。一方、データは、選択されたデバイスからノース（ライト動作）またはサウス（リード動作）の方向に進む。反転ＲＯＷまたは反転ＣＯＬのいずれか一方（両方ではなく）をもつデバイスに関して、アドレスまたはデータは反転ＲＯＷおよび反転ＣＯＬアサーションにより縦または横方向に転送される。
【０４７９】
ストリーム動作（アドレスが内部で生成される）に関しては、データはアレイのサウスまたはイースト端（両方ではない）に対して、またサウスまたはイースト端から流れる。このストリーミング動作は、基本的にアレイから列または行を充てんあるいは排出する。反転ＲＯＷラインおよび反転ＣＯＬラインを用いることにより、サブセクションを選択して、アレイの一部だけで動作することもできる。
【０４８０】
アソシエーション・エンジン・アクセス・モードの以下の説明に関しては、アソシエーション・エンジン・アレイ・コンフィギュレーションを示す図１１１を参照のこと。
セクション３．５．１．１ ランダム・アクセス・モードポートの動作モードの説明は
、ホスト側からではなく、アソシエーション・エンジンのピンにおいて解説される。
【０４８１】
ランダム・アクセス・モードは、アソシエーション・エンジン内の個々のレジスタに対するアクセスを行うように設計されている。ランダム・アクセス・モードを用いるレジスタにアクセスするには、ホストはアドレス（ＷＤ，ＮＤ），データ（ＳＤ）および制御信号（ＯＰ，反転ＮＣＩ，反転ＷＣＩ，Ｒ／反転Ｗ，反転ＥＮ）を入れて、特定のポートのランダム・アクセス・モードをイネーブルにする。アドレスおよび制御信号は内部ラッチされて、特定のレジスタを選択するために解読される。次のクロック・サイクルで、アクセスされたデータが転送される。ライト・サイクルについては、ＣＬＫ信号の立ち上がり端でデータがラッチされる。リードに関しては、下がっているクロック・サイクル上でピンからデータが出される。ランダム・アクセス・モードでアクセスすることができるレジスタのリストは、表２．５にある。
【０４８２】
セクション３．５．１．２ ホスト・ストリーム・アクセス・モードストリーム・アク
セス・モードにより、ホストは大量のデータを、内部レジスタをアドレスする必要なく、チェーンに配列されたアソシエーション・エンジンのセットに転送することができる。ストリーム・アクセス・モードを用いて、アソシエーション・エンジンの初期化を行ったり、アソシエーション・エンジンの状態をセーブすることもできる。ストリーム・アクセス・モードを用いている領域にアクセスするには、イースト・ポート・ストリーム・リードを行うには、ホストは制御信号反転ＲＯＷ，反転ＣＯＬ，反転ＥＮ，Ｒ／反転および反転ＷＣＩを起動して、ＥＤからデータを受け取る；サウス・ポート・ストリーム・リードを行うには、ホストは制御信号反転ＲＯＷ，反転ＣＯＬ，反転ＥＮ，Ｒ／反転および反転ＮＣＩを起動して、ＥＤからデータを受け取る；イースト・ポート・ストリーム・ライトを行うには、ホストは制御信号反転ＲＯＷ，反転ＣＯＬ，反転ＥＮ，Ｒ／反転および反転ＥＣＩを起動して、ＥＤにデータを入れる；サウス・ポート・ストリーム・ライトを行うには、ホストは制御信号反転ＲＯＷ，反転ＣＯＬ，反転ＥＮ，Ｒ／反転および反転ＳＣＩを起動して、ＳＤにデータを入れる。制御信号は内部ラッチされて、特定の領域を選択するために解読される。次のクロック・サイクルでアクセスされたデータは転送を開始する。ライト・サイクルについては、データはＣＬＫの立ち上がり端でラッチされる。リードに関しては、データは下がっているクロック・サイクル上でピンから出される。
【０４８３】
ストリーミング動作に関しては、ホスト・ストリーム選択レジスタ（ＨＳＳＲ）がアソシエーション・エンジンのどの領域にストリーミングされるかを制御する。ストリーム・アクセス・モードでは、内部アドレスがユーザのために生成される。これはＯＡＲ１およびＯＡＲ２レジスタで行われる。転送の期間はＤＣＲ１およびＤＣＲ２レジスタで制御される。ストリーム・ライトに関して補足すると、ホスト・ストリーム・オフセット・レジスタ（ＨＳＯＲ）がデータ・ストリーム内へのオフセットまたは「いつ」充てんを開始するかを制御する。
【０４８４】
ストリーム充てん動作の開始時に、ＨＳＯＲがカウンタにロードされ、これはストリームのデータの各バイト毎に減分される。カウンタがゼロになると、アソシエーション・エンジンはストリームからメモリ内にデータのコピーを開始する。このメカニズムにより、アソシエーション・エンジンには１つのストリーム・ライト動作で異なるデータ，重複するデータまたは同じデータをロードすることができる。
【０４８５】
ストリーム・リード動作では、ＨＳＯＲは用いられない。代わりに、反転ｘＣＩおよび反転ｘＣＯピンを用いて、次のアソシエーション・エンジンを行または列内に信号化して
、データの送出を開始する。ストリーム・リードは、アソシエーション・エンジン’の最もウェストまたはノースの反転ｘＣＩ信号をアサートすることにより始まって、これらのアソシエーション・エンジンにイーストまたはサウスにデータを送らせる。１つのアソシエーション・エンジンが終了すると、ライン内の次のアソシエーション・エンジンが信号化されて、ストリームの最後にデータを追加する。
【０４８６】
このアーキテクチャにＯＡＲおよびＤＣＲレジスタを入れる主な動機は、１つのニューロン（複数のアソシエーション・エンジンにまたがることのある）の係数のストリーム・リードまたはライトを行えるようにすることである。また、このメカニズムを用いて１つの入力に関するアソシエーション・エンジンの係数すべてをストリーム・リードまたはライトすることもできる。アクセスされた論理空間（ＨＳＳＲ）により、ＤＣＲ２およびＯＡＲ２レジスタが用いられることもあれば、用いられないこともある。ＩＤＲまたはＶ０のような一次元レジスタについては、ＤＣＲ１およびＯＡＲ１だけが用いられる。図１１２は、一次元ベクタ・レジスタに関して、ＤＣＲ１およびＯＡＲ１がどのように機能するかを示す。
【０４８７】
一次元のストリーム・アクセス・モードでは、ＯＡＲ１レジスタの値が開始アドレスとして用いられる（アソシエーション・エンジン内で）。内部カウンタ（開始値は０）は、ストリームからコピーされた、あるいはストリームに書き込まれたバイト毎に増分される。カウンタがＤＣＲ１レジスタの値と等しくなると、アソシエーション・エンジンは充てん状態から満杯状態へと移行する。
【０４８８】
ストリーム・モードでは、チェーン内で最初のアソシエーション・エンジンが常になければならない。ライン内で最初のアソシエーション・エンジンは、通常、反転ｘＣＩ入力をアクティブに結合させており、バス上でデータを制御する権利を与えている。ストリーム・モードで考慮すべきもう１つの点は、ホスト・アドレスをアソシエーション・エンジン・アドレスに解読するインターフェース論理である。インターフェース論理は、ストリーム動作のためのチェーンを形成するすべてのアソシエーション・エンジンに対して、すべての制御ラインをアサートできることが必要とされる。通常ホスト側からは、ストリーミング動作が１つのホスト・アドレスを通じてデータにアクセスし、これがアソシエーション・エンジン側のストリーム動作を制御する。詳細については、図１１６を参照のこと。
【０４８９】
二次元ストリーム動作（ＣＭＡ）に関しては、第２セットのレジスタが用いられてストリーミング・アクセスを制御する。この２つのレジスタはＯＡＲ２およびＤＣＲ２制御レジスタである。これらのレジスタは、開始アドレス（アソシエーション・エンジン内で）とカウント値とを提供するという点では、ＯＡＲ１およびＤＣＲ１と同様である。ＤＣＲ２に関しては別の内部カウンタ（ＤＣＲ１と同様の）がある。図１１３に、４つのストリーミング・レジスタと、それらをどのように用いてＣＭＡへのアクセスを制御するかを詳細に示す。
【０４９０】
セクション３．５．２ アソシエーション・エンジン転送モードラン・モードでは、ア
ソシエーション・エンジンは４つのポートのどこからでもライト動作を実行することができる。これはwrite 命令の制御下で行われる。ライト動作のデスティネーションは、（ポートスイッチおよびタップによるが）ライトの方向にあるデバイスのＩＤＲレジスタである。たとえば、アソシエーション・エンジンがノース・ポートから書いたとすると、同じ列（上）を共有するデバイスがデータを受け取ることができる。write 命令により実行される転送のタイプは、ホスト・ストリーム・アクセス・モードの場合と全く同じである。ＩＤＲは動作のデスティネーションであるので、異なるセットの制御レジスタが、いつどこでデータがＩＤＲレジスタに書き込まれるかを決める。ＩＤＲは、入力インデックス付
けまたは入力タグ付けのいずれかによりロードすることができる。
【０４９１】
入力インデックス付けの場合は、捕捉された入力データは一連の連続した入力サンプルである。入力タグ付けの場合は、入力ストリームには暗示されたサンプル・カウントが含まれる（カウントは、０から始まり、入力サンプル毎に増える）。タッギング捕捉メカニズムでは、ＩＤＲの各ロケーションに関連する内部タッグがある。２つのメカニズムの基本的な違いは、ＩＤＲアドレス・レジスタが増分される条件である。この捕捉メカニズムの詳細な説明については、セクション３．５．２．１，入力インデックス付けおよびセクション３．５．２．３，入力タグ付けを参照のこと。比較すると、以下の説明はストリーム・アクセス・モードに関する第１の捕捉メカニズム（入力インデックス付け）を説明する。
【０４９２】
セクション３．５．２．１ 入力インデックス付けＩＤＲにデータをロードするための
基本的な方法は、入力インデックス付け法である。この充てん法を用いると、ＩＤＲにはあるサイクル・カウントで始まる連続バイトがロードされる。ＩＯＲレジスタには、データがいつデータ・ストリームからＩＤＲにロードされたかを示すサイクル・カウントが含まれる。ＩＰＲおよびＩＬＭＲレジスタは、ＩＤＲのどこに入力サンプルが入れられるかを判定する。ＩＣＲレジスタは、ＩＤＲにいくつのサンプルがロードされるかを決める。
【０４９３】
ＩＰＲおよびＩＣＲレジスタは、次のような場合にシャドウ化される（隠される）：すなわち１）レジスタがロードされたとき；２）done命令が実行されたとき；３）ＩＤＲＣアドレッシング・モードが用いられたとき；および４）反転ＲＥＳＥＴ信号がトグルされたとき（１−＞０−＞１）。
【０４９４】
ＩＰＲレジスタは、ＩＤＲに対するインデックスとして用いられ、次のデータ・サンプルのロケーションを決める。ＩＬＭＲレジスタは、ＩＰＲのビット位置をマスク（無視）するために用いられる。これは、ＩＤＲ内のバイトを二倍にするという融通性をもたらす。たとえば、ＩＰＲに＄００が含まれＩＬＭＲに＄０３が含まれているとすると、ＩＤＲにロードされる最初のバイトは、ロケーション＄００，＄０１，＄０２および＄０３に入れられる。次のバイトは、＄０４，＄０５，＄０６および＄０７と入れられていく。ＩＰＲは、サンプル毎に４ずつ増分されるので、ＩＰＲはＩＤＲ内の次の空きスポットを指し示す。
【０４９５】
ＩＰＲとＩＬＭＲがどのように用いられるかの理解を助ける２つの概念がある：すなわち一次アドレッシングと二次アドレッシングである。内部アドレスを生成して入力インデックス付けモード中にＩＤＲにアクセスする際には、ＩＰＲが一次アドレスを維持する役割をもつ。この一次アドレスは、ＩＤＲの１つのロケーションを指し示す。ＩＰＲの内容がＩＬＭＲの内容と組み合わせられると、二次アドレスのセットが生成される。以下の例＃２（ＩＬＭＲ＝＄３）および例＃３（ＩＬＭＲ＝＄４）では、グラフ内に２つの異なるレベルのシェーディングがある。グレーの最も濃いシェードは、一次アドレス（ＩＰＲのみ）を用いてＩＤＲに入れられたデータを示す。グレーの明るいほうのシェードは、二次アドレス（ＩＰＲ＆ＩＬＭＲ）を用いてＩＤＲに入れられたデータを示す。
【０４９６】
セクション３．５．２．２ ＩＬＭＲを用いる例ラン・モード中にＩＬＭＲを用いてＩ
ＤＲをロードするための規則を、ここにもう一度繰り返す：・ＩＬＭＲのビットは内部生成されたアドレスに関して「無視する」として働く。すなわち、データはアドレスが「無視された」ときに選択されたＩＤＲロケーション内にロードされる。たとえば、００１１００００というＩＬＭＲ値は、ＩＤＲアドレスのビット４および５を「無視する」が、これは同じデータがＩＤＲロケーション００００００００，０００１００００，００１０００００および００１１００００に送られることを意味する。
【０４９７】
・ＩＰＲは、ＩＬＭＲ内の最下位の「０」のロケーションに比例して増分される。すなわち、最下位の０がビット・ロケーション０にある場合は、ＩＰＲは２０増分されるか、あるいはデータがＩＤＲに入れられるたびに１ずつ増分される。最下位の０がビット・ロケーション３にある場合は、ＩＰＲは毎回８ずつ増分される。
【０４９８】
以下の３つの例では、アソシエーション・エンジンにストリーミングされるデータは図１１４で指定される。各ボックスは、８ビットの単一のデータを表す。
例＃１：ＩＬＭＲ＝０ＩＬＭＲ＝＄００で（リセットから出た場合）ＩＰＲ＝０（ＩＤＲ＝「０」を指す）の場合、ＩＤＲにロードされる新しいデータはそれぞれ次の可能なＩＤＲロケーションに入れられる。このデータの流れの表を、表３．３に示す。
【０４９９】
例＃２：ＩＬＭＲ＝＄３ＩＬＭＲ＝＄３（００００００１１）でＩＰＲ＝０（ＩＤＲ［０］を指す）の場合は、ＩＤＲにロードされる最初のデータがＩＤＲ［０］，ＩＤＲ［１］，ＩＤＲ［２］およびＩＤＲ［３］に入り、ＩＰＲは２2 （４）だけ増分される。その結果、新しいＩＰＲロケーションはＩＤＲ［４］となる。ＩＤＲにロードされる２番目のデータはＩＤＲ［４］，ＩＤＲ［５］，ＩＤＲ［６］およびＩＤＲ［７］に入り、ＩＰＲは４だけ増分される。１６個のデータが受け取られると、ＩＤＲは完全にロードされる。表３．４に、一次アドレスは濃いシェーディングで、二次アドレスは明るいシェーディングで表される。このデータの流れの表を表３．４に示す。
【０５００】
例＃３：ＩＬＭＲ＝＄４ＩＬＭＲ＝＄４（０００００１００）でＩＰＲ＝０の場合は、ＩＤＲにロードされる最初のデータはＩＤＲ［０］およびＩＤＲ［４］に入り、ＩＰＲは２０だけ増分されてＩＤＲ［１］ロケーションになる。ＩＤＲにロードされる２番目のデータはＩＤＲ［１］，ＩＤＲ［５］にロードされ、ＩＰＲはロケーションＩＤＲ［２］に増分される。表３．５に、一次アドレスは濃いシェーディングで、二次アドレスは明るいシェーディングで表される。このデータの流れの表を表３．５に示す。
【０５０１】
表３．５では、ＩＰＲは＄００で始まり、新しいデータがＩＤＲに入れられるたびに１ずつ増分されるものとする。（このデータは、表３．５で濃くシェーディングされているエントリにより表される）。ＩＬＭＲはＩＤＲに対して「アドレス・マスク」として働き、この例ではＩＬＭＲの値は＄４である。これによりビット２（ビット０から数えて）は「無視される」。ＩＤＲアドレスのこの「無視」により、明るいシェーディングをつけられたデータ値もＩＤＲに入れられる。
【０５０２】
ｔ３とｔ４との間、ｔ７とｔ８との間のデータ挿入の奇妙な移行は、この無視に直接関係する。時刻ｔ０においてもｔ４においても、有効ＩＤＲアドレスは０００００ｘ００（００００００００のＩＰＲ値と０００００１００のＩＬＭＲ値とを組み合わせたもの）であるので、ロケーション００００００００および０００００１００にはいずれも同じデータ（１０）が書き込まれる。同様に時刻ｔ１とｔ５において、有効ＩＤＲアドレスは０００００ｘ０１であるので、ロケーション０００００００１および０００００１０１には、いずれも同じデータ（２３）が書き込まれる。
【０５０３】
セクション３．５．２．３ 入力タグ付けさらに融通性を得るために、入力タッグ捕捉
メカニズムが設けられる。このメカニズムは、ＩＤＲをロードする動作に関して入力インデックス付けの代替となる。この捕捉メカニズムは、ポート制御レジスタ（ＰＣＲ）の充てんモード（ＦＭ）ビットによりイネーブルになる。この捕捉メカニズムは、特殊なニューラル・ネットワーク接続を必要とする計算動作のためにＩＤＲをロードするために用いられる。
【０５０４】
この捕捉メカニズムにより、アソシエーション・エンジンは入力ストリームから、無作為な増加順で、入力サンプルを選択的に捕捉することができる。このメカニズムでＩＤＲにアクセスするには、まずホストはＩＴＲレジスタに用いようとするタッグをロードして、ＰＣＲのＦＭビットの値をＩＤＲ充てんに関してＩＴＲをイネーブルするようにセットする。ホストはアソシエーション・エンジンのチェーンにデータを送っているポートの１つに、データおよび制御情報を入れる。制御信号が内部ラッチされ、解読される。データがアソシエーション・エンジンを通過すると、内部カウンタが増分される。カウント値が現在の入力タッグ値と一致して、反転ｘＣＩ入力がアクティブになると、入力サンプルがＩＤＲにロードされる。このプロセスは、すべての入力サンプルがＩＤＲにロードされるか、ＩＣＲカウントに到達するか、あるいは昇順値でないタッグ値に到達するまで続く。
【０５０５】
入力タグ付け捕捉メカニズムを用いる例を図１１５に示す。この例は、６個のサンプルの合計入力フレーム（このうちいくつかは用いられない）と３つのニューロンの出力レイヤ（すべての接続が用いられるわけではない）とを示す。この例では、わかりやすくするために、ＣＭＡおよびＩＴＲ，ＩＤＲレジスタだけが図示される。これを実現するには、入力タグ付けメカニズムが、必要な入力サンプルのみをロードするために用いられる（ＩＴＲの値は捕捉すべき入力サンプルのカウント値としている）。出力ニューロンが必要な係数だけを用いるようにするために、ＣＭＡはベクタ・エンジン処理マスク・ビット（ＶＴ）にロードするために用いられるビット・パック・マスクを保持する。これはＶＴビットをロードして、どの係数がベクタ・エンジンの伝播関数に関与するかを示すために用いられる。vlshftt マイクロコード命令が、ビットを含むマスク・ビットを抽出し、それをＶＴビットにシフトさせるために用いられる。
【０５０６】
入力タッグ捕捉メカニズムはベクタ・エンジン処理マスク・ビット（ＶＴ）と共に、完全に接続されていないニューラル・ネットワークまたは受信フィールドの概念を用いるパラダイムを実現するための強力な方法となる。
【０５０７】
セクション３．５．３ アソシエーション・エンジンのためのホスト・メモリ・マップ
ホストがアソシエーション・エンジンの内部ロケーションにアクセスするためには、ホスト・バス信号を解読して、それをアソシエーション・エンジンの適切な制御信号に翻訳するなんらかの形のインターフェース回路構成が必要である。インターフェース論理はホストに依存するが、ホストのためのメモリ・マップは多少包括的になることがある。図１１６に、メモリ・マップの一例を示す。
【０５０８】
図１１６は、図１１１に示されたバスのためのメモリ・マップを詳細に示す。この例では４機のアソシエーション・エンジン・デバイスがある。図１１６では、アソシエーション・エンジンのランダム・マップにそれぞれ１つずつ、４つの８キロバイト領域がある。この３２キロバイトの領域の下にストリーミング・ロケーションがある。ホスト側から見ると、ストリーム動作は１つのロケーションにデータを転送しているように見える。
【０５０９】
インターフェースの設計者は、ストリーム・ロケーションを望ましい任意のアドレス範囲にマッピングすることができる。これにより、インターフェース論理とホストのアドレス空間との間で折り合いをつけることができる。
【０５１０】
セクション３．６ アソシエーション・エンジン動作アソシエーション・エンジンは、
基本的には８ビットの並行処理アレイである。アソシエーション・エンジンは８ビットの入力サンプルを取り込み、その入力について並行に動作する。ＭＭＡに書き込まれたマイクロコードにより、さまざまな作業を行うことができる。本セクションでは、ＩＤＲに有効な入力データが入れられた後に起こる包括的動作および詳細な動作を説明する。この議論を容易にするために、アソシエーション・エンジン内部構造のブロック図を図１１７に
示す。このブロック図は、ＣＭＡがベクタ・エンジンによりアクセスされながら、ＩＤＲレジスタ内のロケーションに並行にアクセスすることができることを示す。
【０５１１】
セクション３．６．１ アソシエーション・エンジンの概要アソシエーション・エンジ
ンは、４つの状態のいずれか１つになりうる。この状態とは、アイドル，入力，実行および出力である。移行の流れについては図１１８を参照のこと。
【０５１２】
入力状態関数はすでにセクション３．５，ポート動作で説明した。この議論については、入力状態および実行状態が別のものであることを前提とする（ベクタ・エンジンのデータ入力と実行とを同時に行うことができるアソシエーション・エンジンのコンフィギュレーションがある。これについては、後で詳述する）。ＩＤＲにすべての入力サンプルがロードされると、アソシエーション・エンジンは実行状態に移行する。
【０５１３】
実行状態では、アソシエーション・エンジンは入力データおよび係数データに関して、マイクロコード・ルーチンを通じて動作する。ユーザが欲しいだけの数の異なるマイクロコード・ルーチンが可能である（ＭＭＡが満杯になるまで）。スケーラ・エンジンにより設けられるルーピング構造により、アソシエーション・エンジンはシステムのコンフィギュレーションと実現されるパラダイムとに基づき、一定の回数だけマイクロコードを実行することができる。どのルーチンを実行するかという選択は、アソシエーション・エンジンが前向き（フィードフォワード）の情報の流れにあるのか、後向き（バックワード）の情報の流れにあるのかにより決まる。
【０５１４】
ループの最後で、アソシエーション・エンジンは出力状態に入ることができる。この時点で、アソシエーション・エンジンはあるポートでアソシエーション・エンジン’に対してデータの転送を開始してもよい。アソシエーション・エンジンがwrite マイクロコード命令の実行によりバス・マスタになると、出力状態が生成される。そのため、厳格に言うと、出力状態とは実行状態の下部構造セットである。ここではアソシエーション・エンジン・デバイス間でデータを転送することを論じるために説明されている。すべてのデータが転送されると、アソシエーション・エンジンはアイドル状態に入る。この時点で、ホストは割込により通知されて、アソシエーション・エンジン（サブシステム）が次の入力ベクタの準備ができていることを示す。次にホストは、アソシエーション・エンジン・ステータス・レジスタにアクセスして、アソシエーション・エンジンが出力位相を完了したステータスをクリアする。ホストは、次の入力ベクタを供給して、このプロセスが繰り返される。
【０５１５】
アソシエーション・エンジン’のマイクロコードによっては、アソシエーション・エンジンはアソシエーション・エンジン’のコマンドから、入力／実行状態に入ることがある。このような状況は、あるニューロン（またはすべてのニューロンの）係数が学習を容易にするための調整を必要としていると、アソシエーション・エンジン’が判断した場合に起こる。アソシエーション・エンジンがアイドル状態にいる間に、アソシエーション・エンジン’は、ポートを通じてアソシエーション・エンジンになんらかの行動を示すコマンドを送る。この行動はニューロンの係数の調整であったり、あるいは新しいニューロンをシステムに加えることであったりする。このコマンド関数は、いくつかの方法で実行することができる。アソシエーション・エンジン’は、アソシエーション・エンジンに対して信号機（semaphore ）を送り返して、どの行動を起こすかを示すことができる。
【０５１６】
アソシエーション・エンジン’がアソシエーション・エンジンにデータを送り返す場合には、入力状態への移行と、その後の実行状態への移行が起こる。送り返されるデータは、２つの形式をとることができる。１つは、ベクタ値データ（逆伝播の場合のエラー・ベクタのような）である。２つめは、アソシエーション・エンジンに対して一定のルーチン
を実行するように命令する信号機である。そのためアイドル状態から入力状態または実行状態への移行が可能になる。この時点で、マイクロコード・ルーチンの１つ（フィードフォワードではない）が実行されて、ニューロン係数に関してなんらかの学習アルゴリズムが実行される。
【０５１７】
セクション３．６．２ ホストとアソシエーション・エンジンの対話の詳細な説明本セ
クションでは、ホストとアソシエーション・エンジンとアソシエーション・エンジン’との間の動作の流れを説明する。この説明により、ホストとアソシエーション・エンジンの対話だけ、またアソシエーション・エンジン’が加わる場合のいくつかの場面が示される。
【０５１８】
ホストからアソシエーション・エンジンにデータを入力するには、２つの基本的な方法がある。１つは充てん後計算（fill-then-compute ）であり、もう１つは充てん中計算（compute-while-filling ）である。この２つの充てん方法は、ホストが実行する動作は同様であるが、それらが実行される順序が異なっている。この方法によりユーザは、ＩＤＲのロードとマイクロコードの計算との間の並行演算の量を決定することができる。
【０５１９】
セクション３．６．２．１ 入力有効ビットＩＤＲレジスタには、ベクタ・エンジンが
伝播関数で用いる入力データが含まれている。ＩＤＲ内の各レジスタ・ロケーションには、有効ビットが含まれている。
【０５２０】
これらの有効ビットは、ＩＤＲロケーションに書き込みが行われたときにセットされる。この有効ビットは、３つの異なるメカニズムのいずれか１つによりクリアすることができる：すなわち１）反転ＲＥＳＥＴ信号；２）clearv命令および３）restart 命令である。ラン・モードでは、アソシエーション・エンジンが命令の実行を開始する。有効でないＩＤＲロケーションが参照されると、ベクタ・エンジンは有効入力データを待つ。有効入力データが来ると、ベクタ・エンジンはＭＭＡに含まれる動作を実行する。ベクタ・エンジンはＰ［０］〜Ｐ［７］レジスタを用いて、用いられる現在の入力サンプルを選択する。Ｐ［０］〜Ｐ［７］ポインタも有効ビットを選択し、ベクタ・エンジンは入力サンプルが有効であるか否かを判定することができる。有効なデータに関してベクタ・エンジンの行動の動作を制御する論理を形成するのは、ＩＤＲ有効ビットである。図１１９は、ＩＤＲ有効ビットが論理的にどのように構築されるかを示す。ＩＤＲ有効ビットは、実際には処理要素のそれぞれのベクタ・プロセス制御レジスタ（ＶＰＣＲ）に位置している。
【０５２１】
前述のようにＰレジスタは、動作のための１つのＩＤＲロケーションを選択するために用いられる。ＩＤＲレジスタはまた、ベクタ・ソースとしても用いることができる。この場合は、ＩＤＲレジスタが有効である場合を判定するために、より複雑な規則が用いられる。１つの有効ビットを見るだけでなく、全部の有効ビットが用いられる。ＩＤＲレジスタが有効であるか否かを判定するために、有効ビットと、ＩＤＲロケーションに対応する関連のＰＥ ＶＴビットとの間でチェックが行われる。ＶＴビットがクリアされる（非ア
クティブのＰＥ）と、有効ビットの状態は無視になる。一方ＶＴビットがセットされる（アクティブのＰＥ）と、有効ビットの状態を用いてＩＤＲレジスタの有効性を判定する。アソシエーション・エンジンは、すべての有効ロケーション（セットされたＶＴビットとセットされた有効ビット）が真になるまでは、動作を進行させるのを待つ。
【０５２２】
以下の説明では、流れ図の各ボックスにつけられた番号は、図１１８の状態番号に対応する。以下の流れ図では、関連する行動だけが説明される。ホスト，アソシエーション・エンジンおよびアソシエーション・エンジン’はすべて、望ましい状態に初期化されていることを前提とするので、流れ図では関係のある情報しか説明しない。以下の図においては、図１６のバス相互接続構造を参照のこと。
【０５２３】
セクション３．６．２．２ 充てん後計算この場合は、ホストはＩＤＲを充てんしてか
ら、ベクタ・エンジンに伝播関数を実行するように命令する。スタンドアロン・アソシエーション・エンジン・システムのための基本的な流れを図１２０に示す。
【０５２４】
この流れでは、アソシエーション・エンジンはリセット状態で始動する。次のステップはホストにより実行される。次にホストは、ＩＤＲレジスタにデータをロードする（ホストにより書き込まれるロケーションは、そのロケーションの有効ビットを自動的にセットすることに留意）。次にホストは、最後のＩＤＲロケーションをロードして、アソシエーション・エンジン・マイクロコードを解放する（アソシエーション・エンジンは有効データを待つことに留意）。アソシエーション・エンジン内での最初のmove命令は、ＩＤＲ全体がロードされるまでアソシエーション・エンジンを待たせるために用いられる。この時点でアソシエーション・エンジンはＩＤＲにロードされたデータの計算を開始する。計算の最後には、done/clearv 命令がある。このとき、アソシエーション・エンジンは有効ビットをクリアして、ホストを待機する。ホストは、ポーリング・ルーチンまたは割込ルーチンのどちらかを用いて、アソシエーション・エンジンが終了したことを知らせることができる。この時点でホストはＩＤＲに新しい入力データを書き込み、流れは以前と同様に続く。
【０５２５】
アプリケーションにより、アソシエーション・エンジンが入力データに関して複数回動作することが求められる場合（入力ベクタ内のウィンドウをサーチ）は、clearv命令は除かれる。
【０５２６】
セクション２．６．２．３ 充てん中計算この方法は、ホストとアソシエーション・エ
ンジンとの間の並行度は、充てん後計算の場合よりもはるかに多くなる。スタンドアロン・アソシエーション・エンジン・システムのために基本的な流れを図１２１に示す。
【０５２７】
この流れでは、アソシエーション・エンジンはリセット状態から始動する。ＩＤＲには無効データが含まれるので（有効ビットはリセット時にクリアされ、まだホストによりロードされていない）、ベクタ・エンジンはデータを待つ。この時点でホストは、ＩＤＲにデータをロードし始める。ホストがＩＤＲへのデータのロードを開始すると、ベクタ・エンジンは伝播関数の計算を開始することができる。そのため、入力状態と実行状態とが全く別のものであった前述の流れとは異なり、この流れ（充てん中計算）により入力状態と実行状態とがかなり重複する。計算の最後に、done/clearv 命令が実行される（これでＩＤＲ有効ビットがクリアされる）。このときアソシエーション・エンジンはホストを待つ。ホストは、ポーリング・ルーチンまたは割込ルーチンのどちらかを用いて、アソシエーション・エンジンが終了したことを知らせることができる。
【０５２８】
セクション３．６．２．４ アソシエーション・エンジンとアソシエーション・エンジ
ン’との対話ここでは、アソシエーション・エンジンとアソシエーション・エンジン’との対話の説明を行う。アソシエーション・エンジン’はいくつかのアソシエーション・エンジンからの部分シナプス結果を集合させてその結果の和に出力関数を実行するために用いられることに留意されたい。これには、アソシエーション・エンジンがアソシエーション・エンジン’に何らかのプログラム制御下で出力を「送る」ことが必要になる。さらにアソシエーション・エンジン’は、アソシエーション・エンジンに情報を送り返すこともできる（シェルフ係数または全係数の調整のように）。基本的な流れを図１２２に示す。
【０５２９】
この流れでは、アソシエーション・エンジンはリセット状態で始動する。ＩＤＲには無効データが含まれるので（有効ビットはリセット時にクリアされ、まだホストによりロードされていない）、ベクタ・エンジンはデータを待つ。この時点でホストは、ＩＤＲにデ
ータをロードし始める。ホストがＩＤＲへのデータのロードを開始すると、ベクタ・エンジンは伝播関数の計算を開始することができる。フィードフォワード計算位相の最後に、アソシエーション・エンジン内でwrite 命令が実行される。この命令は、Ｖ［０］レジスタの値をアソシエーション・エンジン’に送る。アソシエーション・エンジン’には、ＩＤＲに対する引用部がある。この引用部によりアソシエーション・エンジン’は、有効データがＩＤＲに現れるまで待つ。
【０５３０】
アソシエーション・エンジン’では、ルーチンの最後にwrite Ｇ０が発されて、アソシエーション・エンジンに対してなんらかの行動をとるように伝える。アソシエーション・エンジンでは、命令ループがアソシエーション・エンジン’を待つ。このとき、アソシエーション・エンジンで実行を開始する別のルーチンを選択してもよい。このルーチンを用いると、アソシエーション・エンジン内の係数の１つまたは全部を調整することもできる。また、アソシエーション・エンジン’からアソシエーション・エンジンへの転送は、ブロードキャスト・タイプであり、すべてのアソシエーション・エンジンがアソシエーション・エンジン’により転送されたものを受け取る点に留意されたい。この計算の最後には、done/clearv 命令がある。この時点でアソシエーション・エンジンは有効ビットをクリアして、ホストを待つ。ホストは、ポーリング・ルーチンまたは割込ルーチンのどちらかを用いて、アソシエーション・エンジンが終了したことを知らせることができる。
【０５３１】
セクション３．６．３ 命令の流れのアソシエーション・エンジンの詳細アソシエーシ
ョン・エンジンの実行状態の間は、スケーラ・エンジンがベクタ・エンジンに対して命令を発している。この命令（セクション２．５，アソシエーション・エンジン・マイクロコード命令セットの概要を参照）により、多くのさまざまな伝播および集合アルゴリズムを構築することができる。またファジー論理アプリケーションのためのファジー化を実行するという融通もある。本セクションでは、スケーラ・エンジンのマイクロ動作についても説明する。
【０５３２】
スケーラ・エンジン・マイクロコード命令の流れは、図１２３でグラフに示されている。図１２３では、halt, doneおよびdskip 命令が説明されている。
マイクロシーケンサ内には、マイクロコード・プログラム・カウンタＰＣがある。リセット状態から出ると、ＰＣの値はＥＰＰＣレジスタに含まれるアドレスと共にロードされる。ＳＰレジスタにはＥＰＳＰレジスタに含まれるアドレスがロードされる。ＳＰレジスタがロードされると、第１命令がフェッチされる。アソシエーション・エンジンがマイクロコード実行を開始する（指示されたＩＤＲロケーションが空で入力のロードが開始される）と、ＭＭＡ内のマイクロコード命令がアクセスされ実行される。ルーチンが、まだ到着していない入力データ（有効とマークされていないＩＤＲロケーション）を要求した場合は、マイクロシーケンサは有効データがＩＤＲに入るまで休止される。フィードフォワード・ルーチンの終点付近には、dskip 命令があり、これがループを閉じる。dskip 命令を実行すると、ＰＣレジスタにはdskip 命令に含まれるＰＣ値がロードされて、選択されたＧレジスタが１だけ減分される。この流れは、Ｇレジスタが０になるまで続く。この時点でアソシエーション・エンジンは、実行状態を出て（done命令を用いることにより）、前述のように出力状態に入ることができる。
【０５３３】
ＭＭＡにロードされている他のマイクロコード・ルーチンの選択は、アソシエーション・エンジン’から送り返された可能なコマンドにより決定される。フィードフォワード計算とアソシエーション・エンジン’に対する部分シナプス結果の転送の最後に、アソシエーション・エンジン’はアソシエーション・エンジンがどのような行動をとるべきかを示すことができる。アソシエーション・エンジン／アソシエーション・エンジン’コマンド構造においては、アソシエーション・エンジン’はどのルーチンを実行すべきかを示すことができる。これらのルーチンの流れは、フィードフォワード・ルーチンの流れと同じで
ある。ルーチンの終了時には、アソシエーション・エンジンは別のフィードフォワード・サイクルを開始する用意ができている。
【０５３４】
セクション３．６．４ アソシエーション・エンジン例外モデルアソシエーション・エ
ンジンにおこりうる例外には、いくつかのタイプがある。これらはスケーラ命令で対処しなければならないものと、ベクタ命令で対処しなければならないものがある。複数のアソシエーション・エンジンの対話に関わるものもある。本セクションでは、起こりうる種々の例外と、アソシエーション・エンジンがそれにどのように応答するのかを説明する。
【０５３５】
アソシエーション・エンジンは、命令境界においてのみ例外に応答する。この原則に対する例外はポート・エラー例外であり、この場合は例外が検出されるとすぐに命令（write タイプが多い）は終了される。
【０５３６】
例外を検出すると、アソシエーション・エンジンは３つの作業を行う。まずリセット例外の場合を除き、アソシエーション・エンジンは現在のＰＣをスタックに入れる。ＰＣの値は次に実行可能な命令のアドレスとなる。次にアソシエーション・エンジンは例外ポインタ表（セクション２．３．４４参照）にあるベクタ表から例外ベクタを獲得する。最後にアソシエーション・エンジンは、対応する例外ハンドラ内で例外処理を開始する。
【０５３７】
セクション３．６．４．１ リセット例外リセット例外処理は、２つのイベントが検出
された場合に起こる。反転ＲＥＳＥＴラインがアサートされてからネゲートされ、Ｒ／反転Ｓラインはラン・モードになければならない。これらの２つのイベントが起こると、アソシエーション・エンジンはリセット例外処理を開始する。まずアソシエーション・エンジンはＦＬＳレジスタに空とマークをして、記憶されているスタック・ポインタ値がないことを示す。次にアソシエーション・エンジンは、ＥＰＰＣとＥＰＳＰからそれぞれ初期のＰＣ値およびＳＰ値をフェッチして、ＰＣによりアクセスされた最初の命令で実行を開始する。
【０５３８】
セクション３．６．４．２ スケーラ例外スケーラ例外には起こりうる２つの例外があ
る：１）スケーラ・ゼロによる除算と２）算術演算オーバーフローである。いずれのタイプのスケーラ例外も、ＥＭＲ（例外マスク・レジスタ）のＳＤＥＭビットおよびＳＶＥＭビットを用いることによりマスクすることができる。すなわち、例外処理をイネーブルにすることもディスエーブルにすることもできる。スケーラ例外に関しては、ＦＬＳレジスタは用いられない（空であっても）。検出されるとＰＣ値はスタックに入れられ、適当な例外ベクタがフェッチされ、例外ハンドラが実行される。例外ルーチンが終了すると、rte 命令によりアソシエーション・エンジンは通常の命令ストリームに戻る。
【０５３９】
セクション３．６．４．３ ベクタ例外ベクタ例外には起こりうる２つの例外がある：
１）ベクタ・ゼロによる除算と２）算術演算オーバーフローである。いずれのタイプのベクタ例外も、ＥＭＲ（例外マスク・レジスタ）のＶＤＥＭビットおよびＶＶＥＭビットを用いることによりマスクすることができる。すなわち、例外処理をイネーブルにすることもディスエーブルにすることもできる。ベクタ例外は、ＰＥはどれでも例外を起こす可能性がある点でスケーラ例外とは多少異なっている。例外を起こしたＰＥ（またはＰＥ群）を判定するのは例外ハンドラの役割である。ベクタ例外に関しては、ＦＬＳレジスタは用いられない（空であっても）。検出されるとＰＣ値はスタックに入れられ、適当な例外ベクタがフェッチされ、例外ハンドラが実行される。例外ルーチンが終了すると、rte 命令によりアソシエーション・エンジンは通常の命令ストリームに戻る。
【０５４０】
セクション３．６．４．４ ポート・エラー例外ポート・エラー例外は、命令またはタ
ップおよびスイッチ・コンフィギュレーションにより起こることがある。ポート・エラー
例外には４種類ある。ＩＤＲ競合，ポート衝突，ポート挟み込みおよびスイッチ例外である。すべてのアクセスに関して、ポート・エラー例外ハンドラが呼び出される。ポート・エラーが上記の４つの例外の１つによるものであるか否かを判定するのは例外ハンドラの役割である。ＡＰＭＲレジスタおよびＰＣＲレジスタに応答指令信号を送ることにより、ハンドラは例外のタイプを判定する。
【０５４１】
挟み込み例外および衝突例外は、内部write 命令と外部のデータ移動の結果である。これによりスタックに入れられたＰＣ値は、次に実行可能な命令を指示する。競合の場合は、アソシエーション・エンジンは命令を実行中であることも、そうでない場合もある。doneまたはhalt命令中である場合もある。競合はラン・モード中にアソシエーション・エンジンに同時にライトが起こった結果である。そのため、ＰＣ値は有効である場合も有効でない場合もある。競合例外の場合のアソシエーション・エンジンの状態に関わらず、例外ハンドラが呼び出される。rte 命令があると、前の状態が回復される（doneまたはhaltで待機中など）。
【０５４２】
セクション３．６．４．５ 複数ポート割込エラー例外表３．６に、個々の可能なポー
ト・エラー例外をすべて示す。ＰＣＲおよびＡＰＭＲに他のビットの組合せがある場合には、それは複数ポート・エラー例外によるものである。以下の説明では、複数ポート・エラー例外の５つの例を解説する。
【０５４３】
複数ポート・エラーがあるときには、ＰＣＲをＡＰＭＲと共に用いてエラーの原因を判断しなければならない。ポート・エラーは、内部例外状態を発生し、それによってＰＣ値とＳＰ値とがスタック上に押し出され、ポート例外ベクタがＥＰＰＥレジスタにフェッチされる。ポート例外は、ラン・モード動作の間しか起こらない。
【０５４４】
ＰＣＲは制御レジスタであり（現在のタップおよびスイッチ設定値を反映する）、ＡＰＭＲはステータス・レジスタである（アソシエーション・エンジンによる現在のデータ移動を反映する）ことに留意することが重要である。ＡＰＭＲそのものを用いても、ポート例外の原因を判断するには不充分である。
【０５４５】
表３．６を検証する別の方法は、ＡＰＭＲのどのビットがＰＣＲのビットにより処理されるかを示すことである。このリストは、ポート衝突例外がＰＣＲのビット設定値に依存していないので完全ではない。表３．７にＡＰＭＲに関するより詳しい情報がある。
【０５４６】
例＃１：Ｎ−Ｗ ＩＤＲ競合第１の例にはエラー条件が１つ含まれる。表３．８のＰＣ
Ｒ設定値からわかるように、ノース・ポートおよびウェスト・ポートのタップ・ビットは閉じられており（接続されている）、データはノース・ポートとウェスト・ポートの両方に同時に書き込まれる。これがＩＤＲリソースに対する競合を起こし（両方が同時にＩＤＲに書き込もうとしている）、アソシエーション・エンジンは例外状態に入る。図１２４は例＃１のデータの動きを示す。
【０５４７】
例＃２：Ｎ−Ｗ ＩＤＲ競合／Ｅポート挟み込みこの例には２つの異なるエラー条件が
あり、図１２５に示される。表３．９は例＃２のアクティブ・ビットを示す。前と同様に、ノースおよびウェスト・タップ・ビットがセットされ、イースト−ウェスト・スイッチがセットされている。ノース・ポートとウェスト・ポートの両方に対する外部ライトにより、Ｎ−ＷＩＤＲ競合例外が起こる。Ｅ−Ｗスイッチが閉じられているので、ウェスト・ポートに対する外部ライトとマイクロコードにより起動されたイースト・ポートへのライトがＥポート挟み込み例外を起こす。
【０５４８】
例＃３：Ｎ−Ｗ ＩＤＲ競合／Ｅスイッチ衝突この例（図１２６および表３．１０参照
）では、ノースのタップ・ビットがセットされ、イースト−ウェスト・スイッチがセットされている。データは、ウェスト，ノースおよびイーストのポートに同時に書き込まれる。前述の例と同様に、ノースおよびウェストのタップ・ビットがセットされている場合は、ノース・ポートおよびウェスト・ポートに対する同時ライトによりＩＤＲ競合例外が起こる。イースト−ウェスト・スイッチは閉じているので、イースト・ポートおよびウェスト・ポートに対する同時ライトによりイースト−ウェスト・スイッチ競合が起こる。
【０５４９】
例＃４：Ｅポート挟み込み／Ｅポート衝突／Ｅ−Ｗスイッチ競合この例（図１２７および表３．１１参照）では、イースト−ウェスト・スイッチがセットされている。外部データは、イースト・ポートからのデータのマイクロコードにより起動されたライトと同時に、ウェストおよびイーストのポートに同時に入る。スイッチは閉じているので、外部ウェスト・ポート・ライトは内部イースト・ポート・ライトと組み合わされて、イースト・ポート挟み込み例外を起こす。内部イースト・ポート・ライトは外部イースト・ポート・ライトと組み合わされて、イースト・ポート衝突例外を起こす。最後にイースト−ウェスト・スイッチが閉じられて、（外部）イースト・ポートおよびウェスト・ポート・ライトがイースト−ウェスト・スイッチ競合例外を起こす。
【０５５０】
例＃５：Ｎ−Ｗ ＩＤＲ競合／Ｅポート挟み込み／Ｅポート衝突／Ｅ−Ｗスイッチ競合
この最後の例（図１２８および表３．１２参照）では、イースト−ウェスト・スイッチがセットされ、ノースとウェストのタップ・ビットもセットされている。データはイースト・ポートから、内部生成されたライトにより書き出される。同時に、データはノース，イーストおよびウェスト・ポートに書き込まれる。スイッチは閉じているので、内部イースト・ポート・ライトと外部ウェスト・ポート・ライトとが、挟み込み例外を起こす。内部イースト・ポート・ライトと外部イースト・ポート・ライトとが、イースト・ポート衝突を起こす。イースト−ウェスト・スイッチと同時に外部イースト・ポートおよびウェスト・ポートがセットされて、イースト−ウェスト・スイッチ衝突例外を起こす。ノース・ポートおよびウェスト・ポートの同時外部ライトが、ノースおよびウェスト・タップ・ビットのセットによりＮ−Ｗ ＩＤＲ衝突例外を起こす。
【０５５１】
セクション３．６．５ マイクロコード・プログラム構造本セクションでは、いくつか
のマイクロコード・プログラム・セグメントの構造を説明する。第１ルーチンは、内部レジスタの初期化を示し、次にアソシエーション・エンジン・ブロック内のすべてのニューロンおよびシナプスに関するシナプス関数を計算するためのルーピング・セクションへの移行を示す。第２ルーチンは、アソシエーション・エンジンにより設けられる内部ルーピング機能の例を示す。第３セグメントは、２つのアソシエーション・エンジン間での信号機伝達のメカニズムを示し解説する。第４ルーチン・セグメントは、ベクタ・エンジン内の条件付き実行のメカニズムを示し解説する。最後の例は、削減された浮動小数点ルーチンがどのように構築されるかを説明するコード・セグメントである。
【０５５２】
セクション３．６．５．１ 初期化とルーピング第１ルーチンの例は、ＩＤＲにロード
された入力と、ＣＭＡアレイにロードされた係数に関する単純な積の和関数である。図１２９を参照のこと。ルーチンが始まると、命令を用いてＰ［０］およびＰ［１］ポインタを初期化して、Ｇ［０］レジスタをロードする。これらの命令は、一度しか実行されない点に注意すること。これは、repeat命令がＰＣループ開始，ＰＣ終了およびカウント値（ＲＢＲ，ＲＥＲ，ＲＣＲ値）のループを初期化するからである。このメカニズムにより、マイクロコード・ルーチンに初期化セクションとルーピング・セクションとができる。
【０５５３】
ループには、積の和関数を実行するために用いられる命令が含まれる。第１命令は現在選択されている係数をＣＭＡからＶ０レジスタに移動させる。次に現在の入力値とＶ０値との乗算が実行される（Ｐポインタは、どの値を用いるかを選択し、＋＋ノーテイション
によりポインタ・レジスタの内容は命令の最後で増分されることに留意）。次の命令が積の最下位バイト（Ｖ１の）をＶ３レジスタに加える。次の命令は、レジスタＶ０の最上位バイトを前回の加算からのキャリーのあるＶ２レジスタに加える。最後のadd 命令の最後で、ＰＣはＲＥＲレジスタの内容と等しくなる。この条件で、ＲＣＲレジスタは減分され、０に関してテストされる。結果が０でない場合は、ＲＢＲレジスタの内容がＰＣに転送され、ループは続く。最後にＲＣＲカウンタが０になり、実行はdone命令に入る。このときアソシエーション・エンジンは実行状態から出力状態に移行する。
【０５５４】
セクション３．６．５．２ 複数ループ第２ルーチンは、Ｇレジスタにより与えられる
内部ルーピング機能を示す命令セグメントを示す。図１３０は、二重ルーピング・コード・セグメントを示すプログラムを図示する。コード・セグメントの最初に、一般オペコードが実行される（例を行うだけのもの）。この時点で外ループが実行され、新しいループ・カウントがＧ０レジスタにロードされる。内ループは、Ｇ１カウンタが０になるまで実行される。このとき、内部レジスタ（ＲＢＲ，ＲＥＲ，ＲＣＲ）を用いて、いつ内ループが終息するかを判断する。ループは、外ループのカウントが０になり、done命令が実行されるまで外ループdskip 命令と共に続く。dskip 命令は、選択されたＧレジスタを減分し、Ｇレジスタで０地に関してテストする。このスタイルを用いて、複数のループを形成することができる。repeat命令は、１レベルしかないことに留意されたい（ＲＢＲ，ＲＥＲ，ＲＣＲレジスタのコピーは１つしかないため）。
【０５５５】
セクション３．６．５．３ ２つのアソシエーション・エンジン間での信号機伝達本セ
クションは、２つ（またはそれ以上）のアソシエーション・エンジン間での信号機の使用法を示すコード・セグメントを説明する。基本的なメカニズムは、ＩＤＲ内の有効ビットを用いて正しい時刻まで命令の実行を遅らせることである。この場合は、伝達されるデータは実行すべき別のルーチンのアドレスである。この時点でアソシエーション・エンジンは、実行すべきコードがＩＤＲレジスタの有効ビットをクリアすべきであるという別のデバイスからの信号機を必要とする。マイクロコードは、書き込まれるＩＤＲロケーションにアクセスする。別のアソシエーション・エンジンがwrite マイクロコード命令をＩＤＲレジスタに対して実行すると、待機中のアソシエーション・エンジンは別の形の行動を起こす。図１３１にこのようなルーチン・セグメントを示す。
【０５５６】
セクション３．６．５．４ 条件付き実行条件付き命令の背後にある基本的な考え方は
、処理マスク・ビットＶＴのクリア（またはセット）である。処理要素（ＰＥ）内でマイクロコード命令の動作を制御するのはこのビットである。以下の例では、８個のベクタ・レジスタのうち４個がテストされ、このテストに基づいて所定の処理要素が命令を実行し、他のものは実行しない。表３．１３の状態情報は、図８７の状態番号を指す。この例では、すべてのＰＥはＶＴ＝１，ＶＨ＝０で始まると想定している。最初の２つのオペコード（オペコード１およびオペコード２）は、すべてのＰＥにより実行される。vifeq Ｖ０，Ｖ４命令により、ＶＴビットはＰＥ２，ＰＥ３およびＰＥ４内でクリアされる。これにより、オペコード３はＰＥ１でしか実行されない。次のvelse 命令により、オペコード４はＰＥ２，ＰＥ３およびＰＥ４により実行される。vifeq Ｖ１，Ｖ４は、ＰＥ２のＶＴビットをセットされたままにして、ＰＥ３とＰＥ４のＶＴビットをクリアする。ＰＥ１は命令を実行する可能なＰＥリストから外れていることに留意すること。この行動により、オペコード５はＰＥ２で実行される。次のvelse 命令によりＰＥ３およびＰＥ４がオペコード６を実行する。vifeq Ｖ２，Ｖ４命令はＰＥ３のＶＴビットをセットして、ＰＥ４のＶＴビットをクリアする。これによりオペコード７は、ＰＥ３でしか実行されない。velse 命令によりＰＥ４がオペコード８命令を実行する。最後にvendif命令がすべてのＰＥをvif 前の状態に戻し、ＰＥ１，ＰＥ２，ＰＥ３およびＰＥ４がオペコード９を実行する。これが、vif-velse-vif-velse-vendifタイプの構造を実行する基本的なメカニズムである。表３．１４は、処理要素レジスタの内容を示す。
【０５５７】
セクション３．７ マイクロコードにより開始されたポート・ライト動作アソシエーシ
ョン・エンジンがラン・モードにいるときは、制御側のホストとアソシエーション・エンジン’などの他のシステム・コンポーネントの両方に関して効率よく並行に情報を転送することを促進する４つの等しいポートがある。アソシエーション・エンジンは、ポートを用いることにより複数のアソシエーション・エンジンを接続させて協調して機能するように設計されている。複数のアソシエーション・エンジンを接続するには、外部論理は必要ない。例については、セクション３．８，アソシエーション・エンジン・バス・コンフィギュレーションを参照のこと。
【０５５８】
ポートは、アソシエーション・エンジンが部分シナプス結果をアソシエーション・エンジン’に転送して合計できるようにする簡単なメカニズムとなるように設計されている。この転送は本来ストリームのようであり、データの量はアソシエーション・エンジンのプログラマにより制御することができる。ラン・モードでは、すべての転送がホストからの同様のストリーム転送であることに注意すること。転送されるデータの量は、命令（バイトに関するスケーラ・ライト転送）またはスケーラ・レジスタの内容により制御される（たとえばベクタ・ライトはＰＥ（０）で始まりＰＥ（Ｐｎ）で終る）。
【０５５９】
データ転送の方向は、いつもライト動作であり、write マイクロコード命令により制御される。Ｅ／Ｗバスの情報の流れは、次のようになる。スケーラ・エンジンが計算状態を出ると、各デバイスはアソシエーション・エンジン４’デバイスにデータを送ろうとする。アソシエーション・エンジン０については、vwrite命令が無条件に実行される。一方、アソシエーション・エンジン１デバイスは、アソシエーション・エンジン０を待たねばならない（同様にアソシエーション・エンジン２とアソシエーション・エンジン３も）。このメカニズムにより、アソシエーション・エンジン’デバイスをもつ行の上にあるいくつかのアソシエーション・エンジンの間で、データ移動の調整が行われる。このモニタ・メカニズムは、セクション３．６．５．３，２つのアソシエーション・エンジン間での信号機伝達で述べられた信号機伝達の例と非常に似ている。データ伝達はイースト−ウェストの転送だけに限られないことに注意すること。ラン・モード中は、データは４つの方向のいずれにも転送することができる。
【０５６０】
未使用のニューロンをもつシステム（部分的に用いられているアソシエーション・エンジン）では、ユーザは未使用のロケーションの値を管理して、それらがニューラル・ネットワークの正常な動作と矛盾しないようにすることが求められる。
【０５６１】
チェーン内の最後のアソシエーション・エンジンがアソシエーション・エンジン’にデータを転送するのを終了すると（アソシエーション・エンジン’は、対応するアソシエーション・エンジンがいくつあるかを知っていなければならない）、アソシエーション・エンジンの出力位相は完了する。このとき、アソシエーション・エンジン’は、とるべき行動を示すことができる。アソシエーション・エンジン／アソシエーション・エンジン’システムは、アソシエーション・エンジン’がコマンドおよびデータ情報を必要に応じてアソシエーション・エンジンに戻すことができる通信プロトコルをもっていなければならない。
【０５６２】
セクション３．８ アソシエーション・エンジン・バス・コンフィギュレーション本セ
クションでは、さまざまなバス・コンフィギュレーションでアソシエーション・エンジンを用いることができるようにするバス・スイッチおよびタップ構造の背後にある考え方を説明する。本セクションでは、さらに、アソシエーション・エンジン・ポート機能で可能な種々のバス・コンフィギュレーションについても説明する。
【０５６３】
セクション３．８．１ アソシエーション・エンジン・ポート・スイッチおよびタップ
アソシエーション・エンジンは、あるポートに提示されたデータを別のポートに（１クロック・サイクルの遅延で）伝えることのできる汎用性のあるポート・スイッチおよびタップ・メカニズムをもっている。ポート・スイッチは、アソシエーション・エンジン・ポート制御レジスタ（ＰＣＲ）のＮＳＳビットおよびＥＷＳビットにより制御される。タップ・ビットも、このレジスタで制御される。タップ制御関数により、あるポートに提示されているデータをチップ内のＩＤＲレジスタにロードすることができる。これにより、アソシエーション・エンジンには、単純にデータを伝えたり、スヌープまたは捕捉中にデータを伝える能力が与えられる。ＩＤＲをロードするにはラン・モード・ローディング・メカニズムが用いられることに留意されたい。詳細については、セクション２．３．６，ポート制御レジスタ（ＰＣＲ）を参照のこと。図１３２は、この機能をシンボリックに表したものである。
【０５６４】
セクション３．８．２ バス・ポート衝突およびエラー起こりうる状況としては、一般
に３つのタイプがある。これらの状況のあるものは致命的と見なされ、スケーラ・エンジンおよびベクタ・エンジンは例外処理を行う。この状況を示すステータスに関してはセクション２．３．７，アソシエーション・エンジン・ポート・モニタ・レジスタ（ＡＰＭＲ）を、ポート・エラーに関する例外処理の詳細についてはセクション３．６．４．４，ポート・エラー例外を参照のこと。
【０５６５】
セクション３．８．２．１ アソシエーション・エンジン衝突条件外部動作（アソシエ
ーション・エンジンに書き込む）が内部ライト動作と衝突すると衝突が起こる。制御ライン（反転ｘＣＩおよび反転ｘＣＯ）のタイミングのおかげで、電気的な損傷が起こる前に条件を検出するための充分な時間がある。
【０５６６】
セクション３．８．２．２ アソシエーション・エンジン競合条件競合は、特定のアソ
シエーション・エンジン内部のスイッチおよびタップの設定値により起こる。２つの外部アクセスが１つのアソシエーション・エンジンに対して行われると競合が起こる。ラン・モードでは、すべての動作のデスティネーションはＩＤＲであるので、外部ライト動作を２つ行うとＩＤＲに関して競合することに留意されたい。
【０５６７】
セクション３．８．２．３ アソシエーション・エンジン挟み込み挟み込み条件は、移
動中のデータ（閉じたスイッチを通る）が、write 命令から来たデータに挟まれた状態である。複数のアソシエーション・エンジンがデータ転送に関して同期状態から抜けたときにこの状況が起こる。
【０５６８】
セクション３．８．２．４ アソシエーション・エンジン・スイッチ競合接続スイッチ
が閉じられるのと同時に対向ポートに書き込まれると、スイッチ競合が起こる。
セクション３．８．３ アソシエーション・エンジン・リング・コンフィギュレーショ
ンこのリング・コンフィギュレーションでは、２つのポートを用いてアソシエーション・エンジン群をリング・コンフィギュレーションに接続する。図１３３に詳細を示す。
【０５６９】
リング・コンフィギュレーションでは、ポート・スイッチを用いて、リングの異なる部分を分離して、システムの並行度を増やすことができる。スイッチおよびタップ制御は、ホストによってもマイクロコード・プログラムによっても変更することができることに留意されたい。リング・コンフィギュレーションにより、再コンフィギュレーション機能がもたらされる。リング構造においては、ネットワークが時間と共に変化するように、マイクロコードとホストとを構築することができる。このようなダイナミックな再コンフィギュレーション機能がこの構造の主な特徴である。リングへのデータは、ノース・ポートまたはサウス・ポートにより供給することもできる。
【０５７０】
図１３４に、１つの可能なリング・コンフィギュレーションを示す。この例では、フィードフォワード・ネットワークに接続された６機のアソシエーション・エンジン・デバイスがある。アソシエーション・エンジン０ないしアソシエーション・エンジン２が第１レイヤであり、アソシエーション・エンジン３ないしアソシエーション・エンジン５が第２レイヤとなっている。この例からわかるように、計算およびデータの転送に関してかなりの並行度が可能である。プロセスの計算および集合位相については、第１レイヤが時刻ｎ＋１の入力サンプルを処理して、一方で第２レイヤ（アソシエーション・エンジン３ないしアソシエーション・エンジン５）が時刻ｎに関する結果を計算することができる。同様にデータの転送に関しては、アソシエーション・エンジン５が時刻ｎから結果を出力して、アソシエーション・エンジン２が時刻ｎ＋１のデータを転送し、ホストが時刻ｎ＋２の新しい入力フレームを入力することができる。図１３４に示された例では、スイッチおよびタップ設定値によりレイヤの分割が可能で、タップ設定値はスイッチ内でデータがどのように流れるか（またはどのデバイスがデータを受け取っているのか）を示す。
【０５７１】
セクション３．８．４ 二次元アソシエーション・エンジン・コンフィギュレーション
アソシエーション・エンジンは二次元相互接続用に設計された。４つのポートがあるので１機のアソシエーション・エンジンを隣のアソシエーション・エンジンに相互接続することは、前述のリング構造と同様である。これによりアレイに提示されたアプリケーションにより、行に関しても列に関しても再コンフィギュレーションが可能である。図１３５は、アソシエーション・エンジン群の小さな二次元アレイを図示している。
【０５７２】
セクション４ アソシエーション・エンジン・バス動作
本セクションでは、アソシエーション・エンジンのノース，イースト，サウスおよびウェスト・ポートのタイミングの関係を説明する。本セクションは３つの部分に分かれている。第１部は、アソシエーション・エンジン・ホスト・アクセスに特有のタイミング（すなわちランダム・アクセス・タイミングおよびストリーム・アクセス・タイミング）を扱う。本セクションの第２部は、write 命令に応答するマスタ・デバイスとしてのアソシエーション・エンジンに特有のタイミングを扱う。（このwritesのデスティネーションは常に、受信デバイスのＩＤＲレジスタである点に留意）。第３部は、done（および反転ＢＵＳＹ），Ｒ／反転Ｓ，反転ＩＮＴＲ，反転ＲＥＳＥＴなどのその他のタイミングと１１４９．１テスト・ポート・タイミングとを扱う。表４．１は、タイミング図の一覧表である。
【０５７３】
セクション４．１ アソシエーション・エンジン・ポート・タイミングアソシエーショ
ン・エンジン・ポートは、ホストとアソシエーション・エンジン・サブシステムとの間の主要なインターフェースを構成する。これらのポートを通じてすべての初期化情報およびデータが伝えられる。アソシエーション・エンジン・ポートは完全に同期しており、ＣＬＫ信号を用いてアソシエーション・エンジンとホスト・システムとの間の転送をクロックする。ポートの動作は、Ｒ／反転Ｓ制御ラインに依存する。アソシエーション・エンジンが実行するアクセスのタイプ（ホストまたはアソシエーション・エンジン・マスタ）を決めるのは、このラインである。Ｒ／反転Ｓが論理１のとき、アソシエーション・エンジンはラン・モードにあり、Ｒ／反転Ｓ信号が論理０であれば、アソシエーション・エンジンはストップ・モードにある。ラン・モードはアソシエーション・エンジンのマイクロプログラム実行のためのもので、ストップ・モードはホスト・アクセスのためのものである。各アソシエーション・エンジン・ポートは、８ビット幅で、ランダム・アクセス・モードおよびストリーム・アクセス・モードの動作に対応する。特定の動作に関しては、複数のポートがアソシエーション・エンジンに対するアクセス／アソシエーション・エンジンからのアクセスに加わる。
【０５７４】
ポート信号とＣＬＫ信号との一般的な関係は、ポートに対する入力信号および双方向入力信号のすべてが、ＣＬＫ信号の立ち上がり端で内部ラッチされるというものである。逆にすべての出力と双方向出力とは、ＣＬＫの立ち下がり端でイネーブルになる。
【０５７５】
アソシエーション・エンジンとホストとの間のデータの転送には、次の信号が関わる：・データ・バスｘＤ［７：０］
・制御信号（反転ｘＣＩ，反転ｘＣＯ，Ｒ／反転Ｗ，ＯＰ，反転ＥＮ，反転ＣＯＬ，反転ＲＯＷ）
アソシエーション・エンジンがストップ・モードにあるときは、すべての制御信号は一方向であり、データｘＤ［７：０］信号は双方向である。ホストは、簡単なハンドシェーク・プロトコルを利用する制御信号を発することによりアソシエーション・エンジンへ、あるいはアソシエーション・エンジンからデータを移動させて、正確なデータ移動を行う。Ｒ／反転ＷおよびＯＰラインは、どのタイプの動作が実行されるかを制御し、反転ＥＮ，反転ＲＯＷおよび反転ＣＯＬ信号は、デバイス選択およびデータ経路決定制御として機能する。反転ｘＣＩおよび反転ｘＣＯラインは、アクティブになると、有効データがデータ・ライン上にあることを示す。
【０５７６】
アソシエーション・エンジンがラン・モードにある場合は、制御信号反転ＥＮ，ＯＰおよびＲ／反転Ｗは「無視される」。反転ｘＣＩおよび反転ｘＣＯラインが、ストップ・モードと同じ関数を実行する。信号反転ＲＯＷおよび反転ＣＯＬは今度は双方向になり、max およびmin 命令に関与する。ライト動作のみが許される（データはアソシエーション・エンジン・マスタから流れる）。データ転送は、write 命令の制御下で行われる。マイクロプログラムの制御下で、write 命令が発され、これによりアソシエーション・エンジン・ポートから隣のアソシエーション・エンジン・デバイスのＩＤＲにデータが転送される。タップおよびスイッチ設定値により、書き込まれたデータは隣のデバイスを通過するか、あるいは隣のデバイスに入る。
【０５７７】
アソシエーション・エンジン・デバイスは、二次元アレイで機能するように設計されている。以下の説明については、図１３６を参照のこと。ランダム・モード・アクセスの場合は、アドレス情報はアレイのノース側およびウェスト側から、反転ＲＯＷ信号および反転ＣＯＬ信号が両方ともアクティブになっているデバイスに流れる。反転ＲＯＷまたは反転ＣＯＬのどちらかがアクティブになっている（両方ではない）デバイスは、アドレス／データ移動には加わるが、それ自身でデータを供給することはない。アクセスされたデータは、サウス端へ流れるか、あるいはサウス端から選択されたデバイス（反転ＲＯＷと反転ＣＯＬの両方がアクティブ）に流れる。
【０５７８】
ストリーム・アクセスの場合は、データはサウス端またはイースト端の一方から（両方ではない）流れることができる。この場合は、ストリーミングの行く先または元として列または行が選択される。ストリーム動作の場合は、アドレスが必要ない（内部で生成される）ので、データは選択されたデバイスにあるいはそのデバイスから流れ、アレイのサウス側またはイースト側に進む。
【０５７９】
以下のパラグラフは、ホストとアソシエーション・エンジン・バス・サイクルの両方に関して、ランダム・モードおよびストリーム・モードの動作のバス・サイクルを説明している。以下のパラグラフで用いられるノーテイションの説明については、セクション１．３，表記法を参照のこと。
【０５８０】
セクション４．１．１ ホスト・ランダム・アクセス図１３７は、ホスト・ランダム・
アクセス・モードのリードおよびライト動作のタイミングを示す。ランダム・アクセスについては、アドレス情報はノース・ポートおよびウェスト・ポートからアソシエーション
・エンジンに流れ、データはサウス・ポートに流れるか、あるいはサウス・ポートから流れる。以下の流れは、起こる動作のシーケンスを説明している（ＯＰ＝＝１）。
【０５８１】
クロック・サイクル２Ｒ／反転Ｗ，反転ＲＯＷ，反転ＣＯＬ，ＯＰおよび反転ＥＮ信号がアサートされて、ランダム・アクセス・リードが起こることを示す。反転ＷＣＩおよび反転ＮＣＩ信号がアサートされて、アドレス情報が次のクロック・サイクルに現れることを示す。
【０５８２】
クロック・サイクル３サイクルの最初で、前述の制御信号が内部ラッチされ解読されて、ノース・ポートおよびウェスト・ポートに入ったアドレス情報のラッチングをイネーブルにする。また、反転ＳＣＯが出されて、次のクロック・サイクルでデータがイネーブルになることを示す。
【０５８３】
クロック・サイクル４クロック・サイクルの最初で、アドレスが内部ラッチされ、ロケーションがアクセスされるので、読まれたデータはＣＬＫ信号の立ち下がり端で出される。また、反転ＳＣＯ信号は、ＣＬＫ信号の立ち下がり端でネゲートされる。
【０５８４】
クロック・サイクル５ＣＬＫ信号の立ち下がり端で、ＳＤ信号から出されたデータが３状態になる。
クロック・サイクル６ポートは非アクティブである。
【０５８５】
クロック・サイクル７Ｒ／反転Ｗ，反転ＲＯＷ，反転ＣＯＬ，ＯＰおよび反転ＥＮ信号がアサートされて、ホスト・ランダム・アクセス・ライトが起こることを示す。反転ＷＣＩおよび反転ＮＣＩ信号がアサートされ、アドレス情報が次のクロック・サイクルに現れることを示す。
【０５８６】
クロック・サイクル８サイクルの最初で、前述の制御信号が内部ラッチされ解読されて、ノース・ポートおよびウェスト・ポートに入ったアドレス情報のラッチングをイネーブルにする。また、反転ＳＣＯがアサートされて、次のクロック・サイクルでデータが有効になることを示す。
【０５８７】
クロック・サイクル９クロック・サイクルの最初で、アドレスおよび反転ＳＣＩ情報が内部ラッチされ、ロケーションがアクセスされるので、書き込まれたデータはＣＬＫ信号の立ち下がり端でラッチされる。
【０５８８】
クロック・サイクル１０ＣＬＫ信号の立ち下がり端で、ＳＤ信号からに入ったデータが３状態になる。
セクション４．１．２ ホスト・ランダム・アドレス転送ウェストからイーストへ図１
３８は、ホスト・ランダム・アクセス・モード・アドレス転送のタイミングを示す。このタイプの転送は、アクセスされているデバイスが選択されたデバイスと同じ行を共有するときに起こる。ランダム・アクセスに関しては、アドレス情報はノース・ポートおよびウェスト・ポートからアソシエーション・エンジンに流れ込み、データはサウス・ポートから出入りすることに留意されたい。以下の流れは、起こる動作のシーケンスを説明する（ＯＰ＝＝１）。
【０５８９】
クロック・サイクル３反転ＲＯＷ，ＯＰおよび反転ＥＮ信号がアサートされて、ランダム・アクセス・モード転送が起こることを示す。このデバイスについては、反転ＣＯＬ信号は非アクティブである。アドレスＡ１がＷＤライン上に入れられ、ＣＬＫ信号の次の立ち上がり端でラッチされる。このアドレスのソースは、別のアソシエーション・エンジン・デバイス（アレイ内部の）でも、アドレス情報をアソシエーション・エンジン・エッジ
・デバイスに送っているホストでもよい。反転ＷＣＩ信号がアサートされて、アドレス情報が次のクロック・サイクルに現れることを示す。
【０５９０】
クロック・サイクル４サイクルの最初で、前述の制御信号が内部ラッチされ解読されて、ウェスト・ポートに入ったアドレス情報のラッチングをイネーブルにする。また、反転ＥＣＯが出されて、次のクロック・サイクルでデータがイネーブルになることを示す。
【０５９１】
クロック・サイクル５サイクルの最初でラッチされたアドレス情報が、ＣＬＫ信号の立ち下がり端でＥＤ信号上に排出される。
クロック・サイクル６サイクルの最初でラッチされたアドレス情報が、ＣＬＫ信号の立ち下がり端でＥＤ信号上に出される。反転ＷＣＩ入力がネゲートされて、ＷＤ上のアドレス情報はもう有効でないことを示す。
【０５９２】
クロック・サイクル７制御信号反転ＲＯＷ，反転ＥＮおよびアドレス情報ＷＤがネゲートされて、次のサイクルが転送の最後のサイクルになることを示す。制御信号反転ＥＣＯは、前のサイクルでネゲートする反転ＷＣＩ信号に応答してネゲートする。
【０５９３】
クロック・サイクル８ＣＬＫ信号の立ち下がり端で、ＥＤ信号から出されたデータが３状態になる。
セクション４．１．３ ホスト・ランダム・アクセスおよびデータ転送ノースとサウス
図１３９は、ホスト・ランダム・アクセス・モード転送の２つのケースのタイミングを示す。最初のケース（クロック・サイクル２ないし６）は、デバイスが選択されたデバイスと同じ列を共有する場合である。このときは、アドレス情報はノース・ポートからサウス・ポートに向かって下向きに流れる。第２のケース（クロック・サイクル７ないし１１）でも、デバイスは同じ列を共有するが、データは上向きまたは下向きに伝えられる。アソシエーション・エンジン・デバイスに関する限り、伝えられる情報のタイプ（アドレスまたはデータ）と方向は、反転ＮＣＩまたは反転ＳＣＩ信号により純粋に決められる。 以
下の流れは、起こる動作のシーケンスを示す（ＯＰ＝＝１）。
【０５９４】
クロック・サイクル２反転ＣＯＬ，ＯＰおよび反転ＥＮ信号がアサートされて、ランダム・アクセス・モード転送が起こることを示す。このデバイスについては、反転ＲＯＷ信号は非アクティブである。アドレスＡ０がＮＤライン上に入れられ、ＣＬＫ信号の次の立ち上がり端でラッチされる。このアドレスのソースは、別のアソシエーション・エンジン・デバイス（アレイ内部の）でも、アドレス情報をアソシエーション・エンジン・エッジ・デバイスを駆動しているホストでもよい。反転ＮＣＩ信号がアサートされて、アドレス情報が次のクロック・サイクルに現れることを示す。
【０５９５】
クロック・サイクル３サイクルの最初で、前述の制御信号が内部ラッチされ解読されて、ノース・ポートに入ったアドレス情報のラッチングをイネーブルにする。また、反転ＳＣＯが出されて、次のクロック・サイクルでデータがイネーブルになることを示す。
【０５９６】
クロック・サイクル４サイクルの最初でラッチされたアドレス情報が、ＣＬＫ信号の立ち下がり端でＳＤ信号上に出される。反転ＮＣＩ入力がネゲートされて、ＮＤのアドレス情報がもう有効でないことを示す。
【０５９７】
クロック・サイクル５制御信号反転ＲＯＷ，反転ＥＮおよびアドレス情報ＮＤがネゲートされて、次のサイクルが転送の最後のサイクルになることを示す。制御信号反転ＳＣＯは、前のサイクルでネゲートする反転ＮＣＩ信号に応答してネゲートする。
【０５９８】
クロック・サイクル６ＣＬＫ信号の立ち下がり端で、ＳＤ信号から出されたデータが３
状態になる。
以下の説明では、データは上向きに流れるものとして説明される（ライト動作）。リード動作に関しては、データ・リードのタイミングは、クロック・サイクル２ないし６で説明されたアドレス・タイミングと同じである。
【０５９９】
クロック・サイクル７反転ＣＯＬ，ＯＰおよび反転ＥＮ信号がアサートされて、ランダム・アクセス・モード転送が起こることを示す。このデバイスについては、反転ＲＯＷ信号は非アクティブである。データＤ１がＳＤライン上に入れられ、ＣＬＫ信号の次の立ち上がり端でラッチされる。このデータのソースは、別のアソシエーション・エンジン・デバイス（アレイ内部の）でも、アドレス情報をアソシエーション・エンジン・エッジ・デバイスを駆動しているホストでもよい。反転ＳＣＩ信号がアサートされて、アドレス情報が次のクロック・サイクルに現れることを示す。
【０６００】
クロック・サイクル８サイクルの最初で、前述の制御信号が内部ラッチされ解読されて、サウス・ポートに入ったアドレス情報のラッチングをイネーブルにする。また、反転ＮＣＯが出されて、次のクロック・サイクルでデータがイネーブルになることを示す。
【０６０１】
クロック・サイクル９サイクルの最初でラッチされたアドレス情報が、ＣＬＫ信号の立ち下がり端でＮＤ信号上に出される。反転ＳＣＩ入力がネゲートされて、ＮＤのアドレス情報がもう有効でないことを示す。
【０６０２】
クロック・サイクル１０制御信号反転ＲＯＷ，反転ＥＮおよびデータ情報ＳＤがネゲートされて、次のサイクルが転送の最後のサイクルになることを示す。制御信号反転ＮＣＯは、前のサイクルでネゲートする反転ＳＣＩ信号に応答してネゲートする。
【０６０３】
クロック・サイクル１１ＣＬＫ信号の立ち下がり端で、ＮＤ信号から出されたデータが３状態になる。
セクション４．１．４ 早期終了のあるホスト・ランダム・アドレス／データ転送ノー
ス／サウス図１４０は、セクション４．１．３，ホスト・ランダム・アドレスおよびデータ転送ノースとサウスに説明された２つのケースのタイミングを示す。ここでの違いは、反転ＥＮを用いて転送を早く終らせることである。前のケースは、反転ＥＮの時間がもっと長かった。この差の理由は、アソシエーション・エンジンのアレイにとってアドレスとデータの２つのコンポーネントを選択されたデバイス（反転ＲＯＷおよび反転ＣＯＬがアサート）で収束させるのにかかる時間が長くなることがあるためである。外部制御ハードウェアの複雑さにより、反転ＥＮドライバ論理にさらに機能を追加することにより、ボードはアクセス時間（アレイに対する）を節約することができる。簡単なケースは、すべてのアクセスを最悪の場合の時間に合わせることである。この時間は、アソシエーション・エンジン・アレイの最も右側にあるデバイスにアクセスする時間となる。以下に、図１３９と図１４０の差を説明する。
【０６０４】
クロック・サイクル４サイクルの最初でラッチされたアドレス情報が、ＣＬＫ信号の立ち下がり端でＳＤ信号上に出される。反転ＮＣＩ入力がネゲートされて、ＮＤのアドレス情報がもう有効でないことを示す。制御信号反転ＲＯＷ，反転ＥＮおよびアドレス情報ＮＤがネゲートされて、次のサイクルが転送の最後のサイクルになることを示す。
【０６０５】
クロック・サイクル５制御信号反転ＳＣＯは、前のサイクルでネゲートする反転ＮＣＩ信号に応答してネゲートする。ＣＬＫ信号の立ち下がり端で、ＳＤ信号から出されたデータが３状態になる。
【０６０６】
クロック・サイクル９サイクルの最初でラッチされたデータ情報が、ＣＬＫ信号の立ち
下がり端でＮＤ信号上に出される。反転ＳＣＩ入力がネゲートされて、ＳＤのアドレス情報がもう有効でないことを示す。制御信号反転ＲＯＷ，反転ＥＮがネゲートされて、次のサイクルが転送の最後のサイクルになることを示す。
【０６０７】
クロック・サイクル１０ＳＤ上のデータ情報と制御信号反転ＮＣＯは、前のサイクルでネゲートする反転ＳＣＩ信号に応答してネゲートする。ＣＬＫ信号の立ち下がり端で、ＮＤ信号から排出されたデータが３状態になる。
【０６０８】
セクション４．１．５ ホスト・ストリーム・リード図１４１は、ホスト・ストリーム
・アクセス・モード・リードのタイミングを示す。ストリーム・リード転送は、反転ＲＯＷおよび反転ＣＯＬ信号の両方がアサートされているデバイスのチェーンから、データを取り込む。以下のケースでは、２つのデバイスが同じ反転ＲＯＷ信号を共有している。「終了」デバイスは、アソシエーション・エンジン・アレイの端部であるとする。ストリーム・アクセスを開始するために、端部にあるデバイス（デバイス＃１）は、反転ＥＮ信号がアサートしたときにウェスト・ポート・ストリーム制御入力反転ＷＣＩをアサートすることが求められる。これにより、特定のアソシエーション・エンジンに対して、ストリーミングのラインの最初のものであることを知らせる。
【０６０９】
アソシエーション・エンジン・デバイスは、ストリーミングの方向を制御するための内部制御レジスタ・ビットＨＳＳＲ：ＨＳＰ［１：０］をもっている。ストリーミングは、サウス（ＨＳＰ［１：０］＝０１）またはイースト（ＨＳＰ［１：０］＝１０）ポートを通じて起こるが、両方を用いることはない。以下に説明される流れでは、２機のアソシエーション・エンジンのそれぞれが２バイトの情報をストリーミングするものとする（すなわちＤＣＲ１＝０２）。議論を簡単にするために、この説明の信号には上付き文字をつける。これは、どのデバイスがその信号に関係するかを示すためのものである。たとえば、＼Ｘ＼ＴＯ（ＷＣＩ1 ）は、デバイス＃１に関わる反転ＷＣＩ入力である。以下の流れは、起こる動作のシーケンスを説明する（ＯＰ＝＝０）。
【０６１０】
クロック・サイクル２Ｒ／反転Ｗ，反転ＲＯＷ，反転ＣＯＬ，ＯＰおよび反転ＥＮ信号がアサートされて、ストリーム・アクセス・リードが起こることを示す。反転ＷＣＩ1 信号がアサートされて、アソシエーション・エンジン＃１がストリーミングのチェーンの最初のものであることを示す。
【０６１１】
クロック・サイクル３サイクルの最初で、前述の制御信号が内部ラッチされ解読されて、イースト・ポートに入ったアドレス情報のラッチングをイネーブルにする。また、反転ＥＣＯ1 （反転ＷＣＩ2 ）が排出されて、次のクロック・サイクルでデータがイネーブルになることを示す。
【０６１２】
クロック・サイクル４クロック・サイクルの最初で、反転ＷＣＩ2 情報が内部ラッチされて、次のクロック・サイクルのデータに備える。アソシエーション・エンジン＃２は、反転ＷＣＩ2 がラッチされたのに応答して、＼Ｘ＼ＴＯ（ＥＣＯ2 ）信号をＣＬＫ信号の立ち下がり端でアサートする。アソシエーション・エンジン＃１は、ＣＬＫ信号の立ち下がり端でＥＤ1 のデータを排出する。
【０６１３】
クロック・サイクル５サイクルの最初で、アソシエーション・エンジン＃２はアソシエーション・エンジン＃１からデータをラッチして、イースト・ポートに転送する。そこでそのデータはＣＬＫ信号の立ち下がり端で出される。アソシエーション・エンジン＃１は、反転ＥＣＯ1 信号をネゲートし、アソシエーション・エンジン＃２に対してアソシエーション・エンジン＃１がストリーム転送を終了した（アソシエーション・エンジン＃１が空である）ことを知らせる。ＣＬＫ信号の立ち下がり端で、アソシエーション・エンジン
＃１はＥＤ1 信号ラインに最後のデータを入れる。
【０６１４】
クロック・サイクル６サイクルの最初で、アソシエーション・エンジン＃２はアソシエーション・エンジン＃１から次のデータをラッチして、それをＣＬＫ信号の立ち下がり端でＥＤ2 信号上に入れる。またサイクルの最初で、アソシエーション・エンジン＃２は反転ＷＣＩ2 入力をラッチし、それを解読して、アソシエーション・エンジン＃２が現在ストリーム内のデータの供給側であることを判定する。アソシエーション・エンジン＃２は、反転ＥＣＯ2 信号をアサート状態に維持する（アソシエーション・エンジン＃２がデータを供給していることを示す）。
【０６１５】
クロック・サイクル７ＣＬＫの立ち下がり端で、アソシエーション・エンジン＃２は、そのデータの最初のデータをストリーム転送に供給する。
クロック・サイクル８ＣＬＫ信号の立ち下がり端で、アソシエーション・エンジン＃２はそのデータの２番目のデータをストリーム転送に供給する。また、ＣＬＫ信号の立ち下がり端で、反転ＥＣＯ2 ラインがネゲートされて、次のクロック・サイクルがアソシエーション・エンジン＃２からのデータの最後のものであることを知らせる。反転ＲＯＷ，反転ＣＯＬ，反転ＥＮ信号もこのサイクルでネゲートされて、次のクロック・サイクルが最後のサイクルであることを示す。
【０６１６】
クロック・サイクル９ＣＬＫ信号の立ち下がり端で、ＥＤ2 信号上に入れられたデータが３状態になる。
アソシエーション・エンジンのアレイを制御する論理の複雑さによって、ストリーム転送の終了は２つの方法で処理することができる。第１の方法は、制御論理がストリームの期間を知っていることを必要とするので、反転ＥＮ，反転ＲＯＷ，反転ＣＯＬなどの制御信号を正確な時刻にネゲートすることができる。２番目の方法は、アレイの右（または下）端で、反転ＥＣＯ（または反転ＳＣＯ）信号を、ストリームを終了することができるという表示として用いる。
【０６１７】
セクション４．１．６ ホスト・ストリーム・ライト・アクセス図１４２は、ホスト・
ストリーム・ライト・アクセスのタイミングを示す。ストリーム・ライト動作は、各アソシエーション・エンジン・デバイスで倍加されるデータを供給することができること（ＨＳＯＲレジスタの状態による）に留意されたい。この主な目的は、各アソシエーション・エンジンに独自のデータを供給することである。ストリーム・ライト転送は、反転ＲＯＷおよび反転ＣＯＬ信号の両方がアサートされているデバイスのチェーンにデータを送る。以下に説明するケースでは、２つのデバイスが同じ反転ＲＯＷ信号を共有している。ストリーム・ライト転送の場合は、データの流れは一方向である。ストリーム・ライトの場合は、反転ＥＣＩ信号がアサートされる（有効データがＥＤ信号にあることを示す）まで、データは書き込まれない。そのためストリーム・ライトの場合は、反転ＥＣＩおよび反転ＷＣＯ（ノース−サウス転送の場合は反転ＳＣＩ，反転ＮＣＯ）ストリーム制御信号が関わり、反転ＥＣＯおよび反転ＷＣＩ（反転ＳＣＯ，反転ＮＣＩ）信号は関わらない。
【０６１８】
アソシエーション・エンジン・デバイスは、ストリーミングの方向を制御する内部制御レジスタ・ビットＨＳＳＲ：ＳＨＰ［１：０］をもっている。ストリーム・ライトは、サウス（ＨＳＰ［１：０］＝０１）ポートまたはイースト（ＨＳＰ［１：０］＝１０）ポートを通じて行われるが、２つのポートを同時に用いることはない。以下に説明する流れは、２つのアソシエーション・エンジン・デバイスのそれぞれが２バイトの情報を受け取ることを前提としている。第１デバイス（アソシエーション・エンジン＃２）内のＨＳＯＲレジスタは値０ｘ００００を含み、第２デバイス（アソシエーション・エンジン＃１）のＨＳＯＲは値０ｘ０００２をもつ。ＯＡＲ／ＤＣＲレジスタとホスト・ストリーム選択レジスタの内部設定値により、特定のアソシエーション・エンジンは送信されたデータの断
片しかロードしない。議論を簡単にするために、この説明での信号には信号がどのデバイスに関係するかを示す上付き文字をつける。たとえば、反転ＷＣＩ1 は、デバイス＃１に関わる反転ＷＣＩである。以下の流れは、起こる動作のシーケンスを説明する（ＯＰ＝＝１）。
【０６１９】
クロック・サイクル２Ｒ／反転Ｗ，反転ＲＯＷ，反転ＣＯＬ，ＯＰおよび反転ＥＮ信号がアサートされて、ストリーム・ライト・アクセスが起こることを示す。反転ＥＣＩ2 信号がアサートされて、書き込まれるデータは次のクロック・サイクルで有効になることを示す。
【０６２０】
クロック・サイクル３サイクルの最初で、前述の制御信号が内部ラッチされ解読される。イースト・ポートに入ったデータＥＤ2 が、アソシエーション・エンジン＃２に与えられる。また、反転ＥＣＩ2 が前のクロック・サイクルでアサートされることに応答して、反転ＷＣＯ2 がＣＬＫ信号の立ち下がり端でアサートされる。デバイス・アソシエーション・エンジン＃２ＨＳＯＲは、これで有効データをカウントしていた内部カウンタに一致する（このデバイスの値は０）。アソシエーション・エンジン＃２は、ＤＣＲカウントが０になるまでデータを受け入れる準備ができている。
【０６２１】
クロック・サイクル４および５アソシエーション・エンジン＃２はデータをＷＤ2 ライン上に入れ、アソシエーション・エンジン＃１に送る。次のデータは、ＥＤ2 ラインに入れられる。
【０６２２】
クロック・サイクル６サイクルの最初で、アソシエーション・エンジン＃２は次のデータをラッチする。また、制御信号反転ＥＣＩ2 がネゲートされて、最後のデータが次のクロック・サイクルのＥＤ2 ライン上に提示されることを示す。デバイス・アソシエーション・エンジン＃１ＨＳＯＲは、これで有効データをカウントしていた内部カウンタに一致する。アソシエーション・エンジン＃１は、ＤＣＲカウントが０になるまでデータを受け入れる準備ができている。
【０６２３】
クロック・サイクル７サイクルの最初で、アソシエーション・エンジン＃２は、次のデータをラッチする。また制御信号反転ＲＯＷ，反転ＣＯＬ，反転ＥＮ，Ｒ／反転Ｗおよび反転ＷＣＯ2 がネゲートされて、ストリーム・ライトが次のクロック・サイクルで終了することを示す。
【０６２４】
クロック・サイクル８クロック・サイクルの最初で、最後のデータがアソシエーション・エンジン＃２によりラッチされて、内部に記憶される。
セクション４．２ アソシエーション・エンジン・マスタ動作アソシエーション・エン
ジン・マイクロコードの制御下で、アソシエーション・エンジンは４つのポートのどれからでもデータを書き出すことができる。これは、アソシエーション・エンジン・ライト動作に限られる（データはアソシエーション・エンジンから別のアソシエーション・エンジンに流れる）。これはwrite マイクロコード命令のセットにより制御される。これらのライト・サイクルが唯一可能な転送で、ライト動作のデスティネーションはいつもＩＤＲレジスタである。
【０６２５】
アソシエーション・エンジンは、ラン・モードではマイクロコード・ライト動作を実行することしかできない。これは、ライト動作が命令により始動されるためである。アソシエーション・エンジンがラン・モードにあるときは、制御信号反転ＥＮ，ＯＰおよびＲ／反転Ｗは「無視される」。反転ｘＣＩおよび反転ｘＣＯラインは、前の例と同じ関数を実行する。信号反転ＲＯＷおよび反転ＣＯＬは、今度は双方向になり、max およびmin ベクタ命令に加わる。ライト動作（データがマスタから出る）だけが許される。データ転送は
、write タイプ命令の制御下で行われる。
【０６２６】
過激なマイクロプログラム動作やタイミングの不一致による電気的損傷を避けるために、アソシエーション・エンジンはいつもデータを駆動するよりも１クロック・サイクル前に、反転ｘＣＯラインを排出する。これによりバス上に電気的な競合が起こる前に同時のライト動作やライト動作の不一致が検出できる。
【０６２７】
スイッチおよびタップのアソシエーション・エンジン内部設定値により、提示されるデータは、１）閉じられたスイッチを通じて転送される，２）開放スイッチにより転送が阻止される，３）閉じられたタップによりＩＤＲレジスタにデータが入る，あるいは４）開放タップのためにＩＤＲレジスタには影響を及ぼさない，のいずれかになる。
【０６２８】
ポート信号とＣＬＫ信号との一般的な関係は、ポートに対する入力または双方向入力信号はすべてＣＬＫ信号の立ち上がり端で内部ラッチされるというものである。逆に、出力と双方向出力とはすべてＣＬＫの立ち下がり端でイネーブルになる。
【０６２９】
アソシエーション・エンジンまたはホストと、動作中のアソシエーション・エンジンとの間のポート上のデータ転送には、次の信号が関わる：・データ・バスｘＤ［７：０］
・制御信号反転ｘＣＩおよび反転ｘＣＯ
セクション４．２．１ 全有効データのアソシエーション・エンジン・ライト動作図１
４３は、アソシエーション・エンジン＃２とアソシエーション・エンジン＃１との間の４バイト転送のタイミングを示す。write 命令の長さは、スケーラ・データ・レジスタの１つの値により制御される。この例では、このスケーラ・データ・レジスタに含まれる値は４である。実際に実行される命令はvwrite Ｖ０，Ｇ０でもよい。またアソシエーション
・エンジン＃１は、ウェスト／イースト・スイッチが閉じられているので、イースト・ポートに提示されたデータはウェスト・ポートに伝えられる。アソシエーション・エンジン＃１では、イースト・タップが開いているので、デバイスに提示されたデータは、アソシエーション・エンジン＃１に流れるに過ぎず、内部ＩＤＲロケーションを変えることはない。
【０６３０】
クロック・サイクル２アソシエーション・エンジン＃２は、ライト命令の実行に応答して、ＣＬＫ信号の立ち下がり端で反転ＷＣＯ2 出力をアサートする。この動作は、データが次のクロック・サイクルでＷＤ2 出力に提示されることを示す。
【０６３１】
クロック・サイクル３アソシエーション・エンジン＃２は、ＰＥ＃０のＶ０レジスタの値を、ＣＬＫ信号の立ち下がり端のＷＤ2 ラインに出す。また、アソシエーション・エンジン＃１は、反転ＥＣＩ1 が前のクロック・サイクルでラッチおよび解読されたことに応答して、ＣＬＫの立ち下がり端で反転ＷＣＯ1 をアサートする。
【０６３２】
ＣＬＫ４および５これらのクロック・サイクルでは、データはクロック・サイクルの最初でラッチされて、通過し、ＣＬＫの立ち下がり端で出される。
クロック・サイクル６write 命令（アソシエーション・エンジン＃２により開始されたwrite ）の終了に応答して、反転ＷＣＯ2 ラインがＣＬＫ信号の立ち下がり端でネゲートされる。また、最後のデータがアソシエーション・エンジン＃２の出力で駆動される（ＷＤ2 ）。
【０６３３】
クロック・サイクル７反転ＥＣＩ1 信号に応答して、アソシエーション・エンジン＃１はＣＬＫ信号の立ち下がり端で反転ＷＣＯ1 信号をネゲートし、最後のデータを出す。
セクション４．２．２ 部分有効データのアソシエーション・エンジン・ライト動作図
１４４は、アソシエーション・エンジン＃２とアソシエーション・エンジン＃１との間の
２バイト転送のタイミングを示す。write 命令の長さは、スケーラ・データ・レジスタの１つの値により制御される。この例では、このスケーラ・データ・レジスタに含まれる値は４である。実際に実行される命令はvwrite Ｖ０，Ｇ０でもよい。２個のバイトしか転
送されない理由は、４個のＰＥのうち２個のＶＴビットがクリアされている（無効データのためにデータを供給しない）ためである。またアソシエーション・エンジン＃１は、ウェスト／イースト・スイッチが開いているので、イースト・ポートに提示されたデータはウェスト・ポートには伝えられない。アソシエーション・エンジン＃１では、イースト・タップが閉じているので、デバイスに提示されたデータは、アソシエーション・エンジン＃１のＩＤＲに書き込まれるだけである。アソシエーション・エンジン＃１のＩＤＲは、最初の２つのロケーションにこの動作で書き込まれる点に注意すること。ソースからの書き込みプロセスにギャップがある影響は、デスティネーションでデータ・バイトの詰め込みという効果をもつ。
【０６３４】
クロック・サイクル２アソシエーション・エンジン＃２は、ライト命令の実行に応答して、ＣＬＫ信号の立ち下がり端で反転ＷＣＯ2 出力をアサートする。この動作は、データが次のクロック・サイクルでＷＤ2 出力に提示されることを示す。
【０６３５】
クロック・サイクル３アソシエーション・エンジン＃２は、ＰＥ＃０のＶ０レジスタの値を、ＣＬＫ信号の立ち下がり端のＷＤ2 ラインに出す。また、反転ＷＣＯ2 信号は、内部状態に応答してネゲートされるので、次のＰＥはＶＴビットがクリアされる。
【０６３６】
ＣＬＫ４ＷＤ2 が、ＣＬＫ信号の立ち下がり端で３状態になる。
クロック・サイクル５次のクロック・サイクルに送られるデータをもつアクティブなＰＥに応答して、反転ＷＣＯ2 がＣＬＫ信号の立ち下がり端でアサートされる。
【０６３７】
クロック・サイクル６write 命令（アソシエーション・エンジン＃２により開始されたライト）の終了に応答して、反転ＷＣＯ2 ラインがＣＬＫ信号の立ち下がり端でネゲートされる。また、最後のデータがアソシエーション・エンジン＃２の出力で駆動される（ＷＤ2 ）。
【０６３８】
セクション４．２．３ アソシエーション・エンジン・ライト衝突タイミング図１４５
は、ポートの１つでのアソシエーション・エンジン衝突のタイミングを示す。衝突には２つのタイプがある。第１のタイプは、２つのアソシエーション・エンジンが同時にライト動作を行うことによるものである。この場合は、反転ｘＣＩ信号（データを１クロック・サイクル進める）が両方ともアクティブになる。この状態（たとえば、反転ＥＣＩおよび反転ＥＣＯがいずれもアクティブ）は、ポート衝突が起こったことを表す。第２のタイプは、ポート・ライト動作が進行中であって、同じポートにwrite 命令が実行されたときに起こる。この場合は、データはポートに入れられるが、反転ｘＣＩ信号が再び用いられて、電気的損傷が起こらないうちに衝突を検出する。
【０６３９】
ポート衝突が（両方のアソシエーション・エンジンにより）検出されると、例外処理が両デバイスにより実行される（１つが休止していて、データが通過するだけであっても）。衝突例外ベクタがフェッチされて、衝突のための例外処理が開始され、適切なステータス・ビットがセットされる。
【０６４０】
クロック・サイクル２および３これらの２つのクロック・サイクルが同時ポート衝突を示す。
クロック・サイクル８ないし１１これらのクロック・サイクルは、ライトが進行中であり、別のライトが実行されていることを示す。
【０６４１】
セクション４．３ その他のタイミングアソシエーション・エンジンの残りの信号は、done，ラン／ストップ，割込，リセットおよびユーザ・テスト関数を扱う。以下の図が、
これらのフィーチャのタイミングを示す。
【０６４２】
Doneの表示（反転ＢＵＳＹ信号をアサートする）は、２つのソースのいずれか一方から来ることがある。第１は、done命令が実行されると反転ＢＵＳＹ信号をネゲートして、アソシエーション・エンジンを現在のＰＣロケーションに保持する。これは、halt命令と似ているが、反転ＢＵＳＹ出力をネゲートするという機能が追加されている。第２は、アソシエーション・エンジンが単一ステップ・モードの動作にいる場合は、反転ＢＵＳＹ信号が現在の命令の最後にネゲートする。（図１４６参照。）
Ｒ／反転Ｓ信号は、アソシエーション・エンジンに対して、ラン・モード（Ｒ／反転Ｓ＝１）においてもストップ・モード（Ｒ／反転Ｓ＝０）においても、どの状態にデバイスがあるかを知らせる。データが「移動中」で、Ｒ／反転Ｓラインがストップ状態に移る場合では、データは内部ロケーションに保持されて、転送はそれがオフになったところから再開される。また、Ｒ／反転Ｓ信号がラン・モードからストップ・モードに移行し（１−＞０）ているときに命令が実行中の場合は、充分な状態情報が残り、アソシエーション・エンジンがラン・モード（Ｒ／反転Ｓ＝１）に戻ったときに実行が再開される。
【０６４３】
アソシエーション・エンジン割込は、任意の数の内部条件により発生される。割込の詳細については、セクション２．３．２２，割込ステータス・レジスタ＃１（ＩＳＲ１）およびセクション２．３．２４，割込ステータス・レジスタ＃２（ＩＳＲ２）を参照のこと。
【０６４４】
アソシエーション・エンジンのリセット・シーケンスには、内部初期化関数を実行するために４つのクロック・サイクルが必要である。
アソシエーション・エンジンにもユーザがアクセス可能なテスト・ポートが含まれており、これにより広範囲のボード・テスト関数が可能になる。このテスト・ポートはＩＥＥＥ１１４９．１と互換性がある。読者は、テスト・ポートの動作の詳細については、ＩＥＥＥ１１４９．１文書を参照されたい。
【０６４５】
セクション４．３．１ アソシエーション・エンジン反転ＢＵＳＹ出力タイミング図１
４７は、アソシエーション・エンジン反転ＢＵＳＹ信号のタイミングを示す。第１のケースは、done命令を示す。第２のケースは、命令の終了が単一ステップ・モードであることを示す。反転ＢＵＳＹラインは、開放されたドレーン出力となっているので、すべてのアソシエーション・エンジンがdone命令を実行すると、外部引き上げ（external pull up）によりこの出力を高電圧にすることができる。
【０６４６】
クロック・サイクル２ＣＬＫ信号の立ち下がり端で、ＰＳＴＡＴラインが、スケーラ命令が実行されていることを示す。
クロック・サイクル３done命令が実行されることに応答して、ＣＬＫ信号の立ち下がり端で反転ＢＵＳＹがネゲートされる。
【０６４７】
クロック・サイクル４外部デバイスがランからストップにＲ／反転Ｓラインを移行する。
クロック・サイクル５サイクルの最初でＲ／反転Ｓ入力が解読されて、アクティブになる。これにより反転ＢＵＳＹ出力がアサートされる。
【０６４８】
クロック・サイクル６サイクルの最初でＲ／反転Ｓラインが、ラン状態で解読される。これは、done命令のすぐ後の命令でアソシエーション・エンジンを再始動する効果をもつ。
【０６４９】
クロック・サイクル７ＣＬＫ信号の立ち下がり端で、ＰＳＴＡＴラインは何かの命令が実行されていることを示す。
クロック・サイクル８ＣＬＫ信号の立ち下がり端で、反転ＢＵＳＹ信号がネゲートされて、現在の命令が終了したことを示す。
【０６５０】
クロック・サイクル１０および１１Ｒ／反転Ｓラインがランからストップそしてランに移行すると、アソシエーション・エンジンが再始動される。これは次に実行される命令をイネーブルにする。
【０６５１】
セクション４．３．２ ラン／ストップ介入のあるアソシエーション・エンジン・ライ
ト・タイミング図１４８は、アソシエーション・エンジンが動作の途中で停止された場合のアソシエーション・エンジン・ライト動作のタイミングを示す。
【０６５２】
クロック・サイクル２アソシエーション・エンジン＃２は、write 命令の実行に応答して、ＣＬＫ信号の立ち下がり端で反転ＷＣＯ2 出力をアサートした。この動作は、次のクロック・サイクルでＷＤ2 出力にデータが提示されることを示す。
【０６５３】
クロック・サイクル３アソシエーション・エンジン＃２は、ＰＥ＃０のＶ０レジスタの値を、ＣＬＫ信号の立ち下がり端のＷＤ2 ラインに出す。また、アソシエーション・エンジン＃１は、前のクロック・サイクルで反転ＥＣＩ1 がラッチされ解読されたことに応答して、ＣＬＫ信号の立ち下がり端で反転ＷＣＯ1 をアサートした。
【０６５４】
クロック・サイクル４このクロック・サイクルの最初でデータがラッチされ、伝えられ、ＣＬＫ信号の立ち下がり端で出される。また外部デバイスがＲ／反転Ｓ信号をアサートして、ストップ・モードに入るべきであることを知らせる。
【０６５５】
クロック・サイクル５サイクルの最初で、Ｒ／反転Ｓ信号がアサートされていると解読される。ＣＬＫ信号の立ち下がり端で、すべての反転ＷＣＯ出力がネゲートし、すべてのＷＤ出力が３状態になる。
【０６５６】
クロック・サイクル６外部デバイスがＲ／反転Ｓ入力をネゲートする。
クロック・サイクル７サイクルの最初でＲ／反転Ｓ入力がネゲートされていると解読される。ＣＬＫ信号の立ち下がり端で、反転ＷＣＯ出力がアサートされ、次のクロック・サイクルでデータが提示されることを示す。
【０６５７】
クロック・サイクル８アソシエーション・エンジン＃１は、ＰＥ＃０からＶ０（Ｒ／反転Ｓがストップ・モードになったときに内部保持されていた）を再びＷＤ1 に提示して、アソシエーション・エンジン＃２は、ＣＬＫ信号の立ち下がり端で、ＰＥ＃１からＶ０をもう一度ＷＤ2 に提示する。
【０６５８】
クロック・サイクル９このクロック・サイクルの最初でデータがラッチされ、伝えられ、ＣＬＫ信号の立ち下がり端で出される。
クロック・サイクル１０write 命令の終了（アソシエーション・エンジン＃２）に応答して、反転ＷＣＯ2 ラインがＣＬＫ信号の立ち下がり端でネゲートされる。また最後のデータがアソシエーション・エンジン＃２の出力（ＷＤ2 ）で駆動される。
【０６５９】
クロック・サイクル１１反転ＥＣＩ1 信号に応答して、アソシエーション・エンジン＃１はＣＬＫ信号の立ち下がり端で反転ＷＣＯ1 信号をネゲートし、最後のデータを出す。
セクション４．３．３ 割込タイミング図１４９は、アソシエーション・エンジン割込
発生のタイミングを示す。以下の流れは、発生して割込条件でホストをクリアにするイベントのシーケンスを説明する。
【０６６０】
クロック・サイクル４ＣＬＫ信号の立ち下がり端で、割込を発生するような何らかの内部アソシエーション・エンジン条件が真となる。これは、ＡＩＣＲのステータス・ビットの設定値であることが多い。詳細については、セクション２．３．２２，割込ステータス・レジスタ＃１（ＩＳＲ１）およびセクション２．３．２４，割込ステータス・レジスタ＃２（ＩＳＲ２）を参照のこと。
【０６６１】
クロック・サイクル５ＣＬＫ信号の立ち下がり端で、反転ＩＮＴＲ信号がアサートされ、ホストに対して割込が起こったことを知らせる。割込のマスキングの詳細については、セクション２．３．２３，割込マスク・レジスタ＃１（ＩＭＲ１）およびセクション２．３．２５，割込マスク・レジスタ＃２（ＩＭＲ２）を参照のこと。
【０６６２】
クロック・サイクル７および８このタイミング図は、割込に応答するためにホストが２サイクルを必要としていることを前提とする。
クロック・サイクル９ＣＬＫ信号の立ち上がり端で（サイクルの初期で）、ホストは割込ステータス・レジスタ（ＩＳＲ）にアクセスして、割込条件をクリアする。これは図１３７に図示されるランダム・アクセス・モードの動作で行われることが多い。
【０６６３】
クロック・サイクル１０ＣＬＫ信号の立ち下がり端で、ＩＮＴＲ出力がネゲートされて、割込条件がクリアされた、あるいはディスエーブルになったことを示す。
セクション４．３．４ リセット・タイミング図１５０は、アソシエーション・エンジ
ンのリセット・シーケンスのタイミングを示す。リセット・シーケンスは、内部レジスタをそのデフォルト状態に初期化するためにアソシエーション・エンジンにより用いられる。以下の流れは、リセット・シーケンスのイベントを説明する。ウォーム・リセットでは、反転ＲＥＳＥＴ信号が少なくとも３クロック・サイクルの間アサートされることが必要である。コールド・リセットの場合は、反転ＲＥＳＥＴ信号は、電力が安定してから少なくとも３クロック・サイクルの間アサートされることが必要である。反転ＲＥＳＥＴ信号入力は、高ゲインのシンクロナイザを有して、ＣＬＫ信号の立ち上がり端のピンの状態を決める。
【０６６４】
クロック・サイクル２このクロック・サイクルの間に、反転ＲＥＳＥＴ入力信号は下がる。クロック・サイクル＃３で反転ＲＥＳＥＴ信号の内部同期されたバージョンをアサートするためには、反転ＲＥＳＥＴ入力をＣＬＫ信号の立ち上がり端より少し前にアサートしなければならない。
【０６６５】
クロック・サイクル３反転ＲＥＳＥＴ入力がＣＬＫ信号の立ち上がり端の準備時間要件を満足すると、反転ＲＥＳＥＴ入力の内部同期されたバージョン（rsync ）がアサートする。rst 信号をアサートすることにより、このイベントによりシステムのリセット・シーケンスを開始する。
【０６６６】
クロック・サイクル６反転ＲＥＳＥＴ入力はクロック・サイクル＃６のどこかでネゲートし、内部同期されたバージョンもネゲートするには、ＣＬＫ信号の立ち上がり端によりネゲートされなければならない。
【０６６７】
クロック・サイクル７反転ＲＥＳＥＴ入力がＣＬＫ信号の立ち上がり端の準備時間要件を満足すると、反転ＲＥＳＥＴ入力の内部同期されたバージョン（rsync ）がネゲートする。このネゲーションにより内部リセット・シーケンスが開始される。
【０６６８】
クロック・サイクル１０リセット・シーケンスの最後で、内部システム・リセット（rst ）がネゲートされて、アソシエーション・エンジン・システムはユーザ初期化の用意ができる。
【０６６９】
セクション４．３．５ ＩＥＥＥ１１４９．１テスト・アクセス・ポート（ＴＡＰ）タ
イミング図１５１は、ユーザがアクセス可能なテスト・ポートのタイミングを示す。このテスト・ポートは、ＩＥＥＥ１１４９．１基準に準拠している。１１４９．１インターフェースの動作を制御する内部状態および状態の移行の詳細については、ユーザはＩＥＥＥ１１４９．１文書を参照されたい。ここで示されるタイミング図は、ＴＣＫクロック信号に関してＴＡＰとシステム・ピンとの間の関係を説明する。
【０６７０】
クロック・サイクル４および８すべてのＴＡＰ入力（ＴＤＩ，ＴＭＳ）とシステム入力（および双方向入力）がＴＣＫ信号の立ち上がり端でラッチされる。
クロック・サイクル３，７および１１すべてのＴＡＰ出力（ＴＤＯ）とシステム出力（および双方向出力）が、ＴＣＫ信号の立ち下がり端でイネーブルになる。
【０６７１】
セクション５ 特定のトピックスの概要「アサートする」および「ネゲートする」とい
う用語はそれぞれ、信号，ステータス・ビットまたは同様の装置を、論理的に真または論理的に偽の状態にすることを指すために用いられる。論理的に真の状態が論理レベル１であれば、論理的に偽の状態は論理レベル０になる。また論理的に真の状態が論理レベル０であれば、論理的に偽の状態は論理レベル１になる。
【０６７２】
「バス」という用語は、データ，アドレス，制御またはステータスなどの１つ以上の種々のタイプの情報を転送するために用いられる複数の信号を指すために用いられる。数字の前にシンボル「＄」またはシンボル「０ｘ」がある場合は、その数字が１６進数または１６を底にした形で表されていることを示す。同様に数字の後に「Ｈ」がつくと、その数字は１６進数または１６を底にした形で表されていることを示す。数字の前に「％」というシンボルがある場合は、その数字が２進数または２を底にした形で表されることを示す。
【０６７３】
データ・プロセッサ１０は、命令を記憶することができるが、１つ以上の命令が記憶される様式は変わることがある。たとえば、命令を記憶するために、データ・プロセッサ１０は命令キャッシュ２０（図７８参照）を有することも、ランダム・アクセス・メモリ（ＲＡＭ）または読み込み専用メモリ（ＲＯＭ）などの任意のタイプのオンボード・メモリ（たとえばＣＭＡ１４）を有することもある。あるいは、データ・プロセッサ１０は外部ソースから命令を受信して、命令を解読することができるように、受信した命令をバッファまたはラッチ回路に短い間記憶することもある。このように命令の記憶は、恒久的である場合も、一時的である場合も、きわめて短時間である場合もある。
【０６７４】
図面では、同一図内での複数のデータ・プロセッサ１０は、参照番号１０．１，１０．２，１０．３などを用いて記される（例として図１６を参照）。データ・プロセッサ１０．１，１０．２，１０．３などは、ハードウェアについてもソフトウェアについても同じものである場合、ハードウェアについては同じであるがソフトウェアについては異なっている場合、ハードウェアについてもソフトウェアについても異なっている場合がある。１０．ｘという用語は、データ・プロセッサ１０．１，１０．２，１０．３などの任意の１機を指す。また「アソシエーション・エンジン」または「ＡＥ」という用語はデータ・プロセッサ１０．ｘを指すために用いられる。
【０６７５】
同様に、データ処理システム５５の種々の実施例は、５５．１，５５．２，５５．３などと示される（図１６参照）。５５．ｘという言葉は、データ処理システム５５．１，５
５．２，５５．３などの任意の１機を指すために用いられる。データ処理システム５７の種々の実施例は、５７．１，５７．２，５７．３などと示される。５７．ｘという言葉は、データ処理システム５７．１，５７．２，５７．３などの任意の１機を指すために用いられる。図１６では、データ処理システム５７はデータ処理システム５５の一部であっても、あるはデータ処理システム５７はそれ自身完全なシステムとしてのスタンドアロン装置であってもよい。このように任意のデータ処理システム５７は、データ処理システム５５の一部となりうる。多くのアプリケーションでは、外部ＣＰＵ５４を用いるが、これは必須ではない。ＣＰＵ５４はオンボード・メモリ（図示せず）をもっていることがあり、これによりＲＡＭ５６，ＲＯＭ５８およびディスク６０は必要がなくなることもある。さらにＣＰＵ５４がデータ・プロセッサ１０．ｘに直接インターフェースすることができる場合は、インターフェース論理６２は必要ない。導体６１は、データ・プロセッサ１０．ｘの種々のイースト・ポートとウェスト・ポートとを結合するために用いられる。導体６３は、データ・プロセッサ１０．ｘの種々のノース・ポートとサウス・ポートとを結合するために用いられる。
【０６７６】
セクション２．５および表２．３４を見ると、表２．３４にリストアップされた命令を指す場合に本書ではマイクロコード，命令およびマイクロコード命令という用語が交換可能に用いられている。表２．３４にリストアップされた命令は、アセンブリ言語レベルでデータ・プロセッサ１０をプログラミングするためにソフトウェアのプログラマが用いる命令である。
【０６７７】
セクション５．１ 飽和保護本発明の一定の命令は「飽和する」命令である。セクショ
ン２．５．９，セクション２．５．１９．１および用語集の定義に、「オーバーフロー」および「飽和」という用語が論じられている。「オーバーフロー」とは、レジスタに記憶される値がそのレジスタが記憶することのできる最大値を越えている状況を指す（たとえば８ビットのレジスタに％１０００００００１を記憶させようとする）。「飽和」または「飽和保護」とは、オーバーフローを処理する方法を指し、レジスタ内の値が上位境界値または下位境界値と置き換えられる。たとえば、８ビットの符号なしの最大境界値を＄ＦＦに置き換える。
【０６７８】
図１５３では、本発明の図示された実施例において、特定の非予備スケーラ命令も飽和命令である。これらは「add 」, 「addsx 」, 「sub 」, 「subsx 」,「neg 」および「abs 」である。同様に特定の非予備ベクタ命令も飽和命令である。これらは「vadd」, 「vaddsx」, 「vsub」, 「vsubsx」, 「vneg」および「vabs」である。これらの飽和命令は
、オーバーフローがあるといつも飽和する（すなわちスケーラ飽和命令についてＳＶビット２１４がアサートされ、ＶＶビット１０６がベクタ飽和命令についてアサートされた場合）。ＳＶビット２１４は、スケーラ・プロセス制御レジスタ（ＳＰＣＲ）２０８に位置している（図５４参照）。ＶＶビット１０６は、ベクタ・プロセス制御レジスタ（ＶＰＣＲ）１０２に位置している（図７４参照）。
【０６７９】
飽和スケーラ命令に関しては、オーバーフロー値ＳＶビット２１４がアサートされると、算術演算動作の結果は上位境界または下位境界により置き換えられる。対応するオーバーフロー方向ビットであるＳＰＣＲレジスタ２０８に位置するＳＤビット２１６が、オーバーフローが正の方向であったか負の方向であったかを決定する。オーバーフローの方向により、上位境界または下位境界のどちらの境界値がデータ処理動作の結果と置き替わるために用いられるかが決まる。符号ビットである算術演算制御レジスタ（ＡＣＲ）１７２に位置するＳＳＧＮビット１７４は、数字に符号があるかないかを示す。符号があるかないかにより、上位境界および下位境界の値が決まる。
【０６８０】
飽和ベクタ命令に関しては、オーバーフロー値ＶＶビット１０６がアサートされると、
算術演算動作の結果は上位境界または下位境界により置き換えられる。対応するオーバーフロー方向ビットであるＶＰＣＲレジスタ１０２に位置するＶＤビット１０８が、オーバーフローが正の方向であったか負の方向であったかを決定する。オーバーフローの方向により、上位境界または下位境界のどちらの境界値がデータ処理動作の結果と置き替わるために用いられるかが決まる。符号ビットである算術演算制御レジスタ（ＡＣＲ）１７２に位置するＶＳＧＮビット１７６は、数字に符号があるかないかを示す。符号があるかないかにより、上位境界および下位境界の値が決まる。
【０６８１】
「sat 」および「vsat」命令は、飽和以外のことは実行しない特殊な飽和命令である。「sat 」および「vsat」命令は特に、延長算術演算動作に便利である。一般に、１つの非予備命令が後に続く１つ以上の予備命令は、延長算術演算動作を実行するために用いられる。非予備命令が飽和命令である場合は、非予備飽和命令により作成された多重バイト結果のうち１バイトは、オーバーフローがあった場合はすでに調整されている。しかし、結果が飽和した場合、多重バイト結果の残りのバイトには不正確な値が含まれる。「sat 」および「vsat」命令は、多重バイト算術演算動作に対する飽和保護を行う。
【０６８２】
図１５２は、「sat 」命令を用いてスケーラ・エンジン２６のレジスタに対する飽和保護が行える例を示す。「vsat」命令は、ベクタ・エンジン９のレジスタに関して同じ飽和関数を実行する。図１５２に示す例では、命令の目的はレジスタ・グループ（Ｇ０，Ｇ１，Ｇ２）に記憶されている３バイトのデータ値を、レジスタ・グループ（Ｇ３，Ｇ４，Ｇ５）に記憶されている３バイトのデータ値に加えて、レジスタ・グループ（Ｇ３，Ｇ４，Ｇ５）に記憶されている３バイトの結果がオーバーフローがあった場合に飽和するようにすることである。
【０６８３】
addp Ｇ２，Ｇ５ 予備Ｇ２をＧ５に加える（不飽和add 動作）
addp Ｇ１，Ｇ４ 予備Ｇ１をＧ４に加える（不飽和add 動作）
add Ｇ０，Ｇ３ 非予備Ｇ０をＧ３に加える（飽和add 動作）
sat Ｇ４ Ｇ４に飽和保護を実行（オーバーフローに基づいてＧ４の値を修正）
sat Ｇ５ Ｇ５に飽和保護を実行（オーバーフローに基づいてＧ５の値を修正）
「add Ｇ０，Ｇ３」命令の実行の終了時には、レジスタ・グループ（Ｇ３，Ｇ４，Ｇ５）には部分的に飽和した結果が含まれ、オーバーフロー値ＳＶビット２１４はオーバーフローがあったことを示す。対応するオーバーフロー方向ビット，ＳＤビット２１６は、オーバーフローが正の方向であったことを示す。符号ビットＳＳＧＮビット１７４は、この例では数字に符号がないことを示す。「satＧ４」命令は、オーバーフロー値とオーバー
フロー方向ビットと符号ビットとを用いて飽和が正の方向に起こったことと、上位境界値＄ＦＦをレジスタＧ４に記憶して誤った結果＄３４と置き替えねばならないこととを判断する。「sat Ｇ５」命令は、オーバーフロー値とオーバーフロー方向ビットと符号ビットとを用いて飽和が正の方向に起こったことと、上位境界値＄ＦＦをレジスタＧ５に記憶して誤った結果＄３３と置き替えねばならないこととを判断する。
【０６８４】
セクション５．２ データ・プロセッサ間の通信：スイッチとタップ図１３２と図７８
を見ると、スイッチ４２によりデータはデータ・プロセッサ１０を流れることができ、タップ４０によりデータはデータ・プロセッサ１０に受信されラッチされる。図１６では、タップとスイッチを用いて、データ・プロセッサ１０のアレイを用いるシステム内でのスケーリングを可能にすることができる。スイッチは、転送されているデータがデータ・プロセッサ１０による内部介入なしにデータ・プロセッサ１０を横断することを可能にする。タップは、データ・プロセッサ１０のポートに到着したデータがデータ・プロセッサ１０の入力データ・レジスタ（ＩＤＲ）１８にコピーされることを可能にする。
【０６８５】
データ・プロセッサ１０がアレイ内で隣接していない場合に、２機（またはそれ以上）
のデータ・プロセッサ１０が通信するためには、データ・プロセッサ１０をつなぐスイッチは閉じていなければならない（すなわち導電モードにある）。これでスイッチにより、あるデータ・プロセッサ１０は他のデータ・プロセッサ１０に対して、２機の通信を行うデータ・プロセッサ１０の間にあるデータ・プロセッサを介入せずにデータを送ることができる。好適な実施例においては、タップによりデータ・プロセッサ１０は、任意のポートについたデータを捕捉することができる。
【０６８６】
ポート（ノース，サウス，イーストおよびウェスト）の数と、スイッチ（４２．１，４２．２）の数と、タップ（４０．１，４０．２，４０．３，４０．４）の数とは互いに独立していることに注意すること。本発明の代替の実施例では、さまざまな数のポート，スイッチおよびタップを持つことができる。たとえば、データ・プロセッサ１０は、より少ない数またはより多くの数のポートを持つことができ、各ポートに１つのタップがある必要はなく、１つのポートを複数のスイッチに結合してもよい。各スイッチはタップや他のスイッチとは独立して動作することができ、各タップはスイッチや他のタップとは独立して動作することができる。
【０６８７】
好適な実施例に図示されたスイッチは双方向であるが、一方向スイッチを用いることもできる。たとえば１つの双方向スイッチの代わりに、２つの一方向スイッチを用いてもよい。一方向スイッチが用いられる場合には、データの流れの方向を決めるために用いることのできる別の制御ビットを追加してもよい。スイッチは、任意のタイプのアナログまたはデジタル回路構成、たとえば合成論理または逐次論理を用いて実現することができる。実際にスイッチとタップを構築するために必要な特定の回路構成は、当業者には周知である。
【０６８８】
図示された実施例においては、スイッチが導電モードにある（接続されている）ときは、デジタル・データはスイッチの一端からスイッチの他端へと転送される。そのためスイッチを通じて、あるポートから他のポートへとデータを伝えることができる。スイッチが非導電モードにある（接続が分離されている）ときは、デジタル・データはスイッチの一端からスイッチの他端へと転送されない。そのために、スイッチを通じてあるポートから他のポートへとデータを伝えることができない。
【０６８９】
図２６，表２．１０および図７８を見ると、ポート制御レジスタ（ＰＣＲ）５２は、スイッチおよびタップを制御するために用いられる制御ビットを含む。ＰＣＲ５２のビット０〜６は、データ・プロセッサ１０により実行される特定の命令によるシステム・リセットと、外部プロセッサ（たとえば図１６のＣＰＵ５４）からのホスト・アクセスとにより変更することができる。転送されているデジタル・データそのものは、経路決定情報を持つ必要がないことに留意されたい。そのためデジタル・データそのものは、どのデータ・プロセッサ（群）１０がデジタル・データを受信およびラッチするかを示す必要はない。
【０６９０】
データ・プロセッサ１０が命令を実行している間に、ソフトウェア・プログラムがＰＣＲ５２のビット０〜６をダイナミックに修正できることに留意されたい。ソフトウェア・プログラムは、命令キャッシュ２０内またはオンボード・メモリ（図示せず）に位置するデータ・プロセッサ１０内の内部プログラムであっても、ＣＰＵ５４，ＲＡＭ５６，ＲＯＭ５８またはディスク６０のいずれかに位置する外部プログラムであってもよい。データ・プロセッサ１０は、ポート間でのデータ転送を行うために、いかなる命令も実行する必要がないこと、アクティブ制御を行使する必要がないことに留意されたい。
【０６９１】
ＰＣＲ５２の制御ビットにより、データ・プロセッサ１０の通信構造を種々のシステム・コンフィギュレーションのために変更したり、データ・プロセッサ１０が命令を実行している間にダイナミックに変更することができる。そのため、スイッチおよびタップ・ア
ーキテクチャはユーザに対して、単独のハードウェア接続またはハードウェア導体を変更する必要なしに、ソフトウェアを通じてデータ・プロセッサ１０のアレイを全体的に再コンフィギュレーションする能力を提供する。
【０６９２】
図１３２では、ノース・ポート・ピン４４が、スイッチ回路４２．１を介してサウス・ポート・ピン４８に選択的に結合され、ウェスト・ポート・ピン５０がスイッチ回路４２．２を介してイースト・ポート・ピン４６に選択的に結合されている。ノース・ポート・ピン４４は、タップ回路４０．１を介して入力データ・レジスタ（ＩＤＲ）１８に選択的に結合されている。イースト・ポート・ピン４６は、タップ回路４０．２を介して入力データ・レジスタ（ＩＤＲ）１８に選択的に結合されている。サウス・ポート・ピン４８は、タップ回路４０．３を介して入力データ・レジスタ（ＩＤＲ）１８に選択的に結合されている。ウェスト・ポート・ピン５０は、タップ回路４０．４を介して入力データ・レジスタ（ＩＤＲ）１８に選択的に結合されている。
【０６９３】
セクション５．３ 多重ポート・データ・プロセッサ図１５４，図１５５，図１５６，
図１５７，図１５８，図１５９および図１６０では、データ・プロセッサ１０は２つの動作モードのいずれか１つ、すなわち「ストップ」モードおよび「ラン」モードにいることができる。「ストップ」モードは、「ホスト」モードとも呼ばれる。本発明の図示された実施例においては、動作モードはデータ・プロセッサ１０に対する入力により選択される。Ｒ／反転Ｓ集積回路ピン８０（図１８参照）の論理レベルを用いて、データ・プロセッサ１０がストップ・モードにあるのか、ラン・モードにあるのかを判断する。ストップ・モードでは、外部からアクセスできるデータ・プロセッサ１０内のすべてのレジスタが外部アクセス可能である；またデータ・プロセッサ１０は命令を実行していない。ラン・モードでは、外部からアクセスできるデータ・プロセッサ１０内のすべてのレジスタは、ＩＤＲレジスタ１８（図７８参照）を除き、外部アクセスに用いることはできない。またデータ・プロセッサ１０は命令をフェッチし、解読して、実行することができる。
【０６９４】
図示された実施例のノース，サウス，イーストおよびウェスト・ポートは、動作モードにより異なる目的を果たし、異なる機能を行う。同様に信号と集積回路ピンも、動作モードにより異なる目的を果たし、異なる機能を行うものがある（表２．２参照）。
【０６９５】
ラン・モードでは、行列選択信号よりも、スイッチおよびタップを用いてポートを通じた通信を制御する。本発明の図示された実施例では、スイッチ４２．１と４２．２とが、タップ４０．１，４０．２，４０．３，４０．４（図１３２参照）と共に用いられて、データ・プロセッサ１０が他の外部データ・プロセッサ１０との通信および／またはラン・モードでのホスト・データ・プロセッサ５４との通信を行うことを可能にする。図示された実施例では、反転ＲＯＷ集積回路ピン８２と反転ＣＯＬ集積回路ピン８４（図１８参照）は、ラン・モードで列または行選択信号を受信するために用いられない。
【０６９６】
ストップ・モードでは、スイッチおよびタップよりも、行列選択信号が用いられてポートを通じた通信を制御する。図示された実施例では、列選択信号は反転ＣＯＬピン８４により受信され、行選択信号は反転ＲＯＷピン８２により受信される。本発明の図示された実施例においては、ストップ・モードでは、スイッチ４２．１と４２．２はタップ４０．１，４０．２，４０．３，４０．４（図１３２参照）と共に用いられない。
【０６９７】
ストップ・モードでは、データ・プロセッサ１０は列選択信号と行選択信号とを用いて、情報を伝えるか否か、また情報を記憶する、あるいは情報を引き出すか否かを決める。行選択ピンも列選択ピンもアサートされていない場合は、データ・プロセッサ１０は情報を伝えることもしない。しかし行選択ピン（反転ＲＯＷピン８２）または列選択ピン（反転ＣＯＬピン８４）のどちらか一方だけがアサートされている場合は、データ・プロセッ
サ１０は情報を伝えるが、情報を記憶したり、オリジナル・ソースとして機能することはしない。また行選択信号と列選択信号の両方がアサートされている場合は、データ・プロセッサ１０は情報を伝え、情報を格納するか、情報のオリジナル・ソースとして機能する。
【０６９８】
データ・プロセッサ１０がストップ・モードにあるときは、選択できるアクセス・モードは２つある：すなわちランダム・アクセス・モードとストリーム・アクセス・モードである。アクセス・モードにより、データ・プロセッサ１０内部のリソースがアクセスされる方法が決まる。本発明の図示された実施例では、アクセス・モードはデータ・プロセッサ１０に対する入力によって選択される。ＯＰ集積回路ピン９４（図１８参照）の論理レベルを用いて、データ・プロセッサ１０がランダム・アクセス・モードでアクセスされるか、ストリーム・アクセス・モードでアクセスされるかが決定される。
【０６９９】
ランダム・アクセス・モードでは、データ・プロセッサ１０内のどの単独の内部アドレス・ロケーションがアクセスされるかを指定するには、アドレスを外部からデータ・プロセッサ１０に供給しなければならない。外部から供給されたアドレスは、ノース・ポートとウェスト・ポートの両方でデータ・プロセッサ１０に受信される。図示された実施例では、ランダム・アクセス・モードを用いて一度に１つのデータ・プロセッサ１０にしかアクセスしない。
【０７００】
ストリーム・アクセス・モードでは、データ・プロセッサ１０に対してアドレスが外部から供給されることはない。その代わりに、データ・プロセッサ１０は情報転送のためのアドレスを１つ以上内部で生成しなければならない。またデータ・プロセッサ１０がストリーム・アクセス・モードにあるときには、任意のバイト数のデータをデータの「ストリーム」として、データ・プロセッサ１０内外に転送することができる。図示された実施例では、ストリーム・アクセス・モードを用いて、一度に１つ以上のデータ・プロセッサ１０にアクセスすることができる。
【０７０１】
データ・プロセッサ１０がストップ・モードのあるときには、いくつかのレジスタが特殊な関数を実行することも、あるいは用いられるだけの場合もある。本発明の図示された実施例では、データ・プロセッサ１０がストップ動作モードにあり、ストリーム・アクセス・モードにある場合は、オフセット・アドレス・レジスタ＃１（ＯＡＲ１）９６，オフセット・アドレス・レジスタ＃２（ＯＡＲ２）９８，深さ制御レジスタ＃１（ＤＣＲ１）９７，深さ制御レジスタ＃２（ＤＣＲ２）９９，ホスト・ストリーム選択レジスタ（ＨＳＳＲ）１００およびホスト・ストリーム・オフセット・レジスタ（ＨＳＯＲ）２２２が用いられる。
【０７０２】
セクション５．４ データ・プロセッサにおける延長動作データ・プロセッサによく見
られる問題点は、１つの算術演算論理ユニット（ＡＬＵ）のサイクル内で使用可能なＡＬＵにより対応できるものよりも幅の広い、すなわちビット数の多いデータに関して算術計算を実行しなければならないことである。たとえば、１６ビットのＡＬＵを用いて２個の３２ビットのデータ値を加算することが求められることも珍しいことではない。従来技術によるデータ・プロセッサは、１つの「キャリー」または「拡張」ビットを設け、２つのバージョンの計算命令を設けて、キャリー・ビットを命令に対する入力として用いる（たとえば「加算」と「キャリーのある加算」，「減算」と「ボローのある減算」，「右へのシフト」と「拡張のある右へのシフト」など）か否かを指定することによりこのような拡張算術演算に対応するのが普通である。この従来の方法は、限られた範囲の動作には充分であるが、その他の延長動作には充分に対応しない。拡大された範囲の延長動作に効率的に対応する方法が必要とされた。
【０７０３】
従来の技術による単一拡張ビット法により充分に対応できない延長動作の例としては、次のようなものがある：（１）異なる長さを持つ２個の２の補数の加算（短いほうの数を符号拡張しなければならない）；（２）異なる長さを持つ２個の２の補数の減算（短いほうの数を符号拡張しなければならない）；（３）２個の延長された数の最小値の計算（符号つきの場合もなしの場合もある）；（４）２個の延長された数の最大値の計算（符号つきの場合もなしの場合もある）；（５）２個の延長された数の比較（符号つきの場合もなしの場合もある）とその結果を用いた条件分岐またはその他の条件付き動作の制御；および（６）延長疑似乱数の計算。
【０７０４】
拡大された範囲の延長動作に効率的に対応する方法が必要とされた。本発明は、拡大された範囲の延長動作に効率的に対応するだけでなく、加算，減算およびシフト動作にも対応する。本発明には、データ・プロセッサにより実行される新規の命令と、この新しい命令を実行するためのデータ・プロセッサの回路構成とが含まれる。
【０７０５】
本発明は延長動作を実行する新しい命令を用いる。新規の命令は、２つのバージョンの命令、すなわち「予備」バージョンの命令と「非予備」バージョンの命令とを用いて実際に実現することができる。本発明においては、異なるバージョンの新規命令を用いて、命令の結果として拡張ビットがどのように修正されるかを決める；異なるバージョンの命令は、１つの拡張ビットが入力として用いられるか否かを決定するために用いられることはない。従来の技術では、異なるバージョンの命令を用いて１つの拡張ビットを、命令の出力ではなく、命令に対する入力として用いるか否かを指定していたことに注目されたい。さらに、新規の命令は、それぞれが異なる命令のために異なる関数を行う２個の拡張ビットを用いる。固定されたキャリー・ビットまたはボロー・ビットはなく、固定されたシフト拡張ビットもない。
【０７０６】
図５４，表２．２９，図７４および表２．３１では、ある実施例において、データ・プロセッサ１０が２個の拡張ビット、すなわちＸ０，Ｘ１を有する。「Ｘ０」，「ｘＸ０」という用語は、スケーラ・エンジン２６内のスケーラ・プロセス制御レジスタ（ＳＰＣＲ）２０８に位置するＳＸ０ビット２１０またはベクタ・エンジン９内のベクタ・プロセス制御レジスタ（ＶＰＣＲ）１０２に位置するＶＸ０ビット１０４のいずれかを表すために交換可能に用いられる。同様に、「Ｘ１」，「ｘＸ１」という用語は、スケーラ・エンジン２６のＳＰＣＲレジスタ２０８に位置するＳＸ１ビット２１２またはベクタ・エンジン９のＶＰＣＲレジスタ１０２に位置するＶＸ１ビット１０５のいずれかを表すために交換可能に用いられる。
【０７０７】
データ・プロセッサ１０により実行される命令の多くは、拡張ビットＸ０およびＸ１の両方を無条件にデフォルト状態（図示された実施例においては論理状態０）にクリアして、「ナル」拡張データを知らせる。しかし、「予備」命令と呼ばれる特定の命令は選択的に拡張ビットを修正することがある。延長計算は、通常１つ以上の予備命令を用いる。各予備命令は、選択的に拡張ビットを修正して、その後の命令のための拡張データを生成する。通常は、一連の１つ以上の予備命令の後には、１つの非予備命令が続く。この非予備命令が拡張ビットをそのデフォルトまたはネゲートされた状態に戻す。図示された実施例ではこれは論理０状態である。
【０７０８】
予備命令も非予備命令も、拡張ビットを入力として用いるが、デフォルト拡張ビット・コード％００を入力としては無視するように設計されている。拡張データの解釈は、実行されている延長動作の種類に依存する。これについては以下に説明する。さまざまなカテゴリの拡張動作と新しい命令とを説明する。説明のために、ＡＬＵは１バイト幅と想定する。しかし、同じ拡張方法を任意の幅のＡＬＵに適用することができる点に注目することが重要である。
【０７０９】
加算および減算動作について説明する。加算および減算動作に関しては、拡張ビットＸ０がキャリーまたはボロー情報を表す；拡張ビットＸ１は拡張データを生成する予備命令のためのソース・オペランドの符号ビットを表す。拡張ビットＸ１のこの符号情報はその後の「加算符号拡張」命令により用いられて、長さの短いほうの数を符号拡張して、異なる長さを持つ符号を持つ２個の２の補数の加算を正確に終了する。
【０７１０】
図１６１は、４つの命令「addp」，「addp」，「addsxp」および「addsx 」の列の実行を示すが、これらは異なる長さを有する符号を持つ２個の２の補数の加算動作を実行するために用いられる。図１６１は、レジスタ・ペア（Ｇ１，Ｇ０）に含まれる２バイトの数の、４個のレジスタ・グループ（Ｇ５，Ｇ４，Ｇ３，Ｇ２）に含まれる４バイトの数への加算を示す。この加算動作の結果は、レジスタ・グループ（Ｇ５，Ｇ４，Ｇ３，Ｇ２）に入れられる。４命令コード・シーケンスは、以下の順序でデータ・プロセッサ１０により実行される。
【０７１１】
addp Ｇ０，Ｇ２ ；Ｇ０をＧ２に予備加算（拡張ビットを生成）
addp Ｇ１，Ｇ３ ；Ｇ１をＧ３に予備加算（拡張ビットを生成）
addsxp Ｇ４ ；Ｇ４に符号拡張予備加算（拡張ビットを生成）
addsx Ｇ５ ；Ｇ５に符号拡張加算（拡張ビットをクリア）
結果の計算はサンプル値を用いて図１６１に示されている。最初に、２個の拡張ビットＸ０，Ｘ１はその前の非予備命令によりネゲートされているか、あるいはデフォルト状態に置かれているものとする。拡張ビットＸ０は加算動作に関してはキャリー・ビットとして働き、減算動作に関してはボロー・ビットとして働くことに注目されたい。拡張ビットＸ１は、それを生成する予備命令のソース・オペランドの符号ビットまたは最上位ビットを反映する。「addp」命令は、着信Ｘ１ビットを無視して、Ｘ０ビットをキャリー入力として用いる。２番目の「ad dp」命令のＸ１出力は、レジスタＧ１にある短いほうのソー
ス・オペランドの符号ビットを反映する。拡張ビットＸ１のこの符号情報は、「addsxp」命令により用いられて、＄００に対して適切な符号拡張値、図示された例では＄ＦＦを選択する。「addsxp」命令は拡張ビットＸ１を変更しないままの状態に残すので、同様に後続の「addsx 」命令は正しい符号拡張値を選択することができる。
【０７１２】
セクション２．５．９，セクション２．５．１９．１および用語集の飽和の定義を参照すると、「オーバーフロー」および「飽和」という用語が説明されている。「オーバーフロー」とは、レジスタに記憶される値がそのレジスタが記憶することのできる最大値を越えている状況を指す（たとえば８ビットのレジスタに＄１ＦＦを記憶させようとする）。「飽和」とは、オーバーフローを処理する方法を指し、レジスタ内の値が上位境界値または下位境界値と置き換えられる。たとえば、８ビットの符号なしの最大境界値を＄ＦＦに置き換える。
【０７１３】
非予備命令「add 」および「vadd」は飽和命令で、予備命令「addp」および「vaddp 」は不飽和命令である。スケーラ「add  」命令に関しては、オーバーフロー値であるＳＰ
ＣＲレジスタ２０８のＳＶビット２１４がアサートされると、加算動作の結果が上位境界または下位境界と置き換えられる。対応するオーバーフロー方向ビットであるＳＰＣＲレジスタ２０８のＳＤビット２１６により、オーバーフローが正の方向であったか負の方向であったかが決まる。オーバーフローの方向は、データ処理動作の結果を上位境界と下位境界のどちらの境界値で置き換えるかを決める。符号ビットである算術演算制御レジスタ（ＡＣＲ）１７２に位置するＳＳＧＮビット１７４は、その数字に符号があるかないかを示す。数字に符号があるかないかにより、上位境界および下位境界の値が決まる。
【０７１４】
ベクタ「vadd」命令に関しては、オーバーフロー値であるＶＰＣＲレジスタ１０２内に
あるＶＶビット１０６がアサートされると、加算動作の結果が上位境界または下位境界と置き換えられる。対応するオーバーフロー方向ビット、ＶＰＣＲレジスタ１０２のＶＤビット１０８により、オーバーフローが正の方向であったか負の方向であったかが決まる。オーバーフローの方向は、データ処理動作の結果を上位境界と下位境界のどちらの境界値で置き換えるかを決める。符号ビット、算術演算制御レジスタ（ＡＣＲ）１７２のＶＳＧＮビット１７６は、その数字に符号があるかないかを示す。数字に符号があるかないかにより、上位境界および下位境界の値が決まる。
【０７１５】
最小値動作および最大値動作を説明する。最小値動作および最大値動作に関しては、多重バイト計算は最上位バイトで始まり、最下位バイトまで進む。多重バイト最小値および最大値動作の間は、２個の拡張ビットを用いて次の条件を区別する：（１）ソース・オペランドがデスティネーション・オペランドを越えることがすでにわかっており、その後行われる、より下位のバイトの比較の結果が関連しなくなる；（２）デスティネーション・オペランドが、ソース・オペランドを越えることがすでにわかっており、その後行われる、より下位のバイトの比較が関連しなくなる；および（３）ソース・オペランドとデスティネーション・オペランドとが高次のバイトではこれまでのところ等しく、より下位のバイトの比較を続けて、どちらのオペランドが大きいかを決定しなければならない。
【０７１６】
比較と条件付きテストについて説明する。多重バイト比較に基づくテストでは、計算は最上位バイトで始まり、最下位バイトまで進む。最小値動作および最大値動作に関するものと同じ３つの条件を区別するために、拡張ビットが用いられる。本発明のある実施例においては、１つのタイプの比較予備命令をいくつかのタイプの異なる非予備条件付き命令と共に用いて、等しい，大きい，小さいなどの異なる条件動作基準をテストする。
【０７１７】
疑似乱数生成について説明する。疑似乱数生成動作に関しては、右シフト線形帰還シフト・レジスタ・タイプの技術である多重バイト計算は最上位バイトから始まり、予備命令を用いて最下位バイトまで進むことを前提とする。最後に、最上位バイトの最上位ビットの最終調整を行うために、１つの非予備命令の実行が必要になる。疑似乱数計算中は、１つの拡張ビットが多重バイト右シフト動作のキャリー・ビットとして働き、他の拡張ビットは「１のタリー」動作がこれまで奇数個の１にあったか偶数個の１にあったかを示す。あるいは、等価の左シフト線形帰還シフト・レジスタ・タイプの技術を、最下位バイトから最上位バイトまで進む多重バイト計算に用いることもできる。この場合は、最下位ビットに対する最終調整は、終了の非予備命令として「add 」命令により実行することができる。
【０７１８】
図１６２，図１６３および図１６４は、さまざまな予備命令および非予備命令の実行に関わるステップを示す。本発明の代替の実施例には、これより多くの数，少ない数または異なる予備命令および非予備命令があることもある。図１６２は、あるシフト命令の実行に関するステップを示す。図１６３は、ある比較命令の実行に関するステップを示す。図１６４は、ある算術演算命令の実行に関するステップを示す。本発明の図示された実施例では、左シフト予備命令「lshftp」が、add 予備命令「addp」を用いて実現されている点に注目されたい。
【０７１９】
セクション５．５ データ・プロセッサにおけるデータ移動動作ベクタを用いるデータ
・プロセッサによく起こる問題は、ベクタの要素の和または合計を計算する必要があることである。アプリケーションによっては、スケーラ結果（すなわちすべてのベクタ要素の合計）だけが必要になることがある。また、累積和のベクタを計算しなければならないアプリケーションもある。ベクタ要素を１つの全体集合値または蓄積部分集合のベクタに合成する必要は、加算だけに限られない。最小値および最大値などの他の集合動作もアプリケーションによっては必要になる。ベクタ要素を１つの全体集合値に合成するためのより
効果的な方法とメカニズムが必要になる。
【０７２０】
従来の技術と同様に、本発明はベクタの要素の総和を計算する；さらに、本発明は同時に累積和のベクタも計算する。本発明においては、ベクタの要素の総和は蓄積和ベクタの最終コンポーネントであることに注目されたい。本発明は、従来の技術に比べて費用効果が優れている方法で、高速のＳＩＭＤ式（単一命令複数データ式）並行計算を用いる。本発明は新しい命令と、その新しい命令を実行するための関連の回路構成とを含む。
【０７２１】
従来の技術には、ベクタの要素の和を計算するために「回帰倍加（recursivedoubling
）」と呼ばれる並行アルゴリズムがある。図１６５（従来の技術）は、８個の要素を持つベクタの要素の和を計算するためにこの回帰倍加アルゴリズムをどのように実現するかを示す。処理要素＃０は値「Ａ」を記憶するところから始まり、処理要素＃１は値「Ｂ」を記憶するところから始まり、処理要素＃２は値「Ｃ」を記憶するところから始まり、処理要素＃３は値「Ｄ」を記憶するところから始まり、処理要素＃４は値「Ｅ」を記憶するところから始まり、処理要素＃５は値「Ｆ」を記憶するところから始まり、処理要素＃６は値「Ｇ」を記憶するところから始まり、処理要素＃７は値「Ｈ」を記憶するところから始まることに留意されたい。
【０７２２】
図１６５の左から２番目の列に図示されるように、ベクタ要素が対になり、各対に関して第１組の中間和が計算される。この第１組の中間和は並行処理ハードウェアで同時に計算される。左から３番目の列には、第１組の中間和が同様に対になり合計されて、第２組の中間和が、４個の元のベクタ・コンポーネントのグループにつき１つずつ作成される。左から４番目の列では、第２組の中間和が同様に対になり、合計されて、ベクタの要素の総和すなわち「Ａ＋Ｂ＋Ｃ＋Ｄ＋Ｅ＋Ｆ＋Ｇ＋Ｈ」を１つ作成する。
【０７２３】
この従来の技術による回帰倍加アルゴリズムは、従来のＳＩＭＤ式並行コンピュータ上で実行するようにプログラミングされており、アルゴリズムの各ステップには次のようなサブステップが必要になる：すなわち［サブステップ＃１］前回のステップから得られた合計のベクタのコピーを作る（あるいはこれが第１ステップの場合は元のベクタのコピー）；［サブステップ＃２］このベクタのコピーをベクタのシフトされていないコピーに関して２(i-1) だけシフトする（「ｉ」はステップ番号；このシフトは２(i-1) 要素位置だけシフトさせるものであって、各要素内で(i-1) ビット位置だけシフトさせるものではない点に注意）；および［サブステップ＃３］ベクタのシフトされていないコピーをシフトされたコピーのベクタに加えることによりベクタ加算を実行する。図１６５では、アルゴリズムの第１ステップは３つのサブステップ１，２，３を必要とする。アルゴリズムの第２ステップは３つのサブステップ４，５，６を必要とする。そして、アルゴリズムの第３ステップは３つのサブステップ７，８，９を必要とする。
【０７２４】
しかし、従来技術によるこの回帰倍加アルゴリズムは、次のような欠点を持つ。第１にアルゴリズムの各ステップについていくつかの命令が必要である（図１６５に図示）。第２に、上記サブステップ＃１により作成されるベクタの複写により第２ベクタ・レジスタまたは同等のベクタ一時空間が消費される。第３に、従来のＳＩＭＤプロセッサでは、上記サブステップ＃２のベクタ・シフト動作は２(i-1) 個の連続ステップを必要とするか、あるいは１つのステップで多重プレースのシフトを実行することができる比較的高価な相互接続ネットワークを処理要素が通過することが必要になる。そして最後に、従来技術による回帰倍加アルゴリズムの多くは、総計（すなわちベクタの要素の総和）しか作成せず、あるアプリケーションに必要とされる蓄積和のベクタを作成しない。
【０７２５】
本発明は、ベクタ・オペランドのデータ移動動作を実行する便利な方法とメカニズムとを実現する。この方法とメカニズムは、データ移動動作と種々のタイプの計算とを任意に
組み合わせることもできる。
【０７２６】
本発明の図示された実施例では、ベクタ・オペランドの種々のデータ移動動作を実行するために次の命令が用いられる：「dadd」，「daddp 」，「dmin」，「dminp 」，「dmax」，「dmaxp 」，「dsrot 」および「drotmov 」。「drotmov命令については表２．４２
，図８５およびセクション２．５．１１．１を参照のこと。「dsrot 」命令については表２．４２，表２．４３およびセクション２．５．１１．２を参照のこと。「dadd」，「daddp 」，「dmin」，「dminp 」，「dmax」および「dmaxp 」命令については、表２．４４，表２．４６およびセクション２．５．１２．２を参照のこと。
【０７２７】
セクション５．５．１ 命令「dadd」，「daddp 」，「dmin」，「dminp 」，「dmax」
および「dmaxp 」
本発明は、「下向きadd 」と呼ばれるネモニック「dadd」を有する新規のＳＩＭＤコンピュータ命令を設けることにより、従来の回帰倍加アルゴリズムの欠点を克服する。「dadd」命令には、下向きシフトの量を指定するものとベクタ・レジスタ番号を指定するものの２つのフィールドが含まれる（表２．４４参照）。
【０７２８】
図１６６，図１６７，図１６８および図１６９では、命令「dadd ＃Ｎ, vreg2」が次のように機能する。加算は処理要素（ＰＥ）１６の半分、すなわち、それぞれの処理要素番号のビット位置「Ｎ」のものにしか行われない（最下位ビット位置を０とカウントする）。このタイプの各処理要素は、上の処理要素から伝えられた値をローカル・ベクタ・データ・レジスタ１２８（図７３参照）に加える。ノーテイションＶ［ｘ］とＶｎはいずれも、任意のベクタ・データ・レジスタ１２８を表すために用いられる。このタイプではない処理要素は、Ｖ［ｘ］レジスタの値を変わらないままにする。処理マスクであるＶＴビット１１０（図７４および表２．３１参照）を通常の方法で用いて任意の処理マスクに記憶する結果を抑制することができる。そうでない場合はＶ［ｘ］レジスタ１２８が修正される。マルチプレクサ（ＭＵＸ）３１０，３１２，３１４，３１６，３１８，３２０，３２２，３２４は、処理要素１６が転送されるデータ値のソースとして機能するか否か、または代わりに処理要素１６が受信したデータ値を伝えるか否かを選択するために用いられる。
【０７２９】
処理要素１６がその処理要素番号の「Ｎ」個の最下位ビットにすべて１を持っていると、そのＶ［ｘ］レジスタの値は下の処理要素に伝えられる。処理要素１６がビット位置「Ｎ」に１を持っていると、上の処理要素から受信した値を伝える。「Ｎ」が０の場合は、各処理要素はＶ［ｘ］レジスタの値を下の処理要素に伝える。ＶＴビット１１０は、処理要素が下の隣接要素にどの値を与えるかについては影響を持たない。最後の処理要素が最初の処理要素に値を伝えるか否かということは関係ない。これは上から第１処理要素に伝えられた値は、どのような「Ｎ」値が指定されていても用いられることがないためである。
【０７３０】
処理要素「＃（ｘ＋１）］がその計算の結果を記憶しない場合（すなわちビット位置「Ｎ」が０）、処理要素［＃ｘ］は上から、すなわち処理要素［＃（ｘ−１）］からデータを伝えるか、あるいはＶ［ｘ］レジスタ１２８からデータを得る。このため、データを伝えるためにいくつかの処理要素が必要になり、データを引き出すためにいくつかの処理要素が必要になり、他の処理要素は下の処理要素がビット位置「Ｎ」に０を持つためにそのいずれかを行うことができる。
【０７３１】
次の例は、「dadd」命令をベクタ・データ・レジスタ１２８，Ｖ［０］に４回用いて、１６要素のベクタを元の要素の蓄積和と効果的に入れ替える方法を示す。「dadd」命令を「Ｍ」回用いると、２M 処理要素境界で始まる合計２M 要素のサブベクタを充分に合計で
きる。また、「dadd」命令を同じようにＭ回用いると、２M 境界で始まる２M の連続要素よりも少ないサブベクタを合計するには充分である点にも注目されたい。最後に、「処理マスク」、すなわち図示された実施例ではＶＴビット１１０を用いて、グループ内の要素に関する計算結果に影響を与えずに、２M 要素のグループのそこで要素の修正を抑制することができることにも注目されたい。
【０７３２】
命令dadd #0, V0dadd #1, V0dadd #2, V0dadd #3, V0
ＰＥ＃ 初期値 dadd #0 後 dadd #1 後0000 X0 X0 X00001 X1 (X0)+X1 X0+X1 0010 X2 X2 (X0+X1)+X20011 X3 (X2)+X3 (X0+X1)+X2+X3 0100 X4 X4 X40101 X5 (X4)+X5 X4+X5 0110 X6 X6 (X4+X5)+X60111 X7 (X6)+X7 (X4+X5)+X6+X7 1000 X8 X8 X81001 X9 (X8)+X9 X8+X9 1010 X10 X10 (X8+X9)+X10 1011 X11 (X10)+X11 (X8+X9)+X10+X11 1100 X12 X12 X12
1101 X13 (X12)+X13 X12+X13 1110 X14 X14 (X12+X13)+X14 1111 X15 (X14)+X15 (X12+X13)+X 14+X15 
ＰＥ＃ dadd #2 後0000 X00001 X0+X10010 X0+X1+X20011 X0+X1+X2+X30100 (X0+X1+X2+X3)+X40101 (X0+X1+X2+X3)+X4+X50110 (X0+X1+X2+X3)+X4+X5+X60111 (X0+X1+X2+X3)+X4+X5+X6+X71000 X81001 X8+X91010 X8+X9+X101011 X8+X9+X10+X111100 (X8+X9+X10+X11)+X121101 (X8+X9+X10+X11)+X12+X131110 (X8+X9+X10+X11)+X12+X13+X141111 (X8+X9+X10+X11)+X12+X13+X14+X15
ＰＥ＃ dadd #3 後0000 X0 0001 X0+X1 0010 X0+X1+X20011 X0+X1+X2+X3 0100 X0+X1+X2+X3+X40101 X0+X1+X2+X3+X4+X5 0110 X0+X1+X2+X3+X4+X5+X60111 X0+X1+X2+X3+X4+X5+X6+X7 1000 (X0+X1+X2+X3+X4+X5+X6+X7)+X81001 (X0+X1+X2+X3+X4+X5+X6+X7)+X8+X9 1010 (X0+X1+X2+X3+X4+X5+X6+X7)+X8+X9+X10 1011 (X0+X1+X2+X3+X4+X5+X6+X7)+X8+X9+X10+X11 1100 (X0+X1+X2+X3+X4+X5+X6+X7)+X8+X9+X10+X11+X12 1101 (X0+X1+X2+X3+X4+X5+X6+X7)+X8+X9+X10+X11+X12+X13 1 110 (X0+X1+X2+X3+X4+X5+X6+X7)+X8+X9+X10+X11+X12+X13+X14 1111 (X0+X1+X2+X3+X4+X5+X6+X7)+X8+X9+X10+X11+X12+X13+X14+X15 「dadd」命令のため
に用いられる処理要素１６間でのデータ移動は、複雑な相互接続ネットワークを必要とせず、単一プレース・シフトのゆっくりとした複数回の実行も必要としないことに注目されたい。命令「dadd ＃Ｎ，Ｖｎ」は、（２N ）番目毎の要素を下の２N 個の要素にコピー
するだけでよいので、処理要素１６間の簡単な最も近い近隣要素との通信法で充分である。各処理要素は、上隣の処理要素から伝えられたデータを受け取る。また各処理要素は、その処理要素のローカル記憶部（すなわちベクタ・データ・レジスタ１２８）からのデータまたは上の処理要素から受け取ったデータのコピーを下隣の要素に渡す。マイクロシーケンサ（図７８参照）により、各命令についてどの程度の伝播遅延時間が許されるかが決まる。最も長い下向き伝播経路は、２N に比例し、「Ｎ」は「dadd」命令のフィールドでマイクロシーケンサ２２により受信される点に注目されたい。
【０７３３】
「dadd」命令を拡張して、多重ワード・ベクタ要素および／または飽和算術演算を処理することができる。予備命令「daddp 」は非予備命令「dadd」に関して上述されたのと同じようにシフトおよび加算を実行する。「dmin」，「dminp 」，「dmax」および「dmaxp 」命令も、「dadd」命令と同じように機能するが、異なるのは実行される計算が加算ではなく最小値または最大値の比較であることである。「dadd」，「daddp 」，「dmin」，「dminp 」，「dmax」および「dmaxp命令については、表２．４４，表２．４６およびセク
ション２．５．１２．２を参照のこと。
【０７３４】
セクション５．５．２ 命令「dsrot 」
「dadd」命令は、ベクタ加算と下向きローテイションを組み合わせて（すなわち処理要素１６の両端でベクタ要素をシフトする）、効率的な回帰倍加式の合計を行う。最小値および最大値などの他のよく用いられる集合動作についても、同様の命令が設けられているが、未来のユーザがほしがるようなすべての可能な集合動作について別々の命令を仮定し設けることは実用的ではない。汎用性を大きくするために、「下向きの密度の小さいロー
テイト」命令「dsrot 」が設けられ、ユーザが他の集合動作に関して妥当に効率的な回帰倍加アルゴリズムをプログラミングすることができるようにした。この命令は、密度の小さい多重プレース下向き円形シフトを実行する。
【０７３５】
表２．４２，セクション２．５．１１．２および表２．４３では、命令「dsrot ＃Ｎ, vreg2 」は次のように機能する。各処理要素１６は、上の処理要素からローカルＶｎレジスタに伝えられた値をコピーする。処理マスクＶＴビット１１０を通常の方法で用いて、任意の処理要素に結果を記憶することを抑制する。処理要素がその処理要素番号の「Ｎ」この最下位ビットにすべて１を持っていると、そのベクタ・データ・レジスタ（Ｖｎ）１２８（図７３を参照）から伝えられた値を、下の処理要素に伝える；そうでない場合は、上の処理要素から受け取った値を送る。
【０７３６】
「Ｎ」が０の場合、それぞれの処理要素は、Ｖｎレジスタの値を下の処理要素に渡す。ＶＴビット１１０は、処理要素が下隣にどの値を渡すかについては影響を持たない。最後の処理要素は、第１の処理要素に円形に値を伝える。チェーン内でどの処理要素１６が最後の要素として機能するかは、処理要素選択レジスタ（ＰＥＳＲ）２２０（図２５参照）により指定される。
【０７３７】
以下の例は、１６個の処理要素からなる円形チェーンで「dsrot 」命令により実行される機能を示す。
ＰＥ＃ 初期値 dsrot #0, Vn後0000 X0 X15 0001 X1 X00010 X2 X10011 X3 X20100 X4 X30101 X5 X40110 X6 X50111 X7 X61000 X8 X71001 X9 X81010 X10 X91011 X11 X101100 X12 X111101 X13 X121110 X14 X131111 X15 X14
ＰＥ＃ 初期値 dsrot #1, Vn後0000 X0 X15 0001 X1 X150010 X2 X10011 X3 X10100 X4
X30101 X5 X30110 X6 X50111 X7 X51000 X8 X71001 X9 X71010 X10 X91011 X11 X91100 X12 X111101 X13 X111110 X14 X131111 X15 X13
ＰＥ＃ 初期値 dsrot #2, Vn後0000 X0 X15 0001 X1 X150010 X2 X150011 X3 X150100 X4 X30101 X5 X30110 X6 X30111 X7 X31000 X8 X71001 X9 X71010 X10 X71011 X11 X71100 X12 X111101 X13 X111110 X14 X111111 X15 X11
ＰＥ＃ 初期値 dsrot #3, Vn後0000 X0 X15 0001 X1 X150010 X2 X150011 X3 X150100 X4 X150101 X5 X150110 X6 X150111 X7 X151000 X8 X71001 X9 X71010 X10 X71011 X11 X71100 X12 X71101 X13 X71110 X14 X71111 X15 X7「dsrot 」命令は、「回帰倍加」式集
合のデータ移動部分のみを行う。しかしベクタ計算と共に「dsrot 」命令を用いることにより、ソフトウェア命令ルーチンを書き込んで、所望の集合動作を実行することができる。「dsrot 」命令は、「dadd」および「daddp 」命令を実現するために用いられるのと同じ、安価な最近の隣接要素との通信法で実現することができる点に注目されたい。
【０７３８】
また、特殊なケースの「dsrot 」命令を用いて、すべてのベクタ要素値が移動する密度の大きい（密度の小さいのと反対の）ローテイションを実行することができる点にも注目されたい。命令「dsrot #0, Vn」は、ベクタ・レジスタＶｎのすべての要素に関して、１プレース下向きローテイションを実行する。すべてのベクタ要素の多重プレース下向きローテイションは、この命令を複数回実行することにより実行できる。この種の密度の大きいローテイション動作は、あるアプリケーションでは有用である。本発明の代替の実施例では、下向きシフトの代わりに上向きシフトを用いることができる点に注目されたい。
【０７３９】
セクション５．６ 多重レベル条件付き実行セクション５．６．１ 命令「vif 」，「velse 」および「vendif」
本発明は、命令の条件付き実行を、最小限の回路構成量しか必要としないが大きなソフトウェア汎用性をもたらす直接的な方法で実現することを可能にする。３つの条件付き命令タイプ、すなわち「vif 」，「velse 」および「vendif」が用いられる。命令名の最初
につく「v 」は、この命令がベクタ命令であることを示す。「vif 」命令タイプは、実際には「vif 」というネモニック形式を有し、条件テストを含む命令のセットである。「vif 」命令のセットは、次の個別命令を含む。
【０７４０】
「vif 」命令 条件vifeq 等しいvifge より大きいまたは等しいvifgt より大きいvifle
より小さいまたは等しいviflt より小さいvifne 等しくないvifnv オーバーフローがな
いvifv オーバーフローがある．すべての条件付き命令のリストについては、表２．４７
を参照のこと。本発明の代替の実施例においては、「vif 」タイプの命令により多くの、あるいはより少ない、あるいは異なる条件を入れることができる。また本発明の代替の実施例においては、追加のまたは異なる条件付き命令タイプを用いることができる。
【０７４１】
本発明は、各処理要素１６内に２つのビット、すなわちＶＴビット１１０およびＶＨビット１１２も用いる。ＶＴビット１１０およびＶＨビット１１２は、両方ともベクタ・プロセス制御レジスタ（ＶＰＣＲ）１０２に位置する。ＶＰＣＲレジスタ１０２は図７４に図示され、表２．３１とセクション２．３．４７の本文に説明される。本発明の代替の実施例では、イネーブル値またはマスク値を表すために２ビット以上のビット（ＶＴビット１１０）を用いてもよい。同様に、代替の実施例では、履歴値を表すために２ビット以上のビット（ＶＨビット１１２）を用いてもよい。ＶＨビット１１２は履歴値または履歴ビットと呼ばれるが、これはＶＴビット１１０の履歴または以前の論理状態を示すためである。
【０７４２】
表２．４８は、「vif 」，「velse 」および「vendif」命令の実行の結果のＶＴビット１１０およびＶＨビット１１２に関する次状態移行表を示す。Ｑｎと記された列は指定された命令が実行される前のＶＴビット１１０およびＶＨビット１１２の現在の論理状態を表す（指定された条件付き命令に関しては右端の列を参照）。Ｑｎ＋１と記された列は、指定された条件付き命令の実行の結果としてのＶＴビット１１０およびＶＨビット１１２の次の論理状態を表す（指定された条件付き命令に関しては右端の列を参照）。左端の列にリストアップされた状態移行番号は、図８７に図示された１０個の丸で囲んだ状態移行に対応する。
【０７４３】
図８７は、「vif 」，「velse 」および「vendif」命令の実行によるＶＴビット１１０およびＶＨビット１１２の状態移行図である。「vif 」命令の実行は、ＶＴビット１１０の現在の論理状態に依存する。「vif 」命令の一部である条件テストは、それぞれの処理要素１６により個別に実行される。処理要素１６は、条件付き命令の実行が始まるときにその処理要素１６のＶＴビット１１０がアサートされた場合に、「vif 」命令の実行に加わるに過ぎない。「velse 」および「vendif」命令は、ＶＴビット１１０の現在の論理状態とは独立して実行される点に注意されたい。
【０７４４】
イネーブル値（ＶＴビット１１０）と履歴値（ＶＨビット１１２）との組合せにより、回路構成レベルでソフトウェア・プログラミング構造を実現することができる。たとえば「if」，「elseif」，「else」および「endif 」の高レベルのソフトウェア・コマンドを用いる高レベルのソフトウェア構造は、「vi f 」，「velse 」および「vendif」命令と
共にイネーブル値（ＶＴビット１１０）および履歴値（ＶＨビット１１２）を用いると、回路構成レベルで実現することができる。各処理要素１６は、ソフトウェア命令の「if」，「elseif」および「else」部分のうち１つだけに加わる。履歴値は、処理要素１６がソフトウェア命令の「if」または「elseif」部分の１つに加わったか否かを示す。「if」および「else」構造が「elseif」構造なしに用いられると、ＶＴビット１１２は必要ない点に注目されたい。
【０７４５】
きわめて一般的な高レベル構造を実現するには、シーケンス内の第１命令は「vif 」命
令となり、シーケンスの最後の命令は「vendif」命令となる。簡単なシーケンスでは、「vif 」命令と「vendif」命令との間に「velse 」命令を１つしか持たないものもある。もっと複雑なシーケンスでは、表３．１３に示されるように、複数の「velse 」−「vif 」命令の対の後に「vendif」命令がつくこともある。
【０７４６】
「vif 」，「velse 」および「vendif」命令は、汎用レジスタを用いてＶＴビット１１０およびＶＨビット１１２の連続コピーを保持することによりネストすることができる点に注目されたい。表２．４７では、左シフト命令「vlshftt 」および[vlshfth」と右ローテイト命令「vrotrt」および「vrotrh」を用いて、ＶＴビット１１０とＶＨビット１１２の連続コピーをスタックし、スタックを解除することができる。
【０７４７】
その他の命令にも、暗黙の「vendif」構造を持つものがある。たとえば、「repeat」および「repeate 」命令もＶＴビット１１０およびＶＨビット１１２を修正する。また「dskip 」および「dsikpe」命令もＶＴビット１１０およびＶＨビット１１２を修正する。表２．６５は、どの命令がＶＴビット１１０およびＶＨビット１１２の論理状態とは独立して実行され、どの命令がＶＴビット１１０およびＶＨビット１１２の論理状態に依存しているのかを示す。
【０７４８】
表３．１３，表３．１４およびセクション３．６．５．４の本文は、「vif 」，「velse 」および「vendif」命令をＶＴビット１１０およびＶＨビット１１２と共に用いる命令の条件付き実行の例を示す。
【０７４９】
セクション５．６．２ 命令「dskip 」および「dskipe」
表２．５２は、「dskip 」および「dskipe」命令の動作を簡単に定義する。「dskip 」命令は、指定されたスケーラ・レジスタの内容を減分して、スケーラ・レジスタの新しい内容が＄ＦＦ（１０進数の−１の２の補数の表現に等しい）である場合に、次の命令の実行をスキップする。「dskipe」命令は、「dskip 」命令と同じステップを実行する。さらに「dskipe」命令は、「vendif」命令と同じステップ、すなわち：（１）ＶＴビット１１０がアサートされていることを確認する；および（２）ＶＨビット１１２がネゲートされていることを確認する；を実行する。図１７０は、「dskip 」および「dskipe」命令の実行中に実行されるステップの流れ図を示す。
【０７５０】
「dskipe」命令は、「dskip 」命令と同じステップを実行する。しかし、さらに「dskipe」命令は、「vendif」命令と同じステップ、すなわちＶＴビット１１０のセットとＶＨビット１１２のネゲートとを実行する。そのために、「dskipe」命令は、ＶＴビット１１０およびＶＨビット１１２がそのデフォルトまたはリセット状態に戻っていることを確認することに注意を払う。これにより「dskip命令の代わりに「dskipe」命令を用いると、
ＶＴビット１１０およびＶＨビット１１２はデフォルト状態に戻ることができる。「dskipe」命令を用いると、「dskip 」命令の前に「vendif」命令を実行する必要がなくなる。多くのアプリケーションでは、「dskip 」命令または「dskipe」命令の後の次の命令は、プログラムの流れに変更を行うような命令となる（たとえばジャンプ命令）。また、プログラムの流れが変更される前に、ＶＴビット１１０およびＶＨビット１１２がデフォルト状態に戻っていることを確認することが必要な場合が多い。
【０７５１】
本発明は、データ値を減分することによりスケーラ・レジスタのデータ値を調整するが、本発明の代替の実施例ではその他の種々の調整方法を用いることがある。たとえば、算術演算ユニットを用いて調整値の加算または減算を行うことがある。調整値は１より大きい数字でもよい。たとえば、調整値は２の累乗であっても、あるいは負の数であってもよい。あるいは、デクリメンタの代わりにインクリメンタを用いることもできる。データ値を、所定の値になるまで増分してもよい。図示された実施例の所定の値は２の補数の形を
とった１０進数の−１（１６進数では＄ＦＦ）であるが、任意の所定の値を用いることができる。たとえば、所定の値として０を用いてもよい。また、比較テストは、等しいか否かのテストでなく、以下（より小さいか等しい）であるか否かのテストでもよい。同様に、比較テストは、等しいか否かのテストでなく、以上（より大きいか等しい）であるか否かのテストでもよい。
【０７５２】
セクション５．６．３ 命令「repeat」および「repeate 」
表２．５２は、「repeat」および「repeate 」命令の動作を定義する。「repeat」および「repeate 」命令により、次の「Ｎ」個の命令がスキップされるか、次の「Ｎ」個の命令が命令のループとして「Ｍ」回実行される。
【０７５３】
図１７１，図１７２，図８８ないし図９２およびセクション２．５．１７では、「repeat」命令および「repeate 」命令により、同じステップが実行されるが、次のような違いがある。「repeate 」命令は、ループの最後の命令として、暗黙の「vendif」命令を追加する。そのために、ループ内の最後の明確な命令が実行を終了するたびに、すべてのＶＴビット１１０とすべてのＶＨビット１１２がクリアされる。これにより命令のループの最後で「repeate 」命令は、ＶＴビット１１０およびＶＨビット１１２をそのデフォルトまたはリセット値に戻す。
【０７５４】
明確な（explicit）または暗黙の（implied ）「vendif」命令を実行するにはいくつかの方法がある。たとえば、現在の論理状態に関わらず、すべてのＶＴビット１１０を強制的にアサートされた論理状態にして、すべてのＶＨビット１１２を強制的にネゲートされた論理状態にすることができる。あるいは、現在アサートされていないＶＴビット１１０だけをアサートされた論理状態にして、現在ネゲートされていないすべてのＶＨビット１１２を強制的にネゲート状態にすることもある。
【０７５５】
図５１では、マイクロシーケンサ制御レジスタ（ＭＣＲ）１８８は、ＲＥＬＦビット１９８とＲＰＬＦビット２００を持っている。ＲＥＬＦビット１９８は、「repeate 」ループが現在実行されているか否かを示す。ＲＰＬＦビット２００は、「repeat」ループが現在実行されているか否かを示す。
【０７５６】
本発明の図示された実施例では、次のレジスタを用いて「repeat」および「repeate 」命令により開始されるループを実現する：（ａ）リピート開始レジスタ（ＲＢＲ）１８０（図６５参照）；（ｂ）リピート終了レジスタ（ＲＥＲ）１８２（図６６参照）；および（ｃ）リピート・カウントレジスタ（ＲＣＲ）１８４（図６７参照）。本発明の代替の実施例においては、より多くのレジスタ、より少ないレジスタまたは異なるレジスタを用いて、「repeat」および「repeate 」命令により開始されるループを実行するために必要なパラメータを記憶してもよい。
【０７５７】
セクション５．７ データ・プロセッサ・アーキテクチャファジー論理，ニューラル・
ネットワークおよびその他の並行アレイ指向アプリケーションなどのアプリケーションには、ＳＩＳＤプロセッサを用いると最もよく実行できるデータ処理作業と、ＳＩＭＤプロセッサを用いると最もよく実行できるデータ処理作業とを利用する傾向があるものがある。本発明は、ＳＩＳＤ（単一命令単一データ）プロセッサの利点と、ＳＩＭＤ（単一命令複数データ）プロセッサの利点とを組み合わせている。
【０７５８】
図７８では、データ・プロセッサ１０は、制御信号をベクタ・エンジン回路構成９とスケーラ・エンジン回路構成２６とに供給することのできるマイクロシーケンサ２２を１機持っている。ベクタ命令が実行されている間は、マイクロシーケンサ２２はベクタ・エンジン９に制御信号を送り、スケーラ命令が実行されている間は、マイクロシーケンサ２２
はスケーラ・エンジン２６に制御信号を送る。データ・プロセッサ１０は、一度に１つしか命令を実行することができないので、データ・プロセッサ１０はベクタ命令とスケーラ命令とを並行に実行することはない。しかし、本発明のある実施例では、パイプライン化により少量の命令のオーバーラップが許される。
【０７５９】
図７８では、ベクタ・エンジン９，入力データレジスタ（ＩＤＲ）１８，リセット回路１５，命令キャッシュ２０，マイクロシーケンサ２２，制御レジスタ２４，スケーラ・エンジン２６，ノース・ポート２８，サウス・ポート３０，イースト・ポート３２およびウェスト・ポート３４はすべて、バス１３という導体を介して互いに双方向結合されている。バス・スイッチ１１が、グローバル・データ・バス３８とブロードキャスト・バス３６との間に結合される。マイクロシーケンサ２２は、バス２３を介してベクタ・エンジン９に双方向結合され、制御情報およびステータス情報を転送する。マイクロシーケンサ２２は、バス２５を介してスケーラ・エンジン２６に双方向結合され、制御およびステータス情報を転送する。図７８および図８１では、マイクロシーケンサ２２は命令解読回路構成１９，制御回路構成２１，休止回路構成３９，レジスタ３７４および算術演算論理ユニット（ＡＬＵ）３７２を有し、これらはすべて導体３７６および導体３７８を介して互いに双方向結合されている。
【０７６０】
本発明においては、１つの集積回路上にある１つのデータ・プロセッサ１０が、１つのオンボード・マイクロシーケンサ２２を用いてスケーラ命令とベクタ命令の両方を実行することができる。１つの集積回路上にあるこの１つのデータ・プロセッサ１０は、外部プロセッサからの制御なしに機能することもできる。実際には、完全なソフトウェア・プログラムを形成する一連の命令を含むオンボードＲＯＭをデータ・プロセッサ１０が持っているとすると、データ・プロセッサ１０はあるアプリケーションで用いられる単独のデータ・プロセッサとして機能することができる。
【０７６１】
セクション５．８ 着信データをデータ・プロセッサにロードする多くのファジー論理
，ニューラル・ネットワークおよびその他の並行アレイ指向アプリケーションは、集積回路がさまざまなパターンの着信データを選択および記憶することができるような融通のきくデータ記憶法を必要とする。データを送信するデバイスではなく、データを受信する集積回路にとっては、適切なビットのデータを選択し、集積回路内に所望の配列でそれを記憶することが望ましい。また、着信データの選択および記憶に要するソフトウェアの経費を最小限に抑えることも望ましい。このデータ記憶技術は、ニューラル・ネットワーク・アプリケーションではかなり用いられているが、広範囲の他のアプリケーションにも用いられている。
【０７６２】
本発明のある実施例においては、データ・プロセッサ１０は、情報を入力データレジスタ（ＩＤＲ）１８に記憶するために２種類の充てんモードを持つ。第１の充てんモードはインデックス充てんモード（入力インデックス付けモードとも呼ばれる）と呼ばれ、図２７および図１７３に図示される。第２の充てんモードは、タッグ充てんモードと呼ばれ（入力タグ付けモードとも呼ばれる）、図２８および図１７４に図示される。図１７５は、ＩＤＲ１８に関して充てんモードを実現するために用いられる回路構成を示す。
【０７６３】
充てんモード・ビット（ＦＭ）７５は、ＰＣＲレジスタ５２（図２６および表２．１０参照）に位置して、どの充てんモードが用いられるかを決める。本発明の代替の実施例では、より多くのモード、より少ないモードまたは他のモードを用いることもあり、また１つ以上の制御ビットを用いてどのモードが用いられるかを選択することもある。本発明のある実施例においては、充てんモードはデータ・プロセッサ１０が「ラン」モードの動作にいるときに用いられ、データ・プロセッサ１ーが「ストップ」モードの動作にいるときには用いられない。ラン・モードの動作中は、データはあるデータ・プロセッサ１０．ｘ
から他のデータ・プロセッサ１０．ｘにブロードキャスト・データ転送を用いて転送される。ブロードキャスト・データ転送のデスティネーションは、常に受信側データ・プロセッサ１０．ｘのＩＤＲ１８である。
【０７６４】
インデックス充てんモードは、連続的なまたは逐次的なデータ入力をＩＤＲ１８にロードするために用いられる。図２７とそれに伴う本文が、本発明のある実施例が４つの制御値をどのように用いてインデックス充てんモードでＩＤＲ１８の充てんを調整するかを示す。図示された実施例においては、４つの制御値のそれぞれは異なるレジスタに位置する。本発明の代替の実施例では、より多くの、より少ない、あるいは異なる制御値を用いる場合もある。さらに、レジスタに記憶された制御値とは異なる方法で、制御値が設けられる場合もある。
【０７６５】
図１７３は図２７に対応して、データ・プロセッサ１０によりそのポートの１つで受信されるデータ値のストリームの例を示す。ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）１３０には、タイミング値を指定する初期オフセット・ビット（ＩＯビット）１４０が含まれる。タイミング値は、データ・ストリーム中のどの時点でＩＤＲレジスタ１８がデータ値を受信し記憶し始めるかを決定する。本発明のある実施例においては、ＩＯＲレジスタ１３０は、ポートで受信される有効データ・バイトをカウントするクロック・サイクル・タイム値を含み、ＩＯＲレジスタ１３０のカウントがポートで受信された有効データ・バイトの数と一致したときにイネーブル・デバイスとして機能する。
【０７６６】
ＩＤＲポインタ・レジスタ（ＩＰＲ）１３２には、ポインタ値を指定するポインタ・ビット（ＰＴＲビット）１４２が含まれる。ポインタ値は、ＩＤＲ１８のどこに着信データが記憶されるかに影響を与える。ＩＤＲカウント・レジスタ（ＩＣＲ）１３６は、カウント値を指定するカウント・ビット（ＣＮＴビット）１４６を含む。カウント値は、ＩＤＲ１８にいくつのバイトが記憶されるかに影響を与える。ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）１３４には、マスク値を指定するマスク・ビット（Ｍビット）１４４が含まれる。マスク値は、データ値がＩＤＲ１８にどのようにロードされるかに影響を与える。
【０７６７】
図１７５では、本発明のある実施例がシャドウＩＰＲレジスタ１３５とシャドウＩＣＲレジスタ１３９とを用いる。シャドウ・レジスタにより、ＩＰＲレジスタ１３２とＩＣＲレジスタ１３６とはユーザがどのような値をプログラミングしてもそれを記憶し続けることができる。ＩＤＲ充てん動作の最初に、ＩＰＲレジスタ１３２に記憶された値がシャドウＩＰＲレジスタ１３５にロードされ、ＩＣＲ１３６レジスタに記憶されている値が、シャドウＩＣＲレジスタ１３９にロードされる。これで、シャドウＩＰＲレジスタ１３５とシャドウＩＣＲレジスタ１３９とに記憶されている値は、ＩＤＲ１８のデータ充てん中に修正することができるが、ＩＰＲレジスタ１３２およびＩＣＲ１３６レジスタに記憶されている初期値は修正されない。回路構成１３３には、シャドウＩＰＲレジスタ１３５と増分回路構成１３７とが含まれる。回路構成１４３には、シャドウＩＣＲレジスタ１３９と減分回路構成１４１とが含まれる。
【０７６８】
シャドウＩＰＲレジスタ１３５は常に、次の空いているＩＤＲ１８ロケーションを指示する。ＩＬＭＲレジスタ１３４の値は、シャドウＩＰＲレジスタ１３５の値と論理的に合成されて、ＩＤＲ１８内のどのロケーションに書き込まれるかを決定する。たとえば、ＩＬＭＲレジスタ１３４のマスク値が＄００の場合、ＩＤＲ１８のあるロケーションがＩＤＲ充てん動作中に書き込まれる。ＩＬＭＲレジスタ１３４のマスク値が＄０１の場合は、ＩＤＲ１８の次の２個の使用可能なロケーションが同じデータ値を受け取り、記憶する。ＩＣＲレジスタ１３６のカウント値は、ＩＤＲ１８にいくつのデータ値が記憶されるかを決める。しかし、実際にいくつのデータが記憶されるかを決定する際には、カウント値と
マスク値の大きいほうの値により、いくつのデータ値が実際にＩＤＲ１８に書き込まれるかが決まる。図１７３も示されるように、１つの着信データ値を２つ以上のＩＤＲ１８ロケーションに書き込むことができることに注目されたい。
【０７６９】
タッグ充てんモードは、ＩＤＲ１８に連続していないデータ入力をロードするために用いられる。ＩＤＲ初期オフセット・レジスタ（ＩＯＲ）１３０に記憶されている１つのタイミング値を用いる代わりに、タッグ充てんモードは入力タッグ・レジスタ（ＩＴＲ）１３８と呼ばれるレジスタのセットを用いる。それぞれのＩＴＲレジスタ１３８には１組のＩＴＲビット１４８が含まれ、各組のＩＴＲビット１４８がタイミング値を指定する。各タイミング値は、着信データ・ストリーム中にいつＩＤＲ１８がデータ値を受信して記憶するかを決める。ＩＴＲレジスタ１３８により、データ・プロセッサ１０は、着信データ値がＩＤＲレジスタ１８に選択的に記憶される特定の順序を指定することができる。図１７４は図２８に対応して、ポートの１つでデータ・プロセッサ１０により受信されるデータ値のストリームの例を示す。
【０７７０】
図１７５では、本発明のある実施例において、着信データがデータ・プロセッサ１０のポートの１つに受信されると、カウンタ１５６が増分される。カウンタ１５６の値がＩＴＲビット１４８の現在値に一致すると、着信データ値はＩＤＲ１８にロードされる。このプロセスは、すべての入力サンプルがＩＤＲ１８にロードされるまで続くか、あるいはＩＣＲレジスタ１３６に含まれるカウント値になるまで続く。本発明のある実施例では、減分回路構成１４１のアンダーフロー条件をＩＤＲアドレス発生および制御回路構成１５４に対する制御入力信号として用いることに注目されたい。
【０７７１】
ＩＤＲアドレス発生および制御回路構成１５４は、ＩＤＲローディング回路構成１５３と共に、ＩＤＲレジスタ１８のローディングを調整する関数を実行する。ＩＤＲアドレス発生および制御回路構成１５４は、着信データ値を記憶するＩＤＲ１８ロケーションのアドレスを発生する。回路構成１５０は一般に「いつ」ＩＤＲレジスタ１８がロードされるかを指定するために用いられ、回路構成１５１は一般にＩＤＲレジスタ１０の「どこに」着信データ値が記憶されるかを指定するために用いられ、回路構成１５２は一般に、ＩＤＲレジスタ１８に「いくつの」データ値が記憶されるかを指定するために用いられる。
【０７７２】
本発明のある実施例においては、６４個のＩＴＲレジスタ１３８があり、それぞれのＩＴＲレジスタ１３８は、２バイトの値を記憶することができる。ＩＯＲレジスタ１３０と同様に、ＩＴＲレジスタ１３８はブロードキャストされている入力データがいつ選択されてＩＤＲ１８ロケーションに記憶されるかを決める。その他の３つのレジスタ、ＩＤＲポインタ・レジスタ（ＩＰＲ）１３２と、ＩＤＲカウント・レジスタ（ＩＣＲ）１３６と、ＩＤＲロケーション・マスク・レジスタ（ＩＬＭＲ）１３４はすべて、両方の充てんモードについて同じ目的のために働く。タッグ充てんモードは、完全に接続されていないニューラル・ネットワークまたは受信フィールドの概念を採用するパラダイムを実現するための強力な方法を提供することに注目されたい。
【０７７３】
セクション５．９ データ・プロセッサのための休止技術およびメカニズム図１７６お
よび図１７７は、ベクタ命令とスケーラ命令の両方に関してデータ・コヒーレンシと同期とを確保するデータ・コヒーレンシ技術を示す。このデータ・コヒーレンシ技術により、データ・プロセッサ１０の命令の内部実行とデータ・プロセッサ１０の外部ソースによるレジスタのローディングとの調和をはかることができる。
【０７７４】
本発明のある実施例においては、入力データ・レジスタ（ＩＤＲ）１８をデータ・プロセッサ１０に対する入力ベクタとして用いることができる。スケーラ動作とベクタ動作の両方をＩＤＲ１８を用いて実行することができる。オペランドのアドレッシング・モード
は、その動作がスケーラ動作であるのか、ベクタ動作であるのかを決める（セクション２．５．５参照）。休止メカニズムを用いて、データ・コヒーレンシを確保する。休止メカニズムにより、すべての有効データ入力がＩＤＲ１８内に入るまで、ＩＤＲ１８を参照する命令を待たせることができる。
【０７７５】
シェルフと各シェルフ内の処理要素１６の説明については、図７９を参照のこと。本発明の図示された実施例においては、ＶＴビット１１０およびＶＩＤビット１１４は両方とも各処理要素１６内のベクタ・プロセス制御レジスタ（ＶＰＣＲ）１０２に位置する。本発明の他の実施例では、ＶＴビット１１０とＶＩＤビット１１４とをＩＤＲ１８の一部として配置するなど代替の構造を用いることがある。
【０７７６】
図示された実施例においては、各ＩＤＲ１８ロケーションと各処理要素１６との間には１対１の対応関係がある。このため、各処理要素１６に関しては、対応するイネーブル値（ＶＴビット１１０）と、対応する有効性値（ＶＩＤビット１１４）とがある。本発明の代替の実施例においては、イネーブル値は単独のイネーブル・ビット（ＶＴビット１１０）より大きい場合もあり、有効性値が単独の有効ビット（ＶＩＤビット１１４）よりも大きい場合もある。また、命令がＩＤＲ１８をデスティネーションとしてライト動作を実行する場合には、対応するＶＴビット１１０がアサートされているＩＤＲ１８ロケーションのみが実際には書き込まれる点に留意されたい。そのためＶＴビット１１０は、それぞれにＶＴビット１１０がアサートされている処理要素１６をイネーブルにするイネーブル値、またはそれぞれのＶＴビット１１０がネゲートされている処理要素１６をマスク・アウトすなわちディスエーブルにするマスク値のいずれかとして見なされる。
【０７７７】
図１７８ないし図１８０は、このデータ・コヒーレンシ技術の用途のいくつかの例を示す。図１７８および図１７９は、ＩＤＲ１８へのアクセスを要するスケーラ命令に対するデータ・プロセッサ１０の応答を示す。図１７８は、データ・プロセッサ１０が休止しない場合を示し、図１７９はデータ・プロセッサ１０が休止する場合を示す。図１８０は、入力データ・レジスタ（ＩＤＲ）１８へのアクセスを要し、データ・プロセッサ１０を休止させるベクタ命令に対するデータ・プロセッサ１０の応答を示す。
【０７７８】
図１７８においては、スケーラ命令は、その有効ビットがアサートされている（すなわちＶＩＤビット１１４が処理要素＃２に関して論理１である）ＩＤＲロケーション、この例ではＩＤＲ［２］にアクセスする。アサートされた有効ビットは、対応するＩＤＲロケーションに記憶されている値が有効であり、スケーラ命令の間に用いることができることを示す。すなわち有効ビットはすでに使用可能であり、スケーラ命令の実行を続けることができる。グローバル休止信号１２６はネゲートされたままの状態であるが、これはマイクロシーケンサ２２に対して、スケーラ命令の実行を遅延なしに継続することができることを知らせるものである。対応するイネーブル値、ＶＴビット１１０は、スケーラ命令には用いられないことに留意されたい。
【０７７９】
しかしながら、図１７９では、スケーラ命令は、その有効ビットがネゲートされている（すなわちＶＩＤビット１１４が処理要素＃２に関して論理０である）ＩＤＲロケーション、この例ではＩＤＲ［２］にアクセスする。ネゲートされた有効ビットは、対応するＩＤＲロケーションに記憶されている値が有効ではなく、スケーラ命令の間に用いることができないことを示す。そのためデータ・プロセッサ１０は、外部データソースが有効データ値をポートを介してＩＤＲ［２］に書き込むまで、スケーラ命令の実行を遅延しなければならない。グローバル休止信号１２６はアサートされたままの状態であるが、これはマイクロシーケンサ２２に対して、有効データが受信されるまでスケーラ命令の実行を遅延しなければならないことを知らせるものである。
【０７８０】
対応するイネーブル値、ＶＴビット１１０はスケーラ命令には用いられないことにここでも注目されたい。本発明のある実施例においては、外部データ・ソースは直接ＶＩＤビット１１４に書くことができ、そのために、ＩＤＲ１８に書き込まずにＶＩＤビット１１４をアサート状態にすることができる。外部データ・ソースは、ホスト・プロセッサ５４または別のデータ・プロセッサ１０．ｘでもよいことに注目されたい。
【０７８１】
図１８０では、ＩＤＲ１８にアクセスする命令はベクタ命令である。ここではイネーブル値、ＶＴビット１１０が用いられる。各処理要素１６のイネーブル値（ＶＴビット１１０）により、その処理要素１６がベクタ命令の実行中に関与するか否かが決まる。ＶＴビット１１０がネゲートされている場合は、その特定の処理要素１６は関与しない。
【０７８２】
そのために、イネーブル値がネゲートになっているＩＤＲ１８ロケーションはいずれも関与することはなく、その有効性値は関係しない（すなわち「無視される」とラベルがつけられる）。しかし、イネーブル値がアサートされているＩＤＲ１８ロケーションはすべて関与して、その有効性値は関連する（すなわち「関係する」とラベルがつけられる）。そのため図１８０では、処理要素＃１，＃６２はＶＴビット１１０がネゲートされているので関与しない。また、処理要素＃０，＃２，＃３，＃６３は、ＶＴビット１１０がアサートされているので関与する。
【０７８３】
さらに図１８０について続けると、ここでは有効性値（ＶＩＤビット１１４）が用いられる。ベクタ命令はＶＴビット１１０がアサートされているすべてのＩＤＲ１８ロケーションにアクセスしようとする。しかしいくつかのＩＤＲ１８ロケーション、この例ではＩＤＲ［３］，ＩＤＲ［６３］は関与してはいるが、有効データをもっていない。そのため、ＶＩＤビット１１４は、処理要素＃３および＃６３に関してネゲートされたままである。その結果、処理要素＃３，＃６３はそれぞれのベクタ休止信号１２４をアサートする（図８０参照）。任意の処理要素１６から休止信号がアサートされると、グローバル休止導体１２６はアサート状態に入れられる。本発明のある実施例においては、グローバル休止導体１２６は、ワイアＯＲまたはワイアＡＮＤコンフィギュレーションで用いられる。
【０７８４】
図８０に示された本発明の特定の実施例においては、休止発生論理１１６は、２つのローカル休止信号、すなわちスケーラ休止信号１２２とベクタ休止信号１２４を発生する。スケーラ休止信号１２２とベクタ休止信号１２４は、回路１２１により論理的に合成されて、グローバル休止信号１２６を作成する。図示された実施例においては、スケーラ休止信号１２２は、処理要素１６を利用する動作がスケーラを参照するときに用いられ、ベクタ休止信号１２４は、処理要素１６を利用する動作がベクタを参照するときに用いられる。本発明の代替の実施例では、グローバル休止信号１２６を異なる方法で発生することもある。
【０７８５】
グローバル休止信号１２６により信号がアサートされると、マイクロシーケンサ２２に対して、データ・プロセッサ１０は休止して、有効データが受信されてＩＤＲ［３］およびＩＤＲ［６３］に記憶されるまで現在のベクタ命令の実行を遅延させるべきであることが知らされる。有効データが受信されＩＤＲ［３］に記憶されると、処理要素＃３のＶＩＤビット１１４がアサートされ、処理要素＃３のベクタ休止信号１２４がネゲートされる。そして、有効データが受信されてＩＤＲ［６３］に記憶されると、処理要素＃６３のＶＩＤビット１１４がアサートされて、処理要素＃６３のベクタ休止信号１２４がネゲートされる。ベクタ休止信号１２４をアサートする処理要素１６はもはやなく、そのためにグローバル休止導体１２６はネゲート状態に戻る。
【０７８６】
ＶＴビット１１０がアサートされている処理要素１６のそれぞれのＶＩＤビット１１４がアサートされていると、処理要素１６はどれもベクタ休止信号１２４をアサートしない
ことになり、グローバル休止導体１２６はネゲート状態に留まる。この場合は、関与している処理要素１６のそれぞれに対応するＩＤＲ１８ロケーションには、すでに有効データが含まれているので、休止する必要はない。
【０７８７】
ＶＩＤビット１１４のアサーションとネゲーションに関しては、本発明の異なる実施例は、ＶＩＤビット１１４を変更するための広範囲のメカニズムから選択することがある。本発明の代替の実施例では、１つ以上の次のようなメカニズムを、用いることがある。第１は、特定の命令または命令タイプが直接ＶＩＤビット１１４を変更する。第２は、アドレッシング・モードがＶＩＤビット１１４を変更することもある。たとえば、本発明のある実施例においては、ＩＤＲ１８がソース・レジスタであるベクタ命令に関して２つの特殊なアドレッシング・モードがある。「ＩＤＲ」アドレッシング・モードが用いられると、ＶＩＤビット１１４はベクタ命令の実行により影響を受けない。一方で、「ＩＤＲＣ」アドレッシング・モードが用いられると、ＶＩＤビット１１４はベクタ命令の実行によりネゲートされる。第３に、データ・プロセッサ１０のリセットにより、ＶＩＤビット１１４が変更される。第４に、ＩＤＲ１８ロケーションに対するライト・アクセスを用いて、対応するＶＩＤビット１１４をアサートすることができる。第５に、直接ＶＩＤビット１１４に対するライト・アクセスを用いてその論理状態を変更することがある。ＶＩＤビット１１４に影響を及ぼす他のメカニズムも用いることができる。
【０７８８】
セクション５．１０ 最大値と最小値の決定セクション５．１０．１ 命令「comax 」，「rowmax」，「locmax」，「colmin」，「rowmin」および「locmin」
ファジー論理，ニューラル・ネットワークおよびその他の並行アレイ指向アプリケーションに関しては、ベクタ・オペランドについてもスケーラ・オペランドについても、最大値および最小値を決定することのできる簡単で迅速な技術およびメカニズムが必要である。この技術およびメカニズムは、比較しなければならない種々の数のデータ値を扱うことができるものでなければならない。また、この技術およびメカニズムは、集積回路の境界を越えて最大値および最小値の決定を実行することができるものでなければならない。値そのものだけでなく最小値または最大値のロケーションを決定することが重要であることも多い。最小値および最大値決定のこの技術は、ニューラル・ネットワーク・アプリケーションではかなり用いられるものであるが、他の広範なアプリケーションにおいても用いられる。
【０７８９】
本発明のある実施例においては、データ・プロセッサ１０は最大値決定を行うために１つ以上の「colmax」，「rowmax」または「locmax」命令を実行することができる。同様に、データ・プロセッサ１０は最小値決定を行うために１つ以上の「colmin」，「rowmin」または「locmin」命令を実行することができる。本発明の代替の実施例では、より多くの、より少ない、または異なる比較命令を用いることがある。
【０７９０】
図１８１では、ワイアＯＲライン１５８と記された比較ラインまたは比較導体が、ベクタ・エンジン９の各処理要素１６に結合されている。各処理要素１６は、各処理要素１６内のベクタ・プロセス制御レジスタ（ＶＰＣＲ）１０２にある対応するＶＴビット１１０を有する（ＶＴビット１１０については、図７９，図７４および表２．３１を参照のこと）。図１８１は、６３個の処理要素１６を示すが、本発明の代替の実施例では任意の数の処理要素１６を用いることもできる。最小値／最大値ピン選択回路構成１６４と、行制御ピン回路構成１６０と、列制御ピン回路構成１６２とが用いられて、比較導体１５８を図示された集積回路ピンのそれぞれ、すなわち行制御ピン反転ＲＯＷ８２と列制御ピン反転ＣＯＬ８４のそれぞれに選択的に結合させる。これにより回路１７０は一般的に、比較導体１５８を集積回路ピン８２，８４に選択的に結合するか、あるいは分離するためのスイッチとして機能する。
【０７９１】
図１８５および図１８６は、比較命令が実行されるときに実行されるステップを図示する。本発明のある実施例においては、比較命令そのものの特定のオペコードにより、反転ＣＯＬピン８４および反転ＲＯＷピン８２のどちらかが比較導体１５８に結合されるか否かが決まる。たとえば、図示された実施例においては、「colmax」および「colmin」命令は反転ＣＯＬピン８４を比較導体１５８に結合させるだけであり、「rowmax」および「rowmin」命令は反転ＲＯＷピン８２を比較導体１５８に結合させるだけであり、「locmax」および「locmin」命令はいずれのピンも比較導体１５８に結合させない。
【０７９２】
図１８１では、マイクロシーケンサ２２が比較命令を解読して、結合すべきピンがある場合に、どちらのピンをその命令のために比較導体１５８に結合させるかを決める。次にマイクロシーケンサ２２は、最小値／最大値ピン選択回路構成１６４に制御信号を送る。最小値／最大値ピン選択回路構成１６４は、この制御信号を用いて行制御ピン回路構成１６０に対する制御信号および列制御ピン回路構成１６２に対する制御信号をアサートするか、あるいはネゲートするかを選択的に決める。行制御ピン回路構成１６０が最小値／最大値ピン選択回路構成１６４からアサートされた制御信号を受信すると、行制御ピン回路構成１６０は、比較導体１５８を反転ＲＯＷピン８２に結合させる。列制御ピン回路構成１６２が最小値／最大値ピン選択回路構成１６４からアサートされた制御信号を受信すると、列制御ピン回路構成１６２は、比較導体１５８を反転ＣＯＬピン８４に結合させる。
【０７９３】
その結果、図１８４に図示されるような他のデータ・プロセッサ１０．ｘの集積回路ピンに、比較導体１５８を結合することができる。これにより内部比較導体１５８は、列導体１６６および行導体１６８などの外部比較導体に結合することができる。そのため、集積回路内部ならびに複数の集積回路のピン境界の両側で比較を行うことができる。
【０７９４】
図１８２および図１８３は、「locmax」命令の実行例を図示する。図１８２では、第１列は各処理要素に最初に記憶された任意の８ビット値を示す。この例では、イネーブル・ビット（ＶＴビット１１０）の初期値は、集積回路＃８ないし＃６３に関しては０である。そのため、処理要素＃０ないし＃７だけがイネーブルになり、命令の実行に関与する。
【０７９５】
第１ステップとして、イネーブルになった各処理要素、この例では＃０ないし＃７は、第１データ・ビットをワイアＯＲライン１５８に入れる。本発明の図示された実施例においては、第１データ・ビットは常に、各処理要素に記憶されたデータ値の最上位ビット（ＭＳＢ）であり、その次の各ビットは次に上位のビットである。しかし、本発明の代替の実施例では、データ・ビットの順序および選択に関して異なる方法を用いることがある。
【０７９６】
図示された実施例の比較導体１５８はワイアＯＲラインであるので、比較ライン１５８は論理レベル１がライン上で駆動されない限り、論理０の状態のままである。ワイアＡＮＤラインを代わりに用いることもできる。ワイアＡＮＤラインに関しては、論理レベル０がライン上で駆動されない限り、このラインは論理１の状態に留まる。図１８３は、各ステップの後の、すなわち各グループのデータ・ビットがワイアＯＲライン１５８に入れられた後のワイアＯＲライン１５８の論理状態を示す。
【０７９７】
「locmax」命令については、各処理要素がワイアＯＲライン１５８に入れた論理値と、その結果得られたラインの実際の論理状態とを比較する。図８０によれば、シフト，補足および検出回路構成１１７がこの関数を実行する。処理要素が論理０をラインに入れ、０を読み返した場合は、その処理要素のＶＴビット１１０はアサートされたままの状態になる。同様に、処理要素が論理１をラインに入れ、１を読み返した場合は、その処理要素のＶＴビット１１０はアサートされたままの状態になる。しかし、処理要素が論理０をラインに入れ、１を読み返した場合は、その処理要素のＶＴビット１１０はネゲートされて、ディスエーブルとなったその処理要素はもはや比較命令の実行には関与しない。ワイアＯ
Ｒラインについては、処理要素がライン１に論理１を入れて、０を読み返すことはできないので留意すること。
【０７９８】
図１８２に図示された例では、処理要素＃０ないし＃７に記憶された各データ値の最上位ビットは論理０である。そのため、イネーブルされた各処理要素は、ワイアＯＲライン１５８上に論理０を入れる。これによりワイアＯＲライン１５８は論理０状態に留まる。それぞれの処理要素は、その処理要素がライン上に入れた値（この場合は０）と、その結果得られたラインの実際の値（この場合も０）とを比較する。各処理要素はラインに論理０を入れて、０を読み返したので、各処理要素のＶＴビット１１０はアサートされたままになる。各処理要素のＶＴビット１１０の値を図１８２の第２列に図示する。これにより、第１ステップの後では、各処理要素のＶＴビット１１０の値は論理１のままである。
【０７９９】
第２ステップとして、イネーブルになった各処理要素、この例でも処理要素＃０ないし＃７は、第２データ・ビットである次に上位のビットをワイアＯＲライン１５８に入れる。各処理要素は、ワイアＯＲライン１５８に入れた論理値とその結果得られた実際のラインの論理状態とを比較する。処理要素＃０，＃２，＃３，＃４，＃６は、ラインに論理１を入れて、１を読み返したので、これらの処理要素のＶＴビット１１０はアサートされたままである。しかし処理要素＃１，＃５，＃７は、ラインに論理０を入れて１を読み返したので、これらの処理要素のＶＴビット１１０はネゲートされる。これにより処理要素＃０，＃２，＃３，＃４，＃６はイネーブルのままであり、処理要素＃１，＃５，＃７はディスエーブルになり、比較命令の実行にはもう関与しない。各ワイアＯＲステップ語の各処理要素のＶＴビット１１０を、図１８２の第２列に図示する。
【０８００】
最後のワイアＯＲステップが終った後のＶＴビット１１０の望ましい値が、図１８２の右端の列に図示される。右端の列の望ましい結果は、中間の列のステップ８に図示された実際の結果と一致する。処理要素＃２，＃４はいずれも最大値、この場合は％０１０１０００を含むので、命令の最後に処理要素＃２，＃４のＶＴビット１１０だけがアサートされることが望ましい。このように、比較命令を用いて、最大値を含まないすべての処理要素をディスエーブルにすることができる。ＶＴビット１１０を用いて、最大値を含む処理要素（群）のロケーションを決定することができる。また、ＶＴビット１１０がアサートされている任意の処理要素から、比較命令の最後に最大値そのものを検索してもよい。
【０８０１】
本発明の図示された実施例においては、ワイアＯＲステップの数はプログラミング可能である。命令のビット・フィールドが、ワイアＯＲステップの数を指定するために用いられる。たとえば、各処理要素が「Ｎ」ビット幅のデータ値を持っているとすると、命令のビット・フィールドをプログラミングすることにより、ユーザは１ビットから「Ｎ」ビットのどこでも比較するように選択することができる。本発明の代替の実施例では、命令ビット・フィールドの代わりにレジスタ・ビット・フィールドまたはデフォルト値を用いて比較するビットの数を指定することもある。
【０８０２】
図８０では、ビット修正回路構成１１８がシフト，補足および検出回路構成１１７に結合されている。シフト，補足および検出回路構成１１７は、処理要素がいつ論理０をラインに入れ、１を読み返したかを検出する。シフト，補足および検出回路構成１１７は、次に制御信号をビット修正回路構成１１８にアサートする。ビット修正回路構成１１８がこのアサートされた制御信号を受信すると、ビット修正回路構成１１８は、ＶＴビット１１０をネゲートする。制御およびステータス信号は、制御回路構成１１５とマイクロシーケンサ２２との間で転送されることに注目されたい。また、制御回路構成１１５は、処理要素１６を制御するために用いられる制御信号を発生することにも注目されたい。
【０８０３】
図１８２および図１８３に示された例は、符号なしのデータ値を用いた「locmax」命令
の実行を扱っている。このメカニズムと技術の変形を用いて、符号つきの数または符号なしの数に関して動作する命令であって、最大値または最小値の位置を決定する命令を実行することができる。符号つきの数のベクタの最大値の位置を決定するには、上記の手順にステップを１つ追加して用いる。符号つきの数を２の補数の形で表すと、符号つきの数それぞれの最上位ビットは符号ビットになる。符号つきの数それぞれの符号ビットは、ワイアＯＲライン１５８に入れる前に補足しなければならない。
【０８０４】
符号つきの数のベクタの最小値も、すべてのビットを補足することにより同様の方法で位置を決定することができる。また２の補数である符号つきの数の最小値は、符号ビットを除くすべてのビットを補足することにより位置が決定できる。図８０には、シフト，補足および検出回路構成１１７が、マイクロシーケンサ２２に結合されて、ワイアＯＲライン１５８に出力されるデータ・ビットがある場合は、どのビットを補足しなければならないかということに関する制御情報を受け取る。次に、シフト，補足および検出回路構成１１７は、必要な補足を行う。
【０８０５】
本発明の図示された実施例においては、制御レジスタ・ビット・フィールドを用いて、比較命令が符号つきの値として比較されているデータ値を扱うのか、符号なしの値として比較されているデータ値を扱うのかを決定する。図２２では、算術演算制御レジスタ（ＡＣＲ）１７２には、スケーラ符号つきの／符号なしのビット（ＳＳＧＮ）１７４とベクタ符号つきの／符号なしのビット（ＶＳＧＮ）１７６とが含まれる。ＶＳＧＮビット１７６を用いて、比較命令の間に用いられるベクタ・データ値が符号つきの数と見なされるのか、符号なしの数と見なされるのかを決める。
【０８０６】
本発明の図示された実施例は、１つの比較命令につき８データ・ビットの最大幅しか扱わないが、比較命令を最上位バイトから２回以上実行することにより、８ビットより広いベクタ・データ値を処理することができる。本発明の代替の実施例では、８ビットよりも幅の広いデータ値も狭いデータ値も扱うことがある。
【０８０７】
図１８２および図１８３に図示された例は、「locmax」命令の実行を扱っている。「rowmax」命令の実行は、「locmax」命令の実行と似ているが、比較導体１５８がさらに反転ＲＯＷピン８２に結合される点が異なる。また、「colmax」命令の実行は、「locmax」命令の実行と似ているが、比較導体１５８がさらに反転ＣＯＬピン８４にも結合される点が異なる。
【０８０８】
同様に「rowmin」命令の実行は、「locmin」命令の実行と似ているが、比較導体１５８がさらに反転ＲＯＷピン８２にも結合される点が異なる。また、「colmin」命令の実行は、「locmin」命令の実行と似ているが、比較導体１５８がさらに反転ＣＯＬピン８４にも結合される点が異なる。
【０８０９】
図１８４では、比較動作に用いられるワイアＯＲライン１５８は、データ・プロセッサ１０．ｘ内部だけで用いられることも、あるいは集積回路ピンを介して多重チップ動作のための外部ワイアＯＲラインに接続されることもある。データ・プロセッサ１０．ｘは、図１８４に図示されるような二次元アレイ内でデータ・プロセッサ１０．ｘの行または列をまたいで行われる多重チップの最大値または最小値ロケーション動作を支援する。複数のワイアＯＲライン１６６，１６８が用いられる。一般には、各行に１つの外部ワイアＯＲラインがあり、各列に１つの外部ワイアＯＲラインがある。
【０８１０】
本実施例では、各データ・プロセッサ１０．ｘは、１つのワイアＯＲ行ライン１６８に結合する１つの反転ＲＯＷピン８２と、１つのワイアＯＲ列ライン１６６に結合する１つの反転ＣＯＬピン８４とを有する。これらの列導体１６６と行導体１６８は、データ・プ
ロセッサ１０．ｘがラン・モードの動作出命令を実行するときに実行される、行と列に基づいた多重チップ動作のためのワイアＯＲラインとして機能する。ストップ・モードの動作の場合は、反転ＲＯＷピン８２および反転ＣＯＬピン８４はチップ選択と同様の方法で用いられる。
【０８１１】
セクション５．１０．２ 命令「vmaxp 」，「vmax」，「vminp 」と「vmin」，「maxp
」，「max 」，「minp」と「min 」
ファジー論理，ニューラル・ネットワークおよびその他の並行アレイ指向アプリケーションについては、ベクタ・オペランドおよびスケーラ・オペランドの両方に関して、最大値および最小値の決定を行うことができる簡単で迅速な技術およびメカニズムが必要とされる。この技術およびメカニズムは、符号つきの数（２の補数）と符号なしの数の両方に関して最大値および最小値の決定を実行できるものでなければならない。また、この技術およびメカニズムは、延長（多重バイト）オペランドについても最大値および最小値の決定を実行できるものでなければならない。最小値および最大値決定の方法は、ニューラル・ネットワーク・アプリケーションでかなり用いられるが、他の広範なアプリケーションでも用いられる。
【０８１２】
図７７では、ベクタ・エンジン９がベクタ最大値命令および最小値命令、すなわち「vmaxp 」，「vmax」，「vminp 」および「vmin」の実行に関わる。表２．４４は、ベクタ最大値命令およびベクタ最小値命令を説明する。表２．３６は、ソース・レジスタ（すなわち「vreg1 」）としてどのレジスタを用いることができるかをリストアップし、表２．３７は、デスティネーション・レジスタ（すなわち「vreg2D」）としてどのレジスタを用いることができるかをリストアップしている。セクション２．５．１２．３および表３．７も、ベクタ最大値命令およびベクタ最小値命令を説明する。
【０８１３】
図７９および図８０では、ベクタ最大値およびベクタ最小値命令の比較部分が、算術演算論理ユニット（ＡＬＵ）１１９により実行される。比較関数は、加算，減算および比較命令に関して同じＡＬＵ１１９が用いられるので、最小値および最大値命令に関して回路構成を追加する必要はほとんどない。本発明の代替の実施例においては、任意のタイプの比較器回路構成を用いて比較関数を実行することができる。
【０８１４】
符号ビットである算術演算制御レジスタ（ＡＣＲ）１７２内に位置するＶＳＧＮビット１７６は、ベクタ最大値および最小値命令に用いられるデータ値が、符号つきの数として扱われるのか、それとも符号なしの数として扱われるのかを決定する。ベクタ・エンジン９には２個の拡張ビット、すなわちベクタ・プロセス制御レジスタ（ＶＰＣＲ）１０２内にあるＶＸ０ビット１０４およびＶＸ１ビット１０５がある。これら２つの拡張ビットは、延長最小値および最大値動作を含む延長動作に対応するために用いられる。この２つの拡張ビットは、延長計算の間を除き、通常はデフォルト状態にクリアされている。
【０８１５】
図７８では、スケーラ・エンジン２６がスケーラ最大値およびスケーラ最小値命令、「maxp」，「max 」，「minp」および「min 」の実行に関わっている。表２．５１は、ベクタ最大値およびベクタ最小値命令を説明する。表２．３８は、どのレジスタがソース・レジスタ（すなわち「sregS 」）として用いられ、どのレジスタがデスティネーション・レジスタ（すなわち「sregD 」）として用いられるのかをリストアップしている。
【０８１６】
図８０には、スケーラ最大値およびスケーラ最小値命令の比較部分が、算術演算論理ユニット（ＡＬＵ）３０４により実行される。比較関数は、加算，減算および比較命令に用いられるのと同じＡＬＵ３０４により実行されるので、最小値および最大値命令のための追加の回路構成はほとんど必要ない。本発明の代替の実施例においては、任意のタイプの比較器回路構成を用いて比較関数を実行することもできることに注目されたい。
【０８１７】
符号ビットである算術演算制御レジスタ（ＡＣＲ）１７２内に位置するＳＳＧＮビット１７４は、スケーラ最大値および最小値命令に用いられるデータ値が、符号つきの数として扱われるのか符号なしの数として扱われるのかを決定する。スケーラ・エンジン２６には２個の拡張ビット、すなわちＳＰＣＲレジスタ２０８にあるＳＸ０ビット２１０およびＳＸ１ビット２１２がある。これら２つの拡張ビットは、延長最小値および最大値動作を含む延長動作に対応するために用いられる。この２つの拡張ビットは、延長計算の間を除き、通常はデフォルト状態にクリアされている。
【０８１８】
図１６３は、ベクタとスケーラの最小値および最大値命令を含む、種々の比較命令の実行中にデータ・プロセッサ１０により行われるステップを示す。
本発明においては、２個の１バイト・オペランドの最小値または最大値を計算するためには１つの命令しか必要ではない。たとえば、１つの命令「min Ｇ０，Ｇ１」を用いて、レジスタＧ０，Ｇ１（図８２のＧ［ｎ］レジスタ３０２参照）に記憶されている２個の１バイト・オペランドの最小値を計算することができる。結果、すなわち２個の値の小さいほうの値は、レジスタＧ１に記憶される。また、拡張ビットＳＸ０ ２１０およびＳＸ１ ２１２は、命令が開始される前にそのデフォルト値、図示された実施例では％００になっていることが必要であることにも留意されたい。
【０８１９】
以下のステップは、「min 」命令の間に実行される。ＡＬＵ３０４は、ＳＳＧＮビット１７４により指定されたとおりに、符号つきの算術演算または符号なしの算術演算のいずれかを用いて２個のデータ値を比較する。ＡＬＵ３０４は、デスティネーション・データ値からソース・データ値を減ずる。ＡＬＵ３０４は、減算動作がボローを必要としたか否かを示すボロー値を生成する。減算の結果が負の値である場合は、ボロー値がアサートされる。減算の結果が正の値である場合は、ボロー値はネゲートされる。
【０８２０】
ＡＬＵ３０４は、ボロー信号上にボロー値を出力し、この信号は制御回路構成３０８により受信される。次に制御回路構成３０８は、１つ以上の制御信号をＡＬＵ３０４の出力にあるマルチプレクサ（図示せず）に送り、ＡＬＵ３０４に対して小さいほうのデータ値を結果として選択するように命令する。結果、すなわち小さいほうの値は、デスティネーション・レジスタに転送され、そこに記憶される。「min 」命令は「非予備」命令であるので、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２を無条件にデフォルト状態にクリアする。制御回路構成３０８とビット修正回路構成３０６が、スケーラ・プロセス制御レジスタ（ＳＰＣＲ）２０８内のビットの論理状態を変更するために用いられる。
【０８２１】
１つ以上の予備命令の列に、１個の非予備命令が続くと、通常は延長オペランドの最小値または最大値を計算するために用いられる。たとえば、次のような一連の命令を用いて、ソース・レジスタ・グループ（Ｇ２，Ｇ１，Ｇ０）とデスティネーション・レジスタ・グループ（Ｇ５，Ｇ４，Ｇ３）の２個の３バイト数の最小値を計算することができる。結果、すなわち２個の３バイト値の小さいほうの値はレジスタ・グループ（Ｇ５，５４，Ｇ３）に記憶されることに留意されたい。また、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２は、最初の命令「minp２，Ｇ５」が開始される前にデフォルト状態になっていることが必要とされることにも留意されたい。
【０８２２】
minp Ｇ２，Ｇ５ ；min 予備Ｇ２からＧ５（拡張ビットを発生）
minp Ｇ１，Ｇ４ ；min 予備Ｇ１からＧ４（拡張ビットを発生）
min Ｇ０，Ｇ３ ；min Ｇ０からＧ３（拡張ビットをデフォルト状態に戻す）
予備命令「m inp」は、最上位バイトに適用され、非予備命令「min 」は最後の最下位
バイトに適用されることに留意されたい。第１命令「minp Ｇ２，Ｇ５」は、拡張ビット
ＳＸ０ ２１０，ＳＸ１ ２１２が命令の最初ではデフォルト状態にあるという事実を用い
て、最上位バイトを扱うと判断する。結果として、「minp Ｇ２，Ｇ５」命令は、ＳＳＧ
Ｎビット１７４に指定されたとおりに、符号つきの数または符号なしの数のいずれかを用いてＧ２とＧ５を比較する。
【０８２３】
「minp Ｇ２，Ｇ５」命令は、小さいほうのオペランド・バイトを結果として選択して
、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２を選択的に修正して、比較の結果を示す（表２．５９参照）。レジスタＧ２に記憶されているデータ値がレジスタＧ５に記憶されているデータ値よりも小さい場合は、レジスタＧ２が結果として選択され、拡張ビットＳＸ０
２１０，ＳＸ１ ２１２は％０１に等しくなるように選択的に修正される。レジスタＧ２に記憶されているデータ値がレジスタＧ５に記憶されているデータ値よりも大きい場合は、レジスタＧ５が結果として選択され、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２は％１０に等しくなるように選択的に修正される。レジスタＧ２に記憶されているデータ値がレジスタＧ５に記憶されているデータ値と等しい場合は、どちらかのデータ値が結果として選択され、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２は％１１に等しくなるように選択的に修正される。
【０８２４】
第２命令「minp Ｇ１，Ｇ４」は、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２が命令の
最初ではデフォルト状態にないという事実を用いて、最上位バイトを扱わないと判断する。
【０８２５】
拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２の着信値が％０１の場合は、レジスタ・グループ（Ｇ２，Ｇ１，Ｇ０）に記憶されている３バイト値はレジスタ・グループ（Ｇ５，Ｇ４，Ｇ３）に記憶されている３バイトのデータ値よりも小さいという判断がすでになされている。そのためレジスタＧ１に記憶されているデータ値が結果として選択され、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２は％０１のままになる。
【０８２６】
拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２の着信値が％１０の場合は、レジスタ・グループ（Ｇ２，Ｇ１，Ｇ０）に記憶されている３バイト値はレジスタ・グループ（Ｇ５，Ｇ４，Ｇ３）に記憶されている３バイト値よりも大きいという判断がすでになされている。そのためレジスタＧ４に記憶されているデータ値が結果として選択され、拡張ビットは％１０のままになる。
【０８２７】
拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２の着信値が％１１の場合は、レジスタ・グループＧ１に記憶されているデータ値が、レジスタＧ４に記憶されているデータ値と符号なしの算術演算を用いて比較される。このバイトは最上位バイトではないので、３バイト数に符号があっても符号ビットを含まないことに留意されたい。「minp Ｇ１，Ｇ４」命令
は、小さいほうのデータ値を結果として選択し、比較の結果により拡張ビットＳＸ０ ２
１０，ＳＸ１ ２１２を％０１，％１０または％１１に選択的に修正する（表２．５９参
照）。
【０８２８】
最後の命令「min Ｇ０，Ｇ３」は、非予備命令であり、前出の「minp Ｇ１，Ｇ４」と
同じように機能するが、拡張ビットＳＸ０ ２１０，ＳＸ１ ２１２をデフォルト状態％００に戻す点だけが異なる。
【０８２９】
上記の例は、スケーラ命令「min 」および「minp」を用いているが、ベクタ命令「vmin」および「vminp 」に関しても、それぞれイネーブルになった処理要素１６内で同じステップが実行される。
【０８３０】
最大値を決定する計算では、スケーラ命令「max 」および「maxp」と、ベクタ命令「vmax」および「vmaxp 」が用いられる。最大値命令の機能は最小値命令の機能にとても似て
いるが、小さいほうの値ではなく大きいほうの値が結果として選択され、デスティネーション・レジスタに記憶される点だけが異なる。
【０８３１】
図１８７は、ソース・レジスタ・グループ（Ｇ２，Ｇ１，Ｇ０）とデスティネーション・レジスタ・グループ（Ｇ５，Ｇ４，Ｇ３）にある２個の３バイトの符号なしの数の最大値を計算するために用いることのできる一連の命令の例を示す。結果、すなわち２個の３バイト値の大きいほうの値はレジスタ・グループ（Ｇ５，５４，Ｇ３）に記憶されることに留意されたい。また、拡張ビットＳＸ０２１０，ＳＸ１ ２１２は、最初の命令「maxp Ｇ２，Ｇ５」が開始される前にデフォルト状態になっていることが必要とされることにも留意されたい。また、符号ビットＳＳＧＮ１７４は％１に等しく、これはデータ値が符号なしの数として扱われることを示すことにも留意されたい。
【０８３２】
maxp Ｇ２，Ｇ５ ；max  予備Ｇ２からＧ５（拡張ビットを発生）
maxp Ｇ１，Ｇ４ ；max 予備Ｇ１からＧ４（拡張ビットを発生）
max Ｇ０，Ｇ３ ；max Ｇ０からＧ３（拡張ビットをデフォルト状態に戻す）
図１８８は、ソース・レジスタ・グループ（Ｇ２，Ｇ１，Ｇ０）とデスティネーション・レジスタ・グループ（Ｇ５，Ｇ４，Ｇ３）にある２個の３バイトの符号つきの数の最大値を計算するために用いることのできる一連の命令の例を示す。結果、すなわち２個の３バイト値の大きいほうの値はレジスタ・グループ（Ｇ５，５４，Ｇ３）に記憶されることに留意されたい。また、拡張ビットＳＸ０２１０，ＳＸ１ ２１２は、最初の命令「maxp Ｇ２，Ｇ５」が開始される前にデフォルト状態になっていることが必要とされることにも留意されたい。また、符号ビットＳＳＧＮ１７４は％０に等しく、これはデータ値が符号つきの数（２の補数）として扱われることを示すことにも留意されたい。
【０８３３】
maxp Ｇ２，Ｇ５ ；max 予備Ｇ２からＧ５（拡張ビットを発生）
maxp Ｇ１，Ｇ４ ；max 予備Ｇ１からＧ４（拡張ビットを発生）
max Ｇ０，Ｇ３ ；max Ｇ０からＧ３（拡張ビットをデフォルト状態に戻す）
セクション５．１１ 係数メモリ・アレイ（ＣＭＡ）１４に対する反転アクセス図７８
および図１８９の本発明の図示された実施例においては、係数メモリ・アレイ（ＶＨ）１４は６４行６４列に配列されたバイト幅の記憶回路のアレイである。本発明の代替の実施例では、異なる数の行と異なる数の列とを有することもある。各処理要素１６は、一度にＶＨ１４内の１行に結合され、そのため各処理要素１６は一度に６４バイトの情報にアクセスすることができる。
【０８３４】
ＶＨ１４および処理要素１６により必要とされる半導体面積を最小限に抑えるために、処理要素１６は実際には２つの部分に分割される。処理要素１６の第１部分はＶＨ１４の第１サイドに物理的に位置する。処理要素１６の第２部分はＶＨ１４の別のサイドに物理的に位置する（図１８９参照）。
【０８３５】
図１８９に示されるようにＶＨ１４の行を交互に配置することにより、各処理要素１６をメモリの別の行に物理的に結合させることが可能になる。これにより、各処理要素１６は、２倍のメモリ・ロケーションにアクセスできる。各メモリ・ロケーションは、バイト幅の記憶回路の１つに相当する。さらに、ＶＨ１４と処理要素１６との間のインターフェースに影響を与えずに、処理要素１６の半分（すなわち２つの部分のうちの１つ）を取り出すことができる。また処理要素１６間の通信は、処理要素ＰＥ［ｎ］が処理要素ＰＥ［６３−ｎ］とデータを交換できるように改善される。たとえば、処理要素ＰＥ［０］は、処理要素ＰＥ［６３］とデータを交換することができ、処理要素ＰＥ［３０］は処理要素ＰＥ［３３］とデータを交換することができる。
【０８３６】
選択回路２０４は、ＶＨ１４とＰＥ［０］ないしＰＥ［３１］を含む処理要素１６の部
分との間に結合される。選択回路２０６は、ＶＨ１４とＰＥ［３２］ないしＰＥ［６３］を含む処理要素１６の部分との間に結合される。選択回路２０４と選択回路２０６とを用いて、２行のうちどちらの行が処理要素１６に結合されて、処理要素１６によりアクセスされるかを選択する。
【０８３７】
ＶＨ１４内での行の物理的なレイアウトにより、処理要素ＰＥ［０］を電気導体をほとんど経由せずにＶＨ１４の行６３に結合させて、必要な半導体面積を最小限に抑えることができる。処理要素ＰＥ［ｎ］は、それ自身に対応するメモリ行（行ｎ）にアクセスすることができ、さらに処理要素ＰＥ［ｎ］は処理要素ＰＥ［６３−ｎ］（行６３−ｎ）に対応するメモリ行にもアクセスすることができる。
【０８３８】
メモリ・アクセスは、スケーラ・エンジン内のポインタ・レジスタのポインタ値を用いて、ＶＨ１４のどの列にアクセスするかを選択する（図６９および図８２のグローバル・ポインタ・レジスタＰ［０］〜Ｐ［７］３００を参照のこと）。ポインタ値は、０から１２７までが有効である。最上位ビット（図示された実施例ではビット６）が用いられて、対応する行と対応しない行との間の選択を行う。最上位ビットがネゲートされている場合は、対応する行が処理要素１６により用いられる。最上位ビットがアサートされている場合は、対応しない行が処理要素１６により用いられる。処理要素ＰＥ［ｎ］の対応する行は行「ｎ」であり、処理要素ＰＥ［ｎ］の対応しない行は行「６３−ｎ」である。すべての処理要素１６はそれに対応する行に書き込むか、あるいはすべての処理要素１６が対応しない行に書き込むので、同一のメモリ・ロケーションに対して同時にライトが起こることは回避される。
【０８３９】
プログラマの立場から、対応しない行をベクタを反転させるための方策として用いることができる。処理要素１６がバイト値を対応しない行の１つ以上の列に書き込んで、対応する行内の同じ１つ以上の列からバイト値を読むと、ベクタの反転が起こる。ここで処理要素ＰＥ［６３］は最初は処理要素ＰＥ［０］に記憶されていた値を記憶して、処理要素ＰＥ［０］は今度は、最初は処理要素ＰＥ［６３］に記憶されていた値を記憶する。処理要素１６がＣＭＡ１４の対応する行にも対応しない行にもアクセスすることができるという事実は、データ移動動作（たとえば下向きシフト動作）や、ＶＴビット１１０をイネーブル・ビットとして用いることができるという事実と連携させると特に有用である。
【図面の簡単な説明】
【０８４０】
【図１】４２ｘ３５フィードフォワード・ネットワークの従来図である。
【図２】４２ｘ３５フィードフォワード・ネットワークの論理図である。
【図３】４２ｘ３５フィードフォワード・ネットワークの物理図である。
【図４】１０２ｘ３５フィードフォワード・ネットワークの従来図である。
【図５】１０２ｘ３５フィードフォワード・ネットワークの論理図である。
【図６】１０２ｘ３５フィードフォワード・ネットワークの物理図である。
【図７】４２ｘ６９フィードフォワード・ネットワークの従来図である。
【図８】４２ｘ６９フィードフォワード・ネットワークの論理図である。
【図９】４２ｘ６９フィードフォワード・ネットワークの物理図である。
【図１０】７３ｘ６９フィードフォワード・ネットワークの従来図である。
【図１１】７３ｘ６９フィードフォワード・ネットワークの論理図である。
【図１２】７３ｘ６９フィードフォワード・ネットワークの物理図である。
【図１３】６３ｘ２０ｘ８フィードフォワード・ネットワークの従来図である。
【図１４】６３ｘ２０ｘ８フィードフォワード・ネットワークの論理図である。
【図１５】６３ｘ２０ｘ８フィードフォワード・ネットワークの物理図である。
【図１６】アソシエーション・エンジン・サブシステムである。
【図１７】入力データ・ベクタのアソシエーション・エンジン部である。
【図１８】複数のアソシエーション・エンジン・ファンクション信号グループである。
【図１９】反転ＥＣＯおよび反転ＷＣＩ制御信号を用いるストリーム・ライト動作を示す。
【図２０】アソシエーション・エンジン・ピンの割当を示す。
【図２１】アソシエーション・エンジン識別レジスタを示す。
【図２２】算術演算制御レジスタを示す。
【図２３】例外ステータス・レジスタを示す。
【図２４】例外マスク・レジスタを示す。
【図２５】処理要素選択レジスタを示す。
【図２６】ポート制御レジスタを示す。
【図２７】ラン・モード入力インデクス（ＦＭ＝０）を示す。
【図２８】ラン・モード入力タッギング（ＦＭ＝１）を示す。
【図２９】アソシエーション・エンジン・ポート・モニタ・レジスタを示す。
【図３０】複数のポート・エラー例を示す。
【図３１】汎用ポート・レジスタを示す。
【図３２】処理要素選択レジスタを示す。
【図３３】ＩＤＲポインタ・レジスタを示す。
【図３４】ＩＤＲカウント・レジスタを示す。
【図３５】ＩＤＲロケーション・マスク・レジスタを示す。
【図３６】ＩＤＲ初期オフセット・レジスタを示す。
【図３７】ホスト・ストリーム選択レジスタを示す。
【図３８】ホスト・ストリーム・オフセット・レジスタを示す。
【図３９】例＃１：ストリーム・ライト中のデータの単純分配を示す。
【図４０】例＃２：データの再配列および重複分配を示す。
【図４１】北−南保持レジスタを示す。
【図４２】北−南保持レジスタを示す。
【図４３】オフセット・アドレス・レジスタ＃１を示す。
【図４４】深さ制御レジスタ＃１を示す。
【図４５】オフセット・アドレス・レジスタ＃２を示す。
【図４６】深さ制御レジスタ＃２を示す。
【図４７】割込ステータス・レジスタ＃１を示す。
【図４８】割込マスク・レジスタ＃１を示す。
【図４９】割込ステータス・レジスタ＃２を示す。
【図５０】割込マスク・レジスタ＃２を示す。
【図５１】マイクロシーケンサ制御レジスタを示す。
【図５２】ＦＬＳ，スタック，ＦＳＬＦおよびＳＴＫＦを示す。
【図５３】マイクロシーケンサ・ステータス・レジスタを示す。
【図５４】スケーラ処理制御レジスタを示す。
【図５５】命令レジスタを示す。
【図５６】複数の命令キャッシュ・ライン有効レジスタを示す。
【図５７】プログラム・カウンタを示す。
【図５８】プログラム・カウンタ境界レジスタを示す。
【図５９】命令キャッシュ・タッグ＃０を示す。
【図６０】命令キャッシュ・タッグ＃１を示す。
【図６１】命令キャッシュ・タッグ＃２を示す。
【図６２】命令キャッシュ・タッグ＃３を示す。
【図６３】スタック・ポインタを示す。
【図６４】第１レベル・スタックを示す。
【図６５】リピート開始レジスタを示す。
【図６６】リピート終了レジスタを示す。
【図６７】リピート・カウント・レジスタを示す。
【図６８】複数のグローバル・データ・レジスタを示す。
【図６９】複数のグローバル・ポインタ・レジスタを示す。
【図７０】例外ポインタ表を示す。
【図７１】例外処理の流れ図を示す。
【図７２】複数の入力データ・レジスタを示す。
【図７３】複数のベクタ・データ・レジスタ（Ｖ０〜Ｖ７）を示す。
【図７４】ベクタ処理制御レジスタを示す。
【図７５】複数の入力タッグ・レジスタを示す。
【図７６】命令キャッシュを示す。
【図７７】係数メモリ・アレイを示す。
【図７８】マイクロコード・プログラマ・モデルを示す。
【図７９】複数のベクタ・エンジン・レジスタを示す。
【図８０】複数のベクタ・エンジン・レジスタを示す。
【図８１】複数のマイクロシーケンサ・レジスタを示す。
【図８２】複数のスケーラ・エンジン・レジスタを示す。
【図８３】複数のアソシエーション・エンジン制御レジスタを示す。
【図８４】ＩＤＲの概念的な実行例を示す。
【図８５】drotmov 動作の例を示す。
【図８６】v minおよびvmax命令を示す。
【図８７】ＶＰＣＲ ＶＴおよびＶＨビット状態の移行図を示す。
【図８８】repeatループ終了時のbra/jmpri/jmpmi を示す。
【図８９】repeatループ終了時のbsr/jsrri/jsrmi を示す。
【図９０】repeate ループ・アイデンティティを示す。
【図９１】repeatループ終了時のベクタ条件を示す。
【図９２】repeate ループ終了時のベクタ条件を示す。
【図９３】典型的なニューラル・ネットワークのコンフィギュレーションを示す。
【図９４】図９３の隠されたレイヤ（ｈ）に関するアソシエーション・エンジン実行例を示す。
【図９５】入力レイヤから隠されたレイヤに対するマッピングを示す。
【図９６】マイクロシーケンサの簡略図である。
【図９７】単一サイクル命令パイプライン・タイミングを示す。
【図９８】２サイクル命令のタイミングを示す。
【図９９】ステージ＃２休止例を示す。
【図１００】ＣＭＡおよびＭＭＡの等価メモリ・マップを示す。
【図１０１】直接および反転ＣＭＡアクセスを図解したものである。
【図１０２】例＃２に関するＣＭＡレイアウトである。
【図１０３】ＩＣ，ＣＭＡおよびページを示す。
【図１０４】プログラム・カウンタおよびキャッシュ・タッグを示す。
【図１０５】例＃３に関するＣＭＡレイアウトである。
【図１０６】例＃４に関するＣＭＡレイアウトである。
【図１０７】例＃５に関するＣＭＡレイアウトである。
【図１０８】例＃６に関するＣＭＡレイアウトである。
【図１０９】例＃７に関するＣＭＡレイアウトである。
【図１１０】例＃８に関するＣＭＡレイアウトである。
【図１１１】４ポートに関するホスト・アクセス・ファンクションである。
【図１１２】一次元ストリーム動作を示す。
【図１１３】二次元ストリーム動作を示す。
【図１１４】入力データ・ストリームの例を示す。
【図１１５】入力タッギングの使用例を示す。
【図１１６】ホスト・メモリ・マップを示す。
【図１１７】アソシエーション・エンジンの内部編成を示す。
【図１１８】アソシエーション・エンジンの大まかな流れを示す。
【図１１９】入力データ・レジスタと関連の有効ビットを示す。
【図１２０】アソシエーション・エンジンのスタンドアロン充てん後計算の流れ図である。
【図１２１】アソシエーション・エンジンのスタンドアロン充てん中計算の流れ図である。
【図１２２】ホストと、アソシエーション・エンジンと、アソシエーション・エンジン’との対話を示す。
【図１２３】マイクロコード命令の流れを示す。
【図１２４】例＃１におけるデータの移動を示す。
【図１２５】例＃２におけるデータの移動を示す。
【図１２６】例＃３におけるデータの移動を示す。
【図１２７】例＃４におけるデータの移動を示す。
【図１２８】例＃５におけるデータの移動を示す。
【図１２９】積の和の伝播ルーチンを示す。
【図１３０】複数ルーピング・ルーチンを示す。
【図１３１】複数アソシエーション・エンジン信号機通過のためのアソシエーション・エンジン・ルーチンの例である。
【図１３２】アソシエーション・エンジン・ポート・スイッチおよびタップ構造を示す。
【図１３３】アソシエーション・エンジンのリング・コンフィギュレーションを示す。
【図１３４】アソシエーション・エンジンのリング・コンフィギュレーションの例を示す。
【図１３５】二次元アレイのアソシエーション・エンジンを示す。
【図１３６】二次元アレイのアソシエーション・エンジンを示す。
【図１３７】ホスト・ランダム・アクセス・リードおよびライトのタイミングを示す。
【図１３８】ホスト・ランダム・アクセス・アドレス転送のタイミングを示す。
【図１３９】ホスト・ランダム・アクセス・アドレス／データ転送タイミングを示す。
【図１４０】ホスト・ランダム・アクセス・アドレス／早期終了のあるデータ転送を示す。
【図１４１】ホスト・ストリーム・アクセス・リードのタイミングを示す。
【図１４２】ホスト・ストリーム・ライト・アクセスを示す。
【図１４３】デバイス＃２からのラン・モード・ライト動作を示す。
【図１４４】非アクティブな状態のＰＥを有するデバイス＃２からのラン・モード・ライト動作を示す。
【図１４５】アソシエーション・エンジン・ライト動作衝突のタイミングを示す。
【図１４６】反転ＢＵＳＹ出力タイミングに対するアソシエーション・エンジンdoneを示す。
【図１４７】反転ＢＵＳＹ出力タイミングに対するアソシエーション・エンジンＲ／反転Ｓを示す。
【図１４８】ラン／ストップ介入によるアソシエーション・エンジン・ライトのタイミングを示す。
【図１４９】割込タイミングを示す。
【図１５０】リセット・タイミングを示す。
【図１５１】ＩＥＥＥ１１４９．１ポート・タイミングを示す。
【図１５２】飽和命令を用いる例を示す図である。
【図１５３】飽和命令の流れ図である。
【図１５４】４台のデータ・プロセッサのブロック図である。
【図１５５】４台のデータ・プロセッサのブロック図である。
【図１５６】ストップ・モードの動作中のデータ・プロセッサのブロック図である。
【図１５７】ラン・モードの動作中のデータ・プロセッサのブロック図である。
【図１５８】ストップ・モードの動作およびランダム・アクセス・モードのデータ・プロセッサのブロック図である。
【図１５９】ストップ・モードの動作およびストリーム・アクセス・モードのデータ・プロセッサのブロック図である。
【図１６０】ラン・モードの動作中のデータ・プロセッサのブロック図である。
【図１６１】一連の加算命令を実行する例を示す図である。
【図１６２】シフト命令の流れ図である。
【図１６３】比較命令の流れ図である。
【図１６４】算術演算命令の流れ図である。
【図１６５】従来の技術によるベクタ集合法を表す図である。
【図１６６】本発明の実施例による集合法を表す図である。
【図１６７】いくつかの処理要素の一部のブロック図である。
【図１６８】いくつかの処理要素の一部のブロック図である。
【図１６９】いくつかの処理要素の一部のブロック図である。
【図１７０】スキップ命令の流れ図である。
【図１７１】リピート命令の流れ図である。
【図１７２】リピート命令の流れ図である。
【図１７３】インデックス充てんモードの例を表す図である。
【図１７４】タッグ充てんモードの例を表す図である。
【図１７５】データ・プロセッサの一部のブロック図である。
【図１７６】休止を含むデータ・コヒーレンシ法の流れ図である。
【図１７７】休止を含むデータ・コヒーレンシ法の流れ図である。
【図１７８】休止を含むデータ・コヒーレンシ法の使用例を表すブロック図である。
【図１７９】休止を含むデータ・コヒーレンシ法の使用例を表すブロック図である。
【図１８０】休止を含むデータ・コヒーレンシ法の使用例を表すブロック図である。
【図１８１】データ・プロセッサの一部のブロック図である。
【図１８２】最大値決定の例を表の形式で表したものである。
【図１８３】最大値決定の例を表の形式で表したものである。
【図１８４】データ処理システムの一部のブロック図である。
【図１８５】比較命令の流れ図である。
【図１８６】比較命令の流れ図である。
【図１８７】一連の比較命令を用いる例を表す図である。
【図１８８】一連の比較命令を用いる例を表す図である。
【図１８９】データ処理システムの一部のブロック図である。
【図１９０】表２．１を示す。
【図１９１】表２．２を示す。
【図１９２】表２．３を示す。
【図１９３】表２．４を示す。
【図１９４】表２．５を示す。
【図１９５】表２．５を示す。
【図１９６】表２．６を示す。
【図１９７】表２．６を示す。
【図１９８】表２．６を示す。
【図１９９】表２．６を示す。
【図２００】表２．６を示す。
【図２０１】表２．７を示す。
【図２０２】表２．８を示す。
【図２０３】表２．９を示す。
【図２０４】表２．１０を示す。
【図２０５】表２．１１を示す。
【図２０６】表２．１２を示す。
【図２０７】表２．１３を示す。
【図２０８】表２．１４を示す。
【図２０９】表２．１５を示す。
【図２１０】表２．１６を示す。
【図２１１】表２．１７を示す。
【図２１２】表２．１８を示す。
【図２１３】表２．１９を示す。
【図２１４】表２．２０を示す。
【図２１５】表２．２１を示す。
【図２１６】表２．２２を示す。
【図２１７】表２．２３を示す。
【図２１８】表２．２４を示す。
【図２１９】表２．２５を示す。
【図２２０】表２．２６を示す。
【図２２１】表２．２７を示す。
【図２２２】表２．２８を示す。
【図２２３】表２．２８を示す。
【図２２４】表２．２９を示す。
【図２２５】表２．３０を示す。
【図２２６】表２．３１を示す。
【図２２７】表２．３２を示す。
【図２２８】表２．３３を示す。
【図２２９】表２．３４を示す。
【図２３０】表２．３５を示す。
【図２３１】表２．３５を示す。
【図２３２】表２．３６を示す。
【図２３３】表２．３６を示す。
【図２３４】表２．３７を示す。
【図２３５】表２．３８を示す。
【図２３６】表２．３９を示す。
【図２３７】表２．４０を示す。
【図２３８】表２．４１を示す。
【図２３９】表２．４２を示す。
【図２４０】表２．４３を示す。
【図２４１】表２．４４を示す。
【図２４２】表２．４４を示す。
【図２４３】表２．４４を示す。
【図２４４】表２．４５を示す。
【図２４５】表２．４６を示す。
【図２４６】表２．４７を示す。
【図２４７】表２．４７を示す。
【図２４８】表２．４７を示す。
【図２４９】表２．４８を示す。
【図２５０】表２．４９を示す。
【図２５１】表２．５０を示す。
【図２５２】表２．５０を示す。
【図２５３】表２．５１を示す。
【図２５４】表２．５１を示す。
【図２５５】表２．５１を示す。
【図２５６】表２．５２を示す。
【図２５７】表２．５２を示す。
【図２５８】表２．５３を示す。
【図２５９】表２．５４を示す。
【図２６０】表２．５５を示す。
【図２６１】表２．５６を示す。
【図２６２】表２．５７を示す。
【図２６３】表２．５８を示す。
【図２６４】表２．５９を示す。
【図２６５】表２．６０を示す。
【図２６６】表２．６０を示す。
【図２６７】表２．６１を示す。
【図２６８】表２．６２を示す。
【図２６９】表２．６３を示す。
【図２７０】表２．６４を示す。
【図２７１】表２．６４を示す。
【図２７２】表２．６４を示す。
【図２７３】表２．６４を示す。
【図２７４】表２．６４を示す。
【図２７５】表２．６４を示す。
【図２７６】表２．６４を示す。
【図２７７】表２．６５を示す。
【図２７８】表２．６５を示す。
【図２７９】表２．６６を示す。
【図２８０】表２．６６を示す。
【図２８１】表２．６６を示す。
【図２８２】表２．６６を示す。
【図２８３】表２．６６を示す。
【図２８４】表２．６７を示す。
【図２８５】表３．１を示す。
【図２８６】表３．２を示す。
【図２８７】表３．３を示す。
【図２８８】表３．４を示す。
【図２８９】表３．５を示す。
【図２９０】表３．６を示す。
【図２９１】表３．７を示す。
【図２９２】表３．８を示す。
【図２９３】表３．９を示す。
【図２９４】表３．１０を示す。
【図２９５】表３．１１を示す。
【図２９６】表３．１２を示す。
【図２９７】表３．１３を示す。
【図２９８】表３．１４を示す。
【図２９９】表４．１を示す。
【図１】
2006012182.tif 000003
【図２】
2006012182.tif 000004
【図３】
2006012182.tif 000005
【図４】
2006012182.tif 000006
【図５】
2006012182.tif 000007
【図６】
2006012182.tif 000008
【図７】
2006012182.tif 000009
【図８】
2006012182.tif 000010
【図９】
2006012182.tif 000011
【図１０】
2006012182.tif 000012
【図１１】
2006012182.tif 000013
【図１２】
2006012182.tif 000014
【図１３】
2006012182.tif 000015
【図１４】
2006012182.tif 000016
【図１５】
2006012182.tif 000017
【図１６】
2006012182.tif 000018
【図１７】
2006012182.tif 000019
【図１８】
2006012182.tif 000020
【図１９】
2006012182.tif 000021
【図２０】
2006012182.tif 000022
【図２１】
2006012182.tif 000023
【図２２】
2006012182.tif 000024
【図２３】
2006012182.tif 000025
【図２４】
2006012182.tif 000026
【図２５】
2006012182.tif 000027
【図２６】
2006012182.tif 000028
【図２７】
2006012182.tif 000029
【図２８】
2006012182.tif 000030
【図２９】
2006012182.tif 000031
【図３０】
2006012182.tif 000032
【図３１】
2006012182.tif 000033
【図３２】
2006012182.tif 000034
【図３３】
2006012182.tif 000035
【図３４】
2006012182.tif 000036
【図３５】
2006012182.tif 000037
【図３６】
2006012182.tif 000038
【図３７】
2006012182.tif 000039
【図３８】
2006012182.tif 000040
【図３９】
2006012182.tif 000041
【図４０】
2006012182.tif 000042
【図４１】
2006012182.tif 000043
【図４２】
2006012182.tif 000044
【図４３】
2006012182.tif 000045
【図４４】
2006012182.tif 000046
【図４５】
2006012182.tif 000047
【図４６】
2006012182.tif 000048
【図４７】
2006012182.tif 000049
【図４８】
2006012182.tif 000050
【図４９】
2006012182.tif 000051
【図５０】
2006012182.tif 000052
【図５１】
2006012182.tif 000053
【図５２】
2006012182.tif 000054
【図５３】
2006012182.tif 000055
【図５４】
2006012182.tif 000056
【図５５】
2006012182.tif 000057
【図５６】
2006012182.tif 000058
【図５７】
2006012182.tif 000059
【図５８】
2006012182.tif 000060
【図５９】
2006012182.tif 000061
【図６０】
2006012182.tif 000062
【図６１】
2006012182.tif 000063
【図６２】
2006012182.tif 000064
【図６３】
2006012182.tif 000065
【図６４】
2006012182.tif 000066
【図６５】
2006012182.tif 000067
【図６６】
2006012182.tif 000068
【図６７】
2006012182.tif 000069
【図６８】
2006012182.tif 000070
【図６９】
2006012182.tif 000071
【図７０】
2006012182.tif 000072
【図７１】
2006012182.tif 000073
【図７２】
2006012182.tif 000074
【図７３】
2006012182.tif 000075
【図７４】
2006012182.tif 000076
【図７５】
2006012182.tif 000077
【図７６】
2006012182.tif 000078
【図７７】
2006012182.tif 000079
【図７８】
2006012182.tif 000080
【図７９】
2006012182.tif 000081
【図８０】
2006012182.tif 000082
【図８１】
2006012182.tif 000083
【図８２】
2006012182.tif 000084
【図８３】
2006012182.tif 000085
【図８４】
2006012182.tif 000086
【図８５】
2006012182.tif 000087
【図８６】
2006012182.tif 000088
【図８７】
2006012182.tif 000089
【図８８】
2006012182.tif 000090
【図８９】
2006012182.tif 000091
【図９０】
2006012182.tif 000092
【図９１】
2006012182.tif 000093
【図９２】
2006012182.tif 000094
【図９３】
2006012182.tif 000095
【図９４】
2006012182.tif 000096
【図９５】
2006012182.tif 000097
【図９６】
2006012182.tif 000098
【図９７】
2006012182.tif 000099
【図９８】
2006012182.tif 000100
【図９９】
2006012182.tif 000101
【図１００】
2006012182.tif 000102
【図１０１】
2006012182.tif 000103
【図１０２】
2006012182.tif 000104
【図１０３】
2006012182.tif 000105
【図１０４】
2006012182.tif 000106
【図１０５】
2006012182.tif 000107
【図１０６】
2006012182.tif 000108
【図１０７】
2006012182.tif 000109
【図１０８】
2006012182.tif 000110
【図１０９】
2006012182.tif 000111
【図１１０】
2006012182.tif 000112
【図１１１】
2006012182.tif 000113
【図１１２】
2006012182.tif 000114
【図１１３】
2006012182.tif 000115
【図１１４】
2006012182.tif 000116
【図１１５】
2006012182.tif 000117
【図１１６】
2006012182.tif 000118
【図１１７】
2006012182.tif 000119
【図１１８】
2006012182.tif 000120
【図１１９】
2006012182.tif 000121
【図１２０】
2006012182.tif 000122
【図１２１】
2006012182.tif 000123
【図１２２】
2006012182.tif 000124
【図１２３】
2006012182.tif 000125
【図１２４】
2006012182.tif 000126
【図１２５】
2006012182.tif 000127
【図１２６】
2006012182.tif 000128
【図１２７】
2006012182.tif 000129
【図１２８】
2006012182.tif 000130
【図１２９】
2006012182.tif 000131
【図１３０】
2006012182.tif 000132
【図１３１】
2006012182.tif 000133
【図１３２】
2006012182.tif 000134
【図１３３】
2006012182.tif 000135
【図１３４】
2006012182.tif 000136
【図１３５】
2006012182.tif 000137
【図１３６】
2006012182.tif 000138
【図１３７】
2006012182.tif 000139
【図１３８】
2006012182.tif 000140
【図１３９】
2006012182.tif 000141
【図１４０】
2006012182.tif 000142
【図１４１】
2006012182.tif 000143
【図１４２】
2006012182.tif 000144
【図１４３】
2006012182.tif 000145
【図１４４】
2006012182.tif 000146
【図１４５】
2006012182.tif 000147
【図１４６】
2006012182.tif 000148
【図１４７】
2006012182.tif 000149
【図１４８】
2006012182.tif 000150
【図１４９】
2006012182.tif 000151
【図１５０】
2006012182.tif 000152
【図１５１】
2006012182.tif 000153
【図１５２】
2006012182.tif 000154
【図１５３】
2006012182.tif 000155
【図１５４】
2006012182.tif 000156
【図１５５】
2006012182.tif 000157
【図１５６】
2006012182.tif 000158
【図１５７】
2006012182.tif 000159
【図１５８】
2006012182.tif 000160
【図１５９】
2006012182.tif 000161
【図１６０】
2006012182.tif 000162
【図１６１】
2006012182.tif 000163
【図１６２】
2006012182.tif 000164
【図１６３】
2006012182.tif 000165
【図１６４】
2006012182.tif 000166
【図１６５】
2006012182.tif 000167
【図１６６】
2006012182.tif 000168
【図１６７】
2006012182.tif 000169
【図１６８】
2006012182.tif 000170
【図１６９】
2006012182.tif 000171
【図１７０】
2006012182.tif 000172
【図１７１】
2006012182.tif 000173
【図１７２】
2006012182.tif 000174
【図１７３】
2006012182.tif 000175
【図１７４】
2006012182.tif 000176
【図１７５】
2006012182.tif 000177
【図１７６】
2006012182.tif 000178
【図１７７】
2006012182.tif 000179
【図１７８】
2006012182.tif 000180
【図１７９】
2006012182.tif 000181
【図１８０】
2006012182.tif 000182
【図１８１】
2006012182.tif 000183
【図１８２】
2006012182.tif 000184
【図１８３】
2006012182.tif 000185
【図１８４】
2006012182.tif 000186
【図１８５】
2006012182.tif 000187
【図１８６】
2006012182.tif 000188
【図１８７】
2006012182.tif 000189
【図１８８】
2006012182.tif 000190
【図１８９】
2006012182.tif 000191
【図１９０】
2006012182.tif 000192
【図１９１】
2006012182.tif 000193
【図１９２】
2006012182.tif 000194
【図１９３】
2006012182.tif 000195
【図１９４】
2006012182.tif 000196
【図１９５】
2006012182.tif 000197
【図１９６】
2006012182.tif 000198
【図１９７】
2006012182.tif 000199
【図１９８】
2006012182.tif 000200
【図１９９】
2006012182.tif 000201
【図２００】
2006012182.tif 000202
【図２０１】
2006012182.tif 000203
【図２０２】
2006012182.tif 000204
【図２０３】
2006012182.tif 000205
【図２０４】
2006012182.tif 000206
【図２０５】
2006012182.tif 000207
【図２０６】
2006012182.tif 000208
【図２０７】
2006012182.tif 000209
【図２０８】
2006012182.tif 000210
【図２０９】
2006012182.tif 000211
【図２１０】
2006012182.tif 000212
【図２１１】
2006012182.tif 000213
【図２１２】
2006012182.tif 000214
【図２１３】
2006012182.tif 000215
【図２１４】
2006012182.tif 000216
【図２１５】
2006012182.tif 000217
【図２１６】
2006012182.tif 000218
【図２１７】
2006012182.tif 000219
【図２１８】
2006012182.tif 000220
【図２１９】
2006012182.tif 000221
【図２２０】
2006012182.tif 000222
【図２２１】
2006012182.tif 000223
【図２２２】
2006012182.tif 000224
【図２２３】
2006012182.tif 000225
【図２２４】
2006012182.tif 000226
【図２２５】
2006012182.tif 000227
【図２２６】
2006012182.tif 000228
【図２２７】
2006012182.tif 000229
【図２２８】
2006012182.tif 000230
【図２２９】
2006012182.tif 000231
【図２３０】
2006012182.tif 000232
【図２３１】
2006012182.tif 000233
【図２３２】
2006012182.tif 000234
【図２３３】
2006012182.tif 000235
【図２３４】
2006012182.tif 000236
【図２３５】
2006012182.tif 000237
【図２３６】
2006012182.tif 000238
【図２３７】
2006012182.tif 000239
【図２３８】
2006012182.tif 000240
【図２３９】
2006012182.tif 000241
【図２４０】
2006012182.tif 000242
【図２４１】
2006012182.tif 000243
【図２４２】
2006012182.tif 000244
【図２４３】
2006012182.tif 000245
【図２４４】
2006012182.tif 000246
【図２４５】
2006012182.tif 000247
【図２４６】
2006012182.tif 000248
【図２４７】
2006012182.tif 000249
【図２４８】
2006012182.tif 000250
【図２４９】
2006012182.tif 000251
【図２５０】
2006012182.tif 000252
【図２５１】
2006012182.tif 000253
【図２５２】
2006012182.tif 000254
【図２５３】
2006012182.tif 000255
【図２５４】
2006012182.tif 000256
【図２５５】
2006012182.tif 000257
【図２５６】
2006012182.tif 000258
【図２５７】
2006012182.tif 000259
【図２５８】
2006012182.tif 000260
【図２５９】
2006012182.tif 000261
【図２６０】
2006012182.tif 000262
【図２６１】
2006012182.tif 000263
【図２６２】
2006012182.tif 000264
【図２６３】
2006012182.tif 000265
【図２６４】
2006012182.tif 000266
【図２６５】
2006012182.tif 000267
【図２６６】
2006012182.tif 000268
【図２６７】
2006012182.tif 000269
【図２６８】
2006012182.tif 000270
【図２６９】
2006012182.tif 000271
【図２７０】
2006012182.tif 000272
【図２７１】
2006012182.tif 000273
【図２７２】
2006012182.tif 000274
【図２７３】
2006012182.tif 000275
【図２７４】
2006012182.tif 000276
【図２７５】
2006012182.tif 000277
【図２７６】
2006012182.tif 000278
【図２７７】
2006012182.tif 000279
【図２７８】
2006012182.tif 000280
【図２７９】
2006012182.tif 000281
【図２８０】
2006012182.tif 000282
【図２８１】
2006012182.tif 000283
【図２８２】
2006012182.tif 000284
【図２８３】
2006012182.tif 000285
【図２８４】
2006012182.tif 000286
【図２８５】
2006012182.tif 000287
【図２８６】
2006012182.tif 000288
【図２８７】
2006012182.tif 000289
【図２８８】
2006012182.tif 000290
【図２８９】
2006012182.tif 000291
【図２９０】
2006012182.tif 000292
【図２９１】
2006012182.tif 000293
【図２９２】
2006012182.tif 000294
【図２９３】
2006012182.tif 000295
【図２９４】
2006012182.tif 000296
【図２９５】
2006012182.tif 000297
【図２９６】
2006012182.tif 000298
【図２９７】
2006012182.tif 000299
【図２９８】
2006012182.tif 000300
【図２９９】
2006012182.tif 000301