(57)【要約】  通信およびデータハンドリングシステムのためのリングアーキテクチャ、リングトポロジを自動的に構成するための列挙プロセス、ブリッジを通じたメッセージの自動ルーティング、リングトポロジを外部デバイスに拡張すること、効率を促進するための先書き機能性、リセットまで待機オペレーション再開、リングトポロジ中のインビボスキャン、時差的クロッキング配列、浮遊メッセージ検出および根絶を実装するための、システムおよび方法が提供される。伝えられる他の発明の要素には、パケットプロセッサのアーキテクチャの概要、パケットプロセッサのためのプログラミングモデル、パケットプロセッサのための命令パイプライン、および、パケットプロセッサをリングベースのアーキテクチャ上のモジュールとして使用することが含まれる。伝えられる追加の発明の要素には、通信プロセッサのアーキテクチャの概要、通信プロセッサのためのデータパスプロトコルのサポートモデル、通信プロセッサのためのコアパケットプロセッサとして使用される例示的ネットワークプロセッサ、例示的リングベースのＳＯＣスイッチファブリックのアーキテクチャ、および様々なサポート品質機能が含まれる。
2005516432.tif 000002
【特許請求の範囲】
【請求項１】
リングベースのシステムオンチップであって、
リング上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングメンバを前記リングとインターフェイスさせるための複数のリングインターフェイスと、
前記リングをトラバースするメッセージとを含み、
前記メッセージは１クロックサイクルにつき１リングメンバを移動し、
前記システムは、前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるシステム。
【請求項２】
前記メッセージが前記所与のリングメンバに、そのリングメンバを識別する識別子、および、前記メッセージが多数のリングメンバに適用されることを示す識別子のうち、少なくとも１つに基づいて適用可能である、請求項２に記載のシステム。
【請求項３】
前記所与のリングメンバを識別する前記識別子は、そのリングメンバのためのアドレスを含む、請求項３に記載のシステム。
【請求項４】
前記メッセージが多数のリングメンバに適用されることを示す前記識別子は、前記メッセージを管理メッセージとして指定するメッセージデータを含む、請求項３に記載のシステム。
【請求項５】
前記メッセージはタイプフィールド、アドレスフィールドおよびデータフィールドを含む、請求項１に記載のシステム。
【請求項６】
前記メッセージは列挙メッセージを含む、請求項１に記載のシステム。
【請求項７】
前記列挙メッセージは前記リングメンバによって、各リングメンバによって消費されるアドレス空間を割り当てるために処理される、請求項６に記載のシステム。
【請求項８】
後続の管理メッセージが前記列挙メッセージの結果を戻させて、それにより、ＣＰＵを含む中央メンバが前記システムのトポロジを推断できるようにする、請求項７に記載のシステム。
【請求項９】
前記メッセージが中間リングメンバのいくつかをトラバースすることなく、前記リングの一方の側から前記リングの他方の側に進行できるようにする、ランドブリッジをさらに含む、請求項１に記載のシステム。
【請求項１０】
前記複数のリングメンバおよび複数のリングインターフェイスは第１のリングを含み、さらに、第２のリングを定義する複数の第２のリングメンバおよび複数の第２のリングインターフェイスを含み、前記第１のリングおよび前記第２のリングはシステムオンチップとして実装され、前記第１のリングおよび前記第２のリングがシーブリッジを使用して結合される、請求項１に記載のシステム。
【請求項１１】
前記ランドブリッジのロジックは、列挙メッセージの結果に基づいて構成される、請求項９に記載のシステム。
【請求項１２】
前記シーブリッジのロジックは、列挙メッセージの結果に基づいて構成される、請求項１０に記載のシステム。
【請求項１３】
前記リングは、前記リングの一部ではないモジュールと前記リングが通信できるようにする外部リングインターフェイスを含む、請求項１に記載のシステム。
【請求項１４】
前記リングメンバはＣＰＵおよび複数の周辺デバイスを含み、前記周辺デバイスは、周辺デバイスのステータスにおける変化を先書きするように適合され、それにより前記ＣＰＵによって発行される読み取りメッセージの量が減らされる、請求項１に記載のシステム。
【請求項１５】
前記メッセージはリセットメッセージを含み、これが前記複数のリングメンバによって、前記システムをリセットするために処理される、請求項１に記載のシステム。
【請求項１６】
前記メッセージはＣＰＵリングメンバからの要求を含み、これにより他のリングメンバにそれらのアドレス情報をレポートさせる、請求項１に記載のシステム。
【請求項１７】
前記メッセージは起動メッセージを含み、これが前記複数のリングメンバによって、前記システムを起動するために処理される、請求項１に記載のシステム。
【請求項１８】
前記メッセージは書き込みメッセージを含み、これが前記複数のリングメンバのうち１つによって処理されて、データがそこに書き込まれる、請求項１に記載のシステム。
【請求項１９】
前記メッセージは読み取りメッセージを含み、これが前記複数のリングメッセージのうち１つによって処理されて、データがそこから読み取られる、請求項１に記載のシステム。
【請求項２０】
前記メッセージは浮遊メッセージの印を含み、前記システムが浮遊メッセージを識別できるようにする、請求項１に記載のシステム。
【請求項２１】
後続のリングメンバは、バックプレッシャー信号を前のリングメンバに供給するように適合される、請求項１に記載のシステム。
【請求項２２】
リングネットワーク・アーキテクチャを利用する通信処理システムであって、
前記リングネットワークに沿ってポイントツーポイント形式で接続された複数のリングメンバと、
少なくとも１つのメッセージを、前記リングメンバの少なくとも一部の間で通信するためのトランザクションベースの接続性とを含み、前記メッセージは、前記メッセージが指定される宛先リングメンバを示す情報を含み、前記メッセージは前記宛先リングメンバに到達するまで前記リングネットワークの周囲で渡され、
前記宛先リングメンバは、前記メッセージを受信し、これを前記リングネットワークから除去するように適合される、通信処理システム。
【請求項２３】
前記宛先リングメンバを示す情報はリングメンバ識別子を含む、請求項２２に記載の通信処理システム。
【請求項２４】
前記宛先リングメンバを示す情報は、前記宛先リングメンバに対応するアドレスを含む、請求項２２に記載の通信処理システム。
【請求項２５】
前記トランザクションベースの接続性は、メッセージが前記リングネットワークの周囲でクロッキング方式に従って渡されることを提供する、請求項２２に記載の通信処理システム。
【請求項２６】
前記クロッキング方式は、前記メッセージが１クロックサイクルにつき１リングメンバを移動することを提供する、請求項２５に記載の通信処理システム。
【請求項２７】
前記トランザクションベースの接続性は、複数のメッセージが前記リングネットワークを移動することを提供し、各メッセージは、メッセージが特定のリングメンバで消費されない限り、１クロックサイクルにつき１リングメンバを移動する、請求項２６に記載の通信処理システム。
【請求項２８】
非宛先リングメンバに到着する前記メッセージは、前記リングネットワーク上の次のリングメンバに渡される、請求項２２に記載の通信処理システム。
【請求項２９】
宛先リングメンバに到着する前記メッセージは、前記宛先リングメンバによって消費される、請求項２２に記載の通信処理システム。
【請求項３０】
前記メッセージは、消費される間に前記リングネットワークから除去されて、前記リングネットワーク上のスロットが使用可能にされるようにする、請求項２９に記載の通信処理システム。
【請求項３１】
前記使用可能なスロットにより、下流のリングメンバがメッセージを前記スロットに挿入できるようにする、請求項３０に記載の通信処理システム。
【請求項３２】
前記接続性は、トランザクションを含むメッセージが前記リングネットワークを移動することを提供し、前記メッセージは、コマンド、命令、タイプ、アドレスおよびデータのうち１つまたは複数を含む、請求項２２に記載の通信処理システム。
【請求項３３】
メッセージを受信する各リングメンバは、前記メッセージの宛先アドレス部をチェックして、前記メッセージがそのリングメンバのために指定されるかどうかを決定し、前記宛先アドレス部がそのリングメンバに対応する場合、前記リングメンバは前記メッセージを前記リングネットワークから取り去り、前記メッセージを消費する、請求項２２に記載の通信処理システム。
【請求項３４】
前記少なくとも１つのメッセージは、前記リングネットワークの構成中にリングメンバにアドレス空間を割り当てさせるメッセージを含む、請求項２２に記載の通信処理システム。
【請求項３５】
前記メッセージは列挙メッセージを含む、請求項３４に記載の通信処理システム。
【請求項３６】
前記構成中のアドレス空間の割り当てにより、処理リングメンバが続いて前記リングネットワークの前記構成を推断できるようにする、請求項３４に記載の通信処理システム。
【請求項３７】
前記リングネットワークは前記リングネットワークを横断するブリッジを含み、これによりメッセージが、中間リングメンバを通過することなく一方の側から別の側に移動できるようにする、請求項２２に記載の通信処理システム。
【請求項３８】
前記システムはシングルチップ上で実装される、請求項２２に記載の通信処理システム。
【請求項３９】
リングネットワーク・アーキテクチャを利用する通信処理システムであって、
一意のアドレスを有し、前記リングネットワークに沿ってポイントツーポイント形式で接続された複数のリングメンバと、
少なくとも１つのメッセージを、前記リングメンバの少なくとも一部の間で通信するためのトランザクションベースの接続性とを含み、前記メッセージは、前記メッセージが指定される宛先リングメンバアドレスを含み、前記メッセージは前記宛先リングメンバに到達するまで前記リングネットワークの周囲で渡され、
前記宛先リングメンバは、前記メッセージを受信し、これを前記リングネットワークから除去するように適合される、通信処理システム。
【請求項４０】
前記宛先リングメンバアドレスは、前記宛先リングメンバのための開始アドレスを含む、請求項３９に記載の通信処理システム。
【請求項４１】
前記宛先リングメンバアドレスは、前記宛先リングメンバのために割り当てられたアドレス空間内のアドレスを含む、請求項３９に記載の通信処理システム。
【請求項４２】
前記トランザクションベースの接続性は、メッセージが前記リングネットワークの周囲でクロッキング方式に従って渡されることを提供する、請求項３９に記載の通信処理システム。
【請求項４３】
前記クロッキング方式は、前記メッセージが１クロックサイクルにつき１リングメンバを移動することを提供する、請求項４２に記載の通信処理システム。
【請求項４４】
前記トランザクションベースの接続性は、複数のメッセージが前記リングネットワークを移動することを提供し、各メッセージは、メッセージが特定のリングメンバで消費されない限り、１クロックサイクルにつき１リングメンバを移動する、請求項３９に記載の通信処理システム。
【請求項４５】
非宛先リングメンバに到着する前記メッセージは、前記リングネットワーク上の次のリングメンバに渡される、請求項３９に記載の通信処理システム。
【請求項４６】
宛先リングメンバに到着する前記メッセージは、前記宛先リングメンバによって消費される、請求項３９に記載の通信処理システム。
【請求項４７】
前記メッセージは、消費される間に前記リングネットワークから除去されて、前記リングネットワーク上のスロットが使用可能にされるようにする、請求項４６に記載の通信処理システム。
【請求項４８】
前記使用可能なスロットにより、下流のリングメンバがメッセージを前記スロットに挿入できるようにする、請求項４７に記載の通信処理システム。
【請求項４９】
前記接続性は、トランザクションを含むメッセージが前記リングネットワークを移動することを提供し、前記メッセージは、コマンド、命令、タイプ、アドレスおよびデータのうち１つまたは複数を含む、請求項３９に記載の通信処理システム。
【請求項５０】
メッセージを受信する各リングメンバは、前記メッセージの前記宛先リングメンバアドレスをチェックして、前記メッセージがそのリングメンバのために指定されるかどうかを決定し、前記宛先リングメンバアドレスがそのリングメンバに対応する場合、前記リングメンバは前記メッセージを前記リングネットワークから取り去り、前記メッセージを消費する、請求項３９に記載の通信処理システム。
【請求項５１】
前記少なくとも１つのメッセージは、前記リングネットワークの構成中にリングメンバにアドレス空間を割り当てさせるメッセージを含む、請求項３９に記載の通信処理システム。
【請求項５２】
前記メッセージは列挙メッセージを含む、請求項５１に記載の通信処理システム。
【請求項５３】
前記構成中のアドレス空間の割り当てにより、処理リングメンバが続いて前記リングネットワークの前記構成を推断できるようにする、請求項５１に記載の通信処理システム。
【請求項５４】
前記リングネットワークは前記リングネットワークを横断するブリッジを含み、これによりメッセージが、中間リングメンバを通過することなく一方の側から別の側に移動できるようにする、請求項３９に記載の通信処理システム。
【請求項５５】
前記システムはシングルチップ上で実装される、請求項３９に記載の通信処理システム。
【請求項５６】
前記システムは複数のチップ上で実装される、請求項３９に記載の通信処理システム。
【請求項５７】
リングネットワーク・アーキテクチャを利用する通信処理システムであって、
一意のアドレスを有し、前記リングネットワークに沿ってポイントツーポイント形式で通信的に接続された複数のリングメンバと、
少なくとも１つのメッセージを、前記リングメンバの少なくとも一部の間で通信するためのトランザクションベースの接続性とを含み、前記メッセージは、第１のリングメンバから第２のリングメンバへ、少なくとも部分的には前記第２のリングメンバに割り当てられたアドレスに基づいて移動し、前記第２のリングメンバは、前記メッセージが指定される宛先リングメンバであり、前記メッセージは、前記リングネットワークに沿って前記第１のリングメンバから前記第２のリングメンバへ、各々が前記第１および第２のリングメンバの前記アドレスの中間のアドレスを有する１つまたは複数の他のリングメンバによって渡され、前記メッセージは、前記第２のリングメンバによる受信において、前記リングネットワークから受信および除去される、通信処理システム。
【請求項５８】
前記メッセージは、第２のリングメンバの前記アドレスを示す情報を含む、請求項５７に記載の通信処理システム。
【請求項５９】
前記トランザクションベースの接続性は、メッセージが前記リングネットワークの周囲でクロッキング方式に従って渡されることを提供する、請求項５７に記載の通信処理システム。
【請求項６０】
前記クロッキング方式は、前記メッセージが１クロックサイクルにつき１リングメンバを移動することを提供する、請求項５９に記載の通信処理システム。
【請求項６１】
前記トランザクションベースの接続性は、複数のメッセージが前記リングネットワークを移動することを提供し、各メッセージは、メッセージが特定のリングメンバで消費されない限り、１クロックサイクルにつき１リングメンバを移動する、請求項５７に記載の通信処理システム。
【請求項６２】
非宛先リングメンバに到着する前記メッセージは、前記リングネットワーク上の次のリングメンバに渡される、請求項５７に記載の通信処理システム。
【請求項６３】
宛先リングメンバに到着する前記メッセージは、前記宛先リングメンバによって消費される、請求項５７に記載の通信処理システム。
【請求項６４】
前記メッセージは、消費される間に前記リングネットワークから除去されて、前記リングネットワーク上のスロットが使用可能にされるようにする、請求項６３に記載の通信処理システム。
【請求項６５】
前記使用可能なスロットにより、下流のリングメンバがメッセージを前記スロットに挿入できるようにする、請求項６４に記載の通信処理システム。
【請求項６６】
前記接続性は、トランザクションを含むメッセージが前記リングネットワークを移動することを提供し、前記メッセージは、コマンド、命令、タイプ、アドレスおよびデータのうち１つまたは複数を含む、請求項５７に記載の通信処理システム。
【請求項６７】
メッセージを受信する各リングメンバは、前記メッセージの宛先アドレス部をチェックして、前記メッセージがそのリングメンバのために指定されるかどうかを決定し、前記宛先アドレス部がそのリングメンバに対応する場合、前記リングメンバは前記メッセージを前記リングネットワークから取り去り、前記メッセージを消費する、請求項５７に記載の通信処理システム。
【請求項６８】
前記少なくとも１つのメッセージは、前記リングネットワークの構成中にリングメンバにアドレス空間を割り当てさせるメッセージを含む、請求項５７に記載の通信処理システム。
【請求項６９】
前記メッセージは列挙メッセージを含む、請求項６８に記載の通信処理システム。
【請求項７０】
前記構成中のアドレス空間の割り当てにより、処理リングメンバが続いて前記リングネットワークの前記構成を推断できるようにする、請求項６８に記載の通信処理システム。
【請求項７１】
前記リングネットワークは前記リングネットワークを横断するブリッジを含み、これによりメッセージが、中間リングメンバを通過することなく一方の側から別の側に移動できるようにする、請求項５７に記載の通信処理システム。
【請求項７２】
前記システムはシングルチップ上で実装される、請求項５７に記載の通信処理システム。
【請求項７３】
前記システムは複数のチップ上で実装される、請求項５７に記載の通信処理システム。
【請求項７４】
リングネットワーク・アーキテクチャを使用する通信システムであって、
前記リングネットワークに沿ってポイントツーポイント形式で接続された複数のリングメンバと、
メッセージを前記リングメンバの間で通信するためのトランザクションベースの接続性とを含み、
前記メッセージは構成メッセージであり、これによりリングメンバに前記リングネットワークにおけるアドレス空間を割り当てさせる、通信システム。
【請求項７５】
前記構成メッセージが各リングメンバによって処理されて、そのリングメンバに、そのリングメンバのためのアドレス空間を割り当てさせ、次いで前記構成メッセージが次のリングメンバに渡される、請求項７４に記載の通信システム。
【請求項７６】
前記構成メッセージは、開始アドレスを定義するアドレスを含む、請求項７４に記載の通信システム。
【請求項７７】
前記構成メッセージがＣＰＵによって発信される、請求項７６に記載の通信システム。
【請求項７８】
前記ＣＰＵはアンカーメンバである、請求項７６に記載の通信システム。
【請求項７９】
前記構成メッセージを処理する各メンバは、前記構成メッセージを次のリングメンバに渡す前に、前記開始アドレスを訂正する、請求項７６に記載の通信システム。
【請求項８０】
前記構成メッセージを処理する各メンバは、前記メンバの前記アドレス空間を、前記開始アドレス、および、そのメンバのために十分なアドレス空間を使用して割り当てる、請求項７６に記載の通信システム。
【請求項８１】
前記リングネットワーク上のＣＰＵは、前記構成メッセージに基づいてそれらのリングメンバに割り当てられた開始アドレスを使用して、他のリングメンバを認識する、請求項７４に記載の通信システム。
【請求項８２】
前記リングメンバの前記開始アドレスへのオフセットが、前記リングメンバのための異なるコマンドのために使用される、請求項８１に記載の通信システム。
【請求項８３】
前記リングネットワークはブリッジを含む、請求項７４に記載の通信システム。
【請求項８４】
前記構成メッセージが前記ブリッジによって、前記ブリッジのためのアドレス空間を割り当てること、および次いで前記構成メッセージを前記ブリッジの他方の側に渡すことによって処理される、請求項８３に記載の通信システム。
【請求項８５】
前記構成メッセージが前記ブリッジによって処理されて、後続のメッセージが、前記後続のメッセージに関連付けられたアドレスが前記ブリッジの一方の側に対応するか、前記ブリッジの他方の側に対応するかに従って、ルーティングされるようになる、請求項８４に記載の通信システム。
【請求項８６】
前記アドレスが前記ブリッジの前記一方の側に関連付けられるとき、前記後続のメッセージが前記ブリッジを横断して渡され、前記アドレスが前記ブリッジの他方の側に関連付けられるとき、前記後続のメッセージが前記ブリッジを通過させられる、請求項８５に記載の通信システム。
【請求項８７】
構成メッセージを前記リングネットワークの一方の側から受信する前記ブリッジは、前記構成メッセージに含まれた第１のアドレスを記録し、前記構成メッセージを前記リングネットワークの他方の側における前記リングメンバに渡し、前記構成メッセージが前記リングネットワークの他方の側から到着するときに前記構成メッセージに含まれた第２のアドレスを記録することによって応答する、請求項８３に記載の通信システム。
【請求項８８】
前記第１のアドレスは前記ブリッジの近い側に対応し、前記第２のアドレスは前記ブリッジの遠い側に対応する、請求項８７に記載の通信システム。
【請求項８９】
リングメンバに記述データで応答させる、第２の構成メッセージをさらに含む、請求項７４に記載の通信システム。
【請求項９０】
前記記述データは、前記リングメンバのためのアドレス空間データを含む、請求項８９に記載の通信システム。
【請求項９１】
前記リングネットワーク上のＣＰＵメンバは、前記リングネットワークのトポロジを、前記記述データを使用して推断するように適合される、請求項８９に記載の通信システム。
【請求項９２】
複数のリングメンバを含むリングネットワーク・アーキテクチャ・システムにおいて、アドレス空間を割り当てる方法であって、
構成メッセージを発行するステップと、
前記構成メッセージを各リングメンバで処理して、前記リングネットワークにおけるそのリングメンバのためのアドレス空間を割り当てるステップと、
前記構成メッセージを、前記割り当てられたアドレス空間に基づいて修正するステップと、
前記構成メッセージを次のリングメンバに渡すステップとを含む方法。
【請求項９３】
前記構成メッセージは、前記リングネットワーク上のＣＰＵメンバによって発行される、請求項９２に記載の方法。
【請求項９４】
前記ＣＰＵメンバはアンカーである、請求項９３に記載の方法。
【請求項９５】
前記構成メッセージは開始アドレスを含む、請求項９２に記載の方法。
【請求項９６】
前記アドレス空間は、前記開始アドレス、および、そのリングメンバのアドレスの必要に基づいて割り当てられる、請求項９５に記載の方法。
【請求項９７】
前記修正するステップは、前記渡すステップの前に前記開始アドレスを修正するステップを含む、請求項９５に記載の方法。
【請求項９８】
前記複数のリングメンバはブリッジを含み、前記ブリッジは、後続のメッセージに関連付けられたアドレスに応じて前記後続のメッセージが前記ブリッジを横断して渡されるか、あるいは前記ブリッジを通過させられることを提供するロジックを構成することによって、前記構成メッセージに応答する、請求項９５に記載の方法。
【請求項９９】
前記リングネットワークは、第１のカテゴリのメッセージおよび第２のカテゴリのメッセージを処理するように適合され、前記ブリッジロジックは、前記第２のカテゴリについてのみ動作可能である、請求項９８に記載の方法。
【請求項１００】
前記第１のカテゴリは管理メッセージであり、前記第２のカテゴリはワークメッセージである、請求項９９に記載の方法。
【請求項１０１】
リングベースのシステムオンチップであって、
リング上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
読み取りメッセージおよび書き込みメッセージ両方を処理するように適合され、
ＣＰＵ、および、前記ＣＰＵと日付を交換する少なくとも１つの周辺デバイスを含む前記複数のリングメンバとを含み、
前記周辺デバイスは、前記周辺デバイスのステータスを記述するデータを格納する少なくとも１つのステータスメモリを含み、
前記システムは、前記ＣＰＵによってアクセス可能であるステータス変化を先書きするように構成されるシステム。
【請求項１０２】
前記ステータスメモリは少なくとも１つのステータスレジスタを含む、請求項１０１に記載のシステム。
【請求項１０３】
前記システムは、そうでない場合は前記ＣＰＵによって読み取りオペレーションとして開始されるステータス変化の先書きを実行するように適合される、請求項１０１に記載のシステム。
【請求項１０４】
前記システムは、前記ＣＰＵ上のＲＡＭ、または前記ＣＰＵによってアクセス可能であるＲＡＭへ、ステータス変化を先書きするように適合される、請求項１０１に記載のシステム。
【請求項１０５】
前記先書きオペレーションは、いくつかの周辺デバイスのステータス変化について実行されるが、他の周辺デバイスのステータス変化については実行されない、請求項１０１に記載のシステム。
【請求項１０６】
前記先書きオペレーションは、前記ステータス変化の性質に応じて、実行されるかあるいは実行されない、請求項１０５に記載のシステム。
【請求項１０７】
前記先書きオペレーションは、前記ステータス変化の大きさまたは量に基づいて実行されるかあるいは実行されない、請求項１０５に記載のシステム。
【請求項１０８】
前記先書きオペレーションは、そうでない場合は前記ＣＰＵによって規則的に開始される、読み取りオペレーションに基づいて発生するようにプログラムされる、請求項１０１に記載のシステム。
【請求項１０９】
前記ＣＰＵは、通信チップにおけるコントロール・プロトコル・プロセッサを含む、請求項１０１に記載のシステム。
【請求項１１０】
前記ＣＰＵは、通信チップにおけるネットワークプロセッサを含む、請求項１０１に記載のシステム。
【請求項１１１】
リングベースの通信システムにおいて処理するための方法であって、
リングネットワークにおいて、前記リングネットワークにおけるプロセッサにとって常に関心のあるステータス情報を格納するステータスレジスタを含む、少なくとも１つのモジュールを識別するステップと、
どのステータス情報を前記プロセッサに、前記少なくとも１つのモジュールによって開始された先書きオペレーションとして、前記処理によって開始された読み取りオペレーションの代わりに送信することができるかを識別するステップと、
前記少なくとも１つのモジュールを、前記識別されたステータス情報を先書きオペレーションとして送信するようにプログラムするステップとを含む方法。
【請求項１１２】
前記識別は、どのステータス変化が前記プロセッサにとって決定的な重要性のあるものか、あるいは常に関心のあるものかを識別するステップを含む、請求項１１１に記載の方法。
【請求項１１３】
前記識別は、何の大きさまたはレベルのステータス変化が前記先書きオペレーションを引き起こすかを識別するステップを含む、請求項１１１に記載の方法。
【請求項１１４】
前記プログラムするステップは、前記プロセッサによって開始された読み取りオペレーションの平均数を減少させる、請求項１１１に記載の方法。
【請求項１１５】
前記プロセッサは、プロトコルプロセッサまたはネットワークプロセッサを含む、請求項１１１に記載の方法。
【請求項１１６】
リングベースのシステムオンチップであって、
リング上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
少なくとも１つの前記リングメンバはブリッジを含むシステム。
【請求項１１７】
前記ブリッジにより、メッセージが中間リングメンバを通過することなく前記ブリッジの一方の側から別の側に移動できるようにする、請求項１１６に記載のシステム。
【請求項１１８】
前記ブリッジは、前記ブリッジに到着する前記メッセージが、前記メッセージに関連付けられたアドレスが前記ブリッジの一方の側に対応するか、前記ブリッジの他方の側に対応するかに従って、ルーティングされるように構成される、請求項１１７に記載のシステム。
【請求項１１９】
前記アドレスが前記ブリッジの前記一方の側に関連付けられるとき、前記メッセージが前記ブリッジを横断して渡され、前記アドレスが前記ブリッジの他方の側に関連付けられるとき、前記メッセージが前記ブリッジを通過させられる、請求項１１７に記載のシステム。
【請求項１２０】
前記ブリッジは、ある範囲のアドレスを有するロジックを含み、前記アドレスが前記範囲内であるかどうかに応じて、前記メッセージが前記ブリッジの一方の側または前記ブリッジの他方の側にルーティングされるようにする、請求項１１８に記載のシステム。
【請求項１２１】
前記ロジックは構成メッセージに基づいて確立され、構成メッセージは前記リングメンバにそれらのアドレス空間を割り当てさせる、請求項１２０に記載のシステム。
【請求項１２２】
前記構成メッセージは列挙メッセージである、請求項１２２に記載のシステム。
【請求項１２３】
前記複数のリングメンバは、第１のリングネットワークを含む第１の複数のリングメンバであり、第２のリングネットワークを含む第２の複数のリングメンバをさらに含み、前記ブリッジは、前記２つのリングネットワークの間のブリッジを含む、請求項１１６に記載のシステム。
【請求項１２４】
前記ブリッジは、どのメッセージを前記第２のリングネットワークに渡すべきであるか、および、どのメッセージを前記第１のリングネットワーク上で保つべきであるかを決定するように適合される、請求項１２３に記載のシステム。
【請求項１２５】
前記ブリッジは、前記ブリッジに到着する前記メッセージが、前記メッセージに関連付けられたアドレスが前記ブリッジの一方の側に対応するか、前記ブリッジの他方の側に対応するかに従って、ルーティングされるように構成される、請求項１２３に記載のシステム。
【請求項１２６】
前記アドレスが前記第１のリングネットワークに関連付けられるとき、前記メッセージが前記ブリッジを横断して渡され、前記アドレスが前記第２のリングネットワークに関連付けられるとき、前記メッセージが前記ブリッジを通過させられる、請求項１２３に記載のシステム。
【請求項１２７】
前記ブリッジは、ある範囲のアドレスを有するロジックを含み、前記アドレスが前記範囲内であるかどうかに応じて、前記メッセージが前記第１のリングネットワークまたは前記第２のリングネットワークにルーティングされるようにする、請求項１２３に記載のシステム。
【請求項１２８】
前記ロジックは構成メッセージに基づいて確立され、構成メッセージは前記リングメンバにそれらのアドレス空間を割り当てさせる、請求項１２７に記載のシステム。
【請求項１２９】
前記構成メッセージは列挙メッセージである、請求項１２８に記載のシステム。
【請求項１３０】
前記ブリッジは、第１のカテゴリのメッセージおよび第２のカテゴリのメッセージを処理するように適合される、請求項１１６に記載のシステム。
【請求項１３１】
前記ブリッジはルーティングの決定を、前記第２のカテゴリのメッセージに基づいて行なう、請求項１３０に記載のシステム。
【請求項１３２】
前記第１のカテゴリのメッセージは管理メッセージであり、前記第２のカテゴリのメッセージはワークメッセージである、請求項１３０に記載のシステム。
【請求項１３３】
前記ブリッジは前記メッセージのカテゴリを、前記メッセージに含まれたメッセージタイプを検査することによって識別する、請求項１３０に記載のシステム。
【請求項１３４】
リングベースのシステムオンチップであって、
リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
正常なオペレーション中に、前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
前記システムはさらにスキャンテストモードについて適合され、スキャンテストモードにおいて、前記リングメンバの１つがスキャン出力のために使用可能にされ、他のリングメンバが非活動化されるシステム。
【請求項１３５】
前記スキャン出力が、前記１つのリングメンバによって送信される１つまたは複数のメッセージにパッケージされる、請求項１３４に記載のシステム。
【請求項１３６】
前記１つまたは複数のメッセージはプロセッサに送信される、請求項１３５に記載のシステム。
【請求項１３７】
前記プロセッサは、管理応答メッセージを消費する管理者として動作するリングメンバである、請求項１３６に記載のシステム。
【請求項１３８】
前記プロセッサは前記１つまたは複数のメッセージからのデータを、デバッギングソフトウェアで使用可能にする、請求項１３６に記載のシステム。
【請求項１３９】
前記リングメンバの第２のものは、前記他のリングメンバを非活動化させるように、かつ前記１つのリングメンバを前記スキャン出力のために使用可能にするように動作する、少なくとも１つのメッセージを発行する、プロセッサを含む、請求項１３４に記載のシステム。
【請求項１４０】
前記スキャンテストモードにおける前記システムのオペレーションは、前記１つのリングメンバに、前記１つのリングメンバに関連付けられたフリップフロップを、前記リング上で送信された１つまたは複数のメッセージにシフトアウトさせる、請求項１３４に記載のシステム。
【請求項１４１】
前記スキャンテストモードは、前記リングネットワークをリセットすること、および前記１つのメンバを前記スキャンモードのために使用可能にすることによって開始される、請求項１３４に記載のシステム。
【請求項１４２】
前記スキャンテストモードの開始は、前記リングネットワークを列挙することを含む、請求項１４１に記載のシステム。
【請求項１４３】
前記複数のリングメンバは前記リングネットワークに、レジスタを有する複数のリングインターフェイスを使用して結合される、請求項１３４に記載のシステム。
【請求項１４４】
前記レジスタは、そのリングインターフェイスに関連付けられた前記リングメンバを非活動化するように設定することができるビットを含む、請求項１４３に記載のシステム。
【請求項１４５】
前記レジスタは、そのリングインターフェイスに関連付けられた前記リングメンバを前記スキャン出力のために使用可能にするように設定することができるビットを含む、請求項１４３に記載のシステム。
【請求項１４６】
前記スキャンテストモードにより、前記システムのユーザが前記システムを、追加のハードウェアを追加することなくデバッグすることができる、請求項１３４に記載のシステム。
【請求項１４７】
前記非活動化されたメンバは、前記メッセージを消費することなくメッセージを渡す、請求項１３４に記載のシステム。
【請求項１４８】
複数のリングメンバを有するリングネットワークにおいてスキャンする方法であって、
前記リングネットワークの正常なオペレーション中に、欠陥または異常を観測するステップと、
１つのリングメンバをスキャン出力モードに入れさせ、他のリングメンバを非活動化させる、少なくとも１つのメッセージを発行するステップと、
前記リングネットワークのオペレーションを再開させるステップと、
前記１つのリングメンバからのスキャンデータを前記リングネットワーク上にメッセージとして出力するステップとを含む方法。
【請求項１４９】
前記少なくとも１つのメッセージは、前記リングメンバに関連付けられたリングインターフェイスにおいてビットを構成する、少なくとも１つの管理メッセージを含む、請求項１４８に記載の方法。
【請求項１５０】
前記スキャン出力モード中に、前記１つのリングメンバはそのスキャン出力を、プロセッサリングメンバに送信されるメッセージとしてパッケージする、請求項１４８に記載の方法。
【請求項１５１】
前記プロセッサリングメンバは前記スキャン出力をデバッギングソフトウェアで使用可能にする、請求項１５０に記載の方法。
【請求項１５２】
前記観測するステップは前記正常なオペレーション中のある時点で行なわれ、さらに、前記再開するステップは、前記時点の直前で実行される、請求項１４８に記載の方法。
【請求項１５３】
前記欠陥または異常を分離させるために、異なるリングメンバに、前記スキャン出力モードに入るようにさせるステップをさらに含む、請求項１４８に記載の方法。
【請求項１５４】
リングベースのシステムオンチップであって、
リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
下流の隣接リングメンバが信号をそれらの上流の隣接リングメンバに提供し、この信号が、前記上流リングメンバが前記メッセージを前記下流リングメンバに所与のクロックサイクルで渡すためにスロットが使用可能であるかどうかを指示するように、適合される前記システム。
【請求項１５５】
スロットが使用可能でないことを指示する前記信号の受信により、前記上流リングメンバが前記メッセージをそのクロックサイクルで渡さないようにさせる、請求項１５４に記載のシステム。
【請求項１５６】
各リングメンバは前記信号を直前のリングメンバに各クロックサイクルで提供する、請求項１５４に記載のシステム。
【請求項１５７】
各リングメンバは前記リングネットワークにリングインターフェイスによって結合し、スロット可用性に関する前記信号が隣接するリングインターフェイスの間で渡される、請求項１５４に記載のシステム。
【請求項１５８】
前記リングインターフェイスは入力ＦＩＦＯおよび通過ＦＩＦＯを含む、請求項１５７に記載のシステム。
【請求項１５９】
前記信号が、前記下流リングメンバによって生成され、前記メッセージを保持するすぐ上流のリングメンバに渡され、前記信号が、前記メッセージに関係する前記下流リングメンバのための前記ＦＩＦＯに従って生成される、請求項１５８に記載のシステム。
【請求項１６０】
下流リングメンバは、前記メッセージが前記下流リングメンバによって消費されるべきである場合、前記入力ＦＩＦＯが前記メッセージに関係すると判断し、前記メッセージが前記下流リングメンバによって消費されるべきでない場合、前記通過ＦＩＦＯが前記メッセージに関係すると判断する、請求項１５９に記載のシステム。
【請求項１６１】
前記信号は、前記入力ＦＩＦＯが前記メッセージに関係し、前記入力ＦＩＦＯがメッセージを受け入れることができるとき、スロットが使用可能であることを指示する、請求項１６０に記載のシステム。
【請求項１６２】
前記信号は、前記通過ＦＩＦＯが前記メッセージに関係し、前記通過ＦＩＦＯがメッセージを受け入れることができるとき、スロットが使用可能であることを指示する、請求項１６０に記載のシステム。
【請求項１６３】
前記判断は、前記メッセージが全体として前記上流リングメンバから前記下流リングメンバに送信される前に、前記下流リングメンバが、前記メッセージを記述する情報を検査することによって行なわれる、請求項１６０に記載のシステム。
【請求項１６４】
前記情報は、前記メッセージのためのタイプフィールドおよびアドレスフィールドからのデータを含む、請求項１６３に記載のシステム。
【請求項１６５】
前記信号は、前記上流リングメンバから前記下流リングメンバへ送信されたデータに基づいて生成され、次いで単一のクロックサイクル中にラウンドトリップ形式で前記上流リングメンバに戻る、バックプレッシャー信号である、請求項１５４に記載のシステム。
【請求項１６６】
各リングメンバはリングインターフェイスを含み、さらに、各リングインターフェイスは、バックプレッシャー信号を含む前記信号を使用または提供する４つのインターフェイスを有する、請求項１５４に記載のシステム。
【請求項１６７】
複数のリングメンバを含むリングネットワーク上でメッセージの送信をコントロールする方法であって、
第２の隣接する下流リングメンバへの出力のために使用可能であるメッセージを、第１の上流リングメンバで提供するステップと、
信号を前記上流リングメンバで、前記下流リングメンバから受信し、この信号は、前記メッセージをクロックサイクルで出力するためにスロットが使用可能であるかどうかを指示するステップと、
スロットが使用可能である場合、前記メッセージを前記上流リングメンバから前記下流リングメンバに出力し、スロットが使用可能でない場合、前記メッセージを保持するステップとを含む方法。
【請求項１６８】
前記信号は、前記メッセージの内容に基づいて生成される、請求項１６７に記載の方法。
【請求項１６９】
前記信号は、前記メッセージが前記下流リングメンバによって消費されるか、さらなる下流リングメンバまで通過するかに基づいて生成される、請求項１６８に記載の方法。
【請求項１７０】
前記下流リングメンバは入力ＦＩＦＯおよび通過ＦＩＦＯに結合され、前記下流リングメンバは、どちらのＦＩＦＯが前記メッセージに関係するかを判断する、請求項１６７に記載の方法。
【請求項１７１】
前記下流リングメンバは、前記関係するＦＩＦＯが前記メッセージを受け入れることができるかどうかを判断する、請求項１７０に記載の方法。
【請求項１７２】
前記内容は前記メッセージタイプの少なくとも一部を含む、請求項１６８に記載の方法。
【請求項１７３】
前記内容は前記メッセージアドレスの少なくとも一部を含む、請求項１６８に記載の方法。
【請求項１７４】
リングベースのシステムであって、
リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
少なくとも１つの外部周辺デバイスとの通信を可能にする、外部リングインターフェイスを提供するための手段とを含むシステム。
【請求項１７５】
前記手段はフィールド・プログラマブル・ゲート・アレイを含む、請求項１７４に記載のシステム。
【請求項１７６】
前記手段は、前記リングネットワーク上のメモリポートリングメンバをさらに含む、請求項１７５に記載のシステム。
【請求項１７７】
前記手段は、前記リングネットワークのプロトコルと前記少なくとも１つの外部周辺デバイスの間のハンドシェーキングを実行するように適合される、請求項１７４に記載のシステム。
【請求項１７８】
前記ハンドシェーキングは、前記リングネットワークからのメッセージデータをトランザクションデータに変換することを含む、請求項１７７に記載のシステム。
【請求項１７９】
前記手段により、前記リングネットワークがメッセージを、前記少なくとも１つの外部周辺デバイスおよび前記少なくとも１つの外部周辺デバイスに書き出して、前記リングネットワークのためにメッセージに変換されたトランザクションを生成できるようにする、請求項１７４に記載のシステム。
【請求項１８０】
前記手段は、前記リングネットワークと前記少なくとも１つの外部周辺デバイスの間の共有メモリとして動作する、請求項１７４に記載のシステム。
【請求項１８１】
前記手段は、前記リングネットワークから受信されたメッセージのためのＲＡＭとして、かつ、前記少なくとも１つの外部周辺デバイスから受信されたトランザクションためのＦＩＦＯとして動作するメモリを含む、請求項１８０に記載のシステム。
【請求項１８２】
前記少なくとも１つの外部周辺デバイスは、ＤＳＰ、暗号化エンジン、外部バス、外部メモリ、および第２のリングネットワークのうち１つまたは複数を含む、請求項１７４に記載のシステム。
【請求項１８３】
前記リングネットワークは第１のチップ上の第１のリングネットワークであり、さらに第２のチップ上の第２のリングネットワークを含み、前記第１のリングネットワークおよび前記第２のリングネットワークは、前記手段を通じて前記少なくとも１つの外部周辺デバイスにインターフェイスする、請求項１７４に記載のシステム。
【請求項１８４】
前記リングネットワークは、第１のプロトコルプロセッサおよび第２のネットワークプロセッサを含む第１の通信プロセッサであり、さらに、第２のプロトコルプロセッサおよび第２のネットワークプロセッサを含む第２の通信プロセッサを含み、さらに、前記第１の通信プロセッサおよび前記第２の通信プロセッサは、前記手段を通じて前記少なくとも１つの外部周辺デバイスにインターフェイスする、請求項１７４に記載のシステム。
【請求項１８５】
前記手段はメモリを含み、前記リングネットワークはデータを前記メモリ内のアドレスに書き込んで、前記少なくとも１つの外部周辺デバイスに割り込みを引き起こすことができる、請求項１７４に記載のシステム。
【請求項１８６】
リングベースのシステムであって、
リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
前記メッセージは前記所与のリングメンバのリセットを、前記メッセージがそのリングメンバに適用可能である場合に引き起こすシステム。
【請求項１８７】
前記メッセージは、前記所与のリングメンバに対応するアドレス情報を含む、請求項１８６に記載のシステム。
【請求項１８８】
前記メッセージは、リセットを引き起こすための少なく１つのビットを含む起動メッセージである、請求項１８６に記載のシステム。
【請求項１８９】
前記リセットはソフトリセットである、請求項１８６に記載のシステム。
【請求項１９０】
前記メッセージは、前記メッセージからの少なくとも１つのビットを前記所与のメンバのためのリングインターフェイスに書き込むことによって、リセットを引き起こす、請求項１８６に記載のシステム。
【請求項１９１】
前記リングインターフェイスは、前記メッセージによってリセットされるビットを含む、請求項１９０に記載のシステム。
【請求項１９２】
前記ビットは起動済ビットである、請求項１９１に記載のシステム。
【請求項１９３】
前記ビットはリセットビットである、請求項１９１に記載のシステム。
【請求項１９４】
前記リングインターフェイスは、前記リセットを引き起こすための、前記所与のリングメンバへの出力を提供する、請求項１９０に記載のシステム。
【請求項１９５】
前記出力は、前記所与のリングメンバに結合されたコントロールピンである、請求項１９４に記載のシステム。
【請求項１９６】
リングベースのシステムであって、
リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
前記リングネットワークの多数のメンバをリセットさせる、リセットコントロール信号をさらに含むシステム。
【請求項１９７】
前記リセットコントロール信号は、前記メッセージと無関係に送信されるハードウェア信号である、請求項１９６に記載のシステム。
【請求項１９８】
前記リセットコントロール信号は、前記メッセージとは異なるライン上で送信される、請求項１９６に記載のシステム。
【請求項１９９】
前記リセットコントロール信号は、前記リセット信号を発信した元の前記メンバを除いて、すべてのリングメンバをリセットさせる、請求項１９６に記載のシステム。
【請求項２００】
前記リセットはハードリセットである、請求項１９６に記載のシステム。
【請求項２０１】
前記リセットコントロール信号は、前記多数のメンバに対応するリングインターフェイス内のビットのリセットを引き起こすことによって、リセットを引き起こす、請求項１９６に記載のシステム。
【請求項２０２】
前記リングインターフェイスは、出力をそれらの対応するリングメンバに提供して、前記リセットを引き起こす、請求項２０１に記載のシステム。
【請求項２０３】
前記出力は、前記対応するリングメンバに結合されたコントロールピンである、請求項２０２に記載のシステム。
【請求項２０４】
リングベースのシステムであって、
リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
前記システムは、前記メッセージがそのリングメンバに適用可能である場合、前記所与のリングメンバのリセットを引き起こすことができるメッセージを含み、
前記システムは、前記リングネットワークの多数のメンバをリセットさせる、リセットコントロール信号をさらに含むシステム。
【請求項２０５】
リセットを引き起こすことができる前記メッセージは、前記所与のリングメンバのソフトリセットを引き起こし、前記リセットコントロール信号は、前記多数のメンバのハードリセットを引き起こす、請求項２０４に記載のシステム。
【請求項２０６】
リングベースのシステムであって、
リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージとを含み、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合され、
前記リングネットワーク上のタイミングをコントロールするためのシステムクロック信号とを含み、前記システムクロック信号は、前記リングメンバのすべての間ではなく、リングメンバの複数のグループの間で位置合わせされるシステム。
【請求項２０７】
前記システムクロック信号の位置合わせは、隣接するリングメンバの間で実行される、請求項２０６に記載のシステム。
【請求項２０８】
リングメンバのための前記位置合わせは、前記リングメンバの上流および下流リングメンバに関して実行される、請求項２０７に記載のシステム。
【請求項２０９】
前記システムクロック信号は、前記メッセージと同一方向に流れる、請求項２０６に記載のシステム。
【請求項２１０】
前記システムクロック信号は、前記メッセージと反対方向に流れる、請求項２０６に記載のシステム。
【請求項２１１】
前記位置合わせは、前記リングメンバで、隣接するクロック信号の間の遅延が隣接するメンバの間の遅延を超えないことを保証するロジックを挿入することによって実行される、請求項２０６に記載のシステム。
【請求項２１２】
前記位置合わせは、個々のメンバでのクロック信号によってクロックされるラッチを使用して実行される、請求項２０６に記載のシステム。
【請求項２１３】
前記メッセージと反対方向に流れるバックプレッシャー信号をさらに含み、前記位置合わせは、前記リングメンバで、前記バックプレッシャー信号のためのリターンパスが隣接するメンバの間のクロック遅延を超えることを保証するためのロジックを挿入することによって実行される、請求項２０６に記載のシステム。
【請求項２１４】
前記位置合わせは実質的に、前記クロック信号の間のスキューを除去する、請求項２０６に記載のシステム。
【請求項２１５】
前記位置合わせは、リングメンバのフリップフロップが早すぎるクロックサイクルでデータをサンプリングすることを防止する、請求項２０６に記載のシステム。
【請求項２１６】
チップ上で実装されたネットワークプロセッサであって、
ＡＴＭ、フレームリレー、イーサネットおよびＩＰを含む複数のプロトコルを処理するための手段であって、
追加のプロトコルを処理するためのライブラリコマンドのセットを使用して、プログラマブルである手段を含み、
前記手段は、論理演算装置（ＡＬＵ）、ロード／ストアユニット（ＬＳＵ）、プレロード／バンプユニット（ＰＢＵ）、レジスタファイルユニット（ＲＦＵ）、エージェントインターフェイス、および内部メモリを含む、ネットワークプロセッサ。
【請求項２１７】
フェッチユニットおよびプログラムシーケンサをさらに含む、請求項２１６に記載のネットワークプロセッサ。
【請求項２１８】
前記ＡＬＵは、算術および論理演算をデータオペランドにおいて実行する、請求項２１６に記載のネットワークプロセッサ。
【請求項２１９】
前記ＬＳＵはアドレス計算を、前記内部メモリにおけるデータオペランドをアドレス指定するために実行する、請求項２１６に記載のネットワークプロセッサ。
【請求項２２０】
前記ＬＳＵは、５つの使用可能なオプションのうち１つに従って有効アドレスを計算し、これらのオプションには、
（１）有効アドレスは、前記ＲＦＵからのレジスタの内容であること、
（２）有効アドレスは、前記ＲＦＵからの第１のレジスタの内容、および、前記ＲＦＵからの第２のレジスタの内容の和であること、
（３）有効アドレスは、前記ＲＦＵからの第１のレジスタの内容、および、前記ＲＦＵからの第２のレジスタの、前記第２のレジスタが指定された数のビットだけシフトされた後の、内容の和であること、
（４）有効アドレスは、前記ＲＦＵからのレジスタの前記内容、および、命令語において指定された数のビットを占有する変位の和であること、および
（５）有効アドレスは、前記命令語に含まれた絶対アドレスであることが含まれる、請求項２１９に記載のネットワークプロセッサ。
【請求項２２１】
前記ＲＦＵは、現在のタスクのための第１のレジスタファイル、および、次のタスクのためのレジスタ値をプレロードするための第２のレジスタファイルを含む、請求項２１６に記載のネットワークプロセッサ。
【請求項２２２】
現在のタスクＩＤと、前記第１のレジスタファイルに関連付けられたタスクＩＤの間の比較に基づいて、データが前記第１のレジスタファイルに読み込まれ、あるいはそこから書き込まれる、請求項２２１に記載のネットワークプロセッサ。
【請求項２２３】
前記ＲＦＵは、前記第１のレジスタファイルに格納されていない前記現在のタスクのためのレジスタ値を格納するための第３のレジスタファイルを含む、請求項２２１に記載のネットワークプロセッサ。
【請求項２２４】
現在のタスクＩＤ、および、前記第１のレジスタファイルに関連付けられたタスクＩＤが同じでないとき、データが前記第３のレジスタファイルに読み込まれ、あるいはそこに書き込まれる、請求項２２３に記載のネットワークプロセッサ。
【請求項２２５】
ＰＳＵは、前記内部メモリから受信された命令の復号化を実行する、請求項２１７に記載のネットワークプロセッサ。
【請求項２２６】
フェッチユニットは、何の命令がメモリから、ＰＳＵによる復号化のためにフェッチされるかをコントロールする、請求項２２４に記載のネットワークプロセッサ。
【請求項２２７】
前記次のタスクを前記現在のタスクにし、さらに次のタスクをプレロードすることによって、タスクスイッチが実行される、請求項２２３に記載のネットワークプロセッサ。
【請求項２２８】
タスクスイッチの実行は、前記タスクスイッチの後に前記第２のレジスタファイルを前記第３のレジスタファイルとして扱うことを含む、請求項２２７に記載のネットワークプロセッサ。
【請求項２２９】
前記エージェントインターフェイスにより、前記ネットワークプロセッサが命令を実行するために外部モジュールにインターフェイスできるようにする、請求項２１６に記載のネットワークプロセッサ。
【請求項２３０】
前記外部モジュールは、ＣＲＣモジュール、暗号化モジュール、ハッシングモジュール、およびテーブルルックアップモジュールのうち１つまたは複数を含む、請求項２２９に記載のネットワークプロセッサ。
【請求項２３１】
前記内部メモリはプログラム情報およびデータを格納するためである、請求項２１６に記載のネットワークプロセッサ。
【請求項２３２】
チップ上で実装された通信プロセッサであって、
ＡＴＭ、フレームリレー、イーサネットおよびＩＰを含む複数のプロトコルを処理するための手段を含むネットワークプロセッサであって、前記手段は、追加のプロトコルを処理するためのライブラリコマンドのセットを使用してプログラマブルであり、前記手段は、論理演算装置（ＡＬＵ）、ロード／ストアユニット（ＬＳＵ）、プレロード／バンプユニット（ＰＢＵ）、レジスタファイルユニット（ＲＦＵ）、エージェントインターフェイス、および内部メモリを含む、ネットワークプロセッサと、
前記ネットワークプロセッサをコントロールするためのプロトコルプロセッサを含み、
前記プロトコルプロセッサはコントロールプレーン処理を実行し、前記ネットワークプロセッサはデータプレーン処理を実行する、通信プロセッサ。
【請求項２３３】
前記ネットワークプロセッサは、フェッチ、復号化、アドレス指定、実行、および書き込みを実行することによって、命令を処理する、請求項２３２に記載の通信プロセッサ。
【請求項２３４】
前記ネットワークプロセッサおよび前記プロトコルプロセッサはリングネットワーク上のリングメンバであり、複数の他のリングメンバを前記リングネットワーク上でさらに含む、請求項２３２に記載の通信プロセッサ。
【請求項２３５】
前記ネットワークプロセッサは、前記リングネットワークへの単一のリングインターフェイスを共有する複数のコンパウンドを含む、請求項２３４に記載の通信プロセッサ。
【請求項２３６】
前記コンパウンドは、前記ネットワークプロセッサのためのタスクの実行順序をコントロールするためのドアベルエージェントを含む、請求項２３５に記載の通信プロセッサ。
【請求項２３７】
前記コンパウンドは、データを前記内部メモリから読み取るための要求にサービスするための、マルチリーダエージェントを含む、請求項２３５に記載の通信プロセッサ。
【請求項２３８】
前記コンパウンドは、メッセージを前記リングネットワーク上に送信するためのメッセージセンダエージェントを含む、請求項２３５に記載の通信プロセッサ。
【請求項２３９】
前記コンパウンドは、メッセージを送信して前記リングネットワーク上のＤＭＡコントローラを開始するためのＤＭＡエージェントを含む、請求項２３５に記載の通信プロセッサ。
【請求項２４０】
前記コンパウンドは、ＣＲＣ計算を実行するためのＣＲＣエージェントを含む、請求項２３５に記載の通信プロセッサ。
【請求項２４１】
前記コンパウンドはデバッグモジュールを含む、請求項２３５に記載の通信プロセッサ。
【請求項２４２】
通信システムにおいてタスクを効率的に処理するための方法であって、
現在のタスク識別子および次のタスク識別子をサンプリングするステップと、
現在のタスクのための値を格納するための第１のレジスタファイルを提供するステップと、
前記第１のレジスタファイルにはない前記現在のタスクのための値を格納するための、第２のレジスタファイルを提供するステップと、
次のタスクのための値をプレロードするための第３のレジスタファイルを提供するステップと、
前記次のタスク識別子を前記現在のタスク識別子にし、さらに次のタスク識別子をサンプリングすることによって、タスクスイッチを実行するステップとを含む方法。
【請求項２４３】
前記タスクスイッチの後は前記現在のタスク識別子である、前記次のタスク識別子のための前記レジスタ値の前記プレロードを完了するステップをさらに含む、請求項２４２に記載の方法。
【請求項２４４】
前記第３のレジスタファイルを、前記タスクスイッチの後に前記第２のレジスタファイルとして使用するステップをさらに含む、請求項２４３に記載の方法。
【請求項２４５】
前記第１のレジスタファイルは、データフィールドおよびタスク識別子フィールドを有するレジスタを含む、請求項２４２に記載の方法。
【請求項２４６】
前記第１のレジスタファイルは３２レジスタを有し、各レジスタは、３２ビットのデータフィールドおよび６ビットのタスク識別子フィールドを有する、請求項２４５に記載の方法。
【請求項２４７】
前記第１のレジスタファイルが、前記通信プロセッサのプログラマに公開され、前記第２のレジスタファイルおよび前記第３のレジスタファイルが前記プログラマから隠される、請求項２４２に記載の方法。
【請求項２４８】
タスクスイッチが、前記レジスタファイルの明示的セーブ／リストアなしに実行される、請求項２４２に記載の方法。
【請求項２４９】
前記現在のタスクの実行中に書き込みを実行するステップをさらに含み、この書き込みは、
前記現在のタスク識別子を、前記第１のレジスタファイルにおけるタスク識別子と比較するステップと、
前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じであるとき、値を前記第１のレジスタファイルに書き込むステップと、
前記第１のレジスタファイルにおける内容がメモリに保存された後、前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じでないとき、値を前記第１のレジスタファイルに書き込むステップとによって実行される、請求項２４２に記載の方法。
【請求項２５０】
前記第１のレジスタファイルにおける内容が、タスク識別子コンテキストテーブルに保存される、請求項２４９に記載の方法。
【請求項２５１】
前記現在のタスクの実行中に読み取りを実行するステップをさらに含み、この読み取りは、
前記現在のタスク識別子を、前記第１のレジスタファイルにおけるタスク識別子と比較するステップと、
前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じであるとき、値を前記第１のレジスタファイルから読み取るステップと、
前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じでないとき、値を前記第２のレジスタファイルから読み取るステップとによって実行される、請求項２４２に記載の方法。
【請求項２５２】
前記第１のレジスタファイルの内容は、前記読み取りの結果として変更されない、請求項２５１に記載の方法。
【請求項２５３】
通信システムにおいてタスクを効率的に処理するためのシステムであって、
現在のタスク識別子および次のタスク識別子をサンプリングする手段と、
現在のタスクのための値を格納するための第１のレジスタファイルと、
前記第１のレジスタファイルにはない前記現在のタスクのための値を格納するための、第２のレジスタファイルと、
次のタスクのための値をプレロードするための第３のレジスタファイルと、
前記次のタスク識別子を前記現在のタスク識別子にし、さらに次のタスク識別子をサンプリングすることによって、タスクスイッチを実行する手段とを含むシステム。
【請求項２５４】
前記タスクスイッチを実行する手段は、前記タスクスイッチの後は前記現在のタスク識別子である、前記次のタスク識別子のための前記レジスタ値の前記プレロードを完了する、請求項２５３に記載のシステム。
【請求項２５５】
前記タスクスイッチを実行する手段は、前記第３のレジスタファイルを、前記タスクスイッチの後に前記第２のレジスタファイルとして使用する、請求項２５３に記載のシステム。
【請求項２５６】
前記第１のレジスタファイルは、データフィールドおよびタスク識別子フィールドを有するレジスタを含む、請求項２５３に記載のシステム。
【請求項２５７】
前記第１のレジスタファイルは３２レジスタを有し、各レジスタは、３２ビットのデータフィールドおよび６ビットのタスク識別子フィールドを有し、さらに、前記第２のレジスタファイルおよび前記第３のレジスタファイルはそれぞれ３２レジスタを有する、請求項２５６に記載のシステム。
【請求項２５８】
前記現在のタスクの実行中に書き込みを実行するプロセッサをさらに含み、この書き込みは、
前記現在のタスク識別子を、前記第１のレジスタファイルにおけるタスク識別子と比較するステップと、
前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じであるとき、値を前記第１のレジスタファイルに書き込むステップと、
前記第１のレジスタファイルにおける内容がメモリに保存された後、前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じでないとき、値を前記第１のレジスタファイルに書き込むステップとによって実行される、請求項２５３に記載のシステム。
【請求項２５９】
前記第１のレジスタファイルにおける内容が、タスク識別子コンテキストテーブルに保存される、請求項２５８に記載のシステム。
【請求項２６０】
前記現在のタスクの実行中に読み取りを実行するプロセッサをさらに含み、この読み取りは、
前記現在のタスク識別子を、前記第１のレジスタファイルにおけるタスク識別子と比較するステップと、
前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じであるとき、値を前記第１のレジスタファイルから読み取るステップと、
前記現在のタスク識別子が、前記第１のレジスタファイルにおける前記タスク識別子と同じでないとき、値を前記第２のレジスタファイルから読み取るステップとによって実行される、請求項２５３に記載のシステム。
【請求項２６１】
前記第１のレジスタファイルの内容は、前記読み取りの結果として変更されない、請求項２６０に記載のシステム。
【請求項２６２】
前記タスクスイッチを実行する手段は、プレロードおよびバンプユニットを含む、請求項２５３に記載のシステム。
【請求項２６３】
前記プロセッサはＡＬＵである、請求項２５８に記載のシステム。
【請求項２６４】
前記プロセッサはＡＬＵである、請求項２６０に記載のシステム。
【請求項２６５】
セマフォを使用して、マルチタスキングプロセッサによって使用された共有リソースへのアクセスを制限する方法であって、
レジスタにおいて、指定されたタスクの実行を、前記指定されたタスクが占有されたセマフォへのアクセスを待機中であるために、防止する第１のビットマップを提供するステップと、
メモリにおいて、前記セマフォが占有されるかどうかを指示する指示を格納するステップと、
メモリにおいて、前記セマフォへのアクセスを待機中であるタスクを識別する第２のビットマップを格納するステップと、
前記セマフォに、前記メモリにおける指示をチェックすることに基づいてアクセスしようと試みるステップとを含む方法。
【請求項２６６】
前記メモリにおける指示をチェックするタスクは、前記セマフォが使用可能であることを決定し、さらに、前記セマフォが占有されていることを指示するように前記指示を設定するステップ、および、前記タスクのための処理を実行するステップを含む、請求項２６５に記載の方法。
【請求項２６７】
前記タスクのための処理を実行するステップはクリチカル域の実行を含む、請求項２６６に記載の方法。
【請求項２６８】
前記クリチカル域は、外部メモリアクセスおよびタスクスイッチの少なくとも１つを含む、請求項２６７に記載の方法。
【請求項２６９】
前記タスクのための処理を実行する前記ステップの後に前記セマフォが使用可能であることを指示するように、前記指示をリセットするステップをさらに含む、請求項２６６に記載の方法。
【請求項２７０】
前記セマフォへのアクセスを待機中であるタスクを識別する前記メモリ中の前記第２のビットマップにこのとき含まれているこれらのタスクを、前記第１のビットマップから除去し、それにより、これらのタスクを前記セマフォへのアクセスのためにスケジュールできるようにするステップをさらに含む、請求項２６９に記載の方法。
【請求項２７１】
前記メモリにおける指示をチェックするタスクは、前記セマフォが占有されていることを決定し、さらに、前記タスクを前記第２のビットマップに含めるステップ、および、前記第１のビットマップを訂正して前記第２のビットマップにおけるリストからの前記タスクを反映させるステップを含む、請求項２６５に記載の方法。
【請求項２７２】
前記指示が、前記セマフォが使用可能であることを反映するとき、前記タスクを前記第２のビットマップから除去するステップ、および、前記第１のビットマップを訂正して前記第２のビットマップにおけるリストからの前記タスクを反映させ、それにより、前記タスクが前記セマフォにアクセスして前記タスク処理を実行できるようにするステップをさらに含む、請求項２７１に記載の方法。
【請求項２７３】
セマフォを使用して、マルチタスキングプロセッサによって使用された共有リソースへのアクセスを制限するシステムであって、
レジスタにおいて、指定されたタスクの実行を、前記指定されたタスクが占有されたセマフォへのアクセスを待機中であるために、防止する第１のビットマップと、
メモリにおいて、前記セマフォが占有されるかどうかを指示する指示と、
メモリにおいて、前記セマフォへのアクセスを待機中であるタスクを識別する第２のビットマップと、
前記セマフォに、前記メモリにおける指示をチェックすることに基づいてアクセスしようと試みる手段とを含むシステム。
【請求項２７４】
前記試みる手段は、タスクを実行するプロセッサである、請求項２７３に記載のシステム。
【請求項２７５】
前記セマフォが使用可能であることを前記指示が反映するとき、前記タスクが前記セマフォにアクセスできるようにされる、請求項２７４に記載のシステム。
【請求項２７６】
前記セマフォが占有されることを前記指示が反映するとき、前記タスクはそれ自体を前記第２のビットマップに登録し、前記第１のビットマップを更新する、請求項２７４に記載のシステム。
【請求項２７７】
前記タスクの実行は、外部メモリアクセスおよびタスクスイッチングのうち少なくとも１つを含むクリチカル域を処理することを含む、請求項２７４に記載のシステム。
【請求項２７８】
前記メモリにおける指示は、前記クリチカル域を処理した後に前記セマフォが使用可能であることを指示するようにリセットされる、請求項２７７に記載のシステム。
【請求項２７９】
処理デバイスにおいてマシン命令を実行するための方法であって、
第１の命令を実行するステップと、
前記第１の命令の前記実行の帰結が第１の指定された条件を満たすかどうかを識別し、前記第１の命令が前記第１の指定された条件を満たすかどうかを反映する累積フラグ結果を設定するステップと、
少なくとも第２の追加の命令を実行するステップと、
前記第２の命令の前記実行の帰結が第２の指定された条件を満たすかどうかを識別し、前記第１の命令または前記第２の命令がそれらの各第１および第２の指定された条件を満たすかどうかに応じて、前記累積フラグを更新するステップと、
第３の命令を、前記第１および第２の命令の前記実行の後に続いて、前記累積フラグの値に基づいて実行するステップとを含む方法。
【請求項２８０】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である、請求項２７９に記載の方法。
【請求項２８１】
前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２７９に記載の方法。
【請求項２８２】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令であり、前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２７９に記載の方法。
【請求項２８３】
前記比較命令は、２つの各エラー状態が存在するかどうかを決定し、前記分岐命令はその分岐決定を、前記第２の比較命令が実行された後の前記累積フラグの値によって反映されるように、前記２つの各エラー状態のいずれかが存在するかどうかに基づかせる、請求項２８２に記載の方法。
【請求項２８４】
処理デバイスによって実行するためのプログラムコードを含むコンピュータ可読媒体であって、
第１のオペレーションを実行するための第１の命令であって、前記処理デバイスによって実行されるとき、第１の帰結の結果を生成する第１の命令と、
第２のオペレーションを実行するための少なくとも第２の追加の命令であって、前記処理デバイスによって実行されるとき、第２の帰結の結果を生成する第２の命令と、
第３のオペレーションを累積フラグに基づいて実行するための少なくとも追加の第３の命令とを含み、前記累積フラグは前記第１および第２の帰結の論理和を表す媒体。
【請求項２８５】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である、請求項２８４に記載の媒体。
【請求項２８６】
前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２８４に記載の媒体。
【請求項２８７】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令であり、前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２８４に記載の媒体。
【請求項２８８】
前記比較命令は、２つの各エラー状態が存在するかどうかを決定し、前記分岐命令はその分岐決定を、前記第２の比較命令が実行された後の前記累積フラグの値によって反映されるように、前記２つの各エラー状態のいずれかが存在するかどうかに基づかせる、請求項２８７に記載の媒体。
【請求項２８９】
マシン命令を実行するための装置であって、
累積フラグを格納するためのストレージと、
命令を実行するため、かつ、前記命令の帰結がそれぞれ規定された条件を満たすかどうかを判断するためのロジックと、
前記累積フラグを、前記命令の帰結を反映するように設定するためのロジックとを含み、前記累積フラグを設定するための前記ロジックは、前記累積フラグの値を少なくとも第１および第２の命令の論理和に基づいて決定するためのロジックを含み、
前記命令を実行するためのロジックもまた、少なくとも追加の第３の命令を、前記ストレージに格納された前記累積フラグの値に基づいて実行するためのロジックを含む装置。
【請求項２９０】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である、請求項２８９に記載の装置。
【請求項２９１】
前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２８９に記載の装置。
【請求項２９２】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令であり、前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２８９に記載の装置。
【請求項２９３】
前記比較命令は、２つの各エラー状態が存在するかどうかを決定し、前記分岐命令はその分岐決定を、前記第２の比較命令が実行された後の前記累積フラグの値によって反映されるように、前記２つの各エラー状態のいずれかが存在するかどうかに基づかせる、請求項２９２に記載の装置。
【請求項２９４】
マシン命令を実行するための装置であって、
累積フラグを格納するためのストレージと、
命令を実行するため、かつ、前記命令の帰結が各規定された条件を満たすかどうかを判断するためのロジックと、
前記累積フラグを、前記実行された命令の帰結に応じて設定するためのロジックであって、前記累積フラグを設定するための前記ロジックは、前記累積フラグの値を、少なくとも２つの命令のグループ内の少なくとも１つの命令が、その各規定された条件を満たした帰結を有したかどうかに基づいて決定するためのロジックを含むロジックと、
処理デバイスによって実行されるとき、第１の帰結の結果を生成する、第１のオペレーションを実行するための第１の命令を含む、複数の命令を含むプログラムを格納するためのもう１つのストレージと、
前記実行するためのロジックによって実行されるとき、第２の帰結の結果を生成する、第２のオペレーションを実行するための少なくとも第２の追加の命令と、
第３のオペレーションを累積フラグに基づいて実行するための少なくとも追加の第３の命令とを含む装置。
【請求項２９５】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である、請求項２９４に記載の装置。
【請求項２９６】
前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２９４に記載の装置。
【請求項２９７】
前記第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令であり、前記第３の命令は、その分岐決定を前記累積フラグの値に基づかせる分岐命令である、請求項２９４に記載の装置。
【請求項２９８】
前記比較命令は、２つの各エラー状態が存在するかどうかを決定し、前記分岐命令はその分岐決定を、前記第２の比較命令が実行された後の前記累積フラグの値によって反映されるように、前記２つの各エラー状態のいずれかが存在するかどうかに基づかせる、請求項２９７に記載の装置。
【請求項２９９】
少なくとも１つのリングネットワーク上で実装される通信プロセッサであって、
前記少なくとも１つのリングネットワーク上のリングメンバを含む、複数のプロセッサと、
少なくとも１つのリングネットワーク上の複数のＤＭＡコントローラであって、前記ＤＭＡコントローラは、前記複数のプロセッサによるＤＭＡ要求のサービスをコントロールする、複数のＤＭＡコントローラと、
前記複数のプロセッサに結合された複数のＤＭＡエージェントであって、各ＤＭＡエージェントは、プロセッサを含むリングメンバの一部である、複数のＤＭＡエージェントと、
使用可能なＤＭＡコントローラを反映するトークンのプールからの有効なトークンが存在するかどうかを判断することによって、プロセッサＤＭＡ要求にサービスするように適合された、各ＤＭＡエージェントとを含む通信プロセッサ。
【請求項３００】
前記トークンは、前記ＤＭＡコントローラによって前記ＤＭＡエージェントに発行された、いつ特定のＤＭＡコントローラアクセスが使用可能であるかを指示するための、ＤＭＡコントローラに特有のトークンである、請求項２９９に記載の通信プロセッサ。
【請求項３０１】
プロセッサがＤＭＡ要求を発行するたびに、関連付けられたＤＭＡエージェントは、有効なトークンが存在するかどうかを判断し、有効なトークンが存在する場合、そのトークンに関連付けられた前記ＤＭＡコントローラを使用してそのＤＭＡ要求にサービスする、請求項３００に記載の通信プロセッサ。
【請求項３０２】
前記トークンは、前記トークンがＤＭＡ要求にサービスするために使用されるとき、使用済または無効としてマークが付けられる、請求項３０１に記載の通信プロセッサ。
【請求項３０３】
関連付けられたＤＭＡエージェントは、既存の有効なトークンが前記ＤＭＡ要求にサービスするために使用された後、自動的に新しい有効なトークンを要求する、請求項３０１に記載の通信プロセッサ。
【請求項３０４】
各ＤＭＡエージェントは、前記プールにおける有効なトークンの数が最大数より下がるとき、追加の有効なトークンを要求するように適合される、請求項２９９に記載の通信プロセッサ。
【請求項３０５】
前記トークンのプールは、前記ＤＭＡコントローラによって書き込まれるレジスタに格納される、請求項２９９に記載の通信プロセッサ。
【請求項３０６】
前記ＤＭＡエージェントはプロセッサＤＭＡ要求に、それらを前記少なくとも１つのリングネットワーク上に伝送されたメッセージに変換することによって、サービスする、請求項２９９に記載の通信プロセッサ。
【請求項３０７】
有効なトークンが存在しない場合、前記ＤＭＡエージェントは前記ＤＭＡ要求を、有効なトークンが存在するようになるまでキューイングする、請求項３０１に記載の通信プロセッサ。
【請求項３０８】
前記ＤＭＡコントローラは有効なトークンを、前記リングネットワーク上で特定のＤＭＡエージェントによって受信されるメッセージを送信することによって、分配する、請求項２９９に記載の通信プロセッサ。
【請求項３０９】
各ＤＭＡコントローラは、有効なトークンとして分配されているこれらのトークンを含む、トークンのリストを維持する、請求項２９９に記載の通信プロセッサ。
【請求項３１０】
前記ＤＭＡコントローラは、有効なトークンが使用可能でないときに、前記ＤＭＡエージェントからの追加のトークンについての要求に、無効なトークンにより応答する、請求項２９９に記載の通信プロセッサ。
【請求項３１１】
各ＤＭＡコントローラは、各ＤＭＡチャネルにつき最大１６トークンのプールを有する、請求項２９９に記載の通信プロセッサ。
【請求項３１２】
前記ＤＭＡコントローラは、前記少なくとも１つのリングネットワーク上で移動する読み取りメッセージを発行することによって、前記ＤＭＡエージェントのための前記トークンのプールを有するレジスタを読み取ることができる、請求項２９９に記載の通信プロセッサ。
【請求項３１３】
前記プロセッサは複数のネットワークプロセッサを含み、前記少なくとも１つのリングネットワークは複数のリングネットワークを含む、請求項２９９に記載の通信プロセッサ。
【請求項３１４】
少なくとも１つのリングネットワーク上で実装される通信プロセッサであって、
前記少なくとも１つのリングネットワーク上のリングメンバを含む、複数のプロセッサと、
前記少なくとも１つのリングネットワーク上の複数のＤＭＡコントローラであって、前記ＤＭＡコントローラは、前記複数のプロセッサによるＤＭＡ要求のサービスをコントロールする、複数のＤＭＡコントローラと、
前記複数のプロセッサに結合された複数のＤＭＡエージェントであって、各ＤＭＡエージェントは、プロセッサを含むリングメンバの一部である、複数のＤＭＡエージェントと、
前記ＤＭＡエージェントによってＤＭＡコントローラに発行された各ＤＭＡ要求についてのインジケータを、前記ＤＭＡエージェントに結合された要求カウンタに発行するように適合された、各ＤＭＡエージェントとを含み、
それにより、各ＤＭＡエージェントが、前記ＤＭＡエージェントに関連付けられた前記プロセッサに代わって発行されている未解決のＤＭＡ要求のカウントを維持できるようにする、通信プロセッサ。
【請求項３１５】
前記要求カウンタは、前記プロセッサによって実行される各タスクについての別のカウントを維持する、請求項３１４に記載のシステム。
【請求項３１６】
ターゲットＤＭＡコントローラによる前記ＤＭＡ要求の履行において、前記ターゲットＤＭＡコントローラは、前記要求カウンタに前記カウントを１だけ減分させる応答を発行する、請求項３１４に記載のシステム。
【請求項３１７】
前記ＤＭＡエージェントによって前記ＤＭＡコントローラに発行された前記ＤＭＡ要求、および、前記ターゲットＤＭＡコントローラによって発行された前記応答は、前記少なくとも１つのリングネットワーク上でメッセージとして送信される、請求項３１６に記載のシステム。
【請求項３１８】
前記カウンタがゼロに戻ることにおいて、所与のタスクについてのすべてのＤＭＡ要求が履行されているために、前記プロセッサは他のタスクにスイッチできるようにされる、請求項３１６に記載のシステム。
【請求項３１９】
そこにおいて、異なるタスクのための新しいＤＭＡ要求が、前記カウンタが前記所与のタスクについてゼロに戻るようになるまで延期される、請求項３１８に記載のシステム。
【請求項３２０】
前記要求カウンタは、最大６４タスクをサポートするドアベルレジスタに含まれる、請求項３１３に記載のシステム。
【請求項３２１】
少なくとも１つのリングネットワーク上で実装されるマルチタスキング通信プロセッサにおけるＤＭＡコントローラへのアクセスをコントロールする方法であって、
ＤＭＡ要求をターゲットＤＭＡコントローラに発行するステップと、
ＤＭＡ要求のカウントをタスク毎のベースで維持するステップと、
ＤＭＡ要求が前記ターゲットＤＭＡコントローラによって履行されているという肯定応答を発行するステップと、
前記カウントを前記肯定応答に基づいて減らすステップと、
前記カウントがゼロに戻っているとき、前記ＤＭＡ要求を発行することを担うプロセッサが、新しい活動を実行できるようにするステップとを含む方法。
【請求項３２２】
前記ＤＭＡ要求は、前記少なくとも１つのリングネットワーク上でメッセージとして発行される、請求項３２１に記載の方法。
【請求項３２３】
前記肯定応答は、前記少なくとも１つのリングネットワーク上でメッセージとして発行される、請求項３２１に記載の方法。
【請求項３２４】
通信プロセッサにおいてデータ構造アドレスコマンドのためのアドレス計算を実行するための方法であって、
リングベースのアーキテクチャにおいて、ネットワークプロセッサのための読み取りコマンドおよび書き込みコマンドのライブラリを提供するステップと、
オプションビットを前記読み取りコマンドおよび書き込みコマンドに、アドレス計算修正モードのために含めるステップと、
前記ネットワークプロセッサによって発行されたアドレスを含む要求に応答して、読み取り要求および書き込み要求をＤＭＡコントローラに転送するためのエージェントモジュールを提供するステップと、
前記読み取り要求および書き込み要求を前記ＤＭＡコントローラに転送する前に、前記オプションビットが設定されるとき、前記アドレスの値を修正するステップとを含む方法。
【請求項３２５】
アドレスの値を修正するステップは、ベースアドレス、オフセット、およびアドレス変更子を使用して宛先アドレスを自動的に計算するステップを含む、請求項３２４に記載の方法。
【請求項３２６】
アドレスの値を修正するステップにより、単一の読み取りコマンドまたは書き込みコマンドを使用して前記宛先アドレスの計算を可能にする、請求項３２４に記載の方法。
【請求項３２７】
前記方法は、外部データ構造への繰り返されるアクセスを、前記宛先アドレスを全体としてそのつど再計算することなく可能にする、請求項３２５に記載の方法。
【請求項３２８】
チップ上で実装された通信プロセッサであって、
ＡＴＭ、フレームリレー、イーサネットおよびＩＰを含む複数のプロトコルを処理するための手段を含むネットワークプロセッサであって、前記手段は、追加のプロトコルを処理するためのライブラリコマンドのセットを使用してプログラマブルである、ネットワークプロセッサと、
前記ネットワークプロセッサをコントロールするためのプロトコルプロセッサとを含み、
前記プロトコルプロセッサはコントロールプレーン処理を実行し、前記ネットワークプロセッサはデータプレーン処理を実行し、
前記ネットワークプロセッサおよび前記プロトコルプロセッサは少なくとも１つのリングネットワーク上のリングメンバであり、複数の他のリングメンバを前記少なくとも１つのリングネットワーク上でさらに含む、通信プロセッサ。
【請求項３２９】
前記ネットワークプロセッサは、前記リングネットワークへの単一のリングインターフェイスを共有する複数のコンパウンドを含む、請求項３２８に記載の通信プロセッサ。
【請求項３３０】
前記通信プロセッサはＰＨＹ中立である、請求項３２８に記載の通信プロセッサ。
【請求項３３１】
前記少なくとも１つのリングネットワークは、プロトコルプロセッサのリングネットワークおよびネットワークプロセッサのリングネットワークを含む、多数のリングネットワークを含む、請求項３２８に記載の通信プロセッサ。
【請求項３３２】
前記ネットワークプロセッサのリングネットワークは、パケットを送信するための第１のネットワークプロセッサ、およびパケットを受信するための第２のネットワークプロセッサを含む、請求項３３１に記載の通信プロセッサ。
【請求項３３３】
前記ネットワークプロセッサは、現在のタスクのためのアクティブレジスタ、および次のタスクをプレロードするためのシャドウレジスタを使用する、超高速タスクスイッチングを含む、請求項３２８に記載の通信プロセッサ。
【請求項３３４】
外部メモリへのアクセスのための多数のＤＭＡコントローラをさらに含む、請求項３２８に記載の通信プロセッサ。
【請求項３３５】
前記プロトコルプロセッサは、シグナリングプロトコル、プロトコル管理、例外ハンドリング、ならびに、システム構成およびコントロールを実行するように適合される、請求項３２８に記載の通信プロセッサ。
【請求項３３６】
前記ネットワークプロセッサは、パケット毎の処理、パケット転送、パケット分類、サービス品質ハンドリング、および、パケット再フォーマッティングを実行するように適合される、請求項３２８に記載の通信プロセッサ。
【請求項３３７】
コントロールパスプロトコルのサポートが前記プロトコルプロセッサによって提供され、データパスプロトコルのサポートが前記ネットワークプロセッサによって提供される、請求項３２８に記載の通信プロセッサ。
【請求項３３８】
前記ネットワークプロセッサは、ゼロオーバーヘッドのタスクスイッチングを実行する、請求項３２８に記載の通信プロセッサ。
【請求項３３９】
前記ネットワークプロセッサは、並列エンジンとして動作するコンパウンドモジュールを含む、請求項３２８に記載の通信プロセッサ。
【請求項３４０】
前記通信プロセッサは、エンタープライズ統合アクセスデバイス（ＥＩＡＤ）を提供するように実装される、請求項３２８に記載の通信プロセッサ。
【請求項３４１】
前記通信プロセッサは、マルチテナントユニット（ＭＴＵ）またはリモート端末ユニット（ＲＴＵ）を提供するように実装される、請求項３２８に記載の通信プロセッサ。
【請求項３４２】
前記通信プロセッサは、メディアゲートウェイを提供するように実装される、請求項３２８に記載の通信プロセッサ。
【請求項３４３】
前記通信プロセッサは、音声ゲートウェイを提供するように実装される、請求項３２８に記載の通信プロセッサ。
【請求項３４４】
リングベースのシステムオンチップであって、
リング上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、
前記リングをメンバからメンバへトラバースするメッセージと、
前記メッセージが所与のリングメンバに到着することにおいて、前記メッセージがそのリングメンバに適用可能である場合、前記メッセージがそのリングメンバによって処理され、前記メッセージがそのリングメンバに適用可能でない場合、前記メッセージが次のリングメンバに渡されるように適合される前記システムとを含み、
前記メッセージは、前記メッセージがすでに前記リングメンバの１つを通過しているかどうかを指示する情報を含むシステム。
【請求項３４５】
前記情報は、浮遊メッセージを識別するために使用される、請求項３４４に記載のシステム。
【請求項３４６】
浮遊メッセージは、前記リング上の前記メンバのいずれにも対応しないアドレスを有するメッセージである、請求項３４５に記載のシステム。
【請求項３４７】
前記システムは、前記メッセージがすでに前記リングメンバの１つを通過していることを指示する情報に、前記メッセージを廃棄することによって応答するように適合される、請求項３４４に記載のシステム。
【請求項３４８】
第２のリング上の第２の複数のリングメンバと、
前記２つのリングを接続するブリッジとをさらに含み、
前記ブリッジは、いつ前記メッセージがすでに前記ブリッジを通過したかを識別するためのロジックを含む、請求項３４４に記載のシステム。
【請求項３４９】
前記リングメンバの１つはアンカーであり、前記アンカーは、いつ前記メッセージがすでに前記アンカーを通過したかを識別するためのロジックを含む、請求項３４４に記載のシステム。
【請求項３５０】
前記情報は、前記メッセージ内に含まれたビットであり、これは、前記メッセージが、前記１つのリングメンバを以前に通過しているか、以前に通過していないかを指示するように設定される、請求項３４４に記載のシステム。
【請求項３５１】
リングベースのシステムにおいて浮遊メッセージを検出する方法であって、
複数のメンバを有するリング上のリングメンバをメッセージが通過しているかどうかを示す情報を含む、前記メッセージを提供するステップと、
前記メッセージが前記リングメンバを一度目に通過するとき、前記情報を修正するステップと、
前記メッセージが前記リングメンバに二度目に到着するとき、前記メッセージは浮遊メッセージであると決定するステップとを含む方法。
【請求項３５２】
前記決定するステップに応答して、前記メッセージを除去するステップをさらに含む、請求項３５１に記載の方法。
【請求項３５３】
前記情報は前記メッセージにおける少なくとも１つのビットである、請求項３５１に記載の方法。
【請求項３５４】
前記修正するステップは、前記少なくとも１つのビットを設定するステップを含む、請求項３５３に記載の方法。
【請求項３５５】
前記決定するステップは、前記リング上のブリッジまたはアンカーによって実行される、請求項３５１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にデータ通信ネットワークに関し、より詳細には、ＡＴＭおよび他のタイプの通信プラットフォームを含み、通信プロセッサ、パケットプロセッサ、ネットワークプロセッサ、ＤＭＡ、ＦＰＧＡおよび他のデバイス、ならびに周辺デバイスなどのコンポーネントを含む、受信および送信システムに関する。
【背景技術】
【０００２】
コンピュータのビジネスユーザおよび個人的なホームユーザの数は急速に増え続けており、これらのユーザは通常、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、イントラネット、エクストラネット、直接加入者回線（ＤＳＬ）ネットワークなどに接続されている。このようなユーザからの、このようなネットワークを介したますます増えるデータ量についての要求が増すと共に、帯域幅およびデータの処理およびハンドリングの速度は、この莫大なユーザの視聴者へのサービスおよび機器プロバイダにとって絶えず存在する懸念である。ハブ、ルータ、モデムおよびスイッチは、多数のユーザがネットワークにアクセスするための相互接続性を提供するための優勢なメカニズムとなっている。高価なＶＬＳＩ（超大規模集積）回路で構成されるスイッチがしばしば、ネットワークを構築するために使用される。このような回路の実装費用によって与えられる欠点に加えて、クロック同期は引き続き交換網における懸念である。
【０００３】
デジタル時代の拡散により、多数のタイプの情報を高速で異なるネットワーク環境に渡って効率的に伝送することができる、多用途ネットワーキング技術についての著しい要求が生じている。１つのますます普及しているプラットフォームは非同期転送モードであり、これは一般にＡＴＭと呼ばれ、国際電信電話諮問委員会（ＣＣＩＴＴ）およびその後継組織である国際電気通信連合の電気通信標準化部門（ＩＴＵ−Ｔ）によって開発された。ＡＴＭは、音声、ビデオおよび他のタイプのデータを、公衆網およびプライベートネットワークを介して高速転送することができる技術である。幅広く実装されているが、ＡＴＭは単に、ネットワークを介した通信およびデータのハンドリングに使用される多数のプラットフォームの一例である。
【０００４】
ＡＴＭは、超大規模集積回路（ＶＬＳＩ）技術を利用してデータを個々のパケット（セルとも呼ばれる）に区分化する。たとえば、Ｂ−ＩＳＤＮは、５３バイト（すなわち、オクテット）の固定サイズを有するパケットを必要とする。例示のため、Ｂ−ＩＳＤＮの５３バイトパケットを使用すると、各ＡＴＭセルは、最初の５バイトを含むヘッダ部、および、残りの４８バイトを含むペイロード部を含む。ＡＴＭセルは、ＡＴＭスイッチを通過することによって様々なネットワークを介してルーティングされ、ＡＴＭスイッチはセルヘッダに含まれたアドレス指定情報を読み取り、その中で参照された宛先にセルを送達する。他のタイプのネットワークプロトコルとは異なり、ＡＴＭは、各セルの識別を確立するために時分割多重化（ＴＤＭ）に依拠しない。むしろ、ＡＴＭセルは、セルヘッダ内に含まれた情報のみに基づいて識別される。
【０００５】
さらに、ＡＴＭは、イーサネット（登録商標）またはトークンリングなど、従来のネットワークアーキテクチャに基づくシステムとは異なり、データパケットを共用線ですべてのネットワークメンバが受信するためにブロードキャストするのではなく、ＡＴＭセルが、セルヘッダ内に含まれた情報を通じてセルの後続の受信者を指図する。ネットワークを通じたある特定のルーティングパスは仮想パス（ＶＰ）または仮想回線（ＶＣ）と呼ばれ、いかなるデータが送信される前にも２つの末端ノードの間でセットアップされる。特定の仮想回線により識別されたセルは、その仮想回線上のノードにのみ送達される。この方法では、セルヘッダ内で識別された宛先のみが、送信セルを受信する。
【０００６】
セルヘッダには、他の情報の中にアドレス指定情報が含まれ、これは本質的に、セルのソース即ちセルが来る元の所、およびその割り当てられた宛先を記述する。ＡＴＭはＴＤＭの概念から発展したが、多数のソースからのセルは統計的に単一の伝送設備に多重化される。セルは、多重化されたストリーム内のそれらの時間位置によってではなく、それらのヘッダの内容によって識別される。単一のＡＴＭ伝送設備は、多数のソースから発して多数の宛先へ移動する毎秒数十万ものＡＴＭセルを搬送することができる。
【０００７】
ＡＴＭネットワークのバックボーンは一般に、高速ＡＴＭセルストリームをハンドリングすることができるスイッチングデバイスからなる。これらのデバイスのスイッチングコンポーネントは一般にスイッチファブリックと呼ばれ、仮想回線を実装するために必要とされるスイッチング機能を実行し、これは、ＡＴＭセルを入力ポートから受信し、入ってくるセルのヘッダ内の情報をリアルタイムで解析し、これらのセルを適切な宛先ポートにルーティングすることによって行なう。毎分何百万ものセルをしばしば単一のデバイスによってスイッチングする必要がある。
【０００８】
この接続指向の方式により、ＡＴＭネットワークは、各接続によって必要とされる最低量の帯域幅を保証することができる。このような保証は、接続がセットアップされるときに行なわれる。接続が要求されるとき、既存の接続の解析が実行されて、ネットワーク内に、新しい接続をその要求された容量でサービスするために十分な合計帯域幅が残っているかどうかが判断される。必要な帯域幅が使用可能でない場合、接続が拒否される。
【０００９】
従来のＡＴＭスイッチングシステムの設計は、どのオペレーションがハードウェアで実行されるべきであるかと、どれがソフトウェアで実行されるべきであるかの間の妥協を含む。一般には、例外がないわけではないが、ハードウェアは最適なパフォーマンスを与えるが柔軟性を低減し、ソフトウェアはより大きい柔軟性およびコントロールをスケジューリングおよびバッファリング上で可能にし、より高度なセル処理（たとえば、ＯＡＭセル抽出など）を有することを実用的にする。
【００１０】
ＡＴＭ、イーサネット（登録商標）および他のものなど、プラットフォームに関連付けられた様々なプロトコルは別個のものであり、特殊なハンドリングを必要とし、これは本質的にユーザに透過的である。プロトコル処理および汎用通信およびデータ処理をハンドリングするために必要なハードウェアおよびソフトウェアをパッケージングするための１つの手法は「システムオンチップ」（ＳＯＣ）であり、通常は、しばしば特定のタスクに専用で、共に動作するいくつかのモジュールで構成される。いくつかのこれらのモジュールは通常、イーサネット（登録商標）またはユートピア（Ｕｔｏｐｉａ）など、外部環境へのインターフェイスである。他のモジュールはプロセッサまたはメモリを含むことができる。例示のため、図１は、通信プロセッサなど、典型的なＳＯＣ１０を示し、これはＣＰＵ１４、２２、ＲＡＭ１６、イーサネット（登録商標）インターフェイス１８、入出力インターフェイス２０、およびＤＭＡ２４など、様々なモジュールを有し、これらがスイッチファブリック１２を介して相互接続される。
【００１１】
システム設計者が現在直面している課題は、モジュールを結合力のあるシステムに統合することである。通常の手法は、バスを定義し、モジュールをバス上で接続し、バスを介して複数のモジュールの間で信号を流し、ブリッジを追加してバスを接続することなどである。ＳＯＣの設計に対する他の課題にはとりわけ、異種周辺デバイス、いくつかのアクティブモジュール（ＣＰＵ、ＤＭＡ）、パフォーマンスのボトルネック、接続性およびバスのパフォーマンス編成、顧客の現実がプロジェクトの寿命に渡って変化すること、モジュール内およびモジュール間の設計検証のボトルネック、およびアプリケーション検証が含まれる。明示したように、これらの課題の結果として、相当な数のメカニズムをＳＯＣの設計中にデバッグする必要があることになる。
【００１２】
従来のバス指向の手法は広く利用されているが、このような手法は通常、以下の問題を有する。すなわち、タイミングおよびロジックについてデバッグするためのいくつかのインターフェイス、通常は設計の初期で行なう必要のあるアーキテクチャの判断、バスがしばしば予測不可能なタイミングおよびローディングを生じること、周辺デバイスの追加またはＣＰＵの削除のようないずれかの変更がシステムの相当な継ぎ当てを必要とすることなどである。
【００１３】
通信プロセッサは、従来のバス手法を使用して一般に設計された通信システムの一例である。ロバストなＳＯＣ通信プロセッサは、モデム、ブリッジ、ルータ、ゲートウェイ、マルチサービスゲートウェイおよびアクセス機器など、無数のアプリケーションを発見することができる。このような通信プロセッサはＰＨＹ［物理層］独立にすることができ、この場合、このような通信プロセッサは適切なＰＨＹ製品に結合され、あるいはこれをＰＨＹ統合によるものにすることができ、これはＡＴＭ（またはＯＳＩ［開放型システム間相互接続］）階層プロトコルモデルのＰＨＹ層への接続性を提供するためである。このようなＳＯＣ通信プロセッサが、サポートすることができるアプリケーションに関してロバストにされる場合、ＡＴＭ、ＦＲ（フレームリレー）、ＩＰ（インターネットプロトコル）、ＴＤＭなど、幅広い種類の異なるプロトコルを処理できなければならないことは、容易に理解されよう。したがって、このようなＳＯＣ通信プロセッサでは、幅広いプロトコルのものである可能性がある情報のパケットを処理するためのパケットプロセッサを実装することができる。
【００１４】
パケットプロセッサによって実行されるパケットまたはセルの処理には、以下のタスクが含まれる可能性がある。すなわち、パケットヘッダ解析（ＯＳＩレイヤ２、レイヤ３）と、フレームの妥当性−ＣＲＣ（巡回冗長検査）チェックと、転送判断−ルックアップ、ヘッダ修正／変換、区分化および再組み立てと、データ変換（たとえば、暗号化）と、統計量収集などである。実際に、帯域幅要件が上がり、パケット処理のための「回線速度」の要求が存在するので、パケットプロセッサを最適化して、パケット処理特有のタスクを解決しなければならない。今日存在するパケット処理のための提案されている解決策は、「ハードワイヤード」ＡＳＩＣ（特定用途向け集積回路）（通常は柔軟性がない）から、プログラマブルなパケットプロセッサ（より柔軟性がある）までの範囲に及ぶ。
【００１５】
過去数年間で、通信システムのためのプログラマブルなパケットプロセッサの必要性が存在している。プログラマブルな解決策の主な利点には、急速に変化する通信規格に合わせた柔軟性のある調整、ＡＳＩＣにおける実装が困難なますます複雑になる通信の実装、差別化および「製品化に要する時間」（ＴＴＭ）を今日の競争的な環境における重大な面として見なすことが含まれる可能性がある。
【００１６】
システムベンダの有利な立場からは、プログラマブルなパケットプロセッサは一般に、ＡＳＩＣ解決策に勝る利点を有する。プログラマブルなパケットプロセッサを、高速に配備され（ＴＴＭを考慮して）、次いで後にコードをパケットプロセッサに変更／追加することによってシステム機能性を追加／修正することができる、「プラットフォーム」として見なすことができる。システムベンダが非常に高い末端の解決策（たとえば、コアレートＯＣ［光搬送波］−４８、ＯＣ−１９２）で有するであろうトレードオフは、固定のＡＳＩＣ解決策と比較して、プログラマブルなパケットプロセッサにおけるパワーおよびパフォーマンスとなる。しかし、いくつかの会社は、このようなコアレートのためのプログラマブルな解決策を発表しており、「プログラマブルな解決策」がベンダによってこのようなコアレート製品のために必要とされることを示している。
【００１７】
プログラマブルなパケットプロセッサ（「ネットワークプロセッサ」とも呼ばれる）は、予測された総計の帯域幅がＯＣ−３からＯＣ−１２の範囲であるアクセス空間における解決策を提供することが好ましい。言うまでもなく、アクセス市場要件はネットワークエッジ、およびコアとは異なる。アクセスポイントで、システムは多くの加入者（ポート）、低速リンク（Ｔ１、ｘＤＳＬ［ｘデジタル加入者回線］）、および異なるアクセス方法（ＡＴＭ、ＩＰ、ＦＲ、ＴＤＭなど）に対処する必要があるのに対して、ネットワークのエッジおよびコアは一般に１つのフレーミング解決策（ＭＰＬＳ、ＩＰまたはＡＴＭ）を使用する。アクセスシステムはこの場合、通常は以下によって特徴付けられる。すなわち、多数の加入者（ポート、フロー）と、高密度と、音声（ＴＤＭ）からパケット（ＡＴＭまたはＩＰ）へ（たとえば、音声ゲートウェイ）、ＭＡＮ（メトロポリタンエリアネットワーク）からＷＡＮ（広域ネットワーク）へ、イーサネット（登録商標）からＡＴＭまたはＰｏＳ［パケットオーバーＳＯＮＥＴ］へなどのインターワーキング機能（ＩＷＦ）のための要件と、非対称な挙動の大きいパイプから多数の小さいパイプへのデータ調整などである。したがって、アクセスシステムは多数のパケット操作を、特に媒体変換およびＩＷＦにおいて必要とする。したがって、プログラマブルな（かつ、したがって柔軟性のある）パケットプロセッサはしばしば好ましい解決策である。
【００１８】
このようなプログラマブルなパケットプロセッサを、標準の汎用マイクロプロセッサコアを使用して開発することができる。いくつかのプロセッサコアは市販されており、これには、Ａｄｖａｎｃｅｄ  ＲＩＳＣ  Ｍａｃｈｉｎｅｓ，Ｌｔｄ．、ＡＲＣ  Ｉｎｔｅｒｎａｔｉｏｎａｌ、ＭＩＰＳ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．およびＬｅｘｒａ，Ｉｎｃ．によってライセンスを供与されたものが含まれる。しかし、上記のコアは汎用コアであり、パケット処理に合わせて最適化することが必要となる。このような最適化には通常、追加の命令、ＤＭＡサポート、低オーバーヘッドによるタスクスイッチ、特定のビット操作命令などが含まれる。このような汎用コアをパケット処理アプリケーションで使用する短所には、ライセンス料およびロイヤルティから受けるコスト、制限されたカスタマイズ−コアを修正するために通常はライセンス料が必要とされること、コアプロバイダのロードマップおよびテクニカルサポートへの依存が生じること、ＦＰＵ（浮動小数点）、ＭＭＵ（メモリ管理ユニット）などの過度な機能が含まれる。
【００１９】
したがって、様々なハイエンドアプリケーションをサポートすることができ、様々なプロトコルをハンドリングすることができ、スピードおよびパワーに関して所望のパフォーマンスを提供する、非常にロバストなプログラマブルなパケットプロセッサの必要性がある。
【００２０】
また、このようなプログラマブルなパケットプロセッサをそのコアネットワークプロセッサとして実装し、メモリ、ＤＭＡ、および外部ＰＨＹプラットフォームへのインターフェイスなど、他の有用なモジュールを実装して、高パフォーマンス通信プロセッサを無数のハイエンド通信アプリケーションのためのＳＯＣ解決策として有益に実装できるようにする、高パフォーマンス通信プロセッサも必要とされている。
【発明の開示】
【発明が解決しようとする課題】
【００２１】
本発明は、従来のシステムに勝るいくつかの利点を提供することによって、上に示した問題を克服し、追加の利点を実現する。
【課題を解決するための手段】
【００２２】
以下の説明では、いくつかの具体的な実施形態および詳細を提供することによって、発明の態様の十分な理解を伝えることを意図し、これらの具体的な実施形態および詳細にはとりわけ、通信およびデータハンドリングシステムのためのリングアーキテクチャ、リングトポロジを自動的に構成するための列挙（Ｅｎｕｍｅｒａｔｉｏｎ）プロセス、ブリッジを通じたメッセージの自動ルーティング、例外メッセージの自動ルーティング、リングトポロジを外部デバイスに拡張し、柔軟性のある再構成可能なシステムを提供すること、戻りアドレスを読み取ること、効率を促進するための先書き（ｗｒｉｔｅ−ａｈｅａｄ）機能性、リセットまで待機（ｗａｉｔ−ｔｉｌｌ−ｒｅｓｅｔ）オペレーション再開、リングトポロジ中のインビボスキャン（ｉｎ−ｖｉｖｏ−ｓｃａｎ）、時差的クロッキング配列、ならびに、浮遊メッセージ検出および根絶が含まれる。
【００２３】
以下で論じる実施形態および詳細を通じて伝える他の発明の要素にはとりわけ、フレキシブル・パケット・プロセッサのアーキテクチャの概要、フレキシブル・パケット・プロセッサのためのプログラミングモデル、フレキシブル・パケット・プロセッサのための命令パイプライン、フレキシブル・パケット・プロセッサにより使用される内部メモリ、フレキシブル・パケット・プロセッサをリングベースのアーキテクチャ上のモジュールとして使用すること、ならびに、フレキシブル・パケット・プロセッサのコアおよびパケットプロセッサ上の関連コンパウンド（エージェントおよび非エージェント）が含まれる。
【００２４】
以下で論じる実施形態および詳細を通じて伝える追加の発明の要素にはとりわけ、通信プロセッサのアーキテクチャの概要、通信プロセッサのためのプログラミングモデル、通信プロセッサのためのデータパスプロトコルのサポートモデル、通信プロセッサのためのコアパケットプロセッサとして使用される例示的ネットワークプロセッサ、通信プロセッサで使用される例示的リングベースのＳＯＣ相互接続ファブリックのアーキテクチャ、通信プロセッサで実装した様々なサポート品質（ＱＯＳ）機能、通信プロセッサの一連の有益なアプリケーション、通信プロセッサを強力にするために実装することができるソフトウェアのための様々な手法、高パフォーマンス通信プロセッサにおけるソフトウェアのための具体的な例示的方法、および、ＲＦＣ１４８３ブリッジングのためのパフォーマンス推定値が含まれる。
【００２５】
以下の本発明の詳細な説明を添付の図面と共に読むことによって、本発明をより完全に理解することができる。
【発明を実施するための最良の形態】
【００２６】
以下の説明では、いくつかの具体的な実施形態および詳細を提供することによって、発明の態様の十分な理解を伝えることを意図し、これらの具体的な実施形態および詳細にはとりわけ、通信およびデータハンドリングシステムのためのリングアーキテクチャ、リングトポロジを自動的に構成するための列挙プロセス、ブリッジを通じたメッセージの自動ルーティング、例外メッセージの自動ルーティング、リングトポロジを外部デバイスに拡張し、柔軟性のある再構成可能なシステムを提供すること、戻りアドレスを読み取ること、効率を促進するための先書き機能性、リセットまで待機オペレーション再開、リングトポロジ中のインビボスキャン、時差的クロッキング配列、ならびに、浮遊メッセージ検出および根絶が含まれる。
【００２７】
以下で論じる実施形態および詳細を通じて伝える他の発明の要素にはとりわけ、フレキシブル・パケット・プロセッサのアーキテクチャの概要、フレキシブル・パケット・プロセッサのためのプログラミングモデル、フレキシブル・パケット・プロセッサのための命令パイプライン、フレキシブル・パケット・プロセッサにより使用される内部メモリ、フレキシブル・パケット・プロセッサをリングベースのアーキテクチャ上のモジュールとして使用すること、ならびに、フレキシブル・パケット・プロセッサのコアおよびパケットプロセッサ上の関連コンパウンド（エージェントおよび非エージェント）が含まれる。
【００２８】
以下で論じる実施形態および詳細を通じて伝える追加の発明の要素にはとりわけ、通信プロセッサのアーキテクチャの概要、通信プロセッサのためのプログラミングモデル、通信プロセッサのためのデータパスプロトコルのサポートモデル、通信プロセッサのためのコアパケットプロセッサとして使用される例示的ネットワークプロセッサ、通信プロセッサで使用される例示的リングベースのＳＯＣ相互接続ファブリックのアーキテクチャ、通信プロセッサで実装した様々なサポート品質（ＱＯＳ）機能、通信プロセッサの一連の有益なアプリケーション、通信プロセッサを強力にするために実装することができるソフトウェアのための様々な手法、高パフォーマンス通信プロセッサにおけるソフトウェアのための具体的な例示的方法、および、ＲＦＣ１４８３ブリッジングのためのパフォーマンス推定値が含まれる。
【００２９】
しかし、本発明は具体的な実施形態および詳細に限定されず、これらは例示的でしかないことを理解されたい。さらに、当業者は、知られているシステムおよび方法に照らして、その所期の目的のための本発明の使用、および、特定の設計および他のニーズに応じたいかなる数もの代替実施形態における利点を理解するであろうことを理解されたい。
【００３０】
いくつかの頭字語が、本発明の様々な実施形態を説明するために本明細書で使用される。したがって、頭字語および定義の表を以下の表１として提供する。
【００３１】
【表１−１】
2005516432.tif 000003
【００３２】
【表１−２】
2005516432.tif 000004
【００３３】
【表１−３】
2005516432.tif 000005
【００３４】
【表１−４】
2005516432.tif 000006
【００３５】
本発明の１つの発明の態様は、システムオンチップ（ＳＯＣ）を構築するためのリングアーキテクチャを提供し、それにより容易な構成、拡張可能性および外部インターフェイスを可能にすることである。リングアーキテクチャは、一実施形態では、（１）信号の代わりにトランザクションを使用すること、および（２）単一のスイッチファブリックを使用して、通常はバスベースのシステムにおいて実装される多数の接続の代わりにトランザクションを搬送することを含む。トランザクションは、少なくとも１つの実施形態では、構造化された方法で、あるオペレーションを実行するように別のモジュールに指図するための、あるモジュールによって生成された命令を含む。トランザクションは単一の物理接続上にマップされる。トランザクションはモジュールに、たとえば、「モードフリップフロップを１に設定」、または「レジスタＸをクリア」または「値ＹをカウンタＺに追加」を設定するように指図することができる。また、トランザクションを使用して、時間系列を提供することもできる。さらに、２つのトランザクションが同時に発生することを防止し、同時エラー（すなわち、バグ）の出現を制限することができる。
【００３６】
本発明の一実施形態では、リングベースのシステムオンチップ（ＳＯＣ）が提供される。このリングベースのＳＯＣは、リング上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングメンバをリングとインターフェイスさせるための複数のリングインターフェイスと、リングをトラバースするメッセージとを含み、メッセージは１クロックサイクルにつき１リングメンバを移動する。この実施形態では、システムは、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合される。さらに、後続のリングメンバを、バックプレッシャー信号を前のリングメンバに供給するように適合させることができる。
【００３７】
一実施形態では、メッセージが所与のリングメンバに、そのリングメンバを識別する識別子、および、そのメッセージが多数のリングメンバに適用されることを示す識別子のうち、少なくとも１つに基づいて適用可能である。所与のリングメンバを識別する識別子は、所与のリングメンバのためのアドレスを含むことができる。さらに、メッセージが多数のリングメンバに適用されることを示す識別子は、一実施態様では、メッセージを管理メッセージとして指定するメッセージデータを含むことができる。
【００３８】
メッセージはタイプフィールド、アドレスフィールドおよびデータフィールドを含むことができる。メッセージはまた列挙メッセージをも含むことができ、列挙メッセージはリングメンバによって、各リングメンバによって消費されるアドレス空間を割り当てるために処理される。加えて、後続の管理メッセージが列挙メッセージの結果を戻させて、それにより、ＣＰＵを含む中央メンバがシステムのトポロジを推断できるようにすることができる。別法として、メッセージはリセットメッセージを含むことができ、これが複数のリングメンバによって、システムをリセットするために処理される。逆に、メッセージは起動メッセージを含むことができ、これが複数のリングメンバによって、システムを起動するために処理される。
【００３９】
メッセージはまた、ＣＰＵリングメンバからの要求をも含むことができ、これにより他のリングメンバにそれらのアドレス情報をレポートさせる。メッセージはまた、複数のリングメンバのうち１つによって処理されてデータがそこに書き込まれる書き込みメッセージ、複数のリングメンバのうち１つによって処理されてデータがそこから読み取られる読み取りメッセージ、および／または、システムが浮遊メッセージを識別できるようにする浮遊メッセージインジケータを含むこともできる。
【００４０】
一実施形態では、リングベースのＳＯＣのリングメンバはＣＰＵおよび複数の周辺デバイスを含み、周辺デバイスは、周辺デバイスのステータスにおける変化を先書きするように適合され、それによりＣＰＵによって発行される読み取りメッセージの量が減らされる。ＳＯＣのリングはまた、リングの一部ではないモジュールとリングが通信できるようにする外部リングインターフェイスをも含むことができる。
【００４１】
一実施形態では、リングベースのＳＯＣは、メッセージが中間リングメンバのいくつかをトラバースすることなく、リングの一方の側からリングの他方の側に進行できるようにする、ランドブリッジをさらに含む。ランドブリッジのロジックを、列挙メッセージの結果に基づいて構成することができる。
【００４２】
加えて、リングベースのＳＯＣの複数のリングメンバおよび複数のリングインターフェイスは第１のリングを含むことができ、ＳＯＣはさらに、第２のリングを定義する複数の第２のリングメンバおよび複数の第２のリングインターフェイスを含み、第１のリングおよび第２のリングはシステムオンチップとして実装され、第１のリングおよび第２のリングはシーブリッジを使用して結合される。一実施態様では、シーブリッジのロジックは、列挙メッセージの結果に基づいて構成される。
【００４３】
図２を参照して、本発明の少なくとも１つの実施形態による例示的リングネットワーク３０を例示する。例示のように、例示的リングネットワーク３０は、ブリッジ３６を介して接続された２つのリング３２、３４を含み、各リングは複数のモジュール３８〜４８を含む。モジュールは、ＳＯＣにおいてデータを処理および／またはハンドリングするために実装された様々なモジュールのいずれかを含むことができ、これらは、ＤＭＡ、外部インターフェイス、タイマ、ＣＰＵ、Ｉ／Ｏ、周辺デバイスなどである。この場合、リング３２、３４およびブリッジ３６は、本発明の少なくとも１つの実施形態による、図１のスイッチファブリック１２の実装を表す。リングネットワーク３０のリングのオペレーションを要約するため、以下のリング３２の例示的オペレーションを考察する。この実施例では、メッセージが複数のモジュールの間で反時計回りに渡される。モジュールがメッセージを受信するとき、そのモジュールは、モジュールがそのメッセージの指定受信者であるかどうかを判断する。そのモジュールが受信者である場合、モジュールはメッセージをリングから除去し、それに応じてメッセージを処理する。そうでない場合、モジュールは、次のクロックサイクル中にメッセージを次のモジュールに渡す（たとえば、モジュール４４からモジュール４６へ）。モジュールが送信するべきメッセージを有する場合、モジュールは、空きスロットが存在するようになるまで待機し、メッセージをモジュールの左隣に渡す。この場合、各メッセージは１クロック長であり、メッセージはリング３２の周囲を、１クロックにつき１ホップ移動する。
【００４４】
リングのメンバ
アンカー−ホストインターフェイスである。このインターフェイスを通じて、ホストは、リングのセットアップ機能をリセット、構成およびコントロールする。アンカーをまた、それが１次アンカーであるかどうかを判断するように適合させることもできる。
【００４５】
ブリッジ（たとえば、ブリッジ３６）−２つのデバイス、すなわち上流リンクおよび下流リンクの結合である。セットアップ段階中に、ブリッジはネットワークＩＤをフリップし、上流リングのためのアンカーとして動作する。ホストは学習段階の後、何のスイッチングを実行するべきかについて、ブリッジをプログラムする。ブリッジはリング上をスヌープし、ヒットが検出された場合、メッセージを消費し、これを他方の側に搬送する。メッセージがヒットされない場合、これは通常通りに送信される。ブリッジは通常、リンク方向につき２つのアドレス／マスクレジスタを有する。
【００４６】
モジュール−リングのコンポーネントのための総称であり、ＣＰＵ、ブリッジ、ＴＤＭインターフェイス、ユートピアインターフェイス、ｘＤＳＬ  ＰＨＹ、タイマ、ＵＡＲＴ、ＦＣＣ、ＭＣＣ、スクラッチＲＡＭ、ＣＲＣ計算器などである。
【００４７】
外部リング（ＥｘｔＲｉｎｇ）−いくつかのチップを接続してより大きいトポロジを作成するために使用される。外部リングは、既存のリングベースのシリコンをＦＰＧＡ拡張することによって将来の周辺デバイスをプロトタイピングすることにおいて、特に有用である。
【００４８】
パケットプロセッサ（本明細書では「Ｖｏｂｌａ」とも呼ばれる）−通信論理リンクを管理するためのネットワーク最適化ＣＰＵである。パケットプロセッサは、少なくとも１つの実施形態では、デバイスの内部機能性を超えるストリームをコントロールおよび終了するために使用される。ネットワーク側はリングを通じて行なわれ、他方の側には、たとえば外部ＲＡＭインターフェイスが含まれる。
【００４９】
リングアーキテクチャは、従来のバス設計に勝る多数の利点を有しており、同じチップ上にあるかいくつかのチップ上にあるかにかかわらず、多数の異なるモジュールを接続するための有効な方法である。信号およびバスを使用する代わりに、複数のモジュールの間の通信（データおよびコマンド）がトランザクション上にマップされ、これはリング基盤を介して送信される。リングトポロジにより、予測可能な遅延および容易な拡張性が可能となる。各リングメンバは、たとえば１クロックの遅延を追加する。リングクロック周波数は必要なだけ高速にすることができ、これはそのメンバの地理的近接のためである。リングをさらに、ブリッジ３６などのブリッジを通じて接続することができる。これらのブリッジは、トラフィックの選択された部分を他方の側に向けて（たとえば、リング３２からリング３４へ）送るようにプログラムされるという意味で、ネットワークスイッチングデバイスに類似している。１つの例示的実施形態のチップ内では、リングのメンバが互いに、標準［たとえば、８ビットタイプ／２０ビットアドレス／３２−６４ビットデータ］の接続を使用して接続される。標準外になるとき、より小さい／低速なインターフェイスを定義することができる。
【００５０】
もっとも広い意味では、リングは２種類のメッセージを搬送する。すなわち、セットアップ／コンフィグメッセージ、および、ワーク読み取りおよび書き込みメッセージである。セットアップメッセージを使用してネットワークトポロジを学習し、アドレスを割り当て、メンバ（すなわち、リングの要素）をプログラムすることができる。セットアップメッセージがホストによって、特殊なアンカーメンバを通じて開始される。通常のメンバは、一実施形態では、それらの機能性ＩＤ、リングＩＤおよびそれらの開始アドレスをホストに提供することによって、セットアップメッセージに応答する。ホストソフトウェアはそのデータから、ネットワークの厳密なトポロジおよびそのメンバの機能性を推断することができる。ワークメッセージは、一実施形態では、メンバによってそれらのプログラミングおよび機能性に基づいて開始される。各クロックで、リングメンバはそのインポートを検査する。インポートが有効なメッセージを有する場合、メンバは、メッセージがそのメンバにアドレス指定されるかどうかを判断する。そうである場合、メンバはメッセージをリングから除去し、それに応じてメッセージを処理する。そうでない（すなわち、メッセージが別のメンバに指定される）場合、次のクロックで、アウトポートが使用可能になるとき、メンバはメッセージをアウトポートで下流に送信する。
【００５１】
以下は、使用することができるメッセージタイプの例である。
アイドル−接続がアイドルであり、すなわち、メッセージがないこと、リセット−ネットワーク全体をリセットするためにリセットおよび伝播する。
列挙−列挙アルゴリズム（後述）を伝播し、従う。
【００５２】
ＷｈｏＡｍＩ要求−アンカーメンバによって開始され、リングネットワークの全体に渡って不変でフラッディングされる。
ＷｈｏＡｍＩ応答−各メンバはＷｈｏＡｍＩ要求に、このメッセージを送信することによって応答する−データフィールドは、自己アドレスの値、および、アンカーがネットワークのトポロジを学習できるようにするいくつかの他の有意なビットを含む。
【００５３】
起動−特定のリングメンバのアドレスを含む。このメッセージがメンバにヒットするとき、データビットのサブセットがＲＩＦ（リングインターフェイス）ユニットのコントロールレジスタに書き込まれ、最初のビットが起動ビット（よって名前）である。リセットの後、このビットは非アクティブである。これにより、周辺デバイスのいかなるワーク活動が行なわれることも防止する。このビットを１に設定することにより、標準のワークが可能となる。他のビットには、ｓｃａｎ＿ｍｏｄｅ＿ｅｎａｂｌｅ、ｓｔｏｐ＿ｃｌｏｃｋ、ｉｎ＿ｖｉｖｏ＿ｓｃａｎ＿ｔｅｓｔ、ｒｉｎｇ＿ｌｏｏｐｂａｃｋ＿ｅｎａｂｌｅ（ソフトリセット）、ならびに他のユーザ定義ビット（後述）が含まれる。これらのビットをゼロに設定することができる。
【００５４】
ワーク書き込み−正常なオペレーション中に送信される。これらのメッセージは様々な周辺デバイスを起動し、ｆｉｆｏ（先入れ先出し）し、メモリに書き込むなどのことを行なう。
ワーク読み取り−ワークメッセージは、いくつか例を挙げると、ｆｉｆｏから読み取り、ＳＲＡＭ（スタティックＲＡＭ）データのブロックを移動し、ＤＭＡと通信するために使用される。
【００５５】
例外−通常のリングメンバによって開始されて、アンカー（列挙プロセスを開始する、割り当てられたメンバ）および／またはＰＰ（パケットプロセッサ）に伝播して、注意を必要とするある状態を示す。
フリーズ−メッセージを高速にネットワーク中で伝播し、リングにおけるすべての活動を無効にする。通常は、現在の状態の高速フリーズが必要とされるデバッグ目的のために使用される。
【００５６】
メッセージタイプ符号化
表２は、メッセージタイプと、提案された符号化構造および符号化の説明のリストを示す。
【００５７】
【表２】
2005516432.tif 000007
【００５８】
リングメンバ列挙
リングネットワークのメンバについてのハードアドレス指定方式を事前に割り当てることは可能であるが、少なくとも１つの実施形態では、モジュールはアドレス空間をそれ自体で割り当てる。モジュールは少なくとも１つのリングのメンバであるので、各モジュールはアドレス空間のブロックを取り、次のモジュールにその開始アドレスを伝えることができる（本明細書では「列挙」と呼ばれる）。多数のシステムでは、この割り当てはしばしば同じ結果を与え、そのため、実際にモジュールを再プログラムすることが必要でない可能性があるが、これにより、リング構成が変更されるたびにハードウェアレジスタを変更する必要性が低減される。この自己アドレス指定はまた自己テストとしての機能も果たす。ＳＯＣ通信プロセッサなど、リングベースの集積回路では、周辺デバイスがＣＰＵに開始アドレスとして見える。この開始アドレスからの各オフセットが、周辺デバイスのための異なるコマンドに割り当てられる。異なる周辺デバイスを異なるＣＰＵに割り当てることを単に、ＲＡＭにおける位置をプログラミングする問題にすることができることに留意されたい。したがって、いくつかのＣＰＵをＩＣ上に、調停を心配することなく置くことができる。
【００５９】
上述のように、リングネットワークの各メンバは事前定義されたアドレス空間を有する。一実施形態では、これがある２のべき乗に制限される。たとえば、ＵＡＲＴ（汎用非同期送受信器−シリアル通信のために使用され、送信器および受信器を有する）は５つのレジスタを必要とし、これは８アドレスをそれ自体で割り振る。これはまた最初にアドレスを８の境界に割り当てるべきである。
【００６０】
列挙プロセスは「アンカー」メンバにより開始し、これはそのアウトポート上でＥｎｕｍメッセージを送信して、リングメンバの列挙を開始する。各メンバがＥｎｕｍメッセージを受信するとき、メンバはアドレスフィールドを取り、それを増分して、それ自体の位置合わせを適合させる。これは、ゼロオフセットアドレスとなる。次いで、アドレスが、同じ位置合わせの、次に使用可能なブロックに増分される。この最後のアドレスが下流に送信される。図３を参照して、本発明の少なくとも１つの実施形態による例示的列挙プロセスを例示する。この実施例では、ＤＭＡ５２が１６アドレスを必要とし、ＵＡＲＴ５４が４アドレスを必要とし、タイマ５６が２５６アドレスを必要とすると仮定する。さらに、ＤＭＡ３２は、アドレス値＝８を有するＥｎｕｍメッセージを受信すると仮定する。したがって、この実施例では、ＤＭＡ５２がそれ自体をある２のべき乗（この例では１６）に割り当て、次いで次の１６アドレス（すなわち、アドレス１６〜３１）を要求する。結果として、次に使用可能なアドレスはアドレス３２である。したがって、ＤＭＡ５２はＥｎｕｍメッセージのアドレス値をアドレス＝３２に変更し、この値をＵＡＲＴ５４に提供する。アドレス＝３２はすでに２のべき乗により位置合わせされているので、ＵＡＲＴ５４は、この実施例では、アドレス３２〜３５を要求し、アドレス＝３６をＥｎｕｍメッセージの次に使用可能なアドレスに割り当てる。次いで、このＥｎｕｍメッセージがタイマ５６に提供される。タイマ５６は２５６アドレスを必要とするので、タイマ５６はその開始アドレスを、次に使用可能なアドレス（たとえば、２５６）より大きい、２のべき乗により位置合わせし、次の２５６アドレスを要求する。次いで、Ｅｎｕｍメッセージの次に使用可能なアドレス値がアドレス＝５１２に変更され、リングの次のメンバに提供される。
【００６１】
この同じ列挙プロセスは、ブリッジを除いてリングネットワークの各メンバについて繰り返され、これを以下でより詳細に論じる。この場合、ブリッジは最初にそれらの自体の空間を割り振り、次いでインポートＥｎｕｍメッセージをブリッジの他方の側に送信する。さらに、ブリッジは、一実施形態では、ゼロデータをフリップするように適合される。したがって、Ｅｎｕｍメッセージがブリッジに他方の側で戻され、ブリッジはこれをこの側に戻すように渡す。第１の近似として、ブリッジはルーティングをそれ自体でプログラムすることができる。ループがない場合、各ブリッジは、最高で見るべき２つの範囲を必要とする可能性がある。列挙プロトコルについてはループが存在しないと予測される。そのため最終的に、Ｅｎｕｍメッセージはアンカーに戻るようになる。これは、Ｅｎｕｍプロセスの終了を示す。
【００６２】
本発明の一実施形態によれば、リングネットワーク・アーキテクチャを使用する通信システムが提供される。システムは、リングネットワークに沿ってポイントツーポイント形式で接続された複数のリングメンバと、メッセージをリングメンバの間で通信するためのトランザクションベースの接続性とを含み、メッセージは構成メッセージであり、これによりリングメンバにリングネットワークにおけるアドレス空間を割り当てさせる。一実施形態では、構成メッセージが各リングメンバによって処理されて、そのリングメンバに、そのリングメンバのためのアドレス空間を割り当てさせ、次いで構成メッセージが次のリングメンバに渡される。
【００６３】
一実施形態では、構成メッセージは、開始アドレスを定義するアドレスを含む。構成メッセージは、一実施態様では、アンカーメンバによって発信され、これはＣＰＵを含むことができる。この場合、構成メッセージを処理する各メンバは、構成メッセージを次のリングメンバに渡す前に開始アドレスを訂正することができる。さらに、構成メッセージを処理する各メンバは、メンバのアドレス空間を、開始アドレス、および、そのメンバのために十分なアドレス空間を使用して割り当てることができる。
【００６４】
一実施形態では、このシステムのリングネットワーク上のＣＰＵは、構成メッセージに基づいてそれらのリングメンバに割り当てられた開始アドレスを使用して、他のリングメンバを認識する。この場合、リングメンバの開始アドレスへのオフセットを、リングメンバのための異なるコマンドのために使用することができる。
【００６５】
さらに一実施形態では、リングネットワークはブリッジを含む。この場合、構成メッセージがブリッジによって、ブリッジのためのアドレス空間を割り当てること、および次いで構成メッセージをブリッジの他方の側に渡すことによって処理される。構成メッセージをブリッジによって処理して、後続のメッセージが、後続のメッセージに関連付けられたアドレスがブリッジの一方の側に対応するか、ブリッジの他方の側に対応するかに従って、ルーティングされるようにすることができる。アドレスがブリッジの一方の側に関連付けられるとき、後続のメッセージがブリッジを横断して渡され、アドレスがブリッジの他方の側に関連付けられるとき、後続のメッセージがブリッジを通過させられる。加えて、ブリッジは、構成メッセージをリングネットワークの一方の側から受信することにおいて、構成メッセージに含まれた第１のアドレスを記録し、構成メッセージをリングネットワークの他方の側におけるリングメンバに渡し、構成メッセージがリングネットワークの他方の側から到着するときに構成メッセージに含まれた第２のアドレスを記録することによって応答する。一実施形態では、第１のアドレスはブリッジの近い側に対応し、第２のアドレスはブリッジの遠い側に対応する。
【００６６】
一実施形態では、システムは、リングメンバに記述データで応答させる、第２の構成メッセージをさらに含み、記述データは、リングメンバのためのアドレス空間データを含むことができる。この記述データを使用して、リングネットワーク上のＣＰＵメンバを、リングネットワークのトポロジを推断するように適合させることができる。
【００６７】
本発明のさらにもう１つの実施形態では、複数のリングメンバを含むリングネットワーク・アーキテクチャ・システムにおいて、アドレス空間を割り当てる方法が提供される。この方法は、構成メッセージを発行するステップと、構成メッセージを各リングメンバで処理して、リングネットワークにおけるそのリングメンバのためのアドレス空間を割り当てるステップと、構成メッセージを、割り当てられたアドレス空間に基づいて修正するステップと、構成メッセージを次のリングメンバに渡すステップとを含む。構成メッセージは、リングネットワーク上のアンカーによって割り当てられ、アンカーはＣＰＵメンバを含むことができる。
【００６８】
一実施形態では、構成メッセージは開始アドレスを含み、アドレス空間は、開始アドレス、および、そのリングメンバのアドレスの必要に基づいて割り当てられる。この場合、この方法の修正するステップは、渡すステップの前に開始アドレスを修正するステップを含む。
【００６９】
さらに一実施形態では、複数のリングメンバはブリッジを含み、ブリッジは、後続のメッセージに割り当てられたアドレスに応じて後続のメッセージがブリッジを横断して渡されるか、あるいはブリッジを通過させられることを提供するロジックを構成することによって、構成メッセージに応答する。リングネットワークを、第１のカテゴリのメッセージおよび第２のカテゴリのメッセージを処理するように適合させることができ、ブリッジロジックは、第２のカテゴリについてのみ動作可能である。一実施態様では、第１のカテゴリは管理メッセージであり、第２のカテゴリはワークメッセージである。
【００７０】
起動レジスタ
起動レジスタは、一実施形態では、あらゆるリングインターフェイス（ＲＩＦ）の一部である。これはＷｈｏ＿Ａｍ＿Ｉメッセージへの応答として送信される。これは各リングメンバのいくつかの重要なパラメータを連結する。これをアンカーによって、ネットワークのトポロジを学習するために使用することができる。これには以下のフィールドが含まれる可能性がある。すなわち、ｕｓｅｒ＿ｃｏｎｔｒｏｌｓ、モジュールＩＤ、ｕｓｅｒ＿ＩＤ、ｓｏｆｔ＿ｒｅｓｅｔ、ｉｎｖｉｖｏ、ｓｃａｎ＿ｍｏｄｅ、起動済ｓｔｏｐ＿ｃｌｏｃｋなどである。モジュールＩＤは、ネットワーク上の各種類のメンバについてのハードワイヤードの一意のＩＤである。リングＩＤはたとえば、どこでブリッジが挿入されるかを識別するために使用される１ビットである。列挙メッセージがブリッジを横断するたびに、このビットがフリップされる。アクティブビットが、起動（または、すべてを起動）メッセージタイプによって設定／リセットされて、モジュールの標準オペレーションが可能にされる。このビットがリセットされる間、モジュールは動作するべきではない。
【００７１】
リングネットワークのオペレーションにおける段階
ハードウェア接続性−これは、実際のハードウェアが接続され、リングのトポロジが構築されるときである。いくつかのリング準拠のチップを、外部リングインターフェイスを通じて相互接続させることができる。使用されていないインターフェイスをショートアウトさせることができる。
【００７２】
リセット−アンカーが通常伝播する最初のメッセージがリセットメッセージである。これは、クロッキングなしでフラッディングされる。ホストは、リセットメッセージがネットワーク全体をフラッディングするために十分な時間を待機するべきである。
ウェイクアップ−電源を入れた後、リング上にあるすべてのモジュールは通常、リセットモードである。すべてのモジュールはすべてのコンフィグビットをリセットさせる。
【００７３】
列挙−ホストはアンカーに、あるアドレス（通常はゼロ）により開始して列挙メッセージを広げるように伝える。各リングメンバはＥｎｕｍメッセージを受信し、それ自体のアドレス空間ニーズを計算し、下流に次の使用可能なアドレスを送信する。ブリッジは最初にそれら自体の空間を第１のリング上に追加し、次いでメッセージを次のリングに送信する。ブリッジの他方の側がそれ自体のメッセージを消費するとき、より近い側は第１のリング上でＥｎｕｍメッセージを継続する。
【００７４】
ＷｈｏＡｍＩ要求のフラッディング−ホストは、ＷｈｏＡｍＩ要求メッセージにより、アンカーにリングをフラッディングするように命令する。列挙アルゴリズムに従うブリッジを除いて、すべてのモジュールは単にそれを下流に送信する。各リングメンバは最初にその応答を送信し、クロック後、要求メッセージをリレーするように試みる。これはそのため、要求メッセージがアンカーに、すべての応答が到着した後にのみヒットするようになる。アンカーはＷｈｏＡｍＩシーケンスの終了を、この事実を使用することによって決定することができる。
【００７５】
ＷｈｏＡｍＩ応答−各モジュールはＷｈｏＡｍＩ要求を得た後、その起動レジスタの内容をＷｈｏＡｍＩ応答メッセージの一部として送信する。アンカーはすべてのこれらのメッセージをホストに提示するべきである。通常、ネットワークトポロジをこのデータから推断することは、ホストの責任である。
【００７６】
ＰｒｏｇｒａｍＷｒ−Ｗｈｏ＿Ａｍ＿Ｉ応答メッセージを介してネットワークトポロジを学習した後、ホストはメンバの構成を開始することができる。各メンバの開始アドレスを知っているので、ホストはいかなるレジスタに書き込むための要求も送信することができる。最後の段階は、アクティブな、たとえばビット１をゼロオフセットレジスタに書き込むことによって、ネットワークを起動することである。後の段階中にホストがいずれかのレジスタの値を得る必要がある場合、ＰｒｏｇｒａｍＲｄ要求を発行し、ＰｒｏｇｒａｍＲｄ応答を待機することによって、それを行なうことができる。ブリッジはＰｒｏｇｒａｍＷｒの特殊な場合である。ブリッジを横断してデータを渡そうと試みる前に、ブリッジを最初にプログラムする必要がある。
【００７７】
起動−プログラミング段階の後、ＳＯＣは処理およびデータハンドリングのタスクを実行する準備ができている。すべてのモジュールを開始し、それらが作動できるようにするため、「起動」メッセージがリングネットワークの全体に渡ってフラッディングされる。
【００７８】
浮遊メッセージをキルするモード−設計またはプログラミングにおけるバグのために、リングのいかなるメンバにもアドレス指定されていないメッセージが送信される可能性があることは、予測可能である。そのアドレスは、割り当てられた最高のアドレスより上であるか、あるいは、連続したメンバの間の空き空間にアドレス指定される。浮遊メッセージのアドレスが上限より上である場合、これをアンカーにルーティングし、アンカーによって消費または廃棄することができる。しかし、浮遊アドレスが空き空間をポイントする場合、このメッセージはリングを永久に回る可能性がある。この永久ループを防止するために使用されるプロセスが次に起こり、すなわち、メッセージはそれらと共に流れる追加のビットを有することができる。ブリッジがメッセージを通過している（横断しない）場合、このビットをメッセージ上でセットすることができる。メッセージがブリッジにこのセットされたビットと共に到着する場合、ブリッジはこれを廃棄する。（場合においてはいくつかの）リングにつきただ１つのブリッジがこのモードで動作中であることを保障するように、配慮するべきである。ブリッジが存在しないリングでは、アンカーがこのアクションを実行することができる。新たに生成されたメッセージはこのビットをゼロにする。また、メッセージがブリッジを横断するたびに（あるリングから別のリングへ）、このビットはクリアされる。メッセージがリングを二度目に回る場合、指定されたブリッジはこれを廃棄する。
【００７９】
各リングについて、ただ１つのブリッジが上記の廃棄プロセスを実行するべきである。そうでない場合、正当なメッセージが廃棄される可能性がある。この問題の解決策は、以下の通りである。列挙プロセス中に、ブリッジがその両側を近い側および遠い側として初期化する。近い側は、Ｅｎｕｍメッセージがそこから現れる所である。遠い側は他方の側である。この場合、遠い側を、浮遊メッセージの監視を実行するために選択することができる。一次リング（アンカーが位置する所）では、浮遊メッセージをキルするジョブがアンカーによって行なわれる。
【００８０】
リングトポロジの問題
ＳＯＣ中のクロックの位置合わせは重要な機能である。これに失敗すると競合という結果となり、これは無能または少なくとも非能率的である。他の望ましくないクロッキングのアーチファクトは時として、周波数を下げること、チップを冷却すること、これを露光することなどによって除くことができるが、競合の解決は通常、はるかにより困難である。図４で例示するように、「ｃｌｋ１」と「ｃｌｋ２」の間の遅延が、第１のフリップフロップ６０の出力から第２のフリップフロップ６２の入力までの遅延より大きい場合、競合の可能性が高く、これは、第２のフリップフロップ６２が第１のフリップフロップ６１からのデータ出力を１クロック周期分早くサンプルする可能性があることを意味する。
【００８１】
少なくとも１つの実施形態によるリングベースのＳＯＣでは、通常はチップ全体中でクロックを正確に位置合わせする必要はない。クロックの位置合わせは、ただ１つのデータのチャンクにおいてのみ必要とされ、これは本明細書では「コンパウンド」と呼ばれる。コンパウンドの大部分は小さく、周辺デバイスなどである。他のものは中くらいのサイズであり、ＤＭＡなどである。いくつかは相当に大きく、パケットプロセッサなどである。より大きいコンパウンドでは、ある種類のクロックの位置合わせが一般に必須である。しかし、全体のクロッキングの問題を、より小さく、より早期に解決される問題に分割することができる。例示のため、少なくとも１つの実施形態では、いかなる２つのモジュールの間を進む信号も厳重にコントロールされ、これは、これらが前もって知られており、限られた数しかないからである（たとえば、クロック、データおよびバックプレッシャーの３つの信号グループ）。さらに、トポロジのために、あるセクションにおける解決策は通常、システム全体のための解決策を含意する。特に重要なものは、３つのグループのいずれかが取るリングに沿った方向、クロックツリーがどのように流れるか、および、何の特殊なルール／チェック／解決策が定義および実装されるべきであるかである。
【００８２】
図５は、競合問題の可能な解決策を例示する。この実施例では、クロック信号パス６４が、データパス６６と同じ方向で、いくつかの類似のコンパウンド（たとえば、コンパウンド７０、７２）に分離される。コンパウンドを離れる各フリップフロップにおけるロジック７４、７６をコントロールすることによって、フリップフロップの間の遅延が少なくとも競合状態を防止するために十分長いことを保証することができる。これをまた、レイアウト後に検証することもできる。
【００８３】
図５に例示した解決策を実装することができるが、少なくとも１つの実施形態では、クロック信号がデータの反対方向に伝播され、これを図６を参照して例示する。クロック信号７８をデータ信号８０の反対方向に提供することによって、コンパウンド７０、７２の間の競合の潜在性は著しく低減または除去される。
【００８４】
少なくとも１つの実施形態では、通常のデータの流れ（信号８０）に反対して進む少なくとも１つの信号があり、この信号はＯＫ信号８２であり、バックプレッシャーを可能にするために使用され、これを図７を参照して例示する。ＯＫ信号８２は一般に特殊な処理を必要とし、これはそのサンプリングクロックがソーシングクロック（信号７８）に遅れをとるからである。しかし、これを、リターンパスがクロック遅延より長いことを保証することによって解決することができる。別法として、図８を参照して例示するように、ラッチ８６を実装して、フリップフロップ６２に提供されたデータが、クロック７８の立上り（ｃｌｋｂ）の後にのみ変化することを保証することができる。
【００８５】
図９は、ブリッジ９４を有するリングネットワークでのデータの伝播に反対の方向における、クロック９０の伝播の結果生じる複雑化を例示する。例示のように、ブリッジ９４を離れるデータ＿ａはメンバ９６へ進み、ｃｌｋｂの立上りによってサンプリングされるべきである。しかし、ｃｌｋｂはブリッジ９４のｃｌｋａから相当に遅れをとる。波形９８によって明示するように、競合は著しい。しかし、ラッチをデータラインに追加することによって、競合を除去するか、あるいは実質的に低減することができる。同様に、競合を防止するために、ラッチがＯＫ信号において使用されるべきである。たとえばｃｌｋａとｃｌｋｂの間の遅延がサイクル時間の約７５％より大きい場合、ラッチの有用性は制限される可能性があり、これは実質的なタイミング不確実性が導入される可能性があるからであることは理解されよう。
【００８６】
図１０は、ブリッジ９４を有するリングネットワークでのデータ１０２の伝播と同じ方向における、クロック９０の伝播の結果生じる複雑化を例示する。例示のように、データ＿ｂはメンバ９６を離れて、ブリッジ９４によってｃｌｋ＿ａを使用してサンプリングされる。図９で参照した状況とは対照的に、ｃｌｋｂはこのときｃｌｋａから相当に遅れをとる。しかし、これは、遅れがクロックサイクルより相当に小さい場合は有利である可能性があり、これはデータがクロック遅延の「危険ゾーン」を超えて遅延される可能性があるからである。同様に、ＯＫ信号がカバーされて、データの最後の遅れがカバーされる。この場合、通常、考慮しなければならない信号は、ブリッジ９４からメンバ９６へのＯＫ信号のみである。この場合、ラッチをメンバ９６で使用して、ＯＫ信号における競合を防止することができる。
【００８７】
リングの複数のメンバの間の遅れを最小限にして、それにより単一のリングによってサポートされるメンバの数を増やし、ならびに、考慮されるべきタイミング制約を最小限にすることは、しばしば望ましい。しかし、１つまたは複数のメンバが、相当な処理タスクを有するパケットプロセッサまたは他のモジュールである場合、このようなモジュールに入るクロックはしばしば、クロックが大きいコンパウンドを駆動するように再生成されるとき、相当に遅延される。この場合、同じ原理が適用され、図１１を参照して例示するように、ラッチを使用して解決することができ、図１１は、同じ方向に伝播するデータ信号およびクロック信号を例示する。この場合、ｌｏｃａｌ＿ｃｌｏｃｋ１１０はモジュール１１４（たとえば、パケットプロセッサ）のｒｉｎｇ＿ｉｎｔｅｒｆａｃｅクロック１１２に遅れをとる。出て行くデータについては、これは通常は問題ではなく、これはデータが後に変化し、次いでリングインターフェイスがクロックをフリップフロップするからである。しかし、前のメンバからモジュール１１４に入るデータについては、競合の可能性がある。同じ状況は、クロック信号１１２およびデータ信号１１６が反対方向に伝播する場合に起こる可能性がある。
【００８８】
本発明の一実施形態によれば、リングベースのシステムが提供される。このシステムは、リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージとを含み、システムは、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合され、システムは、リングネットワーク上のタイミングをコントロールするためのシステムクロック信号をさらに含み、システムクロック信号は、リングメンバのすべての間ではなく、リングメンバの複数のグループの間で位置合わせされる。一実施形態では、システムクロック信号はメッセージと同じ方向に流れるが、もう１つの実施形態では、システムクロック信号はメッセージと反対の方向に流れる。この位置合わせを実施して、複数のクロック信号の間のスキューを実質的に除去することができる。さらに、この位置合わせは、リングメンバでのフリップフロップが早すぎるクロックサイクルでデータをサンプリングすることを防止することができる。
【００８９】
システムクロック信号の位置合わせは、隣接するリングメンバの間で実行されることが好ましく、リングメンバのための位置合わせは、リングメンバの上流および下流リングメンバに関して実行することができる。位置合わせは、リングメンバで、隣接するクロック信号の間の遅延が隣接するメンバの間の遅延を超えないことを保証するロジックを挿入することによって、実行することができる。同様に、位置合わせを、個々のメンバでクロック信号によってクロックされるラッチを使用して実行することができる。
【００９０】
一実施形態では、リングベースのシステムはさらに、メッセージと反対方向に流れるバックプレッシャー信号をさらに含み、位置合わせは、リングメンバで、バックプレッシャー信号のためのリターンパスが隣接するメンバの間のクロック遅延を超えることを保証するためのロジックを挿入することによって実行される。
【００９１】
ブリッジ
前述のように、本発明によるリングトポロジはモジュールを論理リングにおいて構成する。すべてのデータおよびコントロールは、このリング基盤を介して順番にリングの周囲で送信される。しかし、図１２によって例示するように、相当なリングレイテンシが導入される可能性がある。例示のため、モジュール１１６がメッセージをモジュール１１８に送信する場合、レイテンシはほとんどない。しかし、メンバ１２０がデータをメンバ１２２に渡す場合、データは４つのモジュール（すなわち、４クロックサイクル）を通過しなければならず、結果としてより相当に多いレイテンシが生じる。もう１つの問題はピークレイテンシである。例示のため、メンバ１１６が主にメンバ１２２に送信し、メンバ１１８はデータを主にメンバ１２０に送信すると仮定する。この場合、メンバ１１８と１２０の間の通信は、メンバ１１６からメンバ１２２へのトラフィックによる劣化を受ける。
【００９２】
少なくとも１つの実施形態では、ブリッジを使用して、リングの複数のメンバの間のレイテンシを最小限にすることができる。図１３に例示するように、ブリッジ１３０を使用して２つのリング１３２、１３４を接続することができる。このブリッジは「シーブリッジ」に類似しており、これは、ちょうどシーブリッジが２つの島を結ぶように、２つのリングを共に接続するからである。シーブリッジは、一実施形態では、何のメッセージをリングの間で横断させるべきであるか、および、何のメッセージを現在のリング上で保つべきであるかを決定する。そのため上のレイテンシの問題を参照すると、シーブリッジを利用してピークレイテンシの問題を最小限にすることができる。例示のため、メンバ１３４が主にメンバ１３６と通信する場合、メンバ１３８とメンバ１４０の間の通信は影響を受けない。
【００９３】
送信側メンバと指定受信者メンバの間の、リングの比較的多数のメンバの結果生じるリング内レイテンシを、図１４を参照して例示するようなランドブリッジによって減らすことができる。ランドブリッジ１４６がリング１４８内で利用されて、データ／クロック信号のための「ホップ」の数が最小限にされる。例示のため、ランドブリッジ１４６なしでは、メンバ１５０から１５２へのデータは５メンバを通過しなければならない。しかし、ランドブリッジ１４６により、メンバ１５０とメンバ１５２の間のデータパスにおけるメンバの数が３メンバに減る（メンバの２つが、ブリッジの２つのインターフェイス１５４、１５６である）。
【００９４】
ブリッジは、ランドブリッジもシーブリッジも、そのインターフェイスの１つで受信されたメッセージを解析し、メッセージの指定受信者に応じてメッセージをその他方のインターフェイスまで通過させるか、あるいは次のメンバに渡すように適合される。たとえば、メンバ１５０がメッセージをメンバ１５８に送信するとき、ランドブリッジ１４６はメッセージをブリッジインターフェイス１５４で受信し、最短パスが、メッセージをブリッジインターフェイス１５４から直接メンバ１５８に渡すことであると決定する。しかし、メンバ１５０がメッセージをメンバ１６０に送信するとき、ランドブリッジ１４６はメッセージをブリッジインターフェイス１５４で受信し、最短パスが、メッセージを、ブリッジを通じてブリッジインターフェイス１５６に、次いでブリッジインターフェイス１５６からメンバ１６０に渡すことであると決定する。
【００９５】
ブリッジがメッセージのためのより最適なパスを判断するとき、リングのトポロジを承知していることは必要ではない。列挙プロセスを使用して、ブリッジは、この判断を行なうために使用される情報を得ることができる。図１５を参照して、本発明の一実施形態による、ブリッジ１４６による例示的ルーティングプロセスを例示する。列挙のため、ランドブリッジ１４６は２つのリングメンバのように見える（インターフェイス１５４が１つのメンバであり、インターフェイス１５６が第２のメンバである）。より低いアドレス（この場合、アドレス＝３）を有するブリッジのメンバ／インターフェイスは「近」端となり、より高いアドレス（この場合、アドレス＝６）を有するブリッジのメンバ／インターフェイスには「遠」端としてマークが付けられる。「近」端に到着するメッセージ（メンバ１５０の方向から）は、メッセージの宛先アドレスが３より大きく６より小さい場合、次に渡される。そうでない場合、メッセージはブリッジ１４６を通じて遠端（インターフェイス１５６）に渡される。遠端では、メンバ１５２の方向からインターフェイス１５６に到着するメッセージは、その宛先アドレスが６より小さく３より大きい場合、近端（インターフェイス１５４）に渡される。そうでない場合、メッセージはメンバ１６０に渡される。少なくとも１つの実施形態では、それによってブリッジ１４６がメッセージのルーティングを決定するアドレス値は、本明細書で説明する列挙プロセス中に決定される。図１６は、それにより２つのメッセージがブリッジ１４６のインターフェイス１５４で同時に受信される状況を例示する。例示のように、ｍｓｇ１およびｍｓｇ２が同じインターフェイス１５４で同時に受信される。一実施形態では、ブリッジ１４６のインターフェイスの間で転送されたメッセージに優先権が与えられるのに対して、他の実施形態では、リングのメンバからブリッジインターフェイスで受信されたメッセージに優先権が与えられる。
【００９６】
図１７を参照して、ブリッジ１７０の例示的実施態様を例示する。この実施例では、ブリッジ１７０はコントロールロジック１７２を含み、これは、上流および下流のｍｕｘ１７４〜１８０をコントロールして、入力メッセージを、下流入力と上流出力の間のｆｉｆｏ（ｆｉｆｏ１８２〜１８８）を通じて、上流入力から上流出力へ、下流入力から下流出力へ、上流入力から下流出力へ渡すように適合される。
【００９７】
本発明の一実施形態によれば、リングベースのシステムオンチップが提供される。このシステムは、リング上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージと、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合されるシステムとを含み、少なくとも１つのリングメンバはブリッジを含む。
【００９８】
一実施形態では、リングベースのシステムのブリッジは、メッセージが中間リングメンバを通過することなくブリッジの一方の側から別の側に移動できるように適合される。この場合、ブリッジを、ブリッジに到着するメッセージが、メッセージに関連付けられたアドレスがブリッジの一方の側に対応するか、ブリッジの他方の側に対応するかに従って、ルーティングされるように構成することができる。
【００９９】
同様に、一実施形態では、アドレスがブリッジの一方の側に関連付けられるとき、メッセージがブリッジを横断して渡され、アドレスがブリッジの他方の側に関連付けられるとき、メッセージがブリッジを通過させられる。したがって、ブリッジは、ある範囲のアドレスを有するロジックを含み、アドレスが範囲内であるかどうかに応じて、メッセージがブリッジの一方の側またはブリッジの他方の側にルーティングされるようにすることができる。ロジックを構成メッセージに基づいて確立することができ、構成メッセージはリングメンバにそれらのアドレス空間を割り当てさせ、構成メッセージは列挙メッセージを含むことができる。
【０１００】
一実施形態では、リングベースのシステムの複数のリングメンバは、第１のリングネットワークを成す第１の複数のリングメンバであり、システムは、第２のリングネットワークを成す第２の複数のリングメンバをさらに含み、ブリッジは、２つのリングネットワークの間のブリッジを含む。ブリッジを、どのメッセージを第２のリングネットワークに渡すべきであるか、および、どのメッセージを第１のリングネットワーク上で保つべきであるかを決定するように適合させることができる。この場合、ブリッジを、ブリッジに到着するメッセージが、メッセージに関連付けられたアドレスがブリッジの一方の側に対応するか、ブリッジの他方の側に対応するかに従って、ルーティングされるように構成することができる。ブリッジは、ある範囲のアドレスを有するロジックを含み、アドレスが範囲内であるかどうかに応じて、メッセージが第１のリングネットワークまたは第２のリングネットワークにルーティングされるようにすることができる。このロジックを構成メッセージに基づいて確立することができ、構成メッセージはリングメンバにそれらのアドレス空間を割り当てさせる。構成メッセージは、この場合、列挙メッセージを含むことができる。さらに、アドレスが第１のリングネットワークに関連付けられるとき、メッセージを、ブリッジを横断して渡すことができ、アドレスが第２のリングネットワークに関連付けられるとき、メッセージはブリッジを通過させられる。
【０１０１】
もう１つの実施形態では、ブリッジは、第１のカテゴリのメッセージおよび第２のカテゴリのメッセージを処理するように適合される。第１のカテゴリのメッセージは管理メッセージを含むことができ、第２のカテゴリのメッセージはワークメッセージを含むことができる。次いで、ブリッジを、ルーティングの決定を第２のカテゴリのメッセージに基づいて行なうように適合させることができる。この場合、ブリッジを、メッセージに含まれたメッセージタイプを検査することによってメッセージのカテゴリを識別するように適合させることができる。
【０１０２】
浮遊メッセージ
浮遊メッセージは、リングネットワークの未使用アドレスにアドレス指定されたメッセージである。列挙プロセスは通常、モジュールがそれら自体をたとえば２のべき乗である開始アドレスに位置合わせするとき、アクティブモジュールの間の未使用アドレス空間のギャップを残す。浮遊メッセージは通常、ソフトウェアのバグの結果である。チェックされていないと、浮遊メッセージは徐々にリングネットワークをふさぐ可能性があるが、このようなメッセージは検出および／またはデバッグすることが困難である。しかし、リングのあらゆるメンバが、浮遊メッセージを検出または除去する能力について知ること、ましてこの能力を有することが必要とされるのではない。一実施形態では、これはアンカーおよび／またはブリッジの責任になる。
【０１０３】
図１８および１９を参照して、本発明の少なくとも１つの実施形態による、浮遊メッセージを除去するためのプロセスを例示する。例示の実施形態では、メッセージの１ビットが、メッセージが浮遊物であるかどうかを判断するためのマーカとして使用される。このビットは通常ゼロに設定されるが、メッセージがアンカー１９２またはブリッジ１９４を通過するとき、このビットは１に設定される。メッセージがアンカー１９２またはブリッジ１９４に再度到着する場合、アンカー／ブリッジは、設定されたビットに注意し、浮遊メッセージを廃棄し、それにより浮遊物をリングから除去する。
【０１０４】
しかし、ブリッジが２つのリングインターフェイスを有しているので、特にランドブリッジでは、インターフェイスの１つが浮遊メッセージをフィルタリングするために選択されなければならないことは理解されよう。例示のため、メンバ１９６がメッセージをアドレス＝５（割り当てられていないアドレス）に送信する場合、ランドブリッジ１９８はメッセージを遠端２００（アドレス＝１１）で受信し、メッセージをブリッジ１９８の近端２０２（アドレス＝３）に戻すように転送し、そこでプロセスは、浮遊メッセージが除去されない限り、繰り返される。したがって、一実施形態では、ブリッジ１９８の遠端２００（すなわち、アンカーから最も離れたブリッジのインターフェイス）が、浮遊メッセージについてフィルタリングするために選択される。近端２０２で受信されたメッセージの浮遊メッセージマーカビットは、浮遊メッセージマーカビットがブリッジの遠端２００で設定される間、不変のまま残る。
【０１０５】
図２０、２１および２２は、リングにつき複数のブリッジを有する例示的リングネットワークを例示する。例示のため、図２０は２つの並列ブリッジ２０８、２１０を有するリングを含み、図２１は、交差するブリッジ２１４、２１６を有するリング２１２を有し、図２２は、ランドブリッジ２２２およびシーブリッジ２２４を有するリングネットワークを含む。本発明によれば、他のブリッジの組み合わせを利用することができる。
【０１０６】
リングにおけるデバッギングおよびテスト
リングネットワークのトポロジにより、リングの基盤を使用してスキャンおよびデバッグを支援する機会がある。リングを、個々のリングメンバへのスキャンチェーンアクセスとして使用することができ、また特別なインビボスキャンモード（後述）を使用することもできる。図２３および２４を参照して、スキャン機能の挿入を例示する。スキャンは、通常のメンバではない、新しいｓｃａｎ＿ｉｎｓｅｒｔメンバ２３０を導入することによって、可能にすることができる。ｓｃａｎ＿ｉｎｓｅｒｔメンバ２３０を、１クロック遅延を導入しないように適合させることができる。リング信号では、通常のリングデータとスキャン入力信号の間はｍｕｘ２３２である。テストモード中に、このｍｕｘ２３２は、通常のリングデータの代わりにスキャン入力信号を挿入する。正常なオペレーション中に、このｍｕｘ２３２はリング基盤を通常通りに接続する。スキャンモードでは、リングは事実上遮断される。挿入−スキャン信号は、チップ上の入力パッド２３４、２３６から直接来る。「結果をタップする」ピンが出力パッドを駆動する。挿入スキャン信号は３つの主なグループである、メッセージタイプ、メッセージアドレスおよびメッセージデータを形成する。
【０１０７】
実際のスキャンがリングを開始することができる前に、リングがスキャンモードにプログラムされるべきである。これは、管理メッセージのシーケンスを強制的にリング上に通すことによって行なうことができる。このシーケンスは最初にリングをリセットし、次いでこれを列挙する。最後の段階は、ある特定のメンバのスキャンについて起動することである。スキャンモードがメンバにプログラムされた後、実際のスキャンを行なうことができる。スキャンｍｕｘ信号は、リングの一部である。これはたとえば、外部パッドを介して、シーケンスにおいてシフトを作成するようにプログラムされる。次いで、１クロックに渡って、これがネゲートされる。このサイクル中に、スキャン取り込みが発生する。次いで、スキャンｍｕｘが再度アサートされ、クロッキングがスキャンアウトデータを進める。スキャンアウトデータが、回線から離れるように分岐されてｓｃａｎ＿ｉｎｓｅｒｔモジュールに入る。図２５を参照して、スキャンチェーンとして使用される例示的信号２４０〜２５０を例示する。スキャン中に、いくつかのメッセージデータ信号がスキャンチェーンとして使用される。データラインの数は、いくつの並列スキャンチェーンが必要であるかによって決まる。
【０１０８】
インビボスキャン
通常のシリコンデバッグのシナリオは、以下の通りである。チップが１０億クロックに渡って実行され、バグが発見される。テストが、クロックの半分に渡って再実行され、次いで停止される。停止された状態ですべてのフリップフロップ値の中で、うまくいけば問題またはエラーの原因が決定される。このようなシナリオでは、インビボスキャンを利用することができる。インビボスキャンでは、チップが通常通りに開始される。ソフトウェアは指定数のクロックに渡って実行される（オプショナルで、専用カウンタを使用してリングをフリーズさせることができることに留意されたい）。リングモジュールが非活動化され、次いで、たとえばあるモジュールからのメッセージによって非活動化される。ある指定されたリングモジュールが、インビボスキャンモードで再起動される。このモードはモジュールに、そのすべてのフリップフロップのシフトアウトを実行させる。モジュールのリングインターフェイスは、スキャンアウトを管理することを担う。これはたとえば３２スキャンアウトビットのブロックをカウントし、これらを１つのメッセージにパッケージして、このメッセージをアンカーに発送する。アンカーまたは他のモジュールは、これらのメッセージをアンカーから検索し、デバッグソフトウェアに渡す必要がある。メッセージタイプは通常、プログラム読み取り応答メッセージであり、これはアンカーに到着するように設計される。アドレスはモジュール自体のアドレスである。このメッセージのデータは、たとえば３２ビットのスキャンアウトデータである。このモードの各起動により、ある数のこのようなメッセージが生成される。モジュールがメッセージのビット総数より多いフリップフロップを有する場合、指定されたモジュールはこの起動を何度も行なうことができる。メンバ状態の高速フリーズを容易にするため、特別な管理メッセージ（フリーズメッセージ）が、リングの周囲を高速で流れて各モジュールの状態をフリーズするように定義される。
【０１０９】
本発明の一実施形態によれば、リングベースのシステムオンチップが提供される。リングベースのシステムは、リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージとを含み、システムは、正常なオペレーション中に、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合され、システムはさらにスキャンテストモードについて適合され、スキャンテストモードにおいて、リングメンバの１つがスキャン出力のために使用可能にされ、他のリングメンバが非活動化される。非活動化されたメンバを、メッセージを消費せずにメッセージを渡すように適合させることができる。
【０１１０】
スキャン出力を、１つのリングメンバによって送信される１つまたは複数のメッセージにパッケージすることができる。１つまたは複数のメッセージをプロセッサに送信することができ、プロセッサは、監視応答メッセージを消費する管理者として動作するリングメンバを含むことができる。この場合、プロセッサを、１つまたは複数のメッセージからのデータをデバッギングソフトウェアで使用可能にするように適合させることができる。加えて、一実施形態では、リングベースのシステムのリングメンバの第２のものは、他のリングメンバを非活動化させるように、かつ１つのリングメンバをスキャン出力のために使用可能にするように動作する、少なくとも１つのメッセージを発行する、プロセッサを含む。
【０１１１】
一実施形態では、スキャンテストモードにおけるシステムのオペレーションは、１つのリングメンバに、１つのリングメンバに関連付けられたフリップフロップを、リング上で送信された１つまたは複数のメッセージにシフトアウトさせる。スキャンテストモードを、リングネットワークをリセットすること、および１つのメンバをスキャンモードのために使用可能にすることによって開始することができ、スキャンテストモードの開始は、リングネットワークを列挙することを含むことができる。一実施形態では、スキャンテストモードにより、システムのユーザがシステムを、追加のハードウェアを追加することなくデバッグすることができる。
【０１１２】
さらに、一実施形態では、複数のリングメンバはリングネットワークに、レジスタを有する複数のリングインターフェイスを使用して結合され、レジスタは、そのリングインターフェイスに関連付けられたリングメンバを非活動化するように設定することができるビットを含むことが好ましい。レジスタはまた、そのリングインターフェイスに関連付けられたリングメンバをスキャン出力のために使用可能にするように設定することができるビットを含むこともできる。
【０１１３】
本発明のもう１つの実施形態によれば、複数のリングメンバを有するリングネットワークにおいてスキャンする方法が提供される。この方法は、リングネットワークの正常なオペレーション中に欠陥または異常を観測するステップと、１つのリングメンバをスキャン出力モードに入れさせ、他のリングメンバを非活動化させる、少なくとも１つのメッセージを発行するステップと、リングネットワークのオペレーションを再開させるステップと、１つのリングメンバからのスキャンデータをリングネットワーク上にメッセージとして出力するステップとを含む。この方法は、一実施形態では、欠陥または異常を分離させるために、異なるリングメンバに、スキャン出力モードに入るようにさせるステップをさらに含む。少なくとも１つのメッセージは、リングメンバに関連付けられたリングインターフェイスにおいてビットを構成する、少なくとも１つの管理メッセージを含むことができる。加えて、一実施形態では、観測するステップは正常なオペレーション中のある時点で行なわれ、再開するステップはこの時点の直前で実行される。
【０１１４】
スキャン出力モード中に、一実施形態では、１つのリングメンバはそのスキャン出力を、プロセッサリングメンバに送信されるメッセージとしてパッケージする。この場合、プロセッサリングメンバを、スキャン出力をデバッギングソフトウェアで使用可能にするように適合させることができる。
【０１１５】
基本的なリングインターフェイス（ＲＩＦ）の概要
このセクションでは３つの問題を扱う。基本的なリングタイミングおよびバックプレッシャープロトコルである。また、リングインターフェイスユニットのブロック図も示し、これを、リングに接続されたユーザモジュールへのインターフェイスを説明するために使用する。通常のリングメンバがリングの複雑さを承知している必要はない。基本的なリングインターフェイスは、タイミングおよびプロトコルの大部分を隠すように意図される。図２６、２７および２８は、リングネットワークの複数のモジュールの間のリングシグナリングの例示的実装を例示する。前述のように、一実施形態では、ＯＫ信号２６６（バックプレッシャー）が逆方向に流れてメンバ２６８に、次の立上りクロック２７２でこれが新しいメッセージをタイプ／アドレス／データライン２７４〜２７８上に強制的に通す可能性があることを通知する。ＯＫ信号２６６は、受信側メンバ２７０によって生成される。デフォルトで、一実施形態では、ＯＫ信号２６６はアクティブであり、これが下がるのは、メッセージタイプが非アイドルであり、かつメンバ２７０の正しいｆｉｆｏに余地がないときのみである。正しいｆｉｆｏは、メンバ２７０における通過トラフィックについても、あるいはメンバ２７０のｆｉｆｏについてアドレス指定されたメッセージについても、ｆｉｆｏ２８０である。したがって、ＯＫ信号２６６は、メンバ２６８からメンバ２７０に来る信号によって生成され、同じクロック中にラウンドトリップで戻るように送信される。
【０１１６】
ＯＫ信号２６６の生成を、メンバ２７０に常駐するフリップフロップ、およびメンバ２６８から来るメッセージのタイプラインから行なうことができる。たとえば、ｆｉｆｏ２８０がフルである場合、たとえリングを下がって次のＯＫがアクティブであり、ｆｉｆｏ２８０におけるエントリを解放中であるとしても、ＯＫ信号２６６がネゲートされる。同じ基本的なＯＫプロトコルが各ＲＩＦ（リングインターフェイス）ユニット（図２７）において４回使用される。同じＯＫプロトコルは、４つの例示的ＲＩＦインターフェイスについて有効である。
【０１１７】
本発明の一実施形態によれば、リングベースのシステムオンチップが提供される。リングベースのシステムは、リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージとを含み、システムは、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合され、システムはさらに、下流の隣接リングメンバが信号をそれらの上流の隣接リングメンバに提供し、この信号が、上流リングメンバがメッセージを下流リングメンバに所与のクロックサイクルで渡すためにスロットが使用可能であるかどうかを指示するように、適合される。スロットが使用可能でないことを指示する信号の受信により、一実施形態では、上流リングメンバがメッセージをそのクロックサイクルで渡さないようにさせる。一実施形態では、各リングメンバは信号を直前のリングメンバに各クロックサイクルで提供する。
【０１１８】
一実施形態では、各リングメンバはリングネットワークにリングインターフェイスによって結合し、スロット可用性に関する信号が隣接するリングインターフェイスの間で渡される。この場合、リングインターフェイスは入力ＦＩＦＯおよび通過ＦＩＦＯを含むことができる。信号を、下流リングメンバによって生成し、メッセージを保持するすぐ上流のリングメンバに渡すことができ、信号は、メッセージに関係する下流リングメンバのためのＦＩＦＯに従って生成される。この場合、下流リングメンバを、メッセージが下流リングメンバによって消費されるべきである場合、入力ＦＩＦＯがメッセージに関係すると判断し、メッセージが下流リングメンバによって消費されるべきでない場合、通過ＦＩＦＯがメッセージに関係すると判断するように、適合させることができる。この判断を、メッセージが全体として上流リングメンバから下流リングメンバに送信される前に、下流リングメンバが、メッセージを記述する情報を検査することによって、行なうことができ、この情報は、メッセージのためのタイプフィールドおよびアドレスフィールドからのデータを含むことが好ましい。信号は、入力ＦＩＦＯがメッセージに関係するとき、スロットが使用可能であり、入力ＦＩＦＯはメッセージを受け入れることができること、および／または、通過ＦＩＦＯがメッセージに関係するとき、通過ＦＩＦＯはメッセージを受け入れることができることを指示することができる。
【０１１９】
一実施形態では、下流の隣接リングメンバによって生成される信号は、単一のクロックサイクル中にラウンドトリップ形式で、上流リングメンバから下流リングメンバへ、次いで上流リングメンバに戻るように送信されたデータに基づいて生成される、バックプレッシャー信号である。さらに、一実施形態では、各リングメンバはリングインターフェイスを有し、各リングインターフェイスは、バックプレッシャー信号を含む信号を使用または提供する４つのインターフェイスを有する。
【０１２０】
本発明のもう１つの実施形態によれば、複数のリングメンバを含むリングネットワーク上でメッセージの送信をコントロールする方法が提供される。この方法は、第２の隣接する下流リングメンバへの出力のために使用可能であるメッセージを、第１の上流リングメンバで提供するステップと、信号を上流リングメンバで、下流リングメンバから受信し、この信号は、メッセージをクロックサイクルで出力するためにスロットが使用可能であるかどうかを指示するステップと、スロットが使用可能である場合、メッセージを上流リングメンバから下流リングメンバに出力し、スロットが使用可能でない場合、メッセージを保持するステップとを含む。
【０１２１】
一実施形態では、信号は、メッセージの内容に基づいて生成される。この場合、信号を、メッセージが下流リングメンバによって消費されるか、さらなる下流リングメンバまで通過するかに基づいて生成することができる。メッセージの内容は、メッセージタイプの少なくとも一部および／またはメッセージアドレスの少なくとも一部を含むことが好ましい。
【０１２２】
さらに一実施形態では、下流リングメンバは入力ＦＩＦＯおよび通過ＦＩＦＯに結合され、下流リングメンバは、どちらのＦＩＦＯがメッセージに関係するかを判断する。下流リングメンバはまた、関係するＦＩＦＯがメッセージを受け入れることができるかどうかを判断することもできる。
【０１２３】
Ｉｍｅｓｓａｇｅパスは、このメンバに指定されたメッセージである。上の図の各メッセージバスは実際には３つのフィールドである、タイプ／８、アドレス／２０、データ／６４の集まりである。これは、４つのインターフェイスのうち３つについて当てはまる。Ｉｍｅｓｓａｇｅパスでは、大部分の場合、タイプをワーク／プログラムおよび読み取り／書き込みまで減らすことができる。また、最終およびサイズのように、タイプのいくつかの他のビットが必要とされる可能性がある。アドレスフィールドでは、低位ビットのみが必要とされる。必要とされるアドレスビットは、内部モジュールアドレス空間をカバーするビットである。このデータフィールドを、いくつかの場合、３２ビットまたはそれより少なくまで減らすことができ、たとえば、８ビットＵＡＲＴである。Ｉｍｅｓｓａｇｅ  ｆｉｆｏを、他のｆｉｆｏの非常に低減されたバージョンにすることができる。
【０１２４】
Ｏｍｅｓｓａｇｅ  ｆｉｆｏ２８２は、ローカルで発信するメッセージを外側のリングに送信する。これは全フィールドをサポートしなければならず、これは多数の種類のメッセージが生成される可能性があるからである。図２８を見るとわかるように、ＯＫ信号２８４は送信側メンバ２６８において発信する。これは、メッセージタイプおよびアドレスを作成することにより開始する。タイプおよびアドレスフィールドはメンバ２７０に移動するのに対して、これらの２つのフィールドを使用して、メッセージが通過メッセージであるか、そこで終了してメンバ２７０によって消費されるかについての判断が行なわれる。各場合に、対応するｆｉｆｏのステータスがＯＫ信号として戻るように送信される。次の立上りクロックはこのＯＫ信号をサンプリングして、前のメッセージまたは新しいメッセージをｍｕｘするか、あるいはアイドル状態となる。示したように、ＲＩＦのすべての４つのインターフェイスは、それらのＯＫ信号と共に類似のターンアラウンドを有する。
【０１２５】
入力メッセージのルーティング
図２９を参照して、本発明の少なくとも１つの実施形態による、入力メッセージをルーティングするための例示的プロセスを例示する。例示のように、モジュールへの入力メッセージが最初に検査されて、このメッセージが管理であるか、ワーク／プログラムメッセージであるかが判断される。アドレスフィールド２９０を使用して、メッセージの指定アドレスを決定することができる。一実施形態では、モジュールのアドレスが２のべき乗に位置合わせされるので、アドレスマスク２９２（「スプリットマスク」と呼ばれる）を使用して、アドレスのビットのサブセットのみを比較することができる。アドレスの下位部分２９４がモジュールに、内部アドレスとして渡される。ビットのサブセットが、（列挙プロセス中に得られた）モジュールに関連付けられたアドレスを含む自己アドレスレジスタ２９６に対して比較される。サブセット２９４が自己アドレスレジスタ２９６に合致した場合、モジュールはこのメッセージがこのモジュールにアドレス指定されるべきであると見なすことができる。「アワーズ／通過指示」を使用して、正しいＤＯＫ（ダウンｏｋ）信号を作成し、上の考察は管理メッセージを無視する。管理のいくつかは、アドレスフィールドを異なるように使用し、これはそれらがすべてのメンバに適用されるときである（列挙）。管理メッセージのいくつかは、メンバからの応答である。これらのメッセージは、送信者のアドレスを搬送する。
【０１２６】
図３０〜３３を参照して、ＲＩＦ３００の例示的実施態様をより詳細に例示する。
主なＲＩＦレジスタには、以下が含まれる。
ｓｅｌｆ＿ａｄｄｒｅｓｓ＿ｖａｌｉｄビットフリップフロップ：列挙が実行され、アドレスが割り当てられたという指示。
ｓｅｌｆ＿ａｄｄｒｅｓｓ：自己アドレスの値。このレジスタは通常２０ビットであるが、より少ないビットを使用することができ、このレジスタの下位部分は通常ゼロである。
【０１２７】
ｉｄｎｕｍｂｅｒ：関連付けられたメンバを識別するために使用される定数パラメータ。
ＡＤＤＲＥＳＳ＿ＳＰＡＣＥ：これは、内部アドレス空間によって使用されたビットの数である。これは、リングメンバによって要求されたアドレス空間を計算するために使用される。
【０１２８】
ａｃｔｉｖａｔｅｄビット：このビットはハードウェアリセットでリセットされ、さらに「起動」メッセージによって修正される。このビットがアクティブである場合、リングインターフェイスはワークモードである。これはワークメッセージを処理する。このビットが非アクティブである場合、リングメンバはプログラミングまたは起動を待機するべきである。
【０１２９】
起動レジスタにおけるｓｃａｎ＿ｅｎａｂｌｅｄビット：モジュールをスキャンモードにする。ハードウェアリセットによりリセットされ、さらに「起動」メッセージにより修正可能である。
ｉｎ＿ｖｉｖｏ  ｓｃａｎ  ａｎｄ  ｒｅｌａｔｅｄ：正常なワークの割り込み中のすべてのレジスタのスキャンアウト。これはモジュール毎に行なわれる。
【０１３０】
ＲＩＦ信号説明
慣例により、入力という用語は、リングインターフェイスに入る信号を指し、出力は、リングインターフェイスによって駆動された信号を指す。
後続のリングメンバへ／前のリングメンバからのピンには、以下が含まれる。
ｒｉｆ＿ｄ＿ｔｙｐｅ［７：０］：入力、メッセージタイプ。
ｒｉｆ＿ｄ＿ａｄｄｒ［１９：０］：入力、メッセージアドレス。
ｒｉｆ＿ｄ＿ｄａｔａ［６３：０］：入力、メッセージデータ。
ｒｉｆ＿ｄ＿ｏｋ：出力、バックプレッシャー、前のメンバに戻る。
ｒｉｆ＿ｄ＿ｃｌｏｃｋ：入力、信号におけるクロック。
ｒｉｆ＿ｄ＿ｓｃａｎ：スキャンモード使用可能（実際のｍｕｘｉｎｇ信号、テストモードではない）。
ｒｉｆ＿ｄ＿ｒｅｓｅｔ：入力、ｈ／ｗリセット。
ｒｉｆ＿ｄ＿ｐａｓｓｅｄ＿ｍｅ：入力、メッセージがブリッジまたはアンカーをすでに通過したことを示す。
【０１３１】
リングメンバに入るメッセージのためのピンには、以下が含まれる。
ｒｉｆ＿ｉ＿ｗｒｉｔｅ：出力、このメッセージは有効な書き込みであり、プログラムまたはワーク書き込みから来ることができる。ＲＩＦモジュールは、プログラム書き込みの場合のオプションビット（以下を参照）を修正する。
ｒｉｆ＿ｉ＿ｒｅａｄ：出力、このメッセージは有効な読み取りである。
【０１３２】
ｒｉｆ＿ｉ＿ｏｐｔｉｏｎｓ［５：０］：出力、メッセージにおけるタイプのビットの残り。これらのビットはより高度なメンバに関連し、最終などにおいてスヌープする。単純なメンバについては、これらを使用する必要はない。オプションビットは、２つの可能な解釈のうち１つを有する。１つは読み取り用で、１つは書き込み用である。書き込みについては、スヌープ、最終およびサイズである。読み取りについては、スヌープを可能にする、応答の幅（たとえば、６４ビットまたは３２ビット）、最後のアドレス修正を可能にする（フレームの終わりの指示）、最初のアドレス修正を可能にする（フレームの開始）、および宛先の増分である。メッセージタイプ符号化を参照して上述した。
【０１３３】
ｒｉｆ＿ｉ＿ａｄｄｒ［１５：０］：出力、アドレスの関連部分。
ｒｉｆ＿ｉ＿ｄａｔａｌ［３１：０］：出力、データ低の関連部分。
ｒｉｆ＿ｉ＿ｄａｔａｈ［３１：０］：出力、データ高の関連部分。
ｒｉｆ＿ｉ＿ｏｋ：入力、ＲＩＦに、メッセージがメンバによって受け入れられることを伝える。次のクロックにおいて、新しいメッセージを送信することができる。
【０１３４】
ＲＩＦに入るコントロールピンには、以下が含まれる。
ｒｉｆ＿ａｃｔｉｖａｔｅｄ：出力、起動レジスタにおける起動ビットを反映し、使用可能にされない場合、このビットは、ワークメッセージがメンバに入ること／メンバを出ることを防止する。また、周辺デバイスは、このビットが無効にされると、送信／受信オペレーションを開始するべきではない。
【０１３５】
ｒｉｆ＿ｒｅｓｅｔ：出力、ハードリセットまたはソフトリセット。
ｒｉｆ＿ｓｃａｎ＿ｍｏｄｅ：出力、起動レジスタにおけるスキャンビットを反映し、使用可能にされる場合、このメンバはスキャンテスト下にある。
ｒｉｆ＿ｓｃａｎ：出力、使用可能にされる場合、スキャンオペレーションのシフトにおいて、ｍｕｘｉｎｇ信号をスキャンし、モードにより無効にされた場合、取り込みを意味する。
【０１３６】
ｒｉｆ＿ｓｅｌｆ＿ａｄｄｒｅｓｓ［１９：０］：出力、自己アドレス。
ｒｉｆ＿ｃｌｏｃｋ：ローカルフリップフロップのためのクロック。
ｒｉｆ＿ｕｓｅｒ＿ｉｄ［１：０］：モジュールＩＤ入力のユーザ定義変更子。
ｒｉｆ＿ｕｓｅｒ−ｃｏｎｔｒｏｌ［３：０］ユーザ定義および使用のための起動レジスタからのビット。
【０１３７】
リングの次のメンバに進むメッセージのためのピンには、以下が含まれる。
ｒｉｆ＿ｕ＿ｔｙｐｅ［７：０］：出力。
ｒｉｆ＿ｕ＿ａｄｄｒ［１９：０］：出力。
ｒｉｆ＿ｕ＿ｄａｔａｌ［３１：０］：出力、データ低。
ｒｉｆ＿ｕ＿ｄａｔａｈ［３１：０］：出力、データ高。
ｒｉｆ＿ｕ＿ｏｋ：入力、次のメンバからのバックプレッシャー。
ｒｉｆ＿ｕ＿ｃｌｏｃｋ：出力、クロックアウト信号。
ｒｉｆ＿ｕ＿ｓｃａｎ：出力、スキャンモード使用可能（実際のｍｕｘｉｎｇ信号、テストモードではない）。
ｒｉｆ＿ｕ＿ｒｅｓｅｔ：出力、ハードウェアリセット。
ｒｉｆ＿ｕ＿ｐａｓｓｅｄ＿ｍｅ：出力、メッセージがブリッジまたはアンカーをすでに通過したことを示す。
【０１３８】
メンバを出るメッセージのためのピンには、以下が含まれる。
ｒｉｆ＿ｏ＿ｔｙｐｅ［７：０］：入力、メッセージタイプビット（ｔｙｐｅ［７：３］！＝０）は有効な指示として動作する。
ｒｉｆ＿ｏ＿ａｄｄｒ［１９：０］：入力、メッセージアドレス。
ｒｉｆ＿ｏ＿ｄａｔａｌ［３１：０］：入力、メッセージデータ低半分。
ｒｉｆ＿ｏ＿ｄａｔａｈ［３１：０］：入力、メッセージデータ高半分。
ｒｉｆ＿ｏ＿ｒｅｐｌａｃｅ：入力、ｄａｔａｌの関連部分を自己アドレスビットで置き換えるための要求。
ｒｉｆ＿ｏ＿ｏｋ：出力、メンバに、メッセージがＲＩＦによって受け入れられることを伝える。
【０１３９】
アンカーＲＩＦインターフェイス
アンカーＲＩＦインターフェイスは、一実施形態では、通常のリングメンバによって使用されるＲＩＦインターフェイスにおける変形形態である。これはもう１つの状態変数である、アクティブ／パッシブアンカーを有する。列挙メッセージがｄｍｅｓｓａｇｅ入力を通じて来る場合、アンカーはそれ自体をパッシブと宣言する。列挙メッセージがｏｍｅｓｓａｇｅ入力から来る場合、アンカーはそれ自体をアクティブアンカーと宣言する。アクティブアンカーはすべての管理メッセージを消費するのに対して、通常のＲＩＦでは、管理メッセージは、それらすべてをｉｍｅｓｓａｇｅ出力に渡すことによって無視される。ワークメッセージでは、もう１つの違いがある。アンカーは、他のいずれかのリングメンバのように、自己アドレス空間を有する。アンカーアドレス空間にアドレス指定されたワークメッセージは消費される。アンカーはまた、浮遊メッセージキル（上述）にも関与する。メッセージが列挙アドレス空間の上（または下）でアドレス指定した場合、これはキャッチされ、アンカーによって廃棄される。
【０１４０】
ブリッジＲＩＦ
ブリッジの主要な機能は、トラフィックを複数のリングの間に向けて送ることである。列挙中にブリッジは、トポロジについて知る必要があることをすべて学習する。ブリッジの信号インターフェイスは、通常のＲＩＦの２つのセットに等しい。例外はクロックのみであり、これはツリートポロジを有する。他のタグアロング信号は、スキャンのように、最長（交差）ルートを取る。ハードウェアの観点からは、ブリッジを、連続して接続された２つのＲＩＦと見なすことができる。しかし、ブリッジは追加の機能性を提供する。一例としては、ブリッジは最初の入力を記録して列挙メッセージを受信する。列挙によってヒットを最初に得る幸いな端には「近い」とラベルが付けられ、これはこの端がアンカーにより近いからである。他方の端には「遠い」とラベルが付けられる。また、入力列挙アドレスは「低い」範囲として記録される。列挙メッセージは他方の「遠い」側に送信される。これが遠い側でｄｍｅｓｓａｇｅ入力を戻すとき、アドレスが再度「高い」アドレスとして記録される。この時点で、ブリッジは動作する準備ができている。
【０１４１】
正常なオペレーション中に、管理要求メッセージは、一実施形態では、他方の側に横断させられる。管理応答メッセージは「近い」ｕｍｅｓｓａｇｅ出力に移動される。プログラム書き込みメッセージおよびプログラム読み取り要求は、ワークメッセージとして扱われる。プログラム読み取り応答は「近い」ｕｍｅｓｓａｇｅ出力に移動される。ワークメッセージは、下／上限に基づいてルーティングされる。メッセージアドレスが下／上限の間である場合、ワークメッセージは「遠い」ｕｍｅｓｓａｇｅ出力に移動される。そうでない場合、「近い」側がワークメッセージを得る。「遠い」側はまた、浮遊メッセージの検出および除去にも関与する。
【０１４２】
一実施形態では、メッセージはメンバモジュールに、ｒｉｆ＿ｉ＿＊信号を通じて見える。
これらの信号には、以下が含まれる。
ｒｉｆ＿ｉ＿ｗｒｉｔｅ：クロックの立上りエッジの直後に変化する。アクティブである場合、有効書き込みメッセージが到着したことを意味する。有効は、正しいタイプおよびコンテキストを意味し、ユーザは、復号化メッセージタイプなどについて心配する必要がない。
【０１４３】
ｒｉｆ＿ｉ＿ｒｅａｄ：同様に変化し、有効読み取りメッセージが到着したことを意味する。
ｒｉｆ＿ｉ＿ｏｐｔｉｏｎｓ［５：０］：メッセージのタイプ部分から抽出されたビット。読み取りでは、これらはスヌープ、幅、最終、最初および増分を意味し、書き込みでは、これらは最終、スヌープおよびサイズビットを意味する。
【０１４４】
ｒｉｆ＿ｉ＿ｏｋ：メンバはリングインターフェイスへの肯定応答を生成する。この信号は、ｒｉｆ＿ｉ＿ｒｅａｄまたはｒｉｆ＿ｉ＿ｗｒｉｔｅが有効になる直後に有効にされる（またはネゲートされる）べきである。ＯＫがこのサイクル中にネゲートされる場合、次のサイクルで同じメッセージデータが駆動される。メンバは、この信号を真にアクティブに保つためにあらゆる努力をするべきである。
【０１４５】
ｒｉｆ＿ｉ＿ａｄｄｒ［１９：０］、ｒｉｆ＿ｉ＿ｄａｔａ［３１：０］およびｒｉｆ＿ｉ＿ｄａｔａｈ［３１：０］
ＲＩＦに入る汎用コントロールには、以下が含まれる。
ｒｉｆ＿ｃｌｏｃｋ：クロック。
ｒｉｆ＿ｒｅｓｅｔ：リセット。
ｒｉｆ＿ａｃｔｉｖａｔｅｄ：メンバが動作するためのｏｋを受信した。この信号は、Ｒｘ周辺デバイスが、起動なしにいかなるものの邪魔も開始しないようにするために有用である。
ｒｉｆ＿ｓｅｌｆ＿ａｄｄｒｅｓｓ［１９：０］：リング上の自己アドレス。
メンバを出てｒｉｎｇ＿ｃｏｎｔｒｏｌに入る一定のコントロールには、以下が含まれる。
【０１４６】
ｍｏｄｕｌｅ＿ｉｄ［７：０］これらの２ビットをメンバによって使用して、それら自体について特有なことをシステムに伝えることができる。たとえば、イーサネット（登録商標）ＭＡＣはこれらの信号の１つを使用して、それらが１０または１００ｍビット接続されるかどうかを世界に伝えることができる。
【０１４７】
ｒｉｆ＿ｏ＿ｔｙｐｅ［７：０］は、出力メッセージのタイプである。
ｒｉｆ＿ｏ＿ａｄｄｒおよびｒｉｆ＿ｏ＿ｄａｔａｌ／ｄａｔａｈは、メッセージビットの残りである。
ｒｉｆ＿ｏ＿ｏｋ：現在のサイクルでこの信号が非アクティブである（低い）場合、メッセージを次の正のエッジで変更しない。
【０１４８】
Ｒｉｎｇ＿ｃｏｎｔｒｏｌパラメータには、以下が含まれる。
ｒｉｎｇ＿ｉｎｔｅｒｆａｃｅ＿ｕｎｉｔ（ｒｉｎｇ＿ｃｏｎｔｒｏｌとも呼ばれる）は２つのパラメータを有し、これはｖｅｌｉｒｏｇインスタンス時間で設定されるべきである。ＡＤＤＲＥＳＳ＿ＳＰＡＣＥ：この数は、メンバに入るべきである内部アドレスラインの数を示す。たとえば、メンバは２５６バイトの内部メモリマップを有し、これは、この空間をアドレス指定するために８アドレスラインを必要とする。そのＡＤＤＲＥＳＳ＿ＳＰＡＣＥは８に設定されるべきである。これはまた、このメンバへのメッセージを認識するために、メッセージアドレスの１２個の最上位ビットが使用されることも意味する。ＭＯＤＵＬＥ＿ＩＤ：各ハードウェアリングメンバはたとえば、一意のＩＤのための８ビットを得る。このＩＤは同じハードウェアのすべてのインスタンスに特有であり、たとえば、すべてのイーサネット（登録商標）ＭＡＣは同じＩＤを有する。異なるＭＡＣの間で区別するため、ｓｅｌｆ＿ａｄｄｒｅｓｓおよびｕｓｅｒ＿ｉｄビットを使用することができる。モジュールＩＤをアンカーによって、Ｗｈｏ＿Ａｍ＿Ｉメッセージを使用して検査することができる。モジュールＩＤは通常、いずれかのモジュールによる応答の一部である。
【０１４９】
リング上のリセット
各リングベースのＳＯＣは通常、ただ１つのアンカーを有する。ハードウェアリセットはこのアンカーで開始する。アンカーはｈｗ＿ｒｅｓｅｔ入力ピンを有する。このピンから、リセットが２つの方向に送信される。一方の方向は、リングを下がる方向である。他方の方向は、アンカー、たとえばパケットプロセッサをホストするモジュールへの方向である。リセットはリング中を、論理リング順で伝播する。これはすべての管理メッセージが取る同じパスであるが、リセットはメッセージというよりむしろ信号である。しかし、これは無条件に各リングメンバでフリップフロップされる。また、ソフトリセットをリングメンバにおいて、起動メッセージを使用して強制することも可能である。
【０１５０】
本発明の一実施形態によれば、リングベースのシステムが提供される。リングベースのシステムは、リングネットワーク上でポイントツーポイント接続性を使用して通信する、複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージとを含み、システムは、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合され、メッセージは所与のリングメンバのソフトリセットなどのリセットを、メッセージがそのリングメンバに適用可能である場合に引き起こす。メッセージは、所与のリングメンバに対応するアドレス情報を含むことが好ましい。メッセージは、リセットを引き起こすための少なく１つのビットを含む起動メッセージを含むことができる。
【０１５１】
メッセージは、一実施形態では、メッセージからの少なくとも１つのビットを所与のメンバのためのリングインターフェイスに書き込むことによって、リセットを引き起こす。この場合、リングインターフェイスは、メッセージによってリセットされるビットを含むことができ、このビットは、起動ビットまたはリセットビットを含むことが好ましい。リングインターフェイスを、リセットを引き起こすための、所与のリングメンバへの出力を提供するように適合させることができ、出力は、所与のリングメンバに結合されたコントロールピンを含むことが好ましい。
【０１５２】
本発明のもう１つの実施形態によれば、リングベースのシステムが提供される。リングベースのシステムは、リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージとを含み、システムは、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合され、システムは、リングネットワークの多数のメンバをリセット（ハードリセットなど）させるリセットコントロール信号をさらに含む。
【０１５３】
リセットコントロール信号は、メッセージと無関係に送信されるハードウェア信号を含むことができる。さらに、リセットコントロール信号を、メッセージとは異なるライン上で送信することができる。リセットコントロール信号を、リセット信号が発信した元のメンバを除いて、すべてのリングメンバをリセットさせるように適合させることができる。リセットコントロール信号は、一実施形態では、多数のメンバに対応するリングインターフェイス内のビットのリセットを引き起こすことによって、リセットを引き起こす。この場合、リングインターフェイスは、出力をそれらの対応するリングメンバに提供して、リセットを引き起こすことができ、出力は、対応するリングメンバに結合されたコントロールピンを含むことができる。
【０１５４】
本発明の追加の実施形態によれば、リングベースのシステムが提供される。リングベースのシステムは、リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージと、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合されるシステムとを含み、システムは、メッセージがそのリングメンバに適用可能である場合、所与のリングメンバのリセットを引き起こすことができるメッセージを含み、システムは、リングネットワークの多数のメンバをリセットさせる、リセットコントロール信号をさらに含む。リセットを引き起こすことができるメッセージは、所与のリングメンバのソフトリセットを引き起こすことができ、リセットコントロール信号は、多数のメンバのハードリセットを引き起こす。
【０１５５】
メッセージタイプおよびフォーマット
メッセージはおおよそ４つのカテゴリになる。
管理要求−リセット、列挙、Ｗｈｏ＿Ａｍ＿Ｉ要求、起動、フリーズを含む。これらのメッセージはアンカーによって生成され、ネットワーク中にフラッディングされる。
管理応答−例外、ＷｈｏＡｍＩ＿応答を含む。これらの管理メッセージは通常のメッセージによって生成され、アンカーにその注意のためにフロートされる。
プログラミング−通常のワーク書き込みおよび読み取りメッセージを含む。
ワーク−ｗｏｒｋ＿ｒｅａｄおよびｗｏｒｋ＿ｗｒｉｔｅを含む。
【０１５６】
列挙メッセージ：列挙（または「Ｅｎｕｍ」）メッセージは、アクティブアンカーによって開始される。各リングシステムでは、ただ１つのアクティブアンカーが存在する。アンカーは、列挙をｏｍｅｓｓａｇｅ入力を介して開始するように伝えられる場合、それがアクティブであると判断する。列挙メッセージは、ヘッダフィールド、データフィールド、次に使用可能なアドレスフィールド、リングＩＤなどを含むことができる。リングＩＤは、メッセージがブリッジを横断するたびにフリップされるビットである。これは、あらゆるリングインターフェイスにおける起動レジスタに記録される。このビットを後にソフトウェアによって、厳密なリングトポロジを決定するために使用することができる。
【０１５７】
Ｗｈｏ＿ａｍ＿Ｉメッセージ：トポロジを学習するために、アンカーはＷｈｏＡｍＩ＿要求メッセージを開始する。このメッセージを受信する各メンバは最初にこれに応答し、次いで要求メッセージをリレーする。この順序は、アンカーが要求メッセージを、すべての応答の後にのみ見ることを保証する。したがって、ＷｈｏＡｍＩプロセスが終了したことを決定することができる。要求メッセージでは、通常使用されるフィールドはタイプフィールドである。メッセージのアドレス部分は、モジュールのＳｅｌｆ＿Ａｄｄｒｅｓｓである。データフィールドはモジュールについての情報を保持する。
【０１５８】
起動メッセージ：起動メッセージはアンカーを通じて発行される。これは特定のメンバのアドレス、および、起動レジスタに書き込むために使用されるデータフィールドにおける少数のビットを搬送する。起動レジスタにおけるビットは、メンバの状態および挙動をコントロールする。
フリーズメッセージ：フリーズメッセージはリングの障害を除き、すべてのメンバを非活動化する。
【０１５９】
モジュールおよびリングネットワークビルダのためのツール
先書きモード−リングベースのアーキテクチャにおける読み取りオペレーションは通常、書き込みオペレーションよりもはるかに多くの時間がかかるものである。したがって、本発明の少なくとも１つの実施形態のもう１つの発明の態様では、ステータスレジスタが通常ＣＰＵによって、データを送信または受信する前に検査される。一般に、ステータスを速く得ることが望ましい。ＣＰＵから周辺デバイスへ、および戻りの双方向トリップの遅延はしばしば受け入れられないものである。本発明は、周辺デバイスが、そのステータスが変化するたびに、それを先にＣＰＵのＲＡＭまたは他のデバイス内の１つまたは複数の事前に準備された位置に送信すると規定する。この考えの延長は、あらゆる重要な読み取りを先送り書込み（send-ahead write）に変えることである。本質的には、ある周辺デバイスにおいて重要なパラメータが変化するたびに、その値が、尋ねる側の空間における同意済メモリに書き込まれる。たとえば、ＣＰＵは、いくつの空きエントリがユートピアｆｉｆｏ内にあるかを知る必要がある。ＣＰＵによって開始された読み取りオペレーションを行なうのではなく、ｆｉｆｏは、この数が著しく変化するたびに、これをＣＰＵのＲＡＭのある同意済位置に書き込む。ＣＰＵはこのとき、そのローカルメモリを読み取るだけでよい。
【０１６０】
上の先書き様式を実施するため、本発明の一実施形態によるリングベースのシステムオンチップが提供される。リングベースのシステムは、リング上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージとを含み、システムは、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合される。システムはまた、読み取りメッセージおよび書き込みメッセージを処理するようにも適合される。複数のリングメンバは、ＣＰＵ、および、ＣＰＵと日付を交換する少なくとも１つの周辺デバイスを含み、周辺デバイスは、周辺デバイスのステータスを記述するデータを格納する少なくとも１つのステータスメモリを含み、システムは、ＣＰＵによってアクセス可能であるステータス変化を先書きするように構成される。
【０１６１】
システムをまた、そうでない場合はＣＰＵによって読み取りオペレーションとして開始されるステータス変化の先書きを実行するように適合させることもできる。同様に、先書きオペレーションを、そうでない場合はＣＰＵによって規則的に開始される、読み取りオペレーションに基づいて発生するようにプログラムすることができる。システムを、ＣＰＵ上のＲＡＭ、またはＣＰＵによってアクセス可能であるＲＡＭへ、ステータス変化を先書きするように適合させることができる。ＣＰＵは、通信チップにおけるコントロール・プロトコル・プロセッサ、または、通信チップにおけるネットワークプロセッサを含むことができる。ステータスメモリは少なくとも１つのステータスレジスタを含むことができる。
【０１６２】
少なくとも１つの実施形態では、先書きオペレーションは、いくつかの周辺デバイスのステータス変化について実行されるが、他の周辺デバイスのステータス変化については実行されない。加えて、先書きオペレーションは、ステータス変化の性質に応じて、実行されるかあるいは実行されない。別法として、先書きオペレーションは、ステータス変化の大きさまたは量に基づいて、実行されるかあるいは実行されない。
【０１６３】
本発明のもう１つの実施形態によれば、通信プロセッサまたはネットワークプロセッサなど、リングベースの通信システムにおける先書き方法が提供される。この方法は、リングネットワークにおいて、リングネットワークにおけるプロセッサにとって常に関心のあるステータス情報を格納するステータスレジスタを含む、少なくとも１つのモジュールを識別するステップと、どのステータス情報をプロセッサに、少なくとも１つのモジュールによって開始された先書きオペレーションとして、処理によって開始された読み取りオペレーションの代わりに送信することができるかを識別するステップと、少なくとも１つのモジュールを、識別されたステータス情報を先書きオペレーションとして送信するようにプログラムするステップとを含む。一実施形態では、プログラムするステップは、プロセッサによって開始された読み取りオペレーションの平均数を減少させる。
【０１６４】
一実施形態では、識別は、どのステータス変化がプロセッサにとって決定的な重要性のあるものか、あるいは常に関心のあるものかを識別するステップを含む。別法として、識別は、何の大きさまたはレベルのステータス変化が先書きオペレーションを引き起こすかを識別するステップを含むことができる。
【０１６５】
ランドブリッジ−リング上の大部分のメンバは通常、非対称の方法で通信する。たとえば、ＥｎｅｔＲｘ（イーサネット（登録商標）受信）トラフィックは主に周辺デバイスからパケットプロセッサへのものである。ＥｎｅｔＴｘ（イーサネット（登録商標）送信）は、逆のものである。メンバのペアは、それらの関係において一方が主に送信者であり、他方が主に受信者である場合、非対称である。この場合、送信者を受信者から上流に置くことは意味を成す。しかし、いくつかのペアはほとんど対称である。ＤＭＡとペアにされたパケットプロセッサは、このような一例である。したがって、それらがリング上にどのように配置されようと、一方向は辛抱することを強いられる。この場合、１つまたは複数のランドブリッジが一般に解決策を提供する。
【０１６６】
図１４を参照して前述したように、単一のランドブリッジを追加して、リングの２つのメンバの間のレイテンシを最小限にすることができる。図３４に例示するように、２つまたはそれより多いブリッジ３３２、３３４をリング３３６に追加して、いずれかの２つのリングメンバの間のモジュールの数をさらに最小限にすることができる。各ブリッジ３３２、３３４は２つのインターフェイス（メンバ）をリングネットワークに追加するが、これは一般にレイテンシに著しく影響を与えず、これはブリッジにより、メッセージがリングネットワークの周辺全体を移動する可能性が低いからである。
【０１６７】
外部リングインターフェイスの実施
図３５を参照して、本発明の一実施形態による例示的外部リングインターフェイス３４０を例示する。２つのメンバの間のリング接続は、１００を超える信号を含むことができる。各メッセージはたとえば、少なくとも１０４もの信号を含むことができる。したがって、この量のピン（２倍）を追加して外部リングインターフェイスを実施することは、妥当ではない可能性がある。したがって、ユートピアなど、兼用周辺インターフェイス３４０を実施することが好ましい可能性がある。ユートピアインターフェイスのための標準のオペレーションのモードは、ＡＴＭセルの送信／受信である。類似の方法で、２つのネットワークプロセッサなど、２つのリングネットワークをユートピアインターフェイスにより連続して接続することができる。このモードでは、セルの代わりに、ユートピアピンがメッセージを搬送する。これは特定のリング速度を低下させるが、チップ速度は低下させず、これは、ユートピアインターフェイスがブリッジの後ろにある場合、他方の側へのメッセージのみの速度が低下されるが、内部メッセージの速度は低下されないからである。ユートピア基盤をこのために使用すると、外部ＦＰＧＡ３４４（フィールド・プログラマブル・ゲート・アレイ）を新しい周辺デバイスとして接続することもできる。
【０１６８】
以下は、本発明のリングトポロジに関連付けられた、特定された利点のいくつかの包括的でないリストである。すなわち、高速回路設計−すべての接続が、ポイントツーポイントの無方向性接続であること。拡張性アドレスルーティングが解決された後、実際のトポロジを比較的容易に変更することができること。スイッチファブリックはソフトウェアには透過的であり、遅延のみがトポロジによって影響を受けること。通常はクロスバーまたはスイッチ設計よりも実装が容易であること。デバッグおよびテスト可視性−各メンバを単独で検査および動作させることができること。遅れてロードバランシングを処理する可能性−異なる周辺デバイスを異なるＣＰＵに割り当てることができること。および、正確なチップ全体のクロック位置合わせのための必要がない可能性−クロックをメッセージに沿って流れるように適合させることができることである。
【０１６９】
様々なＣＰＵのいかなるものも、本明細書で説明するリングネットワークトポロジのモジュールとして実装することができるが、リングネットワークは特にパケットプロセッサによく適しており、その様々な実施形態を以下で詳細に説明する。本発明のパケットプロセッサは、時として「Ｖｏｂｌａ」、「ネットワークプロセッサ」および類似の変形形態と呼ばれる可能性がある。一実施形態によれば、本発明のネットワークプロセッサは、上述のリングアーキテクチャを使用して相互接続される多数のモジュールを有する、通信プロセッサの一部として実装することができる。通信プロセッサのための、このような構成におけるモジュールは、本発明のネットワークプロセッサ（パケットのデータプレーン処理用）、コントロール・パケット・プロセッサ（「フローマネージャ」としてのコントロールプレーン処理用）、様々な周辺モジュールなどを含むことができる。
【０１７０】
本発明の一実施形態によれば、リングベースのシステムが提供される。リングベースのシステムは、リングネットワーク上でポイントツーポイント接続性を使用して通信する複数のリングメンバと、リングをメンバからメンバへトラバースするメッセージとを含み、システムは、メッセージが所与のリングメンバに到着することにおいて、メッセージがそのリングメンバに適用可能である場合、メッセージがそのリングメンバによって処理され、メッセージがそのリングメンバに適用可能でない場合、メッセージが次のリングメンバに渡されるように適合され、システムは、少なくとも１つの外部周辺デバイスとの通信を可能にする、外部リングインターフェイスを提供するための手段をさらに含む。この手段は、フィールド・プログラマブル・ゲート・アレイ、および／または、リングネットワーク上のメモリポートリングメンバを含むことができる。少なくとも１つの外部周辺デバイスは、ＤＳＰ、暗号化エンジン、外部バス、外部メモリ、第２のリングネットワークなどのうち１つまたは複数を含むことができる。
【０１７１】
一実施形態では、この手段は、リングネットワークのプロトコルと少なくとも１つの外部周辺デバイスの間のハンドシェーキングを実行するように適合され、ハンドシェーキングは、リングネットワークからのメッセージデータをトランザクションデータに変換することを含むことが好ましい。またこの手段によりリングネットワークがメッセージを、少なくとも１つの外部周辺デバイスおよび少なくとも１つの外部周辺デバイスに書き出して、リングネットワークのためにメッセージに変換されたトランザクションを生成できるように適合させることもできる。
【０１７２】
この手段は、一実施形態では、リングネットワークと少なくとも１つの外部周辺デバイスの間の共有メモリとして動作する。この場合、この手段は、リングネットワークから受信されたメッセージのためのＲＡＭとして、かつ、少なくとも１つの外部周辺デバイスから受信されたトランザクションためのＦＩＦＯとして動作するメモリを含むことができる。この手段はまたメモリも含むことができ、リングネットワークはデータをメモリ内のアドレスに書き込んで、少なくとも１つの外部周辺デバイスに割り込みを引き起こすことができる。
【０１７３】
一実施形態では、リングネットワークは第１のチップ上の第１のリングネットワークであり、リングベースのシステムはさらに第２のチップ上の第２のリングネットワークを含み、第１のリングネットワークおよび第２のリングネットワークは、手段を通じて少なくとも１つの外部周辺デバイスにインターフェイスする。
【０１７４】
別法として、リングネットワークは、第１のプロトコルプロセッサおよび第２のネットワークプロセッサを含む第１の通信プロセッサを含むことができ、システムはさらに、第２のプロトコルプロセッサおよび第２のネットワークプロセッサを含む第２の通信プロセッサを含むことができ、第１の通信プロセッサおよび第２の通信プロセッサは、手段を通じて少なくとも１つの外部周辺デバイスにインターフェイスする。
【０１７５】
本発明のさらにもう１つの実施形態によれば、チップ上に実装されたネットワークプロセッサが提供される。ネットワークプロセッサは、ＡＴＭ、フレームリレー、イーサネット（登録商標）およびＩＰを含む複数のプロトコルを処理するための手段であって、追加のプロトコルを処理するためのライブラリコマンドのセットを使用してプログラマブルである手段を含み、前記手段は、論理演算装置（ＡＬＵ）、ロード／ストアユニット（ＬＳＵ）、プレロード／バンプユニット（ＰＢＵ）、レジスタファイルユニット（ＲＦＵ）、エージェントインターフェイス、および内部メモリを含む。ネットワークプロセッサは、一実施形態では、フェッチユニットおよびプログラムシーケンサをさらに含む。
【０１７６】
ＡＬＵを、算術および論理演算をデータオペランドにおいて実行するように適合させることができる。ＬＳＵを、内部メモリにおけるデータオペランドをアドレス指定するためにアドレス計算を実行するように適合させることができる。ＬＳＵは、５つの使用可能なオプションのうち１つに従って有効アドレスを計算し、これらのオプションには、（１）有効アドレスは、ＲＦＵからのレジスタの内容であること、（２）有効アドレスは、ＲＦＵからの第１のレジスタの内容、および、ＲＦＵからの第２のレジスタの内容の和であること、（３）有効アドレスは、ＲＦＵからの第１のレジスタの内容、および、ＲＦＵからの第２のレジスタの、第２のレジスタが指定された数のビットだけシフトされた後の、内容の和であること、（４）有効アドレスは、ＲＦＵからのレジスタの内容、および、命令語において指定された数のビットを占有する変位の和であること、および（５）有効アドレスは、命令語に含まれた絶対アドレスであることが含まれる。ＰＳＵは、一実施形態では、内部メモリから受信された命令の復号化を実行する。フェッチユニットを、何の命令がメモリから、ＰＳＵによる復号化のためにフェッチされるかをコントロールするように適合させることができる。内部メモリを、プログラム情報およびデータを格納するために適合させることができる。
【０１７７】
ＲＦＵは、一実施形態では、現在のタスクのための第１のレジスタファイル、および、次のタスクのためのレジスタ値をプレロードするための第２のレジスタファイルを含む。この場合、現在のタスクＩＤと、第１のレジスタファイルに関連付けられたタスクＩＤの間の比較に基づいて、データが第１のレジスタファイルに読み込まれ、あるいはそこから書き込まれる可能性がある。ＲＦＵはまた、第１のレジスタファイルに格納されていない現在のタスクのためのレジスタ値を格納するための第３のレジスタファイルを含むこともできる。この場合、現在のタスクＩＤ、および、第１のレジスタファイルに関連付けられたタスクＩＤが同じでないとき、データが第３のレジスタファイルに読み込まれ、あるいはそこに書き込まれる可能性がある。一実施形態では、次のタスクを現在のタスクにし、さらに次のタスクをプレロードすることによって、タスクスイッチがネットワークプロセッサによって実行される。タスクスイッチの実行は、タスクスイッチの後に第２のレジスタファイルを第３のレジスタファイルとして扱うことを含むことができる。
【０１７８】
エージェントインターフェイスにより、一実施形態では、ネットワークプロセッサが命令を実行するために外部モジュールにインターフェイスできるようにし、外部モジュールは、ＣＲＣモジュール、暗号化モジュール、ハッシングモジュール、およびテーブルルックアップモジュールのうち１つまたは複数を含むことができる。
【０１７９】
本発明のさらにもう１つの実施形態では、チップ上に実装された通信プロセッサが提供される。通信プロセッサは、ＡＴＭ、フレームリレー、イーサネット（登録商標）およびＩＰを含む複数のプロトコルを処理するための手段を含む、ネットワークワークプロセッサを含み、前記手段は、追加のプロトコルを処理するためのライブラリコマンドのセットを使用してプログラマブルであり、前記手段は、論理演算装置（ＡＬＵ）、ロード／ストアユニット（ＬＳＵ）、プレロード／バンプユニット（ＰＢＵ）、レジスタファイルユニット（ＲＦＵ）、エージェントインターフェイス、および内部メモリを含む。通信プロセッサは、ネットワークプロセッサをコントロールするためのプロトコルプロセッサをさらに含み、プロトコルプロセッサは、コントロールプレーン処理を実行し、ネットワークプロセッサはデータプレーン処理を実行する。ネットワークプロセッサを、フェッチ、復号化、アドレス指定、実行、および書き込みを実行することによって、命令を処理するように適合させることができる。
【０１８０】
一実施形態では、ネットワークプロセッサおよびプロトコルプロセッサはリングネットワーク上のリングメンバであり、複数の他のリングメンバをリングネットワーク上でさらに含む。この場合、ネットワークプロセッサは、リングネットワークへの単一のリングインターフェイスを共有する複数のコンパウンドを含み、コンパウンドは、たとえば、ネットワークプロセッサのためのタスクの実行順序をコントロールするためのドアベルエージェントを含むことができる。コンパウンドはまた、データを内部メモリから読み取るための要求にサービスするためのマルチリーダエージェント、メッセージをリングネットワーク上に送信するためのメッセージセンダエージェント、メッセージを送信してリングネットワーク上のＤＭＡコントローラを開始するためのＤＭＡエージェント、ＣＲＣ計算を実行するためのＣＲＣエージェント、および／または、デバッグモジュールを含むこともできる。
【０１８１】
一般に、パケットプロセッサには、通常は汎用マイクロプロセッサで発見されない以下の機能が含まれる。
ゼロオーバーヘッドのタスクスイッチング−通常、各インターフェイス（Ｉ／ｆ）ポートは、データパス処理をハンドリングするために少なくとも２つのタスク（ＲＸ［受信］、ＴＸ［送信］）を必要とする。いくつかのポートを含むシステムは、各ポートについて約２つまたはそれ以上のアクティブタスクを必要とする。したがって、パケットプロセッサは、最小のオーバーヘッドによりタスクをスイッチすることができるべきである。パケットプロセッサは、シャドウメモリ（４〜８タスク）を、レジスタおよびタスクステータスを格納するために割り振ることができる。ｎｅｘｔ＿ｔａｓｋ＿ｔｏ＿ｒｕｎを選択するための優先権方式はハードウェア（ＨＷ）ベースであり、ＲＩＳＣ（縮小命令セットコンピュータ）モデルにおけるように、ソフトウェア（ＳＷ）によって実行されない。
【０１８２】
並列エンジン−パケットの処理は、並列マシンを使用してパフォーマンスを加速させることができる。この機能の例には、ＤＭＡ、ＣＲＣ、ルックアップエンジンおよび周辺デバイス間転送マシンが含まれる。十分に構築されたパケットプロセッサは、パケットプロセッサをストールさせることなく並列マシンへのトランザクションを共時的に発行および受信するためのメカニズムを適切に有する。
【０１８３】
データ移動−パケット処理は、先入れ先出し（ＦＩＦＯ）メモリから内部メモリへ、内部メモリから外部メモリへのデータ移動、および、その逆も同様に必要とする。これは、並列の直接メモリアクセス（ＤＭＡ）マシンを使用して実行される。データ転送は、境界内で最適化および決定性にされるべきである。よって、正しいメカニズムをＤＭＡとパケットプロセッサの間の適当な位置に置いて、複数のエンジンの間のトランザクションを可能にし、決定性の挙動を保証しなければならない。
【０１８４】
拡張性パケットプロセッサのスループットを拡張する１つの方法は、いくつかのエンジンのインストールによるものである。よって、プログラミングモデルおよびシステムアーキテクチャを、拡張性を受け入れるために十分柔軟性のあるものにすることが望ましい。
【０１８５】
特殊な命令−パケット処理は、汎用プロセッサでは一般的ではない特殊なオペレーションを使用する。「マスク下での直接比較」（特定のビットを突き合わせるため）のような命令、「ＣＲＣ」、「ＤＭＡ」、「ＨＡＳＨ」、「ＬＩＳＴ  ＳＥＡＲＣＨ」のような命令を使用した並列エンジンの起動、および、比較してジャンプのための「スティッキービット」などのメカニズムが、パケット処理の必要性から導出される。
【０１８６】
タスク間通信−タスク間通信はアーキテクチャによってサポートされる。従来のＲＩＳＣマシンは一般にこの通信のためにＳＷを使用する。
効率的なリンクリストオペレーション−リンクリスト、キューおよびバッファのようなデータ構造は、通信システムにおいて一般的である。フレキシブル・パケット・プロセッサは、多数の異なるキュータイプを効率的かつ高速な方法で管理することができるべきである。
【０１８７】
例示的処理要件
本発明の一態様によれば、フレキシブル・パケット・プロセッサは、ＡＴＭ、フレームリレー（ＲＦ）、ＩＰ／イーサネット（登録商標）、ＩＷＦ（パケットへのＴＤＭ）、ワイヤレス基地局のためのＡＡＬ２、ＩＰおよびＭＰＬＳの処理をサポートするべきである。
【０１８８】
ＡＴＭはアクセス空間において圧倒的に最大のアクセス方法である。空間におけるパケットプロセッサは、ＡＴＭ仮想回線（ＶＣ）顧客構内設備（ＣＰＥ）を終端させることができるべきであり、ＡＴＭをスイッチすることができるべきである。ＡＴＭは特に関心の高いものであり、これはＤＳＬ手法の大部分がＡＴＭを搬送波技術として使用するからである。フレームリレーは関心の高いものであり、これは一般に企業アクセスにおいて使用されるからである（たとえば、Ｔ１またはＮｘＴ１を使用）。
【０１８９】
ＬＡＮ空間を支配した後、イーサネット（登録商標）はメトロポリタンエリアネットワーク（ＭＡＮ）のための費用的に有効な技術となりつつある。これは、企業のエッジでの費用のかかるルータ（ＡＴＭではない）の必要性を簡素化する。これは、ＩＳＰ（ＣＬＥＣ［新興地域電話会社］）が古い「電気通信会社」アクセス（専用回線）に取って代わる方法として使用する、新しい手法である。しかし、イーサネット（登録商標）アクセスは、企業の声にどのように対処するかの問題を解決しない。ＩＰ／イーサネット（登録商標）のための通常の要件は、１００ＭｂｐｓでのＩＰルーティングおよびイーサネット（登録商標）ブリッジング、ならびに１Ｇ−Ｅｎｅｔに近づくことである。
【０１９０】
インターワーキング機能（ＩＷＦ）（たとえば、パケットへのＴＤＭ）のためのパケット処理は通常、音声ゲートウェイ（ＶＧ）およびワイヤレス基地局（ＷＢＳ）において見られる。ＶＧはＰＯＴＳ（「一般電話サービス」）ネットワークを一方の側において、パケットネットワークを他方の側においてインターフェイスする。音声通話が複数のネットワークの間で修正（圧縮およびパケット化、または、圧縮解除および回路形成）される。よって、ＶＧでの通常の処理要件には、ＡＡＬ２ストリームの終端、Ｔ１サービスをエミュレートするためのＣＥＳ（回線エミュレーションサービス）（ＡＡＬ１）のためのサポート、ＲＴＰ（リアルタイムプロトコル）（ＶｏＩＰ）パケットの終端などが含まれる。
【０１９１】
ＡＡＬ２処理は、ワイヤレス基地局のための有用なアプリケーションを発見することができる。新しい世代のＷＢＳはＡＴＭをそれらの中枢網として使用する。帯域幅を最適化するために、ＡＡＬ２を、音声およびデータを搬送するために選択することができる。その場合、以下の処理要件の結果として、ＢＴＳ（無線基地局）でのＡＡＬ２終端、ＢＴＳおよびＭＳＣ（移動通信交換局）／ＢＳＣ（基地局コントローラ）でのＡＡＬ２スイッチング、ＡＡＬ２終端がＭＳＣ／ＢＳＣで行なわれること（ＯＣ−３およびＩＰがＩＳＰにルーティングされる）、およびＩＭＡ（Ｉｎｖｅｒｓｅ  Ｍｕｌｔｉｐｌｅｘｉｎｇ  ｏｖｅｒ  ＡＴＭ）がＢＴＳとＭＳＣの間の接続として、冗長性およびコストのために使用されている。
【０１９２】
フレキシブル・パケット・プロセッサはＩＰをハンドリングするべきであり、これはＩＰ処理がアクセス空間における様々なアプリケーションにおいて見られる可能性があるからであり、ＩＳＰ集約ルータ、フレームをハンドリングするためのＤＳＬＡＭ、ケーブルモデムのヘッドエンド、ワイヤレス基地局、ＭＰＬＳ（マルチプロトコル・ラベル・スイッチング）などは、アクセス空間への「新参者」である。これは、トラフィック管理およびサービス品質（ＱｏＳ）コントロールのために使用されている。アクセス機器は、ＭＰＬＳのためのＬＳＲ（エッジデバイス）（ラベルスイッチルータ）をサポートすることが望ましい。
【０１９３】
上に明示したように、アクセス市場は異なるアクセス方法を必要とする。アクセス市場は、これらの異なる方法の間のＩＷＦのための必要性を有し、これは、ユニークな処理能力のための要件を促進する。また、異なる市場区分は、それらの処理要件に関して多数の類似性も有する。したがって、本発明によるフレキシブル・パケット・プロセッサは、この空間において多数のアプリケーションを扱うことができる「アクセスプラットフォーム」の基礎を形成することができる。
【０１９４】
フレキシブル・パケット・プロセッサのアーキテクチャの概要
本発明の様々な実施形態によるフレキシブル・パケット・プロセッサは汎用ネットワークプロセッサコアであり、多数のシステムオンチップ（ＳＯＣ）構成をサポートできるようにする。メモリ、周辺デバイス、アクセラレータ、および他のプロセッサコアを含むモジュールのライブラリにより、様々な高度に統合された費用的に有効なＳＯＣ通信デバイスをパケットプロセッサの周囲に構築させることが可能となる。図３６は、本発明の一実施形態によるネットワークプロセッサコア３５４および関連のＳＯＣコンポーネント（後述）で構成される、例示的ＳＯＣチップ３５０のブロック図を示す。この構成には示さないが、通常のＳＯＣは複数のネットワークプロセッサコア３５４を含むことができる。
【０１９５】
内部メモリ拡張エリア（内部メモリ３５２）−フルコア周波数で動作するオンチップメモリがネットワークプロセッサコア３５４に、このコンポーネントを通じて接続される。内部メモリは単一化され、これをプログラムおよびデータ格納のために使用することができる。ＳＲＡＭまたはＲＯＭなど、異なる技術を使用して内部メモリを実装することができる。
【０１９６】
ネットワークプロセッサコア３５４−ネットワークプロセッサコアは、その中でネットワークデータパスのアプリケーションコードが実行されるプロセッサであり、プログラムシーケンサユニット（ＰＳＵ）、ロードストアユニット（ＬＳＵ）、フェッチユニット（ＦＴＵ）、データ論理演算装置（ＤＡＬＵ）、高速タスクスイッチングのサポートを含むレジスタファイル（ＲＦＵ）、効率的なタスクスイッチングおよびコンテキスト保存およびリストアのためのプレロードおよびバンプユニット（ＰＢＵ）などを含むことができる。これらのコンポーネントを、以下でより詳細に論じる。
【０１９７】
ネットワークプロセッサコアに密結合される「コンパニオン」（時として「コンパウンド」と呼ばれる）は、図３６のドアベル・スコアボード・モジュール（「ドアベル」）である。ドアベルは、周辺デバイス、アクセラレータおよびＤＭＡからのサービスのための要求を受信し、次いで、タスクスイッチがネットワークプロセッサにおいて発生した後、「次のタスクＩＤ」を決定する。
【０１９８】
周辺デバイス拡張エリア３５６、アクセラレータ３５８およびシステム拡張エリア３６０−図３６のこれらのコンポーネントは、ネットワークプロセッサコアとアプリケーションの間のインターフェイスを取る機能ユニットを含み、データを外部入力／出力ソースから送信および受信する機能を含む。加えて、これらのコンポーネントは、パフォーマンスを高めて電力消費量を減らすためにアプリケーションの一部を実行するアクセラレータ３５８を含む。これらのコンポーエントはアプリケーションに特化しており、ホストインターフェイス、外部メモリインターフェイス（たとえば、ＳＤＲＡＭコントローラ）、シリアルインターフェイス（ＵＳＢ、ＵＡＲＴ、ＳＳＩ（［同期シリアルインターフェイス］、タイマ）、通信インターフェイス（ユートピア、ＭＩＩ）、ＣＲＣアクセラレータ、テーブルルックアップコプロセッサ、「高性能」ＦＩＦＯ、データポンプ、直接メモリアクセス（ＤＭＡ）コントローラ、ならびに、パケットプロセッサ（ＰＰ）などの他のＣＰＵコアなど、様々な機能ユニットを含むかあるいは含まない可能性がある。
【０１９９】
コアおよび他のオンチップブロックまたはモジュールの間のデータ交換を提供するため、以下のポートを実装することができる。すなわち、コアとメモリの間のデータ転送のために使用されるデータメモリポート（アドレス、データ読み取りおよびデータ書き込み）と、メモリからコアへのコードをフェッチするためのプログラムメモリポート（アドレスおよびデータ読み取り）と、周辺デバイス、アクセラレータ、ＤＭＡ、高性能ＦＩＦＯなどの密結合された外部ユーザ定義可能な機能ユニットをサポートするためのエージェントポートと、高速タスクスイッチングのためのレジスタのプレロードおよびバンプのために使用されるコンテキストメモリポート（アドレス、データ読み取りおよびデータ書き込み）である。
【０２００】
図３７を参照して、本発明の少なくとも１つの実施形態によるネットワークプロセッサコア３５４を、より詳細に例示する。上述のように、ネットワークプロセッサコアは、一実施形態では以下を含む。
【０２０１】
データ論理演算装置（ＤＡＬＵまたはＡＬＵ）３７０
ＤＡＬＵ３７０（以下でＡＬＵとも呼ぶ）は、算術および論理演算をネットワークプロセッサコアにおけるデータオペランドにおいて実行する。データレジスタを、たとえば、８ビット、１６ビットまたは３２ビットのオペランドとして、３２ビット幅のデータバスを介してメモリから読み出し、あるいはメモリに書き込むことができる。ＡＬＵ３７０のためのソースオペランドは３２ビット幅であり、データレジスタから、あるいは「即値」データ（「Ｉｍｍ」）から発信する。ＡＬＵ演算の結果はデータレジスタに格納される。
【０２０２】
本発明の一態様によれば、ＡＬＵ演算は１クロックサイクルで実行される。各算術演算の宛先をいつでも時間的ペナルティなしに、算術演算の直後の演算のためのソースオペランドとして使用することができる。一実施形態では、ＡＬＵ３７０のコンポーネントは以下の通りであり、すなわち、３２ビットの不飽和型３オペランド算術演算のための整数演算装置、３２ビット論理演算のための論理演算装置、マルチビットシフト、回転、スワップおよびビットフィールド挿入および抽出演算のためのビットフィールドユニット（ＢＦＵ）、および状態コード生成ユニットである。
【０２０３】
ＡＬＵ３７０は、レジスタファイルから２つのオペランドを、二重ソースバス（図３７のｓｒｃ１およびｓｒｃ２）を介して、あるいはレジスタから１つのオペランドを、ソースバスを介して、また第２の即値オペランドを、即値バス（図３７のＤＡＬＵへの「Ｉｍｍ」入力）を介して読み取ることができる。ＡＬＵ３７０は、宛先バス（図３７の「ｄｅｓｔ」）を介して宛先レジスタに結果を生成する。
状態コードはオプショナルで、命令タイプに応じて状態コードレジスタ（Ｒ１レジスタの一部、さらに後述）で生成される。
【０２０４】
ＡＬＵ３７０は、符号付きおよび符号なしの演算をサポートすることができる。符号なしの算術命令の大部分は、符号付き命令と同じく実行される。しかし、いくつかの演算は、特殊なハードウェアを必要とする可能性があり、別々の命令として実装される可能性がある。符号なし比較を実行するとき、たとえば、状態コード計算は符号付き比較とは異なる。符合なしオペランドの最上位のビットは正の重みを有するが、符号付き表現では負の重みを有する。特殊な状態コードおよび命令を、符号付きおよび符号なしの比較をサポートするように実装することができる。
【０２０５】
ロードストアユニット（ＬＳＵ）３７２
ＬＳＵ３７２は、整数演算を使用して、メモリ内のデータオペランドをアドレス指定するために必要とされるアドレス計算を実行する。加えて、ＬＳＵ３７２は「流れの変更」プログラムアドレスを生成する。ＬＳＵ３７２は他のネットワークプロセッサコアのリソースと並列に動作して、アドレス生成のオーバーヘッドを最小限にする。
【０２０６】
ロードまたはストアのためのメモリ位置をポイントするために使用される有効アドレス（ＥＡ）は、以下のオプションの１つに従って計算される。一実施形態によれば、計算結果のうち１６の最下位ビット（ＬＳＢ）のみが考慮される。ＥＡを計算するためのオプションには、以下が含まれる。
【０２０７】
レジスタ間接、更新なし（Ｒｎ）：ＥＡは、レジスタファイルからのレジスタＲｎの内容である。
レジスタＲｉによる索引付け（Ｒｎ＋Ｒｉ）：ＥＡは、レジスタＲｎの内容およびレジスタＲｉの内容の和である。
シフトされたレジスタＲｉによる索引付け（Ｒｎ＋（Ｒｉ＜＜ｍ））：ＥＡは、レジスタＲｎの内容、およびレジスタＲｉの、Ｒｉが左にｍビットだけ事前にシフトされた後の内容の和である。
【０２０８】
変位による索引付け（Ｒｎ＋ｘｘ）：ＥＡは、レジスタＲｎの内容、および、命令語におけるｍビットを占有する変位ｘｘの和である。変位が符号拡張され、Ｒｎに加算されて、オペランドアドレスが得られる。
絶対アドレス：ＥＡは、命令において表現された絶対アドレスである。
【０２０９】
ネットワークプロセッサレジスタ
ネットワークプロセッサレジスタは３つのタイプ、すなわち、汎用レジスタ（ＧＰＲ）、専用レジスタ（ＳＰＲ）、および隠しレジスタ（ＨＲ）に分類される。汎用レジスタをプログラマによって、データをメモリからロードするため、算術または論理演算を実行するため、データをメモリに戻すように格納するために使用することができる。専用レジスタは、タスクＳＰＲなど、関連付けられた機能性を有するレジスタである。一般にＳＰＲは、メモリから直接ロード、あるいはメモリに直接ストアすることができない。１つの手法によれば、専用の「移動」命令が、汎用レジスタおよび専用レジスタの間でデータを移動させることができる。隠しレジスタは、プログラマに公開されないが、ハードウェア内にマシンコントロールの一部として存在するレジスタである（たとえば、現在のＰＣ［プログラムカウンタ］レジスタ）。
【０２１０】
汎用レジスタファイル３７４
本発明のネットワークプロセッサは、専用レジスタファイルアーキテクチャおよびメモリブロックを含み、これらは多数のタスク（スレッド）を実質的にサイクルペナルティなしで管理することができる。メモリブロックは、タスクのレジスタ内容を格納するための容量を有する。レジスタファイルアーキテクチャは、低減された数の「コンテキスト保存およびリストア」オペレーションを実行し、各アクティブタスクをそれ自体のコンテキストレジスタにより可能にする。
【０２１１】
この手法の利点を以下で詳細に論じ、これには以下のうち少なくともいくつかが含まれる。すなわち、ほぼ無限のタスクのサポート、タスクスイッチにおけるコンテキスト「保存およびリストア」オペレーションのためのサイクルオーバーヘッドがないこと、プログラマに透過的であること、ならびに、費用有効性および低回路オーバーヘッドである。
【０２１２】
マルチタスクスイッチングの問題への１つの従来の手法は、あらゆるタスクスイッチに、通常はソフトウェアによって実行されるコンテキスト保存およびリストアサイクルが付随すると規定する。この手法は余分なサイクルを要する。もう１つの従来の手法は専用回路を使用し、これにより幅広いバスを使用してメモリへのアクセスが可能となり、したがって、多数のレジスタを一度に保存またはリストアすることができる。この手法ではサイクルの数が減るが、メモリへのインターフェイスを複雑にする（ＳｉｅｍｅｎｓによるＴｒｉｃｏｒｅ  ＣＰＵはこの手法を使用する）。もう１つの手法は多数のレジスタファイルを、各タスクにつき１つ使用する。この手法には、タスクの数をレジスタファイルの数に制限する短所があり、これはまたコストのかかる、制限的な解決策でもある。多数のレジスタファイルはまた、ファンアウト制限によりオペレーションの頻度にも影響を与える可能性がある。（この手法を使用した製品には、たとえば、Ｉｎｔｅｌ  ＩＸＰ１２０００およびＬｅｘｒａ  ＮｅｔＶｏｒｔｅｘ  ＬＸ８０００ネットワークプロセッサが含まれる。）
【０２１３】
本発明によって取られる１つの手法によれば、ネットワークプロセッサコアのプログラミングモデルは、３２の汎用レジスタを有する。データメモリデータバス（例えば、図３７を参照すると、「ｓｒｃ１」、「ｓｒｃ２」および「ｄｅｓｔ」バス）を介して、これらのレジスタから読み取るか、あるいはこれらに書き込むことができる。ＡＬＵ命令のためのソースオペランドは、これらのレジスタから発する。本発明の１つの有益な態様によれば、ＡＬＵ命令の宛先はレジスタであり、このような宛先をまた、いつでも時間的ペナルティなしに直後の演算における後続のＡＬＵ命令のためのソースオペランドとして使用することもできる。
【０２１４】
ネットワークプロセッサコア３５４の中心には、３つのレジスタファイルのセット、および専用ハードウェアがあり、このハードウェアは、レジスタを自動的に保存およびリストアしてタスクスイッチがメインフローにおいて最小限のオーバーヘッドにより実装されるようにするための、メカニズムを実装する。タスクを入れると、現在および次のタスク識別子（タスクＩＤ）がサンプリングされる。これらの３つのレジスタファイルは、以下の通りである。すなわち、アクティブレジスタファイル−現在のタスクを実行するために使用されるもの、シャドウ１レジスタファイル−アクティブレジスタファイル内に存在していない、現在のタスクの有効レジスタ値を含むもの、および、シャドウ２レジスタファイル−現在のタスク実行と同時に次のタスクのレジスタ値をプレロードするために使用されるものである。アクティブレジスタファイルは３２の汎用レジスタを有する。これらのレジスタはプログラミングモデルの一部であり、プログラマに公開される。１つの手法によれば、アクティブレジスタファイルの各レジスタは、３２ビットデータフィールドおよび６ビットタグフィールドを有する。タグフィールドはタスクＩＤを保持し、これは、それについてデータレジスタ値が有効であるタスクを識別する。
【０２１５】
ネットワークプロセッサコア３５４は「境界レジスタ」を含み、これは各レジスタについて、それが「グローバル」レジスタと見なされるか「汎用」レジスタとみなされるかを指定する。グローバルレジスタは、多数のタスクの間で共有することができるグローバル値を格納することができ、あるいはこれらは、タスクが処理をイールド再開するときに保持されない一時的な値を格納することができる。
【０２１６】
シャドウレジスタファイル（シャドウ１およびシャドウ２）はプログラミングモデルの一部ではなく、すなわちこれらはプログラマに公開されない。シャドウ１およびシャドウ２の各レジスタファイルは、たとえば３２ビットの３２レジスタを含む。
【０２１７】
１つの手法によれば、タスクスイッチは「汎用」レジスタの明示的な保存／リストアを必要としない。汎用レジスタの保存およびリストアは、以下のメカニズムによるハードウェアによって暗黙的に行なわれる。「汎用」レジスタへの書き込みの場合、アクティブレジスタファイルのレジスタに関連付けられたタスクＩＤが、最初に現在のタスクＩＤと比較される。結果が等しい場合、これは、このレジスタが現在のタスクによって維持されており、したがってこのレジスタが新しい値により上書きされ、現在のタスクＩＤがそのタグフィールドにおいてマーク付けされることを意味する。等しくない結果は、このレジスタが異なるタスクについて有効な値を含むことを意味する。この場合、古いレジスタの内容が最初に書き込みキューバッファに送信されて、メモリ内でタスクＩＤコンテキストテーブルにおいて保存され、次いで、新しい値がレジスタに上書きされ、現在のタスクＩＤがそのタグフィールドにおいてマーク付けされる。
【０２１８】
「汎用」レジスタからの読み取りの場合、このレジスタに関連付けられたタスクＩＤが、最初に現在のタスクＩＤと比較される。等しい結果は、このレジスタが現在実行中のタスクについて有効なデータを含み、したがってデータが直接このレジスタから読み取られることを意味する。等しくない結果は、このレジスタが異なるタスクについて有効な値を含むことを意味する。しかし、そのレジスタのための現在のタスクについての有効なデータはシャドウ１レジスタファイル内に存在し、これはこのデータがシャドウ２に、前のタスクの実行と同時にプレロードされたからである。結果として、レジスタファイルがシャドウ１レジスタファイルから読み取られ、アクティブレジスタファイルのレジスタは不変のまま残る。
【０２１９】
「グローバル」レジスタへの読み取りまたは書き込みアクセスは、アクティブレジスタファイルに直接、レジスタのタグを変更することなくアクセスする。現在のタスクの実行の流れと同時に、専用マシン（図３７のＰＢＵ３７６）が次のタスクＩＤのレジスタ値をシャドウ２レジスタファイルにプレロードする。
【０２２０】
タスクスイッチ要求において、以下のアクションが行なわれるべきである。すなわち、次のタスクのレジスタ値のプレロードが完了されるべきであること、バンプバッファが空にされる−バンプユニットに送信されたすべてのデータがコンテキストテーブル内に保存されること、次のタスクが現在のアクティブタスクになること、シャドウ２レジスタファイルが現在のタスクのためのシャドウ（シャドウ１）となること、および、新しい「次のタスク」がサンプリングされ、新しいプレロード手順がシャドウ２上に開始されることである。「障害の場合」を防止するために特別に注意するべきである（また、特別なロジックを実装することができる）。たとえば、アクティブレジスタファイル内のレジスタが、次のタスクＩＤと等しいタスクＩＤについてタグ付けされる場合、レジスタ値において不一致が生じ、そのレジスタは現在のタスクにおける宛先としてアクセスされる。この場合、レジスタ値を最初にメモリ内でそのコンテキスト位置において保存し、次いで、現在のタスクの新しい値により上書きするべきである。しかし、前のタスクが次のタスクと等しいので、レジスタ値がすでに次のタスクのシャドウレジスタファイル（シャドウ２）にプレロードされる可能性がある。この場合、シャドウ２にプレロードされた値は、もはや有効ではない。
【０２２１】
図３８は、上の考察による、本発明の一実施形態によるレジスタファイル構造、および、低オーバーヘッドのタスクスイッチのためのメカニズムを例示する。図３８の上半分３９０では、現在のタスクＩＤはＴａｓｋ＿Ｘであり、次のタスクＩＤはＴａｓｋ＿Ｙである。図３８の下半分３９２は、タスクスイッチの後、現在のタスクＩＤがＴａｓｋ＿Ｙになり、次のタスクＩＤがＴａｓｋ＿Ｚになる。
【０２２２】
本発明の一実施形態によれば、通信システムにおいてタスクを効率的に処理するための方法が提供される。この方法は、現在のタスク識別子および次のタスク識別子をサンプリングするステップと、現在のタスクのための値を格納するための第１のレジスタファイルを提供するステップと、第１のレジスタファイルにはない現在のタスクのための値を格納するための、第２のレジスタファイルを提供するステップとを含む。この方法はさらに、次のタスクのための値をプレロードするための第３のレジスタファイルを提供するステップと、次のタスク識別子を現在のタスク識別子にし、さらに次のタスク識別子をサンプリングすることによって、タスクスイッチを実行するステップとを含む。この方法はさらに、タスクスイッチの後は現在のタスク識別子である、次のタスク識別子のためのレジスタ値のプレロードを完了するステップを含むことができる。この場合、この方法はまた、第３のレジスタファイルを、タスクスイッチの後に第２のレジスタファイルとして使用するステップも含むことができる。
【０２２３】
第１のレジスタファイルは、一実施形態では、データフィールドおよびタスク識別子フィールドを有するレジスタを含む。この場合、第１のレジスタファイルは３２レジスタを有し、各レジスタは、３２ビットのデータフィールドおよび６ビットのタスク識別子フィールドを有する。第１のレジスタファイルが、通信プロセッサのプログラマに公開されるようにすることができ、第２のレジスタファイルおよび第３のレジスタファイルがプログラマから隠される。一実施形態では、タスクスイッチが、レジスタファイルの明示的セーブ／リストアなしに実行される。
【０２２４】
この方法は、現在のタスクの実行中に書き込みを実行するステップをさらに含むことができ、この書き込みは、現在のタスク識別子を、第１のレジスタファイルにおけるタスク識別子と比較するステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じであるとき、値を第１のレジスタファイルに書き込むステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じでないとき、第１のレジスタファイルにおける内容がメモリに保存された後、値を第１のレジスタファイルに書き込むステップとによって実行される。第１のレジスタファイルにおける内容を、タスク識別子コンテキストテーブルに保存することができる。
【０２２５】
この方法はまた、現在のタスクの実行中に読み取りを実行するステップをさらに含むこともでき、この読み取りは、現在のタスク識別子を、第１のレジスタファイルにおけるタスク識別子と比較するステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じであるとき、値を第１のレジスタファイルから読み取るステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じでないとき、値を第２のレジスタファイルから読み取るステップとによって実行される。この場合、第１のレジスタファイルの内容は、読み取りの結果として変更されない可能性がある。
【０２２６】
本発明の追加の実施形態では、通信システムにおいてタスクを効率的に処理するためのシステムが提供される。このシステムは、現在のタスク識別子および次のタスク識別子をサンプリングする手段と、現在のタスクのための値を格納するための第１のレジスタファイルと、第１のレジスタファイルにはない現在のタスクのための値を格納するための、第２のレジスタファイルと、次のタスクのための値をプレロードするための第３のレジスタファイルと、次のタスク識別子を現在のタスク識別子にし、さらに次のタスク識別子をサンプリングすることによって、タスクスイッチを実行する手段とを含む。
【０２２７】
一実施形態では、タスクスイッチを実行する手段は、タスクスイッチの後は現在のタスク識別子である、次のタスク識別子のためのレジスタ値のプレロードを完了する。同様に、タスクスイッチを実行する手段は、第３のレジスタファイルを、タスクスイッチの後に第２のレジスタファイルとして使用する。
【０２２８】
第１のレジスタファイルは、データフィールドおよびタスク識別子フィールドを有するレジスタを含み、第１のレジスタファイルは３２レジスタを有することができ、各レジスタは、３２ビットのデータフィールドおよび６ビットのタスク識別子フィールドを有し、さらに、第２のレジスタファイルおよび第３のレジスタファイルはそれぞれ３２レジスタを有する。
【０２２９】
このシステムは、現在のタスクの実行中に書き込みを実行するプロセッサをさらに含むことができ、この書き込みは、現在のタスク識別子を、第１のレジスタファイルにおけるタスク識別子と比較するステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じであるとき、値を第１のレジスタファイルに書き込むステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じでないとき、第１のレジスタファイルにおける内容がメモリに保存された後、値を第１のレジスタファイルに書き込むステップとによって実行される。第１のレジスタファイルにおける内容を、タスク識別子コンテキストテーブルに保存することができる。このプロセッサはＡＬＵを含むことができる。
【０２３０】
このシステムはまた、現在のタスクの実行中に読み取りを実行するプロセッサをさらに含むこともでき、この読み取りは、現在のタスク識別子を、第１のレジスタファイルにおけるタスク識別子と比較するステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じであるとき、値を第１のレジスタファイルから読み取るステップと、現在のタスク識別子が、第１のレジスタファイルにおけるタスク識別子と同じでないとき、値を第２のレジスタファイルから読み取るステップとによって実行される。この場合、第１のレジスタファイルの内容は、読み取りの結果として変更されない。一実施形態では、タスクスイッチを実行する手段は、プレロードおよびバンプユニットを含む。このプロセッサはＡＬＵを含むことができる。
【０２３１】
プレロードおよびバンプユニット（ＰＢＵ）３７６
図３７を再度参照すると、ＰＢＵ３７６は、メモリ内のそれらのコンテキストテーブルにおけるレジスタの自動保存およびリストアのためのデータメモリのアクセスをコントロールする。レジスタ内容をテーブルコンテキストにおけるその位置に保存することは、アクティブレジスタファイル内のレジスタが宛先としてアドレス指定され、かつこのレジスタが現在実行中のタスクとは異なるタスクについて有効な値を含むときは常に、実行される。一般に、保存のための１つの要求のみをＰＢＵ３７６において単一命令について取り込むことができ、これはただ１つの宛先が命令内で現れることができるからである。
【０２３２】
ＰＢＵ３７６は、メインプログラムの流れとの干渉を最小限にするために、いくつかのエントリを有する書き込みキューを含み、したがって合計実行時間を最適化する。ソースとしてアドレス指定されたレジスタが、現在実行中のタスクについて有効なデータを含まないときは常に、データが、それが以前にプレロードされたシャドウ１レジスタファイルから読み取られる。
【０２３３】
ＰＢＵ３７６はまた、シャドウ２レジスタファイルへの次のタスクレジスタのプレロードをコントロールすることも担う。ＰＢＵ３７６は、保存（書き込み）およびプレロード（読み取り）のためのデータメモリアクセスを、コンテキストアドレスおよびデータバスを使用して生成する。本発明の一実施形態によれば、アクティブフローのロードストアサイクルが最高の優先権を有し、その後にプレロードサイクルが続き、最低の優先権は、書き込みバッファからの保存サイクルである。
【０２３４】
プログラムシーケンサユニット（ＰＳＵ）３７８
ＰＳＵ３７８は命令復号化を実行し、他のコアユニットのためのコントロールを生成する。ＰＳＵ３７８は、流れの変更を含むすべてのシナリオを含むプログラムの流れをコントロールする。
【０２３５】
フェッチユニット（ＦＴＵ）３８０
ＦＴＵ３８０は、プログラムカウンタ（ＰＣ）を命令フェッチオペレーションのためにコントロールすることを担う。本発明の一実施形態によれば、ＰＣを以下のソースのうち１つから導出することができ、すなわち、逐次増分、絶対アドレスへのジャンプ、レジスタにより指定されたアドレスへのジャンプ、次のタスクエントリポイントへのタスクスイッチ、相対的な流れの変更、例外コントロール（たとえば、リセット、ブレイクポイント、パッチなど）、および、トラップからの戻りである。
【０２３６】
メッセージングインターフェイス（エージェントインターフェイス）３８２
少数の命令が、ネットワークプロセッサコアに接続された外部モジュール（たとえば、ＤＭＡ、アクセラレータなど）において実行される。コアから外部モジュールへのメッセージングバス（エージェントインターフェイスまたはＡＧＩ）により、このような命令セットの拡張の定義およびサポートが可能となる。
【０２３７】
メモリインターフェイス３８４
本発明の一態様によれば、ネットワークプロセッサコアは、単一化されたメモリ空間を使用し、その中で各アドレスはプログラム情報またはデータを含むことができる。このメモリ空間は通常、オンチップＲＡＭおよびＲＯＭに基づいている。メモリモジュールは、プログラム、データおよびコンテキストアクセスのために別々のポートを有するべきである。また、このメモリモジュールは、リングインターフェイスなど、外界からのアクセスのための追加のポートを有することができる。
【０２３８】
フレキシブル・パケット・プロセッサのためのプログラミングモデル
プログラミングモデルは、ネットワークプロセッサのプログラムを書くためのルールを記述する。全体的にネットワークプロセッサコードの編成およびシステム中のデータの流れに関して説明する、簡単な導入の後、プログラミングモデル（たとえば、状態リソース、インターフェイスおよび命令グループ）を高レベルに関して概説する。次いで、実行の流れおよびパフォーマンスの問題を論じる。最後に、プログラミングモデルを詳述する。
【０２３９】
ネットワークプロセッサコードの編成
本発明の一実施形態によれば、ネットワークプロセッサは、リアルタイム通信処理目的のために調整された、３２ビットのシングルイシューＲＩＳＣプロセッサを含む。一実施形態によれば、ネットワークプロセッサは、３２の汎用レジスタ、マルチタスキングのための組み込みサポート、通信周辺デバイス、オンチップＳＲＡＭ、外部ＳＤＲＡＭへのＤＭＡインターフェイス、オンチップ・コントロール・プロセッサ（「ホスト」プロセッサまたはパケットプロセッサ［ＰＰ］またはコントロール・パケット・プロセッサ［ＣＰＰ］と呼ばれる）への組み込みインターフェイスを有する。
【０２４０】
ネットワークプロセッサが最大６２タスクのためのハードウェアサポートを有することが望ましい。このハードウェアサポートには、タスク起動トリガの生成、自動タスクスケジューリング、内部ＳＲＡＭ内のシャドウレジスタエリアへのレジスタの保存およびそこからのリストア、ＣＰＵをイールドするための特殊命令、および、タスクの間でメッセージを渡すためのサポートが含まれる。
【０２４１】
各ネットワークプロセッサタスクは、専用レジスタセットを有する。タスクレジスタは、タスクが実行中でない期間に渡って保持される。ネットワークプロセッサタスクは内部メモリに、ロードおよびストア命令によりアクセスすることができ、内部からのデータを外部メモリへ、またその逆も同様に、特殊なＤＭＡ命令を使用してコピーすることができる。
【０２４２】
タスクが作用するデータを、以下のカテゴリに分類することができる（図３９を参照）。
通信周辺デバイスからのデータ（矢印４０２）：このデータは、周辺デバイスのＦＩＦＯからの特殊命令を使用して、内部メモリにコピーされる（矢印４０６）。送信側では、このデータが、特殊命令を使用して、内部メモリから周辺デバイスのＦＩＦＯにコピーされる。デバイス中を通過中であるこのタイプのデータを、「ストリームデータ」と呼ぶことができる。
【０２４３】
ホストプロセッサにより交換されたストリームデータ（矢印４０８）：このデータは、通常は外部メモリにおけるネットワークプロセッサタスクによって、さらに処理するためにホストプロセッサに渡される。送信側では、ホストプロセッサはこのデータをネットワークプロセッサタスクに、送信関連タスク（カプセル化、シェーピング、スケジューリングなど）のため、かつ周辺デバイス中の送信のために渡す。ストリームデータはまた、ネットワークプロセッサタスクの間でも引き渡される。ストリームデータがホストプロセッサによって「タッチ」されない場合がある。
【０２４４】
構成データ：このデータは内部メモリに存在し、ホストプロセッサによって、あるいはネットワークプロセッサにおける初期化手順によって、初期化時に設定される（たとえば、「バッファサイズ」）。構成データはタスクによって消費されるが、生成されない。
【０２４５】
フロー状態データ：このデータは、内部または外部メモリ内に保たれ、たとえば、各ＡＴＭ接続の状態または現在のイーサネット（登録商標）フレームの状態を記述する。このデータの一部がタスクによって使用および更新される（たとえば、接続のためのセルカウント）。
【０２４６】
タスク状態データ：このデータは内部メモリ（またはレジスタ）内に保たれ、単一のＣＰＵの処理期間中に実施されるように意図された作業をタスクが完了しない場合に、タスクによって情報を保つために使用される。
【０２４７】
プログラミングモデルの高レベルの概要
本発明の一実施形態によれば、フレキシブル・パケット・プロセッサのためのプログラミングモデルには、以下の要素が含まれる。すなわち、状態リソース−プログラムの「状態」を保持するハードウェア「メモリ」エンティティ、インターフェイス−プログラムが、プロセッサの外部にあるハードウェアリソースと対話するために振る舞うべき方法の記述、および、命令セット−それによりプログラムがそのオペレーションを実行する基本ツールの記述である。
【０２４８】
状態リソース
図４０は、本発明の一実施形態によるネットワークプロセッサのための状態リソースの概要４２０を提供する。
【０２４９】
インターフェイス
ＤＭＡインターフェイス。ＤＭＡインターフェイスはＤＭＡマシンをコントロールし、これはＮＰ  ＳＲＡＭから外部ＤＲＡＭへ、およびその逆も同様にデータをコピーする。ＤＭＡインターフェイスはＰＰによって初期化時にセットアップされ、ＮＰからのアクション命令を、特殊命令を介して受け入れる。ＤＭＡインターフェイスはドアベルおよびタスクスケジューリングのメカニズムに接続する。
【０２５０】
周辺デバイスＦＩＦＯインターフェイス。周辺ＦＩＦＯはＰＰによって初期化時にセットアップされ、特殊なＮＰ命令によって、データユニットを内部メモリに（ＴＸの場合、内部メモリから）コピーするように命令される。周辺デバイスＦＩＦＯは、ドアベルおよびタスクスケジューリングのメカニズムに接続される。
【０２５１】
アクセラレータ／コプロセッサインターフェイス。一般に、２種類のアクセラレータ／コプロセッサが存在する可能性がある。すなわち、（１）ネットワークプロセッサコアに密結合され、特殊なエージェント命令（たとえば、ＣＲＣ、マルチリーダ、メッセージセンダなど）を介してアクセスされる、アクセラレータ／コプロセッサであり、これらはネットワークプロセッサのコンパウンドエンティティ内に存在し、（２）リングメンバであり、（リング上のメッセージを介して）リング上に介在された他のいずれかのリングメンバによってアクセスすることができる、アクセラレータ／コプロセッサである。
【０２５２】
ホスト（ＰＰ）プロセッサインターフェイス。一般に、ＰＰはＮＰ構成レジスタを初期化して、データを内部および外部メモリにおいてＮＰと共有し、ＮＰタスクからのサービスを要求し、割り込みおよびメッセージをＮＰから受信することができるようになる。
【０２５３】
命令セット。命令は様々なタイプのアクションを実行し、たとえば、算術、論理、レジスタ操作−レジスタ内のデータを修正すること、ロード／ストア−データをＳＲＡＭとレジスタの間で移動させること、フローコントロール−プログラムカウンタにおける変更、タスク管理−プログラムカウンタにおけるタスク間変更のコントロール、エージェントインターフェイス命令−ＤＭＡ（データをＳＲＡＭとＳＤＲＡＭの間でデータを移動させること）、シリアルポートへのアクセス（データをＳＲＡＭと通信周辺デバイスの間で移動させること）、およびアクセラレータ（データのブロックにおけるＣＲＣ計算など、専用通信処理機能）、また、専用レジスタ移動（およびコプロセッサの起動）−データをＧＰＲとＳＰＲの間で移動させることなどである。
【０２５４】
実行の流れおよびパフォーマンスの考慮すべき事柄
一般に、ＣＰＵは、プログラムの流れを変更する命令に出会うまで、命令を順次に実行する。たとえば、この命令を、タスク内の条件付きまたは無条件の分岐またはジャンプにすることができ、これは、汎用状態レジスタの１つの状態ビット、または現在のタスクを終了させて別のタスクの実行を開始する命令をチェックする。非漸進的変化をプログラムカウンタに引き起こす命令は、複数のサイクルを要し、オプショナルでその後に１命令遅延スロットが続く。プログラムの流れに影響を与える他の命令は、状態コードビットを修正する算術および比較命令、および、タスクエントリポイント（そこからタスクがその次の実行ラウンドにおいて実行を再開させるアドレス）を修正する命令である。
【０２５５】
タスクのタイプおよび状態。タスクを、実行中、保留中および休眠中の３つの状態のうち１つにすることができる。いかなる所与の時間にも、ＣＰＵ上で実行中の１つの実行中タスクがある。何かがタスクのサービスを要求するとき、そのタスクは保留中になる。実行中タスクが自発的にＣＰＵをイールドするたびに、最高の優先権のタスクが保留中のタスクから選択される。何もそれらのサービスを要求していないタスクは休眠中であり、これらは実行のために使用可能にされず、実行しない。本発明の一実施形態によれば、タスクの数は初期化時に決定され、タスクの動的な作成／除去はない。
【０２５６】
タスクを実行のために使用可能にさせる理由（トリガ）によって、タスクを分類することができる。すなわち、タスクをそれらがサービスする実体によって分類することができる。
【０２５７】
周辺デバイス：通信周辺デバイスにサービスするタスク。ＲＸ周辺デバイスがデータのユニット（たとえば、６４バイトのイーサネット（登録商標）フレーム）をそのＦＩＦＯで受信するたびに、あるいは、ＴＸ周辺デバイスがそのＦＩＦＯにおいて使用可能なデータのユニットのための空間を有するとき、その周辺デバイスはサービス「要求」をそれらの「サーバント」タスクに送信する。
【０２５８】
タイマ：タイマを周期サイクルカウントにより事前にプログラムすることができる。これが周期的に満了するたびに、タイマはサービス要求をそのサーバントタスクに送信する。
【０２５９】
タスク間メッセージ：データ（通常はストリームデータ）を、複数のタスクの間で交換し、引き渡すことができる。このための１つの手法は、メッセージ（たとえば、データポインタを含む）を他のタスクに、サービス要求と共に送信することである。通常、タスクはただ１つの「マスタ」（マスタはサービス要求のソースである）にサービスする。これは、周辺デバイス、タイマ、およびタスク間メッセージがすべてサービスを同じ方法で要求できることを意味する。
【０２６０】
タスクを保留中にさせることができるさらに２つのソースがある。
ＤＭＡ：タスクは、ＤＭＡ要求中にＣＰＵをイールドすることが許可されている（このように、ＤＭＡはＣＰＵと並列に動作し、ＣＰＵはストールされない）。タスクは通常、ＤＭＡアクションが完了されるとき、実行を再開することを望む。完了すると、ＤＭＡはサービス要求を発信側タスクに送信する。
【０２６１】
自己要求：タスクの実行期間（２つの連続したタスクスイッチイベントの間の時間）に制限がある。現在のタスクの実行は通常、外部イベントによってプリエンプトすることはできず、そのため、タスク毎に時間制限に到達する前にＣＰＵをイールドすることを提供することは、プログラマの責任である。タスクが、所期の作業を完了する前にＣＰＵをイールドする（たとえば、別のタスクを実行できるようにするため）とき、タスクは、将来の実行のためにそれ自体をスケジューリングするために、イールドする前に「自己要求」サービス要求を発行することができる。
【０２６２】
タスクトリガおよびタスクドアベルビット
タスクドアベルビットは、サービス要求が登録される場所である。ネットワークプロセッサタスクを、以下のいくつかの「要求」ソースによる実行のために可能にすることができる。
【０２６３】
シリアルモジュールからの通常の優先権の要求（たとえば、データフラグメントは受信ＦＩＦＯにおいて準備ができており、事前定義されたＳＲＡＭ位置にコピーされたか、あるいは、送信ＦＩＦＯが前のデータフラグメントの送信を終了した）。
シリアルモジュールからの高い優先権の要求（たとえば、しきい値を超えるＲＸ  ＦＩＦＯ、またはしきい値より下のＴＸ  ＦＩＦＯ）。
【０２６４】
ＤＭＡ要求の完了。
自己要求（ソフトウェアによって生成されたもの）。
別のタスクからのメッセージ（ソフトウェアによって、シリアルモジュールからの通常の優先権の要求と同じドアベルビットを使用して、生成される）。
【０２６５】
しきい値より上のメッセージキュー（ソフトウェアによって、シリアルモジュールからの高い優先権の要求と同じドアベルビットを使用して、生成される）。
タイマ（シリアルモジュールからの通常の優先権の要求と同じドアベルビットを使用する）。
【０２６６】
一態様によれば、各ドアベルビットについて、１つのマスクビットがある。例外は、最初の２つのドアベルビットであり、これらは共通マスクビット、および「自己要求」ビットを有し、これをマスクすることはできない。マスクビットが設定される場合、タスクは、マッチング要求による実行のために使用可能にされ、そうでない場合、要求がブロックされる。
【０２６７】
１つの手法によれば、約１２タスクが、シリアルチャネルにサービスすると予想される（たとえば、６つが受信用、６つが送信用）。これらのタスクは通常、シリアルチャネルからの要求によって起動される。タスクの残りは、タイマ、他のタスクからのメッセージ、またはホスト（たとえば、ドアベルビット１および２）によって起動されると予想される。
【０２６８】
さらにするべき作業、次いで最大可能なレイテンシを有するタスクは、「自己要求」（ドアベルビット５）を再度スケジュールするため（たとえば、タイマハンドラのタスク）にイールドし、使用するべきである。いかなるタスクも、タスクが発信したＤＭＡ要求の完了によって起動することができる。
【０２６９】
タスクが実行のためにスケジューリングされるとき、このタスクを起動したサービス要求の要求およびマスクビットがクリアされる。通常および緊急ビットがある場合、両方ともクリアされる。
【０２７０】
マスクビットおよびＤＭＡ
マスクビットをソフトウェアによって設定することができ、いくつかの場合、これらはハードウェアによって自動的に設定される。マスクビットは、関連付けられた要求ビットと共に、要求がタスクによってサービスされる（タスクが「実行中」になる）ときにハードウェアによってクリアされる。マスクビットを特殊な命令により設定することができ、これをオプショナルでＤＭＡおよびイールド命令において指定することができる。タスクがＤＭＡ要求を発行し、このＤＭＡがタスクにおける最後のアクションでないとき、プログラマはＤＭＡドアベルマスクビットを設定し、すべての他のマスクビットをクリアするべきである（他のいずれかの要求、たとえばシリアルのために、このタスクは実行に戻るべきではない）。タスクが、ＤＭＡの完了後に実行に戻るとき、すべてのマスクビットがクリアされる。
【０２７１】
１つの手法によれば、すべてのタスクについてのマスクビットのデフォルト状態があり、最初のビットが設定され、すべての他のビットがクリアされる。もう１つのオプションはＤＭＡおよびイールド命令における「自動設定」であり、ＤＭＡ完了においてハードウェアに、マスクビットをデフォルト状態に設定するように命令する。タスクがその最後のＤＭＡ要求を発行するとき、「自動設定」指示を設定する。タスクの最後のイールド命令もまた、マスクビットをデフォルト状態に設定するべきである。
【０２７２】
１つの手法によれば、ネットワークプロセッサＤＭＡは２つの外部バスにサービスすることができる（これを、いくつかの実施態様では、単一のＤＭＡマシンにすることができる）。即値の「ＤＭＡ  ＩＤ」フィールドがＤＭＡ命令において指定される。その値は、変換テーブルへの索引である（このテーブルをＣＰＵによって、あるいは、ネットワークプロセッサ上の専用レジスタに書き込むことによって、プログラムすることができる）。変換結果は、ビッグ／リトルエンディアンなどのような情報を含む。タスクによって開始されたすべてのＤＭＡ（そのための肯定応答が要求されたＤＭＡ）が完了するとき、ＤＭＡドアベル要求ビットが設定される。
【０２７３】
専用レジスタの１つにおけるカウントフィールドを使用して、タスクのすべてのＤＭＡが完了されていない場合にイールドすることが可能である。また、ＤＭＡ命令が実行され、「保留中ＤＭＡトランザクション」キューに余地がないとき、ネットワークプロセッサをストールすることも可能である。
【０２７４】
タスクの優先権およびスケジューリング
現在のタスクがその実行を中断するたびに、ハードウェアスケジューラは保留中のタスクから、最高の優先権を有するものを選択し、そのタスクの実行を開始する。タスクスケジューリングのために様々な手法を取ることができる。１つの手法によれば、実行のための次のタスクを選択するためのアルゴリズムは以下の通りである。実行するための次のタスクの選択において関与するタスクは、それについてそれらの対応するマスクビットがタスク・グローバル・マスク・レジスタ（ＴＧＭＲ）内でクリアされるタスクである。次のタスクの選択に関与し、マスクされていな要求を有するタスクは、４つのグループに分割され、以下の順序でサービスされる。
【０２７５】
１．最高の優先権のグループ：タスク番号０〜３１の緊急要求を含む。
２．第２の優先権のグループ：タスク番号０〜３１の通常要求を含む。
３．第３の優先権のグループ：タスク番号３２〜６３の緊急要求を含む。
４．最低の優先権のグループ：タスク番号３２〜６３の通常要求を含む。
【０２７６】
各グループ内で、要求がタスク番号に従ってサービスされる。より低いタスク番号の要求は、より高いタスク番号の要求の前にサービスされる。より高い優先権のクラスに存在するタスクは、「緊急」ドアベルビットが設定されたときから開始し、そのドアベルマスクがイールド命令のオプションによってデフォルトに設定されるときまで、あるいは、そのドアベルマスクが明示的に命令によってクリアされるまでである。１つの手法によれば、タスクは、すべての保留中の緊急イベントのハンドリングが完了されない限り、緊急状態である（このような期間中にＤＭＡを行なう間にタスクがイールドするときを含む）。
【０２７７】
タスクが実行を開始するとき、それを実行させたドアベル要求ビット、および、合致するマスクビットがクリアされる。他の要求ビットは修正されない。通常および緊急の要求ビットは、同じ要求の２つのレベルと見なされ、共通のマスクビットを有する。要求がサービスされるとき、これらは共にクリアされる。タスクは明示的にその優先権を緊急に上げ、その優先権を「自然」に戻すことができ（標準の優先権、緊急の要求保留中がない限り）、これは、ドアベルレジスタに書き込むエージェント命令を使用することによって行なわれる。これを使用して、クリチカル域または緊急コードフラグメントにおいて費やされた期間に渡ってタスクの優先権を増すことができる。
【０２７８】
タスクスイッチングのパフォーマンス
一態様によれば、ＣＰＵをイールドする命令は２サイクルを要する（これらは遅延スロットを有する）。他のパフォーマンスの問題は、新しいタスクのレジスタをリストアするために要する時間である。通常、次のタスクのレジスタは、現在のタスクの実行中にプレロードされる。
【０２７９】
タスク間通信
グローバルレジスタ。グローバルレジスタは、すべてのネットワークプロセッサのタスクの間で共有される汎用レジスタであり、これを各タスクによって安全に使用および修正することができる。（タスクは、それがシーケンス全体を完了することを確認しなければならず、これはＣＰＵをイールドする前に、アクションが実行されるために必要とされる、共有レジスタ使用／更新を含む。）
タスク間メッセージ。複数のタスクの間のメッセージの送信は、キューを使用して行なわれる。追加の情報は、データ構造に関する考察において提供される。
【０２８０】
共通プログラム。複数のタスクが同じオブジェクトコードを実行することができ、これはたとえば、２つの等しいシリアルチャネルの受信をサービスする２つのタスクなどである。また、すべてのタスクは関数におけるコードを共有することもできる。
【０２８１】
内部および外部メモリ。メモリ内の情報の共有は、複数のタスクの間の規定の問題である。「コンプレックス・アトミック」修正では、構造にアクセスするか、あるいは、以下でさらに説明するようにセマフォを使用するための、排他的権利を有するサーバタスクを有することが可能である。（「コンプレックス・アトミック」は、その間でデータ構造が矛盾した、すなわち誤った状態である、一連の外部メモリアクセスの、修正を必要とすることを意味する。）このような修正の必要がある一例は、その記述子が外部メモリ内にあるリンクリストキューの更新である。一般に、このような構造の使用は、可能であるとき、回避することが推奨される。
【０２８２】
ホストネットワークプロセッサ通信
ネットワークプロセッサタスクからホストへのメッセージおよび割り込み。データ構造における考察に関して説明する。
【０２８３】
ホストからネットワークプロセッサへのタスクメッセージ。ホストはメッセージを、いかなるタスクの入力メッセージキューにもポストすることができる。ホストはまた、ターゲットタスクのドアベルビットも設定する。ホストはメッセージを、ネットワークプロセッサタスクがメッセージをポストする先の入力メッセージキューに、ポストするべきではない。
【０２８４】
１つの手法によれば、ネットワークプロセッサは、ハードウェアのメカニズムを有していてもソフトウェアのタスクを有していても、ホストメッセージキューが「フルに近い」しきい値に関してその位置を変更するとき、ホストに通知するべきである。このようなしきい値を使用すると、ネットワークプロセッサ側でより時間の制約の少ないメッセージのハンドリングが可能となり、ホスト側で「フルでないかどうかチェックする」問合せのための必要がなくなる。
【０２８５】
ホストからネットワークプロセッサへのコマンド。ホストがネットワークプロセッサの実行をコントロールできるように書き込まれるコマンドレジスタがある。たとえば、このようなコマンドには、リセット、タスクＮを起動、タスクＮを非活動化（その現在の実行をアボートしない）、およびタスクＮの実行開始（すなわち、現在実行中のタスクをアボートすることなく、タスクＮに要求を与える）である。
【０２８６】
ホスト−ネットワークプロセッサのパラメータ。１つの手法によれば、各タスクについて、コンパイル時にあるエリアが割り付けられて、ホストによって初期化されてタスクによって使用されるパラメータが保持される。これらのエリアのアドレスがフレームポインタおよびエントリポイントと共に維持され、各タスクのブート初期化ルーチンによって（Ｒ６へ、さらに後述）ロードされる。これらのパラメータはまたホストによっても読み取られ、初期化ドライバにおいて使用される。
【０２８７】
状態リソース
汎用レジスタ
１つの手法によれば、タスクに使用される３２の汎用３２ビットレジスタがある。レジスタのいくつかはｒ０〜ｒＮであり、それらの値をタスクスイッチング中で保持せず、これらはすべてのタスクに共通である。これらは「共通」レジスタと呼ばれる。他のレジスタｒＮ＋１〜ｒ３１は、タスクスイッチング中で保持される。これらのレジスタは「プライベート」レジスタと呼ばれる。本発明の一実施形態では、これらのプライベートレジスタがそれらのシャドウ位置からハードウェアによって、プログラマには透過的に保存およびリストアされる。Ｎはグローバル値であり、初期化時にプログラムされることが好ましい。１つの手法によれば、Ｎ（奇数であるべきである）は１５であるが、他の値のＮを、設計の考慮すべき事柄に応じて使用することができる。プログラマは正しいシャドウエリアをレジスタのために割り付けるべきであり、これは、タスクの数にプライベートレジスタの数を掛けたものにするべきである。プログラマはレジスタを連続的に、ｒ３１から開始して下方へ使用するべきである。
【０２８８】
本発明の一態様によれば、レジスタのいくつかは以下のような特別なハードウェアサポートを有する。
−ｒ０は、定数０として解釈され、書き込みが無視される。
図４１は、本発明の少なくとも１つの実施形態によるレジスタｒ１（４３０）をより詳細に例示する。
【０２８９】
−ｒ１状態コード：スティッキー状態（１ビット）、算術状態（等しい／ゼロ［１ビット］、小なり／負［１ビット］、大なり／正［１ビット］、桁上げ［１ビット］、オーバーフロー［１ビット］、ドアベルビット［６ビット］、およびユーザ定義の状態ビット［１６ビット］）。
−ｒ３１：ユーザ定義の状態コード（３２ビット）。
−ｒ３０：タスクのエントリポイントアドレス。
−ｒ２８：リンクアドレス１（関数戻りアドレス）。
−ｒ２９：リンクアドレス２。
【０２９０】
１つの手法によれば、レジスタ割り付けのための規定は、アプリケーションバイナリインターフェイス、またはＡＢＩのために取られる手法に類似している。ＡＢＩは、異なるコンパイラによってコンパイルされた、あるいは異なる言語で書かれた、関数のオブジェクトコード相互運用性を可能にする規格である。この手法によるレジスタ割り付けは、以下の通りである。
【０２９１】
−ｒ２７および他のｒ２ｘレジスタ（２６≧２ｘ≧２０）は、固定の意味に割り付けられる。規定によりある意味に割り付けられるレジスタは、関数呼び出しに渡って意味を維持するように予想される。これらを関数内で修正することができるが、それらの意味に従ってのみ行なわれる。各タスクは、固定の意味に割り付けられた、異なるレジスタを有することができる。
【０２９２】
−ｒ２７：パラメータエリアポインタ、および、タスクのスタックポインタ。コンパイラまたはプログラマは、各タスクにつき最大３つのスタックフレームを静的に割り付ける。コンパイラは、レベル０コードによって使用されるエリア（第１のフレーム）、および、タスクのレベル１関数の自動変数のために必要とされる最大エリア（第２のフレーム）、および、タスクのレベル２関数（第３のフレーム）を計算する。ローカル関数の変数のメモリサイズのグローバル制限がある（コンパイラによって実装される）。間接関数呼び出しがあるときは常に、最大スタックフレームが割り付けられる。ローカル変数へのすべてのアクセスは、コンパイラによってｒ２７におけるオフセットに変換され、スタックにおいてフレームを動的に割り付けるため、かつ、関数呼び出しおよび戻り中にスタックポインタを修正するための、スタックポインタレジスタの必要がない。
【０２９３】
１つの手法によれば、コンパイラは関数呼び出し深度を２に制限する。コンパイラはまた、イールドせず、他の関数を呼び出さない関数を識別し、それらのフレームをすべてのタスクに共通のエリアにおいて「割り付け」、絶対アドレスを使用してローカル変数にアクセスすることもできる（これはこの場合、タスク毎にメモリを節約することができる）。他のレジスタを規定により、内部メモリにおけるデータユニットアドレス、外部メモリにおけるデータユニットポインタ、接続テーブルベースアドレスなどに、割り付けることもできる。規定によりある意味に割り付けられるレジスタは、関数呼び出しに渡って意味を維持するように予想される。このようなレジスタを関数内で修正することができるが、それらの意味に従ってのみ行なわれる。
【０２９４】
−ｒ１６、ｒ１７：これらのレジスタは、それらの値をいかなる関数呼び出しに渡っても保持しない。これらを、レベル２関数およびレベル１において保存することなく使用することができ、これらは値がレベル２関数呼び出しを超えて保持されるように予想しない。ｒ１６およびｒ１７レジスタは、レベル１およびレベル２関数にパラメータを渡し、そこから結果を得るために使用される。パラメータが渡されない場合でも、これらのレジスタはそれらの値をいかなる関数呼び出しに渡っても保持しない。コンパイラは２つより多いパラメータの関数を禁じることが好ましい。
【０２９５】
コンパイラおよびアセンブリプログラマは、レベル１関数についてｒ１６、ｒ１７の順序、および、レベル２関数についてｒ１７、ｒ１６の順序を使用することができる。これにより、レベル１およびレベル２関数の両方が単一のパラメータを有するとき、ｒ１６の保存およびリストアを除くことができる。また、ｒ１６およびｒ１７は、レベル２関数において修正することができる「プライベート」レジスタでしかない。
【０２９６】
−ｒ１８〜ｒ１９：これらのレジスタを、レベル２関数内で修正するべきではない。これらは、レベル１関数において保存することなく使用することができ、それらの値をレベル１関数呼び出しに渡って保持しない。
【０２９７】
−ｒ２０〜ｒ２６：これらのレジスタを、レベル１およびレベル２関数内で修正するべきではない。これらのレジスタは、レベル０コードにおいて保存することなく使用することができる。これらのレジスタのいくつかを、固定の意味に割り当てることができ、この場合、これらをそれらの固定の意味に従って関数内で修正することができる。
【０２９８】
−ｒ０〜ｒ１５は、スクラッチまたはグローバルレジスタであり、すべてのタスクに共通であり、ハードウェアのタスクスイッチングによって変更されない。
【０２９９】
−ｒ２〜ｒ５は、複数のタスクの間で頻繁に使用および共有される情報を保持し、これは、バッファアレイのベースアドレス（ｒ２）および空きバッファプールアドレス（現在）（ｒ３）などである。これらのレジスタは、テーブルベースアドレスまたは算術定数など、「ポピュラーな」（しばしば使用される）定数を保持することができる。
【０３００】
−ｒ８〜ｒ１５は、算術計算の中間結果など、イールドの中で保持する必要のない情報を保持するために使用される。
−ｒ６〜ｒ１１は、それらの値を関数呼び出しに渡って保持しない。
【０３０１】
−ｒ１２、ｒ１３：これらのレジスタは、イールドしないレベル２関数への呼び出しに渡って、それらの値を保持する。
−ｒ１４、ｒ１５：これらのレジスタは、イールドしないレベル１およびレベル２関数への呼び出しに渡って、それらの値を保持する。
【０３０２】
表３は、上述のレジスタ規定を要約する。
【０３０３】
【表３】
2005516432.tif 000008
【０３０４】
要約として、レジスタを以下の場合に安全に使用することができる。
−ｒ８〜ｒ９：イールドを含まないレベル２関数コード、イールドまたはレベル２関数への呼び出しを含まないレベル１関数コード、および、イールドまたは関数呼び出しを含まないレベル０コード。
【０３０５】
−ｒ１０〜ｒ１１：イールド、または、イールドするレベル２関数への呼び出しを含まない、レベル１関数コード。
−ｒ１２〜ｒ１５：イールド、または、イールドする関数への呼び出しを含まない、レベル０コード。
【０３０６】
−ｒ１６、ｒ１７：いずれかのレベル２関数コード、関数呼び出しを含まないレベル０／１関数コード。
−ｒ１８、ｒ１９：いずれかのレベル１関数コード、関数呼び出しを含まないレベル０コード。
−ｒ２０〜ｒ２Ｘ：いずれかのレベル０コード。
【０３０７】
指示レジスタ
１つの手法によれば、レジスタｒ１およびｒ３１は、分岐条件命令において使用することができる指示を含む。これらをいかなる命令によっても明示的に更新することができるが、ｒ１におけるビットのうちいくつかは、比較命令によって、かつ算術／ロード命令によって、暗黙的に更新される。桁上げビットもまた、いくつかの算術命令によって暗黙的に更新される。
【０３０８】
Ｒ１はグローバルレジスタであり、その値はタスクスイッチング後に保持されない。Ｒ３１はタスク毎のコピーを有する。
ｒ１におけるドアベルおよびマスクフィールド。「ドアベル」サブフィールドは、現在のタスクのドアベルビットのコピーを含む。マスクビットは、タスクのマスクビットのコピーである。これらのフィールドへの書き込みは無視される。
【０３０９】
比較命令、スティッキービットオプション。比較命令は３つの状態コードビットＬＴ、ＥＱおよびＧＴを修正する。オプショナルで、比較命令はまたスティッキービットを更新することもできる。これらの命令は条件を指定し、これはＮＯＮＥ、ＬＴ（小なり）、ＬＥ（小なりイコール）、ＥＱ（等しい）、ＮＥ（不等）、ＧＴ（大なり）、またはＧＥ（大なりイコール）のうち１つなどである。条件が比較によって満たされる場合、スティッキービットが設定され、そうでない場合、スティッキービットは変更されない。この特徴は、エラーケース、ならびに他のＡＮＤ／ＯＲ条件のいくつかのテストを効率的に実施するために有用である。比較命令はまた、スティッキービットを上書きするためのオプションも有する。図８７〜９０（後述）は、累積状態フラグ、すなわち「スティッキービット」を使用して、ネットワークプロセッサまたは通信プロセッサなどの処理システムにおいて、分岐命令を実行するための様々なメカニズムを例示する。
【０３１０】
シリアルステータス。シリアスステータス指示（たとえば、エラー、オーバーラン／アンダーランおよび最終）は、オプショナルでデータフラグメントのサイズと共に、プログラマによって固定メモリ位置からｒ１またはｒ３１にロードされるべきである。
【０３１１】
ユーザ定義指示。ユーザは状態情報をｒ１またはｒ３１のユーザ定義部において保つことができる。指示が一度作成され、数回使用されることが望ましい可能性がある。ユーザはまたｒ１またはｒ３１に、指示のアレイの一部をロードすることもできる。
【０３１２】
算術命令が状態コードを修正する。算術命令はゼロ、負および正の状態コードビットを修正することができる。以下の算術命令は、桁上げ状態コードビットを修正する。すなわち、ＡＤＤ、ＳＵＢ、ＡＤＤＩ、ＳＵＢＩ、ＳＲＲ、ＳＬＲ、ＳＬＩ、ＳＲＩおよびＣＬＢである。
【０３１３】
条件付きの分岐、ジャンプおよびイールド。条件付き分岐／ジャンプおよびイールド命令は、ｒ１またはｒ３１内の任意のビットでよい単一の状態ビットをテストし、そのビットを０または１と比較する。条件付き分岐／ジャンプ命令は、取られるときに３サイクルを要し、取られないときに１〜２サイクルを要するが、無条件分岐／ジャンプ命令は２サイクルを要し、両方の場合でこれらはオプショナルの遅延スロットを有する。
【０３１４】
条件付き命令。命令の大部分で、３ビット条件付き実行フィールドが使用されて、命令が無条件であるか条件付きであるかが、スティッキー状態ビットが真である偽であるかにおいて指定される。３つのビットのうち１つが将来の使用のために予約される。
【０３１５】
リンクレジスタ
分岐／ジャンプ命令を使用してサブルーチンを呼び出すことができる。これらは、戻りアドレスが保存されるべきであるかどうかを指定する演算コードビット、および、戻りアドレスがｒ２８またはｒ２９に保存されるべきであるかどうかを指定するもう１つの演算コードビットを有する。戻りアドレスは、遅延分岐オプションが使用されるかどうかに応じて、ＰＣ＋１またはＰＣ＋２である。関数呼び出し深度は２に制限され、各呼び出し／戻りの深度は命令において指定される。他の関数を呼び出さない関数は「深度２」として定義され、呼び出されるべきである。
【０３１６】
タスクのエントリポイントレジスタ
Ｒ３０は、そこでタスクがイールドの後に実行を再開するアドレスを含む。これは、ｒ３０を修正するいかなる命令によっても修正されオプショナルでイールド命令によって修正される。これをオプショナルで、イールドするＤＭＡ命令によって修正することができる。
【０３１７】
隠しレジスタ
プログラムカウンタ−１つの手法によれば、システムに単一のプログラムカウンタがあり（タスク毎ではない）、いかなる方法でもソフトウェアによって直接アクセス可能ではない。
【０３１８】
専用レジスタ
専用レジスタ（ＳＰＲ）は、汎用レジスタ（ＧＰＲ）の１つとしては定義されないネットワークプロセッサコアレジスタである。特殊命令（ＳＰＲＬおよびＳＰＲＳ）は、ＳＰＲとＧＰＲの間のデータの移動を可能にするために定義される。ネットワークプロセッサにおける専用レジスタには、図４２のように、再フェッチＳＰＲ４４０、タスクＳＰＲ４４２、トラップＳＰＲ４４４およびＭｉｎｄｅｘＳＰＲ４４６が含まれる。
【０３１９】
再フェッチＳＰＲ４４０。再フェッチＳＰＲは３２ビットレジスタであり、「トラップ」から出るときに再フェッチされる命令の第１および第２のプログラムメモリアドレスを保持する。ビット１５：０は、第１の命令アドレス（ｒｅｆｅｔｃｈと呼ばれる）を保持し、ビット３１：１６は第２の命令アドレス（ｎｅｘｔ＿ｒｅｆｅｔｃｈと呼ばれる）を保持する。ネットワークプロセッサがブレイク要求を受信し、すでにトラップモードではないとき、ブレイクベクトルによって指示されたプログラム位置から命令実行を継続し、トラップモードビットが設定される（タスクＳＰＲ内）。ブレイクポイントの発生がなければ実効されていたであろう命令のアドレスは、再フェッチＳＰＲのビット１５：０に保存される。ブレイクポイントの発生がなければ実行されると思われていた以下の命令は、再フェッチＳＰＲのビット３１：１６に保存される。
【０３２０】
トラップモードを離れることは、ＲＦＴ命令を実行することによって実行される。この命令は、再フェッチＳＰＲビット１５：０によって指定されたプログラム位置と、その後に続く再フェッチＳＰＲビット３１：１６によって指定されたプログラム位置へのプログラムジャンプを引き起こす。これはまた、トラップモードビットもクリアする。
【０３２１】
再フェッチＳＰＲは、ＳＰＲＬおよびＳＰＲＳ命令を通じてアクセスすることができる読み取り／書き込みレジスタである。
タスクＳＰＲ４４２。タスクＳＰＲは３２ビット読み取り専用レジスタである。タスクＳＰＲは、以下のように、現在実行中のタスクおよび次に実行されるタスクについての情報を含む。
【０３２２】
−ＤＯＯＲＢＥＬＬ  ＲＥＱは、現在のタスクのドアベル要求ビットを反映する。
−ＣＴＩＤは、現在のタスクＩＤを反映する。
−ＮＴＩＤは、次のタスクＩＤを反映する。
−ＮＴＶは、次のタスク有効ビットを反映する。
−ＭＡＳＫは、現在のタスクのドアベルマスクビットを反映する。
−ＵＲは、タスクの緊急レベルを反映する（１＝緊急）。
−ＣＯＵＮＴは、現在のタスクのドアベルカウンタ値を反映する。
【０３２３】
イールドがあり、バンプバッファが空であり、かつ次のタスクのコンテキストがすでにプレロードされるとき、ネットワークプロセッサは次のタスクにスイッチする。この時点で、ＮＴＩＤがＣＴＩＤにロードされ、次のタスクＩＤがドアベルから次のタスク有効ビットと共にＮＴＩＤおよびＮＴＶにそれぞれサンプリングされる。
【０３２４】
ＮＴＶビットが設定される場合、ＮＴＩＤがロックされ、さらにサンプリングは生じない。ＮＴＶビットがクリアされる場合、ドアベルの次のタスクＩＤが各サイクルで継続的に、有効ビットが設定されるまで、サンプリングされる。
【０３２５】
新しい有効な次のタスクＩＤはプレロードロジックによって、次のタスクのコンテキストをプレロードするために使用される。タスクＳＰＲを、ＳＰＲＬ命令を使用することによって読み取ることができる。タスクＳＰＲのすべての他のビットが予約され、ゼロとして読み取られる。ＣＴＩＤ、ＮＴＩＤおよびＮＴＶビットはリセットによってクリアされる。各タスクのマスクのデフォルト状態（およびリセット状態）は０ｂ１００である。
【０３２６】
トラップＳＰＲ４４４。トラップＳＰＲは３２ビットレジスタである。トラップＳＰＲは、トラップモードビット、不当命令ステータスビット、およびブレイクポイントステータスビットを含む。
ビット０−不当命令（ＩＬ）：不当命令があるとき、ＩＬビットが設定される。ＩＬビットは、リセットによってのみクリアすることができる。
【０３２７】
ビット１−トラップモード（ＴＲＡＰ）：ＴＲＡＰビットが設定されるとき、ネットワークプロセッサはトラップモードである。ブレイクポイントイベントはプログラムの流れをプログラム位置（所与のベクトルによってポイントされた所）にジャンプさせ、トラップモードビットを設定することによってトラップモードの実行に入らせる。トラップモードであるとき、ブレイクポイントおよび／またはパッチイベントは受け入れられない。トラップモードビットはＲＦＴ（トラップからの戻り）命令によって、あるいは、ゼロをトラップモードビットに書き込むことによってクリアされる。トラップビットがクリアされるとき、さらなるブレイクポイントおよび／またはパッチが受け入れられる。
【０３２８】
ビット２−プログラムアドレスブレイク（ＰＡＢ）：これはブレイクポイント・ステータス・ビットであり、設定されるとき、プログラム・アドレス・ブレイクポイントが発生したことを指示する。このビットは、ＲＦＴ命令によって、あるいは、ゼロをこのビットに書き込むことによってクリアされる。
【０３２９】
ビット３−データアドレスブレイク（ＤＡＢ）：これはブレイクポイント・ステータス・ビットであり、設定されるとき、データ・アドレス・ブレイクポイントが発生したことを指示する。このビットは、ＲＦＴ命令によって、あるいは、ゼロをこのビットに書き込むことによってクリアされる。
【０３３０】
ビット４−タスクブレイク（ＴＢ）：これはブレイクポイント・ステータス・ビットであり、設定されるとき、タスクＩＤブレイクポイントが発生したことを指示する。このビットは、ＲＦＴ命令によって、あるいは、ゼロをこのビットに書き込むことによってクリアされる。
【０３３１】
ビット５−イールドブレイク（ＹＢ）：これはブレイクポイント・ステータス・ビットであり、設定されるとき、イールドブレイクポイントが発生したことを指示する。このビットは、ＲＦＴ命令によって、あるいは、ゼロをこのビットに書き込むことによってクリアされる。
【０３３２】
セマフォ
セマフォは一般に、イールドを含むコードのセクションが一度に複数のタスクによって実行されるべきでないとき、使用される。これは、コードが、複数のタスクの間で共有されるいくつかのデータ構造リソースをハンドリング中に起こる。セマフォの使用を伴う可能性のある現在の例は、その記述子が外部メモリにあるリンクリストキューからの追加および除去、マルチキャストバッファの解放（参照カウントの更新）、外部メモリにおけるタスクのメッセージキューのエミュレーションであり、タスク間メッセージをフルメッセージキューに入れようと試みるタスクは、キューがフルでなくなるまで待機するためのハードウェアメカニズムを使用することができる。
【０３３３】
クリチカル域にある間にイールドしない代替解決策は有効ではない。リソースを担う専用タスクを有し、したがって、そのリソースにおいて実行されるアクションを直列化する代替解決策は、いくつかの場合に実装が複雑であり、いくつかの場合に非効率的である。
【０３３４】
本発明によるネットワークプロセッサのソフトウェアのセマフォは、ビットマップ（ＴＧＭＲレジスタ）において指定されたタスクのスケジューリングの防止を可能にするハードウェアメカニズム上で実装される。
【０３３５】
セマフォの数は、セマフォのサポートのために割り付けられたメモリ空間のサイズによってのみ制限される。あらゆるセマフォは、空き／ビジー状態の１ビット指示に加えて、特定のセマフォについて登録されたタスクの６４ビットマスクを必要とする。セマフォによって保護されたクリチカル域を実行中、セマフォ保持時間を最小限にするために、タスクの優先権が高められるべきであり、またすべての発行済ＤＭＡは緊急として扱われるべきである。
【０３３６】
システム内に多すぎるセマフォが存在することはできず（たとえば、妥当な内部メモリ要件を保つ目的に適合するため）、さらに、セマフォ保護を必要とする可能性のある多数の共有外部メモリリソース（データキュー、コンテキスト、ルックアップテーブルなど）がある。１つの方法によれば、セマフォＩＤ（番号）が、リソースアドレスにおける単純な算術演算（たとえば、有意なビットのＭＯＤ）に基づいて選択される。
【０３３７】
ネットワークプロセッサのスケジューラのハードウェアは、ＳＰＲレジスタ内のビットマップ（「ＳＰＲビットマップ」）を含む。ビットマップ内の各ビットは、設定されるとき、そのＩＤがビット索引に対応するタスクのスケジューリングを防止する。ネットワークプロセッサのソフトウェアは、ソフトウェアビットマップ内で指定された指定済タスクのリストを上のリストに追加または除去することができる。このソフトウェアはＳＰＲビットマップにおいて、現在占有されているセマフォの１つを待機中であるために実行が防止されるタスクを登録する（以下のｂａｄ＿ｌｉｓｔを参照）。
【０３３８】
ソフトウェアは、各セマフォのための内部メモリにおいて、そのセマフォが現在使用中／占有されているかを指示する指示を保持する（以下のｓｅｍＸ＿ｉｎｄｉｃを参照）。ソフトウェアはまた各セマフォについて、現在セマフォへのアクセスを待機中であるタスクに対応する６４ビットのビットマップも保持する（以下のｓｅｍＸ＿ｍａｓｋを参照）。セマフォを待機中の各タスクについて、そのタスクのＩＤに対応するこのビットが設定される。
【０３３９】
一実施形態（以下の表には反映されていない）によれば、ソフトウェアはまた、各タスクのタスクＩＤを、６４ビットマスクの形式において保持する（ただし、タスクＩＤに対応するビットのみがこのマスクで設定される）。
【０３４０】
以下の表４の擬似コードは、セマフォの使用を例示する。
【０３４１】
【表４−１】
2005516432.tif 000009
【０３４２】
【表４−２】
2005516432.tif 000010
【０３４３】
セマフォの使用の汎用オペレーションは以下の通りである。タスクがクリチカル域番号Ｘに入ろうとするときは常に、タスクはセマフォＸの内部メモリ指示をチェックして、現在そのクリチカル域に他のいずれかのタスクがあるかどうかを判断する。
【０３４４】
セマフォ指示がクリアである場合、タスクはこの指示を設定し、クリチカル域に入る。クリチカル域（たとえば、外部メモリアクセスおよびタスクスイッチを含む）の完了の後、タスクはセマフォ指示をクリアする。タスクがクリチカル域内にあった間に、他のタスクがそれ自体をセマフォへのアクセスを待機中であるとして登録しておき、それらがハードウェアスケジューラによってスケジューリングされることを防止しておくことができる可能性がある。そのため、現在のタスクはこれらの他のタスクを可能にし、これらはセマフォについてのスケジューリングを待機中であるとして登録され、これは、それらのリストをハードウェアビットマップから除去することによって行なわれる。
【０３４５】
セマフォが設定される場合、タスクはｓｅｍＸ＿ｏｃｃｕｐｉｅｄに分岐し、それ自体を、セマフォを待機中のタスクのリストに登録し、このリストをハードウェアビットマップに追加することによってこれらのタスクを無効にする。次いで、タスクスイッチングは、ｓｅｍＸ＿ｒｅｌｅａｓｅｄラベル内で再開実行を設定した後、開始される。タスクが実行を再開するとき、タスクはそれ自体を、セマフォを待機中であるタスクのリストから登録解除し、リスト上の他のタスクをハードウェアビットマップに追加することによって、これらがスケジューリングされることを防止する。次いで、タスクはコードを実行し、これがセマフォ指示をチェックする。
【０３４６】
本発明の一実施形態によれば、セマフォを使用して、マルチタスキングプロセッサによって使用される共有リソースへのアクセスを制限する方法が提供される。この方法は、レジスタにおいて、指定されたタスクの実行を、指定されたタスクが占有されたセマフォへのアクセスを待機中であるために、防止する第１のビットマップを提供するステップと、メモリにおいて、セマフォが占有されるかどうかを指示する指示を格納するステップと、メモリにおいて、セマフォへのアクセスを待機中であるタスクを識別する第２のビットマップを格納するステップと、セマフォに、メモリにおける指示をチェックすることに基づいてアクセスしようと試みるステップとを含む。メモリにおける指示をチェックするタスクは、セマフォが使用可能であることを決定し、この方法はさらに、セマフォが占有されていることを指示するように指示を設定するステップ、および、タスクのための処理を実行するステップを含むことができ、タスクのための処理を実行するステップはクリチカル域の実行を含む。クリチカル域は、外部メモリアクセスおよびタスクスイッチの少なくとも１つを含むことができる。
【０３４７】
この方法は、タスクのための処理を実行するステップの後にセマフォが使用可能であることを指示するように、指示をリセットするステップをさらに含むことができる。さらにこの方法は、加えて、このときメモリにおいて、セマフォへのアクセスを待機中であるタスクを識別する第２のビットマップに含まれたこれらのタスクを、第１のビットマップから除去し、それにより、これらのタスクをセマフォへのアクセスのためにスケジュールできるようにするステップを含むことができる。
【０３４８】
一実施形態では、メモリにおける指示をチェックするタスクが、セマフォが占有されていることを決定するとき、この方法はさらに、タスクを第２のビットマップに含めるステップ、および、第１のビットマップを訂正して第２のビットマップにおけるリストからのタスクを反映させるステップを含むことができる。この方法は、指示が、セマフォが使用可能であることを反映するとき、タスクを第２のビットマップから除去するステップ、および、第１のビットマップを訂正して第２のビットマップにおけるリストからのタスクを反映させ、それにより、タスクがセマフォにアクセスしてタスク処理を実行できるようにするステップをさらに含むことができる。
【０３４９】
本発明のもう１つの実施形態によれば、セマフォを使用して、マルチタスキングプロセッサによって使用される共有リソースへのアクセスを制限するシステムが提供される。このシステムは、レジスタにおいて、指定されたタスクの実行を、指定されたタスクが占有されたセマフォへのアクセスを待機中であるために、防止する第１のビットマップと、メモリにおいて、セマフォが占有されるかどうかを指示する指示と、メモリにおいて、セマフォへのアクセスを待機中であるタスクを識別する第２のビットマップと、セマフォに、メモリにおける指示をチェックすることに基づいてアクセスしようと試みる手段とを含む。
【０３５０】
試みる手段を、タスクを実行するプロセッサにすることができ、セマフォが使用可能であることを指示が反映するとき、タスクがセマフォにアクセス可能にすることができる。また、セマフォが占有されることを指示が反映するとき、タスクはそれ自体を第２のビットマップに登録し、第１のビットマップを更新することができる。タスクの実行は、外部メモリアクセスおよびタスクスイッチングのうち少なくとも１つを含むクリチカル域を処理することを含むことができ、メモリにおける指示は、クリチカル域を処理した後にセマフォが使用可能であることを指示するようにリセットされる。
【０３５１】
ソフトウェアデータモデル
図４３を参照して、本発明の少なくとも１つの実施形態による例示的ソフトウェアデータモデル４５０を例示する。内部メモリ内で割り付けられる、主に２つのデータのタイプ、すなわち、グローバルデータおよびタスク／関数データがある。
【０３５２】
グローバルデータ：
．ａｄａｔａ  ｓｔａｒｔ
グローバルデータ定義、例：
．ｌｏｎｇ  ｇｅｎｅｒｉｃ＿ｔａｓｋｍｅｓｓａｇｅ＿ｑ［８］；
．ｓｔｒｕｃｔ＿ｓｔｒｕｃｔｕｒｅ＿ｎａｍｅ  ｉｎｓｔａｎｃｅ＿ｎａｍｅ；
．ａｄａｔａ  ｅｎｄ
【０３５３】
グローバルデータはグローバルな名前範囲を有し、コード内のいかなる所からも記号的に参照することができる。参照は、絶対アドレスに変換される。
タスク／関数データ：
．ｔａｓｋ［ｃｏｍｍｏｎ］ｔａｓｋ＿ｔｙｐｅ＿ｎａｍｅ
タスクデータ定義およびタスクコード。
．ｔａｓｋ  ｅｎｄ［ｔａｓｋ＿ｔｙｐｅ＿ｎａｍｅ］
．ｆｕｎｃ  ｌｅｖｅｌ１／２  ｆｕｎｃｔｉｏｎ＿ｎａｍｅ
関数データ定義および関数コード
．ｆｕｎｃ  ｅｎｄ［ｆｕｎｃｔｉｏｎ＿ｎａｍｅ］
【０３５４】
ローカルデータ定義はローカルな名前範囲（後述）を有し、参照はアセンブラによってｒ２７＋即値オフセットに変換される。関数は、タスク定義内またはいかなるタスク定義の外側でも定義することができる。関数名は、いかなるタスク定義の外側でも定義され、グローバルな名前範囲を有し、コード内のいかなる場所からも呼び出すことができる。これらはそれらのローカルデータおよびグローバルデータにアクセスすることができる。タスク定義内で定義される関数名は、タスク定義の範囲を有する。これらを、そのタスクタイプのレベル０コードによってのみ呼び出すことができる。これらはタスクの共通データにアクセスすることができる（後述）。
【０３５５】
関数呼び出しの２レベルのネスティングについて、戻りアドレスを保つためのハードウェアサポートがある。静的スタックフレームが、各タスクインスタンスについて維持され、これらは３つの部分からなる。これは、動的スタックの正しいサイズの割り付けの問題を解決するべきである。また、これにより、スタックポインタおよび戻りアドレスのハンドリングをなくすことによって、関数呼び出しがより効率的になる。これは、定義時に、各関数のレベル（１または２）が指定されることを意味する。他の関数を呼び出さない関数は、レベル２関数として定義される。
【０３５６】
各タスクタイプについて、アセンブラは２つのデータセクションの、レベル０データおよびレベル１データを作成する。これらのサイズがＰＰソフトウェアによって使用されて、メモリがこのタスクタイプの各タスクインスタンスの静的フレームのために割り付けられ、タスクインスタンスのｒ２７が初期化される。タスク定義は、同じタスクタイプについて複数回現れる可能性がある。このような定義を、「タスクフラグメント」と呼ぶものとする。各フラグメント内のデータ定義は、他の各フラグメント内のデータ定義と結合する（オーバーラップ、同じメモリ位置を占有する）。
【０３５７】
タスクフラグメント定義中に、オプショナルの「共通」キーワードを使用することができ、この場合、データ定義は他のいかなるデータ定義ともオーバーラップし、データ名の範囲は同じタスクタイプのすべてのフラグメントとなる。
【０３５８】
タスクの非「共通」フラグメントを使用して、異なる関数（「ハンドラ」と呼ばれる）を実装することができ、これは「汎用タスク」が行なうものである。ハンドラへのポインタは、タスク間メッセージにおいて渡される。すべてのハンドラはタスクの「共通」部分内のラベルに戻る。タスクの共通部分は、入力メッセージキューおよびハンドラへのディスパッチのみをハンドリングする。
【０３５９】
タスクタイプについてのレベル０フレームのサイズは、共通部分内のデータ定義のサイズに、タスクタイプの非共通フラグメント内のデータ定義のサイズの最大値を加えたものである。
【０３６０】
レベル１関数は、明示的にのみ呼び出すことができる（すなわち、ポインタを使用してこれらを呼び出すことはできない）。アセンブラはレベル１関数へのすべての呼び出しを発見し、このタスクタイプのためのレベル１フレームサイズを、このタスクタイプによって呼び出されるレベル１関数のデータ定義のサイズの最大値として計算する。
【０３６１】
レベル２関数は、ポインタを介して呼び出すことができる。アセンブラは、各レベル２関数内に割り付けられたデータが、システムレベル定数（８０バイト）より多くないことをチェックし、この定数を、レベル１関数のデータ定義のオフセットに追加する。
【０３６２】
ラベルの範囲：関数およびタスクフラグメントにおいてローカル。「共通」タスクフラグメント内であるとき、そのタスクタイプのすべてのグラフメントにグローバルである。タスクフラグメント内のラベル、およびレベル２関数名をＰＰソフトウェア（フローマネージャ）に、オブジェクトファイルにおいて、指示文．ｅｘｐｏｒｔ  ｌａｂｅｌ＿ｎａｍｅを使用して渡すことができる。
【０３６３】
１つの手法によれば、アセンブラは単一のコードセクションを生成し、これはすべてのタスクおよび関数のコードを含む。他の関数タイプを考察することができ、これは、メモリ内にローカルデータを有していないもの、または、それらの使用のためにパラメータとしてスクラッチパッドエリアへのポインタを受信するものなどである。また考察されるものは、タスクおよび関数に関連付けられていないコードである。（このコード内のすべてのラベルはグローバルな範囲を有するようになる。これを、追加のタイプの関数に使用することができる。）
呼び出し側のフレームがもはや必要とされない場合（たとえば、エラー状態）、これは同じレベルの関数を呼び出すことができ、これが呼び出し側のフレームを使用する。
【０３６４】
命令セット
アドレス指定モード：
命令アドレス指定。すべての命令アドレスは「ワードアドレス」であり、これらが左に２位ビットシフトされて、メモリアドレスが生成される。
絶対：１６ビット即値命令フィールドで指定された絶対アドレスにジャンプする。
ＰＣ相対：１２ビット即値符号付き命令フィールドで指定された現在のプログラムカウンタからのオフセットに分岐する。
【０３６５】
レジスタ：命令で指定されたレジスタに含まれるアドレスにジャンプする。
暗黙的タスクエントリポイント：タスクスイッチ中に、次に使用可能にされたタスクのエントリポイント（そのタスクのｒ３０内）にジャンプする。
データアドレス指定：データアドレスは、アクセスサイズにかかわらず、そのままで取られるバイトアドレスである。
【０３６６】
オフセット付きレジスタ：このアドレスは、レジスタに含まれた値と、符号拡張８ビット即値命令フィールドとの和である。
索引レジスタ付きレジスタ：このアドレスは、レジスタに含まれた値と、索引レジスタに含まれた値との和である。
【０３６７】
命令グループ
本発明のパケットプロセッサの一実施形態によれば、以下の命令グループがサポートされる。すなわち、算術および論理演算、レジスタデータ操作、ロード／ストア（内部メモリへ）、プログラムの流れ、タスクのイールド、およびエージェント命令（ＤＭＡ、通信周辺デバイス、ＣＲＣ、ＣＡＭなど）である。
【０３６８】
フレキシブル・パケット・プロセッサのための命令パイプライン
図４４を参照して、例示的ネットワークプロセッサのパイプライン４６０を例示する。本発明の一実施形態によれば、ネットワークプロセッサのパイプライン４６０は５つのステージからなり、すなわち、フェッチ、復号化、アドレス指定、実行および書き込みである。ネットワークプロセッサのパイプライン４６０は、標準の設計の流れおよび標準のメモリを使用可能にする。ネットワークプロセッサは命令を、単一化された内部メモリからのデータのロード／そこへのストアと共に、各サイクルで実行することができる。ネットワークプロセッサのパイプライン４６０により、算術命令を、いかなる「バブル」もなしに前の命令によってロードされたそのソースオペランドデータとして使用することができる。条件付きジャンプおよび分岐命令は、条件が取られないときにペナルティを有さないが、条件が取られて流れの変更がある場合、２サイクルのペナルティが発生する。このペナルティを減らすため、遅延されたジャンプおよび分岐命令が設けられる。データＡＬＵに加えて、効率的なポインタ計算をデータアクセスにおいて可能にするためのアドレスＡＬＵがある。ネットワークプロセッサの汎用レジスタ（ｒ０〜ｒ３１）は書き込みステージ中に更新され、それらがロードオペレーションから更新されるかデータＡＬＵオペレーションから更新されるかについての区別はない。
【０３６９】
パイプラインステージ
５つのパイプランステージ、すなわち、フェッチ、復号化、アドレス指定、実行および書き込みがある。
【０３７０】
フェッチステージ
フェッチステージ中に、ネットワークプロセッサコアは、次の命令フェッチアドレスを配置する。この次のフェッチアドレスは、通常の連続的な流れにおいてプログラムカウンタ（ＰＣ）から発することができ、あるいは、ジャンプまたは分岐命令があるときはアドレスＡＬＵから来ることができる。３２ビットの新しいフェッチされた命令は、特定の内部メモリから特定のアクセス時間後に次のクロックサイクル中に準備ができると仮定される。ネットワークプロセッサの内部ＳＲＡＭは、データおよびプログラムについて単一化されるので、また、これはデータについての６４ビットアクセスをサポートするべきであるので、ネットワークプロセッサは２つの命令のフェッチ（６４ビット）を開始する。フェッチユニット（ＦＴＵ）は、まだ処理されていなかった、フェッチされた命令を保持するための、フェッチバッファを含む。
【０３７１】
復号化ステージ
復号化ステージでは、新しい命令フェッチが完了され、新しい命令の復号化が実行される。復号化ロジックは、入力命令のタイプ、および、各パイプラインステージでその命令の実行のために実行されるべきであるオペレーションを決定する。
【０３７２】
アドレス指定ステージ
アドレス指定ステージ中に、メモリからのロードのため、あるいはメモリへのストアのためのデータアドレスが、アドレスＡＬＵによって計算される。アドレスＡＬＵはそのソースオペランドを得る。これはＧＰＲレジスタ、即値アドレスオフセット、または絶対アドレスのうち１つまたは２つから発することができる。ジャンプまたは分岐命令では、宛先アドレスもまたアドレスＡＬＵによって計算される。アドレスＡＬＵ入力の１つは、分岐アドレス計算のためのＰＣ自体である。アドレス計算が実行された後、コアは新しいデータアドレスをデータアドレスバス（ＤＡＢ）上に、あるいは、新しいプログラムアドレス（流れの変更のため）をフェッチアドレスバス（ＦＡＢ）上に配置する。命令が「ストア」である場合、メモリに格納されるデータがこのステージ中にストアデータバス（ＳＤＢ）上に配置される。
【０３７３】
実行ステージ
データＡＬＵの実行は、実行ステージで行なわれる。ソースオペランドがレジスタファイルからデータＡＬＵに読み込まれ、データ演算が実行される。たとえば、命令がｒ１とｒ２のＡＤＤである場合、ｒ１およびｒ２がデータＡＬＵに「ｍｕｘ−ｅｄ」され、加算が実行ステージ中に実行される。状態コード（ＣＣ）もこのステージで計算される。実行ステージの終わりまでに、ＣＣと共にデータ演算実行結果の準備ができる。
【０３７４】
書き込みステージ
書き込みサイクルで、レジスタファイルが更新される。この更新は様々なソースから来る可能性があり、これは、演算結果の宛先、メモリからロードされたデータ、専用レジスタ（ＳＰＲ）からの移動、またはレジスタファイルへの即値の移動である。サブルーチンへのジャンプまたは分岐の場合、ＰＣもまた、レジスタファイル内の２つのＬＩＮＫレジスタのうち１つにラッチされる。ＣＣレジスタもこのステージで更新される。
【０３７５】
制限された順序
ネットワークプロセッサのパイプラインは、標準設計の流れを標準のメモリインターフェイスにより可能にするように設計される。これは、頻繁に使用される順序、および、パフォーマンスに大きい影響を与える順序に合わせて最適化される、５ステージのパイプラインである。順序のいくつかを最適化することによって、問題がある可能性のある他の順序が存在する可能性がある。これらを、ソフトウェア制限を挿入することによって解決することができる。以下の表５では、本発明の一実施形態による順序の制限のいくつかを挙げる。
【０３７６】
【表５】
2005516432.tif 000011
【０３７７】
パイプラインタイミング図
パイプラインタイミングおよびステージ４８０を、図４５を参照して例示する。この図４８０と、図４４からのパイプラインブロック図４６０は共に、ネットワークプロセッサコア内のパイプラインステージ中の基本的な流れを例示する。図４５は、プログラムカウンタ（ＰＣ）を次の命令のアドレスにより更新することにより開始する。フェッチアドレスバス（ＦＡＢ）はＰＣからその内容を得て、メモリフェッチアクセスを開始する。新しい命令は、フェッチデータバス（ＦＤＢ）において、「復号化」サイクル中に使用可能であり、復号化ロジックに直接渡される。アドレスＡＬＵは「アドレス指定」ステージ中に動作し、新しいデータアドレスをデータメモリに送信する。オペレーションが「ロード」である場合、ロードされたデータはロードデータバス（ＬＤＢ）上で「実行」ステージ中に使用可能である。オペレーションが「ストア」である場合、ストアされたデータはストアデータバス（ＳＤＢ）上でアドレス指定ステージ中に配置される。データＡＬＵはそのソースオペランドを得て、データ演算を「実行」ステージで実行する。実行ステージの終わりまでに、データ演算結果および状態コード（ＣＣ）を宛先レジスタへ、「書き込み」サイクルの次のクロックエッジでラッチする準備ができる。これが「ロード」命令である場合、ロードされたデータはまた宛先レジスタに、「書き込み」サイクルの正のクロックエッジでラッチされる。すべてのレジスタ更新オペレーションはｒｆ＿ｉｎ＿ｍｕｘを通過中であり、実際の更新は「書き込み」サイクル上である。専用レジスタ（ＳＰＲ）のいかなるものへの更新もまた、「書き込み」ステージで行なわれる。
【０３７８】
フレキシブル・パケット・プロセッサにより使用される内部メモリ
図４６を参照して、ネットワークプロセッサ（ＮＰ）において実装するための例示的内部メモリ５００を例示する。本発明の一態様によれば、Ｖｏｂｌａ（ネットワークプロセッサ［ＮＰ］）メモリ（ＶＭＥＭ）５００は小型で高速なメモリであり、ネットワークプロセッサＮＰコアの近傍に位置する。ＶＭＥＭ５００はＮＰに、３つの別々のポートによりサービスし、システムの残りに、２つのポートによりサービスする。本発明の一実施形態によるＶＭＥＭの主な機能には、ＮＰクロックにより動作すること、多数のポートをサポートすること（たとえば、５つのポート）、たとえば毎秒約８Ｇバイト（５アクセスｘ２００ＭＨｚｘ８バイト）の最大帯域幅、６４ＫバイトのＳＲＡＭ―０から４８ＫＢの間の第１のエリアおよび６４から８０ＫＢの間の第２のエリアが含まれる。
【０３７９】
ＳＲＡＭマッピングおよび優先権
ＳＲＡＭは一実施形態では、３つのサブエリアに分割され、すなわち、０から８Ｋ−データおよびタスクのコンテキスト、８から４８Ｋ−データおよびプログラム、および、６４から８０Ｋ−プログラムである。上の６４ＫＢメモリ空間には、リングによって書き込みのために、またマルチリーダによって読み取りのためにアクセスすることができる。一実施形態によれば、メモリエリアの各々における優先権は、以下のルールに従う。すなわち、（１）リングインターフェイス−最高の優先権、（２）プログラム、（３）データ（ロード／ストア）、（４）コンテキスト、および（５）マルチリーダ−最低の優先権である。
【０３８０】
ＶＭＥＭのインターフェイス
ＶＭＥＭは、ＮＰを３つのポート、すなわちデータ（ロード／ストア）、プログラムおよびコンテキストによりサポートする。ＶＭＥＭはリングインターフェイスおよびＮＰコンパウンドを２つのポート、すなわちマルチリーダおよびリングライタによりサポートする。
【０３８１】
ネットワークプロセッサのプログラムバス（ｖ＿ｐｒｏｇｒａｍ）
これは、ＮＰからの「読み取り」ポートである。このバスの各アクセスは、位置合わせされたダブルワード（６４ビット）：アドレスバスのための１５ビット、Ａ（１７：３）である。これにより、３２Ｋダブルワードまたは２５６Ｋバイトへのアクセスが可能となる。Ａ（２：０）はこの場合、「ドントケア」ビットおよび６４ビットのデータ出力バスである。
【０３８２】
ネットワークプロセッサのデータポート（ｖ＿ｄａｔａ）
これは、ＮＰからの「読み取りおよび書き込み」ポートである。データサイズを１バイト（８ビット）、ハーフワード（１６ビット）、ワード（３２ビット）、またはダブルワード（６４ビット）にすることができる。アクセスはデータサイズに位置合わせされなければならない（ハーフワードの境界におけるハーフワードなど）。すべてのアクセスは右に位置合わせされ、ビット０から７におけるバイト、ビット０から１５におけるハーフワード、およびビット０から３１におけるワードである。このポートのための特殊なデータアライナは、入力および出力データを、アドレスおよびサイズトランザクションに従って配列する。このインターフェイスは、ＶＭＥＭへのバイトイネーブル信号を、アドレスビットＡ（２：０）およびトランザクションのサイズに従って生成し、ただし、１６ビットのアドレスバス―Ａ（１５：０）―により、ＶＭＥＭアドレス空間の最初の６４Ｋバイト、Ａ（２：０）およびデータサイズのコントロールイネーブル信号、現在の実施態様におけるＳＲＡＭの４８Ｋバイト、読み取りアクセスのための６４ビットのデータ出力バス、および、書き込みアクセスのためのバス内の６４ビットデータへのアクセスが可能となる。
【０３８３】
ネットワークプロセッサのコンテキストポート（ｖ＿ｃｏｎｔｅｘｔ）
これは、ＮＰからの「読み取りおよび書き込み」ポートである。データサイズは書き込みアクセスではワード（３２ビット）、読み取りアクセスではダブルワード（６４ビット）である。このインターフェイスは、ＶＭＥＭへのバイトイネーブル信号を、アドレスビットＡ（２）に従って生成する。データアライナはこのインターフェイスのために必要とされず、ただし、１１ビットアドレスバス―Ａ（１２：２）―により、メモリ空間の最初の２Ｋワード（８Ｋワード）−Ａ（１：０）およびＡ（１５：３）はこの場合「ドントケア」ビットであり、読み取りアクセスのための６４ビットのデータ出力バス、および、書き込みアクセスのためのバス内の３２ビットデータ入力バスへのアクセスが可能となる。
【０３８４】
マルチリーダポート（ｖ＿ｍｒｄ）
これは、マルチリーダからの「読み取り」ポートである。データサイズはダブルワード（６４ビット）である。
−１３ビットアドレスバス−Ａ（１７：３）。すべてのＶＭＥＭアドレス空間へのアクセスを可能にする。
−Ａ（２：０）−「ドントケア」。
−読み取りアクセスのための６４ビットのデータ出力バス。
【０３８５】
リングインターフェイス書き込みポート（ｒｉｆ＿ｉ）
これは、リングインターフェイスからの「書き込み」ポートである。データサイズは１から８バイトにすることができ、データは１つの位置合わせされたダブルワード内にあり、メモリへの１アクセスのみが必要とされるようにするべきである。データは左に位置合わせされ（ビッグエンディアン）、このポートのための特殊なデータアライナは入力データをＶＭＥＭアドレスに従って配列する。このインターフェイスは、ＶＭＥＭへのバイトイネーブル信号を、アドレスビットＡ（２：０）およびトランザクションのサイズに従って生成し、ただし１８ビットのアドレスバス―Ａ（１７：０）―により、すべてのＶＭＥＭアドレス空間、および、書き込みアクセスのための６４ビットデータ入力バスへのアクセスが可能となる。
【０３８６】
ＶＭＥＭマイクロアーキテクチャ
基本的なＳＲＡＭモジュール
１つの手法によれば、ＶＭＥＭは２種類のＳＲＡＭモジュールを使用し、すなわち、６４ビットの５１２ワード（４ＫＢ）として編成されたシングルポートＳＲＡＭ、および、６４ビットの２０４８ワード（１６ＫＢ）として編成されたシングルポートＳＲＡＭである。各ＳＲＡＭは８バイトイネーブル（ＢＥ）コントロール信号を得る。
【０３８７】
ＳＲＡＭメモリアレイ
ＳＲＡＭアレイは１３のＳＲＡＭモジュールに分割され、全体のサイズは６４Ｋバイトである。
第１のグループは０から４８Ｋバイトの間である。アドレス空間に関して、各ペアのＳＲＡＭは８Ｋバイトを占有する。奇数のＳＲＡＭは第１、第３の８バイトなど（０〜７、１６〜２３など）を含み、偶数のＳＲＡＭは第２、第４の８バイトなど（８〜１５、２４〜３１など）を含む。第２のグループは６４から８０Ｋバイトの間である。このグループは単一の１６ＫバイトＳＲＡＭを含む。
【０３８８】
ＶＭＥＭコントロール
このコントロールは、アドレスおよびデータを有するＳＲＡＭマクロををサポートすること、および、ＳＲＡＭからのデータを正しいバスにルーティングすることを担う。同じＳＲＡＭマクロに２つ以上のアクセスがあるとき、コンテンションが発生する。その場合、優先権メカニズムが、「スターベーション」を回避するために必要とされる。ＶＭＥＭはストール信号を送信し、遅延されたトランザクションはＶＭＥＭによって、サービスを受信するまで保たれる。リングインターフェイスポートからの書き込みアクセスは、最高の優先権を有する。
【０３８９】
制限。実装されていないメモリへのいかなるアクセスも、システムに特別に通知することなく「ガベージ」情報により応答する。ＳＲＡＭマクロの８バイト境界（すなわち、アドレス１２へのトランザクションおよび８のサイズ）を横断するいかなるアクセスも無効であり、結果は予測不可能であり、エラー通知はない。
【０３９０】
データ入力パス
データ入力アライナ。データ入力パスには、以下の２つのデータアライナがある。
ＮＰデータバスのためのデータアライナ。データアライナへの入力は、右に１、２、４および８バイトのサイズにより位置合わせされる。
【０３９１】
リング書き込みバスのためのデータアライナ。データアライナへの入力は、左に（ビッグエンディアン）、ＳＲＡＭにおける１ダブルワード（６４ビット）エントリの一部である１から８バイトの長さにより位置合わせされる。
【０３９２】
データ入力バッファ。ＶＭＥＭにおけるコンテンションの場合にＮＰデータバスおよびＮＰコンテキストバスからの入力データを格納するための、２つの６４ビットデータバッファがある。リング書き込みバスは最高の優先権を有するので、バッファを必要としない。
【０３９３】
アドレス入力パス
アドレス入力バッファ。ＶＭＥＭにおけるコンテンションの場合に、ＮＰデータアドレスバス、ＮＰコンテキストアドレスバス、ＮＰプログラムアドレスバス、およびマルチリーダアドレスバスからの入力アドレスを格納するための、４つの１６ビットアドレスバッファがある。リングインターフェイスは最高の優先権を有するので、バッファを必要としない。
【０３９４】
アドレス入力Ｍｕｘ。各ＳＲＡＭマクロについて４から１ｍｕｘ（マルチプレクサ）がある。すべてのｍｕｘの最初の２つのポートが、リング書き込みアドレスおよびマルチリーダアドレスのポートに接続される。
【０３９５】
第３のポートのための２つのオプションがある。すなわち、ＮＰコンテキストアドレスポート−アドレス０から８Ｋバイトを占有する２つのＳＲＡＭマクロをサポートする２つのｍｕｘに接続するもの、および、ＮＰプログラムアドレスバス−アドレス８Ｋから４８Ｋバイトにおける１０のＳＲＡＭマクロをサポートする１０のｍｕｘに接続するものである。ＮＰデータアドレスバスはｍｕｘにおける１２のアドレスに接続される（最後のＳＲＡＭはデータバスに接続されない）。
【０３９６】
データ出力パス
データ出力ｍｕｘ。６４ビットの４つのデータ出力ｍｕｘがある。マルチリーダのデータ出力バスのための１３から１ｍｕｘ。このｍｕｘは、アドレス０から４８Ｋバイトおよび６４から８０Ｋバイトに存在する１３のＳＲＡＭマクロに接続される。ＮＰデータ出力バスのための１２から１ｍｕｘ。このｍｕｘは、アドレス０から４８Ｋバイトに存在する１２のＳＲＡＭマクロに接続される。ＮＰプログラムデータ出力バスのための１１から１ｍｕｘ。このｍｕｘは、アドレス８Ｋから４８Ｋバイトに存在する１０のＳＲＡＭマクロに、かつ、アドレス６４Ｋから８０Ｋバイトに存在する１つのＳＲＡＭマクロに接続される。ＮＰコンテキストデータ出力バスのための２から１ｍｕｘ。このｍｕｘは、アドレス０から８Ｋバイトに存在する２のＳＲＡＭマクロに接続される。
【０３９７】
データ出力アライナ。ＮＰデータ出力バスのためのデータアライナがある。このアライナの出力は、アクセスサイズ（１、２、４および８バイト）およびアクセスアドレスに従って、右に位置合わせされる。
【０３９８】
フレキシブル・パケット・プロセッサのコアおよび関連コンポーネント（エージェントおよび非エージェント）
本発明の一実施形態によるネットワークプロセッサコアのブロック図を、図３７で提供した。ネットワークプロセッサの「コンパウンド」は、ネットワークプロセッサによって実装された、ネットワークプロセッサコアに密結合されるリングネットワークのモジュールである。ネットワークプロセッサのコンパウンドは、単一のリングインターフェイスおよびアドレス空間を、ネットワークプロセッサコアと共有する。すなわち、ネットワークプロセッサをＳＯＣへ、リングタイプのアーキテクチャを使用して組み込む、本発明の一実施形態によれば、ネットワークプロセッサコアおよびネットワークプロセッサのコンパウンドはすべて、単一のリングメンバの要素である。
【０３９９】
ネットワークプロセッサのコンパウンドには、「エージェント」および「非エージェント」が含まれる。エージェントはネットワークプロセッサコマンドによって、ネットワークプロセッサのエージェントインターフェイスを通じてプログラムされ、これを以下で論じる。非エージェントは、内部エージェントによって、あるいは外部メンバによってリングインターフェイスを通じてプログラムされる。
【０４００】
図４７は、本発明の一実施形態によるネットワークプロセッサ５００の概略図である。図４７は、リングインターフェイス５１２（下部の点線のボックス）およびネットワークプロセッサを例示し、これにはネットワークプロセッサコア５１４および様々なコンパウンドが含まれる。コンパウンドには、ドアベルエージェント５１６、ＣＲＣ／スヌープエージェント５２０、マルチリーダエージェント５２４、タイマエージェント５２６、ｍｅｓｓａｇｅ＿ｓｅｎｄｅｒエージェント５２８、およびＤＭＡエージェント５３０などのエージェントが含まれる。
【０４０１】
マルチリーダエージェント５２４
マルチリーダモジュールは、ネットワークプロセッサメモリからのデータの部分を読み取るための要求にサービスし、受信されたデータを宛先に戻すように送信するエンジンである。ネットワークプロセッサの一実施形態では、宛先はネットワークプロセッサのコンパウンドの外部に位置する可能性が最も高い（このデータを使用する可能性のある内部モジュールは、ＣＲＣスヌーパまたはメモリのみであり、これはメモリの部分がある位置から別の位置にコピーされるときのモードにおけるものである）。マルチリーダはリング書き込みインターフェイスに、かつ、エージェントインターフェイスに接続され、そこから、データをメモリから読み取るための要求を得ることができる。
【０４０２】
オペレーション
マルチリーダエージェントおよびネットワークプロセッサメモリは、同じアドレス空間を共有する。よって、マルチリーダはワーク読み取りタイプのメッセージにのみ応答する。メモリは、ワーク書き込みタイプのメッセージにのみ応答する。
【０４０３】
本発明の一態様によれば、マルチリーダは、データについての要求を以下のモジュールから得ることができる。すなわち、１）「ローカル」のネットワークプロセッサ（エージェントインターフェイスを介する）、２）３つのＤＭＡコントローラ、３）リモート（コンパウンドの外部）のネットワークプロセッサ、および４）ホスト（ＰＰ）である。
【０４０４】
メモリ読み取りのためのすべての外部要求は、要求ＦＩＦＯに格納される。ローカルネットワークプロセッサ要求は、専用要求エントリに格納される。２つの異なるキューが要求のために使用される、２つの理由がある。第１の理由は、前のものがサービスされる前に新しいマルチリード要求を求める場合、ローカルネットワークプロセッサをストールさせる能力を有するためである。第２の理由は、ローカルネットワークプロセッサのマルチリードが終了されたときを知るための能力を有するためである。これらの機能を、ハードウェアによって他の要求リソースのために実装することはできず、これは他の要求ソースが、リングに接続されたメンバによって生成されるからである。
【０４０５】
ネットワークプロセッサ要求エントリは、エージェントインターフェイスから書き込まれ、要求ＦＩＦＯはリングから書き込まれる。すべての要求は要求エントリまたはＦＩＦＯに、それらがサービスされるまで格納される。
【０４０６】
マルチリード要求にサービスする順序は、以下の通りである。ネットワークプロセッサエントリが有効なマルチリード要求を有する場合、これは要求ＦＩＦＯにおける他のいかなる要求よりも前にサービスされる。ネットワークプロセッサ要求エントリが空である場合、他の要求が先入れ先出しベースでサーブされる。
【０４０７】
マルチリーダは、一実施形態では、リングに送信されたデータをストールさせるための能力を有する。ｒｉｎｇ＿ｉｆの出力ＦＩＦＯがフルであるか、あるいは、リングに送信されるべきより高い優先権のメッセージ（たとえば、ＤＭＡ、メッセージセンダのメッセージ）がある場合、データ受け渡しのストールが発生する可能性がある。
【０４０８】
マルチリーダ要求ＦＩＦＯは８エントリの深さであることが好ましい（これは、オーバーランの場合を回避するために十分であるべきである）。図４８は、本発明の一実施形態によるマルチリーダエージェント５２４の概略図である。
【０４０９】
データパッキングおよび位置合わせ
ネットワークプロセッサメモリは、一実施形態では、６４ビットのデータポートを使用する。マルチリーダはこの事実を利用することを望み、そのためあらゆるメモリ読み取りは８バイトのものとなる。このシステムでは、リングを介していかなるメモリ位置からいかなる宛先アドレスへのバイトサイズデータ転送をも可能にする必要がある。
【０４１０】
メモリから読み取られ、リングにおいてリング上に送信されるデータは、左に位置合わせされ（メッセージのＭＳＢ［最上位ビット］）、これはビッグエンディアンのバイト指向が使用されるからである。これらの要件のため、マルチリーダにおけるアライナを追加する必要がある。
【０４１１】
もう１つの目的は、リングを介したデータ転送を最小限にし、ＦＩＦＯへの単純な書き込みを可能にすることである。この目的は、データパッキングロジックを使用して満たされ、これは、最後のものを除くすべての転送されたメッセージが有効な８バイトを含むようになることを意味する。最後のメッセージは、８バイト未満を含む可能性があり、この場合、メッセージタイプは、いくつの有効バイトが存在するかを指示するようになる。
【０４１２】
位置合わせおよびパッキングは以下の方法で行われる。図４９は、位置合わせされたアドレスから読み取るとき、最後のメッセージが８、７、．．．、１の有効バイトを含む場合のデータ位置合わせ５５０を示す。データがメモリに書き込まれるとき、反対の位置合わせが実行されるべきであることに留意されたい。たとえば以下のシナリオ、すなわち、アドレス＝５で開始する１０バイトを読み取ることを考察する。マルチリーダは以下のデータをメッセージに送信する（メッセージのデータ部におけるＸは、このバイトが「ドントケア」であることを意味する）。
【０４１３】
マルチリーダ−メモリインターフェイス
マルチリーダ要求ＦＩＦＯまたは要求エントリにおいて少なくとも１つのマルチリード要求がある場合、マルチリーダはメモリ読み取りサイクルの発行を開始する。マルチリーダがメモリに発行するあらゆる読み取りサイクルは、８バイト要求である（要求の数を減らすため）。メモリ読み取りサイクルは、マルチリーダがアドレスおよび読み取りストローブをメモリのための生成するとき、開始する。メモリはこの要求を検出し、他の要求によりビジーでない場合、データをマルチリーダへ、次のサイクルにおいて駆動する。メモリがビジーであり、データをマルチリーダに駆動することができない場合、マルチリーダをストールさせる。マルチリーダは、ストール信号がアサートされる限り、メモリからのデータを待機する。
【０４１４】
マルチリード要求の発信者は、マルチリードオペレーションが完了することを知るための能力を有することが望ましい。マルチリーダ要求の発信者が「ローカル」のネットワークプロセッサである場合、マルチリードオペレーションが終了しているかどうかを知るための能力を有する。マルチリーダはネットワークプロセッサに、マルチリーダがローカルのネットワークプロセッサのマルチリーダ転送を終了しなかったことを指示する信号を送信する。マルチリーダのビジー指示は、マルチリード要求がネットワークプロセッサのエントリに登録されるときにアサートされ、この要求のデータを含む最後のメッセージがリングに送信された後にネゲートされる。
【０４１５】
マルチリード要求の他の発信者（リモートネットワークプロセッサまたはＰＰなど）では、マルチリード転送側の指示がソフトウェアによってコントロールされる。ソフトウェアコントロールは、特殊なデータワードを、転送されたブロックの最後で準備することによって、達成される。マルチリードオペレーションの宛先はこのデータを「スヌープ」する。このデータが検出されるとき、マルチリードオペレーションが終了される。スヌープの時間中にただ１つの転送しかアクティブになることができないことに留意されたい（そうでない場合、どのオペレーションが終了されるかを検出することが不可能となる）。
【０４１６】
フレーム指示における最初／最後のデータを有するメッセージの送信
マルチリーダは、入力メッセージ（マルチリード要求）のタイプフィールド、または、ネットワークプロセッサのマルチリード要求のオプションビットの中を見て、ビットＦが設定されている場合、マルチリードプロセスにおける最初のメッセージが、フレーム内の最初のバイトを指示する宛先アドレスにより送信される。
【０４１７】
マルチリーダはまた、入力メッセージのタイプフィールド、または、ネットワークプロセッサのマルチリード要求のオプションビットの中を見て、ビットＬが設定されている場合、マルチリードプロセスにおける最後のメッセージが、フレーム内の最後のバイトを指示する宛先アドレスにより送信される。（システムにおけるあらゆるＦＩＦＯは３つのアドレスを有するべきであり、これは、これに書き込むときにフレーム内の最初、最後のデータを指示する）。マルチリーダは、宛先アドレスのビット２、３を、Ｆ、Ｓビットに従って修正する。
【０４１８】
メッセージデータのＣＲＣの計算
メッセージデータのＣＲＣを計算する必要がある場合、マルチリード要求はＳオプションビットを設定しなければならない。このビットはマルチリーダに、Ｓ（スヌープ）ビットが設定されるタイプを有するすべてのメッセージを送信させる。ＣＲＣマシンはこれらのメッセージをスヌープし、データＣＲＣを計算する。ＣＲＣマシンは３２ビットマシンであり、メッセージデータは６４ビット幅であるので、ＣＲＣマシンは、データにおけるＣＲＣ計算が完了しているとき、マルチリーダがそのデータをリングに送信することをストールさせるための能力を有するべきである。
【０４１９】
マルチリーダの入力および出力メッセージフォーマット
一般的なマルチリーダメッセージは、表６に示すように、マルチリーダの入力および出力メッセージフォーマットのために以下のフォーマットを有する。
【０４２０】
【表６】
2005516432.tif 000012
【０４２１】
表７は、マルチリーダがデータをリングに送信するためのマルチリーダ出力メッセージフォーマットを例示する。マルチリーダ入力メッセージタイプは常に読み取りタイプであり、出力メッセージは常にｗｏｒｋ＿ｗｒｉｔｅタイプであることに留意されたい。
【０４２２】
【表７】
2005516432.tif 000013
【０４２３】
ネットワークプロセッサのマルチリード要求フォーマット
ネットワークプロセッサがマルチリード要求を開始するとき、マルチリーダにおいてネットワークプロセッサのエントリに書き込まなければならない。図５０は、マルチリーダがデータをエージェントバス５５６上でマルチリーダオペレーション５５８にマップする方法を示す。オプションは以下の通りである。
Ｌ−フレーム内の最後のマルチリーダ要求の指示（Ｌ＝１  最後）。
Ｆ−フレーム内の最初のマルチリーダ要求の指示（Ｆ＝１  最初）。
Ｓ−ＣＲＣスヌーパのためのスヌープ指示（Ｓ＝１  このメッセージをスヌープする）。
Ｉ−あらゆるマルチリード転送後、宛先アドレスを増分する。
【０４２４】
マルチリーダが前の要求にサービス中でビジーである間にネットワークプロセッサが新しいマルチリード要求を送信する場合、これらの要求はネットワークプロセッサをストールさせる（カウント値がゼロである場合、マルチリーダが２５６バイトをメモリから読み取ることに留意されたい）。
【０４２５】
要求サービング優先権
１つの手法によれば、保留中の複数のマルチリード要求がある場合、これらにサービスする優先権は、（１）保留中の要求がある場合、ローカルのネットワークプロセッサの要求にサービスすること、および（２）すべての他の要求にＦＩＦＯベースでサービスすることになる。
【０４２６】
マルチリーダオペレーションのシナリオ−実施例
実施例Ａ−データを直列送信ＦＩＦＯに送信する。
（１）シリアルはその送信ＦＩＦＯを満たすための要求を送信する。
（２）この要求はドアベルロジックに登録される。この要求がサービスされるとき、ネットワークプロセッサはエージェント書き込みコマンドをマルチリーダに送信し、データ転送を求める。
（３）マルチリーダはメッセージ（またはエージェントコマンド）を復号化し、そのオペレーションを初期化する。
（４）マルチリーダはメモリ読み取りサイクルを開始し、メモリからのデータがマルチリーダに送信される。
（５）マルチリーダはデータをパックし、出力メッセージを生成し、リングが空いている場合、これをリングに送信する。宛先は、周辺デバイスにおける送信ＦＩＦＯである。
（６）データを読み取り、宛先に送信するプロセスは、すべてのデータ転送が完了するまでそれ自体を繰り返す。
【０４２７】
実施例Ｂ−データをＤＭＡ書き込み（送信）バッファに送信する。
（１）ＤＭＡコントローラはマルチリーダメッセージを発行する。このメッセージは、メモリからＤＭＡコントローラ書き込みバッファへのデータ転送を求める（メッセージは、宛先アドレス、および、ネットワークプロセッサメモリにおいて必要とされるバイト数および開始位置を含む）。
（２）マルチリーダはメッセージを復号化し、そのオペレーションを初期化する。
（３）マルチリーダはメモリ読み取りサイクルを開始し、メモリからのデータがマルチリーダに送信される。
（４）マルチリーダはデータをパックし、出力メッセージを生成し、リングが空いている場合、これをリングに送信する。宛先は、ＤＭＡコントローラ内の書き込みバッファである。
（５）このプロセスは、すべてのデータ転送が完了されるまでそれ自体を繰り返す。
【０４２８】
ソフトウェア／ハードウェア制限
本発明の一実施形態によれば、以下の制限が適用される可能性がある。すなわち、ＦＩＦＯにおけるオーバーフローを引き起こさないようにするため、複数のマルチリーダを一度に各ソースから起動しないこと（２つを送信できるＤＭＡを除く）、および、マルチリード要求の宛先がＮＰメモリの１つである場合、位置合わせされたトランザクションのみがサポートされ、これはメモリが書き込み中のメモリエントリのオーバーフローをサポートしない（１つの書き込みコマンドを２つに分割する）からであるということである。
【０４２９】
メッセージセンダエージェント５２８
メッセージセンダエージェント５２８は、ネットワークプロセッサのＡＧＥＮＴコマンドを、リング上の宛先に送信されるメッセージに変換するモジュールである。メッセージセンダは、ネットワークプロセッサのエージェントインターフェイスに接続される。メッセージセンダは強力なモジュールであり、これは、システム内で使用可能であるすべての異なるメッセージタイプにおいてメッセージを生成できるからである。これは、ネットワークプロセッサがメッセージを、リングに接続されるすべてのモジュールに送信することができ、さらに管理メッセージを送るホストを置き換えることもできることを意味する。この機能は、システムのデバッグ中に大変有益となる可能性がある。メッセージセンダ５２８のブロック図を図５１に示す。
【０４３０】
エージェントコマンドに専用の３つの命令、すなわち、ＡＧＥＮＴＷ、ＡＧＥＮＴＷＩおよびＡＧＥＮＴＲがある。メッセージセンダはＡＧＥＮＴＲコマンドを無視する。ＡＧＥＮＴＷ／Ｉコマンドは、３つのレジスタまたは２つのレジスタの値、および即値を、エージェントバスにおいて駆動する。これらのレジスタには、ＲＡ、ＲＡＰおよびＲＢ（またはｉｍｍ８）というマークが付けられる。メッセージセンダはこれらのレジスタの内容を以下のように解釈する（図５２に示す）。
【０４３１】
ＡＧＥＮＴＷコマンドのためのマッピングは、以下の通りである。
ＲＡＰ［２３：０］−宛先アドレスまたは３２ＬＳ（最下位）ビットのデータ。これは、リングに接続されるモジュール（宛先）の２４ビットアドレス、または、６４ビットデータモードを使用するときにリングに送信される４ＬＳバイトのデータである。
【０４３２】
ＲＡ［３１：０］−宛先に送信されるこのデータ（通常、ワーク読み取りメッセージ内で、モジュールから読み取られたデータのための戻りアドレス、および読み取るバイトの数を含む）。
ＲＢ［７：０］−宛先に送信されるメッセージタイプ（ＲＢのＬＳＢのみが使用される）。６４ビットデータメッセージでは、ＲＢはメッセージの宛先のアドレスである。
【０４３３】
ＡＧＥＮＴＷＩコマンドは、２つのレジスタ、８ビット即値（ｉｍｍ８）をエージェントバスにおいて駆動する。これらのレジスタにはＲＡおよびＲＡＰとマークが付けられる。メッセージセンダはこれらのレジスタの内容を以下のように使用する。
ＲＡＰ［２３：０］、ＲＡ［３１：０］−ＡＧＥＮＴＷコマンドと同じである。
【０４３４】
ｉｍｍ８−宛先に送信されるメッセージタイプ。
ＡＧＥＮＴＷＩコマンドが使用される場合、６４ビットデータメッセージを送信する可能性はないことに留意されたい。両方のコマンドはまたオプションビットも駆動し、これらはＡＧＥＮＴ演算コードの部分である。各モジュールはこれらのビットを異なる方法で使用する。メッセージセンダは７オプションビットを使用する。図５２は、エージェント書き込みコマンド５６０の、メッセージ５６２へのマッピングを例示する。
【０４３５】
メッセージセンダが前の要求にサーブ中でビジーである間にネットワークプロセッサがメッセージ送信についての新しい要求を送信する場合、これらの要求はネットワークプロセッサをストールさせる。メッセージセンダは２つのエントリの内部キューを有するようになり、そのため、ネットワークプロセッサをストールさせる前にメッセージを送信するための２つの要求をストアすることができる。
【０４３６】
メッセージセンダ出力メッセージタイプ
表８は、本発明の一実施形態によるメッセージセンダの出力メッセージフォーマットを例示する。
【０４３７】
【表８】
2005516432.tif 000014
【０４３８】
データ位置合わせ。メッセージデータの位置合わせは、メッセージのサイズおよびタイプに従って決定される。以下の表９は、メッセージデータの位置合わせを示す。
【０４３９】
【表９】
2005516432.tif 000015
【０４４０】
６４ビットデータメッセージの送信
メッセージセンダは６４ビットデータメッセージを送信することができる。６４ビットメッセージの送信は、ＡＧＥＮＴＷコマンドのｏｐｔｉｏｎビット［６］を１に設定することによって行なわれる（このオプションは、ＡＧＥＮＴＷＩコマンドでは使用可能ではない）。このオプションが使用される場合、メッセージセンダはＲＡ、ＲＡＰの内容を生データのためのソースとして使用し、ＲＢを生アドレスのためのソースとして使用する。このモードでは、メッセージタイプは常にワーク書き込みであり、８つの有効データバイトを有する。８バイト未満の送信には備えていない。
【０４４１】
データおよびアドレスオプションのハンドリング
メッセージセンダは６つのオプションビットを使用し、これらはネットワークプロセッサによってｒａｗ＿ｄａｔａおよびｒａｗ＿ａｄｄｒｅｓｓの値を修正するために駆動される。この機能は、レジスタ内の値が定数として使用され、必要に応じて修正されるときに有用である。たとえば、ＦＩＦＯに書き込むとき、ＲＡＰの内容はＦＩＦＯアドレスとなり、システムが「フレーム内の最初」または「フレーム内の最後」の位置に書き込もうとするとき、アドレスがオプションビットを使用して修正される。データ修正は、ドアベル要求を送信中であるとき、有用である。ドアベル要求のためのデータは３ビットのみである。よって、生データを修正して、ドアベル要求のためのデータを生成することができる。アドレスおよびデータ修正を以下のように実行することができる。（１）ＲＡＰ［４：２］またはＲＢ（６４ビットデータモード内）の内容がｏｐｔｉｏｎ［２：０］ビットとＯＲされて、メッセージ宛先アドレスが生成されること、および（２）ｏｐｔｉｏｎｓ［５：３］ビットの値がゼロでない場合、ＲＡ［２：０］またはＲＡＰ（６４ビットデータモード内）の内容がｏｐｔｉｏｎｓ［５：３］で置き換えられて、メッセージデータが生成されることである。アドレスおよびデータ修正は、メッセージセンダのオペレーションモードにかかわらず、アクティブである。
【０４４２】
ソフトウェア／ハードウェア制限
本発明の一実施形態では、ソフトウェア／ハードウェア制限には以下が含まれる。すなわち、（１）６４ビットデータモードは、ＡＧＥＮＴＷコマンドを使用中であるときのみ、使用可能であること、および、（２）６４ビットモードでは、メッセージタイプが常にワーク書き込みであることである。
【０４４３】
ＤＭＡエージェント
ＤＭＡ転送要求をシステム内の多数のＤＭＡコントローラの１つに転送することができる、多数のプロセッサを有するシステム（たとえば、多数のネットワークプロセッサを有するシステムオンチップ）では、１つの課題は、ＤＭＡ要求にサービスできるかどうかを、この要求を特定のＤＭＡコントローラに発行する前に知ることである。そうでない場合、ＤＭＡコントローラは、サービスできないＤＭＡ要求でオーバーロードされる可能性がある。
【０４４４】
本発明の１つの有益な態様によれば、ＤＭＡエージェントモジュールを周辺デバイスとして、システム内の各プロセッサに提供することによって、この課題に対処する。本明細書に記載するネットワークプロセッサ（Ｖｏｂｌａ）では、たとえばＤＭＡエージェントなどを、全体のネットワークプロセッサ上で緊密にリンクされたコンパウンドの１つとして実装することができる。すなわち、ＤＭＡエージェントは、リングメンバとして存在する全体のネットワークプロセッサと同じリングインターフェイスを共有するコンパウンドである。
【０４４５】
この手法によれば、ＤＭＡエージェントは、プロセッサによって送信されるＤＭＡ転送要求を、以下のようにコントロールするように動作する。
（１）各ＤＭＡコントローラは、様々なプロセッサにリンクされたＤＭＡエージェントによって使用するためにＤＭＡコントローラが割り付ける、動的なトークンのプールを有する。すなわち、各ＤＭＡコントローラは、ＤＭＡコントローラが様々なＤＭＡエージェントの間で分配させることができるトークンのプールを有する。
（２）各有効なトークンにより、ＤＭＡエージェントが１つのＤＭＡ要求を、そのトークンを「所有」するＤＭＡコントローラに送信することができる。有効なトークンがない場合、ＤＭＡ要求をＤＭＡエージェントによって発行することができず、プロセッサはストールする。
（３）ＤＭＡエージェントは、ＤＭＡエージェントのプール内の有効なトークンの数がソフトウェアによって事前指定された数より少ないときは常に、周期的にＤＭＡコントローラにトークンについて問い合わせる。ソフトウェアによって設定された最大数は変わる可能性がある。
【０４４６】
要約すれば、この手法は、サービスすることができない要求をＤＭＡエージェントが発行するシナリオを回避し、これは、送信することができる要求の最大数が、ＤＭＡエージェントによって保持されたトークンの数を超えないからである。
【０４４７】
ＤＭＡエージェントモジュール５３０（図５３に例示）は、ネットワークプロセッサのＤＭＡコマンドを、ＤＭＡコントローラを初期化するために使用されるリングメッセージに変換する。本発明の一実施形態によれば、各ネットワークプロセッサは１つのＤＭＡエージェントを有する。各ＤＭＡエージェントは、システム内で使用可能であるＤＭＡコントローラのうちあらゆるものを、コンテキストテーブルを使用してコントロールするための能力を有する（たとえば、この実装では、３つのＤＭＡコントローラがあり、各ＤＭＡエージェントは最大４つのＤＭＡコントローラをコントロールすることができる）。１つの手法によれば、第４のＤＭＡコントローラは、将来のシステム拡張のために提供される。
【０４４８】
ＤＭＡエージェントは、ネットワークプロセッサのエージェントインターフェイス、およびリング書き込みインターフェイスに接続される。ＤＭＡエージェントレジスタはホストのみによって、書き込みバスを介して、リングメッセージを使用して書き込むことができる。コンテキストテーブルはＰＰによって一度初期化され、通常の作業中に変更されない。トークンレジスタは、ＤＭＡコントローラによってのみ書き込まれるべきである。
【０４４９】
要求のためのソース
ＤＭＡエージェントは、ＤＭＡチャネルのみを初期化するための要求を、エージェントインターフェイスを介して、専用ネットワークプロセッサＤＭＡコマンドを使用して受信することができる。ＤＭＡエージェントは、２つのエントリの「小さい」要求キューを有し、これは、ＤＭＡ要求にサービスできなかった場合、ネットワークプロセッサをストールさせる必要性を最小限にするためである（たとえば、これは、たとえば使用可能なトークンがない場合、または、リングがビジーであるためにＤＭＡがメッセージをＤＭＡコントローラに送信できない場合、発生する可能性がある）。
【０４５０】
要求優先権。ＤＭＡコントローラにおけるＤＭＡ要求には２つの優先権レベルがある。低い方の優先権レベルは「通常」であり、高い方の優先権レベルは「緊急」である。デフォルトでは、すべてのＤＭＡ要求は通常である。ＤＭＡ要求は、ネットワークプロセッサがこれを緊急と定義する場合、緊急になることができる。緊急の優先権を有する要求は、メッセージ設定において「ｕｒｇ」ビットを有し、ＤＭＡコントローラキューにおいてより高い優先権を得るようになる。ＤＭＡエージェントはｕｒｇビットを無視し（これをＤＭＡコントローラ上に送信する）、要求の到着順にサービスする。
【０４５１】
ＤＭＡエージェントのコンテキストテーブル
ＤＭＡエージェントのコンテキストテーブルは、ネットワークプロセッサのＤＭＡコマンドを、選択されたＤＭＡコントローラに送信される実際の要求にマップする。実際の要求は、現在のＤＭＡ転送のためのパラメータを定義する。このコンテキストテーブルは４つのエントリを有する。使用されるテーブルエントリは、ＤＭＡコマンドにおけるＤＲＡＭアドレスの４ＭＳＢ（最上位ビット）から符号化された２ビットポインタによって決定される。（４ビットが使用される理由は、ＤＲＡＭアドレス空間が１６の部分に分割され、４つの部分のみがＤＭＡによってアクセスできるからである）。エントリ割り付けはハードコードされる。コンテキストテーブルに、書き込みメッセージを使用して書き込むことができる。このテーブルは、いかなるＤＭＡアクセスの開始前にも、初期化されるべきである。コンテキストテーブルを、読み取りメッセージを使用して読み取ることができる。
【０４５２】
ＡＤＤＲ＝ＤＭＡ−ＡＧＥＮＴ−ＢＡＳＥからＤＭＡ＿ＡＧＥＮＴ＿ＢＡＳＥ＋＄Ｆである。１チャンネルに割り付けることができるトークンの最大数は１５であることに留意されたい。表１０は、ＤＭＡコンテキストテーブルの説明を提供する。
【０４５３】
【表１０】
2005516432.tif 000016
【０４５４】
ＤＭＡエージェントトークンのコントロール。異なるコンテキストを有する異なるソースからのＤＭＡ転送を管理するため、フリートークン転送に基づいた手法が使用される。この手法によれば、ＤＭＡエージェントはトークンのプールを有する。ＤＭＡ要求のサービスは、ＤＭＡエージェント内でこのＤＭＡチャネルに割り付けられた使用可能な有効なトークンがある場合にのみ、開始することができる。有効なトークンがある場合、ＤＭＡ要求の処理は、前述のように開始することができる。ＤＭＡ要求を実行するための使用可能なトークンがない場合、これがＤＭＡエージェントキューに登録され、ＤＭＡエージェントがＤＭＡコントローラからトークンを得るまで、実行を待機する（ＤＭＡエージェントキューがフルである場合、要求がネットワークプロセッサをストールさせることに留意されたい）。
【０４５５】
トークン分配は、メッセージを使用して実行される。ＤＭＡエージェントは、有効なトークンの数が許可されたトークンの最大数（コンテキストテーブルで指定される）より少ないたびに、トークンについての要求をＤＭＡコントローラに発行する。ＤＭＡコントローラはトークンをエージェントに戻すように送信し、このトークンに、そのトークンリスト内で使用済としてマークを付ける。ＤＭＡコントローラは、ＤＭＡ転送が終了されるとき（すなわち、メッセージをドアベルに送信する前に）、このトークンを再度解放する。ＤＭＡコントローラがフリートークンを有していない場合、ＤＭＡエージェントに無効トークンを送信する（すなわち、トークン応答内のすべてのビットはゼロである）。
【０４５６】
ＤＭＡコントローラはＤＭＡエージェントに有効なトークンを、使用されたトークンのアドレスに送信する（ＤＭＡエージェントはこのアドレスをトークン要求メッセージ内で送信する）。本発明の一実施形態によれば、各ＤＭＡコントローラは各ＤＭＡチャネルについて最大１６トークンのプールを有する。言うまでもなく、各ＤＭＡコントローラについて使用可能であるトークンの数には柔軟性があり、システムのニーズに従って変わる可能性がある。ＤＭＡエージェントのトークンレジスタは、ＤＭＡコントローラが使用のために割り付けたトークン番号を含む（有効なトークンには、適切なビットを１に設定することによってマークが付けられる）。トークンレジスタには、ＤＭＡコントローラによってのみ書き込むことができる。ＤＭＡエージェントには４つのトークンレジスタがある。表１１は、ＤＭＡエージェントチャネル［ｉ］トークンレジスタを例示する。
【０４５７】
【表１１】
2005516432.tif 000017
【０４５８】
表１２は、ＤＭＡエージェントチャネル［ｉ］トークンレジスタの説明を提供する。
【０４５９】
【表１２】
2005516432.tif 000018
【０４６０】
ＤＭＡ要求がＤＭＡエージェントに登録されるとき、ＤＭＡエージェントは適切なトークンレジスタを探索して、有効なトークンがあるかどうかを確かめる。有効なトークンがある場合、ＤＭＡエージェントはそれらのうち１つ（たとえば、それが発見する最初のもの）を使用し、そのトークンに無効とマークを付ける。次いで、ＤＭＡエージェントは、チャネル初期化のためのデータ転送を開始する。ＤＭＡエージェントはまた、ＤＭＡコントローラに、使用済トークンを新しいものと置き換えるためのメッセージも送信する（これは、ワーク読み取りタイプのメッセージとなる）。ＤＭＡエージェントがトークン置換要求を発行したという指示は、関連するトークンレジスタのｒｅｑビットを設定することによって行なわれる。ＤＭＡコントローラが使用可能なフリートークンを有する場合、これをＤＭＡエージェントに送信し、エージェントは、使用済トークンを新しいもので置き換える（すなわち、要求ビットがクリアされる）。ＤＭＡコントローラが使用可能なフリートークンを有していない場合、ＤＭＡエージェントに無効トークンを送信する（すなわち、すべてのトークンビットがクリアされ、ｒｅｑビットがクリアされる）。ＤＭＡエージェントは新しいトークン置換要求を、最大４サイクル後に発行する。
【０４６１】
アドレスエラーコントロール
ＤＭＡエージェントは、ＤＭＡ転送が各外部ＤＭＡチャネルのための不当な外部アドレスに行なわれるかどうかを認識するための能力を有する。ＤＭＡエージェントがこのようなアクセスを識別するとき、特殊なエラーメッセージをＰＰに送信し、ＰＰに不等なアクセスパラメータを通知する。
【０４６２】
アドレスエラー計算は、ネットワークプロセッサによってＤＭＡコマンドを使用して書かれたＳＤＲＡＭアドレスにおいて実行される。ＳＤＲＡＭアドレスは２つの部分に分割される。第１の部分は、アドレスのビット［３１：２８］であり、第２の部分はアドレスのビット［２７：２０］である。アドレスエラーロジックはＳＤＲＡＭアドレスの第１の部分を値の各々（０、０ｘ２、０ｘ４、０ｘｆ）と比較し、これらはＳＤＲＡＭエリアの４ＭＳビットに対応する。合致が発見されない場合、アドレスエラーが発生し、特殊なエラーメッセージがＤＭＡエージェントによって生成される。合致がある場合、第２の部分のビットが、プログラムされたマスクに従ってゼロと比較される。結果がゼロに等しくない場合、アドレスエラーが生じ、エラーメッセージが送信される。
【０４６３】
アドレスエラーマスクレジスタ。４つ（各外部チャネルにつき１つ）の８ビットレジスタが、アドレスエラー計算のためのマスク値を格納するために使用される。マスク値は、ＳＤＲＡＭアドレスの第２の部分におけるビットのいくつか（ビット２７〜２０）の比較をマスクするために使用される。マスクレジスタにおけるビットが設定される場合、対応するＳＤＲＡＭアドレスビットは、アドレスエラー計算において比較されない。レジスタのリセット値はゼロであり、すべての８ビットの比較が可能にされる。表１３は、ＤＭＡアドレスエラーマスクレジスタ［ｉ］を例示する。
【０４６４】
【表１３】
2005516432.tif 000019
【０４６５】
表１４は、ＤＭＡアドレスエラーマスクレジスタの説明を提供する。
【０４６６】
【表１４】
2005516432.tif 000020
【０４６７】
（ＤＭＡコントローラが、アドレスエラーロジックが検出しない無効な外部アドレスにアクセスする場合があることに留意されたい。たとえばこれは、転送のベースアドレスが実際または標準の範囲内であるが、ＤＭＡによって転送中に生成されたアドレスがこの範囲をオーバーフローする場合に起こる可能性がある。）（ネットワークプロセッサがＤＭＡ要求を、初期化されなかったチャネルに発行する［すなわち、対応するコンテキストテーブルエントリが初期化されなかった］場合、アドレスエラーが生じることに留意されたい。）
【０４６８】
ＤＭＡエージェントの入力および出力メッセージフォーマット
ＤＭＡエージェント入力および出力メッセージフォーマットを説明する。一般的なＤＭＡエージェントメッセージは、表１５のようなフォーマットを有する。
【０４６９】
【表１５】
2005516432.tif 000021
【０４７０】
ＤＭＡエージェントの出力メッセージフォーマット符号化を、以下の表１６に示す。
【０４７１】
【表１６】
2005516432.tif 000022
【０４７２】
ＤＭＡコントローラメッセージデータ
１つの手法によれば、ＤＭＡエージェントはＤＭＡコントローラに、ネットワークプロセッサによって開始された各ＤＭＡ転送について２つのメッセージを送信する。以下の表は、各メッセージのデータ部分を記載する。表１７は、ＤＭＡコントローラメッセージ番号１を例示する。
【０４７３】
【表１７】
2005516432.tif 000023
【０４７４】
ＤＭＡエージェントからＤＭＡコントローラに送信される第１のメッセージは、ＤＭＡ要求ドアベルのための戻りアドレス、および内部ＳＲＡＭアドレスを含む。ドアベルおよびＳＲＡＭアドレスは２４ビット幅である。
【０４７５】
ドアベルアドレス［２３：０］−ＤＭＡコントローラが肯定応答を転送の最後に送信するべき先のドアベルレジスタの２４ビットである。このアドレスの６ＬＳＢビットは、ＤＭＡコマンドが開始されたときのタスクＩＤ番号である。
ＳＲＡＭアドレス［２３：０］−内部ＳＲＡＭ内の２４ビットアドレス（これは、フルリングアドレスである）。
【０４７６】
表１８は、ＤＭＡコントローラメッセージ番号２を例示する。
【０４７７】
【表１８】
2005516432.tif 000024
【０４７８】
第２のメッセージは、外部ＤＲＡＭアドレス、および、ＤＭＡ転送のためのコントロール情報を含む。コントロール情報には以下が含まれる。
ｕｒｇ−１ビットの緊急ＤＭＡ要求。
ｄｉｒ−１ビットの転送方向（ＳＲＡＭからＤＲＡＭへ、または、ＤＲＡＭからＥＸＡＭへ）。この情報はＤＭＡコマンド内で発見される。（ｄｉｒ＝０  ＳＲＡＭからＤＲＡＭへ、ｄｉｒ＝１  ＤＲＡＭからＳＲＡＭへ）。
【０４７９】
ａｃｋ１−ドアベル肯定応答イネーブルのビット。このビットはＤＭＡに、ドアベルを転送の最後に送信するべきであるかどうかを伝える。この情報はＤＭＡコマンド内で発見される。
ｃｏｕｎｔ［７：０］−８ビットの転送サイズ。この情報はＤＭＡコマンドから来る。
ｖｓｔ［２：０］−３ビットのビジタコード。これらのビットは、ＤＭＡコントローラがどの要求ビットをドアベル要求レジスタに設定するべきであるかを指示する。
【０４８０】
ｅｎｄ−エンディアンモードビット。エンディアンビットは、ＤＭＡエージェントＩＤのＬＳＢビットである。（ｅｎｄ＝０  ビッグエンディアンモード）。
トークン要求およびトークン応答メッセージ。表１９および２０は、トークン要求およびトークン応答メッセージをそれぞれ例示する。トークン要求のデータ部分は、新しいトークンにより書き込まれるべきトークンレジスタ内のアドレスを含む。
【０４８１】
【表１９】
2005516432.tif 000025
【０４８２】
【表２０】
2005516432.tif 000026
【０４８３】
ＤＭＡエージェントによるメッセージ宛先アドレスの計算。１つの手法によれば、ＤＭＡエージェントがＤＭＡコントローラに送信するメッセージは、３つの異なる宛先に送信される。これらのメッセージ宛先のうち最初の２つは、以下の通りである。
ＤＥＳＴＩＮＡＴＩＯＮ＿ＡＤＤＲＥＳＳ１＝｛ＤＭＡ＿ＢＡＳＥ＿ＡＤＤＲＥＳＳ［１３：０］，０，１，ｔｏｋｅｎ＿ｎｕｍｂｅｒ［３：０］，０，０，０，０｝
ＤＥＳＴＩＮＡＴＩＯＮ＿ＡＤＤＲＥＳＳ２＝｛ＤＭＡ＿ＢＡＳＥ＿ＡＤＤＲＥＳＳ［１３：０］，０，１，ｔｏｋｅｎ＿ｎｕｍｂｅｒ［３：０］，１，０，０，０｝
トークン要求の宛先アドレスは以下の通りである。
ＤＥＳＴＩＮＡＴＩＯＮ＿ＡＤＤＲＥＳＳ３＝｛ＤＭＡ＿ＢＡＳＥ＿ＡＤＤＲＥＳＳ［１３：０］，１０’ｂ０｝
【０４８４】
エラーメッセージフォーマット
表２１は、エラーメッセージフォーマットを例示する。
【０４８５】
【表２１】
2005516432.tif 000027
【０４８６】
（ドアベルアドレスは、アドレスエラーが発生していない場合、ドアベルがＤＭＡ転送の最後に転送されているべき先のアドレスである。このアドレスはタスクＩＤ情報を６ＬＳＢビットにおいて含み、メッセージエラーが送信された元のネットワークプロセッサのベースアドレスをビット２３〜６において含む。）
【０４８７】
ネットワークプロセッサＤＭＡ要求フォーマット
ネットワークプロセッサがＤＭＡ要求を開始するとき、図５４は、ＤＭＡエージェントがエージェントバス５７６上のデータをＤＭＡ要求５７８にマップする方法を示す。
【０４８８】
図５４に示すオプションは、以下の通りである。
Ｄ−データ転送の方向（Ｄ＝０  ＳＲＡＭからＤＲＡＭへ、Ｄ＝１  ＤＲＡＭからＳＲＡＭへ）。
ＮＡ−ＤＲＡＭ転送の最後に肯定応答なし（ＮＡ＝０  肯定応答を送信、ＮＡ＝１  肯定応答を送信しない）。ＤＭＡエージェントがメッセージをＤＭＡコントローラに送信するとき、このビットの設定により、ＮＯＴにドアベルエージェント内のＤＭＡマスクビットも設定させる。
【０４８９】
Ａ−ドアベルマスクレジスタ内で自動設定ビットを設定する。
Ｕ−緊急ＤＭＡ要求。
Ｍ−アドレスを修正する。このビットの設定により、ＳＲＡＭアドレスおよびＤＲＡＭアドレスの修正が可能となる。
Ｌ−ロングアドレスモード。ＲＡの２４ビットをＳＲＡＭ内部アドレスとして使用する（通常モード［Ｌ＝０］では１６ビットのみが使用され、リングベースアドレスの８ＭＳＢがＲＡの１６ビットに付加されて、内部ＳＲＡＭアドレスが形成される）。
【０４９０】
ＤＭＡエージェントは、ネットワークプロセッサのＤＭＡ要求を格納するための２つの要求エントリを有する。両方のエントリがフルであり、ネットワークプロセッサが新しい要求を発行する場合、ネットワークプロセッサは、要求のうち１つがサービスされるまで、ストールされる。
【０４９１】
アドレス修正
コントロールコード書き込み（本発明のネットワークプロセッサのオペレーションをコントロールするためなど）における１つの共通オペレーションは、読み取り／書き込みオペレーションのための宛先アドレスの計算である（添付において論じるＶｏｂｌａネットワークプロセッサのための読み取り／書き込みコマンドなど）。宛先アドレスを、たとえば、以下のいくつかのモードに従って計算することができる。
【０４９２】
（１）即値アドレス指定−宛先アドレスはコマンド内に含まれ、計算は必要とされない。
（２）レジスタＡ＋レジスタＢ−宛先アドレスは、レジスタＡおよびレジスタＢの値の和である。
（３）レジスタ＋オフセット−宛先アドレスは、レジスタＡの値、および即値オフセット値の和である。
【０４９３】
しばしばアドレス計算の引数の１つが、データ構造のベースアドレスをポイントするために使用され、他の引数が、データ構造内のオフセットをポイントするために使用される。１つの困難は、同じデータ構造が何度も異なるオフセットによりアクセスされる場合、または、異なるデータ構造が同じオフセットを使用してアクセスされる場合、アドレス計算を繰り返し実行しなければならないことである（最初の場合、新しいオフセットを毎回計算し、２つ目の場合、新しいベースアドレスを毎回計算する）。これらの冗長アドレス計算は、サイクルコストを与え、全体の効率を低減する。
【０４９４】
したがって、本発明の１つの有益な態様は、特殊なアドレス計算モードをネットワークプロセッサのデータ構造アクセスコマンドに追加することを提供する（たとえば、添付におけるＤＭＡおよびＡＧＥＮＴＷコマンドを参照）。起動されるとき、この特殊なモードは宛先アドレスを、ベースアドレス、オフセットおよびアドレス変更子を使用して自動的に計算させる。
【０４９５】
一実施態様によれば、この特殊モードにおける宛先アドレスは以下のように計算される。
ＤＥＳＴ＿ＡＤＤＲＥＳＳ＝ＢＡＳＥ＿ＡＤＤＲＥＳＳ＋ＯＦＦＳＥＴ＋ＭＯＤＩＦＩＥＲ
したがって、この手法の一実施形態によれば、エージェントのオプションビット９（ＤＭＡコマンドの１つにおけるもの）が設定される場合、コントロールメッセージをＤＭＡコントローラに送信する前に、ＤＭＡエージェントはＳＲＡＭアドレスおよびＤＲＡＭアドレスの値（ネットワークプロセッサによって書かれたもの）を修正する。アドレス修正は以下の方法で実装される。ＤＲＡＭアドレスビット１、２、３がカウントビット２、３、４と（それぞれ）ＯＲされ、ＳＲＡＭアドレスビット１、２、３がカウントビット５、６、７と（それぞれ）ＯＲされる。アドレス修正が使用されるとき、ＤＭＡ転送サイズは、以下の表２２に挙げる４つのオプションのうち１つに制限される。
【０４９６】
【表２２】
2005516432.tif 000028
【０４９７】
特殊なモードのアドレス指定の一実施例は有益である。Ｖｏｂｌａを含む通信プロセッサのための内部メモリ内に位置するデータ構造がアドレスＸで開始すると仮定する。この構造のサイズはＳＩＺＥバイトである。さらに、ＸからオフセットアドレスＸ＋ＯＦＦＳＥＴ１で開始するこの構造の一部を、アドレスＹ＋ＯＦＦＳＥＴ２で開始するアドレスＹで開始する外部データ構造にコピーすることを望むと仮定する。したがって、ＸおよびＹベースのアドレスがレジスタに格納される。従来の手法によれば、アドレス計算は以下のようになる。
ＡＤＤ１＝Ｘ＋ＯＦＦＳＥＴ１
ＡＤＤ２＝Ｙ＋ＯＦＦＳＥＴ２
ＤＭＡ  ＡＤＤ１、ＡＤＤ２、ＳＩＺＥ
【０４９８】
この従来の手法は、３つのプログラムメモリ位置を消費し、実行に少なくとも３サイクルを要する。本発明による特殊モードを使用すると、アドレス修正を使用したコードは、この行のみとなる。
ＤＭＡ  ＡＤＤ［１］，ＡＤＤ［２］，ＳＩＺＥ，ＯＦＦＳＥＴ１，ＯＦＦＳＥＴ［２］
このコードは、１つのプログラムメモリ位置を消費し、実行に１サイクルを要し、したがってプログラム空間を節約し、パフォーマンスを増大させる。
【０４９９】
本発明の一実施形態によれば、通信プロセッサにおいてデータ構造アドレスコマンドのためのアドレス計算を実行するための方法が提供される。この方法は、リングベースのアーキテクチャにおいて、ネットワークプロセッサのための読み取りコマンドおよび書き込みコマンドのライブラリを提供するステップと、オプションビットを読み取りコマンドおよび書き込みコマンドに、アドレス計算修正モードのために含めるステップと、ネットワークプロセッサによって発行されたアドレスを含む要求に応答して、読み取り要求および書き込み要求をＤＭＡコントローラに転送するためのエージェントモジュールを提供するステップと、読み取り要求および書き込み要求をＤＭＡコントローラに転送する前に、オプションビットが設定されるとき、アドレスの値を修正するステップとを含む。この方法は、一実施形態では、外部データ構造への繰り返されるアクセスを、宛先アドレスを全体としてそのつど再計算することなく可能にする。
【０５００】
アドレスの値を修正するステップは、一実施形態では、ベースアドレス、オフセット、およびアドレス変更子を使用して宛先アドレスを自動的に計算するステップを含む。
さらに、アドレスの値を修正するステップにより、一実施形態では、単一の読み取りコマンドまたは書き込みコマンドを使用して宛先アドレスの計算を可能にする。
【０５０１】
ドアベル設定マスク
ＤＭＡエージェントは、ＤＭＡコマンドが発行されるたびに、ＤＭＡマスクビットをドアベルエージェントに設定することを担う。ＤＭＡマスクビットは、ＮＡビットがクリアされる場合にのみ設定される（肯定応答がＤＭＡ転送のために必要とされない場合、マスクを設定する必要はない）。自動設定オプションビットが設定され、ＮＡビットがクリアされる場合、２つのマスクビットが同時にドアベルに設定される。設定されるべきビットの索引は、コンテキストテーブルにおけるビジタビットに従って決定される（自動設定コードは固定される）。
【０５０２】
ＤＭＡエージェントオペレーションのシナリオの実施例
実施例Ａ−ネットワークプロセッサが書き込みＤＭＡアクセスを求める。
（１）ホストはＤＭＡコンテキストテーブルを、チャネル構成のすべてにより初期化しなければならない。これは、すべての可能な構成について一度行われるべきである。
（２）ネットワークプロセッサはＤＭＡコマンドをエージェントバス上に発行する。
（３）ＤＭＡエージェントは、要求キューに要求を登録し、パラメータを抽出する。
（４）ＤＭＡエージェントは、要求の処理を開始するためのＤＭＡコントローラからの使用可能なトークンがあるかどうかをチェックする。使用可能なトークンがない場合、この要求は、使用可能なトークンが存在するようになるまで、キューにおいて実行を待機する。また、要求キューがフルである場合、ネットワークプロセッサがストールされる。
（５）使用可能なトークンがあると仮定すると、要求の処理が開始する。ＤＭＡエージェントはＤＭＡコントローラに、転送のすべてのパラメータを含む２つのメッセージを送信する。
（６）これは書き込み要求であるので、ＤＭＡコントローラはマルチリーダメッセージを発行する。マルチリーダメッセージは、ネットワークプロセッサのメモリからＤＭＡ書き込みバッファへのデータ転送を要求する。
（７）ＤＭＡ転送が終了されるとき、ＤＭＡコントローラはメッセージをドアベルに送信する。
【０５０３】
実施例Ｂ−ネットワークプロセッサが読み取りＤＭＡアクセスを求める。
（１）ホストはＤＭＡコンテキストテーブルを、チャネル構成のすべてにより初期化しなければならない。これは、すべての可能な構成について一度で行われるべきである。
（２）ネットワークプロセッサはＤＭＡコマンドをエージェントバス上に発行する。
（３）ＤＭＡエージェントは、要求エントリに要求を登録し、パラメータを抽出する。
（４）ＤＭＡエージェントは、要求の処理を開始するためのＤＭＡコントローラからの使用可能なトークンがあるかどうかをチェックする。使用可能なトークンがない場合、この処理は、使用可能なトークンが存在するようになるまでストールされる。
（５）使用可能なトークンがあると仮定すると、要求の処理が開始する。ＤＭＡエージェントはＤＭＡコントローラに、転送のすべてのパラメータを含む２つのメッセージを送信する。
（６）転送が終了されるとき、ＤＭＡコントローラはメッセージをドアベルに送信する。ＤＭＡコントローラは新しいトークンをＤＭＡエージェントに送信することができる。
【０５０４】
ソフトウェア／ハードウェア制限。本発明の一実施形態によれば、ＤＭＡコントローラのみがトークンレジスタに書き込むことができる。
本発明の一実施形態によれば、少なくとも１つのリングネットワーク上で実装される通信プロセッサが提供される。通信プロセッサは、少なくとも１つのリングネットワーク上のリングメンバを含む、複数のプロセッサと、少なくとも１つのリングネットワーク上の複数のＤＭＡコントローラとを含み、、ＤＭＡコントローラは、複数のプロセッサによるＤＭＡ要求のサービスをコントロールする。通信プロセッサはさらに、複数のプロセッサに結合された複数のＤＭＡエージェントを含み、各ＤＭＡエージェントは、プロセッサを含むリングメンバの一部であり、各ＤＭＡエージェントは、使用可能なＤＭＡコントローラを反映するトークンのプールからの有効なトークンが存在するかどうかを判断することによって、プロセッサＤＭＡ要求にサービスするように適合される。
【０５０５】
トークンを、ＤＭＡコントローラによってＤＭＡエージェントに発行された、いつ特定のＤＭＡコントローラアクセスが使用可能であるかを指示するための、ＤＭＡコントローラに特有のトークンにすることができる。プロセッサがＤＭＡ要求を発行するたびに、一実施形態では、関連付けられたＤＭＡエージェントは、有効なトークンが存在するかどうかを判断し、有効なトークンが存在する場合、そのトークンに関連付けられたＤＭＡコントローラを使用してそのＤＭＡ要求にサービスする。トークンに、トークンがＤＭＡ要求にサービスするために使用されるとき、使用済または無効としてマークを付けることができる。有効なトークンが存在しない場合、ＤＭＡエージェントはＤＭＡ要求を、有効なトークンが存在するようになるまでキューイングする。関連付けられたＤＭＡエージェントを、既存の有効なトークンがＤＭＡ要求にサービスするために使用された後、自動的に新しい有効なトークンを要求するように適合させることができる。各ＤＭＡエージェントは、一実施形態では、プールにおける有効なトークンの数が最大数より下がるとき、追加の有効なトークンを要求するように適合される。プロセッサは、一実施形態では、複数のネットワークプロセッサを含み、少なくとも１つのリングネットワークは複数のリングネットワークを含む。
【０５０６】
一実施形態では、トークンのプールは、ＤＭＡコントローラによって書き込まれるレジスタに格納される。
ＤＭＡエージェントを、プロセッサＤＭＡ要求に、それらを少なくとも１つのリングネットワーク上に送信されたメッセージに変換することによって、サービスするように適合させることができる。同様に、ＤＭＡコントローラは有効なトークンを、リングネットワーク上で特定のＤＭＡエージェントによって受信されるメッセージを送信することによって、分配することができる。各ＤＭＡコントローラをさらに、有効なトークンとして分配されているこれらのトークンを含む、トークンのリストを維持するように適合させることができる。
【０５０７】
ＤＭＡコントローラを、有効なトークンが使用可能でないときに、ＤＭＡエージェントからの追加のトークンについての要求に、無効なトークンにより応答するように適合させることができる。各ＤＭＡコントローラは、各ＤＭＡチャネルにつき、たとえば最大１６トークンのプールを有することができる。ＤＭＡコントローラは、一実施形態では、少なくとも１つのリングネットワーク上で移動する読み取りメッセージを発行することによって、ＤＭＡエージェントのためのトークンのプールを有するレジスタを読み取ることができる。
【０５０８】
ＣＲＣエージェント（スヌープ）５２０
図５５は、本発明の一実施形態によるＣＲＣエージェント５２０の概略図である。巡回冗長検査（ＣＲＣ）エージェントはネットワークプロセッサのコンパウンドモジュールであり、ＣＲＣ計算を実行するためのロジックを実装する。ＣＲＣエージェントは、ＣＲＣ３２、ＣＲＣ１６、ＣＲＣ１０などのような異なるタイプのＣＲＣ計算を、異なるデータサイズ（１から８バイト）についてサポートする。１つの手法によれば、ＣＲＣエージェントは２つの主なオペレーションのモードで動作する。第１のモードは「スヌープ」モードであり、第２のモードは「オンデマンド」モードである。スヌープモードでは、ＣＲＣエージェントは、Ｓビットが設定されるメッセージについてスヌープする。ＣＲＣはこれらのメッセージを検出し、メッセージデータにおいて選択されたＣＲＣを計算する。第２のモードのオペレーションはオンデマンドモードである。オンデマンドモードでは、ネットワークプロセッサはデータをＣＲＣに書き込み、ＣＲＣはこのデータをその計算のために使用する。
【０５０９】
ネットワークプロセッサはＣＲＣレジスタに、エージェントバスを介して、ＡＧＥＮＴＷ／Ｉコマンドを使用して書き込むことができる。ネットワークプロセッサはＣＲＣ剰余を、エージェントバスを介して、ＡＧＥＮＴＲコマンドを使用して読み取ることができる。ネットワークプロセッサがＣＲＣ結果を読み取り、結果がまだ準備できていない場合、ＣＲＣエージェントはネットワークプロセッサをストールさせることができる。ＣＲＣモジュールはまた、３２ビットの乱数を生成可能にすることもできる。
【０５１０】
ＣＲＣエージェントの機能
ＡＴＭセル処理ＡＡＬ５のためのＣＲＣ３２、および、ＯＡＭ  ＡＴＭセルのためのＣＲＣ１０のＣＲＣ計算を実行する。これには、最後の送信ワードの２２ビットデータにおけるＣＲＣ１０の計算、１０ビットＣＲＣを２２ビットデータにマージして、マルチリーダによって送信される最後の３２ビットワードを生成すること、ＡＴＭパフォーマンス監視のためのＢＩＰ１６−このプロセスはＣＲＣ計算と並列に行なわれること、ＡＴＭセル処理ＡＡＬ２のためのＣＲＣ５（オンデマンドモードのみ）、ＣＲＣ生成（送信）のための１９ビットデータのためのＣＲＣ５の計算−（ＣＲＣ５が０によりｉｎｉｔされない限り）、ＣＲＣチェック（受信）のための２４ビットデータのためのＣＲＣ５の計算、ＩＰストリームのためのチェックサムのサポートが必要である。これは、３２ビット（または６４ビット）データにおいて行なわれる。１６ビットデータへの収束は、ソフトウェアによって実行される。
【０５１１】
ＣＲＣエージェントは以下の２つのオペレーションのモードを有する。
転送されたいかなるデータについても実行されるオンデマンドモード（たとえば、ＣＲＣ５、ハッシング関数）、および、シリアルインターフェイスから／へ送信された連続データシーケンスについて実行されるスヌープモードである。
【０５１２】
ＣＲＣエージェントを、８、１６、２４または３２ビットのデータのＣＲＣを単一サイクルで計算するように適合させることができる。ＣＲＣがスヌープのために使用可能にされる場合、ＣＲＣ剰余レジスタからのネットワークプロセッサエージェント読み取り命令は、「最後」の指示が最後のデータワードと共に到着するまで、ストールする。特殊なコントロールにより、ＣＲＣ剰余を部分的データ（ＣＲＣ１０内の２２ビット、またはＣＲＣ３２内の０ビット）において計算することができ、次いで、ＣＲＣ剰余が部分的データと結合されて、フレームの３２ビットの最後のワードが形成され、これがマルチリーダブロックに送信のために公開される。ＣＲＣ５では、ＣＲＣモジュールは、送信のための１９ビットデータから、あるいは、受信におけるＣＲＣチェックのための２４ビットデータから、５ビットＣＲＣを計算することができる（オンデマンドモード）。
【０５１３】
一実施形態におけるＣＲＣエージェントは、送信バスに−ＴＸデータのスヌープおよびＣＲＣの計算のため、エージェントバスに−構成、オンデマンド起動および読み取り／書き込み剰余のため、インターフェイスするように適合される。
【０５１４】
ＣＲＣへのネットワークプロセッサの書き込み。ネットワークプロセッサ５１４はＣＲＣエージェント５２０に、ＡＧＥＮＴＷコマンドを使用して書き込むことができる。ＡＧＥＮＴコマンド５９０の、ＣＲＣデータ５９２へのマッピングを、図５６に示す。
【０５１５】
オプションには、以下が含まれる。
ＴＹＰＥ［２：０］−３ビットＣＲＣ。このタイプは０００−ＣＲＣ３２、００１−ＣＲＣ１０、０１０−ＣＲＣ５、０１１−チェックサム、１００−ＣＲＣ１６、１１１−ＢＩＰ１６（ＢＩＰ１６存在レジスタを書き込むためのみ）。ＢＩＰ１６マシンは、これらのすべてのマシンと並列に動作する。
【０５１６】
ＳＩＺＥ［２：０］−ＲＡのＬＳＢで開始するデータ内の有効バイトの数（１から８）（ｓｉｚｅ＝０は、メッセージ内の８つの有効バイトを意味する）。
Ｇ−このビットは、ＣＲＣエージェントが、生成ＣＲＣまたはチェックＣＲＣモードで動作するかどうかを指示する。
【０５１７】
Ｓ−ＣＲＣモジュールのオペレーションモード。Ｓ＝１の場合、ＣＲＣはスヌープモードで動作する。Ｓ＝０の場合、ＣＲＣはオンデマンドモードで動作する。オンデマンドモードで動作中であるとき、ＣＲＣ計算のためのデータおよび剰余がネットワークプロセッサによって書き込まれる。メモリ内のデータはビッグエンディアンフォーマットで格納され、ネットワークプロセッサのレジスタファイル内のデータはリトルエンディアンフォーマットで格納されるので、ＣＲＣモジュールは、ＣＲＣ計算の前にメッセージデータのある操作を実行することができる（特に、データサイズが３２または６４ビットでない場合）。
【０５１８】
Ｏ−剰余を上書きする。Ｏ＝１の場合、ＲＢ／ｉｍｍ８からの新しい剰余がＣＲＣ計算のために使用される。Ｏ＝０の場合、剰余レジスタの現在の値が使用される。
ＣＲＣ剰余レジスタ。ＣＲＣモジュールは２つの剰余レジスタを含む。第１の剰余レジスタは６４ビットレジスタであり、ＣＲＣおよびチェックサム計算のための剰余を含む。第２の剰余レジスタは３２ビットレジスタであり、ＢＩＰ１６計算のための剰余を含む。
【０５１９】
ネットワークプロセッサによるＣＲＣレジスタの読み取り
ネットワークプロセッサはＣＲＣ計算の結果を、ＡＧＥＮＴＲコマンドを使用して読み取ることができる。読み取られるＣＲＣマシンの結果は、選択されたオペレーションのモードに従って決定される。
【０５２０】
ＢＩＰ１６マシンの計算結果は、ネットワークプロセッサによって読み取ることができる異なるレジスタを有する（すなわち、２つの剰余レジスタは２つの異なるアドレスを有する）。ネットワークプロセッサがＣＲＣレジスタの１つを読み取り、結果が準備できていない場合、ネットワークプロセッサはストールされる。
【０５２１】
ＣＲＣ計算は、スヌープモードですべてのデータが到着した（メッセージ内の最終の指示）後に完了されると見なされる。オンデマンドモードでは、ＣＲＣ計算の結果は、データサイズが４バイトより小さい場合、それが書き込まれた後の１サイクルを、また、より大きいデータサイズでは、それが書き込まれた後の２サイクルを読み取るために使用可能となる。
【０５２２】
ＣＲＣエージェントのオペレーションシナリオ、実施例
実施例Ａ−オンデマンドモードでＣＲＣを計算する。
（１）ネットワークプロセッサはＣＲＣエージェントに、ＡＧＥＮＴＷコマンドを使用して書き込む。ＣＲＣエージェントに書き込まれるデータには以下が含まれ、すなわち、ＣＲＣタイプ、それにおいてＣＲＣが計算されるデータ、データのサイズ（有効バイトの数）、および、現在の剰余が上書きされる場合の新しい剰余であり、オペレーションのモードはオンデマンドモードで動作するように設定され、ＣＲＣ５モードではＧも書き込まれるべきである。
（２）データがＣＲＣに書き込まれた後の１または２サイクルで（データ内の有効バイトの数に応じて、ＣＲＣマシンはＣＲＣを１サイクルで３２ビットにおいて計算することができる）、ネットワークプロセッサはＣＲＣ結果を読み取ることができる。
【０５２３】
実施例Ｂ−ＣＲＣを送信データにおいて計算する（マルチリーダデータ出力）。
ＣＲＣマシンは送信データのＣＲＣを、マルチリーダ出力メッセージのＳおよびＬビットをスヌープすることによって計算することができる。ネットワークプロセッサはＣＲＣエージェントを以下の方法で初期化する。
【０５２４】
（１）ＣＲＣタイプ。
（２）現在の剰余が上書きされる場合、新しい剰余。剰余のデータおよびデータサイズは、メッセージデータおよびタイプの部分からそれぞれ取られる（エージェントバスのデータ部分は、スヌープモードでは無視される）。
（３）オペレーションのモードがスヌープモードで動作するように設定され、送信データバスをデータのためのソースとして選択しなければならない。
（４）最後のデータがＣＲＣに到着した後の１または２サイクルで（データ内の有効バイトの数に応じて、ＣＲＣマシンはＣＲＣを１サイクルで３２ビットにおいて計算することができる）、ネットワークプロセッサはＣＲＣ結果を読み取ることができる。
【０５２５】
実施例Ｃ−受信データのＣＲＣを計算する。
ＣＲＣマシンは受信データのＣＲＣを、エージェント書き込みバスメッセージのＳおよびＬビットをスヌープすることによって計算することができる。ネットワークプロセッサはＣＲＣエージェントを以下の方法で初期化する。
【０５２６】
（１）ＣＲＣタイプ。
（２）現在の剰余が上書きされる場合、新しい剰余。データおよびデータサイズは、メッセージデータおよびタイプの部分からそれぞれ取られる（エージェントバスのデータは、スヌープモードでは無視される）。
（３）オペレーションのモードがスヌープモードで動作するように設定されなければならない。
（４）最後のデータがＣＲＣに到着した後の１または２サイクルで（データ内の有効バイトの数に応じて、ＣＲＣマシンはＣＲＣを１サイクルで３２ビットにおいて計算することができる）、ネットワークプロセッサはＣＲＣ結果を読み取ることができる。
【０５２７】
タイマエージェント５２６
図５７を参照して、本発明の一実施形態によるタイマエージェント５２６の例示的実施形態を例示する。タイマモジュールは、ネットワークプロセッサのタスク内で様々なイベントへのタイムスタンプの割り当てを可能にするように設計される。１つの手法によれば、タイマは３２ビットのカウントアップ自走カウンタを含む。このカウンタは、以下の公式を使用して計算することができる周波数でカウントする。
Ｆ（カウンタ）＝［Ｆ（クロック）］／［２＊（プレスケール値＋１）］
【０５２８】
通常、カウンタ周波数は１ＭＨｚに設定される（１マイクロ秒の周期に対応する）。プレスケールカウンタは１０ビットのダウンカウンタであり、その入力クロック周波数をプレスケール値で除算する。プレスケール値がゼロに等しい場合、プレスケーラはバイパスされる。
タイムスタンプ値をネットワークプロセッサによってタイムスタンプレジスタから、エージェントインターフェイスを使用して読み取ることができる。
【０５２９】
ネットワークプロセッサによるタイマへの書き込み
ネットワークプロセッサはタイマに、ＡＧＥＮＴＷ／ＡＧＥＮＴＷＩコマンドを使用して書き込むことができる。タイマオペレーションを使用可能にするために、２つの値のみが必要とされる。第１の値は、レジスタＲＢ内に存在するコントロール情報、またはｉｍｍ８値である（１つの手法によれば、１ビットのみが使用される）。第２の値はプレスケール値であり、タイマのカウント周波数を決定するものである。プレスケール値はＲＡの１０ＬＳＢから取られる。ＲＡＰの値は無視される。図５８は、ＡＧＥＮＴＷコマンド６０２の、タイマデータ６０４へのマッピングを例示する。
【０５３０】
タイマコントロールレジスタ
タイマコントロールレジスタは、プレスケール値を格納し、タイマカウントオペレーションを使用可能／使用不可能にするために使用される。タイマコントロールレジスタは、ＡＧＥＮＴＷ／Ｉコマンドを使用して書き込まれ、ＡＧＥＮＴＲコマンドを使用して読み取られる。表２３および２４は、タイマコントロールレジスタ、および、タイマコントロールレジスタの説明をそれぞれ示す。
【０５３１】
【表２３】
2005516432.tif 000029
【０５３２】
【表２４】
2005516432.tif 000030
【０５３３】
タイムスタンプレジスタ
タイムスタンプレジスタは、エージェント読み取りオペレーションの時点のタイマカウンタの値を含む。このレジスタはネットワークプロセッサによって、ＡＧＥＮＴＲコマンドを使用して読み取られる。表２５はタイムスタンプレジスタを例示し、表２６はタイムスタンプレジスタの説明を提供する。
【０５３４】
【表２５】
2005516432.tif 000031
【０５３５】
【表２６】
2005516432.tif 000032
【０５３６】
ドアベルエージェント５１６
図５９は、本発明の一実施形態によるドアベルエージェント５１６の概略図である。ドアベルエージェントはスケジューラモジュールであり、タスクの実行順序をハンドリングする。ドアベルは、ネットワークプロセッサのエージェントインターフェイス、およびリング書き込みインターフェイスに接続される。ドアベルレジスタには、ネットワークプロセッサによって、特殊なＡＧＥＮＴコマンドの１つを使用して、あるいは、書き込みバスを介してリングメッセージを使用して（たとえば、シリアルおよびホストによって）、アクセスすることができる。異なるソースからのすべての可能なサービス要求はドアベルエージェントに、書き込みバスを介して入る。ドアベルが要求メッセージを検出するとき、この要求をドアベルロジックに登録する。
【０５３７】
本発明の一実施形態によれば、ドアベルエージェントは最大６４の異なるタスクの要求をハンドリングすることができる。ドアベルは（すべてのマスクされていないタスクのうち）最高の優先権の保留中要求を選択し、そのタスクＩＤをネットワークプロセッサに、次のタスクＩＤとして送信する。ネットワークプロセッサはドアベルに、それが実行中である現在のタスクＩＤを戻すように送信する。ネットワークプロセッサはこのタスクＩＤ情報を使用して、プリフェッチ、バンプおよびタスクスイッチングを前述のように実行する。
【０５３８】
要求のためのソース
ドアベル要求のためのソースには、以下が含まれる。
通常のシリアル、タイマまたはソフトウェア要求：（たとえば、別のタスクからのメッセージ）この要求は、データフラグメントがＲＸ  ＦＩＦＯにおいて受信されていること、送信のためにＴＸ  ＦＩＦＯにさらにデータを書き込むための余地があること、または、タイマがそのカウントを終了したことを指示する。
【０５３９】
ＤＭＡ要求：ＤＭＡがそのデータ転送を終了した。
自己要求：タスクがそれ自体をイールドするとき（すなわち、タスク実行時間が最大可能な実行時間を越えるとき）、ソフトウェアはその実行を、自己要求ビットを設定することによって再開することができる。タスクの開始点は、何がＥＰ（エントリポイント）レジスタに書き込まれるかによって決まる。ＥＰレジスタを、ハードウェアによって、あるいはソフトウェアによって更新することができる。
【０５４０】
１つの手法によれば、あらゆる要求ビットはそれ自体のマスクビットを有する（自己要求を除く）。マスクビットがクリアされるとき、要求が無視され、タスクはタスクスイッチングをトリガすることができない。自己要求は、マスクすることができない要求ビットのみを構成する。タスクが実行に入るとき、その対応する要求ビットおよびすべてのマスクビットが自動的にクリアされる。（自動設定［ａｓｅｔ］および緊急ステータスビット［ｕｒｇ］を除く）。これは、同じ要求に複数回サービスすることを回避するために行なわれる。
【０５４１】
実行のための次のタスクの選択
１つの手法によれば、実行のための次のタスクを選択するためのアルゴリズムは以下の通りである。実行のための次のタスクの選択に関与するタスクは、それについてタスク・グローバル・マスク・レジスタ（ＴＧＭＲ）内のそれらの対応するマスクビットがクリアされるタスクである。次のタスクの選択に関与し、マスクされていない要求を有するタスクは、４つのグループに分割され、以下の順序でサービスされる。
【０５４２】
（１）最高の優先権のグループは、タスク番号０〜３１の緊急要求を含む。
（２）第２の優先権のグループは、タスク番号０〜３１の通常要求を含む。
（３）第３の優先権のグループは、タスク番号３２〜６３の緊急要求を含む。
（４）最低の優先権のグループは、タスク番号３２〜６３の通常要求を含む。
各グループ内で、要求がタスク番号に従ってサービスされる。より低いタスク番号の要求は、より高いタスク番号の要求の前にサービスされる。
【０５４３】
ネットワークプロセッサからのドアベルレジスタへのアクセス
ネットワークプロセッサはドアベルレジスタに、エージェントインターフェイスを介して、特殊なＡＧＥＮＴコマンドの１つを使用してアクセスすることができる。
【０５４４】
ネットワークプロセッサは、現在のタスクのレジスタビット（要求、マスク、カウンタビット値）、または、グローバル・マスク・レジスタ（ＴＧＭＲ）のみを直接修正することができる。他のタスクレジスタビットの修正は、リング書き込みバスを介して、メッセージをメッセージセンダエージェントからドアベルに送信することによって、行なうことができる。
【０５４５】
現在のタスクのマスク、要求、および、カウンタビット６１４を修正するためのデータ６１２は、図６０に例示するように、エージェントコマンドのＲＢ／ｉｍｍ８部分において符号化される。ドアベルロジックはＲＢ／ｉｍｍ８の８ＬＳＢを復号化し、適切なビットを現在のタスクレジスタ、カウンタ、緊急またはＴＧＭＲに設定する。
【０５４６】
要求またはマスクビットの設定は、ＡＧＥＮＴコマンドのＲＢ／ｉｍｍ８部分におけるコマンド索引の５ビット、次いで設定される索引または要求ビットの３ビット、次いで設定されるマスクビットの３ビットに書き込むことによって実行される。一度に１つのマスクビットのみをネットワークプロセッサによって、単一のエージェントコマンドを使用して設定できることに留意されたい（他のマスクビットが設定された場合、これらは自動設定ビットを除いて、エージェント書き込みコマンドによってクリアされる。自動設定ビットの書き込みは、他のマスクビットをクリアしない）。要求ビットへの書き込みは、それらがすでに設定された場合、他の要求ビットをクリアしない。索引値がゼロである場合、レジスタのその部分への書き込みは無視される。
【０５４７】
表２７は、メッセージのＲＢ／ｉｍｍ８部分の復号化、および、行なわれるオペレーションを示す。
【０５４８】
【表２７】
2005516432.tif 000033
【０５４９】
ドアベルによって使用されるエージェントコマンドのオプションは、以下の通りである。
ＣＭ−マスクをクリアする。このビットの設定により、現在のタスクのマスクビットのすべてのビット（自動設定ビットを含む）がクリアされる。
ＣＲ−要求をクリアする。このビットの設定により、現在のタスクの要求ビットのすべてのビットがクリアされる。
【０５５０】
ＳＧ−グローバルを設定する。このビットは、タスク・グローバル・マスク・レジスタ（ＴＧＭＲ）ビットが設定されるかクリアされるかを、エージェントコマンドのＲＡ／ＲＡＰ部分のデータに従って判断する。ＳＧビットが設定される場合、ＴＧＭＲビットが、ＲＡ、ＲＡ＋１データにおける設定ビットに対応する位置で設定される。
【０５５１】
マスクレジスタビットのクリアは、コマンドにおいてマスクをクリアする（ＣＭ）ビットに「１」を書き込むことによって実施される。ＣＭオプションが、別のマスクビットが書き込まれると同時に使用される場合、この設定オペレーションはＣＭオペレーションを上書きする。
【０５５２】
要求ビットのクリアは、コマンドにおいて要求をクリアする（ＣＲ）ビットに「１」を書き込むことによって実施される。要求のクリアが、要求がリングから設定されると同時に起こる場合、この要求は設定される（設定がリセットを上書きする）。
【０５５３】
周辺デバイス要求マスクビット（ｍｐｒｅｑ）もまた、ネットワークプロセッサによって設定することができ、これは、イールドコマンド、および、デフォルトマスクを設定するオプションが使用されるときである。他の要求ビットはクリアされる。
【０５５４】
ネットワークプロセッサは現在のタスクのＤＭＡ要求カウンタを、エージェントバスのＲＢ／ｉｍｍ８部分を｛１，０，０，０，０，ｃｏｕｎｔ＿ｖａｌｕｅ［２：０］｝に設定することによって、初期化することができる。
【０５５５】
ＴＧＭＲの書き込みは、エージェントバスのＲＢ／ｉｍｍ８部分を｛０，１，０，０，０，０，０，０｝に設定することによって行なわれる（以下のタスク・グローバル・マスク・レジスタ（ＴＧＭＲ）の考察も参照）。
【０５５６】
現在のタスクの優先権ビットの書き込みは、エージェントバスのＲＢ／ｉｍｍ８部分を｛１，１，０，０，０，０，０，ｕｒｇｅｎｔ＿ｖａｌｕｅ｝に設定することによって行なわれる（以下のタスク優先権のコントロールの考察も参照）。
【０５５７】
ネットワークプロセッサからのドアベルレジスタの読み取り
現在のタスクのドアベルビット（すなわち、要求ビット、マスクビットおよびカウンタ値）は、ネットワークプロセッサのタスクＳＰＲレジスタにおいて反映される。ＴＧＭＲを、エージェント読み取りコマンド（ＡＧＥＮＴＲ）を使用して読み取ることができる。
【０５５８】
ＤＭＡエージェントからのドアベルマスクビットの設定
ＤＭＡマスク（ｍｄｍａ）ビットおよび自動設定（ａｓｅｔ）ビットを設定するためのもう１つのオプションは、ネットワークプロセッサのＤＭＡコマンドを使用することによるものである。ＤＭＡコマンドは、ＤＭＡマスクビットおよび自動設定ビットを設定するためのオプションを有する。
【０５５９】
ＤＭＡエージェントがＤＭＡコマンドを検出するとき、適切なマスクビットをドアベルに、ＤＭＡコンテキストテーブルを使用して設定することができる（コンテキストテーブルは、どのビットを設定するかについての情報を格納する）。マスク設定は、ＤＭＡコマンド内のＮＡビットがクリアされる場合、行なわれる。自動設定ビットは、ＤＭＡコマンド内のＡオプションビットが設定される場合、設定される。
【０５６０】
リングからのドアベル要求ビットの設定
ドアベルレジスタには周辺デバイス、ネットワークプロセッサおよびホストによって、リングメッセージを使用してアクセスすることができる。周辺デバイスが要求ビットを設定することを望むたびに、周辺デバイスは書き込みメッセージを、それが設定することを望むドアベルエントリの宛先アドレスにより送信する。ドアベルは適切な要求ビットをドアベルレジスタに、メッセージのデータフィールドの内容に従って設定する。
【０５６１】
要求ビットおよび対応するマスクビットが設定される場合、有効な要求がドアベル・優先権・ロジックに送信される。マスクおよび自動設定ビットを、リング書き込みバスから修正することはできない。表２８は、入力メッセージフォーマットのための符号化を示す。ドアベルは、表２８に記載されたタイプからのメッセージに応答する。
【０５６２】
【表２８】
2005516432.tif 000034
【０５６３】
ドアベルレジスタのファイルフォーマット
一実施形態によれば、ドアベルレジスタファイルは６４のレジスタを含む。したがって、各可能なタスクはそれ自体のドアベルレジスタを有する。ドアベルレジスタは、表２９に示すフォーマットを有する。
【０５６４】
【表２９】
2005516432.tif 000035
【０５６５】
ＡＤＤＲ＝ＤＯＯＲＢＥＬＬ＿ＢＡＳＥからＤＯＯＲＢＥＬＬ＿ＢＡＳＥ＋＄３Ｆ（現在のタスクレジスタビットは、ネットワークプロセッサのステータスレジスタにおいて反映されることに留意されたい。）（要求およびマスクビットのすべて［自動設定ビットを含まない］は、タスクが実行に入るとき、自動的にクリアされることに留意されたい。）
表３０は、本発明の一実施形態によるドアベルレジスタの説明を提供する。
【０５６６】
【表３０−１】
2005516432.tif 000036
【０５６７】
【表３０−２】
2005516432.tif 000037
【０５６８】
タスク・グローバル・マスク・レジスタ（ＴＧＭＲ）。タスク・グローバル・マスク・レジスタ（ＴＧＭＲ）は６４ビットレジスタ（各タスクにつき１ビット）であり、これにネットワークプロセッサが、ＡＧＥＮＴコマンドを使用してアクセスすることができる。ＴＧＭＲは、実行のための次のタスクを計算するとき、どのタスクが考慮に入れられるかを決定するために使用される。あらゆる設定ビットは、対応するタスクが実行のための次のタスクとして選択されることを、そのタスクがサービスするための有効な要求を有する（少なくとも１つの対応するマスクおよび要求ビットが設定される）場合でも、防止する。
【０５６９】
ＴＧＭＲの書き込みは、一実施形態によれば以下の方法で行われる。ＡＧＥＮＴ書き込みコマンドは、ＲＢまたはｉｍｍ８フィールドのＬＳＢの値０１００００００を含まなければならない。ＳＧオプションビットの値、およびＲＡ、ＲＡＰの値に基づいて、ＴＧＭＲビットが設定またはクリアされる。対応するＲＡ、ＲＡＰビット設定を有するビットのみが影響を受ける。
【０５７０】
ＴＧＭＲを、ＡＧＥＮＴＲコマンドを使用して読み取ることができる。ＴＧＭＲの３２ＬＳＢはドアベルのアドレス０に位置し、３２ＭＳＢはアドレス１に位置する。ユーザはすべての６４ビットを、ＡＧＥＮＴＲコマンドの二重読み取りオプションを使用して読み取ることができる。３２ビットのみが読み取られる場合、データの他の部分がゼロにされる。
【０５７１】
ＤＭＡ要求のハンドリング
ＤＭＡ要求を多数のＤＭＡコントローラに発行可能である、多数のタスクを実行することができる多数のプロセッサを有するシステムでは、１つの課題は、ある時点で、プロセッサ上で実行中の特定のタスクによって発行されたＤＭＡ要求のすべてが終了されるかどうかを知ることである。この課題は著しい可能性があり、これはＤＭＡ要求を、プロセッサ上で実行中の異なるタスクによって異なるＤＭＡコントローラに発行することができるからである。また、ＤＭＡ要求が、発行された順序の範囲外で終了する可能性もある。
【０５７２】
１つの手法によれば、本発明は、ＤＭＡエージェント（前述）がシステム内の各プロセッサに関連付けられると規定する。この場合、ＤＭＡエージェントの役割は、関連付けられたプロセッサによって作成されたＤＭＡ転送要求をコントロールすることである。ＤＭＡエージェントによって発行された各ＤＭＡ要求について、ＤＭＡエージェントは指示をブックキーピングユニットに送信する。一実施形態では、ブックキーピングユニットは、各プロセッサのためのドアベルタスクレジスタ内の要求カウンタである。ブックキーピングユニットはこの指示を受信し、要求カウンタを増分する。好ましいシステムはマルチタスキングを実行するので、要求カウンタは、プロセッサによって実行された各タスクについて別々のエントリ（または別々の要求カウンタ）を含むことができる。
【０５７３】
ターゲットＤＭＡコントローラがＤＭＡ転送を完了するとき、ＤＭＡコントローラはカウンタ減分メッセージをブックキーピングユニットに発行する。次いで、関連するエントリ（または関連する要求カウンタ）が１だけ減分される。関連するエントリ（または関連する要求カウンタ）がゼロに到達するとき、システムは、そのタスクのためのすべてのＤＭＡ転送が完了されていることを知る。
【０５７４】
したがって、本発明の一実施形態によれば、正常なタスクの実行中に、複数のＤＭＡ転送が開始される可能性がある。これらの各々は、そのデータ転送をいかなる所与の時間にも、場合によってはそれらが開始された順序ではなく、終了させる可能性がある。通常、タスク内ですべての異なるＤＭＡチャネルからのすべてのＤＭＡ転送が終了した後にのみ、有効な要求をトリガすることが好ましい。この要件を実装するために、各ドアベルタスクレジスタはそれ自体の要求カウンタを有する。
【０５７５】
要求カウンタは、カウンタ増分指示を得るたびに増分される。カウンタ増分指示は、ネットワークプロセッサＤＭＡコマンド内のオプションである（これはＮＡビットである）。ＤＭＡコマンドが発行され、ＮＡビットがクリアされるたびに、カウンタが１だけ増分される。
【０５７６】
ＤＭＡコントローラまたは周辺デバイスが、要求レジスタ内のＤＭＡビットに書き込むことによって、その肯定応答をドアベルに戻すように送信するとき、カウンタは１だけ減分される。
【０５７７】
カウンタがゼロに到達し、有効なイールドがネットワークプロセッサによって実行されたとき、ドアベルレジスタ内のＤＭＡビットが設定される。ｍｄｍａビットも設定される場合、タスクスイッチ要求が発行される。
【０５７８】
本発明の一実施形態によれば、少なくとも１つのリングネットワーク上で実装される通信プロセッサが提供される。通信プロセッサは、少なくとも１つのリングネットワーク上のリングメンバを含む、複数のプロセッサと、少なくとも１つのリングネットワーク上の複数のＤＭＡコントローラであって、複数のプロセッサによるＤＭＡ要求のサービスをコントロールする複数のＤＭＡコントローラと、複数のプロセッサに結合された複数のＤＭＡエージェントとを含む。さらに、各ＤＭＡエージェントは、プロセッサを含むリングメンバの一部であり、各ＤＭＡエージェントは、ＤＭＡエージェントによってＤＭＡコントローラに発行された各ＤＭＡ要求についてのインジケータを、ＤＭＡエージェントに結合された要求カウンタに発行するように適合され、それにより、各ＤＭＡエージェントが、ＤＭＡエージェントに関連付けられたプロセッサに代わって発行されている未解決のＤＭＡ要求のカウントを維持できるようにする。一実施形態では、要求カウンタは、プロセッサによって実行される各タスクについての別のカウントを維持し、要求カウンタは、最大６４タスクをサポートするドアベルレジスタに含まれる。
【０５７９】
ターゲットＤＭＡコントローラによるＤＭＡ要求の履行において、ターゲットＤＭＡコントローラを、要求カウンタにカウントを１だけ減分させる応答を発行するように適合させることができる。この場合、ＤＭＡエージェントによってＤＭＡコントローラに発行されたＤＭＡ要求、および、ターゲットＤＭＡコントローラによって発行された応答を、少なくとも１つのリングネットワーク上でメッセージとして送信することができる。また、カウンタがゼロに戻り次第、所与のタスクについてのすべてのＤＭＡ要求が履行されているために、プロセッサが他のタスクにスイッチ可能にすることができる。この場合、異なるタスクのための新しいＤＭＡ要求が、カウンタが所与のタスクについてゼロに戻るようになるまで延期されるようにすることができる。
【０５８０】
本発明のもう１つの実施形態によれば、少なくとも１つのリングネットワーク上で実装されるマルチタスキング通信プロセッサにおけるＤＭＡコントローラへのアクセスをコントロールする方法が提供される。この方法は、ＤＭＡ要求をターゲットＤＭＡコントローラに発行するステップと、ＤＭＡ要求のカウントをタスク毎のベースで維持するステップと、ＤＭＡ要求がターゲットＤＭＡコントローラによって履行されているという肯定応答を発行するステップとを含む。この方法はさらに、カウントを肯定応答に基づいて減らすステップと、カウントがゼロに戻っているとき、ＤＭＡ要求を発行することを担うプロセッサが、新しい活動を実行できるようにするステップとを含む。一実施形態では、ＤＭＡ要求は、少なくとも１つのリングネットワーク上でメッセージとして発行される。同様に、肯定応答を、少なくとも１つのリングネットワーク上でメッセージとして発行することができる。
【０５８１】
自動設定
パフォーマンスを増大させるため（たとえば、あらゆるタスクの最後でデフォルトマスクを設定する必要をなくすため）、自動設定機能性が定義される。ａｓｅｔ（自動設定）ビットが設定されるとき、ネットワークプロセッサへの要求およびタスクスイッチをトリガすることなく、所望の要求が発生した後に、マスクビットがそれらのデフォルト値に設定される。自動設定ビットは、ネットワークプロセッサによってエージェントインターフェイスを使用して、あるいはＤＭＡコマンドを使用することによって（これはＤＭＡコマンドのオプションの１つである）、書き込むことができる。
デフォルトマスクは以下の通りである。すなわち、周辺デバイス要求マスクビット（ｍｐｒｅｑ）が設定され、すべての他のマスクビットがクリアされる（表２８を参照）。
【０５８２】
タスク優先権のコントロール
タスクスケジューリングに影響を与えるために、タスク優先権レベルをコントロールする能力を有することが望ましい。ドアベルモジュールはこの要件を２つの方法でサポートする。第１の方法は、ドアベルタスクレジスタ（タスクＳＰＲではない）内のｕｒｇビットを使用したソフトウェアコントロールである。各ドアベルタスクは、そのタスクレジスタ内で緊急の優先権ビットを有する（ｕｒｇ）。このビットが設定されるとき、タスクは緊急となり、そのすべての要求が緊急の要求と見なされる。緊急ビットは、ネットワークプロセッサによってクリアされない限り、設定されたままとなる。
【０５８３】
要求優先権レベルをコントロールするための第２の方法は、メッセージをドアベルに、要求優先権レベルを指示する緊急ステータスと共に送信することによるものである。現在のステータスの上書きも設定される場合、ドアベル内の要求優先権のステータスビットも更新される。タスクの緊急ステータスビットが設定される場合、そのタスク要求も緊急と見なされる。このビットは主にハードウェアによってコントロールされる。
タスク優先権はネットワークプロセッサのステータスレジスタ内で反映されることにも留意されたい。
【０５８４】
ドアベルオペレーションのシナリオ
実施例Ａ−通常のシリアル要求。
（１）シリアルがメッセージを、ドアベルレジスタファイル内のそのタスク要求レジスタの宛先アドレスにより送信する。メッセージのデータ部分は、どのビットを設定するかを指定する。
（２）このタスクについて対応するマスクビットが設定されている場合（これはデフォルトマスクである）、有効な要求がドアベル・優先権・ロジックに送信される。
（３）この要求が最高の優先権の保留中要求になるとき、ネットワークプロセッサのタスクスイッチをトリガすることができる。
（４）ドアベルは、イールドが実行されるたびに、最高の優先権の保留中要求のタスク番号をサンプリングする。保留中のタスクがない場合、ドアベルは、最初に保留中のタスクが存在するまで待機し（次のタスクが現在のタスクである場合を除く。この場合、タスクスイッチが生じないので、ネットワークプロセッサはイールド指示まで待機する）、次いで次のタスクＩＤをサンプリングする。
（５）次のタスクＩＤがネットワークプロセッサによってサンプリングされた後、ネットワークプロセッサは次のタスクレジスタのプリフェッチを実行する。
（６）次のタスクＩＤが現在のタスクＩＤになる。
（７）ドアベルロジックは、要求ビット、および、タスクスイッチを引き起こしたタスクのマスクレジスタをクリアする。
（８）ドアベルは新しい次のタスクＩＤを計算する。
【０５８５】
実施例Ｂ−ＤＭＡ要求。
ＤＭＡ要求のハンドリングは、シリアル要求のハンドリングに大変類似している。違いは、ＤＭＡ要求およびマスクビットを設定するプロセスのみである。ＤＭＡコマンドが発行されるときに、どの要求マスクビットが設定されるべきであるかについての情報はない。ドアベルロジックはこの情報をＤＭＡエージェントから得る。これは、ＤＭＡコンテキストテーブル、および、ネットワークプロセッサＤＭＡコマンド内の特殊なオプション（ＤＭＡコマンド内のＮＡビット）を使用して行なわれる。ＤＭＡ要求がＤＭＡエージェントに登録されるとき、ＤＭＡエージェントはドアベルレジスタ内のＤＭＡマスクビットを設定する。ＤＭＡエージェントはまたＤＭＡコントローラに、ＤＭＡ転送が終了されるときにどの要求ビットに肯定応答を送信するべきであるかも伝え、これは要求カウンタを減分するためである。カウンタがゼロに到達するとき、かつ、適切なマスクビットが設定される場合、有効なタスクスイッチ要求がドアベルロジックに発行される。
【０５８６】
実施例Ｃ−自動設定を有するＤＭＡ要求。
自動設定ビットが設定されるとき、ドアベルロジックは、現在のタスクが終了された後に、タスクスイッチングのための要求をアサートすることなく、マスクをデフォルトマスク値に設定する。
【０５８７】
ソフトウェア／ハードウェア制限
本発明の一実施形態によれば、以下の制限が課せられる。すなわち、タスクにつき８つの保留中のＤＭＡ要求のみ（ＤＭＡエージェントによって発行されたＤＭＡ要求であり、そのための肯定応答がドアベルに到達していないもの）がドアベルによってハンドリングされる。
【０５８８】
ネットワークプロセッサのデバッグモジュール
本発明の一実施形態によれば、ネットワークプロセッサのコンパウンドにはデバッグモジュールが含まれる。デバッグモジュールは様々な「ブレイクポイント」をサポートし、プログラムコードの「パッチング」を可能にする。デバッグモジュールを、リングインターフェイスを通じてプログラムすることができる。デバッグモジュールは、２つのブレイクポイントチャネル、および、８つのパッチチャネルを含む。パッチチャネルの各々を、パッチチャネルまたは追加のプログラム・アドレス・ブレイクポイントチャネルとして使用されるように構成することができる。シングルステップのプログラム追跡がサポートされる。
【０５８９】
ブレイクポイントイベントおよびパッチイベント
ネットワークプロセッサコアは２種類のプログラムブレイク、すなわち「ブレイクポイント」および「パッチ」をサポートする。ブレイクポイントイベントはプログラムの流れに、所与のベクトルによってポイントされたプログラム位置にジャンプさせ、ネットワークプロセッサのタスクＳＰＲ内に位置するトラップモードビットを設定することによって「トラップ」モードの実行に入らせる。トラップモードのとき、さらなるブレイクポイントは受け入れられない。トラップモードビットは、ＲＦＴ（トラップからの戻り）命令を実行することによって、あるいは、ゼロをトラップモードビットに書き込むことによってクリアされる。トラップビットがクリアされるとき、ネットワークプロセッサは標準の実行モードに戻り、そこでさらなるブレイクポイントが受け入れられる。パッチイベントはプログラムの流れに、所与のベクトルによってポイントされたプログラム位置にジャンプさせる。パッチイベントでは、トラップモードビットは設定されず、したがって、標準の実行モードで残る。パッチイベントは、ＲＯＭに書かれたコードのプログラムパッチングのために有用である。
【０５９０】
パッチチャネル
一実施形態によれば、８つのパッチチャネルがある。各パッチチャネルを、パッチチャネルまたは追加のプログラム・アドレス・ブレイクポイントチャネルとして動作するように構成することができる。パッチチャネルが使用可能にされ、パッチとして構成される場合、パッチイベントが、「キャッチ」アドレス（後述）に等しいプログラム位置からのフェッチがあるときは常に発生する。パッチチャネルが使用可能にされ、ブレイクとして構成される場合、ブレイクポイントイベントが、キャッチアドレスに等しいプログラム位置からのフェッチがあるときは常に発生する。パッチチャネルの各々はネットワークプロセッサのプログラムに、ベクトルテーブルに従って異なるベクトル位置にジャンプさせる（以下のベクトルテーブルの考察および表３７を参照）。
【０５９１】
各パッチチャネルは、表３１に示すパッチレジスタを含む。
【０５９２】
【表３１】
2005516432.tif 000038
【０５９３】
パッチレジスタ。これは３２ビット読み取り／書き込みレジスタ（リングを介する）である。このレジスタは、ハードウェアリセットによってクリアされる。
ビット１５：０−キャッチアドレス：これは１６ビットのプログラムアドレスであり、パッチイベントまたはブレイクポイントイベントを引き起こす。
【０５９４】
ビット１６−ブレイクまたはパッチ（Ｂ／Ｐ）：Ｂ／Ｐビットがクリアされるとき、パッチチャネルはパッチチャネルとして動作する。Ｂ／Ｐビットが設定されるとき、パッチチャネルは追加のプログラム・アドレス・ブレイクポイントチャネルとして動作する。
ビット１７−ＥＮ：これはチャネルイネーブルビットである。ＥＮが設定されるとき、チャネルは使用可能にされる。ＥＮがクリアされるとき、チャネルは無効にされる。
ビット３１〜１８：これらのビットは予約される。予約ビットはゼロとして読み取られる。
【０５９５】
アドレス・ブレイクポイントチャネル
１つの手法によれば、デバッグユニットは、２つのアドレス・ブレイクポイントチャネルを含む。アドレス・ブレイクポイントチャネルを、特定の位置へのプログラムまたはデータメモリアクセスがあるときにブレイクポイントを引き起こすように構成することができる。各アドレス・ブレイクポイントチャネルは、そのアドレスレジスタによって、かつ、アドレス・ブレイクポイント・コントロール・レジスタによって構成される。
【０５９６】
アドレスレジスタ。２つの各アドレス・ブレイクポイントチャネルは、アドレスレジスタを含む。表３２および表３３を参照されたい。これらの表は、チャネル０アドレスレジスタおよびチャネル１アドレスレジスタをそれぞれ示す。これらは３２ビット読み取り／書き込みレジスタであり、ハードウェアリセットによってクリアされる。ビット１５：０はブレイクアドレスを保持し、ビット３１：１６はブレイクマスクを保持する。ブレイクアドレスは、ブレイクポイントイベントを引き起こすためのプログラム位置である。ブレイクポイントイベントは、アドレスブレイクポイントが使用可能にされ、かつ、アクセスされたメモリアドレスと「ブレイクアドレス」の間に合致がある場合にのみ、発生する。「ブレイクマスク」は、どのアドレスビットを比較するかを指定するために使用される。たとえば、すべてのマスクビットが設定される場合、アドレス比較はすべてのアドレスビットにおいて行なわれる。たとえば、マスクビット０がクリアされ、残りのすべてが設定される場合、比較にはアドレスのビット０が含まれなくなる。このように、アドレスブレイクポイントを、特定のアドレスにおいてのみでなく、アドレスのウィンドウ範囲においても生成することができる。表３４は、アドレス・ブレイクポイント・コントロール・レジスタを示す。
【０５９７】
【表３２】
2005516432.tif 000039
【０５９８】
【表３３】
2005516432.tif 000040
【０５９９】
【表３４】
2005516432.tif 000041
【０６００】
アドレス・ブレイクポイント・コントロール・レジスタ。アドレス・ブレイクポイント・コントロール・レジスタは、３２ビット読み取り／書き込みレジスタである。このレジスタは、各アドレス・ブレイクポイントチャネルのオペレーションを構成するために使用される。
【０６０１】
ビット１：０−モード０：これらの２ビットは、チャネル０について、表３５で指定されたアドレスブレイクポイントをどのイベントにおいて引き起こすかを指定する。表３５は、ビット１：０に対応するアドレスモード（ＡＭＯＤＥ）を例示する。
【０６０２】
【表３５】
2005516432.tif 000042
【０６０３】
ビット２−イネーブル０（ＥＮ０）−ＥＮ０が設定されるとき、アドレス・ブレイクポイントチャネル０が使用可能にされ、これはブレイクポイントイベントを引き起こすことができる。このビットがクリアされるとき、アドレス・ブレイクポイントチャネル０が無効にされる。
【０６０４】
ビット４：３−モード１：これらの２ビットは、チャネル１について、表３５で指定されたアドレスブレイクポイントをどのイベントにおいて引き起こすかを指定する。
ビット５−イネーブル１（ＥＮ１）−ＥＮ１が設定されるとき、アドレス・ブレイクポイントチャネル１が使用可能にされ、これはブレイクポイントイベントを引き起こすことができる。このビットがクリアされるとき、アドレス・ブレイクポイントチャネル１が無効にされる。
【０６０５】
デバッグコントロールレジスタ
デバッグコントロールレジスタは、３２ビット読み取り／書き込みレジスタである。このレジスタは、ハードウェアリセットによってクリアされる。表３６は、本発明の一実施形態によるデバッグコントロールレジスタを例示する。
【０６０６】
【表３６】
2005516432.tif 000043
【０６０７】
ビット１０：０−ベクトルベースアドレス（ＶＢＡ）：ベクトルベースアドレスである。ＶＢＡは、ベクトルテーブルのメモリ内の開始位置をポイントする。ベクトルテーブルは３２ワードテーブルであり、以下でさらに説明する。
【０６０８】
ビット１６：１１−タスクＩＤ（ＴＩＤ）：ＴＩＤは、そこでブレイクポイントを引き起こすか引き起こさないタスクＩＤである。以下のコントロールビットにより説明されるように、タスクブレイクポイントによって使用され、アドレスブレイクポイントによって使用することができる。
【０６０９】
ビット１９−ＴＡＮＤ：ＴＡＮＤが設定されるとき、アドレスブレイクポイントは、アドレスの合致があり、かつ現在のタスクＩＤがＴＩＤに等しい場合にのみ、発生する。
パッチチャネルがプログラム・アドレス・ブレイクポイントチャネルとして動作するように構成されるとき、これは専用アドレスチャネルと同じルールを有し、ＴＡＮＤが同じように扱われることに留意されたい。
【０６１０】
ビット２０−ＴＮＯＴ：ＴＮＯＴが設定されるとき、アドレスブレイクポイントは、アドレスの合致があり、かつ現在のタスクＩＤがＴＩＤとは異なる場合にのみ、発生する。パッチチャネルがプログラム・アドレス・ブレイクポイントチャネルとして動作するように構成されるとき、これは専用アドレスチャネルと同じルールを有し、ＴＮＯＴが同じように扱われることに留意されたい。
【０６１１】
ビット２１−タスクブレイクポイントを使用可能にする（ＥＮＴＢ）：このビットはタスクＩＤブレイクポイントを使用可能にする。ＥＮＴＢが設定されるとき、ＴＩＤに等しいタスクＩＤへのタスクスイッチがブレイクポイントイベントを引き起こす。このビットがクリアされるとき、タスクＩＤブレイクポイントは無効にされる。ＥＮＴＢビットを設定するとき、現在のタスクＩＤがＴＩＤと比較され、等しい場合、ブレイクポイントが生じる。さらなるタスクＩＤブレイクポイントは、ＴＩＤに等しい新しいタスクへのスイッチングにおいてのみ発生する。
【０６１２】
ビット２２−イールドブレイクポイントを使用可能にする（ＥＮＹＢ）：このビットはイールドブレイクポイントを使用可能にする。ＥＮＹＢが設定されるとき、いかなるイールド（タスクスイッチ）もブレイクポイントイベントを引き起こす。このビットがクリアされるとき、イールドブレイクポイントは無効にされる。
【０６１３】
ビット３１−ＴＲＡＣＥ：ＴＲＡＣＥビットが設定されるとき、ブレイクポイントはあらゆる新しい命令実行において発生し、したがってシングルステップ命令追跡が可能となる。ＴＲＡＣＥビットがクリアされるとき、追跡は無効にされる。
【０６１４】
ベクトルテーブル
ブレイクポイントイベントまたはパッチイベントの場合、デバッグモジュールはネットワークプロセッサコアに、どこにジャンプするかについてのベクトルを供給する。ベクトルテーブルを表３７に例示する。各イベントは異なるベクトルを有し、これは、１１ビットＶＢＡを取り、これを５ビットオフセットに連結することによって計算される。たとえば、１１ビットＶＢＡがすべてのゼロであると仮定する。この場合、ブレイクポイントベクトルは、プログラムアドレス＄２をポイントし、パッチ０は＄４をポイントするようになる。増分は、各イベントについて２命令空間である。
【０６１５】
【表３７】
2005516432.tif 000044
【０６１６】
ブレイクポイントのステータスビット
本発明の一態様によれば、ブレイクポイントイベントの原因を反映するための、ネットワークプロセッサのタスクＳＰＲ内に位置する、特殊なステータスビットがある。これらのビットは、ＰＡＢ、ＤＡＢ、ＴＢおよびＹＢビットである。ＰＡＢビットは、プログラム・アドレス・ブレイクポイント用である。ＤＡＢは、データ・アドレス・ブレイクポイント用である。ＴＢビットはタスクブレイクポイント用である。ＹＢビットはイールドブレイクポイント用である。これらのビットは、関連するブレイクポイントが発生するときは常に設定される。これらのビットはＲＦＴ命令によってクリアされる。
【０６１７】
エージェントインターフェイス
本発明の一態様によれば、エージェントインターフェイスはネットワークプロセッサをコンパウンド内のすべてのエージェントに接続する。このインターフェイスはネットワークプロセッサによって、データを読み書きするために使用される。
【０６１８】
信号の説明
表３８は、エージェントインターフェイス信号のリストを提供する。
【０６１９】
【表３８】
2005516432.tif 000045
【０６２０】
エージェントＩＤの割り付け
表３９は、エージェントＩＤの割り付けを提供する。
【０６２１】
【表３９】
2005516432.tif 000046
【０６２２】
エージェントレジスタのマッピング
表４０は、エージェントレジスタのマッピングを例示する。
【０６２３】
【表４０】
2005516432.tif 000047
【０６２４】
ネットワークプロセッサコンパウンドのメモリマップ
表４１は、本発明の一実施形態による、ネットワークプロセッサコンパウンドのメモリマップを例示する。
【０６２５】
【表４１】
2005516432.tif 000048
【０６２６】
リングネットワークを実装する通信プロセッサ
リングネットワークおよび／またはネットワークプロセッサの本発明の態様は、上述のように、本発明による高パフォーマンス通信プロセッサと組み合わせて実装されるとき、特に利点を発見する。本発明の高パフォーマンス通信プロセッサ（ＨＰＣＰ）は時として、「Ｔｒａｊａｎ」と呼ばれる可能性がある。以下に記載する説明から明らかになるように、ＨＰＣＰを様々な方法で、本発明の真の精神および範囲から逸脱することなく実装することができる。単に例として、ＤＭＡモジュールの数、コントロールプロセッサの特性、ＡＴＭにサポートされたインターフェイスの数、フレキシブル・パケット・プロセッサの数は、変わる可能性がある。一般に、本発明のフレキシブル・パケット・プロセッサは時として、本明細書で「Ｖｏｂｌａ」と呼ばれる可能性がある。
【０６２７】
一般に、ＨＰＣＰは、市場の範囲内の様々な応用例をサポートすることができるべきである。たとえば、ＨＰＣＰを、デジタル加入者回線（ＤＳＬ）サービス用など、顧客構内設備（ＣＰＥ）応用例のために使用することができる。ＤＳＬは時として総称的にｘＤＳＬと呼ばれ、これは、搬送波がＡＤＳＬ、ＨＤＳＬ、ＳＤＳＬなどを提供することができるデジタル回線のファミリを指す。これらの技術はすべて当技術分野においてよく理解されている。ＨＰＣＰのためのＤＳＬ  ＣＰＥ応用例には、イーサネット（登録商標）およびＵＳＢのためのブリッジ、ＤＳＬ−イーサネット（登録商標）ルータ、ＤＳＬ−ホームワイヤレスルータ、音声統合アクセスデバイス（ＩＡＤ）、およびサービスゲートウェイが含まれる可能性がある。ＨＰＣＰをまた、消費者ネットワーキング機器のために使用することもでき、これはホームルータ（イーサネット（登録商標）および／またはワイヤレス）およびネットワーク化装置（たとえば、ユニバーサル・プラグ・アンド・プレイ［ＵＰｎＰ］デバイス）などである。ＨＰＣＰをまた、アクセスネットワーク機器の応用例、ラインカードの応用例、および、音声処理の応用例（たとえば、音声ゲートウェイ）のために使用することもできる。一般に、ＨＰＣＰは、いかなる音声または通信処理の応用例においても有益な応用例を発見する。
【０６２８】
要約すると、ＨＰＣＰの目的は、適切なＰＨＹ機能性（たとえば、ＡＤＳＬ  ＰＨＹ、ＳＨＤＳＬ  ＰＨＹ、ｘＤＬ  ＰＨＹなど）と容易に統合することができる、ＰＨＹ中立の通信プロセッサを提供して、無数のアプリケーションを様々なネットワークプラットフォームにおいて、単一のシステムオンチップ（ＳＯＣ）ビルディングブロックに基づいてサポートすることである。
【０６２９】
単なる一実施形態によれば、ＨＰＣＰ（たとえば、いわゆる「Ｔｒａｊａｎ  Ｉ」）は、以下の表４２に示すベースライン仕様を有する。表４２は例のためにのみ提供され、本発明はこの実施形態に決して限定されない。実際に、プロセッサの技術分野における継続的な発達により、絶えずパラメータが変化する結果となる。
【０６３０】
【表４２】
2005516432.tif 000049
【０６３１】
ＨＰＣＰによって使用される通信アーキテクチャを、従来のバスベースのアーキテクチャ、スイッチファブリックタイプのアーキテクチャ、スターベースのアーキテクチャ、または当技術分野で知られている他のアーキテクチャにすることができる。好ましくは、ＨＰＣＰは、上述の本発明のリングアーキテクチャおよびメッセージベースのプロトコルを使用し、それによりＨＰＣＰの各モジュールが、後述のように、リング上の位置を占有する。
【０６３２】
本発明の一実施形態によれば、リングネットワーク・アーキテクチャを利用する通信処理システムが提供される。通信処理システムは、リングネットワークに沿ってポイントツーポイント形式で接続された複数のリングメンバと、少なくとも１つのメッセージを、リングメンバの少なくとも一部の間で通信するためのトランザクションベースの接続性とを含み、メッセージは、メッセージが指定される宛先リングメンバを示す情報を含み、メッセージは宛先リングメンバに到達するまでリングネットワークの周囲で渡され、宛先リングメンバは、メッセージを受信し、これをリングネットワークから除去するように適合される。通信処理システムは、一実施形態では、シングルチップ上で実装され、他の実施形態では、システムは複数のチップ上で実装される。宛先リングメンバを示す情報はリングメンバ識別子、および／または、宛先リングメンバに対応するアドレスを含むことができる。一実施形態では、リングネットワークは、リングネットワークを横断するブリッジを含み、これによりメッセージが、中間リングメンバを通過することなく一方の側から別の側に移動できるようにする。
【０６３３】
システムのトランザクションベースの接続性は、メッセージがリングネットワークの周囲でクロッキング方式に従って渡されることを提供することができる。一実施態様では、クロッキング方式は、メッセージが１クロックサイクルにつき１リングメンバを移動することを提供する。同様に、トランザクションベースの接続性は、複数のメッセージがリングネットワークを移動することを提供することができ、各メッセージは、メッセージが所与のリングメンバで消費されない限り、１クロックサイクルにつき１リングメンバを移動する。同様に、接続性は、トランザクションを含むメッセージがリングネットワークを移動することを提供することができ、メッセージは、コマンド、命令、タイプ、アドレスおよびデータのうち１つまたは複数を含む。
【０６３４】
一実施形態では、非宛先リングメンバに到着するメッセージは、リングネットワーク上の次のリングメンバに渡される。択一的に、宛先リングメンバに到着するメッセージは、宛先リングメンバによって消費される。この場合、メッセージを、消費される間にリングネットワークから除去して、リングネットワーク上のスロットが使用可能にされるようにすることができる。使用可能なスロットにより、下流のリングメンバがメッセージをスロットに挿入可能にすることができる。
【０６３５】
さらに一実施形態では、メッセージを受信する各リングメンバは、メッセージの宛先アドレス部をチェックして、メッセージがそのリングメンバのために指定されるかどうかを決定するように適合され、宛先アドレス部がそのリングメンバに対応する場合、リングメンバはメッセージをリングネットワークから取り去り、メッセージを消費する。
【０６３６】
一実施形態では、少なくとも１つのメッセージは、リングネットワークの構成中にリングメンバにアドレス空間を割り当てさせるメッセージを含む。このメッセージは列挙メッセージを含むことができる。構成中のアドレス空間の割り当てにより、処理リングメンバが続いてリングネットワークの構成を推断できるようにする。
【０６３７】
本発明のもう１つの実施形態によれば、リングネットワーク・アーキテクチャを利用する通信処理システムが提供される。通信処理システムは、一意のアドレスを有し、リングネットワークに沿ってポイントツーポイント形式で接続された複数のリングメンバと、少なくとも１つのメッセージを、リングメンバの少なくとも一部の間で通信するためのトランザクションベースの接続性とを含み、メッセージは、メッセージが指定される宛先リングメンバアドレスを含み、メッセージは宛先リングメンバに到達するまでリングネットワークの周囲で渡され、宛先リングメンバは、メッセージを受信し、これをリングネットワークから除去するように適合される。通信処理システムは、一実施形態ではシングルチップ上で実装され、他の実施形態では、システムは複数のチップ上で実装される。一実施形態では、リングネットワークは、リングネットワークを横断するブリッジを含み、これによりメッセージが、中間リングメンバを通過することなく一方の側から別の側に移動できるようにする。
【０６３８】
システムのトランザクションベースの接続性は、メッセージがリングネットワークの周囲でクロッキング方式に従って渡されることを提供することができる。一実施態様では、クロッキング方式は、メッセージが１クロックサイクルにつき１リングメンバを移動することを提供する。同様に、トランザクションベースの接続性は、複数のメッセージがリングネットワークを移動することを提供することができ、各メッセージは、メッセージが所与のリングメンバで消費されない限り、１クロックサイクルにつき１リングメンバを移動する。同様に、接続性は、トランザクションを含むメッセージがリングネットワークを移動することを提供することができ、メッセージは、コマンド、命令、タイプ、アドレスおよびデータのうち１つまたは複数を含む。接続性はまた、トランザクションを含むメッセージがリングネットワークを移動することを提供することもでき、メッセージは、コマンド、命令、タイプ、アドレスおよびデータのうち１つまたは複数を含む。宛先リングメンバアドレスは、宛先リングメンバのための開始アドレス、および／または、宛先リングメンバのために割り当てられたアドレス空間内のアドレスを含むことができる。
【０６３９】
一実施形態では、非宛先リングメンバに到着するメッセージは、リングネットワーク上の次のリングメンバに渡されるか、あるいは、宛先リングメンバによって消費される。一実施形態では、メッセージを受信する各リングメンバは、メッセージの宛先リングメンバアドレスをチェックして、メッセージがそのリングメンバのために指定されるかどうかを決定し、宛先リングメンバアドレスがそのリングメンバに対応する場合、リングメンバはメッセージをリングネットワークから取り去り、メッセージを消費する。消費される場合、メッセージを、消費される間にリングネットワークから除去して、リングネットワーク上のスロットが使用可能にされるようにすることができる。使用可能なスロットにより、下流のリングメンバがメッセージをスロットに挿入可能にすることができる。
【０６４０】
一実施形態では、少なくとも１つのメッセージは、リングネットワークの構成中にリングメンバにアドレス空間を割り当てさせるメッセージを含む。このメッセージは列挙メッセージを含むことができる。構成中のアドレス空間の割り当てにより、処理リングメンバが続いてリングネットワークの構成を推断できるようにする。
【０６４１】
本発明のさらにもう１つの一実施形態によれば、リングネットワークを利用する通信処理システムが提供される。システムは、一意のアドレスを有し、リングネットワークに沿ってポイントツーポイント形式で通信的に接続された複数のリングメンバと、少なくとも１つのメッセージを、リングメンバの少なくとも一部の間で通信するためのトランザクションベースの接続性とを含み、メッセージは、第１のリングメンバから第２のリングメンバへ、少なくとも部分的には第２のリングメンバに割り当てられたアドレスに基づいて移動し、第２のリングメンバは、メッセージが指定される宛先リングメンバである。メッセージは、リングネットワークに沿って第１のリングメンバから第２のリングメンバへ、各々が第１および第２のリングメンバのアドレスの中間のアドレスを有する１つまたは複数の他のリングメンバによって渡され、メッセージは、第２のリングメンバによる受信において、リングネットワークから受信および除去される。メッセージは、第２のリングメンバのアドレスを示す情報を含むことができる。通信処理システムは、一実施形態ではシングルチップ上で実装され、他の実施形態では、システムは複数のチップ上で実装される。一実施形態では、リングネットワークは、リングネットワークを横断するブリッジを含み、これによりメッセージが、中間リングメンバを通過することなく一方の側から別の側に移動できるようにする。
【０６４２】
一実施形態では、トランザクションベースの接続性は、メッセージがリングネットワークの周囲でクロッキング方式に従って渡されることを提供する。クロッキング方式は、一実施態様では、メッセージが１クロックサイクルにつき１リングメンバを移動することを提供する。同様に、トランザクションベースの接続性は、複数のメッセージがリングネットワークを移動することを提供することができ、各メッセージは、メッセージが所与のリングメンバで消費されない限り、１クロックサイクルにつき１リングメンバを移動する。非宛先リングメンバに到着するメッセージを、リングネットワーク上の次のリングメンバに渡すことができ、あるいは、宛先リングメンバによって消費することができる。一実施形態では、メッセージを受信する各リングメンバは、メッセージの宛先アドレス部をチェックして、メッセージがそのリングメンバのために指定されるかどうかを決定し、宛先アドレス部がそのリングメンバに対応する場合、リングメンバはメッセージをリングネットワークから取り去り、メッセージを消費する。消費される場合、メッセージを、消費される間にリングネットワークから除去して、リングネットワーク上のスロットが使用可能にされるようにすることができ、使用可能なスロットにより、下流のリングメンバがメッセージをスロットに挿入できるようにする。接続性はまた、トランザクションを含むメッセージがリングネットワークを移動することを提供することもでき、メッセージは、コマンド、命令、タイプ、アドレスおよびデータのうち１つまたは複数を含む。
【０６４３】
一実施形態では、少なくとも１つのメッセージは、リングネットワークの構成中にリングメンバにアドレス空間を割り当てさせるメッセージを含む。このメッセージは列挙メッセージを含むことができる。構成中のアドレス空間の割り当てにより、処理リングメンバが続いてリングネットワークの構成を推断できるようにする。
【０６４４】
本発明の追加の実施形態によれば、チップ上で実装された通信プロセッサが提供される。通信プロセッサは、ＡＴＭ、フレームリレー、イーサネット（登録商標）およびＩＰを含む複数のプロトコルを処理するための手段を含むネットワークプロセッサであって、前記手段は、追加のプロトコルを処理するためのライブラリコマンドのセットを使用してプログラマブルである、ネットワークプロセッサと、ネットワークプロセッサをコントロールするためのプロトコルプロセッサとを含み、プロトコルプロセッサはコントロールプレーン処理を実行し、ネットワークプロセッサはデータプレーン処理を実行する。さらに、ネットワークプロセッサおよびプロトコルプロセッサは少なくとも１つのリングネットワーク上のリングメンバであり、通信プロセッサは、複数の他のリングメンバを少なくとも１つのリングネットワーク上でさらに含む。ネットワークプロセッサは、一実施形態では、リングネットワークへの単一のリングインターフェイスを共有する複数のコンパウンドを含む。通信プロセッサをＰＨＹ中立にすることができる。
【０６４５】
少なくとも１つのリングネットワークは、一実施形態では、プロトコルプロセッサのリングネットワークおよびネットワークプロセッサのリングネットワークを含む、多数のリングネットワークを含み、ネットワークプロセッサのリングネットワークは、パケットを送信するための第１のネットワークプロセッサ、およびパケットを受信するための第２のネットワークプロセッサを含むことができる。
【０６４６】
もう１つの実施形態では、ネットワークプロセッサは、現在のタスクのためのアクティブレジスタ、および次のタスクをプレロードするためのシャドウレジスタを使用する、超高速タスクスイッチングを含む。通信プロセッサはさらに、外部メモリへのアクセスのための多数のＤＭＡコントローラをさらに含むことができる。
【０６４７】
プロトコルプロセッサは、一実施形態では、シグナリングプロトコル、プロトコル管理、例外ハンドリング、ならびに、システム構成およびコントロールを実行するように適合される。同様に、ネットワークプロセッサを、パケット毎の処理、パケット転送、パケット分類、サービス品質ハンドリング、および、パケット再フォーマッティングを実行するように適合させることができる。
【０６４８】
コントロールパスプロトコルのサポートをプロトコルプロセッサによって提供することができ、データパスプロトコルのサポートをネットワークプロセッサによって提供することができる。さらに、ネットワークプロセッサを、ゼロオーバーヘッドのタスクスイッチングを実行するように適合させることができる。
【０６４９】
一実施形態では、ネットワークプロセッサは、並列エンジンとして動作するコンパウンドモジュールを含む。通信プロセッサを、エンタープライズ統合アクセスデバイス（ＥＩＡＤ）、マルチテナントユニット（ＭＴＵ）またはリモート端末ユニット（ＲＴＵ）、メディアゲートウェイ、および／または、音声ゲートウェイを提供するように実装することができる。
【０６５０】
ＨＰＣＰの例示的アーキテクチャ
一実施形態によれば、ＨＰＣＰは、図６１に例示するリングアーキテクチャを使用して実装される。このリングタイプのアーキテクチャは半導体上で（たとえば、チップ上で）実装され、ネットワークにおける「トークンリング」構成とは異なる。図６１によれば、ＨＰＣＰ  ＳＯＣ６２０は４つのリング６２２〜６２８を使用し、これらが３つのリング間ブリッジ６３０〜６３４によって接続される。これらのブリッジはまた「シーブリッジ」ともよばれ、これは、これらのブリッジが２つの異なるリングを相互接続し、メッセージが遠い側のリングにアドレス指定された場合、近い側からブリッジを横断してトラバースするようなロジックを有するからである。メッセージが、近い側のリング内に含まれたアドレスにアドレス指定される場合、メッセージはリングに沿って通常の場合のように転送される。
【０６５１】
例示のように、ＨＰＣＰ６２０は一般にモジュールを、機能性に従ってリングに沿って分割する。ＨＰＣＰチップの外側から送信されたデータを受信するための、受信側（「Ｒｘ」）リング６２８がある。ＨＰＣＰチップの外側に進むようにデータを送信するための、送信側（「Ｔｘ」）リング６２６がある。メインリングまたはコントロールリング（「ＰＰリング」）６２２があり、これはＰＰ（パケットプロセッサ）６３６を含み、これをホストまたはＨＰＣＰのＣＰＵ（「アンカー」）と見なすことができる。パケットプロセサリング６２４があり、これは、ＨＰＣＰ６２０によってハンドリングされる様々なプロトコルのパケット処理のための、いくつかのパケットプロセッサ（すなわち、ＶＣ０  ６３８およびＶＣ１  ６４０ネットワークプロセッサ）、およびＤＭＡ６４２、６４４を含む。メッセージングにおけるレイテンシを減らすために、パケットプロセッサリング６２４はいくつかのリング内ブリッジ６４６、６４８を含み、これらは「ランドブリッジ」とも呼ばれ、これは、これらのブリッジが単一のリング内でブリッジタイプの接続を提供するからである。
【０６５２】
後続の図のいくつかでは、ＨＰＣＰの例示をリングタイプの構成としてグラフィカルに示さない。しかし、特に断らない限り、これらの構成はリングタイプの構成および論理パスに対応する。
【０６５３】
一般に、他の通信プロセッサに勝るＨＰＣＰの改良点を、個別に、あるいは組み合わせて、（１）超高速タスクスイッチングを有するフレキシブル・パケット・プロセッサ、および（２）ａｎｙ−ｔｏ−ａｎｙのメッシュ内部リングタイプの通信アーキテクチャの使用に結び付けることができる。これは、より高速なポートまたはより高いポート密度のためのアーキテクチャの拡張性を保証する。加えて、ＨＰＣＰは（３）低システムコストのための設計を提供する。低コストメモリ（ＤＤＲ−ＳＤＲＡＭ）およびユニークなストリームライン・メモリ・アーキテクチャの使用により、高速ＳＲＡＭまたは外部ルックアップエンジン（ＣＡＭ）の必要性がなくなる。ＨＰＣＰの主な受益者は、ＣＰＥおよびアクセス市場のための比較的ハイエンドの応用である。
【０６５４】
好ましくは、ＨＰＣＰは約１．２Ｇｂｐｓ（シンプレックス・シリアル・レート）のレートをＬ２／Ｌ３回線速度のＩＰ／ＡＴＭ／ＴＤＭプロトコル処理のためにサポートする。上に示したように、ＨＰＣＰプラットフォームは、コア・フレキシブル・パケット・プロセッサ（ＲＩＳＣ［縮小命令セットコンピュータ］ネットワークプロセッサ技術）およびＳＯＣリングタイプ相互接続技術を含む。この手法は、高パフォーマンスのプログラマブルなネットワーキングプラットフォームを提供し、これにより新しい機能、新しい規格、および他の拡張の迅速な導入が可能となる。ＨＰＣＰのロバスト性により、これを多数の製品ラインの間で共有することができる。一実施形態によれば、ＨＰＣＰは０．１８ミクロン、５２０ＨＳ−ＰＢＧＡ（熱拡散プラスチック・ボール・グリッド・アレイ）チップとして設計される。
【０６５５】
図６２は、時として本明細書で「Ｔｒａｊａｎ」と呼ばれる、ＨＰＣＰ６２０の一実施形態の概略図である。この実施形態によれば、ＨＰＣＰ６２０はリングタイプの通信アーキテクチャを使用し、これは図６２において「チップ上のファブリック」６７０として示される。
【０６５６】
パケットプロセッサ６７２（「コントロール・パケット・プロセッサ」、「ＭＩＰＳ」、「ＣＰＵ」、または単に「ホスト」とも呼ばれる）は、ＨＰＣＰ６２０のためのコントロールプロセッサとして機能する。パケットプロセッサ６７２を、いかなる適切なプロセッサを使用して実装することもできる。パケットプロセッサ６７２は以下の特性を有することが好ましく、すなわち、２６６ＭＨｚ（好ましくはＭＩＰＳ）プロセッサ、ＭＩＰＳ−Ｉ命令セット、１６Ｋ  Ｉ、１６Ｋ  Ｄキャッシュ、ライトバックおよびライトフォワードまたはライトスルーのサポート、キャッシュコヒーレンシーを有すること、直接マップのサポート、およびＭＭＵ−６４のＴＬＢ（変換索引バッファ）を有することである。ＭＩＰＳプロセッサに代わる他の適切な代替物を使用することができる。
【０６５７】
図６２のＨＰＣＰ実施形態は、２つのネットワークプロセッサ６７４、６７６（「Ｖｏｂｌａ」）をパケット処理のために使用する。好ましくは、ネットワークプロセッサ６７４、６７６は、本明細書の他の箇所で論じたフレキシブル・パケット・プロセッサに従って設計される。各ネットワークプロセッサ６７４、６７６は、動作可能に結合されたマルチアクセスＳＲＡＭと通信することが好ましく、マルチアクセスＳＲＡＭは７２Ｋバイトのメモリを有することが好ましい。
【０６５８】
図６２のＨＰＣＰ実施形態は、３つのＤＭＡモジュールであるＤＭＡ６７８、ＤＭＡ６８０およびＤＭＡ６８２を使用する。また、２つのＤＤＲ−ＳＤＲＡＭコントローラ６８４、６８６もあり、これらはそれぞれ、１３３／１６６／２００ＭＨｚで実行中のＤＤＲ−ＳＤＲＡＭ６８８、６９０にインターフェイスすることができる。各コントローラは３２ビットデータバスをサポートする。コントローラ６８４、６８６は、２つのマスタ（ＤＭＡおよびＰＰ）、および、それらの間のアービタをサポートする。効率的なパッキングアルゴリズムが使用されて、メモリトランザクションが最適化される。コヒーレンシーは、２つのマスタと、ＲＥＡＤおよびＷＲＩＴＥオペレーションの間で保有される。ＤＭＡ６７８およびＤＭＡ６８０はそれに応じて、２つのメモリコントローラをマスタすることができる。各々はメモリバスについて調停することができ、トランザクションにおいて最大６４バイトのバーストが可能である。
【０６５９】
ＥＰＢ（外部周辺デバイスバス）インターフェイス（Ｉ／ｆ）６９２は、ブートＥＰＲＯＭ、セキュリティアクセラレータおよびＤＳＰ（集合的に図の要素６９４）にインターフェイスするために使用される。ＥＰＢバスは８０ＭＨｚで、非同期アドレス／データプロトコルにより動作する。ＥＰＢ６９２はまた、５つの専用チップセレクト（ＣＳ）および特殊な３２ビットＣＳバストランザクションも有する。
【０６６０】
図６２のＨＰＣＰはいくつかの周辺モジュールを含み、これには、ＴＤＭ６９６、４ｘイーサネット（登録商標）（ＭＩＩおよびＲＭＩＩ）６９８、第１のＡＴＭユートピアレベル２  ７００、第２のＡＴＭユートピアレベル２  ７０２、３ｘＭＦＳＵ７０４およびＩ２Ｃ／ＳＰＩ  ＳＷベース７０６が含まれる。
【０６６１】
ＴＤＭモジュール６９６を、Ｔ１／Ｅ１用など、時分割多重化接続性をサポートするために使用することができる。ＴＤＭモジュール６９６は以下をサポートすることが好ましく、すなわち、最大２５６タイムスロット、ＨＤＬＣ（ハイレベルデータリンクコントロール）および透過モードである。ＴＤＭモジュールはまた、Ｈ−ＭＶＩＰ、ＳＣＳＡ、Ｈ１１０およびＳＴ−ＢＵＳなど、高速ＴＤＭバス（バックプレーン）にインターフェイスすることもできる。４ｘイーサネット（登録商標）ＭＩＩ／ＲＭＩＩモジュール６９８は、１０／１００イーサネット（登録商標）接続性をサポートすることが好ましい。３ｘＭＦＳＵモジュール７０４は、高速（最大５２Ｍｂｐｓ）ＨＤＬＣまたは高速ＵＡＲＴ（汎用非同期送受信器）をサポートすることが好ましい。
【０６６２】
ＨＰＣＰは、ユートピアレベル２を使用する２つのＡＴＭインターフェイス７００、７０２を有する。各ポートを、８ビットまたは１６ビットデータパスについて構成することができる。ＡＴＭポートを、マスタまたはスレーブとして構成することができる。マスタ構成では、一方のポート（「加入者ポート」）は最大１２４ＰＨＹをマスタすることができ、第２のポート（「アップリンクまたはネットワークポート」）は最大１５ＰＨＹをマスタすることができる。両方のポートは「拡張ユートピアモード」をサポートすることができ、ここではＡＴＭセルの長さを５３バイトから６４バイトにプログラマブルに拡張することができる。
【０６６３】
ＥＰＢにおけるリングインターフェイス
前述のように、少なくとも１つの実施形態によれば、ＨＰＣＰは、本明細書で開示したリングアーキテクチャおよびメッセージプロトコルを使用して実装される。図６３〜６７を参照して例示するように、外部インターフェイス７２０をＥＢＰ６９２と共に実装することができる。ＥＰＢバス上にある外部ＦＰＧＡ７２２は、外部リングキーパの役割を果たすことができ、アンカーをネットワークプロセッサの外部でＦＰＧＡ上にすることができる。言うまでもなく、ＦＰＧＡの代わりに、これをもう１つのＨＰＣＰにすることができる。入力のジョブは、現在のトランザクションのためのＥＰＢオペレーションを無効にし、リングデータの移動を可能にすることである。この入力はＦＰＧＡによって、あるいは第２のＨＰＣＰによって駆動される。出力のジョブは、リングキーパである第２のＨＰＣＰまたは外部ＦＰＧＡに、出力データがそれのためのものであると伝えることである。通常のＥＰＢカスタマ（フラッシュのようなもの）は、出力を追加のイネーブルとして見る。この構成の１つの利点は、いくつかの事前に存在するピンがパートタイムのリングトランザクションのために使用されることである。リングメッセージングの速度はかなり速い（元のＥＰＢと同じ速度）。既存のＥＰＢへの変更は最小限である。リング側の実装は、ブリッジにステートマシンを加えたものの正確なコピーである。
【０６６４】
図６３に例示する実施態様では、３２ビットのデータ入力／出力が、メッセージを搬送するために使用される。また、アドレスビットも使用するための潜在性があり、したがってスループットが増大するが、設計が複雑になる。ｍｅｓｓａｇｅ＿ｓｙｎｃ７２４は比較的単純なブロックであり、ＥＰＢのようなインターフェイス上でいくつか（２．．３）のトランザクションへの出力メッセージの６０（または９２）ビットの転向を管理する。これはまた、入力データ（２．．３トランザクションからのもの）をメッセージに転向させる。内部では、ｍｅｓｓａｇｅ＿ｓｙｎｃインターフェイスが通常のブリッジ７２６を知っている。ＥＰＢ  ＤＭＡ７２８は潜在的に、ビジーなリング上に存在することができるので、ｍｅｓｓａｇｅ＿ｓｙｎｃ７２４およびそのブリッジ７２６を、それほどビジーでないリング上に配置することができる。
【０６６５】
ｍｕｘ７３０はトランザクションに応じて、ＥＰＢ６９２から、あるいはｍｅｓｓａｇｅ＿ｓｙｎｃ７２４からデータを取る。ハンドシェーク信号は基本的にＥＰＢ６９２に、サイクルを放棄するように求める。また、他方の方向に、ＥＰＢ６９２はトライステートまたはｍｕｘの引渡しを肯定応答する。この事実を使用して、チップセレクトをリング指向トランザクションにおいて無効にすることができる。
【０６６６】
ｍｅｓｓａｇｅ＿ｓｙｎｃ７２４およびＥＰＢ６９２を、外部リングオペレーションを使用可能／無効にするようにプログラムするために、ハードウェアは電源投入リセット中にピンをサンプリングすることができる。最初に、ハードウェアリセットはｍｅｓｓａｇｅ＿ｓｙｎｃを無効モードにして、列挙中に他のチップに通信しようと試みることなくそれが列挙に進むようにする。ｍｅｓｓａｇｅ＿ｓｙｎｃ７２４はそれ自体に１アドレスの空間を割り当てる。最初の列挙の後、ＰＰはｍｅｓｓａｇｅ＿ｓｙｎｃが動作できる（あるいはできない）ようにする。ｍｅｓｓａｇｅ＿ｓｙｎｃ７２４が使用可能にされる場合、第２の列挙が行なわれる。このとき、ｍｅｓｓａｇｅ＿ｓｙｎｃは列挙メッセージを他のチップの送信する。次いでｍｅｓｓａｇｅ＿ｓｙｎｃは、メッセージが回ってそれに戻るまで待機する。
【０６６７】
ＨＰＣＰチップは、スレーブおよびマスタ（または両方）としての機能を果たすことができる、様々なデバイスへのインターフェイスを必要とする。これらのデバイスのいくつかは、ＤＳＰ７３２、暗号化エンジン７３４、ＰＣＩなどの外部バス、外部メモリ、および他のＨＰＣＰチップである。これらのデバイスのいくつかは、チップ上のＥＰＢポートに直接接続することができる。しかし、これらのデバイスを使用するために、複雑なハンドシェークがしばしば必要とされ、これはＰＰに強制的に各転送において支援させる。これらのデバイスがＨＰＣＰへのデータ転送を開始するべきである場合、特殊なメカニズムが必要とされ、これはＥＰＢポート上のポーリングを回避するためである。記載したインターフェイスは、チップへの、このようなデバイスのよりロバストかつ効率的な接続を可能にするように設計され、ＨＰＣＰハードウェアおよびソフトウェアのアーキテクチャと一貫性がある。図６４〜６７はインターフェイスを記載し、システム図から開始して、コンポーネントの詳細なブロック図で終了する。
【０６６８】
オペレーション
上述のインターフェイスは、外部ロジックへのリングインターフェイスを実装し、ＨＰＣＰ７４０がメッセージを書き出すこと、および外部デバイスがＨＰＣＰ７４０において任意のリングメッセージを生成することを可能にする。ＦＰＧＡ７４２は、ＨＰＣＰと外部デバイス７４４、７４６の間のインターフェイスを作成し、共有メモリとしての機能を果たす。このメモリに両側から独立してアクセスすることができる。加えて、ＨＰＣＰ７４０からのアクセスはメッセージを外部デバイスに送信することができ、外部デバイスからのアクセスはＨＰＣＰリング上でメッセージを生成することができる。ＤＰＲ（デュアルポートＲＡＭ）７８０は、アクセスアドレスに応じて、ランダムアクセスメモリ（ＲＡＭ）としてもＦＩＦＯとしても見なされる。２つのＦＩＦＯ７４８、７５０が実装される。１つはリングメッセージをＨＰＣＰから受信するため、１つはメッセージをＨＰＣＰに送信するためのものである。
【０６６９】
ＨＰＣＰによるメッセージ生成
リングインターフェイスが外部インターフェイスへのメッセージを認識するとき、書き込みバーストがメモリコントローラ７６０に発行される。この書き込みは固定長の１２８ビットを有する。書き込みは常に同じアドレスをターゲットにされ、これは外部デバイス内の書き込みＦＩＦＯアドレスである。外部デバイスはＨＰＣＰ７４０に、いつデータがＦＩＦＯから読み取られているかを指示する。ＨＰＣＰ７４０は前もって書き込みＦＩＦＯのサイズを知り、したがって、いつより多くの書き込みコマンドをメモリコントローラに発行することが可能であるかを知る。もはや書き込みを発行することが可能でなく、途中のすべての書き込みバッファがフルであるとき、リングインターフェイスへのＯＫ信号がデアサートされる。
【０６７０】
外部デバイスによるメッセージ生成
ＦＩＦＯマッピングは、ＨＰＣＰによって読み取られるメッセージをキューイングするために使用される。ＦＩＦＯメモリは１２８ビット幅である（すべてのビットをハードウェアで実装しなければならないとは限らない）。各リングメッセージは４つの３２ビットデータエントリを占有し、これがＨＰＣＰによって読み取られる。メッセージが完了する（すべての１２８ビットが書き込まれる）とき、ＨＰＣＰへのＳＹＮＣ出力が起動され、メッセージがメッセージキューに書き込まれていることを指示する。これによりＨＰＣＰは、書き込まれたメッセージの数を追跡し、適切な数のメッセージを読み取ることができる。
【０６７１】
ＨＰＣＰは、キューに入れられたメッセージの数を要求カウンタでカウントし、読み取られたメッセージの数をサービスカウンタでカウントする。保留中のメッセージがあり（要求カウンタがサービスカウンタより大きい）、適切な読み取りポートが空いているとき、ＨＰＣＰは１２８ビット読み取りを発行する。この読み取り要求の実装はポートのタイプに依存する。バースト転送をサポートするポートは、１つの１２８ビットバースト読み取りを発行される。３２ビットデータ転送のみをサポートするポートは、４つの読み取りを発行される。読み取り要求が完了するとき、サービスカウンタが増分され、外部メッセージがサービスされることが指示される。
【０６７２】
ポートから読み取られたデータが使用されて、メッセージが生成される。すべての１２８データビットがメッセージセンダにおいて受信されるとき、メッセージがリングインターフェイスに送信される。
【０６７３】
ＨＰＣＰから外部デバイスへの割り込み
ＨＰＣＰ７４０はデータを特殊なアドレスに書き込み、これにより外部デバイスへの割り込みを引き起こすことができる。これらのアドレスを、割込みのみ、または割り込みおよびデータのためにマップすることができる（ＤＰＲ７８０内）。
【０６７４】
汎用データ転送
外部デバイスからＨＰＣＰにメッセージを送信することに加えて、このインターフェイスは、汎用データ転送のためのバッファ付きリンクとしての機能を果たす。ＤＰＲは、ＨＰＣＰおよび外部デバイスによって読み書きすることができる。ＨＰＣＰがデータを外部デバイス内の処理のために移動させるとき、データをＤＰＲに書き込み、次いで、割り込みアドレスに書き込むことによって外部デバイス内で割り込みを引き起こす。
【０６７５】
外部デバイスはデータを処理し、ＤＰＲに戻す。次いで、ＨＰＣＰへのメッセージを生成し、これにＤＰＲからのデータを読み返すように指示する。ＤＰＲ全体をＦＩＦＯとしてマップすることができるので、外部デバイスはまたデータ全体をＨＰＣＰ内のＮＰメモリに直接書き込み、次いでＮＰに、データが完全であることを通知することもできる。
【０６７６】
多数の外部デバイスのサポート
１つのインターフェイスはいくつかの外部デバイスをサポートすることができる。多数のＤＰＲブロックを単一のＦＰＧＡにおいて実装して、各外部デバイスを独立して機能させることができる。メッセージキューを、書き込み調停により単一のＦＩＦＯに単一化することができ、あるいは、メッセージ読み取り中に調停されるいくつかのＦＩＦＯから作られるようにすることができる。いずれにしても、読み取りまたは書き込み調停はＦＰＧＡにおいて実行され、ＨＰＣＰチップには透過的である。
【０６７７】
トラフィック管理
一実施形態では、すでにリング上にあるトラフィックが優先権を得る。また、遅延なしに、あるいは十分に制限された遅延を有して、入力メッセージを消費するように、モジュールを設計することもできる。さらに、仮想ウォッチドッグタイマをＰＰまたはネットワークプロセッサの１つで実装することができる。この場合、ウォッチドッグタイマは周期的にメッセージをそれ自体に、リングを介して送信する。このメッセージが時間までにそこにない場合、タスクが再度目覚めさせられ、リングがロックされてリセットの必要があることが指示される。
【０６７８】
メモリの考慮すべき事柄
ネットワークプロセッサＲＡＭは、たとえば６４ＫＢまで大きくすることができる。しかし、問題は、このＲＡＭが１６ビットのリングアドレス指定空間を使用することである。そのため、２０ビットのアドレスを有すると、約８のネットワークプロセッサが適度なシステム内に存在することができる。ネットワークプロセッサの理論上の最大数は１６である。しかし、空間が他のモジュールのためにも必要とされる可能性がある。リングアドレス空間を２０ビットより多くまで拡張するには大きいペナルティはなく、設計の必要性、この実施例ではちょうど２０ビットに対応するためにこれを行なうことができる。
【０６７９】
ネットワークプロセッサコンパウンドの内側には、ＲＡＭ以上のものがある。「ドアベル」、デバッグ、タイマ、その他である。これらはすべてアドレス空間を必要とするが、はるかにより小さい。これらがそれら自体のアドレス空間を割り当てられる場合、ネットワークプロセッサコンパウンドによって使用される、結果として生じるアドレス空間は１２８ｋバイトとなる。これは、６５ＫＢが実際に使用されているからであるが、アドレス空間は次の２のべき乗に丸められ、６５ｋは１２８ｋになるからである。
【０６８０】
本発明のもう１つの態様は、わずかな空間をリング上のＲＡＭから「盗み」、リングアドレス空間の低い１ｋのバイトをすべての小型モジュールに割り当てることである。たとえば、ドアベルはアドレス空間の６４エントリ（３２ビットエントリ）を取る。ワーク書き込みメッセージが（ｖｏｂｌａ＿ｂａｓｅ＿ａｄｄｒｅｓｓ＋３２）に対して到着するとき、これはＲＡＭではなくドアベルにルーティングされる。
【０６８１】
これはＲＡＭのより低い部分をリングネットワークから効果的に保護する。ネットワークプロセッサはなおロード／ストア、さらにフェッチもそこから行なうことができ、これはロード／ストアがリングにアクセスしないからである。
【０６８２】
図６８および６９は、本発明により実装することができる、ＴｘおよびＲｘイーサネット（登録商標）のための２つの典型的なシナリオを例示する。イーサネット（登録商標）コンパウンドを要約すると、以下の通りである。
【０６８３】
Ｒｘマネージャ８０２は、通常の要求、ドアベル、タスクｉｄおよびＶＩＳコードの送信、ヘッダセンドアヘッド−バイトの数、ステータスおよび場所を知ること、データをネットワークプロセッサＲＡＭに移動させるためのマルチリード要求サービス、および、緊急要求にスイッチするときを知ることを行なうように適合される。
【０６８４】
Ｔｘマネージャ８１２は、送信を開始するとき、再送信するときを知ること、通常の要求−ドアベル、タスクｉｄ、ＶＩＳコードを発行するときおよび方法、空きバッファカウントのセンドアヘッドの実行、緊急要求−最後のバッファおよびその中の最後でないものの実行、ｆｉｆｏ内に空きエントリがある場合の要求があり次第のドアベルの再送信−これが、キューを送信するためにフレームを追加するタスクによって使用されること、終了されたフレームのＲＡＭステータスｆｉｆｏを保ち−それを置くためのｔｘ完了ステータスワードおよび場所を送信することを行なうように適合される。
【０６８５】
Ｒｘオペレーション
（１）Ｒｘフレームが入り始める。
（２）これはｆｉｆｏ内で１エントリ（６４バイト）を満たす。
（３）ヘッダ＋ステータスが、ネットワークプロセッサＲＡＭに押し進められる。
（４）ドアベルを鳴らす。
（５）ネットワークプロセッサは、タスクにサービスするようにスイッチする。
（６）ネットワークプロセッサはヘッダを検査する。
（７）ネットワークプロセッサは、ＣＲＣスヌーパ、特にカウントをセットアップする。
（８）ネットワークプロセッサは、マルチリード要求をｒｘ  ｆｉｆｏから送信する。これは１２＋４クロックを要し、そのため、ｆｉｆｏエントリ全体をリワードした後になお有効なエントリがある場合、ネットワークプロセッサはスイッチアウトせず、単にｃｒｃスヌーパを最後にポーリングし、新しいドアベルが鳴らされ、新しいヘッダがセンドアヘッドされる。
（９）ネットワークプロセッサはＤＭＡ書き込み要求を発行し、イールドする。
（１０）ネットワークプロセッサ内のＤＭＡエージェントは、ＤＭＡへのメッセージをＤＭＡ演算コード、ｓｒｃレジスタデータ、およびＤＭＡコンテキストレジスタに基づいて構築する。このコンテキストは、ＤＭＡアドレス、トークンの可用性、リトル／ビッグエンディアンなどの知識を有する。ＤＭＡとの通信の一部はまた新しいトークン要求でもある。
（１１）ＤＭＡが行なわれるとき、これはドアベルを送信してタスクを再度目覚めさせ、作業を継続する。
【０６８６】
Ｔｘオペレーション
（１）キューを送信するためのフレームを追加することを求め、フレームを追加し、送信側が何も行なっていない場合にメッセージも送信側ｆｉｆｏに送信し、送信タスクのドアベルを鳴らす。
（２）送信タスクはドアベルによって目覚めさせられる。
（３）ＤＭＡ読み取りが発して、ネットワークプロセッサがスイッチアウトする。
（４）ＤＭＡが終了されるとき、マルチリードがネットワークプロセッサＲＡＭからイーサネット（登録商標）ｔｘに発行される。
（５）ｆｉｆｏエントリがフルであるとき、ｔｘは送信を開始する。
（６）ｔｘ  ｆｉｆｏは、ネットワークプロセッサＲＡＭ内の空のｆｉｆｏエントリの数を更新する。
（７）タスクが満たすことができる空のバッファを検出する場合、これらのバッファを満たして退く。
（８）ｆｉｆｏエントリが空であるとき、空きカウントがセンドアヘッドされ、ドアベルが鳴らされる。
（９）最後のバッファが半分フルであり、最後ではない場合、イーサネット（登録商標）ｆｉｆｏは緊急を要求する。
（１０）フレームがＴｘによって終了されるたびに、マネージャはステータスワードをＲＡＭ内の循環ｆｉｆｏに送信する。マネージャは単一のアドレスに２〜３ビットのカウンタを加えたものを使用してアドレスを作成し、またカウンタ値を固定の位置に書き込む。
【０６８７】
ＨＰＣＰのためのプログラミングモデル
図７０は、ＨＰＣＰのために使用することができるプログラミングモデル８３０を例示する。図７０によれば、パケットプロセッサ８３２（ＰＰまたはコントロール・パケット・プロセッサ［ＣＰＰ］）はＨＰＣＰのためのコントローラとして動作し、シグナリングプロトコル、プロトコル管理、例外（障害）のハンドリング、ならびに、システムのコントロールおよび構成のような、コントロールプレーン機能を実行する。ネットワークプロセッサ８３４、８３６は、パケット毎のハンドリング、転送判断、パケット分類、サービス品質（ＱＯＳ）のハンドリング、キューイング、スケジューリング、および、パケット再フォーマッティングなど、データプレーン機能を実行する。
【０６８８】
ＨＰＣＰのためのデータパスプロトコルのサポート
図７１は、ＨＰＣＰの好ましい実施形態により提供された、データパスおよびコントロールパスプロトコルのサポート８４０を例示する。このデータパスプロトコルのサポートは、ＨＰＣＰのネットワークプロセッサ（たとえば、フレキシブル・パケット・プロセッサ）エンジンによって提供される。図７１の各プロトコル機能には、オープンシステムインターフェイス（ＯＳＩ）階層プロトコルモデルにおけるその位置に従って、ラベルが付けられる。図７１についての凡例は、以下の通りである。すなわち、（１）＝レイヤ１、（２）＝レイヤ２、（２＊）＝レイヤ２インターワーキング、（２．５＊）＝レイヤ２．５インターワーキング、および（３＊）＝レイヤ３インターワーキングである。
【０６８９】
図７１内で（ＳＭ）というラベルが付けられたボックスは、ＨＰＣＰの好ましい実施形態によるデータパスプロトコルのサポートを管理するために提供された、シグナリングおよび管理を例示する。図７１のシグナリングおよび監視オペレーションは、図６３に示すものなどのＣＰＰによって実行されたコントロールプレーンのオペレーションに対応することが好ましい。
【０６９０】
ＨＰＣＰのためのパケットプロセッサ
ＨＰＣＰで使用することができるフレキシブル・パケット・プロセッサは通常、汎用プロセッサに通常は存在しないゼロオーバーヘッドのスイッチングなどの機能を含む。したがって、好ましいパケットプロセッサは以下の特性を提供する。すなわち、ほぼゼロオーバーヘッドのタスクスイッチ、ハードウェアスケジューラ（ｎｅｘｔ＿ｔａｓｋ＿ｉｄ）−厳密な優先権方式、無制限の数のスレッド／タスク（たとえば、３２の同時タスク）のサポート、多数の外部メモリへの並列の接続を可能にすること、アクセラレータへのモジュラーインターフェイス、コンパイラフレンドリ、適合された命令セットでＡＬＵ（論理演算装置）、データ操作、フローコントロール、ロード／ストア、タスク管理（イールド）、エージェント（アクセラレータ）、ＳＰＲ（専用レジスタ）移動などのための約６０の命令を有するものである。
【０６９１】
図７２は、本発明の一実施形態によるＨＰＣＰ６２０（図６１）で使用されたパケットプロセッサ６３６のブロック図である。図７２のパケットプロセッサ６３６は、パケットプロセッサコア８５０（「Ｖｏｂｌａコア」）、プログラミングおよびデータのための内部メモリ８５２、ならびに、コアデバッグ８５４、ドアベル８５６、ＣＲＣ８５８、タイマ８６０、ＤＭＡエージェント８６２および他のエージェント８６４などのパケットプロセッサのための一連のサポートサブモジュール（「コンパウンド」）を含む。ファブリックにインターフェイスするための外部インターフェイス８６６もある。パケットプロセッサコア８５０はプログラムシーケンサ８７０を含み、これはさらにシーケンサ８７２、復号器８７４、およびタスクスイッチブロック８７６を含む。また、ロード／ストアユニット８８０、プレロード／バンプユニット８８２、レジスタファイルユニット８８４、論理演算装置８８６、およびエージェント・インターフェイス・モジュール８８８もある。マルチプレクサ８９０は、内部メモリ８５２と、ロード／ストアユニット８８０およびプレロード／バンプユニット８８２の間に配置される。図７２のパケットプロセッサ６３６は、２つのソースバスおよび宛先バスをコア内に含み、エージェントとインターフェイスするためのエージェントバスを含む。
【０６９２】
図７３は、本発明の一実施形態による、ＨＰＣＰで使用されるパケットプロセッサのための例示的処理パイプライン９００を例示する。図７３のパイプライン９００は、各パケットプロセッサの実行について実行されるステップを示す。図７３によれば、最初に命令がフェッチされる。次いで、命令が復号化される。次いで、アクセスされるデータのためのアドレスが計算される。ソースレジスタが読み取られ、命令が実行される。次いで、結果が宛先レジスタに書き込まれる。
【０６９３】
ＨＰＣＰのためのサポート品質機能
ＨＰＣＰは、本発明の一実施形態によるいくつかのサポート品質（ＱＯＳ）機能を組み込むことができる。たとえば、ＨＰＣＰは以下のＱＯＳオペレーション、すなわち、出力キューイングおよびスケジューリング、セル／フレームペーシング、ＩＰ分類（挙動アグリゲータ）、ルックアップエンジン、および輻輳管理のうち、１つまたは複数を組み込むことができる。これらのＱＯＳオペレーションは、ＨＰＣＰ内で実装されたパケットプロセッサによって実行されることが好ましい。ＨＰＣＰは、出力スケジューラを使用した、フレームベースの出力スケジューリングを提供することができる。出力スケジューラはフレームベースのサービスを提供して、仮想／物理送信キューにつき最大８つの構成可能キュー９１０〜９２４、最大Ｍポートのストリクト優先権（ＳＰ）９３０、最大ＮポートのＷＦＱ（ウェイテッドフェアキュー）９３２、および最大Ｌポートの低優先権（ＬＰ）９３４を含めることができる。
【０６９４】
図７４は、本発明の一実施形態によるＨＰＣＰのための出力スケジューリングを例示する。
仕事量保存型スケジューラ：スケジューリング順序−空の１−Ｍ、スケジューラに従って空のＭ−Ｎ、次いでＮ−Ｌである。ＨＰＣＰは、本発明の一実施形態によるセル／フレームペーシングを提供することができる。たとえば、ＡＴＭペーサはカレンダホィールアルゴリズムを使用し、ＵＢＲ、ＵＢＲ＋、ＣＢＲ、ＶＢＲおよびＶＢＲｒｔのためのトラフィック管理を有するセルベースのサービスを提供することができる。
【０６９５】
フレームベースのペーサ（帯域幅リミッタ）は、ポート毎のペーシングを提供することができ、これはポート全体の出力を事前定義されたレートに制限するためである（たとえば、１００Ｍｂｐｓのアップリンクを、必要に応じて１２Ｍｂｐｓのサービスに制限することができる）。
【０６９６】
スケジューリングおよびペーシングのためのＱＯＳの結合を、図７５のようにＨＰＣＰで実装することができる。図７５によれば、ポートが構成可能キューに送り込まれ、これらが次いでＵＢＲ（無規定ビットレート）９４０、ＶＢＲ（可変ビットレート）９４２、またはＣＢＲ（不変ビットレート）データストリーム９４６として、カレンダホィールアルゴリズム９４８に出力される。カレンダホィールアルゴリズム９４８の出力は、ユートピアインターフェイス９５０に送り込まれる。
【０６９７】
ＨＰＣＰは、本発明の一実施形態によるＩＰパケット分類を提供することができる。ＨＰＣＰはＩＰｖ４パケット分類を提供することが好ましい。ＨＰＣＰはこの機能を、命令により優先権が付けられる最大５１２の分類ルールに基づいて提供することができる。パケット分類は、５つまたは７つほどの（強調されたフィールドを参照）マッチするフィールドである、ＩＰソースアドレス、ＩＰ宛先アドレス、プロトコルＩＤ、ＴＣＰ／ＵＤＰソースポート番号、ＴＣＰ／ＵＤＰ宛先ポート番号、サービスのタイプ（ＴＯＳ）ビット、および、物理／論理Ｉ／ｆ−ポート番号に基づく。
【０６９８】
マッチング基準は、各フィールドにおける厳密なマッチ、プリフィックスマッチ、および／または範囲のマッチに基づくことができる。分類ルールを動的に、ＭＰＬＳまたはＲＳＶＰなどのプロトコルによって、あるいは手動で設定することができる。
【０６９９】
ＨＰＣＰはまた、本発明の一実施形態によるアドレスルックアップエンジンも提供することができる。レイヤ２で、以下のアドレスルックアップ機能が提供される。
イーサネット（登録商標）ＭＡＣ（メディアアクセスコントロール）アドレス−ユニキャスト／マルチキャスト。
ＡＴＭ−ＶＰＩ（仮想パスＩＤ）／ＶＣＩ（仮想接続ＩＤ）。アルゴリズム的手法は単一のＰＨＹおよび多くのＰＨＹをサポートする。
【０７００】
ＭＰＬＳラベルルックアップ。
レイヤ３で、以下のアドレスルックアップ機能が提供される。
ＩＰｖ４−ＬＰＭ（最長プリフィックスマッチ）ルックアップ。
ＨＰＣＰはまた、本発明の一実施形態による輻輳管理ＱＯＳも提供することができる。輻輳管理ＱＯＳには、フレームベースの送信キューのためのキュー毎のランダム早期検出（ＲＥＤ）、ならびに、ＡＴＭ輻輳回復ＥＰＤおよびＰＰＤ（それぞれ早期パケット破棄および部分的パケット廃棄）が含まれる。
【０７０１】
ＨＰＣＰのための有益な応用例を示す例示的実施形態
ＨＰＣＰ（「Ｔｒａｊａｎ」）は、多数の応用例のシナリオで使用することができる多用途通信プロセッサである。ＨＰＣＰのフレーム、セルおよび回線処理機能により、これがアクセス応用例のために十分適するようになる。以下で述べるものは、ＨＰＣＰをＳＢＣ（シングルボードコンピュータ）として、あるいは、シャーシ構成におけるラインカードの応用例において使用することができる、いくつかの例示的応用例のシナリオである。
【０７０２】
図７６は、エンタープライズ統合アクセスデバイス（Ｅ−ＩＡＤ）９６０を提供するための、ＨＰＣＰの例示的応用例を例示する。エンタープライズＩＡＤは、企業ネットワークのエッジで使用される。このクラスのボックスまたはデバイスは通常、企業の地理的に分散したオフィスのエッジで使用される。エンタープライズＩＡＤは、内部のＬＡＮ（ローカルエリアネットワーク）から外部のＷＡＮ（広域ネットワーク）へのトラフィックを管理する。ＷＡＮ接続性を、専用の専用回線（イントラネット）および／またはＩＳＰ（インターネットサービスプロバイダ）への接続性、または両方にすることができる。ＩＡＤは通常、音声トラフィックもハンドリングし、これはＰＢＸ、または誘導音声（ＡＴＭまたはＩＰネットワークを介する）への直接接続からのものにすることができる。
【０７０３】
ＩＡＤが実行する必要のある主なタスクには、ルーティング、ブリッジング、ＱｏＳ優先化（音声パケット用）、およびインターワーキング機能性（ＲＦＣ１４８３、ＣＥＳまたはＦＲＦを使用したＴ１エミュレーション）が含まれる。様々なアップリンク（ＷＡＮアクセス方式）を、ＡＴＭ、フレームリレーおよびイーサネット（登録商標）にすることができる。アップリンクによって使用されるメディアは通常、ＡＴＭおよびフレームリレーについてはｎｘＴ１であり、イーサネット（登録商標）およびＡＴＭについてはファイバである。
【０７０４】
図７７は、マルチテナントユニット（ＭＴＵ）／リモート端末ユニット（ＲＴＵ）９７０を提供するための、ＨＰＣＰの例示的応用例を例示する。ＭＴＵは、設計においてＩＡＤによく類似している。両方の応用例は顧客構内に存在する。
【０７０５】
ＭＴＵデバイスは物理的にビルの地階に位置し、ビルへの高速インターネットアクセスの分配を提供する。通常の応用例は、既存の銅線基盤を使用して、ｘＤＳＬ接続をビルのオフィス／階に分配する。ネットワーキングアーキテクチャは、イーサネット（登録商標）またはＡＴＭを中枢網として使用する「スタッカブル」なボックスとなる。ＭＴＵは外部エッジルータに接続され、あるいはルータ機能性をシステムに統合することができる。
【０７０６】
ＲＴＵはＭＴＵに類似の機能性を有する（たとえば、遠隔の近隣へのｘＤＳＬ接続性の分配）。しかし、ＭＴＵとは異なり、ＲＴＵは物理的に構内の外側に位置し、ＩＬＥＣまたはＣＬＥＣ（新興地域電話会社）によって管理および保守される。ＲＴＵ機能性をＤＳＬＡＭと見なすことができ、これは加入者のトラフィックを高速アップリンクに集約させることを意味する。機能性に関して、ＲＴＵをＡＴＭスイッチと見なすことができる。
【０７０７】
図７７の例示的実施形態は、ＨＰＣＰが最大６２のｘＤＳＬ加入者ポートおよび１０／１００イーサネット（登録商標）を中枢網に提供することができる、ＭＴＵ構成を示す。このシナリオでは、ＨＰＣＰはＩＰルーティング機能性またはイーサネット（登録商標）ブリッジングを、ＲＦＣ１４８３を介して実行する。
【０７０８】
ＲＴＵの場合、ＨＰＣＰはＡＴＭスイッチング機能性を実行し、それによりユーザのトラフィックが加入者側で加入者の契約に従って管理下に置かれ、ネットワーク側に向かって集合的にシェーピングされる（ＶＰシェーピング）。この場合、合計で６１の加入者のためのサポートがある。ＲＴＵの場合、ＲＴＵで終端されるＰＯＴＳ（一般電話サービス）回線を、別のＴＤＭリンク上でバックホール（backhaul）させるができ、この場合はＨＰＣＰに関係する処理はなく、あるいは、データおよび音声サービスをバックホールするために１本のパイプを使用して、ＡＴＭを介して「パケット化」すること（ＣＥＳまたはＡＡＬ２トランキング）ができる。
【０７０９】
ＨＰＣＰの他の例示的使用には、メディアゲートウェイ（ＭＧ）および音声ゲートウェイ（ＶＧ）のためのその応用例が含まれる。多数の電気通信会社の経営者はそれらのネットワークを更新して、パケット化音声サービスをサポートしている。主な原動力の１つは、経営者が、音声およびデータサービスをサポートする１つのネットワークを維持することができる結果として生じる、基盤のサポートの節約である。
【０７１０】
メディアゲートウェイは、ＴＤＭからＡＴＭへ、あるいはＴＤＭからＩＰネットワークへなど、異なるネットワークを「リンク」するネットワーク要素である。概念上、メディアゲートウェイは４つの要素からなり、すなわち、ＴＤＭ  Ｉ／ｆ、トランスコーディングエンジン、ゲートウェイコントローラ、およびパケットネットワークインターフェイスである。
【０７１１】
回線交換網側では、ラインカードが、ＰＳＴＮからの時間ＴＤＭチャネルをゲートウェイに接続するために使用される。トランスコーディングエンジンは、複数の規格の間で変換するための処理を実行する。ゲートウェイコントローラは、ゲートウェイおよびコールルーティングを管理する。最後に、パケットネットワークインターフェイスは、ゲートウェイとパケット基盤の間で呼をルーティングする。
【０７１２】
図７８は、メディアゲートウェイの応用例９８０内のＨＰＣＰ（Ｔｒａｊａｎ）の１つの例示的応用例を例示する。提案された方式では、ＨＰＣＰはネットワーキングプロトコル−データパス（ＡＡＬ２またはＲＴＰの終端およびパケット化）、および、ＰＰを使用したコントロール（ＭＧＣＰ、Ｖ５．２、ＧＲ−３０３などのシグナリングプロトコル）を両方実行する。外部ＤＳＰはトランスコーディング機能を実行する。
【０７１３】
図７８のように、ＤＳＰのアレイをＨＰＣＰ  ＥＰＢ（外部周辺デバイスパス）に接続させることができる。提案された手法によれば、全体のシステムパフォーマンスを高め、ＰＰ処理ボトルネックをオフロードするために、ＦＰＧＡメディエータロジックが使用される。多数のＤＳＰベンダはＨＯＳＴ  ＰＯＰＴ  Ｉ／ｆを、ＤＳＰメモリとのデータ転送のメカニズムとして有するので、各転送にはいくつかのコントロールトランザクション（ホストポートコントロールレジスタへの書き込み）が必要である。このオペレーションはコストがかかり、各転送にＰＰを含めることが必要である。トランザクションの数が多いとき、ＰＰがボトルネックとなる。この解決策は、バーストモードで実行し、ＦＰＧＡハンドルを有し、コントロール側を管理することができる、ＦＰＧＡとＨＰＣＰの間のプロトコルを作成することである。ＨＰＣＰは、パケットネットワークインターフェイスを、ＡＴＭ（ユートピア）用およびＩＰ（イーサネット（登録商標）またはＰＯＳ）用に提供する。ＴＤＭネットワークのためのシグナリング情報を、ＨＰＣＰのＴＤＭポートを使用してＴＤＭ相互接続に転送することができる。
【０７１４】
トランキングゲートウェイの応用例では、ＨＰＣＰをＴＤＭネットワークおよびパケットネットワークに接続させることができ、ＨＰＣＰは全体のアプリケーションを実行することができる。
【０７１５】
図７９は、ワイヤレスアクセスネットワーク（ＡＮ）９９０のためのＨＰＣＰのもう１つの例示的応用例を例示する。ワイヤレスアクセスネットワーク（ＡＮ）は、無線基地局（２ＧにおけるＢＴＳ、および３ＧにおけるＮＯＤＥ−Ｂ）、および、ＢＴＳを集約する基地局コントローラ（２ＧにおけるＢＳＣ、および３ＧにおけるＲＮＣ）からなる。ＢＴＳは無線ネットワーク（ＲＮ）と有線アクセス・ネットワークの間のインターフェイスをとる。ＢＳＣは無線リソースおよびネットワーク機能を多数のＢＴＳの間で管理し、メディアゲートウェイ、および、有線コア・トランスポート・ネットワーク内のパケット交換ノードとトラフィックを交換する。
【０７１６】
一般に、ＢＴＳはＷＡＮに、Ｔ１／Ｅ１ラインを使用して接続される。ＷＡＮ上のトランスポート層はＡＴＭまたはＩＰである。ＡＴＭトランスポート選択における利用度およびＱｏＳの理由のため、ＡＡＬ２がトランスポート層で選択される。この場合、ＢＴＳは以下の機能性を必要とする。すなわち、ＡＴＭ  ＵＮＩ機能性、ＡＡＬ２−Ｍｕｘ（Ｉ．３６６．１、Ｉ．３６６．２）のための回線速度サポート、および、ＡＴＭのための逆マルチプレクサ（ＩＭＡ）である。
【０７１７】
トランスポート層がＩＰベースである場合、ＢＴＳ構造は以下の機能性を必要とする。すなわち、ＩＰ終端点と、ＩＰ  ＱｏＳサポート−ＩＰ分類、Ｄｉｆｆｓｅｒｖおよび拡張キューイング／スケジューリングアルゴリズムと、ＲＴＰ／ＵＤＰ／ＩＰヘッダ圧縮と、ＰＰＰ−Ｍｕｘおよび／またはＭＬ−ＰＰＰのための回線速度サポートである。
【０７１８】
両方のアーキテクチャでは、ＨＰＣＰを中央システムプロセッサとして使用することができ、これは、ＷＡＮへの８つのＴ１／Ｅ１インターフェイスおよびバックプレーンへのユートピアまたは１０／１００インターフェイスにより、回線速度ＡＴＭおよびＩＰを処理するその能力に基づく。ＨＰＣＰをまたＢＳＣにおいて集約プロセッサとして使用することもできる。この場合、プロセッサはＩＰルーティングおよびＡＴＭスイッチング（ＡＡＬ２スイッチング）をＯＣ−３レート（回線速度）で実行する必要がある。
【０７１９】
図８０は、マルチサービス・アクセス・プラットフォーム１０００のためのＨＰＣＰの例示的応用例を例示する。マルチサービス・アクセス・プラットフォームは、１つのネットワーク要素において多数の機能、サービス、アクセス技術およびプロトコルを結合する。この柔軟に構成可能なネットワーク要素は、ネットワーク設計、計画、ロールアウトおよびネットワーク管理を単純化する。通常の機能には以下が含まれる。
光搬送波（ＯＣ）−３ｃ／１２ｃ／４８ｃ光マルチプレクサ
Ｔ３／ＯＣ−３ｃアグリゲータ
ＧＲ−３０３ゲートウェイ
ＡＴＭスイッチ
ＩＰルータ
【０７２０】
アクセス技術には以下が含まれる。
Ｔ１
Ｔ１−ＡＴＭ上での逆マルチプレクシング（ＩＭＡ）
Ｔ３
ＸＤＳＬ−ＡＤＳＬ、ＶＤＳＬ
単線高ビットレートＤＳＬ（ＳＨＤＳＬ）
イーサネット（登録商標）
時分割多重化（ＴＤＭ）、フレームリレー、ＡＴＭおよびＩＰはプロトコルとしてサポートされる。マルチサービス・アクセス・プラットフォームは、最適化されたネットワークアーキテクチャ、および、顧客構内からメトロポリタンエリアネットワーク（ＭＡＮ）へのトランスポート効率を提供する。
【０７２１】
マルチサービス・アクセス・プラットフォームのアーキテクチャは、ＡＴＭおよびＴＤＭバックプレーンを有するシェルフベースである。多数の加入者（ダウンリンク）ラインカードは、ＩＡＤ、ルータおよびＰＡＢＸなどの顧客構内設備、ならびにＤＳＬＡＭＳのようなネットワーク要素を、プラットフォームに接続する。アップリンク接続性は通常、光リンクを介したＳＤＨ／ＳＯＮＥＴネットワークへのものである。特殊な音声ゲートウェイサブシステムを、ＶｏＰａｃｋｅｔの終端のために追加することができる。
【０７２２】
ＨＰＣＰは、マルチサービス・アクセス・プラットフォーム応用例における多数のラインカードおよびトランクカードに適合するか、あるいはこれらと互換性を有するように位置付けられる。たとえば、ＨＰＣＰは最大８つのＴ１／Ｅ１フレームリレーをＡＴＭインターワーキング機能（ＦＲＦ．５、ＦＲＦ．８）へ、ラインカード上でハンドリングすることができ、これはＡＴＭスイッチングをＬＣ上、あるいはトランクカードで２ｘＯＣ−３レートで実行することができる。ＨＰＣＰをまた、４つの１０／１００イーサネット（登録商標）リンクを終端させ、１４８３イーサネット（登録商標）ブリッジング、ＩＰルーティングまたはＳＡＲフレームを実行するために使用することもできる。加えて、ＨＰＣＰを、ＰＰＰ、ＰＰＰｏＥまたはＰＰＰｏＡＴＭトラフィックをｘＤＳＬラインカード上で終端させるために使用することができる。
【０７２３】
音声サポートに関して、ＨＰＣＰを音声ゲートウェイサブシステムで、ＶｏＡＴＭまたはＶｏＩＰを終端させるために使用することができ、ＨＰＣＰをまた、トランクカード上でトランキングアプリケーションのために使用して、狭帯域トラフィックをＴＤＭバックプレーンから取り去り、これをＡＴＭネットワークに向けて中継する（ＡＡＬ２トランキングまたは／およびＣＥＳ）こともできる。
【０７２４】
ＨＰＣＰをマルチサービス・アクセス・プラットフォーム応用例において使用するための主な利点は、ＩＯインターフェイスおよびプロトコルサポートに関するその多用途性である。システム設計者はボード設計、システムの知識および専門知識を再使用して、ＨＰＣＰをアクセス空間におけるネットワーキングプラットフォームとして活用することができる。
【０７２５】
ＨＰＣＰにおけるソフトウェアへの例示的手法
ＨＰＣＰのために提供されるソフトウェア（「ＨＰＣＰソフトウェア」）は、ＨＰＣＰハードウェアおよびアーキテクチャと完全統合され、高度に最適化され、ＨＰＣＰのための無数の使用をサポートするための完全な応用例を含むことが好ましい。一実施形態によれば、たとえば、「Ｉｎｔｅｇｒａｔｅｄ  Ｓｏｆｔｗａｒｅ  ｏｎ  Ｓｉｌｉｃｏｎ」（ＩＳＯＳ）として知られる、Ｇｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．によって開発および販売されたソフトウェア（たとえば、ＩＳＯＳバージョンＲ８．０など）を、ＨＰＣＰ上で実行させることができる。ＩＳＯＳソフトウェアは、ツールおよび開発環境を含み、ＨＰＣＰによく適している。ＨＰＣＰソフトウェアは、ＶｘＷｏｒｋｓ、Ｌｉｎｕｘ、ＯＳＥ（Ｅｎｅａ  Ｓｙｓｔｅｍｓによるリアルタイムカーネル）、およびＡＴＭＯＳ−２（ＡＴＭ−オペレーティングシステム［Ｖｉｒａｔａのメーカ独自のオペレーティングシステム］）など、様々なオペレーティングシステムへの完全ポートを含む。ＨＰＣＰソフトウェアを、ウェブ管理（たとえば、Ｇｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．によって販売されたｅｍＷｅｂ（商標）［組み込みウェブサーバ］管理製品）、ＵＰｎＰ、セキュリティおよびファイアウォール機能など、他のソフトウェアと統合することができる。ＨＰＣＰソフトウェアを、音声処理解決策のための音声処理ソフトウェア（たとえば、Ｇｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．によって販売されたｖＣｏｒｅ（商標）音声ＤＳＰソフトウェア）と統合することができる。
【０７２６】
ＨＰＣＰソフトウェアは、コントロールプレーンのためのＣＰＰ（ＭＩＰＳ）、およびデータプレーンのためのパケットプロセッサのための、ソフトウェア解決策を結合することが好ましい。ＨＰＣＰソフトウェアは、ＡＴＭ  ＡＡＬ０、ＡＡＬ１、ＡＡＬ２、ＡＡＬ５、イーサネット（登録商標）、ＨＤＬＣ、ＵＡＲＴ、トランスペアレント（ＰＣＭ）、ＳＰＩおよびＩ２Ｃのための基本ドライバを含むことができる。
【０７２７】
データアプリケーションは、スパニングツリー（８０２．１ｄ）、優先権付きブリッジ（８０２．１ｐ）、イーサネット（登録商標）からイーサネット（登録商標）、および、イーサネット（登録商標）からＡＡＬ５（ＲＦＣ１４８３を介する）のためなど、ブリッジングのためのサポートを含む。データアプリケーションはまた、ルーティングおよびＩＰ転送（ＲＩＰ［ルーティング情報プロトコル］、ＯＳＰＦ［オープン・ショーテスト・パス・ファースト］およびＭＰＬＳ）のため、およびフレームリレーのためのサポートも含むことができる。
【０７２８】
ＨＰＣＰソフトウェアは、ＶｏＡＴＭ（ＡＡＬ２［ＳＳ−ＳＡＲ］）など、音声アプリケーションを含むことができる。一実施形態によれば、ＨＰＣＰソフトウェアは、ニュージャージー州レッドバンクのＧｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．によって販売されたｖＣｏｒｅ（商標）音声ＤＳＰソフトウェアと完全統合される。ＨＰＣＰ音声アプリケーションは、回線エミュレーション（たとえば、ＣＥＳ［回線エミュレーションサービス］）およびＶｏＩＰ（たとえば、パケットプロセッサにおけるＲＴＰ／ＲＴＰＣ、および、ＣＰＰにおけるＭＥＧＡＣＯ、ＭＧＣＰおよびＳＩＰ［セッション開始プロトコル］）のためのサポートを含む。
【０７２９】
一実施形態によれば、ＣＰＰソフトウェアパッケージはフローマネージャ要素を含む。フローマネージャ要素は、マイクロコード化されたビルティング・ブロックをリンクすることによってアプリケーションを作成し、ＯＳ（オペレーティングシステム）独立であり、すべての他のＣＰＰソフトウェアを使用することを望まない顧客のために好都合なＡＰＩ（アプリケーションプログラムインターフェイス）を提供する。
【０７３０】
図８１は、本発明の一実施形態によるフローマネージャ機能性１０２０を例示する。上述のように、ＨＰＣＰソフトウェアを、たとえばＧｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．によって販売された音声処理のためのｖＣｏｒｅ音声ＤＳＰソフトウェアなど、音声処理ソフトウェアと統合することができる。
【０７３１】
ＨＰＣＰのためのソフトウェアの開発を、あるデータプレーン開発ツールの使用を通じて容易にすることができる。たとえば、機能ネットワークプロセッサ（パケットプロセッサ）シミュレータを使用することができる。Ｇｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．は、「Ｖｓｉｍ（商標）」と呼ばれるパケット・プロセッサ・シミュレータを市場に出しており、これをこの目的のために使用することができる。Ｖｓｉｍ（商標）は高速システムシミュレータであり、このシミュレーションは、プロセッサパケットコア命令セット（ＩＳ）、ＤＭＡのための機能的挙動、内部および外部メモリ、ならびに、機能レベル周辺デバイスを含む。Ｖｓｉｍ（商標）はパフォーマンス解析を提供し、トラフィックジェネレータを含む。使用することができるもう１つのデータプレーン開発ツールは「Ｖａｓ（商標）」であり、これはスタンドアロンのパケットプロセッサアセンブラである。使用することができるもう１つのデータプレーン開発ツールは「Ｖ−ｂｕｇ（商標）」であり、これはアセンブラレベルデバッガである。使用することができるもう１つのデータプレーン開発ツールは、「ＶＣＣ（商標）」というパケットプロセッサ「Ｃ」コンパイラである。もう１つのデータプレーン開発ツールは「Ｖ−ＧＤＢ（商標）」であり、これはパケットプロセッサ「Ｃ」ソースレベルデバッガ（Ｖ−ｂｕｇ（商標）と同様）である。これらの各ツールをＷｉｎｄｏｗｓ（登録商標）  ＮＴ（商標）またはＳｕｎ（商標）プラットフォーム上でホストすることができる。前述の各例示的開発ツールは、Ｇｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．によって市場に出されている。図８２は、ＨＰＣＰのためのソフトウェア開発のために使用することができる、例示的データプレーン開発１０３０を例示する。Ｖｏｂｌａ  ＩＳシミュレータ１０３２は、パケット・プロセッサ・シミュレータを指す。もう１つの手法によれば、ソフトウェア開発を、シミュレートされたモジュールではなく参照プラットフォームハードウェアを使用して引き受けることができる。
【０７３２】
ＨＰＣＰにおけるソフトウェアのための具体的な方法
本明細書で説明したＨＰＣＰプロセッサを促進するためのソフトウェアの開発は、十分に当業者の範囲内である。ＨＰＣＰソフトウェアの設計において考慮すべき事柄のいくつかをここで考察する。ＨＰＣＰソフトウェアの開発では、パフォーマンス、ロバスト性、移植性および他の要素の間で受け入れ可能なバランスを提供するソフトウェア最終製品の提供において、考慮するための様々なトレードオフがある。このセクションの考察のバランスについては、ＨＰＣＰはパケットプロセッサ（ＰＰ）（またはコントロール・パケット・プロセッサ［ＣＰＰ］）、および、「Ｖｏｂｌａ」またはＮＰ（ネットワークプロセッサ）と呼ばれるフレキシブル・パケット・プロセッサを含む。
【０７３３】
オペレーティングシステムおよび移植性
ＨＰＣＰソフトウェアの主な目標は、ＨＰＣＰハードウェアと協調して機能を実行して、ＨＰＣＰ／Ｖｏｂｌａチップが通信システム内で望まれるように動作できるようにすることである。通信プロセッサの市場で現在使用されている、非常に多様な異なるソフトウェア組み込みプラットフォーム（ＶｘＷｏｒｋｓ、Ｌｉｎｕｘ、Ｎｕｃｌｅｕｓ、ＯＳＥなど）を考慮に入れると、十分な柔軟性をＨＰＣＰソフトウェアパッケージに提供して、異なる組み込み環境、および、付加価値ソフトウェアコンポーネントについての異なる顧客の期待に対処するように試みることが妥当であると思われる。
【０７３４】
１つの方法では、ＨＰＣＰを、ドライバおよび初期化シーケンスアプリケーションなど、非常に制限されたソフトウェアサポートパッケージを有する、ＯＥＭ（相手先商標製品の製造会社）の製品にすることができる。他方では、主な組み込みソフトウェアプラットフォームは、潜在顧客がいかなる好ましいプラットフォームをも、異なる考慮すべき事柄（たとえば、既存のコードベースおよび経験、パフォーマンス、付加価値コンポーネント、参照プラットフォームおよびアプリケーションなど）に基づいて選択することができる解決策を提供する。
【０７３５】
これらの考慮すべき事柄のバランスを取ると、目標は、より強力な通信プロセッサとしてのみでなく、より付加価値のあるコンポーネントにより異なる環境におけるより柔軟性のある好都合な解決策としても、ＨＰＣＰをより魅力的にすることができるポイントを発見しようと試みるべきであることである。もう１つの考慮すべき事柄はシステムのパフォーマンスに関係し、これは特定の組み込み環境によって決まる可能性がある。多数の普及している組み込みプラットフォーム（ＶｘＷｏｒｋｓ、ＯＳＥ、Ｌｉｎｕｘなど）では、導入されるシステムオーバーヘッド（通常は、平均のシステム呼び出し処理時間および割り込みレイテンシで測定される）は、多数の応用例にとって受け入れられないものである。これは、他の「光」専用環境（たとえば、ＡＴＭＯＳ、多数の「国産」の単純なモニタ）を使用するための提案を引き起こす。主なネットワークプロセッサの原動力は、クリティカルデータパスコードの大部分または全部をＮＰマイクロコードエリアに移動させることであるが（最も普及しているスイッチング、インターワーキング、ブリッジング、ルーティングおよび転送シナリオを含む）、ＣＰＰ終端データパスはなお効率的である必要がある。したがって、ＯＳ依存のオーバーヘッドは最小限に保たれなければならない。
【０７３６】
上の考慮すべき事柄から、以下のＨＰＣＰ  ＳＷとＲＴＯＳ（リアルタイムオペレーティングシステム）の統合方法原理を定式化することが妥当である。
（１）ＨＰＣＰソフトウェアは、異なる既存（および将来）の組み込みプラットフォームとのその容易な統合を可能にするような、ポータブルな形態において提供されるべきである。
（２）ＨＰＣＰソフトウェアは、付加価値コンポーネントについての異なる顧客の期待を満たすべきである。すなわち、低レベルのネットワークプロセッサドライバを提供する単純なオブジェクトライブラリから開始して、異なるサードパーティのコンポーネントのための「グルーインターフェイス」、および、異なるプロトコル実装を有するより多くの付加価値コンポーネントによる受け渡しを含む、異なる顧客アプリケーションのための異なるライブラリの生成を可能にするソースレベルのパッケージまで、異なるレベルのサポートを提供する可能性があるべきである。ＨＰＣＰソフトウェア統合のためのターゲットにすることができる例示的組み込みプラットフォームには、ＶｘＷｏｒｋｓ、Ｌｉｎｕｘ、ＯＳＥ、ＣＨＡＯＳ（次世代ＡＴＭＯＳ）、Ｎｕｃｌｅｕｓ、ＰＳＯＳなどが含まれる。
【０７３７】
マイクロコードアプリケーションの構成。ＨＰＣＰソフトウェアの革新の１つは、クリティカルデータパス機能をＮＰマイクロコードエリアに配置することである。この場合、ＣＰＰは主に、ＮＰ内で作成されたこれらのデータパス（データの流れ）のためのコントロール／管理プレーンとしての機能を果たし、「ＮＰフローマネージャ」として動作し、これはＨＰＣＰソフトウェアの「ルックアンドフィール」モデルを表す。この手法は、他のソフトウェア要件および／またはソフトウェア設計判断が以下の主な目標、すなわち、ＮＰ処理が可能な限り単純かつ効果的であるべきであることを満たすように努めるべきであると仮定し、これは以下を意味する。
【０７３８】
ＮＰによって使用される（また、場合によってはＣＰＰと共有される）すべてのデータ構造（テーブル、フローコンテキストなど）は、ＮＰコードの観点からもっとも効果的となるように設計されるべきである。
【０７３９】
ＮＰは流れ特有の処理を、異なる機能ブロックを呼び出すことによって「ブラインドで実行」するべきであり、これらのＮＰ機能ブロックのリンキング（スタッキング）のための作業は、新しい流れ作成のための要求がユーザアプリケーションおよび／またはＣＰＰ内のコントロール／管理プレーンから来るとき、実行時にＣＰＰフローマネージャコードによって行なわれるべきである。このような機能スタッキングは、共有ＲＡＭ内のフローコンテキストの適切な連係によって行なわれる。これらのポイントを実装するため、ＮＰデータ構造はＣＰＰに知られている。
【０７４０】
図８３は、上述のＨＰＣＰの「ルックアンドフィール」モデル１０４０を例示する。
ＮＰロード構成。ターゲットの市場向けの非常に多様なネットワークアプリケーション、および、「オープン」な通信プロセッサアーキテクチャ（すなわち、カスタム実施態様をＮＰマイクロコードエリアにプログラムおよび追加する能力）を提供する意図をも考慮すると、ＮＰソフトウェアのロードがコンパイル時間に構成可能であることが望ましい。構成ファイル（コンパイル時パラメータの設定用）を手動で、あるいは別法として、たとえば、Ｇｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．から入手可能なＳｙｓｔｅｍ−Ｂｕｉｌｄｅｒ（商標）ツールを介して設定することができる。ＨＰＣＰデバイス内のいくつかのＮＰの各々に、異なるマイクロコードイメージをロードすることができる。
【０７４１】
マイクロコードのロード。動的ＮＰコアのリロード（すなわち、ＮＰコード内容を実行時に変更すること）はサポートされない。ＮＰマイクロコードイメージは、ＮＰリセット時に一度だけロードされ、特定のネットワークデバイスによって必要とされたすべての機能性を含むようになる。ＮＰをＣＰＰによって、完全なシステムリセットの発生なしにリセットすることができることに留意されたい。これによりユーザはＮＰロードを変更することができ、その後にＮＰがソフトリセットされる。
【０７４２】
コントロール対データプレーン処理。ＨＰＣＰソフトウェアの設計の多くでは、クリティカルパス処理をＣＰＰから抽出してＮＰ内で実行することが目的とされている。クリティカルパス処理は、これに関連して、インターフェイス上の実質的にすべてのデータパケット（またはセル）において実行される処理を意味する。これはアプリケーション毎に変わり、パケット上でＨＰＣＰによって実行される処理のすべてのレイヤを包含する。したがって、厳密な階層化アーキテクチャからの逸脱があり、ＮＰは（たとえば）レイヤ２および３を実行し、ＣＰＰはより高いすべてのレイヤ処理を、関連するレイヤ（レイヤ２、３、および時としてレイヤ４以上）に関係なく、その中でＮＰが好ましくはすべてのクリティカルパス処理を実行するモデルのために、実行する。次いで、ＣＰＰは、レイヤ２およびそれ以上からの、すべての非クリティカル（またはコントロールプレーン）の処理を実行する。
【０７４３】
たとえば、ＯＳＰＦルータでは、クリティカルパスは、ＩＰ転送テーブルルックアップ、ＡＲＰ（アドレス解決プロトコル）キャッシュテーブルルックアップ（成功の場合）および転送からなることができる。非クリティカルパス機能はＯＳＰＦコントロールプレーンのすべて（次のホップの学習など）を含み、ＡＲＰ要求を生成し、ＡＲＰ応答をハンドリングする。
【０７４４】
ネットワークプロセッサのソフトウェア設計手法。大部分のデータパス処理を包含するネットワークプロセッサのマイクロコードは、ＨＰＣＰ  ＳＷプロジェクト内で「スクラッチ」から実装されたコンポーネントであり、これによりそのパフォーマンス効率が重要な設計目標となる。他の設計目標は、柔軟性、拡張可能性およびアーキテクチャの「オープン性」である。
【０７４５】
上で定義されたＨＰＣＰソフトウェアの「ルックアンドフィールモデル」から、ＡＴＩＣのような手法は、ネットワークプロセッサのマイクロコード設計のために非常に有用である可能性があり、これは以下の概念を含む。
【０７４６】
ネットワークプロセッサのオブジェクトおよびコンテキスト。ネットワークプロセッサのマイクロコードを機能ブロックに分割することができ、これらを、異なる実行パスを作成するためにアプリケーションビルダによって様々な組み合わせで動作可能に結合させる（たとえば、連鎖させる）ことができる。
【０７４７】
オブジェクトの概念は、特定の状態を有するコードのセクションを記述するために導入される。オブジェクトは、このコードを実行し、それ自体の状態情報（その「コンテキスト」と呼ばれる）を有する、任意のエンティティのインスタンス化である。コンテキストは、動的にオブジェクトに割り振られているプロトコル状態情報、必要なデータ構造およびリソースを含む。たとえば、オブジェクトのコンテキストは、プロトコル状態値、フレームの送信キュー、タイマ情報、および、実行パスにおける後続のオブジェクトへのリンクを含むことができる。
【０７４８】
オブジェクトに属するコンテキスト（すなわち、関連付けられたデータ構造）はオブジェクト依存であり、オブジェクト自体にのみ知られている。オブジェクトは「次のオブジェクト」ポインタおよび「次の関数」ポインタを有する。「次のオブジェクト」は、現在のオブジェクトが完全にその現在のイベントをハンドリングした後に起動されるオブジェクトを示す（Ｃ＋＋の専門用語における次のオブジェクトのための「ｔｈｉｓ」ポインタに類似している）。「次の関数」ポインタは、次のオブジェクトが実行するルーチンのアドレスである。
【０７４９】
流れのＲｘおよびＴｘ部分のための異なるコンテキスト（Ｇｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ，Ｉｎｃ．によって販売されたＨｅｌｉｕｍ（商標）通信プロセッサにおいて行なわれるように）を使用することができ、これは大抵の場合、ＲｘおよびＴｘ処理が独立しているからである。これは、システム内で転送される必要のあるコントロールデータの量を最小限にする助けとなる。
【０７５０】
ネットワークプロセッサ実行スレッドの柔軟性のあるマッピング。１つの方法では、機能処理ブロックをネットワークプロセッサのスレッド（タスク）にマップすることは、機能的な分類（すなわち、タスク＝プロトコルエンティティ）に基づいて実行されるのではなく、むしろ動作効率に基づいて実行される。
【０７５１】
この手法では、ネットワークプロセッサタスクは、抽象的な動作媒体と見なされ、これはその入力キュー内のメッセージのタイプに応じて、異なる機能ブロックおよび／またはプロトコルスタック層を実行することができる。
【０７５２】
入力メッセージ復号化を最適化するために、あらゆるメッセージは事前定義された場所（たとえば、最初のワード）で、入力メッセージをハンドリングするために呼び出されるルーチンへのポインタを含む。この概念は、言うまでもなく、入力キューを有するネットワークプロセッサタスクについてのみ使用することができる。いわゆるＨＷネットワークプロセッサタスク（すなわち、物理ポート特有の処理に関係するもの）は、あるポート特有の機能にハードコードされるべきである。
【０７５３】
タスク境界は、流れの連続的な実行をブレイクするが、これらは必ずしもプロトコル（またはレイヤ）境界と一致する必要はない。一般に、流れにおけるこれらのブレイクは、機能的に必要とされない限り、回避されるべきであり、これはブレイクがオーバーヘッドを加えるからである。たとえば、少数の異なる物理ポートおよび／またはネットワークアプリケーションを含む構成では、専用タスクが低レイテンシを保証するためにシリアルポートのＦＩＦＯを空にする／満たし、他のタスクは、このようなハードのリアルタイム要件を有していないアプリケーションコードを実行する。
【０７５４】
メモリ割り付け／ハンドリング手法。すべてのポートレベルのコンテキストが内部ネットワークプロセッサＳＲＡＭ内によりよく割り付けられるように思われるが（効果のためであり、また、それらの数が物理チップ構成によって制限され、静的な事前の割り付けが可能となるからである）、他のすべてのデータ構造（接続レベルのコンテキストおよびルックアップテーブル）は外部ＳＤＲＡＭに格納され、動的に割り付けられる。
ある構造（たとえば、ルックアップテーブル）を部分的に内部および外部メモリ空間に位置付けることができ、あるいは、一方または他方に存在するように構成することができる。
【０７５５】
ネットワークプロセッサのＳＲＡＭおよび外部ＳＤＲＡＭにおけるメモリ割り付けは、ＣＰＰによって実行される。ネットワークプロセッサはＳＲＡＭパーティショニングを、コンバイル時定義（初期化はＣＰＰによって行なわれ、これはＮＰタスクのため、かつ、異なるプロトコルのためのメモリデータ構造を初期化する）を介して、あるいは、そのＳＲＡＭマネージャによる実行時におけるＣＰＰによって満たされる周知のエリア内のポインタを介して認識する。
【０７５６】
外部ＳＤＲＡＭ内で動的に割り付けられたコンテキストおよびルックアップデータは、ネットワークプロセッサコードによって、このデータ（その必要とされた部分のみ）をネットワークプロセッサの内部ＳＲＡＭ内の特別なエリアに「ＤＭＡすること」を行った後、処理される。ＳＲＡＭ内のこのデータのためのバッファエリアは、タスク毎の「スクラッチパッド」エリア内で予約され、これは、「抽象」タスク（すなわち、ある特定の処理に方向付けられないタスク）のために、スクラッチパッドエリアが、処理中のコンテキストデータの最大サイズに適合するために十分大きく割り付けられるべきであることを意味する。
【０７５７】
１つの方法では、いかなる所与の時間にもいずれかのコンテキストデータの１つのコピーのみがＳＲＡＭに存在するべきである。すべてのコンテキストデータが常にタスクのスクラッチパッド内の固定オフセットにコピーされること、および、いずれかのコンテキストデータフィールドと、それを扱うネットワークプロセッサタスクの間に１対１対応がある（すなわち、いかなるデータフィールドも、ただ１つのネットワークプロセッサタスクによって処理される）ことが仮定される。
【０７５８】
同時に、処理効果を得ることを目的として、コンテキストデータ処理において相当の柔軟性がある可能性がある。たとえば、コンテキストデータをサブブロックに細分することができ、サブブロック内のデータは共通処理原理に基づいてグループ化され、この原理は、これらのフィールドの全部／大部分が特定の機能ブロックによって使用されるべきであるとき、コンテキストにおける少数のフィールドが共にグループ化されて一度に（１ショットで）ＤＭＡされるということである。他方では、たとえば、コンテキストにおける特定の統計値カウンタに、必要性が生じるときに（ＰＤＵ［パケットデータユニット］の最後で、あるいはエラーにおいて）のみ読み取り−修正−書き込みを行なうことができる。これにより、異なるネットワークプロセッサタスクによる異なるコンテキストのサブブロックの処理が可能となる。言うまでもなく、この手法により、コンテキストデータ設計がより扱いにくく困難になる。図８４は、ＡＡＬ５受信側の流れの実施例のためのネットワークプロセッサのソフトウェア設計手法１０５０を例示する。
【０７５９】
ネットワークプロセッサ内のタイマ。ＣＰＰベースのタイマサービスを、ネットワークプロセッサからＣＰＰへのコマンドインターフェイスを介して使用することができる（特に、必要とされたタイマが大きく、めったに開始／使用されないとき）。可能なときは常に、異なるイベントにタイムスタンプを付けるため（たとえば、再アセンブリのタイムアウトを認識するため）に内部自走タイマを使用することができる。この場合、タイマ満了イベントを得る代わりに、現在の自走タイマと以前のタイムスタンプの間の変化量が毎回（各タイマイベントで）計算され、タイマ満了イベントは、いかなるメッセージも通過することなく、ローカルで必要とされる所で生成される。
【０７６０】
ＣＰＣソフトウェア設計手法。ＣＰＰソフトウェア設計目標には、以下が含まれる可能性がある。
（１）ＣＰＰソフトウェアを異なるＲＴＯＳプラットフォームおよびサードパーティ製品と容易に統合できるようにすると同時に、「薄い」ＳＷシムを使用する、単純かつ好都合なＡＰＩが設計されるべきである。
（２）既存のコントロール／管理プレーンコードベースの最大可能な再使用が求められるべきである。これは、新しい単純なＳＷシムの導入および／または既存のＳＷ（すなわち、既存のＧｌｏｂｅｓｐａｎ  Ｖｉｒａｔａ  ＩＳＯＳコード）のある再構築を伴う可能性がある。
（３）コードベースの選択についての判断が行なわれるとき、ＩＳＯＳ−ＡＴＩＣ収束プログラムおよび原理が考慮されるべきである。
【０７６１】
ＣＰＰ  ＳＷ機能をＮＰフローマネージャとして有する前述のＨＰＣＰソフトウェアのルックアンドフィールモデルは、以下の結論を有する。
ＣＰＰコントロールおよびデータＡＰＩの考慮すべき事柄。コントロールＡＰＩを、ＮＰ流れ作成／削除およびそれらの属性変更／問合せのために提供することができる。このＡＰＩは、大抵はユーザアプリケーションによって使用されるが、コントロール／管理プレーンＳＷによっても（たとえば、シグナリングプロトコルおよび／またはＳＮＭＰ［シンプルネットワーク管理プロトコル］エージェントによって）使用される（たとえば、シムを通じて行なわれる）。
【０７６２】
「汎用」コントロールＡＰＩを最小の固定セットのコントロールプリミティブと共に提供することが望ましい可能性がある（たとえば、いわゆるＩＳＯＳ  Ｗｈｉｔｅインターフェイスに類似している）。この手法によれば、いずれかの（いずれかの将来のものを含む）タイプの流れを、同じコントロールプリミティブ（たとえば、ＦＬＯＷ＿ＣＲＥＡＴＥ）を使用して作成／削除することができると同時に、流れのタイプおよび他の属性がプリミティブパラメータとして提供される。流れの属性変更／問合せを、汎用プリミティブ（たとえば、ＦＬＯＷ＿ＧＥＴ＿／ＦＬＯＷ＿ＳＥＴ）を介してハンドリングすることができる。
【０７６３】
流れのタイプおよび属性をＦＬＯＷ＿ＣＲＥＡＴＥプリミティブパラメータとして渡すために使用されるテキスト文字列は、ＡＰＩの一般性、柔軟性および拡張可能性の要件を満たすように思われる。
【０７６４】
ＦＬＯＷ＿ＣＲＥＡＴＥプリミティブはデータパスプロトコル層のコンポーネントを作成することができ、またこれらを共に異なる方法でリンクさせることもできる。また、プリミティブ構文を、プロトコル仕様まで追跡可能にすることも望ましく、これによりその使用がより容易になる。適切なパラメータがパラメータ文字列に供給されるとき、ＦＬＯＷ＿ＣＲＥＡＴＥプリミティブを処理中に、必要とされたコントロールプレーンのコンポーネントを暗黙的に開始することは実現可能である。もう１つの要件は、ＦＬＯＷ＿ＣＲＥＡＴＥプリミティブによって作成／リンクされた様々なレイヤ／コンポーネントへのアクセスの可能性に関係し、これは、同じプロトコルコンポーネントが異なる流れに関係することができるからである。
【０７６５】
インターワーキング／ブリッジング／ルーティングの応用例において以前に作成された終端の流れの連係のために、特殊なプリミティブ（ＦＬＯＷ＿ＬＩＮＫ、ＦＬＯＷ＿ＵＮＬＩＮＫ）を使用することができる。
【０７６６】
特定のデータパスプロトコルのコンポーネントのためのＦＬＯＷ＿ＣＲＥＡＴＥプリミティブの実装（たとえば、特定の流れのタイプについて起動されたＣＰＰドライバ）をまた、ＣＰＰデータパス処理において透過的に上位アプリケーションのために提供することもでき、これは、適切なネットワークプロセッサのマイクロコードブロックがまだ使用可能でない場合である。
【０７６７】
また、ＮＰへ／から渡される終端データのために提供されたデータＡＰＩもある可能性がある。このＡＰＩを、ユーザアプリケーションおよびコントロール／管理プレーンＳＷによって使用することができる。受信終端および送信確認には、標準のコールバック技術を介して結びつけられる。
【０７６８】
ＮＰコードを単純、小型かつ効果的にする目標は、ＮＰ流れ作成／削除／変更／問合せのためのコントロールＡＰＩを介して起動されたＣＰＰドライバソフトウェアがフローコンテキスト内部構造を（たとえこれが厳密なオブジェクト指向の手法に矛盾するとしても）認識しなければならないことを意味する。しかし、これにより効果的な流れの構築／除去がＮＰ対話なしに可能となり、またＭＩＢ（管理情報ベース）との容易な統合も可能となるので、これは有用である。１つの結論は、ＣＰＰおよびＮＰコードのバージョンが厳密に一致するべきであり、互いに緊密にリンクされるべきであるということである。
【０７６９】
ＣＰＰによるＮＰの流れのリンキングは、ＣＰＰが、「次の関数」ポインタとしてコンテキスト内に挿入されるＮＰ機能ブロックのアドレスを「知っている」と仮定する。これを、以前に構築されたＮＰロードの記号情報を使用する間、ＣＰＰロードが構築されるとき、達成することができる。しかし、多数のＮＰ（たとえば、異なる機能性を有するもの）が同じＣＰＰによってサービスされるとき、困難が生じる。したがって、あるマッピング（流れのタイプから機能ブロックアドレスへ）が必要とされ、これは各ＮＰに特有のものである。これを、ＮＰ初期化中にＮＰ内部ＳＲＡＭ内で作成されたマッピングアレイを使用して実装することができ、これが次いでＣＰＰによって流れのリンキング情報検索のために読み取られる。
【０７７０】
内部フローコンテキスト構造についての知識はなお、特定の流れの操作を担う特定のＣＰＰドライバにおいてローカライズされるべきである。加えて、ＣＰＰおよびＮＰによって共有されたコンテキストデータを更新する間に配慮するべきである。目的は簡単であり、すなわち、あらゆるフィールドについて、メモリのロックなしに動作するただ１つの書き込み所有者を有することが望ましい。これが可能でない場合、ＣＰＰからＮＰへのコマンドインターフェイスが使用されて、書き込み要求がデータの書き込みアクセス「所有者」に渡される。また、ＣＰＰおよびＮＰコードがコンテキスト構造を同じ方法で見るかあるいは認識することを保証するための、追加の手段が存在する可能性がある。これは、ＣＰＰおよびＮＰで使用される互換性のあるソフトウェアロードの様々なチェックを含む可能性がある。
【０７７１】
上で概説したものと同じ手法が、ＣＰＰおよびＮＰによって使用／更新される様々なルックアップテーブルについて使用されるべきである。これらのテーブルは、ＣＰＰ内のコントロール／管理プレーンソフトウェアによってハンドリングすることができるように思われる。ＣＰＰ内のテーブル更新のために特殊なＡＰＩを導入する必要性はない可能性がある。別法として、特定のテーブル構想（ＮＰの観点からより効果的となるように選択されたもの）を知り、コントロール／プレーンソフトウェアから（ＳＷシムを介して）起動される、あるテーブル特有のドライバコードが存在する可能性がある。さらに、テーブルを両方のコアから変更できる場合、ならびに、テーブル更新が、異なる場所／エントリ内の変更のセットを必要とする複雑なオペレーションである場合、テーブル更新オペレーションの実装に配慮するべきである。
【０７７２】
コントロールおよびデータＡＰＩの提案。以下の例示的ＡＰＩは上の設計機能性を満たし、以下のさらなる設計判断のための基礎として使用することができる。
ＮｅｗＦｌｏｗＨａｎｄｌｅ＝ＦＬＯＷ＿ＣＲＥＡＴＥ（ＥｘｉｓｔｉｎｇＦｌｏｗＨａｎｄｌｅ，“／ｔｙｐｅ＝ＦＬＯＷ＿ＴＹＰＥ／ｐａｒａｍ＝ＰＡＲＡＭ”）；
ｓｔａｔｕｓ＝ＦＬＯＷ＿ＤＥＬＥＴＥ（ＥｘｉｓｔｉｎｇＦｌｏｗＨａｎｄｌｅ）；
ｓｔａｔｕｓ＝ＦＬＯＷ＿ＴＲＡＮＳＭＩＴ（ＥｘｉｓｔｉｎｇＦｌｏｗＨａｎｄｌｅ，Ｆｒａｍｅ）；
ｓｔａｔｕｓ＝ＦＬＯＷ＿ＳＥＴ（ＥｘｉｓｔｉｎｇＦｌｏｗＨａｎｄｌｅ，“ａｔｔｒｉｂｕｔｅ＿ｎａｍｅ”，“ａｔｔｒｉｂｕｔｅ＿ｖａｌｕｅ”）；
ｓｔａｔｕｓ＝ＦＬＯＷ＿ＧＥＴ（ＥｘｉｓｔｉｎｇＦｌｏｗＨａｎｄｌｅ，“ａｔｔｒｉｂｕｔｅ＿ｎａｍｅ”，＆ａｔｔｒｉｂｕｔｅ＿ｖａｌｕｅ）；
ｓｔａｔｕｓ＝ＦＬＯＷ＿ＬＩＮＫ（ＥｘｉｓｔｉｎｇＵｐｐｅｒＦｌｏｗ，ＥｘｉｓｔｉｎｇＴｅｒｍｉｎａｔｉｏｎＦｌｏｗ）；ｓｔａｔｕｓ＝ＦＬＯＷ＿ＵＮＬＩＮＫ（ＥｘｉｓｔｉｎｇＵｐｐｅｒＦｌｏｗ，ＥｘｉｓｔｉｎｇＴｅｒｍｉｎａｔｉｏｎＦｌｏｗ）；
Ｔｘおよび／またはＲｘ方向の流れを可能および無効にすることは、適切な属性（たとえば、「ＴｘＥｎ」、「ＴＲＵＥ」）を有するＦＬＯＷ＿ＳＥＴプリミティブを通じて実装することができ、これをまたＦＬＯＷ＿ＣＲＥＡＴＥパラメータ文字列において提供することもできる。
【０７７３】
コントロールプレーンコンポーネントの開始を、同じＦＬＯＷ＿ＣＲＥＡＴＥ（またはＦＬＯＷ＿ＳＥＴ）プリミティブを介して開始することができる。たとえば、対応するＯＡＭ  Ｆ５プロセスの開始中のＡＡＬ５終端接続の作成を、以下のようにすることができる。
ＡｔｍＰｏｒｔＨａｎｄｌｅ１＝ＦＬＯＷ＿ＣＲＥＡＴＥ（ＶｏｂｌａＩｄ＋ＰｈｙｓｙｃａｌＰｏｒｔＮｕｍｂｅｒ，
“／Ｔｙｐｅ＝ＵＴＯＰＩＡ／Ｐｈｙ＝０／ＮＡＭＥ＝Ａ１”）Ａａｌ５Ｈａｎｄｌｅ＝
ＦＬＯＷ＿ＣＲＥＡＴＥ（ＡｔｍＰｏｒｔＨａｎｄｌｅ１，“／Ｔｙｐｅ＝ＡＡＬ５／ＴｘＶｃｉ＝５／ＴｘＶｐｉ＝０／Ｐｃｒ＝１００／ＯａｍＦ５＝Ｙｅｓ”）ＦＬＯＷ＿ＳＥＴ（Ａａｌ５Ｈａｎｄｌｅ，“ＲｘＨａｎｄｌｅｒ”，“０ｘＡＤＤＲＥＳＳ０”）
ＦＬＯＷ＿ＳＥＴ（Ａａｌ５Ｈａｎｄｌｅ，“ＴｘＣｏｎｆｉｒｍａｔｉｏｎＨａｎｄｌｅｒ”，“０ｘＡＤＤＲＥＳＳ１”）
【０７７４】
以下の実施例は、異なるネットワークプロセッサ上に作成された、１つのイーサネット（登録商標）ポートおよび２つのＲＦＣ１４８３カプセル化ＡＡＬ５接続を介した、ブリッジアプリケーションの作成を明示する。ＩＰ終端の流れは、スパニングツリープロセスをブリッジアプリケーションのコントロールプレーンとして開始するＡＡＬ５  ＶＣＩ、他のＡＡＬ５  ＶＣＩのために開始されたＯＡＭ  Ｆ５の流れ、および、ＡＴＭポートの１つのために開始されたＩＬＭＩのうち、１つにおいて多重化される。
ＥｔｈｅｒｎｅｔＰｏｒｔＨａｎｄｌｅ＝ＦＬＯＷ＿ＣＲＥＡＴＥ（Ｖｏｂｌａ１＋ＰｈｙｓｉｃａｌＰｏｒｔ２，
“／Ｔｙｐｅ＝Ｅｔｈｅｒｎｅｔ（登録商標）／Ｐｒｏｍｉｓｃ＝Ｙｅｓ”）ＢｒｉｄｇｅＨａｎｄｌｅ＝
ＦＬＯＷ＿ＣＲＥＡＴＥ（Ｅｔｈｅｒｎｅｔ（登録商標）ＰｏｒｔＨａｎｄｌｅ，“／Ｔｙｐｅ＝Ｂｒｉｄｇｅ／Ｓｐａｎｎｉｎｇ＝Ｙｅｓ”）
ＡｔｍＰｏｒｔＨａｎｄｌｅ１＝ＦＬＯＷ＿ＣＲＥＡＴＥ（Ｖｏｂｌａ１＋ＰｈｙｓｉｃａｌＰｏｒｔ１，
“／Ｔｙｐｅ＝ＵＴＯＰＩＡ／Ｐｈｙ＝１”）Ａａｌ５Ｈａｎｌｄｌｅ１＝ＦＬＯＷ＿ＣＲＥＡＴＥ（ＡｔｍＰｏｒｔＨａｎｄｌｅ１，
“／Ｔｙｐｅ＝ＡＡＬ５／ＴｘＶｃｉ＝５／ＴｘＶｐｉ＝０／Ｐｃｒ＝１００００”）Ｒｆｃ１４８３Ｈａｎｄｌｅ１＝
ＦＬＯＷ＿ＣＲＥＡＴＥ（Ａａｌ５Ｈａｎｌｄｌｅ１，“／Ｔｙｐｅ＝Ｒｆｃｌ４８３”）ＩｐＨａｎｄｌｅ１＝
ＦＬＯＷ＿ＣＲＥＡＴＥ（Ｒｆｃ１４８３Ｈａｎｄｌｅ１，“／Ｔｙｐｅ＝Ｉｐ／ＩｐＡｄｄｒ＝１０．０．０．１／Ｍａｓｋ＝２５５．０．０．０”）
ＦＬＯＷ＿ＳＥＴ（ＩｐＨａｎｄｌｅ１，“ＩｐＲｘＨａｎｄｌｅｒ”，“０ｘＡＤＤＲＥＳＳ０”）
ＬａｎＨａｎｄｌｅ１＝ＦＬＯＷ＿ＣＲＥＡＴＥ（Ｒｆｃ１４８３Ｈａｎｄｌｅ１，“／Ｔｙｐｅ＝Ｅｔｈｅｒｎｅｔ（登録商標）”）
ＡＴＭ  ＰｏｒｔＨａｎｄｌｅ２＝ＦＬＯＷ＿ＣＲＥＡＴＥ（Ｖｏｂｌａ２＋ＰｈｙｓｉｃａｌＰｏｒｔ３，
“／Ｔｙｐｅ＝ＵＴＯＰＩＡ／Ｐｈｙ＝５／Ｉｌｍｉ＝Ｙｅｓ”）Ａａｌ５Ｈａｎｌｄｌｅ２＝
ＦＬＯＷ＿ＣＲＥＡＴＥ（ＡｔｍＰｏｒｔＨａｎｄｌｅ２，“／Ｔｙｐｅ＝ＡＡＬ５／ＴｘＶｃｉ＝２０／ＴｘＶｐｉ＝１／Ｐｃｒ＝１００００”）
ＦＬＯＷ＿ＳＥＴ（Ａａｌ５Ｈａｎｌｄｌｅ２，“ＯａｍＦ５”，“Ｙｅｓ”）；Ｒｆｃ１４８３Ｈａｎｄｌｅ２＝
ＦＬＯＷ＿ＣＲＥＡＴＥ（Ａａｌ５Ｈａｎｌｄｌｅ２，“／Ｔｙｐｅ＝Ｒｆｃ１４８３”）
ＬａｎＨａｎｄｌｅ２＝ＦＬＯＷ＿ＣＲＥＡＴＥ（Ｒｆｃ１４８３Ｈａｎｄｌｅ２，“／Ｔｙｐｅ＝Ｅｔｈｅｒｎｅｔ（登録商標）”）
ＦＬＯＷ＿ＬＩＮＫ（ＢｒｉｄｇｅＨａｎｄｌｅ，ＬａｎＨａｎｄｌｅ１）
ＦＬＯＷ＿ＬＩＮＫ（ＢｒｉｄｇｅＨａｎｄｌｅ，ＬａｎＨａｎｄｌｅ２）
【０７７５】
ＣＰＰ  ＡＰＩスレッドセーフティ。ＣＰＰにおけるコントロールおよびデータ終端ＡＰＩを、ユーザ／コントロール／管理ＳＷからのプリミティブをハンドリングする、受動ライブラリ（場合によっては、プラットフォーム特有のＢＳＰの一部としてバイナリで提供される）として表すことができる。これらのＡＰＩを「スレッドセーフ」にするべきであり、また、コントロールおよびデータプリミティブの流れの有効な分離も提供するべきである。これにより、終端データプリミティブの処理がコントロールプリミティブのハンドリングのために遅延されるシナリオが回避される。ＡＴＩＣのような垂直スレッド最適化モデルはこのような問題を解決する助けとなることができ、この場合、ＡＰＩ関数を、メッセージ送信を必要な所で引き起こす「ラッパー」として実装することができる。
【０７７６】
ＣＰＰシステムソフトウェアベース。非常に多様な異なるＲＴＯＳプラットフォームをサポートする目標は、ＡＴＩＣシステムサービスおよびＡＴＩＣ  ＲＴＯＳポーティング技術を、ＣＰＰソフトウェア開発のためのシステムベースとして使用することを示唆する。
【０７７７】
この手法はさらに望ましく、これはＡＴＩＣシステムサービスが、ＡＴＩＣからＩＳＯＳへの収束方法のための好ましいベースとしても選択されているからである。
高度の類似性により、ＩＳＯＳ  ＢＵＮフレームワークを、ＣＰＰ  ＡＰＩ実装フレームワークとして、場合によってはわずかな変更と共に再使用することができる。これにより、考えられる限りでは、既存のＢＵＮドライバおよび同じレガシー周辺ポートを、ネットワークプロセッサ上の再実装のために再使用可能にすることができる。
【０７７８】
ＨＰＣＰソフトウェアのパーティショニング
このセクションの目標は、ＨＰＣＰソフトウェアのパーティショニングを、多少の独立ブロックとして特徴付けると同時に、以下のように大まかに定義しようと試みることである。
【０７７９】
あらゆるブロックの機能仕様。
ブロックの間のインターフェイスおよび「外界」（外部）のソフトウェアへのインターフェイス。
可能なソフトウェア再使用の方法および評価、および、必要なシムの定義。
ソフトウェアのパーティショニングのために使用される行動原理は、以前の考察で定義された設計手法、および従来の「情報隠蔽」の手法である。
【０７８０】
ＣＰＰソフトウェアのパーティショニング。図８５は、提案するパーティショニングおよびインターフェイスを例示する。一実施形態によれば、図８５の機能ブロックおよびインターフェイスは以下のように提供される。第１のセットは、ユーザまたはサードパーティのコンポーネントに対応することができる。この第１のセットは図８５内の以下のブロックを含むことができ、すなわち、ユーザアプリケーション１０７０、ソケットインターフェイス１０７２、コントロールプレーンソフトウェア１０７４、管理プレーンソフトウェア１０７６、ファイルシステム１０７８、およびコンソール１０８０である。第２のセットは、ＨＰＣＰのために作成された新しいコンポーネントに対応することができる。この第２のセットは図８５内の以下のブロックを含むことができ、すなわち、ＢＳＰ１０８２、フローマネージャのフレームワーク１０８４、機能ドライバ１０８６、ルックアップテーブルマネージャ１０８８、Ｖｏｂｌａ  ＲＡＭローダおよびイニシャライザ１０９０、Ｖｏｂｌａ  ＳＲＡＭマネージャ１０９８、Ｖｏｂｌａキューインターフェイス１０９２、シム１〜５、トレーサおよびｄｉａｇｓ拡張１０９４、およびＶｏｂｌａフレーム／セル１０９６である。第３のセットは既存（たとえば、ＡＴＩＣ／ＩＳＯＳ）のコンポーネントに対応することができる。この第３のセットは図８５内の以下のブロックを含むことができ、すなわち、ネットワークインターフェイス１１００（ソケットインターフェイスとフローマネージャのフレームワークの間）、および、システムサービスおよびＯＳポーティング１１０２（トレーサ、ｄｉａｇｓ拡張の上）である。
【０７８１】
ソフトウェアブロック機能仕様
フローマネージャのフレームワーク
このフローマネージャのフレームワーク１０８４は、ネットワークプロセッサのフローマネージャＡＰＩを実装し、機能ドライバのためのフレームワークおよびサービス（属性構文解析および登録、データパススタッキングなど）を提供する。このコンポーネントはまた、ＡＰＩスレッドセーフティメカニズム、コントロールおよびデータスレッド分離、ならびに、メッセージ送信、ラッピングおよびキューイングをも必要に応じて扱うべきである。
【０７８２】
シム１−フローマネージャからコントロールプレーンへ、フローマネージャから管理プレーンへ。
サポートされるコントロールプレーンソフトウェアは、異なるコントロールプレーン実装のためのシムレイヤのセットの使用を伴うことができる。シム１の目的は、コントロールプレーンからの接続作成／削除プリミティブの、ネットワークプロセッサの流れ作成／削除プリミティブへの変換を提供すること、およびまた、コントロールプレーンを流れの終端データパスに接続することである。同じことを、異なる管理プレーン実装のためにも同様に行なうことができる。管理プレーン統合のために、このシムはまた、ＭＩＢ  ＧＥＴ／ＳＥＴメソッドの、適切なＦＬＯＷ＿ＳＥＴ／ＦＬＯＷ＿ＧＥＴ呼び出しへのマッピングも提供する。
【０７８３】
機能ドライバブロック
サポートされた異なる機能ドライバの数は、サポートされたネットワークプロトコル／アプリケーションの数によって決まる可能性がある。特定のドライバは、特定のタイプの流れのため、また流れの連係のための、流れ作成／削除プリミティブの実装を担う。終端データパス機能性はすべてのドライバのために、主にフローマネージャのフレームワークの汎用サービスとして提供されるべきである。
【０７８４】
ドライバの機能には、以下が含まれる。
ポートレベルの流れ作成／削除プリミティブの処理中の、低レベルシリアルポート初期化／初期化解除。
ポートレベルの流れ作成／削除プリミティブの処理中の、内部ＳＲＡＭ内のポートレベルの静的コンテキスト（ネットワークプロセッサのＳＲＡＭマネージャのサービスを介する）、および、外部ＳＤＲＡＭ（または、そのように要求されるときは内部ＳＲＡＭ）内のルックアップテーブルの、割り付けおよび初期化／割り付け解除および初期化解除。
【０７８５】
外部ＳＤＲＡＭ接続レベルコンテキスト内の割り付け／割り付け解除、および、接続レベルの流れ作成／削除プリミティブ処理の結果としてのその初期化／初期化解除。
ネットワークプロセッサのＳＲＡＭマネージャのサービスを介して提供されたｆｌｏｗ＿ｔｙｐｅから機能へのマッピングの使用を介した、流れの作成／削除／リンク／アンリンクプリミティブ処理の結果として、適切なコンテキストおよびルックアップテーブル内の「ｎｅｘｔ」および「ｎｅｘｔ＿ｆｕｎｃｔｉｏｎ」ポインタを設定することによる、流れの連係／連係解除。
【０７８６】
ドライバ特有のＦＬＯＷ＿ＳＥＴ／ＧＥＴプリミティブ、特に、ＦＬＯＷ＿ＣＲＥＡＴＥおよびＦＬＯＷ＿ＳＥＴプリミティブの属性を通じて可能でありそのように要求されるときの作成／開始コントロールプレーンプロトコルの実装。
【０７８７】
たとえば、ＡＡＬ２終端パスのための「まだ準備できていない」データの流れのフラグメントの実装。マイクロコードの解決策が存在しない場合、ＳＳＳＡＲ（サービス特有の区分化およびリアセンブリ）サブレイヤをＣＰＰ内の機能ドライバによって実装することができる。
【０７８８】
ルックアップテーブルマネージャ１０８８およびシム２
ルックアップテーブルマネージャ１０８８は、特定のタイプのルックアップテーブルの修正を管理し、したがって、内部テーブル構造（ネットワークプロセッサのマイクロコード使用に合わせて最適化されたもの）を認識し、あるいは知る。様々なコントロール／管理プレーンコンポーネントについて、シム２の「グルーレイヤ」（各特定の実装に特有である可能性がある）が、テーブルへのアクセスを実装するために提供される。汎用ＡＰＩを提供する代わりに、あらゆる特定のコントロール／管理プレーンコンポーネントを再構築して、特定のシム２レイヤを使用してネットワークプロセッサのルックアップテーブルと共に動作可能にすることができる。ルックアップテーブルがＳＲＡＭ内で割り付けられるとき、ネットワークプロセッサのＳＲＡＭマネージャ１０９８サービスは、ルックアップテーブルにアクセスするために使用される。ネットワークプロセッサがテーブル書き込み所有者であるとき、テーブルの修正は、コマンドメッセージを、ネットワークプロセッサのキューインターフェイス１０９２（後述）を通じて送信することによって、行なわれる。
【０７８９】
ネットワークプロセッサのキューインターフェイス１０９２
ネットワークプロセッサのキューインターフェイス１０９２は、ＣＰＰからネットワークプロセッサへのインターフェイスを担う。このコンポーネントは、インターフェイスのポーリングおよび／または割り込み処理、ならびに、インターフェイス上のキューへ行く／から来るメッセージのハンドリングおよびそれらを適切な受信者にルーティングすることを実行する。
【０７９０】
ネットワークプロセッサのＳＲＡＭマネージャ１０９８
ネットワークプロセッサのＳＲＡＭマネージャ１０９８は、すべてのＳＲＡＭ割り付け、および、ネットワークプロセッサタスク毎のＳＲＡＭパーティショニングおよび初期化を調整する。このコンポーネントは、ｆｌｏｗ＿ｔｙｐｅからｍｉｃｒｏｃｏｄｅ＿ｆｕｎｃｔｉｏｎへのマッピング機能性を提供する。これはまた、ネットワークプロセッサリング上の異なるエージェントへのアクセスのためのすべての必要とされたマッピング情報を、リング列挙プロセス（前述）の結果の学習を介して、初期化することもできる。
【０７９１】
ネットワークプロセッサのＲＡＭローダおよびイニシャライザ１０９０、ならびにシム３
ネットワークプロセッサのＲＡＭローダおよびイニシャライザ１０９０は、ネットワークプロセッサのイメージローディングおよびネットワークプロセッサ開始コードとのハンドシェーキングのプロセスを担う。異なるシム３実装を通じて、ネットワークプロセッサＲＡＭローダおよびイニシャライザ１０９０は異なるファイルシステムコンポーネントとインターフェイスを取り、ネットワークプロセッサイメージを、適切なネットワークプロセッサへのローディングのために得る。
【０７９２】
システムサービスおよびＯＳポーティング１１０２
１つの手法によれば、ＡＴＩＣシステムサービスおよびＯＳポーティング技術が使用されるべきである。加えて、ネットワークプロセッサ特有のフレーム／セル再実装が引き受けられるべきである。既存のＡＴＩＣ追跡／ｄｉａｇｓサポートを拡張して、より汎用的で好都合なフレームワークの作成をサポートすることが望ましい。このようなフレームワークにより、コンパイルおよび実行時における起動が、ネットワークプロセッサおよびＣＰＰ内の異なるコンポーネントによって登録されたイベントの追跡のために可能となる。たとえば、ネットワークプロセッサおよびＣＰＰフローマネージャのフレームワークのための提案された設計手法に基づいて、様々なトレーサ／インジェクタを、データパスの内側でその流れのフラグメントのいずれかの間で動的にリンクさせることができる（たとえば、ＢＵＮドライバの追跡／デバッグに類似している）。
【０７９３】
ネットワークインターフェイス１１００およびシム４
ネットワークインターフェイス（ＮＩ）１１００は、フローマネージャへ／からの終端データパスをネイティブＩＰスタックと接続する。シム４は、プリミティブの変換のための既存のＮＩ実装のために使用される。
【０７９４】
シム５
シム５は、既存のコンソール実装をフローマネージャのＦＬＯＷ＿ＧＥＴ／ＳＥＴインターフェイスと接続するために定義される。
【０７９５】
ＢＳＰ１０８２
１つの手法によれば、既存のＢＳＰ１０８２を類似のチップ（すなわち、ＭＩＰＳコアを有するチップ）のために再使用することが望ましい。これは参照ボード設計のための追加の要件を課す可能性がある。その場合、ＢＳＰコンポーネントのいくつか（たとえば、フラッシュドライバ、メモリ初期化など）を再使用することが実現可能である可能性がある。同時に、主なＢＳＰ機能（すなわち、通常はＵＡＲＴおよびイーサネット（登録商標）／ＩＰ接続のための基本接続性を提供すること）は、ネットワークプロセッサにおいて再実装されるべきである。これはＢＳＰの一部として、ＵＡＲＴおよびイーサネット（登録商標）／ＩＰサポートおよび必要とされたＣＰＰドライバを含む、単純なネットワークプロセッサイメージの受け渡しを伴う可能性がある。この場合、ネットワークプロセッサイメージは、フラッシュ上のＣＰＰロードの一部であり、これがネットワークプロセッサに、ネットワークプロセッサのＲＡＭローダおよびイニシャライザを介して、システム初期化中にロードされる。この場合、特定のエンドユーザが、カスタマイズされたネットワークプロセッサのロード構築のための適切なツールを得る場合、このタスクはＢＳＰ構築プロセスの一部であるべきである（ＵＡＲＴ＋イーサネット（登録商標）／ＩＰサポートが選択されるべきである）。もう１つの手法によれば、ターゲットとのＪＴＡＧ（シリアルデバッグポート）ベースの接続性を有するＢＳＰを使用することができる。この場合、結合されたＣＰＰおよびネットワークプロセッサのイメージを、通常のアプリケーションロード構築と見なすことができる。
【０７９６】
ＣＰＰドライバは（フローマネージャのフレームワークおよび適切なシムを通じて）、特定のＢＳＰドライバフレームワークと統合されるべきである。
ネットワークプロセッサソフトウェアのパーティショニング。ネットワークプロセッサソフトウェアのパーティショニング手法の目標は、共通コード／アルゴリズムの最大限の再使用を有すると同時に、コーディングの実行においてインライニングおよび／またはマクロを使用することによって処理効率を保持することにすることができる。図８６は、ネットワークプロセッサのための１つの可能なパーティショニング手法１２００を提供する。
【０７９７】
ＲＦＣ１４８３ブリッジングのためのパフォーマンス推定値
例として、ＲＦＣ１４８３ブリッジングのためのパフォーマンス推定値を、以下の表４３のように計算することができる。
【０７９８】
【表４３】
2005516432.tif 000050
【０７９９】
累積状態フラグに基づく分岐命令の実行
前述のように、少なくとも１つの実施形態では、累積条件フラグ、すなわち「スティッキービット」がＨＰＣＰおよび／またはネットワークプロセッサによって、分岐命令を実行するために使用される。従来の処理デバイスは一般に分岐オペレーションを、比較命令を分岐命令とペアにすることによって実行する。具体的には、このような処理デバイスは一般に比較演算を、第１の指定されたオペランドを第２の指定されたオペランドから引くことによって実行する。この演算の結果として、処理デバイスは様々な状態フラグを設定する。このようなフラグは、第２のオペランドに対する第１のオペランドの大きさに関する情報、ならびに、演算に関する他の情報を提供する。後続の分岐命令は、プログラム実行における分岐を、状態フラグの値に基づいて提供する。状態フラグは一般に、処理デバイスによって実行された次の命令に基づいて上書きされる。よって、プログラマは通常、関連する比較命令の直後に分岐命令を含める。
【０８００】
通常のプログラムは、複雑な一連のこのような比較および分岐命令の組み合わせを含む可能性がある。図８７は、このようなプログラム１４００の実行を例示する。ステップ１４０２で、処理デバイスは第１の比較命令（すなわち、比較１命令）を実行する。上述のように、このステップで、第１のオペランドが第２のオペランドから減算される。処理デバイスはまた状態フラグを、比較演算の帰結に基づいて設定する。続いてステップ１４０４で、処理デバイスは分岐命令を、状態フラグの値に基づいて実行する。すなわち、状態フラグが規定の値を含む場合、処理デバイスは指定された分岐アドレスまで進む。図８７の例示の場合、処理デバイスは、状態フラグの値によって反映されるように、比較１命令が規定された条件を満たす場合、アドレスＡに分岐する。
【０８０１】
図のように、プログラム１４００は多数の追加の比較および分岐命令の組み合わせを含む。たとえば、ステップ１４０６で、処理デバイスは第２の比較演算（すなわち、比較２命令）を実行する。処理デバイスはまた状態フラグを第２の比較演算の帰結に基づいて再設定する。ステップ１４０８で、処理デバイスは分岐命令を、状態フラグの新しい値に基づいて実行する。すなわち、処理デバイスは、状態フラグの値によって反映されるように、比較２命令が規定された条件を満たす場合、アドレスＢに分岐する。
【０８０２】
ステップ１４１０で、処理デバイスが第３の比較演算（すなわち、比較３命令）を実行する。再度、処理デバイスはまた状態フラグを比較演算の帰結に基づいて再設定する。ステップ１４１２で、処理デバイスは分岐命令を、状態フラグの新しい値に基づいて実行する。すなわち、処理デバイスは、状態フラグの値によって反映されるように、比較３命令が規定された条件を満たす場合、アドレスＣに分岐する。
【０８０３】
さらに追加の比較および分岐命令の組み合わせを含めることができる（が、例示しない）。一連の比較および分岐命令の後に続いて、プログラムは追加の処理１４１４を含むことができる。
【０８０４】
図８７のような既知の技術を、エラーチェックオペレーションの実行においてなど、多数の応用例に適用することができる。たとえば、ネットワークプロセッサはしばしば一連のエラーチェックを、規定のメイン処理タスクの実行前に実行する。ＩＰｖ４パケットネットワークプロトコルでは、たとえば、ネットワークプロセッサは、処理中の情報のプロトコルバージョンが４に等しいかどうかを判断するためにチェックする。処理デバイスはまた、処理中の情報のヘッダが少なくとも５ワードであるかどうかを判断することもできる。処理デバイスはまた、情報のパケットの合計の長さがＭＡＣレイヤによって指定された長さより大きくないかどうかを判断することもできる。
【０８０５】
処理デバイスは異なるペアの比較および分岐命令を、上記の各要件に割り当てることができ、これを表４４に示す。
【０８０６】
【表４４】
2005516432.tif 000051
【０８０７】
識別した第１および第２の命令は、図８７のステップ１４０２および１４０４に対応する。第３および第４の命令は、図８７のステップ１４０６および１４０８に対応する。第５および第６の命令は、図８７のステップ１４１０および１４１２に対応する。ステップ７以下参照において指示された「追加の処理」は、図８７のステップ１４１２に対応する。
【０８０８】
上述の技術には欠点がある。すなわち、プログラム内の分岐命令の増殖により、処理デバイスの効率が低減される。たとえば、各分岐命令は、実行のために規定量の時間を要する。したがって、多数のこのような命令を含むプログラムは処理の遅延を被る可能性がある。さらに、いくつかの比較および分岐命令を含む非常に長いプログラムはまた、プログラムを格納するための十分なメモリ容量も必要とし、したがって、計算的に貧弱な技術環境において処理デバイスを配備するための努力を損なう。
【０８０９】
さらに、上記のＩＰｖ４の応用例では、処理デバイスは上述のエラー状態に比較的まれに出会う可能性がある。この意味では、これらの状態は「めったにない」と見なされる。それにもかかわらず、処理デバイスは、メイン処理ルーチン（たとえば、図８７のステップ１４１４内）に進む前に上述の６つのエラーチェック命令を通して順序付けなければならない。これらの要因に鑑みて、多数の分岐命令の使用は、ＩＰｖ４データの通常の処理の過程で容認されないボトルネックを課すように思われる。上記のすべての理由のため、分岐命令の使用は設計の実装に「高くつく」と見なされる。
【０８１０】
本明細書で説明した装置および方法は、いかなるタイプの処理環境にも適用可能である。たとえば、図８８は、１つのこのような汎用処理環境１５００を例示のために提供する。環境１５００は、中央処理装置（ＣＰＵ）１５０４を含む処理デバイス１５０２を含む。処理デバイス１５０２はまた、処理装置１５０４に結合された他の従来の処理装置も含むことができ、これはメモリ１５０８、キャッシュ１５０６および通信インターフェイス１５１０などである。ＣＰＵ１５０４は、マシン命令を実行するための中央エンジンとしての機能を果たす。メモリ１５０８（ランダムアクセスメモリまたはＲＡＭなど）およびキャッシュ１５０６は、プロセッサ１５０４によってその与えられた機能の実行において使用するためのプログラムコードおよび他の情報を格納するための従来の役割を果たす。通信インターフェイス１５１０は、ネットワーク１４０２、またはある他の周辺デバイスなど、外部機器とインターフェイスする従来の役割を果たす。
【０８１１】
処理デバイス１５０２はまた、様々な処理機能を実行するためのプログラム機能性１５１２も含む。このプログラム機能性１５１２を、メモリ（たとえば、メモリ１５０８、またはある他のメモリ）内に格納されたソフトウェアとして実装することができる。図８８に示すように、プログラム機能性１５１２は１つまたは複数のプログラム１５１４を含むことができ、これらは、本発明のユニークな分岐技術を使用するように特に設計され、これをより詳細に以下で説明する。
【０８１２】
処理デバイス１５０２は、特定の計算的役割を果たすための追加のハードウェアおよび／またはソフトウェアも含むことができる。たとえば、処理デバイス１５０２は、ネットワーク１５１６など、パケットネットワークとの通信のために特に適合されたハードウェアおよび／またはソフトウェア機能性を有する装置を含むことができる。たとえば、パケットネットワーク１５１６は、データをパケットフォーマットで送信するためのいかなるタイプのローカルエリアまたは広域ネットワークも含むことができる。具体的には、パケットネットワーク１５１６は、インターネットまたはイントラネットなど、ＩＰ／ＴＣＰプロトコルによって管理されたあるタイプのネットワークを含むことが好ましい。ネットワークは、いかなるタイプの物理リンクも含むことができ、これはファイバベースのリンク、ワイヤレスリンク、銅線ベースのリンクなどである。
【０８１３】
図８９は、処理装置１５０４の例示的アーキテクチャに関する追加の詳細を提供する。処理装置１５０４は、論理演算モジュール（ＡＬＵ）１６０２、コントロールロジックモジュール１６０４、入力／出力（Ｉ／Ｏ）ロジックモジュール１６０６、および様々な作業レジスタ１６０８を含むことができる。
【０８１４】
コントロールロジックモジュール１６０４は、マシン命令を復号化および実行するためのロジックを含む。このために、このモジュール１６０４は従来の機能を含むことができ、これは、命令が処理デバイス１５０２によって処理されている間にこれを保持するための命令レジスタ、プログラムカウンタなどである。コントロールロジックモジュール１６０４はさらに、状態フラグを格納するための１つまたは複数の記憶位置１６３０を含むことができる。背景技術のセクションで上述したように、処理デバイス１５０２は、命令が処理デバイス１５０２によって実行されるとき、状態フラグの内容を、命令の帰結を指示するように修正する。異なるメーカによって設計された異なる処理デバイスは、処理フラグの異なるセットを使用する。知られているフラグには、演算の結果のＭＳＢ（最上位ビット）に等しく、結果が負であるか負でないかを指示するＳＦフラグが含まれる。演算の結果が０である場合、ＺＦフラグが１に設定される。演算の結果が桁上げを生じる場合、ＣＦが１に設定される。さらに他のタイプのフラグが当業者に知られている。
【０８１５】
加えて、本明細書で説明する解決策は少なくとも１つの追加の状態フラグを提供し、これは「累積フラグ」１６３２と呼ばれる。他のフラグとは異なり、累積フラグ１６３２は、複数の命令の帰結を反映する値を提供することができる。たとえば、３つの比較命令の連続の後、状態フラグを、これらの３つの命令のいずれかが事前に確立された条件を満たすかどうかを指示するように設定することができる。すなわち、累積フラグ１６３２はこの場合、別々の比較命令の論理和を表す。フラグは「累積」と呼ばれ、これは、その最終ステータスが、別々の比較命令（または他の命令）において行なわれた別々の決定の累積を反映するという意味である。また、このフラグを「スティッキーフラグ」と呼ぶことも適切である。フラグは、多数のコンピュータ命令（多数の比較命令など）について設定されたまま残ることができるという意味で、「スティッキー」である。すなわち、既知の技術とは異なり、累積（またはスティッキー）フラグ１６３２は、あらゆるコンピュータ命令の後（あらゆる比較命令の後など）に変化しない。累積フラグの使用に関する追加の詳細を以下に提示する。
【０８１６】
ストレージ１６３０に格納されたフラグは、１つまたは複数のビットにおいて表現されたバイナリ情報を含むことができる。ストレージ１６３０は単一の累積フラグ、または多数の累積フラグを含むことができる。
【０８１７】
ＡＬＵ１６０２は様々な論理および算術演算を従来の方法で実行する。Ｉ／Ｏロジック１６０６は、処理装置１５０４と環境１５００内の他のモジュールの間の情報の転送を、従来の方法で調整する。作業レジスタ１６０８は、プログラム命令の実行で使用するための情報を保持し、様々な従来のアドレスレジスタおよび算術レジスタを含むことができる。
【０８１８】
図９０は、プログラム命令を累積フラグの値に基づいて実行するための例示的方法を記載する。この方法はステップ１４０２で開始し、ここで処理デバイスが第１の比較命令（すなわち、比較１命令）を実行する。上述のように、このステップで、第１のオペランドが第２のオペランドから減算される。処理デバイスはまた累積フラグの値を、比較１命令が第１の規定された条件を満たすかどうかを反映するように設定する。ステップ１４０４で、処理デバイスが第２の比較命令（すなわち、比較２命令）を実行する。処理デバイスはまた累積フラグの値を更新して、比較１命令が第１の規定された条件を満たすかどうか、または、比較２命令が第２の規定された条件を満たすかどうかを反映するようにする。ステップ１４０４で、処理デバイスは第３の比較命令（すなわち、比較３命令）を実行する。処理デバイスはまた累積フラグの値を更新して、比較１、比較２または比較３命令のいずれかがそれらの各規定された条件を満たすかどうかを反映するようにする。さらに追加の比較命令を含めることができる（が、例示しない）。
【０８１９】
一連の比較命令の後、ステップ１７０８で、処理デバイスは分岐命令を累積フラグの値に基づいて実行する。この段階で、累積フラグは、第１から第３の比較命令のいずれか１つが、その各規定された条件を満たす帰結を生じたかどうかを反映する。この意味では、累積フラグは、先行する比較ステップで生じた個々の状態フラグ値の論理和を反映する。これは、既知の従来技術とは好対照であり、従来技術では状態ビットが、最後に実行された単一の命令の帰結を厳密に反映した。
【０８２０】
累積フラグが設定される場合、処理デバイスが指示されたアドレス（この場合、アドレスＤ）に分岐する。累積フラグが設定されない場合、処理デバイスはプログラムの残りに進み、これを総称的に図９０で命令１７１０として表す。
【０８２１】
２つの実施例は、上述の技術の例示的使用をさらに明確にするために役立つ。
１）実施例Ａ：エラーチェック
図９０の技術を、エラーチェックの実行においてなど、多数の応用例に適用することができる。上述のように、ネットワークプロセッサはしばしば一連のエラーチェックを、規定のメイン処理タスクの実行前に実行する。ＩＰｖ４パケットネットワークプロトコルでは、たとえば、ネットワークプロセッサは、処理中の情報のプロトコルバージョンが４に等しいかどうかを判断するためにチェックする。処理デバイスはまた、処理中の情報のヘッダが少なくとも５ワードであるかどうかを判断することもできる。処理デバイスはまた、情報のパケットの合計の長さがＭＡＣレイヤによって指定された長さより大きくないかどうかを判断することもできる。
【０８２２】
図８７で説明した手法とは対照的に、図９０の技術は、上述の３つの比較演算とその後に続く単一の分岐命令を、３つの比較演算の累積帰結を反映する累積フラグに基づいて実行する。表４５は、図９０の技術を使用してエラーチェックを実行するために使用された一連の命令を例示する。
【０８２３】
【表４５】
2005516432.tif 000052
【０８２４】
第１から第３の命令は図９０のステップ１４０２から１７０６にそれぞれ対応する。これらの３つの比較演算の累積帰結は、３つの比較演算において反映されたエラー状態のいずれかが真である場合、累積フラグの値を設定する。第４の命令は図９０のステップ１７０８に対応する。ステップ７以下参照において指示された「追加の処理」は、図８８のステップ１７１０に対応する。
【０８２５】
図９０の技術と図８７の技術の比較は、従来技術に対する本発明の利点を例示する。たとえば、図８７の技術は６つの命令を使用してエラーチェックオペレーションを実施する。対照的に、図９０の技術は４つの命令のみを使用してエラーチェックを実施する。
【０８２６】
図９０の技術は、極度のエラー状態のいずれかが存在するときに単一の分岐命令を提供し、よって、個々のエラー状態に固有である分岐を提供しない。それにもかかわらず、これらの極度のエラー状態は比較的まれである。したがって、必要とされた分岐オペレーションの数を減らすことによってこれらのエラーをチェックするプロセスを合理化することが好ましい。エラー状態に出会う比較的まれな場合、処理デバイスは、ボトルネック状況を正常なエラーのない処理に与えることなく、別のルーチン内で障害の正確な原因を識別することができる。
【０８２７】
２）実施例２：論理演算（たとえば、ＡＮＤおよびＯＲ演算）
図９０の技術はまた、ＡＮＤおよびＯＲ論理演算を含む様々な演算など、様々な論理演算の実行を合理化することもできる。たとえば、プログラムが、以下の条件（１）が真である場合に分岐を必要とする場合を考察する。
ｉｆ（ａ＞＝７  ＡＮＤ  ｂ＜８）  ｔｈｅｎ  ｇｏｔｏ  ｌａｂｅｌＤ  （１）
既知の技術では、この条件のテストには比較および分岐命令の多数のペアの実行が必要となる。この技術では演算を、一連の比較演算とその後に続く単一の分岐命令を使用して実行することができる。
【０８２８】
具体的には、条件（１）を、先ずＯＲ論理を使用した否定において言い換えることができる（たとえば、式ｃ  ＡＮＤ  ｄを、ＮＯＴ（ＮＯＴ  ｃ  ＯＲ  ＮＯＴ  ｄ）として表すことができる）。これを考慮して、条件（１）を、累積フラグを使用して以下の一連の命令を実行することによって、実行することができる。
ｃｍｐ．ｏ．ｌｔ                  ａ，７
ｃｍｐ．ｇｅ                      ｂ，８
ｂｃ．ａｃｃｕｍｕｌａｔｉｖｅ０  ｌａｂｅｌＤ
【０８２９】
第１の命令は処理デバイスに、オペランド「ａ」を値７と比較し、次いでオペランド「ａ」が７以下である場合、累積フラグを設定する（また、そうでない場合はこれをクリアする）ように命令する。第２の命令は処理デバイスに、オペランド「ｂ」を値８と比較し、次いでオペランド「ｂ」が８以上である場合、累積フラグを設定するように命令する。これらの演算は条件（１）の反対であり、これは、これらの命令がこの式の否定の対応物を使用して実行中であるからであることに留意されたい。第３の命令は処理デバイスに、累積フラグの最後の値が０である場合、ラベルＤに分岐するように命令する。
【０８３０】
以下の真理値表４６は、オペランド「ａ」および「ｂ」の入力値に応じて異なるシナリオを例示する。
【０８３１】
【表４６】
2005516432.tif 000053
【０８３２】
類似であるが相補的な一連の命令を使用して、以下の条件を実装することができる。
ｉｆ（ａ＞＝７  ＯＲ  ｂ＜８）  ｔｈｅｎ  ｇｏｔｏ  ｌａｂｅｌＤ  （２）
すなわち、この条件を実装するための命令は以下の通りである。
ｃｍｐ．ｏ．ｇｅ                  ａ，７
ｃｍｐ．ｌｔ                      ｂ，８
ｂｃ．ａｃｃｕｍｕｌａｔｉｖｅ１  ｌａｂｅｌＤ
【０８３３】
第１の命令は処理デバイスに、オペランド「ａ」を値７と比較し、次いでオペランド「ａ」が７以上である場合、累積フラグを設定する（また、そうでない場合はこれをクリアする）ように命令する。第２の命令は処理デバイスに、オペランド「ｂ」を値８と比較し、次いでオペランド「ｂ」が８未満である場合、累積フラグを設定するように命令する。第３の命令は処理デバイスに、累積フラグの最後の値が１である場合、ラベルＤに分岐するように命令する。上の条件で記載した演算をネゲートする必要はなく、これは論理和がこの場合に実行されている（ＡＮＤ演算ではない）からであることに留意されたい。
【０８３４】
最後に、以下の真理値表４７は、オペランド「ａ」および「ｂ」の入力値に応じて異なるシナリオを例示する。
【０８３５】
【表４７】
2005516432.tif 000054
【０８３６】
通常のプロセッサでは、いかなる状態コードにおいても多数の命令を予測することができる（条件付き）。ＡＲＭプロセッサでは、たとえば、４演算コードビットが必要とされる。しかし、本発明の一実施態様では、スティッキービットのみを使用し、２つの演算コードビット（１ビットは条件付き／無条件のため、１ビットはビット０／ビット１のため）のみを必要として、命令を予測することができる。
【０８３７】
上述の発明を、多数の比較命令とその後に続く単一分岐命令の関連で説明したが、これは他のタイプの処理命令への汎用的な適用可能性を有する。同様に、本発明を、いかなる数のＡＮＤ／ＯＲ演算と組み合わせたいかなる数の比較についても実装することができる（たとえば、（ａ＞７  ＡＮＤ  ｂ＝＝８）ＯＲ  ｃ！＝９））。一般に、第１または第２の命令がそれらの各規定された条件を満たすかどうかに基づいて累積フラグが設定される汎用的な場合に、本発明を適用することができる。次いで、第３の命令は、累積フラグの値において条件付きである、ある他の演算を実行する。
【０８３８】
本発明の一実施形態によれば、処理デバイスにおいてマシン命令を実行するための方法が提供される。この方法は、第１の命令を実行するステップと、第１の命令の実行の帰結が第１の指定された条件を満たすかどうかを識別し、第１の命令が第１の指定された条件を満たすかどうかを反映する累積フラグ結果を設定するステップとを含む。この方法は、少なくとも第２の追加の命令を実行するステップと、第２の命令の実行の帰結が第２の指定された条件を満たすかどうかを識別し、第１の命令または第２の命令がそれらの各第１および第２の指定された条件を満たすかどうかに応じて、累積フラグを更新するステップと、第３の命令を、第１および第２の命令の実行の後に続いて、累積フラグの値に基づいて実行するステップとをさらに含む。第１および第２の命令は、一実施形態では、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である。第３の命令は、一実施形態では、その分岐決定を累積フラグの値に基づかせる分岐命令である。もう１つの実施形態では、第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令であり、第３の命令は、その分岐決定を累積フラグの値に基づかせる分岐命令である。
【０８３９】
一実施形態では、上記の方法の比較命令は、２つの各エラー状態が存在するかどうかを決定し、分岐命令はその分岐決定を、第２の比較命令が実行された後の累積フラグの値によって反映されるように、２つの各エラー状態のいずれかが存在するかどうかに基づかせる。
【０８４０】
本発明のもう１つの実施形態によれば、処理デバイスによって実行するためのプログラムコードを含むコンピュータ可読媒体が提供される。この媒体は、第１のオペレーションを実行するための第１の命令であって、処理デバイスによって実行されるとき、第１の帰結の結果を生成する第１の命令と、第２のオペレーションを実行するための少なくとも第２の追加の命令であって、処理デバイスによって実行されるとき、第２の帰結の結果を生成する第２の命令と、第３のオペレーションを累積フラグに基づいて実行するための少なくとも追加の第３の命令とを含み、累積フラグは第１および第２の帰結の論理和を表す。一実施形態では、第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である。もう１つの実施形態では、第３の命令は、その分岐決定を累積フラグの値に基づかせる分岐命令である。さらにもう１つの実施形態では、第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令であり、第３の命令は、その分岐決定を累積フラグの値に基づかせる分岐命令である。
【０８４１】
一実施形態では、比較命令は、２つの各エラー状態が存在するかどうかを決定し、分岐命令はその分岐決定を、第２の比較命令が実行された後の累積フラグの値によって反映されるように、２つの各エラー状態のいずれかが存在するかどうかに基づかせる。
【０８４２】
本発明のもう１つの実施形態によれば、マシン命令を実行するための装置が提供される。この装置は、累積フラグを格納するためのストレージと、命令を実行するため、かつ、命令の帰結がそれぞれ規定された条件を満たすかどうかを判断するためのロジックと、累積フラグを、命令の帰結を反映するように設定するためのロジックとを含み、累積フラグを設定するためのロジックは、累積フラグの値を少なくとも第１および第２の命令の論理和に基づいて決定するためのロジックを含み、命令を実行するためのロジックもまた、少なくとも追加の第３の命令を、ストレージに格納された累積フラグの値に基づいて実行するためのロジックを含む。一実施形態では、第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である。第３の命令は、その分岐決定を累積フラグの値に基づかせる分岐命令を含むことができる。さらに、第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令を含むことができ、第３の命令は、その分岐決定を累積フラグの値に基づかせる分岐命令である。比較命令は、一実施形態では、２つの各エラー状態が存在するかどうかを決定し、分岐命令はその分岐決定を、第２の比較命令が実行された後の累積フラグの値によって反映されるように、２つの各エラー状態のいずれかが存在するかどうかに基づかせる。
【０８４３】
本発明の追加の実施形態によれば、マシン命令を実行するための装置が提供される。この装置は、累積フラグを格納するためのストレージと、命令を実行するため、かつ、命令の帰結が各規定された条件を満たすかどうかを判断するためのロジックと、累積フラグを、実行された命令の帰結に応じて設定するためのロジックであって、累積フラグを設定するためのロジックは、累積フラグの値を、少なくとも２つの命令のグループ内の少なくとも１つの命令が、その各規定された条件を満たした帰結を有したかどうかに基づいて決定するためのロジックを含むロジックと、処理デバイスによって実行されるとき、第１の帰結の結果を生成する、第１のオペレーションを実行するための第１の命令と、実行するためのロジックによって実行されるとき、第２の帰結の結果を生成する、第２のオペレーションを実行するための少なくとも１つの第２の追加の命令と、第３のオペレーションを累積フラグに基づいて実行するための少なくとも１つの追加の第３の命令とを含む複数の命令を含むプログラムを格納するためのもう１つのストレージとを含む。
【０８４４】
第１および第２の命令は、一実施形態では、それぞれ第１のオペランドを第２のオペランドと比較する比較命令である。第３の命令は、その分岐決定を累積フラグの値に基づかせる分岐命令を含むことができる。さらに、第１および第２の命令は、それぞれ第１のオペランドを第２のオペランドと比較する比較命令を含むことができ、第３の命令は、その分岐決定を累積フラグの値に基づかせる分岐命令を含む。
【０８４５】
一実施形態では、比較命令は、２つの各エラー状態が存在するかどうかを決定し、分岐命令はその分岐決定を、第２の比較命令が実行された後の累積フラグの値によって反映されるように、２つの各エラー状態のいずれかが存在するかどうかに基づかせる。
【０８４６】
前述の説明は多数の詳細および特定性を含むが、これらは説明のためにのみ含まれており、本発明の限定として解釈されるべきではないことを理解されたい。上述の実施形態への多数の修正を、本発明の精神および範囲から逸脱することなく行なうことができる。
【図面の簡単な説明】
【０８４７】
【図１】典型的なシステムオンチップを例示するブロック図である。
【図２】本発明の少なくとも１つの実施形態によるリングアーキテクチャを例示する概略図である。
【図３】本発明の少なくとも１つの実施形態による例示的列挙プロセスを例示する流れ図である。
【図４】本発明の少なくとも１つの実施形態によるクロックシステムにおけるタイミングの問題を例示する概略図である。
【図５】本発明の少なくとも１つの実施形態によるクロックシステムにおけるタイミングの問題を例示する概略図である。
【図６】本発明の少なくとも１つの実施形態によるクロックシステムにおけるタイミングの問題を例示する概略図である。
【図７】本発明の少なくとも１つの実施形態によるクロックシステムにおけるタイミングの問題を例示する概略図である。
【図８】本発明の少なくとも１つの実施形態によるクロックシステムにおけるタイミングの問題を例示する概略図である。
【図９】本発明の少なくとも１つの実施形態による、リングネットワークにおけるデータフローにクロック信号を反対方向で提供するためのメカニズムを例示する概略図である。
【図１０】本発明の少なくとも１つの実施形態による、リングネットワークにおけるデータフローにクロック信号を同一方向で提供するためのメカニズムを例示する概略図である。
【図１１】本発明の少なくとも１つの実施形態による、リングネットワークにおけるリングインターフェイスのタイミングインターフェイスの例示的実施態様を例示する概略図である。
【図１２】本発明の少なくとも１つの実施形態によるリングネットワークにおけるレイテンシの問題を例示する概略図である。
【図１３】本発明の少なくとも１つの実施形態によるリングネットワークにおけるブリッジの例示的実施態様を例示する概略図である。
【図１４】本発明の少なくとも１つの実施形態によるリングネットワークにおけるブリッジの例示的実施態様を例示する概略図である。
【図１５】本発明の少なくとも１つの実施形態による、ブリッジを有するリングネットワークにおける例示的列挙プロセスを例示する概略図である。
【図１６】本発明の少なくとも１つの実施形態による、リングネットワークにおけるブリッジの同じインターフェイスで同時に受信される複数のメッセージのための、例示的優先権方式を例示する概略図である。
【図１７】本発明の少なくとも１つの実施形態によるブリッジの例示的実施態様を例示する概略図である。
【図１８】本発明の少なくとも１つの実施形態による、リングネットワークにおける浮遊メッセージの除去のための例示的プロセスを例示する概略図である。
【図１９】本発明の少なくとも１つの実施形態による、リングネットワークにおける浮遊メッセージの除去のための例示的プロセスを例示する概略図である。
【図２０】本発明の少なくとも１つの実施形態による、多数のブリッジを有する例示的リングネットワークを例示する概略図である。
【図２１】本発明の少なくとも１つの実施形態による、多数のブリッジを有する例示的リングネットワークを例示する概略図である。
【図２２】本発明の少なくとも１つの実施形態による、多数のブリッジを有する例示的リングネットワークを例示する概略図である。
【図２３】本発明の少なくとも１つの実施形態による、リングネットワークにおけるスキャンインターフェイスの例示的実施態様を例示する概略図である。
【図２４】本発明の少なくとも１つの実施形態による、リングネットワークにおけるスキャンインターフェイスの例示的実施態様を例示する概略図である。
【図２５】本発明の少なくとも１つの実施形態による、リングネットワークにおけるスキャンインターフェイスの例示的実施態様を例示する概略図である。
【図２６】本発明の少なくとも１つの実施形態による、リングネットワークにおける２つのメンバの間の例示的インターフェイス信号を例示する概略図である。
【図２７】本発明の少なくとも１つの実施形態によるリングインターフェイスの例示的実施態様を例示する概略図である。
【図２８】本発明の少なくとも１つの実施形態によるリングインターフェイスの例示的実施態様を例示する概略図である。
【図２９】本発明の少なくとも１つの実施形態による、リングネットワークにおけるメッセージの指定受信者を決定するための例示的プロセスを例示する流れ図である。
【図３０】本発明の少なくとも１つの実施形態による、リングネットワークにおけるリングインターフェイス内の例示的シグナリングを例示する概略図である。
【図３１】本発明の少なくとも１つの実施形態による、リングネットワークにおけるリングインターフェイス内の例示的シグナリングを例示する概略図である。
【図３２】本発明の少なくとも１つの実施形態による、リングネットワークにおけるリングインターフェイス内の例示的シグナリングを例示する概略図である。
【図３３】本発明の少なくとも１つの実施形態による、リングネットワークにおけるリングインターフェイス内の例示的シグナリングを例示する概略図である。
【図３４】本発明の少なくとも１つの実施形態による、レイテンシを最小限にするためのリングネットワークにおけるブリッジの例示的使用を例示する概略図である。
【図３５】本発明の少なくとも１つの実施形態による外部リングインターフェイスを例示する概略図である。
【図３６】本発明の少なくとも１つの実施形態による、リングアーキテクチャを利用した例示的システムオンチップを例示するブロック図である。
【図３７】本発明の少なくとも１つの実施形態による、図３６のシステムオンチップの例示的ネットワークプロセッサを例示する概略図である。
【図３８】本発明の少なくとも１つの実施形態による、ネットワークプロセッサにおける低オーバーヘッドのタスクスイッチを例示する流れ図である。
【図３９】本発明の少なくとも１つの実施形態による、ネットワークプロセッサにおける例示的データパスを例示する流れ図である。
【図４０】本発明の少なくとも１つの実施形態によるネットワークプロセッサの例示的状態リソースを例示するブロック図である。
【図４１】本発明の少なくとも１つの実施形態による、ネットワークプロセッサの汎用レジスタのレジスタｒ１の例示的実施態様を例示するブロック図である。
【図４２】本発明の少なくとも１つの実施形態による、ネットワークプロセッサの汎用レジスタの様々なレジスタを例示するブロック図である。
【図４３】本発明の少なくとも１つの実施形態による、ネットワークプロセッサのための例示的ソフトウェアモデルを例示するブロック図である。
【図４４】本発明の少なくとも１つの実施形態による例示的ネットワーク・プロセッサ・パイプラインを例示する流れ図である。
【図４５】本発明の少なくとも１つの実施形態による例示的ネットワーク・プロセッサ・パイプラインのタイミングを例示する流れ図である。
【図４６】本発明の少なくとも１つの実施形態による、ネットワークプロセッサにおける実施のための例示的内部メモリを例示する概略図である。
【図４７】本発明の少なくとも１つの実施形態による例示的ネットワークプロセッサの概略図である。
【図４８】本発明の一実施形態による例示的マルチリーダエージェントを例示する概略図である。
【図４９】本発明の一実施形態による例示的データ位置合わせおよびパッキングプロセスを例示する流れ図である。
【図５０】本発明の一実施形態による、マルチリーダエージェントバスからマルチリーダオペレーションへのデータのマッピングを例示する流れ図である。
【図５１】本発明の一実施形態による、ネットワークプロセッサの例示的メッセージセンダを例示する概略図である。
【図５２】本発明の一実施形態による、エージェント書き込みコマンドの、メッセージへの例示的マッピングを例示する流れ図である。
【図５３】本発明の一実施形態による例示的直接メモリアクセスのエージェントモジュールを例示する概略図である。
【図５４】エージェントバス上のデータの、直接メモリアクセスコマンドへの例示的マッピングを例示する流れ図である。
【図５５】本発明の一実施形態による例示的巡回冗長コードエージェントを例示する概略図である。
【図５６】本発明の一実施形態による、エージェントバス上のデータの、巡回冗長コードデータへのマッピングを例示する流れ図である。
【図５７】本発明の一実施形態による例示的タイマエージェントを例示する概略図である。
【図５８】本発明の一実施形態による、エージェントバス上のデータの、タイマデータへのマッピングを例示する流れ図である。
【図５９】本発明の一実施形態による例示的ドアベルエージェントの概略図である。
【図６０】本発明の一実施形態による、ドアベルエージェントによる使用のためのタスクデータの例示的符号化を例示する流れ図である。
【図６１】本発明の一実施形態による、リングアーキテクチャを実施する例示的通信プロセッサを例示するブロック図である。
【図６２】本発明の一実施形態による、図６１の例示的通信プロセッサを例示する概略図である。
【図６３】本発明の一実施形態による、通信プロセッサにおける外部リングインターフェイスの様々な実施態様を例示する概略図である。
【図６４】本発明の一実施形態による、通信プロセッサにおける外部リングインターフェイスの様々な実施態様を例示する概略図である。
【図６５】本発明の一実施形態による、通信プロセッサにおける外部リングインターフェイスの様々な実施態様を例示する概略図である。
【図６６】本発明の一実施形態による、通信プロセッサにおける外部リングインターフェイスの様々な実施態様を例示する概略図である。
【図６７】本発明の一実施形態による、通信プロセッサにおける外部リングインターフェイスの様々な実施態様を例示する概略図である。
【図６８】本発明の一実施形態による、通信プロセッサにおける外部リングインターフェイスの様々な実施態様を例示する概略図である。
【図６９】本発明の一実施形態による、通信プロセッサにおける外部リングインターフェイスの様々な実施態様を例示する概略図である。
【図７０】本発明の一実施形態による、通信プロセッサのための例示的プログラミングモジュールを例示するブロック図である。
【図７１】本発明の一実施形態による、通信プロセッサの例示的データパスおよびプロトコルパスを例示するブロック図である。
【図７２】本発明の一実施形態による、通信プロセッサにおいて利用される例示的ネットワークプロセッサを例示する概略図である。
【図７３】本発明の一実施形態による、通信プロセッサにおいて利用されるネットワークプロセッサの例示的処理パイプラインを例示する流れ図である。
【図７４】本発明の一実施形態による、通信プロセッサにおいて利用される例示的ペーシングプロセスを例示する流れ図である。
【図７５】本発明の一実施形態による、通信プロセッサにおいて利用される例示的ペーシングプロセスを例示する流れ図である。
【図７６】本発明の一実施形態による、通信システムにおける通信プロセッサの様々な例示的実施態様を例示する概略図である。
【図７７】本発明の一実施形態による、通信システムにおける通信プロセッサの様々な例示的実施態様を例示する概略図である。
【図７８】本発明の一実施形態による、通信システムにおける通信プロセッサの様々な例示的実施態様を例示する概略図である。
【図７９】本発明の一実施形態による、通信システムにおける通信プロセッサの様々な例示的実施態様を例示する概略図である。
【図８０】本発明の一実施形態による、通信システムにおける通信プロセッサの様々な例示的実施態様を例示する概略図である。
【図８１】本発明の一実施形態による、通信プロセッサの例示的フローマネージャ機能性を例示する流れ図である。
【図８２】本発明の一実施形態による、通信プロセッサのためのソフトウェア開発において使用するための例示的データプレーン開発を例示するブロック図である。
【図８３】本発明の一実施形態による例示的ソフトウェア開発モデルを例示するブロック図である。
【図８４】本発明の一実施形態による例示的ソフトウェア設計手法を例示するブロック図である。
【図８５】本発明の一実施形態による、通信プロセッサにおけるソフトウェアおよびインターフェイスの例示的パーティショニングを例示するブロック図である。
【図８６】本発明の一実施形態による、ネットワークプロセッサにおけるソフトウェアの例示的パーティショニングを例示するブロック図である。
【図８７】既知の多分岐技術を使用したプログラム命令を実行するための、典型的なプロセスを例示する流れ図である。
【図８８】本発明の少なくとも１つの実施形態による例示的処理環境を例示する概略図である。
【図８９】本発明の少なくとも１つの実施形態による、図８８の処理環境の処理装置の例示的アーキテクチャを例示する概略図である。
【図９０】本発明の少なくとも１つの実施形態による、累積フラグの値に基づいてプログラム命令を実行するための例示的プロセスを例示する流れ図である。
【図１】
2005516432.tif 000055
【図２】
2005516432.tif 000056
【図３】
2005516432.tif 000057
【図４】
2005516432.tif 000058
【図５】
2005516432.tif 000059
【図６】
2005516432.tif 000060
【図７】
2005516432.tif 000061
【図８】
2005516432.tif 000062
【図９】
2005516432.tif 000063
【図１０】
2005516432.tif 000064
【図１１】
2005516432.tif 000065
【図１２】
2005516432.tif 000066
【図１３】
2005516432.tif 000067
【図１４】
2005516432.tif 000068
【図１５】
2005516432.tif 000069
【図１６】
2005516432.tif 000070
【図１７】
2005516432.tif 000071
【図１８】
2005516432.tif 000072
【図１９】
2005516432.tif 000073
【図２０】
2005516432.tif 000074
【図２１】
2005516432.tif 000075
【図２２】
2005516432.tif 000076
【図２３】
2005516432.tif 000077
【図２４】
2005516432.tif 000078
【図２５】
2005516432.tif 000079
【図２６】
2005516432.tif 000080
【図２７】
2005516432.tif 000081
【図２８】
2005516432.tif 000082
【図２９】
2005516432.tif 000083
【図３０】
2005516432.tif 000084
【図３１】
2005516432.tif 000085
【図３２】
2005516432.tif 000086
【図３３】
2005516432.tif 000087
【図３４】
2005516432.tif 000088
【図３５】
2005516432.tif 000089
【図３６】
2005516432.tif 000090
【図３７】
2005516432.tif 000091
【図３８】
2005516432.tif 000092
【図３９】
2005516432.tif 000093
【図４０】
2005516432.tif 000094
【図４１】
2005516432.tif 000095
【図４２】
2005516432.tif 000096
【図４３】
2005516432.tif 000097
【図４４】
2005516432.tif 000098
【図４５】
2005516432.tif 000099
【図４６】
2005516432.tif 000100
【図４７】
2005516432.tif 000101
【図４８】
2005516432.tif 000102
【図４９】
2005516432.tif 000103
【図５０】
2005516432.tif 000104
【図５１】
2005516432.tif 000105
【図５２】
2005516432.tif 000106
【図５３】
2005516432.tif 000107
【図５４】
2005516432.tif 000108
【図５５】
2005516432.tif 000109
【図５６】
2005516432.tif 000110
【図５７】
2005516432.tif 000111
【図５８】
2005516432.tif 000112
【図５９】
2005516432.tif 000113
【図６０】
2005516432.tif 000114
【図６１】
2005516432.tif 000115
【図６２】
2005516432.tif 000116
【図６３】
2005516432.tif 000117
【図６４】
2005516432.tif 000118
【図６５】
2005516432.tif 000119
【図６６】
2005516432.tif 000120
【図６７】
2005516432.tif 000121
【図６８】
2005516432.tif 000122
【図６９】
2005516432.tif 000123
【図７０】
2005516432.tif 000124
【図７１】
2005516432.tif 000125
【図７２】
2005516432.tif 000126
【図７３】
2005516432.tif 000127
【図７４】
2005516432.tif 000128
【図７５】
2005516432.tif 000129
【図７６】
2005516432.tif 000130
【図７７】
2005516432.tif 000131
【図７８】
2005516432.tif 000132
【図７９】
2005516432.tif 000133
【図８０】
2005516432.tif 000134
【図８１】
2005516432.tif 000135
【図８２】
2005516432.tif 000136
【図８３】
2005516432.tif 000137
【図８４】
2005516432.tif 000138
【図８５】
2005516432.tif 000139
【図８６】
2005516432.tif 000140
【図８７】
2005516432.tif 000141
【図８８】
2005516432.tif 000142
【図８９】
2005516432.tif 000143
【図９０】
2005516432.tif 000144
【国際調査報告】
2005516432.tif 000145
2005516432.tif 000146
2005516432.tif 000147